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
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
import type { ConfirmationProps } from './confirmation.props.js';
|
|
8
8
|
import { useConfirmationTheme } from './confirmation.theme.js';
|
|
9
9
|
import { useTheme } from '../Theme/theme.state.svelte.js';
|
|
10
|
-
import { onMount
|
|
10
|
+
import { onMount } from 'svelte';
|
|
11
|
+
import { composeHandlers } from '../../utils/handlers.js';
|
|
12
|
+
import type { OpenChangeDetails } from '../../utils/openChange.js';
|
|
11
13
|
let { theme }: ConfirmationProps = $props();
|
|
12
14
|
|
|
13
15
|
let confirmations = $state<ConfirmationState[]>([]);
|
|
@@ -15,45 +17,84 @@
|
|
|
15
17
|
const classes = $derived(useConfirmationTheme(theme));
|
|
16
18
|
const themeState = useTheme();
|
|
17
19
|
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
// Requests the user has not answered yet. A plain set, not `$state`: the unmount teardown
|
|
21
|
+
// reads it, and a `$state` read in teardown can return the value from before the last change.
|
|
22
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity -- read in teardown, never rendered
|
|
23
|
+
const unanswered = new Set<(outcome: ConfirmationOutcome) => void>();
|
|
24
|
+
// Set by the unmount teardown; a plain flag for the same reason.
|
|
25
|
+
let unmounted = false;
|
|
26
|
+
|
|
27
|
+
// Each request mounts its Dialog open: the Dialog itself renders once mounted, so it still
|
|
28
|
+
// plays its enter transition and reports `onAfterOpen`.
|
|
29
|
+
onMount(() => {
|
|
30
|
+
const unregister = registerConfirmationHost(themeState, {
|
|
21
31
|
request: (detail) =>
|
|
22
|
-
new Promise<ConfirmationOutcome>((
|
|
32
|
+
new Promise<ConfirmationOutcome>((resolve) => {
|
|
33
|
+
const settle = (outcome: ConfirmationOutcome) => {
|
|
34
|
+
unanswered.delete(settle);
|
|
35
|
+
resolve(outcome);
|
|
36
|
+
};
|
|
37
|
+
unanswered.add(settle);
|
|
23
38
|
const confirmationState = Object.assign({}, detail, {
|
|
24
|
-
isOpen:
|
|
39
|
+
isOpen: true,
|
|
25
40
|
loading: false,
|
|
26
41
|
settle
|
|
27
42
|
}) satisfies ConfirmationState;
|
|
28
43
|
confirmations.push(confirmationState);
|
|
29
|
-
tick().then(() => {
|
|
30
|
-
confirmations.forEach((a) => {
|
|
31
|
-
if (a.id === confirmationState.id) {
|
|
32
|
-
a.isOpen = true;
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
44
|
})
|
|
37
|
-
})
|
|
38
|
-
|
|
45
|
+
});
|
|
46
|
+
return () => {
|
|
47
|
+
unmounted = true;
|
|
48
|
+
unregister();
|
|
49
|
+
// Nobody can answer these dialogs any more: settle them as declined so an
|
|
50
|
+
// `await confirmation()` never hangs on a host that left (a layout remount). A request
|
|
51
|
+
// whose `onConfirm` is running was answered, and settles when that finishes.
|
|
52
|
+
for (const settle of [...unanswered]) settle({ confirmed: false });
|
|
53
|
+
};
|
|
54
|
+
});
|
|
39
55
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
let result;
|
|
49
|
-
if (continued) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
56
|
+
// The button's own `onclick` runs first; calling `event.preventDefault()` there keeps the
|
|
57
|
+
// question open.
|
|
58
|
+
const actionConfirmation = (
|
|
59
|
+
confirmation: ConfirmationState,
|
|
60
|
+
continued: boolean,
|
|
61
|
+
onclick?: ButtonProps['onclick']
|
|
62
|
+
): NonNullable<ButtonProps['onclick']> =>
|
|
63
|
+
composeHandlers(onclick, async () => {
|
|
64
|
+
let result: unknown;
|
|
65
|
+
if (continued && confirmation.onConfirm) {
|
|
66
|
+
// The user answered: while `onConfirm` runs, an unmount must not decline the request
|
|
67
|
+
// (the action may be what navigated away), so it settles with the action's outcome.
|
|
68
|
+
unanswered.delete(confirmation.settle);
|
|
69
|
+
// A throwing or rejected `onConfirm` ends the loading state and keeps the dialog
|
|
70
|
+
// open, so Cancel works again; the error still propagates like any handler error.
|
|
71
|
+
try {
|
|
72
|
+
const pending = confirmation.onConfirm();
|
|
73
|
+
if (pending instanceof Promise) confirmation.loading = true;
|
|
74
|
+
result = await pending;
|
|
75
|
+
} catch (error) {
|
|
76
|
+
// The question is open again, unless the host left and nobody can answer it.
|
|
77
|
+
if (unmounted) confirmation.settle({ confirmed: false });
|
|
78
|
+
else unanswered.add(confirmation.settle);
|
|
79
|
+
throw error;
|
|
80
|
+
} finally {
|
|
81
|
+
confirmation.loading = false;
|
|
82
|
+
}
|
|
53
83
|
}
|
|
54
|
-
confirmation.loading = false;
|
|
55
84
|
confirmation.isOpen = false;
|
|
56
85
|
confirmation.settle({ confirmed: continued, result });
|
|
86
|
+
});
|
|
87
|
+
// Escape (and the Android Back gesture) answers a question as Cancel, unless an action is
|
|
88
|
+
// running: then the dialog stays, like its buttons, until it finishes. Outside presses never
|
|
89
|
+
// answer it. The state it ends in is the one `confirmation.settle` reports.
|
|
90
|
+
const cancelOnEscape =
|
|
91
|
+
(confirmation: ConfirmationState) => (open: boolean, details: OpenChangeDetails) => {
|
|
92
|
+
if (open) return;
|
|
93
|
+
if (confirmation.loading) {
|
|
94
|
+
details.cancel();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
confirmation.settle({ confirmed: false });
|
|
57
98
|
};
|
|
58
99
|
// A Dialog sizes to its content, so it takes the device decision from JS rather than CSS — and
|
|
59
100
|
// from the SAME value the Dialog itself used to pick sheet-versus-floating, instead of a second
|
|
@@ -68,9 +109,9 @@
|
|
|
68
109
|
onAfterClose={() => {
|
|
69
110
|
confirmations = confirmations.filter((a) => a.id !== confirmation.id);
|
|
70
111
|
}}
|
|
71
|
-
|
|
112
|
+
closeButton={false}
|
|
72
113
|
closeOnClickOutside={false}
|
|
73
|
-
|
|
114
|
+
onOpenChange={cancelOnEscape(confirmation)}
|
|
74
115
|
bind:open={confirmation.isOpen}
|
|
75
116
|
title={confirmation.title}
|
|
76
117
|
description={confirmation.description}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const confirmationDescription = "\nThe confirmation function displays a modal dialog that asks the user to confirm or cancel an action. It returns a Promise that resolves with an object indicating whether the user confirmed or cancelled.\n\n**Usage:**\n```typescript\nimport { confirmation } from 'entasis/confirmation';\n\nconst { confirmed, result } = await confirmation({\n title: 'Delete Item',\n description: 'Are you sure you want to delete this item? This action cannot be undone.',\n confirm: 'Delete',\n cancel: 'Cancel',\n onConfirm: async () => {\n // Optional: Async function that runs when user confirms\n await deleteItem();\n return 'Item deleted successfully';\n }\n});\n\nif (confirmed) {\n console.log('User confirmed:', result); // result is the return value of onConfirm, or undefined\n} else {\n console.log('User cancelled');\n}\n```\n\n**Parameters:**\n- `title` (string, required): The title displayed in the confirmation dialog\n- `description` (string, required): The description/message shown in the dialog\n- `confirm` (string | object, required): The confirm button text, or an object with `text` and Button props\n- `cancel` (string | object, required): The cancel button text, or an object with `text` and Button props\n- `onConfirm` (function, optional): An async function that runs when the user clicks confirm. Its return value is passed as `result` in the resolved promise\n\n**Returns:**\nA Promise that resolves to:\n- `{ confirmed: true, result: R }` if the user confirmed (where R is the return type of onConfirm, or void)\n- `{ confirmed: false, result: undefined }` if the user cancelled\n\n**Notes:**\n- The dialog is modal and prevents interaction with the rest of the page until the user responds\n- If `onConfirm` is provided, the confirm button shows a loading state while the function executes\n-
|
|
1
|
+
export declare const confirmationDescription = "\nThe confirmation function displays a modal dialog that asks the user to confirm or cancel an action. It returns a Promise that resolves with an object indicating whether the user confirmed or cancelled.\n\n**Usage:**\n```typescript\nimport { confirmation } from 'entasis/confirmation';\n\nconst { confirmed, result } = await confirmation({\n title: 'Delete Item',\n description: 'Are you sure you want to delete this item? This action cannot be undone.',\n confirm: 'Delete',\n cancel: 'Cancel',\n onConfirm: async () => {\n // Optional: Async function that runs when user confirms\n await deleteItem();\n return 'Item deleted successfully';\n }\n});\n\nif (confirmed) {\n console.log('User confirmed:', result); // result is the return value of onConfirm, or undefined\n} else {\n console.log('User cancelled');\n}\n```\n\n**Parameters:**\n- `title` (string, required): The title displayed in the confirmation dialog\n- `description` (string, required): The description/message shown in the dialog\n- `confirm` (string | object, required): The confirm button text, or an object with `text` and Button props\n- `cancel` (string | object, required): The cancel button text, or an object with `text` and Button props\n- `onConfirm` (function, optional): An async function that runs when the user clicks confirm. Its return value is passed as `result` in the resolved promise. If it throws or rejects, the loading state ends and the dialog stays open, so the user can retry or cancel; the error still propagates like any event handler error, so handle it inside `onConfirm` (for example with a toast)\n\n**Returns:**\nA Promise that resolves to:\n- `{ confirmed: true, result: R }` if the user confirmed (where R is the return type of onConfirm, or void)\n- `{ confirmed: false, result: undefined }` if the user cancelled, or if the `<Confirmation />` serving the request unmounts before an answer (or while a failed `onConfirm` has left the question open)\n\n**Notes:**\n- The dialog is a modal `role=\"alertdialog\"` named by `title` and described by `description`, and prevents interaction with the rest of the page until the user responds\n- If `onConfirm` is provided, the confirm button shows a loading state while the function executes\n- A press outside the dialog does nothing; Escape (and the Android Back gesture) answers it as Cancel: the promise resolves with `{ confirmed: false }` without running `onConfirm` or the Cancel button's `onclick`. While `onConfirm` is running, Escape is ignored like the buttons are. There is no close button, visible or hidden: the two answers are the only controls\n- Requests made before any `<Confirmation />` is mounted are queued and served by the first one that mounts\n- With several mounted, the most recently mounted one serves; when it unmounts the previous one takes over again\n- When a `<Confirmation />` unmounts, every request the user has not answered resolves as `{ confirmed: false }`, so an `await confirmation()` never hangs. A request whose `onConfirm` is already running (it may be what navigated away) still resolves with `{ confirmed: true, result }` when it finishes, or `{ confirmed: false }` if it fails\n";
|
|
@@ -29,17 +29,18 @@ if (confirmed) {
|
|
|
29
29
|
- \`description\` (string, required): The description/message shown in the dialog
|
|
30
30
|
- \`confirm\` (string | object, required): The confirm button text, or an object with \`text\` and Button props
|
|
31
31
|
- \`cancel\` (string | object, required): The cancel button text, or an object with \`text\` and Button props
|
|
32
|
-
- \`onConfirm\` (function, optional): An async function that runs when the user clicks confirm. Its return value is passed as \`result\` in the resolved promise
|
|
32
|
+
- \`onConfirm\` (function, optional): An async function that runs when the user clicks confirm. Its return value is passed as \`result\` in the resolved promise. If it throws or rejects, the loading state ends and the dialog stays open, so the user can retry or cancel; the error still propagates like any event handler error, so handle it inside \`onConfirm\` (for example with a toast)
|
|
33
33
|
|
|
34
34
|
**Returns:**
|
|
35
35
|
A Promise that resolves to:
|
|
36
36
|
- \`{ confirmed: true, result: R }\` if the user confirmed (where R is the return type of onConfirm, or void)
|
|
37
|
-
- \`{ confirmed: false, result: undefined }\` if the user cancelled
|
|
37
|
+
- \`{ confirmed: false, result: undefined }\` if the user cancelled, or if the \`<Confirmation />\` serving the request unmounts before an answer (or while a failed \`onConfirm\` has left the question open)
|
|
38
38
|
|
|
39
39
|
**Notes:**
|
|
40
|
-
- The dialog is modal and prevents interaction with the rest of the page until the user responds
|
|
40
|
+
- The dialog is a modal \`role="alertdialog"\` named by \`title\` and described by \`description\`, and prevents interaction with the rest of the page until the user responds
|
|
41
41
|
- If \`onConfirm\` is provided, the confirm button shows a loading state while the function executes
|
|
42
|
-
-
|
|
42
|
+
- A press outside the dialog does nothing; Escape (and the Android Back gesture) answers it as Cancel: the promise resolves with \`{ confirmed: false }\` without running \`onConfirm\` or the Cancel button's \`onclick\`. While \`onConfirm\` is running, Escape is ignored like the buttons are. There is no close button, visible or hidden: the two answers are the only controls
|
|
43
43
|
- Requests made before any \`<Confirmation />\` is mounted are queued and served by the first one that mounts
|
|
44
44
|
- With several mounted, the most recently mounted one serves; when it unmounts the previous one takes over again
|
|
45
|
+
- When a \`<Confirmation />\` unmounts, every request the user has not answered resolves as \`{ confirmed: false }\`, so an \`await confirmation()\` never hangs. A request whose \`onConfirm\` is already running (it may be what navigated away) still resolves with \`{ confirmed: true, result }\` when it finishes, or \`{ confirmed: false }\` if it fails
|
|
45
46
|
`;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { createBindableValue } from '../../utils/state.svelte.js';
|
|
3
|
-
import { tick } from 'svelte';
|
|
3
|
+
import { onDestroy, tick } from 'svelte';
|
|
4
4
|
import PopupMenu from '../PopupMenu/PopupMenu.svelte';
|
|
5
5
|
import type { ContextMenuProps } from './contextMenu.props.js';
|
|
6
|
+
import type { PopupMenuProps } from '../PopupMenu/popupMenu.props.js';
|
|
6
7
|
import { useContextMenuTheme } from './contextMenu.theme.js';
|
|
8
|
+
import { createOpenChangeDetails, type OpenChangeDetails } from '../../utils/openChange.js';
|
|
7
9
|
|
|
8
10
|
let {
|
|
9
11
|
items,
|
|
@@ -21,6 +23,14 @@
|
|
|
21
23
|
...attachments
|
|
22
24
|
}: ContextMenuProps = $props();
|
|
23
25
|
const classes = $derived(useContextMenuTheme(theme));
|
|
26
|
+
// How long a touch holds before it opens the menu, how far the finger may drift meanwhile (and
|
|
27
|
+
// how far from the anchor a second right-click still counts as the same spot), and how long
|
|
28
|
+
// after the finger lifts a native `contextmenu` is still taken for part of that touch.
|
|
29
|
+
const LONG_PRESS_MS = 500;
|
|
30
|
+
const GESTURE_TOLERANCE = 8;
|
|
31
|
+
const TOUCH_GESTURE_MS = 700;
|
|
32
|
+
// How long after the press that closed the menu its `contextmenu` still counts as part of it.
|
|
33
|
+
const SECONDARY_PRESS_MS = 1000;
|
|
24
34
|
const openState = createBindableValue(
|
|
25
35
|
() => open,
|
|
26
36
|
(next) => {
|
|
@@ -33,24 +43,92 @@
|
|
|
33
43
|
// pointer rather than the target element.
|
|
34
44
|
let reference = $state<{ getBoundingClientRect: () => DOMRect } | null>(null);
|
|
35
45
|
|
|
36
|
-
|
|
46
|
+
// Below and after the pointer unless `popup.position` says otherwise. A responsive record keeps
|
|
47
|
+
// that default below its first breakpoint, where Popover would otherwise fall back to `top`.
|
|
48
|
+
const position = $derived.by((): PopupMenuProps['position'] => {
|
|
49
|
+
const requested = popup?.position;
|
|
50
|
+
if (typeof requested !== 'object' || requested === null) return requested ?? 'bottom-start';
|
|
51
|
+
return { ...requested, xs: requested.xs ?? 'bottom-start' };
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Shifted back into the layout viewport, not the visual one, so the menu stays where it
|
|
55
|
+
// opened while a pinch-zoomed page pans. Submenus keep the default.
|
|
56
|
+
const collisionBoundary = $derived(popup?.collisionBoundary ?? 'layoutViewport');
|
|
57
|
+
|
|
58
|
+
// Also the PopupMenu's `onOpenChange`: its details (reason, event, `cancel()`) pass through.
|
|
59
|
+
function setOpen(nextOpen: boolean, details: OpenChangeDetails) {
|
|
37
60
|
if (openState.value === nextOpen) return;
|
|
61
|
+
onOpenChange?.(nextOpen, details);
|
|
62
|
+
if (details.isCanceled) return;
|
|
63
|
+
if (!nextOpen) noteSecondaryPress(details);
|
|
38
64
|
openState.value = nextOpen;
|
|
39
|
-
onOpenChange?.(nextOpen);
|
|
40
65
|
}
|
|
41
66
|
|
|
42
|
-
|
|
67
|
+
// A right-click on the open menu's anchor reaches the page as a `pointerdown` first, which the
|
|
68
|
+
// layer stack takes for an outside press and closes the menu with, before `contextmenu` fires.
|
|
69
|
+
// That close is remembered so the `contextmenu` that follows is read as the second right-click.
|
|
70
|
+
let secondaryDismissal: { x: number; y: number; at: number } | null = null;
|
|
71
|
+
function noteSecondaryPress({ reason, event }: OpenChangeDetails) {
|
|
72
|
+
secondaryDismissal = null;
|
|
73
|
+
if (reason !== 'outside-press' || !event) return;
|
|
74
|
+
const press = event as Partial<PointerEvent>;
|
|
75
|
+
if (press.pointerType === 'touch' || (press.button !== 2 && !press.ctrlKey)) return;
|
|
76
|
+
if (press.clientX === undefined || press.clientY === undefined) return;
|
|
77
|
+
secondaryDismissal = { x: press.clientX, y: press.clientY, at: event.timeStamp };
|
|
78
|
+
}
|
|
79
|
+
// Whether this `contextmenu` follows the press that just closed the menu at the same spot.
|
|
80
|
+
function followsDismissal(event: MouseEvent) {
|
|
81
|
+
const dismissal = secondaryDismissal;
|
|
82
|
+
secondaryDismissal = null;
|
|
83
|
+
return (
|
|
84
|
+
dismissal !== null &&
|
|
85
|
+
event.timeStamp - dismissal.at <= SECONDARY_PRESS_MS &&
|
|
86
|
+
Math.hypot(event.clientX - dismissal.x, event.clientY - dismissal.y) <= GESTURE_TOLERANCE
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// The point the open menu is anchored to, so a second right-click near it closes the menu.
|
|
91
|
+
let anchorPoint: { x: number; y: number } | null = null;
|
|
92
|
+
// Whether the open in progress came from the keyboard. The PopupMenu receives `open` as a
|
|
93
|
+
// controlled prop, so it sees every open as one made from code and cannot read the key itself:
|
|
94
|
+
// a keyboard open asks for the first row, a pointer open leaves the menu container focused.
|
|
95
|
+
let keyboardOpen = $state(false);
|
|
96
|
+
|
|
97
|
+
async function openAt(x: number, y: number, event: Event) {
|
|
43
98
|
// Close first so a second request re-mounts the menu at the new point.
|
|
44
|
-
setOpen(false);
|
|
99
|
+
setOpen(false, createOpenChangeDetails({ reason: 'trigger-press', event }));
|
|
45
100
|
await tick();
|
|
101
|
+
anchorPoint = { x, y };
|
|
102
|
+
keyboardOpen = event instanceof KeyboardEvent;
|
|
46
103
|
reference = { getBoundingClientRect: () => new DOMRect(x, y, 0, 0) };
|
|
47
|
-
setOpen(true);
|
|
104
|
+
setOpen(true, createOpenChangeDetails({ reason: 'trigger-press', event }));
|
|
48
105
|
}
|
|
49
106
|
|
|
107
|
+
// A press this close to where the open menu was anchored is the same spot again.
|
|
108
|
+
const sameSpot = (x: number, y: number) =>
|
|
109
|
+
anchorPoint !== null && Math.hypot(x - anchorPoint.x, y - anchorPoint.y) <= GESTURE_TOLERANCE;
|
|
110
|
+
|
|
50
111
|
function handleContextMenu(event: MouseEvent) {
|
|
51
112
|
if (disabled) return;
|
|
52
113
|
event.preventDefault();
|
|
53
|
-
|
|
114
|
+
// Android Chrome follows a long-press with a native `contextmenu`: the gesture's own timer
|
|
115
|
+
// or this event opens the menu, never both.
|
|
116
|
+
if (touch) {
|
|
117
|
+
if (!touch.opened && !touch.cancelled) {
|
|
118
|
+
touch.opened = true;
|
|
119
|
+
cancelPress();
|
|
120
|
+
void openAt(touch.x, touch.y, event);
|
|
121
|
+
}
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// A second right-click on the spot the menu is anchored to dismisses it.
|
|
125
|
+
const dismissed = followsDismissal(event);
|
|
126
|
+
if (dismissed && sameSpot(event.clientX, event.clientY)) return;
|
|
127
|
+
if (openState.value && sameSpot(event.clientX, event.clientY)) {
|
|
128
|
+
setOpen(false, createOpenChangeDetails({ reason: 'trigger-press', event }));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
void openAt(event.clientX, event.clientY, event);
|
|
54
132
|
}
|
|
55
133
|
|
|
56
134
|
// Shift+F10 and the ContextMenu key open the menu anchored to the focused element.
|
|
@@ -59,24 +137,54 @@
|
|
|
59
137
|
if (event.key !== 'ContextMenu' && !(event.key === 'F10' && event.shiftKey)) return;
|
|
60
138
|
event.preventDefault();
|
|
61
139
|
const rect = (event.target as HTMLElement).getBoundingClientRect();
|
|
62
|
-
void openAt(rect.left + rect.width / 2, rect.bottom);
|
|
140
|
+
void openAt(rect.left + rect.width / 2, rect.bottom, event);
|
|
63
141
|
}
|
|
64
142
|
|
|
65
|
-
// Touch has no right-click: a 500 ms press opens the menu at the finger.
|
|
143
|
+
// Touch has no right-click: a 500 ms press opens the menu at the finger. A finger drifts a
|
|
144
|
+
// little while it presses, so only movement past the tolerance cancels it.
|
|
66
145
|
let pressTimer: ReturnType<typeof setTimeout> | null = null;
|
|
146
|
+
let touch: { x: number; y: number; opened: boolean; cancelled: boolean } | null = null;
|
|
147
|
+
let touchEnd: ReturnType<typeof setTimeout> | null = null;
|
|
67
148
|
function cancelPress() {
|
|
68
149
|
if (pressTimer) clearTimeout(pressTimer);
|
|
69
150
|
pressTimer = null;
|
|
70
151
|
}
|
|
152
|
+
function endPress() {
|
|
153
|
+
cancelPress();
|
|
154
|
+
// A native `contextmenu` can arrive just after the finger lifts: the gesture is remembered
|
|
155
|
+
// for a moment so it is not taken for a right-click.
|
|
156
|
+
if (touchEnd) clearTimeout(touchEnd);
|
|
157
|
+
touchEnd = setTimeout(() => {
|
|
158
|
+
touch = null;
|
|
159
|
+
touchEnd = null;
|
|
160
|
+
}, TOUCH_GESTURE_MS);
|
|
161
|
+
}
|
|
71
162
|
function handlePointerDown(event: PointerEvent) {
|
|
72
163
|
if (disabled || event.pointerType !== 'touch') return;
|
|
73
164
|
cancelPress();
|
|
165
|
+
if (touchEnd) clearTimeout(touchEnd);
|
|
166
|
+
touchEnd = null;
|
|
74
167
|
const { clientX, clientY } = event;
|
|
168
|
+
const gesture = { x: clientX, y: clientY, opened: false, cancelled: false };
|
|
169
|
+
touch = gesture;
|
|
75
170
|
pressTimer = setTimeout(() => {
|
|
76
171
|
pressTimer = null;
|
|
77
|
-
|
|
78
|
-
|
|
172
|
+
if (gesture.opened || gesture.cancelled) return;
|
|
173
|
+
gesture.opened = true;
|
|
174
|
+
void openAt(clientX, clientY, event);
|
|
175
|
+
}, LONG_PRESS_MS);
|
|
176
|
+
}
|
|
177
|
+
function handlePointerMove(event: PointerEvent) {
|
|
178
|
+
if (!touch || !pressTimer) return;
|
|
179
|
+
if (Math.hypot(event.clientX - touch.x, event.clientY - touch.y) <= GESTURE_TOLERANCE) return;
|
|
180
|
+
touch.cancelled = true;
|
|
181
|
+
cancelPress();
|
|
79
182
|
}
|
|
183
|
+
|
|
184
|
+
onDestroy(() => {
|
|
185
|
+
cancelPress();
|
|
186
|
+
if (touchEnd) clearTimeout(touchEnd);
|
|
187
|
+
});
|
|
80
188
|
</script>
|
|
81
189
|
|
|
82
190
|
<div
|
|
@@ -84,9 +192,9 @@
|
|
|
84
192
|
oncontextmenu={handleContextMenu}
|
|
85
193
|
onkeydown={handleKeyDown}
|
|
86
194
|
onpointerdown={handlePointerDown}
|
|
87
|
-
onpointerup={
|
|
88
|
-
onpointercancel={
|
|
89
|
-
onpointermove={
|
|
195
|
+
onpointerup={endPress}
|
|
196
|
+
onpointercancel={endPress}
|
|
197
|
+
onpointermove={handlePointerMove}
|
|
90
198
|
{...attachments}
|
|
91
199
|
>
|
|
92
200
|
{@render children()}
|
|
@@ -101,6 +209,8 @@
|
|
|
101
209
|
{onAfterOpen}
|
|
102
210
|
{onAfterClose}
|
|
103
211
|
ref={reference}
|
|
104
|
-
position
|
|
105
|
-
|
|
212
|
+
{position}
|
|
213
|
+
{collisionBoundary}
|
|
214
|
+
nativeMenu={false}
|
|
215
|
+
menu={{ items, focusOnMount: keyboardOpen ? true : undefined, ...menu }}
|
|
106
216
|
/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const contextMenuDescription = "\n# ContextMenu Component\n\nWraps a target and opens a menu anchored at the cursor on right-click. Built on PopupMenu using a\nfloating-ui virtual element, so the menu appears exactly at the pointer (and flips near viewport edges).\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { ContextMenu } from 'entasis/context-menu';\n\timport { copyIcon } from 'entasis/icons/copy';\n\timport { trashIcon } from 'entasis/icons/trash';\n</script>\n\n<ContextMenu\n\titems={[\n\t\t{ type: 'option', prefix: copyIcon, title: 'Copy' },\n\t\t{ type: 'option', title: 'Paste' },\n\t\t{ type: 'separator' },\n\t\t{ type: 'option', prefix: trashIcon, title: 'Delete', color: 'danger' }\n\t]}\n>\n\t<div class=\"rounded border p-10\">Right-click me</div>\n</ContextMenu>\n```\n\n## Props\n\n### Core Props\n- **items**: MenuItem[] (required) - Menu entries shown on right-click. Same item shapes as Menu: type 'button', 'option', 'separator', or '
|
|
1
|
+
export declare const contextMenuDescription = "\n# ContextMenu Component\n\nWraps a target and opens a menu anchored at the cursor on right-click. Built on PopupMenu using a\nfloating-ui virtual element, so the menu appears exactly at the pointer (and flips near viewport edges).\n\n## Basic Usage\n\n```svelte\n<script>\n\timport { ContextMenu } from 'entasis/context-menu';\n\timport { copyIcon } from 'entasis/icons/copy';\n\timport { trashIcon } from 'entasis/icons/trash';\n</script>\n\n<ContextMenu\n\titems={[\n\t\t{ type: 'option', prefix: copyIcon, title: 'Copy' },\n\t\t{ type: 'option', title: 'Paste' },\n\t\t{ type: 'separator' },\n\t\t{ type: 'option', prefix: trashIcon, title: 'Delete', color: 'danger' }\n\t]}\n>\n\t<div class=\"rounded border p-10\">Right-click me</div>\n</ContextMenu>\n```\n\n## Props\n\n### Core Props\n- **items**: MenuItem[] (required) - Menu entries shown on right-click. Same item shapes as Menu: type 'button', 'option', 'separator', 'submenu', 'checkbox', 'radio-group' or 'group'.\n- **children**: Snippet (required) - The right-click target content.\n- **disabled**: boolean (default: false) - When true, right-click is ignored and the native context menu shows.\n\n### Bindable Props\n- **open**: boolean - Open state of the context menu.\n- **defaultOpen**: boolean (default: false) - Initial state when open is not provided.\n- **onOpenChange**: (open: boolean, details: OpenChangeDetails) => void - Called before each library-requested state change, with `details.reason` (`'trigger-press'` for the right-click, long-press or keyboard request, `'item-press'`, `'escape-key'`, `'outside-press'`), `details.event` and `details.cancel()`.\n- **onAfterOpen**: (payload) => void - Called after the open transition finishes.\n- **onAfterClose**: (payload) => void - Called after the close transition finishes.\n\n### Advanced Props\n- **menu**: Omit<MenuProps, 'items'> - Overrides forwarded to the underlying Menu (header, footer, theme).\n- **popup**: PopupMenu/Popover overrides (position, offset, closeOnEscape, closeOnItemClick, ...). position places the menu relative to the pointer and defaults to 'bottom-start' (a responsive record keeps that default below its first breakpoint); collisionBoundary defaults to 'layoutViewport', so panning a pinch-zoomed page doesn't drag the menu along (submenus keep the visual viewport); ref is managed internally.\n- **class**: string - Class on the wrapper around the target content.\n\n## Behavior\n\n- Right-click on the target opens the menu at the cursor via a virtual reference element.\n- Keyboard: Shift+F10 or the ContextMenu key, while focus is inside the target, opens the menu anchored to the focused element.\n- Touch: a 500 ms long-press opens the menu at the finger. A finger may drift up to 8 px while it presses; moving further, or lifting earlier, cancels the press. The native `contextmenu` event Android Chrome sends with a long-press (before or just after the finger lifts) is part of the same gesture: the menu opens once, with one `onOpenChange(true)`.\n- A second right-click within 8 px of the point the open menu is anchored to closes it; a right-click elsewhere re-mounts the menu at the new point.\n- The browser's own context menu never opens over the open panel, its padding or its submenus. While the menu is enabled the wrapper sets `-webkit-touch-callout: none`, so iOS Safari's long-press callout does not compete with the long-press that opens the menu.\n- A pointer open (right-click, long-press) focuses the menu itself; Shift+F10 and the ContextMenu key highlight the first row.\n- Left-click outside, Escape, or selecting an item closes it. Selecting an item inside a submenu closes the submenu and the menu together, and focus returns to the element that had it before the menu opened.\n- Submenus, keyboard navigation, and highlighting are inherited from Menu.\n\n## Accessibility\n\nThe menu is a role=\"menu\" with role=\"menuitem\" children and full keyboard navigation (arrows, Home/End,\nEnter, Escape, and ArrowRight/Left for submenus, mirrored in right-to-left text), plus type-ahead. Tab closes the\nmenu and returns focus to the element that had it before the menu opened. Keyboard users open it with\nShift+F10 or the ContextMenu key; touch users with a long-press. The target wrapper is a plain\nelement with contextmenu, keydown, and pointer handlers.\n\n## Notes\n\n- Anchoring uses a floating-ui virtual element (a zero-size DOMRect at clientX/clientY).\n- For a menu flush with the cursor, pass `popup={{ offset: 0 }}`.\n";
|
|
@@ -28,35 +28,38 @@ floating-ui virtual element, so the menu appears exactly at the pointer (and fli
|
|
|
28
28
|
## Props
|
|
29
29
|
|
|
30
30
|
### Core Props
|
|
31
|
-
- **items**: MenuItem[] (required) - Menu entries shown on right-click. Same item shapes as Menu: type 'button', 'option', 'separator', or '
|
|
31
|
+
- **items**: MenuItem[] (required) - Menu entries shown on right-click. Same item shapes as Menu: type 'button', 'option', 'separator', 'submenu', 'checkbox', 'radio-group' or 'group'.
|
|
32
32
|
- **children**: Snippet (required) - The right-click target content.
|
|
33
33
|
- **disabled**: boolean (default: false) - When true, right-click is ignored and the native context menu shows.
|
|
34
34
|
|
|
35
35
|
### Bindable Props
|
|
36
36
|
- **open**: boolean - Open state of the context menu.
|
|
37
37
|
- **defaultOpen**: boolean (default: false) - Initial state when open is not provided.
|
|
38
|
-
- **onOpenChange**: (open: boolean) => void - Called
|
|
38
|
+
- **onOpenChange**: (open: boolean, details: OpenChangeDetails) => void - Called before each library-requested state change, with \`details.reason\` (\`'trigger-press'\` for the right-click, long-press or keyboard request, \`'item-press'\`, \`'escape-key'\`, \`'outside-press'\`), \`details.event\` and \`details.cancel()\`.
|
|
39
39
|
- **onAfterOpen**: (payload) => void - Called after the open transition finishes.
|
|
40
40
|
- **onAfterClose**: (payload) => void - Called after the close transition finishes.
|
|
41
41
|
|
|
42
42
|
### Advanced Props
|
|
43
43
|
- **menu**: Omit<MenuProps, 'items'> - Overrides forwarded to the underlying Menu (header, footer, theme).
|
|
44
|
-
- **popup**: PopupMenu/Popover overrides (offset, closeOnEscape, ...). position and ref
|
|
44
|
+
- **popup**: PopupMenu/Popover overrides (position, offset, closeOnEscape, closeOnItemClick, ...). position places the menu relative to the pointer and defaults to 'bottom-start' (a responsive record keeps that default below its first breakpoint); collisionBoundary defaults to 'layoutViewport', so panning a pinch-zoomed page doesn't drag the menu along (submenus keep the visual viewport); ref is managed internally.
|
|
45
45
|
- **class**: string - Class on the wrapper around the target content.
|
|
46
46
|
|
|
47
47
|
## Behavior
|
|
48
48
|
|
|
49
49
|
- Right-click on the target opens the menu at the cursor via a virtual reference element.
|
|
50
50
|
- Keyboard: Shift+F10 or the ContextMenu key, while focus is inside the target, opens the menu anchored to the focused element.
|
|
51
|
-
- Touch: a 500 ms long-press opens the menu at the finger; moving or lifting the finger
|
|
52
|
-
- A second right-click elsewhere re-mounts the menu at the new point.
|
|
53
|
-
-
|
|
51
|
+
- Touch: a 500 ms long-press opens the menu at the finger. A finger may drift up to 8 px while it presses; moving further, or lifting earlier, cancels the press. The native \`contextmenu\` event Android Chrome sends with a long-press (before or just after the finger lifts) is part of the same gesture: the menu opens once, with one \`onOpenChange(true)\`.
|
|
52
|
+
- A second right-click within 8 px of the point the open menu is anchored to closes it; a right-click elsewhere re-mounts the menu at the new point.
|
|
53
|
+
- The browser's own context menu never opens over the open panel, its padding or its submenus. While the menu is enabled the wrapper sets \`-webkit-touch-callout: none\`, so iOS Safari's long-press callout does not compete with the long-press that opens the menu.
|
|
54
|
+
- A pointer open (right-click, long-press) focuses the menu itself; Shift+F10 and the ContextMenu key highlight the first row.
|
|
55
|
+
- Left-click outside, Escape, or selecting an item closes it. Selecting an item inside a submenu closes the submenu and the menu together, and focus returns to the element that had it before the menu opened.
|
|
54
56
|
- Submenus, keyboard navigation, and highlighting are inherited from Menu.
|
|
55
57
|
|
|
56
58
|
## Accessibility
|
|
57
59
|
|
|
58
60
|
The menu is a role="menu" with role="menuitem" children and full keyboard navigation (arrows, Home/End,
|
|
59
|
-
Enter, Escape, and ArrowRight/Left for submenus), plus type-ahead.
|
|
61
|
+
Enter, Escape, and ArrowRight/Left for submenus, mirrored in right-to-left text), plus type-ahead. Tab closes the
|
|
62
|
+
menu and returns focus to the element that had it before the menu opened. Keyboard users open it with
|
|
60
63
|
Shift+F10 or the ContextMenu key; touch users with a long-press. The target wrapper is a plain
|
|
61
64
|
element with contextmenu, keydown, and pointer handlers.
|
|
62
65
|
|
|
@@ -3,9 +3,11 @@ import type { MenuItem, MenuProps } from '../Menu/menu.props.js';
|
|
|
3
3
|
import type { PopupMenuProps } from '../PopupMenu/popupMenu.props.js';
|
|
4
4
|
import type { WithAttachments } from '../../types/props.js';
|
|
5
5
|
import type { ContextMenuThemeProps } from './contextMenu.theme.js';
|
|
6
|
+
import type { OpenChangeHandler } from '../../utils/openChange.js';
|
|
6
7
|
export type ContextMenuProps = WithAttachments<{
|
|
7
8
|
/**
|
|
8
|
-
* The menu items shown on right-click (Button, MenuOption, Separator,
|
|
9
|
+
* The menu items shown on right-click (Button, MenuOption, Separator, submenu, checkbox, radio
|
|
10
|
+
* group or group).
|
|
9
11
|
*/
|
|
10
12
|
items: MenuItem[];
|
|
11
13
|
/**
|
|
@@ -29,9 +31,13 @@ export type ContextMenuProps = WithAttachments<{
|
|
|
29
31
|
*/
|
|
30
32
|
defaultOpen?: boolean;
|
|
31
33
|
/**
|
|
32
|
-
* Called
|
|
34
|
+
* Called before the menu opens or closes, with the requested state and the change details
|
|
35
|
+
* (`reason`, `event`, `interaction`, `cancel()`): `'trigger-press'` for the right-click,
|
|
36
|
+
* long-press or keyboard request that opened it (or a second right-click on its anchor that
|
|
37
|
+
* closes it), `'item-press'`, `'escape-key'`, `'outside-press'` or `'focus-out'` (Tab) when it
|
|
38
|
+
* closes. `details.cancel()` keeps the menu as it is.
|
|
33
39
|
*/
|
|
34
|
-
onOpenChange?:
|
|
40
|
+
onOpenChange?: OpenChangeHandler;
|
|
35
41
|
/**
|
|
36
42
|
* Called after the open transition finishes.
|
|
37
43
|
*/
|
|
@@ -49,7 +55,10 @@ export type ContextMenuProps = WithAttachments<{
|
|
|
49
55
|
*/
|
|
50
56
|
theme?: ContextMenuThemeProps;
|
|
51
57
|
/**
|
|
52
|
-
* Additional PopupMenu/Popover overrides (position, offset, closeOnEscape,
|
|
58
|
+
* Additional PopupMenu/Popover overrides (position, offset, closeOnEscape, closeOnItemClick,
|
|
59
|
+
* ...). `position` places the menu relative to the pointer and defaults to `'bottom-start'`;
|
|
60
|
+
* a responsive record keeps that default below its first breakpoint. `collisionBoundary`
|
|
61
|
+
* defaults to `'layoutViewport'`, so panning a pinch-zoomed page doesn't drag the menu along.
|
|
53
62
|
*/
|
|
54
63
|
popup?: Omit<PopupMenuProps, 'menu' | 'trigger' | 'open' | 'defaultOpen' | 'onOpenChange' | 'onAfterOpen' | 'onAfterClose' | 'ref'>;
|
|
55
64
|
}>;
|
|
@@ -3,7 +3,7 @@ export declare const contextMenuTheme: {
|
|
|
3
3
|
root: (props?: (import("../../utils/cva/types.js").CVAVariantSchema<{
|
|
4
4
|
disabled: {
|
|
5
5
|
true: string;
|
|
6
|
-
false:
|
|
6
|
+
false: string;
|
|
7
7
|
};
|
|
8
8
|
}> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
|
|
9
9
|
panel: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
@@ -14,7 +14,7 @@ export declare const setContextMenuTheme: (theme: InferComponentTheme<{
|
|
|
14
14
|
root: (props?: (import("../../utils/cva/types.js").CVAVariantSchema<{
|
|
15
15
|
disabled: {
|
|
16
16
|
true: string;
|
|
17
|
-
false:
|
|
17
|
+
false: string;
|
|
18
18
|
};
|
|
19
19
|
}> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
|
|
20
20
|
panel: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
@@ -23,7 +23,7 @@ export declare const useContextMenuTheme: import("../../utils/cva/theme.js").Use
|
|
|
23
23
|
root: (props?: (import("../../utils/cva/types.js").CVAVariantSchema<{
|
|
24
24
|
disabled: {
|
|
25
25
|
true: string;
|
|
26
|
-
false:
|
|
26
|
+
false: string;
|
|
27
27
|
};
|
|
28
28
|
}> & import("../../utils/cva/types.js").CVAClassProp) | undefined) => string;
|
|
29
29
|
panel: (props?: import("../../utils/cva/types.js").CVAClassProp | undefined) => string;
|
|
@@ -2,13 +2,14 @@ import { setComponentTheme, useComponentTheme } from '../../utils/cva/index.js';
|
|
|
2
2
|
import { cva } from '../../utils/cva/index.js';
|
|
3
3
|
// The wrapper around the right-click target. Layout-neutral by default (the target owns
|
|
4
4
|
// its own box); `display: contents` is the usual override when the wrapper must disappear
|
|
5
|
-
// from a grid or flex parent.
|
|
5
|
+
// from a grid or flex parent. While the menu is enabled iOS Safari's own long-press callout
|
|
6
|
+
// stays off, so the long-press that opens the menu is not met by a second system menu.
|
|
6
7
|
const defaultContextMenuRoot = cva({
|
|
7
8
|
base: '',
|
|
8
9
|
variants: {
|
|
9
10
|
disabled: {
|
|
10
11
|
true: '',
|
|
11
|
-
false:
|
|
12
|
+
false: '[-webkit-touch-callout:none]'
|
|
12
13
|
}
|
|
13
14
|
},
|
|
14
15
|
defaultVariants: {
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
import type { Attachment } from 'svelte/attachments';
|
|
7
7
|
import Empty from '../Empty/Empty.svelte';
|
|
8
8
|
import Select from '../Form/Select/Select.svelte';
|
|
9
|
-
import NetworkIndicator from '../NetworkIndicator/NetworkIndicator.svelte';
|
|
10
9
|
import Pagination from '../Pagination/Pagination.svelte';
|
|
11
10
|
import ScrollArea from '../ScrollArea/ScrollArea.svelte';
|
|
12
11
|
import Skeleton from '../Skeleton/Skeleton.svelte';
|
|
@@ -155,6 +154,9 @@
|
|
|
155
154
|
return 40;
|
|
156
155
|
});
|
|
157
156
|
const viewportHeight = $derived(typeof height === 'number' ? `${height}px` : height);
|
|
157
|
+
// No request indicator is drawn: the app owns `loading` and the `onCellCommit` promise, so it
|
|
158
|
+
// shows progress however it likes
|
|
159
|
+
// (`api.isSaving` tracks pending commits). Assistive technology still hears that the table is busy.
|
|
158
160
|
const isSaving = $derived(model.pendingCommitCount > 0);
|
|
159
161
|
const isBusy = $derived(loading || isSaving);
|
|
160
162
|
const rowFlip = dataTableRowFlip(() => animateRows);
|
|
@@ -500,14 +502,6 @@
|
|
|
500
502
|
<DataTableToolbar {model} {classes} revision={modelRevision} {tableApi} />
|
|
501
503
|
|
|
502
504
|
<div class={classes.viewport({ fill: fillsParent })} style:height={viewportHeight}>
|
|
503
|
-
<NetworkIndicator
|
|
504
|
-
loading={isBusy}
|
|
505
|
-
color="primary"
|
|
506
|
-
height={2}
|
|
507
|
-
theme={{ motion: { duration: 120 } }}
|
|
508
|
-
label={isSaving ? t.dataTableSaving : t.dataTableLoading}
|
|
509
|
-
class={classes.savingIndicator()}
|
|
510
|
-
/>
|
|
511
505
|
<ScrollArea bind:viewportRef class={classes.scrollArea()} type="auto" label={t.dataTableLabel}>
|
|
512
506
|
<table
|
|
513
507
|
{@attach dataTableGridNavigation({
|
|
@@ -657,6 +651,7 @@
|
|
|
657
651
|
<span id={rowsPerPageId} class={classes.summary()}>{t.dataTableRowsPerPage}</span>
|
|
658
652
|
<Select
|
|
659
653
|
size="small"
|
|
654
|
+
{density}
|
|
660
655
|
triggerAttrs={{ 'aria-labelledby': rowsPerPageId }}
|
|
661
656
|
items={pageSizeItems}
|
|
662
657
|
value={String(tableState!.pagination.pageSize)}
|
|
@@ -40,7 +40,10 @@
|
|
|
40
40
|
if (target) {
|
|
41
41
|
target.tabIndex = 0;
|
|
42
42
|
target.focus();
|
|
43
|
+
// Pickers open with the editor: the select's list, and the date field's calendar (a click
|
|
44
|
+
// on its input opens it, while focus stays in the input for typing).
|
|
43
45
|
if (editor?.type === 'select' && target.matches('[role="combobox"]')) target.click();
|
|
46
|
+
if (editor?.type === 'date' && target instanceof HTMLInputElement) target.click();
|
|
44
47
|
}
|
|
45
48
|
if (target instanceof HTMLInputElement && target.type !== 'checkbox') target.select();
|
|
46
49
|
});
|
|
@@ -145,6 +148,7 @@
|
|
|
145
148
|
placeholder={editor.placeholder}
|
|
146
149
|
disabled={payload.pending}
|
|
147
150
|
value={payload.draft == null ? '' : String(payload.draft)}
|
|
151
|
+
inputAttrs={{ 'data-1p-ignore': true }}
|
|
148
152
|
onValueChange={(value) => payload.setDraft(value ?? '')}
|
|
149
153
|
/>
|
|
150
154
|
{:else if editor.type === 'number'}
|
|
@@ -163,6 +167,7 @@
|
|
|
163
167
|
{:else if editor.type === 'select'}
|
|
164
168
|
<Select
|
|
165
169
|
size="normal"
|
|
170
|
+
{density}
|
|
166
171
|
class={classes.editorField()}
|
|
167
172
|
theme={fieldTheme}
|
|
168
173
|
label={t.dataTableEditColumn(typeof config?.header === 'string' ? config.header : columnId)}
|
|
@@ -105,6 +105,7 @@
|
|
|
105
105
|
placeholder={config.filter.placeholder ?? t.filterValues}
|
|
106
106
|
value={typeof value === 'string' ? value : ''}
|
|
107
107
|
disabled={model.props.disabled}
|
|
108
|
+
inputAttrs={{ 'data-1p-ignore': true }}
|
|
108
109
|
onValueChange={(next) => model.setColumnFilter(column.id, next || undefined)}
|
|
109
110
|
/>
|
|
110
111
|
{:else if config.filter.type === 'number'}
|