@brightspot/ui 1.6.0 → 1.8.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 (97) 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/icon-button/IconButton.d.ts +85 -0
  14. package/dist/components/icon-button/IconButton.d.ts.map +1 -0
  15. package/dist/components/icon-button/IconButton.js +171 -0
  16. package/dist/components/icon-button/IconButton.js.map +1 -0
  17. package/dist/components/pagination/Pagination.d.ts +0 -1
  18. package/dist/components/pagination/Pagination.d.ts.map +1 -1
  19. package/dist/components/pagination/Pagination.js +22 -22
  20. package/dist/components/pagination/Pagination.js.map +1 -1
  21. package/dist/custom-elements.json +1212 -1
  22. package/dist/storybook/assets/Avatar.stories-XfJUoW42.js +213 -0
  23. package/dist/storybook/assets/{AvatarGroup.stories-BBkQuFKk.js → AvatarGroup.stories-CPkv0mVI.js} +1 -1
  24. package/dist/storybook/assets/{Badge.stories-mFZsls7i.js → Badge.stories-Z42hQyzK.js} +3 -3
  25. package/dist/storybook/assets/{Button.stories-CAWX17L1.js → Button.stories-DTcnCrp-.js} +1 -1
  26. package/dist/storybook/assets/{CircularProgress.stories-DBVt4Cg2.js → CircularProgress.stories-B59nHh_k.js} +6 -6
  27. package/dist/storybook/assets/{ClipboardMixin.stories-BH9E-OI6.js → ClipboardMixin.stories-C6DraZ93.js} +1 -1
  28. package/dist/storybook/assets/{Color-6BZIO3FS-CVnTzq2p.js → Color-6BZIO3FS-BuNGIaf5.js} +1 -1
  29. package/dist/storybook/assets/{Colors.stories-BFYmP0LL.js → Colors.stories-B3Capc8F.js} +1 -1
  30. package/dist/storybook/assets/{ComponentStatesMixin-Cu7YXkU8.js → ComponentStatesMixin-DRalOmcW.js} +1 -1
  31. package/dist/storybook/assets/{ComponentStatesMixin.stories-CAvyYt0H.js → ComponentStatesMixin.stories-TKD7YrVe.js} +1 -1
  32. package/dist/storybook/assets/{CopyToClipboard.stories-DbJZsp_L.js → CopyToClipboard.stories-Bv8jZ7TL.js} +1 -1
  33. package/dist/storybook/assets/{Debounce.stories-BiFiH1K9.js → Debounce.stories-CLwXI3OZ.js} +1 -1
  34. package/dist/storybook/assets/{DocsRenderer-LL677BLK-Bq6G4eeC.js → DocsRenderer-LL677BLK-DjMDalQg.js} +6 -6
  35. package/dist/storybook/assets/Dropdown.stories-D7X0Dbnt.js +697 -0
  36. package/dist/storybook/assets/{Events.stories-BsDBxh8_.js → Events.stories-Dgn1N8jT.js} +1 -1
  37. package/dist/storybook/assets/{Heading.stories-zGzWgHVO.js → Heading.stories-BcciQ3Ug.js} +1 -1
  38. package/dist/storybook/assets/{Icon.stories-B4T6sSwf.js → Icon.stories-BWqJoZUM.js} +11 -11
  39. package/dist/storybook/assets/IconButton.stories-BrMDAi9q.js +748 -0
  40. package/dist/storybook/assets/{LinearProgress.stories-qzqmUUwY.js → LinearProgress.stories-INijWBr_.js} +7 -7
  41. package/dist/storybook/assets/LucideDynamicLoader-jmdq8YDM.js +1 -0
  42. package/dist/storybook/assets/{Pagination.stories-B6Q-7taJ.js → Pagination.stories-CrExaWpC.js} +1 -1
  43. package/dist/storybook/assets/{Popover.stories-CGkU0SGv.js → Popover.stories-Bh6IUPG_.js} +5 -5
  44. package/dist/storybook/assets/{ReadyMixin-3YCzoG6W.js → ReadyMixin-C1lZU7vt.js} +1 -1
  45. package/dist/storybook/assets/{Rtc.stories-Y1MYTWAt.js → Rtc.stories-BHqFwgR7.js} +1 -1
  46. package/dist/storybook/assets/{ScrollShadow.stories-B9kSpLT1.js → ScrollShadow.stories-DnIj5cZF.js} +1 -1
  47. package/dist/storybook/assets/{Throttle.stories-BgvLDrS3.js → Throttle.stories-Dilsv90H.js} +1 -1
  48. package/dist/storybook/assets/Tooltip.stories-Dnb76OXa.js +143 -0
  49. package/dist/storybook/assets/{Widget.stories--JpqVyJe.js → Widget.stories-Cl-3dv15.js} +13 -13
  50. package/dist/storybook/assets/{WithTooltip-65CFNBJE-DNbD9hAX.js → WithTooltip-65CFNBJE-Bq21jhKM.js} +1 -1
  51. package/dist/storybook/assets/{formatter-EIJCOSYU-Cy8KIxab.js → formatter-EIJCOSYU-CwrejIu0.js} +1 -1
  52. package/dist/storybook/assets/if-defined-D1UQmdjo.js +1 -0
  53. package/dist/storybook/assets/iframe-CNxIA3cQ.css +1 -0
  54. package/dist/storybook/assets/{iframe-Dz6CxatW.js → iframe-CsKt54V3.js} +154 -154
  55. package/dist/storybook/assets/{index-CebChkmF.js → index-DQ0xe06s.js} +1 -1
  56. package/dist/storybook/assets/{onFind.stories-nHDImx0x.js → onFind.stories-CGeGoVR6.js} +1 -1
  57. package/dist/storybook/assets/{onRemove.stories-CBxYVPwd.js → onRemove.stories-DXOwfv14.js} +1 -1
  58. package/dist/storybook/assets/{onVisible.stories-D4Qewc9Y.js → onVisible.stories-DNzXceKW.js} +1 -1
  59. package/dist/storybook/assets/{style-map-BgW9piaW.js → style-map-kcS06w9f.js} +1 -1
  60. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CROW1475.js → syntaxhighlighter-ED5Y7EFY-BnpaJz4a.js} +1 -1
  61. package/dist/storybook/iframe.html +2 -2
  62. package/dist/storybook/index.json +1 -1
  63. package/dist/storybook/project.json +1 -1
  64. package/dist/tailwind-plugin-button.js +10 -0
  65. package/dist/tailwind-plugin-button.js.map +1 -1
  66. package/dist/tailwind-plugin-button.ts +10 -0
  67. package/dist/tailwind-plugin-dropdown.d.ts +2 -0
  68. package/dist/tailwind-plugin-dropdown.d.ts.map +1 -0
  69. package/dist/tailwind-plugin-dropdown.js +223 -0
  70. package/dist/tailwind-plugin-dropdown.js.map +1 -0
  71. package/dist/tailwind-plugin-dropdown.ts +249 -0
  72. package/dist/tailwind-plugin-pagination.js +9 -21
  73. package/dist/tailwind-plugin-pagination.js.map +1 -1
  74. package/dist/tailwind-plugin-pagination.ts +10 -21
  75. package/dist/util/EventEmitterMixin.d.ts +17 -0
  76. package/dist/util/EventEmitterMixin.d.ts.map +1 -1
  77. package/dist/util/EventEmitterMixin.js.map +1 -1
  78. package/docs/components/Avatar.md +62 -0
  79. package/docs/components/AvatarGroup.md +52 -0
  80. package/docs/components/Badge.md +58 -0
  81. package/docs/components/CircularProgress.md +55 -0
  82. package/docs/components/CopyToClipboard.md +54 -0
  83. package/docs/components/Dropdown.md +100 -0
  84. package/docs/components/DropdownItem.md +64 -0
  85. package/docs/components/DropdownMenu.md +81 -0
  86. package/docs/components/Icon.md +61 -0
  87. package/docs/components/IconButton.md +63 -0
  88. package/docs/components/LinearProgress.md +40 -0
  89. package/docs/components/Pagination.md +95 -0
  90. package/docs/components/Popover.md +71 -0
  91. package/docs/components/README.md +25 -0
  92. package/docs/components/Widget.md +79 -0
  93. package/package.json +3 -2
  94. package/dist/storybook/assets/Avatar.stories-CafEcy4T.js +0 -214
  95. package/dist/storybook/assets/Tooltip.stories-POo1M-ew.js +0 -143
  96. package/dist/storybook/assets/if-defined-CngSGyRu.js +0 -1
  97. package/dist/storybook/assets/iframe-DiT9Iz2T.css +0 -1
@@ -0,0 +1,295 @@
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
+ /**
12
+ * A menu container component that provides keyboard navigation and ARIA menu semantics.
13
+ *
14
+ * Contains `btu-dropdown-item` children and manages roving tabindex, typeahead search,
15
+ * and keyboard navigation following the WAI-ARIA Menu Button Pattern.
16
+ *
17
+ * @element btu-dropdown-menu
18
+ *
19
+ * @fires {CustomEvent} btu-dropdown-menu-ready - Fired after first render
20
+ *
21
+ * @slot - Menu items (`btu-dropdown-item` elements)
22
+ *
23
+ * @cssprop --dropdown-empty-color - Empty state text color (default: gray-400)
24
+ *
25
+ * @example
26
+ * ```html
27
+ * <btu-dropdown-menu name="Sort By" header checkbox>
28
+ * <btu-dropdown-item label="Name" selected></btu-dropdown-item>
29
+ * <btu-dropdown-item label="Date"></btu-dropdown-item>
30
+ * <btu-dropdown-item label="Size"></btu-dropdown-item>
31
+ * </btu-dropdown-menu>
32
+ * ```
33
+ */
34
+ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElement)) {
35
+ constructor() {
36
+ super(...arguments);
37
+ /**
38
+ * Accessible name for the menu, displayed in header when header is true.
39
+ * @attr
40
+ */
41
+ this.name = '';
42
+ /**
43
+ * Show header bar with menu name.
44
+ * @attr
45
+ */
46
+ this.header = false;
47
+ /**
48
+ * Enable checkbox mode for items (menuitemcheckbox role).
49
+ * @attr
50
+ */
51
+ this.checkbox = false;
52
+ /**
53
+ * Show icons before each item.
54
+ * @attr
55
+ */
56
+ this.icon = false;
57
+ /**
58
+ * Fallback Lucide icon symbol for items without their own.
59
+ * @attr icon-symbol
60
+ */
61
+ this.iconSymbol = '';
62
+ /**
63
+ * Show favorite toggle on each item.
64
+ * @attr
65
+ */
66
+ this.favorites = false;
67
+ /**
68
+ * Show keyboard shortcut text on each item.
69
+ * @attr
70
+ */
71
+ this.shortcuts = false;
72
+ /**
73
+ * Message displayed when the menu has no focusable items.
74
+ * @attr empty-message
75
+ */
76
+ this.emptyMessage = 'No items available';
77
+ /** @internal */
78
+ this._typeaheadBuffer = '';
79
+ /** @internal */
80
+ this._typeaheadTimeout = null;
81
+ /** @internal */
82
+ this._handleKeydown = (e) => {
83
+ const focusable = this._getFocusableItems();
84
+ if (focusable.length === 0)
85
+ return;
86
+ const currentIndex = this._getCurrentFocusIndex(focusable);
87
+ switch (e.key) {
88
+ case 'ArrowDown': {
89
+ e.preventDefault();
90
+ const next = this._findNextIndex(focusable, currentIndex, 1);
91
+ this.focusItem(focusable[next]);
92
+ break;
93
+ }
94
+ case 'ArrowUp': {
95
+ e.preventDefault();
96
+ const prev = this._findNextIndex(focusable, currentIndex, -1);
97
+ this.focusItem(focusable[prev]);
98
+ break;
99
+ }
100
+ case 'Home': {
101
+ e.preventDefault();
102
+ this.focusItem(focusable[0]);
103
+ break;
104
+ }
105
+ case 'End': {
106
+ e.preventDefault();
107
+ this.focusItem(focusable[focusable.length - 1]);
108
+ break;
109
+ }
110
+ case 'Enter': {
111
+ e.preventDefault();
112
+ if (currentIndex >= 0) {
113
+ focusable[currentIndex].activate();
114
+ }
115
+ break;
116
+ }
117
+ case ' ': {
118
+ e.preventDefault();
119
+ if (currentIndex >= 0) {
120
+ focusable[currentIndex].activate();
121
+ }
122
+ break;
123
+ }
124
+ case 'Escape': {
125
+ // Bubble up to Dropdown to handle close
126
+ break;
127
+ }
128
+ case 'Tab': {
129
+ // Bubble up to Dropdown to handle close + focus restore
130
+ break;
131
+ }
132
+ default: {
133
+ // Typeahead: printable characters
134
+ if (e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {
135
+ this._handleTypeahead(e.key, focusable);
136
+ }
137
+ break;
138
+ }
139
+ }
140
+ };
141
+ }
142
+ createRenderRoot() {
143
+ this.renderOptions.renderBefore ??= this.firstChild;
144
+ return this;
145
+ }
146
+ connectedCallback() {
147
+ super.connectedCallback();
148
+ this.setAttribute('role', 'menu');
149
+ if (this.name) {
150
+ this.setAttribute('aria-label', this.name);
151
+ }
152
+ this.addEventListener('keydown', this._handleKeydown);
153
+ }
154
+ disconnectedCallback() {
155
+ super.disconnectedCallback();
156
+ this.removeEventListener('keydown', this._handleKeydown);
157
+ if (this._typeaheadTimeout) {
158
+ clearTimeout(this._typeaheadTimeout);
159
+ }
160
+ }
161
+ firstUpdated() {
162
+ this._configureItems();
163
+ this.emit('btu-dropdown-menu-ready');
164
+ }
165
+ updated() {
166
+ this._configureItems();
167
+ if (this.name) {
168
+ this.setAttribute('aria-label', this.name);
169
+ }
170
+ else {
171
+ this.removeAttribute('aria-label');
172
+ }
173
+ }
174
+ /** Configure all child items with menu-level settings */
175
+ _configureItems() {
176
+ const items = this._getAllItems();
177
+ items.forEach(item => {
178
+ item._configure({
179
+ checkbox: this.checkbox,
180
+ icon: this.icon,
181
+ iconSymbol: this.iconSymbol,
182
+ favorites: this.favorites,
183
+ shortcuts: this.shortcuts,
184
+ });
185
+ });
186
+ }
187
+ /** Get all btu-dropdown-item children */
188
+ _getAllItems() {
189
+ return Array.from(this.querySelectorAll('btu-dropdown-item'));
190
+ }
191
+ /** Get only focusable items (default type, skip dividers/subheads) */
192
+ _getFocusableItems() {
193
+ return this._getAllItems().filter(item => item.focusable);
194
+ }
195
+ /** @internal Focus a specific item by updating tabindex */
196
+ focusItem(item) {
197
+ const focusable = this._getFocusableItems();
198
+ focusable.forEach(i => {
199
+ const el = i.querySelector('[role="menuitem"], [role="menuitemcheckbox"]');
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
+ }
208
+ }
209
+ /** @internal Focus the first non-disabled focusable item (or first checked in checkbox mode) */
210
+ focusFirst() {
211
+ const items = this._getFocusableItems();
212
+ if (this.checkbox) {
213
+ const checked = items.find(i => i.selected && !i.disabled);
214
+ if (checked) {
215
+ this.focusItem(checked);
216
+ return;
217
+ }
218
+ }
219
+ const first = items.find(i => !i.disabled) || items[0];
220
+ if (first)
221
+ this.focusItem(first);
222
+ }
223
+ /** @internal Focus the last non-disabled focusable item */
224
+ focusLast() {
225
+ const items = this._getFocusableItems();
226
+ const last = [...items].reverse().find(i => !i.disabled) || items[items.length - 1];
227
+ if (last)
228
+ this.focusItem(last);
229
+ }
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
+ /** Typeahead character matching with 500ms accumulation */
244
+ _handleTypeahead(char, focusable) {
245
+ this._typeaheadBuffer += char.toLowerCase();
246
+ if (this._typeaheadTimeout) {
247
+ clearTimeout(this._typeaheadTimeout);
248
+ }
249
+ this._typeaheadTimeout = setTimeout(() => {
250
+ this._typeaheadBuffer = '';
251
+ }, 500);
252
+ const match = focusable.find(item => item.label.toLowerCase().startsWith(this._typeaheadBuffer));
253
+ if (match) {
254
+ this.focusItem(match);
255
+ }
256
+ }
257
+ /** Check whether the menu has zero focusable items */
258
+ get _isEmpty() {
259
+ return this._getFocusableItems().length === 0;
260
+ }
261
+ render() {
262
+ return html `${this.header && this.name ? html `<div class="btu-dropdown-header">${this.name}</div>` : nothing}${this
263
+ ._isEmpty
264
+ ? html `<div class="btu-dropdown-empty" role="status">${this.emptyMessage}</div>`
265
+ : nothing}`;
266
+ }
267
+ }
268
+ __decorate([
269
+ property({ type: String })
270
+ ], DropdownMenu.prototype, "name", void 0);
271
+ __decorate([
272
+ property({ type: Boolean })
273
+ ], DropdownMenu.prototype, "header", void 0);
274
+ __decorate([
275
+ property({ type: Boolean })
276
+ ], DropdownMenu.prototype, "checkbox", void 0);
277
+ __decorate([
278
+ property({ type: Boolean })
279
+ ], DropdownMenu.prototype, "icon", void 0);
280
+ __decorate([
281
+ property({ type: String, attribute: 'icon-symbol' })
282
+ ], DropdownMenu.prototype, "iconSymbol", void 0);
283
+ __decorate([
284
+ property({ type: Boolean })
285
+ ], DropdownMenu.prototype, "favorites", void 0);
286
+ __decorate([
287
+ property({ type: Boolean })
288
+ ], DropdownMenu.prototype, "shortcuts", void 0);
289
+ __decorate([
290
+ property({ type: String, attribute: 'empty-message' })
291
+ ], DropdownMenu.prototype, "emptyMessage", void 0);
292
+ if (!customElements.get('btu-dropdown-menu')) {
293
+ customElements.define('btu-dropdown-menu', DropdownMenu);
294
+ }
295
+ //# sourceMappingURL=DropdownMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownMenu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { LitElement } from 'lit';
2
+ import '../icon/Icon.js';
3
+ export type IconButtonType = 'primary' | 'primary-clear' | 'primary-stroke' | 'secondary' | 'secondary-clear' | 'secondary-stroke' | 'tertiary' | 'tertiary-clear' | 'tertiary-stroke';
4
+ declare const SIZE_MAP: {
5
+ readonly small: {
6
+ readonly buttonSize: "sm";
7
+ readonly iconSize: "sm";
8
+ };
9
+ readonly medium: {
10
+ readonly buttonSize: "md";
11
+ readonly iconSize: "md";
12
+ };
13
+ readonly large: {
14
+ readonly buttonSize: "lg";
15
+ readonly iconSize: "lg";
16
+ };
17
+ };
18
+ export type IconButtonSize = keyof typeof SIZE_MAP;
19
+ declare const IconButton_base: (new (...args: any[]) => import("../../util/TooltipMixin.js").TooltipMixinInterface) & (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
20
+ /**
21
+ * Surfaces the different actions someone can perform in an interface where space is limited.
22
+ *
23
+ * Uses an icon to communicate the action and supports multiple visual types and sizes.
24
+ * Tooltip support is built-in for accessibility in compact layouts.
25
+ *
26
+ * @element btu-icon-button
27
+ *
28
+ * @fires {CustomEvent} btu-icon-button-ready - Fired after first render and initialization
29
+ * @fires {CustomEvent<{name: string | undefined}>} btu-icon-button-click - Fired when the button is clicked
30
+ *
31
+ * @example
32
+ * ```html
33
+ * <btu-icon-button icon-symbol="trash-2" tooltip="Delete" aria-label="Delete item"></btu-icon-button>
34
+ * <btu-icon-button icon-symbol="pencil" type="secondary" size="small" aria-label="Edit"></btu-icon-button>
35
+ * <btu-icon-button icon-symbol="x" type="primary" destructive aria-label="Remove"></btu-icon-button>
36
+ * ```
37
+ */
38
+ export default class IconButton extends IconButton_base {
39
+ /**
40
+ * Optional name for the button which can be used to identify the button in a callback.
41
+ * @attr
42
+ */
43
+ name: string | undefined;
44
+ /**
45
+ * Specifies the type of icon-button, controlling the visual style.
46
+ * @attr
47
+ */
48
+ type: IconButtonType;
49
+ /**
50
+ * Lucide icon name.
51
+ * @attr icon-symbol
52
+ */
53
+ iconSymbol: string | undefined;
54
+ /**
55
+ * Specifies the size of icon-button.
56
+ * @attr
57
+ */
58
+ size: IconButtonSize;
59
+ /**
60
+ * Specifies an icon-button will be used to take any destructive action overriding the
61
+ * default color used for the icon-button type with the error color.
62
+ * @attr
63
+ */
64
+ destructive: boolean;
65
+ /**
66
+ * Disables the button, preventing interaction and indicating an inactive state.
67
+ * @attr
68
+ */
69
+ disabled: boolean;
70
+ createRenderRoot(): this;
71
+ willUpdate(changedProperties: Map<string | number | symbol, unknown>): void;
72
+ updated(changedProperties: Map<string | number | symbol, unknown>): void;
73
+ private _relayTooltipAttrs;
74
+ firstUpdated(changedProperties: Map<string | number | symbol, unknown>): void;
75
+ private _handleClick;
76
+ private _buildButtonClasses;
77
+ render(): import("lit-html").TemplateResult<1>;
78
+ }
79
+ declare global {
80
+ interface HTMLElementTagNameMap {
81
+ 'btu-icon-button': IconButton;
82
+ }
83
+ }
84
+ export {};
85
+ //# sourceMappingURL=IconButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button/IconButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAA;AAMtC,OAAO,iBAAiB,CAAA;AAExB,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,eAAe,GACf,gBAAgB,GAChB,WAAW,GACX,iBAAiB,GACjB,kBAAkB,GAClB,UAAU,GACV,gBAAgB,GAChB,iBAAiB,CAAA;AAerB,QAAA,MAAM,QAAQ;;;;;;;;;;;;;CAIJ,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,QAAQ,CAAA;;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,eAAuD;IAC7F;;;OAGG;IAEH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IAExB;;;OAGG;IAEH,IAAI,EAAE,cAAc,CAAY;IAEhC;;;OAGG;IAEH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAE9B;;;OAGG;IAEH,IAAI,EAAE,cAAc,CAAW;IAE/B;;;;OAIG;IAEH,WAAW,UAAQ;IAEnB;;;OAGG;IAEH,QAAQ,UAAQ;IAEhB,gBAAgB;IAIhB,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAc3E,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQxE,OAAO,CAAC,kBAAkB;IAqB1B,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAW7E,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,mBAAmB;IAW3B,MAAM;CAiBP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,UAAU,CAAA;KAC9B;CACF"}
@@ -0,0 +1,171 @@
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 } from 'lit';
8
+ import { property } from 'lit/decorators.js';
9
+ import { ifDefined } from 'lit/directives/if-defined.js';
10
+ import { EventEmitterMixin } from '../../util/EventEmitterMixin.js';
11
+ import { ReadyMixin } from '../../util/ReadyMixin.js';
12
+ import { TooltipMixin } from '../../util/TooltipMixin.js';
13
+ import '../icon/Icon.js';
14
+ // Tailwind content scanning requires complete class names (no template literals).
15
+ const TYPE_COLOR_CLASSES = {
16
+ primary: ['btu-button-primary'],
17
+ 'primary-clear': ['btu-button-primary', 'btu-button-fill-none'],
18
+ 'primary-stroke': ['btu-button-primary', 'btu-button-fill-none', 'btu-button-outline'],
19
+ secondary: ['btu-button-gray'],
20
+ 'secondary-clear': ['btu-button-gray', 'btu-button-fill-none'],
21
+ 'secondary-stroke': ['btu-button-gray', 'btu-button-fill-none', 'btu-button-outline'],
22
+ tertiary: ['btu-button-teal'],
23
+ 'tertiary-clear': ['btu-button-teal', 'btu-button-fill-none'],
24
+ 'tertiary-stroke': ['btu-button-teal', 'btu-button-fill-none', 'btu-button-outline'],
25
+ };
26
+ const SIZE_MAP = {
27
+ small: { buttonSize: 'sm', iconSize: 'sm' },
28
+ medium: { buttonSize: 'md', iconSize: 'md' },
29
+ large: { buttonSize: 'lg', iconSize: 'lg' },
30
+ };
31
+ /**
32
+ * Surfaces the different actions someone can perform in an interface where space is limited.
33
+ *
34
+ * Uses an icon to communicate the action and supports multiple visual types and sizes.
35
+ * Tooltip support is built-in for accessibility in compact layouts.
36
+ *
37
+ * @element btu-icon-button
38
+ *
39
+ * @fires {CustomEvent} btu-icon-button-ready - Fired after first render and initialization
40
+ * @fires {CustomEvent<{name: string | undefined}>} btu-icon-button-click - Fired when the button is clicked
41
+ *
42
+ * @example
43
+ * ```html
44
+ * <btu-icon-button icon-symbol="trash-2" tooltip="Delete" aria-label="Delete item"></btu-icon-button>
45
+ * <btu-icon-button icon-symbol="pencil" type="secondary" size="small" aria-label="Edit"></btu-icon-button>
46
+ * <btu-icon-button icon-symbol="x" type="primary" destructive aria-label="Remove"></btu-icon-button>
47
+ * ```
48
+ */
49
+ export default class IconButton extends TooltipMixin(EventEmitterMixin(ReadyMixin(LitElement))) {
50
+ constructor() {
51
+ super(...arguments);
52
+ /**
53
+ * Specifies the type of icon-button, controlling the visual style.
54
+ * @attr
55
+ */
56
+ this.type = 'primary';
57
+ /**
58
+ * Specifies the size of icon-button.
59
+ * @attr
60
+ */
61
+ this.size = 'medium';
62
+ /**
63
+ * Specifies an icon-button will be used to take any destructive action overriding the
64
+ * default color used for the icon-button type with the error color.
65
+ * @attr
66
+ */
67
+ this.destructive = false;
68
+ /**
69
+ * Disables the button, preventing interaction and indicating an inactive state.
70
+ * @attr
71
+ */
72
+ this.disabled = false;
73
+ }
74
+ createRenderRoot() {
75
+ return this;
76
+ }
77
+ willUpdate(changedProperties) {
78
+ super.willUpdate(changedProperties);
79
+ if (changedProperties.has('type') && !(this.type in TYPE_COLOR_CLASSES)) {
80
+ console.warn(`[btu-icon-button] Unrecognized type: "${this.type}". Falling back to "primary".`);
81
+ this.type = 'primary';
82
+ }
83
+ if (changedProperties.has('size') && !(this.size in SIZE_MAP)) {
84
+ console.warn(`[btu-icon-button] Unrecognized size: "${this.size}". Falling back to "medium".`);
85
+ this.size = 'medium';
86
+ }
87
+ }
88
+ updated(changedProperties) {
89
+ super.updated(changedProperties);
90
+ // TooltipMixin sets anchor-name and aria-describedby on the host,
91
+ // but they belong on the inner <button> (the visible/focusable control).
92
+ this._relayTooltipAttrs();
93
+ }
94
+ _relayTooltipAttrs() {
95
+ const button = this.querySelector('button');
96
+ if (!button)
97
+ return;
98
+ // Move anchor-name so tooltip centers on the button, not the host
99
+ const anchorName = this.style.getPropertyValue('anchor-name');
100
+ if (anchorName) {
101
+ this.style.removeProperty('anchor-name');
102
+ button.style.setProperty('anchor-name', anchorName);
103
+ }
104
+ // Move aria-describedby so screen readers announce the tooltip on focus
105
+ const tooltipEl = this.querySelector('[data-tooltip-internal]');
106
+ if (tooltipEl) {
107
+ this.removeAttribute('aria-describedby');
108
+ button.setAttribute('aria-describedby', tooltipEl.id);
109
+ }
110
+ else {
111
+ button.removeAttribute('aria-describedby');
112
+ }
113
+ }
114
+ firstUpdated(changedProperties) {
115
+ super.firstUpdated(changedProperties);
116
+ if (!this.getAttribute('aria-label')?.trim() && !this.tooltip?.trim()) {
117
+ console.warn(`[btu-icon-button] No accessible name provided. Set "aria-label" or "tooltip" for screen readers.`, this);
118
+ }
119
+ this.emit('btu-icon-button-ready');
120
+ }
121
+ _handleClick() {
122
+ this.emit('btu-icon-button-click', { name: this.name });
123
+ }
124
+ _buildButtonClasses() {
125
+ const { buttonSize } = SIZE_MAP[this.size] ?? SIZE_MAP.medium;
126
+ const typeConfig = TYPE_COLOR_CLASSES[this.type] ?? TYPE_COLOR_CLASSES.primary;
127
+ const colorClass = this.destructive ? 'btu-button-error' : typeConfig[0];
128
+ const modifiers = typeConfig.slice(1);
129
+ return ['btu-button', 'btu-button-text-hidden', colorClass, ...modifiers, `btu-button-${buttonSize}`]
130
+ .filter(Boolean)
131
+ .join(' ');
132
+ }
133
+ render() {
134
+ const { iconSize } = SIZE_MAP[this.size] ?? SIZE_MAP.medium;
135
+ const ariaLabel = this.getAttribute('aria-label')?.trim() || this.tooltip?.trim() || undefined;
136
+ return html `
137
+ <button
138
+ type="button"
139
+ class="${this._buildButtonClasses()}"
140
+ aria-label=${ifDefined(ariaLabel)}
141
+ name=${ifDefined(this.name)}
142
+ ?disabled=${this.disabled}
143
+ @click="${this._handleClick}"
144
+ >
145
+ <btu-icon symbol="${ifDefined(this.iconSymbol)}" size="${iconSize}"></btu-icon>
146
+ </button>
147
+ `;
148
+ }
149
+ }
150
+ __decorate([
151
+ property()
152
+ ], IconButton.prototype, "name", void 0);
153
+ __decorate([
154
+ property()
155
+ ], IconButton.prototype, "type", void 0);
156
+ __decorate([
157
+ property({ attribute: 'icon-symbol' })
158
+ ], IconButton.prototype, "iconSymbol", void 0);
159
+ __decorate([
160
+ property()
161
+ ], IconButton.prototype, "size", void 0);
162
+ __decorate([
163
+ property({ type: Boolean })
164
+ ], IconButton.prototype, "destructive", void 0);
165
+ __decorate([
166
+ property({ type: Boolean })
167
+ ], IconButton.prototype, "disabled", void 0);
168
+ if (!customElements.get('btu-icon-button')) {
169
+ customElements.define('btu-icon-button', IconButton);
170
+ }
171
+ //# sourceMappingURL=IconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.js","sourceRoot":"","sources":["../../../src/components/icon-button/IconButton.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
2
  import '../circular-progress/CircularProgress.js';
3
- import '../icon/Icon.js';
4
3
  declare const Pagination_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
5
4
  /**
6
5
  * A pagination component for navigating through paged content.
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAA;AAK/C,OAAO,0CAA0C,CAAA;AACjD,OAAO,iBAAiB,CAAA;;AAExB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,eAAyC;IAC/E;;;OAGG;IAEH,IAAI,SAAI;IAER;;;OAGG;IAEH,QAAQ,SAAI;IAEZ;;;OAGG;IAEH,QAAQ,UAAQ;IAEhB;;;OAGG;IAEH,OAAO,UAAQ;IAEf;;;OAGG;IAEH,gBAAgB,UAAO;IAEvB;;;OAGG;IAEH,eAAe,UAAO;IAEtB;;;OAGG;IAEH,eAAe,SAAe;IAE9B;;;OAGG;IAEH,UAAU,SAAI;IAEd;;;OAGG;IAEH,eAAe,UAAO;IAEtB;;;OAGG;IAEH,cAAc,UAAQ;IAEtB;;;OAGG;IAEH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAEzB,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAQ;IAE9B,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAe;IAErC,gBAAgB;IAChB,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,KAAK,sBAAsB,GAMjC;IAED,OAAO,KAAK,WAAW,GAGtB;IAED,OAAO,KAAK,UAAU,GAGrB;IAED,OAAO,KAAK,QAAQ,GAGnB;IAED,iBAAiB,IAAI,IAAI;IAOzB,gBAAgB;IAIhB,UAAU,IAAI,IAAI;IAmClB,YAAY,IAAI,IAAI;IAIpB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAe5C,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB;IAezB,MAAM;CAkFP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,UAAU,CAAA;KAC7B;CACF"}
1
+ {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAA;AAK/C,OAAO,0CAA0C,CAAA;;AAGjD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,eAAyC;IAC/E;;;OAGG;IAEH,IAAI,SAAI;IAER;;;OAGG;IAEH,QAAQ,SAAI;IAEZ;;;OAGG;IAEH,QAAQ,UAAQ;IAEhB;;;OAGG;IAEH,OAAO,UAAQ;IAEf;;;OAGG;IAEH,gBAAgB,UAAO;IAEvB;;;OAGG;IAEH,eAAe,UAAO;IAEtB;;;OAGG;IAEH,eAAe,SAAe;IAE9B;;;OAGG;IAEH,UAAU,SAAI;IAEd;;;OAGG;IAEH,eAAe,UAAO;IAEtB;;;OAGG;IAEH,cAAc,UAAQ;IAEtB;;;OAGG;IAEH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAEzB,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAQ;IAE9B,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAe;IAErC,gBAAgB;IAChB,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,KAAK,sBAAsB,GAMjC;IAED,OAAO,KAAK,WAAW,GAGtB;IAED,OAAO,KAAK,UAAU,GAGrB;IAED,OAAO,KAAK,QAAQ,GAGnB;IAED,iBAAiB,IAAI,IAAI;IAOzB,gBAAgB;IAIhB,UAAU,IAAI,IAAI;IAmClB,YAAY,IAAI,IAAI;IAIpB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAe5C,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB;IAezB,MAAM;CAkFP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,UAAU,CAAA;KAC7B;CACF"}