entasis 0.10.2 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
- package/dist/attachments/disclosurePanel.svelte.js +277 -0
- package/dist/attachments/portal.d.ts +17 -1
- package/dist/attachments/portal.js +39 -2
- package/dist/attachments/spinnerOverlay.svelte.js +12 -0
- package/dist/attachments/transitionSize.d.ts +6 -0
- package/dist/attachments/transitionSize.js +30 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
- package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
- package/dist/components/AIAskUserQuestion/index.js +2 -0
- package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
- package/dist/components/AIAskUserQuestion/schemas.js +10 -3
- package/dist/components/AIChat/AIChat.svelte +10 -0
- package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
- package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
- package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
- package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
- package/dist/components/AIChat/AIChatSurface.svelte +30 -2
- package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
- package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
- package/dist/components/AIChat/aiChat.mcp.js +31 -15
- package/dist/components/AIChat/aiChat.props.d.ts +36 -10
- package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
- package/dist/components/AIChat/aiChat.theme.js +21 -4
- package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
- package/dist/components/AIChat/index.d.ts +1 -1
- package/dist/components/AIComposer/AIComposer.svelte +102 -5
- package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
- package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
- package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
- package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
- package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
- package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
- package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
- package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
- package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
- package/dist/components/AIComposer/aiComposer.theme.js +37 -5
- package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
- package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
- package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
- package/dist/components/AIContext/AIContext.svelte +7 -3
- package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
- package/dist/components/AIContext/aiContext.mcp.js +1 -1
- package/dist/components/AIContext/aiContext.props.d.ts +4 -1
- package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
- package/dist/components/AIContext/aiContext.theme.js +7 -2
- package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
- package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
- package/dist/components/AIMarker/AIMarker.svelte +2 -0
- package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
- package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
- package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
- package/dist/components/AIMarker/aiMarker.theme.js +2 -2
- package/dist/components/AIMessage/AIMessage.svelte +38 -16
- package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
- package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
- package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
- package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
- package/dist/components/AIMessage/aiMessage.theme.js +91 -32
- package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
- package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
- package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
- package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
- package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
- package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
- package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
- package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
- package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
- package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
- package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
- package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
- package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
- package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
- package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
- package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
- package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
- package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
- package/dist/components/AIThread/AIThread.svelte +378 -95
- package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
- package/dist/components/AIThread/AIThreadItems.svelte +266 -64
- package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
- package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
- package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
- package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
- package/dist/components/AIThread/aiThread.mcp.js +34 -20
- package/dist/components/AIThread/aiThread.props.d.ts +73 -8
- package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
- package/dist/components/AIThread/aiThread.theme.js +108 -9
- package/dist/components/AIThread/index.d.ts +1 -1
- package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
- package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
- package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
- package/dist/components/AIThread/threadRenderItems.js +265 -77
- package/dist/components/AIThread/threadScrollController.d.ts +0 -8
- package/dist/components/AIThread/threadScrollController.js +2 -39
- package/dist/components/AIThread/threadTools.d.ts +11 -0
- package/dist/components/AIThread/threadTools.js +79 -0
- package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
- package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
- package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
- package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
- package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
- package/dist/components/AITool/AITool.svelte +56 -21
- package/dist/components/AITool/AIToolCallList.svelte +79 -29
- package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
- package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
- package/dist/components/AITool/AIToolValueSection.svelte +126 -28
- package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolValueTree.svelte +11 -16
- package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
- package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
- package/dist/components/AITool/aiTool.mcp.js +36 -8
- package/dist/components/AITool/aiTool.props.d.ts +52 -6
- package/dist/components/AITool/aiTool.theme.d.ts +117 -39
- package/dist/components/AITool/aiTool.theme.js +144 -140
- package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
- package/dist/components/AITool/aiToolClock.svelte.js +62 -0
- package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
- package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
- package/dist/components/AITool/index.d.ts +2 -1
- package/dist/components/AITool/index.js +1 -0
- package/dist/components/AITool/toolRendering.d.ts +33 -1
- package/dist/components/AITool/toolRendering.js +179 -15
- package/dist/components/AITool/toolValueTree.d.ts +14 -1
- package/dist/components/AITool/toolValueTree.js +126 -27
- package/dist/components/Accordion/Accordion.svelte +109 -109
- package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
- package/dist/components/Accordion/AccordionPanel.svelte +64 -0
- package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
- package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
- package/dist/components/Accordion/accordion.attributes.js +20 -0
- package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
- package/dist/components/Accordion/accordion.mcp.js +78 -22
- package/dist/components/Accordion/accordion.props.d.ts +54 -10
- package/dist/components/Accordion/accordion.theme.d.ts +3 -0
- package/dist/components/Accordion/accordion.theme.js +4 -0
- package/dist/components/Accordion/index.d.ts +1 -0
- package/dist/components/Accordion/index.js +1 -0
- package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
- package/dist/components/Avatar/Avatar.svelte +60 -10
- package/dist/components/Avatar/AvatarGroup.svelte +9 -0
- package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
- package/dist/components/Avatar/avatar.mcp.js +13 -5
- package/dist/components/Avatar/avatar.props.d.ts +28 -1
- package/dist/components/Avatar/avatar.theme.js +3 -3
- package/dist/components/Avatar/index.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
- package/dist/components/Button/Button.svelte +35 -15
- package/dist/components/Button/button.mcp.d.ts +1 -1
- package/dist/components/Button/button.mcp.js +8 -4
- package/dist/components/Button/button.props.d.ts +23 -8
- package/dist/components/Button/button.theme.d.ts +12 -0
- package/dist/components/Button/button.theme.js +17 -4
- package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
- package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
- package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
- package/dist/components/Collapsible/Collapsible.svelte +125 -19
- package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
- package/dist/components/Collapsible/collapsible.attributes.js +17 -0
- package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
- package/dist/components/Collapsible/collapsible.mcp.js +62 -12
- package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
- package/dist/components/Collapsible/collapsible.theme.js +3 -1
- package/dist/components/Collapsible/index.d.ts +1 -0
- package/dist/components/Collapsible/index.js +1 -0
- package/dist/components/Command/Command.svelte +56 -14
- package/dist/components/Command/command.mcp.d.ts +1 -1
- package/dist/components/Command/command.mcp.js +12 -6
- package/dist/components/Command/command.props.d.ts +39 -6
- package/dist/components/Command/command.state.svelte.d.ts +40 -11
- package/dist/components/Command/command.state.svelte.js +75 -28
- package/dist/components/Command/command.theme.js +4 -3
- package/dist/components/Confirmation/Confirmation.svelte +72 -31
- package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
- package/dist/components/Confirmation/confirmation.mcp.js +5 -4
- package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
- package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
- package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
- package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
- package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
- package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
- package/dist/components/DataTable/DataTable.svelte +4 -9
- package/dist/components/DataTable/DataTableEditor.svelte +5 -0
- package/dist/components/DataTable/DataTableFilter.svelte +1 -0
- package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
- package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
- package/dist/components/DataTable/dataTable.mcp.js +4 -2
- package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
- package/dist/components/DataTable/dataTable.theme.js +9 -6
- package/dist/components/Dialog/Dialog.svelte +120 -35
- package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
- package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
- package/dist/components/Dialog/dialog.api.d.ts +65 -0
- package/dist/components/Dialog/dialog.api.js +1 -0
- package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
- package/dist/components/Dialog/dialog.attributes.js +19 -0
- package/dist/components/Dialog/dialog.indent.d.ts +6 -0
- package/dist/components/Dialog/dialog.indent.js +16 -0
- package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
- package/dist/components/Dialog/dialog.mcp.js +195 -22
- package/dist/components/Dialog/dialog.props.d.ts +102 -19
- package/dist/components/Dialog/dialog.snap.d.ts +40 -0
- package/dist/components/Dialog/dialog.snap.js +78 -0
- package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
- package/dist/components/Dialog/dialog.state.svelte.js +525 -66
- package/dist/components/Dialog/dialog.theme.d.ts +48 -0
- package/dist/components/Dialog/dialog.theme.js +32 -9
- package/dist/components/Dialog/index.d.ts +4 -1
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
- package/dist/components/DocumentViewer/documentOutput.js +2 -1
- package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
- package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
- package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
- package/dist/components/Form/Ask/Ask.svelte +9 -13
- package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
- package/dist/components/Form/Ask/ask.mcp.js +1 -1
- package/dist/components/Form/Ask/ask.props.d.ts +1 -1
- package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
- package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
- package/dist/components/Form/Autocomplete/index.d.ts +3 -0
- package/dist/components/Form/Autocomplete/index.js +2 -0
- package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
- package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
- package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
- package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
- package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
- package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
- package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
- package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
- package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
- package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
- package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
- package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
- package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
- package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
- package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
- package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
- package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
- package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
- package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
- package/dist/components/Form/Combobox/Combobox.svelte +145 -185
- package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
- package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
- package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
- package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
- package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.items.js +68 -0
- package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
- package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
- package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
- package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
- package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
- package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
- package/dist/components/Form/Combobox/combobox.theme.js +37 -1
- package/dist/components/Form/Combobox/index.d.ts +2 -1
- package/dist/components/Form/Combobox/index.js +1 -0
- package/dist/components/Form/DateInput/DateInput.svelte +11 -3
- package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
- package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
- package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
- package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
- package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
- package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
- package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
- package/dist/components/Form/Field/Field.svelte +258 -32
- package/dist/components/Form/Field/Field.svelte.d.ts +15 -6
- package/dist/components/Form/Field/FieldGroup.svelte +29 -0
- package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
- package/dist/components/Form/Field/field.d.ts +75 -10
- package/dist/components/Form/Field/field.mcp.d.ts +1 -1
- package/dist/components/Form/Field/field.mcp.js +158 -18
- package/dist/components/Form/Field/field.messages.d.ts +47 -0
- package/dist/components/Form/Field/field.messages.js +64 -0
- package/dist/components/Form/Field/field.state.svelte.d.ts +117 -40
- package/dist/components/Form/Field/field.state.svelte.js +525 -16
- package/dist/components/Form/Field/field.theme.d.ts +46 -0
- package/dist/components/Form/Field/field.theme.js +33 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
- package/dist/components/Form/Field/index.d.ts +5 -2
- package/dist/components/Form/Field/index.js +1 -0
- package/dist/components/Form/Field/schemas.js +7 -2
- package/dist/components/Form/File/FileInput.svelte +24 -3
- package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
- package/dist/components/Form/File/fileInput.mcp.js +1 -0
- package/dist/components/Form/Form/Form.svelte +49 -15
- package/dist/components/Form/Form/FormActions.svelte +3 -1
- package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
- package/dist/components/Form/Form/FormFieldRenderer.svelte +96 -12
- package/dist/components/Form/Form/FormFieldRenderer.svelte.d.ts +3 -2
- package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
- package/dist/components/Form/Form/form.d.ts +84 -11
- package/dist/components/Form/Form/form.mcp.d.ts +1 -1
- package/dist/components/Form/Form/form.mcp.js +178 -12
- package/dist/components/Form/Form/form.props.d.ts +32 -1
- package/dist/components/Form/Form/form.registry.d.ts +28 -0
- package/dist/components/Form/Form/form.registry.js +59 -0
- package/dist/components/Form/Form/form.state.svelte.d.ts +1186 -420
- package/dist/components/Form/Form/form.state.svelte.js +322 -28
- package/dist/components/Form/Form/index.d.ts +4 -1
- package/dist/components/Form/Form/index.js +1 -0
- package/dist/components/Form/Form/visibility.d.ts +3130 -1863
- package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
- package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
- package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1050 -408
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
- package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
- package/dist/components/Form/NumberInput/index.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
- package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
- package/dist/components/Form/PasswordInput/Password.svelte +28 -1
- package/dist/components/Form/PasswordInput/index.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
- package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
- package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
- package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
- package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
- package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
- package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
- package/dist/components/Form/PinInput/PinInput.svelte +44 -9
- package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
- package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
- package/dist/components/Form/PinInput/index.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
- package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
- package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
- package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
- package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
- package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
- package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
- package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
- package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
- package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
- package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
- package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
- package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
- package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
- package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
- package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
- package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
- package/dist/components/Form/Select/Select.svelte +186 -48
- package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
- package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
- package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
- package/dist/components/Form/Select/index.d.ts +2 -1
- package/dist/components/Form/Select/index.js +1 -0
- package/dist/components/Form/Select/select.align.d.ts +5 -0
- package/dist/components/Form/Select/select.align.js +19 -5
- package/dist/components/Form/Select/select.attributes.d.ts +36 -0
- package/dist/components/Form/Select/select.attributes.js +27 -0
- package/dist/components/Form/Select/select.mcp.d.ts +1 -1
- package/dist/components/Form/Select/select.mcp.js +103 -18
- package/dist/components/Form/Select/select.props.d.ts +87 -10
- package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
- package/dist/components/Form/Select/select.state.svelte.js +354 -59
- package/dist/components/Form/Select/select.theme.d.ts +21 -0
- package/dist/components/Form/Select/select.theme.js +22 -0
- package/dist/components/Form/Slider/Slider.svelte +54 -14
- package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
- package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
- package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
- package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
- package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
- package/dist/components/Form/Slider/index.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.js +55 -11
- package/dist/components/Form/Slider/slider.props.d.ts +35 -2
- package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
- package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
- package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
- package/dist/components/Form/Slider/slider.theme.js +35 -17
- package/dist/components/Form/Switch/Switch.svelte +61 -38
- package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
- package/dist/components/Form/Switch/switch.mcp.js +25 -5
- package/dist/components/Form/Switch/switch.props.d.ts +14 -1
- package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
- package/dist/components/Form/Switch/switch.theme.js +8 -3
- package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
- package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
- package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
- package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
- package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
- package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
- package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
- package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
- package/dist/components/Form/TextArea/TextArea.svelte +8 -0
- package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
- package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
- package/dist/components/Form/TextInput/TextInput.svelte +8 -1
- package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
- package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
- package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
- package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
- package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
- package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
- package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
- package/dist/components/HoverCard/HoverCard.svelte +100 -10
- package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
- package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
- package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
- package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
- package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
- package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
- package/dist/components/HoverCard/hoverCard.theme.js +9 -2
- package/dist/components/HoverCard/index.d.ts +1 -0
- package/dist/components/HoverCard/index.js +1 -0
- package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
- package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
- package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
- package/dist/components/Kanban/kanban.theme.js +7 -3
- package/dist/components/Layout/layoutSpacing.d.ts +2 -2
- package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
- package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
- package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
- package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
- package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
- package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
- package/dist/components/Map/maplibre-cdn.js +3 -2
- package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
- package/dist/components/Markdown/markdown.mcp.js +2 -1
- package/dist/components/Markdown/markdown.theme.js +18 -9
- package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
- package/dist/components/Menu/Menu.svelte +3 -3
- package/dist/components/Menu/Menu.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
- package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
- package/dist/components/Menu/MenuFloating.svelte +421 -74
- package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
- package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
- package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
- package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
- package/dist/components/Menu/MenuSearchField.svelte +54 -0
- package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
- package/dist/components/Menu/MenuStacked.svelte +404 -158
- package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
- package/dist/components/Menu/index.d.ts +2 -1
- package/dist/components/Menu/index.js +1 -0
- package/dist/components/Menu/menu.attributes.d.ts +37 -0
- package/dist/components/Menu/menu.attributes.js +28 -0
- package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
- package/dist/components/Menu/menu.filter.svelte.js +143 -0
- package/dist/components/Menu/menu.mcp.d.ts +1 -1
- package/dist/components/Menu/menu.mcp.js +227 -17
- package/dist/components/Menu/menu.platform.d.ts +5 -0
- package/dist/components/Menu/menu.platform.js +11 -0
- package/dist/components/Menu/menu.props.d.ts +172 -9
- package/dist/components/Menu/menu.theme.d.ts +147 -0
- package/dist/components/Menu/menu.theme.js +101 -0
- package/dist/components/Menu/menuTree.d.ts +35 -1
- package/dist/components/Menu/menuTree.js +158 -1
- package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
- package/dist/components/MenuBar/menuBar.mcp.js +4 -2
- package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
- package/dist/components/MenuOption/MenuOption.svelte +5 -1
- package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
- package/dist/components/MenuOption/menuOption.mcp.js +8 -0
- package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
- package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
- package/dist/components/MenuOption/menuOption.theme.js +24 -4
- package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
- package/dist/components/Mermaid/mermaid.mcp.js +8 -8
- package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
- package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
- package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
- package/dist/components/Mermaid/mermaid.theme.js +26 -1
- package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
- package/dist/components/Meter/Meter.svelte +110 -24
- package/dist/components/Meter/Meter.svelte.d.ts +12 -12
- package/dist/components/Meter/meter.mcp.d.ts +1 -1
- package/dist/components/Meter/meter.mcp.js +23 -37
- package/dist/components/Meter/meter.props.d.ts +36 -44
- package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
- package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/index.d.ts +4 -0
- package/dist/components/NavigationMenu/index.js +3 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
- package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
- package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
- package/dist/components/Overlay/Overlay.svelte +19 -30
- package/dist/components/Overlay/index.d.ts +1 -0
- package/dist/components/Overlay/index.js +1 -0
- package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
- package/dist/components/Overlay/overlay.attributes.js +14 -0
- package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
- package/dist/components/Overlay/overlay.mcp.js +21 -3
- package/dist/components/Overlay/overlay.props.d.ts +8 -4
- package/dist/components/Popover/Popover.svelte +163 -52
- package/dist/components/Popover/Popover.svelte.d.ts +23 -2
- package/dist/components/Popover/PopoverSession.svelte +12 -0
- package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
- package/dist/components/Popover/index.d.ts +10 -2
- package/dist/components/Popover/index.js +4 -1
- package/dist/components/Popover/popover.api.d.ts +83 -0
- package/dist/components/Popover/popover.api.js +1 -0
- package/dist/components/Popover/popover.attributes.d.ts +32 -0
- package/dist/components/Popover/popover.attributes.js +28 -0
- package/dist/components/Popover/popover.claims.d.ts +19 -0
- package/dist/components/Popover/popover.claims.js +45 -0
- package/dist/components/Popover/popover.mcp.d.ts +1 -1
- package/dist/components/Popover/popover.mcp.js +163 -31
- package/dist/components/Popover/popover.position.d.ts +226 -0
- package/dist/components/Popover/popover.position.js +402 -0
- package/dist/components/Popover/popover.props.d.ts +179 -24
- package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
- package/dist/components/Popover/popover.state.svelte.js +1034 -194
- package/dist/components/Popover/popover.theme.d.ts +15 -0
- package/dist/components/Popover/popover.theme.js +27 -2
- package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
- package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
- package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
- package/dist/components/PopupMenu/popupMenu.context.js +52 -0
- package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
- package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
- package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
- package/dist/components/Progress/Progress.svelte +160 -0
- package/dist/components/Progress/Progress.svelte.d.ts +4 -0
- package/dist/components/Progress/index.d.ts +3 -0
- package/dist/components/Progress/index.js +2 -0
- package/dist/components/Progress/progress.mcp.d.ts +1 -0
- package/dist/components/Progress/progress.mcp.js +101 -0
- package/dist/components/Progress/progress.props.d.ts +79 -0
- package/dist/components/Progress/progress.props.js +1 -0
- package/dist/components/Progress/progress.theme.d.ts +129 -0
- package/dist/components/Progress/progress.theme.js +83 -0
- package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
- package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
- package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
- package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
- package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
- package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
- package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
- package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
- package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
- package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
- package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
- package/dist/components/RichTextInput/suggestions.js +2 -0
- package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
- package/dist/components/ScrollArea/index.d.ts +2 -1
- package/dist/components/ScrollArea/index.js +1 -0
- package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
- package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
- package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
- package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
- package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
- package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
- package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
- package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
- package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
- package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
- package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
- package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
- package/dist/components/Sidebar/SidebarAction.svelte +13 -3
- package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
- package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
- package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
- package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
- package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
- package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
- package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
- package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
- package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +1 -0
- package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
- package/dist/components/Sidebar/sidebar-position.js +31 -2
- package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
- package/dist/components/Sidebar/sidebar.attributes.js +29 -0
- package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
- package/dist/components/Sidebar/sidebar.mcp.js +45 -10
- package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
- package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
- package/dist/components/Sidebar/sidebar.theme.js +113 -62
- package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
- package/dist/components/Stepper/Stepper.svelte +2 -0
- package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
- package/dist/components/Stepper/stepper.mcp.js +1 -0
- package/dist/components/Stepper/stepper.props.d.ts +5 -0
- package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
- package/dist/components/Stepper/stepper.state.svelte.js +31 -12
- package/dist/components/Tabbar/Tabbar.svelte +55 -16
- package/dist/components/Tabbar/index.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.js +26 -9
- package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
- package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
- package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
- package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
- package/dist/components/Tabs/Tabs.svelte +73 -16
- package/dist/components/Tabs/index.d.ts +2 -1
- package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
- package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
- package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
- package/dist/components/Tabs/tabs.mcp.js +22 -4
- package/dist/components/Tabs/tabs.props.d.ts +39 -12
- package/dist/components/Tabs/tabs.theme.js +3 -1
- package/dist/components/Theme/Theme.svelte +44 -27
- package/dist/components/Theme/helper.d.ts +16 -2
- package/dist/components/Theme/helper.js +46 -4
- package/dist/components/Theme/theme.mcp.d.ts +1 -1
- package/dist/components/Theme/theme.mcp.js +103 -0
- package/dist/components/Theme/theme.props.d.ts +16 -0
- package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
- package/dist/components/Theme/theme.state.svelte.js +18 -1
- package/dist/components/Toast/Toast.svelte +184 -39
- package/dist/components/Toast/Toaster.svelte +14 -10
- package/dist/components/Toast/index.d.ts +1 -0
- package/dist/components/Toast/toast.mcp.d.ts +1 -1
- package/dist/components/Toast/toast.mcp.js +47 -6
- package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
- package/dist/components/Toast/toast.state.svelte.js +513 -68
- package/dist/components/Toast/toast.theme.js +1 -1
- package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
- package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
- package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
- package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
- package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
- package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
- package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
- package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
- package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
- package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
- package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
- package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
- package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
- package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
- package/dist/components/Tooltip/Tooltip.svelte +4 -12
- package/dist/components/Tooltip/TooltipHost.svelte +136 -15
- package/dist/components/Tooltip/index.d.ts +1 -0
- package/dist/components/Tooltip/index.js +1 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
- package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
- package/dist/components/Tooltip/tooltip.attributes.js +28 -0
- package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
- package/dist/components/Tooltip/tooltip.mcp.js +111 -10
- package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
- package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
- package/dist/components/Tooltip/tooltip.surface.js +42 -0
- package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
- package/dist/components/Utils/BeforeHydratation.svelte +14 -3
- package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
- package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
- package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
- package/dist/generated/componentAliases.d.ts +3 -0
- package/dist/generated/componentAliases.js +3 -0
- package/dist/generated/componentContract.d.ts +79 -34
- package/dist/generated/componentContract.js +231 -6
- package/dist/generated/componentMcpRegistry.js +6 -0
- package/dist/i18n/ar.js +107 -3
- package/dist/i18n/context.svelte.d.ts +6 -0
- package/dist/i18n/context.svelte.js +12 -0
- package/dist/i18n/de.js +101 -3
- package/dist/i18n/en.d.ts +91 -2
- package/dist/i18n/en.js +101 -3
- package/dist/i18n/es.js +101 -3
- package/dist/i18n/fr.js +101 -3
- package/dist/i18n/ja.js +101 -3
- package/dist/i18n/pt.js +101 -3
- package/dist/i18n/zh.js +101 -3
- package/dist/tailwind/geometry.js +7 -0
- package/dist/tailwind/global.js +31 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/types.mcp.d.ts +1 -1
- package/dist/types/types.mcp.js +23 -0
- package/dist/utils/cspNonce.d.ts +16 -0
- package/dist/utils/cspNonce.js +39 -0
- package/dist/utils/cva/merge.d.ts +5 -1
- package/dist/utils/cva/merge.js +6 -4
- package/dist/utils/focus.d.ts +34 -0
- package/dist/utils/focus.js +93 -0
- package/dist/utils/focusHistory.d.ts +21 -0
- package/dist/utils/focusHistory.js +99 -0
- package/dist/utils/handlers.d.ts +7 -0
- package/dist/utils/handlers.js +14 -0
- package/dist/utils/hoverIntent.d.ts +42 -0
- package/dist/utils/hoverIntent.js +57 -0
- package/dist/utils/id.d.ts +7 -0
- package/dist/utils/id.js +15 -0
- package/dist/utils/layers.svelte.d.ts +32 -4
- package/dist/utils/layers.svelte.js +214 -21
- package/dist/utils/listFilter.d.ts +44 -0
- package/dist/utils/listFilter.js +130 -0
- package/dist/utils/match.d.ts +35 -0
- package/dist/utils/match.js +36 -0
- package/dist/utils/number.d.ts +126 -0
- package/dist/utils/number.js +401 -0
- package/dist/utils/openChange.d.ts +88 -0
- package/dist/utils/openChange.js +71 -0
- package/dist/utils/openLifecycle.svelte.d.ts +41 -0
- package/dist/utils/openLifecycle.svelte.js +134 -0
- package/dist/utils/pointerDrag.d.ts +10 -0
- package/dist/utils/pointerDrag.js +37 -2
- package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
- package/dist/utils/pragmaticDragAndDrop.js +8 -3
- package/dist/utils/range.d.ts +62 -0
- package/dist/utils/range.js +70 -0
- package/dist/utils/requestNativeSubmit.d.ts +17 -0
- package/dist/utils/requestNativeSubmit.js +47 -0
- package/dist/utils/safeArea.svelte.d.ts +10 -1
- package/dist/utils/safeArea.svelte.js +19 -11
- package/dist/utils/stateAttributes.d.ts +108 -0
- package/dist/utils/stateAttributes.js +78 -0
- package/dist/utils/swipeVelocity.d.ts +32 -0
- package/dist/utils/swipeVelocity.js +59 -0
- package/dist/utils/timer.svelte.d.ts +65 -2
- package/dist/utils/timer.svelte.js +159 -25
- package/dist/utils/trigger.d.ts +41 -0
- package/dist/utils/trigger.js +103 -0
- package/dist/utils/typeahead.d.ts +9 -0
- package/dist/utils/typeahead.js +21 -9
- package/dist/utils/useDndList.svelte.d.ts +1 -1
- package/dist/utils/useDndList.svelte.js +6 -23
- package/dist/utils/useFocusScope.svelte.d.ts +29 -0
- package/dist/utils/useFocusScope.svelte.js +189 -27
- package/dist/utils/useHoverAction.svelte.d.ts +44 -4
- package/dist/utils/useHoverAction.svelte.js +161 -51
- package/dist/utils/useKeyDown.svelte.d.ts +19 -2
- package/dist/utils/useKeyDown.svelte.js +19 -12
- package/dist/utils/useListNavigation.svelte.d.ts +94 -13
- package/dist/utils/useListNavigation.svelte.js +261 -35
- package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
- package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
- package/dist/utils/useNavigation.svelte.d.ts +36 -3
- package/dist/utils/useNavigation.svelte.js +699 -332
- package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
- package/dist/utils/usePressAndHold.svelte.js +191 -0
- package/dist/utils/useScrollLock.svelte.d.ts +20 -1
- package/dist/utils/useScrollLock.svelte.js +54 -13
- package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
- package/dist/utils/useSlidingIndicator.svelte.js +27 -5
- package/dist/utils/useTabBridge.svelte.d.ts +20 -0
- package/dist/utils/useTabBridge.svelte.js +109 -0
- package/dist/utils/values.d.ts +15 -0
- package/dist/utils/values.js +49 -0
- package/package.json +31 -2
- package/dist/generated/componentMcpRegistry.d.ts +0 -142
- package/dist/utils/useDrag.svelte.d.ts +0 -11
- package/dist/utils/useDrag.svelte.js +0 -55
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Free text with suggestions. The value is the text in the input and the input submits it, so
|
|
3
|
+
// a suggestion is a shortcut for typing, never a requirement. The list, its keyboard model,
|
|
4
|
+
// async source and announcements are Combobox's controller; this file adds what only free
|
|
5
|
+
// text needs: the text as the value, and inline completion that previews the highlighted
|
|
6
|
+
// suggestion in the input without committing it.
|
|
7
|
+
import { tick, untrack } from 'svelte';
|
|
8
|
+
import { useI18n } from '../../../i18n/context.svelte.js';
|
|
9
|
+
import { createBindableValue } from '../../../utils/state.svelte.js';
|
|
10
|
+
import Field from '../Field/Field.svelte';
|
|
11
|
+
import { createFieldState } from '../Field/field.state.svelte.js';
|
|
12
|
+
import Popover from '../../Popover/Popover.svelte';
|
|
13
|
+
import type { PopoverApi } from '../../Popover/popover.api.js';
|
|
14
|
+
import ComboboxPopup from '../Combobox/ComboboxPopup.svelte';
|
|
15
|
+
import { ComboboxController } from '../Combobox/combobox.state.svelte.js';
|
|
16
|
+
import { flattenItems } from '../Combobox/combobox.items.js';
|
|
17
|
+
import type { ComboboxFilter } from '../Combobox/combobox.props.js';
|
|
18
|
+
import { completeInline, normalizeSource } from './autocomplete.items.js';
|
|
19
|
+
import type { AutocompleteProps } from './autocomplete.props.js';
|
|
20
|
+
import { useAutocompleteTheme } from './autocomplete.theme.js';
|
|
21
|
+
|
|
22
|
+
let {
|
|
23
|
+
defaultValue = null,
|
|
24
|
+
value = $bindable(),
|
|
25
|
+
errors = $bindable([]),
|
|
26
|
+
focused = $bindable(false),
|
|
27
|
+
open = $bindable(),
|
|
28
|
+
defaultOpen = false,
|
|
29
|
+
onOpenChange,
|
|
30
|
+
onAfterOpen,
|
|
31
|
+
onAfterClose,
|
|
32
|
+
required = false,
|
|
33
|
+
size = 'normal',
|
|
34
|
+
density = 'normal',
|
|
35
|
+
placeholder = '',
|
|
36
|
+
items,
|
|
37
|
+
mode = 'list',
|
|
38
|
+
autoHighlight = false,
|
|
39
|
+
openOnFocus = false,
|
|
40
|
+
shouldFilter = true,
|
|
41
|
+
filter,
|
|
42
|
+
limit,
|
|
43
|
+
loop,
|
|
44
|
+
onSelect,
|
|
45
|
+
onHighlightChange,
|
|
46
|
+
loadingText,
|
|
47
|
+
emptyText,
|
|
48
|
+
autocomplete = 'off',
|
|
49
|
+
separators = true,
|
|
50
|
+
item,
|
|
51
|
+
inputAttrs,
|
|
52
|
+
i18n,
|
|
53
|
+
theme,
|
|
54
|
+
disabled,
|
|
55
|
+
readOnly,
|
|
56
|
+
messages,
|
|
57
|
+
name,
|
|
58
|
+
onValidate,
|
|
59
|
+
onValueChange,
|
|
60
|
+
visible,
|
|
61
|
+
prefix,
|
|
62
|
+
suffix,
|
|
63
|
+
description,
|
|
64
|
+
...rest
|
|
65
|
+
}: AutocompleteProps = $props();
|
|
66
|
+
if (value === undefined) value = untrack(() => defaultValue);
|
|
67
|
+
|
|
68
|
+
const id = $props.id();
|
|
69
|
+
const t = $derived(useI18n(i18n));
|
|
70
|
+
const openState = createBindableValue(
|
|
71
|
+
() => open,
|
|
72
|
+
(next) => {
|
|
73
|
+
open = next;
|
|
74
|
+
},
|
|
75
|
+
() => defaultOpen
|
|
76
|
+
);
|
|
77
|
+
let loading = $state(false);
|
|
78
|
+
|
|
79
|
+
const field = createFieldState({
|
|
80
|
+
id,
|
|
81
|
+
get value() {
|
|
82
|
+
return value;
|
|
83
|
+
},
|
|
84
|
+
set value(v) {
|
|
85
|
+
value = v;
|
|
86
|
+
},
|
|
87
|
+
get errors() {
|
|
88
|
+
return errors;
|
|
89
|
+
},
|
|
90
|
+
set errors(v: string[] | boolean) {
|
|
91
|
+
errors = v;
|
|
92
|
+
},
|
|
93
|
+
get focused() {
|
|
94
|
+
return focused;
|
|
95
|
+
},
|
|
96
|
+
set focused(v: boolean) {
|
|
97
|
+
focused = v;
|
|
98
|
+
},
|
|
99
|
+
onValueChange: (v) => {
|
|
100
|
+
onValueChange?.(v);
|
|
101
|
+
},
|
|
102
|
+
get disabled() {
|
|
103
|
+
return disabled;
|
|
104
|
+
},
|
|
105
|
+
set disabled(v: boolean | undefined) {
|
|
106
|
+
disabled = v;
|
|
107
|
+
},
|
|
108
|
+
get readOnly() {
|
|
109
|
+
return readOnly;
|
|
110
|
+
},
|
|
111
|
+
get messages() {
|
|
112
|
+
return messages;
|
|
113
|
+
},
|
|
114
|
+
get required() {
|
|
115
|
+
return required;
|
|
116
|
+
},
|
|
117
|
+
get name() {
|
|
118
|
+
return name;
|
|
119
|
+
},
|
|
120
|
+
set name(v: string | undefined) {
|
|
121
|
+
name = v;
|
|
122
|
+
},
|
|
123
|
+
get onValidate() {
|
|
124
|
+
return onValidate;
|
|
125
|
+
},
|
|
126
|
+
get visible() {
|
|
127
|
+
return visible;
|
|
128
|
+
},
|
|
129
|
+
type: 'text'
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Only a name the app gave, directly or through Form, is submitted, as for a native input.
|
|
133
|
+
const submittedName = $derived(
|
|
134
|
+
field.name === `${field.type}-input-${field.id}` ? undefined : field.name
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
const text = $derived(field.value ?? '');
|
|
138
|
+
const source = $derived(normalizeSource(items));
|
|
139
|
+
// Inline and none modes list the suggestions as given; list and both narrow them to the text.
|
|
140
|
+
const everything: ComboboxFilter = () => true;
|
|
141
|
+
const narrowing = $derived(shouldFilter && (mode === 'list' || mode === 'both'));
|
|
142
|
+
|
|
143
|
+
const controller = new ComboboxController({
|
|
144
|
+
id,
|
|
145
|
+
field,
|
|
146
|
+
items: () => source,
|
|
147
|
+
filter: () => (narrowing ? filter : everything),
|
|
148
|
+
limit: () => limit,
|
|
149
|
+
messages: () => t,
|
|
150
|
+
loadingText: () => loadingText,
|
|
151
|
+
noOptionsText: () => emptyText,
|
|
152
|
+
query: {
|
|
153
|
+
get: () => text,
|
|
154
|
+
set: (next) => {
|
|
155
|
+
field.setValue(next);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
// The text is a value here, not a search draft: a prefilled or just chosen text does not
|
|
159
|
+
// ask the source anything until the list is open for it.
|
|
160
|
+
searching: () => openState.value,
|
|
161
|
+
loading: {
|
|
162
|
+
get: () => loading,
|
|
163
|
+
set: (next) => {
|
|
164
|
+
loading = next;
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
open: {
|
|
168
|
+
get: () => openState.value,
|
|
169
|
+
set: (next) => {
|
|
170
|
+
openState.value = next;
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
onOpenChange: () => onOpenChange,
|
|
174
|
+
openOnFocus: () => openOnFocus,
|
|
175
|
+
autoHighlight: () => autoHighlight,
|
|
176
|
+
loop: () => loop,
|
|
177
|
+
onHighlightChange: () => onHighlightChange,
|
|
178
|
+
onSelect: (option, event) => {
|
|
179
|
+
previewing = null;
|
|
180
|
+
field.setValue(option.label);
|
|
181
|
+
controller.close({ reason: 'item-press', event });
|
|
182
|
+
// The caret goes to the end of the chosen text once it is in the input.
|
|
183
|
+
void tick().then(() => {
|
|
184
|
+
const input = inputElement();
|
|
185
|
+
if (input && input.ownerDocument.activeElement === input) {
|
|
186
|
+
input.setSelectionRange(input.value.length, input.value.length);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
onSelect?.({ item: option, value: option.label, event });
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
// -- Inline completion ----------------------------------------------------------------
|
|
194
|
+
// While a suggestion is previewed the input shows its label but the value stays the typed
|
|
195
|
+
// text, so `previewing.typed` is what Escape, blur and a closing list put back.
|
|
196
|
+
|
|
197
|
+
const inputElement = () => field.node as HTMLInputElement | null;
|
|
198
|
+
const inlineEnabled = $derived(
|
|
199
|
+
(mode === 'both' || mode === 'inline') && !field.readOnly && !field.disabled
|
|
200
|
+
);
|
|
201
|
+
let previewing: { typed: string; text: string } | null = null;
|
|
202
|
+
// Deleting the completion (or accepting it) must not bring it straight back.
|
|
203
|
+
let holdCompletion = false;
|
|
204
|
+
// The highlight change an ArrowUp or ArrowDown caused: the only kind that may replace the text
|
|
205
|
+
// with a suggestion that does not continue it.
|
|
206
|
+
let keyed: object | null = null;
|
|
207
|
+
let composing = $state(false);
|
|
208
|
+
let syncedText = untrack(() => text);
|
|
209
|
+
|
|
210
|
+
const restorePreview = () => {
|
|
211
|
+
if (!previewing) return;
|
|
212
|
+
const { typed } = previewing;
|
|
213
|
+
previewing = null;
|
|
214
|
+
const input = inputElement();
|
|
215
|
+
if (!input) return;
|
|
216
|
+
input.value = typed;
|
|
217
|
+
if (input.ownerDocument.activeElement === input)
|
|
218
|
+
input.setSelectionRange(typed.length, typed.length);
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// Keeps the input in step with the highlight: the highlighted suggestion is previewed while
|
|
222
|
+
// keys or typing drive it. A hover leaves the text alone.
|
|
223
|
+
$effect(() => {
|
|
224
|
+
const current = text;
|
|
225
|
+
const highlighted = controller.nav.highlighted;
|
|
226
|
+
const details = controller.nav.highlightDetails;
|
|
227
|
+
const listed = controller.expanded;
|
|
228
|
+
const isFocused = field.focused;
|
|
229
|
+
const enabled = inlineEnabled;
|
|
230
|
+
const busy = composing;
|
|
231
|
+
untrack(() => {
|
|
232
|
+
const edited = current !== syncedText;
|
|
233
|
+
syncedText = current;
|
|
234
|
+
if (edited && previewing) {
|
|
235
|
+
// The value moved on without the user's keys (the parent set it): drop the preview.
|
|
236
|
+
const input = inputElement();
|
|
237
|
+
if (input) input.value = current;
|
|
238
|
+
previewing = null;
|
|
239
|
+
}
|
|
240
|
+
if (busy) return;
|
|
241
|
+
if (!enabled || !listed || !isFocused || highlighted === undefined) {
|
|
242
|
+
restorePreview();
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const reason = details === keyed ? 'keyboard' : details.reason;
|
|
246
|
+
if (reason === 'pointer') return;
|
|
247
|
+
const option = flattenItems(controller.view.items).find(
|
|
248
|
+
(entry) => entry.value === highlighted
|
|
249
|
+
);
|
|
250
|
+
const input = inputElement();
|
|
251
|
+
if (!option || !input) {
|
|
252
|
+
restorePreview();
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const typed = previewing?.typed ?? current;
|
|
256
|
+
const completion = completeInline(option.label, typed, t.locale);
|
|
257
|
+
// The list's own choice (the first match as you type) only completes what was typed;
|
|
258
|
+
// arrow keys may land anywhere.
|
|
259
|
+
if (!completion || (reason === 'list' && (!completion.continues || holdCompletion))) {
|
|
260
|
+
restorePreview();
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
if (
|
|
264
|
+
input.value !== completion.text ||
|
|
265
|
+
input.selectionStart !== completion.selectionStart ||
|
|
266
|
+
input.selectionEnd !== completion.selectionEnd
|
|
267
|
+
) {
|
|
268
|
+
input.value = completion.text;
|
|
269
|
+
input.setSelectionRange(completion.selectionStart, completion.selectionEnd);
|
|
270
|
+
}
|
|
271
|
+
previewing = { typed, text: completion.text };
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
/** Makes the previewed text the typed text, as when the caret moves into it. */
|
|
276
|
+
const acceptPreview = () => {
|
|
277
|
+
const input = inputElement();
|
|
278
|
+
if (!previewing || !input) return;
|
|
279
|
+
const accepted = input.value;
|
|
280
|
+
previewing = null;
|
|
281
|
+
holdCompletion = true;
|
|
282
|
+
field.setValue(accepted);
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
// -- Input events ---------------------------------------------------------------------
|
|
286
|
+
|
|
287
|
+
const oninput = (event: Event & { currentTarget: HTMLInputElement }) => {
|
|
288
|
+
inputAttrs?.oninput?.(event);
|
|
289
|
+
const inputType = event instanceof InputEvent ? event.inputType : '';
|
|
290
|
+
holdCompletion = inputType.startsWith('delete');
|
|
291
|
+
// What is in the input is now the typed text, previewed or not.
|
|
292
|
+
previewing = null;
|
|
293
|
+
field.setValue(event.currentTarget.value);
|
|
294
|
+
if (!field.readOnly) controller.onInput(event);
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const onkeydown = (event: KeyboardEvent & { currentTarget: HTMLInputElement }) => {
|
|
298
|
+
inputAttrs?.onkeydown?.(event);
|
|
299
|
+
if (event.defaultPrevented) return;
|
|
300
|
+
const plain = !event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey;
|
|
301
|
+
if (previewing && !event.isComposing) {
|
|
302
|
+
if (event.key === 'Escape') {
|
|
303
|
+
// One Escape puts the typed text back and closes the list.
|
|
304
|
+
restorePreview();
|
|
305
|
+
} else if (
|
|
306
|
+
event.key === 'Tab' ||
|
|
307
|
+
(plain && ['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key))
|
|
308
|
+
) {
|
|
309
|
+
acceptPreview();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Home and End move the caret in a text field; they do not jump through the list.
|
|
313
|
+
if ((event.key === 'Home' || event.key === 'End') && !event.shiftKey) return;
|
|
314
|
+
if (event.key !== 'Escape') holdCompletion = false;
|
|
315
|
+
controller.onKeydown(event);
|
|
316
|
+
const moved = controller.nav.highlightDetails;
|
|
317
|
+
if (moved.event === event) keyed = moved;
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
const classes = $derived(useAutocompleteTheme(theme));
|
|
321
|
+
</script>
|
|
322
|
+
|
|
323
|
+
<Popover
|
|
324
|
+
haspopup="listbox"
|
|
325
|
+
closeOnClickOutside={false}
|
|
326
|
+
closeOnEscape={false}
|
|
327
|
+
focusOnClose={false}
|
|
328
|
+
fitTrigger
|
|
329
|
+
position="bottom"
|
|
330
|
+
size="small"
|
|
331
|
+
open={controller.visible}
|
|
332
|
+
onAfterOpen={() => onAfterOpen?.()}
|
|
333
|
+
onAfterClose={() => onAfterClose?.()}
|
|
334
|
+
>
|
|
335
|
+
<ComboboxPopup
|
|
336
|
+
{controller}
|
|
337
|
+
{classes}
|
|
338
|
+
{size}
|
|
339
|
+
{density}
|
|
340
|
+
{separators}
|
|
341
|
+
{item}
|
|
342
|
+
{i18n}
|
|
343
|
+
isSelected={() => false}
|
|
344
|
+
/>
|
|
345
|
+
{#snippet trigger(popover: PopoverApi)}
|
|
346
|
+
<Field
|
|
347
|
+
{density}
|
|
348
|
+
{field}
|
|
349
|
+
{size}
|
|
350
|
+
{description}
|
|
351
|
+
{prefix}
|
|
352
|
+
{suffix}
|
|
353
|
+
theme={{
|
|
354
|
+
...(theme || {}),
|
|
355
|
+
inputContainer: {
|
|
356
|
+
...(theme?.inputContainer || {}),
|
|
357
|
+
base: classes.inputContainer({
|
|
358
|
+
class: theme?.inputContainer?.base,
|
|
359
|
+
size,
|
|
360
|
+
disabled: field.disabled
|
|
361
|
+
})
|
|
362
|
+
}
|
|
363
|
+
}}
|
|
364
|
+
{...rest}
|
|
365
|
+
anchor={popover.reference}
|
|
366
|
+
>
|
|
367
|
+
<input
|
|
368
|
+
data-1p-ignore={autocomplete === 'off' ? '' : undefined}
|
|
369
|
+
{...inputAttrs}
|
|
370
|
+
type="text"
|
|
371
|
+
{id}
|
|
372
|
+
name={submittedName}
|
|
373
|
+
value={text}
|
|
374
|
+
{placeholder}
|
|
375
|
+
{autocomplete}
|
|
376
|
+
required={field.required}
|
|
377
|
+
readonly={field.readOnly}
|
|
378
|
+
disabled={field.disabled}
|
|
379
|
+
bind:this={field.node}
|
|
380
|
+
bind:focused={field.focused}
|
|
381
|
+
role="combobox"
|
|
382
|
+
aria-expanded={controller.expanded}
|
|
383
|
+
aria-controls={controller.expanded ? controller.listboxId : undefined}
|
|
384
|
+
aria-autocomplete={mode}
|
|
385
|
+
aria-activedescendant={controller.activeDescendant}
|
|
386
|
+
aria-haspopup="listbox"
|
|
387
|
+
aria-invalid={controller.error !== null || undefined}
|
|
388
|
+
class={classes.input({ size, hasValue: text !== '', disabled: field.disabled })}
|
|
389
|
+
{oninput}
|
|
390
|
+
{onkeydown}
|
|
391
|
+
onfocus={(event) => {
|
|
392
|
+
inputAttrs?.onfocus?.(event);
|
|
393
|
+
controller.onFocus(event);
|
|
394
|
+
}}
|
|
395
|
+
onpointerdown={(event) => {
|
|
396
|
+
inputAttrs?.onpointerdown?.(event);
|
|
397
|
+
if (!event.defaultPrevented) controller.onPointerDown();
|
|
398
|
+
}}
|
|
399
|
+
onclick={(event) => {
|
|
400
|
+
inputAttrs?.onclick?.(event);
|
|
401
|
+
if (!event.defaultPrevented) controller.onClick(event);
|
|
402
|
+
}}
|
|
403
|
+
oncompositionstart={(event) => {
|
|
404
|
+
inputAttrs?.oncompositionstart?.(event);
|
|
405
|
+
composing = true;
|
|
406
|
+
}}
|
|
407
|
+
oncompositionend={(event) => {
|
|
408
|
+
inputAttrs?.oncompositionend?.(event);
|
|
409
|
+
composing = false;
|
|
410
|
+
}}
|
|
411
|
+
/>
|
|
412
|
+
<!-- Persistent, so it exists before the first announcement: result counts and status. -->
|
|
413
|
+
<span class="sr-only" {...controller.announcer.regionAttrs}>
|
|
414
|
+
{controller.announcer.message}
|
|
415
|
+
</span>
|
|
416
|
+
</Field>
|
|
417
|
+
{/snippet}
|
|
418
|
+
</Popover>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ComboboxItems, ComboboxItemsSource, ComboboxOption } from '../Combobox/combobox.props.js';
|
|
2
|
+
import type { AutocompleteItem, AutocompleteItems, AutocompleteItemsSource } from './autocomplete.props.js';
|
|
3
|
+
/** A plain-text suggestion is an option whose value and label are that text. */
|
|
4
|
+
export declare const toOption: (item: AutocompleteItem) => ComboboxOption;
|
|
5
|
+
/**
|
|
6
|
+
* Suggestions as options: strings become `{ value, label }`, everything else is passed through.
|
|
7
|
+
* A value listed more than once (within or across groups) keeps its first entry, since rows and
|
|
8
|
+
* option ids are keyed by value; a group left empty by that is dropped.
|
|
9
|
+
*/
|
|
10
|
+
export declare const normalizeItems: (items: AutocompleteItems) => ComboboxItems;
|
|
11
|
+
/** The Combobox list's source for these suggestions; functions have their results normalized. */
|
|
12
|
+
export declare const normalizeSource: (source: AutocompleteItemsSource | undefined) => ComboboxItemsSource | undefined;
|
|
13
|
+
/** What previewing a suggestion over the typed text writes into the input. */
|
|
14
|
+
export type InlineCompletion = {
|
|
15
|
+
/** The text the input shows while the suggestion is previewed. */
|
|
16
|
+
text: string;
|
|
17
|
+
/** Where the previewed (not yet typed) part starts; selected, so typing replaces it. */
|
|
18
|
+
selectionStart: number;
|
|
19
|
+
/** The end of the text. */
|
|
20
|
+
selectionEnd: number;
|
|
21
|
+
/** Whether the suggestion continues what was typed, rather than replacing it. */
|
|
22
|
+
continues: boolean;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The input text for previewing `label` over what was `typed`. A label that continues the typed
|
|
26
|
+
* text completes it, with the added part selected so the next key replaces it. Any other label
|
|
27
|
+
* replaces the text outright, with the caret at its end. `null` when the suggestion reads the
|
|
28
|
+
* same as the typed text.
|
|
29
|
+
*/
|
|
30
|
+
export declare const completeInline: (label: string, typed: string, locale: string) => InlineCompletion | null;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Pure helpers behind Autocomplete: suggestions as the Combobox list expects them, and the text
|
|
2
|
+
// an inline completion writes into the input.
|
|
3
|
+
import { createListFilter } from '../../../utils/listFilter.js';
|
|
4
|
+
const isGroup = (entry) => typeof entry === 'object' && 'items' in entry && Array.isArray(entry.items);
|
|
5
|
+
/** A plain-text suggestion is an option whose value and label are that text. */
|
|
6
|
+
export const toOption = (item) => typeof item === 'string' ? { value: item, label: item } : item;
|
|
7
|
+
/**
|
|
8
|
+
* Suggestions as options: strings become `{ value, label }`, everything else is passed through.
|
|
9
|
+
* A value listed more than once (within or across groups) keeps its first entry, since rows and
|
|
10
|
+
* option ids are keyed by value; a group left empty by that is dropped.
|
|
11
|
+
*/
|
|
12
|
+
export const normalizeItems = (items) => {
|
|
13
|
+
const seen = new Set();
|
|
14
|
+
const fresh = (option) => {
|
|
15
|
+
if (seen.has(option.value))
|
|
16
|
+
return false;
|
|
17
|
+
seen.add(option.value);
|
|
18
|
+
return true;
|
|
19
|
+
};
|
|
20
|
+
const result = [];
|
|
21
|
+
for (const entry of items) {
|
|
22
|
+
if (isGroup(entry)) {
|
|
23
|
+
const options = entry.items.map(toOption).filter(fresh);
|
|
24
|
+
if (options.length > 0 || entry.items.length === 0)
|
|
25
|
+
result.push({ ...entry, items: options });
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const option = toOption(entry);
|
|
29
|
+
if (fresh(option))
|
|
30
|
+
result.push(option);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
/** The Combobox list's source for these suggestions; functions have their results normalized. */
|
|
36
|
+
export const normalizeSource = (source) => {
|
|
37
|
+
if (source === undefined)
|
|
38
|
+
return undefined;
|
|
39
|
+
if (typeof source !== 'function')
|
|
40
|
+
return normalizeItems(source);
|
|
41
|
+
return async (query, request) => normalizeItems((await source(query ?? '', request)) ?? []);
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The input text for previewing `label` over what was `typed`. A label that continues the typed
|
|
45
|
+
* text completes it, with the added part selected so the next key replaces it. Any other label
|
|
46
|
+
* replaces the text outright, with the caret at its end. `null` when the suggestion reads the
|
|
47
|
+
* same as the typed text.
|
|
48
|
+
*/
|
|
49
|
+
export const completeInline = (label, typed, locale) => {
|
|
50
|
+
const filter = createListFilter({ locale });
|
|
51
|
+
// A suggestion that reads the same as the text has nothing to preview.
|
|
52
|
+
if (filter.equals(label, typed))
|
|
53
|
+
return null;
|
|
54
|
+
const continues = typed !== '' && label.length > typed.length && filter.startsWith(label, typed);
|
|
55
|
+
// The typed letters stay as typed, so deleting the completion leaves exactly what was typed.
|
|
56
|
+
const keepsTyping = continues && filter.equals(label.slice(0, typed.length), typed);
|
|
57
|
+
const text = keepsTyping ? typed + label.slice(typed.length) : label;
|
|
58
|
+
return {
|
|
59
|
+
text,
|
|
60
|
+
selectionStart: keepsTyping ? typed.length : text.length,
|
|
61
|
+
selectionEnd: text.length,
|
|
62
|
+
continues
|
|
63
|
+
};
|
|
64
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const autocompleteDescription = "\n# Autocomplete Component\n\nA text input with suggestions. The value is the text in the input, and the input submits it in a native form, so a suggestion is a shortcut for typing and never a requirement. Use it for search boxes, city or email-domain entry and anywhere people may type something that is not in the list. To make people pick from the list, use Combobox instead (its value is the chosen option, not text).\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { Autocomplete } from 'entasis/autocomplete';\n\tlet value = $state('');\n</script>\n\n<Autocomplete\n\tlabel=\"Email domain\"\n\titems={['gmail.com', 'outlook.com', 'proton.me']}\n\tbind:value\n/>\n```\n\n## Props\n\n### Core Props\n\n- **items**: `AutocompleteItemsSource` (required)\n - Suggestions: strings, `{ value, label, description?, disabled?, data? }` options, `{ label?, items }` groups of either (mixed freely), or a function `(query: string, { signal }) => MaybePromise<AutocompleteItems>`. A value listed more than once keeps its first entry. A function runs only while the list is open (typing opens it), never for a prefilled or just chosen text\n - A string suggestion is an option whose value and label are that text\n - For arrays: narrowed client-side with a case- and accent-insensitive match on the label, in the active I18n locale\n - For functions: called after a 100ms pause in typing with the text and `{ signal }`. The signal is aborted when a newer text replaces the request, and a response that is not the latest is ignored. Results are shown as returned (the function filters)\n- **value**: `string | null` (bindable) / **defaultValue**: the text in the input\n- **onValueChange**: `(value: string | null) => void` runs for each edit the user makes and when a suggestion fills in\n- **onSelect**: `({ item, value, event }) => void` runs after a suggestion is chosen with a click or Enter. `item` is the chosen option (a string suggestion arrives as `{ value, label }`), `value` is its label, the text now in the input\n\n### Mode\n\n- **mode**: `'list' | 'both' | 'inline' | 'none'` (default `'list'`)\n - `'list'`: suggestions are filtered by the text; the text changes only when one is chosen\n - `'both'`: filtered, and the input previews the highlighted suggestion (inline completion)\n - `'inline'`: not filtered, and the input previews the highlighted suggestion\n - `'none'`: not filtered, and the text never changes until one is chosen\n - Also sets `aria-autocomplete`\n- **autoHighlight**: `boolean | 'always'` (default `false`). `true` highlights the first match while text is typed, `'always'` also while the text is empty, `false` highlights nothing until an arrow key moves it, so Enter keeps the typed text. Use `true` with `mode=\"both\"` or `\"inline\"` to complete as you type\n- **shouldFilter**: `boolean` (default `true`), **filter**: `(option, query) => boolean`, **limit**: `number`. Narrowing of static suggestions, as in Command\n- **loop**: `'wrap' | 'input' | false` (default `'wrap'`). With `'input'` the end of the list returns to no highlight, and the text to what was typed\n\n### Inline completion\n\nWith `mode=\"both\"` or `\"inline\"` the highlighted suggestion is previewed in the input while the value stays the typed text.\n\n- A suggestion that continues the typed text completes it: the typed letters stay as typed and the added part is selected, so the next key replaces it, and Backspace removes it and leaves the typed text\n- A suggestion that does not continue the text (it only contains it) is previewed only when an arrow key lands on it, replacing the text, with the caret at the end\n- Hovering a suggestion never changes the text\n- Escape puts the typed text back and closes the list. Focus leaving the field puts the typed text back too, so a native submit sends what was typed\n- Enter chooses the previewed suggestion (value becomes its label). ArrowLeft, ArrowRight, Home, End and Tab accept the preview as the typed text\n- Deleting the completion, or the letters before it, does not bring it back until you type again\n- Not applied while `readOnly`, disabled or composing with an IME\n\n### Open state\n\n- **open**: `boolean` (bindable) / **defaultOpen**. The list only renders while there is something to show (suggestions, 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`, `event`, `interaction` and `cancel()`\n- **onAfterOpen** / **onAfterClose**: `() => void` fire once after the transition\n- **openOnFocus**: `boolean` (default `false`). Opens the list on focus before anything is typed: static arrays list every suggestion, functions are called with an empty text\n\n### Field Props\n\n- **required**, **disabled**, **readOnly**, **name**, **size**, **density**, **errors**, **focused**, **description**, **onValidate**, **messages**, **form**, **prefix**, **suffix**, **label**\n- **placeholder**: `string`\n- **autocomplete**: browser autofill hint (default `'off'`: the component offers its own suggestions)\n- **loadingText** / **emptyText**: replace the \"Loading...\" and \"No options found\" messages\n- **item**: `Snippet<[ComboboxOption]>` custom row renderer; **separators**: `boolean` between groups\n- **inputAttrs**: native attributes for the input (`inputmode`, `maxlength`, event handlers that run first, where `preventDefault()` cancels the built-in behaviour); the component keeps id, name, value and ARIA state\n- **onHighlightChange**: `({ value, reason, event }) => void`\n\n## Examples\n\n### Async suggestions\n\n```svelte\n<script lang=\"ts\">\n\tconst cities = async (query: string, { signal }: { signal: AbortSignal }) => {\n\t\tconst response = await fetch(`/api/cities?q=${encodeURIComponent(query)}`, { signal });\n\t\treturn response.json(); // string[] or { value, label }[]\n\t};\n</script>\n\n<Autocomplete label=\"City\" items={cities} bind:value />\n```\n\n### Inline completion\n\n```svelte\n<Autocomplete label=\"Fruit\" mode=\"both\" autoHighlight items={['Apple', 'Apricot', 'Banana']} bind:value />\n```\n\n### Native form\n\n```svelte\n<form onsubmit={(event) => { event.preventDefault(); console.log(new FormData(event.currentTarget).get('city')); }}>\n\t<Autocomplete name=\"city\" label=\"City\" items={cities} />\n\t<Button type=\"submit\">Search</Button>\n</form>\n```\n\n## Accessibility\n\n- **role=\"combobox\"** on the input with **aria-autocomplete** set to the mode, **aria-expanded**, **aria-controls** and **aria-activedescendant**; the list is a **role=\"listbox\"** of options and groups only\n- ArrowDown/ArrowUp open a closed list (with every suggestion) and move the highlight; Enter chooses the highlighted suggestion and otherwise does nothing, so the form's Enter handling and submit still work; Escape closes the list and keeps focus (a second Escape clears the text); Home and End stay on the caret\n- Clicking the already-focused input toggles the list. A press inside the list never moves focus off the input\n- One persistent visually hidden live region next to the input announces result counts, the empty state, loading and errors after typing settles\n- Read-only: the list opens and can be browsed, the text cannot change and still submits\n\n## Notes\n\n- **Native forms**: the input itself carries `name` and submits the text (nothing when there is no name or the field is disabled); `required` blocks a native submit while empty. Free text is kept when focus leaves\n- **Reset**: a native form reset returns the text the field mounted with\n- **Race conditions**: older requests are aborted and only the latest response updates the list\n- **Styling hooks**: while the list is open, the field it is anchored to carries `data-popup-side` and the panel `data-side`; option rows are `MenuOption` rows themed with `setMenuOptionTheme`\n\n## Theme Customization\n\nTheme parts: **input**, **inputContainer**, **loading**, **error**, **noOptions**, **group**, **groupLabel**, **separator**. They start from Combobox's look and have their own registry key, `autocomplete`.\n\n```svelte\n<script>\n\timport { setAutocompleteTheme } from 'entasis/autocomplete';\n\n\tsetAutocompleteTheme({\n\t\tinputContainer: { base: 'rounded-lg border-2' },\n\t\tnoOptions: { base: 'italic' }\n\t});\n</script>\n```\n";
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
export const autocompleteDescription = `
|
|
2
|
+
# Autocomplete Component
|
|
3
|
+
|
|
4
|
+
A text input with suggestions. The value is the text in the input, and the input submits it in a native form, so a suggestion is a shortcut for typing and never a requirement. Use it for search boxes, city or email-domain entry and anywhere people may type something that is not in the list. To make people pick from the list, use Combobox instead (its value is the chosen option, not text).
|
|
5
|
+
|
|
6
|
+
## Basic Usage
|
|
7
|
+
|
|
8
|
+
\`\`\`svelte
|
|
9
|
+
<script>
|
|
10
|
+
import { Autocomplete } from './index.ts';
|
|
11
|
+
let value = $state('');
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<Autocomplete
|
|
15
|
+
label="Email domain"
|
|
16
|
+
items={['gmail.com', 'outlook.com', 'proton.me']}
|
|
17
|
+
bind:value
|
|
18
|
+
/>
|
|
19
|
+
\`\`\`
|
|
20
|
+
|
|
21
|
+
## Props
|
|
22
|
+
|
|
23
|
+
### Core Props
|
|
24
|
+
|
|
25
|
+
- **items**: \`AutocompleteItemsSource\` (required)
|
|
26
|
+
- Suggestions: strings, \`{ value, label, description?, disabled?, data? }\` options, \`{ label?, items }\` groups of either (mixed freely), or a function \`(query: string, { signal }) => MaybePromise<AutocompleteItems>\`. A value listed more than once keeps its first entry. A function runs only while the list is open (typing opens it), never for a prefilled or just chosen text
|
|
27
|
+
- A string suggestion is an option whose value and label are that text
|
|
28
|
+
- For arrays: narrowed client-side with a case- and accent-insensitive match on the label, in the active I18n locale
|
|
29
|
+
- For functions: called after a 100ms pause in typing with the text and \`{ signal }\`. The signal is aborted when a newer text replaces the request, and a response that is not the latest is ignored. Results are shown as returned (the function filters)
|
|
30
|
+
- **value**: \`string | null\` (bindable) / **defaultValue**: the text in the input
|
|
31
|
+
- **onValueChange**: \`(value: string | null) => void\` runs for each edit the user makes and when a suggestion fills in
|
|
32
|
+
- **onSelect**: \`({ item, value, event }) => void\` runs after a suggestion is chosen with a click or Enter. \`item\` is the chosen option (a string suggestion arrives as \`{ value, label }\`), \`value\` is its label, the text now in the input
|
|
33
|
+
|
|
34
|
+
### Mode
|
|
35
|
+
|
|
36
|
+
- **mode**: \`'list' | 'both' | 'inline' | 'none'\` (default \`'list'\`)
|
|
37
|
+
- \`'list'\`: suggestions are filtered by the text; the text changes only when one is chosen
|
|
38
|
+
- \`'both'\`: filtered, and the input previews the highlighted suggestion (inline completion)
|
|
39
|
+
- \`'inline'\`: not filtered, and the input previews the highlighted suggestion
|
|
40
|
+
- \`'none'\`: not filtered, and the text never changes until one is chosen
|
|
41
|
+
- Also sets \`aria-autocomplete\`
|
|
42
|
+
- **autoHighlight**: \`boolean | 'always'\` (default \`false\`). \`true\` highlights the first match while text is typed, \`'always'\` also while the text is empty, \`false\` highlights nothing until an arrow key moves it, so Enter keeps the typed text. Use \`true\` with \`mode="both"\` or \`"inline"\` to complete as you type
|
|
43
|
+
- **shouldFilter**: \`boolean\` (default \`true\`), **filter**: \`(option, query) => boolean\`, **limit**: \`number\`. Narrowing of static suggestions, as in Command
|
|
44
|
+
- **loop**: \`'wrap' | 'input' | false\` (default \`'wrap'\`). With \`'input'\` the end of the list returns to no highlight, and the text to what was typed
|
|
45
|
+
|
|
46
|
+
### Inline completion
|
|
47
|
+
|
|
48
|
+
With \`mode="both"\` or \`"inline"\` the highlighted suggestion is previewed in the input while the value stays the typed text.
|
|
49
|
+
|
|
50
|
+
- A suggestion that continues the typed text completes it: the typed letters stay as typed and the added part is selected, so the next key replaces it, and Backspace removes it and leaves the typed text
|
|
51
|
+
- A suggestion that does not continue the text (it only contains it) is previewed only when an arrow key lands on it, replacing the text, with the caret at the end
|
|
52
|
+
- Hovering a suggestion never changes the text
|
|
53
|
+
- Escape puts the typed text back and closes the list. Focus leaving the field puts the typed text back too, so a native submit sends what was typed
|
|
54
|
+
- Enter chooses the previewed suggestion (value becomes its label). ArrowLeft, ArrowRight, Home, End and Tab accept the preview as the typed text
|
|
55
|
+
- Deleting the completion, or the letters before it, does not bring it back until you type again
|
|
56
|
+
- Not applied while \`readOnly\`, disabled or composing with an IME
|
|
57
|
+
|
|
58
|
+
### Open state
|
|
59
|
+
|
|
60
|
+
- **open**: \`boolean\` (bindable) / **defaultOpen**. The list only renders while there is something to show (suggestions, a loading or error message, or the "no options" message for the typed text)
|
|
61
|
+
- **onOpenChange**: \`(open, details) => void\` runs before the list opens or closes. \`details\` carries \`reason\`, \`event\`, \`interaction\` and \`cancel()\`
|
|
62
|
+
- **onAfterOpen** / **onAfterClose**: \`() => void\` fire once after the transition
|
|
63
|
+
- **openOnFocus**: \`boolean\` (default \`false\`). Opens the list on focus before anything is typed: static arrays list every suggestion, functions are called with an empty text
|
|
64
|
+
|
|
65
|
+
### Field Props
|
|
66
|
+
|
|
67
|
+
- **required**, **disabled**, **readOnly**, **name**, **size**, **density**, **errors**, **focused**, **description**, **onValidate**, **messages**, **form**, **prefix**, **suffix**, **label**
|
|
68
|
+
- **placeholder**: \`string\`
|
|
69
|
+
- **autocomplete**: browser autofill hint (default \`'off'\`: the component offers its own suggestions)
|
|
70
|
+
- **loadingText** / **emptyText**: replace the "Loading..." and "No options found" messages
|
|
71
|
+
- **item**: \`Snippet<[ComboboxOption]>\` custom row renderer; **separators**: \`boolean\` between groups
|
|
72
|
+
- **inputAttrs**: native attributes for the input (\`inputmode\`, \`maxlength\`, event handlers that run first, where \`preventDefault()\` cancels the built-in behaviour); the component keeps id, name, value and ARIA state
|
|
73
|
+
- **onHighlightChange**: \`({ value, reason, event }) => void\`
|
|
74
|
+
|
|
75
|
+
## Examples
|
|
76
|
+
|
|
77
|
+
### Async suggestions
|
|
78
|
+
|
|
79
|
+
\`\`\`svelte
|
|
80
|
+
<script lang="ts">
|
|
81
|
+
const cities = async (query: string, { signal }: { signal: AbortSignal }) => {
|
|
82
|
+
const response = await fetch(\`/api/cities?q=\${encodeURIComponent(query)}\`, { signal });
|
|
83
|
+
return response.json(); // string[] or { value, label }[]
|
|
84
|
+
};
|
|
85
|
+
</script>
|
|
86
|
+
|
|
87
|
+
<Autocomplete label="City" items={cities} bind:value />
|
|
88
|
+
\`\`\`
|
|
89
|
+
|
|
90
|
+
### Inline completion
|
|
91
|
+
|
|
92
|
+
\`\`\`svelte
|
|
93
|
+
<Autocomplete label="Fruit" mode="both" autoHighlight items={['Apple', 'Apricot', 'Banana']} bind:value />
|
|
94
|
+
\`\`\`
|
|
95
|
+
|
|
96
|
+
### Native form
|
|
97
|
+
|
|
98
|
+
\`\`\`svelte
|
|
99
|
+
<form onsubmit={(event) => { event.preventDefault(); console.log(new FormData(event.currentTarget).get('city')); }}>
|
|
100
|
+
<Autocomplete name="city" label="City" items={cities} />
|
|
101
|
+
<Button type="submit">Search</Button>
|
|
102
|
+
</form>
|
|
103
|
+
\`\`\`
|
|
104
|
+
|
|
105
|
+
## Accessibility
|
|
106
|
+
|
|
107
|
+
- **role="combobox"** on the input with **aria-autocomplete** set to the mode, **aria-expanded**, **aria-controls** and **aria-activedescendant**; the list is a **role="listbox"** of options and groups only
|
|
108
|
+
- ArrowDown/ArrowUp open a closed list (with every suggestion) and move the highlight; Enter chooses the highlighted suggestion and otherwise does nothing, so the form's Enter handling and submit still work; Escape closes the list and keeps focus (a second Escape clears the text); Home and End stay on the caret
|
|
109
|
+
- Clicking the already-focused input toggles the list. A press inside the list never moves focus off the input
|
|
110
|
+
- One persistent visually hidden live region next to the input announces result counts, the empty state, loading and errors after typing settles
|
|
111
|
+
- Read-only: the list opens and can be browsed, the text cannot change and still submits
|
|
112
|
+
|
|
113
|
+
## Notes
|
|
114
|
+
|
|
115
|
+
- **Native forms**: the input itself carries \`name\` and submits the text (nothing when there is no name or the field is disabled); \`required\` blocks a native submit while empty. Free text is kept when focus leaves
|
|
116
|
+
- **Reset**: a native form reset returns the text the field mounted with
|
|
117
|
+
- **Race conditions**: older requests are aborted and only the latest response updates the list
|
|
118
|
+
- **Styling hooks**: while the list is open, the field it is anchored to carries \`data-popup-side\` and the panel \`data-side\`; option rows are \`MenuOption\` rows themed with \`setMenuOptionTheme\`
|
|
119
|
+
|
|
120
|
+
## Theme Customization
|
|
121
|
+
|
|
122
|
+
Theme parts: **input**, **inputContainer**, **loading**, **error**, **noOptions**, **group**, **groupLabel**, **separator**. They start from Combobox's look and have their own registry key, \`autocomplete\`.
|
|
123
|
+
|
|
124
|
+
\`\`\`svelte
|
|
125
|
+
<script>
|
|
126
|
+
import { setAutocompleteTheme } from './index.ts';
|
|
127
|
+
|
|
128
|
+
setAutocompleteTheme({
|
|
129
|
+
inputContainer: { base: 'rounded-lg border-2' },
|
|
130
|
+
noOptions: { base: 'italic' }
|
|
131
|
+
});
|
|
132
|
+
</script>
|
|
133
|
+
\`\`\`
|
|
134
|
+
`;
|