Merge branch 'main' into pierremtb/issue4662-Point-and-click-deletion-of-Lofts-and-Offset-Planes
| 
		 Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 52 KiB  | 
| 
		 Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB  | 
| 
		 Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB  | 
| 
		 Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB  | 
| 
		 Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB  | 
| 
		 Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 66 KiB  | 
| 
		 Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB  | 
| 
		 Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 128 KiB  | 
| 
		 Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 48 KiB  | 
| 
		 Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB  | 
| 
		 Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB  | 
| 
		 Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB  | 
| 
		 Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB  | 
| 
		 Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB  | 
@ -156,13 +156,13 @@ test.describe('Text-to-CAD tests', () => {
 | 
			
		||||
    const cmdSearchBar = page.getByPlaceholder('Search commands')
 | 
			
		||||
    await expect(cmdSearchBar).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    const textToCadCommand = page.getByText('Text-to-CAD')
 | 
			
		||||
    const textToCadCommand = page.getByRole('option', { name: 'Text-to-CAD' })
 | 
			
		||||
    await expect(textToCadCommand.first()).toBeVisible()
 | 
			
		||||
    // Click the Text-to-CAD command
 | 
			
		||||
    await textToCadCommand.first().click()
 | 
			
		||||
 | 
			
		||||
    // Enter the prompt.
 | 
			
		||||
    const prompt = page.getByText('Prompt')
 | 
			
		||||
    const prompt = page.getByRole('textbox', { name: 'Prompt' })
 | 
			
		||||
    await expect(prompt.first()).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    // Type the prompt.
 | 
			
		||||
@ -224,13 +224,13 @@ test.describe('Text-to-CAD tests', () => {
 | 
			
		||||
    const cmdSearchBar = page.getByPlaceholder('Search commands')
 | 
			
		||||
    await expect(cmdSearchBar).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    const textToCadCommand = page.getByText('Text-to-CAD')
 | 
			
		||||
    const textToCadCommand = page.getByRole('option', { name: 'Text-to-CAD' })
 | 
			
		||||
    await expect(textToCadCommand.first()).toBeVisible()
 | 
			
		||||
    // Click the Text-to-CAD command
 | 
			
		||||
    await textToCadCommand.first().click()
 | 
			
		||||
 | 
			
		||||
    // Enter the prompt.
 | 
			
		||||
    const prompt = page.getByText('Prompt')
 | 
			
		||||
    const prompt = page.getByRole('textbox', { name: 'Prompt' })
 | 
			
		||||
    await expect(prompt.first()).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    const badPrompt = 'akjsndladf lajbhflauweyfaaaljhr472iouafyvsssssss'
 | 
			
		||||
@ -314,13 +314,13 @@ test.describe('Text-to-CAD tests', () => {
 | 
			
		||||
    const cmdSearchBar = page.getByPlaceholder('Search commands')
 | 
			
		||||
    await expect(cmdSearchBar).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    const textToCadCommand = page.getByText('Text-to-CAD')
 | 
			
		||||
    const textToCadCommand = page.getByRole('option', { name: 'Text-to-CAD' })
 | 
			
		||||
    await expect(textToCadCommand.first()).toBeVisible()
 | 
			
		||||
    // Click the Text-to-CAD command
 | 
			
		||||
    await textToCadCommand.first().click()
 | 
			
		||||
 | 
			
		||||
    // Enter the prompt.
 | 
			
		||||
    const prompt = page.getByText('Prompt')
 | 
			
		||||
    const prompt = page.getByRole('textbox', { name: 'Prompt' })
 | 
			
		||||
    await expect(prompt.first()).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    const badPrompt = 'akjsndladflajbhflauweyf15;'
 | 
			
		||||
@ -392,13 +392,13 @@ test.describe('Text-to-CAD tests', () => {
 | 
			
		||||
    const cmdSearchBar = page.getByPlaceholder('Search commands')
 | 
			
		||||
    await expect(cmdSearchBar).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    const textToCadCommand = page.getByText('Text-to-CAD')
 | 
			
		||||
    const textToCadCommand = page.getByRole('option', { name: 'Text-to-CAD' })
 | 
			
		||||
    await expect(textToCadCommand.first()).toBeVisible()
 | 
			
		||||
    // Click the Text-to-CAD command
 | 
			
		||||
    await textToCadCommand.first().click()
 | 
			
		||||
 | 
			
		||||
    // Enter the prompt.
 | 
			
		||||
    const prompt = page.getByText('Prompt')
 | 
			
		||||
    const prompt = page.getByRole('textbox', { name: 'Prompt' })
 | 
			
		||||
    await expect(prompt.first()).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    // Type the prompt.
 | 
			
		||||
@ -604,7 +604,7 @@ async function sendPromptFromCommandBar(page: Page, promptStr: string) {
 | 
			
		||||
    await page.waitForTimeout(1000)
 | 
			
		||||
 | 
			
		||||
    // Enter the prompt.
 | 
			
		||||
    const prompt = page.getByText('Prompt')
 | 
			
		||||
    const prompt = page.getByRole('textbox', { name: 'Prompt' })
 | 
			
		||||
    await expect(prompt.first()).toBeVisible()
 | 
			
		||||
 | 
			
		||||
    // Type the prompt.
 | 
			
		||||
 | 
			
		||||
@ -75,6 +75,7 @@ function CommandBarTextareaInput({
 | 
			
		||||
              target.selectionStart = selectionStart + 1
 | 
			
		||||
              target.selectionEnd = selectionStart + 1
 | 
			
		||||
            } else if (event.key === 'Enter') {
 | 
			
		||||
              event.preventDefault()
 | 
			
		||||
              formRef.current?.dispatchEvent(
 | 
			
		||||
                new Event('submit', { bubbles: true })
 | 
			
		||||
              )
 | 
			
		||||
 | 
			
		||||
@ -274,6 +274,35 @@ export const toolbarConfig: Record<ToolbarModeName, ToolbarMode> = {
 | 
			
		||||
          links: [],
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
      'break',
 | 
			
		||||
      [
 | 
			
		||||
        {
 | 
			
		||||
          id: 'text-to-cad',
 | 
			
		||||
          onClick: ({ commandBarSend }) =>
 | 
			
		||||
            commandBarSend({
 | 
			
		||||
              type: 'Find and select command',
 | 
			
		||||
              data: { name: 'Text-to-CAD', groupId: 'modeling' },
 | 
			
		||||
            }),
 | 
			
		||||
          icon: 'sparkles',
 | 
			
		||||
          status: 'available',
 | 
			
		||||
          title: 'Text-to-CAD',
 | 
			
		||||
          description: 'Generate geometry from a text prompt.',
 | 
			
		||||
          links: [],
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          id: 'prompt-to-edit',
 | 
			
		||||
          onClick: ({ commandBarSend }) =>
 | 
			
		||||
            commandBarSend({
 | 
			
		||||
              type: 'Find and select command',
 | 
			
		||||
              data: { name: 'Prompt-to-edit', groupId: 'modeling' },
 | 
			
		||||
            }),
 | 
			
		||||
          icon: 'sparkles',
 | 
			
		||||
          status: 'available',
 | 
			
		||||
          title: 'Prompt-to-Edit',
 | 
			
		||||
          description: 'Edit geometry based on a text prompt.',
 | 
			
		||||
          links: [],
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
    ],
 | 
			
		||||
  },
 | 
			
		||||
  sketching: {
 | 
			
		||||
 | 
			
		||||