@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.
- package/dist/components/dropdown/Dropdown.d.ts +172 -0
- package/dist/components/dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/dropdown/Dropdown.js +407 -0
- package/dist/components/dropdown/Dropdown.js.map +1 -0
- package/dist/components/dropdown/DropdownItem.d.ts +108 -0
- package/dist/components/dropdown/DropdownItem.d.ts.map +1 -0
- package/dist/components/dropdown/DropdownItem.js +210 -0
- package/dist/components/dropdown/DropdownItem.js.map +1 -0
- package/dist/components/dropdown/DropdownMenu.d.ts +117 -0
- package/dist/components/dropdown/DropdownMenu.d.ts.map +1 -0
- package/dist/components/dropdown/DropdownMenu.js +295 -0
- package/dist/components/dropdown/DropdownMenu.js.map +1 -0
- package/dist/components/icon-button/IconButton.d.ts +85 -0
- package/dist/components/icon-button/IconButton.d.ts.map +1 -0
- package/dist/components/icon-button/IconButton.js +171 -0
- package/dist/components/icon-button/IconButton.js.map +1 -0
- package/dist/components/pagination/Pagination.d.ts +0 -1
- package/dist/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.js +22 -22
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/custom-elements.json +1212 -1
- package/dist/storybook/assets/Avatar.stories-XfJUoW42.js +213 -0
- package/dist/storybook/assets/{AvatarGroup.stories-BBkQuFKk.js → AvatarGroup.stories-CPkv0mVI.js} +1 -1
- package/dist/storybook/assets/{Badge.stories-mFZsls7i.js → Badge.stories-Z42hQyzK.js} +3 -3
- package/dist/storybook/assets/{Button.stories-CAWX17L1.js → Button.stories-DTcnCrp-.js} +1 -1
- package/dist/storybook/assets/{CircularProgress.stories-DBVt4Cg2.js → CircularProgress.stories-B59nHh_k.js} +6 -6
- package/dist/storybook/assets/{ClipboardMixin.stories-BH9E-OI6.js → ClipboardMixin.stories-C6DraZ93.js} +1 -1
- package/dist/storybook/assets/{Color-6BZIO3FS-CVnTzq2p.js → Color-6BZIO3FS-BuNGIaf5.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-BFYmP0LL.js → Colors.stories-B3Capc8F.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin-Cu7YXkU8.js → ComponentStatesMixin-DRalOmcW.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin.stories-CAvyYt0H.js → ComponentStatesMixin.stories-TKD7YrVe.js} +1 -1
- package/dist/storybook/assets/{CopyToClipboard.stories-DbJZsp_L.js → CopyToClipboard.stories-Bv8jZ7TL.js} +1 -1
- package/dist/storybook/assets/{Debounce.stories-BiFiH1K9.js → Debounce.stories-CLwXI3OZ.js} +1 -1
- package/dist/storybook/assets/{DocsRenderer-LL677BLK-Bq6G4eeC.js → DocsRenderer-LL677BLK-DjMDalQg.js} +6 -6
- package/dist/storybook/assets/Dropdown.stories-D7X0Dbnt.js +697 -0
- package/dist/storybook/assets/{Events.stories-BsDBxh8_.js → Events.stories-Dgn1N8jT.js} +1 -1
- package/dist/storybook/assets/{Heading.stories-zGzWgHVO.js → Heading.stories-BcciQ3Ug.js} +1 -1
- package/dist/storybook/assets/{Icon.stories-B4T6sSwf.js → Icon.stories-BWqJoZUM.js} +11 -11
- package/dist/storybook/assets/IconButton.stories-BrMDAi9q.js +748 -0
- package/dist/storybook/assets/{LinearProgress.stories-qzqmUUwY.js → LinearProgress.stories-INijWBr_.js} +7 -7
- package/dist/storybook/assets/LucideDynamicLoader-jmdq8YDM.js +1 -0
- package/dist/storybook/assets/{Pagination.stories-B6Q-7taJ.js → Pagination.stories-CrExaWpC.js} +1 -1
- package/dist/storybook/assets/{Popover.stories-CGkU0SGv.js → Popover.stories-Bh6IUPG_.js} +5 -5
- package/dist/storybook/assets/{ReadyMixin-3YCzoG6W.js → ReadyMixin-C1lZU7vt.js} +1 -1
- package/dist/storybook/assets/{Rtc.stories-Y1MYTWAt.js → Rtc.stories-BHqFwgR7.js} +1 -1
- package/dist/storybook/assets/{ScrollShadow.stories-B9kSpLT1.js → ScrollShadow.stories-DnIj5cZF.js} +1 -1
- package/dist/storybook/assets/{Throttle.stories-BgvLDrS3.js → Throttle.stories-Dilsv90H.js} +1 -1
- package/dist/storybook/assets/Tooltip.stories-Dnb76OXa.js +143 -0
- package/dist/storybook/assets/{Widget.stories--JpqVyJe.js → Widget.stories-Cl-3dv15.js} +13 -13
- package/dist/storybook/assets/{WithTooltip-65CFNBJE-DNbD9hAX.js → WithTooltip-65CFNBJE-Bq21jhKM.js} +1 -1
- package/dist/storybook/assets/{formatter-EIJCOSYU-Cy8KIxab.js → formatter-EIJCOSYU-CwrejIu0.js} +1 -1
- package/dist/storybook/assets/if-defined-D1UQmdjo.js +1 -0
- package/dist/storybook/assets/iframe-CNxIA3cQ.css +1 -0
- package/dist/storybook/assets/{iframe-Dz6CxatW.js → iframe-CsKt54V3.js} +154 -154
- package/dist/storybook/assets/{index-CebChkmF.js → index-DQ0xe06s.js} +1 -1
- package/dist/storybook/assets/{onFind.stories-nHDImx0x.js → onFind.stories-CGeGoVR6.js} +1 -1
- package/dist/storybook/assets/{onRemove.stories-CBxYVPwd.js → onRemove.stories-DXOwfv14.js} +1 -1
- package/dist/storybook/assets/{onVisible.stories-D4Qewc9Y.js → onVisible.stories-DNzXceKW.js} +1 -1
- package/dist/storybook/assets/{style-map-BgW9piaW.js → style-map-kcS06w9f.js} +1 -1
- package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CROW1475.js → syntaxhighlighter-ED5Y7EFY-BnpaJz4a.js} +1 -1
- 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-button.js +10 -0
- package/dist/tailwind-plugin-button.js.map +1 -1
- package/dist/tailwind-plugin-button.ts +10 -0
- package/dist/tailwind-plugin-dropdown.d.ts +2 -0
- package/dist/tailwind-plugin-dropdown.d.ts.map +1 -0
- package/dist/tailwind-plugin-dropdown.js +223 -0
- package/dist/tailwind-plugin-dropdown.js.map +1 -0
- package/dist/tailwind-plugin-dropdown.ts +249 -0
- package/dist/tailwind-plugin-pagination.js +9 -21
- package/dist/tailwind-plugin-pagination.js.map +1 -1
- package/dist/tailwind-plugin-pagination.ts +10 -21
- package/dist/util/EventEmitterMixin.d.ts +17 -0
- package/dist/util/EventEmitterMixin.d.ts.map +1 -1
- package/dist/util/EventEmitterMixin.js.map +1 -1
- package/docs/components/Avatar.md +62 -0
- package/docs/components/AvatarGroup.md +52 -0
- package/docs/components/Badge.md +58 -0
- package/docs/components/CircularProgress.md +55 -0
- package/docs/components/CopyToClipboard.md +54 -0
- package/docs/components/Dropdown.md +100 -0
- package/docs/components/DropdownItem.md +64 -0
- package/docs/components/DropdownMenu.md +81 -0
- package/docs/components/Icon.md +61 -0
- package/docs/components/IconButton.md +63 -0
- package/docs/components/LinearProgress.md +40 -0
- package/docs/components/Pagination.md +95 -0
- package/docs/components/Popover.md +71 -0
- package/docs/components/README.md +25 -0
- package/docs/components/Widget.md +79 -0
- package/package.json +3 -2
- package/dist/storybook/assets/Avatar.stories-CafEcy4T.js +0 -214
- package/dist/storybook/assets/Tooltip.stories-POo1M-ew.js +0 -143
- package/dist/storybook/assets/if-defined-CngSGyRu.js +0 -1
- 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":";;;;;;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;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAAnF;;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,eAAU,GAAW,EAAE,CAAA;QAEvB;;;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;QAiGtE,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,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;YAE1D,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;oBAC5D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;oBAC/B,MAAK;gBACP,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;oBAC7D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;oBAC/B,MAAK;gBACP,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC5B,MAAK;gBACP,CAAC;gBACD,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;oBAC/C,MAAK;gBACP,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,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,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;IA4CH,CAAC;IAvMC,gBAAgB;QACd,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,CAAA;QACnD,OAAO,IAAI,CAAA;IACb,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,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,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,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC3C,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACpB,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,8CAA8C,CAAuB,CAAA;YAChG,IAAI,EAAE;gBAAE,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,8CAA8C,CAAuB,CAAA;QACvG,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YACpC,MAAM,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC;IACH,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;IAgED,0CAA0C;IAClC,qBAAqB,CAAC,SAAyB;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAA;QACrC,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,sEAAsE;IAC9D,cAAc,CAAC,SAAyB,EAAE,OAAe,EAAE,SAAiB;QAClF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAA;QAC5B,IAAI,OAAO,GAAG,CAAC;YAAE,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QAC9C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,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;AAhQC;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,SAAS,EAAE,aAAa,EAAE,CAAC;gDAC9B;AAOvB;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;AAiN7C,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,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
|
|
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"}
|