@brightspot/ui 1.6.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.
- 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/custom-elements.json +1097 -101
- package/dist/storybook/assets/Avatar.stories-BAaSlDF7.js +213 -0
- package/dist/storybook/assets/{AvatarGroup.stories-BBkQuFKk.js → AvatarGroup.stories-CgoDB4N4.js} +1 -1
- package/dist/storybook/assets/{Badge.stories-mFZsls7i.js → Badge.stories-uexxdmo6.js} +3 -3
- package/dist/storybook/assets/{Button.stories-CAWX17L1.js → Button.stories-T9UJUPHI.js} +1 -1
- package/dist/storybook/assets/{CircularProgress.stories-DBVt4Cg2.js → CircularProgress.stories-DW-VJA5j.js} +6 -6
- package/dist/storybook/assets/{ClipboardMixin.stories-BH9E-OI6.js → ClipboardMixin.stories-DzU4vxu5.js} +1 -1
- package/dist/storybook/assets/{Color-6BZIO3FS-CVnTzq2p.js → Color-6BZIO3FS-DRk2xjoN.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-BFYmP0LL.js → Colors.stories-_UPdvuhY.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin-Cu7YXkU8.js → ComponentStatesMixin-BIu5SKeV.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin.stories-CAvyYt0H.js → ComponentStatesMixin.stories-C0FLaqLu.js} +1 -1
- package/dist/storybook/assets/{CopyToClipboard.stories-DbJZsp_L.js → CopyToClipboard.stories-D31zoUVI.js} +1 -1
- package/dist/storybook/assets/{Debounce.stories-BiFiH1K9.js → Debounce.stories-CgPPl5Ee.js} +1 -1
- package/dist/storybook/assets/{DocsRenderer-LL677BLK-Bq6G4eeC.js → DocsRenderer-LL677BLK-iwiwOzX9.js} +6 -6
- package/dist/storybook/assets/Dropdown.stories-CDcl6rmG.js +697 -0
- package/dist/storybook/assets/{Events.stories-BsDBxh8_.js → Events.stories-DS6UC9dZ.js} +1 -1
- package/dist/storybook/assets/{Heading.stories-zGzWgHVO.js → Heading.stories-CAQfEGE2.js} +1 -1
- package/dist/storybook/assets/{Icon.stories-B4T6sSwf.js → Icon.stories-C7msWlHs.js} +11 -11
- package/dist/storybook/assets/{LinearProgress.stories-qzqmUUwY.js → LinearProgress.stories-DBGJ5a2-.js} +7 -7
- package/dist/storybook/assets/{Pagination.stories-B6Q-7taJ.js → Pagination.stories-C58bGOdf.js} +1 -1
- package/dist/storybook/assets/{Popover.stories-CGkU0SGv.js → Popover.stories-C9zU0sEX.js} +5 -5
- package/dist/storybook/assets/{ReadyMixin-3YCzoG6W.js → ReadyMixin-qf8SAjMu.js} +1 -1
- package/dist/storybook/assets/{Rtc.stories-Y1MYTWAt.js → Rtc.stories-k9tKHNhD.js} +1 -1
- package/dist/storybook/assets/{ScrollShadow.stories-B9kSpLT1.js → ScrollShadow.stories-Bp42zyLH.js} +1 -1
- package/dist/storybook/assets/{Throttle.stories-BgvLDrS3.js → Throttle.stories-B5YU-Nms.js} +1 -1
- package/dist/storybook/assets/Tooltip.stories-COQcvOnL.js +143 -0
- package/dist/storybook/assets/{Widget.stories--JpqVyJe.js → Widget.stories-D3Sq5-_A.js} +13 -13
- package/dist/storybook/assets/{WithTooltip-65CFNBJE-DNbD9hAX.js → WithTooltip-65CFNBJE-Cox81aM_.js} +1 -1
- package/dist/storybook/assets/{formatter-EIJCOSYU-Cy8KIxab.js → formatter-EIJCOSYU-3ErcoV9q.js} +1 -1
- package/dist/storybook/assets/if-defined-Bv2_qPJg.js +1 -0
- package/dist/storybook/assets/{iframe-Dz6CxatW.js → iframe-CM6gBkqA.js} +152 -152
- package/dist/storybook/assets/{iframe-DiT9Iz2T.css → iframe-D3r2Ciu8.css} +1 -1
- package/dist/storybook/assets/{index-CebChkmF.js → index-iwfnMgqg.js} +1 -1
- package/dist/storybook/assets/{onFind.stories-nHDImx0x.js → onFind.stories-CDtoTN6S.js} +1 -1
- package/dist/storybook/assets/{onRemove.stories-CBxYVPwd.js → onRemove.stories-CSTeFCLU.js} +1 -1
- package/dist/storybook/assets/{onVisible.stories-D4Qewc9Y.js → onVisible.stories-C-yiw9n4.js} +1 -1
- package/dist/storybook/assets/{style-map-BgW9piaW.js → style-map-BJGdSb_D.js} +1 -1
- package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CROW1475.js → syntaxhighlighter-ED5Y7EFY-BEudYlVi.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/util/EventEmitterMixin.d.ts +13 -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/LinearProgress.md +40 -0
- package/docs/components/Pagination.md +95 -0
- package/docs/components/Popover.md +71 -0
- package/docs/components/README.md +24 -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
|
@@ -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"}
|