entasis 0.10.2 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/attachments/disclosurePanel.svelte.d.ts +84 -0
- package/dist/attachments/disclosurePanel.svelte.js +277 -0
- package/dist/attachments/portal.d.ts +17 -1
- package/dist/attachments/portal.js +39 -2
- package/dist/attachments/spinnerOverlay.svelte.js +12 -0
- package/dist/attachments/transitionSize.d.ts +6 -0
- package/dist/attachments/transitionSize.js +30 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestion.svelte +131 -17
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte +26 -6
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFileStep.svelte.d.ts +6 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte +27 -53
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionFooter.svelte.d.ts +3 -4
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionHeader.svelte +19 -16
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte +180 -21
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionStep.svelte.d.ts +9 -1
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte +56 -0
- package/dist/components/AIAskUserQuestion/AIAskUserQuestionSummary.svelte.d.ts +4 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.d.ts +1 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.mcp.js +26 -8
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.props.d.ts +62 -5
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.d.ts +42 -0
- package/dist/components/AIAskUserQuestion/aiAskUserQuestion.theme.js +53 -12
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.d.ts +17 -1
- package/dist/components/AIAskUserQuestion/aiAskUserQuestionAnswers.js +56 -8
- package/dist/components/AIAskUserQuestion/index.d.ts +3 -1
- package/dist/components/AIAskUserQuestion/index.js +2 -0
- package/dist/components/AIAskUserQuestion/schemas.d.ts +44 -0
- package/dist/components/AIAskUserQuestion/schemas.js +10 -3
- package/dist/components/AIChat/AIChat.svelte +10 -0
- package/dist/components/AIChat/AIChat.svelte.d.ts +2 -2
- package/dist/components/AIChat/AIChatComposerSurface.svelte +23 -5
- package/dist/components/AIChat/AIChatComposerSurface.svelte.d.ts +5 -0
- package/dist/components/AIChat/AIChatSkeleton.svelte +29 -37
- package/dist/components/AIChat/AIChatSurface.svelte +30 -2
- package/dist/components/AIChat/AIChatSurface.svelte.d.ts +1 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte +11 -1
- package/dist/components/AIChat/AIChatThreadSurface.svelte.d.ts +3 -1
- package/dist/components/AIChat/aiChat.mcp.d.ts +1 -1
- package/dist/components/AIChat/aiChat.mcp.js +31 -15
- package/dist/components/AIChat/aiChat.props.d.ts +36 -10
- package/dist/components/AIChat/aiChat.theme.d.ts +9 -0
- package/dist/components/AIChat/aiChat.theme.js +21 -4
- package/dist/components/AIChat/aiChatSkeleton.props.d.ts +5 -0
- package/dist/components/AIChat/index.d.ts +1 -1
- package/dist/components/AIComposer/AIComposer.svelte +102 -5
- package/dist/components/AIComposer/AIComposer.svelte.d.ts +1 -0
- package/dist/components/AIComposer/AIComposerFooter.svelte +54 -12
- package/dist/components/AIComposer/AIComposerFooter.svelte.d.ts +2 -0
- package/dist/components/AIComposer/AIComposerQueue.svelte +8 -3
- package/dist/components/AIComposer/aiComposer.editor.theme.js +13 -2
- package/dist/components/AIComposer/aiComposer.mcp.d.ts +1 -1
- package/dist/components/AIComposer/aiComposer.mcp.js +15 -7
- package/dist/components/AIComposer/aiComposer.props.d.ts +27 -7
- package/dist/components/AIComposer/aiComposer.theme.d.ts +42 -3
- package/dist/components/AIComposer/aiComposer.theme.js +37 -5
- package/dist/components/AIComposer/aiComposerFileController.svelte.d.ts +20 -0
- package/dist/components/AIComposer/aiComposerFileController.svelte.js +75 -9
- package/dist/components/AIComposer/aiComposerSourceAdapter.js +22 -4
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.d.ts +12 -0
- package/dist/components/AIComposer/aiComposerSubmitController.svelte.js +16 -6
- package/dist/components/AIContext/AIContext.svelte +7 -3
- package/dist/components/AIContext/aiContext.mcp.d.ts +1 -1
- package/dist/components/AIContext/aiContext.mcp.js +1 -1
- package/dist/components/AIContext/aiContext.props.d.ts +4 -1
- package/dist/components/AIContext/aiContext.theme.d.ts +3 -0
- package/dist/components/AIContext/aiContext.theme.js +7 -2
- package/dist/components/AIConversation/AIConversation.svelte.d.ts +2 -2
- package/dist/components/AIFilePreview/aiFilePreview.theme.js +1 -1
- package/dist/components/AIMarker/AIMarker.svelte +2 -0
- package/dist/components/AIMarker/aiMarker.mcp.d.ts +1 -1
- package/dist/components/AIMarker/aiMarker.mcp.js +2 -0
- package/dist/components/AIMarker/aiMarker.props.d.ts +3 -0
- package/dist/components/AIMarker/aiMarker.theme.js +2 -2
- package/dist/components/AIMessage/AIMessage.svelte +38 -16
- package/dist/components/AIMessage/aiMessage.mcp.d.ts +1 -1
- package/dist/components/AIMessage/aiMessage.mcp.js +20 -6
- package/dist/components/AIMessage/aiMessage.props.d.ts +18 -2
- package/dist/components/AIMessage/aiMessage.theme.d.ts +51 -6
- package/dist/components/AIMessage/aiMessage.theme.js +91 -32
- package/dist/components/AIMessageActions/AIMessageActions.svelte +19 -9
- package/dist/components/AIMessageActions/aiMessageActions.mcp.d.ts +1 -1
- package/dist/components/AIMessageActions/aiMessageActions.mcp.js +11 -3
- package/dist/components/AIMessageActions/aiMessageActions.theme.js +36 -9
- package/dist/components/AIModelSelector/AIModelSelector.svelte +25 -10
- package/dist/components/AIModelSelector/aiModelSelector.mcp.d.ts +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.mcp.js +1 -1
- package/dist/components/AIModelSelector/aiModelSelector.theme.d.ts +3 -0
- package/dist/components/AIModelSelector/aiModelSelector.theme.js +7 -3
- package/dist/components/AIReasoning/AIReasoning.svelte +135 -38
- package/dist/components/AIReasoning/aiReasoning.mcp.d.ts +1 -1
- package/dist/components/AIReasoning/aiReasoning.mcp.js +11 -5
- package/dist/components/AIReasoning/aiReasoning.props.d.ts +15 -4
- package/dist/components/AIReasoning/aiReasoning.theme.d.ts +45 -0
- package/dist/components/AIReasoning/aiReasoning.theme.js +47 -7
- package/dist/components/AISuggestion/AISuggestion.svelte +2 -1
- package/dist/components/AISuggestion/AISuggestions.svelte +2 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.d.ts +1 -1
- package/dist/components/AISuggestion/aiSuggestion.mcp.js +8 -1
- package/dist/components/AISuggestion/aiSuggestion.props.d.ts +4 -1
- package/dist/components/AISuggestion/aiSuggestion.theme.js +1 -1
- package/dist/components/AISuggestion/aiSuggestions.props.d.ts +7 -0
- package/dist/components/AIThread/AIThread.svelte +378 -95
- package/dist/components/AIThread/AIThreadAskUserQuestion.svelte +1 -0
- package/dist/components/AIThread/AIThreadItems.svelte +266 -64
- package/dist/components/AIThread/AIThreadItems.svelte.d.ts +7 -3
- package/dist/components/AIThread/AIThreadMarker.svelte +8 -1
- package/dist/components/AIThread/AIThreadMarker.svelte.d.ts +1 -0
- package/dist/components/AIThread/aiThread.mcp.d.ts +1 -1
- package/dist/components/AIThread/aiThread.mcp.js +34 -20
- package/dist/components/AIThread/aiThread.props.d.ts +73 -8
- package/dist/components/AIThread/aiThread.theme.d.ts +78 -0
- package/dist/components/AIThread/aiThread.theme.js +108 -9
- package/dist/components/AIThread/index.d.ts +1 -1
- package/dist/components/AIThread/threadAskUserQuestion.d.ts +4 -1
- package/dist/components/AIThread/threadAskUserQuestion.js +8 -4
- package/dist/components/AIThread/threadRenderItems.d.ts +74 -3
- package/dist/components/AIThread/threadRenderItems.js +265 -77
- package/dist/components/AIThread/threadScrollController.d.ts +0 -8
- package/dist/components/AIThread/threadScrollController.js +2 -39
- package/dist/components/AIThread/threadTools.d.ts +11 -0
- package/dist/components/AIThread/threadTools.js +79 -0
- package/dist/components/AIThreadToc/AIThreadToc.svelte +188 -18
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte +25 -2
- package/dist/components/AIThreadToc/AIThreadTocPreview.svelte.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.d.ts +4 -2
- package/dist/components/AIThreadToc/aiThreadToc.js +17 -5
- package/dist/components/AIThreadToc/aiThreadToc.mcp.d.ts +1 -1
- package/dist/components/AIThreadToc/aiThreadToc.mcp.js +13 -3
- package/dist/components/AIThreadToc/aiThreadToc.props.d.ts +11 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.d.ts +3 -0
- package/dist/components/AIThreadToc/aiThreadToc.theme.js +15 -6
- package/dist/components/AITool/AITool.svelte +56 -21
- package/dist/components/AITool/AIToolCallList.svelte +79 -29
- package/dist/components/AITool/AIToolCallList.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolStatusMark.svelte +52 -0
- package/dist/components/AITool/AIToolStatusMark.svelte.d.ts +14 -0
- package/dist/components/AITool/AIToolValueSection.svelte +126 -28
- package/dist/components/AITool/AIToolValueSection.svelte.d.ts +6 -2
- package/dist/components/AITool/AIToolValueTree.svelte +11 -16
- package/dist/components/AITool/AIToolValueTree.svelte.d.ts +2 -3
- package/dist/components/AITool/aiTool.mcp.d.ts +1 -1
- package/dist/components/AITool/aiTool.mcp.js +36 -8
- package/dist/components/AITool/aiTool.props.d.ts +52 -6
- package/dist/components/AITool/aiTool.theme.d.ts +117 -39
- package/dist/components/AITool/aiTool.theme.js +144 -140
- package/dist/components/AITool/aiToolClock.svelte.d.ts +18 -0
- package/dist/components/AITool/aiToolClock.svelte.js +62 -0
- package/dist/components/AITool/aiToolPrimitiveThemes.d.ts +0 -2
- package/dist/components/AITool/aiToolPrimitiveThemes.js +0 -10
- package/dist/components/AITool/index.d.ts +2 -1
- package/dist/components/AITool/index.js +1 -0
- package/dist/components/AITool/toolRendering.d.ts +33 -1
- package/dist/components/AITool/toolRendering.js +179 -15
- package/dist/components/AITool/toolValueTree.d.ts +14 -1
- package/dist/components/AITool/toolValueTree.js +126 -27
- package/dist/components/Accordion/Accordion.svelte +109 -109
- package/dist/components/Accordion/Accordion.svelte.d.ts +0 -1
- package/dist/components/Accordion/AccordionPanel.svelte +64 -0
- package/dist/components/Accordion/AccordionPanel.svelte.d.ts +20 -0
- package/dist/components/Accordion/accordion.attributes.d.ts +24 -0
- package/dist/components/Accordion/accordion.attributes.js +20 -0
- package/dist/components/Accordion/accordion.mcp.d.ts +1 -1
- package/dist/components/Accordion/accordion.mcp.js +78 -22
- package/dist/components/Accordion/accordion.props.d.ts +54 -10
- package/dist/components/Accordion/accordion.theme.d.ts +3 -0
- package/dist/components/Accordion/accordion.theme.js +4 -0
- package/dist/components/Accordion/index.d.ts +1 -0
- package/dist/components/Accordion/index.js +1 -0
- package/dist/components/AudioPlayer/audioPlayerVolumeControl.slider.theme.d.ts +31 -1
- package/dist/components/Avatar/Avatar.svelte +60 -10
- package/dist/components/Avatar/AvatarGroup.svelte +9 -0
- package/dist/components/Avatar/avatar.mcp.d.ts +1 -1
- package/dist/components/Avatar/avatar.mcp.js +13 -5
- package/dist/components/Avatar/avatar.props.d.ts +28 -1
- package/dist/components/Avatar/avatar.theme.js +3 -3
- package/dist/components/Avatar/index.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.d.ts +1 -1
- package/dist/components/Breadcrumbs/breadcrumbs.mcp.js +1 -1
- package/dist/components/Button/Button.svelte +35 -15
- package/dist/components/Button/button.mcp.d.ts +1 -1
- package/dist/components/Button/button.mcp.js +8 -4
- package/dist/components/Button/button.props.d.ts +23 -8
- package/dist/components/Button/button.theme.d.ts +12 -0
- package/dist/components/Button/button.theme.js +17 -4
- package/dist/components/ButtonGroup/buttonGroup.mcp.d.ts +1 -1
- package/dist/components/ButtonGroup/buttonGroup.mcp.js +1 -1
- package/dist/components/ButtonGroup/buttonGroup.props.d.ts +4 -1
- package/dist/components/Collapsible/Collapsible.svelte +125 -19
- package/dist/components/Collapsible/collapsible.attributes.d.ts +21 -0
- package/dist/components/Collapsible/collapsible.attributes.js +17 -0
- package/dist/components/Collapsible/collapsible.mcp.d.ts +1 -1
- package/dist/components/Collapsible/collapsible.mcp.js +62 -12
- package/dist/components/Collapsible/collapsible.props.d.ts +39 -8
- package/dist/components/Collapsible/collapsible.theme.js +3 -1
- package/dist/components/Collapsible/index.d.ts +1 -0
- package/dist/components/Collapsible/index.js +1 -0
- package/dist/components/Command/Command.svelte +56 -14
- package/dist/components/Command/command.mcp.d.ts +1 -1
- package/dist/components/Command/command.mcp.js +12 -6
- package/dist/components/Command/command.props.d.ts +39 -6
- package/dist/components/Command/command.state.svelte.d.ts +40 -11
- package/dist/components/Command/command.state.svelte.js +75 -28
- package/dist/components/Command/command.theme.js +4 -3
- package/dist/components/Confirmation/Confirmation.svelte +72 -31
- package/dist/components/Confirmation/confirmation.mcp.d.ts +1 -1
- package/dist/components/Confirmation/confirmation.mcp.js +5 -4
- package/dist/components/ContextMenu/ContextMenu.svelte +126 -16
- package/dist/components/ContextMenu/contextMenu.mcp.d.ts +1 -1
- package/dist/components/ContextMenu/contextMenu.mcp.js +10 -7
- package/dist/components/ContextMenu/contextMenu.props.d.ts +13 -4
- package/dist/components/ContextMenu/contextMenu.theme.d.ts +3 -3
- package/dist/components/ContextMenu/contextMenu.theme.js +3 -2
- package/dist/components/DataTable/DataTable.svelte +4 -9
- package/dist/components/DataTable/DataTableEditor.svelte +5 -0
- package/dist/components/DataTable/DataTableFilter.svelte +1 -0
- package/dist/components/DataTable/DataTableToolbar.svelte +1 -0
- package/dist/components/DataTable/dataTable.mcp.d.ts +1 -1
- package/dist/components/DataTable/dataTable.mcp.js +4 -2
- package/dist/components/DataTable/dataTable.theme.d.ts +0 -3
- package/dist/components/DataTable/dataTable.theme.js +9 -6
- package/dist/components/Dialog/Dialog.svelte +120 -35
- package/dist/components/Dialog/Dialog.svelte.d.ts +1 -1
- package/dist/components/Dialog/DialogBackdrop.svelte +21 -1
- package/dist/components/Dialog/dialog.api.d.ts +65 -0
- package/dist/components/Dialog/dialog.api.js +1 -0
- package/dist/components/Dialog/dialog.attributes.d.ts +23 -0
- package/dist/components/Dialog/dialog.attributes.js +19 -0
- package/dist/components/Dialog/dialog.indent.d.ts +6 -0
- package/dist/components/Dialog/dialog.indent.js +16 -0
- package/dist/components/Dialog/dialog.mcp.d.ts +1 -1
- package/dist/components/Dialog/dialog.mcp.js +195 -22
- package/dist/components/Dialog/dialog.props.d.ts +102 -19
- package/dist/components/Dialog/dialog.snap.d.ts +40 -0
- package/dist/components/Dialog/dialog.snap.js +78 -0
- package/dist/components/Dialog/dialog.state.svelte.d.ts +122 -10
- package/dist/components/Dialog/dialog.state.svelte.js +525 -66
- package/dist/components/Dialog/dialog.theme.d.ts +48 -0
- package/dist/components/Dialog/dialog.theme.js +32 -9
- package/dist/components/Dialog/index.d.ts +4 -1
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/DocumentViewer/DocumentSearchControl.svelte +5 -3
- package/dist/components/DocumentViewer/documentOutput.js +2 -1
- package/dist/components/FloatingWindow/FloatingWindow.svelte +20 -32
- package/dist/components/FloatingWindow/FloatingWindow.svelte.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.d.ts +1 -1
- package/dist/components/FloatingWindow/floatingWindow.mcp.js +3 -3
- package/dist/components/FloatingWindow/floatingWindow.props.d.ts +9 -4
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.d.ts +8 -2
- package/dist/components/FloatingWindow/floatingWindow.state.svelte.js +18 -7
- package/dist/components/Form/Ask/Ask.svelte +9 -13
- package/dist/components/Form/Ask/ask.mcp.d.ts +1 -1
- package/dist/components/Form/Ask/ask.mcp.js +1 -1
- package/dist/components/Form/Ask/ask.props.d.ts +1 -1
- package/dist/components/Form/Autocomplete/Autocomplete.svelte +418 -0
- package/dist/components/Form/Autocomplete/Autocomplete.svelte.d.ts +4 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.d.ts +30 -0
- package/dist/components/Form/Autocomplete/autocomplete.items.js +64 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.d.ts +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.mcp.js +134 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.d.ts +146 -0
- package/dist/components/Form/Autocomplete/autocomplete.props.js +1 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.d.ts +213 -0
- package/dist/components/Form/Autocomplete/autocomplete.theme.js +119 -0
- package/dist/components/Form/Autocomplete/index.d.ts +3 -0
- package/dist/components/Form/Autocomplete/index.js +2 -0
- package/dist/components/Form/Calendar/CalendarInput.svelte +9 -0
- package/dist/components/Form/Calendar/CalendarMonthYearPicker.svelte +3 -0
- package/dist/components/Form/Calendar/CalendarPrimitive.svelte +5 -0
- package/dist/components/Form/Calendar/calendar.mcp.d.ts +1 -1
- package/dist/components/Form/Calendar/calendar.mcp.js +2 -1
- package/dist/components/Form/Calendar/calendarInput.props.d.ts +2 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.d.ts +3 -0
- package/dist/components/Form/Calendar/useCalendar.svelte.js +3 -0
- package/dist/components/Form/Checkbox/Checkbox.svelte +17 -2
- package/dist/components/Form/Checkbox/checkbox.mcp.d.ts +1 -1
- package/dist/components/Form/Checkbox/checkbox.mcp.js +11 -1
- package/dist/components/Form/Checkbox/checkbox.props.d.ts +12 -1
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte +69 -32
- package/dist/components/Form/CheckboxesInput/CheckboxLine.svelte.d.ts +10 -2
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte +123 -74
- package/dist/components/Form/CheckboxesInput/CheckboxesInput.svelte.d.ts +12 -12
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.d.ts +1 -1
- package/dist/components/Form/CheckboxesInput/checkboxesInput.mcp.js +11 -7
- package/dist/components/Form/CheckboxesInput/checkboxesInput.props.d.ts +25 -9
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.d.ts +12 -0
- package/dist/components/Form/CheckboxesInput/checkboxesInput.theme.js +9 -4
- package/dist/components/Form/CheckboxesInput/choiceEnter.d.ts +11 -0
- package/dist/components/Form/CheckboxesInput/choiceEnter.js +27 -0
- package/dist/components/Form/ColorInput/ColorInput.svelte +12 -3
- package/dist/components/Form/ColorInput/colorInput.mcp.d.ts +1 -1
- package/dist/components/Form/ColorInput/colorInput.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/ColorPicker.svelte +11 -2
- package/dist/components/Form/ColorPicker/ColorPickerInput.svelte +9 -0
- package/dist/components/Form/ColorPicker/colorPicker.mcp.d.ts +1 -1
- package/dist/components/Form/ColorPicker/colorPicker.mcp.js +1 -0
- package/dist/components/Form/ColorPicker/colorPicker.props.d.ts +2 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.d.ts +4 -0
- package/dist/components/Form/ColorPicker/colorPicker.state.svelte.js +12 -8
- package/dist/components/Form/Combobox/Combobox.svelte +145 -185
- package/dist/components/Form/Combobox/Combobox.svelte.d.ts +1 -1
- package/dist/components/Form/Combobox/ComboboxPopup.svelte +128 -0
- package/dist/components/Form/Combobox/ComboboxPopup.svelte.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.attributes.d.ts +34 -0
- package/dist/components/Form/Combobox/combobox.attributes.js +25 -0
- package/dist/components/Form/Combobox/combobox.items.d.ts +28 -0
- package/dist/components/Form/Combobox/combobox.items.js +68 -0
- package/dist/components/Form/Combobox/combobox.mcp.d.ts +1 -1
- package/dist/components/Form/Combobox/combobox.mcp.js +104 -13
- package/dist/components/Form/Combobox/combobox.props.d.ts +113 -19
- package/dist/components/Form/Combobox/combobox.state.svelte.d.ts +137 -0
- package/dist/components/Form/Combobox/combobox.state.svelte.js +375 -0
- package/dist/components/Form/Combobox/combobox.theme.d.ts +63 -0
- package/dist/components/Form/Combobox/combobox.theme.js +37 -1
- package/dist/components/Form/Combobox/index.d.ts +2 -1
- package/dist/components/Form/Combobox/index.js +1 -0
- package/dist/components/Form/DateInput/DateInput.svelte +11 -3
- package/dist/components/Form/DateInput/dateInput.mcp.d.ts +1 -1
- package/dist/components/Form/DateInput/dateInput.mcp.js +5 -0
- package/dist/components/Form/DateSelector/DateSelector.svelte +5 -2
- package/dist/components/Form/DateSelector/DateSelectorInput.svelte +9 -0
- package/dist/components/Form/DateSelector/dateSelector.mcp.d.ts +1 -1
- package/dist/components/Form/DateSelector/dateSelector.mcp.js +2 -2
- package/dist/components/Form/DateSelector/dateSelector.props.d.ts +2 -0
- package/dist/components/Form/Field/Field.svelte +258 -32
- package/dist/components/Form/Field/Field.svelte.d.ts +15 -6
- package/dist/components/Form/Field/FieldGroup.svelte +29 -0
- package/dist/components/Form/Field/FieldGroup.svelte.d.ts +11 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte +187 -0
- package/dist/components/Form/Field/FieldHiddenInputs.svelte.d.ts +26 -0
- package/dist/components/Form/Field/field.d.ts +75 -10
- package/dist/components/Form/Field/field.mcp.d.ts +1 -1
- package/dist/components/Form/Field/field.mcp.js +158 -18
- package/dist/components/Form/Field/field.messages.d.ts +47 -0
- package/dist/components/Form/Field/field.messages.js +64 -0
- package/dist/components/Form/Field/field.state.svelte.d.ts +117 -40
- package/dist/components/Form/Field/field.state.svelte.js +525 -16
- package/dist/components/Form/Field/field.theme.d.ts +46 -0
- package/dist/components/Form/Field/field.theme.js +33 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.d.ts +61 -0
- package/dist/components/Form/Field/fieldHiddenInputs.props.js +1 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.d.ts +14 -0
- package/dist/components/Form/Field/fieldNativeForm.svelte.js +113 -0
- package/dist/components/Form/Field/index.d.ts +5 -2
- package/dist/components/Form/Field/index.js +1 -0
- package/dist/components/Form/Field/schemas.js +7 -2
- package/dist/components/Form/File/FileInput.svelte +24 -3
- package/dist/components/Form/File/fileInput.mcp.d.ts +1 -1
- package/dist/components/Form/File/fileInput.mcp.js +1 -0
- package/dist/components/Form/Form/Form.svelte +49 -15
- package/dist/components/Form/Form/FormActions.svelte +3 -1
- package/dist/components/Form/Form/FormActions.svelte.d.ts +42 -2
- package/dist/components/Form/Form/FormFieldRenderer.svelte +96 -12
- package/dist/components/Form/Form/FormFieldRenderer.svelte.d.ts +3 -2
- package/dist/components/Form/Form/FormInputRenderer.svelte +7 -0
- package/dist/components/Form/Form/form.d.ts +84 -11
- package/dist/components/Form/Form/form.mcp.d.ts +1 -1
- package/dist/components/Form/Form/form.mcp.js +178 -12
- package/dist/components/Form/Form/form.props.d.ts +32 -1
- package/dist/components/Form/Form/form.registry.d.ts +28 -0
- package/dist/components/Form/Form/form.registry.js +59 -0
- package/dist/components/Form/Form/form.state.svelte.d.ts +1186 -420
- package/dist/components/Form/Form/form.state.svelte.js +322 -28
- package/dist/components/Form/Form/index.d.ts +4 -1
- package/dist/components/Form/Form/index.js +1 -0
- package/dist/components/Form/Form/visibility.d.ts +3130 -1863
- package/dist/components/Form/KeyValueInput/KeyValueInput.svelte +22 -10
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.d.ts +1 -1
- package/dist/components/Form/KeyValueInput/keyValueInput.mcp.js +1 -0
- package/dist/components/Form/MultiStepForm/MultiStepForm.svelte +12 -5
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.d.ts +1 -1
- package/dist/components/Form/MultiStepForm/multiStepForm.mcp.js +5 -3
- package/dist/components/Form/MultiStepForm/multiStepForm.props.d.ts +5 -0
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.d.ts +1050 -408
- package/dist/components/Form/MultiStepForm/multiStepForm.state.svelte.js +48 -24
- package/dist/components/Form/NumberInput/NumberInput.svelte +365 -46
- package/dist/components/Form/NumberInput/index.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.d.ts +1 -1
- package/dist/components/Form/NumberInput/numberInput.mcp.js +55 -30
- package/dist/components/Form/NumberInput/numberInput.props.d.ts +64 -4
- package/dist/components/Form/PasswordInput/Password.svelte +28 -1
- package/dist/components/Form/PasswordInput/index.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.d.ts +1 -1
- package/dist/components/Form/PasswordInput/passwordInput.mcp.js +20 -2
- package/dist/components/Form/PasswordInput/passwordInput.props.d.ts +23 -0
- package/dist/components/Form/PhoneInput/PhoneInput.svelte +11 -4
- package/dist/components/Form/PhoneInput/PhoneInputCountryPicker.svelte +47 -21
- package/dist/components/Form/PhoneInput/phoneInput-cdn.js +2 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.d.ts +1 -1
- package/dist/components/Form/PhoneInput/phoneInput.mcp.js +6 -2
- package/dist/components/Form/PhoneInput/phoneInputCountry.d.ts +9 -3
- package/dist/components/Form/PhoneInput/phoneInputCountry.js +34 -24
- package/dist/components/Form/PinInput/PinInput.svelte +44 -9
- package/dist/components/Form/PinInput/PinInputCells.svelte +22 -1
- package/dist/components/Form/PinInput/PinInputCells.svelte.d.ts +1 -0
- package/dist/components/Form/PinInput/index.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.d.ts +1 -1
- package/dist/components/Form/PinInput/pinInput.mcp.js +29 -6
- package/dist/components/Form/PinInput/pinInput.props.d.ts +38 -4
- package/dist/components/Form/PinInput/pinInput.state.svelte.d.ts +41 -0
- package/dist/components/Form/PinInput/pinInput.state.svelte.js +227 -24
- package/dist/components/Form/PinInput/pinInput.theme.d.ts +39 -3
- package/dist/components/Form/PinInput/pinInput.theme.js +27 -1
- package/dist/components/Form/RadioInput/RadioInput.svelte +94 -32
- package/dist/components/Form/RadioInput/RadioInput.svelte.d.ts +12 -12
- package/dist/components/Form/RadioInput/radioInput.mcp.d.ts +1 -1
- package/dist/components/Form/RadioInput/radioInput.mcp.js +12 -9
- package/dist/components/Form/RadioInput/radioInput.props.d.ts +22 -6
- package/dist/components/Form/RadioInput/radioInput.theme.d.ts +12 -0
- package/dist/components/Form/RadioInput/radioInput.theme.js +10 -5
- package/dist/components/Form/RatingInput/RatingInput.svelte +13 -4
- package/dist/components/Form/RatingInput/ratingInput.mcp.d.ts +1 -1
- package/dist/components/Form/RatingInput/ratingInput.mcp.js +3 -3
- package/dist/components/Form/RatingInput/ratingInput.props.d.ts +1 -1
- package/dist/components/Form/Select/Select.svelte +186 -48
- package/dist/components/Form/Select/Select.svelte.d.ts +23 -2
- package/dist/components/Form/Select/SelectOptionRow.svelte +69 -0
- package/dist/components/Form/Select/SelectOptionRow.svelte.d.ts +18 -0
- package/dist/components/Form/Select/index.d.ts +2 -1
- package/dist/components/Form/Select/index.js +1 -0
- package/dist/components/Form/Select/select.align.d.ts +5 -0
- package/dist/components/Form/Select/select.align.js +19 -5
- package/dist/components/Form/Select/select.attributes.d.ts +36 -0
- package/dist/components/Form/Select/select.attributes.js +27 -0
- package/dist/components/Form/Select/select.mcp.d.ts +1 -1
- package/dist/components/Form/Select/select.mcp.js +103 -18
- package/dist/components/Form/Select/select.props.d.ts +87 -10
- package/dist/components/Form/Select/select.state.svelte.d.ts +108 -17
- package/dist/components/Form/Select/select.state.svelte.js +354 -59
- package/dist/components/Form/Select/select.theme.d.ts +21 -0
- package/dist/components/Form/Select/select.theme.js +22 -0
- package/dist/components/Form/Slider/Slider.svelte +54 -14
- package/dist/components/Form/Slider/SliderMarks.svelte +1 -1
- package/dist/components/Form/Slider/SliderThumb.svelte +49 -19
- package/dist/components/Form/Slider/SliderThumb.svelte.d.ts +8 -2
- package/dist/components/Form/Slider/SliderTrack.svelte +33 -12
- package/dist/components/Form/Slider/SliderTrack.svelte.d.ts +6 -2
- package/dist/components/Form/Slider/index.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.d.ts +1 -1
- package/dist/components/Form/Slider/slider.mcp.js +55 -11
- package/dist/components/Form/Slider/slider.props.d.ts +35 -2
- package/dist/components/Form/Slider/slider.state.svelte.d.ts +66 -5
- package/dist/components/Form/Slider/slider.state.svelte.js +273 -49
- package/dist/components/Form/Slider/slider.theme.d.ts +36 -0
- package/dist/components/Form/Slider/slider.theme.js +35 -17
- package/dist/components/Form/Switch/Switch.svelte +61 -38
- package/dist/components/Form/Switch/switch.mcp.d.ts +1 -1
- package/dist/components/Form/Switch/switch.mcp.js +25 -5
- package/dist/components/Form/Switch/switch.props.d.ts +14 -1
- package/dist/components/Form/Switch/switch.theme.d.ts +12 -0
- package/dist/components/Form/Switch/switch.theme.js +8 -3
- package/dist/components/Form/TagGroup/TagGroup.svelte +8 -0
- package/dist/components/Form/TagGroup/tagGroup.mcp.d.ts +1 -1
- package/dist/components/Form/TagGroup/tagGroup.mcp.js +1 -0
- package/dist/components/Form/TagsInput/TagsInput.svelte +277 -275
- package/dist/components/Form/TagsInput/TagsInput.svelte.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.d.ts +1 -1
- package/dist/components/Form/TagsInput/tagsInput.mcp.js +31 -11
- package/dist/components/Form/TagsInput/tagsInput.props.d.ts +6 -26
- package/dist/components/Form/TagsInput/tagsInput.theme.d.ts +63 -0
- package/dist/components/Form/TagsInput/tagsInput.theme.js +37 -1
- package/dist/components/Form/TextArea/TextArea.svelte +8 -0
- package/dist/components/Form/TextArea/textArea.mcp.d.ts +1 -1
- package/dist/components/Form/TextArea/textArea.mcp.js +1 -0
- package/dist/components/Form/TextInput/TextInput.svelte +8 -1
- package/dist/components/Form/TextInput/textInput.mcp.d.ts +1 -1
- package/dist/components/Form/TextInput/textInput.mcp.js +5 -0
- package/dist/components/Form/TimeInput/TimeInput.svelte +9 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.d.ts +1 -1
- package/dist/components/Form/TimeInput/timeInput.mcp.js +31 -0
- package/dist/components/Form/VoiceInput/VoiceInput.svelte +10 -2
- package/dist/components/Form/VoiceInput/voiceInput.mcp.d.ts +1 -1
- package/dist/components/Form/VoiceInput/voiceInput.mcp.js +1 -0
- package/dist/components/GanttChart/GanttDependencyControl.svelte +4 -4
- package/dist/components/HoverCard/HoverCard.svelte +100 -10
- package/dist/components/HoverCard/hoverCard.attributes.d.ts +33 -0
- package/dist/components/HoverCard/hoverCard.attributes.js +24 -0
- package/dist/components/HoverCard/hoverCard.mcp.d.ts +1 -1
- package/dist/components/HoverCard/hoverCard.mcp.js +61 -2
- package/dist/components/HoverCard/hoverCard.props.d.ts +19 -0
- package/dist/components/HoverCard/hoverCard.theme.d.ts +12 -0
- package/dist/components/HoverCard/hoverCard.theme.js +9 -2
- package/dist/components/HoverCard/index.d.ts +1 -0
- package/dist/components/HoverCard/index.js +1 -0
- package/dist/components/ImageGallery/imageGallery.state.svelte.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.lightbox.js +40 -6
- package/dist/components/ImageZoom/imageZoom.mcp.d.ts +1 -1
- package/dist/components/ImageZoom/imageZoom.mcp.js +3 -3
- package/dist/components/ImageZoom/imageZoom.props.d.ts +10 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.d.ts +16 -4
- package/dist/components/ImageZoom/imageZoom.state.svelte.js +38 -9
- package/dist/components/Kanban/kanban.theme.js +7 -3
- package/dist/components/Layout/layoutSpacing.d.ts +2 -2
- package/dist/components/LinkPreview/LinkPreview.svelte +7 -1
- package/dist/components/LinkPreview/linkPreview.mcp.d.ts +1 -1
- package/dist/components/LinkPreview/linkPreview.mcp.js +4 -1
- package/dist/components/LinkPreview/linkPreview.props.d.ts +15 -0
- package/dist/components/LinkPreview/linkPreview.theme.d.ts +12 -0
- package/dist/components/LinkPreview/linkPreview.theme.js +9 -2
- package/dist/components/Map/maplibre-cdn.js +3 -2
- package/dist/components/Markdown/markdown.mcp.d.ts +1 -1
- package/dist/components/Markdown/markdown.mcp.js +2 -1
- package/dist/components/Markdown/markdown.theme.js +18 -9
- package/dist/components/MediaVolume/MediaVolumeControl.svelte +4 -3
- package/dist/components/Menu/Menu.svelte +3 -3
- package/dist/components/Menu/Menu.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuCheckboxItem.svelte +87 -0
- package/dist/components/Menu/MenuCheckboxItem.svelte.d.ts +16 -0
- package/dist/components/Menu/MenuFloating.svelte +421 -74
- package/dist/components/Menu/MenuFloating.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuMirroredIcon.svelte +9 -0
- package/dist/components/Menu/MenuMirroredIcon.svelte.d.ts +7 -0
- package/dist/components/Menu/MenuRadioGroup.svelte +102 -0
- package/dist/components/Menu/MenuRadioGroup.svelte.d.ts +18 -0
- package/dist/components/Menu/MenuSearchField.svelte +54 -0
- package/dist/components/Menu/MenuSearchField.svelte.d.ts +20 -0
- package/dist/components/Menu/MenuStacked.svelte +404 -158
- package/dist/components/Menu/MenuStacked.svelte.d.ts +1 -1
- package/dist/components/Menu/MenuStackedBackHeader.svelte +6 -1
- package/dist/components/Menu/index.d.ts +2 -1
- package/dist/components/Menu/index.js +1 -0
- package/dist/components/Menu/menu.attributes.d.ts +37 -0
- package/dist/components/Menu/menu.attributes.js +28 -0
- package/dist/components/Menu/menu.filter.svelte.d.ts +52 -0
- package/dist/components/Menu/menu.filter.svelte.js +143 -0
- package/dist/components/Menu/menu.mcp.d.ts +1 -1
- package/dist/components/Menu/menu.mcp.js +227 -17
- package/dist/components/Menu/menu.platform.d.ts +5 -0
- package/dist/components/Menu/menu.platform.js +11 -0
- package/dist/components/Menu/menu.props.d.ts +172 -9
- package/dist/components/Menu/menu.theme.d.ts +147 -0
- package/dist/components/Menu/menu.theme.js +101 -0
- package/dist/components/Menu/menuTree.d.ts +35 -1
- package/dist/components/Menu/menuTree.js +158 -1
- package/dist/components/MenuBar/menuBar.mcp.d.ts +1 -1
- package/dist/components/MenuBar/menuBar.mcp.js +4 -2
- package/dist/components/MenuBar/menuBar.state.svelte.js +28 -10
- package/dist/components/MenuOption/MenuOption.svelte +5 -1
- package/dist/components/MenuOption/menuOption.mcp.d.ts +1 -1
- package/dist/components/MenuOption/menuOption.mcp.js +8 -0
- package/dist/components/MenuOption/menuOption.props.d.ts +12 -0
- package/dist/components/MenuOption/menuOption.theme.d.ts +18 -0
- package/dist/components/MenuOption/menuOption.theme.js +24 -4
- package/dist/components/Mermaid/mermaid.mcp.d.ts +1 -1
- package/dist/components/Mermaid/mermaid.mcp.js +8 -8
- package/dist/components/Mermaid/mermaid.props.d.ts +3 -4
- package/dist/components/Mermaid/mermaid.state.svelte.d.ts +20 -19
- package/dist/components/Mermaid/mermaid.state.svelte.js +80 -243
- package/dist/components/Mermaid/mermaid.theme.js +26 -1
- package/dist/components/MetadataList/MetadataList.svelte.d.ts +1 -1
- package/dist/components/Meter/Meter.svelte +110 -24
- package/dist/components/Meter/Meter.svelte.d.ts +12 -12
- package/dist/components/Meter/meter.mcp.d.ts +1 -1
- package/dist/components/Meter/meter.mcp.js +23 -37
- package/dist/components/Meter/meter.props.d.ts +36 -44
- package/dist/components/NavigationMenu/NavigationMenu.svelte +181 -0
- package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +25 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte +141 -0
- package/dist/components/NavigationMenu/NavigationMenuContent.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte +75 -0
- package/dist/components/NavigationMenu/NavigationMenuTrigger.svelte.d.ts +13 -0
- package/dist/components/NavigationMenu/index.d.ts +4 -0
- package/dist/components/NavigationMenu/index.js +3 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.d.ts +24 -0
- package/dist/components/NavigationMenu/navigationMenu.attributes.js +21 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.d.ts +1 -0
- package/dist/components/NavigationMenu/navigationMenu.mcp.js +138 -0
- package/dist/components/NavigationMenu/navigationMenu.props.d.ts +129 -0
- package/dist/components/NavigationMenu/navigationMenu.props.js +1 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.d.ts +163 -0
- package/dist/components/NavigationMenu/navigationMenu.state.svelte.js +721 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.d.ts +326 -0
- package/dist/components/NavigationMenu/navigationMenu.theme.js +239 -0
- package/dist/components/Overlay/Overlay.svelte +19 -30
- package/dist/components/Overlay/index.d.ts +1 -0
- package/dist/components/Overlay/index.js +1 -0
- package/dist/components/Overlay/overlay.attributes.d.ts +16 -0
- package/dist/components/Overlay/overlay.attributes.js +14 -0
- package/dist/components/Overlay/overlay.mcp.d.ts +1 -1
- package/dist/components/Overlay/overlay.mcp.js +21 -3
- package/dist/components/Overlay/overlay.props.d.ts +8 -4
- package/dist/components/Popover/Popover.svelte +163 -52
- package/dist/components/Popover/Popover.svelte.d.ts +23 -2
- package/dist/components/Popover/PopoverSession.svelte +12 -0
- package/dist/components/Popover/PopoverSession.svelte.d.ts +7 -0
- package/dist/components/Popover/index.d.ts +10 -2
- package/dist/components/Popover/index.js +4 -1
- package/dist/components/Popover/popover.api.d.ts +83 -0
- package/dist/components/Popover/popover.api.js +1 -0
- package/dist/components/Popover/popover.attributes.d.ts +32 -0
- package/dist/components/Popover/popover.attributes.js +28 -0
- package/dist/components/Popover/popover.claims.d.ts +19 -0
- package/dist/components/Popover/popover.claims.js +45 -0
- package/dist/components/Popover/popover.mcp.d.ts +1 -1
- package/dist/components/Popover/popover.mcp.js +163 -31
- package/dist/components/Popover/popover.position.d.ts +226 -0
- package/dist/components/Popover/popover.position.js +402 -0
- package/dist/components/Popover/popover.props.d.ts +179 -24
- package/dist/components/Popover/popover.state.svelte.d.ts +169 -37
- package/dist/components/Popover/popover.state.svelte.js +1034 -194
- package/dist/components/Popover/popover.theme.d.ts +15 -0
- package/dist/components/Popover/popover.theme.js +27 -2
- package/dist/components/PopupMenu/PopupMenu.svelte +193 -22
- package/dist/components/PopupMenu/PopupMenu.svelte.d.ts +2 -2
- package/dist/components/PopupMenu/popupMenu.context.d.ts +42 -0
- package/dist/components/PopupMenu/popupMenu.context.js +52 -0
- package/dist/components/PopupMenu/popupMenu.mcp.d.ts +1 -1
- package/dist/components/PopupMenu/popupMenu.mcp.js +46 -6
- package/dist/components/PopupMenu/popupMenu.props.d.ts +29 -2
- package/dist/components/Progress/Progress.svelte +160 -0
- package/dist/components/Progress/Progress.svelte.d.ts +4 -0
- package/dist/components/Progress/index.d.ts +3 -0
- package/dist/components/Progress/index.js +2 -0
- package/dist/components/Progress/progress.mcp.d.ts +1 -0
- package/dist/components/Progress/progress.mcp.js +101 -0
- package/dist/components/Progress/progress.props.d.ts +79 -0
- package/dist/components/Progress/progress.props.js +1 -0
- package/dist/components/Progress/progress.theme.d.ts +129 -0
- package/dist/components/Progress/progress.theme.js +83 -0
- package/dist/components/ProgressCircle/ProgressCircle.svelte +51 -6
- package/dist/components/ProgressCircle/progressCircle.mcp.d.ts +1 -1
- package/dist/components/ProgressCircle/progressCircle.mcp.js +18 -4
- package/dist/components/ProgressCircle/progressCircle.props.d.ts +32 -2
- package/dist/components/ProgressCircle/progressCircle.theme.d.ts +15 -3
- package/dist/components/ProgressCircle/progressCircle.theme.js +7 -2
- package/dist/components/RichTextInput/RichTextInput.svelte +19 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte +5 -1
- package/dist/components/RichTextInput/RichTextInputChrome.svelte.d.ts +2 -0
- package/dist/components/RichTextInput/RichTextInputViewport.svelte +3 -1
- package/dist/components/RichTextInput/RichTextInputViewport.svelte.d.ts +1 -0
- package/dist/components/RichTextInput/richTextInput.mcp.d.ts +1 -1
- package/dist/components/RichTextInput/richTextInput.mcp.js +1 -0
- package/dist/components/RichTextInput/suggestions.js +2 -0
- package/dist/components/ScrollArea/ScrollArea.svelte +166 -27
- package/dist/components/ScrollArea/index.d.ts +2 -1
- package/dist/components/ScrollArea/index.js +1 -0
- package/dist/components/ScrollArea/scrollArea.attributes.d.ts +25 -0
- package/dist/components/ScrollArea/scrollArea.attributes.js +21 -0
- package/dist/components/ScrollArea/scrollArea.mcp.d.ts +1 -1
- package/dist/components/ScrollArea/scrollArea.mcp.js +47 -3
- package/dist/components/ScrollArea/scrollArea.props.d.ts +33 -6
- package/dist/components/ScrollArea/scrollArea.svelte.d.ts +56 -12
- package/dist/components/ScrollArea/scrollArea.svelte.js +281 -71
- package/dist/components/ScrollArea/scrollArea.theme.js +5 -2
- package/dist/components/SegmentedControl/SegmentedControl.svelte +4 -3
- package/dist/components/SegmentedControl/segmentedControl.mcp.d.ts +1 -1
- package/dist/components/SegmentedControl/segmentedControl.mcp.js +3 -2
- package/dist/components/SelectionMenu/SelectionMenu.svelte +4 -2
- package/dist/components/Sidebar/SidebarAction.svelte +13 -3
- package/dist/components/Sidebar/SidebarAction.svelte.d.ts +2 -1
- package/dist/components/Sidebar/SidebarActivityBar.svelte +14 -7
- package/dist/components/Sidebar/SidebarFlyout.svelte +97 -0
- package/dist/components/Sidebar/SidebarFlyout.svelte.d.ts +32 -0
- package/dist/components/Sidebar/SidebarGroup.svelte +39 -15
- package/dist/components/Sidebar/SidebarMenuButton.svelte +6 -3
- package/dist/components/Sidebar/SidebarMenuItem.svelte +134 -31
- package/dist/components/Sidebar/SidebarMenuSubItem.svelte +30 -14
- package/dist/components/Sidebar/SidebarTreeNode.svelte +41 -61
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +1 -0
- package/dist/components/Sidebar/sidebar-position.d.ts +37 -2
- package/dist/components/Sidebar/sidebar-position.js +31 -2
- package/dist/components/Sidebar/sidebar.attributes.d.ts +33 -0
- package/dist/components/Sidebar/sidebar.attributes.js +29 -0
- package/dist/components/Sidebar/sidebar.mcp.d.ts +1 -1
- package/dist/components/Sidebar/sidebar.mcp.js +45 -10
- package/dist/components/Sidebar/sidebar.props.d.ts +28 -7
- package/dist/components/Sidebar/sidebar.theme.d.ts +51 -21
- package/dist/components/Sidebar/sidebar.theme.js +113 -62
- package/dist/components/Sidebar/sidebar.views.svelte.js +11 -18
- package/dist/components/Stepper/Stepper.svelte +2 -0
- package/dist/components/Stepper/stepper.mcp.d.ts +1 -1
- package/dist/components/Stepper/stepper.mcp.js +1 -0
- package/dist/components/Stepper/stepper.props.d.ts +5 -0
- package/dist/components/Stepper/stepper.state.svelte.d.ts +2 -0
- package/dist/components/Stepper/stepper.state.svelte.js +31 -12
- package/dist/components/Tabbar/Tabbar.svelte +55 -16
- package/dist/components/Tabbar/index.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.d.ts +1 -1
- package/dist/components/Tabbar/tabbar.mcp.js +26 -9
- package/dist/components/Tabbar/tabbar.props.d.ts +34 -5
- package/dist/components/Tabbar/tabbar.selection.svelte.d.ts +79 -0
- package/dist/components/Tabbar/tabbar.selection.svelte.js +99 -0
- package/dist/components/TableOfContents/tableOfContents.state.svelte.js +9 -7
- package/dist/components/Tabs/Tabs.svelte +73 -16
- package/dist/components/Tabs/index.d.ts +2 -1
- package/dist/components/Tabs/tabs.direction.svelte.d.ts +25 -0
- package/dist/components/Tabs/tabs.direction.svelte.js +40 -0
- package/dist/components/Tabs/tabs.mcp.d.ts +1 -1
- package/dist/components/Tabs/tabs.mcp.js +22 -4
- package/dist/components/Tabs/tabs.props.d.ts +39 -12
- package/dist/components/Tabs/tabs.theme.js +3 -1
- package/dist/components/Theme/Theme.svelte +44 -27
- package/dist/components/Theme/helper.d.ts +16 -2
- package/dist/components/Theme/helper.js +46 -4
- package/dist/components/Theme/theme.mcp.d.ts +1 -1
- package/dist/components/Theme/theme.mcp.js +103 -0
- package/dist/components/Theme/theme.props.d.ts +16 -0
- package/dist/components/Theme/theme.state.svelte.d.ts +14 -1
- package/dist/components/Theme/theme.state.svelte.js +18 -1
- package/dist/components/Toast/Toast.svelte +184 -39
- package/dist/components/Toast/Toaster.svelte +14 -10
- package/dist/components/Toast/index.d.ts +1 -0
- package/dist/components/Toast/toast.mcp.d.ts +1 -1
- package/dist/components/Toast/toast.mcp.js +47 -6
- package/dist/components/Toast/toast.state.svelte.d.ts +172 -6
- package/dist/components/Toast/toast.state.svelte.js +513 -68
- package/dist/components/Toast/toast.theme.js +1 -1
- package/dist/components/ToggleButton/ToggleButton.svelte +23 -1
- package/dist/components/ToggleButton/toggleButton.mcp.d.ts +1 -1
- package/dist/components/ToggleButton/toggleButton.mcp.js +3 -1
- package/dist/components/ToggleButton/toggleButton.props.d.ts +13 -1
- package/dist/components/ToggleButton/toggleButton.theme.d.ts +12 -0
- package/dist/components/ToggleButton/toggleButton.theme.js +15 -3
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.svelte +29 -9
- package/dist/components/ToggleButtonGroup/index.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.d.ts +1 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.mcp.js +5 -2
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.props.d.ts +19 -1
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.d.ts +12 -0
- package/dist/components/ToggleButtonGroup/toggleButtonGroup.theme.js +21 -2
- package/dist/components/ToggleMenu/ToggleMenu.svelte +57 -43
- package/dist/components/ToggleMenu/ToggleMenuGroup.svelte +1 -0
- package/dist/components/ToggleMenu/ToggleMenuMenu.svelte +9 -3
- package/dist/components/ToggleMenu/ToggleMenuRadioGroup.svelte +7 -2
- package/dist/components/ToggleMenu/toggleMenu.mcp.d.ts +1 -1
- package/dist/components/ToggleMenu/toggleMenu.mcp.js +3 -2
- package/dist/components/ToggleMenu/toggleMenu.props.d.ts +4 -1
- package/dist/components/Tooltip/Tooltip.svelte +4 -12
- package/dist/components/Tooltip/TooltipHost.svelte +136 -15
- package/dist/components/Tooltip/index.d.ts +1 -0
- package/dist/components/Tooltip/index.js +1 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.d.ts +5 -0
- package/dist/components/Tooltip/tooltip.attachment.svelte.js +215 -33
- package/dist/components/Tooltip/tooltip.attributes.d.ts +32 -0
- package/dist/components/Tooltip/tooltip.attributes.js +28 -0
- package/dist/components/Tooltip/tooltip.mcp.d.ts +1 -1
- package/dist/components/Tooltip/tooltip.mcp.js +111 -10
- package/dist/components/Tooltip/tooltip.props.d.ts +33 -2
- package/dist/components/Tooltip/tooltip.surface.d.ts +24 -0
- package/dist/components/Tooltip/tooltip.surface.js +42 -0
- package/dist/components/Tree/TreeContextMenuSurface.svelte +16 -3
- package/dist/components/Utils/BeforeHydratation.svelte +14 -3
- package/dist/components/Utils/BeforeHydratation.svelte.d.ts +2 -0
- package/dist/components/VideoPlayer/VideoPlayer.svelte.d.ts +1 -1
- package/dist/components/VideoPlayer/VideoPlayerSettings.svelte +2 -0
- package/dist/generated/componentAliases.d.ts +3 -0
- package/dist/generated/componentAliases.js +3 -0
- package/dist/generated/componentContract.d.ts +79 -34
- package/dist/generated/componentContract.js +231 -6
- package/dist/generated/componentMcpRegistry.js +6 -0
- package/dist/i18n/ar.js +107 -3
- package/dist/i18n/context.svelte.d.ts +6 -0
- package/dist/i18n/context.svelte.js +12 -0
- package/dist/i18n/de.js +101 -3
- package/dist/i18n/en.d.ts +91 -2
- package/dist/i18n/en.js +101 -3
- package/dist/i18n/es.js +101 -3
- package/dist/i18n/fr.js +101 -3
- package/dist/i18n/ja.js +101 -3
- package/dist/i18n/pt.js +101 -3
- package/dist/i18n/zh.js +101 -3
- package/dist/tailwind/geometry.js +7 -0
- package/dist/tailwind/global.js +31 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/types.mcp.d.ts +1 -1
- package/dist/types/types.mcp.js +23 -0
- package/dist/utils/cspNonce.d.ts +16 -0
- package/dist/utils/cspNonce.js +39 -0
- package/dist/utils/cva/merge.d.ts +5 -1
- package/dist/utils/cva/merge.js +6 -4
- package/dist/utils/focus.d.ts +34 -0
- package/dist/utils/focus.js +93 -0
- package/dist/utils/focusHistory.d.ts +21 -0
- package/dist/utils/focusHistory.js +99 -0
- package/dist/utils/handlers.d.ts +7 -0
- package/dist/utils/handlers.js +14 -0
- package/dist/utils/hoverIntent.d.ts +42 -0
- package/dist/utils/hoverIntent.js +57 -0
- package/dist/utils/id.d.ts +7 -0
- package/dist/utils/id.js +15 -0
- package/dist/utils/layers.svelte.d.ts +32 -4
- package/dist/utils/layers.svelte.js +214 -21
- package/dist/utils/listFilter.d.ts +44 -0
- package/dist/utils/listFilter.js +130 -0
- package/dist/utils/match.d.ts +35 -0
- package/dist/utils/match.js +36 -0
- package/dist/utils/number.d.ts +126 -0
- package/dist/utils/number.js +401 -0
- package/dist/utils/openChange.d.ts +88 -0
- package/dist/utils/openChange.js +71 -0
- package/dist/utils/openLifecycle.svelte.d.ts +41 -0
- package/dist/utils/openLifecycle.svelte.js +134 -0
- package/dist/utils/pointerDrag.d.ts +10 -0
- package/dist/utils/pointerDrag.js +37 -2
- package/dist/utils/pragmaticDragAndDrop.d.ts +2 -1
- package/dist/utils/pragmaticDragAndDrop.js +8 -3
- package/dist/utils/range.d.ts +62 -0
- package/dist/utils/range.js +70 -0
- package/dist/utils/requestNativeSubmit.d.ts +17 -0
- package/dist/utils/requestNativeSubmit.js +47 -0
- package/dist/utils/safeArea.svelte.d.ts +10 -1
- package/dist/utils/safeArea.svelte.js +19 -11
- package/dist/utils/stateAttributes.d.ts +108 -0
- package/dist/utils/stateAttributes.js +78 -0
- package/dist/utils/swipeVelocity.d.ts +32 -0
- package/dist/utils/swipeVelocity.js +59 -0
- package/dist/utils/timer.svelte.d.ts +65 -2
- package/dist/utils/timer.svelte.js +159 -25
- package/dist/utils/trigger.d.ts +41 -0
- package/dist/utils/trigger.js +103 -0
- package/dist/utils/typeahead.d.ts +9 -0
- package/dist/utils/typeahead.js +21 -9
- package/dist/utils/useDndList.svelte.d.ts +1 -1
- package/dist/utils/useDndList.svelte.js +6 -23
- package/dist/utils/useFocusScope.svelte.d.ts +29 -0
- package/dist/utils/useFocusScope.svelte.js +189 -27
- package/dist/utils/useHoverAction.svelte.d.ts +44 -4
- package/dist/utils/useHoverAction.svelte.js +161 -51
- package/dist/utils/useKeyDown.svelte.d.ts +19 -2
- package/dist/utils/useKeyDown.svelte.js +19 -12
- package/dist/utils/useListNavigation.svelte.d.ts +94 -13
- package/dist/utils/useListNavigation.svelte.js +261 -35
- package/dist/utils/useLiveAnnouncer.svelte.d.ts +77 -2
- package/dist/utils/useLiveAnnouncer.svelte.js +119 -2
- package/dist/utils/useNavigation.svelte.d.ts +36 -3
- package/dist/utils/useNavigation.svelte.js +699 -332
- package/dist/utils/usePressAndHold.svelte.d.ts +38 -0
- package/dist/utils/usePressAndHold.svelte.js +191 -0
- package/dist/utils/useScrollLock.svelte.d.ts +20 -1
- package/dist/utils/useScrollLock.svelte.js +54 -13
- package/dist/utils/useSlidingIndicator.svelte.d.ts +2 -0
- package/dist/utils/useSlidingIndicator.svelte.js +27 -5
- package/dist/utils/useTabBridge.svelte.d.ts +20 -0
- package/dist/utils/useTabBridge.svelte.js +109 -0
- package/dist/utils/values.d.ts +15 -0
- package/dist/utils/values.js +49 -0
- package/package.json +31 -2
- package/dist/generated/componentMcpRegistry.d.ts +0 -142
- package/dist/utils/useDrag.svelte.d.ts +0 -11
- package/dist/utils/useDrag.svelte.js +0 -55
|
@@ -14,14 +14,19 @@ The Avatar component displays a user's profile picture with fallback initials. I
|
|
|
14
14
|
### Core Props
|
|
15
15
|
- **name**: string (required) - Display name; its initials are the fallback when no image renders
|
|
16
16
|
- **src**: string - Image URL; omit it, or let it fail, to render the initials instead
|
|
17
|
-
- **alt**: string -
|
|
17
|
+
- **alt**: string - Accessible name of the whole avatar (defaults to \`name\`). An empty string makes the avatar decorative: it is hidden from assistive technology
|
|
18
18
|
- **size**: 'small' | 'normal' | 'large' (default: 'normal')
|
|
19
19
|
- small: 24px (1.5rem)
|
|
20
20
|
- normal: 32px (2rem)
|
|
21
21
|
- large: 40px (2.5rem)
|
|
22
22
|
|
|
23
|
+
### Image Props
|
|
24
|
+
- **image**: { srcset, sizes, crossorigin, referrerpolicy, loading, decoding, fetchpriority } - Native attributes forwarded to the \`<img>\`. Use \`image={{ loading: 'lazy' }}\` to defer offscreen images: the initials stay on screen until the browser has fetched the picture. (The avatar's own \`loading\` prop is the bindable in-flight flag, not the \`<img>\` attribute.)
|
|
25
|
+
|
|
23
26
|
### Loading Props
|
|
24
|
-
- **
|
|
27
|
+
- **fallbackDelay**: number (default: 0) - Delay in milliseconds before the initials render while the image is still loading. Until then the surface stays empty, so a fast image never flashes the fallback. A failed image or a missing \`src\` shows the initials immediately
|
|
28
|
+
- **revealDelay**: number (default: 0) - Delay in milliseconds before a loaded image is revealed
|
|
29
|
+
- **delay**: number - Deprecated alias of \`revealDelay\`; it never delays the initials
|
|
25
30
|
- **loading**: boolean (default: false, bindable) - True while the image request is in flight; false with no \`src\`, and false once the image has loaded or failed. A failed image is reported by rendering the initials.
|
|
26
31
|
|
|
27
32
|
### Content Slots
|
|
@@ -49,6 +54,7 @@ The Avatar component displays a user's profile picture with fallback initials. I
|
|
|
49
54
|
- **items**: Array<{ src?: string; alt?: string; name: string } & T> (required) - Avatar items
|
|
50
55
|
- **max**: number - Maximum number of avatars to show before "+N" indicator
|
|
51
56
|
- **size**: 'small' | 'normal' | 'large' (default: 'normal')
|
|
57
|
+
- **image**, **fallbackDelay**, **revealDelay**, **loading**: forwarded to every avatar
|
|
52
58
|
|
|
53
59
|
### Content Slots
|
|
54
60
|
- **avatar**: Snippet<{ item: T; index: number; avatarProps }> - Custom avatar rendering
|
|
@@ -203,9 +209,11 @@ The Avatar component displays a user's profile picture with fallback initials. I
|
|
|
203
209
|
|
|
204
210
|
## Accessibility
|
|
205
211
|
|
|
206
|
-
- \`
|
|
207
|
-
-
|
|
208
|
-
-
|
|
212
|
+
- The root is \`role="img"\` named by \`alt ?? name\`, so a loading, loaded or failed image and an avatar without \`src\` are all announced as one image with one name
|
|
213
|
+
- The inner \`<img>\` has an empty \`alt\` and the initials are \`aria-hidden\`, so nothing is read twice
|
|
214
|
+
- \`alt=""\` marks the avatar decorative (\`aria-hidden\` on the root), for an avatar next to its visible name
|
|
215
|
+
- Because the root is an image, prefix and suffix content is presentational to assistive technology; keep interactive controls outside the avatar
|
|
216
|
+
- The root carries \`data-status="idle | loading | loaded | error"\` (\`idle\` means no \`src\`). The default theme crossfades the image over the initials on it; style it with \`group-data-[status=loaded]/avatar:\` or \`[data-status=error]\`
|
|
209
217
|
- The image loading flag is bindable
|
|
210
218
|
|
|
211
219
|
## Notes
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Sizes } from '../../types/index.js';
|
|
2
|
+
import type { HTMLImgAttributes } from 'svelte/elements';
|
|
2
3
|
import type { Slot } from '../Slot/slot.js';
|
|
3
4
|
import type { WithAttachments } from '../../types/props.js';
|
|
4
5
|
import type { AvatarThemeProps } from './avatar.theme.js';
|
|
@@ -6,21 +7,47 @@ import type { AvatarThemeProps } from './avatar.theme.js';
|
|
|
6
7
|
export type AvatarItem = {
|
|
7
8
|
/** Image URL. When omitted, or when the image fails, the initials render instead. */
|
|
8
9
|
src?: string;
|
|
9
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Accessible name of the avatar, announced once for the whole avatar. Defaults to `name`.
|
|
12
|
+
* An empty string marks the avatar decorative and hides it from assistive technology.
|
|
13
|
+
*/
|
|
10
14
|
alt?: string;
|
|
11
15
|
/** Display name; its initials are the fallback when no image renders. */
|
|
12
16
|
name: string;
|
|
13
17
|
};
|
|
18
|
+
/** Native `<img>` attributes an avatar forwards to its image. */
|
|
19
|
+
export type AvatarImageAttributes = Pick<HTMLImgAttributes, 'srcset' | 'sizes' | 'crossorigin' | 'referrerpolicy' | 'loading' | 'decoding' | 'fetchpriority'>;
|
|
20
|
+
/** Where the image is in its lifecycle; mirrored on the root as `data-status`. */
|
|
21
|
+
export type AvatarStatus = 'idle' | 'loading' | 'loaded' | 'error';
|
|
14
22
|
export type AvatarProps = WithAttachments<AvatarItem & {
|
|
15
23
|
/**
|
|
16
24
|
* The size of the avatar.
|
|
17
25
|
* @default 'normal'
|
|
18
26
|
*/
|
|
19
27
|
size?: Sizes;
|
|
28
|
+
/**
|
|
29
|
+
* Native attributes forwarded to the `<img>`: `srcset`, `sizes`, `crossorigin`,
|
|
30
|
+
* `referrerpolicy`, `loading`, `decoding` and `fetchpriority`. With `loading: 'lazy'` the
|
|
31
|
+
* initials stay on screen until the browser has fetched and decoded the image.
|
|
32
|
+
*/
|
|
33
|
+
image?: AvatarImageAttributes;
|
|
34
|
+
/**
|
|
35
|
+
* The delay in milliseconds before the initials render while the image is still loading.
|
|
36
|
+
* Until it elapses the surface stays empty, so an image that arrives quickly never flashes
|
|
37
|
+
* the fallback. A failed image, or an avatar without `src`, shows the initials immediately.
|
|
38
|
+
* @default 0
|
|
39
|
+
*/
|
|
40
|
+
fallbackDelay?: number;
|
|
20
41
|
/**
|
|
21
42
|
* The delay in milliseconds before a loaded image is revealed.
|
|
22
43
|
* @default 0
|
|
23
44
|
*/
|
|
45
|
+
revealDelay?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Deprecated alias of `revealDelay`: the delay in milliseconds before a loaded image is
|
|
48
|
+
* revealed. It never delays the initials (that is `fallbackDelay`).
|
|
49
|
+
* @deprecated Use `revealDelay`.
|
|
50
|
+
*/
|
|
24
51
|
delay?: number;
|
|
25
52
|
/**
|
|
26
53
|
* Whether the image is still loading. Bindable, so a parent can show its own
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { setComponentTheme, useComponentTheme } from '../../utils/cva/index.js';
|
|
2
2
|
import { cva } from '../../utils/cva/index.js';
|
|
3
3
|
const defaultAvatar = cva({
|
|
4
|
-
base: 'relative items-center border border-neutral-muted text-neutral aspect-ratio-1 rounded-full',
|
|
4
|
+
base: 'group/avatar relative items-center border border-neutral-muted text-neutral aspect-ratio-1 rounded-full',
|
|
5
5
|
variants: {
|
|
6
6
|
size: {
|
|
7
7
|
normal: 'size-8',
|
|
@@ -14,7 +14,7 @@ const defaultAvatar = cva({
|
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
const defaultAvatarImage = cva({
|
|
17
|
-
base: 'rounded-full absolute top-0 left-0 z-0 object-cover w-full max-w-full h-full max-h-full',
|
|
17
|
+
base: 'rounded-full absolute top-0 left-0 z-0 object-cover w-full max-w-full h-full max-h-full opacity-0 transition-opacity duration-normal motion-reduce:transition-none group-data-[status=loaded]/avatar:opacity-100',
|
|
18
18
|
variants: {
|
|
19
19
|
size: {
|
|
20
20
|
normal: '',
|
|
@@ -55,7 +55,7 @@ const defaultAvatarSuffix = cva({
|
|
|
55
55
|
// Small initials sit on the type scale's smallest step, so they tighten their tracking instead:
|
|
56
56
|
// two bold capitals then fill the 24px circle in the same proportion the larger sizes do.
|
|
57
57
|
const defaultAvatarInitials = cva({
|
|
58
|
-
base: 'absolute bg-surface-floating bottom-0 w-full h-full text-center left-0 rounded-full flex items-center justify-center uppercase font-bold text-sm',
|
|
58
|
+
base: 'absolute bg-surface-floating bottom-0 w-full h-full text-center left-0 rounded-full flex items-center justify-center uppercase font-bold text-sm transition-opacity duration-normal motion-reduce:transition-none group-data-[status=loaded]/avatar:opacity-0',
|
|
59
59
|
variants: {
|
|
60
60
|
size: {
|
|
61
61
|
normal: 'text-sm',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { default as Avatar } from './Avatar.svelte';
|
|
2
2
|
export { default as AvatarGroup } from './AvatarGroup.svelte';
|
|
3
|
-
export type { AvatarItem, AvatarProps } from './avatar.props.js';
|
|
3
|
+
export type { AvatarImageAttributes, AvatarItem, AvatarProps, AvatarStatus } from './avatar.props.js';
|
|
4
4
|
export type { AvatarGroupProps } from './avatarGroup.props.js';
|
|
5
5
|
export { avatarTheme, setAvatarTheme, useAvatarTheme, type AvatarTheme, type AvatarThemeProps } from './avatar.theme.js';
|
|
6
6
|
export { avatarGroupTheme, setAvatarGroupTheme, useAvatarGroupTheme, type AvatarGroupTheme, type AvatarGroupThemeProps } from './avatarGroup.theme.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const breadcrumbsDescription = "\n# Breadcrumbs Component\n\nA navigation component that displays a hierarchical path of links, helping users understand their location within a website or application. Supports keyboard navigation, dropdown menus for nested items, customizable separators, and ellipsis for long paths. Uses semantic HTML structure (`<nav><ol><li>`) following accessibility best practices.\n\n## Basic Usage\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products' },\n { label: 'Electronics', href: '/products/electronics', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n## Props\n\n### Core Props\n\n- **items**: BreadcrumbItem[] (required)\n - Array of breadcrumb items to display\n - Each item is a config object with: label, href, active, disabled, onclick, icon, menu\n\n- **home**: Omit<BreadcrumbItem, 'menu' | 'label'> & { label?: string | Snippet } (optional)\n - Optional home breadcrumb item to prepend to the items array\n - If provided, it will be rendered as the first breadcrumb\n - When `label` is omitted a house icon is rendered\n\n- **maxItems**: number (optional)\n - Maximum number of items to show before using ellipsis\n - When set, shows first item, ellipsis, and last N items\n - Example: `maxItems={3}` shows first item + ellipsis + last 2 items\n - If maxItems >= items.length, all items are shown (no ellipsis)\n\n- **showSeparator**: boolean (default: true)\n - Whether to display separators between breadcrumb items\n\n- **class**: string\n - Additional CSS classes for the breadcrumbs container\n\n- **theme**: BreadcrumbsThemeProps\n - Custom theme overrides for styling\n\n### BreadcrumbItem Properties\n\n- **label**: string | Snippet (required)\n - The text or snippet to display for the breadcrumb item\n - Can be a string or a snippet without parameters\n\n- **href**: string (optional)\n - URL to navigate to. If provided, renders as an anchor element\n\n- **active**: boolean (default: false)\n - Whether this breadcrumb represents the current page\n - Active items render as `<span>` with `font-normal` styling and `aria-current=\"page\"`\n\n- **disabled**: boolean (default: false)\n - Whether the breadcrumb item is disabled\n - Disabled items are not navigable and have reduced opacity\n\n- **onclick**: (event: MouseEvent) => void (optional)\n - Native click event handler for the breadcrumb item\n\n- **icon**: string | Snippet (optional)\n - Icon snippet or string to display before the label\n\n- **menu**: MenuItem[] (optional)\n - Array of menu items for dropdown functionality\n - If provided, the breadcrumb renders as a PopupMenu\n\n### Content Props (Slots)\n\n- **separator**: Snippet\n - Custom separator between breadcrumb items\n - Default: `arrowRightIcon` (chevron right icon)\n - No parameters passed to the snippet\n\n- **ellipsis**: Snippet\n - Custom rendering for the ellipsis indicator\n - Default: `dotsThreeOutlineIcon` with \"More\" screen reader text\n - No parameters passed to the snippet\n\n## Examples\n\n### Basic Breadcrumbs with Links\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'About', href: '/about' },\n { label: 'Team', href: '/about/team', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n### Breadcrumbs with Home Item\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Products', href: '/products' },\n { label: 'Electronics', href: '/products/electronics', active: true }\n ];\n</script>\n\n<Breadcrumbs home={{ label: 'Home', href: '/' }} {items} />\n<!-- Or with the default house icon -->\n<Breadcrumbs home={{ href: '/' }} {items} />\n```\n\n### Breadcrumbs with Icons\n\n```svelte\n<script lang=\"ts\">\n import { Breadcrumbs } from './index.ts';\n import { houseIcon } from 'entasis/icons/house';\n import { folderIcon } from 'entasis/icons/folder';\n import { fileIcon } from 'entasis/icons/file';\n \n const items = [\n { label: 'Home', href: '/', icon: houseIcon },\n { label: 'Documents', href: '/docs', icon: folderIcon },\n { label: 'Report.pdf', href: '/docs/report', icon: fileIcon, active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n### Breadcrumbs with Dropdown Menus\n\n```svelte\n<script lang=\"ts\">\n import { Breadcrumbs, type BreadcrumbItem } from './index.ts';\n \n const items: BreadcrumbItem[] = [\n { label: 'Home', href: '/' },\n { \n label: 'Products', \n menu: [\n { type: 'option', children: 'All Products', href: '/products' },\n { type: 'option', children: 'Electronics', href: '/products/electronics' },\n { type: 'option', children: 'Clothing', href: '/products/clothing' }\n ]\n },\n { label: 'Electronics', href: '/products/electronics', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n### Custom Separator\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products' },\n { label: 'Details', href: '/products/details', active: true }\n ];\n</script>\n\n<Breadcrumbs {items}>\n {#snippet separator()}\n <span class=\"text-neutral/70\">\u203A</span>\n {/snippet}\n</Breadcrumbs>\n```\n\n### Breadcrumbs with Ellipsis\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Category 1', href: '/cat1' },\n { label: 'Category 2', href: '/cat2' },\n { label: 'Category 3', href: '/cat3' },\n { label: 'Category 4', href: '/cat4' },\n { label: 'Current Page', href: '/current', active: true }\n ];\n</script>\n\n<!-- Shows first item + ellipsis + last 2 items -->\n<Breadcrumbs {items} maxItems={3} />\n```\n\n### Inline Items\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n</script>\n\n<Breadcrumbs\n items={[\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products' },\n { label: 'Electronics', active: true }\n ]}\n/>\n```\n\n### Items with Snippet Labels\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n</script>\n\n{#snippet productsLabel()}\n <strong>Products</strong>\n{/snippet}\n\n<Breadcrumbs\n items={[\n { label: 'Home', href: '/' },\n { label: productsLabel, href: '/products' },\n { label: 'Details', href: '/products/details', active: true }\n ]}\n/>\n```\n\n### Disabled Items\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products', disabled: true },\n { label: 'Details', href: '/products/details', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n\n### Without Separators\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products' },\n { label: 'Details', href: '/products/details', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} showSeparator={false} />\n```\n\n## BreadcrumbItem Type\n\nEach item in the `items` array is a config object with properties like `label`, `href`, `active`, etc.\n\nThe `label` property can be a string or a snippet without parameters.\n\n## Keyboard Navigation\n\nThe Breadcrumbs component supports full keyboard navigation via the `useNavigation` hook:\n\n- **Arrow Left**: Navigate to previous breadcrumb item\n- **Arrow Right**: Navigate to next breadcrumb item\n- **Home**: Navigate to first breadcrumb item\n- **End**: Navigate to last breadcrumb item\n- **Enter/Space**: Activate the focused breadcrumb item\n- **Escape**: Clear focus\n\nDisabled items are automatically skipped during keyboard navigation.\n\n## Accessibility\n\n- Uses semantic `<nav>` element with `aria-label=\"Breadcrumbs\"`\n- Active items use `aria-current=\"page\"` attribute\n- Disabled items use `aria-disabled` attribute\n- Proper focus management with roving tabindex pattern\n- Keyboard navigation support for all interactive elements\n- Screen reader friendly with proper ARIA attributes\n\n## Structure\n\nThe component uses semantic HTML structure:\n- `<nav>` element with `aria-label=\"Breadcrumbs\"`\n- `<ol>` (ordered list) for the breadcrumb list\n- `<li>` elements for each breadcrumb item\n- `<li>` elements for separators with `role=\"presentation\"` and `aria-hidden=\"true\"`\n- Active items render as `<span>` with `role=\"link\"`, `aria-disabled=\"true\"`, and `aria-current=\"page\"`\n- Non-active items render as links (`<a>`) or buttons (`<button>`)\n- Ellipsis indicator for long paths\n- PopupMenu integration for items with nested menus\n\n## Notes\n\n- Items with `href` render as anchor elements, others render as buttons\n- Active items render as `<span>` elements with `font-normal` styling (not bold)\n- Disabled items cannot be navigated and have reduced opacity\n- Separators are not shown after the last item\n- The default separator is `arrowRightIcon` (chevron right) but can be customized via the `separator` slot\n- Items with `menu` property automatically render as PopupMenu components\n- Ellipsis is shown when `maxItems` is set and there are more items than the limit\n- Uses semantic HTML structure (`<nav><ol><li>`) for better accessibility\n- Styling matches shadcn/ui breadcrumb component patterns\n- Items can be simple strings/snippets or full config objects\n- Labels and icons can be strings or snippets (no parameters)\n\n## Theme Customization\n\nThe Breadcrumbs component 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 breadcrumbs container styles\n- **item**: Individual breadcrumb item styles\n- **link**: Breadcrumb link/button styles\n- **separator**: Separator icon/styles\n- **ellipsis**: Ellipsis indicator styles\n- **icon**: Icon styles\n\n### Available Variants\n\n**root**:\n- base: Base classes for main container\n\n**item**:\n- base: Base classes for breadcrumb items\n- Variants:\n - disabled: boolean - Disabled state styling\n - active: boolean - Active/current page styling\n\n**link**:\n- base: Base classes for links/buttons\n- Variants:\n - disabled: boolean - Disabled state styling\n - active: boolean - Active state styling\n\n**separator**:\n- base: Base classes for separator icons\n\n**ellipsis**:\n- base: Base classes for ellipsis indicator\n\n**icon**:\n- base: Base classes for icons\n- Variants:\n - size: 'small' | 'normal' | 'large' - Icon size\n\n### Usage Examples\n\n**Basic Theme Override**:\n```svelte\n<Breadcrumbs \n items={items}\n theme={{\n root: {\n base: 'flex items-center gap-2 text-sm'\n },\n item: {\n active: {\n true: 'text-primary font-semibold'\n }\n }\n }}\n/>\n```\n\n**Custom Link Styling**:\n```svelte\n<Breadcrumbs \n items={items}\n theme={{\n link: {\n base: 'hover:text-primary transition-colors',\n active: {\n true: 'text-gray-900 font-semibold'\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed'\n }\n },\n separator: {\n base: 'text-gray-400 mx-2'\n }\n }}\n/>\n```\n\n**Global Theme Setting**:\n```svelte\n<script>\n import { setBreadcrumbsTheme } from './index.ts';\n \n setBreadcrumbsTheme({\n root: {\n base: 'flex items-center gap-2 text-sm'\n },\n item: {\n active: {\n true: 'text-primary'\n }\n },\n separator: {\n base: 'text-gray-400'\n }\n });\n</script>\n```\n";
|
|
1
|
+
export declare const breadcrumbsDescription = "\n# Breadcrumbs Component\n\nA navigation component that displays a hierarchical path of links, helping users understand their location within a website or application. Supports keyboard navigation, dropdown menus for nested items, customizable separators, and ellipsis for long paths. Uses semantic HTML structure (`<nav><ol><li>`) following accessibility best practices.\n\n## Basic Usage\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products' },\n { label: 'Electronics', href: '/products/electronics', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n## Props\n\n### Core Props\n\n- **items**: BreadcrumbItem[] (required)\n - Array of breadcrumb items to display\n - Each item is a config object with: label, href, active, disabled, onclick, icon, menu\n\n- **home**: Omit<BreadcrumbItem, 'menu' | 'label'> & { label?: string | Snippet } (optional)\n - Optional home breadcrumb item to prepend to the items array\n - If provided, it will be rendered as the first breadcrumb\n - When `label` is omitted a house icon is rendered\n\n- **maxItems**: number (optional)\n - Maximum number of items to show before using ellipsis\n - When set, shows first item, ellipsis, and last N items\n - Example: `maxItems={3}` shows first item + ellipsis + last 2 items\n - If maxItems >= items.length, all items are shown (no ellipsis)\n\n- **showSeparator**: boolean (default: true)\n - Whether to display separators between breadcrumb items\n\n- **class**: string\n - Additional CSS classes for the breadcrumbs container\n\n- **theme**: BreadcrumbsThemeProps\n - Custom theme overrides for styling\n\n### BreadcrumbItem Properties\n\n- **label**: string | Snippet (required)\n - The text or snippet to display for the breadcrumb item\n - Can be a string or a snippet without parameters\n\n- **href**: string (optional)\n - URL to navigate to. If provided, renders as an anchor element\n\n- **active**: boolean (default: false)\n - Whether this breadcrumb represents the current page\n - Active items render as `<span>` with `font-normal` styling and `aria-current=\"page\"`\n\n- **disabled**: boolean (default: false)\n - Whether the breadcrumb item is disabled\n - Disabled items are not navigable and have reduced opacity\n\n- **onclick**: (event: MouseEvent) => void (optional)\n - Native click event handler for the breadcrumb item\n\n- **icon**: string | Snippet (optional)\n - Icon snippet or string to display before the label\n\n- **menu**: MenuItem[] (optional)\n - Array of menu items for dropdown functionality\n - If provided, the breadcrumb renders as a PopupMenu\n\n### Content Props (Slots)\n\n- **separator**: Snippet\n - Custom separator between breadcrumb items\n - Default: `arrowRightIcon` (chevron right icon)\n - No parameters passed to the snippet\n\n- **ellipsis**: Snippet\n - Custom rendering for the ellipsis indicator\n - Default: `dotsThreeOutlineIcon` with \"More\" screen reader text\n - No parameters passed to the snippet\n\n## Examples\n\n### Basic Breadcrumbs with Links\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'About', href: '/about' },\n { label: 'Team', href: '/about/team', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n### Breadcrumbs with Home Item\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Products', href: '/products' },\n { label: 'Electronics', href: '/products/electronics', active: true }\n ];\n</script>\n\n<Breadcrumbs home={{ label: 'Home', href: '/' }} {items} />\n<!-- Or with the default house icon -->\n<Breadcrumbs home={{ href: '/' }} {items} />\n```\n\n### Breadcrumbs with Icons\n\n```svelte\n<script lang=\"ts\">\n import { Breadcrumbs } from './index.ts';\n import { houseIcon } from 'entasis/icons/house';\n import { folderIcon } from 'entasis/icons/folder';\n import { fileIcon } from 'entasis/icons/file';\n \n const items = [\n { label: 'Home', href: '/', icon: houseIcon },\n { label: 'Documents', href: '/docs', icon: folderIcon },\n { label: 'Report.pdf', href: '/docs/report', icon: fileIcon, active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n### Breadcrumbs with Dropdown Menus\n\n```svelte\n<script lang=\"ts\">\n import { Breadcrumbs, type BreadcrumbItem } from './index.ts';\n \n const items: BreadcrumbItem[] = [\n { label: 'Home', href: '/' },\n { \n label: 'Products', \n menu: [\n { type: 'option', children: 'All Products', href: '/products' },\n { type: 'option', children: 'Electronics', href: '/products/electronics' },\n { type: 'option', children: 'Clothing', href: '/products/clothing' }\n ]\n },\n { label: 'Electronics', href: '/products/electronics', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n### Custom Separator\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products' },\n { label: 'Details', href: '/products/details', active: true }\n ];\n</script>\n\n<Breadcrumbs {items}>\n {#snippet separator()}\n <span class=\"text-neutral/70\">\u203A</span>\n {/snippet}\n</Breadcrumbs>\n```\n\n### Breadcrumbs with Ellipsis\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Category 1', href: '/cat1' },\n { label: 'Category 2', href: '/cat2' },\n { label: 'Category 3', href: '/cat3' },\n { label: 'Category 4', href: '/cat4' },\n { label: 'Current Page', href: '/current', active: true }\n ];\n</script>\n\n<!-- Shows first item + ellipsis + last 2 items -->\n<Breadcrumbs {items} maxItems={3} />\n```\n\n### Inline Items\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n</script>\n\n<Breadcrumbs\n items={[\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products' },\n { label: 'Electronics', active: true }\n ]}\n/>\n```\n\n### Items with Snippet Labels\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n</script>\n\n{#snippet productsLabel()}\n <strong>Products</strong>\n{/snippet}\n\n<Breadcrumbs\n items={[\n { label: 'Home', href: '/' },\n { label: productsLabel, href: '/products' },\n { label: 'Details', href: '/products/details', active: true }\n ]}\n/>\n```\n\n### Disabled Items\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products', disabled: true },\n { label: 'Details', href: '/products/details', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} />\n```\n\n\n### Without Separators\n\n```svelte\n<script>\n import { Breadcrumbs } from './index.ts';\n \n const items = [\n { label: 'Home', href: '/' },\n { label: 'Products', href: '/products' },\n { label: 'Details', href: '/products/details', active: true }\n ];\n</script>\n\n<Breadcrumbs {items} showSeparator={false} />\n```\n\n## BreadcrumbItem Type\n\nEach item in the `items` array is a config object with properties like `label`, `href`, `active`, etc.\n\nThe `label` property can be a string or a snippet without parameters.\n\n## Keyboard Navigation\n\nThe Breadcrumbs component supports full keyboard navigation via the `useNavigation` hook:\n\n- **Arrow Left**: Navigate to previous breadcrumb item\n- **Arrow Right**: Navigate to next breadcrumb item\n- **Home**: Navigate to first breadcrumb item\n- **End**: Navigate to last breadcrumb item\n- **Enter/Space**: Activate the focused breadcrumb item\n- **Escape**: Clear focus\n\nDisabled items and items hidden with CSS (a `display: none` class, the `hidden` attribute or a media query) are automatically skipped during keyboard navigation. The `<nav>` element is not a Tab stop of its own: Tab reaches the breadcrumbs through their single roving tab stop. Keys pressed on content you render inside Breadcrumbs that is not an item (a custom `ellipsis` button) stay with that content, apart from the arrows and Home/End, which move into the trail.\n\n## Accessibility\n\n- Uses semantic `<nav>` element with `aria-label=\"Breadcrumbs\"`\n- Active items use `aria-current=\"page\"` attribute\n- Disabled items use `aria-disabled` attribute\n- Proper focus management with roving tabindex pattern\n- Keyboard navigation support for all interactive elements\n- Screen reader friendly with proper ARIA attributes\n\n## Structure\n\nThe component uses semantic HTML structure:\n- `<nav>` element with `aria-label=\"Breadcrumbs\"`\n- `<ol>` (ordered list) for the breadcrumb list\n- `<li>` elements for each breadcrumb item\n- `<li>` elements for separators with `role=\"presentation\"` and `aria-hidden=\"true\"`\n- Active items render as `<span>` with `role=\"link\"`, `aria-disabled=\"true\"`, and `aria-current=\"page\"`\n- Non-active items render as links (`<a>`) or buttons (`<button>`)\n- Ellipsis indicator for long paths\n- PopupMenu integration for items with nested menus\n\n## Notes\n\n- Items with `href` render as anchor elements, others render as buttons\n- Active items render as `<span>` elements with `font-normal` styling (not bold)\n- Disabled items cannot be navigated and have reduced opacity\n- Separators are not shown after the last item\n- The default separator is `arrowRightIcon` (chevron right) but can be customized via the `separator` slot\n- Items with `menu` property automatically render as PopupMenu components\n- Ellipsis is shown when `maxItems` is set and there are more items than the limit\n- Uses semantic HTML structure (`<nav><ol><li>`) for better accessibility\n- Styling matches shadcn/ui breadcrumb component patterns\n- Items can be simple strings/snippets or full config objects\n- Labels and icons can be strings or snippets (no parameters)\n\n## Theme Customization\n\nThe Breadcrumbs component 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 breadcrumbs container styles\n- **item**: Individual breadcrumb item styles\n- **link**: Breadcrumb link/button styles\n- **separator**: Separator icon/styles\n- **ellipsis**: Ellipsis indicator styles\n- **icon**: Icon styles\n\n### Available Variants\n\n**root**:\n- base: Base classes for main container\n\n**item**:\n- base: Base classes for breadcrumb items\n- Variants:\n - disabled: boolean - Disabled state styling\n - active: boolean - Active/current page styling\n\n**link**:\n- base: Base classes for links/buttons\n- Variants:\n - disabled: boolean - Disabled state styling\n - active: boolean - Active state styling\n\n**separator**:\n- base: Base classes for separator icons\n\n**ellipsis**:\n- base: Base classes for ellipsis indicator\n\n**icon**:\n- base: Base classes for icons\n- Variants:\n - size: 'small' | 'normal' | 'large' - Icon size\n\n### Usage Examples\n\n**Basic Theme Override**:\n```svelte\n<Breadcrumbs \n items={items}\n theme={{\n root: {\n base: 'flex items-center gap-2 text-sm'\n },\n item: {\n active: {\n true: 'text-primary font-semibold'\n }\n }\n }}\n/>\n```\n\n**Custom Link Styling**:\n```svelte\n<Breadcrumbs \n items={items}\n theme={{\n link: {\n base: 'hover:text-primary transition-colors',\n active: {\n true: 'text-gray-900 font-semibold'\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed'\n }\n },\n separator: {\n base: 'text-gray-400 mx-2'\n }\n }}\n/>\n```\n\n**Global Theme Setting**:\n```svelte\n<script>\n import { setBreadcrumbsTheme } from './index.ts';\n \n setBreadcrumbsTheme({\n root: {\n base: 'flex items-center gap-2 text-sm'\n },\n item: {\n active: {\n true: 'text-primary'\n }\n },\n separator: {\n base: 'text-gray-400'\n }\n });\n</script>\n```\n";
|
|
@@ -289,7 +289,7 @@ The Breadcrumbs component supports full keyboard navigation via the \`useNavigat
|
|
|
289
289
|
- **Enter/Space**: Activate the focused breadcrumb item
|
|
290
290
|
- **Escape**: Clear focus
|
|
291
291
|
|
|
292
|
-
Disabled items are automatically skipped during keyboard navigation.
|
|
292
|
+
Disabled items and items hidden with CSS (a \`display: none\` class, the \`hidden\` attribute or a media query) are automatically skipped during keyboard navigation. The \`<nav>\` element is not a Tab stop of its own: Tab reaches the breadcrumbs through their single roving tab stop. Keys pressed on content you render inside Breadcrumbs that is not an item (a custom \`ellipsis\` button) stay with that content, apart from the arrows and Home/End, which move into the trail.
|
|
293
293
|
|
|
294
294
|
## Accessibility
|
|
295
295
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import type { Attachment } from 'svelte/attachments';
|
|
2
3
|
import { spinnerOverlay } from '../../attachments/spinnerOverlay.svelte.js';
|
|
3
4
|
import Slot from '../Slot/Slot.svelte';
|
|
4
5
|
import type { ButtonInternalProps } from './button.props.js';
|
|
@@ -6,7 +7,6 @@
|
|
|
6
7
|
import { useDefaultColor } from '../Theme/theme.state.svelte.js';
|
|
7
8
|
|
|
8
9
|
let {
|
|
9
|
-
as,
|
|
10
10
|
loading = false,
|
|
11
11
|
onclick = null,
|
|
12
12
|
onpointerenter = null,
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
ref = $bindable(),
|
|
26
26
|
fullWidth = false,
|
|
27
27
|
disabled = false,
|
|
28
|
+
focusableWhenDisabled = false,
|
|
28
29
|
theme,
|
|
29
30
|
rel,
|
|
30
31
|
target,
|
|
@@ -45,7 +46,16 @@
|
|
|
45
46
|
const isSquared = $derived(
|
|
46
47
|
squared ?? !!((!children && prefix && !suffix) || (!children && !prefix && suffix))
|
|
47
48
|
);
|
|
48
|
-
const isAnchor = $derived(!!
|
|
49
|
+
const isAnchor = $derived(!!href);
|
|
50
|
+
// Only a disabled <button> uses the native attribute, and only when it may leave the tab order.
|
|
51
|
+
// A loading button, or one that is `focusableWhenDisabled`, stays focusable, so a keyboard user
|
|
52
|
+
// keeps their place, and refuses activation through `aria-disabled` instead.
|
|
53
|
+
const nativeDisabled = $derived(!isAnchor && disabled && !focusableWhenDisabled);
|
|
54
|
+
const inactive = $derived(disabled || loading);
|
|
55
|
+
// A disabled anchor has no `href`, so only an explicit tabindex keeps it focusable.
|
|
56
|
+
const anchorTabindex = $derived(
|
|
57
|
+
isAnchor && disabled ? (focusableWhenDisabled ? (tabindex ?? 0) : -1) : tabindex
|
|
58
|
+
);
|
|
49
59
|
|
|
50
60
|
const resolvedColor = $derived(useDefaultColor(color));
|
|
51
61
|
// One set of variant values for every slot; the template reads `slots.x()`.
|
|
@@ -57,26 +67,34 @@
|
|
|
57
67
|
size,
|
|
58
68
|
loading,
|
|
59
69
|
disabled,
|
|
70
|
+
focusable: focusableWhenDisabled,
|
|
60
71
|
fullWidth
|
|
61
72
|
})
|
|
62
73
|
);
|
|
63
74
|
|
|
64
|
-
|
|
65
|
-
|
|
75
|
+
// Enter and Space still dispatch `click` on a focusable loading button. A capture listener on
|
|
76
|
+
// the element cancels that click before anything else sees it: listeners attached to the
|
|
77
|
+
// button itself (`{@attach popover.trigger}`), Svelte's delegated `onclick` handlers, and a
|
|
78
|
+
// router listening on <html>, which runs before them for content portaled outside the app
|
|
79
|
+
// root. Cancelling it also stops a submit button from submitting and an anchor from
|
|
80
|
+
// navigating. The listener is registered once and reads `inactive` on each click.
|
|
81
|
+
const refuseInactiveActivation: Attachment<HTMLElement> = (node) => {
|
|
82
|
+
const refuse = (event: MouseEvent) => {
|
|
83
|
+
if (!inactive) return;
|
|
66
84
|
event.preventDefault();
|
|
67
|
-
event.
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
onclick?.(event);
|
|
85
|
+
event.stopImmediatePropagation();
|
|
86
|
+
};
|
|
87
|
+
node.addEventListener('click', refuse, { capture: true });
|
|
88
|
+
return () => node.removeEventListener('click', refuse, { capture: true });
|
|
72
89
|
};
|
|
73
90
|
|
|
91
|
+
// A focusable disabled button keeps its pointer events, so hover callbacks (a tooltip) still fire.
|
|
74
92
|
const handlePointerEnter: NonNullable<ButtonInternalProps['onpointerenter']> = (event) => {
|
|
75
|
-
if (!disabled) onpointerenter?.(event);
|
|
93
|
+
if (!disabled || focusableWhenDisabled) onpointerenter?.(event);
|
|
76
94
|
};
|
|
77
95
|
|
|
78
96
|
const handlePointerLeave: NonNullable<ButtonInternalProps['onpointerleave']> = (event) => {
|
|
79
|
-
if (!disabled) onpointerleave?.(event);
|
|
97
|
+
if (!disabled || focusableWhenDisabled) onpointerleave?.(event);
|
|
80
98
|
};
|
|
81
99
|
</script>
|
|
82
100
|
|
|
@@ -88,23 +106,25 @@
|
|
|
88
106
|
aria-controls={controls}
|
|
89
107
|
aria-selected={selected}
|
|
90
108
|
aria-pressed={pressed}
|
|
91
|
-
aria-disabled={
|
|
109
|
+
aria-disabled={inactive && !nativeDisabled ? true : undefined}
|
|
110
|
+
aria-busy={loading ? true : undefined}
|
|
92
111
|
role={role ?? (isAnchor ? 'link' : 'button')}
|
|
93
112
|
href={isAnchor && !disabled ? href : undefined}
|
|
94
113
|
{rel}
|
|
95
114
|
{target}
|
|
96
115
|
{download}
|
|
97
116
|
{type}
|
|
98
|
-
tabindex={
|
|
117
|
+
tabindex={anchorTabindex}
|
|
99
118
|
bind:this={ref}
|
|
100
119
|
data-active={dataActive}
|
|
101
120
|
data-highlighted={dataHighlighted}
|
|
102
121
|
data-slot={dataSlot}
|
|
103
122
|
data-color={resolvedColor}
|
|
104
|
-
disabled={
|
|
123
|
+
disabled={nativeDisabled ? true : undefined}
|
|
105
124
|
class={slots.root({ className })}
|
|
125
|
+
{@attach refuseInactiveActivation}
|
|
106
126
|
{@attach spinnerOverlay({ loading, size })}
|
|
107
|
-
|
|
127
|
+
{onclick}
|
|
108
128
|
onpointerenter={onpointerenter ? handlePointerEnter : undefined}
|
|
109
129
|
onpointerleave={onpointerleave ? handlePointerLeave : undefined}
|
|
110
130
|
{...attachments}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const buttonDescription = "\n# Button Component\n\nThe Button component is a flexible and customizable button element that supports various variants, sizes, colors, and interactive states.\n\n## Basic Usage\n\n```svelte\n<Button>Click me</Button>\n<Button variant=\"outline\">Outline Button</Button>\n<Button color=\"primary\" size=\"large\">Large Primary Button</Button>\n```\n\n## Props\n\n### Core Props\n- **variant**: 'solid' | 'outline' | 'soft' | 'ghost' | 'link' (default: 'solid')\n - solid: Filled background with color\n - outline: Transparent background with colored border\n - soft: Muted color background\n - ghost: Transparent background with a transient state layer on hover and press\n - link: Text-only styling with underline on hover\n\n- **color**: 'primary' | 'secondary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info' (default: 'neutral')\n - Determines the color scheme of the button\n\n- **size**: 'small' | 'normal' | 'large' (default: 'normal')\n - small: 28px height, smaller padding and text\n - normal: 32px height, standard padding\n - large: 36px height, larger padding and text\n\n### Layout Props\n- **fullWidth**: boolean (default: false) - Makes button take full width of container\n- **squared**: boolean - Makes button square (aspect-ratio 1:1), auto-determined if only prefix/suffix is provided\n- **disabled**: boolean (default: false) - Disables button interaction\n- **loading**: boolean (default: false) - Shows the Theme-configured loading spinner and
|
|
1
|
+
export declare const buttonDescription = "\n# Button Component\n\nThe Button component is a flexible and customizable button element that supports various variants, sizes, colors, and interactive states.\n\n## Basic Usage\n\n```svelte\n<Button>Click me</Button>\n<Button variant=\"outline\">Outline Button</Button>\n<Button color=\"primary\" size=\"large\">Large Primary Button</Button>\n```\n\n## Props\n\n### Core Props\n- **variant**: 'solid' | 'outline' | 'soft' | 'ghost' | 'link' (default: 'solid')\n - solid: Filled background with color\n - outline: Transparent background with colored border\n - soft: Muted color background\n - ghost: Transparent background with a transient state layer on hover and press\n - link: Text-only styling with underline on hover\n\n- **color**: 'primary' | 'secondary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info' (default: 'neutral')\n - Determines the color scheme of the button\n\n- **size**: 'small' | 'normal' | 'large' (default: 'normal')\n - small: 28px height, smaller padding and text\n - normal: 32px height, standard padding\n - large: 36px height, larger padding and text\n\n### Layout Props\n- **fullWidth**: boolean (default: false) - Makes button take full width of container\n- **squared**: boolean - Makes button square (aspect-ratio 1:1), auto-determined if only prefix/suffix is provided\n- **disabled**: boolean (default: false) - Disables button interaction. A `<button>` gets the native `disabled` attribute and leaves the tab order; an anchor drops its href, leaves the tab order and renders `aria-disabled=\"true\"`\n- **focusableWhenDisabled**: boolean (default: false) - Keeps a `disabled` button focusable: it renders `aria-disabled=\"true\"` instead of the native `disabled` attribute, stays in the tab order and still receives pointer events (so a tooltip can explain why it is unavailable), and refuses activation: clicks from the pointer, Enter and Space are cancelled before any other listener sees them, and a `type=\"submit\"` button does not submit. A disabled anchor drops its href and takes `tabindex=\"0\"`. Has no effect without `disabled`\n- **loading**: boolean (default: false) - Shows the Theme-configured loading spinner and refuses activation while staying focusable: renders `aria-busy=\"true\"` and `aria-disabled=\"true\"`, and cancels clicks (pointer, Enter and Space) before any other listener sees them, including attachments such as `popover.trigger`, as well as the form submission of a `type=\"submit\"` button and the navigation of an anchor. It never sets the native `disabled` attribute, so keyboard focus stays on the button while the work runs\n\n### State Props\nDescribe the meaning; the Button writes the ARIA. Never pass an aria-* attribute to a Button.\n- **pressed**: boolean - Toggle state of a button that stays on or off (a bold button in a toolbar, a \"show password\" eye). Rendered as aria-pressed\n- **selected**: boolean - Chosen state of a button acting as one option among several (a tab, a listbox option). Rendered as aria-selected\n- **expanded**: boolean - Whether the surface this button opens is showing. Rendered as aria-expanded. A entasis surface (Popover, PopupMenu, Select, Combobox) sets this on its own trigger, so pass it only for a surface you open yourself\n- **haspopup**: 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid' | true - What the surface this button opens contains. Rendered as aria-haspopup, and likewise set by a entasis surface on its own trigger\n\n### Link Props\n- **href**: string - Makes button render as anchor tag\n- **target**: string - Link target (e.g., \"_blank\")\n- **rel**: string - Link relationship\n\n### Event Props\n- **onclick**: (event: MouseEvent) => void - Native click event handler\n- **onpointerenter**: (event: PointerEvent) => void - Native pointer enter event handler\n- **onpointerleave**: (event: PointerEvent) => void - Native pointer leave event handler\n\n### Content Props (Slots)\n- **children**: Snippet - Main button content\n- **prefix**: Snippet - Content before main text (typically icons)\n- **suffix**: Snippet - Content after main text (typically icons)\n\n### Advanced Props\n- **label**: string - Accessible label applied as aria-label on the root element (required for icon-only buttons)\n- **ref**: HTMLElement - Reference to the button element\n- **class**: string - Additional CSS classes\n- **theme**: ComponentTheme - Custom theme overrides\n\n## Structure\n\nThe button follows this DOM structure:\n```\n<Button>\n\t<Prefix /> <!-- Optional prefix content -->\n\t<Children /> <!-- Main button content -->\n\t<Suffix /> <!-- Optional suffix content -->\n</Button>\n```\n\n## Examples\n\n### Basic Buttons\n```svelte\n<Button>Default Button</Button>\n<Button variant=\"outline\" color=\"primary\">Primary Outline</Button>\n<Button variant=\"soft\" color=\"danger\">Soft Danger</Button>\n<Button variant=\"ghost\">Ghost Button</Button>\n<Button variant=\"link\">Link Button</Button>\n```\n\n### With Icons\n```svelte\n<Button>\n\t{#snippet prefix()}\n\t\t{@render icon()}\n\t{/snippet}\n\tAdd Item\n</Button>\n\n<Button squared>\n\t{#snippet prefix()}\n\t\t{@render icon()}\n\t{/snippet}\n</Button>\n```\n\n### Interactive States\n```svelte\n<Button loading>Loading...</Button>\n<Button disabled>Disabled</Button>\n<Button fullWidth>Full Width Button</Button>\n```\n\n### As Link\n```svelte\n<Button href=\"/dashboard\" target=\"_blank\">Go to Dashboard</Button>\n```\n\n### With Event Handlers\n```svelte\n<script lang=\"ts\">\n\tfunction handleClick(event: MouseEvent) {\n\t\tconsole.log('Clicked:', event.currentTarget);\n\t}\n</script>\n\n<Button onclick={handleClick}>\n\tClick\n</Button>\n```\n\n### Custom Styling\n```svelte\n<Button class=\"lift-4 border-2\" color=\"primary\" variant=\"outline\">\n\tCustom Styled\n</Button>\n```\n\n## Accessibility\n\n- Automatically sets appropriate ARIA roles (button/link)\n- Supports keyboard navigation\n- Disabled state prevents interaction\n- Loading state keeps focus on the button and announces it busy (`aria-busy`) and unavailable (`aria-disabled`); clicks, Enter, Space and form submission are cancelled until it ends\n- Prefer `loading` over `disabled` for a button whose own action is running: `disabled` removes the button from the tab order and drops focus to the page body\n- Use `focusableWhenDisabled` for a button that stays in the tab order while unavailable (for example with a tooltip explaining why); it is announced with `aria-disabled` and refuses activation\n\n## Notes\n\n- When `href` is provided, renders as `<a>` tag, otherwise `<button>`\n- `squared` is automatically determined when only prefix or suffix is provided without children\n- All event handlers respect disabled state; `onclick` also stays silent while `loading`\n- Icon sizing is automatically adjusted based on button size\n\n## Theme Customization\n\nThe Button component 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 button container styles\n- **prefix**: Styles for prefix content (icons before text)\n- **suffix**: Styles for suffix content (icons after text)\n\n### Theme Type Definition\n\n```typescript\nimport type { ButtonThemeProps } from 'entasis/button';\n\n// Example theme customization\nconst customTheme: ButtonThemeProps = {\n root: {\n base: 'custom-base-classes',\n size: {\n small: 'custom-small-classes',\n normal: 'custom-normal-classes',\n large: 'custom-large-classes'\n },\n color: {\n primary: 'bg-blue-500 text-white',\n danger: 'bg-red-500 text-white'\n },\n variant: {\n solid: 'bg-color text-color-contrast',\n outline: 'border-2 border-color'\n }\n },\n prefix: {\n size: {\n small: 'w-3 h-3',\n normal: 'w-4 h-4',\n large: 'w-5 h-5'\n }\n }\n};\n```\n\n### Available Variants\n\n**root**:\n- base: Base classes applied to all buttons\n- Variants:\n - size: 'small' | 'normal' | 'large' - Controls padding, text size, and height\n - color: 'primary' | 'secondary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info' - Color scheme\n - variant: 'solid' | 'outline' | 'soft' | 'ghost' | 'link' - Visual style variant\n - loading: boolean - Loading state styling\n - disabled: boolean - Disabled state styling\n - focusable: boolean - Set with `focusableWhenDisabled`: a disabled button keeps its pointer events\n - squared: boolean - Square button styling\n - fullWidth: boolean - Full width styling\n\n**prefix**:\n- base: Base classes for prefix content\n- Variants:\n - size: 'small' | 'normal' | 'large' - Icon size based on button size\n\n**suffix**:\n- base: Base classes for suffix content\n- Variants:\n - size: 'small' | 'normal' | 'large' - Icon size based on button size\n\n### Usage Examples\n\n**Basic Theme Override**:\n```svelte\n<Button \n theme={{\n root: {\n base: 'rounded-full lift-4',\n size: {\n large: 'px-8 py-4 text-xl'\n }\n }\n }}\n>\n Custom Styled Button\n</Button>\n```\n\n**Color Variant Customization**:\n```svelte\n<Button \n color=\"primary\"\n theme={{\n root: {\n color: {\n primary: 'state-layer bg-linear-to-r from-blue-500 to-purple-500'\n }\n }\n }}\n>\n Gradient Button\n</Button>\n```\n\n**Global Theme Setting**:\n```svelte\n<script>\n import { setButtonTheme } from './index.ts';\n \n setButtonTheme({\n root: {\n variant: {\n solid: 'state-layer bg-color text-color-contrast lift-3 hover:lift-4 transition-shadow',\n outline: 'state-layer border-2 border-color'\n }\n },\n prefix: {\n size: {\n normal: 'w-5 h-5'\n }\n }\n });\n</script>\n```\n";
|
|
@@ -32,8 +32,9 @@ The Button component is a flexible and customizable button element that supports
|
|
|
32
32
|
### Layout Props
|
|
33
33
|
- **fullWidth**: boolean (default: false) - Makes button take full width of container
|
|
34
34
|
- **squared**: boolean - Makes button square (aspect-ratio 1:1), auto-determined if only prefix/suffix is provided
|
|
35
|
-
- **disabled**: boolean (default: false) - Disables button interaction
|
|
36
|
-
- **
|
|
35
|
+
- **disabled**: boolean (default: false) - Disables button interaction. A \`<button>\` gets the native \`disabled\` attribute and leaves the tab order; an anchor drops its href, leaves the tab order and renders \`aria-disabled="true"\`
|
|
36
|
+
- **focusableWhenDisabled**: boolean (default: false) - Keeps a \`disabled\` button focusable: it renders \`aria-disabled="true"\` instead of the native \`disabled\` attribute, stays in the tab order and still receives pointer events (so a tooltip can explain why it is unavailable), and refuses activation: clicks from the pointer, Enter and Space are cancelled before any other listener sees them, and a \`type="submit"\` button does not submit. A disabled anchor drops its href and takes \`tabindex="0"\`. Has no effect without \`disabled\`
|
|
37
|
+
- **loading**: boolean (default: false) - Shows the Theme-configured loading spinner and refuses activation while staying focusable: renders \`aria-busy="true"\` and \`aria-disabled="true"\`, and cancels clicks (pointer, Enter and Space) before any other listener sees them, including attachments such as \`popover.trigger\`, as well as the form submission of a \`type="submit"\` button and the navigation of an anchor. It never sets the native \`disabled\` attribute, so keyboard focus stays on the button while the work runs
|
|
37
38
|
|
|
38
39
|
### State Props
|
|
39
40
|
Describe the meaning; the Button writes the ARIA. Never pass an aria-* attribute to a Button.
|
|
@@ -138,13 +139,15 @@ The button follows this DOM structure:
|
|
|
138
139
|
- Automatically sets appropriate ARIA roles (button/link)
|
|
139
140
|
- Supports keyboard navigation
|
|
140
141
|
- Disabled state prevents interaction
|
|
141
|
-
- Loading state
|
|
142
|
+
- Loading state keeps focus on the button and announces it busy (\`aria-busy\`) and unavailable (\`aria-disabled\`); clicks, Enter, Space and form submission are cancelled until it ends
|
|
143
|
+
- Prefer \`loading\` over \`disabled\` for a button whose own action is running: \`disabled\` removes the button from the tab order and drops focus to the page body
|
|
144
|
+
- Use \`focusableWhenDisabled\` for a button that stays in the tab order while unavailable (for example with a tooltip explaining why); it is announced with \`aria-disabled\` and refuses activation
|
|
142
145
|
|
|
143
146
|
## Notes
|
|
144
147
|
|
|
145
148
|
- When \`href\` is provided, renders as \`<a>\` tag, otherwise \`<button>\`
|
|
146
149
|
- \`squared\` is automatically determined when only prefix or suffix is provided without children
|
|
147
|
-
- All event handlers respect disabled state
|
|
150
|
+
- All event handlers respect disabled state; \`onclick\` also stays silent while \`loading\`
|
|
148
151
|
- Icon sizing is automatically adjusted based on button size
|
|
149
152
|
|
|
150
153
|
## Theme Customization
|
|
@@ -201,6 +204,7 @@ const customTheme: ButtonThemeProps = {
|
|
|
201
204
|
- variant: 'solid' | 'outline' | 'soft' | 'ghost' | 'link' - Visual style variant
|
|
202
205
|
- loading: boolean - Loading state styling
|
|
203
206
|
- disabled: boolean - Disabled state styling
|
|
207
|
+
- focusable: boolean - Set with \`focusableWhenDisabled\`: a disabled button keeps its pointer events
|
|
204
208
|
- squared: boolean - Square button styling
|
|
205
209
|
- fullWidth: boolean - Full width styling
|
|
206
210
|
|
|
@@ -22,7 +22,7 @@ export type ButtonPrimitiveProps = WithAttachments<WithSlot<{
|
|
|
22
22
|
*/
|
|
23
23
|
label?: string;
|
|
24
24
|
/**
|
|
25
|
-
* ARIA role override. Defaults to `button` (or `link` when `href
|
|
25
|
+
* ARIA role override. Defaults to `button` (or `link` when `href` is set).
|
|
26
26
|
* Pass `menuitem` when the button is an item inside a `menu`.
|
|
27
27
|
*/
|
|
28
28
|
role?: string;
|
|
@@ -56,7 +56,13 @@ export type ButtonPrimitiveProps = WithAttachments<WithSlot<{
|
|
|
56
56
|
*/
|
|
57
57
|
href?: string;
|
|
58
58
|
/**
|
|
59
|
-
* When true, shows a spinner overlay and
|
|
59
|
+
* When true, shows a spinner overlay and refuses activation while keeping the button
|
|
60
|
+
* focusable: it renders `aria-busy="true"` and `aria-disabled="true"`, and cancels clicks
|
|
61
|
+
* (pointer, Enter and Space) before any other listener sees them, including attachments
|
|
62
|
+
* such as `popover.trigger`, as well as the form submission of a `type="submit"` button
|
|
63
|
+
* and the navigation of an anchor. Unlike
|
|
64
|
+
* `disabled`, it never sets the native `disabled` attribute, so focus stays on the
|
|
65
|
+
* button while the work runs.
|
|
60
66
|
*/
|
|
61
67
|
loading?: boolean;
|
|
62
68
|
/**
|
|
@@ -80,9 +86,22 @@ export type ButtonPrimitiveProps = WithAttachments<WithSlot<{
|
|
|
80
86
|
*/
|
|
81
87
|
fullWidth?: boolean;
|
|
82
88
|
/**
|
|
83
|
-
* When true, prevents interaction and applies disabled styles.
|
|
89
|
+
* When true, prevents interaction and applies disabled styles. A `<button>` gets the
|
|
90
|
+
* native `disabled` attribute and leaves the tab order; an anchor drops its `href`,
|
|
91
|
+
* leaves the tab order and renders `aria-disabled="true"`. With `focusableWhenDisabled`
|
|
92
|
+
* the button stays in the tab order instead.
|
|
84
93
|
*/
|
|
85
94
|
disabled?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* When true, a `disabled` button stays focusable: it renders `aria-disabled="true"`
|
|
97
|
+
* instead of the native `disabled` attribute, keeps its place in the tab order and still
|
|
98
|
+
* receives pointer events (so a tooltip can explain why it is unavailable), and refuses
|
|
99
|
+
* activation: clicks from the pointer, Enter and Space are cancelled before any other
|
|
100
|
+
* listener sees them, and a `type="submit"` button does not submit. An anchor drops its
|
|
101
|
+
* `href` and takes `tabindex="0"`. Has no effect without `disabled`.
|
|
102
|
+
* @default false
|
|
103
|
+
*/
|
|
104
|
+
focusableWhenDisabled?: boolean;
|
|
86
105
|
/**
|
|
87
106
|
* The class name of the button. First element that the component outputs in the DOM.
|
|
88
107
|
*/
|
|
@@ -95,10 +114,6 @@ export type ButtonPrimitiveProps = WithAttachments<WithSlot<{
|
|
|
95
114
|
* Link rel attribute when href is set.
|
|
96
115
|
*/
|
|
97
116
|
rel?: string;
|
|
98
|
-
/**
|
|
99
|
-
* When set, renders the root element as an anchor instead of a button.
|
|
100
|
-
*/
|
|
101
|
-
as?: 'string';
|
|
102
117
|
/**
|
|
103
118
|
* Theme overrides for button parts such as prefix and suffix.
|
|
104
119
|
*/
|
|
@@ -114,7 +129,7 @@ export type ButtonPrimitiveProps = WithAttachments<WithSlot<{
|
|
|
114
129
|
/** Semantic part name used by composed components and theme tooling. */
|
|
115
130
|
'data-slot'?: string;
|
|
116
131
|
} & ButtonForwardedAttributes & ButtonForwardedAnchorAttributes & ButtonEventAttributes, 'suffix' | 'prefix' | 'children'>>;
|
|
117
|
-
export type ButtonProps =
|
|
132
|
+
export type ButtonProps = ButtonPrimitiveProps;
|
|
118
133
|
/**
|
|
119
134
|
* Button props plus the id plumbing the library wires between a surface and its own trigger.
|
|
120
135
|
* Deliberately absent from the package's public exports: `controls` is an element id the
|
|
@@ -30,6 +30,10 @@ export declare const buttonTheme: {
|
|
|
30
30
|
true: string;
|
|
31
31
|
false: null;
|
|
32
32
|
};
|
|
33
|
+
focusable: {
|
|
34
|
+
true: null;
|
|
35
|
+
false: null;
|
|
36
|
+
};
|
|
33
37
|
squared: {
|
|
34
38
|
true: string;
|
|
35
39
|
false: null;
|
|
@@ -86,6 +90,10 @@ export declare const setButtonTheme: (theme: InferComponentTheme<{
|
|
|
86
90
|
true: string;
|
|
87
91
|
false: null;
|
|
88
92
|
};
|
|
93
|
+
focusable: {
|
|
94
|
+
true: null;
|
|
95
|
+
false: null;
|
|
96
|
+
};
|
|
89
97
|
squared: {
|
|
90
98
|
true: string;
|
|
91
99
|
false: null;
|
|
@@ -140,6 +148,10 @@ export declare const useButtonTheme: import("../../utils/cva/theme.js").UseCompo
|
|
|
140
148
|
true: string;
|
|
141
149
|
false: null;
|
|
142
150
|
};
|
|
151
|
+
focusable: {
|
|
152
|
+
true: null;
|
|
153
|
+
false: null;
|
|
154
|
+
};
|
|
143
155
|
squared: {
|
|
144
156
|
true: string;
|
|
145
157
|
false: null;
|
|
@@ -22,14 +22,23 @@ const defaultButton = cva({
|
|
|
22
22
|
outline: 'state-layer bg-color/0 border border-color text-color-readable',
|
|
23
23
|
soft: 'state-layer text-color-muted-readable bg-color-muted',
|
|
24
24
|
ghost: 'state-layer text-color-readable bg-color/0',
|
|
25
|
-
link: 'bg-transparent text-color-readable hover:underline'
|
|
25
|
+
link: 'bg-transparent text-color-readable hover:not-aria-disabled:underline'
|
|
26
26
|
},
|
|
27
|
+
// A loading button keeps receiving pointer events: pointer-events-none would let a second click
|
|
28
|
+
// fall through to the page beneath and drop keyboard focus to <body>. The click guard in
|
|
29
|
+
// Button.svelte refuses the activation instead.
|
|
27
30
|
loading: {
|
|
28
|
-
true: 'cursor-default
|
|
31
|
+
true: 'cursor-default active:translate-y-0',
|
|
29
32
|
false: null
|
|
30
33
|
},
|
|
31
34
|
disabled: {
|
|
32
|
-
true: 'opacity-50 cursor-not-allowed
|
|
35
|
+
true: 'opacity-50 cursor-not-allowed',
|
|
36
|
+
false: null
|
|
37
|
+
},
|
|
38
|
+
// Disabled but still focusable (`focusableWhenDisabled`): it renders `aria-disabled`, so it
|
|
39
|
+
// must keep its pointer events for the click guard and for hover tooltips.
|
|
40
|
+
focusable: {
|
|
41
|
+
true: null,
|
|
33
42
|
false: null
|
|
34
43
|
},
|
|
35
44
|
squared: {
|
|
@@ -43,9 +52,13 @@ const defaultButton = cva({
|
|
|
43
52
|
defaultVariants: {
|
|
44
53
|
color: 'neutral',
|
|
45
54
|
variant: 'solid',
|
|
46
|
-
size: 'normal'
|
|
55
|
+
size: 'normal',
|
|
56
|
+
focusable: false
|
|
47
57
|
},
|
|
48
58
|
compoundVariants: [
|
|
59
|
+
// A natively disabled button takes no pointer events; a focusable one keeps them.
|
|
60
|
+
{ disabled: true, focusable: false, class: 'pointer-events-none' },
|
|
61
|
+
{ disabled: true, focusable: true, class: 'active:translate-y-0' },
|
|
49
62
|
// The neutral outline is toolbar chrome next to inputs and selects, which all draw a
|
|
50
63
|
// `neutral-muted` hairline; a full-strength neutral border made it the odd one out.
|
|
51
64
|
{ color: 'neutral', variant: 'outline', class: 'border-neutral-muted' }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const buttonGroupDescription = "\n# ButtonGroup Component\n\nThe ButtonGroup component displays a collection of related buttons as a cohesive group with shared styling properties.\n\n## Basic Usage\n\n```svelte\n<ButtonGroup \n\titems={[\n\t\t{ children: 'First' },\n\t\t{ children: 'Second' },\n\t\t{ children: 'Third' }\n\t]}\n/>\n```\n\n## Props\n\n### Core Props\nPass either `items` or `children`.\n- **items**: Array<ButtonProps> - Array of button configurations\n - Each button can have all standard Button component props\n- **children**: Snippet - Buttons composed directly, for content an item object cannot describe\n (a Tooltip or Popover trigger, a Button with a custom body). Each direct child is joined to its\n neighbours; set size, color and variant on each Button, since the shared props below apply to\n `items` only.\n- **label**: string - Accessible name of the group (the root has `role=\"group\"`)\n\n### Shared Button Props (items)\n- **size**: 'small' | 'normal' | 'large' - Applied to all buttons in the group\n- **color**: 'primary' | 'secondary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info' - Shared color for all buttons\n- **variant**: 'solid' | 'outline' | 'soft' | 'ghost' | 'link' - Shared variant for all buttons\n- **disabled**: boolean - Disables all buttons in the group, even one whose item sets `disabled: false
|
|
1
|
+
export declare const buttonGroupDescription = "\n# ButtonGroup Component\n\nThe ButtonGroup component displays a collection of related buttons as a cohesive group with shared styling properties.\n\n## Basic Usage\n\n```svelte\n<ButtonGroup \n\titems={[\n\t\t{ children: 'First' },\n\t\t{ children: 'Second' },\n\t\t{ children: 'Third' }\n\t]}\n/>\n```\n\n## Props\n\n### Core Props\nPass either `items` or `children`.\n- **items**: Array<ButtonProps> - Array of button configurations\n - Each button can have all standard Button component props\n- **children**: Snippet - Buttons composed directly, for content an item object cannot describe\n (a Tooltip or Popover trigger, a Button with a custom body). Each direct child is joined to its\n neighbours; set size, color and variant on each Button, since the shared props below apply to\n `items` only.\n- **label**: string - Accessible name of the group (the root has `role=\"group\"`)\n\n### Shared Button Props (items)\n- **size**: 'small' | 'normal' | 'large' - Applied to all buttons in the group\n- **color**: 'primary' | 'secondary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info' - Shared color for all buttons\n- **variant**: 'solid' | 'outline' | 'soft' | 'ghost' | 'link' - Shared variant for all buttons\n- **disabled**: boolean - Disables all buttons in the group, even one whose item sets `disabled: false`. An item that sets `focusableWhenDisabled` stays focusable and announces `aria-disabled` instead of leaving the tab order\n\n### Styling Props\n- **class**: string - Additional CSS classes for the group container\n- **theme**: ComponentTheme - Custom theme overrides\n\n## Structure\n\n```\n<ButtonGroup>\n\t<Button />\n\t<Button />\n\t<Button />\n</ButtonGroup>\n```\n\n## Examples\n\n### Composed Children\n```svelte\n<script lang=\"ts\">\n\timport { Button } from 'entasis/button';\n\timport { ButtonGroup } from 'entasis/button-group';\n\timport { Tooltip } from 'entasis/tooltip';\n</script>\n\n<ButtonGroup label=\"History\">\n\t<Button variant=\"outline\">Undo</Button>\n\t<Tooltip content=\"Redo the last change\" trigger={{ content: 'Redo', variant: 'outline' }} />\n</ButtonGroup>\n```\n\n### Basic Button Group\n```svelte\n<ButtonGroup \n\titems={[\n\t\t{ children: 'Left' },\n\t\t{ children: 'Center' },\n\t\t{ children: 'Right' }\n\t]}\n/>\n```\n\n### With Shared Styling\n```svelte\n<ButtonGroup \n\tsize=\"large\"\n\tcolor=\"primary\"\n\tvariant=\"outline\"\n\titems={[\n\t\t{ children: 'Option 1' },\n\t\t{ children: 'Option 2' },\n\t\t{ children: 'Option 3' }\n\t]}\n/>\n```\n\n### With Icons\n```svelte\n<script lang=\"ts\">\n\timport { ButtonGroup } from 'entasis/button-group';\n\timport { textAlignLeftIcon } from 'entasis/icons/textAlignLeft';\n\timport { textAlignCenterIcon } from 'entasis/icons/textAlignCenter';\n\timport { textAlignRightIcon } from 'entasis/icons/textAlignRight';\n</script>\n\n<ButtonGroup \n\titems={[\n\t\t{ \n\t\t\tprefix: textAlignLeftIcon,\n\t\t\tchildren: 'Left' \n\t\t},\n\t\t{ \n\t\t\tprefix: textAlignCenterIcon,\n\t\t\tchildren: 'Center' \n\t\t},\n\t\t{ \n\t\t\tprefix: textAlignRightIcon,\n\t\t\tchildren: 'Right' \n\t\t}\n\t]}\n/>\n```\n\n### With Individual Click Handlers\n```svelte\n<script>\n\tfunction handleOption(option) {\n\t\tconsole.log(`Selected: ${option}`);\n\t}\n</script>\n\n<ButtonGroup \n\titems={[\n\t\t{ \n\t\t\tchildren: 'Save',\n\t\t\tonclick: () => handleOption('save')\n\t\t},\n\t\t{ \n\t\t\tchildren: 'Cancel',\n\t\t\tonclick: () => handleOption('cancel')\n\t\t}\n\t]}\n/>\n```\n\n### Disabled Group\n```svelte\n<ButtonGroup \n\tdisabled\n\titems={[\n\t\t{ children: 'Option 1' },\n\t\t{ children: 'Option 2' }\n\t]}\n/>\n```\n\n### Icon Only Buttons\n```svelte\n<script lang=\"ts\">\n\timport { ButtonGroup } from 'entasis/button-group';\n\timport { textBIcon } from 'entasis/icons/textB';\n\timport { textItalicIcon } from 'entasis/icons/textItalic';\n\timport { textUnderlineIcon } from 'entasis/icons/textUnderline';\n</script>\n\n<ButtonGroup \n\titems={[\n\t\t{ \n\t\t\tsquared: true,\n\t\t\tprefix: textBIcon\n\t\t},\n\t\t{ \n\t\t\tsquared: true,\n\t\t\tprefix: textItalicIcon\n\t\t},\n\t\t{ \n\t\t\tsquared: true,\n\t\t\tprefix: textUnderlineIcon\n\t\t}\n\t]}\n/>\n```\n\n### Mixed Button States\n```svelte\n<ButtonGroup \n\tvariant=\"outline\"\n\titems={[\n\t\t{ children: 'Active', color: 'primary' },\n\t\t{ children: 'Default', color: 'neutral' },\n\t\t{ children: 'Disabled', disabled: true }\n\t]}\n/>\n```\n\n### Segmented Control\n```svelte\n<script>\n\tlet selected = $state('week');\n</script>\n\n<ButtonGroup \n\titems={[\n\t\t{ \n\t\t\tchildren: 'Day',\n\t\t\tvariant: selected === 'day' ? 'solid' : 'ghost',\n\t\t\tonclick: () => selected = 'day'\n\t\t},\n\t\t{ \n\t\t\tchildren: 'Week',\n\t\t\tvariant: selected === 'week' ? 'solid' : 'ghost',\n\t\t\tonclick: () => selected = 'week'\n\t\t},\n\t\t{ \n\t\t\tchildren: 'Month',\n\t\t\tvariant: selected === 'month' ? 'solid' : 'ghost',\n\t\t\tonclick: () => selected = 'month'\n\t\t}\n\t]}\n/>\n```\n\n## Styling\n\nButtonGroup automatically:\n- Removes border-radius from middle buttons\n- Adjusts borders to prevent double borders\n- Creates a cohesive, connected appearance\n- Maintains consistent spacing\n\n## Accessibility\n\n- Each button maintains full keyboard accessibility\n- Focus styles are preserved\n- Disabled state cascades properly\n- Screen readers announce each button individually\n\n## Notes\n\n- Individual button props override shared props\n- Buttons are rendered in the order provided\n- The group container can be styled with the `class` prop\n- All Button component features are supported for individual buttons\n\n## Theme Customization\n\nThe ButtonGroup component 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 button group container styles\n\n### Available Variants\n\n**root**:\n- base: Base classes for button group container (handles border radius and border connections between buttons)\n\n### Usage Examples\n\n**Basic Theme Override**:\n```svelte\n<ButtonGroup \n items={buttons}\n theme={{\n root: {\n base: 'flex items-center rounded-lg overflow-hidden'\n }\n }}\n/>\n```\n\n**Custom Group Styling**:\n```svelte\n<ButtonGroup \n items={buttons}\n theme={{\n root: {\n base: 'flex items-center gap-0 border-2 border-primary rounded-lg overflow-hidden'\n }\n }}\n/>\n```\n\n**Global Theme Setting**:\n```svelte\n<script>\n import { setButtonGroupTheme } from './index.ts';\n \n setButtonGroupTheme({\n root: {\n base: 'flex items-center first-child:rounded-r-none last-child:rounded-l-none'\n }\n });\n</script>\n```\n";
|
|
@@ -31,7 +31,7 @@ Pass either \`items\` or \`children\`.
|
|
|
31
31
|
- **size**: 'small' | 'normal' | 'large' - Applied to all buttons in the group
|
|
32
32
|
- **color**: 'primary' | 'secondary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info' - Shared color for all buttons
|
|
33
33
|
- **variant**: 'solid' | 'outline' | 'soft' | 'ghost' | 'link' - Shared variant for all buttons
|
|
34
|
-
- **disabled**: boolean - Disables all buttons in the group, even one whose item sets \`disabled: false\`
|
|
34
|
+
- **disabled**: boolean - Disables all buttons in the group, even one whose item sets \`disabled: false\`. An item that sets \`focusableWhenDisabled\` stays focusable and announces \`aria-disabled\` instead of leaving the tab order
|
|
35
35
|
|
|
36
36
|
### Styling Props
|
|
37
37
|
- **class**: string - Additional CSS classes for the group container
|
|
@@ -24,7 +24,10 @@ export type ButtonGroupProps = WithAttachments<ButtonGroupContent & {
|
|
|
24
24
|
color?: Colors;
|
|
25
25
|
/** Visual variant applied to every item in the group. */
|
|
26
26
|
variant?: ButtonVariant;
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* When true, disables every item in the group, whatever the item says. An item with
|
|
29
|
+
* `focusableWhenDisabled` stays focusable and announces `aria-disabled` instead.
|
|
30
|
+
*/
|
|
28
31
|
disabled?: boolean;
|
|
29
32
|
/** Class name on the root group container element. */
|
|
30
33
|
class?: string;
|