entasis 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
- package/dist/attachments/disclosurePanel.svelte.js +277 -0
- package/dist/attachments/portal.d.ts +17 -1
- package/dist/attachments/portal.js +39 -2
- package/dist/attachments/spinnerOverlay.svelte.js +12 -0
- package/dist/attachments/transitionSize.d.ts +6 -0
- package/dist/attachments/transitionSize.js +30 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
- package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
- package/dist/components/AIAskUserQuestion/index.js +2 -0
- package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
- package/dist/components/AIAskUserQuestion/schemas.js +10 -3
- package/dist/components/AIChat/AIChat.svelte +10 -0
- package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
- package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
- package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
- package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
- package/dist/components/AIChat/AIChatSurface.svelte +30 -2
- package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
- package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
- package/dist/components/AIChat/aiChat.mcp.js +31 -15
- package/dist/components/AIChat/aiChat.props.d.ts +36 -10
- package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
- package/dist/components/AIChat/aiChat.theme.js +21 -4
- package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
- package/dist/components/AIChat/index.d.ts +1 -1
- package/dist/components/AIComposer/AIComposer.svelte +102 -5
- package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
- package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
- package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
- package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
- package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
- package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
- package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
- package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
- package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
- package/dist/components/AIComposer/aiComposer.theme.js +37 -5
- package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
- package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
- package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
- package/dist/components/AIContext/AIContext.svelte +7 -3
- package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
- package/dist/components/AIContext/aiContext.mcp.js +1 -1
- package/dist/components/AIContext/aiContext.props.d.ts +4 -1
- package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
- package/dist/components/AIContext/aiContext.theme.js +7 -2
- package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
- package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
- package/dist/components/AIMarker/AIMarker.svelte +2 -0
- package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
- package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
- package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
- package/dist/components/AIMarker/aiMarker.theme.js +2 -2
- package/dist/components/AIMessage/AIMessage.svelte +38 -16
- package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
- package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
- package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
- package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
- package/dist/components/AIMessage/aiMessage.theme.js +91 -32
- package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
- package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
- package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
- package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
- package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
- package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
- package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
- package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
- package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
- package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
- package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
- package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
- package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
- package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
- package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
- package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
- package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
- package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
- package/dist/components/AIThread/AIThread.svelte +378 -95
- package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
- package/dist/components/AIThread/AIThreadItems.svelte +266 -64
- package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
- package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
- package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
- package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
- package/dist/components/AIThread/aiThread.mcp.js +34 -20
- package/dist/components/AIThread/aiThread.props.d.ts +73 -8
- package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
- package/dist/components/AIThread/aiThread.theme.js +108 -9
- package/dist/components/AIThread/index.d.ts +1 -1
- package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
- package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
- package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
- package/dist/components/AIThread/threadRenderItems.js +265 -77
- package/dist/components/AIThread/threadScrollController.d.ts +0 -8
- package/dist/components/AIThread/threadScrollController.js +2 -39
- package/dist/components/AIThread/threadTools.d.ts +11 -0
- package/dist/components/AIThread/threadTools.js +79 -0
- package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
- package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
- package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
- package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
- package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
- package/dist/components/AITool/AITool.svelte +56 -21
- package/dist/components/AITool/AIToolCallList.svelte +79 -29
- package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
- package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
- package/dist/components/AITool/AIToolValueSection.svelte +126 -28
- package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolValueTree.svelte +11 -16
- package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
- package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
- package/dist/components/AITool/aiTool.mcp.js +36 -8
- package/dist/components/AITool/aiTool.props.d.ts +52 -6
- package/dist/components/AITool/aiTool.theme.d.ts +117 -39
- package/dist/components/AITool/aiTool.theme.js +144 -140
- package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
- package/dist/components/AITool/aiToolClock.svelte.js +62 -0
- package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
- package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
- package/dist/components/AITool/index.d.ts +2 -1
- package/dist/components/AITool/index.js +1 -0
- package/dist/components/AITool/toolRendering.d.ts +33 -1
- package/dist/components/AITool/toolRendering.js +179 -15
- package/dist/components/AITool/toolValueTree.d.ts +14 -1
- package/dist/components/AITool/toolValueTree.js +126 -27
- package/dist/components/Accordion/Accordion.svelte +109 -109
- package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
- package/dist/components/Accordion/AccordionPanel.svelte +64 -0
- package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
- package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
- package/dist/components/Accordion/accordion.attributes.js +20 -0
- package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
- package/dist/components/Accordion/accordion.mcp.js +78 -22
- package/dist/components/Accordion/accordion.props.d.ts +54 -10
- package/dist/components/Accordion/accordion.theme.d.ts +3 -0
- package/dist/components/Accordion/accordion.theme.js +4 -0
- package/dist/components/Accordion/index.d.ts +1 -0
- package/dist/components/Accordion/index.js +1 -0
- package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
- package/dist/components/Avatar/Avatar.svelte +60 -10
- package/dist/components/Avatar/AvatarGroup.svelte +9 -0
- package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
- package/dist/components/Avatar/avatar.mcp.js +13 -5
- package/dist/components/Avatar/avatar.props.d.ts +28 -1
- package/dist/components/Avatar/avatar.theme.js +3 -3
- package/dist/components/Avatar/index.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
- package/dist/components/Button/Button.svelte +35 -15
- package/dist/components/Button/button.mcp.d.ts +1 -1
- package/dist/components/Button/button.mcp.js +8 -4
- package/dist/components/Button/button.props.d.ts +23 -8
- package/dist/components/Button/button.theme.d.ts +12 -0
- package/dist/components/Button/button.theme.js +17 -4
- package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
- package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
- package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
- package/dist/components/Collapsible/Collapsible.svelte +125 -19
- package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
- package/dist/components/Collapsible/collapsible.attributes.js +17 -0
- package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
- package/dist/components/Collapsible/collapsible.mcp.js +62 -12
- package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
- package/dist/components/Collapsible/collapsible.theme.js +3 -1
- package/dist/components/Collapsible/index.d.ts +1 -0
- package/dist/components/Collapsible/index.js +1 -0
- package/dist/components/Command/Command.svelte +56 -14
- package/dist/components/Command/command.mcp.d.ts +1 -1
- package/dist/components/Command/command.mcp.js +12 -6
- package/dist/components/Command/command.props.d.ts +39 -6
- package/dist/components/Command/command.state.svelte.d.ts +40 -11
- package/dist/components/Command/command.state.svelte.js +75 -28
- package/dist/components/Command/command.theme.js +4 -3
- package/dist/components/Confirmation/Confirmation.svelte +72 -31
- package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
- package/dist/components/Confirmation/confirmation.mcp.js +5 -4
- package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
- package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
- package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
- package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
- package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
- package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
- package/dist/components/DataTable/DataTable.svelte +4 -9
- package/dist/components/DataTable/DataTableEditor.svelte +5 -0
- package/dist/components/DataTable/DataTableFilter.svelte +1 -0
- package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
- package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
- package/dist/components/DataTable/dataTable.mcp.js +4 -2
- package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
- package/dist/components/DataTable/dataTable.theme.js +9 -6
- package/dist/components/Dialog/Dialog.svelte +120 -35
- package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
- package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
- package/dist/components/Dialog/dialog.api.d.ts +65 -0
- package/dist/components/Dialog/dialog.api.js +1 -0
- package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
- package/dist/components/Dialog/dialog.attributes.js +19 -0
- package/dist/components/Dialog/dialog.indent.d.ts +6 -0
- package/dist/components/Dialog/dialog.indent.js +16 -0
- package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
- package/dist/components/Dialog/dialog.mcp.js +195 -22
- package/dist/components/Dialog/dialog.props.d.ts +102 -19
- package/dist/components/Dialog/dialog.snap.d.ts +40 -0
- package/dist/components/Dialog/dialog.snap.js +78 -0
- package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
- package/dist/components/Dialog/dialog.state.svelte.js +525 -66
- package/dist/components/Dialog/dialog.theme.d.ts +48 -0
- package/dist/components/Dialog/dialog.theme.js +32 -9
- package/dist/components/Dialog/index.d.ts +4 -1
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
- package/dist/components/DocumentViewer/documentOutput.js +2 -1
- package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
- package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
- package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
- package/dist/components/Form/Ask/Ask.svelte +9 -13
- package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
- package/dist/components/Form/Ask/ask.mcp.js +1 -1
- package/dist/components/Form/Ask/ask.props.d.ts +1 -1
- package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
- package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
- package/dist/components/Form/Autocomplete/index.d.ts +3 -0
- package/dist/components/Form/Autocomplete/index.js +2 -0
- package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
- package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
- package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
- package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
- package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
- package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
- package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
- package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
- package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
- package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
- package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
- package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
- package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
- package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
- package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
- package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
- package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
- package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
- package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
- package/dist/components/Form/Combobox/Combobox.svelte +145 -185
- package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
- package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
- package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
- package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
- package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.items.js +68 -0
- package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
- package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
- package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
- package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
- package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
- package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
- package/dist/components/Form/Combobox/combobox.theme.js +37 -1
- package/dist/components/Form/Combobox/index.d.ts +2 -1
- package/dist/components/Form/Combobox/index.js +1 -0
- package/dist/components/Form/DateInput/DateInput.svelte +11 -3
- package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
- package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
- package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
- package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
- package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
- package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
- package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
- package/dist/components/Form/Field/Field.svelte +256 -30
- package/dist/components/Form/Field/Field.svelte.d.ts +9 -0
- package/dist/components/Form/Field/FieldGroup.svelte +29 -0
- package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
- package/dist/components/Form/Field/field.d.ts +64 -8
- package/dist/components/Form/Field/field.mcp.d.ts +1 -1
- package/dist/components/Form/Field/field.mcp.js +158 -18
- package/dist/components/Form/Field/field.messages.d.ts +47 -0
- package/dist/components/Form/Field/field.messages.js +64 -0
- package/dist/components/Form/Field/field.state.svelte.d.ts +109 -3
- package/dist/components/Form/Field/field.state.svelte.js +508 -16
- package/dist/components/Form/Field/field.theme.d.ts +46 -0
- package/dist/components/Form/Field/field.theme.js +33 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
- package/dist/components/Form/Field/index.d.ts +5 -2
- package/dist/components/Form/Field/index.js +1 -0
- package/dist/components/Form/Field/schemas.js +7 -2
- package/dist/components/Form/File/FileInput.svelte +24 -3
- package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
- package/dist/components/Form/File/fileInput.mcp.js +1 -0
- package/dist/components/Form/Form/Form.svelte +47 -14
- package/dist/components/Form/Form/FormActions.svelte +3 -1
- package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
- package/dist/components/Form/Form/FormFieldRenderer.svelte +40 -2
- package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
- package/dist/components/Form/Form/form.d.ts +35 -6
- package/dist/components/Form/Form/form.mcp.d.ts +1 -1
- package/dist/components/Form/Form/form.mcp.js +113 -13
- package/dist/components/Form/Form/form.props.d.ts +32 -1
- package/dist/components/Form/Form/form.registry.d.ts +2 -2
- package/dist/components/Form/Form/form.registry.js +1 -4
- package/dist/components/Form/Form/form.state.svelte.d.ts +1138 -413
- package/dist/components/Form/Form/form.state.svelte.js +319 -26
- package/dist/components/Form/Form/index.d.ts +3 -1
- package/dist/components/Form/Form/visibility.d.ts +3096 -1831
- package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
- package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
- package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1022 -408
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
- package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
- package/dist/components/Form/NumberInput/index.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
- package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
- package/dist/components/Form/PasswordInput/Password.svelte +28 -1
- package/dist/components/Form/PasswordInput/index.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
- package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
- package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
- package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
- package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
- package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
- package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
- package/dist/components/Form/PinInput/PinInput.svelte +44 -9
- package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
- package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
- package/dist/components/Form/PinInput/index.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
- package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
- package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
- package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
- package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
- package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
- package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
- package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
- package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
- package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
- package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
- package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
- package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
- package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
- package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
- package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
- package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
- package/dist/components/Form/Select/Select.svelte +186 -48
- package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
- package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
- package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
- package/dist/components/Form/Select/index.d.ts +2 -1
- package/dist/components/Form/Select/index.js +1 -0
- package/dist/components/Form/Select/select.align.d.ts +5 -0
- package/dist/components/Form/Select/select.align.js +19 -5
- package/dist/components/Form/Select/select.attributes.d.ts +36 -0
- package/dist/components/Form/Select/select.attributes.js +27 -0
- package/dist/components/Form/Select/select.mcp.d.ts +1 -1
- package/dist/components/Form/Select/select.mcp.js +103 -18
- package/dist/components/Form/Select/select.props.d.ts +87 -10
- package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
- package/dist/components/Form/Select/select.state.svelte.js +354 -59
- package/dist/components/Form/Select/select.theme.d.ts +21 -0
- package/dist/components/Form/Select/select.theme.js +22 -0
- package/dist/components/Form/Slider/Slider.svelte +54 -14
- package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
- package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
- package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
- package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
- package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
- package/dist/components/Form/Slider/index.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.js +55 -11
- package/dist/components/Form/Slider/slider.props.d.ts +35 -2
- package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
- package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
- package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
- package/dist/components/Form/Slider/slider.theme.js +35 -17
- package/dist/components/Form/Switch/Switch.svelte +61 -38
- package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
- package/dist/components/Form/Switch/switch.mcp.js +25 -5
- package/dist/components/Form/Switch/switch.props.d.ts +14 -1
- package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
- package/dist/components/Form/Switch/switch.theme.js +8 -3
- package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
- package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
- package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
- package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
- package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
- package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
- package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
- package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
- package/dist/components/Form/TextArea/TextArea.svelte +8 -0
- package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
- package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
- package/dist/components/Form/TextInput/TextInput.svelte +8 -1
- package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
- package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
- package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
- package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
- package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
- package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
- package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
- package/dist/components/HoverCard/HoverCard.svelte +100 -10
- package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
- package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
- package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
- package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
- package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
- package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
- package/dist/components/HoverCard/hoverCard.theme.js +9 -2
- package/dist/components/HoverCard/index.d.ts +1 -0
- package/dist/components/HoverCard/index.js +1 -0
- package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
- package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
- package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
- package/dist/components/Kanban/kanban.theme.js +7 -3
- package/dist/components/Layout/layoutSpacing.d.ts +2 -2
- package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
- package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
- package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
- package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
- package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
- package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
- package/dist/components/Map/maplibre-cdn.js +3 -2
- package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
- package/dist/components/Markdown/markdown.mcp.js +2 -1
- package/dist/components/Markdown/markdown.theme.js +18 -9
- package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
- package/dist/components/Menu/Menu.svelte +3 -3
- package/dist/components/Menu/Menu.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
- package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
- package/dist/components/Menu/MenuFloating.svelte +421 -74
- package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
- package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
- package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
- package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
- package/dist/components/Menu/MenuSearchField.svelte +54 -0
- package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
- package/dist/components/Menu/MenuStacked.svelte +404 -158
- package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
- package/dist/components/Menu/index.d.ts +2 -1
- package/dist/components/Menu/index.js +1 -0
- package/dist/components/Menu/menu.attributes.d.ts +37 -0
- package/dist/components/Menu/menu.attributes.js +28 -0
- package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
- package/dist/components/Menu/menu.filter.svelte.js +143 -0
- package/dist/components/Menu/menu.mcp.d.ts +1 -1
- package/dist/components/Menu/menu.mcp.js +227 -17
- package/dist/components/Menu/menu.platform.d.ts +5 -0
- package/dist/components/Menu/menu.platform.js +11 -0
- package/dist/components/Menu/menu.props.d.ts +172 -9
- package/dist/components/Menu/menu.theme.d.ts +147 -0
- package/dist/components/Menu/menu.theme.js +101 -0
- package/dist/components/Menu/menuTree.d.ts +35 -1
- package/dist/components/Menu/menuTree.js +158 -1
- package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
- package/dist/components/MenuBar/menuBar.mcp.js +4 -2
- package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
- package/dist/components/MenuOption/MenuOption.svelte +5 -1
- package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
- package/dist/components/MenuOption/menuOption.mcp.js +8 -0
- package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
- package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
- package/dist/components/MenuOption/menuOption.theme.js +24 -4
- package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
- package/dist/components/Mermaid/mermaid.mcp.js +8 -8
- package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
- package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
- package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
- package/dist/components/Mermaid/mermaid.theme.js +26 -1
- package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
- package/dist/components/Meter/Meter.svelte +110 -24
- package/dist/components/Meter/Meter.svelte.d.ts +12 -12
- package/dist/components/Meter/meter.mcp.d.ts +1 -1
- package/dist/components/Meter/meter.mcp.js +23 -37
- package/dist/components/Meter/meter.props.d.ts +36 -44
- package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
- package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/index.d.ts +4 -0
- package/dist/components/NavigationMenu/index.js +3 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
- package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
- package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
- package/dist/components/Overlay/Overlay.svelte +19 -30
- package/dist/components/Overlay/index.d.ts +1 -0
- package/dist/components/Overlay/index.js +1 -0
- package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
- package/dist/components/Overlay/overlay.attributes.js +14 -0
- package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
- package/dist/components/Overlay/overlay.mcp.js +21 -3
- package/dist/components/Overlay/overlay.props.d.ts +8 -4
- package/dist/components/Popover/Popover.svelte +163 -52
- package/dist/components/Popover/Popover.svelte.d.ts +23 -2
- package/dist/components/Popover/PopoverSession.svelte +12 -0
- package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
- package/dist/components/Popover/index.d.ts +10 -2
- package/dist/components/Popover/index.js +4 -1
- package/dist/components/Popover/popover.api.d.ts +83 -0
- package/dist/components/Popover/popover.api.js +1 -0
- package/dist/components/Popover/popover.attributes.d.ts +32 -0
- package/dist/components/Popover/popover.attributes.js +28 -0
- package/dist/components/Popover/popover.claims.d.ts +19 -0
- package/dist/components/Popover/popover.claims.js +45 -0
- package/dist/components/Popover/popover.mcp.d.ts +1 -1
- package/dist/components/Popover/popover.mcp.js +163 -31
- package/dist/components/Popover/popover.position.d.ts +226 -0
- package/dist/components/Popover/popover.position.js +402 -0
- package/dist/components/Popover/popover.props.d.ts +179 -24
- package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
- package/dist/components/Popover/popover.state.svelte.js +1034 -194
- package/dist/components/Popover/popover.theme.d.ts +15 -0
- package/dist/components/Popover/popover.theme.js +27 -2
- package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
- package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
- package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
- package/dist/components/PopupMenu/popupMenu.context.js +52 -0
- package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
- package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
- package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
- package/dist/components/Progress/Progress.svelte +160 -0
- package/dist/components/Progress/Progress.svelte.d.ts +4 -0
- package/dist/components/Progress/index.d.ts +3 -0
- package/dist/components/Progress/index.js +2 -0
- package/dist/components/Progress/progress.mcp.d.ts +1 -0
- package/dist/components/Progress/progress.mcp.js +101 -0
- package/dist/components/Progress/progress.props.d.ts +79 -0
- package/dist/components/Progress/progress.props.js +1 -0
- package/dist/components/Progress/progress.theme.d.ts +129 -0
- package/dist/components/Progress/progress.theme.js +83 -0
- package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
- package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
- package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
- package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
- package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
- package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
- package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
- package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
- package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
- package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
- package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
- package/dist/components/RichTextInput/suggestions.js +2 -0
- package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
- package/dist/components/ScrollArea/index.d.ts +2 -1
- package/dist/components/ScrollArea/index.js +1 -0
- package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
- package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
- package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
- package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
- package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
- package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
- package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
- package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
- package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
- package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
- package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
- package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
- package/dist/components/Sidebar/SidebarAction.svelte +13 -3
- package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
- package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
- package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
- package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
- package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
- package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
- package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
- package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
- package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +1 -0
- package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
- package/dist/components/Sidebar/sidebar-position.js +31 -2
- package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
- package/dist/components/Sidebar/sidebar.attributes.js +29 -0
- package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
- package/dist/components/Sidebar/sidebar.mcp.js +45 -10
- package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
- package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
- package/dist/components/Sidebar/sidebar.theme.js +113 -62
- package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
- package/dist/components/Stepper/Stepper.svelte +2 -0
- package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
- package/dist/components/Stepper/stepper.mcp.js +1 -0
- package/dist/components/Stepper/stepper.props.d.ts +5 -0
- package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
- package/dist/components/Stepper/stepper.state.svelte.js +31 -12
- package/dist/components/Tabbar/Tabbar.svelte +55 -16
- package/dist/components/Tabbar/index.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.js +26 -9
- package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
- package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
- package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
- package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
- package/dist/components/Tabs/Tabs.svelte +73 -16
- package/dist/components/Tabs/index.d.ts +2 -1
- package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
- package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
- package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
- package/dist/components/Tabs/tabs.mcp.js +22 -4
- package/dist/components/Tabs/tabs.props.d.ts +39 -12
- package/dist/components/Tabs/tabs.theme.js +3 -1
- package/dist/components/Theme/Theme.svelte +44 -27
- package/dist/components/Theme/helper.d.ts +16 -2
- package/dist/components/Theme/helper.js +46 -4
- package/dist/components/Theme/theme.mcp.d.ts +1 -1
- package/dist/components/Theme/theme.mcp.js +103 -0
- package/dist/components/Theme/theme.props.d.ts +16 -0
- package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
- package/dist/components/Theme/theme.state.svelte.js +18 -1
- package/dist/components/Toast/Toast.svelte +184 -39
- package/dist/components/Toast/Toaster.svelte +14 -10
- package/dist/components/Toast/index.d.ts +1 -0
- package/dist/components/Toast/toast.mcp.d.ts +1 -1
- package/dist/components/Toast/toast.mcp.js +47 -6
- package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
- package/dist/components/Toast/toast.state.svelte.js +513 -68
- package/dist/components/Toast/toast.theme.js +1 -1
- package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
- package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
- package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
- package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
- package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
- package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
- package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
- package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
- package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
- package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
- package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
- package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
- package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
- package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
- package/dist/components/Tooltip/Tooltip.svelte +4 -12
- package/dist/components/Tooltip/TooltipHost.svelte +136 -15
- package/dist/components/Tooltip/index.d.ts +1 -0
- package/dist/components/Tooltip/index.js +1 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
- package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
- package/dist/components/Tooltip/tooltip.attributes.js +28 -0
- package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
- package/dist/components/Tooltip/tooltip.mcp.js +111 -10
- package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
- package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
- package/dist/components/Tooltip/tooltip.surface.js +42 -0
- package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
- package/dist/components/Utils/BeforeHydratation.svelte +14 -3
- package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
- package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
- package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
- package/dist/generated/componentAliases.d.ts +3 -0
- package/dist/generated/componentAliases.js +3 -0
- package/dist/generated/componentContract.d.ts +79 -34
- package/dist/generated/componentContract.js +225 -6
- package/dist/generated/componentMcpRegistry.js +6 -0
- package/dist/i18n/ar.js +107 -3
- package/dist/i18n/context.svelte.d.ts +6 -0
- package/dist/i18n/context.svelte.js +12 -0
- package/dist/i18n/de.js +101 -3
- package/dist/i18n/en.d.ts +91 -2
- package/dist/i18n/en.js +101 -3
- package/dist/i18n/es.js +101 -3
- package/dist/i18n/fr.js +101 -3
- package/dist/i18n/ja.js +101 -3
- package/dist/i18n/pt.js +101 -3
- package/dist/i18n/zh.js +101 -3
- package/dist/tailwind/geometry.js +7 -0
- package/dist/tailwind/global.js +31 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/types.mcp.d.ts +1 -1
- package/dist/types/types.mcp.js +23 -0
- package/dist/utils/cspNonce.d.ts +16 -0
- package/dist/utils/cspNonce.js +39 -0
- package/dist/utils/cva/merge.d.ts +5 -1
- package/dist/utils/cva/merge.js +6 -4
- package/dist/utils/focus.d.ts +34 -0
- package/dist/utils/focus.js +93 -0
- package/dist/utils/focusHistory.d.ts +21 -0
- package/dist/utils/focusHistory.js +99 -0
- package/dist/utils/handlers.d.ts +7 -0
- package/dist/utils/handlers.js +14 -0
- package/dist/utils/hoverIntent.d.ts +42 -0
- package/dist/utils/hoverIntent.js +57 -0
- package/dist/utils/id.d.ts +7 -0
- package/dist/utils/id.js +15 -0
- package/dist/utils/layers.svelte.d.ts +32 -4
- package/dist/utils/layers.svelte.js +214 -21
- package/dist/utils/listFilter.d.ts +44 -0
- package/dist/utils/listFilter.js +130 -0
- package/dist/utils/match.d.ts +35 -0
- package/dist/utils/match.js +36 -0
- package/dist/utils/number.d.ts +126 -0
- package/dist/utils/number.js +401 -0
- package/dist/utils/openChange.d.ts +88 -0
- package/dist/utils/openChange.js +71 -0
- package/dist/utils/openLifecycle.svelte.d.ts +41 -0
- package/dist/utils/openLifecycle.svelte.js +134 -0
- package/dist/utils/pointerDrag.d.ts +10 -0
- package/dist/utils/pointerDrag.js +37 -2
- package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
- package/dist/utils/pragmaticDragAndDrop.js +8 -3
- package/dist/utils/range.d.ts +62 -0
- package/dist/utils/range.js +70 -0
- package/dist/utils/requestNativeSubmit.d.ts +17 -0
- package/dist/utils/requestNativeSubmit.js +47 -0
- package/dist/utils/safeArea.svelte.d.ts +10 -1
- package/dist/utils/safeArea.svelte.js +19 -11
- package/dist/utils/stateAttributes.d.ts +108 -0
- package/dist/utils/stateAttributes.js +78 -0
- package/dist/utils/swipeVelocity.d.ts +32 -0
- package/dist/utils/swipeVelocity.js +59 -0
- package/dist/utils/timer.svelte.d.ts +65 -2
- package/dist/utils/timer.svelte.js +159 -25
- package/dist/utils/trigger.d.ts +41 -0
- package/dist/utils/trigger.js +103 -0
- package/dist/utils/typeahead.d.ts +9 -0
- package/dist/utils/typeahead.js +21 -9
- package/dist/utils/useDndList.svelte.d.ts +1 -1
- package/dist/utils/useDndList.svelte.js +6 -23
- package/dist/utils/useFocusScope.svelte.d.ts +29 -0
- package/dist/utils/useFocusScope.svelte.js +189 -27
- package/dist/utils/useHoverAction.svelte.d.ts +44 -4
- package/dist/utils/useHoverAction.svelte.js +161 -51
- package/dist/utils/useKeyDown.svelte.d.ts +19 -2
- package/dist/utils/useKeyDown.svelte.js +19 -12
- package/dist/utils/useListNavigation.svelte.d.ts +94 -13
- package/dist/utils/useListNavigation.svelte.js +261 -35
- package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
- package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
- package/dist/utils/useNavigation.svelte.d.ts +36 -3
- package/dist/utils/useNavigation.svelte.js +699 -332
- package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
- package/dist/utils/usePressAndHold.svelte.js +191 -0
- package/dist/utils/useScrollLock.svelte.d.ts +20 -1
- package/dist/utils/useScrollLock.svelte.js +54 -13
- package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
- package/dist/utils/useSlidingIndicator.svelte.js +27 -5
- package/dist/utils/useTabBridge.svelte.d.ts +20 -0
- package/dist/utils/useTabBridge.svelte.js +109 -0
- package/dist/utils/values.d.ts +15 -0
- package/dist/utils/values.js +49 -0
- package/package.json +31 -2
- package/dist/generated/componentMcpRegistry.d.ts +0 -142
- package/dist/utils/useDrag.svelte.d.ts +0 -11
- package/dist/utils/useDrag.svelte.js +0 -55
|
@@ -1,41 +1,152 @@
|
|
|
1
|
+
import { untrack } from 'svelte';
|
|
2
|
+
import { on } from 'svelte/events';
|
|
1
3
|
import { useTheme } from '../Theme/theme.state.svelte.js';
|
|
4
|
+
import { getDeepActiveElement } from '../../utils/focus.js';
|
|
2
5
|
import { useHoverAction } from '../../utils/useHoverAction.svelte.js';
|
|
3
|
-
import {
|
|
6
|
+
import { isRestoringFocus } from '../../utils/useFocusScope.svelte.js';
|
|
7
|
+
import { requestTooltipChange, watchTooltipContentHover } from './tooltip.surface.js';
|
|
4
8
|
const FOCUSABLE = 'a[href], button, input, select, textarea, summary, [tabindex], [contenteditable]:not([contenteditable="false"])';
|
|
9
|
+
/**
|
|
10
|
+
* Least time, in milliseconds, a tooltip with hoverable content stays open after the pointer
|
|
11
|
+
* leaves its trigger, so the pointer can cross the gap to the content.
|
|
12
|
+
*/
|
|
13
|
+
export const TOOLTIP_CONTENT_GRACE = 100;
|
|
14
|
+
/** Whether the focus that just arrived shows a focus ring (keyboard focus, not a click or a tap). */
|
|
15
|
+
const showsFocusRing = (target) => {
|
|
16
|
+
if (!(target instanceof Element))
|
|
17
|
+
return true;
|
|
18
|
+
try {
|
|
19
|
+
return target.matches(':focus-visible');
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// An engine without `:focus-visible` gets the tooltip on any focus, as it always did.
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
5
26
|
export const tooltip = (props) => {
|
|
6
27
|
const theme = useTheme();
|
|
7
28
|
let refElement = null;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
29
|
+
// A press closes the tooltip and keeps it closed until the pointer leaves or focus moves on.
|
|
30
|
+
let pressed = false;
|
|
31
|
+
// Focus that comes back with the window is not the user moving focus onto the trigger.
|
|
32
|
+
let windowReturning = false;
|
|
33
|
+
let overContent = false;
|
|
34
|
+
let hideTimer = null;
|
|
35
|
+
const clearHideTimer = () => {
|
|
36
|
+
if (hideTimer !== null)
|
|
37
|
+
clearTimeout(hideTimer);
|
|
38
|
+
hideTimer = null;
|
|
39
|
+
};
|
|
40
|
+
// A tooltip opened by hover closes when the pointer leaves, but `mouseleave` is not guaranteed:
|
|
41
|
+
// a trigger re-rendered, moved or removed under the pointer (a navigation that updates the
|
|
42
|
+
// active item of a rail, say) may never send one. While such a tooltip shows, every pointer move
|
|
43
|
+
// that lands on neither the trigger nor the tooltip's content closes it after the usual grace.
|
|
44
|
+
let offStrayPointer = null;
|
|
45
|
+
let strayTimer = null;
|
|
46
|
+
const clearStrayTimer = () => {
|
|
47
|
+
if (strayTimer !== null)
|
|
48
|
+
clearTimeout(strayTimer);
|
|
49
|
+
strayTimer = null;
|
|
50
|
+
};
|
|
51
|
+
const stopWatchingPointer = () => {
|
|
52
|
+
offStrayPointer?.();
|
|
53
|
+
offStrayPointer = null;
|
|
54
|
+
clearStrayTimer();
|
|
55
|
+
};
|
|
56
|
+
const isOnTooltip = (ref, target) => {
|
|
57
|
+
if (!(target instanceof Node))
|
|
58
|
+
return false;
|
|
59
|
+
if (ref.isConnected && ref.contains(target))
|
|
60
|
+
return true;
|
|
61
|
+
const surface = theme.tooltipId ? ref.ownerDocument.getElementById(theme.tooltipId) : null;
|
|
62
|
+
return props.hoverable !== false && !!surface?.contains(target);
|
|
63
|
+
};
|
|
64
|
+
const watchPointer = (ref) => {
|
|
65
|
+
if (offStrayPointer)
|
|
66
|
+
return;
|
|
67
|
+
offStrayPointer = on(ref.ownerDocument, 'pointermove', (event) => {
|
|
68
|
+
if (event.pointerType === 'touch')
|
|
69
|
+
return;
|
|
70
|
+
if (theme.tooltip?.ref !== ref) {
|
|
71
|
+
stopWatchingPointer();
|
|
72
|
+
return;
|
|
13
73
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
74
|
+
const target = event.composedPath?.()[0] ?? event.target;
|
|
75
|
+
if (isOnTooltip(ref, target)) {
|
|
76
|
+
clearStrayTimer();
|
|
17
77
|
return;
|
|
18
|
-
theme.tooltip = null;
|
|
19
|
-
theme.lastTooltipClosed = Date.now();
|
|
20
|
-
},
|
|
21
|
-
get delay() {
|
|
22
|
-
const lastTooltipClosed = theme.lastTooltipClosed;
|
|
23
|
-
const now = Date.now();
|
|
24
|
-
if (lastTooltipClosed && now - lastTooltipClosed < (props.delay ?? 400)) {
|
|
25
|
-
return 0;
|
|
26
78
|
}
|
|
27
|
-
|
|
79
|
+
if (strayTimer !== null)
|
|
80
|
+
return;
|
|
81
|
+
const closeDelay = Math.max(0, props.closeDelay ?? 0);
|
|
82
|
+
const delay = props.hoverable === false ? closeDelay : Math.max(closeDelay, TOOLTIP_CONTENT_GRACE);
|
|
83
|
+
strayTimer = setTimeout(() => {
|
|
84
|
+
strayTimer = null;
|
|
85
|
+
// The hover the trigger still believes in is stale; drop it so a later enter starts fresh.
|
|
86
|
+
hoverAction.cancel();
|
|
87
|
+
hide({ reason: 'trigger-hover', event, interaction: 'mouse' });
|
|
88
|
+
}, delay);
|
|
89
|
+
}, { capture: true, passive: true });
|
|
90
|
+
};
|
|
91
|
+
const show = (init) => {
|
|
92
|
+
const ref = refElement;
|
|
93
|
+
clearHideTimer();
|
|
94
|
+
if (!ref || props.disabled || pressed)
|
|
95
|
+
return;
|
|
96
|
+
if (requestTooltipChange(theme, { ...props, ref }, init) && init.interaction === 'mouse') {
|
|
97
|
+
watchPointer(ref);
|
|
28
98
|
}
|
|
29
|
-
});
|
|
30
|
-
const show = (ref) => {
|
|
31
|
-
theme.tooltip = { ...props, ref };
|
|
32
99
|
};
|
|
33
|
-
const hide = (
|
|
34
|
-
|
|
100
|
+
const hide = (init) => {
|
|
101
|
+
clearHideTimer();
|
|
102
|
+
stopWatchingPointer();
|
|
103
|
+
// The content goes away with the tooltip, without telling the trigger the pointer left it.
|
|
104
|
+
overContent = false;
|
|
105
|
+
const ref = refElement;
|
|
106
|
+
if (!ref || theme.tooltip?.ref !== ref)
|
|
35
107
|
return;
|
|
36
|
-
theme
|
|
37
|
-
theme.lastTooltipClosed = Date.now();
|
|
108
|
+
requestTooltipChange(theme, null, init);
|
|
38
109
|
};
|
|
110
|
+
// The pointer left the trigger or its content. Content that can be hovered keeps the tooltip
|
|
111
|
+
// open for a moment so the pointer can reach it; a re-entry or the next tooltip cancels or
|
|
112
|
+
// replaces the close, and the warm-up window for the next hover starts right now.
|
|
113
|
+
const scheduleHide = (init) => {
|
|
114
|
+
clearHideTimer();
|
|
115
|
+
const ref = refElement;
|
|
116
|
+
if (!ref || theme.tooltip?.ref !== ref)
|
|
117
|
+
return;
|
|
118
|
+
theme.hoverIntent.markClosed();
|
|
119
|
+
const closeDelay = Math.max(0, props.closeDelay ?? 0);
|
|
120
|
+
const delay = props.hoverable === false ? closeDelay : Math.max(closeDelay, TOOLTIP_CONTENT_GRACE);
|
|
121
|
+
if (delay === 0) {
|
|
122
|
+
hide(init);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
hideTimer = setTimeout(() => {
|
|
126
|
+
hideTimer = null;
|
|
127
|
+
if (overContent || hoverAction.isHovered)
|
|
128
|
+
return;
|
|
129
|
+
hide(init);
|
|
130
|
+
}, delay);
|
|
131
|
+
};
|
|
132
|
+
const hoverAction = useHoverAction({
|
|
133
|
+
isActive: () => !props.disabled,
|
|
134
|
+
onMouseEnter: (event) => {
|
|
135
|
+
show({ reason: 'trigger-hover', event, interaction: 'mouse' });
|
|
136
|
+
},
|
|
137
|
+
onMouseLeave: (event) => {
|
|
138
|
+
pressed = false;
|
|
139
|
+
scheduleHide({ reason: 'trigger-hover', event, interaction: 'mouse' });
|
|
140
|
+
},
|
|
141
|
+
get delay() {
|
|
142
|
+
return props.delay ?? 400;
|
|
143
|
+
},
|
|
144
|
+
// Right after another tooltip, hover card or hover popover, the next tooltip shows at once.
|
|
145
|
+
// TooltipHost reports the shared surface's closes to the group.
|
|
146
|
+
group: () => theme.hoverIntent,
|
|
147
|
+
// A tooltip often explains why its trigger is disabled.
|
|
148
|
+
skipDisabled: false
|
|
149
|
+
});
|
|
39
150
|
return (ref) => {
|
|
40
151
|
refElement = ref;
|
|
41
152
|
// Keyboard users reach the tooltip by focusing its trigger, so an element the browser
|
|
@@ -43,9 +154,79 @@ export const tooltip = (props) => {
|
|
|
43
154
|
if (!ref.matches(FOCUSABLE))
|
|
44
155
|
ref.tabIndex = 0;
|
|
45
156
|
const off = hoverAction.reference?.(ref);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
157
|
+
const press = (event) => {
|
|
158
|
+
if (props.closeOnClick === false)
|
|
159
|
+
return;
|
|
160
|
+
pressed = true;
|
|
161
|
+
hoverAction.cancel();
|
|
162
|
+
hide({ reason: 'trigger-press', event });
|
|
163
|
+
};
|
|
164
|
+
const win = ref.ownerDocument.defaultView;
|
|
165
|
+
let windowFocusTimer = null;
|
|
166
|
+
const offs = [
|
|
167
|
+
// A new hover on the trigger ends the wait to close and the press that closed it.
|
|
168
|
+
on(ref, 'mouseenter', () => {
|
|
169
|
+
clearHideTimer();
|
|
170
|
+
}),
|
|
171
|
+
on(ref, 'pointerenter', (event) => {
|
|
172
|
+
if (event.pointerType !== 'touch')
|
|
173
|
+
pressed = false;
|
|
174
|
+
}),
|
|
175
|
+
on(ref, 'pointerdown', (event) => {
|
|
176
|
+
// A touch never opens a tooltip, so there is nothing to close, and the press that
|
|
177
|
+
// follows is not a pointer leaving.
|
|
178
|
+
if (event.pointerType === 'touch' || event.button !== 0)
|
|
179
|
+
return;
|
|
180
|
+
press(event);
|
|
181
|
+
}),
|
|
182
|
+
// Enter or Space on a focused trigger: a click with no pointer behind it.
|
|
183
|
+
// A click from code, or from Enter in a form field, reaches a trigger nobody focused.
|
|
184
|
+
on(ref, 'click', (event) => {
|
|
185
|
+
if (event.detail === 0 && getDeepActiveElement(ref.ownerDocument) === ref)
|
|
186
|
+
press(event);
|
|
187
|
+
}),
|
|
188
|
+
// Keyboard users get the tooltip on focus when the focus ring shows; a click, a tap, focus
|
|
189
|
+
// the page gave back (a closing dialog) or the window returning do not open it. Screen
|
|
190
|
+
// readers get the text through aria-describedby.
|
|
191
|
+
on(ref, 'focusin', (event) => {
|
|
192
|
+
if (windowReturning || isRestoringFocus() || !showsFocusRing(event.target))
|
|
193
|
+
return;
|
|
194
|
+
show({ reason: 'trigger-focus', event, interaction: 'keyboard' });
|
|
195
|
+
}),
|
|
196
|
+
on(ref, 'focusout', (event) => {
|
|
197
|
+
pressed = false;
|
|
198
|
+
hide({ reason: 'trigger-focus', event, interaction: 'keyboard' });
|
|
199
|
+
}),
|
|
200
|
+
watchTooltipContentHover(ref, (inside, event) => {
|
|
201
|
+
overContent = inside;
|
|
202
|
+
if (inside)
|
|
203
|
+
clearHideTimer();
|
|
204
|
+
else if (!hoverAction.isHovered)
|
|
205
|
+
scheduleHide({ reason: 'trigger-hover', event, interaction: 'mouse' });
|
|
206
|
+
})
|
|
207
|
+
];
|
|
208
|
+
if (win) {
|
|
209
|
+
offs.push(on(win, 'blur', () => {
|
|
210
|
+
if (getDeepActiveElement(ref.ownerDocument) === ref)
|
|
211
|
+
windowReturning = true;
|
|
212
|
+
}), on(win, 'focus', () => {
|
|
213
|
+
// The trigger's own `focusin` for the return arrives around this event.
|
|
214
|
+
if (windowFocusTimer !== null)
|
|
215
|
+
clearTimeout(windowFocusTimer);
|
|
216
|
+
windowFocusTimer = setTimeout(() => {
|
|
217
|
+
windowFocusTimer = null;
|
|
218
|
+
windowReturning = false;
|
|
219
|
+
});
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
$effect(() => {
|
|
223
|
+
if (!props.disabled)
|
|
224
|
+
return;
|
|
225
|
+
untrack(() => {
|
|
226
|
+
pressed = false;
|
|
227
|
+
hide({ reason: 'imperative-action' });
|
|
228
|
+
});
|
|
229
|
+
});
|
|
49
230
|
$effect(() => {
|
|
50
231
|
const active = theme.tooltip?.ref === ref && theme.tooltipId;
|
|
51
232
|
if (!active)
|
|
@@ -61,13 +242,14 @@ export const tooltip = (props) => {
|
|
|
61
242
|
});
|
|
62
243
|
return () => {
|
|
63
244
|
off?.();
|
|
64
|
-
|
|
65
|
-
|
|
245
|
+
offs.forEach((stop) => stop());
|
|
246
|
+
clearHideTimer();
|
|
247
|
+
stopWatchingPointer();
|
|
248
|
+
if (windowFocusTimer !== null)
|
|
249
|
+
clearTimeout(windowFocusTimer);
|
|
66
250
|
hoverAction.destroy();
|
|
67
|
-
if (theme.tooltip?.ref === ref)
|
|
251
|
+
if (theme.tooltip?.ref === ref)
|
|
68
252
|
theme.tooltip = null;
|
|
69
|
-
theme.lastTooltipClosed = Date.now();
|
|
70
|
-
}
|
|
71
253
|
if (refElement === ref)
|
|
72
254
|
refElement = null;
|
|
73
255
|
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The styling hooks a tooltip exposes. Attributes are presence attributes (`''` while the state
|
|
3
|
+
* holds, omitted otherwise) unless the description says they carry a value. The surface is the
|
|
4
|
+
* `role="tooltip"` element a tooltip's `class` and theme style.
|
|
5
|
+
*/
|
|
6
|
+
export declare const tooltipDataAttributes: {
|
|
7
|
+
readonly 'data-open': "On the surface: present while the tooltip shows.";
|
|
8
|
+
readonly 'data-closed': "On the surface: present while its exit transition plays.";
|
|
9
|
+
readonly 'data-entering': "On the surface: present while the enter transition plays.";
|
|
10
|
+
readonly 'data-exiting': "On the surface: present while the exit transition plays.";
|
|
11
|
+
readonly 'data-side': "On the surface: the side of the trigger it sits on after flipping, `top`, `right`, `bottom` or `left`.";
|
|
12
|
+
readonly 'data-align': "On the surface: `start`, `center` or `end`, how it lines up with the trigger.";
|
|
13
|
+
readonly 'data-anchor-hidden': "On the surface: present while the trigger is scrolled out of view.";
|
|
14
|
+
readonly 'data-instant': "On the surface: present while it moved straight from one trigger to another, which plays no transition.";
|
|
15
|
+
readonly 'data-color': "On the surface: the resolved `color`.";
|
|
16
|
+
readonly 'data-size': "On the surface: the resolved `size`.";
|
|
17
|
+
readonly 'data-variant': "On the surface: the resolved `variant`.";
|
|
18
|
+
readonly 'data-popup-open': "On the trigger: present while its tooltip shows.";
|
|
19
|
+
readonly 'data-popup-side': "On the trigger: the surface's `data-side` while it is placed.";
|
|
20
|
+
};
|
|
21
|
+
/** The name of a tooltip data attribute. */
|
|
22
|
+
export type TooltipDataAttribute = keyof typeof tooltipDataAttributes;
|
|
23
|
+
/** Written by the placement on the positioned wrapper and inherited by the surface. */
|
|
24
|
+
export declare const tooltipCssVariables: {
|
|
25
|
+
readonly '--available-width': "The width in px the surface can take before it reaches the viewport edges, minus 20px.";
|
|
26
|
+
readonly '--available-height': "The room in px between the trigger and the viewport edge on the surface's side, minus 20px.";
|
|
27
|
+
readonly '--anchor-width': "The trigger's width in px, snapped to the device pixel grid.";
|
|
28
|
+
readonly '--anchor-height': "The trigger's height in px, snapped to the device pixel grid.";
|
|
29
|
+
readonly '--transform-origin': "The surface corner facing the trigger, the point it scales from.";
|
|
30
|
+
};
|
|
31
|
+
/** The name of a tooltip CSS variable. */
|
|
32
|
+
export type TooltipCssVariable = keyof typeof tooltipCssVariables;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The styling hooks a tooltip exposes. Attributes are presence attributes (`''` while the state
|
|
3
|
+
* holds, omitted otherwise) unless the description says they carry a value. The surface is the
|
|
4
|
+
* `role="tooltip"` element a tooltip's `class` and theme style.
|
|
5
|
+
*/
|
|
6
|
+
export const tooltipDataAttributes = {
|
|
7
|
+
'data-open': 'On the surface: present while the tooltip shows.',
|
|
8
|
+
'data-closed': 'On the surface: present while its exit transition plays.',
|
|
9
|
+
'data-entering': 'On the surface: present while the enter transition plays.',
|
|
10
|
+
'data-exiting': 'On the surface: present while the exit transition plays.',
|
|
11
|
+
'data-side': 'On the surface: the side of the trigger it sits on after flipping, `top`, `right`, `bottom` or `left`.',
|
|
12
|
+
'data-align': 'On the surface: `start`, `center` or `end`, how it lines up with the trigger.',
|
|
13
|
+
'data-anchor-hidden': 'On the surface: present while the trigger is scrolled out of view.',
|
|
14
|
+
'data-instant': 'On the surface: present while it moved straight from one trigger to another, which plays no transition.',
|
|
15
|
+
'data-color': 'On the surface: the resolved `color`.',
|
|
16
|
+
'data-size': 'On the surface: the resolved `size`.',
|
|
17
|
+
'data-variant': 'On the surface: the resolved `variant`.',
|
|
18
|
+
'data-popup-open': 'On the trigger: present while its tooltip shows.',
|
|
19
|
+
'data-popup-side': "On the trigger: the surface's `data-side` while it is placed."
|
|
20
|
+
};
|
|
21
|
+
/** Written by the placement on the positioned wrapper and inherited by the surface. */
|
|
22
|
+
export const tooltipCssVariables = {
|
|
23
|
+
'--available-width': 'The width in px the surface can take before it reaches the viewport edges, minus 20px.',
|
|
24
|
+
'--available-height': "The room in px between the trigger and the viewport edge on the surface's side, minus 20px.",
|
|
25
|
+
'--anchor-width': "The trigger's width in px, snapped to the device pixel grid.",
|
|
26
|
+
'--anchor-height': "The trigger's height in px, snapped to the device pixel grid.",
|
|
27
|
+
'--transform-origin': 'The surface corner facing the trigger, the point it scales from.'
|
|
28
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const tooltipDescription = "\n# Tooltip\n\nContextual information shown on hover or keyboard focus. Two forms share one surface:\n\n- `<Tooltip>` \u2014 a component with a `trigger` prop, like every other overlay.\n- `tooltip()` \u2014 the underlying attachment, for elements you already render yourself.\n\nBoth are rendered by the single tooltip surface that `<Theme>` mounts (`TooltipHost`).\n\n## Basic Usage\n\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Click to submit\" trigger={{ content: 'Submit', variant: 'outline' }} />\n```\n\n## Props\n\n- **content**: string | Snippet (required) - Tooltip body\n- **trigger**: Snippet<[Attachment<HTMLElement>]> | ButtonProps & { content?: string } (required) -\n A snippet receives the tooltip attachment and spreads it on its own element; an element the\n browser cannot focus (a span, an icon) gets `tabindex=\"0\"` so keyboard focus shows the tooltip.\n Button props render a Button carrying it; `children` (a string or a snippet) replaces\n `content` for a richer body\n- **open**: boolean (default: false) - Shows the tooltip without hover or focus; bindable\n- **defaultOpen**: boolean (default: false) - Initial open state when `open` is not provided\n- **onOpenChange**: (open: boolean) => void - Called whenever the tooltip becomes visible or hidden,\n hover and focus included\n- **position**: Placement (default: 'top') - Tooltip position relative to the trigger\n - Options: 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end'\n- **size**: 'small' | 'normal' | 'large' (default: 'normal') - Visual size\n- **color**: Colors (default: 'neutral') - Color theme\n- **variant**: 'solid' | 'outline' | 'soft' (default: 'solid') - Visual style matching Chip\n- **delay**: number (default: 400) - Delay in ms before showing tooltip; zero shows immediately\n- **offset**: number - Distance from the trigger in pixels\n- **class**: string - Additional CSS classes\n- **transition**: FSOProps - Custom transition configuration\n- **theme**: TooltipThemeProps - Per-instance theme overrides\n- **onAfterOpen**: () => void - Callback after the opening transition completes\n- **onAfterClose**: () => void - Callback after the closing transition completes\n\nEvery prop except `trigger`, `open`, `defaultOpen` and `onOpenChange` is also an option of the\n`tooltip()` attachment.\n\n## Examples\n\n### Button Trigger\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip\n\tcontent=\"This is helpful information\"\n\ttrigger={{ content: 'Hover me', variant: 'outline', color: 'neutral' }}\n/>\n```\n\n### Snippet Trigger\n```svelte\n<script lang=\"ts\">\n\timport type { Attachment } from 'svelte/attachments';\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n{#snippet helpTrigger(attach: Attachment<HTMLElement>)}\n\t<span class=\"underline\" {@attach attach}>What is this?</span>\n{/snippet}\n\n<Tooltip content=\"Anchored to any element you like\" trigger={helpTrigger} />\n```\n\n### Forced Open\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<!-- Useful for docs, screenshots and visual tests -->\n<Tooltip open content=\"Always visible\" trigger={{ content: 'Anchor', variant: 'outline' }} />\n```\n\n### Different Positions\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Top tooltip\" position=\"top\" trigger={{ content: 'Top' }} />\n<Tooltip content=\"Bottom tooltip\" position=\"bottom\" trigger={{ content: 'Bottom' }} />\n<Tooltip content=\"Left tooltip\" position=\"left\" trigger={{ content: 'Left' }} />\n<Tooltip content=\"Right tooltip\" position=\"right\" trigger={{ content: 'Right' }} />\n```\n\n### Different Colors\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Success!\" color=\"success\" trigger={{ content: 'Success' }} />\n<Tooltip content=\"Warning!\" color=\"warning\" trigger={{ content: 'Warning' }} />\n<Tooltip content=\"Error!\" color=\"danger\" trigger={{ content: 'Error' }} />\n```\n\n### Custom Delay\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Quick tooltip\" delay={100} trigger={{ content: 'Quick (100ms)' }} />\n<Tooltip content=\"Slow tooltip\" delay={1000} trigger={{ content: 'Slow (1000ms)' }} />\n```\n\n### Different Sizes and Variants\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Small tooltip\" size=\"small\" trigger={{ content: 'Small' }} />\n<Tooltip content=\"Large tooltip\" size=\"large\" trigger={{ content: 'Large' }} />\n<Tooltip content=\"Outlined tooltip\" variant=\"outline\" trigger={{ content: 'Outline' }} />\n<Tooltip content=\"Soft tooltip\" variant=\"soft\" trigger={{ content: 'Soft' }} />\n```\n\n### With Snippet Content\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n{#snippet richContent()}\n\t<div class=\"p-2\">\n\t\t<strong>Pro Tip</strong>\n\t\t<p class=\"text-sm\">Use Ctrl+S to save</p>\n\t</div>\n{/snippet}\n\n<Tooltip content={richContent} trigger={{ content: 'Keyboard Shortcuts' }} />\n```\n\n### With Callbacks\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip\n\tcontent=\"Tracked tooltip\"\n\tonAfterOpen={() => console.log('Tooltip opened')}\n\tonAfterClose={() => console.log('Tooltip closed')}\n\ttrigger={{ content: 'Track me' }}\n/>\n```\n\n## The tooltip() attachment\n\nUse the attachment when the element already exists in your markup \u2014 icons, table cells, list rows,\ndisabled wrappers \u2014 or inside another component's internals.\n\n```svelte\n<script lang=\"ts\">\n\timport { tooltip } from 'entasis/tooltip';\n</script>\n\n<button {@attach tooltip({ content: 'Click to submit' })}> Submit </button>\n\n<!-- On icons or any non-interactive element -->\n<span {@attach tooltip({ content: 'More information', position: 'right' })}> \u24D8 </span>\n\n<!-- Disabled elements do not fire events, so wrap them -->\n<span {@attach tooltip({ content: 'Feature coming soon' })}>\n\t<button disabled>Disabled Button</button>\n</span>\n```\n\nThe `<Tooltip>` component hands this same attachment to a snippet trigger, so the two forms are\ninterchangeable.\n\n## Accessibility\n\n- Shows on pointer hover and on keyboard focus (`focusin` / `focusout` on the trigger element), so\n attach it to focusable elements for keyboard users\n- Dismissed on mouse leave or blur\n- Non-interactive (cannot be clicked)\n- Renders with `role=\"tooltip\"` and sets `aria-describedby` on the trigger while visible (any previous value is restored on hide)\n- Does not block content behind it\n\n## Notes\n\n- Only one tooltip shows at a time; an `open` tooltip hands the surface over when another tooltip is\n hovered and reports that through `onOpenChange`\n- Automatically positions to stay in viewport using Floating UI\n- Uses smart delay: subsequent tooltips show instantly if within 400ms of previous\n- Brief content only (use Popover for interactive content)\n- The surface is a singleton (`TooltipHost`) rendered by `<Theme>`\n- Does not lock scroll or trap focus\n\n## Theme Customization\n\nThe Tooltip uses a theme object that can be customized using the `theme` prop or by setting a global theme.\n\n### Theme Structure\n\nThe theme object contains the following parts:\n- **root**: Main tooltip container styles\n\n### Theme Type Definition\n\n```typescript\nimport type { TooltipThemeProps } from 'entasis/tooltip';\n\n// Example theme customization\nconst customTheme: TooltipThemeProps = {\n root: {\n base: 'inline-flex w-fit items-center rounded-full border font-medium',\n size: {\n small: 'h-5 px-2 text-xs',\n normal: 'h-6 px-2.5 text-xs',\n large: 'h-7 px-3 text-sm'\n },\n\tcolor: {\n\t neutral: 'bg-neutral text-neutral-contrast',\n primary: 'bg-primary text-primary-contrast',\n danger: 'bg-danger text-danger-contrast',\n success: 'bg-success text-success-contrast',\n warning: 'bg-warning text-warning-contrast',\n\t info: 'bg-info text-info-contrast'\n\t},\n\tvariant: {\n\t solid: 'bg-color text-color-contrast',\n\t outline: 'border-color bg-transparent text-color-readable',\n\t soft: 'bg-color-muted text-color-muted-readable'\n }\n }\n};\n```\n\n### Available Variants\n\n**root**:\n- base: Base classes applied to all tooltips\n- Variants:\n - size: 'small' | 'normal' | 'large' - Controls text size and padding\n - color: 'primary' | 'secondary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info' - Color scheme\n - variant: 'solid' | 'outline' | 'soft' - Matches Chip's visual variants\n\n### Usage Examples\n\n**Basic Theme Override**:\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip\n\tcontent=\"Custom tooltip\"\n\ttheme={{ root: { base: 'rounded-lg lift-4 border-2', size: { normal: 'px-3 py-2 text-sm' } } }}\n\ttrigger={{ content: 'Hover me' }}\n/>\n```\n\n**Color Customization**:\n```svelte\n<script lang=\"ts\">\n\timport { tooltip } from 'entasis/tooltip';\n</script>\n\n<button\n\t{@attach tooltip({\n\t\tcontent: 'Success!',\n\t\tcolor: 'success',\n\t\ttheme: { root: { color: { success: 'bg-green-500 text-white lift-3' } } }\n\t})}\n>\n\tSuccess Tooltip\n</button>\n```\n\n**Global Theme Setting**:\n```svelte\n<script lang=\"ts\">\n\timport { setTooltipTheme } from 'entasis/tooltip';\n\n\tsetTooltipTheme({\n\t\troot: {\n\t\t\tbase: 'rounded-md lift-4 backdrop-blur-sm',\n\t\t\tsize: { normal: 'px-3 py-1.5 text-sm' },\n\t\t\tcolor: { neutral: 'bg-gray-900 text-white', primary: 'bg-blue-500 text-white' }\n\t\t}\n\t});\n</script>\n```\n\n## Motion\n\n- **motion** theme slot: one preset (no variants) \u2014 a short fade-and-rise, `duration: 'fast'`.\n- Resolved by the tooltip surface and handed to the underlying Popover, so it replaces the\n popover preset.\n- Ladder: `<Theme components={{ tooltip: { motion } }}>` \u2192 `setTooltipTheme({ motion })` \u2192\n `theme.motion` \u2192 the tooltip's `transition` option. Reduced motion collapses it to 0.\n- The tooltip surface is a singleton rendered by `<Theme>`, so a `setTooltipTheme` call\n made *below* `<Theme>` never reaches it. Call it at or above the `<Theme>` boundary, or\n use the `<Theme components={{ tooltip }}>` registry, which always applies.\n";
|
|
1
|
+
export declare const tooltipDescription = "\n# Tooltip\n\nContextual information shown on hover or on keyboard focus (when the focus ring shows). Two forms share one surface:\n\n- `<Tooltip>` \u2014 a component with a `trigger` prop, like every other overlay.\n- `tooltip()` \u2014 the underlying attachment, for elements you already render yourself.\n\nBoth are rendered by the single tooltip surface that `<Theme>` mounts (`TooltipHost`).\n\n## Basic Usage\n\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Click to submit\" trigger={{ content: 'Submit', variant: 'outline' }} />\n```\n\n## Props\n\n- **content**: string | Snippet (required) - Tooltip body\n- **trigger**: Snippet<[Attachment<HTMLElement>]> | ButtonProps & { content?: string } (required) -\n A snippet receives the tooltip attachment and spreads it on its own element; an element the\n browser cannot focus (a span, an icon) gets `tabindex=\"0\"` so keyboard focus shows the tooltip.\n Button props render a Button carrying it; `children` (a string or a snippet) replaces\n `content` for a richer body\n- **open**: boolean (default: false) - Shows the tooltip without hover or focus; bindable\n- **defaultOpen**: boolean (default: false) - Initial open state when `open` is not provided\n- **onOpenChange**: (open: boolean, details: OpenChangeDetails) => void - Called before the tooltip\n shows or hides, whatever causes it (hover, focus, a press on the trigger, Escape, an outside press).\n `details.reason` is `'trigger-hover'`, `'trigger-focus'`, `'trigger-press'`, `'outside-press'`,\n `'escape-key'` or `'imperative-action'`; `details.event` and `details.trigger` say what caused it, and\n `details.cancel()` keeps the tooltip as it was. When another tooltip takes the shared surface, the\n one it leaves is told with a close that cannot be cancelled. A change to the `open` prop is silent\n- **position**: Placement (default: 'top') - Tooltip position relative to the trigger\n - Options: 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end'\n- **size**: 'small' | 'normal' | 'large' (default: 'normal') - Visual size\n- **color**: Colors (default: 'neutral') - Color theme\n- **variant**: 'solid' | 'outline' | 'soft' (default: 'solid') - Visual style matching Chip\n- **delay**: number (default: 400) - Delay in ms before showing tooltip; zero shows immediately\n- **closeDelay**: number (default: 0) - Delay in ms between the pointer leaving the trigger (or the\n content) and the tooltip closing; moving to another tooltip's trigger within it hands the surface\n over without closing it. With `hoverable` content the pointer always gets at least 100 ms to reach it\n- **hoverable**: boolean (default: true) - The tooltip stays open while the pointer is over its content\n (WCAG 1.4.13), so its text can be read or selected and its links used. `false` makes the content\n ignore the pointer and closes the tooltip as soon as the pointer leaves the trigger\n- **closeOnClick**: boolean (default: true) - A press on the trigger (pointer, or Enter / Space) closes\n the tooltip, and it stays closed until the pointer leaves the trigger or focus moves away. `false`\n leaves it open\n- **disabled**: boolean (default: false) - Turns the tooltip off: hover and focus do not open it, an\n open one closes, and the trigger loses `aria-describedby`. Read live\n- **offset**: number - Distance from the trigger in pixels\n- **class**: string - Additional CSS classes\n- **transition**: FSOProps - Custom transition configuration\n- **theme**: TooltipThemeProps - Per-instance theme overrides\n- **onAfterOpen**: () => void - Callback after the opening transition completes\n- **onAfterClose**: () => void - Callback after the closing transition completes\n\nEvery prop except `trigger`, `open` and `defaultOpen` is also an option of the `tooltip()`\nattachment, `onOpenChange` included.\n\n## Examples\n\n### Button Trigger\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip\n\tcontent=\"This is helpful information\"\n\ttrigger={{ content: 'Hover me', variant: 'outline', color: 'neutral' }}\n/>\n```\n\n### Snippet Trigger\n```svelte\n<script lang=\"ts\">\n\timport type { Attachment } from 'svelte/attachments';\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n{#snippet helpTrigger(attach: Attachment<HTMLElement>)}\n\t<span class=\"underline\" {@attach attach}>What is this?</span>\n{/snippet}\n\n<Tooltip content=\"Anchored to any element you like\" trigger={helpTrigger} />\n```\n\n### Forced Open\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<!-- Useful for docs, screenshots and visual tests -->\n<Tooltip open content=\"Always visible\" trigger={{ content: 'Anchor', variant: 'outline' }} />\n```\n\n### Different Positions\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Top tooltip\" position=\"top\" trigger={{ content: 'Top' }} />\n<Tooltip content=\"Bottom tooltip\" position=\"bottom\" trigger={{ content: 'Bottom' }} />\n<Tooltip content=\"Left tooltip\" position=\"left\" trigger={{ content: 'Left' }} />\n<Tooltip content=\"Right tooltip\" position=\"right\" trigger={{ content: 'Right' }} />\n```\n\n### Different Colors\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Success!\" color=\"success\" trigger={{ content: 'Success' }} />\n<Tooltip content=\"Warning!\" color=\"warning\" trigger={{ content: 'Warning' }} />\n<Tooltip content=\"Error!\" color=\"danger\" trigger={{ content: 'Error' }} />\n```\n\n### Custom Delay\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Quick tooltip\" delay={100} trigger={{ content: 'Quick (100ms)' }} />\n<Tooltip content=\"Slow tooltip\" delay={1000} trigger={{ content: 'Slow (1000ms)' }} />\n```\n\n### Different Sizes and Variants\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip content=\"Small tooltip\" size=\"small\" trigger={{ content: 'Small' }} />\n<Tooltip content=\"Large tooltip\" size=\"large\" trigger={{ content: 'Large' }} />\n<Tooltip content=\"Outlined tooltip\" variant=\"outline\" trigger={{ content: 'Outline' }} />\n<Tooltip content=\"Soft tooltip\" variant=\"soft\" trigger={{ content: 'Soft' }} />\n```\n\n### With Snippet Content\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n{#snippet richContent()}\n\t<div class=\"p-2\">\n\t\t<strong>Pro Tip</strong>\n\t\t<p class=\"text-sm\">Use Ctrl+S to save</p>\n\t</div>\n{/snippet}\n\n<Tooltip content={richContent} trigger={{ content: 'Keyboard Shortcuts' }} />\n```\n\n### Hoverable Content\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n{#snippet help()}\n\tRead the <a href=\"/docs/shortcuts\">shortcut list</a>.\n{/snippet}\n\n<!-- The pointer can move onto the tooltip and use the link -->\n<Tooltip content={help} trigger={{ content: 'Shortcuts' }} />\n\n<!-- The pointer passes through, and the tooltip closes on leaving the trigger -->\n<Tooltip hoverable={false} content=\"Not interactive\" trigger={{ content: 'Hint' }} />\n```\n\n### Press and Disabled\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n\n\tlet busy = $state(false);\n</script>\n\n<!-- Closes when the trigger is pressed, and stays closed until the pointer leaves -->\n<Tooltip content=\"Save changes\" trigger={{ content: 'Save' }} />\n\n<!-- Stays open after a press -->\n<Tooltip closeOnClick={false} content=\"Save changes\" trigger={{ content: 'Save' }} />\n\n<!-- No tooltip while busy -->\n<Tooltip disabled={busy} content=\"Save changes\" trigger={{ content: 'Save' }} />\n```\n\n### With Callbacks\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip\n\tcontent=\"Tracked tooltip\"\n\tonOpenChange={(open, details) => console.log(open, details.reason)}\n\tonAfterOpen={() => console.log('Tooltip opened')}\n\tonAfterClose={() => console.log('Tooltip closed')}\n\ttrigger={{ content: 'Track me' }}\n/>\n```\n\n## The tooltip() attachment\n\nUse the attachment when the element already exists in your markup \u2014 icons, table cells, list rows,\ndisabled wrappers \u2014 or inside another component's internals.\n\n```svelte\n<script lang=\"ts\">\n\timport { tooltip } from 'entasis/tooltip';\n</script>\n\n<button {@attach tooltip({ content: 'Click to submit' })}> Submit </button>\n\n<!-- On icons or any non-interactive element -->\n<span {@attach tooltip({ content: 'More information', position: 'right' })}> \u24D8 </span>\n\n<!-- Disabled elements do not fire events, so wrap them -->\n<span {@attach tooltip({ content: 'Feature coming soon' })}>\n\t<button disabled>Disabled Button</button>\n</span>\n```\n\nThe `<Tooltip>` component hands this same attachment to a snippet trigger, so the two forms are\ninterchangeable.\n\n## Styling hooks\n\nThe surface (the `role=\"tooltip\"` element that `class` and the theme style) and the trigger carry state attributes.\n\nAttributes are presence attributes (set while the state holds, omitted otherwise) unless they carry a value.\n\n**Data attributes**\n- `data-open`: On the surface: present while the tooltip shows.\n- `data-closed`: On the surface: present while its exit transition plays.\n- `data-entering`: On the surface: present while the enter transition plays.\n- `data-exiting`: On the surface: present while the exit transition plays.\n- `data-side`: On the surface: the side of the trigger it sits on after flipping, `top`, `right`, `bottom` or `left`.\n- `data-align`: On the surface: `start`, `center` or `end`, how it lines up with the trigger.\n- `data-anchor-hidden`: On the surface: present while the trigger is scrolled out of view.\n- `data-instant`: On the surface: present while it moved straight from one trigger to another, which plays no transition.\n- `data-color`: On the surface: the resolved `color`.\n- `data-size`: On the surface: the resolved `size`.\n- `data-variant`: On the surface: the resolved `variant`.\n- `data-popup-open`: On the trigger: present while its tooltip shows.\n- `data-popup-side`: On the trigger: the surface's `data-side` while it is placed.\n\n**CSS variables**\n- `--available-width`: The width in px the surface can take before it reaches the viewport edges, minus 20px.\n- `--available-height`: The room in px between the trigger and the viewport edge on the surface's side, minus 20px.\n- `--anchor-width`: The trigger's width in px, snapped to the device pixel grid.\n- `--anchor-height`: The trigger's height in px, snapped to the device pixel grid.\n- `--transform-origin`: The surface corner facing the trigger, the point it scales from.\n\nThe typed maps `tooltipDataAttributes` and `tooltipCssVariables` (from `entasis/tooltip`) list each name with its meaning.\n\n```svelte\n<script>\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<!-- Nudge the surface away from the side it sits on while it enters -->\n<Tooltip content=\"Saved\" class=\"data-[side=top]:data-entering:-translate-y-0.5\" trigger={{ content: 'Save' }} />\n```\n\n## Accessibility\n\n- Shows on pointer hover and on keyboard focus (`focusin` / `focusout` on the trigger element), so\n attach it to focusable elements for keyboard users\n- Focus opens it only when the browser shows a focus ring: focus from a mouse press or a tap, focus a\n closing dialog or popover hands back, and focus that returns with the window do not\n- A touch tap is not a hover: the compatibility mouse events a tap fires never show the tooltip\n- The content can be hovered (WCAG 1.4.13: hoverable, dismissible, persistent): the pointer may move\n onto the tooltip, and Escape dismisses it\n- A trigger that appears under a resting pointer (a dialog closing over it, a list scrolled by the\n wheel) shows its tooltip once the pointer moves, not on arrival\n- Dismissed on mouse leave or blur\n- Brief, read-only content; use `hoverable={false}` for content that should never take the pointer\n- Renders with `role=\"tooltip\"` and sets `aria-describedby` on the trigger while visible (any previous value is restored on hide)\n- Does not block content behind it when `hoverable={false}`; the default hoverable content captures the pointer so it can be read\n\n## Notes\n\n- Only one tooltip shows at a time; an `open` tooltip hands the surface over when another tooltip is\n hovered and reports that through `onOpenChange`. Moving between triggers keeps the surface: it\n stays in place, resizes to the new content and carries `data-instant`; the tooltip it leaves gets\n `onAfterClose` and the new one `onAfterOpen`\n- Automatically positions to stay in viewport using Floating UI\n- Uses smart delay: right after a tooltip, a hover card or a hover-opened popover was open\n (within 400ms of it closing, or while a hover card or popover is still open), the next tooltip\n shows instantly. A tooltip inside an open hover card keeps its delay.\n- Brief content only: text and a link are fine, but use Popover for controls and forms\n- The surface is a singleton (`TooltipHost`) rendered by `<Theme>`\n- Does not lock scroll or trap focus\n\n## Theme Customization\n\nThe Tooltip uses a theme object that can be customized using the `theme` prop or by setting a global theme.\n\n### Theme Structure\n\nThe theme object contains the following parts:\n- **root**: Main tooltip container styles\n\n### Theme Type Definition\n\n```typescript\nimport type { TooltipThemeProps } from 'entasis/tooltip';\n\n// Example theme customization\nconst customTheme: TooltipThemeProps = {\n root: {\n base: 'inline-flex w-fit items-center rounded-full border font-medium',\n size: {\n small: 'h-5 px-2 text-xs',\n normal: 'h-6 px-2.5 text-xs',\n large: 'h-7 px-3 text-sm'\n },\n\tcolor: {\n\t neutral: 'bg-neutral text-neutral-contrast',\n primary: 'bg-primary text-primary-contrast',\n danger: 'bg-danger text-danger-contrast',\n success: 'bg-success text-success-contrast',\n warning: 'bg-warning text-warning-contrast',\n\t info: 'bg-info text-info-contrast'\n\t},\n\tvariant: {\n\t solid: 'bg-color text-color-contrast',\n\t outline: 'border-color bg-transparent text-color-readable',\n\t soft: 'bg-color-muted text-color-muted-readable'\n }\n }\n};\n```\n\n### Available Variants\n\n**root**:\n- base: Base classes applied to all tooltips\n- Variants:\n - size: 'small' | 'normal' | 'large' - Controls text size and padding\n - color: 'primary' | 'secondary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info' - Color scheme\n - variant: 'solid' | 'outline' | 'soft' - Matches Chip's visual variants\n\n### Usage Examples\n\n**Basic Theme Override**:\n```svelte\n<script lang=\"ts\">\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<Tooltip\n\tcontent=\"Custom tooltip\"\n\ttheme={{ root: { base: 'rounded-lg lift-4 border-2', size: { normal: 'px-3 py-2 text-sm' } } }}\n\ttrigger={{ content: 'Hover me' }}\n/>\n```\n\n**Color Customization**:\n```svelte\n<script lang=\"ts\">\n\timport { tooltip } from 'entasis/tooltip';\n</script>\n\n<button\n\t{@attach tooltip({\n\t\tcontent: 'Success!',\n\t\tcolor: 'success',\n\t\ttheme: { root: { color: { success: 'bg-green-500 text-white lift-3' } } }\n\t})}\n>\n\tSuccess Tooltip\n</button>\n```\n\n**Global Theme Setting**:\n```svelte\n<script lang=\"ts\">\n\timport { setTooltipTheme } from 'entasis/tooltip';\n\n\tsetTooltipTheme({\n\t\troot: {\n\t\t\tbase: 'rounded-md lift-4 backdrop-blur-sm',\n\t\t\tsize: { normal: 'px-3 py-1.5 text-sm' },\n\t\t\tcolor: { neutral: 'bg-gray-900 text-white', primary: 'bg-blue-500 text-white' }\n\t\t}\n\t});\n</script>\n```\n\n## Motion\n\n- **motion** theme slot: one preset (no variants) \u2014 a short fade-and-rise, `duration: 'fast'`.\n- Resolved by the tooltip surface and handed to the underlying Popover, so it replaces the\n popover preset.\n- Ladder: `<Theme components={{ tooltip: { motion } }}>` \u2192 `setTooltipTheme({ motion })` \u2192\n `theme.motion` \u2192 the tooltip's `transition` option. Reduced motion collapses it to 0.\n- The tooltip surface is a singleton rendered by `<Theme>`, so a `setTooltipTheme` call\n made *below* `<Theme>` never reaches it. Call it at or above the `<Theme>` boundary, or\n use the `<Theme components={{ tooltip }}>` registry, which always applies.\n";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const tooltipDescription = `
|
|
2
2
|
# Tooltip
|
|
3
3
|
|
|
4
|
-
Contextual information shown on hover or keyboard focus. Two forms share one surface:
|
|
4
|
+
Contextual information shown on hover or on keyboard focus (when the focus ring shows). Two forms share one surface:
|
|
5
5
|
|
|
6
6
|
- \`<Tooltip>\` — a component with a \`trigger\` prop, like every other overlay.
|
|
7
7
|
- \`tooltip()\` — the underlying attachment, for elements you already render yourself.
|
|
@@ -28,14 +28,29 @@ Both are rendered by the single tooltip surface that \`<Theme>\` mounts (\`Toolt
|
|
|
28
28
|
\`content\` for a richer body
|
|
29
29
|
- **open**: boolean (default: false) - Shows the tooltip without hover or focus; bindable
|
|
30
30
|
- **defaultOpen**: boolean (default: false) - Initial open state when \`open\` is not provided
|
|
31
|
-
- **onOpenChange**: (open: boolean) => void - Called
|
|
32
|
-
hover
|
|
31
|
+
- **onOpenChange**: (open: boolean, details: OpenChangeDetails) => void - Called before the tooltip
|
|
32
|
+
shows or hides, whatever causes it (hover, focus, a press on the trigger, Escape, an outside press).
|
|
33
|
+
\`details.reason\` is \`'trigger-hover'\`, \`'trigger-focus'\`, \`'trigger-press'\`, \`'outside-press'\`,
|
|
34
|
+
\`'escape-key'\` or \`'imperative-action'\`; \`details.event\` and \`details.trigger\` say what caused it, and
|
|
35
|
+
\`details.cancel()\` keeps the tooltip as it was. When another tooltip takes the shared surface, the
|
|
36
|
+
one it leaves is told with a close that cannot be cancelled. A change to the \`open\` prop is silent
|
|
33
37
|
- **position**: Placement (default: 'top') - Tooltip position relative to the trigger
|
|
34
38
|
- Options: 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end'
|
|
35
39
|
- **size**: 'small' | 'normal' | 'large' (default: 'normal') - Visual size
|
|
36
40
|
- **color**: Colors (default: 'neutral') - Color theme
|
|
37
41
|
- **variant**: 'solid' | 'outline' | 'soft' (default: 'solid') - Visual style matching Chip
|
|
38
42
|
- **delay**: number (default: 400) - Delay in ms before showing tooltip; zero shows immediately
|
|
43
|
+
- **closeDelay**: number (default: 0) - Delay in ms between the pointer leaving the trigger (or the
|
|
44
|
+
content) and the tooltip closing; moving to another tooltip's trigger within it hands the surface
|
|
45
|
+
over without closing it. With \`hoverable\` content the pointer always gets at least 100 ms to reach it
|
|
46
|
+
- **hoverable**: boolean (default: true) - The tooltip stays open while the pointer is over its content
|
|
47
|
+
(WCAG 1.4.13), so its text can be read or selected and its links used. \`false\` makes the content
|
|
48
|
+
ignore the pointer and closes the tooltip as soon as the pointer leaves the trigger
|
|
49
|
+
- **closeOnClick**: boolean (default: true) - A press on the trigger (pointer, or Enter / Space) closes
|
|
50
|
+
the tooltip, and it stays closed until the pointer leaves the trigger or focus moves away. \`false\`
|
|
51
|
+
leaves it open
|
|
52
|
+
- **disabled**: boolean (default: false) - Turns the tooltip off: hover and focus do not open it, an
|
|
53
|
+
open one closes, and the trigger loses \`aria-describedby\`. Read live
|
|
39
54
|
- **offset**: number - Distance from the trigger in pixels
|
|
40
55
|
- **class**: string - Additional CSS classes
|
|
41
56
|
- **transition**: FSOProps - Custom transition configuration
|
|
@@ -43,8 +58,8 @@ Both are rendered by the single tooltip surface that \`<Theme>\` mounts (\`Toolt
|
|
|
43
58
|
- **onAfterOpen**: () => void - Callback after the opening transition completes
|
|
44
59
|
- **onAfterClose**: () => void - Callback after the closing transition completes
|
|
45
60
|
|
|
46
|
-
Every prop except \`trigger\`, \`open
|
|
47
|
-
\`
|
|
61
|
+
Every prop except \`trigger\`, \`open\` and \`defaultOpen\` is also an option of the \`tooltip()\`
|
|
62
|
+
attachment, \`onOpenChange\` included.
|
|
48
63
|
|
|
49
64
|
## Examples
|
|
50
65
|
|
|
@@ -145,6 +160,41 @@ Every prop except \`trigger\`, \`open\`, \`defaultOpen\` and \`onOpenChange\` is
|
|
|
145
160
|
<Tooltip content={richContent} trigger={{ content: 'Keyboard Shortcuts' }} />
|
|
146
161
|
\`\`\`
|
|
147
162
|
|
|
163
|
+
### Hoverable Content
|
|
164
|
+
\`\`\`svelte
|
|
165
|
+
<script lang="ts">
|
|
166
|
+
import { Tooltip } from './index.ts';
|
|
167
|
+
</script>
|
|
168
|
+
|
|
169
|
+
{#snippet help()}
|
|
170
|
+
Read the <a href="/docs/shortcuts">shortcut list</a>.
|
|
171
|
+
{/snippet}
|
|
172
|
+
|
|
173
|
+
<!-- The pointer can move onto the tooltip and use the link -->
|
|
174
|
+
<Tooltip content={help} trigger={{ content: 'Shortcuts' }} />
|
|
175
|
+
|
|
176
|
+
<!-- The pointer passes through, and the tooltip closes on leaving the trigger -->
|
|
177
|
+
<Tooltip hoverable={false} content="Not interactive" trigger={{ content: 'Hint' }} />
|
|
178
|
+
\`\`\`
|
|
179
|
+
|
|
180
|
+
### Press and Disabled
|
|
181
|
+
\`\`\`svelte
|
|
182
|
+
<script lang="ts">
|
|
183
|
+
import { Tooltip } from './index.ts';
|
|
184
|
+
|
|
185
|
+
let busy = $state(false);
|
|
186
|
+
</script>
|
|
187
|
+
|
|
188
|
+
<!-- Closes when the trigger is pressed, and stays closed until the pointer leaves -->
|
|
189
|
+
<Tooltip content="Save changes" trigger={{ content: 'Save' }} />
|
|
190
|
+
|
|
191
|
+
<!-- Stays open after a press -->
|
|
192
|
+
<Tooltip closeOnClick={false} content="Save changes" trigger={{ content: 'Save' }} />
|
|
193
|
+
|
|
194
|
+
<!-- No tooltip while busy -->
|
|
195
|
+
<Tooltip disabled={busy} content="Save changes" trigger={{ content: 'Save' }} />
|
|
196
|
+
\`\`\`
|
|
197
|
+
|
|
148
198
|
### With Callbacks
|
|
149
199
|
\`\`\`svelte
|
|
150
200
|
<script lang="ts">
|
|
@@ -153,6 +203,7 @@ Every prop except \`trigger\`, \`open\`, \`defaultOpen\` and \`onOpenChange\` is
|
|
|
153
203
|
|
|
154
204
|
<Tooltip
|
|
155
205
|
content="Tracked tooltip"
|
|
206
|
+
onOpenChange={(open, details) => console.log(open, details.reason)}
|
|
156
207
|
onAfterOpen={() => console.log('Tooltip opened')}
|
|
157
208
|
onAfterClose={() => console.log('Tooltip closed')}
|
|
158
209
|
trigger={{ content: 'Track me' }}
|
|
@@ -183,22 +234,72 @@ disabled wrappers — or inside another component's internals.
|
|
|
183
234
|
The \`<Tooltip>\` component hands this same attachment to a snippet trigger, so the two forms are
|
|
184
235
|
interchangeable.
|
|
185
236
|
|
|
237
|
+
## Styling hooks
|
|
238
|
+
|
|
239
|
+
The surface (the \`role="tooltip"\` element that \`class\` and the theme style) and the trigger carry state attributes.
|
|
240
|
+
|
|
241
|
+
Attributes are presence attributes (set while the state holds, omitted otherwise) unless they carry a value.
|
|
242
|
+
|
|
243
|
+
**Data attributes**
|
|
244
|
+
- \`data-open\`: On the surface: present while the tooltip shows.
|
|
245
|
+
- \`data-closed\`: On the surface: present while its exit transition plays.
|
|
246
|
+
- \`data-entering\`: On the surface: present while the enter transition plays.
|
|
247
|
+
- \`data-exiting\`: On the surface: present while the exit transition plays.
|
|
248
|
+
- \`data-side\`: On the surface: the side of the trigger it sits on after flipping, \`top\`, \`right\`, \`bottom\` or \`left\`.
|
|
249
|
+
- \`data-align\`: On the surface: \`start\`, \`center\` or \`end\`, how it lines up with the trigger.
|
|
250
|
+
- \`data-anchor-hidden\`: On the surface: present while the trigger is scrolled out of view.
|
|
251
|
+
- \`data-instant\`: On the surface: present while it moved straight from one trigger to another, which plays no transition.
|
|
252
|
+
- \`data-color\`: On the surface: the resolved \`color\`.
|
|
253
|
+
- \`data-size\`: On the surface: the resolved \`size\`.
|
|
254
|
+
- \`data-variant\`: On the surface: the resolved \`variant\`.
|
|
255
|
+
- \`data-popup-open\`: On the trigger: present while its tooltip shows.
|
|
256
|
+
- \`data-popup-side\`: On the trigger: the surface's \`data-side\` while it is placed.
|
|
257
|
+
|
|
258
|
+
**CSS variables**
|
|
259
|
+
- \`--available-width\`: The width in px the surface can take before it reaches the viewport edges, minus 20px.
|
|
260
|
+
- \`--available-height\`: The room in px between the trigger and the viewport edge on the surface's side, minus 20px.
|
|
261
|
+
- \`--anchor-width\`: The trigger's width in px, snapped to the device pixel grid.
|
|
262
|
+
- \`--anchor-height\`: The trigger's height in px, snapped to the device pixel grid.
|
|
263
|
+
- \`--transform-origin\`: The surface corner facing the trigger, the point it scales from.
|
|
264
|
+
|
|
265
|
+
The typed maps \`tooltipDataAttributes\` and \`tooltipCssVariables\` (from \`entasis/tooltip\`) list each name with its meaning.
|
|
266
|
+
|
|
267
|
+
\`\`\`svelte
|
|
268
|
+
<script>
|
|
269
|
+
import { Tooltip } from './index.ts';
|
|
270
|
+
</script>
|
|
271
|
+
|
|
272
|
+
<!-- Nudge the surface away from the side it sits on while it enters -->
|
|
273
|
+
<Tooltip content="Saved" class="data-[side=top]:data-entering:-translate-y-0.5" trigger={{ content: 'Save' }} />
|
|
274
|
+
\`\`\`
|
|
275
|
+
|
|
186
276
|
## Accessibility
|
|
187
277
|
|
|
188
278
|
- Shows on pointer hover and on keyboard focus (\`focusin\` / \`focusout\` on the trigger element), so
|
|
189
279
|
attach it to focusable elements for keyboard users
|
|
280
|
+
- Focus opens it only when the browser shows a focus ring: focus from a mouse press or a tap, focus a
|
|
281
|
+
closing dialog or popover hands back, and focus that returns with the window do not
|
|
282
|
+
- A touch tap is not a hover: the compatibility mouse events a tap fires never show the tooltip
|
|
283
|
+
- The content can be hovered (WCAG 1.4.13: hoverable, dismissible, persistent): the pointer may move
|
|
284
|
+
onto the tooltip, and Escape dismisses it
|
|
285
|
+
- A trigger that appears under a resting pointer (a dialog closing over it, a list scrolled by the
|
|
286
|
+
wheel) shows its tooltip once the pointer moves, not on arrival
|
|
190
287
|
- Dismissed on mouse leave or blur
|
|
191
|
-
-
|
|
288
|
+
- Brief, read-only content; use \`hoverable={false}\` for content that should never take the pointer
|
|
192
289
|
- Renders with \`role="tooltip"\` and sets \`aria-describedby\` on the trigger while visible (any previous value is restored on hide)
|
|
193
|
-
- Does not block content behind it
|
|
290
|
+
- Does not block content behind it when \`hoverable={false}\`; the default hoverable content captures the pointer so it can be read
|
|
194
291
|
|
|
195
292
|
## Notes
|
|
196
293
|
|
|
197
294
|
- Only one tooltip shows at a time; an \`open\` tooltip hands the surface over when another tooltip is
|
|
198
|
-
hovered and reports that through \`onOpenChange
|
|
295
|
+
hovered and reports that through \`onOpenChange\`. Moving between triggers keeps the surface: it
|
|
296
|
+
stays in place, resizes to the new content and carries \`data-instant\`; the tooltip it leaves gets
|
|
297
|
+
\`onAfterClose\` and the new one \`onAfterOpen\`
|
|
199
298
|
- Automatically positions to stay in viewport using Floating UI
|
|
200
|
-
- Uses smart delay:
|
|
201
|
-
|
|
299
|
+
- Uses smart delay: right after a tooltip, a hover card or a hover-opened popover was open
|
|
300
|
+
(within 400ms of it closing, or while a hover card or popover is still open), the next tooltip
|
|
301
|
+
shows instantly. A tooltip inside an open hover card keeps its delay.
|
|
302
|
+
- Brief content only: text and a link are fine, but use Popover for controls and forms
|
|
202
303
|
- The surface is a singleton (\`TooltipHost\`) rendered by \`<Theme>\`
|
|
203
304
|
- Does not lock scroll or trap focus
|
|
204
305
|
|