entasis 0.10.2 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
- package/dist/attachments/disclosurePanel.svelte.js +277 -0
- package/dist/attachments/portal.d.ts +17 -1
- package/dist/attachments/portal.js +39 -2
- package/dist/attachments/spinnerOverlay.svelte.js +12 -0
- package/dist/attachments/transitionSize.d.ts +6 -0
- package/dist/attachments/transitionSize.js +30 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
- package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
- package/dist/components/AIAskUserQuestion/index.js +2 -0
- package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
- package/dist/components/AIAskUserQuestion/schemas.js +10 -3
- package/dist/components/AIChat/AIChat.svelte +10 -0
- package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
- package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
- package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
- package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
- package/dist/components/AIChat/AIChatSurface.svelte +30 -2
- package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
- package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
- package/dist/components/AIChat/aiChat.mcp.js +31 -15
- package/dist/components/AIChat/aiChat.props.d.ts +36 -10
- package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
- package/dist/components/AIChat/aiChat.theme.js +21 -4
- package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
- package/dist/components/AIChat/index.d.ts +1 -1
- package/dist/components/AIComposer/AIComposer.svelte +102 -5
- package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
- package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
- package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
- package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
- package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
- package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
- package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
- package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
- package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
- package/dist/components/AIComposer/aiComposer.theme.js +37 -5
- package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
- package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
- package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
- package/dist/components/AIContext/AIContext.svelte +7 -3
- package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
- package/dist/components/AIContext/aiContext.mcp.js +1 -1
- package/dist/components/AIContext/aiContext.props.d.ts +4 -1
- package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
- package/dist/components/AIContext/aiContext.theme.js +7 -2
- package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
- package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
- package/dist/components/AIMarker/AIMarker.svelte +2 -0
- package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
- package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
- package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
- package/dist/components/AIMarker/aiMarker.theme.js +2 -2
- package/dist/components/AIMessage/AIMessage.svelte +38 -16
- package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
- package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
- package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
- package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
- package/dist/components/AIMessage/aiMessage.theme.js +91 -32
- package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
- package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
- package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
- package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
- package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
- package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
- package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
- package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
- package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
- package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
- package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
- package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
- package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
- package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
- package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
- package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
- package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
- package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
- package/dist/components/AIThread/AIThread.svelte +378 -95
- package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
- package/dist/components/AIThread/AIThreadItems.svelte +266 -64
- package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
- package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
- package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
- package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
- package/dist/components/AIThread/aiThread.mcp.js +34 -20
- package/dist/components/AIThread/aiThread.props.d.ts +73 -8
- package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
- package/dist/components/AIThread/aiThread.theme.js +108 -9
- package/dist/components/AIThread/index.d.ts +1 -1
- package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
- package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
- package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
- package/dist/components/AIThread/threadRenderItems.js +265 -77
- package/dist/components/AIThread/threadScrollController.d.ts +0 -8
- package/dist/components/AIThread/threadScrollController.js +2 -39
- package/dist/components/AIThread/threadTools.d.ts +11 -0
- package/dist/components/AIThread/threadTools.js +79 -0
- package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
- package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
- package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
- package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
- package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
- package/dist/components/AITool/AITool.svelte +56 -21
- package/dist/components/AITool/AIToolCallList.svelte +79 -29
- package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
- package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
- package/dist/components/AITool/AIToolValueSection.svelte +126 -28
- package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolValueTree.svelte +11 -16
- package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
- package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
- package/dist/components/AITool/aiTool.mcp.js +36 -8
- package/dist/components/AITool/aiTool.props.d.ts +52 -6
- package/dist/components/AITool/aiTool.theme.d.ts +117 -39
- package/dist/components/AITool/aiTool.theme.js +144 -140
- package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
- package/dist/components/AITool/aiToolClock.svelte.js +62 -0
- package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
- package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
- package/dist/components/AITool/index.d.ts +2 -1
- package/dist/components/AITool/index.js +1 -0
- package/dist/components/AITool/toolRendering.d.ts +33 -1
- package/dist/components/AITool/toolRendering.js +179 -15
- package/dist/components/AITool/toolValueTree.d.ts +14 -1
- package/dist/components/AITool/toolValueTree.js +126 -27
- package/dist/components/Accordion/Accordion.svelte +109 -109
- package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
- package/dist/components/Accordion/AccordionPanel.svelte +64 -0
- package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
- package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
- package/dist/components/Accordion/accordion.attributes.js +20 -0
- package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
- package/dist/components/Accordion/accordion.mcp.js +78 -22
- package/dist/components/Accordion/accordion.props.d.ts +54 -10
- package/dist/components/Accordion/accordion.theme.d.ts +3 -0
- package/dist/components/Accordion/accordion.theme.js +4 -0
- package/dist/components/Accordion/index.d.ts +1 -0
- package/dist/components/Accordion/index.js +1 -0
- package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
- package/dist/components/Avatar/Avatar.svelte +60 -10
- package/dist/components/Avatar/AvatarGroup.svelte +9 -0
- package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
- package/dist/components/Avatar/avatar.mcp.js +13 -5
- package/dist/components/Avatar/avatar.props.d.ts +28 -1
- package/dist/components/Avatar/avatar.theme.js +3 -3
- package/dist/components/Avatar/index.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
- package/dist/components/Button/Button.svelte +35 -15
- package/dist/components/Button/button.mcp.d.ts +1 -1
- package/dist/components/Button/button.mcp.js +8 -4
- package/dist/components/Button/button.props.d.ts +23 -8
- package/dist/components/Button/button.theme.d.ts +12 -0
- package/dist/components/Button/button.theme.js +17 -4
- package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
- package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
- package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
- package/dist/components/Collapsible/Collapsible.svelte +125 -19
- package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
- package/dist/components/Collapsible/collapsible.attributes.js +17 -0
- package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
- package/dist/components/Collapsible/collapsible.mcp.js +62 -12
- package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
- package/dist/components/Collapsible/collapsible.theme.js +3 -1
- package/dist/components/Collapsible/index.d.ts +1 -0
- package/dist/components/Collapsible/index.js +1 -0
- package/dist/components/Command/Command.svelte +56 -14
- package/dist/components/Command/command.mcp.d.ts +1 -1
- package/dist/components/Command/command.mcp.js +12 -6
- package/dist/components/Command/command.props.d.ts +39 -6
- package/dist/components/Command/command.state.svelte.d.ts +40 -11
- package/dist/components/Command/command.state.svelte.js +75 -28
- package/dist/components/Command/command.theme.js +4 -3
- package/dist/components/Confirmation/Confirmation.svelte +72 -31
- package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
- package/dist/components/Confirmation/confirmation.mcp.js +5 -4
- package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
- package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
- package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
- package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
- package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
- package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
- package/dist/components/DataTable/DataTable.svelte +4 -9
- package/dist/components/DataTable/DataTableEditor.svelte +5 -0
- package/dist/components/DataTable/DataTableFilter.svelte +1 -0
- package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
- package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
- package/dist/components/DataTable/dataTable.mcp.js +4 -2
- package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
- package/dist/components/DataTable/dataTable.theme.js +9 -6
- package/dist/components/Dialog/Dialog.svelte +120 -35
- package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
- package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
- package/dist/components/Dialog/dialog.api.d.ts +65 -0
- package/dist/components/Dialog/dialog.api.js +1 -0
- package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
- package/dist/components/Dialog/dialog.attributes.js +19 -0
- package/dist/components/Dialog/dialog.indent.d.ts +6 -0
- package/dist/components/Dialog/dialog.indent.js +16 -0
- package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
- package/dist/components/Dialog/dialog.mcp.js +195 -22
- package/dist/components/Dialog/dialog.props.d.ts +102 -19
- package/dist/components/Dialog/dialog.snap.d.ts +40 -0
- package/dist/components/Dialog/dialog.snap.js +78 -0
- package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
- package/dist/components/Dialog/dialog.state.svelte.js +525 -66
- package/dist/components/Dialog/dialog.theme.d.ts +48 -0
- package/dist/components/Dialog/dialog.theme.js +32 -9
- package/dist/components/Dialog/index.d.ts +4 -1
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
- package/dist/components/DocumentViewer/documentOutput.js +2 -1
- package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
- package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
- package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
- package/dist/components/Form/Ask/Ask.svelte +9 -13
- package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
- package/dist/components/Form/Ask/ask.mcp.js +1 -1
- package/dist/components/Form/Ask/ask.props.d.ts +1 -1
- package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
- package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
- package/dist/components/Form/Autocomplete/index.d.ts +3 -0
- package/dist/components/Form/Autocomplete/index.js +2 -0
- package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
- package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
- package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
- package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
- package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
- package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
- package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
- package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
- package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
- package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
- package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
- package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
- package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
- package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
- package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
- package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
- package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
- package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
- package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
- package/dist/components/Form/Combobox/Combobox.svelte +145 -185
- package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
- package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
- package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
- package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
- package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.items.js +68 -0
- package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
- package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
- package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
- package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
- package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
- package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
- package/dist/components/Form/Combobox/combobox.theme.js +37 -1
- package/dist/components/Form/Combobox/index.d.ts +2 -1
- package/dist/components/Form/Combobox/index.js +1 -0
- package/dist/components/Form/DateInput/DateInput.svelte +11 -3
- package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
- package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
- package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
- package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
- package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
- package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
- package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
- package/dist/components/Form/Field/Field.svelte +258 -32
- package/dist/components/Form/Field/Field.svelte.d.ts +15 -6
- package/dist/components/Form/Field/FieldGroup.svelte +29 -0
- package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
- package/dist/components/Form/Field/field.d.ts +75 -10
- package/dist/components/Form/Field/field.mcp.d.ts +1 -1
- package/dist/components/Form/Field/field.mcp.js +158 -18
- package/dist/components/Form/Field/field.messages.d.ts +47 -0
- package/dist/components/Form/Field/field.messages.js +64 -0
- package/dist/components/Form/Field/field.state.svelte.d.ts +117 -40
- package/dist/components/Form/Field/field.state.svelte.js +525 -16
- package/dist/components/Form/Field/field.theme.d.ts +46 -0
- package/dist/components/Form/Field/field.theme.js +33 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
- package/dist/components/Form/Field/index.d.ts +5 -2
- package/dist/components/Form/Field/index.js +1 -0
- package/dist/components/Form/Field/schemas.js +7 -2
- package/dist/components/Form/File/FileInput.svelte +24 -3
- package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
- package/dist/components/Form/File/fileInput.mcp.js +1 -0
- package/dist/components/Form/Form/Form.svelte +49 -15
- package/dist/components/Form/Form/FormActions.svelte +3 -1
- package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
- package/dist/components/Form/Form/FormFieldRenderer.svelte +96 -12
- package/dist/components/Form/Form/FormFieldRenderer.svelte.d.ts +3 -2
- package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
- package/dist/components/Form/Form/form.d.ts +84 -11
- package/dist/components/Form/Form/form.mcp.d.ts +1 -1
- package/dist/components/Form/Form/form.mcp.js +178 -12
- package/dist/components/Form/Form/form.props.d.ts +32 -1
- package/dist/components/Form/Form/form.registry.d.ts +28 -0
- package/dist/components/Form/Form/form.registry.js +59 -0
- package/dist/components/Form/Form/form.state.svelte.d.ts +1186 -420
- package/dist/components/Form/Form/form.state.svelte.js +322 -28
- package/dist/components/Form/Form/index.d.ts +4 -1
- package/dist/components/Form/Form/index.js +1 -0
- package/dist/components/Form/Form/visibility.d.ts +3130 -1863
- package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
- package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
- package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1050 -408
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
- package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
- package/dist/components/Form/NumberInput/index.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
- package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
- package/dist/components/Form/PasswordInput/Password.svelte +28 -1
- package/dist/components/Form/PasswordInput/index.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
- package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
- package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
- package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
- package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
- package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
- package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
- package/dist/components/Form/PinInput/PinInput.svelte +44 -9
- package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
- package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
- package/dist/components/Form/PinInput/index.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
- package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
- package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
- package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
- package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
- package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
- package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
- package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
- package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
- package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
- package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
- package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
- package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
- package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
- package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
- package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
- package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
- package/dist/components/Form/Select/Select.svelte +186 -48
- package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
- package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
- package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
- package/dist/components/Form/Select/index.d.ts +2 -1
- package/dist/components/Form/Select/index.js +1 -0
- package/dist/components/Form/Select/select.align.d.ts +5 -0
- package/dist/components/Form/Select/select.align.js +19 -5
- package/dist/components/Form/Select/select.attributes.d.ts +36 -0
- package/dist/components/Form/Select/select.attributes.js +27 -0
- package/dist/components/Form/Select/select.mcp.d.ts +1 -1
- package/dist/components/Form/Select/select.mcp.js +103 -18
- package/dist/components/Form/Select/select.props.d.ts +87 -10
- package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
- package/dist/components/Form/Select/select.state.svelte.js +354 -59
- package/dist/components/Form/Select/select.theme.d.ts +21 -0
- package/dist/components/Form/Select/select.theme.js +22 -0
- package/dist/components/Form/Slider/Slider.svelte +54 -14
- package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
- package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
- package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
- package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
- package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
- package/dist/components/Form/Slider/index.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.js +55 -11
- package/dist/components/Form/Slider/slider.props.d.ts +35 -2
- package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
- package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
- package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
- package/dist/components/Form/Slider/slider.theme.js +35 -17
- package/dist/components/Form/Switch/Switch.svelte +61 -38
- package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
- package/dist/components/Form/Switch/switch.mcp.js +25 -5
- package/dist/components/Form/Switch/switch.props.d.ts +14 -1
- package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
- package/dist/components/Form/Switch/switch.theme.js +8 -3
- package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
- package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
- package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
- package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
- package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
- package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
- package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
- package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
- package/dist/components/Form/TextArea/TextArea.svelte +8 -0
- package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
- package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
- package/dist/components/Form/TextInput/TextInput.svelte +8 -1
- package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
- package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
- package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
- package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
- package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
- package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
- package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
- package/dist/components/HoverCard/HoverCard.svelte +100 -10
- package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
- package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
- package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
- package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
- package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
- package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
- package/dist/components/HoverCard/hoverCard.theme.js +9 -2
- package/dist/components/HoverCard/index.d.ts +1 -0
- package/dist/components/HoverCard/index.js +1 -0
- package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
- package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
- package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
- package/dist/components/Kanban/kanban.theme.js +7 -3
- package/dist/components/Layout/layoutSpacing.d.ts +2 -2
- package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
- package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
- package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
- package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
- package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
- package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
- package/dist/components/Map/maplibre-cdn.js +3 -2
- package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
- package/dist/components/Markdown/markdown.mcp.js +2 -1
- package/dist/components/Markdown/markdown.theme.js +18 -9
- package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
- package/dist/components/Menu/Menu.svelte +3 -3
- package/dist/components/Menu/Menu.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
- package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
- package/dist/components/Menu/MenuFloating.svelte +421 -74
- package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
- package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
- package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
- package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
- package/dist/components/Menu/MenuSearchField.svelte +54 -0
- package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
- package/dist/components/Menu/MenuStacked.svelte +404 -158
- package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
- package/dist/components/Menu/index.d.ts +2 -1
- package/dist/components/Menu/index.js +1 -0
- package/dist/components/Menu/menu.attributes.d.ts +37 -0
- package/dist/components/Menu/menu.attributes.js +28 -0
- package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
- package/dist/components/Menu/menu.filter.svelte.js +143 -0
- package/dist/components/Menu/menu.mcp.d.ts +1 -1
- package/dist/components/Menu/menu.mcp.js +227 -17
- package/dist/components/Menu/menu.platform.d.ts +5 -0
- package/dist/components/Menu/menu.platform.js +11 -0
- package/dist/components/Menu/menu.props.d.ts +172 -9
- package/dist/components/Menu/menu.theme.d.ts +147 -0
- package/dist/components/Menu/menu.theme.js +101 -0
- package/dist/components/Menu/menuTree.d.ts +35 -1
- package/dist/components/Menu/menuTree.js +158 -1
- package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
- package/dist/components/MenuBar/menuBar.mcp.js +4 -2
- package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
- package/dist/components/MenuOption/MenuOption.svelte +5 -1
- package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
- package/dist/components/MenuOption/menuOption.mcp.js +8 -0
- package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
- package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
- package/dist/components/MenuOption/menuOption.theme.js +24 -4
- package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
- package/dist/components/Mermaid/mermaid.mcp.js +8 -8
- package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
- package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
- package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
- package/dist/components/Mermaid/mermaid.theme.js +26 -1
- package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
- package/dist/components/Meter/Meter.svelte +110 -24
- package/dist/components/Meter/Meter.svelte.d.ts +12 -12
- package/dist/components/Meter/meter.mcp.d.ts +1 -1
- package/dist/components/Meter/meter.mcp.js +23 -37
- package/dist/components/Meter/meter.props.d.ts +36 -44
- package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
- package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/index.d.ts +4 -0
- package/dist/components/NavigationMenu/index.js +3 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
- package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
- package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
- package/dist/components/Overlay/Overlay.svelte +19 -30
- package/dist/components/Overlay/index.d.ts +1 -0
- package/dist/components/Overlay/index.js +1 -0
- package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
- package/dist/components/Overlay/overlay.attributes.js +14 -0
- package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
- package/dist/components/Overlay/overlay.mcp.js +21 -3
- package/dist/components/Overlay/overlay.props.d.ts +8 -4
- package/dist/components/Popover/Popover.svelte +163 -52
- package/dist/components/Popover/Popover.svelte.d.ts +23 -2
- package/dist/components/Popover/PopoverSession.svelte +12 -0
- package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
- package/dist/components/Popover/index.d.ts +10 -2
- package/dist/components/Popover/index.js +4 -1
- package/dist/components/Popover/popover.api.d.ts +83 -0
- package/dist/components/Popover/popover.api.js +1 -0
- package/dist/components/Popover/popover.attributes.d.ts +32 -0
- package/dist/components/Popover/popover.attributes.js +28 -0
- package/dist/components/Popover/popover.claims.d.ts +19 -0
- package/dist/components/Popover/popover.claims.js +45 -0
- package/dist/components/Popover/popover.mcp.d.ts +1 -1
- package/dist/components/Popover/popover.mcp.js +163 -31
- package/dist/components/Popover/popover.position.d.ts +226 -0
- package/dist/components/Popover/popover.position.js +402 -0
- package/dist/components/Popover/popover.props.d.ts +179 -24
- package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
- package/dist/components/Popover/popover.state.svelte.js +1034 -194
- package/dist/components/Popover/popover.theme.d.ts +15 -0
- package/dist/components/Popover/popover.theme.js +27 -2
- package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
- package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
- package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
- package/dist/components/PopupMenu/popupMenu.context.js +52 -0
- package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
- package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
- package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
- package/dist/components/Progress/Progress.svelte +160 -0
- package/dist/components/Progress/Progress.svelte.d.ts +4 -0
- package/dist/components/Progress/index.d.ts +3 -0
- package/dist/components/Progress/index.js +2 -0
- package/dist/components/Progress/progress.mcp.d.ts +1 -0
- package/dist/components/Progress/progress.mcp.js +101 -0
- package/dist/components/Progress/progress.props.d.ts +79 -0
- package/dist/components/Progress/progress.props.js +1 -0
- package/dist/components/Progress/progress.theme.d.ts +129 -0
- package/dist/components/Progress/progress.theme.js +83 -0
- package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
- package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
- package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
- package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
- package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
- package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
- package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
- package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
- package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
- package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
- package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
- package/dist/components/RichTextInput/suggestions.js +2 -0
- package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
- package/dist/components/ScrollArea/index.d.ts +2 -1
- package/dist/components/ScrollArea/index.js +1 -0
- package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
- package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
- package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
- package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
- package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
- package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
- package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
- package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
- package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
- package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
- package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
- package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
- package/dist/components/Sidebar/SidebarAction.svelte +13 -3
- package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
- package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
- package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
- package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
- package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
- package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
- package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
- package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
- package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +1 -0
- package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
- package/dist/components/Sidebar/sidebar-position.js +31 -2
- package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
- package/dist/components/Sidebar/sidebar.attributes.js +29 -0
- package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
- package/dist/components/Sidebar/sidebar.mcp.js +45 -10
- package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
- package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
- package/dist/components/Sidebar/sidebar.theme.js +113 -62
- package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
- package/dist/components/Stepper/Stepper.svelte +2 -0
- package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
- package/dist/components/Stepper/stepper.mcp.js +1 -0
- package/dist/components/Stepper/stepper.props.d.ts +5 -0
- package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
- package/dist/components/Stepper/stepper.state.svelte.js +31 -12
- package/dist/components/Tabbar/Tabbar.svelte +55 -16
- package/dist/components/Tabbar/index.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.js +26 -9
- package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
- package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
- package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
- package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
- package/dist/components/Tabs/Tabs.svelte +73 -16
- package/dist/components/Tabs/index.d.ts +2 -1
- package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
- package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
- package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
- package/dist/components/Tabs/tabs.mcp.js +22 -4
- package/dist/components/Tabs/tabs.props.d.ts +39 -12
- package/dist/components/Tabs/tabs.theme.js +3 -1
- package/dist/components/Theme/Theme.svelte +44 -27
- package/dist/components/Theme/helper.d.ts +16 -2
- package/dist/components/Theme/helper.js +46 -4
- package/dist/components/Theme/theme.mcp.d.ts +1 -1
- package/dist/components/Theme/theme.mcp.js +103 -0
- package/dist/components/Theme/theme.props.d.ts +16 -0
- package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
- package/dist/components/Theme/theme.state.svelte.js +18 -1
- package/dist/components/Toast/Toast.svelte +184 -39
- package/dist/components/Toast/Toaster.svelte +14 -10
- package/dist/components/Toast/index.d.ts +1 -0
- package/dist/components/Toast/toast.mcp.d.ts +1 -1
- package/dist/components/Toast/toast.mcp.js +47 -6
- package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
- package/dist/components/Toast/toast.state.svelte.js +513 -68
- package/dist/components/Toast/toast.theme.js +1 -1
- package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
- package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
- package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
- package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
- package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
- package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
- package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
- package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
- package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
- package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
- package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
- package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
- package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
- package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
- package/dist/components/Tooltip/Tooltip.svelte +4 -12
- package/dist/components/Tooltip/TooltipHost.svelte +136 -15
- package/dist/components/Tooltip/index.d.ts +1 -0
- package/dist/components/Tooltip/index.js +1 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
- package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
- package/dist/components/Tooltip/tooltip.attributes.js +28 -0
- package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
- package/dist/components/Tooltip/tooltip.mcp.js +111 -10
- package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
- package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
- package/dist/components/Tooltip/tooltip.surface.js +42 -0
- package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
- package/dist/components/Utils/BeforeHydratation.svelte +14 -3
- package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
- package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
- package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
- package/dist/generated/componentAliases.d.ts +3 -0
- package/dist/generated/componentAliases.js +3 -0
- package/dist/generated/componentContract.d.ts +79 -34
- package/dist/generated/componentContract.js +231 -6
- package/dist/generated/componentMcpRegistry.js +6 -0
- package/dist/i18n/ar.js +107 -3
- package/dist/i18n/context.svelte.d.ts +6 -0
- package/dist/i18n/context.svelte.js +12 -0
- package/dist/i18n/de.js +101 -3
- package/dist/i18n/en.d.ts +91 -2
- package/dist/i18n/en.js +101 -3
- package/dist/i18n/es.js +101 -3
- package/dist/i18n/fr.js +101 -3
- package/dist/i18n/ja.js +101 -3
- package/dist/i18n/pt.js +101 -3
- package/dist/i18n/zh.js +101 -3
- package/dist/tailwind/geometry.js +7 -0
- package/dist/tailwind/global.js +31 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/types.mcp.d.ts +1 -1
- package/dist/types/types.mcp.js +23 -0
- package/dist/utils/cspNonce.d.ts +16 -0
- package/dist/utils/cspNonce.js +39 -0
- package/dist/utils/cva/merge.d.ts +5 -1
- package/dist/utils/cva/merge.js +6 -4
- package/dist/utils/focus.d.ts +34 -0
- package/dist/utils/focus.js +93 -0
- package/dist/utils/focusHistory.d.ts +21 -0
- package/dist/utils/focusHistory.js +99 -0
- package/dist/utils/handlers.d.ts +7 -0
- package/dist/utils/handlers.js +14 -0
- package/dist/utils/hoverIntent.d.ts +42 -0
- package/dist/utils/hoverIntent.js +57 -0
- package/dist/utils/id.d.ts +7 -0
- package/dist/utils/id.js +15 -0
- package/dist/utils/layers.svelte.d.ts +32 -4
- package/dist/utils/layers.svelte.js +214 -21
- package/dist/utils/listFilter.d.ts +44 -0
- package/dist/utils/listFilter.js +130 -0
- package/dist/utils/match.d.ts +35 -0
- package/dist/utils/match.js +36 -0
- package/dist/utils/number.d.ts +126 -0
- package/dist/utils/number.js +401 -0
- package/dist/utils/openChange.d.ts +88 -0
- package/dist/utils/openChange.js +71 -0
- package/dist/utils/openLifecycle.svelte.d.ts +41 -0
- package/dist/utils/openLifecycle.svelte.js +134 -0
- package/dist/utils/pointerDrag.d.ts +10 -0
- package/dist/utils/pointerDrag.js +37 -2
- package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
- package/dist/utils/pragmaticDragAndDrop.js +8 -3
- package/dist/utils/range.d.ts +62 -0
- package/dist/utils/range.js +70 -0
- package/dist/utils/requestNativeSubmit.d.ts +17 -0
- package/dist/utils/requestNativeSubmit.js +47 -0
- package/dist/utils/safeArea.svelte.d.ts +10 -1
- package/dist/utils/safeArea.svelte.js +19 -11
- package/dist/utils/stateAttributes.d.ts +108 -0
- package/dist/utils/stateAttributes.js +78 -0
- package/dist/utils/swipeVelocity.d.ts +32 -0
- package/dist/utils/swipeVelocity.js +59 -0
- package/dist/utils/timer.svelte.d.ts +65 -2
- package/dist/utils/timer.svelte.js +159 -25
- package/dist/utils/trigger.d.ts +41 -0
- package/dist/utils/trigger.js +103 -0
- package/dist/utils/typeahead.d.ts +9 -0
- package/dist/utils/typeahead.js +21 -9
- package/dist/utils/useDndList.svelte.d.ts +1 -1
- package/dist/utils/useDndList.svelte.js +6 -23
- package/dist/utils/useFocusScope.svelte.d.ts +29 -0
- package/dist/utils/useFocusScope.svelte.js +189 -27
- package/dist/utils/useHoverAction.svelte.d.ts +44 -4
- package/dist/utils/useHoverAction.svelte.js +161 -51
- package/dist/utils/useKeyDown.svelte.d.ts +19 -2
- package/dist/utils/useKeyDown.svelte.js +19 -12
- package/dist/utils/useListNavigation.svelte.d.ts +94 -13
- package/dist/utils/useListNavigation.svelte.js +261 -35
- package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
- package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
- package/dist/utils/useNavigation.svelte.d.ts +36 -3
- package/dist/utils/useNavigation.svelte.js +699 -332
- package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
- package/dist/utils/usePressAndHold.svelte.js +191 -0
- package/dist/utils/useScrollLock.svelte.d.ts +20 -1
- package/dist/utils/useScrollLock.svelte.js +54 -13
- package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
- package/dist/utils/useSlidingIndicator.svelte.js +27 -5
- package/dist/utils/useTabBridge.svelte.d.ts +20 -0
- package/dist/utils/useTabBridge.svelte.js +109 -0
- package/dist/utils/values.d.ts +15 -0
- package/dist/utils/values.js +49 -0
- package/package.json +31 -2
- package/dist/generated/componentMcpRegistry.d.ts +0 -142
- package/dist/utils/useDrag.svelte.d.ts +0 -11
- package/dist/utils/useDrag.svelte.js +0 -55
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<script lang="ts" generics="TMessage extends AIThreadItem = AIThreadItem">
|
|
2
|
+
import { getContext } from 'svelte';
|
|
3
|
+
import type { Attachment } from 'svelte/attachments';
|
|
2
4
|
import { useClipboard } from '../../utils/useClipboard.svelte.js';
|
|
3
5
|
import Alert from '../Alert/Alert.svelte';
|
|
4
6
|
import Button from '../Button/Button.svelte';
|
|
@@ -7,6 +9,7 @@
|
|
|
7
9
|
import { copyIcon } from '../Icons/copy.js';
|
|
8
10
|
import { pencilSimpleIcon } from '../Icons/pencilSimple.js';
|
|
9
11
|
import Slot from '../Slot/Slot.svelte';
|
|
12
|
+
import { tooltip } from '../Tooltip/tooltip.attachment.svelte.js';
|
|
10
13
|
import type { AIThreadItem } from '../AIThread/aiThread.props.js';
|
|
11
14
|
import { getAIConversation } from '../AIConversation/aiConversation.state.svelte.js';
|
|
12
15
|
import type { AIMessageActionState, AIMessageActionsProps } from './aiMessageActions.props.js';
|
|
@@ -84,6 +87,12 @@
|
|
|
84
87
|
Boolean(customActions || actionState.canCopy || actionState.canEdit || actionState.canRetry)
|
|
85
88
|
);
|
|
86
89
|
const buttonSize = $derived(size === 'large' ? 'normal' : 'small');
|
|
90
|
+
// Icon-only buttons name themselves for assistive technology through `label`; the tooltip shows
|
|
91
|
+
// the same name to sighted pointer and keyboard users. Tooltips need a Theme (it hosts the
|
|
92
|
+
// shared surface), so outside one the buttons keep their accessible name only.
|
|
93
|
+
const hasTooltipHost = Boolean(getContext('entasisTheme'));
|
|
94
|
+
const withTooltip = (content: string): Attachment<HTMLElement> | undefined =>
|
|
95
|
+
hasTooltipHost ? tooltip({ content, position: 'bottom' }) : undefined;
|
|
87
96
|
|
|
88
97
|
function resolveRoleLayout(
|
|
89
98
|
value: AIThreadItem['role']
|
|
@@ -120,13 +129,11 @@
|
|
|
120
129
|
errorMessage = undefined;
|
|
121
130
|
try {
|
|
122
131
|
const didCopy = await copyMessage();
|
|
123
|
-
if (!didCopy) errorMessage =
|
|
132
|
+
if (!didCopy) errorMessage = t.aiMessageCopyFailed;
|
|
124
133
|
} catch (error) {
|
|
125
134
|
setActionError(
|
|
126
135
|
error,
|
|
127
|
-
clipboard.copied
|
|
128
|
-
? 'The message was copied, but the copy action failed.'
|
|
129
|
-
: 'Unable to copy this message.'
|
|
136
|
+
clipboard.copied ? t.aiMessageCopyCallbackFailed : t.aiMessageCopyFailed
|
|
130
137
|
);
|
|
131
138
|
}
|
|
132
139
|
}
|
|
@@ -136,7 +143,7 @@
|
|
|
136
143
|
try {
|
|
137
144
|
await editMessage();
|
|
138
145
|
} catch (error) {
|
|
139
|
-
setActionError(error,
|
|
146
|
+
setActionError(error, t.aiMessageEditFailed);
|
|
140
147
|
}
|
|
141
148
|
}
|
|
142
149
|
|
|
@@ -145,7 +152,7 @@
|
|
|
145
152
|
try {
|
|
146
153
|
await retryMessage();
|
|
147
154
|
} catch (error) {
|
|
148
|
-
setActionError(error,
|
|
155
|
+
setActionError(error, t.aiMessageRetryFailed);
|
|
149
156
|
}
|
|
150
157
|
}
|
|
151
158
|
|
|
@@ -170,6 +177,7 @@
|
|
|
170
177
|
variant="ghost"
|
|
171
178
|
label={actionState.copied ? t.copied : t.copy}
|
|
172
179
|
onclick={() => void handleCopy()}
|
|
180
|
+
{@attach withTooltip(actionState.copied ? t.copied : t.copy)}
|
|
173
181
|
class={classes.button({ size })}
|
|
174
182
|
>{@render (actionState.copied ? checkIcon : copyIcon)({ size: 14 })}</Button
|
|
175
183
|
>{/if}
|
|
@@ -180,6 +188,7 @@
|
|
|
180
188
|
variant="ghost"
|
|
181
189
|
label={t.aiMessageEdit}
|
|
182
190
|
onclick={() => void handleEdit()}
|
|
191
|
+
{@attach withTooltip(t.aiMessageEdit)}
|
|
183
192
|
class={classes.button({ size })}>{@render pencilSimpleIcon({ size: 14 })}</Button
|
|
184
193
|
>{/if}
|
|
185
194
|
{#if actionState.canRetry}<Button
|
|
@@ -189,11 +198,12 @@
|
|
|
189
198
|
variant="ghost"
|
|
190
199
|
label={t.aiMessageRetry}
|
|
191
200
|
onclick={() => void handleRetry()}
|
|
201
|
+
{@attach withTooltip(t.aiMessageRetry)}
|
|
192
202
|
class={classes.button({ size })}>{@render arrowsClockwiseIcon({ size: 14 })}</Button
|
|
193
203
|
>{/if}
|
|
194
204
|
{/if}
|
|
195
|
-
{#if errorMessage}<div data-slot="ai-message-actions-error" class={classes.error()}>
|
|
196
|
-
<Alert color="danger" variant="soft" description={errorMessage} />
|
|
197
|
-
</div>{/if}
|
|
198
205
|
</div>
|
|
206
|
+
{#if errorMessage}<div data-slot="ai-message-actions-error" class={classes.error()}>
|
|
207
|
+
<Alert {size} color="danger" variant="soft" description={errorMessage} />
|
|
208
|
+
</div>{/if}
|
|
199
209
|
{/if}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const aiMessageActionsDescription = "\n# AIMessageActions\n\nCopy, edit, and retry actions for an AI message. Defaults integrate with the nearest AIConversation.\n\n## Resolution and availability\n\n`message` supplies role and content. Direct `role` and `content` win, while `messageIndex`\nwins over the `index` alias. `copyable`, `editable`, and `retryable` win over the\ncompatibility `copy`, `edit`, and `retry` aliases.\n\nCopy requires non-empty content. Edit additionally requires a user role and either `onEdit` or a\nconversation. Retry requires an assistant role and either `onRetry` or a conversation plus a\nmessage index. Direct callbacks take precedence. Otherwise edit writes the content into the\nconversation input and retry targets the indexed message. Pass `conversation={null}` to disable\nscoped conversation lookup.\n\n`visibility` accepts `always`, `hover`, or `none`. `actions={false}` suppresses the\ncomplete surface. A supplied `actions` slot wins over the equivalent `children` slot. Both\nreceive complete `AIMessageActionState`, including the resolved size, capability flags, and\nawaitable copy, edit, and retry methods. `size` accepts `small`, `normal`, or `large` and\nscales the default controls. The copy callback runs only after clipboard success. Failures raised by\nthe default buttons render through the semantic error region.\n\n```svelte\n<script>\n import { AIMessageActions } from './index.ts';\n</script>\n\n{#snippet actions({ copied, copy })}\n <button type=\"button\" onclick={() => void copy()}>\n {copied ? 'Copied' : 'Copy answer'}\n </button>\n{/snippet}\n\n<AIMessageActions content=\"Answer\" {actions} />\n```\n\nThe root forwards native div attributes and attachments when actions are available, plus bindable\n`ref`, `class`, and `theme`. Theme parts cover `root`, `button`, and `error`, with role,\nvisibility, and size variants on the root and size variants on the button.\n";
|
|
1
|
+
export declare const aiMessageActionsDescription = "\n# AIMessageActions\n\nCopy, edit, and retry actions for an AI message. Defaults integrate with the nearest AIConversation.\n\n## Resolution and availability\n\n`message` supplies role and content. Direct `role` and `content` win, while `messageIndex`\nwins over the `index` alias. `copyable`, `editable`, and `retryable` win over the\ncompatibility `copy`, `edit`, and `retry` aliases.\n\nCopy requires non-empty content. Edit additionally requires a user role and either `onEdit` or a\nconversation. Retry requires an assistant role and either `onRetry` or a conversation plus a\nmessage index. Direct callbacks take precedence. Otherwise edit writes the content into the\nconversation input and retry targets the indexed message. Pass `conversation={null}` to disable\nscoped conversation lookup.\n\n`visibility` accepts `always`, `hover`, or `none`. `hover` reveals the row when its message\n(`group/message`) or the row itself is hovered or focused, and always shows it on touch screens,\nwhich cannot hover. The row takes layout space in every mode but `none`, and its buttons are\npulled out by their own inset so the first icon lines up with the text edge (the end edge for\nuser rows). The row is as wide as its buttons and never wraps, so a one-word message keeps its\nicons on one line. Each icon button keeps its accessible name and, inside a `Theme`, shows it as a\ntooltip. `actions={false}` suppresses the\ncomplete surface. A supplied `actions` slot wins over the equivalent `children` slot. Both\nreceive complete `AIMessageActionState`, including the resolved size, capability flags, and\nawaitable copy, edit, and retry methods. `size` accepts `small`, `normal`, or `large` and\nscales the default controls. The copy callback runs only after clipboard success. Failures raised by\nthe default buttons render through the semantic error region, placed after the button row (not\ninside it) and visible whatever the row's visibility.\n\n```svelte\n<script>\n import { AIMessageActions } from './index.ts';\n</script>\n\n{#snippet actions({ copied, copy })}\n <button type=\"button\" onclick={() => void copy()}>\n {copied ? 'Copied' : 'Copy answer'}\n </button>\n{/snippet}\n\n<AIMessageActions content=\"Answer\" {actions} />\n```\n\nThe root forwards native div attributes and attachments when actions are available, plus bindable\n`ref`, `class`, and `theme`. `setAIMessageActionsTheme` and `<Theme components>` overrides\napply under the `ai-message-actions` key. Theme parts cover `root`, `button`, and `error`, with role,\nvisibility, and size variants on the root and size variants on the button.\n";
|
|
@@ -15,12 +15,19 @@ message index. Direct callbacks take precedence. Otherwise edit writes the conte
|
|
|
15
15
|
conversation input and retry targets the indexed message. Pass \`conversation={null}\` to disable
|
|
16
16
|
scoped conversation lookup.
|
|
17
17
|
|
|
18
|
-
\`visibility\` accepts \`always\`, \`hover\`, or \`none\`. \`
|
|
18
|
+
\`visibility\` accepts \`always\`, \`hover\`, or \`none\`. \`hover\` reveals the row when its message
|
|
19
|
+
(\`group/message\`) or the row itself is hovered or focused, and always shows it on touch screens,
|
|
20
|
+
which cannot hover. The row takes layout space in every mode but \`none\`, and its buttons are
|
|
21
|
+
pulled out by their own inset so the first icon lines up with the text edge (the end edge for
|
|
22
|
+
user rows). The row is as wide as its buttons and never wraps, so a one-word message keeps its
|
|
23
|
+
icons on one line. Each icon button keeps its accessible name and, inside a \`Theme\`, shows it as a
|
|
24
|
+
tooltip. \`actions={false}\` suppresses the
|
|
19
25
|
complete surface. A supplied \`actions\` slot wins over the equivalent \`children\` slot. Both
|
|
20
26
|
receive complete \`AIMessageActionState\`, including the resolved size, capability flags, and
|
|
21
27
|
awaitable copy, edit, and retry methods. \`size\` accepts \`small\`, \`normal\`, or \`large\` and
|
|
22
28
|
scales the default controls. The copy callback runs only after clipboard success. Failures raised by
|
|
23
|
-
the default buttons render through the semantic error region
|
|
29
|
+
the default buttons render through the semantic error region, placed after the button row (not
|
|
30
|
+
inside it) and visible whatever the row's visibility.
|
|
24
31
|
|
|
25
32
|
\`\`\`svelte
|
|
26
33
|
<script>
|
|
@@ -37,6 +44,7 @@ the default buttons render through the semantic error region.
|
|
|
37
44
|
\`\`\`
|
|
38
45
|
|
|
39
46
|
The root forwards native div attributes and attachments when actions are available, plus bindable
|
|
40
|
-
\`ref\`, \`class\`, and \`theme\`.
|
|
47
|
+
\`ref\`, \`class\`, and \`theme\`. \`setAIMessageActionsTheme\` and \`<Theme components>\` overrides
|
|
48
|
+
apply under the \`ai-message-actions\` key. Theme parts cover \`root\`, \`button\`, and \`error\`, with role,
|
|
41
49
|
visibility, and size variants on the root and size variants on the button.
|
|
42
50
|
`;
|
|
@@ -1,24 +1,50 @@
|
|
|
1
1
|
import { cva, setComponentTheme, useComponentTheme } from '../../utils/cva/index.js';
|
|
2
|
+
// The action row takes layout space (it is never positioned over the next row) and its ghost
|
|
3
|
+
// buttons are pulled out by their own inset, so the first icon lines up with the edge of the text
|
|
4
|
+
// or bubble above: the start edge for assistant rows, the end edge for user rows. The row is as wide
|
|
5
|
+
// as its buttons and never wraps, whatever the width of a short bubble above it.
|
|
2
6
|
const defaultRoot = cva({
|
|
3
|
-
base: 'flex min-h-[var(--control-height-sm)] w-
|
|
7
|
+
base: 'flex min-h-[var(--control-height-sm)] w-max max-w-none shrink-0 flex-nowrap items-center gap-xs transition-opacity motion-reduce:transition-none',
|
|
4
8
|
variants: {
|
|
5
9
|
role: {
|
|
6
|
-
user: 'justify-end',
|
|
10
|
+
user: 'ms-auto justify-end',
|
|
7
11
|
assistant: 'justify-start',
|
|
8
|
-
system: 'justify-center',
|
|
12
|
+
system: 'mx-auto justify-center',
|
|
9
13
|
tool: 'justify-start'
|
|
10
14
|
},
|
|
11
15
|
visibility: {
|
|
12
|
-
|
|
16
|
+
// Revealed by hovering or focusing the row or its message; a touch screen cannot hover,
|
|
17
|
+
// so there the row always shows.
|
|
18
|
+
hover: 'opacity-0 group-hover/message:opacity-100 group-focus-within/message:opacity-100 hover:opacity-100 focus-within:opacity-100 pointer-coarse:opacity-100',
|
|
13
19
|
always: 'opacity-100',
|
|
14
20
|
none: 'hidden'
|
|
15
21
|
},
|
|
16
22
|
size: {
|
|
17
|
-
small: 'min-h-6 gap-micro
|
|
18
|
-
normal: 'min-h-[var(--control-height-sm)] gap-xs
|
|
19
|
-
large: 'min-h-[var(--control-height-md)] gap-sm
|
|
23
|
+
small: 'min-h-6 gap-micro',
|
|
24
|
+
normal: 'min-h-[var(--control-height-sm)] gap-xs',
|
|
25
|
+
large: 'min-h-[var(--control-height-md)] gap-sm'
|
|
20
26
|
}
|
|
21
27
|
},
|
|
28
|
+
compoundVariants: [
|
|
29
|
+
{
|
|
30
|
+
role: ['assistant', 'tool'],
|
|
31
|
+
size: 'small',
|
|
32
|
+
class: '-ms-[calc((var(--spacing)*6-0.75rem)/2)]'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
role: ['assistant', 'tool'],
|
|
36
|
+
size: 'normal',
|
|
37
|
+
class: '-ms-[calc((var(--control-height-sm)-0.875rem)/2)]'
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
role: ['assistant', 'tool'],
|
|
41
|
+
size: 'large',
|
|
42
|
+
class: '-ms-[calc((var(--control-height-md)-1.125rem)/2)]'
|
|
43
|
+
},
|
|
44
|
+
{ role: 'user', size: 'small', class: '-me-[calc((var(--spacing)*6-0.75rem)/2)]' },
|
|
45
|
+
{ role: 'user', size: 'normal', class: '-me-[calc((var(--control-height-sm)-0.875rem)/2)]' },
|
|
46
|
+
{ role: 'user', size: 'large', class: '-me-[calc((var(--control-height-md)-1.125rem)/2)]' }
|
|
47
|
+
],
|
|
22
48
|
defaultVariants: { role: 'assistant', visibility: 'always', size: 'normal' }
|
|
23
49
|
});
|
|
24
50
|
const defaultButton = cva({
|
|
@@ -32,11 +58,12 @@ const defaultButton = cva({
|
|
|
32
58
|
},
|
|
33
59
|
defaultVariants: { size: 'normal' }
|
|
34
60
|
});
|
|
35
|
-
|
|
61
|
+
// Rendered after the row, not inside it, so a message never widens or wraps the button row.
|
|
62
|
+
const defaultError = cva({ base: 'w-full min-w-0 pt-xs' });
|
|
36
63
|
export const aiMessageActionsTheme = {
|
|
37
64
|
root: defaultRoot,
|
|
38
65
|
button: defaultButton,
|
|
39
66
|
error: defaultError
|
|
40
67
|
};
|
|
41
68
|
export const setAIMessageActionsTheme = setComponentTheme('ai-message-actions');
|
|
42
|
-
export const useAIMessageActionsTheme = useComponentTheme('
|
|
69
|
+
export const useAIMessageActionsTheme = useComponentTheme('ai-message-actions', aiMessageActionsTheme);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { checkIcon } from '../Icons/check.js';
|
|
4
4
|
import Button from '../Button/Button.svelte';
|
|
5
5
|
import type { MenuItem } from '../Menu/menu.props.js';
|
|
6
|
-
import type {
|
|
6
|
+
import type { PopoverApi } from '../Popover/popover.api.js';
|
|
7
7
|
import PopupMenu from '../PopupMenu/PopupMenu.svelte';
|
|
8
8
|
import Slot from '../Slot/Slot.svelte';
|
|
9
9
|
import TextInput from '../Form/TextInput/TextInput.svelte';
|
|
@@ -138,13 +138,18 @@
|
|
|
138
138
|
if (tokens >= 1_000) return `${Math.round(tokens / 1_000)}K`;
|
|
139
139
|
return `${tokens}`;
|
|
140
140
|
}
|
|
141
|
-
|
|
141
|
+
/**
|
|
142
|
+
* `showProvider` is off where a provider heading already names the provider (or every model
|
|
143
|
+
* shares one), so a row never repeats it as its description. The selected row keeps its
|
|
144
|
+
* context-window badge next to the check.
|
|
145
|
+
*/
|
|
146
|
+
function modelItem(model: AIModelSelectorModel, showProvider = true): MenuItem {
|
|
142
147
|
return {
|
|
143
148
|
type: 'option',
|
|
144
149
|
title: model.label,
|
|
145
|
-
description: model.description ?? model.provider,
|
|
150
|
+
description: model.description ?? (showProvider ? model.provider : undefined),
|
|
146
151
|
prefix: model.icon,
|
|
147
|
-
suffix: selectedValue === model.id ?
|
|
152
|
+
suffix: selectedValue === model.id ? selectedSuffix : contextLabel(model.contextWindow),
|
|
148
153
|
disabled: disabled || model.disabled,
|
|
149
154
|
active: selectedValue === model.id,
|
|
150
155
|
class: classes.option({ selected: selectedValue === model.id }),
|
|
@@ -157,7 +162,7 @@
|
|
|
157
162
|
};
|
|
158
163
|
}
|
|
159
164
|
function groupItem(group: AIModelSelectorGroup): MenuItem {
|
|
160
|
-
const modelItems = (group.models ?? []).map(modelItem);
|
|
165
|
+
const modelItems = (group.models ?? []).map((model) => modelItem(model));
|
|
161
166
|
const groupItems = (group.groups ?? []).map(groupItem);
|
|
162
167
|
const menu = [
|
|
163
168
|
...modelItems,
|
|
@@ -210,8 +215,8 @@
|
|
|
210
215
|
const provider = model.provider ?? resolvedLabels.providerFallback;
|
|
211
216
|
providers.set(provider, [...(providers.get(provider) ?? []), model]);
|
|
212
217
|
}
|
|
213
|
-
|
|
214
|
-
|
|
218
|
+
// One provider needs no heading: it would only repeat what every row shares.
|
|
219
|
+
if (providers.size <= 1) return source.map((model) => modelItem(model, false));
|
|
215
220
|
return [...providers.entries()].flatMap(([provider, providerModels], index) => [
|
|
216
221
|
...(index > 0 ? [{ type: 'separator' } satisfies MenuItem] : []),
|
|
217
222
|
{
|
|
@@ -222,7 +227,7 @@
|
|
|
222
227
|
fullWidth: true,
|
|
223
228
|
class: classes.provider()
|
|
224
229
|
} satisfies MenuItem,
|
|
225
|
-
...providerModels.map(modelItem)
|
|
230
|
+
...providerModels.map((model) => modelItem(model, false))
|
|
226
231
|
]);
|
|
227
232
|
}
|
|
228
233
|
function resolveSupplementalItems(source: readonly AIModelSelectorMenuItem[]): MenuItem[] {
|
|
@@ -280,6 +285,14 @@
|
|
|
280
285
|
]);
|
|
281
286
|
</script>
|
|
282
287
|
|
|
288
|
+
{#snippet selectedSuffix()}
|
|
289
|
+
{@const context = contextLabel(selectedModel?.contextWindow)}
|
|
290
|
+
<span data-slot="ai-model-selector-selected" class={classes.optionMeta()}>
|
|
291
|
+
{#if context}<span>{context}</span>{/if}
|
|
292
|
+
{@render checkIcon({ size: 14 })}
|
|
293
|
+
</span>
|
|
294
|
+
{/snippet}
|
|
295
|
+
|
|
283
296
|
{#snippet emptyContent()}
|
|
284
297
|
<span data-slot="ai-model-selector-empty">
|
|
285
298
|
<Slot render={empty ?? resolvedLabels.empty} payload={selectorState} />
|
|
@@ -294,12 +307,13 @@
|
|
|
294
307
|
placeholder={resolvedLabels.searchPlaceholder}
|
|
295
308
|
label={resolvedLabels.searchPlaceholder}
|
|
296
309
|
theme={{ label: { base: 'sr-only' } }}
|
|
310
|
+
inputAttrs={{ 'data-1p-ignore': true }}
|
|
297
311
|
onValueChange={(nextValue: string | null) => setQuery(nextValue ?? '')}
|
|
298
312
|
/>{/if}
|
|
299
313
|
</div>
|
|
300
314
|
{/snippet}
|
|
301
315
|
|
|
302
|
-
{#snippet selectorTrigger(popover:
|
|
316
|
+
{#snippet selectorTrigger(popover: PopoverApi)}
|
|
303
317
|
{#if children}
|
|
304
318
|
<button
|
|
305
319
|
type="button"
|
|
@@ -318,7 +332,8 @@
|
|
|
318
332
|
<Button
|
|
319
333
|
type="button"
|
|
320
334
|
data-slot="ai-model-selector-trigger"
|
|
321
|
-
variant="
|
|
335
|
+
variant="ghost"
|
|
336
|
+
color="neutral"
|
|
322
337
|
size="small"
|
|
323
338
|
{disabled}
|
|
324
339
|
haspopup="menu"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const aiModelSelectorDescription = "\n# AIModelSelector\n\nModel selection built on Entasis `PopupMenu` and `Menu`. It accepts flat `models`, recursive `groups`, disabled entries, provider labels, optional keyword search, context-window metadata, and supplemental standard Menu items.\n\nBind `value`, `open`, and `query` for direct control. `defaultValue` and `defaultOpen` apply once when their live props are omitted; `onValueChange` receives `{ value, model }`, and `onOpenChange` reports component-owned disclosure changes. Set `searchable={false}` to remove the search header and ignore, without erasing, a bound query. When `value` is omitted or undefined inside `AIConversation`, selection reads and updates `conversation.selectedModel`. A direct string or `null` wins over provider state; `null` is the bindable controlled-empty value because Svelte substitutes prop fallbacks for `undefined`. `placeholder` follows the same omission rule before the compact `labels` object and conversation placeholder, with `null` suppressing visible placeholder text.\n\nThe `children` trigger, `search` header, and `empty` snippets receive `{ model, value, open, query, searchable, disabled, labels, select, setQuery, setOpen, toggle }`. The resolved `labels` cover the empty trigger, its accessible fallback name, search field, empty result, and providerless-group heading. The trigger remains owned by PopupMenu, so keyboard navigation and focus return continue to work with custom content. Theme slots cover the root, trigger, trigger content/icon/label, popover, search header, menu, provider headings, model options, nested groups, and empty state.\n\nSearch is case-insensitive across model id, label, provider, description, and `keywords`. A matching group label preserves that group; otherwise recursive groups retain only matching descendants. `menuItems` uses the public `MenuItem` union and is appended after the models, so recursive checked submenus can own reasoning effort, speed, verbosity, or provider-specific controls. Models without a provider use the configurable `providerFallback` heading,
|
|
1
|
+
export declare const aiModelSelectorDescription = "\n# AIModelSelector\n\nModel selection built on Entasis `PopupMenu` and `Menu`. It accepts flat `models`, recursive `groups`, disabled entries, provider labels, optional keyword search, context-window metadata, and supplemental standard Menu items.\n\nBind `value`, `open`, and `query` for direct control. `defaultValue` and `defaultOpen` apply once when their live props are omitted; `onValueChange` receives `{ value, model }`, and `onOpenChange` reports component-owned disclosure changes. Set `searchable={false}` to remove the search header and ignore, without erasing, a bound query. When `value` is omitted or undefined inside `AIConversation`, selection reads and updates `conversation.selectedModel`. A direct string or `null` wins over provider state; `null` is the bindable controlled-empty value because Svelte substitutes prop fallbacks for `undefined`. `placeholder` follows the same omission rule before the compact `labels` object and conversation placeholder, with `null` suppressing visible placeholder text.\n\nThe `children` trigger, `search` header, and `empty` snippets receive `{ model, value, open, query, searchable, disabled, labels, select, setQuery, setOpen, toggle }`. The resolved `labels` cover the empty trigger, its accessible fallback name, search field, empty result, and providerless-group heading. The trigger remains owned by PopupMenu, so keyboard navigation and focus return continue to work with custom content. Theme slots cover the root, trigger, trigger content/icon/label, popover, search header, menu, provider headings, model options, nested groups, and empty state.\n\nSearch is case-insensitive across model id, label, provider, description, and `keywords`. A matching group label preserves that group; otherwise recursive groups retain only matching descendants. `menuItems` uses the public `MenuItem` union and is appended after the models, so recursive checked submenus can own reasoning effort, speed, verbosity, or provider-specific controls. Models without a provider use the configurable `providerFallback` heading. When every flat model shares one provider no heading is shown, and a row never repeats a provider that a heading already names; only rows inside `groups` fall back to the provider as their description. The selected row keeps its context-window badge next to the check mark. The default trigger is a ghost text button sized to its label that can shrink and truncate in a crowded footer; the `optionMeta` theme slot styles the selected row's badge and check. Disabled selectors recursively disable supplemental menu items as well as groups and models.\n\n```svelte\n<AIModelSelector\n\t models={[{ id: 'fast', label: 'Fast', provider: 'Acme', contextWindow: 128000 }]}\n\t groups={[{ label: 'Research', models: researchModels }]}\n\t searchable={false}\n\t menuItems={[{ type: 'submenu', title: 'Reasoning effort', menu: reasoningItems }]}\n\t bind:value\n onValueChange={({ value, model }) => selectModel(value, model)}\n/>\n```\n";
|
|
@@ -7,7 +7,7 @@ Bind \`value\`, \`open\`, and \`query\` for direct control. \`defaultValue\` and
|
|
|
7
7
|
|
|
8
8
|
The \`children\` trigger, \`search\` header, and \`empty\` snippets receive \`{ model, value, open, query, searchable, disabled, labels, select, setQuery, setOpen, toggle }\`. The resolved \`labels\` cover the empty trigger, its accessible fallback name, search field, empty result, and providerless-group heading. The trigger remains owned by PopupMenu, so keyboard navigation and focus return continue to work with custom content. Theme slots cover the root, trigger, trigger content/icon/label, popover, search header, menu, provider headings, model options, nested groups, and empty state.
|
|
9
9
|
|
|
10
|
-
Search is case-insensitive across model id, label, provider, description, and \`keywords\`. A matching group label preserves that group; otherwise recursive groups retain only matching descendants. \`menuItems\` uses the public \`MenuItem\` union and is appended after the models, so recursive checked submenus can own reasoning effort, speed, verbosity, or provider-specific controls. Models without a provider use the configurable \`providerFallback\` heading,
|
|
10
|
+
Search is case-insensitive across model id, label, provider, description, and \`keywords\`. A matching group label preserves that group; otherwise recursive groups retain only matching descendants. \`menuItems\` uses the public \`MenuItem\` union and is appended after the models, so recursive checked submenus can own reasoning effort, speed, verbosity, or provider-specific controls. Models without a provider use the configurable \`providerFallback\` heading. When every flat model shares one provider no heading is shown, and a row never repeats a provider that a heading already names; only rows inside \`groups\` fall back to the provider as their description. The selected row keeps its context-window badge next to the check mark. The default trigger is a ghost text button sized to its label that can shrink and truncate in a crowded footer; the \`optionMeta\` theme slot styles the selected row's badge and check. Disabled selectors recursively disable supplemental menu items as well as groups and models.
|
|
11
11
|
|
|
12
12
|
\`\`\`svelte
|
|
13
13
|
<AIModelSelector
|
|
@@ -20,6 +20,7 @@ export declare const aiModelSelectorTheme: {
|
|
|
20
20
|
false: string;
|
|
21
21
|
};
|
|
22
22
|
}> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
|
|
23
|
+
optionMeta: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
23
24
|
group: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
24
25
|
empty: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
25
26
|
};
|
|
@@ -46,6 +47,7 @@ export declare const setAIModelSelectorTheme: (theme: InferComponentTheme<{
|
|
|
46
47
|
false: string;
|
|
47
48
|
};
|
|
48
49
|
}> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
|
|
50
|
+
optionMeta: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
49
51
|
group: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
50
52
|
empty: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
51
53
|
}>) => void;
|
|
@@ -70,6 +72,7 @@ export declare const useAIModelSelectorTheme: import("../../utils/cva/theme.js")
|
|
|
70
72
|
false: string;
|
|
71
73
|
};
|
|
72
74
|
}> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
|
|
75
|
+
optionMeta: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
73
76
|
group: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
74
77
|
empty: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
75
78
|
}>;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { cva, setComponentTheme, useComponentTheme } from '../../utils/cva/index.js';
|
|
2
2
|
const defaultRoot = cva({ base: 'inline-flex min-w-0' });
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
// A ghost text button sized to its label, like the model picker beside send in Claude and
|
|
4
|
+
// ChatGPT. It may shrink inside a crowded composer footer; the label truncates first.
|
|
5
|
+
const defaultTrigger = cva({ base: 'min-w-0 max-w-full shrink justify-between gap-xs' });
|
|
6
|
+
const defaultTriggerContent = cva({ base: 'flex min-w-0 items-center gap-sm' });
|
|
5
7
|
const defaultTriggerIcon = cva({
|
|
6
8
|
base: 'flex size-5 shrink-0 items-center justify-center rounded-sm border border-neutral-muted bg-surface text-xs'
|
|
7
9
|
});
|
|
@@ -19,6 +21,7 @@ const defaultOption = cva({
|
|
|
19
21
|
variants: { selected: { true: '', false: '' } },
|
|
20
22
|
defaultVariants: { selected: false }
|
|
21
23
|
});
|
|
24
|
+
const defaultOptionMeta = cva({ base: 'inline-flex items-center gap-sm' });
|
|
22
25
|
const defaultGroup = cva({ base: '' });
|
|
23
26
|
const defaultEmpty = cva({ base: 'justify-start text-neutral/70' });
|
|
24
27
|
export const aiModelSelectorTheme = {
|
|
@@ -32,8 +35,9 @@ export const aiModelSelectorTheme = {
|
|
|
32
35
|
menu: defaultMenu,
|
|
33
36
|
provider: defaultProvider,
|
|
34
37
|
option: defaultOption,
|
|
38
|
+
optionMeta: defaultOptionMeta,
|
|
35
39
|
group: defaultGroup,
|
|
36
40
|
empty: defaultEmpty
|
|
37
41
|
};
|
|
38
42
|
export const setAIModelSelectorTheme = setComponentTheme('ai-model-selector');
|
|
39
|
-
export const useAIModelSelectorTheme = useComponentTheme('
|
|
43
|
+
export const useAIModelSelectorTheme = useComponentTheme('ai-model-selector', aiModelSelectorTheme);
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
import { brainIcon } from '../Icons/brain.js';
|
|
5
5
|
import Markdown from '../Markdown/Markdown.svelte';
|
|
6
6
|
import Slot from '../Slot/Slot.svelte';
|
|
7
|
-
import
|
|
7
|
+
import { formatAIElapsed } from '../AITool/toolRendering.js';
|
|
8
8
|
import { untrack } from 'svelte';
|
|
9
|
+
import type { Attachment } from 'svelte/attachments';
|
|
9
10
|
import type { CollapsibleThemeProps } from '../Collapsible/collapsible.theme.js';
|
|
10
11
|
import type {
|
|
11
12
|
AIReasoningLabels,
|
|
@@ -18,9 +19,11 @@
|
|
|
18
19
|
const AUTO_CLOSE_DELAY = 1000;
|
|
19
20
|
const MS_IN_S = 1000;
|
|
20
21
|
const MESSAGE_INTERVAL = 2000;
|
|
22
|
+
const ELAPSED_TICK = 1000;
|
|
21
23
|
|
|
22
24
|
let {
|
|
23
25
|
ref = $bindable(),
|
|
26
|
+
size = 'normal',
|
|
24
27
|
content,
|
|
25
28
|
streaming = false,
|
|
26
29
|
defaultOpen,
|
|
@@ -48,22 +51,30 @@
|
|
|
48
51
|
const autoOpen = untrack(() => defaultOpen !== false);
|
|
49
52
|
let computedDuration = $state<number | undefined>(undefined);
|
|
50
53
|
let messageIndex = $state(0);
|
|
54
|
+
let streamStartedAt = $state<number | null>(null);
|
|
55
|
+
let now = $state(0);
|
|
56
|
+
let overflowing = $state(false);
|
|
51
57
|
const duration = $derived(durationProp ?? computedDuration);
|
|
52
58
|
const resolvedLabels = $derived<AIReasoningLabels>({
|
|
53
59
|
thinking: labels?.thinking ?? t.aiReasoningThinking,
|
|
54
60
|
thoughtForFewSeconds: labels?.thoughtForFewSeconds ?? t.aiReasoningFewSeconds,
|
|
55
|
-
duration: labels?.duration ??
|
|
61
|
+
duration: labels?.duration ?? formatDuration
|
|
56
62
|
});
|
|
63
|
+
const messages = $derived(
|
|
64
|
+
thinkingMessages?.length ? [...new Set(thinkingMessages)] : [resolvedLabels.thinking]
|
|
65
|
+
);
|
|
57
66
|
const thinkingMessage = $derived(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
messages[messageIndex % messages.length] ?? resolvedLabels.thinking
|
|
68
|
+
);
|
|
69
|
+
// Elapsed seconds while streaming, shown once the first second has passed.
|
|
70
|
+
const elapsed = $derived(
|
|
71
|
+
streaming && streamStartedAt !== null ? Math.max(0, now - streamStartedAt) : undefined
|
|
61
72
|
);
|
|
62
|
-
const displayedThinkingMessages = $derived([thinkingMessage]);
|
|
63
73
|
const reasoningState = $derived<AIReasoningState>({
|
|
64
74
|
open: openState.value,
|
|
65
75
|
streaming,
|
|
66
76
|
duration,
|
|
77
|
+
elapsed: elapsed === undefined ? undefined : Math.floor(elapsed / MS_IN_S),
|
|
67
78
|
message: thinkingMessage,
|
|
68
79
|
labels: resolvedLabels
|
|
69
80
|
});
|
|
@@ -80,7 +91,12 @@
|
|
|
80
91
|
|
|
81
92
|
let hasAutoClosed = false;
|
|
82
93
|
let didAutoOpen = false;
|
|
83
|
-
|
|
94
|
+
|
|
95
|
+
function formatDuration(seconds: number): string {
|
|
96
|
+
if (seconds <= 0) return t.aiReasoningUnderSecond;
|
|
97
|
+
if (seconds < 60) return t.aiReasoningDuration(seconds);
|
|
98
|
+
return t.aiReasoningDurationLong(formatAIElapsed(seconds * MS_IN_S, t));
|
|
99
|
+
}
|
|
84
100
|
|
|
85
101
|
function setOpen(nextOpen: boolean) {
|
|
86
102
|
if (openState.value === nextOpen) return;
|
|
@@ -91,31 +107,56 @@
|
|
|
91
107
|
$effect(() => {
|
|
92
108
|
if (!streaming) return;
|
|
93
109
|
messageIndex = 0;
|
|
94
|
-
const
|
|
95
|
-
if (
|
|
110
|
+
const count = messages.length;
|
|
111
|
+
if (count <= 1) return;
|
|
96
112
|
const interval = setInterval(() => {
|
|
97
|
-
messageIndex = (messageIndex + 1) %
|
|
113
|
+
messageIndex = (messageIndex + 1) % count;
|
|
98
114
|
}, MESSAGE_INTERVAL);
|
|
99
115
|
return () => clearInterval(interval);
|
|
100
116
|
});
|
|
101
117
|
|
|
102
118
|
$effect(() => {
|
|
103
119
|
if (streaming) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
didAutoOpen
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
untrack(() => {
|
|
121
|
+
if (streamStartedAt === null) {
|
|
122
|
+
streamStartedAt = Date.now();
|
|
123
|
+
now = streamStartedAt;
|
|
124
|
+
hasAutoClosed = false;
|
|
125
|
+
}
|
|
126
|
+
if (!didAutoOpen && autoOpen) {
|
|
127
|
+
setOpen(true);
|
|
128
|
+
didAutoOpen = true;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
} else {
|
|
132
|
+
untrack(() => {
|
|
133
|
+
if (streamStartedAt === null) return;
|
|
134
|
+
// Rounded, so a sub-half-second thought reads "less than a second" rather than 1.
|
|
135
|
+
computedDuration = Math.round((Date.now() - streamStartedAt) / MS_IN_S);
|
|
136
|
+
streamStartedAt = null;
|
|
137
|
+
didAutoOpen = false;
|
|
138
|
+
});
|
|
116
139
|
}
|
|
117
140
|
});
|
|
118
141
|
|
|
142
|
+
/** The widest elapsed reading in the same unit as `milliseconds` (59s, 59m 59s, 99h 59m). */
|
|
143
|
+
function widestElapsed(milliseconds: number): number {
|
|
144
|
+
const seconds = Math.floor(milliseconds / MS_IN_S);
|
|
145
|
+
if (seconds < 60) return 59 * MS_IN_S;
|
|
146
|
+
if (seconds < 3600) return 3599 * MS_IN_S;
|
|
147
|
+
const hourDigits = String(Math.floor(seconds / 3600)).length;
|
|
148
|
+
return (Number('9'.repeat(hourDigits)) * 3600 + 59 * 60) * MS_IN_S;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Live elapsed time: one tick per second, only while streaming.
|
|
152
|
+
$effect(() => {
|
|
153
|
+
if (!streaming) return;
|
|
154
|
+
const timer = setInterval(() => {
|
|
155
|
+
now = Date.now();
|
|
156
|
+
}, ELAPSED_TICK);
|
|
157
|
+
return () => clearInterval(timer);
|
|
158
|
+
});
|
|
159
|
+
|
|
119
160
|
$effect(() => {
|
|
120
161
|
if (computedDuration === undefined || streaming || !openState.value || hasAutoClosed) return;
|
|
121
162
|
const closeTimer = setTimeout(
|
|
@@ -127,30 +168,79 @@
|
|
|
127
168
|
);
|
|
128
169
|
return () => clearTimeout(closeTimer);
|
|
129
170
|
});
|
|
171
|
+
|
|
172
|
+
// While streaming, the body is a bounded window pinned to its latest lines; the top fades only
|
|
173
|
+
// once earlier lines have actually scrolled out of it.
|
|
174
|
+
const followLatest: Attachment<HTMLElement> = (node) => {
|
|
175
|
+
const body = node.firstElementChild;
|
|
176
|
+
if (!(body instanceof HTMLElement) || typeof ResizeObserver === 'undefined') return;
|
|
177
|
+
const measure = () => {
|
|
178
|
+
overflowing = body.offsetHeight > node.clientHeight + 1;
|
|
179
|
+
};
|
|
180
|
+
const observer = new ResizeObserver(measure);
|
|
181
|
+
observer.observe(node);
|
|
182
|
+
observer.observe(body);
|
|
183
|
+
measure();
|
|
184
|
+
return () => {
|
|
185
|
+
observer.disconnect();
|
|
186
|
+
overflowing = false;
|
|
187
|
+
};
|
|
188
|
+
};
|
|
130
189
|
</script>
|
|
131
190
|
|
|
132
191
|
{#snippet defaultTrigger()}
|
|
133
|
-
{@render brainIcon({ size: 16, class: classes.icon() })}
|
|
134
|
-
{#if streaming
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
192
|
+
{@render brainIcon({ size: 16, class: classes.icon(), 'aria-hidden': 'true' })}
|
|
193
|
+
{#if streaming}
|
|
194
|
+
<!-- Every label sits in one grid cell, so the trigger keeps the widest label's width and the
|
|
195
|
+
chevron never shifts while messages cycle. Only the current one is visible and named. -->
|
|
196
|
+
<span data-slot="ai-reasoning-status" class={classes.status()}>
|
|
197
|
+
{#each messages as message, index (message)}
|
|
198
|
+
<span
|
|
199
|
+
class={classes.message({ current: index === messageIndex % messages.length })}
|
|
200
|
+
aria-hidden={index === messageIndex % messages.length ? undefined : 'true'}
|
|
201
|
+
>
|
|
202
|
+
{message}
|
|
203
|
+
</span>
|
|
204
|
+
{/each}
|
|
205
|
+
</span>
|
|
206
|
+
{#if elapsed !== undefined && elapsed >= MS_IN_S}
|
|
207
|
+
<!-- The widest reading of the current unit shares the cell, so the chevron holds still as
|
|
208
|
+
the count gains a digit (9s → 10s) and only steps once per unit change. -->
|
|
209
|
+
<span data-slot="ai-reasoning-elapsed" aria-hidden="true" class={classes.elapsed()}>
|
|
210
|
+
<span class={classes.elapsedReserve()}>· {formatAIElapsed(widestElapsed(elapsed), t)}</span>
|
|
211
|
+
<span>· {formatAIElapsed(elapsed, t)}</span>
|
|
212
|
+
</span>
|
|
213
|
+
{/if}
|
|
142
214
|
{:else if duration === undefined}
|
|
143
|
-
<span class={classes.duration()}>
|
|
215
|
+
<span data-slot="ai-reasoning-duration" class={classes.duration()}>
|
|
216
|
+
{resolvedLabels.thoughtForFewSeconds}
|
|
217
|
+
</span>
|
|
144
218
|
{:else}
|
|
145
|
-
<span class={classes.duration()}>
|
|
219
|
+
<span data-slot="ai-reasoning-duration" class={classes.duration()}>
|
|
220
|
+
{resolvedLabels.duration(duration)}
|
|
221
|
+
</span>
|
|
222
|
+
{/if}
|
|
223
|
+
{/snippet}
|
|
224
|
+
|
|
225
|
+
{#snippet body()}
|
|
226
|
+
{#if content != null}
|
|
227
|
+
<Markdown
|
|
228
|
+
{content}
|
|
229
|
+
size={size === 'large' ? 'normal' : 'small'}
|
|
230
|
+
{...markdown}
|
|
231
|
+
renderHtml={false}
|
|
232
|
+
/>
|
|
233
|
+
{:else if childrenSlot}
|
|
234
|
+
<Slot render={childrenSlot} payload={reasoningState} />
|
|
146
235
|
{/if}
|
|
147
236
|
{/snippet}
|
|
148
237
|
|
|
149
238
|
<Collapsible
|
|
150
239
|
bind:ref
|
|
151
240
|
bind:open={openState.value}
|
|
152
|
-
{onOpenChange}
|
|
241
|
+
onOpenChange={(nextOpen) => onOpenChange?.(nextOpen)}
|
|
153
242
|
icon={triggerSlot === undefined ? undefined : 'none'}
|
|
243
|
+
{size}
|
|
154
244
|
class={classes.root({ className })}
|
|
155
245
|
theme={collapsibleTheme}
|
|
156
246
|
{...rootAttributes}
|
|
@@ -158,9 +248,16 @@
|
|
|
158
248
|
{#snippet trigger()}
|
|
159
249
|
<Slot render={triggerSlot ?? defaultTrigger} payload={reasoningState} />
|
|
160
250
|
{/snippet}
|
|
161
|
-
{#if
|
|
162
|
-
<
|
|
163
|
-
|
|
164
|
-
|
|
251
|
+
{#if streaming}
|
|
252
|
+
<div
|
|
253
|
+
data-slot="ai-reasoning-stream"
|
|
254
|
+
data-overflowing={overflowing || undefined}
|
|
255
|
+
class={classes.stream({ overflowing })}
|
|
256
|
+
{@attach followLatest}
|
|
257
|
+
>
|
|
258
|
+
<div class={classes.streamBody()}>{@render body()}</div>
|
|
259
|
+
</div>
|
|
260
|
+
{:else}
|
|
261
|
+
{@render body()}
|
|
165
262
|
{/if}
|
|
166
263
|
</Collapsible>
|