@brightspot/ui 1.10.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/action-bar/ActionBar.d.ts +163 -0
- package/dist/components/action-bar/ActionBar.d.ts.map +1 -0
- package/dist/components/action-bar/ActionBar.js +479 -0
- package/dist/components/action-bar/ActionBar.js.map +1 -0
- package/dist/components/action-bar/ActionItem.d.ts +103 -0
- package/dist/components/action-bar/ActionItem.d.ts.map +1 -0
- package/dist/components/action-bar/ActionItem.js +237 -0
- package/dist/components/action-bar/ActionItem.js.map +1 -0
- package/dist/components/avatar/AvatarGroup.d.ts +3 -0
- package/dist/components/avatar/AvatarGroup.d.ts.map +1 -1
- package/dist/components/avatar/AvatarGroup.js +3 -0
- package/dist/components/avatar/AvatarGroup.js.map +1 -1
- package/dist/components/badge/Badge.d.ts +3 -1
- package/dist/components/badge/Badge.d.ts.map +1 -1
- package/dist/components/badge/Badge.js +2 -0
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/button-group/ButtonGroup.d.ts +138 -0
- package/dist/components/button-group/ButtonGroup.d.ts.map +1 -0
- package/dist/components/button-group/ButtonGroup.js +436 -0
- package/dist/components/button-group/ButtonGroup.js.map +1 -0
- package/dist/components/checkbox/Checkbox.d.ts +107 -0
- package/dist/components/checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/Checkbox.js +224 -0
- package/dist/components/checkbox/Checkbox.js.map +1 -0
- package/dist/components/circular-progress/CircularProgress.d.ts +2 -2
- package/dist/components/circular-progress/CircularProgress.js +2 -2
- package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts +7 -2
- package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts.map +1 -1
- package/dist/components/copy-to-clipboard/CopyToClipboard.js +10 -5
- package/dist/components/copy-to-clipboard/CopyToClipboard.js.map +1 -1
- package/dist/components/dropdown/Dropdown.d.ts +8 -6
- package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
- package/dist/components/dropdown/Dropdown.js +33 -22
- package/dist/components/dropdown/Dropdown.js.map +1 -1
- package/dist/components/dropdown/DropdownItem.d.ts +28 -7
- package/dist/components/dropdown/DropdownItem.d.ts.map +1 -1
- package/dist/components/dropdown/DropdownItem.js +41 -16
- package/dist/components/dropdown/DropdownItem.js.map +1 -1
- package/dist/components/dropdown/DropdownMenu.d.ts +6 -8
- package/dist/components/dropdown/DropdownMenu.d.ts.map +1 -1
- package/dist/components/dropdown/DropdownMenu.js +22 -37
- package/dist/components/dropdown/DropdownMenu.js.map +1 -1
- package/dist/components/empty-state/EmptyState.css +4 -0
- package/dist/components/empty-state/EmptyState.d.ts +103 -0
- package/dist/components/empty-state/EmptyState.d.ts.map +1 -0
- package/dist/components/empty-state/EmptyState.js +209 -0
- package/dist/components/empty-state/EmptyState.js.map +1 -0
- package/dist/components/icon/Icon.d.ts +23 -10
- package/dist/components/icon/Icon.d.ts.map +1 -1
- package/dist/components/icon/Icon.js +40 -9
- package/dist/components/icon/Icon.js.map +1 -1
- package/dist/components/icon-button/IconButton.d.ts +7 -21
- package/dist/components/icon-button/IconButton.d.ts.map +1 -1
- package/dist/components/icon-button/IconButton.js +12 -18
- package/dist/components/icon-button/IconButton.js.map +1 -1
- package/dist/components/linear-progress/LinearProgress.d.ts +2 -2
- package/dist/components/linear-progress/LinearProgress.js +2 -2
- package/dist/components/pagination/Pagination.d.ts +33 -4
- package/dist/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.js +88 -24
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/popover/Popover.d.ts +6 -0
- package/dist/components/popover/Popover.d.ts.map +1 -1
- package/dist/components/popover/Popover.js +6 -0
- package/dist/components/popover/Popover.js.map +1 -1
- package/dist/components/switch/Switch.d.ts +5 -1
- package/dist/components/switch/Switch.d.ts.map +1 -1
- package/dist/components/switch/Switch.js +10 -6
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/tabs/Tab.d.ts +108 -0
- package/dist/components/tabs/Tab.d.ts.map +1 -0
- package/dist/components/tabs/Tab.js +152 -0
- package/dist/components/tabs/Tab.js.map +1 -0
- package/dist/components/tabs/Tabs.d.ts +126 -0
- package/dist/components/tabs/Tabs.d.ts.map +1 -0
- package/dist/components/tabs/Tabs.js +390 -0
- package/dist/components/tabs/Tabs.js.map +1 -0
- package/dist/components/upload/Upload.d.ts +157 -0
- package/dist/components/upload/Upload.d.ts.map +1 -0
- package/dist/components/upload/Upload.js +538 -0
- package/dist/components/upload/Upload.js.map +1 -0
- package/dist/components/upload/UploadItem.d.ts +73 -0
- package/dist/components/upload/UploadItem.d.ts.map +1 -0
- package/dist/components/upload/UploadItem.js +180 -0
- package/dist/components/upload/UploadItem.js.map +1 -0
- package/dist/components/widget/Widget.d.ts +1 -6
- package/dist/components/widget/Widget.d.ts.map +1 -1
- package/dist/components/widget/Widget.js +1 -6
- package/dist/components/widget/Widget.js.map +1 -1
- package/dist/custom-elements.json +8445 -1989
- package/dist/storybook/assets/ActionBar.stories-DRIVI-W2.js +408 -0
- package/dist/storybook/assets/ActionItem.stories-5qlgxYNB.js +203 -0
- package/dist/storybook/assets/{Avatar.stories-B26mRkkZ.js → Avatar.stories-B3VkhRhP.js} +2 -2
- package/dist/storybook/assets/{AvatarGroup.stories-J7lVGsMY.js → AvatarGroup.stories-DOfim2NY.js} +5 -5
- package/dist/storybook/assets/{Badge.stories-BpTIV61M.js → Badge.stories-B04VNAcc.js} +2 -2
- package/dist/storybook/assets/{Button-Dg-fIrzT.js → Button-CILTcGRT.js} +1 -1
- package/dist/storybook/assets/{Button.stories-gPKRVbxk.js → Button.stories-CzWAltrX.js} +1 -1
- package/dist/storybook/assets/ButtonGroup.stories-1uAJf79o.js +588 -0
- package/dist/storybook/assets/{Celebrate.stories-DbY-sKEe.js → Celebrate.stories-BEqj0VnW.js} +7 -7
- package/dist/storybook/assets/Checkbox.stories-DXAGFS0M.js +141 -0
- package/dist/storybook/assets/{CircularProgress.stories-DeH5JYX_.js → CircularProgress.stories-D4rftw22.js} +7 -7
- package/dist/storybook/assets/{ClipboardMixin.stories-C-lZ4uuw.js → ClipboardMixin.stories-z2n2HWt1.js} +31 -28
- package/dist/storybook/assets/{Color-6BZIO3FS-Cu6zVIuG.js → Color-6BZIO3FS-C6KyMgZz.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-D6XYMrTD.js → Colors.stories-CX-Ny3B_.js} +1 -1
- package/dist/storybook/assets/{CombinedEffects.stories-jFekKTYg.js → CombinedEffects.stories-BkqtiVHp.js} +33 -33
- package/dist/storybook/assets/{ComponentStatesMixin-g50hRCPT.js → ComponentStatesMixin-DLd0feFg.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin.stories-D3Q5pR38.js → ComponentStatesMixin.stories-D6Yc5Jgl.js} +3 -3
- package/dist/storybook/assets/{CopyToClipboard.stories-COZZ1VC2.js → CopyToClipboard.stories-B-omwDDJ.js} +16 -16
- package/dist/storybook/assets/{Debounce.stories-Dl10LAnx.js → Debounce.stories-B2vE5QIx.js} +9 -9
- package/dist/storybook/assets/{DocsRenderer-LL677BLK-CFLtMbUx.js → DocsRenderer-LL677BLK-DNUlRvMg.js} +3 -3
- package/dist/storybook/assets/{Dropdown.stories-Drwq-0Z2.js → Dropdown.stories-_bx4WDLr.js} +95 -68
- package/dist/storybook/assets/EmptyState.stories-CGMbmo77.js +318 -0
- package/dist/storybook/assets/{Events.stories-dODeR-g-.js → Events.stories-CkQYKcoZ.js} +1 -1
- package/dist/storybook/assets/{Heading.stories-CH7_-_q3.js → Heading.stories-BU5Do_od.js} +1 -1
- package/dist/storybook/assets/{HueRipple.stories-CH1Y739k.js → HueRipple.stories-Di2zmxo3.js} +11 -11
- package/dist/storybook/assets/Icon.stories-Dk4ZXhhJ.js +441 -0
- package/dist/storybook/assets/{IconButton.stories-DuzqvcnN.js → IconButton.stories-BSCiXPXa.js} +126 -146
- package/dist/storybook/assets/{LinearProgress.stories-C7IdnJd3.js → LinearProgress.stories-BGxPZuni.js} +7 -7
- package/dist/storybook/assets/Pagination.stories-z3Zq8b4f.js +252 -0
- package/dist/storybook/assets/{Popover.stories-Ca1F-wrI.js → Popover.stories-C9GxWcax.js} +33 -62
- package/dist/storybook/assets/ReadyMixin-CQw8N6P9.js +1 -0
- package/dist/storybook/assets/RovingTabindexMixin.stories-ByxLBi6m.js +192 -0
- package/dist/storybook/assets/{Rtc.stories-BVJc1vCA.js → Rtc.stories-DQJlCXWR.js} +3 -3
- package/dist/storybook/assets/ScrollShadow.stories-gjTIAbUA.js +17 -0
- package/dist/storybook/assets/{Switch.stories-BEEHP8mD.js → Switch.stories-BEeqPZiP.js} +21 -21
- package/dist/storybook/assets/Tab.stories-DpB3I-WZ.js +218 -0
- package/dist/storybook/assets/Tabs.stories-C6mG6Xi7.js +211 -0
- package/dist/storybook/assets/{Throttle.stories-C4xsYeAb.js → Throttle.stories-x9tpGeQh.js} +10 -10
- package/dist/storybook/assets/{Tooltip.stories-Ccm4AnSv.js → Tooltip.stories-CqcLqdmc.js} +2 -2
- package/dist/storybook/assets/Upload.stories-CMaAbCSH.js +447 -0
- package/dist/storybook/assets/UploadItem.stories-GB98L3JQ.js +167 -0
- package/dist/storybook/assets/{Welcome.stories-Degjk-M0.js → Welcome.stories-6h9cUZ7v.js} +1 -1
- package/dist/storybook/assets/{Widget.stories-OKnZ9sDs.js → Widget.stories-DiA1PR6Y.js} +13 -13
- package/dist/storybook/assets/{WithTooltip-65CFNBJE-CXL3TyJ2.js → WithTooltip-65CFNBJE-DTsHhBb_.js} +2 -2
- package/dist/storybook/assets/{blocks-DLdUKG_W.js → blocks-IXdn9TGW.js} +5 -5
- package/dist/storybook/assets/{formatter-EIJCOSYU-29NCxjfM.js → formatter-EIJCOSYU-Cum4J6N4.js} +1 -1
- package/dist/storybook/assets/if-defined-CgfCxQoV.js +1 -0
- package/dist/storybook/assets/iframe-BgFj0b5u.css +1 -0
- package/dist/storybook/assets/{iframe-BqvwP3or.js → iframe-Sf9RHZFu.js} +200 -200
- package/dist/storybook/assets/{index-BIyTv1BF.js → index-D605PvQH.js} +1 -1
- package/dist/storybook/assets/onFind-C41m8c_a.js +1 -0
- package/dist/storybook/assets/{onFind.stories-D64-QZqf.js → onFind.stories-MOTfGlJd.js} +53 -77
- package/dist/storybook/assets/{onRemove.stories-BICsnIJL.js → onRemove.stories-DX58Bf6f.js} +6 -10
- package/dist/storybook/assets/{onVisible.stories-DpDZP9_5.js → onVisible.stories-NNFeFeD8.js} +3 -3
- package/dist/storybook/assets/style-map-B99QiqCo.js +1 -0
- package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-Bz_DuQj8.js → syntaxhighlighter-ED5Y7EFY-BqQ-o9mS.js} +1 -1
- package/dist/storybook/box-illustration.svg +51 -0
- package/dist/storybook/cloud-illustration.svg +49 -0
- package/dist/storybook/docs-illustration.svg +92 -0
- package/dist/storybook/iframe.html +2 -2
- package/dist/storybook/index.json +1 -1
- package/dist/storybook/project.json +1 -1
- package/dist/tailwind-plugin-action-bar.d.ts +2 -0
- package/dist/tailwind-plugin-action-bar.d.ts.map +1 -0
- package/dist/tailwind-plugin-action-bar.js +120 -0
- package/dist/tailwind-plugin-action-bar.js.map +1 -0
- package/dist/tailwind-plugin-action-bar.ts +134 -0
- package/dist/tailwind-plugin-badge.js +5 -6
- package/dist/tailwind-plugin-badge.js.map +1 -1
- package/dist/tailwind-plugin-badge.ts +5 -6
- package/dist/tailwind-plugin-button-group.d.ts +2 -0
- package/dist/tailwind-plugin-button-group.d.ts.map +1 -0
- package/dist/tailwind-plugin-button-group.js +215 -0
- package/dist/tailwind-plugin-button-group.js.map +1 -0
- package/dist/tailwind-plugin-button-group.ts +238 -0
- package/dist/tailwind-plugin-button.js +2 -1
- package/dist/tailwind-plugin-button.js.map +1 -1
- package/dist/tailwind-plugin-button.ts +2 -1
- package/dist/tailwind-plugin-checkbox.d.ts +2 -0
- package/dist/tailwind-plugin-checkbox.d.ts.map +1 -0
- package/dist/tailwind-plugin-checkbox.js +246 -0
- package/dist/tailwind-plugin-checkbox.js.map +1 -0
- package/dist/tailwind-plugin-checkbox.ts +281 -0
- package/dist/tailwind-plugin-empty-state.d.ts +2 -0
- package/dist/tailwind-plugin-empty-state.d.ts.map +1 -0
- package/dist/tailwind-plugin-empty-state.js +113 -0
- package/dist/tailwind-plugin-empty-state.js.map +1 -0
- package/dist/tailwind-plugin-empty-state.ts +124 -0
- package/dist/tailwind-plugin-icon.js +122 -18
- package/dist/tailwind-plugin-icon.js.map +1 -1
- package/dist/tailwind-plugin-icon.ts +131 -18
- package/dist/tailwind-plugin-loader.js +3 -3
- package/dist/tailwind-plugin-loader.ts +3 -3
- package/dist/tailwind-plugin-pagination.js +13 -23
- package/dist/tailwind-plugin-pagination.js.map +1 -1
- package/dist/tailwind-plugin-pagination.ts +15 -25
- package/dist/tailwind-plugin-tabs.d.ts +2 -0
- package/dist/tailwind-plugin-tabs.d.ts.map +1 -0
- package/dist/tailwind-plugin-tabs.js +158 -0
- package/dist/tailwind-plugin-tabs.js.map +1 -0
- package/dist/tailwind-plugin-tabs.ts +169 -0
- package/dist/tailwind-plugin-upload.d.ts +2 -0
- package/dist/tailwind-plugin-upload.d.ts.map +1 -0
- package/dist/tailwind-plugin-upload.js +322 -0
- package/dist/tailwind-plugin-upload.js.map +1 -0
- package/dist/tailwind-plugin-upload.ts +362 -0
- package/dist/tailwind.config.d.ts.map +1 -1
- package/dist/tailwind.config.js +1 -0
- package/dist/tailwind.config.js.map +1 -1
- package/dist/tailwind.config.ts +1 -0
- package/dist/util/ClipboardMixin.d.ts +7 -2
- package/dist/util/ClipboardMixin.d.ts.map +1 -1
- package/dist/util/ClipboardMixin.js +15 -13
- package/dist/util/ClipboardMixin.js.map +1 -1
- package/dist/util/ComponentStatesMixin.d.ts +2 -1
- package/dist/util/ComponentStatesMixin.d.ts.map +1 -1
- package/dist/util/ComponentStatesMixin.js +4 -0
- package/dist/util/ComponentStatesMixin.js.map +1 -1
- package/dist/util/EventEmitterMixin.d.ts +58 -4
- package/dist/util/EventEmitterMixin.d.ts.map +1 -1
- package/dist/util/EventEmitterMixin.js +5 -2
- package/dist/util/EventEmitterMixin.js.map +1 -1
- package/dist/util/ProgressMixin.d.ts +9 -2
- package/dist/util/ProgressMixin.d.ts.map +1 -1
- package/dist/util/ProgressMixin.js +22 -18
- package/dist/util/ProgressMixin.js.map +1 -1
- package/dist/util/RovingTabindexMixin.d.ts +46 -0
- package/dist/util/RovingTabindexMixin.d.ts.map +1 -0
- package/dist/util/RovingTabindexMixin.js +83 -0
- package/dist/util/RovingTabindexMixin.js.map +1 -0
- package/dist/util/TetherLayout.d.ts.map +1 -1
- package/dist/util/TetherLayout.js +3 -0
- package/dist/util/TetherLayout.js.map +1 -1
- package/dist/util/TooltipMixin.d.ts.map +1 -1
- package/dist/util/TooltipMixin.js +5 -4
- package/dist/util/TooltipMixin.js.map +1 -1
- package/dist/util/upload.d.ts +53 -0
- package/dist/util/upload.d.ts.map +1 -0
- package/dist/util/upload.js +113 -0
- package/dist/util/upload.js.map +1 -0
- package/docs/components/ActionBar.md +77 -0
- package/docs/components/ActionItem.md +101 -0
- package/docs/components/Avatar.md +42 -12
- package/docs/components/AvatarGroup.md +4 -3
- package/docs/components/Badge.md +13 -1
- package/docs/components/ButtonGroup.md +91 -0
- package/docs/components/Checkbox.md +91 -0
- package/docs/components/CircularProgress.md +41 -12
- package/docs/components/CopyToClipboard.md +13 -11
- package/docs/components/Dropdown.md +51 -26
- package/docs/components/DropdownItem.md +44 -27
- package/docs/components/DropdownMenu.md +14 -14
- package/docs/components/EmptyState.md +75 -0
- package/docs/components/Icon.md +22 -14
- package/docs/components/IconButton.md +46 -21
- package/docs/components/LinearProgress.md +43 -4
- package/docs/components/Pagination.md +38 -34
- package/docs/components/Popover.md +16 -0
- package/docs/components/README.md +9 -0
- package/docs/components/Switch.md +21 -16
- package/docs/components/Tab.md +79 -0
- package/docs/components/Tabs.md +85 -0
- package/docs/components/Upload.md +112 -0
- package/docs/components/UploadItem.md +61 -0
- package/docs/components/Widget.md +12 -6
- package/package.json +4 -2
- package/dist/storybook/assets/Icon.stories-CPjM-jTU.js +0 -264
- package/dist/storybook/assets/Pagination.stories-C4cLjS_9.js +0 -272
- package/dist/storybook/assets/ReadyMixin-DNZ5dCsZ.js +0 -1
- package/dist/storybook/assets/ScrollShadow.stories-C3W5o9ZW.js +0 -17
- package/dist/storybook/assets/if-defined-BZFPaJjl.js +0 -1
- package/dist/storybook/assets/iframe-C5bIZMJ5.css +0 -1
- package/dist/storybook/assets/onFind-1l3EPW-I.js +0 -1
- package/dist/storybook/assets/style-map-CBrSnxRe.js +0 -1
|
@@ -0,0 +1,209 @@
|
|
|
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 { EventEmitterMixin } from '../../util/EventEmitterMixin.js';
|
|
10
|
+
import onFind from '../../util/onFind.js';
|
|
11
|
+
import { ReadyMixin } from '../../util/ReadyMixin.js';
|
|
12
|
+
import '../button-group/ButtonGroup.js';
|
|
13
|
+
import './EmptyState.css';
|
|
14
|
+
const HEADING_LEVEL_BY_SIZE = {
|
|
15
|
+
sm: 5,
|
|
16
|
+
md: 4,
|
|
17
|
+
lg: 3,
|
|
18
|
+
};
|
|
19
|
+
const ICON_SIZE_BY_EMPTY_STATE_SIZE = {
|
|
20
|
+
sm: 'md',
|
|
21
|
+
md: 'lg',
|
|
22
|
+
lg: 'xl',
|
|
23
|
+
};
|
|
24
|
+
const MANAGED_CLASSES = new Set([
|
|
25
|
+
'btu-empty-state',
|
|
26
|
+
'btu-empty-state-sm',
|
|
27
|
+
'btu-empty-state-md',
|
|
28
|
+
'btu-empty-state-lg',
|
|
29
|
+
]);
|
|
30
|
+
const isHeadingLevel = (n) => typeof n === 'number' && Number.isInteger(n) && n >= 1 && n <= 6;
|
|
31
|
+
/**
|
|
32
|
+
* An empty state component for displaying placeholder content when no data is available.
|
|
33
|
+
*
|
|
34
|
+
* Supports a graphic slot for icons/images/pictures/SVGs, a heading, a description,
|
|
35
|
+
* and an actions slot for buttons or links. Available in three sizes (sm, md, lg)
|
|
36
|
+
* with semantic heading levels.
|
|
37
|
+
*
|
|
38
|
+
* ## Architecture: Light DOM + Pseudo-Slots
|
|
39
|
+
*
|
|
40
|
+
* This component uses **Light DOM** (no Shadow Root) with pseudo-slots:
|
|
41
|
+
* - User-provided children are physically moved into internal containers
|
|
42
|
+
* - Movement is based on `slot` attributes
|
|
43
|
+
* - The `onFind` utility detects and redistributes newly-added children (one-time per element)
|
|
44
|
+
*
|
|
45
|
+
* ### Node Redistribution Rules
|
|
46
|
+
* - `slot="graphic"` - Moved to graphic container (icon, image, picture, or SVG)
|
|
47
|
+
* - `slot="actions"` - Moved to an internal `btu-button-group` (variant="spaced")
|
|
48
|
+
*
|
|
49
|
+
* ### Actions composition
|
|
50
|
+
*
|
|
51
|
+
* The actions container IS a `btu-button-group` with `variant="spaced"`. Its `size`
|
|
52
|
+
* is mapped from the empty-state `size` prop (sm→small, md→medium, lg→large) so all
|
|
53
|
+
* child `btu-button` / `btu-icon-button` elements get consistent sizing and group
|
|
54
|
+
* semantics (`role="group"`, roving tabindex, disabled propagation) for free.
|
|
55
|
+
*
|
|
56
|
+
* @element btu-empty-state
|
|
57
|
+
*
|
|
58
|
+
* @fires {CustomEvent} btu-empty-state-ready - Fired after first render and initialization
|
|
59
|
+
* @fires {CustomEvent} btu-button-group-ready - Bubbles from the internal actions button-group
|
|
60
|
+
*
|
|
61
|
+
* @cssprop --empty-state-max-width - Maximum width of the content block (default: min(75cqw, 360px))
|
|
62
|
+
* @cssprop --empty-state-color-heading - Heading text color (default: gray-900)
|
|
63
|
+
* @cssprop --empty-state-color-description - Description text color (default: gray-500)
|
|
64
|
+
*
|
|
65
|
+
* @slot graphic - Pseudo-slot for icon, image, picture, or SVG graphic.
|
|
66
|
+
* When the child is a `btu-icon`, the component overrides its `size` attribute
|
|
67
|
+
* based on the empty-state `size` prop (sm→md, md→lg, lg→xl). Use an `img`,
|
|
68
|
+
* `picture`, or inline `svg` for full size control.
|
|
69
|
+
* @slot actions - Pseudo-slot for action buttons. Children are moved into an internal
|
|
70
|
+
* `btu-button-group` (variant="spaced"), so size and disabled state are managed
|
|
71
|
+
* by the group.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```html
|
|
75
|
+
* <btu-empty-state heading="No results found" description="Try adjusting your search criteria.">
|
|
76
|
+
* <btu-icon slot="graphic" symbol="search" size="xl"></btu-icon>
|
|
77
|
+
* <button slot="actions">Clear filters</button>
|
|
78
|
+
* </btu-empty-state>
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export default class EmptyState extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
82
|
+
constructor() {
|
|
83
|
+
super(...arguments);
|
|
84
|
+
/**
|
|
85
|
+
* Heading text displayed in the empty state.
|
|
86
|
+
* @attr
|
|
87
|
+
*/
|
|
88
|
+
this.heading = '';
|
|
89
|
+
/**
|
|
90
|
+
* Size variant of the empty state. Affects spacing, description text, graphic size,
|
|
91
|
+
* and — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3).
|
|
92
|
+
* @attr
|
|
93
|
+
*/
|
|
94
|
+
this.size = 'md';
|
|
95
|
+
this.initialClasses = [];
|
|
96
|
+
}
|
|
97
|
+
createRenderRoot() {
|
|
98
|
+
return this;
|
|
99
|
+
}
|
|
100
|
+
connectedCallback() {
|
|
101
|
+
super.connectedCallback();
|
|
102
|
+
if (this.className) {
|
|
103
|
+
this.initialClasses = this.className.split(' ').filter(c => c.trim() && !MANAGED_CLASSES.has(c));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
willUpdate(changedProperties) {
|
|
107
|
+
super.willUpdate(changedProperties);
|
|
108
|
+
const classes = [...this.initialClasses, 'btu-empty-state', `btu-empty-state-${this.size}`];
|
|
109
|
+
this.className = classes.filter(Boolean).join(' ');
|
|
110
|
+
if (changedProperties.has('headingLevel') && this.headingLevel != null && !isHeadingLevel(this.headingLevel)) {
|
|
111
|
+
console.warn(`EmptyState: Invalid heading-level="${this.headingLevel}". Valid values are 1-6. Falling back to size-based default.`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
firstUpdated() {
|
|
115
|
+
const graphicContainer = this.querySelector('.btu-empty-state-graphic');
|
|
116
|
+
const actionsContainer = this.querySelector('.btu-empty-state-actions');
|
|
117
|
+
if (graphicContainer && actionsContainer) {
|
|
118
|
+
onFind(this, ':scope > :not([data-empty-state-internal])', el => {
|
|
119
|
+
const slot = el.getAttribute('slot');
|
|
120
|
+
if (slot === 'graphic') {
|
|
121
|
+
graphicContainer.appendChild(el);
|
|
122
|
+
if (el.tagName === 'BTU-ICON') {
|
|
123
|
+
this.syncGraphicIconSize();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (slot === 'actions') {
|
|
127
|
+
actionsContainer.appendChild(el);
|
|
128
|
+
}
|
|
129
|
+
else if (slot) {
|
|
130
|
+
console.warn(`EmptyState: Unrecognized slot="${slot}". Valid slots are "graphic" and "actions".`, el);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.warn('EmptyState: Child element has no slot attribute. Use slot="graphic" or slot="actions".', el);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
this.emit('btu-empty-state-ready');
|
|
138
|
+
}
|
|
139
|
+
updated(changedProperties) {
|
|
140
|
+
super.updated(changedProperties);
|
|
141
|
+
if (changedProperties.has('size')) {
|
|
142
|
+
this.syncGraphicIconSize();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
syncGraphicIconSize() {
|
|
146
|
+
const icon = this.querySelector('.btu-empty-state-graphic btu-icon');
|
|
147
|
+
if (icon) {
|
|
148
|
+
icon.setAttribute('size', ICON_SIZE_BY_EMPTY_STATE_SIZE[this.size]);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
resolveHeadingLevel() {
|
|
152
|
+
return isHeadingLevel(this.headingLevel) ? this.headingLevel : HEADING_LEVEL_BY_SIZE[this.size];
|
|
153
|
+
}
|
|
154
|
+
renderHeading(level, className) {
|
|
155
|
+
if (!this.heading)
|
|
156
|
+
return '';
|
|
157
|
+
switch (level) {
|
|
158
|
+
case 1:
|
|
159
|
+
return html `<h1 class="${className}" data-empty-state-internal>${this.heading}</h1>`;
|
|
160
|
+
case 2:
|
|
161
|
+
return html `<h2 class="${className}" data-empty-state-internal>${this.heading}</h2>`;
|
|
162
|
+
case 3:
|
|
163
|
+
return html `<h3 class="${className}" data-empty-state-internal>${this.heading}</h3>`;
|
|
164
|
+
case 4:
|
|
165
|
+
return html `<h4 class="${className}" data-empty-state-internal>${this.heading}</h4>`;
|
|
166
|
+
case 5:
|
|
167
|
+
return html `<h5 class="${className}" data-empty-state-internal>${this.heading}</h5>`;
|
|
168
|
+
case 6:
|
|
169
|
+
return html `<h6 class="${className}" data-empty-state-internal>${this.heading}</h6>`;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
render() {
|
|
173
|
+
const level = this.resolveHeadingLevel();
|
|
174
|
+
const headingClass = `btu-empty-state-title btu-heading-${level}`;
|
|
175
|
+
return html `
|
|
176
|
+
<div class="btu-empty-state-graphic" data-empty-state-internal></div>
|
|
177
|
+
<div class="btu-empty-state-content" data-empty-state-internal>
|
|
178
|
+
${this.renderHeading(level, headingClass)}
|
|
179
|
+
${this.description
|
|
180
|
+
? html `<p class="btu-empty-state-description" data-empty-state-internal>${this.description}</p>`
|
|
181
|
+
: ''}
|
|
182
|
+
</div>
|
|
183
|
+
<btu-button-group
|
|
184
|
+
class="btu-empty-state-actions"
|
|
185
|
+
variant="spaced"
|
|
186
|
+
size="${this.size}"
|
|
187
|
+
data-empty-state-internal
|
|
188
|
+
></btu-button-group>
|
|
189
|
+
`;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
__decorate([
|
|
193
|
+
property({ type: String })
|
|
194
|
+
], EmptyState.prototype, "heading", void 0);
|
|
195
|
+
__decorate([
|
|
196
|
+
property({ type: String })
|
|
197
|
+
], EmptyState.prototype, "description", void 0);
|
|
198
|
+
__decorate([
|
|
199
|
+
property({ type: String })
|
|
200
|
+
], EmptyState.prototype, "size", void 0);
|
|
201
|
+
__decorate([
|
|
202
|
+
property({ type: Number, attribute: 'heading-level' })
|
|
203
|
+
], EmptyState.prototype, "headingLevel", void 0);
|
|
204
|
+
// Register custom element with guard to prevent double registration
|
|
205
|
+
// (common with yarn link, HMR, or webpack bundle duplication)
|
|
206
|
+
if (!customElements.get('btu-empty-state')) {
|
|
207
|
+
customElements.define('btu-empty-state', EmptyState);
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.js","sourceRoot":"","sources":["../../../src/components/empty-state/EmptyState.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
1
|
+
import { LitElement, type PropertyValues } from 'lit';
|
|
2
|
+
import type { ThemeColors } from '../../tailwind-plugin-theme.js';
|
|
3
|
+
export type IconGradientColor = Exclude<ThemeColors, 'black' | 'white'>;
|
|
2
4
|
export interface IconProps {
|
|
3
5
|
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
4
6
|
symbol?: string;
|
|
5
|
-
gradient?:
|
|
7
|
+
gradient?: IconGradientColor;
|
|
8
|
+
emphasize?: boolean | 'pulse';
|
|
6
9
|
}
|
|
7
10
|
declare const Icon_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
8
11
|
/**
|
|
@@ -16,10 +19,10 @@ declare const Icon_base: (new (...args: any[]) => import("../../util/EventEmitte
|
|
|
16
19
|
*
|
|
17
20
|
* @fires {CustomEvent} btu-icon-ready - Fired after first render and initialization
|
|
18
21
|
*
|
|
19
|
-
* @cssprop --
|
|
20
|
-
* @cssprop --
|
|
21
|
-
* @cssprop --
|
|
22
|
-
* @cssprop --
|
|
22
|
+
* @cssprop --icon-size - Icon size (overrides size default)
|
|
23
|
+
* @cssprop --icon-stroke-width - SVG stroke width as a unitless number in viewBox units; scales visually with icon size (default: 2)
|
|
24
|
+
* @cssprop --icon-fill - Icon fill color for filled icons (e.g., "currentColor")
|
|
25
|
+
* @cssprop --icon-svg - SVG data URI for mask-based rendering
|
|
23
26
|
*
|
|
24
27
|
* @example
|
|
25
28
|
* ```html
|
|
@@ -30,10 +33,10 @@ declare const Icon_base: (new (...args: any[]) => import("../../util/EventEmitte
|
|
|
30
33
|
* <btu-icon symbol="star" size="lg" gradient="primary"></btu-icon>
|
|
31
34
|
*
|
|
32
35
|
* <!-- Custom size via CSS -->
|
|
33
|
-
* <btu-icon symbol="check" style="--
|
|
36
|
+
* <btu-icon symbol="check" style="--icon-size: 3rem"></btu-icon>
|
|
34
37
|
*
|
|
35
38
|
* <!-- Filled icon via CSS (advanced usage) -->
|
|
36
|
-
* <btu-icon symbol="heart" style="--
|
|
39
|
+
* <btu-icon symbol="heart" style="--icon-fill: currentColor"></btu-icon>
|
|
37
40
|
* ```
|
|
38
41
|
*
|
|
39
42
|
* @example
|
|
@@ -68,12 +71,22 @@ export default class Icon extends Icon_base {
|
|
|
68
71
|
* When set, icon displays with gradient. When undefined, icon inherits parent text color.
|
|
69
72
|
* @attr
|
|
70
73
|
*/
|
|
71
|
-
gradient?:
|
|
74
|
+
gradient?: IconGradientColor;
|
|
75
|
+
/**
|
|
76
|
+
* Emphasize mode — renders a tonal circle with ring behind the icon.
|
|
77
|
+
* Colors are derived from `currentColor` via oklch relative color syntax.
|
|
78
|
+
* Defaults to primary; override with Tailwind `text-*` classes or `style="color: ..."`.
|
|
79
|
+
* Set as a boolean for the static circle, or `"pulse"` for a one-shot ring animation.
|
|
80
|
+
* Not intended for use with `gradient` — the two features target
|
|
81
|
+
* conflicting rendering modes.
|
|
82
|
+
* @attr
|
|
83
|
+
*/
|
|
84
|
+
emphasize?: boolean | 'pulse';
|
|
72
85
|
/** @internal */
|
|
73
86
|
private initialClasses;
|
|
74
87
|
connectedCallback(): void;
|
|
75
88
|
createRenderRoot(): this;
|
|
76
|
-
willUpdate(): void;
|
|
89
|
+
willUpdate(changedProperties: PropertyValues): void;
|
|
77
90
|
firstUpdated(): void;
|
|
78
91
|
/**
|
|
79
92
|
* Escape HTML special characters to prevent XSS attacks in comments.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/icon/Icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/icon/Icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAQ,MAAM,KAAK,CAAA;AAM3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAMjE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,CAAA;AAEvE,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAC9B;;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,SAAyC;IACzE,MAAM,KAAK,OAAO,WAEjB;IAED;;;;;;;;OAQG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAO;IAE7C;;;;OAIG;IAEH,MAAM,EAAE,MAAM,CAAkB;IAEhC;;;;OAIG;IAEH,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAE5B;;;;;;;;OAQG;IAgBH,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAE7B,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAe;IAErC,iBAAiB,IAAI,IAAI;IAQzB,gBAAgB;IAIhB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IA6BnD,YAAY,IAAI,IAAI;IAIpB;;;OAGG;IACH,OAAO,CAAC,UAAU;IASlB,MAAM;CA+CP;AAQD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,IAAI,CAAA;KACjB;CACF"}
|
|
@@ -31,10 +31,10 @@ for (const [key, value] of Object.entries(LucideExports)) {
|
|
|
31
31
|
*
|
|
32
32
|
* @fires {CustomEvent} btu-icon-ready - Fired after first render and initialization
|
|
33
33
|
*
|
|
34
|
-
* @cssprop --
|
|
35
|
-
* @cssprop --
|
|
36
|
-
* @cssprop --
|
|
37
|
-
* @cssprop --
|
|
34
|
+
* @cssprop --icon-size - Icon size (overrides size default)
|
|
35
|
+
* @cssprop --icon-stroke-width - SVG stroke width as a unitless number in viewBox units; scales visually with icon size (default: 2)
|
|
36
|
+
* @cssprop --icon-fill - Icon fill color for filled icons (e.g., "currentColor")
|
|
37
|
+
* @cssprop --icon-svg - SVG data URI for mask-based rendering
|
|
38
38
|
*
|
|
39
39
|
* @example
|
|
40
40
|
* ```html
|
|
@@ -45,10 +45,10 @@ for (const [key, value] of Object.entries(LucideExports)) {
|
|
|
45
45
|
* <btu-icon symbol="star" size="lg" gradient="primary"></btu-icon>
|
|
46
46
|
*
|
|
47
47
|
* <!-- Custom size via CSS -->
|
|
48
|
-
* <btu-icon symbol="check" style="--
|
|
48
|
+
* <btu-icon symbol="check" style="--icon-size: 3rem"></btu-icon>
|
|
49
49
|
*
|
|
50
50
|
* <!-- Filled icon via CSS (advanced usage) -->
|
|
51
|
-
* <btu-icon symbol="heart" style="--
|
|
51
|
+
* <btu-icon symbol="heart" style="--icon-fill: currentColor"></btu-icon>
|
|
52
52
|
* ```
|
|
53
53
|
*
|
|
54
54
|
* @example
|
|
@@ -95,7 +95,7 @@ export default class Icon extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
|
95
95
|
createRenderRoot() {
|
|
96
96
|
return this;
|
|
97
97
|
}
|
|
98
|
-
willUpdate() {
|
|
98
|
+
willUpdate(changedProperties) {
|
|
99
99
|
const classes = [...this.initialClasses, 'btu-icon', `btu-icon-${this.size}`];
|
|
100
100
|
// Add gradient class if gradient is set
|
|
101
101
|
if (this.gradient) {
|
|
@@ -104,6 +104,16 @@ export default class Icon extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
|
104
104
|
classes.push(`btu-icon-gradient-${this.gradient}`);
|
|
105
105
|
classes.push(`btu-icon-via-mask-${kebabName}`);
|
|
106
106
|
}
|
|
107
|
+
// Warn once when the conflict is introduced, not on every re-render
|
|
108
|
+
if (this.emphasize && this.gradient && (changedProperties.has('emphasize') || changedProperties.has('gradient'))) {
|
|
109
|
+
console.warn('[btu-icon] "emphasize" and "gradient" target conflicting rendering modes. "gradient" takes precedence.', this);
|
|
110
|
+
}
|
|
111
|
+
if (this.emphasize && !this.gradient) {
|
|
112
|
+
classes.push('btu-icon-emphasize');
|
|
113
|
+
if (this.emphasize === 'pulse') {
|
|
114
|
+
classes.push('btu-icon-emphasize-pulse');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
107
117
|
this.className = classes.filter(Boolean).join(' ');
|
|
108
118
|
}
|
|
109
119
|
firstUpdated() {
|
|
@@ -151,8 +161,8 @@ export default class Icon extends EventEmitterMixin(ReadyMixin(LitElement)) {
|
|
|
151
161
|
return html `${unsafeHTML(debugComment)}${unsafeSVG(maskedSvg)}`;
|
|
152
162
|
}
|
|
153
163
|
// Non-gradient path: render SVG with sizing
|
|
154
|
-
const fillAttr = this.style.getPropertyValue('--
|
|
155
|
-
const styledSvg = decodedSvg.replace('<svg', `<svg ${fillAttr} style="width: var(--
|
|
164
|
+
const fillAttr = this.style.getPropertyValue('--icon-fill') ? `fill="var(--icon-fill)"` : ''; // Optional fill
|
|
165
|
+
const styledSvg = decodedSvg.replace('<svg', `<svg ${fillAttr} style="width: var(--icon-size); height: var(--icon-size); display: inline-block; stroke-width: var(--icon-stroke-width, 2);"`);
|
|
156
166
|
return html `${unsafeHTML(debugComment)}${unsafeSVG(styledSvg)}`;
|
|
157
167
|
}
|
|
158
168
|
}
|
|
@@ -165,6 +175,27 @@ __decorate([
|
|
|
165
175
|
__decorate([
|
|
166
176
|
property({ type: String })
|
|
167
177
|
], Icon.prototype, "gradient", void 0);
|
|
178
|
+
__decorate([
|
|
179
|
+
property({
|
|
180
|
+
converter: {
|
|
181
|
+
fromAttribute(value) {
|
|
182
|
+
if (value === null)
|
|
183
|
+
return undefined;
|
|
184
|
+
if (value === 'pulse')
|
|
185
|
+
return 'pulse';
|
|
186
|
+
return true;
|
|
187
|
+
},
|
|
188
|
+
toAttribute(value) {
|
|
189
|
+
if (!value)
|
|
190
|
+
return null;
|
|
191
|
+
if (value === 'pulse')
|
|
192
|
+
return 'pulse';
|
|
193
|
+
return '';
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
reflect: true,
|
|
197
|
+
})
|
|
198
|
+
], Icon.prototype, "emphasize", void 0);
|
|
168
199
|
// Register custom element with guard to prevent double registration
|
|
169
200
|
// (common with yarn link, HMR, or webpack bundle duplication)
|
|
170
201
|
if (!customElements.get('btu-icon')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../../src/components/icon/Icon.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../../src/components/icon/Icon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
import '../icon/Icon.js';
|
|
3
3
|
export type IconButtonType = 'primary' | 'primary-clear' | 'primary-stroke' | 'secondary' | 'secondary-clear' | 'secondary-stroke' | 'tertiary' | 'tertiary-clear' | 'tertiary-stroke';
|
|
4
|
-
|
|
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;
|
|
4
|
+
export type IconButtonSize = 'sm' | 'md' | 'lg';
|
|
19
5
|
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
6
|
/**
|
|
21
7
|
* Surfaces the different actions someone can perform in an interface where space is limited.
|
|
@@ -30,9 +16,9 @@ declare const IconButton_base: (new (...args: any[]) => import("../../util/Toolt
|
|
|
30
16
|
*
|
|
31
17
|
* @example
|
|
32
18
|
* ```html
|
|
33
|
-
* <btu-icon-button
|
|
34
|
-
* <btu-icon-button
|
|
35
|
-
* <btu-icon-button
|
|
19
|
+
* <btu-icon-button symbol="trash-2" tooltip="Delete" aria-label="Delete item"></btu-icon-button>
|
|
20
|
+
* <btu-icon-button symbol="pencil" type="secondary" size="sm" aria-label="Edit"></btu-icon-button>
|
|
21
|
+
* <btu-icon-button symbol="x" type="primary" destructive aria-label="Remove"></btu-icon-button>
|
|
36
22
|
* ```
|
|
37
23
|
*/
|
|
38
24
|
export default class IconButton extends IconButton_base {
|
|
@@ -47,10 +33,10 @@ export default class IconButton extends IconButton_base {
|
|
|
47
33
|
*/
|
|
48
34
|
type: IconButtonType;
|
|
49
35
|
/**
|
|
50
|
-
* Lucide icon
|
|
51
|
-
* @attr
|
|
36
|
+
* Lucide icon symbol.
|
|
37
|
+
* @attr
|
|
52
38
|
*/
|
|
53
|
-
|
|
39
|
+
symbol: string | undefined;
|
|
54
40
|
/**
|
|
55
41
|
* Specifies the size of icon-button.
|
|
56
42
|
* @attr
|
|
@@ -1 +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,
|
|
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,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;;AAI/C;;;;;;;;;;;;;;;;;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,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAE1B;;;OAGG;IAEH,IAAI,EAAE,cAAc,CAAO;IAE3B;;;;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;IAU3B,MAAM;CAgBP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,UAAU,CAAA;KAC9B;CACF"}
|
|
@@ -23,11 +23,7 @@ const TYPE_COLOR_CLASSES = {
|
|
|
23
23
|
'tertiary-clear': ['btu-button-teal', 'btu-button-fill-none'],
|
|
24
24
|
'tertiary-stroke': ['btu-button-teal', 'btu-button-fill-none', 'btu-button-outline'],
|
|
25
25
|
};
|
|
26
|
-
const
|
|
27
|
-
small: { buttonSize: 'sm', iconSize: 'sm' },
|
|
28
|
-
medium: { buttonSize: 'md', iconSize: 'md' },
|
|
29
|
-
large: { buttonSize: 'lg', iconSize: 'lg' },
|
|
30
|
-
};
|
|
26
|
+
const VALID_SIZES = new Set(['sm', 'md', 'lg']);
|
|
31
27
|
/**
|
|
32
28
|
* Surfaces the different actions someone can perform in an interface where space is limited.
|
|
33
29
|
*
|
|
@@ -41,9 +37,9 @@ const SIZE_MAP = {
|
|
|
41
37
|
*
|
|
42
38
|
* @example
|
|
43
39
|
* ```html
|
|
44
|
-
* <btu-icon-button
|
|
45
|
-
* <btu-icon-button
|
|
46
|
-
* <btu-icon-button
|
|
40
|
+
* <btu-icon-button symbol="trash-2" tooltip="Delete" aria-label="Delete item"></btu-icon-button>
|
|
41
|
+
* <btu-icon-button symbol="pencil" type="secondary" size="sm" aria-label="Edit"></btu-icon-button>
|
|
42
|
+
* <btu-icon-button symbol="x" type="primary" destructive aria-label="Remove"></btu-icon-button>
|
|
47
43
|
* ```
|
|
48
44
|
*/
|
|
49
45
|
export default class IconButton extends TooltipMixin(EventEmitterMixin(ReadyMixin(LitElement))) {
|
|
@@ -58,7 +54,7 @@ export default class IconButton extends TooltipMixin(EventEmitterMixin(ReadyMixi
|
|
|
58
54
|
* Specifies the size of icon-button.
|
|
59
55
|
* @attr
|
|
60
56
|
*/
|
|
61
|
-
this.size = '
|
|
57
|
+
this.size = 'md';
|
|
62
58
|
/**
|
|
63
59
|
* Specifies an icon-button will be used to take any destructive action overriding the
|
|
64
60
|
* default color used for the icon-button type with the error color.
|
|
@@ -80,9 +76,9 @@ export default class IconButton extends TooltipMixin(EventEmitterMixin(ReadyMixi
|
|
|
80
76
|
console.warn(`[btu-icon-button] Unrecognized type: "${this.type}". Falling back to "primary".`);
|
|
81
77
|
this.type = 'primary';
|
|
82
78
|
}
|
|
83
|
-
if (changedProperties.has('size') && !(this.size
|
|
84
|
-
console.warn(`[btu-icon-button] Unrecognized size: "${this.size}". Falling back to "
|
|
85
|
-
this.size = '
|
|
79
|
+
if (changedProperties.has('size') && !VALID_SIZES.has(this.size)) {
|
|
80
|
+
console.warn(`[btu-icon-button] Unrecognized size: "${this.size}". Falling back to "md".`);
|
|
81
|
+
this.size = 'md';
|
|
86
82
|
}
|
|
87
83
|
}
|
|
88
84
|
updated(changedProperties) {
|
|
@@ -122,16 +118,14 @@ export default class IconButton extends TooltipMixin(EventEmitterMixin(ReadyMixi
|
|
|
122
118
|
this.emit('btu-icon-button-click', { name: this.name });
|
|
123
119
|
}
|
|
124
120
|
_buildButtonClasses() {
|
|
125
|
-
const { buttonSize } = SIZE_MAP[this.size] ?? SIZE_MAP.medium;
|
|
126
121
|
const typeConfig = TYPE_COLOR_CLASSES[this.type] ?? TYPE_COLOR_CLASSES.primary;
|
|
127
122
|
const colorClass = this.destructive ? 'btu-button-error' : typeConfig[0];
|
|
128
123
|
const modifiers = typeConfig.slice(1);
|
|
129
|
-
return ['btu-button', 'btu-button-text-hidden', colorClass, ...modifiers, `btu-button-${
|
|
124
|
+
return ['btu-button', 'btu-button-text-hidden', colorClass, ...modifiers, `btu-button-${this.size}`]
|
|
130
125
|
.filter(Boolean)
|
|
131
126
|
.join(' ');
|
|
132
127
|
}
|
|
133
128
|
render() {
|
|
134
|
-
const { iconSize } = SIZE_MAP[this.size] ?? SIZE_MAP.medium;
|
|
135
129
|
const ariaLabel = this.getAttribute('aria-label')?.trim() || this.tooltip?.trim() || undefined;
|
|
136
130
|
return html `
|
|
137
131
|
<button
|
|
@@ -142,7 +136,7 @@ export default class IconButton extends TooltipMixin(EventEmitterMixin(ReadyMixi
|
|
|
142
136
|
?disabled=${this.disabled}
|
|
143
137
|
@click="${this._handleClick}"
|
|
144
138
|
>
|
|
145
|
-
<btu-icon symbol="${ifDefined(this.
|
|
139
|
+
<btu-icon symbol="${ifDefined(this.symbol)}" size="${this.size}"></btu-icon>
|
|
146
140
|
</button>
|
|
147
141
|
`;
|
|
148
142
|
}
|
|
@@ -154,8 +148,8 @@ __decorate([
|
|
|
154
148
|
property()
|
|
155
149
|
], IconButton.prototype, "type", void 0);
|
|
156
150
|
__decorate([
|
|
157
|
-
property({
|
|
158
|
-
], IconButton.prototype, "
|
|
151
|
+
property({ type: String })
|
|
152
|
+
], IconButton.prototype, "symbol", void 0);
|
|
159
153
|
__decorate([
|
|
160
154
|
property()
|
|
161
155
|
], IconButton.prototype, "size", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconButton.js","sourceRoot":"","sources":["../../../src/components/icon-button/IconButton.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,iBAAiB,CAAA;AAaxB,kFAAkF;AAClF,MAAM,kBAAkB,GAAqC;IAC3D,OAAO,EAAE,CAAC,oBAAoB,CAAC;IAC/B,eAAe,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;IAC/D,gBAAgB,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;IACtF,SAAS,EAAE,CAAC,iBAAiB,CAAC;IAC9B,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;IAC9D,kBAAkB,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;IACrF,QAAQ,EAAE,CAAC,iBAAiB,CAAC;IAC7B,gBAAgB,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;IAC7D,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;CACrF,CAAA;
|
|
1
|
+
{"version":3,"file":"IconButton.js","sourceRoot":"","sources":["../../../src/components/icon-button/IconButton.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,iBAAiB,CAAA;AAaxB,kFAAkF;AAClF,MAAM,kBAAkB,GAAqC;IAC3D,OAAO,EAAE,CAAC,oBAAoB,CAAC;IAC/B,eAAe,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;IAC/D,gBAAgB,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;IACtF,SAAS,EAAE,CAAC,iBAAiB,CAAC;IAC9B,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;IAC9D,kBAAkB,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;IACrF,QAAQ,EAAE,CAAC,iBAAiB,CAAC;IAC7B,gBAAgB,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;IAC7D,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;CACrF,CAAA;AAID,MAAM,WAAW,GAAgC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAE5E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY,CAAC,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAA/F;;QAQE;;;WAGG;QAEH,SAAI,GAAmB,SAAS,CAAA;QAShC;;;WAGG;QAEH,SAAI,GAAmB,IAAI,CAAA;QAE3B;;;;WAIG;QAEH,gBAAW,GAAG,KAAK,CAAA;QAEnB;;;WAGG;QAEH,aAAQ,GAAG,KAAK,CAAA;IA0FlB,CAAC;IAxFC,gBAAgB;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,UAAU,CAAC,iBAAyD;QAClE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;QAEnC,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,kBAAkB,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,yCAAyC,IAAI,CAAC,IAAI,+BAA+B,CAAC,CAAA;YAC/F,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACvB,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,yCAAyC,IAAI,CAAC,IAAI,0BAA0B,CAAC,CAAA;YAC1F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,iBAAyD;QAC/D,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAEhC,kEAAkE;QAClE,yEAAyE;QACzE,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC3B,CAAC;IAEO,kBAAkB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAM;QAEnB,kEAAkE;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAC7D,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;YACxC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;QACrD,CAAC;QAED,wEAAwE;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAA;QAC/D,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAA;YACxC,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,YAAY,CAAC,iBAAyD;QACpE,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YACtE,OAAO,CAAC,IAAI,CACV,kGAAkG,EAClG,IAAI,CACL,CAAA;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACpC,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACzD,CAAC;IAEO,mBAAmB;QACzB,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAA;QAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACxE,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAErC,OAAO,CAAC,YAAY,EAAE,wBAAwB,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC;aACjG,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IAED,MAAM;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,SAAS,CAAA;QAE9F,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,mBAAmB,EAAE;qBACtB,SAAS,CAAC,SAAS,CAAC;eAC1B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;oBACf,IAAI,CAAC,QAAQ;kBACf,IAAI,CAAC,YAAY;;4BAEP,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI;;KAEjE,CAAA;IACH,CAAC;CACF;AA9HC;IADC,QAAQ,EAAE;wCACa;AAOxB;IADC,QAAQ,EAAE;wCACqB;AAOhC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CACD;AAO1B;IADC,QAAQ,EAAE;wCACgB;AAQ3B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;+CACT;AAOnB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4CACZ;AA4FlB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAC3C,cAAc,CAAC,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAA;AACtD,CAAC"}
|
|
@@ -5,8 +5,8 @@ declare const LinearProgress_base: (new (...args: any[]) => import("../../util/P
|
|
|
5
5
|
*
|
|
6
6
|
* @element btu-linear-progress
|
|
7
7
|
*
|
|
8
|
-
* @fires {CustomEvent} btu-progress-ready - Fired after first render and initialization
|
|
9
|
-
* @fires {CustomEvent} btu-progress-complete - Fired when progress reaches 100
|
|
8
|
+
* @fires {CustomEvent} btu-linear-progress-ready - Fired after first render and initialization
|
|
9
|
+
* @fires {CustomEvent} btu-linear-progress-complete - Fired when progress reaches 100
|
|
10
10
|
*
|
|
11
11
|
* @cssprop --progress-color - Custom progress bar color (overrides theme color)
|
|
12
12
|
* @cssprop --track-color - Track/background color (overrides default gray-100)
|
|
@@ -7,8 +7,8 @@ import { ReadyMixin } from '../../util/ReadyMixin.js';
|
|
|
7
7
|
*
|
|
8
8
|
* @element btu-linear-progress
|
|
9
9
|
*
|
|
10
|
-
* @fires {CustomEvent} btu-progress-ready - Fired after first render and initialization
|
|
11
|
-
* @fires {CustomEvent} btu-progress-complete - Fired when progress reaches 100
|
|
10
|
+
* @fires {CustomEvent} btu-linear-progress-ready - Fired after first render and initialization
|
|
11
|
+
* @fires {CustomEvent} btu-linear-progress-complete - Fired when progress reaches 100
|
|
12
12
|
*
|
|
13
13
|
* @cssprop --progress-color - Custom progress bar color (overrides theme color)
|
|
14
14
|
* @cssprop --track-color - Track/background color (overrides default gray-100)
|