entasis 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
- package/dist/attachments/disclosurePanel.svelte.js +277 -0
- package/dist/attachments/portal.d.ts +17 -1
- package/dist/attachments/portal.js +39 -2
- package/dist/attachments/spinnerOverlay.svelte.js +12 -0
- package/dist/attachments/transitionSize.d.ts +6 -0
- package/dist/attachments/transitionSize.js +30 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
- package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
- package/dist/components/AIAskUserQuestion/index.js +2 -0
- package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
- package/dist/components/AIAskUserQuestion/schemas.js +10 -3
- package/dist/components/AIChat/AIChat.svelte +10 -0
- package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
- package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
- package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
- package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
- package/dist/components/AIChat/AIChatSurface.svelte +30 -2
- package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
- package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
- package/dist/components/AIChat/aiChat.mcp.js +31 -15
- package/dist/components/AIChat/aiChat.props.d.ts +36 -10
- package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
- package/dist/components/AIChat/aiChat.theme.js +21 -4
- package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
- package/dist/components/AIChat/index.d.ts +1 -1
- package/dist/components/AIComposer/AIComposer.svelte +102 -5
- package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
- package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
- package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
- package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
- package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
- package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
- package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
- package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
- package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
- package/dist/components/AIComposer/aiComposer.theme.js +37 -5
- package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
- package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
- package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
- package/dist/components/AIContext/AIContext.svelte +7 -3
- package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
- package/dist/components/AIContext/aiContext.mcp.js +1 -1
- package/dist/components/AIContext/aiContext.props.d.ts +4 -1
- package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
- package/dist/components/AIContext/aiContext.theme.js +7 -2
- package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
- package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
- package/dist/components/AIMarker/AIMarker.svelte +2 -0
- package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
- package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
- package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
- package/dist/components/AIMarker/aiMarker.theme.js +2 -2
- package/dist/components/AIMessage/AIMessage.svelte +38 -16
- package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
- package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
- package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
- package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
- package/dist/components/AIMessage/aiMessage.theme.js +91 -32
- package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
- package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
- package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
- package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
- package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
- package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
- package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
- package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
- package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
- package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
- package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
- package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
- package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
- package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
- package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
- package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
- package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
- package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
- package/dist/components/AIThread/AIThread.svelte +378 -95
- package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
- package/dist/components/AIThread/AIThreadItems.svelte +266 -64
- package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
- package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
- package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
- package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
- package/dist/components/AIThread/aiThread.mcp.js +34 -20
- package/dist/components/AIThread/aiThread.props.d.ts +73 -8
- package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
- package/dist/components/AIThread/aiThread.theme.js +108 -9
- package/dist/components/AIThread/index.d.ts +1 -1
- package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
- package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
- package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
- package/dist/components/AIThread/threadRenderItems.js +265 -77
- package/dist/components/AIThread/threadScrollController.d.ts +0 -8
- package/dist/components/AIThread/threadScrollController.js +2 -39
- package/dist/components/AIThread/threadTools.d.ts +11 -0
- package/dist/components/AIThread/threadTools.js +79 -0
- package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
- package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
- package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
- package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
- package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
- package/dist/components/AITool/AITool.svelte +56 -21
- package/dist/components/AITool/AIToolCallList.svelte +79 -29
- package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
- package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
- package/dist/components/AITool/AIToolValueSection.svelte +126 -28
- package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolValueTree.svelte +11 -16
- package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
- package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
- package/dist/components/AITool/aiTool.mcp.js +36 -8
- package/dist/components/AITool/aiTool.props.d.ts +52 -6
- package/dist/components/AITool/aiTool.theme.d.ts +117 -39
- package/dist/components/AITool/aiTool.theme.js +144 -140
- package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
- package/dist/components/AITool/aiToolClock.svelte.js +62 -0
- package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
- package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
- package/dist/components/AITool/index.d.ts +2 -1
- package/dist/components/AITool/index.js +1 -0
- package/dist/components/AITool/toolRendering.d.ts +33 -1
- package/dist/components/AITool/toolRendering.js +179 -15
- package/dist/components/AITool/toolValueTree.d.ts +14 -1
- package/dist/components/AITool/toolValueTree.js +126 -27
- package/dist/components/Accordion/Accordion.svelte +109 -109
- package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
- package/dist/components/Accordion/AccordionPanel.svelte +64 -0
- package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
- package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
- package/dist/components/Accordion/accordion.attributes.js +20 -0
- package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
- package/dist/components/Accordion/accordion.mcp.js +78 -22
- package/dist/components/Accordion/accordion.props.d.ts +54 -10
- package/dist/components/Accordion/accordion.theme.d.ts +3 -0
- package/dist/components/Accordion/accordion.theme.js +4 -0
- package/dist/components/Accordion/index.d.ts +1 -0
- package/dist/components/Accordion/index.js +1 -0
- package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
- package/dist/components/Avatar/Avatar.svelte +60 -10
- package/dist/components/Avatar/AvatarGroup.svelte +9 -0
- package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
- package/dist/components/Avatar/avatar.mcp.js +13 -5
- package/dist/components/Avatar/avatar.props.d.ts +28 -1
- package/dist/components/Avatar/avatar.theme.js +3 -3
- package/dist/components/Avatar/index.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
- package/dist/components/Button/Button.svelte +35 -15
- package/dist/components/Button/button.mcp.d.ts +1 -1
- package/dist/components/Button/button.mcp.js +8 -4
- package/dist/components/Button/button.props.d.ts +23 -8
- package/dist/components/Button/button.theme.d.ts +12 -0
- package/dist/components/Button/button.theme.js +17 -4
- package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
- package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
- package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
- package/dist/components/Collapsible/Collapsible.svelte +125 -19
- package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
- package/dist/components/Collapsible/collapsible.attributes.js +17 -0
- package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
- package/dist/components/Collapsible/collapsible.mcp.js +62 -12
- package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
- package/dist/components/Collapsible/collapsible.theme.js +3 -1
- package/dist/components/Collapsible/index.d.ts +1 -0
- package/dist/components/Collapsible/index.js +1 -0
- package/dist/components/Command/Command.svelte +56 -14
- package/dist/components/Command/command.mcp.d.ts +1 -1
- package/dist/components/Command/command.mcp.js +12 -6
- package/dist/components/Command/command.props.d.ts +39 -6
- package/dist/components/Command/command.state.svelte.d.ts +40 -11
- package/dist/components/Command/command.state.svelte.js +75 -28
- package/dist/components/Command/command.theme.js +4 -3
- package/dist/components/Confirmation/Confirmation.svelte +72 -31
- package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
- package/dist/components/Confirmation/confirmation.mcp.js +5 -4
- package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
- package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
- package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
- package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
- package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
- package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
- package/dist/components/DataTable/DataTable.svelte +4 -9
- package/dist/components/DataTable/DataTableEditor.svelte +5 -0
- package/dist/components/DataTable/DataTableFilter.svelte +1 -0
- package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
- package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
- package/dist/components/DataTable/dataTable.mcp.js +4 -2
- package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
- package/dist/components/DataTable/dataTable.theme.js +9 -6
- package/dist/components/Dialog/Dialog.svelte +120 -35
- package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
- package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
- package/dist/components/Dialog/dialog.api.d.ts +65 -0
- package/dist/components/Dialog/dialog.api.js +1 -0
- package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
- package/dist/components/Dialog/dialog.attributes.js +19 -0
- package/dist/components/Dialog/dialog.indent.d.ts +6 -0
- package/dist/components/Dialog/dialog.indent.js +16 -0
- package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
- package/dist/components/Dialog/dialog.mcp.js +195 -22
- package/dist/components/Dialog/dialog.props.d.ts +102 -19
- package/dist/components/Dialog/dialog.snap.d.ts +40 -0
- package/dist/components/Dialog/dialog.snap.js +78 -0
- package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
- package/dist/components/Dialog/dialog.state.svelte.js +525 -66
- package/dist/components/Dialog/dialog.theme.d.ts +48 -0
- package/dist/components/Dialog/dialog.theme.js +32 -9
- package/dist/components/Dialog/index.d.ts +4 -1
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
- package/dist/components/DocumentViewer/documentOutput.js +2 -1
- package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
- package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
- package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
- package/dist/components/Form/Ask/Ask.svelte +9 -13
- package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
- package/dist/components/Form/Ask/ask.mcp.js +1 -1
- package/dist/components/Form/Ask/ask.props.d.ts +1 -1
- package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
- package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
- package/dist/components/Form/Autocomplete/index.d.ts +3 -0
- package/dist/components/Form/Autocomplete/index.js +2 -0
- package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
- package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
- package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
- package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
- package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
- package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
- package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
- package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
- package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
- package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
- package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
- package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
- package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
- package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
- package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
- package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
- package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
- package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
- package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
- package/dist/components/Form/Combobox/Combobox.svelte +145 -185
- package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
- package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
- package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
- package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
- package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.items.js +68 -0
- package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
- package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
- package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
- package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
- package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
- package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
- package/dist/components/Form/Combobox/combobox.theme.js +37 -1
- package/dist/components/Form/Combobox/index.d.ts +2 -1
- package/dist/components/Form/Combobox/index.js +1 -0
- package/dist/components/Form/DateInput/DateInput.svelte +11 -3
- package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
- package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
- package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
- package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
- package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
- package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
- package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
- package/dist/components/Form/Field/Field.svelte +256 -30
- package/dist/components/Form/Field/Field.svelte.d.ts +9 -0
- package/dist/components/Form/Field/FieldGroup.svelte +29 -0
- package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
- package/dist/components/Form/Field/field.d.ts +64 -8
- package/dist/components/Form/Field/field.mcp.d.ts +1 -1
- package/dist/components/Form/Field/field.mcp.js +158 -18
- package/dist/components/Form/Field/field.messages.d.ts +47 -0
- package/dist/components/Form/Field/field.messages.js +64 -0
- package/dist/components/Form/Field/field.state.svelte.d.ts +109 -3
- package/dist/components/Form/Field/field.state.svelte.js +508 -16
- package/dist/components/Form/Field/field.theme.d.ts +46 -0
- package/dist/components/Form/Field/field.theme.js +33 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
- package/dist/components/Form/Field/index.d.ts +5 -2
- package/dist/components/Form/Field/index.js +1 -0
- package/dist/components/Form/Field/schemas.js +7 -2
- package/dist/components/Form/File/FileInput.svelte +24 -3
- package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
- package/dist/components/Form/File/fileInput.mcp.js +1 -0
- package/dist/components/Form/Form/Form.svelte +47 -14
- package/dist/components/Form/Form/FormActions.svelte +3 -1
- package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
- package/dist/components/Form/Form/FormFieldRenderer.svelte +40 -2
- package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
- package/dist/components/Form/Form/form.d.ts +35 -6
- package/dist/components/Form/Form/form.mcp.d.ts +1 -1
- package/dist/components/Form/Form/form.mcp.js +113 -13
- package/dist/components/Form/Form/form.props.d.ts +32 -1
- package/dist/components/Form/Form/form.registry.d.ts +2 -2
- package/dist/components/Form/Form/form.registry.js +1 -4
- package/dist/components/Form/Form/form.state.svelte.d.ts +1138 -413
- package/dist/components/Form/Form/form.state.svelte.js +319 -26
- package/dist/components/Form/Form/index.d.ts +3 -1
- package/dist/components/Form/Form/visibility.d.ts +3096 -1831
- package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
- package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
- package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1022 -408
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
- package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
- package/dist/components/Form/NumberInput/index.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
- package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
- package/dist/components/Form/PasswordInput/Password.svelte +28 -1
- package/dist/components/Form/PasswordInput/index.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
- package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
- package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
- package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
- package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
- package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
- package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
- package/dist/components/Form/PinInput/PinInput.svelte +44 -9
- package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
- package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
- package/dist/components/Form/PinInput/index.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
- package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
- package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
- package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
- package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
- package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
- package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
- package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
- package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
- package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
- package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
- package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
- package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
- package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
- package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
- package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
- package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
- package/dist/components/Form/Select/Select.svelte +186 -48
- package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
- package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
- package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
- package/dist/components/Form/Select/index.d.ts +2 -1
- package/dist/components/Form/Select/index.js +1 -0
- package/dist/components/Form/Select/select.align.d.ts +5 -0
- package/dist/components/Form/Select/select.align.js +19 -5
- package/dist/components/Form/Select/select.attributes.d.ts +36 -0
- package/dist/components/Form/Select/select.attributes.js +27 -0
- package/dist/components/Form/Select/select.mcp.d.ts +1 -1
- package/dist/components/Form/Select/select.mcp.js +103 -18
- package/dist/components/Form/Select/select.props.d.ts +87 -10
- package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
- package/dist/components/Form/Select/select.state.svelte.js +354 -59
- package/dist/components/Form/Select/select.theme.d.ts +21 -0
- package/dist/components/Form/Select/select.theme.js +22 -0
- package/dist/components/Form/Slider/Slider.svelte +54 -14
- package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
- package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
- package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
- package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
- package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
- package/dist/components/Form/Slider/index.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.js +55 -11
- package/dist/components/Form/Slider/slider.props.d.ts +35 -2
- package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
- package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
- package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
- package/dist/components/Form/Slider/slider.theme.js +35 -17
- package/dist/components/Form/Switch/Switch.svelte +61 -38
- package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
- package/dist/components/Form/Switch/switch.mcp.js +25 -5
- package/dist/components/Form/Switch/switch.props.d.ts +14 -1
- package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
- package/dist/components/Form/Switch/switch.theme.js +8 -3
- package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
- package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
- package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
- package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
- package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
- package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
- package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
- package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
- package/dist/components/Form/TextArea/TextArea.svelte +8 -0
- package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
- package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
- package/dist/components/Form/TextInput/TextInput.svelte +8 -1
- package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
- package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
- package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
- package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
- package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
- package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
- package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
- package/dist/components/HoverCard/HoverCard.svelte +100 -10
- package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
- package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
- package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
- package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
- package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
- package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
- package/dist/components/HoverCard/hoverCard.theme.js +9 -2
- package/dist/components/HoverCard/index.d.ts +1 -0
- package/dist/components/HoverCard/index.js +1 -0
- package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
- package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
- package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
- package/dist/components/Kanban/kanban.theme.js +7 -3
- package/dist/components/Layout/layoutSpacing.d.ts +2 -2
- package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
- package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
- package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
- package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
- package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
- package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
- package/dist/components/Map/maplibre-cdn.js +3 -2
- package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
- package/dist/components/Markdown/markdown.mcp.js +2 -1
- package/dist/components/Markdown/markdown.theme.js +18 -9
- package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
- package/dist/components/Menu/Menu.svelte +3 -3
- package/dist/components/Menu/Menu.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
- package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
- package/dist/components/Menu/MenuFloating.svelte +421 -74
- package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
- package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
- package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
- package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
- package/dist/components/Menu/MenuSearchField.svelte +54 -0
- package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
- package/dist/components/Menu/MenuStacked.svelte +404 -158
- package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
- package/dist/components/Menu/index.d.ts +2 -1
- package/dist/components/Menu/index.js +1 -0
- package/dist/components/Menu/menu.attributes.d.ts +37 -0
- package/dist/components/Menu/menu.attributes.js +28 -0
- package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
- package/dist/components/Menu/menu.filter.svelte.js +143 -0
- package/dist/components/Menu/menu.mcp.d.ts +1 -1
- package/dist/components/Menu/menu.mcp.js +227 -17
- package/dist/components/Menu/menu.platform.d.ts +5 -0
- package/dist/components/Menu/menu.platform.js +11 -0
- package/dist/components/Menu/menu.props.d.ts +172 -9
- package/dist/components/Menu/menu.theme.d.ts +147 -0
- package/dist/components/Menu/menu.theme.js +101 -0
- package/dist/components/Menu/menuTree.d.ts +35 -1
- package/dist/components/Menu/menuTree.js +158 -1
- package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
- package/dist/components/MenuBar/menuBar.mcp.js +4 -2
- package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
- package/dist/components/MenuOption/MenuOption.svelte +5 -1
- package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
- package/dist/components/MenuOption/menuOption.mcp.js +8 -0
- package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
- package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
- package/dist/components/MenuOption/menuOption.theme.js +24 -4
- package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
- package/dist/components/Mermaid/mermaid.mcp.js +8 -8
- package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
- package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
- package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
- package/dist/components/Mermaid/mermaid.theme.js +26 -1
- package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
- package/dist/components/Meter/Meter.svelte +110 -24
- package/dist/components/Meter/Meter.svelte.d.ts +12 -12
- package/dist/components/Meter/meter.mcp.d.ts +1 -1
- package/dist/components/Meter/meter.mcp.js +23 -37
- package/dist/components/Meter/meter.props.d.ts +36 -44
- package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
- package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/index.d.ts +4 -0
- package/dist/components/NavigationMenu/index.js +3 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
- package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
- package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
- package/dist/components/Overlay/Overlay.svelte +19 -30
- package/dist/components/Overlay/index.d.ts +1 -0
- package/dist/components/Overlay/index.js +1 -0
- package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
- package/dist/components/Overlay/overlay.attributes.js +14 -0
- package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
- package/dist/components/Overlay/overlay.mcp.js +21 -3
- package/dist/components/Overlay/overlay.props.d.ts +8 -4
- package/dist/components/Popover/Popover.svelte +163 -52
- package/dist/components/Popover/Popover.svelte.d.ts +23 -2
- package/dist/components/Popover/PopoverSession.svelte +12 -0
- package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
- package/dist/components/Popover/index.d.ts +10 -2
- package/dist/components/Popover/index.js +4 -1
- package/dist/components/Popover/popover.api.d.ts +83 -0
- package/dist/components/Popover/popover.api.js +1 -0
- package/dist/components/Popover/popover.attributes.d.ts +32 -0
- package/dist/components/Popover/popover.attributes.js +28 -0
- package/dist/components/Popover/popover.claims.d.ts +19 -0
- package/dist/components/Popover/popover.claims.js +45 -0
- package/dist/components/Popover/popover.mcp.d.ts +1 -1
- package/dist/components/Popover/popover.mcp.js +163 -31
- package/dist/components/Popover/popover.position.d.ts +226 -0
- package/dist/components/Popover/popover.position.js +402 -0
- package/dist/components/Popover/popover.props.d.ts +179 -24
- package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
- package/dist/components/Popover/popover.state.svelte.js +1034 -194
- package/dist/components/Popover/popover.theme.d.ts +15 -0
- package/dist/components/Popover/popover.theme.js +27 -2
- package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
- package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
- package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
- package/dist/components/PopupMenu/popupMenu.context.js +52 -0
- package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
- package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
- package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
- package/dist/components/Progress/Progress.svelte +160 -0
- package/dist/components/Progress/Progress.svelte.d.ts +4 -0
- package/dist/components/Progress/index.d.ts +3 -0
- package/dist/components/Progress/index.js +2 -0
- package/dist/components/Progress/progress.mcp.d.ts +1 -0
- package/dist/components/Progress/progress.mcp.js +101 -0
- package/dist/components/Progress/progress.props.d.ts +79 -0
- package/dist/components/Progress/progress.props.js +1 -0
- package/dist/components/Progress/progress.theme.d.ts +129 -0
- package/dist/components/Progress/progress.theme.js +83 -0
- package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
- package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
- package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
- package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
- package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
- package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
- package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
- package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
- package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
- package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
- package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
- package/dist/components/RichTextInput/suggestions.js +2 -0
- package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
- package/dist/components/ScrollArea/index.d.ts +2 -1
- package/dist/components/ScrollArea/index.js +1 -0
- package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
- package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
- package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
- package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
- package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
- package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
- package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
- package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
- package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
- package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
- package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
- package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
- package/dist/components/Sidebar/SidebarAction.svelte +13 -3
- package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
- package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
- package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
- package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
- package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
- package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
- package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
- package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
- package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +1 -0
- package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
- package/dist/components/Sidebar/sidebar-position.js +31 -2
- package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
- package/dist/components/Sidebar/sidebar.attributes.js +29 -0
- package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
- package/dist/components/Sidebar/sidebar.mcp.js +45 -10
- package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
- package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
- package/dist/components/Sidebar/sidebar.theme.js +113 -62
- package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
- package/dist/components/Stepper/Stepper.svelte +2 -0
- package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
- package/dist/components/Stepper/stepper.mcp.js +1 -0
- package/dist/components/Stepper/stepper.props.d.ts +5 -0
- package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
- package/dist/components/Stepper/stepper.state.svelte.js +31 -12
- package/dist/components/Tabbar/Tabbar.svelte +55 -16
- package/dist/components/Tabbar/index.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.js +26 -9
- package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
- package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
- package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
- package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
- package/dist/components/Tabs/Tabs.svelte +73 -16
- package/dist/components/Tabs/index.d.ts +2 -1
- package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
- package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
- package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
- package/dist/components/Tabs/tabs.mcp.js +22 -4
- package/dist/components/Tabs/tabs.props.d.ts +39 -12
- package/dist/components/Tabs/tabs.theme.js +3 -1
- package/dist/components/Theme/Theme.svelte +44 -27
- package/dist/components/Theme/helper.d.ts +16 -2
- package/dist/components/Theme/helper.js +46 -4
- package/dist/components/Theme/theme.mcp.d.ts +1 -1
- package/dist/components/Theme/theme.mcp.js +103 -0
- package/dist/components/Theme/theme.props.d.ts +16 -0
- package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
- package/dist/components/Theme/theme.state.svelte.js +18 -1
- package/dist/components/Toast/Toast.svelte +184 -39
- package/dist/components/Toast/Toaster.svelte +14 -10
- package/dist/components/Toast/index.d.ts +1 -0
- package/dist/components/Toast/toast.mcp.d.ts +1 -1
- package/dist/components/Toast/toast.mcp.js +47 -6
- package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
- package/dist/components/Toast/toast.state.svelte.js +513 -68
- package/dist/components/Toast/toast.theme.js +1 -1
- package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
- package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
- package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
- package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
- package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
- package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
- package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
- package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
- package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
- package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
- package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
- package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
- package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
- package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
- package/dist/components/Tooltip/Tooltip.svelte +4 -12
- package/dist/components/Tooltip/TooltipHost.svelte +136 -15
- package/dist/components/Tooltip/index.d.ts +1 -0
- package/dist/components/Tooltip/index.js +1 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
- package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
- package/dist/components/Tooltip/tooltip.attributes.js +28 -0
- package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
- package/dist/components/Tooltip/tooltip.mcp.js +111 -10
- package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
- package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
- package/dist/components/Tooltip/tooltip.surface.js +42 -0
- package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
- package/dist/components/Utils/BeforeHydratation.svelte +14 -3
- package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
- package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
- package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
- package/dist/generated/componentAliases.d.ts +3 -0
- package/dist/generated/componentAliases.js +3 -0
- package/dist/generated/componentContract.d.ts +79 -34
- package/dist/generated/componentContract.js +225 -6
- package/dist/generated/componentMcpRegistry.js +6 -0
- package/dist/i18n/ar.js +107 -3
- package/dist/i18n/context.svelte.d.ts +6 -0
- package/dist/i18n/context.svelte.js +12 -0
- package/dist/i18n/de.js +101 -3
- package/dist/i18n/en.d.ts +91 -2
- package/dist/i18n/en.js +101 -3
- package/dist/i18n/es.js +101 -3
- package/dist/i18n/fr.js +101 -3
- package/dist/i18n/ja.js +101 -3
- package/dist/i18n/pt.js +101 -3
- package/dist/i18n/zh.js +101 -3
- package/dist/tailwind/geometry.js +7 -0
- package/dist/tailwind/global.js +31 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/types.mcp.d.ts +1 -1
- package/dist/types/types.mcp.js +23 -0
- package/dist/utils/cspNonce.d.ts +16 -0
- package/dist/utils/cspNonce.js +39 -0
- package/dist/utils/cva/merge.d.ts +5 -1
- package/dist/utils/cva/merge.js +6 -4
- package/dist/utils/focus.d.ts +34 -0
- package/dist/utils/focus.js +93 -0
- package/dist/utils/focusHistory.d.ts +21 -0
- package/dist/utils/focusHistory.js +99 -0
- package/dist/utils/handlers.d.ts +7 -0
- package/dist/utils/handlers.js +14 -0
- package/dist/utils/hoverIntent.d.ts +42 -0
- package/dist/utils/hoverIntent.js +57 -0
- package/dist/utils/id.d.ts +7 -0
- package/dist/utils/id.js +15 -0
- package/dist/utils/layers.svelte.d.ts +32 -4
- package/dist/utils/layers.svelte.js +214 -21
- package/dist/utils/listFilter.d.ts +44 -0
- package/dist/utils/listFilter.js +130 -0
- package/dist/utils/match.d.ts +35 -0
- package/dist/utils/match.js +36 -0
- package/dist/utils/number.d.ts +126 -0
- package/dist/utils/number.js +401 -0
- package/dist/utils/openChange.d.ts +88 -0
- package/dist/utils/openChange.js +71 -0
- package/dist/utils/openLifecycle.svelte.d.ts +41 -0
- package/dist/utils/openLifecycle.svelte.js +134 -0
- package/dist/utils/pointerDrag.d.ts +10 -0
- package/dist/utils/pointerDrag.js +37 -2
- package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
- package/dist/utils/pragmaticDragAndDrop.js +8 -3
- package/dist/utils/range.d.ts +62 -0
- package/dist/utils/range.js +70 -0
- package/dist/utils/requestNativeSubmit.d.ts +17 -0
- package/dist/utils/requestNativeSubmit.js +47 -0
- package/dist/utils/safeArea.svelte.d.ts +10 -1
- package/dist/utils/safeArea.svelte.js +19 -11
- package/dist/utils/stateAttributes.d.ts +108 -0
- package/dist/utils/stateAttributes.js +78 -0
- package/dist/utils/swipeVelocity.d.ts +32 -0
- package/dist/utils/swipeVelocity.js +59 -0
- package/dist/utils/timer.svelte.d.ts +65 -2
- package/dist/utils/timer.svelte.js +159 -25
- package/dist/utils/trigger.d.ts +41 -0
- package/dist/utils/trigger.js +103 -0
- package/dist/utils/typeahead.d.ts +9 -0
- package/dist/utils/typeahead.js +21 -9
- package/dist/utils/useDndList.svelte.d.ts +1 -1
- package/dist/utils/useDndList.svelte.js +6 -23
- package/dist/utils/useFocusScope.svelte.d.ts +29 -0
- package/dist/utils/useFocusScope.svelte.js +189 -27
- package/dist/utils/useHoverAction.svelte.d.ts +44 -4
- package/dist/utils/useHoverAction.svelte.js +161 -51
- package/dist/utils/useKeyDown.svelte.d.ts +19 -2
- package/dist/utils/useKeyDown.svelte.js +19 -12
- package/dist/utils/useListNavigation.svelte.d.ts +94 -13
- package/dist/utils/useListNavigation.svelte.js +261 -35
- package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
- package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
- package/dist/utils/useNavigation.svelte.d.ts +36 -3
- package/dist/utils/useNavigation.svelte.js +699 -332
- package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
- package/dist/utils/usePressAndHold.svelte.js +191 -0
- package/dist/utils/useScrollLock.svelte.d.ts +20 -1
- package/dist/utils/useScrollLock.svelte.js +54 -13
- package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
- package/dist/utils/useSlidingIndicator.svelte.js +27 -5
- package/dist/utils/useTabBridge.svelte.d.ts +20 -0
- package/dist/utils/useTabBridge.svelte.js +109 -0
- package/dist/utils/values.d.ts +15 -0
- package/dist/utils/values.js +49 -0
- package/package.json +31 -2
- package/dist/generated/componentMcpRegistry.d.ts +0 -142
- package/dist/utils/useDrag.svelte.d.ts +0 -11
- package/dist/utils/useDrag.svelte.js +0 -55
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { createBindableStateClass } from '../../utils/state.svelte.js';
|
|
2
2
|
import { Registry } from '../../utils/registry.svelte.js';
|
|
3
3
|
import { createPointerDrag } from '../../utils/pointerDrag.js';
|
|
4
|
+
import { createVelocityTracker } from '../../utils/swipeVelocity.js';
|
|
4
5
|
// import { useTheme } from '../../utils/theme.svelte.js';
|
|
5
6
|
import { getContext, onMount, setContext, untrack } from 'svelte';
|
|
6
7
|
import { useTheme } from '../Theme/theme.state.svelte.js';
|
|
8
|
+
import { isTextField } from '../../utils/focus.js';
|
|
9
|
+
import { resolveSnapPoints, settleSnapIndex, snapPointHeight } from './dialog.snap.js';
|
|
7
10
|
import { useFocusScope } from '../../utils/useFocusScope.svelte.js';
|
|
11
|
+
import { useOpenLifecycle } from '../../utils/openLifecycle.svelte.js';
|
|
12
|
+
import { applyStateAttributes, openStateAttributes, transitionStatusAttributes } from '../../utils/stateAttributes.js';
|
|
13
|
+
import { claimPopupOpen } from '../Popover/popover.claims.js';
|
|
14
|
+
import { getInteractionType, isOpenChangeDetails, requestOpenChange, resolveOpenChangeDetails } from '../../utils/openChange.js';
|
|
15
|
+
import { triggerActivation, triggerFocusTarget, writePopupAria } from '../../utils/trigger.js';
|
|
8
16
|
import { useDialogMotion } from './dialog.theme.js';
|
|
9
17
|
export { DIALOG_Z_BASE, DIALOG_Z_STEP } from '../Theme/theme.layers.js';
|
|
10
18
|
export class DialogState extends createBindableStateClass() {
|
|
@@ -14,27 +22,89 @@ export class DialogState extends createBindableStateClass() {
|
|
|
14
22
|
get children() {
|
|
15
23
|
return this.#children.items;
|
|
16
24
|
}
|
|
17
|
-
hasTransitioned = $state(false);
|
|
18
25
|
theme = useTheme();
|
|
19
|
-
//
|
|
20
|
-
// open
|
|
26
|
+
// Svelte plays no intro for a block that is already true when it is created, so a Dialog
|
|
27
|
+
// created open renders once it has mounted: it animates in like any other open (and is not
|
|
28
|
+
// part of the server render, where it could only sit in the page flow).
|
|
29
|
+
#mounted = $state(false);
|
|
30
|
+
/** Whether the dialog is rendered: open, and mounted. */
|
|
31
|
+
isRendered = $derived(this.isOpen && this.#mounted);
|
|
32
|
+
// Open → entering → open → exiting → closed; completes even when no transition plays.
|
|
33
|
+
lifecycle = useOpenLifecycle({
|
|
34
|
+
isOpen: () => this.isRendered,
|
|
35
|
+
onAfterOpen: () => this.onAfterOpen?.(this),
|
|
36
|
+
onAfterClose: () => {
|
|
37
|
+
this.focusScope.restore();
|
|
38
|
+
this.onAfterClose?.(this);
|
|
39
|
+
this.#opener = null;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
/** Where the dialog is in its open/close lifecycle; see `DialogApi.status`. */
|
|
43
|
+
get status() {
|
|
44
|
+
return this.lifecycle.status;
|
|
45
|
+
}
|
|
46
|
+
/** @deprecated Read `status === 'open'`; kept for one minor. */
|
|
47
|
+
get hasTransitioned() {
|
|
48
|
+
return this.lifecycle.status === 'open';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* `data-open` / `data-closed` and `data-entering` / `data-exiting` for the root and the panel
|
|
52
|
+
* (see `dialogDataAttributes`). Closed, they render only while the exit transition plays.
|
|
53
|
+
*/
|
|
54
|
+
stateAttributes = $derived({
|
|
55
|
+
...openStateAttributes(this.isOpen),
|
|
56
|
+
...transitionStatusAttributes(this.lifecycle.status)
|
|
57
|
+
});
|
|
58
|
+
/** The details of the last change that was applied, kept until the next one. */
|
|
59
|
+
lastOpenChange = $state.raw(null);
|
|
60
|
+
/** The open state `setOpen` last applied, to tell a change made from outside. */
|
|
61
|
+
#appliedOpen;
|
|
62
|
+
// Registered in the shared layer stack, which owns Escape / outside-press / close-request
|
|
63
|
+
// dismissal, open ordering and z-index for every overlay kind.
|
|
21
64
|
layer = this.theme.layers.register({
|
|
22
65
|
kind: 'dialog',
|
|
23
66
|
isOpen: () => this.isOpen,
|
|
24
|
-
isModal: () =>
|
|
67
|
+
isModal: () => this.modal,
|
|
25
68
|
dismissOnEscape: () => this.closeOnEscape && this.closable,
|
|
26
|
-
dismissOnOutside: () => this.
|
|
27
|
-
onDismiss: () => this.
|
|
69
|
+
dismissOnOutside: () => this.computedCloseOnClickOutside,
|
|
70
|
+
onDismiss: (request) => this.setOpen(false, request),
|
|
28
71
|
state: this
|
|
29
72
|
});
|
|
30
|
-
/**
|
|
31
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Trigger state in the library's semantic vocabulary: spread on the built-in Button, and
|
|
75
|
+
* written as ARIA attributes by `reference` / `trigger` on a snippet trigger.
|
|
76
|
+
*/
|
|
77
|
+
triggerProps = $derived({
|
|
78
|
+
haspopup: 'dialog',
|
|
79
|
+
expanded: this.isOpen,
|
|
80
|
+
controls: this.isOpen ? this.id : undefined
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* How many open modal dialogs sit above this one. A non-modal dialog leaves the page usable, so
|
|
84
|
+
* it does not push the ones beneath it back.
|
|
85
|
+
*/
|
|
86
|
+
stackDepth = $derived.by(() => {
|
|
87
|
+
const dialogs = this.theme.layers.ofKind('dialog');
|
|
88
|
+
const index = dialogs.indexOf(this.layer);
|
|
89
|
+
return index < 0 ? 0 : dialogs.slice(index + 1).filter((layer) => layer.isModal).length;
|
|
90
|
+
});
|
|
91
|
+
/** The dialog directly above this one, whose swipe this one follows. */
|
|
92
|
+
childAbove = $derived.by(() => {
|
|
93
|
+
const dialogs = this.theme.layers.ofKind('dialog');
|
|
94
|
+
const index = dialogs.indexOf(this.layer);
|
|
95
|
+
const child = index < 0 ? undefined : dialogs[index + 1]?.state;
|
|
96
|
+
return child instanceof DialogState && child.modal ? child : undefined;
|
|
97
|
+
});
|
|
98
|
+
/** Whether the dialog above is being dragged, so this one tracks it without easing. */
|
|
99
|
+
followsChild = $derived(!!this.childAbove?.dragging);
|
|
100
|
+
/** The stack depth as the dialog above is dismissed: it shrinks toward the next level as it is dragged away. */
|
|
101
|
+
effectiveDepth = $derived(Math.max(0, this.stackDepth - (this.childAbove ? this.childAbove.dragProgress : 0)));
|
|
32
102
|
/** Topmost dialog (popovers opened above it do not count). */
|
|
33
103
|
isTop = $derived(this.layer.isTopOfKind);
|
|
34
104
|
// Topmost dialog renders at full size; parents scale down and fade behind it.
|
|
35
105
|
zIndex = $derived(this.layer.zIndex);
|
|
36
|
-
stackScale = $derived(Math.max(0, 1 - this.
|
|
37
|
-
stackOpacity = $derived(this.
|
|
106
|
+
stackScale = $derived(Math.max(0, 1 - this.effectiveDepth * 0.06));
|
|
107
|
+
stackOpacity = $derived(this.effectiveDepth === 0 ? 1 : Math.max(0.4, 1 - this.effectiveDepth * 0.35));
|
|
38
108
|
computedSize = $derived(this.theme.resolveResponsiveProps(this.size, 'normal'));
|
|
39
109
|
// A `modal` collapses into a bottom sheet on mobile unless `responsive` is off. This
|
|
40
110
|
// runs after `resolveResponsiveProps`, so an explicit responsive `type` record still
|
|
@@ -47,7 +117,18 @@ export class DialogState extends createBindableStateClass() {
|
|
|
47
117
|
}
|
|
48
118
|
return resolved;
|
|
49
119
|
});
|
|
50
|
-
|
|
120
|
+
// A non-modal dialog lets the page behind take pointer events, so the positioner cannot be
|
|
121
|
+
// the scroller: it scrolls inside its card.
|
|
122
|
+
computedScroll = $derived(this.modal ? this.theme.resolveResponsiveProps(this.scroll, 'inner') : 'inner');
|
|
123
|
+
/** Whether the resolved type is `alert`: an interruption that needs an explicit answer. */
|
|
124
|
+
isAlert = $derived(this.computedType === 'alert');
|
|
125
|
+
/** `alertdialog` for an alert, so assistive technology announces it as one. */
|
|
126
|
+
role = $derived(this.isAlert ? 'alertdialog' : 'dialog');
|
|
127
|
+
/**
|
|
128
|
+
* `closeOnClickOutside` when set; otherwise an outside press dismisses a modal that is not an
|
|
129
|
+
* alert. A non-modal dialog stays open while the page is used.
|
|
130
|
+
*/
|
|
131
|
+
computedCloseOnClickOutside = $derived(this.closeOnClickOutside ?? (this.modal && !this.isAlert));
|
|
51
132
|
// Per-type preset from `dialogTheme.motion`, through the override ladder
|
|
52
133
|
// (registry → `setDialogTheme` → instance `theme.motion` → `transition` prop).
|
|
53
134
|
resolveMotion = useDialogMotion();
|
|
@@ -59,48 +140,277 @@ export class DialogState extends createBindableStateClass() {
|
|
|
59
140
|
// Dismiss direction sign along the axis: bottom/right drag toward +; top/left toward −.
|
|
60
141
|
swipeSign = $derived(this.computedType === 'drawerBottom' || this.computedType === 'drawerRight' ? 1 : -1);
|
|
61
142
|
dragging = $state(false);
|
|
62
|
-
|
|
143
|
+
/**
|
|
144
|
+
* Where the panel sits along the dismiss axis, in px (0 = fully open). Follows the finger while
|
|
145
|
+
* dragging and otherwise rests at 0, or at the active snap point's offset.
|
|
146
|
+
*/
|
|
147
|
+
dragOffset = $state(0);
|
|
63
148
|
dragSize = $state(0); // panel extent along the axis, measured at drag start
|
|
64
|
-
|
|
149
|
+
/** Drag progress toward dismissal, 0 while resting at the open position or any snap point. */
|
|
150
|
+
dragProgress = $derived.by(() => {
|
|
151
|
+
const floor = this.snapFloor;
|
|
152
|
+
return this.dragSize > floor
|
|
153
|
+
? Math.min(Math.max(Math.abs(this.dragOffset) - floor, 0) / (this.dragSize - floor), 1)
|
|
154
|
+
: 0;
|
|
155
|
+
});
|
|
65
156
|
contentTransform = $derived.by(() => {
|
|
66
|
-
if (this.dragOffset === 0 && this.
|
|
157
|
+
if (this.dragOffset === 0 && this.effectiveDepth === 0) {
|
|
67
158
|
return undefined;
|
|
68
159
|
}
|
|
69
160
|
return `translate3d(${this.swipeAxis === 'x' ? this.dragOffset : 0}px, ${this.swipeAxis === 'y' ? this.dragOffset : 0}px, 0) scale(${this.stackScale})`;
|
|
70
161
|
});
|
|
71
|
-
//
|
|
162
|
+
// --- Snap points (bottom and top drawers) ---
|
|
163
|
+
/** Whether the drawer rests at snap points: a bottom or top drawer with `snapPoints`. */
|
|
164
|
+
snapEnabled = $derived(!!this.snapPoints?.length &&
|
|
165
|
+
(this.computedType === 'drawerBottom' || this.computedType === 'drawerTop'));
|
|
166
|
+
/** Room in px the drawer may use, measured from the positioner; 0 until it is laid out. */
|
|
167
|
+
availableSize = $state(0);
|
|
168
|
+
#viewportSize = $state(0);
|
|
169
|
+
#rootFontSize = $state(16);
|
|
170
|
+
/** The snap points as px heights, lowest first. */
|
|
171
|
+
snapHeights = $derived(this.snapEnabled
|
|
172
|
+
? resolveSnapPoints(this.snapPoints, {
|
|
173
|
+
available: this.availableSize,
|
|
174
|
+
viewport: this.#viewportSize,
|
|
175
|
+
rem: this.#rootFontSize
|
|
176
|
+
})
|
|
177
|
+
: []);
|
|
178
|
+
/** The point the drawer rests at: `snapPoint`, else `defaultSnapPoint`, else the largest. */
|
|
179
|
+
activeSnap = $derived.by(() => {
|
|
180
|
+
const heights = this.snapHeights;
|
|
181
|
+
const wanted = this.snapPoint ?? this.defaultSnapPoint;
|
|
182
|
+
if (wanted === undefined)
|
|
183
|
+
return heights.at(-1);
|
|
184
|
+
const exact = heights.find((snap) => snap.point === wanted);
|
|
185
|
+
return exact ?? this.#nearestSnap(wanted) ?? heights.at(-1);
|
|
186
|
+
});
|
|
187
|
+
/** The value of `snapPoint` right now, as the consumer wrote it. */
|
|
188
|
+
currentSnapPoint = $derived(this.activeSnap?.point);
|
|
189
|
+
/** Whether the drawer rests at its largest point, the only one where its body scrolls. */
|
|
190
|
+
atLargestSnap = $derived(!this.activeSnap || this.activeSnap === this.snapHeights.at(-1));
|
|
191
|
+
/** The panel's height in px: the largest snap point. */
|
|
192
|
+
snapPanelHeight = $derived(this.snapHeights.at(-1)?.height);
|
|
193
|
+
/** The panel offset in px (signed along the dismiss axis) at the active point. */
|
|
194
|
+
restOffset = $derived.by(() => {
|
|
195
|
+
const largest = this.snapHeights.at(-1);
|
|
196
|
+
if (!largest || !this.activeSnap)
|
|
197
|
+
return 0;
|
|
198
|
+
return this.swipeSign * (largest.height - this.activeSnap.height);
|
|
199
|
+
});
|
|
200
|
+
/** Offset in px at the lowest point: dragging beyond it moves toward dismissal. */
|
|
201
|
+
snapFloor = $derived.by(() => {
|
|
202
|
+
const largest = this.snapHeights.at(-1);
|
|
203
|
+
const lowest = this.snapHeights[0];
|
|
204
|
+
return largest && lowest ? largest.height - lowest.height : 0;
|
|
205
|
+
});
|
|
206
|
+
/** Whether the panel can be dragged: to dismiss it, or between snap points. */
|
|
207
|
+
gestureEnabled = $derived(this.swipeEnabled || (this.snapEnabled && this.isDrawer));
|
|
208
|
+
/** The panel scrolls only while it shows in full. */
|
|
209
|
+
bodyScrollLocked = $derived(this.snapEnabled && this.snapHeights.length > 0 && !this.atLargestSnap);
|
|
210
|
+
#nearestSnap(point) {
|
|
211
|
+
const height = snapPointHeight(point, {
|
|
212
|
+
available: this.availableSize,
|
|
213
|
+
viewport: this.#viewportSize,
|
|
214
|
+
rem: this.#rootFontSize
|
|
215
|
+
});
|
|
216
|
+
if (!Number.isFinite(height))
|
|
217
|
+
return undefined;
|
|
218
|
+
let nearest;
|
|
219
|
+
for (const snap of this.snapHeights) {
|
|
220
|
+
if (!nearest || Math.abs(snap.height - height) < Math.abs(nearest.height - height)) {
|
|
221
|
+
nearest = snap;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return nearest;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Moves the drawer to a snap point (one of `snapPoints`, or the nearest to it). `onSnapPointChange`
|
|
228
|
+
* runs first with the change details; cancelling keeps the current point. Returns `false` when
|
|
229
|
+
* the change did not happen.
|
|
230
|
+
*/
|
|
231
|
+
setSnapPoint(point, input) {
|
|
232
|
+
const target = this.snapHeights.find((snap) => snap.point === point) ?? this.#nearestSnap(point);
|
|
233
|
+
if (!target)
|
|
234
|
+
return false;
|
|
235
|
+
if (target === this.activeSnap)
|
|
236
|
+
return true;
|
|
237
|
+
const details = this.#details(input);
|
|
238
|
+
this.onSnapPointChange?.({ snapPoint: target.point, details });
|
|
239
|
+
if (details.isCanceled)
|
|
240
|
+
return false;
|
|
241
|
+
this.snapPoint = target.point;
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
/** Reads the layout the snap points are measured against. */
|
|
245
|
+
#measureLayout(node) {
|
|
246
|
+
const positioner = node.parentElement;
|
|
247
|
+
if (!positioner)
|
|
248
|
+
return;
|
|
249
|
+
const view = node.ownerDocument.defaultView;
|
|
250
|
+
const style = view?.getComputedStyle(positioner);
|
|
251
|
+
const padding = (parseFloat(style?.paddingTop ?? '') || 0) + (parseFloat(style?.paddingBottom ?? '') || 0);
|
|
252
|
+
this.availableSize = Math.max(0, positioner.clientHeight - padding);
|
|
253
|
+
this.#viewportSize = view?.innerHeight ?? 0;
|
|
254
|
+
this.#rootFontSize =
|
|
255
|
+
parseFloat(view?.getComputedStyle(node.ownerDocument.documentElement).fontSize ?? '') || 16;
|
|
256
|
+
}
|
|
257
|
+
// --- Keyboard (bottom sheets) ---
|
|
258
|
+
/** Whether a text field inside the panel has focus, so the on-screen keyboard may be up. */
|
|
259
|
+
fieldFocused = $state(false);
|
|
260
|
+
/** A bottom sheet gives room to the keyboard while one of its fields has focus. */
|
|
261
|
+
keyboardAvoiding = $derived(this.fieldFocused && this.computedType === 'drawerBottom');
|
|
262
|
+
// Initial focus, Tab containment, `inert` page behind, focus restore to the opener: the
|
|
263
|
+
// trigger that opened it, else whatever had focus when it opened.
|
|
72
264
|
focusScope = useFocusScope({
|
|
73
265
|
isActive: () => this.isTop,
|
|
74
|
-
|
|
266
|
+
trap: () => this.modal && this.isTop,
|
|
267
|
+
inertSiblings: () => this.modal,
|
|
268
|
+
returnTo: () => (this.#opener?.isConnected ? this.#opener : null),
|
|
269
|
+
focusOnClose: () => this.focusOnClose,
|
|
270
|
+
closeDetails: () => this.lastOpenChange
|
|
75
271
|
});
|
|
76
272
|
addChild = (child) => () => this.#children.add(child);
|
|
77
273
|
constructor(options) {
|
|
78
274
|
super(options);
|
|
79
275
|
setContext('dialog', this);
|
|
276
|
+
// Details describe the change `setOpen` made: an open state moved from outside (the bound
|
|
277
|
+
// `open` prop) leaves none, so a later close does not read the one that opened it.
|
|
278
|
+
$effect.pre(() => {
|
|
279
|
+
const open = this.isOpen;
|
|
280
|
+
untrack(() => {
|
|
281
|
+
if (this.#appliedOpen !== open)
|
|
282
|
+
this.lastOpenChange = null;
|
|
283
|
+
this.#appliedOpen = open;
|
|
284
|
+
});
|
|
285
|
+
});
|
|
80
286
|
if (this.parent)
|
|
81
287
|
onMount(this.parent.addChild(this));
|
|
288
|
+
onMount(() => {
|
|
289
|
+
this.#mounted = true;
|
|
290
|
+
});
|
|
291
|
+
// The root's and the panel's open state and transition phase, written from here rather than
|
|
292
|
+
// only by the template: Svelte pauses the effects of a block while its out-transition plays,
|
|
293
|
+
// so the template would leave a closing dialog marked `data-open` until it is gone.
|
|
294
|
+
$effect(() => {
|
|
295
|
+
const content = this.#contentElement;
|
|
296
|
+
if (!content)
|
|
297
|
+
return;
|
|
298
|
+
const attributes = this.stateAttributes;
|
|
299
|
+
applyStateAttributes(content, attributes);
|
|
300
|
+
const root = content.closest('[data-layer-root]');
|
|
301
|
+
if (root)
|
|
302
|
+
applyStateAttributes(root, attributes);
|
|
303
|
+
});
|
|
82
304
|
}
|
|
83
|
-
|
|
84
|
-
|
|
305
|
+
/** The panel element while it is rendered, closing transition included. */
|
|
306
|
+
#contentElement = $state(null);
|
|
307
|
+
/** Calls to `setOpen`, direct or through `open`, `close` and `toggle`, unchanged state included. */
|
|
308
|
+
#openRequests = 0;
|
|
309
|
+
/** The element focus returns to: the control of the trigger that opened the dialog. */
|
|
310
|
+
#opener = null;
|
|
311
|
+
/** A press on a trigger, remembered while its event dispatches. */
|
|
312
|
+
#press = null;
|
|
313
|
+
toggle = (input) => {
|
|
314
|
+
this.setOpen(!this.isOpen, input);
|
|
85
315
|
};
|
|
86
|
-
open = () => {
|
|
87
|
-
this.setOpen(true);
|
|
316
|
+
open = (input) => {
|
|
317
|
+
this.setOpen(true, input);
|
|
88
318
|
};
|
|
89
|
-
close = () => {
|
|
90
|
-
this.setOpen(false);
|
|
319
|
+
close = (input) => {
|
|
320
|
+
this.setOpen(false, input);
|
|
91
321
|
};
|
|
92
|
-
|
|
322
|
+
/** The details for a request, filled in from the trigger press it happens during. */
|
|
323
|
+
#details(input) {
|
|
324
|
+
if (isOpenChangeDetails(input))
|
|
325
|
+
return input;
|
|
326
|
+
const event = input instanceof Event ? input : input?.event;
|
|
327
|
+
const press = this.#press && (!event || event === this.#press.event) ? this.#press : null;
|
|
328
|
+
return resolveOpenChangeDetails(input, press
|
|
329
|
+
? { reason: 'trigger-press', event: press.event, trigger: press.node }
|
|
330
|
+
: { interaction: getInteractionType(event) });
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Requests an open-state change. `onOpenChange(nextOpen, details)` runs first; when it calls
|
|
334
|
+
* `details.cancel()` nothing changes. Returns `false` when the change was cancelled.
|
|
335
|
+
*/
|
|
336
|
+
setOpen(nextOpen, input) {
|
|
337
|
+
this.#openRequests += 1;
|
|
93
338
|
if (this.isOpen === nextOpen)
|
|
94
|
-
return;
|
|
339
|
+
return true;
|
|
340
|
+
const details = this.#details(input);
|
|
341
|
+
if (!requestOpenChange(this.onOpenChange, nextOpen, details))
|
|
342
|
+
return false;
|
|
343
|
+
if (nextOpen) {
|
|
344
|
+
this.#opener = details.trigger ? triggerFocusTarget(details.trigger, details.event) : null;
|
|
345
|
+
}
|
|
346
|
+
this.lastOpenChange = details;
|
|
347
|
+
this.#appliedOpen = nextOpen;
|
|
95
348
|
this.isOpen = nextOpen;
|
|
96
|
-
|
|
349
|
+
return true;
|
|
97
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* Attachment for a custom trigger element (`{@attach dialog.reference}`): keeps its
|
|
353
|
+
* `aria-haspopup`, `aria-expanded` and `aria-controls` in sync and makes it the element focus
|
|
354
|
+
* returns to, leaving clicks and keys to the element.
|
|
355
|
+
*/
|
|
356
|
+
reference = (node) => {
|
|
357
|
+
$effect(() => {
|
|
358
|
+
writePopupAria(node, this.triggerProps);
|
|
359
|
+
});
|
|
360
|
+
// Claimed, not written: a tooltip on the same trigger closing while the dialog is open
|
|
361
|
+
// must leave `data-popup-open` in place.
|
|
362
|
+
$effect(() => {
|
|
363
|
+
claimPopupOpen(node, this, this.isOpen);
|
|
364
|
+
return () => claimPopupOpen(node, this, false);
|
|
365
|
+
});
|
|
366
|
+
return untrack(() => {
|
|
367
|
+
// Capture phase: runs before the element's own (delegated) handlers, so a
|
|
368
|
+
// `dialog.open()` called from `onclick` knows the press it belongs to.
|
|
369
|
+
const notePress = (event) => {
|
|
370
|
+
const press = { node, event };
|
|
371
|
+
this.#press = press;
|
|
372
|
+
setTimeout(() => {
|
|
373
|
+
if (this.#press === press)
|
|
374
|
+
this.#press = null;
|
|
375
|
+
});
|
|
376
|
+
};
|
|
377
|
+
node.addEventListener('click', notePress, true);
|
|
378
|
+
return () => {
|
|
379
|
+
node.removeEventListener('click', notePress, true);
|
|
380
|
+
if (this.#press?.node === node)
|
|
381
|
+
this.#press = null;
|
|
382
|
+
};
|
|
383
|
+
});
|
|
384
|
+
};
|
|
385
|
+
/**
|
|
386
|
+
* Makes any element the dialog's trigger (`{@attach dialog.trigger}`): `reference`, plus a
|
|
387
|
+
* click that opens the dialog, and on an element that is not already a control
|
|
388
|
+
* `role="button"`, `tabindex="0"` and Enter/Space activation. The element's own handler runs
|
|
389
|
+
* first: calling `event.preventDefault()` there, or opening the dialog itself, stops it.
|
|
390
|
+
*/
|
|
391
|
+
trigger = (node) => {
|
|
392
|
+
const offActivation = triggerActivation(node, {
|
|
393
|
+
requests: () => this.#openRequests,
|
|
394
|
+
activate: (event) => this.open({ reason: 'trigger-press', event, trigger: node })
|
|
395
|
+
});
|
|
396
|
+
const offReference = this.reference(node);
|
|
397
|
+
return () => {
|
|
398
|
+
offActivation();
|
|
399
|
+
offReference();
|
|
400
|
+
};
|
|
401
|
+
};
|
|
98
402
|
contentAttachment = (node) => {
|
|
99
403
|
return untrack(() => {
|
|
100
404
|
const cleanups = [];
|
|
405
|
+
this.#contentElement = node;
|
|
406
|
+
cleanups.push(() => {
|
|
407
|
+
if (this.#contentElement === node)
|
|
408
|
+
this.#contentElement = null;
|
|
409
|
+
});
|
|
101
410
|
cleanups.push(this.focusScope.attachment(node));
|
|
102
411
|
cleanups.push(this.layer.node(node));
|
|
103
412
|
cleanups.push(this.swipeAttachment(node));
|
|
413
|
+
cleanups.push(this.keyboardAttachment(node));
|
|
104
414
|
return () => {
|
|
105
415
|
cleanups.forEach((cleanup) => cleanup?.());
|
|
106
416
|
};
|
|
@@ -117,14 +427,93 @@ export class DialogState extends createBindableStateClass() {
|
|
|
117
427
|
'VIDEO',
|
|
118
428
|
'AUDIO'
|
|
119
429
|
];
|
|
430
|
+
/** Whether text inside `panel` is selected: a drag there is meant to extend the selection. */
|
|
431
|
+
static hasSelectionIn(panel) {
|
|
432
|
+
const selection = panel.ownerDocument.getSelection?.();
|
|
433
|
+
if (!selection || selection.isCollapsed || selection.rangeCount === 0)
|
|
434
|
+
return false;
|
|
435
|
+
return panel.contains(selection.anchorNode) || panel.contains(selection.focusNode);
|
|
436
|
+
}
|
|
437
|
+
// While a text field inside the panel has focus the on-screen keyboard may be up. A bottom sheet
|
|
438
|
+
// then makes room for it (`keyboardAvoiding`, see `--keyboard-inset`), and the field is brought
|
|
439
|
+
// into view once the visual viewport has stopped moving. The flag is released a frame late, so
|
|
440
|
+
// a tap that moves focus from one field to the next never lets the sheet drop in between.
|
|
441
|
+
keyboardAttachment = (node) => {
|
|
442
|
+
const view = node.ownerDocument.defaultView;
|
|
443
|
+
if (!view)
|
|
444
|
+
return;
|
|
445
|
+
let release = 0;
|
|
446
|
+
let reveal;
|
|
447
|
+
let revealing;
|
|
448
|
+
const insetNow = () => parseFloat(view
|
|
449
|
+
.getComputedStyle(node.ownerDocument.documentElement)
|
|
450
|
+
.getPropertyValue('--keyboard-inset')) || 0;
|
|
451
|
+
const stopRevealing = () => {
|
|
452
|
+
clearTimeout(reveal);
|
|
453
|
+
reveal = undefined;
|
|
454
|
+
revealing?.();
|
|
455
|
+
revealing = undefined;
|
|
456
|
+
};
|
|
457
|
+
const revealWhenSettled = (field) => {
|
|
458
|
+
stopRevealing();
|
|
459
|
+
const viewport = view.visualViewport;
|
|
460
|
+
const show = () => {
|
|
461
|
+
stopRevealing();
|
|
462
|
+
if (field.isConnected && field.ownerDocument.activeElement === field && insetNow() > 0) {
|
|
463
|
+
field.scrollIntoView({ block: 'center', inline: 'nearest' });
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
// The keyboard animates for a few hundred ms: wait for the viewport to stop resizing, and
|
|
467
|
+
// give up waiting after a short while in case it never moves (a hardware keyboard).
|
|
468
|
+
const settle = () => {
|
|
469
|
+
clearTimeout(reveal);
|
|
470
|
+
reveal = setTimeout(show, 120);
|
|
471
|
+
};
|
|
472
|
+
viewport?.addEventListener('resize', settle);
|
|
473
|
+
revealing = () => viewport?.removeEventListener('resize', settle);
|
|
474
|
+
reveal = setTimeout(show, 400);
|
|
475
|
+
};
|
|
476
|
+
const onFocusIn = (event) => {
|
|
477
|
+
const field = event.target;
|
|
478
|
+
if (!isTextField(field instanceof Element ? field : null))
|
|
479
|
+
return;
|
|
480
|
+
cancelAnimationFrame(release);
|
|
481
|
+
this.fieldFocused = true;
|
|
482
|
+
revealWhenSettled(field);
|
|
483
|
+
};
|
|
484
|
+
const onFocusOut = () => {
|
|
485
|
+
cancelAnimationFrame(release);
|
|
486
|
+
release = requestAnimationFrame(() => {
|
|
487
|
+
const active = node.ownerDocument.activeElement;
|
|
488
|
+
if (!isTextField(active) || !node.contains(active)) {
|
|
489
|
+
this.fieldFocused = false;
|
|
490
|
+
stopRevealing();
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
};
|
|
494
|
+
node.addEventListener('focusin', onFocusIn);
|
|
495
|
+
node.addEventListener('focusout', onFocusOut);
|
|
496
|
+
return () => {
|
|
497
|
+
node.removeEventListener('focusin', onFocusIn);
|
|
498
|
+
node.removeEventListener('focusout', onFocusOut);
|
|
499
|
+
cancelAnimationFrame(release);
|
|
500
|
+
stopRevealing();
|
|
501
|
+
this.fieldFocused = false;
|
|
502
|
+
};
|
|
503
|
+
};
|
|
120
504
|
// Vaul-style drag-to-dismiss for drawer types. Pointer-event driven so it works for
|
|
121
|
-
// mouse and touch; inner scroll wins over the swipe (see swipeOwnsGesture).
|
|
505
|
+
// mouse and touch; inner scroll wins over the swipe (see swipeOwnsGesture). With snap points
|
|
506
|
+
// the same drag moves the panel between them.
|
|
122
507
|
swipeAttachment = (node) => {
|
|
123
508
|
let candidate = false;
|
|
124
509
|
let startPos = 0;
|
|
125
|
-
|
|
126
|
-
let
|
|
127
|
-
let
|
|
510
|
+
/** How far from fully open the panel was when the press began, in px (magnitude). */
|
|
511
|
+
let startOffset = 0;
|
|
512
|
+
let pointerType = 'mouse';
|
|
513
|
+
let selectionBlocks = false;
|
|
514
|
+
// Release speed over a short window: a trailing stationary sample or a 120 Hz input
|
|
515
|
+
// keeps a flick a flick, and a pointer that rested before release has none left.
|
|
516
|
+
const tracker = createVelocityTracker();
|
|
128
517
|
const axisPos = (e) => (this.swipeAxis === 'y' ? e.clientY : e.clientX);
|
|
129
518
|
// True when the press landed on something that owns the gesture: a `data-no-swipe`
|
|
130
519
|
// opt-out, a native control, or a scrollable region (the panel itself included) that
|
|
@@ -147,10 +536,14 @@ export class DialogState extends createBindableStateClass() {
|
|
|
147
536
|
return true;
|
|
148
537
|
}
|
|
149
538
|
else {
|
|
150
|
-
//
|
|
151
|
-
|
|
539
|
+
// `scrollLeft` counts from the start edge: negative in a right-to-left scroller.
|
|
540
|
+
// Read as the distance from the physical left edge, dragging right (+) can scroll
|
|
541
|
+
// back while it is past 0, and dragging left (−) while the far end is out of reach.
|
|
542
|
+
const maxScroll = el.scrollWidth - el.clientWidth;
|
|
543
|
+
const fromLeft = style.direction === 'rtl' ? el.scrollLeft + maxScroll : el.scrollLeft;
|
|
544
|
+
if (this.swipeSign > 0 && fromLeft > 0)
|
|
152
545
|
return true;
|
|
153
|
-
if (this.swipeSign < 0 &&
|
|
546
|
+
if (this.swipeSign < 0 && fromLeft < maxScroll - 1)
|
|
154
547
|
return true;
|
|
155
548
|
}
|
|
156
549
|
}
|
|
@@ -165,50 +558,90 @@ export class DialogState extends createBindableStateClass() {
|
|
|
165
558
|
if (!this.dragging)
|
|
166
559
|
return;
|
|
167
560
|
this.dragging = false;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
(
|
|
561
|
+
tracker.add(axisPos(event), event.timeStamp);
|
|
562
|
+
const velocity = tracker.velocity(event.timeStamp) * this.swipeSign;
|
|
563
|
+
let shouldClose = false;
|
|
564
|
+
let snapTo;
|
|
565
|
+
if (!cancelled && this.isOpen) {
|
|
566
|
+
if (this.snapHeights.length > 0) {
|
|
567
|
+
// Between snap points: the nearest one to where the drag is heading, or dismissal below
|
|
568
|
+
// the lowest when swipe-to-dismiss is on.
|
|
569
|
+
const largest = this.snapHeights[this.snapHeights.length - 1];
|
|
570
|
+
const index = settleSnapIndex(this.snapHeights.map((snap) => snap.height), largest.height - Math.abs(this.dragOffset), velocity, this.swipeEnabled);
|
|
571
|
+
if (index < 0)
|
|
572
|
+
shouldClose = true;
|
|
573
|
+
else
|
|
574
|
+
snapTo = this.snapHeights[index].point;
|
|
575
|
+
}
|
|
576
|
+
else {
|
|
577
|
+
// Without usable snap points the drag only dismisses where swiping to dismiss is on.
|
|
578
|
+
shouldClose =
|
|
579
|
+
this.swipeEnabled &&
|
|
580
|
+
(Math.abs(this.dragOffset) > this.dragSize * 0.25 || velocity > 0.4);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
174
583
|
// Closing keeps dragOffset so the out transition starts from the dragged position.
|
|
175
584
|
// Snap-back waits a frame so the re-enabled CSS transition animates the return — and
|
|
176
585
|
// yields to a drag that started in the meantime, or it would zero that drag's offset.
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
586
|
+
// A close that `onOpenChange` cancels snaps back the same way.
|
|
587
|
+
if (shouldClose && this.setOpen(false, { reason: 'swipe', event }))
|
|
588
|
+
return;
|
|
589
|
+
if (snapTo !== undefined)
|
|
590
|
+
this.setSnapPoint(snapTo, { reason: 'swipe', event });
|
|
591
|
+
requestAnimationFrame(() => {
|
|
592
|
+
if (!this.dragging)
|
|
593
|
+
this.dragOffset = this.restOffset;
|
|
594
|
+
});
|
|
184
595
|
};
|
|
185
596
|
const drag = createPointerDrag({
|
|
186
|
-
disabled: () => !this.
|
|
597
|
+
disabled: () => !this.gestureEnabled || !this.isTop,
|
|
187
598
|
// The panel is the whole drawer, not a handle: capturing every press would retarget the
|
|
188
599
|
// compatibility mouse events and steal clicks from the buttons and inputs inside it.
|
|
189
600
|
capture: 'on-activate',
|
|
190
601
|
// Touch panning is already governed by `touch-action` on the handles and by `ownsGesture`,
|
|
191
602
|
// which only promotes where nothing else can still scroll along the axis.
|
|
192
603
|
preventTouchMove: false,
|
|
604
|
+
// A press that travels mostly across the dismiss axis is spent before the drawer can take
|
|
605
|
+
// it, so a sideways drag (a carousel in the drawer) never starts dismissing it.
|
|
606
|
+
axis: () => this.swipeAxis,
|
|
193
607
|
onDown: ({ event }) => {
|
|
194
608
|
candidate = true;
|
|
195
|
-
startPos =
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
609
|
+
startPos = axisPos(event);
|
|
610
|
+
pointerType = event.pointerType;
|
|
611
|
+
selectionBlocks = DialogState.hasSelectionIn(node);
|
|
612
|
+
tracker.reset();
|
|
613
|
+
tracker.add(startPos, event.timeStamp);
|
|
614
|
+
this.#measureLayout(node);
|
|
615
|
+
const largest = this.snapHeights.at(-1);
|
|
616
|
+
this.dragSize =
|
|
617
|
+
this.snapEnabled && largest
|
|
618
|
+
? largest.height
|
|
619
|
+
: this.swipeAxis === 'y'
|
|
620
|
+
? node.offsetHeight
|
|
621
|
+
: node.offsetWidth;
|
|
622
|
+
// From the resting place, not from an offset still easing back from the last drag.
|
|
623
|
+
startOffset = Math.abs(this.restOffset);
|
|
199
624
|
},
|
|
200
|
-
// The press becomes a drag once it has moved past 4px toward the dismissing edge
|
|
625
|
+
// The press becomes a drag once it has moved past 4px toward the dismissing edge, or,
|
|
626
|
+
// resting below the largest snap point, toward the opposite edge to open further.
|
|
201
627
|
shouldActivate: ({ event, startTarget }) => {
|
|
202
628
|
if (!candidate || !this.isOpen)
|
|
203
629
|
return false;
|
|
204
630
|
const pos = axisPos(event);
|
|
205
631
|
const delta = (pos - startPos) * this.swipeSign; // + = dismiss direction
|
|
206
632
|
// Handles (thumb, header) always drag — even when a scrolled body would own the
|
|
207
|
-
// gesture. The body only
|
|
208
|
-
//
|
|
633
|
+
// gesture. The body drags only under a finger, in `panel` mode, never with a text
|
|
634
|
+
// selection to extend, and never over a region that can still scroll along the axis.
|
|
635
|
+
// A mouse or pen press on the body selects text instead. The intent is fixed to where
|
|
636
|
+
// the press started.
|
|
209
637
|
const onHandle = startTarget instanceof Element && !!startTarget.closest('[data-drag-handle]');
|
|
210
|
-
const eligible = onHandle ||
|
|
211
|
-
|
|
638
|
+
const eligible = onHandle ||
|
|
639
|
+
((this.swipeFrom ?? 'panel') === 'panel' &&
|
|
640
|
+
pointerType === 'touch' &&
|
|
641
|
+
!selectionBlocks &&
|
|
642
|
+
!ownsGesture(startTarget));
|
|
643
|
+
const opening = this.snapHeights.length > 0 && !this.atLargestSnap && delta < -4;
|
|
644
|
+
if ((delta > 4 || opening) && eligible)
|
|
212
645
|
return true;
|
|
213
646
|
// Wrong direction, or the target owns the gesture: the press is spent. The session
|
|
214
647
|
// itself stays until the pointer lifts, so a second finger cannot take over mid-press.
|
|
@@ -221,21 +654,47 @@ export class DialogState extends createBindableStateClass() {
|
|
|
221
654
|
},
|
|
222
655
|
onMove: ({ event }) => {
|
|
223
656
|
const pos = axisPos(event);
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
const
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
lastPos = pos;
|
|
230
|
-
lastTime = event.timeStamp;
|
|
231
|
-
}
|
|
657
|
+
// Clamped: it can't be dragged past open, nor past its own extent.
|
|
658
|
+
const travelled = startOffset + (pos - startPos) * this.swipeSign;
|
|
659
|
+
const magnitude = Math.max(0, this.dragSize > 0 ? Math.min(travelled, this.dragSize) : travelled);
|
|
660
|
+
this.dragOffset = this.swipeSign * magnitude;
|
|
661
|
+
tracker.add(pos, event.timeStamp);
|
|
232
662
|
},
|
|
233
663
|
onEnd: ({ event }) => endDrag(event, false),
|
|
234
664
|
onCancel: ({ event }) => endDrag(event, true)
|
|
235
665
|
});
|
|
236
|
-
// Fresh mount = fresh open:
|
|
237
|
-
|
|
666
|
+
// Fresh mount = fresh open: start from the resting position (open, or the active snap point)
|
|
667
|
+
// rather than any offset left over from a drag-dismiss. The layout is read first, so snap
|
|
668
|
+
// points have heights; a change in it (rotation, a keyboard) moves the panel with it.
|
|
669
|
+
this.#measureLayout(node);
|
|
238
670
|
this.dragging = false;
|
|
239
|
-
|
|
671
|
+
this.dragOffset = this.restOffset;
|
|
672
|
+
// Written now, not on the next render: the intro transition reads the panel's computed
|
|
673
|
+
// transform when it starts and slides relative to it. Left to the template, it read none and
|
|
674
|
+
// slid the sheet fully open, then the snap point's offset landed as the intro ended.
|
|
675
|
+
node.style.transform = this.contentTransform ?? '';
|
|
676
|
+
const positioner = node.parentElement;
|
|
677
|
+
const observer = positioner && typeof ResizeObserver !== 'undefined'
|
|
678
|
+
? new ResizeObserver(() => this.#measureLayout(node))
|
|
679
|
+
: undefined;
|
|
680
|
+
if (positioner)
|
|
681
|
+
observer?.observe(positioner);
|
|
682
|
+
$effect(() => {
|
|
683
|
+
const offset = this.restOffset;
|
|
684
|
+
untrack(() => {
|
|
685
|
+
if (!this.dragging)
|
|
686
|
+
this.dragOffset = offset;
|
|
687
|
+
});
|
|
688
|
+
});
|
|
689
|
+
const stopDrag = drag(node);
|
|
690
|
+
return () => {
|
|
691
|
+
stopDrag?.();
|
|
692
|
+
observer?.disconnect();
|
|
693
|
+
};
|
|
240
694
|
};
|
|
241
695
|
}
|
|
696
|
+
/**
|
|
697
|
+
* The state behind the `DialogApi` a Dialog hands its snippets and callbacks. For library code
|
|
698
|
+
* and tests that read a dialog's internals; consumers get the narrow API.
|
|
699
|
+
*/
|
|
700
|
+
export const dialogInternals = (dialog) => dialog;
|