entasis 0.10.2 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
- package/dist/attachments/disclosurePanel.svelte.js +277 -0
- package/dist/attachments/portal.d.ts +17 -1
- package/dist/attachments/portal.js +39 -2
- package/dist/attachments/spinnerOverlay.svelte.js +12 -0
- package/dist/attachments/transitionSize.d.ts +6 -0
- package/dist/attachments/transitionSize.js +30 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
- package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
- package/dist/components/AIAskUserQuestion/index.js +2 -0
- package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
- package/dist/components/AIAskUserQuestion/schemas.js +10 -3
- package/dist/components/AIChat/AIChat.svelte +10 -0
- package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
- package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
- package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
- package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
- package/dist/components/AIChat/AIChatSurface.svelte +30 -2
- package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
- package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
- package/dist/components/AIChat/aiChat.mcp.js +31 -15
- package/dist/components/AIChat/aiChat.props.d.ts +36 -10
- package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
- package/dist/components/AIChat/aiChat.theme.js +21 -4
- package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
- package/dist/components/AIChat/index.d.ts +1 -1
- package/dist/components/AIComposer/AIComposer.svelte +102 -5
- package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
- package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
- package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
- package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
- package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
- package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
- package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
- package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
- package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
- package/dist/components/AIComposer/aiComposer.theme.js +37 -5
- package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
- package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
- package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
- package/dist/components/AIContext/AIContext.svelte +7 -3
- package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
- package/dist/components/AIContext/aiContext.mcp.js +1 -1
- package/dist/components/AIContext/aiContext.props.d.ts +4 -1
- package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
- package/dist/components/AIContext/aiContext.theme.js +7 -2
- package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
- package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
- package/dist/components/AIMarker/AIMarker.svelte +2 -0
- package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
- package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
- package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
- package/dist/components/AIMarker/aiMarker.theme.js +2 -2
- package/dist/components/AIMessage/AIMessage.svelte +38 -16
- package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
- package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
- package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
- package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
- package/dist/components/AIMessage/aiMessage.theme.js +91 -32
- package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
- package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
- package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
- package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
- package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
- package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
- package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
- package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
- package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
- package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
- package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
- package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
- package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
- package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
- package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
- package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
- package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
- package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
- package/dist/components/AIThread/AIThread.svelte +378 -95
- package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
- package/dist/components/AIThread/AIThreadItems.svelte +266 -64
- package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
- package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
- package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
- package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
- package/dist/components/AIThread/aiThread.mcp.js +34 -20
- package/dist/components/AIThread/aiThread.props.d.ts +73 -8
- package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
- package/dist/components/AIThread/aiThread.theme.js +108 -9
- package/dist/components/AIThread/index.d.ts +1 -1
- package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
- package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
- package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
- package/dist/components/AIThread/threadRenderItems.js +265 -77
- package/dist/components/AIThread/threadScrollController.d.ts +0 -8
- package/dist/components/AIThread/threadScrollController.js +2 -39
- package/dist/components/AIThread/threadTools.d.ts +11 -0
- package/dist/components/AIThread/threadTools.js +79 -0
- package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
- package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
- package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
- package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
- package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
- package/dist/components/AITool/AITool.svelte +56 -21
- package/dist/components/AITool/AIToolCallList.svelte +79 -29
- package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
- package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
- package/dist/components/AITool/AIToolValueSection.svelte +126 -28
- package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolValueTree.svelte +11 -16
- package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
- package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
- package/dist/components/AITool/aiTool.mcp.js +36 -8
- package/dist/components/AITool/aiTool.props.d.ts +52 -6
- package/dist/components/AITool/aiTool.theme.d.ts +117 -39
- package/dist/components/AITool/aiTool.theme.js +144 -140
- package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
- package/dist/components/AITool/aiToolClock.svelte.js +62 -0
- package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
- package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
- package/dist/components/AITool/index.d.ts +2 -1
- package/dist/components/AITool/index.js +1 -0
- package/dist/components/AITool/toolRendering.d.ts +33 -1
- package/dist/components/AITool/toolRendering.js +179 -15
- package/dist/components/AITool/toolValueTree.d.ts +14 -1
- package/dist/components/AITool/toolValueTree.js +126 -27
- package/dist/components/Accordion/Accordion.svelte +109 -109
- package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
- package/dist/components/Accordion/AccordionPanel.svelte +64 -0
- package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
- package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
- package/dist/components/Accordion/accordion.attributes.js +20 -0
- package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
- package/dist/components/Accordion/accordion.mcp.js +78 -22
- package/dist/components/Accordion/accordion.props.d.ts +54 -10
- package/dist/components/Accordion/accordion.theme.d.ts +3 -0
- package/dist/components/Accordion/accordion.theme.js +4 -0
- package/dist/components/Accordion/index.d.ts +1 -0
- package/dist/components/Accordion/index.js +1 -0
- package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
- package/dist/components/Avatar/Avatar.svelte +60 -10
- package/dist/components/Avatar/AvatarGroup.svelte +9 -0
- package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
- package/dist/components/Avatar/avatar.mcp.js +13 -5
- package/dist/components/Avatar/avatar.props.d.ts +28 -1
- package/dist/components/Avatar/avatar.theme.js +3 -3
- package/dist/components/Avatar/index.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
- package/dist/components/Button/Button.svelte +35 -15
- package/dist/components/Button/button.mcp.d.ts +1 -1
- package/dist/components/Button/button.mcp.js +8 -4
- package/dist/components/Button/button.props.d.ts +23 -8
- package/dist/components/Button/button.theme.d.ts +12 -0
- package/dist/components/Button/button.theme.js +17 -4
- package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
- package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
- package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
- package/dist/components/Collapsible/Collapsible.svelte +125 -19
- package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
- package/dist/components/Collapsible/collapsible.attributes.js +17 -0
- package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
- package/dist/components/Collapsible/collapsible.mcp.js +62 -12
- package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
- package/dist/components/Collapsible/collapsible.theme.js +3 -1
- package/dist/components/Collapsible/index.d.ts +1 -0
- package/dist/components/Collapsible/index.js +1 -0
- package/dist/components/Command/Command.svelte +56 -14
- package/dist/components/Command/command.mcp.d.ts +1 -1
- package/dist/components/Command/command.mcp.js +12 -6
- package/dist/components/Command/command.props.d.ts +39 -6
- package/dist/components/Command/command.state.svelte.d.ts +40 -11
- package/dist/components/Command/command.state.svelte.js +75 -28
- package/dist/components/Command/command.theme.js +4 -3
- package/dist/components/Confirmation/Confirmation.svelte +72 -31
- package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
- package/dist/components/Confirmation/confirmation.mcp.js +5 -4
- package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
- package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
- package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
- package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
- package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
- package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
- package/dist/components/DataTable/DataTable.svelte +4 -9
- package/dist/components/DataTable/DataTableEditor.svelte +5 -0
- package/dist/components/DataTable/DataTableFilter.svelte +1 -0
- package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
- package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
- package/dist/components/DataTable/dataTable.mcp.js +4 -2
- package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
- package/dist/components/DataTable/dataTable.theme.js +9 -6
- package/dist/components/Dialog/Dialog.svelte +120 -35
- package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
- package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
- package/dist/components/Dialog/dialog.api.d.ts +65 -0
- package/dist/components/Dialog/dialog.api.js +1 -0
- package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
- package/dist/components/Dialog/dialog.attributes.js +19 -0
- package/dist/components/Dialog/dialog.indent.d.ts +6 -0
- package/dist/components/Dialog/dialog.indent.js +16 -0
- package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
- package/dist/components/Dialog/dialog.mcp.js +195 -22
- package/dist/components/Dialog/dialog.props.d.ts +102 -19
- package/dist/components/Dialog/dialog.snap.d.ts +40 -0
- package/dist/components/Dialog/dialog.snap.js +78 -0
- package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
- package/dist/components/Dialog/dialog.state.svelte.js +525 -66
- package/dist/components/Dialog/dialog.theme.d.ts +48 -0
- package/dist/components/Dialog/dialog.theme.js +32 -9
- package/dist/components/Dialog/index.d.ts +4 -1
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
- package/dist/components/DocumentViewer/documentOutput.js +2 -1
- package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
- package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
- package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
- package/dist/components/Form/Ask/Ask.svelte +9 -13
- package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
- package/dist/components/Form/Ask/ask.mcp.js +1 -1
- package/dist/components/Form/Ask/ask.props.d.ts +1 -1
- package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
- package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
- package/dist/components/Form/Autocomplete/index.d.ts +3 -0
- package/dist/components/Form/Autocomplete/index.js +2 -0
- package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
- package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
- package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
- package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
- package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
- package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
- package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
- package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
- package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
- package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
- package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
- package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
- package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
- package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
- package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
- package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
- package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
- package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
- package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
- package/dist/components/Form/Combobox/Combobox.svelte +145 -185
- package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
- package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
- package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
- package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
- package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.items.js +68 -0
- package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
- package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
- package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
- package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
- package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
- package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
- package/dist/components/Form/Combobox/combobox.theme.js +37 -1
- package/dist/components/Form/Combobox/index.d.ts +2 -1
- package/dist/components/Form/Combobox/index.js +1 -0
- package/dist/components/Form/DateInput/DateInput.svelte +11 -3
- package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
- package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
- package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
- package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
- package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
- package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
- package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
- package/dist/components/Form/Field/Field.svelte +258 -32
- package/dist/components/Form/Field/Field.svelte.d.ts +15 -6
- package/dist/components/Form/Field/FieldGroup.svelte +29 -0
- package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
- package/dist/components/Form/Field/field.d.ts +75 -10
- package/dist/components/Form/Field/field.mcp.d.ts +1 -1
- package/dist/components/Form/Field/field.mcp.js +158 -18
- package/dist/components/Form/Field/field.messages.d.ts +47 -0
- package/dist/components/Form/Field/field.messages.js +64 -0
- package/dist/components/Form/Field/field.state.svelte.d.ts +117 -40
- package/dist/components/Form/Field/field.state.svelte.js +525 -16
- package/dist/components/Form/Field/field.theme.d.ts +46 -0
- package/dist/components/Form/Field/field.theme.js +33 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
- package/dist/components/Form/Field/index.d.ts +5 -2
- package/dist/components/Form/Field/index.js +1 -0
- package/dist/components/Form/Field/schemas.js +7 -2
- package/dist/components/Form/File/FileInput.svelte +24 -3
- package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
- package/dist/components/Form/File/fileInput.mcp.js +1 -0
- package/dist/components/Form/Form/Form.svelte +49 -15
- package/dist/components/Form/Form/FormActions.svelte +3 -1
- package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
- package/dist/components/Form/Form/FormFieldRenderer.svelte +96 -12
- package/dist/components/Form/Form/FormFieldRenderer.svelte.d.ts +3 -2
- package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
- package/dist/components/Form/Form/form.d.ts +84 -11
- package/dist/components/Form/Form/form.mcp.d.ts +1 -1
- package/dist/components/Form/Form/form.mcp.js +178 -12
- package/dist/components/Form/Form/form.props.d.ts +32 -1
- package/dist/components/Form/Form/form.registry.d.ts +28 -0
- package/dist/components/Form/Form/form.registry.js +59 -0
- package/dist/components/Form/Form/form.state.svelte.d.ts +1186 -420
- package/dist/components/Form/Form/form.state.svelte.js +322 -28
- package/dist/components/Form/Form/index.d.ts +4 -1
- package/dist/components/Form/Form/index.js +1 -0
- package/dist/components/Form/Form/visibility.d.ts +3130 -1863
- package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
- package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
- package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1050 -408
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
- package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
- package/dist/components/Form/NumberInput/index.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
- package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
- package/dist/components/Form/PasswordInput/Password.svelte +28 -1
- package/dist/components/Form/PasswordInput/index.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
- package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
- package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
- package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
- package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
- package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
- package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
- package/dist/components/Form/PinInput/PinInput.svelte +44 -9
- package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
- package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
- package/dist/components/Form/PinInput/index.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
- package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
- package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
- package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
- package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
- package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
- package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
- package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
- package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
- package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
- package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
- package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
- package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
- package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
- package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
- package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
- package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
- package/dist/components/Form/Select/Select.svelte +186 -48
- package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
- package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
- package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
- package/dist/components/Form/Select/index.d.ts +2 -1
- package/dist/components/Form/Select/index.js +1 -0
- package/dist/components/Form/Select/select.align.d.ts +5 -0
- package/dist/components/Form/Select/select.align.js +19 -5
- package/dist/components/Form/Select/select.attributes.d.ts +36 -0
- package/dist/components/Form/Select/select.attributes.js +27 -0
- package/dist/components/Form/Select/select.mcp.d.ts +1 -1
- package/dist/components/Form/Select/select.mcp.js +103 -18
- package/dist/components/Form/Select/select.props.d.ts +87 -10
- package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
- package/dist/components/Form/Select/select.state.svelte.js +354 -59
- package/dist/components/Form/Select/select.theme.d.ts +21 -0
- package/dist/components/Form/Select/select.theme.js +22 -0
- package/dist/components/Form/Slider/Slider.svelte +54 -14
- package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
- package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
- package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
- package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
- package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
- package/dist/components/Form/Slider/index.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.js +55 -11
- package/dist/components/Form/Slider/slider.props.d.ts +35 -2
- package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
- package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
- package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
- package/dist/components/Form/Slider/slider.theme.js +35 -17
- package/dist/components/Form/Switch/Switch.svelte +61 -38
- package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
- package/dist/components/Form/Switch/switch.mcp.js +25 -5
- package/dist/components/Form/Switch/switch.props.d.ts +14 -1
- package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
- package/dist/components/Form/Switch/switch.theme.js +8 -3
- package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
- package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
- package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
- package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
- package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
- package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
- package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
- package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
- package/dist/components/Form/TextArea/TextArea.svelte +8 -0
- package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
- package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
- package/dist/components/Form/TextInput/TextInput.svelte +8 -1
- package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
- package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
- package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
- package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
- package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
- package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
- package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
- package/dist/components/HoverCard/HoverCard.svelte +100 -10
- package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
- package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
- package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
- package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
- package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
- package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
- package/dist/components/HoverCard/hoverCard.theme.js +9 -2
- package/dist/components/HoverCard/index.d.ts +1 -0
- package/dist/components/HoverCard/index.js +1 -0
- package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
- package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
- package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
- package/dist/components/Kanban/kanban.theme.js +7 -3
- package/dist/components/Layout/layoutSpacing.d.ts +2 -2
- package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
- package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
- package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
- package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
- package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
- package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
- package/dist/components/Map/maplibre-cdn.js +3 -2
- package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
- package/dist/components/Markdown/markdown.mcp.js +2 -1
- package/dist/components/Markdown/markdown.theme.js +18 -9
- package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
- package/dist/components/Menu/Menu.svelte +3 -3
- package/dist/components/Menu/Menu.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
- package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
- package/dist/components/Menu/MenuFloating.svelte +421 -74
- package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
- package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
- package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
- package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
- package/dist/components/Menu/MenuSearchField.svelte +54 -0
- package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
- package/dist/components/Menu/MenuStacked.svelte +404 -158
- package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
- package/dist/components/Menu/index.d.ts +2 -1
- package/dist/components/Menu/index.js +1 -0
- package/dist/components/Menu/menu.attributes.d.ts +37 -0
- package/dist/components/Menu/menu.attributes.js +28 -0
- package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
- package/dist/components/Menu/menu.filter.svelte.js +143 -0
- package/dist/components/Menu/menu.mcp.d.ts +1 -1
- package/dist/components/Menu/menu.mcp.js +227 -17
- package/dist/components/Menu/menu.platform.d.ts +5 -0
- package/dist/components/Menu/menu.platform.js +11 -0
- package/dist/components/Menu/menu.props.d.ts +172 -9
- package/dist/components/Menu/menu.theme.d.ts +147 -0
- package/dist/components/Menu/menu.theme.js +101 -0
- package/dist/components/Menu/menuTree.d.ts +35 -1
- package/dist/components/Menu/menuTree.js +158 -1
- package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
- package/dist/components/MenuBar/menuBar.mcp.js +4 -2
- package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
- package/dist/components/MenuOption/MenuOption.svelte +5 -1
- package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
- package/dist/components/MenuOption/menuOption.mcp.js +8 -0
- package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
- package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
- package/dist/components/MenuOption/menuOption.theme.js +24 -4
- package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
- package/dist/components/Mermaid/mermaid.mcp.js +8 -8
- package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
- package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
- package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
- package/dist/components/Mermaid/mermaid.theme.js +26 -1
- package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
- package/dist/components/Meter/Meter.svelte +110 -24
- package/dist/components/Meter/Meter.svelte.d.ts +12 -12
- package/dist/components/Meter/meter.mcp.d.ts +1 -1
- package/dist/components/Meter/meter.mcp.js +23 -37
- package/dist/components/Meter/meter.props.d.ts +36 -44
- package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
- package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/index.d.ts +4 -0
- package/dist/components/NavigationMenu/index.js +3 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
- package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
- package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
- package/dist/components/Overlay/Overlay.svelte +19 -30
- package/dist/components/Overlay/index.d.ts +1 -0
- package/dist/components/Overlay/index.js +1 -0
- package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
- package/dist/components/Overlay/overlay.attributes.js +14 -0
- package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
- package/dist/components/Overlay/overlay.mcp.js +21 -3
- package/dist/components/Overlay/overlay.props.d.ts +8 -4
- package/dist/components/Popover/Popover.svelte +163 -52
- package/dist/components/Popover/Popover.svelte.d.ts +23 -2
- package/dist/components/Popover/PopoverSession.svelte +12 -0
- package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
- package/dist/components/Popover/index.d.ts +10 -2
- package/dist/components/Popover/index.js +4 -1
- package/dist/components/Popover/popover.api.d.ts +83 -0
- package/dist/components/Popover/popover.api.js +1 -0
- package/dist/components/Popover/popover.attributes.d.ts +32 -0
- package/dist/components/Popover/popover.attributes.js +28 -0
- package/dist/components/Popover/popover.claims.d.ts +19 -0
- package/dist/components/Popover/popover.claims.js +45 -0
- package/dist/components/Popover/popover.mcp.d.ts +1 -1
- package/dist/components/Popover/popover.mcp.js +163 -31
- package/dist/components/Popover/popover.position.d.ts +226 -0
- package/dist/components/Popover/popover.position.js +402 -0
- package/dist/components/Popover/popover.props.d.ts +179 -24
- package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
- package/dist/components/Popover/popover.state.svelte.js +1034 -194
- package/dist/components/Popover/popover.theme.d.ts +15 -0
- package/dist/components/Popover/popover.theme.js +27 -2
- package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
- package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
- package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
- package/dist/components/PopupMenu/popupMenu.context.js +52 -0
- package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
- package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
- package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
- package/dist/components/Progress/Progress.svelte +160 -0
- package/dist/components/Progress/Progress.svelte.d.ts +4 -0
- package/dist/components/Progress/index.d.ts +3 -0
- package/dist/components/Progress/index.js +2 -0
- package/dist/components/Progress/progress.mcp.d.ts +1 -0
- package/dist/components/Progress/progress.mcp.js +101 -0
- package/dist/components/Progress/progress.props.d.ts +79 -0
- package/dist/components/Progress/progress.props.js +1 -0
- package/dist/components/Progress/progress.theme.d.ts +129 -0
- package/dist/components/Progress/progress.theme.js +83 -0
- package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
- package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
- package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
- package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
- package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
- package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
- package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
- package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
- package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
- package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
- package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
- package/dist/components/RichTextInput/suggestions.js +2 -0
- package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
- package/dist/components/ScrollArea/index.d.ts +2 -1
- package/dist/components/ScrollArea/index.js +1 -0
- package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
- package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
- package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
- package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
- package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
- package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
- package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
- package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
- package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
- package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
- package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
- package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
- package/dist/components/Sidebar/SidebarAction.svelte +13 -3
- package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
- package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
- package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
- package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
- package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
- package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
- package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
- package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
- package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +1 -0
- package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
- package/dist/components/Sidebar/sidebar-position.js +31 -2
- package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
- package/dist/components/Sidebar/sidebar.attributes.js +29 -0
- package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
- package/dist/components/Sidebar/sidebar.mcp.js +45 -10
- package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
- package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
- package/dist/components/Sidebar/sidebar.theme.js +113 -62
- package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
- package/dist/components/Stepper/Stepper.svelte +2 -0
- package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
- package/dist/components/Stepper/stepper.mcp.js +1 -0
- package/dist/components/Stepper/stepper.props.d.ts +5 -0
- package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
- package/dist/components/Stepper/stepper.state.svelte.js +31 -12
- package/dist/components/Tabbar/Tabbar.svelte +55 -16
- package/dist/components/Tabbar/index.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.js +26 -9
- package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
- package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
- package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
- package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
- package/dist/components/Tabs/Tabs.svelte +73 -16
- package/dist/components/Tabs/index.d.ts +2 -1
- package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
- package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
- package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
- package/dist/components/Tabs/tabs.mcp.js +22 -4
- package/dist/components/Tabs/tabs.props.d.ts +39 -12
- package/dist/components/Tabs/tabs.theme.js +3 -1
- package/dist/components/Theme/Theme.svelte +44 -27
- package/dist/components/Theme/helper.d.ts +16 -2
- package/dist/components/Theme/helper.js +46 -4
- package/dist/components/Theme/theme.mcp.d.ts +1 -1
- package/dist/components/Theme/theme.mcp.js +103 -0
- package/dist/components/Theme/theme.props.d.ts +16 -0
- package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
- package/dist/components/Theme/theme.state.svelte.js +18 -1
- package/dist/components/Toast/Toast.svelte +184 -39
- package/dist/components/Toast/Toaster.svelte +14 -10
- package/dist/components/Toast/index.d.ts +1 -0
- package/dist/components/Toast/toast.mcp.d.ts +1 -1
- package/dist/components/Toast/toast.mcp.js +47 -6
- package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
- package/dist/components/Toast/toast.state.svelte.js +513 -68
- package/dist/components/Toast/toast.theme.js +1 -1
- package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
- package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
- package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
- package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
- package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
- package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
- package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
- package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
- package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
- package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
- package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
- package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
- package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
- package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
- package/dist/components/Tooltip/Tooltip.svelte +4 -12
- package/dist/components/Tooltip/TooltipHost.svelte +136 -15
- package/dist/components/Tooltip/index.d.ts +1 -0
- package/dist/components/Tooltip/index.js +1 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
- package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
- package/dist/components/Tooltip/tooltip.attributes.js +28 -0
- package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
- package/dist/components/Tooltip/tooltip.mcp.js +111 -10
- package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
- package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
- package/dist/components/Tooltip/tooltip.surface.js +42 -0
- package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
- package/dist/components/Utils/BeforeHydratation.svelte +14 -3
- package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
- package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
- package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
- package/dist/generated/componentAliases.d.ts +3 -0
- package/dist/generated/componentAliases.js +3 -0
- package/dist/generated/componentContract.d.ts +79 -34
- package/dist/generated/componentContract.js +231 -6
- package/dist/generated/componentMcpRegistry.js +6 -0
- package/dist/i18n/ar.js +107 -3
- package/dist/i18n/context.svelte.d.ts +6 -0
- package/dist/i18n/context.svelte.js +12 -0
- package/dist/i18n/de.js +101 -3
- package/dist/i18n/en.d.ts +91 -2
- package/dist/i18n/en.js +101 -3
- package/dist/i18n/es.js +101 -3
- package/dist/i18n/fr.js +101 -3
- package/dist/i18n/ja.js +101 -3
- package/dist/i18n/pt.js +101 -3
- package/dist/i18n/zh.js +101 -3
- package/dist/tailwind/geometry.js +7 -0
- package/dist/tailwind/global.js +31 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/types.mcp.d.ts +1 -1
- package/dist/types/types.mcp.js +23 -0
- package/dist/utils/cspNonce.d.ts +16 -0
- package/dist/utils/cspNonce.js +39 -0
- package/dist/utils/cva/merge.d.ts +5 -1
- package/dist/utils/cva/merge.js +6 -4
- package/dist/utils/focus.d.ts +34 -0
- package/dist/utils/focus.js +93 -0
- package/dist/utils/focusHistory.d.ts +21 -0
- package/dist/utils/focusHistory.js +99 -0
- package/dist/utils/handlers.d.ts +7 -0
- package/dist/utils/handlers.js +14 -0
- package/dist/utils/hoverIntent.d.ts +42 -0
- package/dist/utils/hoverIntent.js +57 -0
- package/dist/utils/id.d.ts +7 -0
- package/dist/utils/id.js +15 -0
- package/dist/utils/layers.svelte.d.ts +32 -4
- package/dist/utils/layers.svelte.js +214 -21
- package/dist/utils/listFilter.d.ts +44 -0
- package/dist/utils/listFilter.js +130 -0
- package/dist/utils/match.d.ts +35 -0
- package/dist/utils/match.js +36 -0
- package/dist/utils/number.d.ts +126 -0
- package/dist/utils/number.js +401 -0
- package/dist/utils/openChange.d.ts +88 -0
- package/dist/utils/openChange.js +71 -0
- package/dist/utils/openLifecycle.svelte.d.ts +41 -0
- package/dist/utils/openLifecycle.svelte.js +134 -0
- package/dist/utils/pointerDrag.d.ts +10 -0
- package/dist/utils/pointerDrag.js +37 -2
- package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
- package/dist/utils/pragmaticDragAndDrop.js +8 -3
- package/dist/utils/range.d.ts +62 -0
- package/dist/utils/range.js +70 -0
- package/dist/utils/requestNativeSubmit.d.ts +17 -0
- package/dist/utils/requestNativeSubmit.js +47 -0
- package/dist/utils/safeArea.svelte.d.ts +10 -1
- package/dist/utils/safeArea.svelte.js +19 -11
- package/dist/utils/stateAttributes.d.ts +108 -0
- package/dist/utils/stateAttributes.js +78 -0
- package/dist/utils/swipeVelocity.d.ts +32 -0
- package/dist/utils/swipeVelocity.js +59 -0
- package/dist/utils/timer.svelte.d.ts +65 -2
- package/dist/utils/timer.svelte.js +159 -25
- package/dist/utils/trigger.d.ts +41 -0
- package/dist/utils/trigger.js +103 -0
- package/dist/utils/typeahead.d.ts +9 -0
- package/dist/utils/typeahead.js +21 -9
- package/dist/utils/useDndList.svelte.d.ts +1 -1
- package/dist/utils/useDndList.svelte.js +6 -23
- package/dist/utils/useFocusScope.svelte.d.ts +29 -0
- package/dist/utils/useFocusScope.svelte.js +189 -27
- package/dist/utils/useHoverAction.svelte.d.ts +44 -4
- package/dist/utils/useHoverAction.svelte.js +161 -51
- package/dist/utils/useKeyDown.svelte.d.ts +19 -2
- package/dist/utils/useKeyDown.svelte.js +19 -12
- package/dist/utils/useListNavigation.svelte.d.ts +94 -13
- package/dist/utils/useListNavigation.svelte.js +261 -35
- package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
- package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
- package/dist/utils/useNavigation.svelte.d.ts +36 -3
- package/dist/utils/useNavigation.svelte.js +699 -332
- package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
- package/dist/utils/usePressAndHold.svelte.js +191 -0
- package/dist/utils/useScrollLock.svelte.d.ts +20 -1
- package/dist/utils/useScrollLock.svelte.js +54 -13
- package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
- package/dist/utils/useSlidingIndicator.svelte.js +27 -5
- package/dist/utils/useTabBridge.svelte.d.ts +20 -0
- package/dist/utils/useTabBridge.svelte.js +109 -0
- package/dist/utils/values.d.ts +15 -0
- package/dist/utils/values.js +49 -0
- package/package.json +31 -2
- package/dist/generated/componentMcpRegistry.d.ts +0 -142
- package/dist/utils/useDrag.svelte.d.ts +0 -11
- package/dist/utils/useDrag.svelte.js +0 -55
|
@@ -1,5 +1,68 @@
|
|
|
1
1
|
import { untrack } from 'svelte';
|
|
2
2
|
import { createTypeahead } from './typeahead.js';
|
|
3
|
+
import { elementById } from './id.js';
|
|
4
|
+
/**
|
|
5
|
+
* Hands each distinct value its own DOM id, numbered in the order the values are first asked
|
|
6
|
+
* for. Sanitizing a value into an id collides (`a.b` and `a_b` both become `a_b`) and searching
|
|
7
|
+
* for its index is quadratic; a map lookup is neither. Ids are stable for the life of the map.
|
|
8
|
+
*/
|
|
9
|
+
export const createOptionIds = (prefix) => {
|
|
10
|
+
// Plain map on purpose: ids are handed out while rendering and must not be tracked state.
|
|
11
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
12
|
+
const ids = new Map();
|
|
13
|
+
let sequence = 0;
|
|
14
|
+
return {
|
|
15
|
+
/** The id of `value`; the first request assigns the next number. */
|
|
16
|
+
get(value) {
|
|
17
|
+
let id = ids.get(value);
|
|
18
|
+
if (id === undefined) {
|
|
19
|
+
id = `${prefix}-option-${sequence}`;
|
|
20
|
+
sequence += 1;
|
|
21
|
+
ids.set(value, id);
|
|
22
|
+
}
|
|
23
|
+
return id;
|
|
24
|
+
},
|
|
25
|
+
/** Forgets every assignment (numbering carries on, so old ids are never reused). */
|
|
26
|
+
clear() {
|
|
27
|
+
ids.clear();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
const scrollsVertically = (element) => {
|
|
32
|
+
const overflow = getComputedStyle(element).overflowY;
|
|
33
|
+
return overflow === 'auto' || overflow === 'scroll' || overflow === 'overlay';
|
|
34
|
+
};
|
|
35
|
+
const nearestScroller = (element) => {
|
|
36
|
+
for (let parent = element.parentElement; parent; parent = parent.parentElement) {
|
|
37
|
+
if (scrollsVertically(parent))
|
|
38
|
+
return parent;
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Brings `element` into view by moving the container's own `scrollTop`. Unlike `scrollIntoView`
|
|
44
|
+
* it never scrolls the page or an ancestor, so an inline list inside a page stays put.
|
|
45
|
+
*
|
|
46
|
+
* Rects include ancestor transforms (a popover mid-open animation is scaled), while `scrollTop`
|
|
47
|
+
* is in layout pixels, so the offsets are divided by the container's rendered scale first.
|
|
48
|
+
*/
|
|
49
|
+
const scrollWithin = (container, element) => {
|
|
50
|
+
const style = getComputedStyle(container);
|
|
51
|
+
const paddingTop = parseFloat(style.scrollPaddingTop) || 0;
|
|
52
|
+
const paddingBottom = parseFloat(style.scrollPaddingBottom) || 0;
|
|
53
|
+
const bounds = container.getBoundingClientRect();
|
|
54
|
+
const target = element.getBoundingClientRect();
|
|
55
|
+
const scale = container.offsetHeight > 0 && bounds.height > 0 ? bounds.height / container.offsetHeight : 1;
|
|
56
|
+
// The element's edges in the container's layout space, from the top of its padding box.
|
|
57
|
+
const targetTop = (target.top - bounds.top) / scale - container.clientTop;
|
|
58
|
+
const targetBottom = (target.bottom - bounds.top) / scale - container.clientTop;
|
|
59
|
+
const top = paddingTop;
|
|
60
|
+
const bottom = container.clientHeight - paddingBottom;
|
|
61
|
+
if (targetTop < top)
|
|
62
|
+
container.scrollTop -= top - targetTop;
|
|
63
|
+
else if (targetBottom > bottom)
|
|
64
|
+
container.scrollTop += targetBottom - bottom;
|
|
65
|
+
};
|
|
3
66
|
/**
|
|
4
67
|
* Value-driven keyboard navigation for combobox-style widgets (command palettes, dropdowns,
|
|
5
68
|
* autocompletes): DOM focus stays on the input, only the highlight moves ("virtual focus",
|
|
@@ -7,95 +70,235 @@ import { createTypeahead } from './typeahead.js';
|
|
|
7
70
|
*
|
|
8
71
|
* Unlike `useNavigation` (DOM/index-based roving tabindex — right for menus, tabs, toolbars),
|
|
9
72
|
* the highlight here is a *value*, so it survives the item set changing underneath it: when the
|
|
10
|
-
* highlighted value disappears (typing in a filter), the highlight re-anchors
|
|
73
|
+
* highlighted value disappears (typing in a filter), the highlight re-anchors per
|
|
74
|
+
* `autoHighlight` — the first value by default. With `open` and `anchor` it also lands on the
|
|
75
|
+
* selected value each time the list opens and when the query clears.
|
|
11
76
|
*
|
|
12
77
|
* Must be called during component init (it registers an `$effect`).
|
|
13
78
|
*
|
|
14
79
|
* Wire-up: `onkeydown={nav.onKeydown}` on the input, `aria-activedescendant={nav.activeDescendant}`,
|
|
15
|
-
* `
|
|
80
|
+
* `id={nav.optionId(value)}` and `onpointermove={(event) => nav.pointerHighlight(value, event)}` on
|
|
81
|
+
* rows, `aria-selected={nav.highlighted === value}`.
|
|
16
82
|
*/
|
|
17
83
|
export const useListNavigation = (opts) => {
|
|
18
84
|
let highlighted = $state();
|
|
19
|
-
|
|
85
|
+
let lastDetails = $state({ reason: 'list' });
|
|
86
|
+
let lastPointer = null;
|
|
87
|
+
let scrollTimer;
|
|
88
|
+
const loopMode = () => opts.loop === false ? false : opts.loop === 'input' ? 'input' : 'wrap';
|
|
89
|
+
const autoHighlight = () => opts.autoHighlight ?? 'always';
|
|
90
|
+
const ids = opts.idPrefix !== undefined ? createOptionIds(opts.idPrefix) : null;
|
|
91
|
+
const optionId = (value) => opts.optionId?.(value) ?? ids?.get(value);
|
|
92
|
+
const setHighlighted = (value, details) => {
|
|
20
93
|
if (highlighted === value)
|
|
21
94
|
return;
|
|
95
|
+
const next = details ?? { reason: 'pointer' };
|
|
22
96
|
highlighted = value;
|
|
23
|
-
|
|
97
|
+
lastDetails = next;
|
|
98
|
+
opts.onHighlightChange?.(value, next);
|
|
24
99
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
100
|
+
/** Scroll the highlighted option into view, inside its scroll container only. */
|
|
101
|
+
const scrollToHighlighted = () => {
|
|
102
|
+
if (highlighted === undefined || typeof document === 'undefined')
|
|
103
|
+
return;
|
|
104
|
+
const id = optionId(highlighted);
|
|
105
|
+
const element = id ? elementById(opts.scrollContainer?.(), id) : null;
|
|
106
|
+
if (!element)
|
|
107
|
+
return;
|
|
108
|
+
const container = opts.scrollContainer?.() ?? nearestScroller(element);
|
|
109
|
+
if (container)
|
|
110
|
+
scrollWithin(container, element);
|
|
111
|
+
};
|
|
112
|
+
/** Scroll now and once more after the next flush, for options a popup is still mounting. */
|
|
113
|
+
const scrollSoon = () => {
|
|
114
|
+
scrollToHighlighted();
|
|
115
|
+
if (scrollTimer)
|
|
116
|
+
clearTimeout(scrollTimer);
|
|
117
|
+
scrollTimer = setTimeout(scrollToHighlighted, 0);
|
|
118
|
+
};
|
|
119
|
+
/** The value to highlight with no keyboard input: the anchor, else the auto-highlight rule. */
|
|
120
|
+
const resting = (values, query, useAnchor) => {
|
|
121
|
+
if (useAnchor && query === '') {
|
|
122
|
+
const anchor = untrack(() => opts.anchor?.());
|
|
123
|
+
if (anchor !== undefined && values.includes(anchor))
|
|
124
|
+
return anchor;
|
|
125
|
+
}
|
|
126
|
+
const mode = autoHighlight();
|
|
127
|
+
if (mode === 'always' || (mode === true && query !== ''))
|
|
128
|
+
return values[0];
|
|
129
|
+
return undefined;
|
|
130
|
+
};
|
|
131
|
+
// Re-anchor whenever the set, the query or the open state changes (typing, external item
|
|
132
|
+
// updates). `highlighted` reads/writes are untracked so this reacts only to those inputs —
|
|
133
|
+
// arrow/hover moves change `highlighted` but not the set, so they won't clobber an
|
|
134
|
+
// in-progress selection.
|
|
135
|
+
let previousQuery;
|
|
136
|
+
let previousOpen;
|
|
137
|
+
let previousCount = 0;
|
|
28
138
|
$effect(() => {
|
|
29
139
|
const values = opts.values();
|
|
140
|
+
const query = opts.query?.() ?? '';
|
|
141
|
+
const open = opts.open?.() ?? true;
|
|
30
142
|
untrack(() => {
|
|
31
|
-
|
|
32
|
-
|
|
143
|
+
const opened = open && previousOpen !== true;
|
|
144
|
+
const queryChanged = previousQuery !== undefined && query !== previousQuery;
|
|
145
|
+
const cleared = queryChanged && query === '';
|
|
146
|
+
// Options that load after the list opened (async sources) still get the anchor.
|
|
147
|
+
const arrived = previousCount === 0 && values.length > 0;
|
|
148
|
+
previousQuery = query;
|
|
149
|
+
previousOpen = open;
|
|
150
|
+
previousCount = values.length;
|
|
151
|
+
if (!open)
|
|
152
|
+
return;
|
|
153
|
+
// A new query shows a new list: the first match belongs in view, however far the user
|
|
154
|
+
// had scrolled the previous one.
|
|
155
|
+
const typed = queryChanged && !cleared;
|
|
156
|
+
if (typed) {
|
|
157
|
+
// The old highlight may be gone from the list; any rendered option finds the scroller.
|
|
158
|
+
const probe = [highlighted, values[0]].find((value) => value !== undefined && optionId(value));
|
|
159
|
+
const element = probe !== undefined && typeof document !== 'undefined'
|
|
160
|
+
? elementById(opts.scrollContainer?.(), optionId(probe))
|
|
161
|
+
: null;
|
|
162
|
+
const container = opts.scrollContainer?.() ?? (element ? nearestScroller(element) : null);
|
|
163
|
+
if (container)
|
|
164
|
+
container.scrollTop = 0;
|
|
165
|
+
}
|
|
166
|
+
if (opened || cleared) {
|
|
167
|
+
setHighlighted(resting(values, query, true), { reason: 'list' });
|
|
168
|
+
scrollSoon();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const stale = highlighted === undefined || !values.includes(highlighted);
|
|
172
|
+
// Typing starts the highlight over at the first match; without auto-highlight a
|
|
173
|
+
// surviving highlight stays (and is scrolled back into view below).
|
|
174
|
+
const next = typed || stale ? resting(values, query, arrived) : highlighted;
|
|
175
|
+
if (typed && next === undefined && !stale) {
|
|
176
|
+
scrollToHighlighted();
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
setHighlighted(next, { reason: 'list' });
|
|
180
|
+
if (arrived)
|
|
181
|
+
scrollSoon();
|
|
182
|
+
else if (typed)
|
|
183
|
+
scrollToHighlighted();
|
|
33
184
|
}
|
|
34
185
|
});
|
|
35
186
|
});
|
|
36
|
-
/**
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
187
|
+
/**
|
|
188
|
+
* Re-run the resting highlight (anchor, else the auto-highlight rule) on demand, e.g. when a
|
|
189
|
+
* consumer opens the list itself rather than through `open`.
|
|
190
|
+
*/
|
|
191
|
+
const reanchor = () => {
|
|
192
|
+
setHighlighted(resting(opts.values(), opts.query?.() ?? '', true), { reason: 'list' });
|
|
193
|
+
scrollSoon();
|
|
42
194
|
};
|
|
43
|
-
/**
|
|
44
|
-
const
|
|
195
|
+
/** Highlight a value and scroll its option into view (inside the list only). */
|
|
196
|
+
const highlight = (value, details) => {
|
|
197
|
+
setHighlighted(value, details ?? { reason: 'keyboard' });
|
|
198
|
+
if (value !== undefined)
|
|
199
|
+
scrollToHighlighted();
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Move the highlight by `delta` values. Past an end it wraps, lands on no highlight (`loop:
|
|
203
|
+
* 'input'`) or stops (`loop: false`). With nothing highlighted, going forward starts at the
|
|
204
|
+
* first value and going back at the last.
|
|
205
|
+
*/
|
|
206
|
+
const move = (delta, details) => {
|
|
45
207
|
const values = opts.values();
|
|
46
208
|
if (values.length === 0)
|
|
47
209
|
return;
|
|
48
210
|
const current = highlighted === undefined ? -1 : values.indexOf(highlighted);
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
211
|
+
const mode = loopMode();
|
|
212
|
+
let next;
|
|
213
|
+
if (current === -1) {
|
|
214
|
+
next = delta > 0 ? 0 : values.length - 1;
|
|
215
|
+
}
|
|
216
|
+
else if (mode === 'wrap') {
|
|
217
|
+
next = (((current + delta) % values.length) + values.length) % values.length;
|
|
218
|
+
}
|
|
219
|
+
else if (mode === 'input') {
|
|
220
|
+
const target = current + delta;
|
|
221
|
+
next = target < 0 || target >= values.length ? undefined : target;
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
next = Math.max(0, Math.min(values.length - 1, current + delta));
|
|
225
|
+
}
|
|
226
|
+
highlight(next === undefined ? undefined : values[next], details);
|
|
53
227
|
};
|
|
54
228
|
/** Highlight the first value. */
|
|
55
|
-
const first = () => {
|
|
229
|
+
const first = (details) => {
|
|
56
230
|
const values = opts.values();
|
|
57
231
|
if (values.length)
|
|
58
|
-
highlight(values[0]);
|
|
232
|
+
highlight(values[0], details);
|
|
59
233
|
};
|
|
60
234
|
/** Highlight the last value. */
|
|
61
|
-
const last = () => {
|
|
235
|
+
const last = (details) => {
|
|
62
236
|
const values = opts.values();
|
|
63
237
|
if (values.length)
|
|
64
|
-
highlight(values[values.length - 1]);
|
|
238
|
+
highlight(values[values.length - 1], details);
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* Pointer hover: highlights `value` unless the pointer hasn't moved. Browsers (Safari) fire
|
|
242
|
+
* a pointermove with unchanged coordinates when keyboard scrolling slides an option under a
|
|
243
|
+
* resting cursor; honoring it would snap the highlight away from the keyboard's choice.
|
|
244
|
+
* Returns whether the highlight was handled.
|
|
245
|
+
*/
|
|
246
|
+
const pointerHighlight = (value, event) => {
|
|
247
|
+
if (event) {
|
|
248
|
+
const moved = !lastPointer || lastPointer.x !== event.clientX || lastPointer.y !== event.clientY;
|
|
249
|
+
lastPointer = { x: event.clientX, y: event.clientY };
|
|
250
|
+
if (!moved)
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
setHighlighted(value, { reason: 'pointer', event });
|
|
254
|
+
return true;
|
|
65
255
|
};
|
|
256
|
+
let keyEvent;
|
|
66
257
|
const typeahead = opts.typeahead
|
|
67
258
|
? createTypeahead({
|
|
68
259
|
getItems: () => opts.values(),
|
|
69
260
|
getText: opts.typeahead,
|
|
70
261
|
getCurrentIndex: () => highlighted === undefined ? -1 : opts.values().indexOf(highlighted),
|
|
71
|
-
onMatch: (_index, value) => highlight(value)
|
|
262
|
+
onMatch: (_index, value) => highlight(value, { reason: 'keyboard', event: keyEvent })
|
|
72
263
|
})
|
|
73
264
|
: null;
|
|
265
|
+
// A pending buffer or scroll must not outlive the list.
|
|
266
|
+
$effect(() => () => {
|
|
267
|
+
typeahead?.reset();
|
|
268
|
+
if (scrollTimer)
|
|
269
|
+
clearTimeout(scrollTimer);
|
|
270
|
+
});
|
|
74
271
|
/** Keydown handler for the focused input: ArrowUp/Down, Home, End, Enter, typeahead. */
|
|
75
272
|
const onKeydown = (event) => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
273
|
+
const details = { reason: 'keyboard', event };
|
|
274
|
+
if (typeahead) {
|
|
275
|
+
keyEvent = event;
|
|
276
|
+
const consumed = typeahead.handleKey(event);
|
|
277
|
+
keyEvent = undefined;
|
|
278
|
+
if (consumed) {
|
|
279
|
+
event.preventDefault();
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
79
282
|
}
|
|
80
283
|
switch (event.key) {
|
|
81
284
|
case 'ArrowDown':
|
|
82
285
|
event.preventDefault();
|
|
83
|
-
move(1);
|
|
286
|
+
move(1, details);
|
|
84
287
|
break;
|
|
85
288
|
case 'ArrowUp':
|
|
86
289
|
event.preventDefault();
|
|
87
|
-
move(-1);
|
|
290
|
+
move(-1, details);
|
|
88
291
|
break;
|
|
89
292
|
case 'Home':
|
|
90
293
|
if (opts.values().length) {
|
|
91
294
|
event.preventDefault();
|
|
92
|
-
first();
|
|
295
|
+
first(details);
|
|
93
296
|
}
|
|
94
297
|
break;
|
|
95
298
|
case 'End':
|
|
96
299
|
if (opts.values().length) {
|
|
97
300
|
event.preventDefault();
|
|
98
|
-
last();
|
|
301
|
+
last(details);
|
|
99
302
|
}
|
|
100
303
|
break;
|
|
101
304
|
case 'Enter':
|
|
@@ -111,16 +314,39 @@ export const useListNavigation = (opts) => {
|
|
|
111
314
|
get highlighted() {
|
|
112
315
|
return highlighted;
|
|
113
316
|
},
|
|
317
|
+
/** Why the highlight last moved, and the event behind it. */
|
|
318
|
+
get highlightDetails() {
|
|
319
|
+
return lastDetails;
|
|
320
|
+
},
|
|
114
321
|
/** DOM id of the highlighted option, for `aria-activedescendant`. */
|
|
115
322
|
get activeDescendant() {
|
|
116
|
-
return highlighted !== undefined ?
|
|
323
|
+
return highlighted !== undefined ? optionId(highlighted) : undefined;
|
|
117
324
|
},
|
|
118
|
-
/**
|
|
325
|
+
/**
|
|
326
|
+
* DOM id of a value's option: `optionId` when given, else the next id in sequence for
|
|
327
|
+
* `idPrefix`. `undefined` when neither was provided.
|
|
328
|
+
*/
|
|
329
|
+
optionId,
|
|
330
|
+
/** Type-to-highlight state; `null` without the `typeahead` option. */
|
|
331
|
+
typeahead: typeahead
|
|
332
|
+
? {
|
|
333
|
+
/** True while typed characters are buffered (Space belongs to the search, not to selection). */
|
|
334
|
+
get isTyping() {
|
|
335
|
+
return typeahead.isTyping;
|
|
336
|
+
},
|
|
337
|
+
/** Drop the buffered characters, e.g. on blur or close. */
|
|
338
|
+
reset: typeahead.reset
|
|
339
|
+
}
|
|
340
|
+
: null,
|
|
341
|
+
/** Set the highlight without scrolling — for hover. Prefer `pointerHighlight`. */
|
|
119
342
|
setHighlighted,
|
|
343
|
+
pointerHighlight,
|
|
120
344
|
highlight,
|
|
121
345
|
move,
|
|
122
346
|
first,
|
|
123
347
|
last,
|
|
348
|
+
reanchor,
|
|
349
|
+
scrollToHighlighted,
|
|
124
350
|
onKeydown
|
|
125
351
|
};
|
|
126
352
|
};
|
|
@@ -1,18 +1,93 @@
|
|
|
1
|
+
import type { Attachment } from 'svelte/attachments';
|
|
2
|
+
/** `polite` waits for the screen reader to finish; `assertive` interrupts it. */
|
|
3
|
+
export type LivePoliteness = 'polite' | 'assertive';
|
|
4
|
+
export type LiveAnnouncerOptions = {
|
|
5
|
+
/** @default 'polite' */
|
|
6
|
+
politeness?: LivePoliteness;
|
|
7
|
+
};
|
|
8
|
+
/** Attributes of a live region element. */
|
|
9
|
+
export type LiveRegionAttributes = {
|
|
10
|
+
id: string;
|
|
11
|
+
role: 'status' | 'alert';
|
|
12
|
+
'aria-live': LivePoliteness;
|
|
13
|
+
'aria-atomic': 'true';
|
|
14
|
+
};
|
|
1
15
|
/**
|
|
2
|
-
* A
|
|
16
|
+
* A live region's message, wired so repeats are actually re-read.
|
|
3
17
|
*
|
|
4
18
|
* Screen readers only announce a live region when its text *changes*, so the same
|
|
5
19
|
* message twice in a row would be silent. Blanking the region first and setting the
|
|
6
20
|
* text in a microtask forces the change; a revision counter drops stale microtasks so
|
|
7
21
|
* a burst of announcements settles on the last one and a disposed owner announces
|
|
8
22
|
* nothing at all.
|
|
23
|
+
*
|
|
24
|
+
* The owner renders the region itself, always, so it exists before the first message:
|
|
25
|
+
* `<span class="sr-only" {...announcer.regionAttrs}>{announcer.message}</span>`.
|
|
9
26
|
*/
|
|
10
|
-
export declare const useLiveAnnouncer: (baseId: string, suffix?: string) => {
|
|
27
|
+
export declare const useLiveAnnouncer: (baseId: string, suffix?: string, { politeness }?: LiveAnnouncerOptions) => {
|
|
11
28
|
/** `id` for the live region element; owners expose it as `aria-*` targets. */
|
|
12
29
|
regionId: string;
|
|
30
|
+
politeness: LivePoliteness;
|
|
31
|
+
/** `id`, `role`, `aria-live` and `aria-atomic` for the region element. */
|
|
32
|
+
regionAttrs: LiveRegionAttributes;
|
|
13
33
|
readonly message: string;
|
|
14
34
|
announce(next: string): void;
|
|
15
35
|
/** Clears the region and cancels any pending announcement. */
|
|
16
36
|
reset(): void;
|
|
17
37
|
};
|
|
18
38
|
export type LiveAnnouncer = ReturnType<typeof useLiveAnnouncer>;
|
|
39
|
+
export type LiveRegionsOptions = {
|
|
40
|
+
/**
|
|
41
|
+
* How long the regions stay empty after the host mounts before they take text. Screen readers
|
|
42
|
+
* (Safari's in particular) miss a region that is inserted and filled in quick succession, so a
|
|
43
|
+
* message announced earlier waits for this delay. @default 100
|
|
44
|
+
*/
|
|
45
|
+
settleDelay?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Clears a message this long after it was announced, so browsing the page later doesn't land
|
|
48
|
+
* on stale text. `0` keeps messages until the next one. @default 7000
|
|
49
|
+
*/
|
|
50
|
+
clearAfter?: number;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* A persistent pair of live regions, one polite (`role="status"`) and one assertive
|
|
54
|
+
* (`role="alert"`), for owners that announce events rather than render them in place
|
|
55
|
+
* (a Toaster announcing each toast, a list announcing its result count).
|
|
56
|
+
*
|
|
57
|
+
* Attach `host` once to an element that is always rendered and stays in the accessibility tree
|
|
58
|
+
* (no `hidden`, `display: none` or `visibility: hidden` ancestor). It inserts both regions empty
|
|
59
|
+
* as soon as it mounts, so they exist before the first announcement, and holds messages until
|
|
60
|
+
* the regions have settled. The host may render its own children: when Svelte empties it (a
|
|
61
|
+
* host whose only child is an `{#each}` is cleared at once when the list empties), the regions
|
|
62
|
+
* are put back with their text. Removing the host removes the regions.
|
|
63
|
+
*/
|
|
64
|
+
export declare const useLiveRegions: (baseId: string, suffix?: string, { settleDelay, clearAfter }?: LiveRegionsOptions) => {
|
|
65
|
+
polite: {
|
|
66
|
+
/** `id` for the live region element; owners expose it as `aria-*` targets. */
|
|
67
|
+
regionId: string;
|
|
68
|
+
politeness: LivePoliteness;
|
|
69
|
+
/** `id`, `role`, `aria-live` and `aria-atomic` for the region element. */
|
|
70
|
+
regionAttrs: LiveRegionAttributes;
|
|
71
|
+
readonly message: string;
|
|
72
|
+
announce(next: string): void;
|
|
73
|
+
/** Clears the region and cancels any pending announcement. */
|
|
74
|
+
reset(): void;
|
|
75
|
+
};
|
|
76
|
+
assertive: {
|
|
77
|
+
/** `id` for the live region element; owners expose it as `aria-*` targets. */
|
|
78
|
+
regionId: string;
|
|
79
|
+
politeness: LivePoliteness;
|
|
80
|
+
/** `id`, `role`, `aria-live` and `aria-atomic` for the region element. */
|
|
81
|
+
regionAttrs: LiveRegionAttributes;
|
|
82
|
+
readonly message: string;
|
|
83
|
+
announce(next: string): void;
|
|
84
|
+
/** Clears the region and cancels any pending announcement. */
|
|
85
|
+
reset(): void;
|
|
86
|
+
};
|
|
87
|
+
host: Attachment<HTMLElement>;
|
|
88
|
+
/** Announces `message` in the polite region, or the assertive one. */
|
|
89
|
+
announce(message: string, politeness?: LivePoliteness): void;
|
|
90
|
+
/** Clears both regions and cancels pending announcements. */
|
|
91
|
+
reset(): void;
|
|
92
|
+
};
|
|
93
|
+
export type LiveRegions = ReturnType<typeof useLiveRegions>;
|
|
@@ -1,19 +1,32 @@
|
|
|
1
|
+
import { untrack } from 'svelte';
|
|
1
2
|
/**
|
|
2
|
-
* A
|
|
3
|
+
* A live region's message, wired so repeats are actually re-read.
|
|
3
4
|
*
|
|
4
5
|
* Screen readers only announce a live region when its text *changes*, so the same
|
|
5
6
|
* message twice in a row would be silent. Blanking the region first and setting the
|
|
6
7
|
* text in a microtask forces the change; a revision counter drops stale microtasks so
|
|
7
8
|
* a burst of announcements settles on the last one and a disposed owner announces
|
|
8
9
|
* nothing at all.
|
|
10
|
+
*
|
|
11
|
+
* The owner renders the region itself, always, so it exists before the first message:
|
|
12
|
+
* `<span class="sr-only" {...announcer.regionAttrs}>{announcer.message}</span>`.
|
|
9
13
|
*/
|
|
10
|
-
export const useLiveAnnouncer = (baseId, suffix = 'live') => {
|
|
14
|
+
export const useLiveAnnouncer = (baseId, suffix = 'live', { politeness = 'polite' } = {}) => {
|
|
11
15
|
const regionId = `${baseId}-${suffix}`;
|
|
16
|
+
const regionAttrs = {
|
|
17
|
+
id: regionId,
|
|
18
|
+
role: politeness === 'assertive' ? 'alert' : 'status',
|
|
19
|
+
'aria-live': politeness,
|
|
20
|
+
'aria-atomic': 'true'
|
|
21
|
+
};
|
|
12
22
|
let message = $state('');
|
|
13
23
|
let revision = 0;
|
|
14
24
|
return {
|
|
15
25
|
/** `id` for the live region element; owners expose it as `aria-*` targets. */
|
|
16
26
|
regionId,
|
|
27
|
+
politeness,
|
|
28
|
+
/** `id`, `role`, `aria-live` and `aria-atomic` for the region element. */
|
|
29
|
+
regionAttrs,
|
|
17
30
|
get message() {
|
|
18
31
|
return message;
|
|
19
32
|
},
|
|
@@ -32,3 +45,107 @@ export const useLiveAnnouncer = (baseId, suffix = 'live') => {
|
|
|
32
45
|
}
|
|
33
46
|
};
|
|
34
47
|
};
|
|
48
|
+
// Inline, so the regions stay hidden without depending on a utility class being compiled.
|
|
49
|
+
const VISUALLY_HIDDEN = {
|
|
50
|
+
position: 'absolute',
|
|
51
|
+
width: '1px',
|
|
52
|
+
height: '1px',
|
|
53
|
+
padding: '0',
|
|
54
|
+
margin: '-1px',
|
|
55
|
+
overflow: 'hidden',
|
|
56
|
+
clip: 'rect(0, 0, 0, 0)',
|
|
57
|
+
'white-space': 'nowrap',
|
|
58
|
+
border: '0'
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* A persistent pair of live regions, one polite (`role="status"`) and one assertive
|
|
62
|
+
* (`role="alert"`), for owners that announce events rather than render them in place
|
|
63
|
+
* (a Toaster announcing each toast, a list announcing its result count).
|
|
64
|
+
*
|
|
65
|
+
* Attach `host` once to an element that is always rendered and stays in the accessibility tree
|
|
66
|
+
* (no `hidden`, `display: none` or `visibility: hidden` ancestor). It inserts both regions empty
|
|
67
|
+
* as soon as it mounts, so they exist before the first announcement, and holds messages until
|
|
68
|
+
* the regions have settled. The host may render its own children: when Svelte empties it (a
|
|
69
|
+
* host whose only child is an `{#each}` is cleared at once when the list empties), the regions
|
|
70
|
+
* are put back with their text. Removing the host removes the regions.
|
|
71
|
+
*/
|
|
72
|
+
export const useLiveRegions = (baseId, suffix = 'live', { settleDelay = 100, clearAfter = 7000 } = {}) => {
|
|
73
|
+
const polite = useLiveAnnouncer(baseId, `${suffix}-polite`, { politeness: 'polite' });
|
|
74
|
+
const assertive = useLiveAnnouncer(baseId, `${suffix}-assertive`, {
|
|
75
|
+
politeness: 'assertive'
|
|
76
|
+
});
|
|
77
|
+
const clearTimers = {};
|
|
78
|
+
const cancelClear = (politeness) => {
|
|
79
|
+
clearTimeout(clearTimers[politeness]);
|
|
80
|
+
delete clearTimers[politeness];
|
|
81
|
+
};
|
|
82
|
+
const host = (node) => untrack(() => {
|
|
83
|
+
const ownerDocument = node.ownerDocument;
|
|
84
|
+
const createRegion = (announcer) => {
|
|
85
|
+
const region = ownerDocument.createElement('div');
|
|
86
|
+
for (const [name, value] of Object.entries(announcer.regionAttrs)) {
|
|
87
|
+
region.setAttribute(name, value);
|
|
88
|
+
}
|
|
89
|
+
region.setAttribute('data-live-region', announcer.politeness);
|
|
90
|
+
for (const [property, value] of Object.entries(VISUALLY_HIDDEN)) {
|
|
91
|
+
region.style.setProperty(property, value);
|
|
92
|
+
}
|
|
93
|
+
node.append(region);
|
|
94
|
+
return region;
|
|
95
|
+
};
|
|
96
|
+
const politeRegion = createRegion(polite);
|
|
97
|
+
const assertiveRegion = createRegion(assertive);
|
|
98
|
+
// Svelte empties a host whose only child is an `{#each}` with `textContent = ''` once
|
|
99
|
+
// the list is empty, taking the regions along: put them back as soon as that happens.
|
|
100
|
+
const restore = () => {
|
|
101
|
+
for (const region of [politeRegion, assertiveRegion]) {
|
|
102
|
+
if (region.parentNode !== node)
|
|
103
|
+
node.append(region);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
const observer = typeof MutationObserver === 'undefined' ? undefined : new MutationObserver(restore);
|
|
107
|
+
observer?.observe(node, { childList: true });
|
|
108
|
+
let settled = $state(settleDelay <= 0);
|
|
109
|
+
const settleTimer = settleDelay > 0 ? setTimeout(() => (settled = true), settleDelay) : undefined;
|
|
110
|
+
$effect(() => {
|
|
111
|
+
politeRegion.textContent = settled ? polite.message : '';
|
|
112
|
+
restore();
|
|
113
|
+
});
|
|
114
|
+
$effect(() => {
|
|
115
|
+
assertiveRegion.textContent = settled ? assertive.message : '';
|
|
116
|
+
restore();
|
|
117
|
+
});
|
|
118
|
+
return () => {
|
|
119
|
+
observer?.disconnect();
|
|
120
|
+
clearTimeout(settleTimer);
|
|
121
|
+
cancelClear('polite');
|
|
122
|
+
cancelClear('assertive');
|
|
123
|
+
politeRegion.remove();
|
|
124
|
+
assertiveRegion.remove();
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
polite,
|
|
129
|
+
assertive,
|
|
130
|
+
host,
|
|
131
|
+
/** Announces `message` in the polite region, or the assertive one. */
|
|
132
|
+
announce(message, politeness = 'polite') {
|
|
133
|
+
const announcer = politeness === 'assertive' ? assertive : polite;
|
|
134
|
+
announcer.announce(message);
|
|
135
|
+
cancelClear(politeness);
|
|
136
|
+
if (clearAfter > 0) {
|
|
137
|
+
clearTimers[politeness] = setTimeout(() => {
|
|
138
|
+
delete clearTimers[politeness];
|
|
139
|
+
announcer.reset();
|
|
140
|
+
}, clearAfter);
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
/** Clears both regions and cancels pending announcements. */
|
|
144
|
+
reset() {
|
|
145
|
+
cancelClear('polite');
|
|
146
|
+
cancelClear('assertive');
|
|
147
|
+
polite.reset();
|
|
148
|
+
assertive.reset();
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
};
|