@brightspot/ui 1.10.0 → 3.0.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/dist/components/action-bar/ActionBar.d.ts +163 -0
- package/dist/components/action-bar/ActionBar.d.ts.map +1 -0
- package/dist/components/action-bar/ActionBar.js +479 -0
- package/dist/components/action-bar/ActionBar.js.map +1 -0
- package/dist/components/action-bar/ActionItem.d.ts +103 -0
- package/dist/components/action-bar/ActionItem.d.ts.map +1 -0
- package/dist/components/action-bar/ActionItem.js +237 -0
- package/dist/components/action-bar/ActionItem.js.map +1 -0
- package/dist/components/avatar/AvatarGroup.d.ts +3 -0
- package/dist/components/avatar/AvatarGroup.d.ts.map +1 -1
- package/dist/components/avatar/AvatarGroup.js +3 -0
- package/dist/components/avatar/AvatarGroup.js.map +1 -1
- package/dist/components/badge/Badge.d.ts +3 -1
- package/dist/components/badge/Badge.d.ts.map +1 -1
- package/dist/components/badge/Badge.js +2 -0
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/button-group/ButtonGroup.d.ts +138 -0
- package/dist/components/button-group/ButtonGroup.d.ts.map +1 -0
- package/dist/components/button-group/ButtonGroup.js +436 -0
- package/dist/components/button-group/ButtonGroup.js.map +1 -0
- package/dist/components/checkbox/Checkbox.d.ts +107 -0
- package/dist/components/checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/Checkbox.js +224 -0
- package/dist/components/checkbox/Checkbox.js.map +1 -0
- package/dist/components/circular-progress/CircularProgress.d.ts +2 -2
- package/dist/components/circular-progress/CircularProgress.js +2 -2
- package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts +7 -2
- package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts.map +1 -1
- package/dist/components/copy-to-clipboard/CopyToClipboard.js +10 -5
- package/dist/components/copy-to-clipboard/CopyToClipboard.js.map +1 -1
- package/dist/components/dropdown/Dropdown.d.ts +8 -6
- package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
- package/dist/components/dropdown/Dropdown.js +33 -22
- package/dist/components/dropdown/Dropdown.js.map +1 -1
- package/dist/components/dropdown/DropdownItem.d.ts +28 -7
- package/dist/components/dropdown/DropdownItem.d.ts.map +1 -1
- package/dist/components/dropdown/DropdownItem.js +41 -16
- package/dist/components/dropdown/DropdownItem.js.map +1 -1
- package/dist/components/dropdown/DropdownMenu.d.ts +6 -8
- package/dist/components/dropdown/DropdownMenu.d.ts.map +1 -1
- package/dist/components/dropdown/DropdownMenu.js +22 -37
- package/dist/components/dropdown/DropdownMenu.js.map +1 -1
- package/dist/components/empty-state/EmptyState.css +4 -0
- package/dist/components/empty-state/EmptyState.d.ts +103 -0
- package/dist/components/empty-state/EmptyState.d.ts.map +1 -0
- package/dist/components/empty-state/EmptyState.js +209 -0
- package/dist/components/empty-state/EmptyState.js.map +1 -0
- package/dist/components/icon/Icon.d.ts +23 -10
- package/dist/components/icon/Icon.d.ts.map +1 -1
- package/dist/components/icon/Icon.js +40 -9
- package/dist/components/icon/Icon.js.map +1 -1
- package/dist/components/icon-button/IconButton.d.ts +7 -21
- package/dist/components/icon-button/IconButton.d.ts.map +1 -1
- package/dist/components/icon-button/IconButton.js +12 -18
- package/dist/components/icon-button/IconButton.js.map +1 -1
- package/dist/components/linear-progress/LinearProgress.d.ts +2 -2
- package/dist/components/linear-progress/LinearProgress.js +2 -2
- package/dist/components/pagination/Pagination.d.ts +33 -4
- package/dist/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.js +88 -24
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/popover/Popover.d.ts +6 -0
- package/dist/components/popover/Popover.d.ts.map +1 -1
- package/dist/components/popover/Popover.js +6 -0
- package/dist/components/popover/Popover.js.map +1 -1
- package/dist/components/switch/Switch.d.ts +5 -1
- package/dist/components/switch/Switch.d.ts.map +1 -1
- package/dist/components/switch/Switch.js +10 -6
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/tabs/Tab.d.ts +108 -0
- package/dist/components/tabs/Tab.d.ts.map +1 -0
- package/dist/components/tabs/Tab.js +152 -0
- package/dist/components/tabs/Tab.js.map +1 -0
- package/dist/components/tabs/Tabs.d.ts +126 -0
- package/dist/components/tabs/Tabs.d.ts.map +1 -0
- package/dist/components/tabs/Tabs.js +390 -0
- package/dist/components/tabs/Tabs.js.map +1 -0
- package/dist/components/upload/Upload.d.ts +157 -0
- package/dist/components/upload/Upload.d.ts.map +1 -0
- package/dist/components/upload/Upload.js +538 -0
- package/dist/components/upload/Upload.js.map +1 -0
- package/dist/components/upload/UploadItem.d.ts +73 -0
- package/dist/components/upload/UploadItem.d.ts.map +1 -0
- package/dist/components/upload/UploadItem.js +180 -0
- package/dist/components/upload/UploadItem.js.map +1 -0
- package/dist/components/widget/Widget.d.ts +1 -6
- package/dist/components/widget/Widget.d.ts.map +1 -1
- package/dist/components/widget/Widget.js +1 -6
- package/dist/components/widget/Widget.js.map +1 -1
- package/dist/custom-elements.json +8445 -1989
- package/dist/storybook/assets/ActionBar.stories-DRIVI-W2.js +408 -0
- package/dist/storybook/assets/ActionItem.stories-5qlgxYNB.js +203 -0
- package/dist/storybook/assets/{Avatar.stories-B26mRkkZ.js → Avatar.stories-B3VkhRhP.js} +2 -2
- package/dist/storybook/assets/{AvatarGroup.stories-J7lVGsMY.js → AvatarGroup.stories-DOfim2NY.js} +5 -5
- package/dist/storybook/assets/{Badge.stories-BpTIV61M.js → Badge.stories-B04VNAcc.js} +2 -2
- package/dist/storybook/assets/{Button-Dg-fIrzT.js → Button-CILTcGRT.js} +1 -1
- package/dist/storybook/assets/{Button.stories-gPKRVbxk.js → Button.stories-CzWAltrX.js} +1 -1
- package/dist/storybook/assets/ButtonGroup.stories-1uAJf79o.js +588 -0
- package/dist/storybook/assets/{Celebrate.stories-DbY-sKEe.js → Celebrate.stories-BEqj0VnW.js} +7 -7
- package/dist/storybook/assets/Checkbox.stories-DXAGFS0M.js +141 -0
- package/dist/storybook/assets/{CircularProgress.stories-DeH5JYX_.js → CircularProgress.stories-D4rftw22.js} +7 -7
- package/dist/storybook/assets/{ClipboardMixin.stories-C-lZ4uuw.js → ClipboardMixin.stories-z2n2HWt1.js} +31 -28
- package/dist/storybook/assets/{Color-6BZIO3FS-Cu6zVIuG.js → Color-6BZIO3FS-C6KyMgZz.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-D6XYMrTD.js → Colors.stories-CX-Ny3B_.js} +1 -1
- package/dist/storybook/assets/{CombinedEffects.stories-jFekKTYg.js → CombinedEffects.stories-BkqtiVHp.js} +33 -33
- package/dist/storybook/assets/{ComponentStatesMixin-g50hRCPT.js → ComponentStatesMixin-DLd0feFg.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin.stories-D3Q5pR38.js → ComponentStatesMixin.stories-D6Yc5Jgl.js} +3 -3
- package/dist/storybook/assets/{CopyToClipboard.stories-COZZ1VC2.js → CopyToClipboard.stories-B-omwDDJ.js} +16 -16
- package/dist/storybook/assets/{Debounce.stories-Dl10LAnx.js → Debounce.stories-B2vE5QIx.js} +9 -9
- package/dist/storybook/assets/{DocsRenderer-LL677BLK-CFLtMbUx.js → DocsRenderer-LL677BLK-DNUlRvMg.js} +3 -3
- package/dist/storybook/assets/{Dropdown.stories-Drwq-0Z2.js → Dropdown.stories-_bx4WDLr.js} +95 -68
- package/dist/storybook/assets/EmptyState.stories-CGMbmo77.js +318 -0
- package/dist/storybook/assets/{Events.stories-dODeR-g-.js → Events.stories-CkQYKcoZ.js} +1 -1
- package/dist/storybook/assets/{Heading.stories-CH7_-_q3.js → Heading.stories-BU5Do_od.js} +1 -1
- package/dist/storybook/assets/{HueRipple.stories-CH1Y739k.js → HueRipple.stories-Di2zmxo3.js} +11 -11
- package/dist/storybook/assets/Icon.stories-Dk4ZXhhJ.js +441 -0
- package/dist/storybook/assets/{IconButton.stories-DuzqvcnN.js → IconButton.stories-BSCiXPXa.js} +126 -146
- package/dist/storybook/assets/{LinearProgress.stories-C7IdnJd3.js → LinearProgress.stories-BGxPZuni.js} +7 -7
- package/dist/storybook/assets/Pagination.stories-z3Zq8b4f.js +252 -0
- package/dist/storybook/assets/{Popover.stories-Ca1F-wrI.js → Popover.stories-C9GxWcax.js} +33 -62
- package/dist/storybook/assets/ReadyMixin-CQw8N6P9.js +1 -0
- package/dist/storybook/assets/RovingTabindexMixin.stories-ByxLBi6m.js +192 -0
- package/dist/storybook/assets/{Rtc.stories-BVJc1vCA.js → Rtc.stories-DQJlCXWR.js} +3 -3
- package/dist/storybook/assets/ScrollShadow.stories-gjTIAbUA.js +17 -0
- package/dist/storybook/assets/{Switch.stories-BEEHP8mD.js → Switch.stories-BEeqPZiP.js} +21 -21
- package/dist/storybook/assets/Tab.stories-DpB3I-WZ.js +218 -0
- package/dist/storybook/assets/Tabs.stories-C6mG6Xi7.js +211 -0
- package/dist/storybook/assets/{Throttle.stories-C4xsYeAb.js → Throttle.stories-x9tpGeQh.js} +10 -10
- package/dist/storybook/assets/{Tooltip.stories-Ccm4AnSv.js → Tooltip.stories-CqcLqdmc.js} +2 -2
- package/dist/storybook/assets/Upload.stories-CMaAbCSH.js +447 -0
- package/dist/storybook/assets/UploadItem.stories-GB98L3JQ.js +167 -0
- package/dist/storybook/assets/{Welcome.stories-Degjk-M0.js → Welcome.stories-6h9cUZ7v.js} +1 -1
- package/dist/storybook/assets/{Widget.stories-OKnZ9sDs.js → Widget.stories-DiA1PR6Y.js} +13 -13
- package/dist/storybook/assets/{WithTooltip-65CFNBJE-CXL3TyJ2.js → WithTooltip-65CFNBJE-DTsHhBb_.js} +2 -2
- package/dist/storybook/assets/{blocks-DLdUKG_W.js → blocks-IXdn9TGW.js} +5 -5
- package/dist/storybook/assets/{formatter-EIJCOSYU-29NCxjfM.js → formatter-EIJCOSYU-Cum4J6N4.js} +1 -1
- package/dist/storybook/assets/if-defined-CgfCxQoV.js +1 -0
- package/dist/storybook/assets/iframe-BgFj0b5u.css +1 -0
- package/dist/storybook/assets/{iframe-BqvwP3or.js → iframe-Sf9RHZFu.js} +200 -200
- package/dist/storybook/assets/{index-BIyTv1BF.js → index-D605PvQH.js} +1 -1
- package/dist/storybook/assets/onFind-C41m8c_a.js +1 -0
- package/dist/storybook/assets/{onFind.stories-D64-QZqf.js → onFind.stories-MOTfGlJd.js} +53 -77
- package/dist/storybook/assets/{onRemove.stories-BICsnIJL.js → onRemove.stories-DX58Bf6f.js} +6 -10
- package/dist/storybook/assets/{onVisible.stories-DpDZP9_5.js → onVisible.stories-NNFeFeD8.js} +3 -3
- package/dist/storybook/assets/style-map-B99QiqCo.js +1 -0
- package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-Bz_DuQj8.js → syntaxhighlighter-ED5Y7EFY-BqQ-o9mS.js} +1 -1
- package/dist/storybook/box-illustration.svg +51 -0
- package/dist/storybook/cloud-illustration.svg +49 -0
- package/dist/storybook/docs-illustration.svg +92 -0
- package/dist/storybook/iframe.html +2 -2
- package/dist/storybook/index.json +1 -1
- package/dist/storybook/project.json +1 -1
- package/dist/tailwind-plugin-action-bar.d.ts +2 -0
- package/dist/tailwind-plugin-action-bar.d.ts.map +1 -0
- package/dist/tailwind-plugin-action-bar.js +120 -0
- package/dist/tailwind-plugin-action-bar.js.map +1 -0
- package/dist/tailwind-plugin-action-bar.ts +134 -0
- package/dist/tailwind-plugin-badge.js +5 -6
- package/dist/tailwind-plugin-badge.js.map +1 -1
- package/dist/tailwind-plugin-badge.ts +5 -6
- package/dist/tailwind-plugin-button-group.d.ts +2 -0
- package/dist/tailwind-plugin-button-group.d.ts.map +1 -0
- package/dist/tailwind-plugin-button-group.js +215 -0
- package/dist/tailwind-plugin-button-group.js.map +1 -0
- package/dist/tailwind-plugin-button-group.ts +238 -0
- package/dist/tailwind-plugin-button.js +2 -1
- package/dist/tailwind-plugin-button.js.map +1 -1
- package/dist/tailwind-plugin-button.ts +2 -1
- package/dist/tailwind-plugin-checkbox.d.ts +2 -0
- package/dist/tailwind-plugin-checkbox.d.ts.map +1 -0
- package/dist/tailwind-plugin-checkbox.js +246 -0
- package/dist/tailwind-plugin-checkbox.js.map +1 -0
- package/dist/tailwind-plugin-checkbox.ts +281 -0
- package/dist/tailwind-plugin-empty-state.d.ts +2 -0
- package/dist/tailwind-plugin-empty-state.d.ts.map +1 -0
- package/dist/tailwind-plugin-empty-state.js +113 -0
- package/dist/tailwind-plugin-empty-state.js.map +1 -0
- package/dist/tailwind-plugin-empty-state.ts +124 -0
- package/dist/tailwind-plugin-icon.js +122 -18
- package/dist/tailwind-plugin-icon.js.map +1 -1
- package/dist/tailwind-plugin-icon.ts +131 -18
- package/dist/tailwind-plugin-loader.js +3 -3
- package/dist/tailwind-plugin-loader.ts +3 -3
- package/dist/tailwind-plugin-pagination.js +13 -23
- package/dist/tailwind-plugin-pagination.js.map +1 -1
- package/dist/tailwind-plugin-pagination.ts +15 -25
- package/dist/tailwind-plugin-tabs.d.ts +2 -0
- package/dist/tailwind-plugin-tabs.d.ts.map +1 -0
- package/dist/tailwind-plugin-tabs.js +158 -0
- package/dist/tailwind-plugin-tabs.js.map +1 -0
- package/dist/tailwind-plugin-tabs.ts +169 -0
- package/dist/tailwind-plugin-upload.d.ts +2 -0
- package/dist/tailwind-plugin-upload.d.ts.map +1 -0
- package/dist/tailwind-plugin-upload.js +322 -0
- package/dist/tailwind-plugin-upload.js.map +1 -0
- package/dist/tailwind-plugin-upload.ts +362 -0
- package/dist/tailwind.config.d.ts.map +1 -1
- package/dist/tailwind.config.js +1 -0
- package/dist/tailwind.config.js.map +1 -1
- package/dist/tailwind.config.ts +1 -0
- package/dist/util/ClipboardMixin.d.ts +7 -2
- package/dist/util/ClipboardMixin.d.ts.map +1 -1
- package/dist/util/ClipboardMixin.js +15 -13
- package/dist/util/ClipboardMixin.js.map +1 -1
- package/dist/util/ComponentStatesMixin.d.ts +2 -1
- package/dist/util/ComponentStatesMixin.d.ts.map +1 -1
- package/dist/util/ComponentStatesMixin.js +4 -0
- package/dist/util/ComponentStatesMixin.js.map +1 -1
- package/dist/util/EventEmitterMixin.d.ts +58 -4
- package/dist/util/EventEmitterMixin.d.ts.map +1 -1
- package/dist/util/EventEmitterMixin.js +5 -2
- package/dist/util/EventEmitterMixin.js.map +1 -1
- package/dist/util/ProgressMixin.d.ts +9 -2
- package/dist/util/ProgressMixin.d.ts.map +1 -1
- package/dist/util/ProgressMixin.js +22 -18
- package/dist/util/ProgressMixin.js.map +1 -1
- package/dist/util/RovingTabindexMixin.d.ts +46 -0
- package/dist/util/RovingTabindexMixin.d.ts.map +1 -0
- package/dist/util/RovingTabindexMixin.js +83 -0
- package/dist/util/RovingTabindexMixin.js.map +1 -0
- package/dist/util/TetherLayout.d.ts.map +1 -1
- package/dist/util/TetherLayout.js +3 -0
- package/dist/util/TetherLayout.js.map +1 -1
- package/dist/util/TooltipMixin.d.ts.map +1 -1
- package/dist/util/TooltipMixin.js +5 -4
- package/dist/util/TooltipMixin.js.map +1 -1
- package/dist/util/upload.d.ts +53 -0
- package/dist/util/upload.d.ts.map +1 -0
- package/dist/util/upload.js +113 -0
- package/dist/util/upload.js.map +1 -0
- package/docs/components/ActionBar.md +77 -0
- package/docs/components/ActionItem.md +101 -0
- package/docs/components/Avatar.md +42 -12
- package/docs/components/AvatarGroup.md +4 -3
- package/docs/components/Badge.md +13 -1
- package/docs/components/ButtonGroup.md +91 -0
- package/docs/components/Checkbox.md +91 -0
- package/docs/components/CircularProgress.md +41 -12
- package/docs/components/CopyToClipboard.md +13 -11
- package/docs/components/Dropdown.md +51 -26
- package/docs/components/DropdownItem.md +44 -27
- package/docs/components/DropdownMenu.md +14 -14
- package/docs/components/EmptyState.md +75 -0
- package/docs/components/Icon.md +22 -14
- package/docs/components/IconButton.md +46 -21
- package/docs/components/LinearProgress.md +43 -4
- package/docs/components/Pagination.md +38 -34
- package/docs/components/Popover.md +16 -0
- package/docs/components/README.md +9 -0
- package/docs/components/Switch.md +21 -16
- package/docs/components/Tab.md +79 -0
- package/docs/components/Tabs.md +85 -0
- package/docs/components/Upload.md +112 -0
- package/docs/components/UploadItem.md +61 -0
- package/docs/components/Widget.md +12 -6
- package/package.json +4 -2
- package/dist/storybook/assets/Icon.stories-CPjM-jTU.js +0 -264
- package/dist/storybook/assets/Pagination.stories-C4cLjS_9.js +0 -272
- package/dist/storybook/assets/ReadyMixin-DNZ5dCsZ.js +0 -1
- package/dist/storybook/assets/ScrollShadow.stories-C3W5o9ZW.js +0 -17
- package/dist/storybook/assets/if-defined-BZFPaJjl.js +0 -1
- package/dist/storybook/assets/iframe-C5bIZMJ5.css +0 -1
- package/dist/storybook/assets/onFind-1l3EPW-I.js +0 -1
- package/dist/storybook/assets/style-map-CBrSnxRe.js +0 -1
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
|
+
import '../badge/Badge.js';
|
|
2
3
|
import '../icon/Icon.js';
|
|
3
4
|
export interface DropdownItemProps {
|
|
4
5
|
label?: string;
|
|
6
|
+
value?: string;
|
|
5
7
|
type?: 'default' | 'divider' | 'subhead';
|
|
6
|
-
|
|
8
|
+
symbol?: string;
|
|
7
9
|
shortcut?: string;
|
|
8
10
|
disabled?: boolean;
|
|
9
11
|
selected?: boolean;
|
|
10
12
|
favorited?: boolean;
|
|
13
|
+
error?: boolean;
|
|
11
14
|
}
|
|
12
15
|
declare const DropdownItem_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
13
16
|
/**
|
|
@@ -20,16 +23,24 @@ declare const DropdownItem_base: (new (...args: any[]) => import("../../util/Eve
|
|
|
20
23
|
* @element btu-dropdown-item
|
|
21
24
|
*
|
|
22
25
|
* @fires {CustomEvent} btu-dropdown-item-ready - Fired after first render
|
|
23
|
-
* @fires {CustomEvent<{label: string, selected: boolean}>} btu-dropdown-item-select - Fired when item is activated
|
|
26
|
+
* @fires {CustomEvent<{label: string, value: string, selected: boolean}>} btu-dropdown-item-select - Fired when item is activated
|
|
24
27
|
* @fires {CustomEvent<{label: string, favorited: boolean}>} btu-dropdown-item-favorite - Fired when favorite is toggled
|
|
25
28
|
*
|
|
29
|
+
* @cssprop --dropdown-item-font-size - Item font size (default: theme fontSize.sm)
|
|
30
|
+
* @cssprop --dropdown-item-color - Item text color (default: gray-700)
|
|
31
|
+
* @cssprop --dropdown-item-background - Item background color (default: transparent)
|
|
32
|
+
* @cssprop --dropdown-item-hover-background - Background on hover (default: gray-100)
|
|
33
|
+
* @cssprop --dropdown-item-hover-color - Text color on hover (default: gray-900)
|
|
34
|
+
* @cssprop --dropdown-item-selected-background - Background when selected (default: primary-50)
|
|
35
|
+
* @cssprop --dropdown-item-selected-color - Text color when selected (default: primary-700)
|
|
36
|
+
*
|
|
26
37
|
* @example
|
|
27
38
|
* ```html
|
|
28
39
|
* <!-- Basic item -->
|
|
29
40
|
* <btu-dropdown-item label="Edit"></btu-dropdown-item>
|
|
30
41
|
*
|
|
31
42
|
* <!-- Item with icon and shortcut -->
|
|
32
|
-
* <btu-dropdown-item label="Save"
|
|
43
|
+
* <btu-dropdown-item label="Save" symbol="save" shortcut="Ctrl+S"></btu-dropdown-item>
|
|
33
44
|
* ```
|
|
34
45
|
*/
|
|
35
46
|
export default class DropdownItem extends DropdownItem_base {
|
|
@@ -45,14 +56,19 @@ export default class DropdownItem extends DropdownItem_base {
|
|
|
45
56
|
type: 'default' | 'divider' | 'subhead';
|
|
46
57
|
/**
|
|
47
58
|
* Lucide icon symbol.
|
|
48
|
-
* @attr
|
|
59
|
+
* @attr
|
|
49
60
|
*/
|
|
50
|
-
|
|
61
|
+
symbol: string;
|
|
51
62
|
/**
|
|
52
63
|
* Keyboard shortcut display text.
|
|
53
64
|
* @attr
|
|
54
65
|
*/
|
|
55
66
|
shortcut: string;
|
|
67
|
+
/**
|
|
68
|
+
* Optional data value associated with the item.
|
|
69
|
+
* @attr
|
|
70
|
+
*/
|
|
71
|
+
value: string;
|
|
56
72
|
/**
|
|
57
73
|
* Whether the item is disabled.
|
|
58
74
|
* @attr
|
|
@@ -68,6 +84,11 @@ export default class DropdownItem extends DropdownItem_base {
|
|
|
68
84
|
* @attr
|
|
69
85
|
*/
|
|
70
86
|
favorited: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Whether the item has an error.
|
|
89
|
+
* @attr
|
|
90
|
+
*/
|
|
91
|
+
error: boolean;
|
|
71
92
|
/** @internal */
|
|
72
93
|
private _generatedId;
|
|
73
94
|
/** @internal */
|
|
@@ -79,13 +100,13 @@ export default class DropdownItem extends DropdownItem_base {
|
|
|
79
100
|
/** @internal */
|
|
80
101
|
private _showShortcuts;
|
|
81
102
|
/** @internal */
|
|
82
|
-
private
|
|
103
|
+
private _parentMenuSymbol;
|
|
83
104
|
createRenderRoot(): this;
|
|
84
105
|
/** @internal Called by DropdownMenu to configure inherited settings */
|
|
85
106
|
_configure(opts: {
|
|
86
107
|
checkbox: boolean;
|
|
87
108
|
icon: boolean;
|
|
88
|
-
|
|
109
|
+
symbol: string;
|
|
89
110
|
favorites: boolean;
|
|
90
111
|
shortcuts: boolean;
|
|
91
112
|
}): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownItem.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAA;AAI/C,OAAO,iBAAiB,CAAA;AAExB,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;IACxC,
|
|
1
|
+
{"version":3,"file":"DropdownItem.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAA;AAI/C,OAAO,mBAAmB,CAAA;AAC1B,OAAO,iBAAiB,CAAA;AAExB,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;IACxC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,iBAAyC;IACjF;;;OAGG;IAEH,KAAK,EAAE,MAAM,CAAK;IAElB;;;OAGG;IAEH,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAY;IAEnD;;;OAGG;IAEH,MAAM,EAAE,MAAM,CAAK;IAEnB;;;OAGG;IAEH,QAAQ,EAAE,MAAM,CAAK;IAErB;;;OAGG;IAEH,KAAK,EAAE,MAAM,CAAK;IAElB;;;OAGG;IAEH,QAAQ,EAAE,OAAO,CAAQ;IAEzB;;;OAGG;IAEH,QAAQ,EAAE,OAAO,CAAQ;IAEzB;;;OAGG;IAEH,SAAS,EAAE,OAAO,CAAQ;IAE1B;;;OAGG;IAEH,KAAK,EAAE,OAAO,CAAQ;IAEtB,gBAAgB;IAChB,OAAO,CAAC,YAAY,CAA4D;IAEhF,gBAAgB;IAChB,OAAO,CAAC,aAAa,CAAQ;IAE7B,gBAAgB;IAChB,OAAO,CAAC,SAAS,CAAQ;IAEzB,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAQ;IAE9B,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAQ;IAE9B,gBAAgB;IAChB,OAAO,CAAC,iBAAiB,CAAK;IAE9B,gBAAgB;IAIhB,uEAAuE;IACvE,UAAU,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;IAS7G,0EAA0E;IAC1E,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,YAAY,IAAI,IAAI;IAIpB,iDAAiD;IACjD,QAAQ,IAAI,IAAI;IAchB,4BAA4B;IAC5B,OAAO,CAAC,eAAe;IASvB,MAAM;IA6DN,OAAO,CAAC,YAAY;CAGrB;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,YAAY,CAAA;KAClC;CACF"}
|
|
@@ -8,6 +8,7 @@ import { LitElement, html, nothing } from 'lit';
|
|
|
8
8
|
import { property } from 'lit/decorators.js';
|
|
9
9
|
import { EventEmitterMixin } from '../../util/EventEmitterMixin.js';
|
|
10
10
|
import { ReadyMixin } from '../../util/ReadyMixin.js';
|
|
11
|
+
import '../badge/Badge.js';
|
|
11
12
|
import '../icon/Icon.js';
|
|
12
13
|
/**
|
|
13
14
|
* A menu item component for use inside `btu-dropdown-menu`.
|
|
@@ -19,16 +20,24 @@ import '../icon/Icon.js';
|
|
|
19
20
|
* @element btu-dropdown-item
|
|
20
21
|
*
|
|
21
22
|
* @fires {CustomEvent} btu-dropdown-item-ready - Fired after first render
|
|
22
|
-
* @fires {CustomEvent<{label: string, selected: boolean}>} btu-dropdown-item-select - Fired when item is activated
|
|
23
|
+
* @fires {CustomEvent<{label: string, value: string, selected: boolean}>} btu-dropdown-item-select - Fired when item is activated
|
|
23
24
|
* @fires {CustomEvent<{label: string, favorited: boolean}>} btu-dropdown-item-favorite - Fired when favorite is toggled
|
|
24
25
|
*
|
|
26
|
+
* @cssprop --dropdown-item-font-size - Item font size (default: theme fontSize.sm)
|
|
27
|
+
* @cssprop --dropdown-item-color - Item text color (default: gray-700)
|
|
28
|
+
* @cssprop --dropdown-item-background - Item background color (default: transparent)
|
|
29
|
+
* @cssprop --dropdown-item-hover-background - Background on hover (default: gray-100)
|
|
30
|
+
* @cssprop --dropdown-item-hover-color - Text color on hover (default: gray-900)
|
|
31
|
+
* @cssprop --dropdown-item-selected-background - Background when selected (default: primary-50)
|
|
32
|
+
* @cssprop --dropdown-item-selected-color - Text color when selected (default: primary-700)
|
|
33
|
+
*
|
|
25
34
|
* @example
|
|
26
35
|
* ```html
|
|
27
36
|
* <!-- Basic item -->
|
|
28
37
|
* <btu-dropdown-item label="Edit"></btu-dropdown-item>
|
|
29
38
|
*
|
|
30
39
|
* <!-- Item with icon and shortcut -->
|
|
31
|
-
* <btu-dropdown-item label="Save"
|
|
40
|
+
* <btu-dropdown-item label="Save" symbol="save" shortcut="Ctrl+S"></btu-dropdown-item>
|
|
32
41
|
* ```
|
|
33
42
|
*/
|
|
34
43
|
export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
@@ -46,14 +55,19 @@ export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
46
55
|
this.type = 'default';
|
|
47
56
|
/**
|
|
48
57
|
* Lucide icon symbol.
|
|
49
|
-
* @attr
|
|
58
|
+
* @attr
|
|
50
59
|
*/
|
|
51
|
-
this.
|
|
60
|
+
this.symbol = '';
|
|
52
61
|
/**
|
|
53
62
|
* Keyboard shortcut display text.
|
|
54
63
|
* @attr
|
|
55
64
|
*/
|
|
56
65
|
this.shortcut = '';
|
|
66
|
+
/**
|
|
67
|
+
* Optional data value associated with the item.
|
|
68
|
+
* @attr
|
|
69
|
+
*/
|
|
70
|
+
this.value = '';
|
|
57
71
|
/**
|
|
58
72
|
* Whether the item is disabled.
|
|
59
73
|
* @attr
|
|
@@ -69,6 +83,11 @@ export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
69
83
|
* @attr
|
|
70
84
|
*/
|
|
71
85
|
this.favorited = false;
|
|
86
|
+
/**
|
|
87
|
+
* Whether the item has an error.
|
|
88
|
+
* @attr
|
|
89
|
+
*/
|
|
90
|
+
this.error = false;
|
|
72
91
|
/** @internal */
|
|
73
92
|
this._generatedId = `btu-dropdown-subhead-${crypto.randomUUID().slice(0, 8)}`;
|
|
74
93
|
/** @internal */
|
|
@@ -80,7 +99,7 @@ export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
80
99
|
/** @internal */
|
|
81
100
|
this._showShortcuts = false;
|
|
82
101
|
/** @internal */
|
|
83
|
-
this.
|
|
102
|
+
this._parentMenuSymbol = '';
|
|
84
103
|
}
|
|
85
104
|
createRenderRoot() {
|
|
86
105
|
return this;
|
|
@@ -88,8 +107,8 @@ export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
88
107
|
/** @internal Called by DropdownMenu to configure inherited settings */
|
|
89
108
|
_configure(opts) {
|
|
90
109
|
this._checkboxMode = opts.checkbox;
|
|
91
|
-
this._showIcon = opts.icon || !!this.
|
|
92
|
-
this.
|
|
110
|
+
this._showIcon = opts.icon || !!this.symbol;
|
|
111
|
+
this._parentMenuSymbol = opts.symbol;
|
|
93
112
|
this._showFavorites = opts.favorites;
|
|
94
113
|
this._showShortcuts = opts.shortcuts;
|
|
95
114
|
this.requestUpdate();
|
|
@@ -110,6 +129,7 @@ export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
110
129
|
}
|
|
111
130
|
this.emit('btu-dropdown-item-select', {
|
|
112
131
|
label: this.label,
|
|
132
|
+
value: this.value,
|
|
113
133
|
selected: this.selected,
|
|
114
134
|
});
|
|
115
135
|
}
|
|
@@ -137,7 +157,7 @@ export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
137
157
|
]
|
|
138
158
|
.filter(Boolean)
|
|
139
159
|
.join(' ');
|
|
140
|
-
const
|
|
160
|
+
const resolvedSymbol = this.symbol || this._parentMenuSymbol;
|
|
141
161
|
return html `<div
|
|
142
162
|
class="${classes}"
|
|
143
163
|
role="${role}"
|
|
@@ -154,22 +174,21 @@ export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
154
174
|
${!this._checkboxMode && this.selected
|
|
155
175
|
? html `<span class="btu-dropdown-check"><btu-icon symbol="check" size="sm"></btu-icon></span>`
|
|
156
176
|
: nothing}
|
|
157
|
-
${this._showIcon &&
|
|
158
|
-
? html `<span class="btu-dropdown-item-icon"
|
|
159
|
-
><btu-icon symbol="${resolvedIconSymbol}" size="sm"></btu-icon
|
|
160
|
-
></span>`
|
|
177
|
+
${this._showIcon && resolvedSymbol
|
|
178
|
+
? html `<span class="btu-dropdown-item-icon"><btu-icon symbol="${resolvedSymbol}" size="sm"></btu-icon></span>`
|
|
161
179
|
: nothing}
|
|
162
180
|
<span class="btu-dropdown-item-label">${this.label}</span>
|
|
181
|
+
${this.error ? html `<btu-badge size="sm" variant="error">!</btu-badge>` : nothing}
|
|
163
182
|
${this._showShortcuts && this.shortcut
|
|
164
183
|
? html `<span class="btu-dropdown-shortcut">${this.shortcut}</span>`
|
|
165
184
|
: nothing}
|
|
166
185
|
${this._showFavorites
|
|
167
186
|
? html `<button
|
|
168
187
|
type="button"
|
|
169
|
-
class="btu-button
|
|
188
|
+
class="btu-button-text-hidden btu-button-container-none btu-button-gray btu-button-sm btu-dropdown-favorite ${this
|
|
170
189
|
.favorited
|
|
171
190
|
? 'btu-dropdown-favorite-active'
|
|
172
|
-
: ''}"
|
|
191
|
+
: ''} btu-button"
|
|
173
192
|
@click="${this._toggleFavorite}"
|
|
174
193
|
aria-label="${this.favorited ? 'Remove from favorites' : 'Add to favorites'}"
|
|
175
194
|
aria-pressed="${this.favorited}"
|
|
@@ -190,11 +209,14 @@ __decorate([
|
|
|
190
209
|
property({ type: String })
|
|
191
210
|
], DropdownItem.prototype, "type", void 0);
|
|
192
211
|
__decorate([
|
|
193
|
-
property({ type: String
|
|
194
|
-
], DropdownItem.prototype, "
|
|
212
|
+
property({ type: String })
|
|
213
|
+
], DropdownItem.prototype, "symbol", void 0);
|
|
195
214
|
__decorate([
|
|
196
215
|
property({ type: String })
|
|
197
216
|
], DropdownItem.prototype, "shortcut", void 0);
|
|
217
|
+
__decorate([
|
|
218
|
+
property({ type: String })
|
|
219
|
+
], DropdownItem.prototype, "value", void 0);
|
|
198
220
|
__decorate([
|
|
199
221
|
property({ type: Boolean })
|
|
200
222
|
], DropdownItem.prototype, "disabled", void 0);
|
|
@@ -204,6 +226,9 @@ __decorate([
|
|
|
204
226
|
__decorate([
|
|
205
227
|
property({ type: Boolean })
|
|
206
228
|
], DropdownItem.prototype, "favorited", void 0);
|
|
229
|
+
__decorate([
|
|
230
|
+
property({ type: Boolean })
|
|
231
|
+
], DropdownItem.prototype, "error", void 0);
|
|
207
232
|
if (!customElements.get('btu-dropdown-item')) {
|
|
208
233
|
customElements.define('btu-dropdown-item', DropdownItem);
|
|
209
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownItem.js","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownItem.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"DropdownItem.js","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownItem.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,12 @@ export interface DropdownMenuProps {
|
|
|
5
5
|
header?: boolean;
|
|
6
6
|
checkbox?: boolean;
|
|
7
7
|
icon?: boolean;
|
|
8
|
-
|
|
8
|
+
symbol?: string;
|
|
9
9
|
favorites?: boolean;
|
|
10
10
|
shortcuts?: boolean;
|
|
11
11
|
emptyMessage?: string;
|
|
12
12
|
}
|
|
13
|
-
declare const DropdownMenu_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
13
|
+
declare const DropdownMenu_base: (new (...args: any[]) => import("../../util/RovingTabindexMixin.js").RovingTabindexInterface) & (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
14
14
|
/**
|
|
15
15
|
* A menu container component that provides keyboard navigation and ARIA menu semantics.
|
|
16
16
|
*
|
|
@@ -57,9 +57,9 @@ export default class DropdownMenu extends DropdownMenu_base {
|
|
|
57
57
|
icon: boolean;
|
|
58
58
|
/**
|
|
59
59
|
* Fallback Lucide icon symbol for items without their own.
|
|
60
|
-
* @attr
|
|
60
|
+
* @attr
|
|
61
61
|
*/
|
|
62
|
-
|
|
62
|
+
symbol: string;
|
|
63
63
|
/**
|
|
64
64
|
* Show favorite toggle on each item.
|
|
65
65
|
* @attr
|
|
@@ -80,6 +80,8 @@ export default class DropdownMenu extends DropdownMenu_base {
|
|
|
80
80
|
/** @internal */
|
|
81
81
|
private _typeaheadTimeout;
|
|
82
82
|
createRenderRoot(): this;
|
|
83
|
+
/** @internal Override: return menuitem elements from focusable items */
|
|
84
|
+
_getRovingTargets(): HTMLElement[];
|
|
83
85
|
connectedCallback(): void;
|
|
84
86
|
disconnectedCallback(): void;
|
|
85
87
|
firstUpdated(): void;
|
|
@@ -98,10 +100,6 @@ export default class DropdownMenu extends DropdownMenu_base {
|
|
|
98
100
|
focusLast(): void;
|
|
99
101
|
/** @internal */
|
|
100
102
|
private _handleKeydown;
|
|
101
|
-
/** Find the current focused item index */
|
|
102
|
-
private _getCurrentFocusIndex;
|
|
103
|
-
/** Find next index wrapping around, moving in direction (+1 or -1) */
|
|
104
|
-
private _findNextIndex;
|
|
105
103
|
/** Typeahead character matching with 500ms accumulation */
|
|
106
104
|
private _handleTypeahead;
|
|
107
105
|
/** Check whether the menu has zero focusable items */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAA;AAK/C,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,iBAA8D;IACtG;;;OAGG;IAEH,IAAI,EAAE,MAAM,CAAK;IAEjB;;;OAGG;IAEH,MAAM,EAAE,OAAO,CAAQ;IAEvB;;;OAGG;IAEH,QAAQ,EAAE,OAAO,CAAQ;IAEzB;;;OAGG;IAEH,IAAI,EAAE,OAAO,CAAQ;IAErB;;;OAGG;IAEH,MAAM,EAAE,MAAM,CAAK;IAEnB;;;OAGG;IAEH,SAAS,EAAE,OAAO,CAAQ;IAE1B;;;OAGG;IAEH,SAAS,EAAE,OAAO,CAAQ;IAE1B;;;OAGG;IAEH,YAAY,EAAE,MAAM,CAAuB;IAE3C,gBAAgB;IAChB,OAAO,CAAC,gBAAgB,CAAK;IAE7B,gBAAgB;IAChB,OAAO,CAAC,iBAAiB,CAA6C;IAEtE,gBAAgB;IAKhB,wEAAwE;IACxE,iBAAiB,IAAI,WAAW,EAAE;IAMlC,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAQ5B,YAAY,IAAI,IAAI;IAKpB,OAAO,IAAI,IAAI;IASf,yDAAyD;IACzD,OAAO,CAAC,eAAe;IAavB,yCAAyC;IACzC,OAAO,CAAC,YAAY;IAIpB,sEAAsE;IACtE,OAAO,CAAC,kBAAkB;IAI1B,2DAA2D;IAC3D,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKnC,gGAAgG;IAChG,UAAU,IAAI,IAAI;IAalB,2DAA2D;IAC3D,SAAS,IAAI,IAAI;IAMjB,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAyDrB;IAED,2DAA2D;IAC3D,OAAO,CAAC,gBAAgB;IAgBxB,sDAAsD;IACtD,OAAO,KAAK,QAAQ,GAEnB;IAED,MAAM;CAMP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,YAAY,CAAA;KAClC;CACF"}
|
|
@@ -8,6 +8,7 @@ import { LitElement, html, nothing } from 'lit';
|
|
|
8
8
|
import { property } from 'lit/decorators.js';
|
|
9
9
|
import { EventEmitterMixin } from '../../util/EventEmitterMixin.js';
|
|
10
10
|
import { ReadyMixin } from '../../util/ReadyMixin.js';
|
|
11
|
+
import { RovingTabindexMixin } from '../../util/RovingTabindexMixin.js';
|
|
11
12
|
/**
|
|
12
13
|
* A menu container component that provides keyboard navigation and ARIA menu semantics.
|
|
13
14
|
*
|
|
@@ -31,7 +32,7 @@ import { ReadyMixin } from '../../util/ReadyMixin.js';
|
|
|
31
32
|
* </btu-dropdown-menu>
|
|
32
33
|
* ```
|
|
33
34
|
*/
|
|
34
|
-
export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
35
|
+
export default class DropdownMenu extends RovingTabindexMixin(EventEmitterMixin(ReadyMixin(LitElement))) {
|
|
35
36
|
constructor() {
|
|
36
37
|
super(...arguments);
|
|
37
38
|
/**
|
|
@@ -56,9 +57,9 @@ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
56
57
|
this.icon = false;
|
|
57
58
|
/**
|
|
58
59
|
* Fallback Lucide icon symbol for items without their own.
|
|
59
|
-
* @attr
|
|
60
|
+
* @attr
|
|
60
61
|
*/
|
|
61
|
-
this.
|
|
62
|
+
this.symbol = '';
|
|
62
63
|
/**
|
|
63
64
|
* Show favorite toggle on each item.
|
|
64
65
|
* @attr
|
|
@@ -83,32 +84,30 @@ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
83
84
|
const focusable = this._getFocusableItems();
|
|
84
85
|
if (focusable.length === 0)
|
|
85
86
|
return;
|
|
86
|
-
const currentIndex = this._getCurrentFocusIndex(focusable);
|
|
87
87
|
switch (e.key) {
|
|
88
88
|
case 'ArrowDown': {
|
|
89
89
|
e.preventDefault();
|
|
90
|
-
|
|
91
|
-
this.focusItem(focusable[next]);
|
|
90
|
+
this._rovingNext();
|
|
92
91
|
break;
|
|
93
92
|
}
|
|
94
93
|
case 'ArrowUp': {
|
|
95
94
|
e.preventDefault();
|
|
96
|
-
|
|
97
|
-
this.focusItem(focusable[prev]);
|
|
95
|
+
this._rovingPrev();
|
|
98
96
|
break;
|
|
99
97
|
}
|
|
100
98
|
case 'Home': {
|
|
101
99
|
e.preventDefault();
|
|
102
|
-
this.
|
|
100
|
+
this._rovingFirst();
|
|
103
101
|
break;
|
|
104
102
|
}
|
|
105
103
|
case 'End': {
|
|
106
104
|
e.preventDefault();
|
|
107
|
-
this.
|
|
105
|
+
this._rovingLast();
|
|
108
106
|
break;
|
|
109
107
|
}
|
|
110
108
|
case 'Enter': {
|
|
111
109
|
e.preventDefault();
|
|
110
|
+
const currentIndex = this._rovingCurrentIndex();
|
|
112
111
|
if (currentIndex >= 0) {
|
|
113
112
|
focusable[currentIndex].activate();
|
|
114
113
|
}
|
|
@@ -116,6 +115,7 @@ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
116
115
|
}
|
|
117
116
|
case ' ': {
|
|
118
117
|
e.preventDefault();
|
|
118
|
+
const currentIndex = this._rovingCurrentIndex();
|
|
119
119
|
if (currentIndex >= 0) {
|
|
120
120
|
focusable[currentIndex].activate();
|
|
121
121
|
}
|
|
@@ -143,6 +143,12 @@ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
143
143
|
this.renderOptions.renderBefore ??= this.firstChild;
|
|
144
144
|
return this;
|
|
145
145
|
}
|
|
146
|
+
/** @internal Override: return menuitem elements from focusable items */
|
|
147
|
+
_getRovingTargets() {
|
|
148
|
+
return this._getFocusableItems()
|
|
149
|
+
.map(item => item.querySelector('[role="menuitem"], [role="menuitemcheckbox"]'))
|
|
150
|
+
.filter(Boolean);
|
|
151
|
+
}
|
|
146
152
|
connectedCallback() {
|
|
147
153
|
super.connectedCallback();
|
|
148
154
|
this.setAttribute('role', 'menu');
|
|
@@ -178,7 +184,7 @@ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
178
184
|
item._configure({
|
|
179
185
|
checkbox: this.checkbox,
|
|
180
186
|
icon: this.icon,
|
|
181
|
-
|
|
187
|
+
symbol: this.symbol,
|
|
182
188
|
favorites: this.favorites,
|
|
183
189
|
shortcuts: this.shortcuts,
|
|
184
190
|
});
|
|
@@ -194,17 +200,9 @@ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
194
200
|
}
|
|
195
201
|
/** @internal Focus a specific item by updating tabindex */
|
|
196
202
|
focusItem(item) {
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
if (el)
|
|
201
|
-
el.setAttribute('tabindex', '-1');
|
|
202
|
-
});
|
|
203
|
-
const target = item.querySelector('[role="menuitem"], [role="menuitemcheckbox"]');
|
|
204
|
-
if (target) {
|
|
205
|
-
target.setAttribute('tabindex', '0');
|
|
206
|
-
target.focus();
|
|
207
|
-
}
|
|
203
|
+
const index = this._getFocusableItems().indexOf(item);
|
|
204
|
+
if (index >= 0)
|
|
205
|
+
this._rovingFocus(index);
|
|
208
206
|
}
|
|
209
207
|
/** @internal Focus the first non-disabled focusable item (or first checked in checkbox mode) */
|
|
210
208
|
focusFirst() {
|
|
@@ -227,19 +225,6 @@ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElemen
|
|
|
227
225
|
if (last)
|
|
228
226
|
this.focusItem(last);
|
|
229
227
|
}
|
|
230
|
-
/** Find the current focused item index */
|
|
231
|
-
_getCurrentFocusIndex(focusable) {
|
|
232
|
-
const active = document.activeElement;
|
|
233
|
-
return focusable.findIndex(item => item.contains(active));
|
|
234
|
-
}
|
|
235
|
-
/** Find next index wrapping around, moving in direction (+1 or -1) */
|
|
236
|
-
_findNextIndex(focusable, current, direction) {
|
|
237
|
-
const len = focusable.length;
|
|
238
|
-
if (current < 0)
|
|
239
|
-
return direction === 1 ? 0 : len - 1;
|
|
240
|
-
const next = (current + direction + len) % len;
|
|
241
|
-
return next;
|
|
242
|
-
}
|
|
243
228
|
/** Typeahead character matching with 500ms accumulation */
|
|
244
229
|
_handleTypeahead(char, focusable) {
|
|
245
230
|
this._typeaheadBuffer += char.toLowerCase();
|
|
@@ -278,8 +263,8 @@ __decorate([
|
|
|
278
263
|
property({ type: Boolean })
|
|
279
264
|
], DropdownMenu.prototype, "icon", void 0);
|
|
280
265
|
__decorate([
|
|
281
|
-
property({ type: String
|
|
282
|
-
], DropdownMenu.prototype, "
|
|
266
|
+
property({ type: String })
|
|
267
|
+
], DropdownMenu.prototype, "symbol", void 0);
|
|
283
268
|
__decorate([
|
|
284
269
|
property({ type: Boolean })
|
|
285
270
|
], DropdownMenu.prototype, "favorites", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownMenu.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownMenu.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAcvE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAAxG;;QACE;;;WAGG;QAEH,SAAI,GAAW,EAAE,CAAA;QAEjB;;;WAGG;QAEH,WAAM,GAAY,KAAK,CAAA;QAEvB;;;WAGG;QAEH,aAAQ,GAAY,KAAK,CAAA;QAEzB;;;WAGG;QAEH,SAAI,GAAY,KAAK,CAAA;QAErB;;;WAGG;QAEH,WAAM,GAAW,EAAE,CAAA;QAEnB;;;WAGG;QAEH,cAAS,GAAY,KAAK,CAAA;QAE1B;;;WAGG;QAEH,cAAS,GAAY,KAAK,CAAA;QAE1B;;;WAGG;QAEH,iBAAY,GAAW,oBAAoB,CAAA;QAE3C,gBAAgB;QACR,qBAAgB,GAAG,EAAE,CAAA;QAE7B,gBAAgB;QACR,sBAAiB,GAAyC,IAAI,CAAA;QAgGtE,gBAAgB;QACR,mBAAc,GAAG,CAAC,CAAgB,EAAQ,EAAE;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;YAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAElC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,WAAW,EAAE,CAAA;oBAClB,MAAK;gBACP,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,WAAW,EAAE,CAAA;oBAClB,MAAK;gBACP,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,YAAY,EAAE,CAAA;oBACnB,MAAK;gBACP,CAAC;gBACD,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,WAAW,EAAE,CAAA;oBAClB,MAAK;gBACP,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;oBAC/C,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;wBACtB,SAAS,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAA;oBACpC,CAAC;oBACD,MAAK;gBACP,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;oBAC/C,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;wBACtB,SAAS,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAA;oBACpC,CAAC;oBACD,MAAK;gBACP,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,wCAAwC;oBACxC,MAAK;gBACP,CAAC;gBACD,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,wDAAwD;oBACxD,MAAK;gBACP,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,kCAAkC;oBAClC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;wBAChE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;oBACzC,CAAC;oBACD,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC,CAAA;IA8BH,CAAC;IAtLC,gBAAgB;QACd,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,CAAA;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,wEAAwE;IACxE,iBAAiB;QACf,OAAO,IAAI,CAAC,kBAAkB,EAAE;aAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,8CAA8C,CAAgB,CAAC;aAC9F,MAAM,CAAC,OAAO,CAAC,CAAA;IACpB,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAA;QACzB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;IACvD,CAAC;IAED,oBAAoB;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAA;QAC5B,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QACxD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,YAAY;QACV,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACtC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED,yDAAyD;IACjD,eAAe;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QACjC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC;gBACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,yCAAyC;IACjC,YAAY;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAC/D,CAAC;IAED,sEAAsE;IAC9D,kBAAkB;QACxB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3D,CAAC;IAED,2DAA2D;IAC3D,SAAS,CAAC,IAAkB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACrD,IAAI,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;IAED,gGAAgG;IAChG,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACvC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YAC1D,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;gBACvB,OAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;QACtD,IAAI,KAAK;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IAED,2DAA2D;IAC3D,SAAS;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACvC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACnF,IAAI,IAAI;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IA8DD,2DAA2D;IACnD,gBAAgB,CAAC,IAAY,EAAE,SAAyB;QAC9D,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAA;QAE3C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACtC,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC5B,CAAC,EAAE,GAAG,CAAC,CAAA;QAEP,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;QAChG,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA,oCAAoC,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI;aAChH,QAAQ;YACT,CAAC,CAAC,IAAI,CAAA,iDAAiD,IAAI,CAAC,YAAY,QAAQ;YAChF,CAAC,CAAC,OAAO,EAAE,CAAA;IACf,CAAC;CACF;AA/OC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CACV;AAOjB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4CACL;AAOvB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8CACH;AAOzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;0CACP;AAOrB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CACR;AAOnB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;+CACF;AAO1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;+CACF;AAO1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;kDACZ;AAgM7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAC7C,cAAc,CAAC,MAAM,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAA;AAC1D,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues, type TemplateResult } from 'lit';
|
|
2
|
+
import '../button-group/ButtonGroup.js';
|
|
3
|
+
import './EmptyState.css';
|
|
4
|
+
export interface EmptyStateProps {
|
|
5
|
+
heading?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
size?: 'sm' | 'md' | 'lg';
|
|
8
|
+
headingLevel?: number;
|
|
9
|
+
}
|
|
10
|
+
declare const EmptyState_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
11
|
+
/**
|
|
12
|
+
* An empty state component for displaying placeholder content when no data is available.
|
|
13
|
+
*
|
|
14
|
+
* Supports a graphic slot for icons/images/pictures/SVGs, a heading, a description,
|
|
15
|
+
* and an actions slot for buttons or links. Available in three sizes (sm, md, lg)
|
|
16
|
+
* with semantic heading levels.
|
|
17
|
+
*
|
|
18
|
+
* ## Architecture: Light DOM + Pseudo-Slots
|
|
19
|
+
*
|
|
20
|
+
* This component uses **Light DOM** (no Shadow Root) with pseudo-slots:
|
|
21
|
+
* - User-provided children are physically moved into internal containers
|
|
22
|
+
* - Movement is based on `slot` attributes
|
|
23
|
+
* - The `onFind` utility detects and redistributes newly-added children (one-time per element)
|
|
24
|
+
*
|
|
25
|
+
* ### Node Redistribution Rules
|
|
26
|
+
* - `slot="graphic"` - Moved to graphic container (icon, image, picture, or SVG)
|
|
27
|
+
* - `slot="actions"` - Moved to an internal `btu-button-group` (variant="spaced")
|
|
28
|
+
*
|
|
29
|
+
* ### Actions composition
|
|
30
|
+
*
|
|
31
|
+
* The actions container IS a `btu-button-group` with `variant="spaced"`. Its `size`
|
|
32
|
+
* is mapped from the empty-state `size` prop (sm→small, md→medium, lg→large) so all
|
|
33
|
+
* child `btu-button` / `btu-icon-button` elements get consistent sizing and group
|
|
34
|
+
* semantics (`role="group"`, roving tabindex, disabled propagation) for free.
|
|
35
|
+
*
|
|
36
|
+
* @element btu-empty-state
|
|
37
|
+
*
|
|
38
|
+
* @fires {CustomEvent} btu-empty-state-ready - Fired after first render and initialization
|
|
39
|
+
* @fires {CustomEvent} btu-button-group-ready - Bubbles from the internal actions button-group
|
|
40
|
+
*
|
|
41
|
+
* @cssprop --empty-state-max-width - Maximum width of the content block (default: min(75cqw, 360px))
|
|
42
|
+
* @cssprop --empty-state-color-heading - Heading text color (default: gray-900)
|
|
43
|
+
* @cssprop --empty-state-color-description - Description text color (default: gray-500)
|
|
44
|
+
*
|
|
45
|
+
* @slot graphic - Pseudo-slot for icon, image, picture, or SVG graphic.
|
|
46
|
+
* When the child is a `btu-icon`, the component overrides its `size` attribute
|
|
47
|
+
* based on the empty-state `size` prop (sm→md, md→lg, lg→xl). Use an `img`,
|
|
48
|
+
* `picture`, or inline `svg` for full size control.
|
|
49
|
+
* @slot actions - Pseudo-slot for action buttons. Children are moved into an internal
|
|
50
|
+
* `btu-button-group` (variant="spaced"), so size and disabled state are managed
|
|
51
|
+
* by the group.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```html
|
|
55
|
+
* <btu-empty-state heading="No results found" description="Try adjusting your search criteria.">
|
|
56
|
+
* <btu-icon slot="graphic" symbol="search" size="xl"></btu-icon>
|
|
57
|
+
* <button slot="actions">Clear filters</button>
|
|
58
|
+
* </btu-empty-state>
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export default class EmptyState extends EmptyState_base {
|
|
62
|
+
protected createRenderRoot(): HTMLElement | DocumentFragment;
|
|
63
|
+
/**
|
|
64
|
+
* Heading text displayed in the empty state.
|
|
65
|
+
* @attr
|
|
66
|
+
*/
|
|
67
|
+
heading: string;
|
|
68
|
+
/**
|
|
69
|
+
* Description text displayed below the heading.
|
|
70
|
+
* @attr
|
|
71
|
+
*/
|
|
72
|
+
description?: string;
|
|
73
|
+
/**
|
|
74
|
+
* Size variant of the empty state. Affects spacing, description text, graphic size,
|
|
75
|
+
* and — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3).
|
|
76
|
+
* @attr
|
|
77
|
+
*/
|
|
78
|
+
size: 'sm' | 'md' | 'lg';
|
|
79
|
+
/**
|
|
80
|
+
* Heading level (1-6). When set to a valid integer 1-6, overrides the size-based
|
|
81
|
+
* default and drives both the semantic h1-h6 tag and the visual heading size
|
|
82
|
+
* (btu-heading-1 through btu-heading-6). Invalid values log a warning and fall
|
|
83
|
+
* back to the size-based default.
|
|
84
|
+
* @attr heading-level
|
|
85
|
+
*/
|
|
86
|
+
headingLevel?: number;
|
|
87
|
+
private initialClasses;
|
|
88
|
+
connectedCallback(): void;
|
|
89
|
+
willUpdate(changedProperties: PropertyValues): void;
|
|
90
|
+
firstUpdated(): void;
|
|
91
|
+
updated(changedProperties: PropertyValues): void;
|
|
92
|
+
private syncGraphicIconSize;
|
|
93
|
+
private resolveHeadingLevel;
|
|
94
|
+
private renderHeading;
|
|
95
|
+
render(): TemplateResult<1>;
|
|
96
|
+
}
|
|
97
|
+
declare global {
|
|
98
|
+
interface HTMLElementTagNameMap {
|
|
99
|
+
'btu-empty-state': EmptyState;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export {};
|
|
103
|
+
//# sourceMappingURL=EmptyState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/components/empty-state/EmptyState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAA;AAKhF,OAAO,gCAAgC,CAAA;AACvC,OAAO,kBAAkB,CAAA;AAIzB,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;;AAwBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,eAAyC;IAC/E,SAAS,CAAC,gBAAgB,IAAI,WAAW,GAAG,gBAAgB;IAI5D;;;OAGG;IAEH,OAAO,EAAE,MAAM,CAAK;IAEpB;;;OAGG;IAEH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;;OAIG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAO;IAE/B;;;;;;OAMG;IAEH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,OAAO,CAAC,cAAc,CAAe;IAErC,iBAAiB,IAAI,IAAI;IAOzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAYnD,YAAY,IAAI,IAAI;IAyBpB,OAAO,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAOhD,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,aAAa;IAkBrB,MAAM;CAmBP;AAQD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,UAAU,CAAA;KAC9B;CACF"}
|