entasis 0.11.0 → 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 +256 -30
- package/dist/components/Form/Field/Field.svelte.d.ts +9 -0
- 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 +64 -8
- 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 +109 -3
- package/dist/components/Form/Field/field.state.svelte.js +508 -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 +47 -14
- 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 +40 -2
- package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
- package/dist/components/Form/Form/form.d.ts +35 -6
- package/dist/components/Form/Form/form.mcp.d.ts +1 -1
- package/dist/components/Form/Form/form.mcp.js +113 -13
- package/dist/components/Form/Form/form.props.d.ts +32 -1
- package/dist/components/Form/Form/form.registry.d.ts +2 -2
- package/dist/components/Form/Form/form.registry.js +1 -4
- package/dist/components/Form/Form/form.state.svelte.d.ts +1138 -413
- package/dist/components/Form/Form/form.state.svelte.js +319 -26
- package/dist/components/Form/Form/index.d.ts +3 -1
- package/dist/components/Form/Form/visibility.d.ts +3096 -1831
- 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 +1022 -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 +225 -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
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
import { magnifyingGlassIcon } from '../Icons/magnifyingGlass.js';
|
|
11
11
|
import { useDefaultColor } from '../Theme/theme.state.svelte.js';
|
|
12
12
|
import { useI18n } from '../../i18n/context.svelte.js';
|
|
13
|
+
import { useLiveAnnouncer } from '../../utils/useLiveAnnouncer.svelte.js';
|
|
14
|
+
import { untrack } from 'svelte';
|
|
13
15
|
|
|
14
16
|
let {
|
|
15
17
|
items,
|
|
@@ -30,6 +32,9 @@
|
|
|
30
32
|
showInput = true,
|
|
31
33
|
shouldFilter = true,
|
|
32
34
|
filter,
|
|
35
|
+
limit,
|
|
36
|
+
autoHighlight,
|
|
37
|
+
loop,
|
|
33
38
|
onSelect,
|
|
34
39
|
onHighlightChange,
|
|
35
40
|
empty,
|
|
@@ -65,9 +70,13 @@
|
|
|
65
70
|
);
|
|
66
71
|
|
|
67
72
|
const id = $props.id();
|
|
73
|
+
const t = $derived(useI18n());
|
|
68
74
|
|
|
69
75
|
const command = new CommandState<Value>({
|
|
70
76
|
id,
|
|
77
|
+
get locale() {
|
|
78
|
+
return t.locale;
|
|
79
|
+
},
|
|
71
80
|
get items() {
|
|
72
81
|
return items;
|
|
73
82
|
},
|
|
@@ -104,6 +113,15 @@
|
|
|
104
113
|
get filter() {
|
|
105
114
|
return filter;
|
|
106
115
|
},
|
|
116
|
+
get limit() {
|
|
117
|
+
return limit;
|
|
118
|
+
},
|
|
119
|
+
get autoHighlight() {
|
|
120
|
+
return autoHighlight;
|
|
121
|
+
},
|
|
122
|
+
get loop() {
|
|
123
|
+
return loop;
|
|
124
|
+
},
|
|
107
125
|
get onOpenChange() {
|
|
108
126
|
return onOpenChange;
|
|
109
127
|
},
|
|
@@ -123,12 +141,39 @@
|
|
|
123
141
|
|
|
124
142
|
const classes = $derived(useCommandTheme(theme));
|
|
125
143
|
const resolvedColor = $derived(useDefaultColor());
|
|
126
|
-
const t = $derived(useI18n());
|
|
127
144
|
const resolvedTitle = $derived(title ?? t.commandPalette);
|
|
128
145
|
const resolvedPlaceholder = $derived(placeholder ?? t.commandPlaceholder);
|
|
129
146
|
const resolvedEmpty = $derived(empty ?? t.noResults);
|
|
147
|
+
const resolvedEmptyText = $derived(typeof empty === 'string' ? empty : t.noResults);
|
|
148
|
+
|
|
149
|
+
// A Button's `onclick={open}` hands its click event over: the change is then a trigger press.
|
|
150
|
+
const slotPayload = {
|
|
151
|
+
open: (event?: Event) => command.open(event ? { reason: 'trigger-press', event } : undefined),
|
|
152
|
+
close: (event?: Event) => command.close(event ? { reason: 'close-press', event } : undefined)
|
|
153
|
+
};
|
|
130
154
|
|
|
131
|
-
|
|
155
|
+
// Result counts and the empty state reach screen readers through one persistent region,
|
|
156
|
+
// announced after typing settles (a region that mounts already filled is skipped).
|
|
157
|
+
const announcer = useLiveAnnouncer(id, 'live');
|
|
158
|
+
const resultCount = $derived(
|
|
159
|
+
command.visibleGroups.reduce((count, group) => count + group.items.length, 0)
|
|
160
|
+
);
|
|
161
|
+
$effect(() => {
|
|
162
|
+
const searching = searchState.value.trim() !== '';
|
|
163
|
+
const message = command.isEmpty
|
|
164
|
+
? resolvedEmptyText
|
|
165
|
+
: searching
|
|
166
|
+
? t.resultsCount(resultCount)
|
|
167
|
+
: '';
|
|
168
|
+
return untrack(() => {
|
|
169
|
+
if (!message) {
|
|
170
|
+
announcer.reset();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const timer = setTimeout(() => announcer.announce(message), 250);
|
|
174
|
+
return () => clearTimeout(timer);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
132
177
|
|
|
133
178
|
// Dialog mode: the content mounts on each open and the Dialog does no focus management of
|
|
134
179
|
// its own, so grab focus for the search input once the mount settles ({@attach} on the input).
|
|
@@ -157,6 +202,7 @@
|
|
|
157
202
|
{size}
|
|
158
203
|
{density}
|
|
159
204
|
title={item ? undefined : it.label}
|
|
205
|
+
description={item || !it.description ? undefined : it.description}
|
|
160
206
|
prefix={item ? undefined : it.icon}
|
|
161
207
|
suffix={item || !it.shortcut ? undefined : shortcut}
|
|
162
208
|
children={item ? customRow : undefined}
|
|
@@ -169,8 +215,8 @@
|
|
|
169
215
|
id: command.optionId(it.value),
|
|
170
216
|
'data-value': it.value,
|
|
171
217
|
tabindex: -1,
|
|
172
|
-
onpointermove: () => {
|
|
173
|
-
if (!it.disabled) command.
|
|
218
|
+
onpointermove: (event: PointerEvent) => {
|
|
219
|
+
if (!it.disabled) command.pointerHighlight(it.value, event);
|
|
174
220
|
}
|
|
175
221
|
}}
|
|
176
222
|
/>
|
|
@@ -188,7 +234,7 @@
|
|
|
188
234
|
type="text"
|
|
189
235
|
role="combobox"
|
|
190
236
|
aria-autocomplete="list"
|
|
191
|
-
aria-expanded=
|
|
237
|
+
aria-expanded={!command.isEmpty}
|
|
192
238
|
aria-controls={command.listId}
|
|
193
239
|
aria-activedescendant={command.highlighted !== undefined
|
|
194
240
|
? command.optionId(command.highlighted)
|
|
@@ -207,17 +253,12 @@
|
|
|
207
253
|
{/if}
|
|
208
254
|
|
|
209
255
|
<!-- The empty/no-results message lives OUTSIDE the listbox: a listbox may only own
|
|
210
|
-
`option`/`group` nodes (aria-required-children)
|
|
211
|
-
those. `role="status"` also announces it politely when filtering empties the list.
|
|
256
|
+
`option`/`group` nodes (aria-required-children). The live region below announces it.
|
|
212
257
|
It takes the list's `flex-1` so the box keeps the exact same layout as a filled list. -->
|
|
213
258
|
{#if command.isEmpty}
|
|
214
|
-
<Slot
|
|
215
|
-
render={resolvedEmpty}
|
|
216
|
-
class="flex-1 {classes.empty({ size })}"
|
|
217
|
-
attrs={{ role: 'status' }}
|
|
218
|
-
payload={slotPayload}
|
|
219
|
-
/>
|
|
259
|
+
<Slot render={resolvedEmpty} class="flex-1 {classes.empty({ size })}" payload={slotPayload} />
|
|
220
260
|
{/if}
|
|
261
|
+
<span class="sr-only" {...announcer.regionAttrs}>{announcer.message}</span>
|
|
221
262
|
|
|
222
263
|
<!-- Kept mounted while empty (hidden) so `aria-controls`/`aria-activedescendant` ids on the
|
|
223
264
|
combobox input always resolve; `hidden` keeps it out of the flex layout. -->
|
|
@@ -269,7 +310,8 @@
|
|
|
269
310
|
|
|
270
311
|
{#if dialog}
|
|
271
312
|
<Dialog
|
|
272
|
-
|
|
313
|
+
open={openState.value}
|
|
314
|
+
onOpenChange={(next, details) => command.setOpen(next, details)}
|
|
273
315
|
type="modal"
|
|
274
316
|
title={resolvedTitle}
|
|
275
317
|
theme={commandDialogTheme}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const commandDescription = "\n# Command Component\n\nA command palette: a searchable, keyboard-navigable list of grouped commands. Renders inline by\ndefault, or inside a modal Dialog (\u2318K style) with `dialog`.\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { Command } from 'entasis/command';\n\timport { calendarIcon } from 'entasis/icons/calendar';\n\n\tconst items = [\n\t\t{\n\t\t\theading: 'Suggestions',\n\t\t\titems: [\n\t\t\t\t{ value: 'calendar', label: 'Calendar', icon: calendarIcon },\n\t\t\t\t{ value: 'search-emoji', label: 'Search Emoji' },\n\t\t\t\t{ value: 'calculator', label: 'Calculator', disabled: true }\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\theading: 'Settings',\n\t\t\titems: [\n\t\t\t\t{ value: 'profile', label: 'Profile', shortcut: '\u2318P' },\n\t\t\t\t{ value: 'settings', label: 'Settings', shortcut: '\u2318S' }\n\t\t\t]\n\t\t}\n\t];\n</script>\n\n<Command {items} onSelect={(value) => console.log(value)} />\n```\n\n## Dialog Mode (\u2318K palette)\n\n```svelte\n<Command dialog shortcut=\"k\" {items} onSelect={run}>\n\t{#snippet trigger({ open })}\n\t\t<Button variant=\"outline\" onclick={open}>Search... \u2318K</Button>\n\t{/snippet}\n\t{#snippet footer({ close })}\n\t\t<div class=\"border-neutral-muted text-neutral/70 border-t px-3 py-2 text-xs\">\n\t\t\t\u21B5 Select \u00B7 Esc Close\n\t\t</div>\n\t{/snippet}\n</Command>\n```\n\n## Props\n\n### Core Props\n- **items**: CommandGroup[] (required)\n - `CommandGroup`: `{ heading?: string; items: CommandItem[]; class?: string }`\n - `CommandItem`: `{ value: string; label: string; icon?: Slot; shortcut?: string; keywords?: string[]; disabled?: boolean; href?: string; onSelect?: (value) => void; class?: string }
|
|
1
|
+
export declare const commandDescription = "\n# Command Component\n\nA command palette: a searchable, keyboard-navigable list of grouped commands. Renders inline by\ndefault, or inside a modal Dialog (\u2318K style) with `dialog`.\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { Command } from 'entasis/command';\n\timport { calendarIcon } from 'entasis/icons/calendar';\n\n\tconst items = [\n\t\t{\n\t\t\theading: 'Suggestions',\n\t\t\titems: [\n\t\t\t\t{ value: 'calendar', label: 'Calendar', icon: calendarIcon },\n\t\t\t\t{ value: 'search-emoji', label: 'Search Emoji' },\n\t\t\t\t{ value: 'calculator', label: 'Calculator', disabled: true }\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\theading: 'Settings',\n\t\t\titems: [\n\t\t\t\t{ value: 'profile', label: 'Profile', shortcut: '\u2318P' },\n\t\t\t\t{ value: 'settings', label: 'Settings', shortcut: '\u2318S' }\n\t\t\t]\n\t\t}\n\t];\n</script>\n\n<Command {items} onSelect={(value) => console.log(value)} />\n```\n\n## Dialog Mode (\u2318K palette)\n\n```svelte\n<Command dialog shortcut=\"k\" {items} onSelect={run}>\n\t{#snippet trigger({ open })}\n\t\t<Button variant=\"outline\" onclick={open}>Search... \u2318K</Button>\n\t{/snippet}\n\t{#snippet footer({ close })}\n\t\t<div class=\"border-neutral-muted text-neutral/70 border-t px-3 py-2 text-xs\">\n\t\t\t\u21B5 Select \u00B7 Esc Close\n\t\t</div>\n\t{/snippet}\n</Command>\n```\n\n## Props\n\n### Core Props\n- **items**: CommandGroup[] (required)\n - `CommandGroup`: `{ heading?: string; items: CommandItem[]; class?: string }`\n - `CommandItem`: `{ value: string; label: string; description?: string; icon?: Slot; shortcut?: string; keywords?: string[]; disabled?: boolean; href?: string; onSelect?: (value) => void; class?: string }`. `description` renders as a second line under the label and is not searched.\n - Items with `href` render as `<a>` and navigate on click/Enter.\n- **size**: 'small' | 'normal' | 'large' (default: 'normal') - Typography and spacing scale.\n- **density**: 'compact' | 'normal' | 'comfortable' (default: 'normal') - Spacing density forwarded to the option rows (paddings, gaps, min-height).\n\n### Dialog Mode Props\n- **dialog**: boolean (default: false) - Render inside a modal Dialog instead of inline.\n- **open**: boolean (bindable, default: false) - Dialog open state.\n- **defaultOpen**: boolean (default: false) - Initial dialog state when open is omitted.\n- **onOpenChange**: (open: boolean, details) => void - Runs before a library action opens or closes the dialog. `details` has `reason` ('trigger-press' for the shortcut and the trigger, 'item-press' after a selection, 'escape-key', 'outside-press', 'imperative-action'), `event`, `interaction` and `cancel()`; a cancelled change leaves the dialog as it was. External `open` updates are silent.\n- **shortcut**: string | false (default: false) - \u2318/Ctrl + key toggles the dialog (e.g. 'k').\n- **closeOnSelect**: boolean (default: true) - Close the dialog when an item is selected.\n\n### Selection Props\n- **value**: string | null (bindable, default: null) - Value of the selected command.\n- **defaultValue**: string | null (default: null) - Initial selected value when value is omitted.\n- **onValueChange**: (value: string | null) => void - Fires once when the selected value changes.\n Selecting the same command again is silent; use onSelect for every activation.\n\n### Search / Filtering Props\n- **search**: string (bindable, default: '') - Search query.\n- **defaultSearch**: string (default: '') - Initial query when search is omitted.\n- **onSearchChange**: (search: string) => void - Fires once when the query changes.\n- **placeholder**: string (default: 'Type a command or search...')\n- **showInput**: boolean (default: true) - Render the search input row.\n- **shouldFilter**: boolean (default: true) - Filter internally; set false to filter externally.\n- **limit**: number - Show at most this many items across groups; matching stops once the limit is reached (while `shouldFilter` is on).\n- **autoHighlight**: boolean | 'always' (default: 'always') - `'always'` keeps the first match highlighted, `true` only while a search is typed, `false` highlights nothing until an arrow key or the pointer moves it.\n- **loop**: 'wrap' | 'input' | false (default: 'wrap') - Past either end of the list: continue at the other end, land on no highlight first, or stop.\n- **filter**: (item, search) => boolean - Custom match predicate (defaults to a case- and\n accent-insensitive substring match on label + keywords + value, compared with\n `Intl.Collator` in the active I18n locale, so \"eclair\" finds \"\u00C9clair\"; in Spanish \"n\" does\n not find \"\u00F1\", which is a letter of its own there).\n\n### Event Props\n- **onSelect**: (value: string) => void - Activation callback: fires for every selected item (after the item's own onSelect), including a repeat selection of the already-selected command.\n- Callback-naming decision: Command owns a selected-value state, so the state change keeps the\n `value`/`defaultValue`/`onValueChange` trio and `onSelect` stays the pick event \u2014 the\n `onSelect` name is reserved for \"the user picked this item\", never for a value change.\n- **onHighlightChange**: (value: string | undefined) => void - Fires when the highlighted option moves.\n\n### Content Props (Slots)\n- **empty**: Slot (default: 'No results found.') - Empty-state content.\n- **item**: Snippet<[CommandItem]> - Custom row renderer, replaces icon/label/shortcut layout.\n- **trigger**: Slot<{ open, close }> - Dialog trigger; call `open()` on click. Dialog mode only.\n- **footer**: Slot<{ open, close }> - Bar rendered below the list (e.g. shortcut hints).\n\n### Advanced Props\n- **theme**: CommandThemeProps - Overrides for parts: command, inputWrapper, inputGroup, inputIcon,\n input, list, empty, group, groupHeading, separator, item, shortcut.\n- **class**: string - Classes for the palette root.\n\n## Keyboard\n\n- **ArrowDown / ArrowUp**: move the highlight, wrapping around both ends.\n- **Home / End**: jump to first / last selectable item.\n- **Enter**: select the highlighted item (navigates for href items).\n- **Escape**: closes the dialog (dialog mode); `onOpenChange` can cancel it.\n- **\u2318/Ctrl + shortcut**: toggles the dialog (dialog mode with `shortcut` set).\n\n## Accessibility\n\n- The input is a `role=\"combobox\"` with `aria-activedescendant` pointing at the highlighted option; `aria-expanded` follows the results (false while the search matches nothing and the list is hidden).\n- A persistent visually hidden live region (`role=\"status\"`) announces result counts and the empty state after typing settles; the visible empty message is plain text.\n- The list is a `role=\"listbox\"`; rows are `role=\"option\"` with `aria-selected`/`aria-disabled`.\n- Pointer movement highlights rows; the highlight re-anchors to the first result while typing.\n\n## Notes\n\n- Filtering happens per group; groups with no matching items are hidden and separators stay contiguous.\n- Dialog mode reuses the Dialog component (modal type) with padding stripped and its close button hidden.\n- Disabled items render dimmed and are skipped by keyboard navigation.\n\n## Motion\n\n- In `dialog` mode the palette rides the Dialog's **motion** slot: `commandDialogTheme.motion`\n drops it in from just above its resting place on `duration: 'fast'`.\n- Retune it with `<Theme components={{ dialog: { motion } }}>` or `setDialogTheme({ motion })`;\n reduced motion collapses it to 0.\n";
|
|
@@ -53,7 +53,7 @@ default, or inside a modal Dialog (⌘K style) with \`dialog\`.
|
|
|
53
53
|
### Core Props
|
|
54
54
|
- **items**: CommandGroup[] (required)
|
|
55
55
|
- \`CommandGroup\`: \`{ heading?: string; items: CommandItem[]; class?: string }\`
|
|
56
|
-
- \`CommandItem\`: \`{ value: string; label: string; icon?: Slot; shortcut?: string; keywords?: string[]; disabled?: boolean; href?: string; onSelect?: (value) => void; class?: string }\`
|
|
56
|
+
- \`CommandItem\`: \`{ value: string; label: string; description?: string; icon?: Slot; shortcut?: string; keywords?: string[]; disabled?: boolean; href?: string; onSelect?: (value) => void; class?: string }\`. \`description\` renders as a second line under the label and is not searched.
|
|
57
57
|
- Items with \`href\` render as \`<a>\` and navigate on click/Enter.
|
|
58
58
|
- **size**: 'small' | 'normal' | 'large' (default: 'normal') - Typography and spacing scale.
|
|
59
59
|
- **density**: 'compact' | 'normal' | 'comfortable' (default: 'normal') - Spacing density forwarded to the option rows (paddings, gaps, min-height).
|
|
@@ -62,7 +62,7 @@ default, or inside a modal Dialog (⌘K style) with \`dialog\`.
|
|
|
62
62
|
- **dialog**: boolean (default: false) - Render inside a modal Dialog instead of inline.
|
|
63
63
|
- **open**: boolean (bindable, default: false) - Dialog open state.
|
|
64
64
|
- **defaultOpen**: boolean (default: false) - Initial dialog state when open is omitted.
|
|
65
|
-
- **onOpenChange**: (open: boolean) => void -
|
|
65
|
+
- **onOpenChange**: (open: boolean, details) => void - Runs before a library action opens or closes the dialog. \`details\` has \`reason\` ('trigger-press' for the shortcut and the trigger, 'item-press' after a selection, 'escape-key', 'outside-press', 'imperative-action'), \`event\`, \`interaction\` and \`cancel()\`; a cancelled change leaves the dialog as it was. External \`open\` updates are silent.
|
|
66
66
|
- **shortcut**: string | false (default: false) - ⌘/Ctrl + key toggles the dialog (e.g. 'k').
|
|
67
67
|
- **closeOnSelect**: boolean (default: true) - Close the dialog when an item is selected.
|
|
68
68
|
|
|
@@ -79,8 +79,13 @@ default, or inside a modal Dialog (⌘K style) with \`dialog\`.
|
|
|
79
79
|
- **placeholder**: string (default: 'Type a command or search...')
|
|
80
80
|
- **showInput**: boolean (default: true) - Render the search input row.
|
|
81
81
|
- **shouldFilter**: boolean (default: true) - Filter internally; set false to filter externally.
|
|
82
|
-
- **
|
|
83
|
-
|
|
82
|
+
- **limit**: number - Show at most this many items across groups; matching stops once the limit is reached (while \`shouldFilter\` is on).
|
|
83
|
+
- **autoHighlight**: boolean | 'always' (default: 'always') - \`'always'\` keeps the first match highlighted, \`true\` only while a search is typed, \`false\` highlights nothing until an arrow key or the pointer moves it.
|
|
84
|
+
- **loop**: 'wrap' | 'input' | false (default: 'wrap') - Past either end of the list: continue at the other end, land on no highlight first, or stop.
|
|
85
|
+
- **filter**: (item, search) => boolean - Custom match predicate (defaults to a case- and
|
|
86
|
+
accent-insensitive substring match on label + keywords + value, compared with
|
|
87
|
+
\`Intl.Collator\` in the active I18n locale, so "eclair" finds "Éclair"; in Spanish "n" does
|
|
88
|
+
not find "ñ", which is a letter of its own there).
|
|
84
89
|
|
|
85
90
|
### Event Props
|
|
86
91
|
- **onSelect**: (value: string) => void - Activation callback: fires for every selected item (after the item's own onSelect), including a repeat selection of the already-selected command.
|
|
@@ -105,12 +110,13 @@ default, or inside a modal Dialog (⌘K style) with \`dialog\`.
|
|
|
105
110
|
- **ArrowDown / ArrowUp**: move the highlight, wrapping around both ends.
|
|
106
111
|
- **Home / End**: jump to first / last selectable item.
|
|
107
112
|
- **Enter**: select the highlighted item (navigates for href items).
|
|
108
|
-
- **Escape**: closes the dialog (dialog mode).
|
|
113
|
+
- **Escape**: closes the dialog (dialog mode); \`onOpenChange\` can cancel it.
|
|
109
114
|
- **⌘/Ctrl + shortcut**: toggles the dialog (dialog mode with \`shortcut\` set).
|
|
110
115
|
|
|
111
116
|
## Accessibility
|
|
112
117
|
|
|
113
|
-
- The input is a \`role="combobox"\` with \`aria-activedescendant\` pointing at the highlighted option.
|
|
118
|
+
- The input is a \`role="combobox"\` with \`aria-activedescendant\` pointing at the highlighted option; \`aria-expanded\` follows the results (false while the search matches nothing and the list is hidden).
|
|
119
|
+
- A persistent visually hidden live region (\`role="status"\`) announces result counts and the empty state after typing settles; the visible empty message is plain text.
|
|
114
120
|
- The list is a \`role="listbox"\`; rows are \`role="option"\` with \`aria-selected\`/\`aria-disabled\`.
|
|
115
121
|
- Pointer movement highlights rows; the highlight re-anchors to the first result while typing.
|
|
116
122
|
|
|
@@ -3,6 +3,8 @@ import type { Density, Sizes } from '../../types/index.js';
|
|
|
3
3
|
import type { Slot, WithSlot } from '../Slot/slot.js';
|
|
4
4
|
import type { WithAttachments } from '../../types/props.js';
|
|
5
5
|
import type { CommandThemeProps } from './command.theme.js';
|
|
6
|
+
import type { OpenChangeHandler } from '../../utils/openChange.js';
|
|
7
|
+
import type { ListLoop } from '../../utils/useListNavigation.svelte.js';
|
|
6
8
|
/** A selectable command. `value` is the filter key + `onSelect` payload; `label` is the visible
|
|
7
9
|
* (and searchable) text. For rich rows (avatars, etc.) pass an `item` snippet to `<Command>`. */
|
|
8
10
|
export type CommandItem<Value extends string = string> = {
|
|
@@ -10,6 +12,8 @@ export type CommandItem<Value extends string = string> = {
|
|
|
10
12
|
value: Value;
|
|
11
13
|
/** Visible label. Also matched against the search query (alongside `value`/`keywords`). */
|
|
12
14
|
label: string;
|
|
15
|
+
/** Secondary line under the label (a command's summary, a file's path). Not searched. */
|
|
16
|
+
description?: string;
|
|
13
17
|
/** Leading icon — a string or a snippet (typically an icon snippet from `$lib/components/Icons`). */
|
|
14
18
|
icon?: Slot;
|
|
15
19
|
/** Trailing keybind hint, e.g. `⌘K`. */
|
|
@@ -36,10 +40,13 @@ export type CommandGroup<Value extends string = string> = {
|
|
|
36
40
|
};
|
|
37
41
|
/** Payload passed to the `trigger`, `footer`, and `empty` slots. */
|
|
38
42
|
export type CommandSlotPayload = {
|
|
39
|
-
/**
|
|
40
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Opens the palette dialog (dialog mode only). Pass it straight to `onclick`: the click is
|
|
45
|
+
* reported as the change's event, with the reason `'trigger-press'`.
|
|
46
|
+
*/
|
|
47
|
+
open: (event?: Event) => void;
|
|
41
48
|
/** Closes the palette dialog (dialog mode only). */
|
|
42
|
-
close: () => void;
|
|
49
|
+
close: (event?: Event) => void;
|
|
43
50
|
};
|
|
44
51
|
export type CommandProps<Value extends string = string> = WithAttachments<WithSlot<{
|
|
45
52
|
/**
|
|
@@ -61,9 +68,14 @@ export type CommandProps<Value extends string = string> = WithAttachments<WithSl
|
|
|
61
68
|
/** Initial dialog open state when `open` is omitted. */
|
|
62
69
|
defaultOpen?: boolean;
|
|
63
70
|
/**
|
|
64
|
-
*
|
|
71
|
+
* Called before a library action opens or closes the dialog, with the requested state and
|
|
72
|
+
* the change details: `reason` (`'trigger-press'` for the shortcut and the trigger,
|
|
73
|
+
* `'item-press'` after a selection, `'escape-key'`, `'outside-press'`,
|
|
74
|
+
* `'imperative-action'`…), the originating `event`, the `interaction` type and `cancel()`.
|
|
75
|
+
* Calling `details.cancel()` keeps the dialog as it is. External `open` updates are silent.
|
|
76
|
+
* Dialog mode only.
|
|
65
77
|
*/
|
|
66
|
-
onOpenChange?:
|
|
78
|
+
onOpenChange?: OpenChangeHandler;
|
|
67
79
|
/**
|
|
68
80
|
* ⌘/Ctrl + this key toggles the dialog (e.g. `'k'`). `false` disables. Dialog mode only.
|
|
69
81
|
*/
|
|
@@ -110,9 +122,30 @@ export type CommandProps<Value extends string = string> = WithAttachments<WithSl
|
|
|
110
122
|
*/
|
|
111
123
|
shouldFilter?: boolean;
|
|
112
124
|
/**
|
|
113
|
-
* Custom match predicate. Defaults to a case-insensitive substring match on
|
|
125
|
+
* Custom match predicate. Defaults to a case- and accent-insensitive substring match on
|
|
126
|
+
* `label` + `keywords` + `value`, compared with `Intl.Collator` in the active I18n locale,
|
|
127
|
+
* so "eclair" finds "Éclair".
|
|
114
128
|
*/
|
|
115
129
|
filter?: (item: CommandItem<Value>, search: string) => boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Shows at most this many items (across groups). Matching stops once the limit is reached,
|
|
132
|
+
* so the rest of a long list is never compared. Applies while `shouldFilter` is on.
|
|
133
|
+
*/
|
|
134
|
+
limit?: number;
|
|
135
|
+
/**
|
|
136
|
+
* Which item is highlighted without keyboard input. `'always'` (default) keeps the first
|
|
137
|
+
* match highlighted; `true` does so only while a search is typed; `false` highlights
|
|
138
|
+
* nothing until an arrow key or the pointer moves it, so Enter does nothing until then.
|
|
139
|
+
* @default 'always'
|
|
140
|
+
*/
|
|
141
|
+
autoHighlight?: boolean | 'always';
|
|
142
|
+
/**
|
|
143
|
+
* What moving past either end of the list does: `'wrap'` continues at the other end,
|
|
144
|
+
* `'input'` lands on no highlight first (focus stays in the input) and wraps from there,
|
|
145
|
+
* `false` stops at the end.
|
|
146
|
+
* @default 'wrap'
|
|
147
|
+
*/
|
|
148
|
+
loop?: ListLoop;
|
|
116
149
|
/**
|
|
117
150
|
* Activation callback: fires for every selected item, after the item's own
|
|
118
151
|
* `onSelect`, including when the same item is selected again.
|
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import type { Attachment } from 'svelte/attachments';
|
|
2
2
|
import type { CommandGroup, CommandItem, CommandProps } from './command.props.js';
|
|
3
|
-
|
|
3
|
+
import { type OpenChangeDetails, type OpenChangeInit } from '../../utils/openChange.js';
|
|
4
|
+
type CommandOptions<Value extends string = string> = Pick<CommandProps<Value>, 'items' | 'dialog' | 'shortcut' | 'closeOnSelect' | 'shouldFilter' | 'filter' | 'limit' | 'autoHighlight' | 'loop' | 'onSelect' | 'onHighlightChange' | 'onOpenChange' | 'onValueChange' | 'onSearchChange'> & {
|
|
4
5
|
id: string;
|
|
5
6
|
isOpen: boolean;
|
|
6
7
|
/** Live search query. */
|
|
7
8
|
search: string;
|
|
8
9
|
/** Value of the selected command, or null when nothing has been selected. */
|
|
9
10
|
value: Value | null;
|
|
11
|
+
/** Locale the default filter compares text in: the active I18n locale. */
|
|
12
|
+
locale?: string;
|
|
10
13
|
};
|
|
11
14
|
declare const BoundCommandOptions: new <Options extends object>(options: Options) => Options;
|
|
12
15
|
export declare class CommandState<Value extends string = string> extends BoundCommandOptions<CommandOptions<Value>> {
|
|
13
16
|
private triggerElement;
|
|
14
17
|
listId: string;
|
|
15
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Groups whose items match the current search query (or all groups when filtering is off),
|
|
20
|
+
* cut off after `limit` items.
|
|
21
|
+
*/
|
|
16
22
|
filteredGroups: CommandGroup<Value>[];
|
|
17
23
|
/** Groups that actually render — those with at least one (possibly disabled) item. Filtering
|
|
18
24
|
* here keeps separators contiguous (no orphan separator before the first visible group when an
|
|
@@ -24,22 +30,41 @@ export declare class CommandState<Value extends string = string> extends BoundCo
|
|
|
24
30
|
/** Keyboard navigation: value-driven virtual focus (see useListNavigation). */
|
|
25
31
|
nav: {
|
|
26
32
|
readonly highlighted: Value | undefined;
|
|
33
|
+
readonly highlightDetails: import("../../utils/useListNavigation.svelte.js").HighlightDetails;
|
|
27
34
|
readonly activeDescendant: string | undefined;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
optionId: (value: Value) => string | undefined;
|
|
36
|
+
typeahead: {
|
|
37
|
+
readonly isTyping: boolean;
|
|
38
|
+
reset: () => void;
|
|
39
|
+
} | null;
|
|
40
|
+
setHighlighted: (value: Value | undefined, details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
|
|
41
|
+
pointerHighlight: (value: Value | undefined, event?: MouseEvent | PointerEvent) => boolean;
|
|
42
|
+
highlight: (value: Value | undefined, details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
|
|
43
|
+
move: (delta: number, details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
|
|
44
|
+
first: (details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
|
|
45
|
+
last: (details?: import("../../utils/useListNavigation.svelte.js").HighlightDetails) => void;
|
|
46
|
+
reanchor: () => void;
|
|
47
|
+
scrollToHighlighted: () => void;
|
|
33
48
|
onKeydown: (event: KeyboardEvent) => void;
|
|
34
49
|
};
|
|
35
50
|
/** Value of the currently highlighted (keyboard-active) option. */
|
|
36
51
|
get highlighted(): Value | undefined;
|
|
37
52
|
constructor(options: CommandOptions<Value>);
|
|
38
53
|
trigger: Attachment<HTMLElement>;
|
|
54
|
+
/** DOM id of a command's option row, unique per value. */
|
|
39
55
|
optionId: (value: string) => string;
|
|
56
|
+
/**
|
|
57
|
+
* Case- and accent-insensitive substring match on `label`, `keywords` and `value`, compared in
|
|
58
|
+
* the active locale.
|
|
59
|
+
*/
|
|
40
60
|
defaultMatch: (item: CommandItem<Value>, query: string) => boolean;
|
|
41
61
|
/** Set the highlight without scrolling — used by pointermove on rows. */
|
|
42
62
|
setHighlighted: (value: Value | undefined) => void;
|
|
63
|
+
/**
|
|
64
|
+
* Pointer hover highlight: ignores moves that did not change the pointer position (Safari
|
|
65
|
+
* fires one when keyboard scrolling slides a row under a resting pointer).
|
|
66
|
+
*/
|
|
67
|
+
pointerHighlight: (value: Value | undefined, event?: MouseEvent | PointerEvent) => void;
|
|
43
68
|
/** Move the highlight by `delta` selectable items, wrapping around both ends. */
|
|
44
69
|
move: (delta: number) => void;
|
|
45
70
|
select: (item: CommandItem<Value>) => void;
|
|
@@ -50,10 +75,14 @@ export declare class CommandState<Value extends string = string> extends BoundCo
|
|
|
50
75
|
selectHighlighted: () => boolean;
|
|
51
76
|
setValue: (value: Value | null) => void;
|
|
52
77
|
setSearch: (search: string) => void;
|
|
53
|
-
open: () => void;
|
|
54
|
-
close: () => void;
|
|
55
|
-
toggle: () => void;
|
|
56
|
-
|
|
78
|
+
open: (input?: OpenChangeDetails | OpenChangeInit | Event) => void;
|
|
79
|
+
close: (input?: OpenChangeDetails | OpenChangeInit | Event) => void;
|
|
80
|
+
toggle: (input?: OpenChangeDetails | OpenChangeInit | Event) => void;
|
|
81
|
+
/**
|
|
82
|
+
* Asks to open or close the palette. `onOpenChange(open, details)` runs first and may cancel;
|
|
83
|
+
* returns `false` when it did.
|
|
84
|
+
*/
|
|
85
|
+
setOpen: (open: boolean, input?: OpenChangeDetails | OpenChangeInit | Event) => boolean;
|
|
57
86
|
onKeydown: (event: KeyboardEvent) => void;
|
|
58
87
|
}
|
|
59
88
|
export {};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { createItemMatcher } from '../../utils/match.js';
|
|
1
2
|
import { createBindableStateClass } from '../../utils/state.svelte.js';
|
|
2
3
|
import { useListNavigation } from '../../utils/useListNavigation.svelte.js';
|
|
3
4
|
import { untrack } from 'svelte';
|
|
5
|
+
import { elementById } from '../../utils/id.js';
|
|
6
|
+
import { requestOpenChange, resolveOpenChangeDetails } from '../../utils/openChange.js';
|
|
4
7
|
// `bind()` copies the option accessors onto the instance; this typed base is what declares
|
|
5
8
|
// them on `this`. A generic class cannot call a mixin factory in its `extends` clause, and
|
|
6
9
|
// merging an interface into the class declaration would be unsafe declaration merging.
|
|
@@ -8,15 +11,35 @@ const BoundCommandOptions = createBindableStateClass();
|
|
|
8
11
|
export class CommandState extends BoundCommandOptions {
|
|
9
12
|
triggerElement = $state(null);
|
|
10
13
|
listId = $derived(`${this.id}-list`);
|
|
11
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Groups whose items match the current search query (or all groups when filtering is off),
|
|
16
|
+
* cut off after `limit` items.
|
|
17
|
+
*/
|
|
12
18
|
filteredGroups = $derived.by(() => {
|
|
13
19
|
const query = this.search.trim();
|
|
14
|
-
|
|
20
|
+
const limit = this.shouldFilter ? this.limit : undefined;
|
|
21
|
+
if (!this.shouldFilter || (query === '' && limit === undefined))
|
|
15
22
|
return this.items;
|
|
16
23
|
const match = this.filter ?? this.defaultMatch;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
// Matching stops once the limit is reached: the rest of a long list is never compared.
|
|
25
|
+
let remaining = limit !== undefined && limit >= 0 ? limit : Infinity;
|
|
26
|
+
const groups = [];
|
|
27
|
+
for (const group of this.items) {
|
|
28
|
+
if (remaining <= 0)
|
|
29
|
+
break;
|
|
30
|
+
const kept = [];
|
|
31
|
+
for (const item of group.items) {
|
|
32
|
+
if (remaining <= 0)
|
|
33
|
+
break;
|
|
34
|
+
if (query !== '' && !match(item, query))
|
|
35
|
+
continue;
|
|
36
|
+
kept.push(item);
|
|
37
|
+
remaining -= 1;
|
|
38
|
+
}
|
|
39
|
+
if (kept.length > 0)
|
|
40
|
+
groups.push({ ...group, items: kept });
|
|
41
|
+
}
|
|
42
|
+
return groups;
|
|
20
43
|
});
|
|
21
44
|
/** Groups that actually render — those with at least one (possibly disabled) item. Filtering
|
|
22
45
|
* here keeps separators contiguous (no orphan separator before the first visible group when an
|
|
@@ -26,12 +49,20 @@ export class CommandState extends BoundCommandOptions {
|
|
|
26
49
|
navItems = $derived(this.visibleGroups.flatMap((group) => group.items).filter((item) => !item.disabled));
|
|
27
50
|
isEmpty = $derived(this.visibleGroups.length === 0);
|
|
28
51
|
/** Keyboard navigation: value-driven virtual focus (see useListNavigation). */
|
|
29
|
-
nav = useListNavigation({
|
|
30
|
-
values: () =>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
52
|
+
nav = ((state) => useListNavigation({
|
|
53
|
+
values: () => state.navItems.map((item) => item.value),
|
|
54
|
+
get autoHighlight() {
|
|
55
|
+
return state.autoHighlight ?? 'always';
|
|
56
|
+
},
|
|
57
|
+
get loop() {
|
|
58
|
+
return state.loop ?? 'wrap';
|
|
59
|
+
},
|
|
60
|
+
query: () => state.search,
|
|
61
|
+
// Each value gets its own numbered id, so values such as a.b and a_b never collide.
|
|
62
|
+
idPrefix: `${state.id}-opt`,
|
|
63
|
+
onHighlightChange: (value) => state.onHighlightChange?.(value),
|
|
64
|
+
onSelect: (value) => state.selectValue(value)
|
|
65
|
+
}))(this);
|
|
35
66
|
/** Value of the currently highlighted (keyboard-active) option. */
|
|
36
67
|
get highlighted() {
|
|
37
68
|
return this.nav.highlighted;
|
|
@@ -46,7 +77,7 @@ export class CommandState extends BoundCommandOptions {
|
|
|
46
77
|
const onKeydown = (event) => {
|
|
47
78
|
if (event.key.toLowerCase() === key && (event.metaKey || event.ctrlKey)) {
|
|
48
79
|
event.preventDefault();
|
|
49
|
-
untrack(() => this.toggle());
|
|
80
|
+
untrack(() => this.toggle({ reason: 'trigger-press', event }));
|
|
50
81
|
}
|
|
51
82
|
};
|
|
52
83
|
window.addEventListener('keydown', onKeydown);
|
|
@@ -70,15 +101,24 @@ export class CommandState extends BoundCommandOptions {
|
|
|
70
101
|
};
|
|
71
102
|
});
|
|
72
103
|
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
104
|
+
/** DOM id of a command's option row, unique per value. */
|
|
105
|
+
optionId = (value) => this.nav.optionId(value);
|
|
106
|
+
/**
|
|
107
|
+
* Case- and accent-insensitive substring match on `label`, `keywords` and `value`, compared in
|
|
108
|
+
* the active locale.
|
|
109
|
+
*/
|
|
110
|
+
defaultMatch = $derived(createItemMatcher({ locale: this.locale }));
|
|
78
111
|
/** Set the highlight without scrolling — used by pointermove on rows. */
|
|
79
112
|
setHighlighted = (value) => {
|
|
80
113
|
this.nav.setHighlighted(value);
|
|
81
114
|
};
|
|
115
|
+
/**
|
|
116
|
+
* Pointer hover highlight: ignores moves that did not change the pointer position (Safari
|
|
117
|
+
* fires one when keyboard scrolling slides a row under a resting pointer).
|
|
118
|
+
*/
|
|
119
|
+
pointerHighlight = (value, event) => {
|
|
120
|
+
this.nav.pointerHighlight(value, event);
|
|
121
|
+
};
|
|
82
122
|
/** Move the highlight by `delta` selectable items, wrapping around both ends. */
|
|
83
123
|
move = (delta) => {
|
|
84
124
|
this.nav.move(delta);
|
|
@@ -92,7 +132,7 @@ export class CommandState extends BoundCommandOptions {
|
|
|
92
132
|
item.onSelect?.(item.value);
|
|
93
133
|
this.onSelect?.(item.value);
|
|
94
134
|
if (this.dialog && this.closeOnSelect)
|
|
95
|
-
this.close();
|
|
135
|
+
this.close({ reason: 'item-press' });
|
|
96
136
|
};
|
|
97
137
|
/** Select an item by value. Link items are clicked so navigation happens natively
|
|
98
138
|
* (SvelteKit intercepts the click); their own `onclick` runs `select()`. */
|
|
@@ -101,7 +141,7 @@ export class CommandState extends BoundCommandOptions {
|
|
|
101
141
|
if (!item)
|
|
102
142
|
return;
|
|
103
143
|
if (item.href)
|
|
104
|
-
|
|
144
|
+
elementById(this.triggerElement, this.optionId(item.value))?.click();
|
|
105
145
|
else
|
|
106
146
|
this.select(item);
|
|
107
147
|
};
|
|
@@ -124,20 +164,27 @@ export class CommandState extends BoundCommandOptions {
|
|
|
124
164
|
this.search = search;
|
|
125
165
|
this.onSearchChange?.(search);
|
|
126
166
|
};
|
|
127
|
-
open = () => {
|
|
128
|
-
this.setOpen(true);
|
|
167
|
+
open = (input) => {
|
|
168
|
+
this.setOpen(true, input);
|
|
129
169
|
};
|
|
130
|
-
close = () => {
|
|
131
|
-
this.setOpen(false);
|
|
170
|
+
close = (input) => {
|
|
171
|
+
this.setOpen(false, input);
|
|
132
172
|
};
|
|
133
|
-
toggle = () => {
|
|
134
|
-
this.setOpen(!this.isOpen);
|
|
173
|
+
toggle = (input) => {
|
|
174
|
+
this.setOpen(!this.isOpen, input);
|
|
135
175
|
};
|
|
136
|
-
|
|
176
|
+
/**
|
|
177
|
+
* Asks to open or close the palette. `onOpenChange(open, details)` runs first and may cancel;
|
|
178
|
+
* returns `false` when it did.
|
|
179
|
+
*/
|
|
180
|
+
setOpen = (open, input) => {
|
|
137
181
|
if (open === this.isOpen)
|
|
138
|
-
return;
|
|
182
|
+
return true;
|
|
183
|
+
const details = resolveOpenChangeDetails(input, { reason: 'imperative-action' });
|
|
184
|
+
if (!requestOpenChange(this.onOpenChange, open, details))
|
|
185
|
+
return false;
|
|
139
186
|
this.isOpen = open;
|
|
140
|
-
|
|
187
|
+
return true;
|
|
141
188
|
};
|
|
142
189
|
onKeydown = (event) => {
|
|
143
190
|
this.nav.onKeydown(event);
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { selectedSoft } from '../Theme/theme.recipes.js';
|
|
2
1
|
import { setComponentTheme, useComponentTheme } from '../../utils/cva/index.js';
|
|
3
2
|
import { cva } from '../../utils/cva/index.js';
|
|
4
3
|
// A palette is sized by whatever hosts it — a `max-w-xl` dialog, an 18rem mention popover, an
|
|
@@ -117,8 +116,10 @@ const defaultCommandItem = cva({
|
|
|
117
116
|
},
|
|
118
117
|
highlighted: {
|
|
119
118
|
// The keyboard cursor is a persistent selection, not a hover: it paints the shared soft
|
|
120
|
-
// selected
|
|
121
|
-
|
|
119
|
+
// selected fill in the current role, like a sidebar row or a toggle button. The row keeps
|
|
120
|
+
// its own ink: the neutral muted-readable ink is dimmer than an unhighlighted row in dark
|
|
121
|
+
// mode, which made the active row look disabled.
|
|
122
|
+
true: 'bg-selected-muted',
|
|
122
123
|
false: ''
|
|
123
124
|
}
|
|
124
125
|
},
|