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,8 +1,9 @@
|
|
|
1
1
|
import { createBindableStateClass } from '../../utils/state.svelte.js';
|
|
2
2
|
import { useBoundingClientRect } from '../../utils/useBoundingClientRect.svelte.js';
|
|
3
|
-
import {
|
|
3
|
+
import { createPointerDrag } from '../../utils/pointerDrag.js';
|
|
4
4
|
import { useHoverAction } from '../../utils/useHoverAction.svelte.js';
|
|
5
5
|
import { useResizeObserver } from '../../utils/useResizeObserver.svelte.js';
|
|
6
|
+
import { untrack } from 'svelte';
|
|
6
7
|
import { on } from 'svelte/events';
|
|
7
8
|
/**
|
|
8
9
|
* Slack allowed between scroll extent and client box before it counts as real overflow.
|
|
@@ -10,6 +11,15 @@ import { on } from 'svelte/events';
|
|
|
10
11
|
* remainder is not one.
|
|
11
12
|
*/
|
|
12
13
|
const OVERFLOW_TOLERANCE = 1;
|
|
14
|
+
/** Shortest a thumb gets, in px, whatever the content length or an overscroll asks for. */
|
|
15
|
+
const MIN_THUMB_SIZE = 18;
|
|
16
|
+
/** How long after the last scroll event the area still counts as scrolling, in ms. */
|
|
17
|
+
const SCROLLING_IDLE_MS = 400;
|
|
18
|
+
const clamp = (value, min, max) => Math.max(min, Math.min(value, max));
|
|
19
|
+
/** `-0` becomes `0`, so a normalised RTL offset compares equal to zero. */
|
|
20
|
+
const unsigned = (value) => (value === 0 ? 0 : value);
|
|
21
|
+
/** How far a scroll offset sits beyond its range (rubber banding): negative before, positive after. */
|
|
22
|
+
const overscrollOf = (scroll, max) => scroll - clamp(scroll, 0, max);
|
|
13
23
|
export class ScrollArea extends createBindableStateClass() {
|
|
14
24
|
viewportElement = $state();
|
|
15
25
|
contentElement = $state();
|
|
@@ -52,75 +62,166 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
52
62
|
scrollbarXEnabled = $derived(this.maxScrollX > OVERFLOW_TOLERANCE);
|
|
53
63
|
visible = $derived(this.scrollbarYEnabled);
|
|
54
64
|
visibleX = $derived(this.scrollbarXEnabled);
|
|
55
|
-
|
|
56
|
-
|
|
65
|
+
// Whether the viewport lays out right-to-left. In RTL the browser's `scrollLeft` runs from 0
|
|
66
|
+
// down to a negative number, so everything horizontal is read through `scrollX` (the distance
|
|
67
|
+
// travelled from the inline start, never negative inside the range) and written back mirrored.
|
|
68
|
+
rtl = $state(false);
|
|
69
|
+
// Thickness in px of each rendered scrollbar track (0 while it is not rendered). Where both
|
|
70
|
+
// bars show, each one stops short of the other so they do not overlap at the corner.
|
|
71
|
+
trackYThickness = $state(0);
|
|
72
|
+
trackXThickness = $state(0);
|
|
73
|
+
// The threshold for the overflow-edge hooks: hidden content past an edge counts once it is
|
|
74
|
+
// longer than this.
|
|
75
|
+
edgeThreshold = $derived(Math.max(0, this.overflowEdgeThreshold ?? OVERFLOW_TOLERANCE));
|
|
76
|
+
// Scroll distance travelled from the start and left to travel to the end, per axis. These stay
|
|
77
|
+
// inside the scroll range (an overscroll does not leave content "hidden") and are 0 while the
|
|
78
|
+
// axis does not overflow.
|
|
79
|
+
overflowYStart = $derived(this.scrollbarYEnabled ? clamp(this.scrollY, 0, this.maxScrollY) : 0);
|
|
80
|
+
overflowYEnd = $derived(this.scrollbarYEnabled ? clamp(this.maxScrollY - this.scrollY, 0, this.maxScrollY) : 0);
|
|
81
|
+
overflowXStart = $derived(this.scrollbarXEnabled ? clamp(this.scrollX, 0, this.maxScrollX) : 0);
|
|
82
|
+
overflowXEnd = $derived(this.scrollbarXEnabled ? clamp(this.maxScrollX - this.scrollX, 0, this.maxScrollX) : 0);
|
|
83
|
+
// Whether content is hidden past each edge, beyond the threshold.
|
|
84
|
+
hasOverflowYStart = $derived(this.overflowYStart > this.edgeThreshold);
|
|
85
|
+
hasOverflowYEnd = $derived(this.overflowYEnd > this.edgeThreshold);
|
|
86
|
+
hasOverflowXStart = $derived(this.overflowXStart > this.edgeThreshold);
|
|
87
|
+
hasOverflowXEnd = $derived(this.overflowXEnd > this.edgeThreshold);
|
|
88
|
+
canScrollUp = $derived(this.hasOverflowYStart);
|
|
89
|
+
canScrollDown = $derived(this.hasOverflowYEnd);
|
|
57
90
|
thumbRect = useBoundingClientRect();
|
|
58
91
|
trackRect = useBoundingClientRect();
|
|
59
|
-
|
|
92
|
+
trackRectX = useBoundingClientRect();
|
|
93
|
+
// Track lengths and thumb sizes read the live DOM, so they also depend on everything that
|
|
94
|
+
// moves those numbers: the observed boxes, the scroll extent (`measureVersion`) and the track
|
|
95
|
+
// boxes themselves (which also change when the other bar's corner inset appears). Without them
|
|
96
|
+
// the thumb keeps the size it had when the content last crossed the overflow threshold.
|
|
97
|
+
trackYLength = $derived.by(() => {
|
|
98
|
+
void this.viewportDimensions;
|
|
99
|
+
void this.measureVersion;
|
|
100
|
+
void this.trackRect.current;
|
|
101
|
+
return this.scrollbarYElement?.clientHeight ?? 0;
|
|
102
|
+
});
|
|
103
|
+
trackXLength = $derived.by(() => {
|
|
104
|
+
void this.viewportDimensions;
|
|
105
|
+
void this.measureVersion;
|
|
106
|
+
void this.trackRectX.current;
|
|
107
|
+
return this.scrollbarXElement?.clientWidth ?? 0;
|
|
108
|
+
});
|
|
109
|
+
/** Thumb length the content ratio asks for, before any overscroll shrinks it. */
|
|
110
|
+
thumbYBaseSize = $derived.by(() => {
|
|
111
|
+
void this.contentDimensions;
|
|
60
112
|
if (!this.scrollbarYEnabled ||
|
|
61
113
|
!this.scrollbarYElement ||
|
|
62
114
|
!this.viewportElement ||
|
|
63
115
|
!this.contentElement) {
|
|
64
116
|
return 0;
|
|
65
117
|
}
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
118
|
+
const ratio = this.viewportElement.clientHeight / (this.viewportElement.scrollHeight || 1);
|
|
119
|
+
return Math.max(ratio * this.trackYLength, MIN_THUMB_SIZE);
|
|
120
|
+
});
|
|
121
|
+
thumbXBaseSize = $derived.by(() => {
|
|
122
|
+
void this.contentDimensions;
|
|
123
|
+
if (!this.scrollbarXEnabled ||
|
|
124
|
+
!this.scrollbarXElement ||
|
|
125
|
+
!this.viewportElement ||
|
|
126
|
+
!this.contentElement) {
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
const ratio = this.viewportElement.clientWidth / (this.viewportElement.scrollWidth || 1);
|
|
130
|
+
return Math.max(ratio * this.trackXLength, MIN_THUMB_SIZE);
|
|
69
131
|
});
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
132
|
+
// WebKit lets the scroll offset leave its range while it rubber-bands. The thumb shrinks by
|
|
133
|
+
// that amount and stays pinned to the edge that is being pulled, instead of leaving its track.
|
|
134
|
+
overscrollY = $derived(overscrollOf(this.scrollY, this.maxScrollY));
|
|
135
|
+
overscrollX = $derived(overscrollOf(this.scrollX, this.maxScrollX));
|
|
136
|
+
thumbYSize = $derived(this.thumbYBaseSize === 0
|
|
137
|
+
? 0
|
|
138
|
+
: Math.max(this.thumbYBaseSize - Math.abs(this.overscrollY), MIN_THUMB_SIZE));
|
|
139
|
+
thumbXSize = $derived(this.thumbXBaseSize === 0
|
|
140
|
+
? 0
|
|
141
|
+
: Math.max(this.thumbXBaseSize - Math.abs(this.overscrollX), MIN_THUMB_SIZE));
|
|
142
|
+
// Scroll snapping would pull a dragged viewport to the nearest snap point under the thumb,
|
|
143
|
+
// which then jumps between them. It is switched off while a thumb is held.
|
|
144
|
+
savedScrollSnapType = null;
|
|
145
|
+
pauseScrollSnap() {
|
|
146
|
+
const viewport = this.viewportElement;
|
|
147
|
+
if (!viewport || this.savedScrollSnapType !== null)
|
|
148
|
+
return;
|
|
149
|
+
this.savedScrollSnapType = viewport.style.scrollSnapType;
|
|
150
|
+
viewport.style.scrollSnapType = 'none';
|
|
151
|
+
}
|
|
152
|
+
restoreScrollSnap() {
|
|
153
|
+
if (this.savedScrollSnapType === null)
|
|
154
|
+
return;
|
|
155
|
+
if (this.viewportElement)
|
|
156
|
+
this.viewportElement.style.scrollSnapType = this.savedScrollSnapType;
|
|
157
|
+
this.savedScrollSnapType = null;
|
|
158
|
+
}
|
|
159
|
+
isDraggingY = $state(false);
|
|
160
|
+
// The thumb is a handle: the shared pointer drag captures the pointer on press (primary
|
|
161
|
+
// button only), and a cancelled touch, a lost capture or a mouse released outside the window
|
|
162
|
+
// ends the drag instead of leaving it stuck.
|
|
163
|
+
dragY = createPointerDrag({
|
|
164
|
+
onStart: ({ event, node }) => {
|
|
165
|
+
// Offset from the pointer to the thumb top, from a fresh rect
|
|
166
|
+
this.dragOffset = event.clientY - node.getBoundingClientRect().top;
|
|
167
|
+
this.isDraggingY = true;
|
|
168
|
+
this.pauseScrollSnap();
|
|
76
169
|
},
|
|
77
|
-
|
|
170
|
+
onMove: ({ y }) => {
|
|
78
171
|
if (!this.scrollbarYElement)
|
|
79
172
|
return;
|
|
80
173
|
// Get fresh track rect at drag time
|
|
81
174
|
const trackRect = this.scrollbarYElement.getBoundingClientRect();
|
|
82
|
-
const maxThumbPos = Math.max(0, trackRect.height - this.
|
|
175
|
+
const maxThumbPos = Math.max(0, trackRect.height - this.thumbYBaseSize);
|
|
83
176
|
// Calculate new thumb position relative to track
|
|
84
|
-
let newThumbTop =
|
|
177
|
+
let newThumbTop = y - this.dragOffset - trackRect.top;
|
|
85
178
|
newThumbTop = Math.max(0, Math.min(newThumbTop, maxThumbPos));
|
|
86
179
|
const scrollPercentage = maxThumbPos > 0 ? newThumbTop / maxThumbPos : 0;
|
|
87
180
|
this.viewportElement.scrollTop = scrollPercentage * this.maxScrollY;
|
|
181
|
+
},
|
|
182
|
+
onEnd: () => {
|
|
183
|
+
this.isDraggingY = false;
|
|
184
|
+
this.restoreScrollSnap();
|
|
185
|
+
},
|
|
186
|
+
onCancel: () => {
|
|
187
|
+
this.isDraggingY = false;
|
|
188
|
+
this.restoreScrollSnap();
|
|
88
189
|
}
|
|
89
190
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const thumbXRatio = this.viewportElement.clientWidth / this.viewportElement.scrollWidth;
|
|
100
|
-
return Math.max(thumbXRatio * scrollbarXWidth, 18);
|
|
101
|
-
});
|
|
102
|
-
dragX = useDrag({
|
|
103
|
-
isActive: true,
|
|
104
|
-
onDragStart: ({ clientX, target }) => {
|
|
105
|
-
const thumbRect = target.getBoundingClientRect();
|
|
106
|
-
this.dragOffset = clientX - thumbRect.left;
|
|
191
|
+
isDraggingX = $state(false);
|
|
192
|
+
dragX = createPointerDrag({
|
|
193
|
+
onStart: ({ event, node }) => {
|
|
194
|
+
// Offset from the pointer to the thumb's inline start edge.
|
|
195
|
+
this.syncDirection();
|
|
196
|
+
const rect = node.getBoundingClientRect();
|
|
197
|
+
this.dragOffset = this.rtl ? rect.right - event.clientX : event.clientX - rect.left;
|
|
198
|
+
this.isDraggingX = true;
|
|
199
|
+
this.pauseScrollSnap();
|
|
107
200
|
},
|
|
108
|
-
|
|
201
|
+
onMove: ({ x }) => {
|
|
109
202
|
if (!this.scrollbarXElement)
|
|
110
203
|
return;
|
|
111
204
|
const trackRect = this.scrollbarXElement.getBoundingClientRect();
|
|
112
|
-
const maxThumbPos = Math.max(0, trackRect.width - this.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const scrollPercentage = maxThumbPos > 0 ?
|
|
116
|
-
this.
|
|
205
|
+
const maxThumbPos = Math.max(0, trackRect.width - this.thumbXBaseSize);
|
|
206
|
+
const pointer = this.rtl ? trackRect.right - x : x - trackRect.left;
|
|
207
|
+
const newThumbStart = Math.max(0, Math.min(pointer - this.dragOffset, maxThumbPos));
|
|
208
|
+
const scrollPercentage = maxThumbPos > 0 ? newThumbStart / maxThumbPos : 0;
|
|
209
|
+
this.writeScrollX(scrollPercentage * this.maxScrollX);
|
|
210
|
+
},
|
|
211
|
+
onEnd: () => {
|
|
212
|
+
this.isDraggingX = false;
|
|
213
|
+
this.restoreScrollSnap();
|
|
214
|
+
},
|
|
215
|
+
onCancel: () => {
|
|
216
|
+
this.isDraggingX = false;
|
|
217
|
+
this.restoreScrollSnap();
|
|
117
218
|
}
|
|
118
219
|
});
|
|
119
|
-
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
|
|
220
|
+
// The viewport is the focusable, named scroll region — but only when it actually overflows, so
|
|
221
|
+
// an idle ScrollArea (e.g. a dropdown whose items fit) adds no phantom tab stop and no group to
|
|
222
|
+
// the accessibility tree. Native `overflow: auto` then handles all keyboard scrolling (arrows,
|
|
223
|
+
// PageUp/Down, Home/End, Space).
|
|
224
|
+
overflowing = $derived(this.scrollbarYEnabled || this.scrollbarXEnabled);
|
|
124
225
|
// Warning : non reactive.
|
|
125
226
|
hoover = $derived(useHoverAction({
|
|
126
227
|
delay: this.delay,
|
|
@@ -129,31 +230,77 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
129
230
|
thumbYPosition = $derived.by(() => {
|
|
130
231
|
if (this.maxScrollY <= 0 || !this.scrollbarYElement)
|
|
131
232
|
return 0;
|
|
132
|
-
const
|
|
133
|
-
|
|
233
|
+
const overscroll = this.overscrollY;
|
|
234
|
+
if (overscroll < 0)
|
|
235
|
+
return 0;
|
|
236
|
+
if (overscroll > 0)
|
|
237
|
+
return this.trackYLength - this.thumbYSize;
|
|
238
|
+
return (this.scrollY / this.maxScrollY) * (this.trackYLength - this.thumbYSize);
|
|
134
239
|
});
|
|
240
|
+
/** Distance from the track's inline start to the thumb's inline start edge. */
|
|
135
241
|
thumbXPosition = $derived.by(() => {
|
|
136
242
|
if (this.maxScrollX <= 0 || !this.scrollbarXElement)
|
|
137
243
|
return 0;
|
|
138
|
-
const
|
|
139
|
-
|
|
244
|
+
const overscroll = this.overscrollX;
|
|
245
|
+
if (overscroll < 0)
|
|
246
|
+
return 0;
|
|
247
|
+
if (overscroll > 0)
|
|
248
|
+
return this.trackXLength - this.thumbXSize;
|
|
249
|
+
return (this.scrollX / this.maxScrollX) * (this.trackXLength - this.thumbXSize);
|
|
140
250
|
});
|
|
251
|
+
/** The horizontal thumb's `translateX` in px: mirrored in RTL, where the track fills from the right. */
|
|
252
|
+
thumbXTranslate = $derived(this.rtl ? -this.thumbXPosition : this.thumbXPosition);
|
|
141
253
|
// Wheel / touch / trackpad / momentum scrolling is fully NATIVE via the viewport's
|
|
142
254
|
// `overflow: auto` — no custom handlers needed. This class only reads the native scroll
|
|
143
255
|
// offset (handleScroll) to position the custom thumbs, and drives programmatic scroll for
|
|
144
256
|
// thumb-drag, track-click, keyboard, and edge auto-scroll.
|
|
145
|
-
|
|
257
|
+
// True from the first scroll event until the viewport has been idle for a moment. The timer
|
|
258
|
+
// handle is a plain field: only the boolean is state, so a scroll session writes it twice
|
|
259
|
+
// instead of once per event.
|
|
260
|
+
isScrolling = $state(false);
|
|
261
|
+
scrollingTimer = null;
|
|
262
|
+
clearScrollingTimer() {
|
|
263
|
+
if (this.scrollingTimer === null)
|
|
264
|
+
return;
|
|
265
|
+
clearTimeout(this.scrollingTimer);
|
|
266
|
+
this.scrollingTimer = null;
|
|
267
|
+
}
|
|
268
|
+
/** Horizontal scroll offset as distance from the inline start, whatever the direction. */
|
|
269
|
+
readScrollX(viewport) {
|
|
270
|
+
return unsigned(this.rtl ? -viewport.scrollLeft : viewport.scrollLeft);
|
|
271
|
+
}
|
|
272
|
+
/** Scrolls horizontally to a distance from the inline start. */
|
|
273
|
+
writeScrollX(value) {
|
|
274
|
+
if (!this.viewportElement)
|
|
275
|
+
return;
|
|
276
|
+
this.viewportElement.scrollLeft = this.rtl ? -value : value;
|
|
277
|
+
}
|
|
278
|
+
/** Re-resolves the writing direction; true when it flipped. */
|
|
279
|
+
syncDirection() {
|
|
280
|
+
const rtl = this.direction?.() === 'rtl';
|
|
281
|
+
if (rtl === this.rtl)
|
|
282
|
+
return false;
|
|
283
|
+
this.rtl = rtl;
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
readScrollOffsets() {
|
|
287
|
+
const viewport = this.viewportElement;
|
|
288
|
+
if (!viewport)
|
|
289
|
+
return;
|
|
290
|
+
this.scrollY = viewport.scrollTop;
|
|
291
|
+
this.scrollX = this.readScrollX(viewport);
|
|
292
|
+
}
|
|
146
293
|
handleScroll = () => {
|
|
147
|
-
if (this.isScrolling)
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
this.
|
|
151
|
-
this.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
294
|
+
if (!this.isScrolling)
|
|
295
|
+
this.isScrolling = true;
|
|
296
|
+
this.clearScrollingTimer();
|
|
297
|
+
this.scrollingTimer = setTimeout(() => {
|
|
298
|
+
this.scrollingTimer = null;
|
|
299
|
+
this.isScrolling = false;
|
|
300
|
+
}, SCROLLING_IDLE_MS);
|
|
301
|
+
// A `dir` flip moves no observed box; the next scroll is the cheapest place to notice it.
|
|
302
|
+
this.syncDirection();
|
|
303
|
+
this.readScrollOffsets();
|
|
157
304
|
};
|
|
158
305
|
handleTrackClick = (event) => {
|
|
159
306
|
if (!this.viewportElement || !this.scrollbarYElement)
|
|
@@ -166,9 +313,9 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
166
313
|
const trackRect = trackElement.getBoundingClientRect();
|
|
167
314
|
const clickY = event.clientY - trackRect.top;
|
|
168
315
|
// Calculate the maximum thumb position (track height minus thumb height)
|
|
169
|
-
const maxThumbPos = Math.max(0, trackRect.height - this.
|
|
316
|
+
const maxThumbPos = Math.max(0, trackRect.height - this.thumbYBaseSize);
|
|
170
317
|
// Center the thumb on the click position
|
|
171
|
-
const targetThumbPos = clickY - this.
|
|
318
|
+
const targetThumbPos = clickY - this.thumbYBaseSize / 2;
|
|
172
319
|
const clampedThumbPos = Math.max(0, Math.min(targetThumbPos, maxThumbPos));
|
|
173
320
|
// Convert thumb position to scroll position
|
|
174
321
|
const scrollPercentage = maxThumbPos > 0 ? clampedThumbPos / maxThumbPos : 0;
|
|
@@ -179,18 +326,19 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
179
326
|
return;
|
|
180
327
|
if (event.composedPath().some((el) => el instanceof HTMLElement && el.dataset.thumb === ''))
|
|
181
328
|
return;
|
|
329
|
+
this.syncDirection();
|
|
182
330
|
const trackRect = this.scrollbarXElement.getBoundingClientRect();
|
|
183
|
-
const clickX = event.clientX - trackRect.left;
|
|
184
|
-
const maxThumbPos = Math.max(0, trackRect.width - this.
|
|
185
|
-
const targetThumbPos = clickX - this.
|
|
331
|
+
const clickX = this.rtl ? trackRect.right - event.clientX : event.clientX - trackRect.left;
|
|
332
|
+
const maxThumbPos = Math.max(0, trackRect.width - this.thumbXBaseSize);
|
|
333
|
+
const targetThumbPos = clickX - this.thumbXBaseSize / 2;
|
|
186
334
|
const clampedThumbPos = Math.max(0, Math.min(targetThumbPos, maxThumbPos));
|
|
187
335
|
const scrollPercentage = maxThumbPos > 0 ? clampedThumbPos / maxThumbPos : 0;
|
|
188
|
-
this.
|
|
336
|
+
this.writeScrollX(scrollPercentage * this.maxScrollX);
|
|
189
337
|
};
|
|
190
338
|
// ---------------------------------------------------------------------------------------
|
|
191
339
|
// Overflow measurement
|
|
192
340
|
//
|
|
193
|
-
// `
|
|
341
|
+
// `overflowing` (the WCAG SCR34 tab stop) hangs off these numbers, so a stale measurement is an
|
|
194
342
|
// accessibility bug, not a cosmetic one. Three things can make the first ResizeObserver
|
|
195
343
|
// callback wrong: it can fire before the first layout has settled, the content can grow
|
|
196
344
|
// afterwards without changing the observed border-boxes (an image resolving, a streamed
|
|
@@ -209,6 +357,10 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
209
357
|
const viewport = this.viewportElement;
|
|
210
358
|
if (!viewport)
|
|
211
359
|
return;
|
|
360
|
+
// The direction decides how the horizontal offset reads (negative in RTL), so it is
|
|
361
|
+
// re-read with every measurement, and the offsets are published again when it flips.
|
|
362
|
+
this.syncDirection();
|
|
363
|
+
this.readScrollOffsets();
|
|
212
364
|
const viewportWidth = viewport.clientWidth;
|
|
213
365
|
const viewportHeight = viewport.clientHeight;
|
|
214
366
|
if (viewportWidth !== this.viewportDimensions.width ||
|
|
@@ -222,7 +374,7 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
222
374
|
contentHeight !== this.contentDimensions.height) {
|
|
223
375
|
this.contentDimensions = { width: contentWidth, height: contentHeight };
|
|
224
376
|
}
|
|
225
|
-
// The scroll extent is what `
|
|
377
|
+
// The scroll extent is what `overflowing` and the scrollbars are derived from, and it
|
|
226
378
|
// can change while both observed border-boxes stay identical. Bump only when it moves.
|
|
227
379
|
const extentY = viewport.scrollHeight - viewportHeight;
|
|
228
380
|
const extentX = viewport.scrollWidth - viewportWidth;
|
|
@@ -253,6 +405,11 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
253
405
|
}
|
|
254
406
|
viewportAttachment = (element) => {
|
|
255
407
|
this.viewportElement = element;
|
|
408
|
+
untrack(() => {
|
|
409
|
+
this.rtl = this.direction?.() === 'rtl';
|
|
410
|
+
// A restored or pre-set scroll position is not announced by a scroll event.
|
|
411
|
+
this.readScrollOffsets();
|
|
412
|
+
});
|
|
256
413
|
const offScroll = on(element, 'scroll', this.handleScroll);
|
|
257
414
|
// Hide the native scrollbars cross-browser (WebKit handled via the component <style>).
|
|
258
415
|
element.style.scrollbarWidth = 'none'; // Firefox + standard
|
|
@@ -266,12 +423,24 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
266
423
|
}
|
|
267
424
|
});
|
|
268
425
|
const offResize = resizeObserver.reference?.(element);
|
|
426
|
+
// A `dir` flip on the page or any wrapper (a language switcher) resizes nothing and need not
|
|
427
|
+
// scroll anything; watch the attribute on the way up so the direction is re-read.
|
|
428
|
+
let dirObserver = null;
|
|
429
|
+
if (typeof MutationObserver === 'function') {
|
|
430
|
+
dirObserver = new MutationObserver(this.scheduleMeasure);
|
|
431
|
+
for (let node = element; node; node = node.parentElement) {
|
|
432
|
+
dirObserver.observe(node, { attributes: true, attributeFilter: ['dir'] });
|
|
433
|
+
}
|
|
434
|
+
}
|
|
269
435
|
// The observer's first callback can land before layout has settled; re-read next frame.
|
|
270
436
|
this.scheduleMeasure();
|
|
271
437
|
return () => {
|
|
272
438
|
offScroll();
|
|
273
439
|
offResize?.();
|
|
440
|
+
dirObserver?.disconnect();
|
|
274
441
|
this.cancelScheduledMeasure();
|
|
442
|
+
this.clearScrollingTimer();
|
|
443
|
+
this.restoreScrollSnap();
|
|
275
444
|
};
|
|
276
445
|
};
|
|
277
446
|
contentAttachment = (element) => {
|
|
@@ -311,28 +480,69 @@ export class ScrollArea extends createBindableStateClass() {
|
|
|
311
480
|
};
|
|
312
481
|
};
|
|
313
482
|
// Forward a wheel over the (overlaid) custom scrollbar to the viewport, so wheeling on the
|
|
314
|
-
// thin bar scrolls the content just like wheeling on the viewport does.
|
|
483
|
+
// thin bar scrolls the content just like wheeling on the viewport does. The wheel is only
|
|
484
|
+
// consumed while the viewport can still move that way: at an edge it goes on to scroll the
|
|
485
|
+
// page behind, as it does over the viewport itself.
|
|
315
486
|
forwardWheelToViewport = (event) => {
|
|
316
|
-
|
|
487
|
+
const viewport = this.viewportElement;
|
|
488
|
+
if (!viewport)
|
|
489
|
+
return;
|
|
490
|
+
const canScrollY = event.deltaY > 0
|
|
491
|
+
? viewport.scrollHeight - viewport.clientHeight - viewport.scrollTop >= OVERFLOW_TOLERANCE
|
|
492
|
+
: event.deltaY < 0 && viewport.scrollTop >= OVERFLOW_TOLERANCE;
|
|
493
|
+
// Along the inline axis: a positive delta scrolls towards the inline end.
|
|
494
|
+
const towardsEnd = (this.rtl ? -event.deltaX : event.deltaX) > 0;
|
|
495
|
+
const towardsStart = (this.rtl ? -event.deltaX : event.deltaX) < 0;
|
|
496
|
+
const scrollX = this.readScrollX(viewport);
|
|
497
|
+
const maxScrollX = viewport.scrollWidth - viewport.clientWidth;
|
|
498
|
+
const canScrollX = (towardsEnd && maxScrollX - scrollX >= OVERFLOW_TOLERANCE) ||
|
|
499
|
+
(towardsStart && scrollX >= OVERFLOW_TOLERANCE);
|
|
500
|
+
if (!canScrollY && !canScrollX)
|
|
317
501
|
return;
|
|
318
|
-
|
|
319
|
-
|
|
502
|
+
viewport.scrollTop += event.deltaY;
|
|
503
|
+
viewport.scrollLeft += event.deltaX;
|
|
320
504
|
event.preventDefault();
|
|
321
505
|
};
|
|
506
|
+
// A press on a scrollbar or its thumb must not pull focus away from the control that has it
|
|
507
|
+
// (a Combobox input whose list is being dragged, say): the default action of the press, which
|
|
508
|
+
// moves focus and starts a text selection, is cancelled. Touch is left alone, where it would
|
|
509
|
+
// only stop the scroll gesture.
|
|
510
|
+
keepFocusOnPress = (event) => {
|
|
511
|
+
if (event.button === 0)
|
|
512
|
+
event.preventDefault();
|
|
513
|
+
};
|
|
322
514
|
trackAttachment = (element) => {
|
|
515
|
+
this.trackYThickness = element.offsetWidth;
|
|
323
516
|
const offClick = on(element, 'click', this.handleTrackClick);
|
|
324
517
|
const offWheel = on(element, 'wheel', this.forwardWheelToViewport, { passive: false });
|
|
518
|
+
const offPointerDown = on(element, 'pointerdown', (event) => {
|
|
519
|
+
if (event.pointerType !== 'touch')
|
|
520
|
+
this.keepFocusOnPress(event);
|
|
521
|
+
});
|
|
522
|
+
const offMouseDown = on(element, 'mousedown', this.keepFocusOnPress);
|
|
325
523
|
return () => {
|
|
326
524
|
offClick();
|
|
327
525
|
offWheel();
|
|
526
|
+
offPointerDown();
|
|
527
|
+
offMouseDown();
|
|
528
|
+
this.trackYThickness = 0;
|
|
328
529
|
};
|
|
329
530
|
};
|
|
330
531
|
trackAttachmentX = (element) => {
|
|
532
|
+
this.trackXThickness = element.offsetHeight;
|
|
331
533
|
const offClick = on(element, 'click', this.handleTrackClickX);
|
|
332
534
|
const offWheel = on(element, 'wheel', this.forwardWheelToViewport, { passive: false });
|
|
535
|
+
const offPointerDown = on(element, 'pointerdown', (event) => {
|
|
536
|
+
if (event.pointerType !== 'touch')
|
|
537
|
+
this.keepFocusOnPress(event);
|
|
538
|
+
});
|
|
539
|
+
const offMouseDown = on(element, 'mousedown', this.keepFocusOnPress);
|
|
333
540
|
return () => {
|
|
334
541
|
offClick();
|
|
335
542
|
offWheel();
|
|
543
|
+
offPointerDown();
|
|
544
|
+
offMouseDown();
|
|
545
|
+
this.trackXThickness = 0;
|
|
336
546
|
};
|
|
337
547
|
};
|
|
338
548
|
scrollAnimationFrame = $state(null);
|
|
@@ -24,11 +24,14 @@ const defaultScrollAreaContent = cva({
|
|
|
24
24
|
// Sizing (min-width/width/position) is set inline in the component; keep this minimal.
|
|
25
25
|
base: 'relative'
|
|
26
26
|
});
|
|
27
|
+
// Logical placement: the vertical bar sits at the inline end (the right in LTR, the left in RTL),
|
|
28
|
+
// the horizontal bar fills from the inline start. Where both show, the component insets each by
|
|
29
|
+
// the other's thickness so they do not overlap at the corner.
|
|
27
30
|
const defaultScrollAreaScrollbar = cva({
|
|
28
|
-
base: 'absolute top-0
|
|
31
|
+
base: 'absolute top-0 end-0 z-30 w-1.5 cursor-pointer'
|
|
29
32
|
});
|
|
30
33
|
const defaultScrollAreaScrollbarX = cva({
|
|
31
|
-
base: 'absolute bottom-0
|
|
34
|
+
base: 'absolute bottom-0 start-0 z-30 h-1.5 cursor-pointer'
|
|
32
35
|
});
|
|
33
36
|
const defaultScrollAreaScrollbarThumb = cva({
|
|
34
37
|
base: "relative bg-neutral-muted after:absolute after:-inset-1 after:content-['']"
|
|
@@ -72,9 +72,10 @@
|
|
|
72
72
|
enabled: () => !disabled,
|
|
73
73
|
enableHoverFocus: false,
|
|
74
74
|
defaultFocusedIndex: () => (tabStopIndex >= 0 ? tabStopIndex : null),
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
// Selection follows the keyboard, but only a deliberate key move (an arrow, Home or End)
|
|
76
|
+
// selects. Tabbing in, a programmatic focus or the restore after a removal never changes
|
|
77
|
+
// the value, and Alt, Ctrl or Meta with an arrow is left to the browser.
|
|
78
|
+
onKeyboardMove: (index) => selectItem(index)
|
|
78
79
|
});
|
|
79
80
|
|
|
80
81
|
const indicator = useSlidingIndicator({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const segmentedControlDescription = "\n# SegmentedControl\n\nA compact single-selection input for switching between a small set of mutually exclusive modes. It uses radiogroup/radio semantics and an animated indicator that slides and resizes to the selected item.\n\n## Basic usage\n\n```svelte\n<script lang=\"ts\">\n import { SegmentedControl } from './index.ts';\n import { gridFourIcon } from 'entasis/icons/gridFour';\n import { listIcon } from 'entasis/icons/list';\n\n const items = [\n { value: 'grid', label: 'Grid', icon: gridFourIcon },\n { value: 'list', label: 'List', icon: listIcon }\n ] as const;\n\n let value = $state<(typeof items)[number]['value']>('grid');\n</script>\n\n<SegmentedControl {items} bind:value />\n```\n\n## Props\n\n- **items**: `readonly SegmentedControlItem[]` \u2014 required options with unique `value` fields.\n- **value**: `string` \u2014 bindable selected value; defaults to the first enabled item.\n- **defaultValue**: `string` \u2014 initial selected value when value is omitted.\n- **onValueChange**: `(value: string) => void` \u2014 called once after user interaction changes the value.\n- **item**: `Snippet<[SegmentedControlItem]>` \u2014 replaces the default item renderer.\n- **size**: `'small' | 'normal' | 'large'` \u2014 defaults to `'normal'`.\n- **color**: semantic color \u2014 controls the selected pill and focus ring; defaults to `'neutral'`.\n- **variant**: `'normal' | 'pill'` \u2014 controls corner radius; defaults to the moderately rounded `'normal'` shape.\n- **disabled**: `boolean` \u2014 disables the full control.\n- **label**: `string` \u2014 accessible name for the radiogroup; defaults to the catalog's \"Segmented control\".\n- **class**: additional root classes.\n- **theme**: component theme overrides.\n\n## Item shape\n\n```ts\ntype SegmentedControlItem<Value extends string = string> = {\n value: Value;\n label?: string | Snippet;\n icon?: string | Snippet;\n disabled?: boolean;\n};\n```\n\nThe default renderer displays `icon`, then `label`. `label` is also the segment's accessible name: a string is painted and spoken, a snippet names the segment through its own content, and an icon-only segment (no `label`) falls back to its `value`.\n\n## Custom item renderer\n\n```svelte\n<SegmentedControl {items} bind:value>\n {#snippet item(option)}\n <span>{option.label}</span>\n <span>{option.count}</span>\n {/snippet}\n</SegmentedControl>\n```\n\nExtra fields on item objects remain available to the snippet through generic inference.\n\n## Shapes\n\n`variant=\"normal\"` uses a moderately rounded track and segments. Use `variant=\"pill\"` for the fully rounded stadium shape.\n\n```svelte\n<SegmentedControl {items} bind:value />\n<SegmentedControl {items} bind:value variant=\"pill\" />\n```\n\n## Keyboard behavior\n\n- Tab enters on the selected item, or the first enabled item when no value matches.\n- Arrow Left/Right moves and selects, wrapping at the ends.\n- Home/End selects the first/last enabled item.\n- Disabled items are skipped.\n\nEach item has an invisible, size-aware pointer target that extends beyond the visual track: 36px for small, 44px for normal, and 48px for large. Adjacent targets meet at the midpoint of the configured gap instead of overlapping.\n\nUse SegmentedControl for mode or value selection. Use Tabbar when changing navigational views with tab semantics.\n";
|
|
1
|
+
export declare const segmentedControlDescription = "\n# SegmentedControl\n\nA compact single-selection input for switching between a small set of mutually exclusive modes. It uses radiogroup/radio semantics and an animated indicator that slides and resizes to the selected item.\n\n## Basic usage\n\n```svelte\n<script lang=\"ts\">\n import { SegmentedControl } from './index.ts';\n import { gridFourIcon } from 'entasis/icons/gridFour';\n import { listIcon } from 'entasis/icons/list';\n\n const items = [\n { value: 'grid', label: 'Grid', icon: gridFourIcon },\n { value: 'list', label: 'List', icon: listIcon }\n ] as const;\n\n let value = $state<(typeof items)[number]['value']>('grid');\n</script>\n\n<SegmentedControl {items} bind:value />\n```\n\n## Props\n\n- **items**: `readonly SegmentedControlItem[]` \u2014 required options with unique `value` fields.\n- **value**: `string` \u2014 bindable selected value; defaults to the first enabled item.\n- **defaultValue**: `string` \u2014 initial selected value when value is omitted.\n- **onValueChange**: `(value: string) => void` \u2014 called once after user interaction changes the value.\n- **item**: `Snippet<[SegmentedControlItem]>` \u2014 replaces the default item renderer.\n- **size**: `'small' | 'normal' | 'large'` \u2014 defaults to `'normal'`.\n- **color**: semantic color \u2014 controls the selected pill and focus ring; defaults to `'neutral'`.\n- **variant**: `'normal' | 'pill'` \u2014 controls corner radius; defaults to the moderately rounded `'normal'` shape.\n- **disabled**: `boolean` \u2014 disables the full control.\n- **label**: `string` \u2014 accessible name for the radiogroup; defaults to the catalog's \"Segmented control\".\n- **class**: additional root classes.\n- **theme**: component theme overrides.\n\n## Item shape\n\n```ts\ntype SegmentedControlItem<Value extends string = string> = {\n value: Value;\n label?: string | Snippet;\n icon?: string | Snippet;\n disabled?: boolean;\n};\n```\n\nThe default renderer displays `icon`, then `label`. `label` is also the segment's accessible name: a string is painted and spoken, a snippet names the segment through its own content, and an icon-only segment (no `label`) falls back to its `value`.\n\n## Custom item renderer\n\n```svelte\n<SegmentedControl {items} bind:value>\n {#snippet item(option)}\n <span>{option.label}</span>\n <span>{option.count}</span>\n {/snippet}\n</SegmentedControl>\n```\n\nExtra fields on item objects remain available to the snippet through generic inference.\n\n## Shapes\n\n`variant=\"normal\"` uses a moderately rounded track and segments. Use `variant=\"pill\"` for the fully rounded stadium shape.\n\n```svelte\n<SegmentedControl {items} bind:value />\n<SegmentedControl {items} bind:value variant=\"pill\" />\n```\n\n## Keyboard behavior\n\n- Tab enters on the selected item, or the first enabled item when no value matches. Tabbing in never changes the value, even when the selected item is disabled or no value matches.\n- Arrow Left/Right moves and selects, wrapping at the ends. Only a deliberate key move selects: arrows, Home and End.\n- Home/End selects the first/last enabled item.\n- Disabled items are skipped.\n- Arrow, Home and End keys pressed with Alt, Ctrl or Meta are left to the browser and never change the selection (Alt+ArrowLeft stays Back); Shift+Arrow still moves.\n\nEach item has an invisible, size-aware pointer target that extends beyond the visual track: 36px for small, 44px for normal, and 48px for large. Adjacent targets meet at the midpoint of the configured gap instead of overlapping.\n\nUse SegmentedControl for mode or value selection. Use Tabbar when changing navigational views with tab semantics.\n";
|
|
@@ -74,10 +74,11 @@ Extra fields on item objects remain available to the snippet through generic inf
|
|
|
74
74
|
|
|
75
75
|
## Keyboard behavior
|
|
76
76
|
|
|
77
|
-
- Tab enters on the selected item, or the first enabled item when no value matches.
|
|
78
|
-
- Arrow Left/Right moves and selects, wrapping at the ends.
|
|
77
|
+
- Tab enters on the selected item, or the first enabled item when no value matches. Tabbing in never changes the value, even when the selected item is disabled or no value matches.
|
|
78
|
+
- Arrow Left/Right moves and selects, wrapping at the ends. Only a deliberate key move selects: arrows, Home and End.
|
|
79
79
|
- Home/End selects the first/last enabled item.
|
|
80
80
|
- Disabled items are skipped.
|
|
81
|
+
- Arrow, Home and End keys pressed with Alt, Ctrl or Meta are left to the browser and never change the selection (Alt+ArrowLeft stays Back); Shift+Arrow still moves.
|
|
81
82
|
|
|
82
83
|
Each item has an invisible, size-aware pointer target that extends beyond the visual track: 36px for small, 44px for normal, and 48px for large. Adjacent targets meet at the midpoint of the configured gap instead of overlapping.
|
|
83
84
|
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { tick } from 'svelte';
|
|
3
3
|
import type { Attachment } from 'svelte/attachments';
|
|
4
4
|
import Popover from '../Popover/Popover.svelte';
|
|
5
|
-
import type
|
|
5
|
+
import { popoverInternals, type PopoverState } from '../Popover/popover.state.svelte.js';
|
|
6
|
+
import type { PopoverApi } from '../Popover/popover.api.js';
|
|
6
7
|
import Slot from '../Slot/Slot.svelte';
|
|
7
8
|
import ToggleMenu from '../ToggleMenu/ToggleMenu.svelte';
|
|
8
9
|
import type { SelectionMenuProps, SelectionMenuPayload } from './selectionMenu.props.js';
|
|
@@ -84,7 +85,8 @@
|
|
|
84
85
|
open = nextOpen;
|
|
85
86
|
}
|
|
86
87
|
|
|
87
|
-
function contentReference(
|
|
88
|
+
function contentReference(api: PopoverApi): Attachment<HTMLElement> {
|
|
89
|
+
const popover = popoverInternals(api);
|
|
88
90
|
return (node) => {
|
|
89
91
|
popoverState = popover;
|
|
90
92
|
contentElement = node;
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import PopupMenu from '../PopupMenu/PopupMenu.svelte';
|
|
3
3
|
import { dotsThreeIcon } from '../Icons/dotsThree.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
SidebarApi,
|
|
6
|
+
SidebarMenuActionDescriptor,
|
|
7
|
+
SidebarDensity,
|
|
8
|
+
SidebarSize
|
|
9
|
+
} from './sidebar.props.js';
|
|
5
10
|
import { getSidebarMenuPosition } from './sidebar-position.js';
|
|
6
11
|
import SidebarIcon from './SidebarIcon.svelte';
|
|
7
12
|
import { useSidebarTheme, type SidebarThemeProps } from './sidebar.theme.js';
|
|
@@ -10,11 +15,13 @@
|
|
|
10
15
|
action,
|
|
11
16
|
api,
|
|
12
17
|
size,
|
|
18
|
+
density = 'normal',
|
|
13
19
|
theme
|
|
14
20
|
}: {
|
|
15
21
|
action: SidebarMenuActionDescriptor | import('svelte').Snippet<[SidebarApi]>;
|
|
16
22
|
api: SidebarApi;
|
|
17
23
|
size: SidebarSize;
|
|
24
|
+
density?: SidebarDensity;
|
|
18
25
|
theme?: SidebarThemeProps;
|
|
19
26
|
} = $props();
|
|
20
27
|
|
|
@@ -29,8 +36,11 @@
|
|
|
29
36
|
{@render action(api)}
|
|
30
37
|
{:else if action.menu}
|
|
31
38
|
<PopupMenu
|
|
32
|
-
menu={{ items: action.menu }}
|
|
33
|
-
position={getSidebarMenuPosition(action.menuSide, action.menuAlign,
|
|
39
|
+
menu={{ items: action.menu, size, density }}
|
|
40
|
+
position={getSidebarMenuPosition(action.menuSide, action.menuAlign, {
|
|
41
|
+
isMobile: api.isMobile,
|
|
42
|
+
side: api.side
|
|
43
|
+
})}
|
|
34
44
|
class={action.menuClass}
|
|
35
45
|
fitTrigger={false}
|
|
36
46
|
>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { SidebarApi, SidebarMenuActionDescriptor, SidebarSize } from './sidebar.props.js';
|
|
1
|
+
import type { SidebarApi, SidebarMenuActionDescriptor, SidebarDensity, SidebarSize } from './sidebar.props.js';
|
|
2
2
|
import { type SidebarThemeProps } from './sidebar.theme.js';
|
|
3
3
|
type $$ComponentProps = {
|
|
4
4
|
action: SidebarMenuActionDescriptor | import('svelte').Snippet<[SidebarApi]>;
|
|
5
5
|
api: SidebarApi;
|
|
6
6
|
size: SidebarSize;
|
|
7
|
+
density?: SidebarDensity;
|
|
7
8
|
theme?: SidebarThemeProps;
|
|
8
9
|
};
|
|
9
10
|
declare const SidebarAction: import("svelte").Component<$$ComponentProps, {}, "">;
|