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
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ComboboxFilter, ComboboxItems, ComboboxOption, ComboboxOptionGroup } from './combobox.props.js';
|
|
2
|
+
export declare const isOptionGroup: (entry: ComboboxOption | ComboboxOptionGroup) => entry is ComboboxOptionGroup;
|
|
3
|
+
/** Every option, flattened across groups, in render order. */
|
|
4
|
+
export declare const flattenItems: (items: ComboboxItems) => ComboboxOption[];
|
|
5
|
+
/** Options a keyboard or pointer can act on: everything except disabled options. */
|
|
6
|
+
export declare const selectableOptions: (items: ComboboxItems) => ComboboxOption[];
|
|
7
|
+
export type RenderGroup = {
|
|
8
|
+
label?: string;
|
|
9
|
+
items: ComboboxOption[];
|
|
10
|
+
};
|
|
11
|
+
/** Items as rendered: consecutive bare options bundled into one unlabeled group. */
|
|
12
|
+
export declare const toRenderGroups: (items: ComboboxItems) => RenderGroup[];
|
|
13
|
+
/** The default match: a case- and accent-insensitive substring of the label, in `locale`. */
|
|
14
|
+
export declare const createOptionMatcher: (locale: string) => ComboboxFilter;
|
|
15
|
+
type NarrowOptions = {
|
|
16
|
+
/** Keeps an option when it returns `true`; an empty query matches everything. */
|
|
17
|
+
match?: ComboboxFilter;
|
|
18
|
+
/** Leaves out options that are already taken (TagsInput's selected tags). */
|
|
19
|
+
exclude?: (option: ComboboxOption) => boolean;
|
|
20
|
+
/** Stop once this many options are kept. The rest of the list is never compared. */
|
|
21
|
+
limit?: number;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Narrows `items` to the options that match `query`, keeping their groups (a group with no
|
|
25
|
+
* match disappears) and stopping once `limit` options are kept, across groups.
|
|
26
|
+
*/
|
|
27
|
+
export declare const narrowItems: (items: ComboboxItems, query: string, { match, exclude, limit }?: NarrowOptions) => ComboboxItems;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Pure helpers over the options a Combobox or TagsInput lists: groups, matching and limits.
|
|
2
|
+
import { createListFilter } from '../../../utils/listFilter.js';
|
|
3
|
+
export const isOptionGroup = (entry) => 'items' in entry && Array.isArray(entry.items);
|
|
4
|
+
/** Every option, flattened across groups, in render order. */
|
|
5
|
+
export const flattenItems = (items) => items.flatMap((entry) => (isOptionGroup(entry) ? entry.items : [entry]));
|
|
6
|
+
/** Options a keyboard or pointer can act on: everything except disabled options. */
|
|
7
|
+
export const selectableOptions = (items) => flattenItems(items).filter((option) => !option.disabled);
|
|
8
|
+
/** Items as rendered: consecutive bare options bundled into one unlabeled group. */
|
|
9
|
+
export const toRenderGroups = (items) => {
|
|
10
|
+
const groups = [];
|
|
11
|
+
let bare = null;
|
|
12
|
+
for (const entry of items) {
|
|
13
|
+
if (isOptionGroup(entry)) {
|
|
14
|
+
bare = null;
|
|
15
|
+
groups.push({ label: entry.label, items: entry.items });
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
if (!bare) {
|
|
19
|
+
bare = { items: [] };
|
|
20
|
+
groups.push(bare);
|
|
21
|
+
}
|
|
22
|
+
bare.items.push(entry);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return groups;
|
|
26
|
+
};
|
|
27
|
+
/** The default match: a case- and accent-insensitive substring of the label, in `locale`. */
|
|
28
|
+
export const createOptionMatcher = (locale) => {
|
|
29
|
+
const filter = createListFilter({ locale });
|
|
30
|
+
return (option, query) => filter.contains(option.label, query);
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Narrows `items` to the options that match `query`, keeping their groups (a group with no
|
|
34
|
+
* match disappears) and stopping once `limit` options are kept, across groups.
|
|
35
|
+
*/
|
|
36
|
+
export const narrowItems = (items, query, { match, exclude, limit } = {}) => {
|
|
37
|
+
let remaining = limit !== undefined && limit >= 0 ? limit : Infinity;
|
|
38
|
+
const keep = (option) => {
|
|
39
|
+
if (remaining <= 0)
|
|
40
|
+
return false;
|
|
41
|
+
if (exclude?.(option))
|
|
42
|
+
return false;
|
|
43
|
+
if (query !== '' && match && !match(option, query))
|
|
44
|
+
return false;
|
|
45
|
+
remaining -= 1;
|
|
46
|
+
return true;
|
|
47
|
+
};
|
|
48
|
+
const result = [];
|
|
49
|
+
for (const entry of items) {
|
|
50
|
+
if (remaining <= 0)
|
|
51
|
+
break;
|
|
52
|
+
if (isOptionGroup(entry)) {
|
|
53
|
+
const kept = [];
|
|
54
|
+
for (const option of entry.items) {
|
|
55
|
+
if (remaining <= 0)
|
|
56
|
+
break;
|
|
57
|
+
if (keep(option))
|
|
58
|
+
kept.push(option);
|
|
59
|
+
}
|
|
60
|
+
if (kept.length > 0)
|
|
61
|
+
result.push({ ...entry, items: kept });
|
|
62
|
+
}
|
|
63
|
+
else if (keep(entry)) {
|
|
64
|
+
result.push(entry);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const comboboxDescription = "\n# Combobox Component\n\nA searchable dropdown component that supports both static arrays and async option loading. Provides keyboard navigation, debounced search, and full ARIA accessibility. Use it when users need to search and select from a large list of options.\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { Combobox } from 'entasis/combobox';\n\tlet value = $state(null);\n\tconst items = [\n\t\t{ value: 'us', label: 'United States', description: 'North America' },\n\t\t{ value: 'uk', label: 'United Kingdom', description: 'Europe' }\n\t];\n</script>\n\n<Combobox\n\tplaceholder=\"Search countries...\"\n\titems={items}\n\tbind:value={value}\n/>\n```\n\n## Props\n\n### Core Props\n\n- **items**: `ComboboxOption[] | ((searchValue?: string) => MaybePromise<ComboboxOption[]>)` (required)\n - Array of options or async function that returns options based on search value\n - For arrays: filtered client-side\n - For functions: called with search value, returns Promise or array\n\n- **value**: `string | null` (bindable)\n - Selected option value\n- **defaultValue**: `string | null` (default: `null`)\n - Initial selected value when `value` is omitted\n\n- **searchValue**: `string` (default: `''`, bindable)\n - Current search input value\n\n- **loading**: `boolean` (default: `false`, bindable)\n - Loading state (managed automatically for async options)\n\n### Behavior Props\n\n- **showAllOnFocus**: `boolean` (default: `false`)\n - Show all options when input is focused, even without typing\n\n- **getValueOption**: `(value: string) => MaybePromise<ComboboxOption | null | undefined>`\n - Function to get option data for a value when not in loaded options\n - Useful for async options with pre-selected values\n\n- **placeholder**: `string` (default: `''`)\n - Input placeholder text\n\n- **loadingText**: `string` (default: `'Loading...'`)\n - Text displayed while loading options\n\n- **noOptionsText**: `string` (default: `'No options found'`)\n - Text displayed when no options match\n\n### Field Props\n\n- **required**: `boolean` (default: `false`)\n- **disabled**: `boolean`\n- **size**: `'small' | 'normal' | 'large'` (default: `'normal'`)\n- **density**: `'compact' | 'normal' | 'comfortable'` (default: `'normal'`) - Spacing density forwarded to the dropdown option rows (paddings, gaps, min-height)\n- **name**: `string`\n- **errors**: `string[] | boolean` (bindable)\n- **focused**: `boolean` (bindable)\n- **description**: `string`\n\n### Event Props\n\n- **onValueChange**: `({ value, option }: { value: string | null; option: ComboboxOption | null }) => void`\n - Called when selection changes\n - Receives a named payload with both the value and full option object\n\n- **onValidate**: `(value: string) => string[] | boolean`\n - Custom validation function\n\n### Slot Props\n\n- **prefix**: `Snippet | false` (default: magnifying glass icon)\n - Prefix content. Set to `false` to hide default icon\n\n- **suffix**: `Snippet`\n - Suffix content (clear button shown automatically when value exists)\n\n### Theme Props\n\n- **theme**: `ComboboxThemeProps`\n - Customize styling for: input, inputContainer, loading, error, noOptions\n - Option rows are `MenuOption` components: style them globally with `setMenuOptionTheme` from `entasis/menu-option`\n\n## Examples\n\n### Array Options (Client-side Filtering)\n\n```svelte\n<script>\n\tlet value = $state(null);\n\tconst countries = [\n\t\t{ value: 'us', label: 'United States' },\n\t\t{ value: 'uk', label: 'United Kingdom' }\n\t];\n</script>\n\n<Combobox\n\titems={countries}\n\tbind:value={value}\n\tplaceholder=\"Search countries...\"\n/>\n```\n\n### Async Options (API Call)\n\n```svelte\n<script lang=\"ts\">\n\tlet value = $state(null);\n\tconst getOptions = async (searchValue?: string) => {\n\t\tconst response = await fetch(`/api/search?q=${searchValue}`);\n\t\treturn response.json();\n\t};\n</script>\n\n<Combobox\n\titems={getOptions}\n\tbind:value={value}\n\tplaceholder=\"Search async...\"\n/>\n```\n\n### Show All Options on Focus\n\n```svelte\n<Combobox\n\titems={countries}\n\tshowAllOnFocus={true}\n\tbind:value={value}\n/>\n```\n\n### Pre-selected Value with Async Options\n\n```svelte\n<script lang=\"ts\">\n\timport type { ComboboxOption } from 'entasis/combobox';\n\tlet value = $state<string | null>('us');\n\tconst getValueOption = async (value: string): Promise<ComboboxOption> => {\n\t\treturn { value, label: 'United States' };\n\t};\n\tconst getOptions = async (searchValue?: string): Promise<ComboboxOption[]> => {\n\t\tconst response = await fetch(`/api/countries?q=${searchValue ?? ''}`);\n\t\treturn response.json();\n\t};\n</script>\n\n<Combobox\n\titems={getOptions}\n\tbind:value={value}\n\tgetValueOption={getValueOption}\n/>\n```\n\n## State Management\n\n- **value**: Bindable string (option value) or null\n- **searchValue**: Bindable string for search input\n- **loading**: Bindable boolean, automatically managed for async options\n- **errors**: Bindable array or boolean for validation errors\n- **focused**: Bindable boolean for focus state\n\n## Accessibility\n\n- Full ARIA combobox pattern implementation\n- **role=\"combobox\"** on input\n- **role=\"listbox\"** on options container\n- **role=\"option\"** on each option\n- **aria-expanded**, **aria-controls**, **aria-activedescendant** for state\n- **aria-autocomplete=\"list\"** for search behavior\n- Keyboard navigation: ArrowDown/Up (wraps around), Enter (select), Escape (close), Home/End (first/last)\n- Screen reader announcements for loading and error states\n\n## Notes\n\n- **Debouncing**: Search is debounced by 100ms to reduce API calls\n- **Race Conditions**: Handled automatically - only latest async request updates state\n- **Option Format**: Options must have `value` (string) and `label` (string). Optional `description` displays below label\n- **Keyboard Navigation**: Wraps around - ArrowDown at bottom goes to top, ArrowUp at top goes to bottom\n- **Empty States**: Shows loading text, error message, or no options text appropriately\n- **Clear Button**: Automatically shown when value exists, uses the shared field action button hitbox\n- **Default Prefix**: Magnifying glass icon shown by default unless `prefix={false}` or custom snippet provided\n\n## Theme Customization\n\nThe Combobox component uses a theme object that can be customized using the `theme` prop or by setting a global theme.\n\n### Theme Structure\n\nThe theme object contains the following parts:\n- **input**: Input element styles\n- **inputContainer**: Input container wrapper styles\n- **loading**: Loading state indicator styles\n- **error**: Error message styles\n- **noOptions**: No options found message styles\n\nOption rows are rendered with the shared `MenuOption` component (parts: root, title, description, prefix, suffix, content) and are themed through `setMenuOptionTheme` from `entasis/menu-option`, not through the Combobox theme.\n\n### Available Variants\n\n**input**:\n- base: Base classes applied to the input element\n- Variants:\n - size: 'small' | 'normal' | 'large' - Text size\n - disabled: boolean - Disabled state styling\n\n**inputContainer**:\n- base: Base classes for the input container\n- Variants:\n - size: 'small' | 'normal' | 'large' - Size-based styling\n - disabled: boolean - Disabled state styling\n\n**loading**:\n- base: Base classes for loading indicator\n\n**error**:\n- base: Base classes for error message\n\n**noOptions**:\n- base: Base classes for no options message\n\n### Usage Examples\n\n**Basic Theme Override**:\n```svelte\n<Combobox\n items={items}\n bind:value={value}\n theme={{\n inputContainer: {\n base: 'border-2 rounded-lg',\n size: {\n normal: 'px-4 py-2'\n }\n },\n noOptions: {\n base: 'italic'\n }\n }}\n/>\n```\n\n**Custom Option Styling** (option rows use the shared MenuOption theme):\n```svelte\n<script lang=\"ts\">\n import { setMenuOptionTheme } from '../../MenuOption/index.ts';\n\n let value = $state<string | null>(null);\n const items = [\n { value: 'us', label: 'United States', description: 'North America' },\n { value: 'uk', label: 'United Kingdom', description: 'Europe' }\n ];\n\n setMenuOptionTheme({\n root: {\n base: 'rounded-md transition-colors'\n },\n title: {\n base: 'font-semibold'\n },\n description: {\n base: 'text-sm text-neutral/70'\n }\n });\n</script>\n\n<Combobox items={items} bind:value={value} />\n```\n\n**Global Theme Setting**:\n```svelte\n<script>\n import { setComboboxTheme } from './index.ts';\n \n setComboboxTheme({\n inputContainer: {\n base: 'rounded-lg border-2 transition-all',\n size: {\n normal: 'px-4 py-2'\n }\n },\n loading: {\n base: 'italic'\n }\n });\n</script>\n```\n";
|
|
1
|
+
export declare const comboboxDescription = "\n# Combobox Component\n\nA searchable dropdown component that supports both static arrays and async option loading. Provides keyboard navigation, debounced search, and full ARIA accessibility. Use it when users need to search and select from a large list of options.\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { Combobox } from 'entasis/combobox';\n\tlet value = $state(null);\n\tconst items = [\n\t\t{ value: 'us', label: 'United States', description: 'North America' },\n\t\t{ value: 'uk', label: 'United Kingdom', description: 'Europe' }\n\t];\n</script>\n\n<Combobox\n\tplaceholder=\"Search countries...\"\n\titems={items}\n\tbind:value={value}\n/>\n```\n\n## Props\n\n### Core Props\n\n- **items**: `ComboboxItems | ((searchValue: string | undefined, request: { signal: AbortSignal }) => MaybePromise<ComboboxItems>)` (required)\n - Array of options (and groups) or a function that returns them for the search text\n - `ComboboxItems` is `(ComboboxOption | { label?: string; items: ComboboxOption[] })[]`; flat options and groups can be mixed. `ComboboxOption` is `{ value; label; description?; disabled?; data? }`\n - For arrays: filtered client-side with a case- and accent-insensitive match on the label, in the active I18n locale (\"eclair\" finds \"\u00C9clair\")\n - For functions: called (after a 100ms pause in typing) with the search text and `{ signal }`. The signal is aborted when a newer search replaces the request, and a response that is not the latest is ignored, so a slow answer never overwrites a newer list. The last results stay visible, marked busy, while the next request loads\n\n- **value**: `string | null` (bindable)\n - Selected option value\n- **defaultValue**: `string | null` (default: `null`)\n - Initial selected value when `value` is omitted\n\n- **searchValue**: `string` (default: `''`, bindable)\n - Current search input value (a draft: it is never submitted by a native form)\n\n- **open**: `boolean` (bindable) / **defaultOpen**: `boolean` (default: `false`)\n - Whether the options list is open. The list only renders while there is something to show (options, a loading or error message, or the \"no options\" message for the typed text)\n - **onOpenChange**: `(open, details) => void` runs before the list opens or closes. `details` carries `reason` (`'input-change'`, `'escape-key'`, `'item-press'`, `'list-navigation'`, `'trigger-press'`, `'trigger-focus'`, `'focus-out'`), `event`, `interaction` and `cancel()`; a cancelled change leaves the list as it was\n - **onAfterOpen** / **onAfterClose**: `() => void` fire once after the open or close transition\n\n- **loading**: `boolean` (default: `false`, bindable)\n - Loading state (managed automatically for async options)\n\n### Behavior Props\n\n- **openOnFocus**: `boolean` (default: `false`)\n - Open the list when the input receives focus, even before typing: static arrays list every option, `items` functions are called with an empty search\n- **showAllOnFocus**: `boolean` (deprecated alias of `openOnFocus`, kept for one minor)\n\n- **filter**: `(option, searchValue) => boolean` - Custom match for static arrays (functions filter themselves)\n- **limit**: `number` - Show at most this many matches; matching stops once the limit is reached, across groups\n\n- **autoHighlight**: `boolean | 'always'` (default: `'always'`)\n - `'always'` keeps the first match (or the selected option while the text is empty) highlighted; `true` only while text 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 (focus stays in the input), or stop\n- **separators**: `boolean` (default: `true`) - Separators between consecutive groups\n- **item**: `Snippet<[ComboboxOption]>` - Custom row renderer, replaces the title and description layout\n- **readOnly**: `boolean` - The list opens and can be browsed, but the value cannot change: choosing does nothing, the clear button is hidden, the input is natively `readonly`. The value still submits\n\n- **getValueOption**: `(value: string) => MaybePromise<ComboboxOption | null | undefined>`\n - Function to get option data for a value when not in loaded options\n - Useful for async options with pre-selected values\n\n- **placeholder**: `string` (default: `''`)\n - Input placeholder text\n\n- **loadingText**: `string` (default: `'Loading...'`)\n - Text displayed while loading options\n\n- **noOptionsText**: `string` (default: `'No options found'`)\n - Text displayed when no options match\n\n### Field Props\n\n- **required**: `boolean` (default: `false`)\n- **disabled**: `boolean`\n- **size**: `'small' | 'normal' | 'large'` (default: `'normal'`)\n- **density**: `'compact' | 'normal' | 'comfortable'` (default: `'normal'`) - Spacing density forwarded to the dropdown option rows (paddings, gaps, min-height)\n- **name**: `string`\n- **errors**: `string[] | boolean` (bindable)\n- **focused**: `boolean` (bindable)\n- **description**: `string`\n\n### Event Props\n\n- **onValueChange**: `({ value, option }: { value: string | null; option: ComboboxOption | null }) => void`\n - Called when selection changes\n - Receives a named payload with both the value and full option object\n\n- **onHighlightChange**: `({ value, reason, event }) => void`\n - Called when the highlighted option changes. `value` is the option's value or `undefined`; `reason` is `'keyboard'`, `'pointer'` or `'list'` (results changed, or the list opened); `event` is the KeyboardEvent or pointer event, absent for `'list'`\n\n- **onValidate**: `(value: string) => string[] | boolean`\n - Custom validation function\n\n### Slot Props\n\n- **prefix**: `Snippet | false` (default: magnifying glass icon)\n - Prefix content. Set to `false` to hide default icon\n\n- **suffix**: `Snippet`\n - Suffix content (clear button shown automatically when value exists)\n\n### Theme Props\n\n- **theme**: `ComboboxThemeProps`\n - Customize styling for: input, inputContainer, loading, error, noOptions\n - Option rows are `MenuOption` components: style them globally with `setMenuOptionTheme` from `entasis/menu-option`\n\n## Examples\n\n### Array Options (Client-side Filtering)\n\n```svelte\n<script>\n\tlet value = $state(null);\n\tconst countries = [\n\t\t{ value: 'us', label: 'United States' },\n\t\t{ value: 'uk', label: 'United Kingdom' }\n\t];\n</script>\n\n<Combobox\n\titems={countries}\n\tbind:value={value}\n\tplaceholder=\"Search countries...\"\n/>\n```\n\n### Async Options (API Call)\n\n```svelte\n<script lang=\"ts\">\n\tlet value = $state(null);\n\tconst getOptions = async (searchValue?: string) => {\n\t\tconst response = await fetch(`/api/search?q=${searchValue}`);\n\t\treturn response.json();\n\t};\n</script>\n\n<Combobox\n\titems={getOptions}\n\tbind:value={value}\n\tplaceholder=\"Search async...\"\n/>\n```\n\n### Open on Focus\n\n```svelte\n<Combobox\n\titems={countries}\n\topenOnFocus\n\tbind:value={value}\n/>\n```\n\n### Pre-selected Value with Async Options\n\n```svelte\n<script lang=\"ts\">\n\timport type { ComboboxOption } from 'entasis/combobox';\n\tlet value = $state<string | null>('us');\n\tconst getValueOption = async (value: string): Promise<ComboboxOption> => {\n\t\treturn { value, label: 'United States' };\n\t};\n\tconst getOptions = async (searchValue?: string): Promise<ComboboxOption[]> => {\n\t\tconst response = await fetch(`/api/countries?q=${searchValue ?? ''}`);\n\t\treturn response.json();\n\t};\n</script>\n\n<Combobox\n\titems={getOptions}\n\tbind:value={value}\n\tgetValueOption={getValueOption}\n/>\n```\n\n### Groups, Disabled Options and Custom Rows\n\n```svelte\n<Combobox\n\topenOnFocus\n\titems={[\n\t\t{ label: 'Europe', items: [{ value: 'fr', label: 'France' }, { value: 'de', label: 'Germany' }] },\n\t\t{ label: 'Asia', items: [{ value: 'cn', label: 'China', disabled: true }] }\n\t]}\n\tbind:value={value}\n>\n\t{#snippet item(option)}\n\t\t<span>{option.label}</span>\n\t{/snippet}\n</Combobox>\n```\n\n### Abortable Async Options\n\n```svelte\n<script lang=\"ts\">\n\tconst getOptions = async (searchValue: string | undefined, { signal }: { signal: AbortSignal }) => {\n\t\tconst response = await fetch(`/api/countries?q=${searchValue ?? ''}`, { signal });\n\t\treturn response.json();\n\t};\n</script>\n\n<Combobox items={getOptions} bind:value={value} />\n```\n\n## State Management\n\n- **value**: Bindable string (option value) or null\n- **searchValue**: Bindable string for search input\n- **loading**: Bindable boolean, automatically managed for async options\n- **open**: Bindable boolean for the list\n- **errors**: Bindable array or boolean for validation errors\n- **focused**: Bindable boolean for focus state\n\n## Styling hooks\n\nThe input, the field container, the list panel and every option carry state attributes. `data-highlighted` and `data-selected` are written as `\"true\"`; match them by presence.\n\nAttributes are presence attributes (set while the state holds, omitted otherwise) unless they carry a value.\n\n**Data attributes**\n- `data-popup-open`: On the input and the field container around it: present while the list (or its empty, loading or error status) shows.\n- `data-popup-side`: On the field container: the side of the field the list sits on.\n- `data-disabled`: On the input: present while disabled. On an option: present while it is disabled.\n- `data-highlighted`: On an option: present while the keyboard or the pointer highlights it.\n- `data-selected`: On an option: present while it is the value.\n- `data-open`: On the list panel: present while open.\n- `data-closed`: On the list panel: present while its exit transition plays.\n- `data-entering`: On the list panel: present while the enter transition plays.\n- `data-exiting`: On the list panel: present while the exit transition plays.\n- `data-side`: On the list panel: the side of the field it sits on after flipping.\n- `data-align`: On the list panel: `start`, `center` or `end`.\n\n**CSS variables** (set on the list panel's positioned wrapper and inherited by the list)\n- `--available-width`: The width in px the panel can take before it reaches the viewport edges, minus 20px.\n- `--available-height`: The room in px between the trigger and the viewport edge on the panel's side, minus 20px. Cap a scrolling list with `max-height: min(240px, var(--available-height))`.\n- `--anchor-width`: The trigger's width in px, snapped to the device pixel grid.\n- `--anchor-height`: The trigger's height in px, snapped to the device pixel grid.\n- `--transform-origin`: The panel corner facing the trigger, mirrored in right-to-left documents; the point the panel scales from.\n\nThe typed maps `comboboxDataAttributes` and `comboboxCssVariables` (from `entasis/combobox`) list each name with its meaning.\n\n## Accessibility\n\n- Full ARIA combobox pattern implementation\n- **role=\"combobox\"** on input\n- **role=\"listbox\"** on options container\n- **role=\"option\"** on each option\n- **aria-expanded**, **aria-controls**, **aria-activedescendant** for state\n- **aria-autocomplete=\"list\"** for search behavior\n- Keyboard navigation: ArrowDown/ArrowUp open a closed list (with every option) and then move the highlight, Enter selects, Escape closes the list and keeps focus in the input (a second Escape clears the typed text), Home/End jump to the first/last option\n- Clicking the already-focused input toggles the list; choosing an option, Clear and Escape all keep focus in the input\n- The listbox owns only options and groups; the loading, error and \"no options\" messages sit beside it, and `aria-expanded` is true while options are listed\n- One persistent visually hidden live region (`role=\"status\"`) next to the input announces result counts (\"3 results available\"), the empty state, loading and errors after typing settles\n- The highlight follows the selected option when the list opens and when the text is cleared\n\n## Notes\n\n- **Debouncing**: Search is debounced by 100ms to reduce API calls\n- **Race Conditions**: Handled automatically - older requests are aborted and only the latest response updates state\n- **Native forms**: The search box carries no `name`. A hidden input beside it submits the selected value under `name` (nothing when there is no name or the field is disabled); `required` blocks a native submit while nothing is selected\n- **Closing**: Escape, choosing an option, or focus leaving the field closes the list; the rows stay on screen through the exit transition\n- **Option Format**: Options must have `value` (string) and `label` (string). Optional `description` displays below label\n- **Keyboard Navigation**: Wraps around by default - ArrowDown at bottom goes to top, ArrowUp at top goes to bottom (see `loop`)\n- **Groups and disabled options**: Disabled options are dimmed and skipped by the keyboard; groups render like Select's (`role=\"group\"` with a hidden label, presentational separators)\n- **Empty States**: Shows loading text, error message, or no options text appropriately\n- **Clear Button**: Automatically shown when value exists, uses the shared field action button hitbox\n- **Default Prefix**: Magnifying glass icon shown by default unless `prefix={false}` or custom snippet provided\n- **List height**: The option list scrolls beyond 200px, or beyond the room left between the field and the viewport edge (the Popover's `--available-height`), so it shrinks above an on-screen keyboard instead of running under it\n- **Styling hooks**: While the list is open, the field it is anchored to carries `data-popup-side` (`bottom` or `top`) and the panel `data-side`\n\n## Theme Customization\n\nThe Combobox component uses a theme object that can be customized using the `theme` prop or by setting a global theme.\n\n### Theme Structure\n\nThe theme object contains the following parts:\n- **input**: Input element styles\n- **inputContainer**: Input container wrapper styles\n- **loading**: Loading state indicator styles\n- **error**: Error message styles\n- **noOptions**: No options found message styles\n- **group**, **groupLabel**, **separator**: Group container, group label and the divider between groups\n\nOption rows are rendered with the shared `MenuOption` component (parts: root, title, description, prefix, suffix, content) and are themed through `setMenuOptionTheme` from `entasis/menu-option`, not through the Combobox theme.\n\n### Available Variants\n\n**input**:\n- base: Base classes applied to the input element\n- Variants:\n - size: 'small' | 'normal' | 'large' - Text size\n - disabled: boolean - Disabled state styling\n\n**inputContainer**:\n- base: Base classes for the input container\n- Variants:\n - size: 'small' | 'normal' | 'large' - Size-based styling\n - disabled: boolean - Disabled state styling\n\n**loading**:\n- base: Base classes for loading indicator\n\n**error**:\n- base: Base classes for error message\n\n**noOptions**:\n- base: Base classes for no options message\n\n**group**, **groupLabel**, **separator**:\n- base: Base classes for a labelled group, its label and the divider between groups\n\n### Usage Examples\n\n**Basic Theme Override**:\n```svelte\n<Combobox\n items={items}\n bind:value={value}\n theme={{\n inputContainer: {\n base: 'border-2 rounded-lg',\n size: {\n normal: 'px-4 py-2'\n }\n },\n noOptions: {\n base: 'italic'\n }\n }}\n/>\n```\n\n**Custom Option Styling** (option rows use the shared MenuOption theme):\n```svelte\n<script lang=\"ts\">\n import { setMenuOptionTheme } from '../../MenuOption/index.ts';\n\n let value = $state<string | null>(null);\n const items = [\n { value: 'us', label: 'United States', description: 'North America' },\n { value: 'uk', label: 'United Kingdom', description: 'Europe' }\n ];\n\n setMenuOptionTheme({\n root: {\n base: 'rounded-md transition-colors'\n },\n title: {\n base: 'font-semibold'\n },\n description: {\n base: 'text-sm text-neutral/70'\n }\n });\n</script>\n\n<Combobox items={items} bind:value={value} />\n```\n\n**Global Theme Setting**:\n```svelte\n<script>\n import { setComboboxTheme } from './index.ts';\n \n setComboboxTheme({\n inputContainer: {\n base: 'rounded-lg border-2 transition-all',\n size: {\n normal: 'px-4 py-2'\n }\n },\n loading: {\n base: 'italic'\n }\n });\n</script>\n```\n";
|
|
@@ -26,10 +26,11 @@ A searchable dropdown component that supports both static arrays and async optio
|
|
|
26
26
|
|
|
27
27
|
### Core Props
|
|
28
28
|
|
|
29
|
-
- **items**: \`
|
|
30
|
-
- Array of options or
|
|
31
|
-
-
|
|
32
|
-
- For
|
|
29
|
+
- **items**: \`ComboboxItems | ((searchValue: string | undefined, request: { signal: AbortSignal }) => MaybePromise<ComboboxItems>)\` (required)
|
|
30
|
+
- Array of options (and groups) or a function that returns them for the search text
|
|
31
|
+
- \`ComboboxItems\` is \`(ComboboxOption | { label?: string; items: ComboboxOption[] })[]\`; flat options and groups can be mixed. \`ComboboxOption\` is \`{ value; label; description?; disabled?; data? }\`
|
|
32
|
+
- For arrays: filtered client-side with a case- and accent-insensitive match on the label, in the active I18n locale ("eclair" finds "Éclair")
|
|
33
|
+
- For functions: called (after a 100ms pause in typing) with the search text and \`{ signal }\`. The signal is aborted when a newer search replaces the request, and a response that is not the latest is ignored, so a slow answer never overwrites a newer list. The last results stay visible, marked busy, while the next request loads
|
|
33
34
|
|
|
34
35
|
- **value**: \`string | null\` (bindable)
|
|
35
36
|
- Selected option value
|
|
@@ -37,15 +38,31 @@ A searchable dropdown component that supports both static arrays and async optio
|
|
|
37
38
|
- Initial selected value when \`value\` is omitted
|
|
38
39
|
|
|
39
40
|
- **searchValue**: \`string\` (default: \`''\`, bindable)
|
|
40
|
-
- Current search input value
|
|
41
|
+
- Current search input value (a draft: it is never submitted by a native form)
|
|
42
|
+
|
|
43
|
+
- **open**: \`boolean\` (bindable) / **defaultOpen**: \`boolean\` (default: \`false\`)
|
|
44
|
+
- Whether the options list is open. The list only renders while there is something to show (options, a loading or error message, or the "no options" message for the typed text)
|
|
45
|
+
- **onOpenChange**: \`(open, details) => void\` runs before the list opens or closes. \`details\` carries \`reason\` (\`'input-change'\`, \`'escape-key'\`, \`'item-press'\`, \`'list-navigation'\`, \`'trigger-press'\`, \`'trigger-focus'\`, \`'focus-out'\`), \`event\`, \`interaction\` and \`cancel()\`; a cancelled change leaves the list as it was
|
|
46
|
+
- **onAfterOpen** / **onAfterClose**: \`() => void\` fire once after the open or close transition
|
|
41
47
|
|
|
42
48
|
- **loading**: \`boolean\` (default: \`false\`, bindable)
|
|
43
49
|
- Loading state (managed automatically for async options)
|
|
44
50
|
|
|
45
51
|
### Behavior Props
|
|
46
52
|
|
|
47
|
-
- **
|
|
48
|
-
-
|
|
53
|
+
- **openOnFocus**: \`boolean\` (default: \`false\`)
|
|
54
|
+
- Open the list when the input receives focus, even before typing: static arrays list every option, \`items\` functions are called with an empty search
|
|
55
|
+
- **showAllOnFocus**: \`boolean\` (deprecated alias of \`openOnFocus\`, kept for one minor)
|
|
56
|
+
|
|
57
|
+
- **filter**: \`(option, searchValue) => boolean\` - Custom match for static arrays (functions filter themselves)
|
|
58
|
+
- **limit**: \`number\` - Show at most this many matches; matching stops once the limit is reached, across groups
|
|
59
|
+
|
|
60
|
+
- **autoHighlight**: \`boolean | 'always'\` (default: \`'always'\`)
|
|
61
|
+
- \`'always'\` keeps the first match (or the selected option while the text is empty) highlighted; \`true\` only while text is typed; \`false\` highlights nothing until an arrow key or the pointer moves it
|
|
62
|
+
- **loop**: \`'wrap' | 'input' | false\` (default: \`'wrap'\`) - Past either end of the list: continue at the other end, land on no highlight first (focus stays in the input), or stop
|
|
63
|
+
- **separators**: \`boolean\` (default: \`true\`) - Separators between consecutive groups
|
|
64
|
+
- **item**: \`Snippet<[ComboboxOption]>\` - Custom row renderer, replaces the title and description layout
|
|
65
|
+
- **readOnly**: \`boolean\` - The list opens and can be browsed, but the value cannot change: choosing does nothing, the clear button is hidden, the input is natively \`readonly\`. The value still submits
|
|
49
66
|
|
|
50
67
|
- **getValueOption**: \`(value: string) => MaybePromise<ComboboxOption | null | undefined>\`
|
|
51
68
|
- Function to get option data for a value when not in loaded options
|
|
@@ -77,6 +94,9 @@ A searchable dropdown component that supports both static arrays and async optio
|
|
|
77
94
|
- Called when selection changes
|
|
78
95
|
- Receives a named payload with both the value and full option object
|
|
79
96
|
|
|
97
|
+
- **onHighlightChange**: \`({ value, reason, event }) => void\`
|
|
98
|
+
- Called when the highlighted option changes. \`value\` is the option's value or \`undefined\`; \`reason\` is \`'keyboard'\`, \`'pointer'\` or \`'list'\` (results changed, or the list opened); \`event\` is the KeyboardEvent or pointer event, absent for \`'list'\`
|
|
99
|
+
|
|
80
100
|
- **onValidate**: \`(value: string) => string[] | boolean\`
|
|
81
101
|
- Custom validation function
|
|
82
102
|
|
|
@@ -132,12 +152,12 @@ A searchable dropdown component that supports both static arrays and async optio
|
|
|
132
152
|
/>
|
|
133
153
|
\`\`\`
|
|
134
154
|
|
|
135
|
-
###
|
|
155
|
+
### Open on Focus
|
|
136
156
|
|
|
137
157
|
\`\`\`svelte
|
|
138
158
|
<Combobox
|
|
139
159
|
items={countries}
|
|
140
|
-
|
|
160
|
+
openOnFocus
|
|
141
161
|
bind:value={value}
|
|
142
162
|
/>
|
|
143
163
|
\`\`\`
|
|
@@ -164,14 +184,73 @@ A searchable dropdown component that supports both static arrays and async optio
|
|
|
164
184
|
/>
|
|
165
185
|
\`\`\`
|
|
166
186
|
|
|
187
|
+
### Groups, Disabled Options and Custom Rows
|
|
188
|
+
|
|
189
|
+
\`\`\`svelte
|
|
190
|
+
<Combobox
|
|
191
|
+
openOnFocus
|
|
192
|
+
items={[
|
|
193
|
+
{ label: 'Europe', items: [{ value: 'fr', label: 'France' }, { value: 'de', label: 'Germany' }] },
|
|
194
|
+
{ label: 'Asia', items: [{ value: 'cn', label: 'China', disabled: true }] }
|
|
195
|
+
]}
|
|
196
|
+
bind:value={value}
|
|
197
|
+
>
|
|
198
|
+
{#snippet item(option)}
|
|
199
|
+
<span>{option.label}</span>
|
|
200
|
+
{/snippet}
|
|
201
|
+
</Combobox>
|
|
202
|
+
\`\`\`
|
|
203
|
+
|
|
204
|
+
### Abortable Async Options
|
|
205
|
+
|
|
206
|
+
\`\`\`svelte
|
|
207
|
+
<script lang="ts">
|
|
208
|
+
const getOptions = async (searchValue: string | undefined, { signal }: { signal: AbortSignal }) => {
|
|
209
|
+
const response = await fetch(\`/api/countries?q=\${searchValue ?? ''}\`, { signal });
|
|
210
|
+
return response.json();
|
|
211
|
+
};
|
|
212
|
+
</script>
|
|
213
|
+
|
|
214
|
+
<Combobox items={getOptions} bind:value={value} />
|
|
215
|
+
\`\`\`
|
|
216
|
+
|
|
167
217
|
## State Management
|
|
168
218
|
|
|
169
219
|
- **value**: Bindable string (option value) or null
|
|
170
220
|
- **searchValue**: Bindable string for search input
|
|
171
221
|
- **loading**: Bindable boolean, automatically managed for async options
|
|
222
|
+
- **open**: Bindable boolean for the list
|
|
172
223
|
- **errors**: Bindable array or boolean for validation errors
|
|
173
224
|
- **focused**: Bindable boolean for focus state
|
|
174
225
|
|
|
226
|
+
## Styling hooks
|
|
227
|
+
|
|
228
|
+
The input, the field container, the list panel and every option carry state attributes. \`data-highlighted\` and \`data-selected\` are written as \`"true"\`; match them by presence.
|
|
229
|
+
|
|
230
|
+
Attributes are presence attributes (set while the state holds, omitted otherwise) unless they carry a value.
|
|
231
|
+
|
|
232
|
+
**Data attributes**
|
|
233
|
+
- \`data-popup-open\`: On the input and the field container around it: present while the list (or its empty, loading or error status) shows.
|
|
234
|
+
- \`data-popup-side\`: On the field container: the side of the field the list sits on.
|
|
235
|
+
- \`data-disabled\`: On the input: present while disabled. On an option: present while it is disabled.
|
|
236
|
+
- \`data-highlighted\`: On an option: present while the keyboard or the pointer highlights it.
|
|
237
|
+
- \`data-selected\`: On an option: present while it is the value.
|
|
238
|
+
- \`data-open\`: On the list panel: present while open.
|
|
239
|
+
- \`data-closed\`: On the list panel: present while its exit transition plays.
|
|
240
|
+
- \`data-entering\`: On the list panel: present while the enter transition plays.
|
|
241
|
+
- \`data-exiting\`: On the list panel: present while the exit transition plays.
|
|
242
|
+
- \`data-side\`: On the list panel: the side of the field it sits on after flipping.
|
|
243
|
+
- \`data-align\`: On the list panel: \`start\`, \`center\` or \`end\`.
|
|
244
|
+
|
|
245
|
+
**CSS variables** (set on the list panel's positioned wrapper and inherited by the list)
|
|
246
|
+
- \`--available-width\`: The width in px the panel can take before it reaches the viewport edges, minus 20px.
|
|
247
|
+
- \`--available-height\`: The room in px between the trigger and the viewport edge on the panel's side, minus 20px. Cap a scrolling list with \`max-height: min(240px, var(--available-height))\`.
|
|
248
|
+
- \`--anchor-width\`: The trigger's width in px, snapped to the device pixel grid.
|
|
249
|
+
- \`--anchor-height\`: The trigger's height in px, snapped to the device pixel grid.
|
|
250
|
+
- \`--transform-origin\`: The panel corner facing the trigger, mirrored in right-to-left documents; the point the panel scales from.
|
|
251
|
+
|
|
252
|
+
The typed maps \`comboboxDataAttributes\` and \`comboboxCssVariables\` (from \`entasis/combobox\`) list each name with its meaning.
|
|
253
|
+
|
|
175
254
|
## Accessibility
|
|
176
255
|
|
|
177
256
|
- Full ARIA combobox pattern implementation
|
|
@@ -180,18 +259,26 @@ A searchable dropdown component that supports both static arrays and async optio
|
|
|
180
259
|
- **role="option"** on each option
|
|
181
260
|
- **aria-expanded**, **aria-controls**, **aria-activedescendant** for state
|
|
182
261
|
- **aria-autocomplete="list"** for search behavior
|
|
183
|
-
- Keyboard navigation: ArrowDown/
|
|
184
|
-
-
|
|
262
|
+
- Keyboard navigation: ArrowDown/ArrowUp open a closed list (with every option) and then move the highlight, Enter selects, Escape closes the list and keeps focus in the input (a second Escape clears the typed text), Home/End jump to the first/last option
|
|
263
|
+
- Clicking the already-focused input toggles the list; choosing an option, Clear and Escape all keep focus in the input
|
|
264
|
+
- The listbox owns only options and groups; the loading, error and "no options" messages sit beside it, and \`aria-expanded\` is true while options are listed
|
|
265
|
+
- One persistent visually hidden live region (\`role="status"\`) next to the input announces result counts ("3 results available"), the empty state, loading and errors after typing settles
|
|
266
|
+
- The highlight follows the selected option when the list opens and when the text is cleared
|
|
185
267
|
|
|
186
268
|
## Notes
|
|
187
269
|
|
|
188
270
|
- **Debouncing**: Search is debounced by 100ms to reduce API calls
|
|
189
|
-
- **Race Conditions**: Handled automatically - only latest
|
|
271
|
+
- **Race Conditions**: Handled automatically - older requests are aborted and only the latest response updates state
|
|
272
|
+
- **Native forms**: The search box carries no \`name\`. A hidden input beside it submits the selected value under \`name\` (nothing when there is no name or the field is disabled); \`required\` blocks a native submit while nothing is selected
|
|
273
|
+
- **Closing**: Escape, choosing an option, or focus leaving the field closes the list; the rows stay on screen through the exit transition
|
|
190
274
|
- **Option Format**: Options must have \`value\` (string) and \`label\` (string). Optional \`description\` displays below label
|
|
191
|
-
- **Keyboard Navigation**: Wraps around - ArrowDown at bottom goes to top, ArrowUp at top goes to bottom
|
|
275
|
+
- **Keyboard Navigation**: Wraps around by default - ArrowDown at bottom goes to top, ArrowUp at top goes to bottom (see \`loop\`)
|
|
276
|
+
- **Groups and disabled options**: Disabled options are dimmed and skipped by the keyboard; groups render like Select's (\`role="group"\` with a hidden label, presentational separators)
|
|
192
277
|
- **Empty States**: Shows loading text, error message, or no options text appropriately
|
|
193
278
|
- **Clear Button**: Automatically shown when value exists, uses the shared field action button hitbox
|
|
194
279
|
- **Default Prefix**: Magnifying glass icon shown by default unless \`prefix={false}\` or custom snippet provided
|
|
280
|
+
- **List height**: The option list scrolls beyond 200px, or beyond the room left between the field and the viewport edge (the Popover's \`--available-height\`), so it shrinks above an on-screen keyboard instead of running under it
|
|
281
|
+
- **Styling hooks**: While the list is open, the field it is anchored to carries \`data-popup-side\` (\`bottom\` or \`top\`) and the panel \`data-side\`
|
|
195
282
|
|
|
196
283
|
## Theme Customization
|
|
197
284
|
|
|
@@ -205,6 +292,7 @@ The theme object contains the following parts:
|
|
|
205
292
|
- **loading**: Loading state indicator styles
|
|
206
293
|
- **error**: Error message styles
|
|
207
294
|
- **noOptions**: No options found message styles
|
|
295
|
+
- **group**, **groupLabel**, **separator**: Group container, group label and the divider between groups
|
|
208
296
|
|
|
209
297
|
Option rows are rendered with the shared \`MenuOption\` component (parts: root, title, description, prefix, suffix, content) and are themed through \`setMenuOptionTheme\` from \`entasis/menu-option\`, not through the Combobox theme.
|
|
210
298
|
|
|
@@ -231,6 +319,9 @@ Option rows are rendered with the shared \`MenuOption\` component (parts: root,
|
|
|
231
319
|
**noOptions**:
|
|
232
320
|
- base: Base classes for no options message
|
|
233
321
|
|
|
322
|
+
**group**, **groupLabel**, **separator**:
|
|
323
|
+
- base: Base classes for a labelled group, its label and the divider between groups
|
|
324
|
+
|
|
234
325
|
### Usage Examples
|
|
235
326
|
|
|
236
327
|
**Basic Theme Override**:
|
|
@@ -3,6 +3,8 @@ import type { Messages } from '../../../i18n/en.js';
|
|
|
3
3
|
import type { InputProps } from '../Field/field.js';
|
|
4
4
|
import type { ComboboxThemeProps } from './combobox.theme.js';
|
|
5
5
|
import type { Snippet } from 'svelte';
|
|
6
|
+
import type { OpenChangeHandler } from '../../../utils/openChange.js';
|
|
7
|
+
import type { HighlightReason, ListLoop } from '../../../utils/useListNavigation.svelte.js';
|
|
6
8
|
export type MaybePromise<T> = T | Promise<T>;
|
|
7
9
|
export type ComboboxOption = {
|
|
8
10
|
/** Unique value submitted when this option is selected. */
|
|
@@ -11,51 +13,143 @@ export type ComboboxOption = {
|
|
|
11
13
|
label: string;
|
|
12
14
|
/** Supporting text rendered below the option label in the dropdown. */
|
|
13
15
|
description?: string;
|
|
16
|
+
/** Dims the option and keeps it out of keyboard navigation: it cannot be highlighted or selected. */
|
|
17
|
+
disabled?: boolean;
|
|
14
18
|
/** Optional arbitrary metadata attached to the option. */
|
|
15
19
|
data?: Record<string, unknown>;
|
|
16
20
|
};
|
|
21
|
+
export type ComboboxOptionGroup = {
|
|
22
|
+
/** Optional group label rendered above the group's options. */
|
|
23
|
+
label?: string;
|
|
24
|
+
/** The options of the group. */
|
|
25
|
+
items: ComboboxOption[];
|
|
26
|
+
};
|
|
27
|
+
/** Flat options and `{ label, items }` groups can be mixed freely, as in Select. */
|
|
28
|
+
export type ComboboxItems = (ComboboxOption | ComboboxOptionGroup)[];
|
|
29
|
+
/** Second argument of an `items` function. */
|
|
30
|
+
export type ComboboxItemsRequest = {
|
|
31
|
+
/**
|
|
32
|
+
* Aborted when a newer search replaces this request (or the list is no longer wanted). Pass it
|
|
33
|
+
* to `fetch` to cancel the network call; results of an aborted request are ignored either way.
|
|
34
|
+
*/
|
|
35
|
+
signal: AbortSignal;
|
|
36
|
+
};
|
|
37
|
+
/** The options, or a function that returns the options for the current search text. */
|
|
38
|
+
export type ComboboxItemsSource = ComboboxItems | ((searchValue: string | undefined, request: ComboboxItemsRequest) => MaybePromise<ComboboxItems>);
|
|
39
|
+
/** Decides whether an option matches the search text. */
|
|
40
|
+
export type ComboboxFilter = (option: ComboboxOption, searchValue: string) => boolean;
|
|
17
41
|
export type ComboboxValueChangePayload = {
|
|
18
42
|
value: string | null;
|
|
19
43
|
option: ComboboxOption | null;
|
|
20
44
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
45
|
+
/** Why the highlighted option changed: the keyboard, the pointer, or the list changing underneath it. */
|
|
46
|
+
export type ComboboxHighlightReason = HighlightReason;
|
|
47
|
+
export type ComboboxHighlightChangePayload = {
|
|
48
|
+
/** The highlighted option's value, or `undefined` when nothing is highlighted. */
|
|
49
|
+
value: string | undefined;
|
|
50
|
+
/** `'keyboard'` for keys, `'pointer'` for hover, `'list'` when results changed or the list opened. */
|
|
51
|
+
reason: ComboboxHighlightReason;
|
|
52
|
+
/** The keyboard or pointer event behind the change; absent for `'list'`. */
|
|
53
|
+
event?: Event;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Props shared by Combobox and TagsInput: the searchable list behind them. Both read the same
|
|
57
|
+
* options, open state and highlight model.
|
|
58
|
+
*/
|
|
59
|
+
export type ComboboxListProps = {
|
|
24
60
|
/** Bindable text currently typed in the search input. */
|
|
25
61
|
searchValue?: string;
|
|
26
62
|
/** Bindable flag indicating async options are being fetched. */
|
|
27
63
|
loading?: boolean;
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Whether the options list is open. Bindable. The list only shows while there is something to
|
|
66
|
+
* show (options, a loading or error message, or a "no options" message for the typed text).
|
|
67
|
+
*/
|
|
68
|
+
open?: boolean;
|
|
69
|
+
/** Initial open state when `open` is omitted. */
|
|
70
|
+
defaultOpen?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Called before the list opens or closes, with the requested state and the change details:
|
|
73
|
+
* `reason` (`'input-change'`, `'escape-key'`, `'item-press'`, `'list-navigation'`,
|
|
74
|
+
* `'trigger-press'`, `'trigger-focus'`, `'focus-out'`…), the originating `event`, the
|
|
75
|
+
* `interaction` type and `cancel()`. Calling `details.cancel()` keeps the list as it is.
|
|
76
|
+
*/
|
|
77
|
+
onOpenChange?: OpenChangeHandler;
|
|
78
|
+
/** Called once per open, after the open transition finishes. */
|
|
79
|
+
onAfterOpen?: () => void;
|
|
80
|
+
/** Called once per close, after the close transition finishes. */
|
|
81
|
+
onAfterClose?: () => void;
|
|
82
|
+
/**
|
|
83
|
+
* Open the list when the input receives focus, even before anything is typed: static arrays
|
|
84
|
+
* list every option, `items` functions are called with an empty search.
|
|
85
|
+
* @default false
|
|
86
|
+
*/
|
|
87
|
+
openOnFocus?: boolean;
|
|
88
|
+
/** @deprecated Use `openOnFocus`. Kept as an alias for one minor. */
|
|
89
|
+
showAllOnFocus?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Static array, or a function returning the options for the current search text. The function
|
|
92
|
+
* receives `{ signal }` as its second argument: it is aborted when a newer search replaces the
|
|
93
|
+
* request, and a response that is not the latest is ignored.
|
|
94
|
+
*/
|
|
95
|
+
items?: ComboboxItemsSource;
|
|
96
|
+
/**
|
|
97
|
+
* Decides whether an option matches the typed text, for static arrays. Defaults to a case- and
|
|
98
|
+
* accent-insensitive substring match on the label, compared in the active I18n locale
|
|
99
|
+
* ("eclair" finds "Éclair"). Functions passed as `items` filter themselves.
|
|
100
|
+
*/
|
|
101
|
+
filter?: ComboboxFilter;
|
|
102
|
+
/** Shows at most this many matching options. Matching stops once the limit is reached. */
|
|
103
|
+
limit?: number;
|
|
104
|
+
/**
|
|
105
|
+
* Which option is highlighted without keyboard input. `'always'` (default for Combobox) keeps
|
|
106
|
+
* the first match, or the selected option while the text is empty, highlighted; `true` does so
|
|
107
|
+
* only while text is typed; `false` highlights nothing until an arrow key or the pointer moves
|
|
108
|
+
* it, so Enter acts on the typed text.
|
|
109
|
+
*/
|
|
110
|
+
autoHighlight?: boolean | 'always';
|
|
111
|
+
/**
|
|
112
|
+
* What moving past either end of the list does: `'wrap'` continues at the other end (default),
|
|
113
|
+
* `'input'` lands on no highlight first (focus stays in the input) and wraps from there, and
|
|
114
|
+
* `false` stops at the end.
|
|
115
|
+
* @default 'wrap'
|
|
116
|
+
*/
|
|
117
|
+
loop?: ListLoop;
|
|
118
|
+
/** Called when the highlighted option changes, with the value, why it moved and the event behind it. */
|
|
119
|
+
onHighlightChange?: (payload: ComboboxHighlightChangePayload) => void;
|
|
120
|
+
/** Render a separator between consecutive groups. @default true */
|
|
121
|
+
separators?: boolean;
|
|
122
|
+
/** Custom row renderer: receives the option. Overrides the default title and description layout. */
|
|
123
|
+
item?: Snippet<[ComboboxOption]>;
|
|
32
124
|
/**
|
|
33
125
|
* Spacing density forwarded to the dropdown option rows (paddings, gaps, min-height).
|
|
34
126
|
* @default 'normal'
|
|
35
127
|
*/
|
|
36
128
|
density?: Density;
|
|
37
|
-
/** When true, shows all options on focus without a search query (static arrays only). */
|
|
38
|
-
showAllOnFocus?: boolean;
|
|
39
129
|
/**
|
|
40
130
|
* Function to get the label for a value when the option is not yet loaded.
|
|
41
131
|
* Useful for async options where the default value might not be in the initial options list.
|
|
42
132
|
*/
|
|
43
133
|
getValueOption?: (value: string) => MaybePromise<ComboboxOption | null | undefined>;
|
|
134
|
+
/** Text to display when loading options. Defaults to "Loading...". */
|
|
135
|
+
loadingText?: string;
|
|
136
|
+
/** Text to display when no options are found or available. Defaults to "No options found". */
|
|
137
|
+
noOptionsText?: string;
|
|
138
|
+
/** Per-instance i18n overrides merged over the global catalog. */
|
|
139
|
+
i18n?: Partial<Messages>;
|
|
140
|
+
};
|
|
141
|
+
export type ComboboxProps = Omit<InputProps<'combobox'>, 'prefix' | 'onValueChange' | 'density'> & ComboboxListProps & {
|
|
142
|
+
/** Static array, or a function returning the options for the current search text. */
|
|
143
|
+
items: ComboboxItemsSource;
|
|
144
|
+
/** Called when the selection changes with its value and resolved option context. */
|
|
145
|
+
onValueChange?: (payload: ComboboxValueChangePayload) => void;
|
|
146
|
+
/** Hint text shown in the search input when no option is selected. */
|
|
147
|
+
placeholder?: string;
|
|
44
148
|
/**
|
|
45
149
|
* Prefix content. Set to `false` to hide the default magnifying glass icon.
|
|
46
150
|
* If not provided, the magnifying glass icon is shown by default.
|
|
47
151
|
*/
|
|
48
152
|
prefix?: Snippet | false;
|
|
49
|
-
/**
|
|
50
|
-
* Text to display when loading options. Defaults to "Loading...".
|
|
51
|
-
*/
|
|
52
|
-
loadingText?: string;
|
|
53
|
-
/**
|
|
54
|
-
* Text to display when no options are found or available. Defaults to "No options found".
|
|
55
|
-
*/
|
|
56
|
-
noOptionsText?: string;
|
|
57
153
|
/** Theme overrides for the combobox dropdown, options, and field parts. */
|
|
58
154
|
theme?: ComboboxThemeProps & InputProps<'combobox'>['theme'];
|
|
59
|
-
/** Per-instance i18n overrides merged over the global catalog. */
|
|
60
|
-
i18n?: Partial<Messages>;
|
|
61
155
|
};
|