@brightspot/ui 1.5.0 → 1.7.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.
Files changed (105) hide show
  1. package/dist/components/dropdown/Dropdown.d.ts +172 -0
  2. package/dist/components/dropdown/Dropdown.d.ts.map +1 -0
  3. package/dist/components/dropdown/Dropdown.js +407 -0
  4. package/dist/components/dropdown/Dropdown.js.map +1 -0
  5. package/dist/components/dropdown/DropdownItem.d.ts +108 -0
  6. package/dist/components/dropdown/DropdownItem.d.ts.map +1 -0
  7. package/dist/components/dropdown/DropdownItem.js +210 -0
  8. package/dist/components/dropdown/DropdownItem.js.map +1 -0
  9. package/dist/components/dropdown/DropdownMenu.d.ts +117 -0
  10. package/dist/components/dropdown/DropdownMenu.d.ts.map +1 -0
  11. package/dist/components/dropdown/DropdownMenu.js +295 -0
  12. package/dist/components/dropdown/DropdownMenu.js.map +1 -0
  13. package/dist/components/pagination/Pagination.d.ts +109 -0
  14. package/dist/components/pagination/Pagination.d.ts.map +1 -0
  15. package/dist/components/pagination/Pagination.js +351 -0
  16. package/dist/components/pagination/Pagination.js.map +1 -0
  17. package/dist/custom-elements.json +1642 -182
  18. package/dist/storybook/assets/Avatar.stories-BAaSlDF7.js +213 -0
  19. package/dist/storybook/assets/AvatarGroup.stories-CgoDB4N4.js +225 -0
  20. package/dist/storybook/assets/{Badge.stories-Bbnc6fRy.js → Badge.stories-uexxdmo6.js} +3 -3
  21. package/dist/storybook/assets/{Button.stories-CRJ5n2y4.js → Button.stories-T9UJUPHI.js} +1 -1
  22. package/dist/storybook/assets/{CircularProgress.stories-D9vBj3JJ.js → CircularProgress.stories-DW-VJA5j.js} +6 -6
  23. package/dist/storybook/assets/{ClipboardMixin.stories-Dm-Jm4yb.js → ClipboardMixin.stories-DzU4vxu5.js} +1 -1
  24. package/dist/storybook/assets/{Color-6BZIO3FS-BcNIJY1U.js → Color-6BZIO3FS-DRk2xjoN.js} +1 -1
  25. package/dist/storybook/assets/{Colors.stories-B9_090wL.js → Colors.stories-_UPdvuhY.js} +1 -1
  26. package/dist/storybook/assets/{ComponentStatesMixin-ChiFBCuo.js → ComponentStatesMixin-BIu5SKeV.js} +1 -1
  27. package/dist/storybook/assets/{ComponentStatesMixin.stories-DHv9MHmE.js → ComponentStatesMixin.stories-C0FLaqLu.js} +1 -1
  28. package/dist/storybook/assets/{CopyToClipboard.stories-gtJlTP1l.js → CopyToClipboard.stories-D31zoUVI.js} +1 -1
  29. package/dist/storybook/assets/{Debounce.stories-BBNX7mJA.js → Debounce.stories-CgPPl5Ee.js} +1 -1
  30. package/dist/storybook/assets/{DocsRenderer-LL677BLK-D-E99pXl.js → DocsRenderer-LL677BLK-iwiwOzX9.js} +6 -6
  31. package/dist/storybook/assets/Dropdown.stories-CDcl6rmG.js +697 -0
  32. package/dist/storybook/assets/{Events.stories-DDmydlh_.js → Events.stories-DS6UC9dZ.js} +1 -1
  33. package/dist/storybook/assets/{Heading.stories-BLGfko-i.js → Heading.stories-CAQfEGE2.js} +1 -1
  34. package/dist/storybook/assets/{Icon.stories-BHnAGcFF.js → Icon.stories-C7msWlHs.js} +11 -11
  35. package/dist/storybook/assets/{LinearProgress.stories-Dx26a0P_.js → LinearProgress.stories-DBGJ5a2-.js} +7 -7
  36. package/dist/storybook/assets/Pagination.stories-C58bGOdf.js +272 -0
  37. package/dist/storybook/assets/{Popover.stories-CbqpY6YR.js → Popover.stories-C9zU0sEX.js} +5 -5
  38. package/dist/storybook/assets/{ReadyMixin-BHiHoIbr.js → ReadyMixin-qf8SAjMu.js} +1 -1
  39. package/dist/storybook/assets/{Rtc.stories-CAjDv_Ub.js → Rtc.stories-k9tKHNhD.js} +1 -1
  40. package/dist/storybook/assets/{ScrollShadow.stories-BSV4U-tq.js → ScrollShadow.stories-Bp42zyLH.js} +1 -1
  41. package/dist/storybook/assets/{Throttle.stories-kaxXQ8RZ.js → Throttle.stories-B5YU-Nms.js} +1 -1
  42. package/dist/storybook/assets/Tooltip.stories-COQcvOnL.js +143 -0
  43. package/dist/storybook/assets/{Widget.stories-DqATHnSq.js → Widget.stories-D3Sq5-_A.js} +13 -13
  44. package/dist/storybook/assets/{WithTooltip-65CFNBJE-BtbbFYSA.js → WithTooltip-65CFNBJE-Cox81aM_.js} +1 -1
  45. package/dist/storybook/assets/{formatter-EIJCOSYU-C87Csnpu.js → formatter-EIJCOSYU-3ErcoV9q.js} +1 -1
  46. package/dist/storybook/assets/if-defined-Bv2_qPJg.js +1 -0
  47. package/dist/storybook/assets/{iframe-CcloOV09.js → iframe-CM6gBkqA.js} +170 -170
  48. package/dist/storybook/assets/iframe-D3r2Ciu8.css +1 -0
  49. package/dist/storybook/assets/{index-DP7vnJf7.js → index-iwfnMgqg.js} +1 -1
  50. package/dist/storybook/assets/{onFind.stories-BxvoC-Z-.js → onFind.stories-CDtoTN6S.js} +1 -1
  51. package/dist/storybook/assets/{onRemove.stories-Dwoixzb0.js → onRemove.stories-CSTeFCLU.js} +1 -1
  52. package/dist/storybook/assets/{onVisible.stories-CinmRF9w.js → onVisible.stories-C-yiw9n4.js} +1 -1
  53. package/dist/storybook/assets/style-map-BJGdSb_D.js +1 -0
  54. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-BHLkDkOn.js → syntaxhighlighter-ED5Y7EFY-BEudYlVi.js} +1 -1
  55. package/dist/storybook/iframe.html +2 -2
  56. package/dist/storybook/index.json +1 -1
  57. package/dist/storybook/project.json +1 -1
  58. package/dist/tailwind-plugin-button.js +10 -0
  59. package/dist/tailwind-plugin-button.js.map +1 -1
  60. package/dist/tailwind-plugin-button.ts +10 -0
  61. package/dist/tailwind-plugin-dropdown.d.ts +2 -0
  62. package/dist/tailwind-plugin-dropdown.d.ts.map +1 -0
  63. package/dist/tailwind-plugin-dropdown.js +223 -0
  64. package/dist/tailwind-plugin-dropdown.js.map +1 -0
  65. package/dist/tailwind-plugin-dropdown.ts +249 -0
  66. package/dist/tailwind-plugin-pagination.d.ts +2 -0
  67. package/dist/tailwind-plugin-pagination.d.ts.map +1 -0
  68. package/dist/tailwind-plugin-pagination.js +164 -0
  69. package/dist/tailwind-plugin-pagination.js.map +1 -0
  70. package/dist/tailwind-plugin-pagination.ts +179 -0
  71. package/dist/tailwind.config.d.ts +1 -4
  72. package/dist/tailwind.config.d.ts.map +1 -1
  73. package/dist/tailwind.config.js +1 -0
  74. package/dist/tailwind.config.js.map +1 -1
  75. package/dist/tailwind.config.ts +1 -0
  76. package/dist/util/EventEmitterMixin.d.ts +22 -0
  77. package/dist/util/EventEmitterMixin.d.ts.map +1 -1
  78. package/dist/util/EventEmitterMixin.js.map +1 -1
  79. package/dist/util/aria.d.ts.map +1 -1
  80. package/dist/util/aria.js +2 -1
  81. package/dist/util/aria.js.map +1 -1
  82. package/dist/util/i18n.d.ts +13 -0
  83. package/dist/util/i18n.d.ts.map +1 -0
  84. package/dist/util/i18n.js +21 -0
  85. package/dist/util/i18n.js.map +1 -0
  86. package/docs/components/Avatar.md +62 -0
  87. package/docs/components/AvatarGroup.md +52 -0
  88. package/docs/components/Badge.md +58 -0
  89. package/docs/components/CircularProgress.md +55 -0
  90. package/docs/components/CopyToClipboard.md +54 -0
  91. package/docs/components/Dropdown.md +100 -0
  92. package/docs/components/DropdownItem.md +64 -0
  93. package/docs/components/DropdownMenu.md +81 -0
  94. package/docs/components/Icon.md +61 -0
  95. package/docs/components/LinearProgress.md +40 -0
  96. package/docs/components/Pagination.md +95 -0
  97. package/docs/components/Popover.md +71 -0
  98. package/docs/components/README.md +24 -0
  99. package/docs/components/Widget.md +79 -0
  100. package/package.json +4 -3
  101. package/dist/storybook/assets/Avatar.stories-CPVNxsaA.js +0 -214
  102. package/dist/storybook/assets/AvatarGroup.stories-Bl65NGHl.js +0 -225
  103. package/dist/storybook/assets/Tooltip.stories-CsxXkztr.js +0 -143
  104. package/dist/storybook/assets/if-defined-COHr0XBn.js +0 -1
  105. package/dist/storybook/assets/iframe-BkDGeDre.css +0 -1
@@ -0,0 +1,108 @@
1
+ import { LitElement } from 'lit';
2
+ import '../icon/Icon.js';
3
+ export interface DropdownItemProps {
4
+ label?: string;
5
+ type?: 'default' | 'divider' | 'subhead';
6
+ iconSymbol?: string;
7
+ shortcut?: string;
8
+ disabled?: boolean;
9
+ selected?: boolean;
10
+ favorited?: boolean;
11
+ }
12
+ declare const DropdownItem_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
13
+ /**
14
+ * A menu item component for use inside `btu-dropdown-menu`.
15
+ *
16
+ * Renders as a menu item, divider, or subhead depending on the `type` property.
17
+ * Supports checkbox mode (inherited from parent menu), icons, keyboard shortcuts,
18
+ * and favorite toggles.
19
+ *
20
+ * @element btu-dropdown-item
21
+ *
22
+ * @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
24
+ * @fires {CustomEvent<{label: string, favorited: boolean}>} btu-dropdown-item-favorite - Fired when favorite is toggled
25
+ *
26
+ * @example
27
+ * ```html
28
+ * <!-- Basic item -->
29
+ * <btu-dropdown-item label="Edit"></btu-dropdown-item>
30
+ *
31
+ * <!-- Item with icon and shortcut -->
32
+ * <btu-dropdown-item label="Save" icon-symbol="save" shortcut="Ctrl+S"></btu-dropdown-item>
33
+ * ```
34
+ */
35
+ export default class DropdownItem extends DropdownItem_base {
36
+ /**
37
+ * Display text for the item.
38
+ * @attr
39
+ */
40
+ label: string;
41
+ /**
42
+ * Item type: 'default', 'divider', or 'subhead'.
43
+ * @attr
44
+ */
45
+ type: 'default' | 'divider' | 'subhead';
46
+ /**
47
+ * Lucide icon symbol.
48
+ * @attr icon-symbol
49
+ */
50
+ iconSymbol: string;
51
+ /**
52
+ * Keyboard shortcut display text.
53
+ * @attr
54
+ */
55
+ shortcut: string;
56
+ /**
57
+ * Whether the item is disabled.
58
+ * @attr
59
+ */
60
+ disabled: boolean;
61
+ /**
62
+ * Whether the item is selected/checked.
63
+ * @attr
64
+ */
65
+ selected: boolean;
66
+ /**
67
+ * Whether the item is favorited.
68
+ * @attr
69
+ */
70
+ favorited: boolean;
71
+ /** @internal */
72
+ private _generatedId;
73
+ /** @internal */
74
+ private _checkboxMode;
75
+ /** @internal */
76
+ private _showIcon;
77
+ /** @internal */
78
+ private _showFavorites;
79
+ /** @internal */
80
+ private _showShortcuts;
81
+ /** @internal */
82
+ private _parentMenuIconSymbol;
83
+ createRenderRoot(): this;
84
+ /** @internal Called by DropdownMenu to configure inherited settings */
85
+ _configure(opts: {
86
+ checkbox: boolean;
87
+ icon: boolean;
88
+ iconSymbol: string;
89
+ favorites: boolean;
90
+ shortcuts: boolean;
91
+ }): void;
92
+ /** @internal Whether this item is focusable (not a divider or subhead) */
93
+ get focusable(): boolean;
94
+ firstUpdated(): void;
95
+ /** @internal Activate this item (Enter/click) */
96
+ activate(): void;
97
+ /** Toggle favorite state */
98
+ private _toggleFavorite;
99
+ render(): import("lit-html").TemplateResult<1>;
100
+ private _handleClick;
101
+ }
102
+ declare global {
103
+ interface HTMLElementTagNameMap {
104
+ 'btu-dropdown-item': DropdownItem;
105
+ }
106
+ }
107
+ export {};
108
+ //# sourceMappingURL=DropdownItem.d.ts.map
@@ -0,0 +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,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;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,UAAU,EAAE,MAAM,CAAK;IAEvB;;;OAGG;IAEH,QAAQ,EAAE,MAAM,CAAK;IAErB;;;OAGG;IAEH,QAAQ,EAAE,OAAO,CAAQ;IAEzB;;;OAGG;IAEH,QAAQ,EAAE,OAAO,CAAQ;IAEzB;;;OAGG;IAEH,SAAS,EAAE,OAAO,CAAQ;IAE1B,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,qBAAqB,CAAK;IAElC,gBAAgB;IAIhB,uEAAuE;IACvE,UAAU,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;IASjH,0EAA0E;IAC1E,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,YAAY,IAAI,IAAI;IAIpB,iDAAiD;IACjD,QAAQ,IAAI,IAAI;IAahB,4BAA4B;IAC5B,OAAO,CAAC,eAAe;IASvB,MAAM;IA8DN,OAAO,CAAC,YAAY;CAGrB;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,YAAY,CAAA;KAClC;CACF"}
@@ -0,0 +1,210 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, nothing } from 'lit';
8
+ import { property } from 'lit/decorators.js';
9
+ import { EventEmitterMixin } from '../../util/EventEmitterMixin.js';
10
+ import { ReadyMixin } from '../../util/ReadyMixin.js';
11
+ import '../icon/Icon.js';
12
+ /**
13
+ * A menu item component for use inside `btu-dropdown-menu`.
14
+ *
15
+ * Renders as a menu item, divider, or subhead depending on the `type` property.
16
+ * Supports checkbox mode (inherited from parent menu), icons, keyboard shortcuts,
17
+ * and favorite toggles.
18
+ *
19
+ * @element btu-dropdown-item
20
+ *
21
+ * @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, favorited: boolean}>} btu-dropdown-item-favorite - Fired when favorite is toggled
24
+ *
25
+ * @example
26
+ * ```html
27
+ * <!-- Basic item -->
28
+ * <btu-dropdown-item label="Edit"></btu-dropdown-item>
29
+ *
30
+ * <!-- Item with icon and shortcut -->
31
+ * <btu-dropdown-item label="Save" icon-symbol="save" shortcut="Ctrl+S"></btu-dropdown-item>
32
+ * ```
33
+ */
34
+ export default class DropdownItem extends EventEmitterMixin(ReadyMixin(LitElement)) {
35
+ constructor() {
36
+ super(...arguments);
37
+ /**
38
+ * Display text for the item.
39
+ * @attr
40
+ */
41
+ this.label = '';
42
+ /**
43
+ * Item type: 'default', 'divider', or 'subhead'.
44
+ * @attr
45
+ */
46
+ this.type = 'default';
47
+ /**
48
+ * Lucide icon symbol.
49
+ * @attr icon-symbol
50
+ */
51
+ this.iconSymbol = '';
52
+ /**
53
+ * Keyboard shortcut display text.
54
+ * @attr
55
+ */
56
+ this.shortcut = '';
57
+ /**
58
+ * Whether the item is disabled.
59
+ * @attr
60
+ */
61
+ this.disabled = false;
62
+ /**
63
+ * Whether the item is selected/checked.
64
+ * @attr
65
+ */
66
+ this.selected = false;
67
+ /**
68
+ * Whether the item is favorited.
69
+ * @attr
70
+ */
71
+ this.favorited = false;
72
+ /** @internal */
73
+ this._generatedId = `btu-dropdown-subhead-${crypto.randomUUID().slice(0, 8)}`;
74
+ /** @internal */
75
+ this._checkboxMode = false;
76
+ /** @internal */
77
+ this._showIcon = false;
78
+ /** @internal */
79
+ this._showFavorites = false;
80
+ /** @internal */
81
+ this._showShortcuts = false;
82
+ /** @internal */
83
+ this._parentMenuIconSymbol = '';
84
+ }
85
+ createRenderRoot() {
86
+ return this;
87
+ }
88
+ /** @internal Called by DropdownMenu to configure inherited settings */
89
+ _configure(opts) {
90
+ this._checkboxMode = opts.checkbox;
91
+ this._showIcon = opts.icon || !!this.iconSymbol;
92
+ this._parentMenuIconSymbol = opts.iconSymbol;
93
+ this._showFavorites = opts.favorites;
94
+ this._showShortcuts = opts.shortcuts;
95
+ this.requestUpdate();
96
+ }
97
+ /** @internal Whether this item is focusable (not a divider or subhead) */
98
+ get focusable() {
99
+ return this.type === 'default';
100
+ }
101
+ firstUpdated() {
102
+ this.emit('btu-dropdown-item-ready');
103
+ }
104
+ /** @internal Activate this item (Enter/click) */
105
+ activate() {
106
+ if (this.disabled)
107
+ return;
108
+ if (this._checkboxMode) {
109
+ this.selected = !this.selected;
110
+ }
111
+ this.emit('btu-dropdown-item-select', {
112
+ label: this.label,
113
+ selected: this.selected,
114
+ });
115
+ }
116
+ /** Toggle favorite state */
117
+ _toggleFavorite(e) {
118
+ e.stopPropagation();
119
+ this.favorited = !this.favorited;
120
+ this.emit('btu-dropdown-item-favorite', {
121
+ label: this.label,
122
+ favorited: this.favorited,
123
+ });
124
+ }
125
+ render() {
126
+ if (this.type === 'divider') {
127
+ return html `<hr class="btu-dropdown-divider" role="separator" />`;
128
+ }
129
+ if (this.type === 'subhead') {
130
+ return html `<div class="btu-dropdown-subhead" role="presentation" id="${this._generatedId}">${this.label}</div>`;
131
+ }
132
+ const role = this._checkboxMode ? 'menuitemcheckbox' : 'menuitem';
133
+ const classes = [
134
+ 'btu-dropdown-item',
135
+ this.selected ? 'btu-dropdown-item-selected' : '',
136
+ this.disabled ? 'btu-dropdown-item-disabled' : '',
137
+ ]
138
+ .filter(Boolean)
139
+ .join(' ');
140
+ const resolvedIconSymbol = this.iconSymbol || this._parentMenuIconSymbol;
141
+ return html `<div
142
+ class="${classes}"
143
+ role="${role}"
144
+ tabindex="-1"
145
+ aria-disabled="${this.disabled}"
146
+ .ariaChecked="${this._checkboxMode ? String(this.selected) : null}"
147
+ @click="${this._handleClick}"
148
+ >
149
+ ${this._checkboxMode
150
+ ? html `<span class="btu-dropdown-checkbox ${this.selected ? 'btu-dropdown-checkbox-checked' : ''}">
151
+ ${this.selected ? html `<btu-icon symbol="check" size="xs"></btu-icon>` : nothing}
152
+ </span>`
153
+ : nothing}
154
+ ${!this._checkboxMode && this.selected
155
+ ? html `<span class="btu-dropdown-check"><btu-icon symbol="check" size="sm"></btu-icon></span>`
156
+ : nothing}
157
+ ${this._showIcon && resolvedIconSymbol
158
+ ? html `<span class="btu-dropdown-item-icon"
159
+ ><btu-icon symbol="${resolvedIconSymbol}" size="sm"></btu-icon
160
+ ></span>`
161
+ : nothing}
162
+ <span class="btu-dropdown-item-label">${this.label}</span>
163
+ ${this._showShortcuts && this.shortcut
164
+ ? html `<span class="btu-dropdown-shortcut">${this.shortcut}</span>`
165
+ : nothing}
166
+ ${this._showFavorites
167
+ ? html `<button
168
+ type="button"
169
+ class="btu-button btu-button-text-hidden btu-button-container-none btu-button-gray btu-button-sm btu-dropdown-favorite ${this
170
+ .favorited
171
+ ? 'btu-dropdown-favorite-active'
172
+ : ''}"
173
+ @click="${this._toggleFavorite}"
174
+ aria-label="${this.favorited ? 'Remove from favorites' : 'Add to favorites'}"
175
+ aria-pressed="${this.favorited}"
176
+ >
177
+ <btu-icon symbol="star" size="sm"></btu-icon>
178
+ </button>`
179
+ : nothing}
180
+ </div>`;
181
+ }
182
+ _handleClick() {
183
+ this.activate();
184
+ }
185
+ }
186
+ __decorate([
187
+ property({ type: String })
188
+ ], DropdownItem.prototype, "label", void 0);
189
+ __decorate([
190
+ property({ type: String })
191
+ ], DropdownItem.prototype, "type", void 0);
192
+ __decorate([
193
+ property({ type: String, attribute: 'icon-symbol' })
194
+ ], DropdownItem.prototype, "iconSymbol", void 0);
195
+ __decorate([
196
+ property({ type: String })
197
+ ], DropdownItem.prototype, "shortcut", void 0);
198
+ __decorate([
199
+ property({ type: Boolean })
200
+ ], DropdownItem.prototype, "disabled", void 0);
201
+ __decorate([
202
+ property({ type: Boolean, reflect: true })
203
+ ], DropdownItem.prototype, "selected", void 0);
204
+ __decorate([
205
+ property({ type: Boolean })
206
+ ], DropdownItem.prototype, "favorited", void 0);
207
+ if (!customElements.get('btu-dropdown-item')) {
208
+ customElements.define('btu-dropdown-item', DropdownItem);
209
+ }
210
+ //# sourceMappingURL=DropdownItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownItem.js","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownItem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { LitElement } from 'lit';
2
+ import type DropdownItem from './DropdownItem.js';
3
+ export interface DropdownMenuProps {
4
+ name?: string;
5
+ header?: boolean;
6
+ checkbox?: boolean;
7
+ icon?: boolean;
8
+ iconSymbol?: string;
9
+ favorites?: boolean;
10
+ shortcuts?: boolean;
11
+ emptyMessage?: string;
12
+ }
13
+ declare const DropdownMenu_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
14
+ /**
15
+ * A menu container component that provides keyboard navigation and ARIA menu semantics.
16
+ *
17
+ * Contains `btu-dropdown-item` children and manages roving tabindex, typeahead search,
18
+ * and keyboard navigation following the WAI-ARIA Menu Button Pattern.
19
+ *
20
+ * @element btu-dropdown-menu
21
+ *
22
+ * @fires {CustomEvent} btu-dropdown-menu-ready - Fired after first render
23
+ *
24
+ * @slot - Menu items (`btu-dropdown-item` elements)
25
+ *
26
+ * @cssprop --dropdown-empty-color - Empty state text color (default: gray-400)
27
+ *
28
+ * @example
29
+ * ```html
30
+ * <btu-dropdown-menu name="Sort By" header checkbox>
31
+ * <btu-dropdown-item label="Name" selected></btu-dropdown-item>
32
+ * <btu-dropdown-item label="Date"></btu-dropdown-item>
33
+ * <btu-dropdown-item label="Size"></btu-dropdown-item>
34
+ * </btu-dropdown-menu>
35
+ * ```
36
+ */
37
+ export default class DropdownMenu extends DropdownMenu_base {
38
+ /**
39
+ * Accessible name for the menu, displayed in header when header is true.
40
+ * @attr
41
+ */
42
+ name: string;
43
+ /**
44
+ * Show header bar with menu name.
45
+ * @attr
46
+ */
47
+ header: boolean;
48
+ /**
49
+ * Enable checkbox mode for items (menuitemcheckbox role).
50
+ * @attr
51
+ */
52
+ checkbox: boolean;
53
+ /**
54
+ * Show icons before each item.
55
+ * @attr
56
+ */
57
+ icon: boolean;
58
+ /**
59
+ * Fallback Lucide icon symbol for items without their own.
60
+ * @attr icon-symbol
61
+ */
62
+ iconSymbol: string;
63
+ /**
64
+ * Show favorite toggle on each item.
65
+ * @attr
66
+ */
67
+ favorites: boolean;
68
+ /**
69
+ * Show keyboard shortcut text on each item.
70
+ * @attr
71
+ */
72
+ shortcuts: boolean;
73
+ /**
74
+ * Message displayed when the menu has no focusable items.
75
+ * @attr empty-message
76
+ */
77
+ emptyMessage: string;
78
+ /** @internal */
79
+ private _typeaheadBuffer;
80
+ /** @internal */
81
+ private _typeaheadTimeout;
82
+ createRenderRoot(): this;
83
+ connectedCallback(): void;
84
+ disconnectedCallback(): void;
85
+ firstUpdated(): void;
86
+ updated(): void;
87
+ /** Configure all child items with menu-level settings */
88
+ private _configureItems;
89
+ /** Get all btu-dropdown-item children */
90
+ private _getAllItems;
91
+ /** Get only focusable items (default type, skip dividers/subheads) */
92
+ private _getFocusableItems;
93
+ /** @internal Focus a specific item by updating tabindex */
94
+ focusItem(item: DropdownItem): void;
95
+ /** @internal Focus the first non-disabled focusable item (or first checked in checkbox mode) */
96
+ focusFirst(): void;
97
+ /** @internal Focus the last non-disabled focusable item */
98
+ focusLast(): void;
99
+ /** @internal */
100
+ 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
+ /** Typeahead character matching with 500ms accumulation */
106
+ private _handleTypeahead;
107
+ /** Check whether the menu has zero focusable items */
108
+ private get _isEmpty();
109
+ render(): import("lit-html").TemplateResult<1>;
110
+ }
111
+ declare global {
112
+ interface HTMLElementTagNameMap {
113
+ 'btu-dropdown-menu': DropdownMenu;
114
+ }
115
+ }
116
+ export {};
117
+ //# sourceMappingURL=DropdownMenu.d.ts.map
@@ -0,0 +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;AAI/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,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,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,iBAAyC;IACjF;;;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,UAAU,EAAE,MAAM,CAAK;IAEvB;;;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,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;IAanC,gGAAgG;IAChG,UAAU,IAAI,IAAI;IAalB,2DAA2D;IAC3D,SAAS,IAAI,IAAI;IAMjB,gBAAgB;IAChB,OAAO,CAAC,cAAc,CA2DrB;IAED,0CAA0C;IAC1C,OAAO,CAAC,qBAAqB;IAK7B,sEAAsE;IACtE,OAAO,CAAC,cAAc;IAOtB,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"}