@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,390 @@
|
|
|
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 { ReadyMixin } from '../../util/ReadyMixin.js';
|
|
11
|
+
import { RovingTabindexMixin } from '../../util/RovingTabindexMixin.js';
|
|
12
|
+
import '../badge/Badge.js';
|
|
13
|
+
import '../dropdown/Dropdown.js';
|
|
14
|
+
import '../dropdown/DropdownItem.js';
|
|
15
|
+
import '../dropdown/DropdownMenu.js';
|
|
16
|
+
import '../icon/Icon.js';
|
|
17
|
+
/**
|
|
18
|
+
* A container component for managing a group of tabs.
|
|
19
|
+
*
|
|
20
|
+
* Provides selection state management, size propagation to child tabs,
|
|
21
|
+
* and keyboard navigation following the WAI-ARIA Tabs pattern.
|
|
22
|
+
*
|
|
23
|
+
* When a tab becomes active, direct sibling elements that share the same
|
|
24
|
+
* `name` value are shown; other siblings with a `name` attribute are
|
|
25
|
+
* hidden. Only direct siblings are managed — nested tab groups control their
|
|
26
|
+
* own panels independently.
|
|
27
|
+
*
|
|
28
|
+
* @element btu-tabs
|
|
29
|
+
*
|
|
30
|
+
* @fires {CustomEvent} btu-tabs-ready - Fired after first render and initialization
|
|
31
|
+
* @fires {CustomEvent<{name: string}>} btu-tabs-show - Fired when a tab becomes active
|
|
32
|
+
* @fires {CustomEvent<{name: string}>} btu-tabs-hide - Fired when a tab is deactivated
|
|
33
|
+
* @fires {CustomEvent<{name: string}>} btu-tab-change - Fired when a tab is selected (bubbles from btu-tab)
|
|
34
|
+
* @fires {CustomEvent} btu-tab-ready - Fired when a child tab finishes initialization (bubbles from btu-tab)
|
|
35
|
+
*
|
|
36
|
+
* @cssprop --tabs-active-color - Text and icon color of the active tab (default: gray-700)
|
|
37
|
+
* @cssprop --tabs-active-indicator-color - Color of the active tab underline indicator (default: primary-500 → primary-700 → primary-900 gradient)
|
|
38
|
+
* @cssprop --tabs-border-color - Color of the bottom border divider (default: gray-200)
|
|
39
|
+
* @cssprop --tabs-color - Text and icon color for all tabs (default: gray-500; active/hover tabs use gray-700)
|
|
40
|
+
* @cssprop --tabs-background - Background color for all tab buttons (default: transparent)
|
|
41
|
+
* @cssprop --tabs-container-background - Background color of the tabs container (default: theme white)
|
|
42
|
+
* @cssprop --tabs-hover-background - Background color of a tab on hover (default: gray-100)
|
|
43
|
+
* @cssprop --tabs-hover-color - Text and icon color of a tab on hover (default: gray-700)
|
|
44
|
+
* @cssprop --tabs-gap - Spacing between tabs (default: 1rem)
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```html
|
|
48
|
+
* <div>
|
|
49
|
+
* <btu-tabs size="md" active-tab="main">
|
|
50
|
+
* <btu-tab name="main" label="Main"></btu-tab>
|
|
51
|
+
* <btu-tab name="seo" label="SEO"></btu-tab>
|
|
52
|
+
* <btu-tab name="overrides" label="Overrides"></btu-tab>
|
|
53
|
+
* </btu-tabs>
|
|
54
|
+
* <div name="main" role="tabpanel">Main content</div>
|
|
55
|
+
* <div name="seo" role="tabpanel">SEO content</div>
|
|
56
|
+
* <div name="overrides" role="tabpanel">Overrides content</div>
|
|
57
|
+
* </div>
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export default class Tabs extends RovingTabindexMixin(EventEmitterMixin(ReadyMixin(LitElement))) {
|
|
61
|
+
constructor() {
|
|
62
|
+
super(...arguments);
|
|
63
|
+
/**
|
|
64
|
+
* Size variant applied to all child tabs.
|
|
65
|
+
* @attr
|
|
66
|
+
*/
|
|
67
|
+
this.size = 'md';
|
|
68
|
+
/**
|
|
69
|
+
* Layout variant.
|
|
70
|
+
* - 'full': tabs scroll horizontally when they overflow (default)
|
|
71
|
+
* - 'menu': all tabs are hidden; the active tab label and a chevron dropdown are shown instead
|
|
72
|
+
* @attr
|
|
73
|
+
*/
|
|
74
|
+
this.variant = 'full';
|
|
75
|
+
/** @internal */
|
|
76
|
+
this.initialClasses = [];
|
|
77
|
+
/** @internal Bound event handler for cleanup */
|
|
78
|
+
this.boundHandleTabChange = this.handleTabChange.bind(this);
|
|
79
|
+
/** @internal Bound event handler for cleanup */
|
|
80
|
+
this.boundHandleKeyDown = this.handleKeyDown.bind(this);
|
|
81
|
+
/** @internal Menu variant state */
|
|
82
|
+
this.rafId = null;
|
|
83
|
+
this.menuWrapper = null;
|
|
84
|
+
this.menuDropdown = null;
|
|
85
|
+
this.menuLabel = null;
|
|
86
|
+
this.menuIcon = null;
|
|
87
|
+
this.menuErrorBadge = null;
|
|
88
|
+
}
|
|
89
|
+
static get tagName() {
|
|
90
|
+
return 'BTU-TABS';
|
|
91
|
+
}
|
|
92
|
+
/** @internal */
|
|
93
|
+
_getRovingTargets() {
|
|
94
|
+
const buttons = [];
|
|
95
|
+
for (const tab of this.getTabs()) {
|
|
96
|
+
if (tab.style.display === 'none')
|
|
97
|
+
continue;
|
|
98
|
+
const btn = tab.querySelector('button');
|
|
99
|
+
if (btn)
|
|
100
|
+
buttons.push(btn);
|
|
101
|
+
}
|
|
102
|
+
return buttons;
|
|
103
|
+
}
|
|
104
|
+
// Dropdown doesn't accept 'xs'; floor the tabs 'xs' size to 'sm' when forwarding.
|
|
105
|
+
get _dropdownSize() {
|
|
106
|
+
return this.size === 'xs' ? 'sm' : this.size;
|
|
107
|
+
}
|
|
108
|
+
// Menu-variant icon is always small relative to the tab label, regardless of tabs size.
|
|
109
|
+
get _menuIconSize() {
|
|
110
|
+
return this.size === 'lg' ? 'md' : 'sm';
|
|
111
|
+
}
|
|
112
|
+
connectedCallback() {
|
|
113
|
+
super.connectedCallback();
|
|
114
|
+
if (this.className) {
|
|
115
|
+
this.initialClasses = this.className.split(' ').filter(c => c.trim());
|
|
116
|
+
}
|
|
117
|
+
this.setAttribute('role', 'tablist');
|
|
118
|
+
this.addEventListener('btu-tab-change', this.boundHandleTabChange);
|
|
119
|
+
this.addEventListener('keydown', this.boundHandleKeyDown);
|
|
120
|
+
}
|
|
121
|
+
disconnectedCallback() {
|
|
122
|
+
super.disconnectedCallback();
|
|
123
|
+
if (this.rafId) {
|
|
124
|
+
cancelAnimationFrame(this.rafId);
|
|
125
|
+
this.rafId = null;
|
|
126
|
+
}
|
|
127
|
+
this.removeEventListener('btu-tab-change', this.boundHandleTabChange);
|
|
128
|
+
this.removeEventListener('keydown', this.boundHandleKeyDown);
|
|
129
|
+
}
|
|
130
|
+
createRenderRoot() {
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
willUpdate() {
|
|
134
|
+
this.className = [
|
|
135
|
+
...this.initialClasses,
|
|
136
|
+
'btu-tabs',
|
|
137
|
+
`btu-tabs-${this.size}`,
|
|
138
|
+
this.variant === 'menu' ? 'btu-tabs-menu-mode' : '',
|
|
139
|
+
]
|
|
140
|
+
.filter(Boolean)
|
|
141
|
+
.join(' ');
|
|
142
|
+
}
|
|
143
|
+
firstUpdated() {
|
|
144
|
+
if (!this.activeTab) {
|
|
145
|
+
const firstEnabled = this.getTabs().find(t => !t.disabled);
|
|
146
|
+
if (firstEnabled)
|
|
147
|
+
this.activeTab = firstEnabled.name;
|
|
148
|
+
}
|
|
149
|
+
this.syncTabs();
|
|
150
|
+
this.syncPanels();
|
|
151
|
+
if (this.variant === 'menu') {
|
|
152
|
+
this.initMenu();
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this.emit('btu-tabs-ready');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
updated(changedProperties) {
|
|
159
|
+
if (changedProperties.has('activeTab') && !this.activeTab) {
|
|
160
|
+
const firstEnabled = this.getTabs().find(t => !t.disabled);
|
|
161
|
+
if (firstEnabled)
|
|
162
|
+
this.activeTab = firstEnabled.name;
|
|
163
|
+
}
|
|
164
|
+
if (changedProperties.has('activeTab') || changedProperties.has('size')) {
|
|
165
|
+
this.syncTabs();
|
|
166
|
+
}
|
|
167
|
+
if (changedProperties.has('activeTab')) {
|
|
168
|
+
this.syncPanels();
|
|
169
|
+
}
|
|
170
|
+
if (changedProperties.has('size') && this.menuDropdown) {
|
|
171
|
+
this.menuDropdown.size = this._dropdownSize;
|
|
172
|
+
}
|
|
173
|
+
if (changedProperties.has('variant') && changedProperties.get('variant') !== undefined) {
|
|
174
|
+
this.teardownVariant(changedProperties.get('variant'));
|
|
175
|
+
if (this.variant === 'menu')
|
|
176
|
+
this.initMenu();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** @internal Tear down a variant's DOM and state before switching to another */
|
|
180
|
+
teardownVariant(previous) {
|
|
181
|
+
if (previous === 'menu') {
|
|
182
|
+
this.menuWrapper?.remove();
|
|
183
|
+
this.menuWrapper = null;
|
|
184
|
+
this.menuDropdown = null;
|
|
185
|
+
this.menuLabel = null;
|
|
186
|
+
this.menuIcon = null;
|
|
187
|
+
this.menuErrorBadge = null;
|
|
188
|
+
this.getTabs().forEach(tab => tab.style.removeProperty('display'));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/** @internal */
|
|
192
|
+
syncTabs() {
|
|
193
|
+
this.getTabs().forEach(tab => {
|
|
194
|
+
tab.size = this.size;
|
|
195
|
+
tab._active = tab.name === this.activeTab;
|
|
196
|
+
tab._tabindex = tab.name === this.activeTab ? 0 : -1;
|
|
197
|
+
tab.requestUpdate();
|
|
198
|
+
});
|
|
199
|
+
if (this.variant === 'menu') {
|
|
200
|
+
this.syncMenuState();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/** @internal Show/hide panel elements that are direct siblings with a matching name value */
|
|
204
|
+
syncPanels() {
|
|
205
|
+
if (!this.activeTab || !this.parentElement)
|
|
206
|
+
return;
|
|
207
|
+
Array.from(this.parentElement.children).forEach(child => {
|
|
208
|
+
if (child === this || !(child instanceof HTMLElement))
|
|
209
|
+
return;
|
|
210
|
+
// data-tab is a deprecated fallback for compat — use name instead
|
|
211
|
+
const panelName = child.getAttribute('name') ?? child.dataset.tab;
|
|
212
|
+
if (!panelName)
|
|
213
|
+
return;
|
|
214
|
+
child.hidden = panelName !== this.activeTab;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/** @internal */
|
|
218
|
+
getTabs() {
|
|
219
|
+
return Array.from(this.querySelectorAll('btu-tab'));
|
|
220
|
+
}
|
|
221
|
+
/** @internal */
|
|
222
|
+
activateTab(name) {
|
|
223
|
+
const newTab = this.getTabs().find(t => t.name === name);
|
|
224
|
+
if (!newTab || newTab.disabled) {
|
|
225
|
+
const available = this.getTabs()
|
|
226
|
+
.map(t => t.name)
|
|
227
|
+
.filter(Boolean);
|
|
228
|
+
console.warn(`[btu-tabs] Tab "${name}" not found or is disabled. Available tabs: ${available.join(', ')}`);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (name === this.activeTab)
|
|
232
|
+
return;
|
|
233
|
+
const oldName = this.activeTab;
|
|
234
|
+
if (oldName) {
|
|
235
|
+
this.emit('btu-tabs-hide', { name: oldName });
|
|
236
|
+
}
|
|
237
|
+
this.activeTab = name;
|
|
238
|
+
this.emit('btu-tabs-show', { name });
|
|
239
|
+
this.syncTabs();
|
|
240
|
+
this.syncPanels();
|
|
241
|
+
}
|
|
242
|
+
/** @internal */
|
|
243
|
+
handleTabChange(event) {
|
|
244
|
+
this.activateTab(event.detail.name);
|
|
245
|
+
}
|
|
246
|
+
/** @internal Keyboard navigation following WAI-ARIA Tabs pattern */
|
|
247
|
+
handleKeyDown(event) {
|
|
248
|
+
switch (event.key) {
|
|
249
|
+
case 'ArrowRight':
|
|
250
|
+
event.preventDefault();
|
|
251
|
+
this._rovingNext();
|
|
252
|
+
break;
|
|
253
|
+
case 'ArrowLeft':
|
|
254
|
+
event.preventDefault();
|
|
255
|
+
this._rovingPrev();
|
|
256
|
+
break;
|
|
257
|
+
case 'Home':
|
|
258
|
+
event.preventDefault();
|
|
259
|
+
this._rovingFirst();
|
|
260
|
+
break;
|
|
261
|
+
case 'End':
|
|
262
|
+
event.preventDefault();
|
|
263
|
+
this._rovingLast();
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// ─── Menu variant ────────────────────────────────────────────────────────────
|
|
268
|
+
/** @internal */
|
|
269
|
+
initMenu() {
|
|
270
|
+
// Hide all tab buttons — they're only accessible via the dropdown
|
|
271
|
+
this.getTabs().forEach(tab => (tab.style.display = 'none'));
|
|
272
|
+
const activeTab = this.getTabs().find(t => t.name === this.activeTab);
|
|
273
|
+
this.menuWrapper = document.createElement('div');
|
|
274
|
+
const wrapper = this.menuWrapper;
|
|
275
|
+
wrapper.className = 'btu-tab-menu-wrapper';
|
|
276
|
+
this.menuIcon = document.createElement('btu-icon');
|
|
277
|
+
this.menuIcon.setAttribute('size', this._menuIconSize);
|
|
278
|
+
this.menuIcon.setAttribute('symbol', activeTab?.symbol ?? '');
|
|
279
|
+
this.menuIcon.hidden = !activeTab?.symbol;
|
|
280
|
+
this.menuLabel = document.createElement('span');
|
|
281
|
+
this.menuLabel.className = 'btu-tab-menu-label';
|
|
282
|
+
this.menuLabel.textContent = activeTab?.label ?? '';
|
|
283
|
+
if (activeTab?.iconPosition === 'trailing') {
|
|
284
|
+
wrapper.appendChild(this.menuLabel);
|
|
285
|
+
wrapper.appendChild(this.menuIcon);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
wrapper.appendChild(this.menuIcon);
|
|
289
|
+
wrapper.appendChild(this.menuLabel);
|
|
290
|
+
}
|
|
291
|
+
this.menuErrorBadge = document.createElement('btu-badge');
|
|
292
|
+
this.menuErrorBadge.setAttribute('size', 'sm');
|
|
293
|
+
this.menuErrorBadge.setAttribute('variant', 'error');
|
|
294
|
+
this.menuErrorBadge.textContent = '!';
|
|
295
|
+
this.menuErrorBadge.hidden = !activeTab?.error;
|
|
296
|
+
wrapper.appendChild(this.menuErrorBadge);
|
|
297
|
+
const dropdownMenu = document.createElement('btu-dropdown-menu');
|
|
298
|
+
this.menuDropdown = document.createElement('btu-dropdown');
|
|
299
|
+
this.menuDropdown.label = 'Tabs';
|
|
300
|
+
this.menuDropdown.iconOnly = true;
|
|
301
|
+
this.menuDropdown.noChevron = false;
|
|
302
|
+
this.menuDropdown.variant = 'tertiary';
|
|
303
|
+
this.menuDropdown.placement = 'bottom-start';
|
|
304
|
+
this.menuDropdown.size = this._dropdownSize;
|
|
305
|
+
this.menuDropdown.appendChild(dropdownMenu);
|
|
306
|
+
this.menuDropdown.addEventListener('btu-dropdown-item-select', (e) => {
|
|
307
|
+
e.stopPropagation();
|
|
308
|
+
const item = e.target.closest('btu-dropdown-item');
|
|
309
|
+
const name = item?.dataset.name;
|
|
310
|
+
if (name)
|
|
311
|
+
this.activateTab(name);
|
|
312
|
+
});
|
|
313
|
+
wrapper.appendChild(this.menuDropdown);
|
|
314
|
+
this.appendChild(wrapper);
|
|
315
|
+
// Defer population to allow btu-dropdown to finish its firstUpdated lifecycle
|
|
316
|
+
this.rafId = requestAnimationFrame(() => {
|
|
317
|
+
this.rafId = null;
|
|
318
|
+
this.updateMenuItems();
|
|
319
|
+
this.emit('btu-tabs-ready');
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
/** @internal */
|
|
323
|
+
updateMenuItems() {
|
|
324
|
+
if (!this.isConnected)
|
|
325
|
+
return;
|
|
326
|
+
const menu = this.menuDropdown?.querySelector('btu-dropdown-menu');
|
|
327
|
+
if (!menu)
|
|
328
|
+
return;
|
|
329
|
+
menu.innerHTML = '';
|
|
330
|
+
const tabs = this.getTabs();
|
|
331
|
+
const hasIcons = tabs.some(t => !!t.symbol);
|
|
332
|
+
tabs.forEach(tab => {
|
|
333
|
+
const item = document.createElement('btu-dropdown-item');
|
|
334
|
+
item.dataset.name = tab.name ?? '';
|
|
335
|
+
item.label = tab.label ?? tab.name ?? '';
|
|
336
|
+
item.selected = tab.name === this.activeTab;
|
|
337
|
+
item.disabled = tab.disabled;
|
|
338
|
+
item.error = tab.error;
|
|
339
|
+
if (tab.symbol)
|
|
340
|
+
item.symbol = tab.symbol;
|
|
341
|
+
menu.appendChild(item);
|
|
342
|
+
item._configure({ checkbox: false, icon: hasIcons, symbol: '', favorites: false, shortcuts: false });
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
/** @internal */
|
|
346
|
+
syncMenuState() {
|
|
347
|
+
const activeTab = this.getTabs().find(t => t.name === this.activeTab);
|
|
348
|
+
if (this.menuLabel) {
|
|
349
|
+
this.menuLabel.textContent = activeTab?.label ?? '';
|
|
350
|
+
}
|
|
351
|
+
if (this.menuIcon) {
|
|
352
|
+
const symbol = activeTab?.symbol ?? '';
|
|
353
|
+
this.menuIcon.setAttribute('symbol', symbol);
|
|
354
|
+
this.menuIcon.setAttribute('size', this._menuIconSize);
|
|
355
|
+
this.menuIcon.hidden = !symbol;
|
|
356
|
+
// Reposition if icon-position changed
|
|
357
|
+
const wrapper = this.menuIcon.parentElement;
|
|
358
|
+
if (wrapper && this.menuLabel) {
|
|
359
|
+
if (activeTab?.iconPosition === 'trailing') {
|
|
360
|
+
wrapper.insertBefore(this.menuIcon, this.menuErrorBadge);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
wrapper.insertBefore(this.menuIcon, this.menuLabel);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if (this.menuErrorBadge) {
|
|
368
|
+
this.menuErrorBadge.hidden = !activeTab?.error;
|
|
369
|
+
}
|
|
370
|
+
this.menuDropdown?.querySelectorAll('btu-dropdown-item').forEach(item => {
|
|
371
|
+
item.selected = item.dataset.name === this.activeTab;
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
render() {
|
|
375
|
+
return html ``;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
__decorate([
|
|
379
|
+
property({ type: String })
|
|
380
|
+
], Tabs.prototype, "size", void 0);
|
|
381
|
+
__decorate([
|
|
382
|
+
property({ type: String, attribute: 'active-tab' })
|
|
383
|
+
], Tabs.prototype, "activeTab", void 0);
|
|
384
|
+
__decorate([
|
|
385
|
+
property({ type: String })
|
|
386
|
+
], Tabs.prototype, "variant", void 0);
|
|
387
|
+
if (!customElements.get('btu-tabs')) {
|
|
388
|
+
customElements.define('btu-tabs', Tabs);
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=Tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../src/components/tabs/Tabs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import '../icon/Icon.js';
|
|
3
|
+
import './UploadItem.js';
|
|
4
|
+
import type { FileState, FileStatus, FileStatusSettable } from './UploadItem.js';
|
|
5
|
+
export type { FileState, FileStatus, FileStatusSettable };
|
|
6
|
+
declare const Upload_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
|
|
7
|
+
/**
|
|
8
|
+
* A file upload component with drop zone and file list.
|
|
9
|
+
*
|
|
10
|
+
* The component is presentation + file-selection only. It handles file browsing,
|
|
11
|
+
* drag-and-drop reception, client-side validation, and rendering the file list
|
|
12
|
+
* with progress bars. It does not perform network requests — the consumer listens
|
|
13
|
+
* for events, performs their own upload, and drives state back via imperative methods.
|
|
14
|
+
*
|
|
15
|
+
* @element btu-upload
|
|
16
|
+
*
|
|
17
|
+
* @fires {CustomEvent<unknown>} btu-upload-ready - Fired when the component has completed first render
|
|
18
|
+
* @fires {CustomEvent<{id: string, file: File}>} btu-upload-file-added - Fired when a file passes validation and is added
|
|
19
|
+
* @fires {CustomEvent<{id: string, file: File}>} btu-upload-file-removed - Fired when a file is removed (user action, programmatic, or on disconnect for in-flight uploads)
|
|
20
|
+
* @fires {CustomEvent<{id: string, file: File}>} btu-upload-file-retry - Fired when user clicks "Try again" on a failed upload
|
|
21
|
+
* @fires {CustomEvent<{file: File, reason: 'type' | 'size' | 'count'}>} btu-upload-file-rejected - Fired when a file fails client-side validation or the queue is full
|
|
22
|
+
* @fires {CustomEvent<{id: string, file: File}>} btu-upload-file-completed - Fired when a file's status transitions into 'complete'
|
|
23
|
+
* @fires {CustomEvent<{method: string, id: string, reason: 'unknown-id' | 'invalid-transition', message: string}>} btu-upload-api-error - Fired when an imperative API call references an unknown id or an illegal status transition
|
|
24
|
+
*
|
|
25
|
+
* @cssprop --upload-dropzone-bg - Drop zone background color (default: gray-25)
|
|
26
|
+
* @cssprop --upload-dropzone-border-color - Drop zone border color (default: gray-300; gray-200 when disabled, gray-400 in high-contrast)
|
|
27
|
+
* @cssprop --upload-dropzone-border-radius - Drop zone border radius (default: borderRadius.lg)
|
|
28
|
+
* @cssprop --upload-dropzone-hover-bg - Drop zone hover background (hover default: gray-50; drag-over default: primary-25)
|
|
29
|
+
* @cssprop --upload-dropzone-hover-border-color - Drop zone hover/focus border color (default: primary-300; drag-over uses primary-400)
|
|
30
|
+
* @cssprop --upload-dropzone-focus-ring-color - Drop zone focus ring color (default: primary-100)
|
|
31
|
+
* @cssprop --upload-item-bg - Item background color (default: white)
|
|
32
|
+
* @cssprop --upload-item-border-color - Item border color (default: gray-200)
|
|
33
|
+
* @cssprop --upload-item-active-border-color - Item active/in-progress border (default: gray-300)
|
|
34
|
+
* @cssprop --upload-item-complete-border-color - Item completed border color (default: primary-500)
|
|
35
|
+
* @cssprop --upload-item-error-bg - Item error background (default: error-25)
|
|
36
|
+
* @cssprop --upload-item-error-border-color - Item error border color (default: error-300)
|
|
37
|
+
*/
|
|
38
|
+
export default class Upload extends Upload_base {
|
|
39
|
+
/**
|
|
40
|
+
* Accepted file types, matching the HTML `<input accept>` attribute format.
|
|
41
|
+
* Client-side filter only — the browser's file picker uses this as a hint,
|
|
42
|
+
* and drag-drop is enforced by this component. Server-side validation is
|
|
43
|
+
* still required.
|
|
44
|
+
*
|
|
45
|
+
* Supported forms (comma-separated, any combination):
|
|
46
|
+
* - `image/*` — MIME wildcard (any image)
|
|
47
|
+
* - `application/pdf` — exact MIME type
|
|
48
|
+
* - `.pdf`, `.docx` — file extension (case-insensitive)
|
|
49
|
+
*
|
|
50
|
+
* Examples:
|
|
51
|
+
* - `accept="image/*"` — any image
|
|
52
|
+
* - `accept="image/*,application/pdf"` — images and PDFs
|
|
53
|
+
* - `accept=".jpg,.jpeg,.png,.heic"` — specific extensions
|
|
54
|
+
* - `accept=""` (or omitted) — allow all
|
|
55
|
+
*
|
|
56
|
+
* Note: users can bypass the file picker's filter (most browsers offer an
|
|
57
|
+
* "All Files" option), so this attribute is a UX filter, not a security
|
|
58
|
+
* boundary.
|
|
59
|
+
*
|
|
60
|
+
* @attr
|
|
61
|
+
*/
|
|
62
|
+
accept: string;
|
|
63
|
+
/**
|
|
64
|
+
* Maximum file size in bytes. Files exceeding this are rejected. 0 means unlimited.
|
|
65
|
+
* @attr max-file-size
|
|
66
|
+
*/
|
|
67
|
+
maxFileSize: number;
|
|
68
|
+
/**
|
|
69
|
+
* Maximum number of files allowed. When omitted, uploads are unlimited.
|
|
70
|
+
* `max-files="1"` enters single-file mode (selecting a new file replaces the existing one).
|
|
71
|
+
* `max-files="0"` allows zero files. Values above 1 cap the queue at that many files.
|
|
72
|
+
* @attr max-files
|
|
73
|
+
*/
|
|
74
|
+
maxFiles: number;
|
|
75
|
+
/**
|
|
76
|
+
* Disables all interaction — file selection, drag-and-drop, and action buttons.
|
|
77
|
+
* @attr
|
|
78
|
+
*/
|
|
79
|
+
disabled: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Disables drag-and-drop. File selection via click still works.
|
|
82
|
+
* @attr no-drag
|
|
83
|
+
*/
|
|
84
|
+
noDrag: boolean;
|
|
85
|
+
private _files;
|
|
86
|
+
private _items;
|
|
87
|
+
private _milestones;
|
|
88
|
+
private _dragOver;
|
|
89
|
+
private _dragCounter;
|
|
90
|
+
private get _inputEl();
|
|
91
|
+
createRenderRoot(): this;
|
|
92
|
+
connectedCallback(): void;
|
|
93
|
+
disconnectedCallback(): void;
|
|
94
|
+
firstUpdated(): void;
|
|
95
|
+
private _handleInputChange;
|
|
96
|
+
private _handleSelectClick;
|
|
97
|
+
private _handleDropzoneClick;
|
|
98
|
+
private _handleDragEnter;
|
|
99
|
+
private _handleDragOver;
|
|
100
|
+
private _handleDragLeave;
|
|
101
|
+
private _handleDrop;
|
|
102
|
+
private _processFiles;
|
|
103
|
+
private _rejectCount;
|
|
104
|
+
private _validateFile;
|
|
105
|
+
private _addFile;
|
|
106
|
+
private _reportUnknownId;
|
|
107
|
+
private _getOrReport;
|
|
108
|
+
private _renderItem;
|
|
109
|
+
/**
|
|
110
|
+
* Update the progress of a file upload.
|
|
111
|
+
* Clamps value to 0-100 and coerces non-finite inputs to 0. Announces milestones
|
|
112
|
+
* (25%, 50%, 75%) to screen readers; 100% completion is announced by setFileStatus('complete').
|
|
113
|
+
*
|
|
114
|
+
* Status transitions:
|
|
115
|
+
* - `pending` → `uploading` (auto — first progress report starts the upload)
|
|
116
|
+
* - `uploading` → `uploading` (progress updates)
|
|
117
|
+
* - `error` → `error` (progress updates only; status is preserved so a stale late
|
|
118
|
+
* callback can't wipe the error UI. To recover from error, call
|
|
119
|
+
* `setFileStatus(id, 'uploading')` first, then report progress.)
|
|
120
|
+
* - `complete` → ignored (terminal state)
|
|
121
|
+
*/
|
|
122
|
+
setFileProgress(id: string, percent: number): void;
|
|
123
|
+
/**
|
|
124
|
+
* Set the status of a file.
|
|
125
|
+
* Valid statuses: 'uploading', 'complete', 'error'. For 'error' status, an
|
|
126
|
+
* optional message can be provided.
|
|
127
|
+
*
|
|
128
|
+
* Transitions from 'complete' are rejected (terminal state) — a late-resolving
|
|
129
|
+
* XHR cannot overwrite a prior success. Rejected calls emit `btu-upload-api-error`
|
|
130
|
+
* with reason: 'invalid-transition'.
|
|
131
|
+
*/
|
|
132
|
+
setFileStatus(id: string, status: FileStatusSettable, message?: string): void;
|
|
133
|
+
/**
|
|
134
|
+
* Override the icon symbol for a file.
|
|
135
|
+
*/
|
|
136
|
+
setFileSymbol(id: string, symbol: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* Remove a file programmatically. Fires `btu-upload-file-removed`.
|
|
139
|
+
*/
|
|
140
|
+
removeFile(id: string): void;
|
|
141
|
+
/**
|
|
142
|
+
* Get a snapshot of all current files and their states.
|
|
143
|
+
* States are readonly; mutations on the returned array's elements are ineffective.
|
|
144
|
+
*/
|
|
145
|
+
getFiles(): readonly FileState[];
|
|
146
|
+
private get _dropzoneFull();
|
|
147
|
+
private get _interactionBlocked();
|
|
148
|
+
private get _showCountPill();
|
|
149
|
+
private _renderSelectButton;
|
|
150
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
151
|
+
}
|
|
152
|
+
declare global {
|
|
153
|
+
interface HTMLElementTagNameMap {
|
|
154
|
+
'btu-upload': Upload;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=Upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Upload.d.ts","sourceRoot":"","sources":["../../../src/components/upload/Upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAA;AAO/C,OAAO,iBAAiB,CAAA;AACxB,OAAO,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEhF,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAA;;AAIzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAyC;IAC3E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IAEH,MAAM,EAAE,MAAM,CAAK;IAEnB;;;OAGG;IAEH,WAAW,EAAE,MAAM,CAAI;IAEvB;;;;;OAKG;IAgBH,QAAQ,EAAE,MAAM,CAAW;IAE3B;;;OAGG;IAEH,QAAQ,EAAE,OAAO,CAAQ;IAEzB;;;OAGG;IAEH,MAAM,EAAE,OAAO,CAAQ;IAEvB,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,WAAW,CAAsC;IAGzD,OAAO,CAAC,SAAS,CAAiB;IAElC,OAAO,CAAC,YAAY,CAAY;IAEhC,OAAO,KAAK,QAAQ,GAEnB;IAED,gBAAgB;IAIhB,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAgB5B,YAAY,IAAI,IAAI;IAqBpB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,QAAQ;IAsBhB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,WAAW;IAanB;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAiClD;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAgD7E;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU/C;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAe5B;;;OAGG;IACH,QAAQ,IAAI,SAAS,SAAS,EAAE;IAIhC,OAAO,KAAK,aAAa,GAKxB;IAED,OAAO,KAAK,mBAAmB,GAE9B;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,CAAC,mBAAmB;IAW3B,MAAM;CAoEP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,MAAM,CAAA;KACrB;CACF"}
|