@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,192 @@
|
|
|
1
|
+
import{x as l,i as v}from"./iframe-Sf9RHZFu.js";import{t as m}from"./custom-element-UsVr97OX.js";import"./preload-helper-PPVm8Dsz.js";const h=n=>{class i extends n{constructor(){super(...arguments),this._rovingIndex=0}_getRovingTargets(){return[]}_rovingFocus(t,e=!0){const o=this._getRovingTargets();if(o.length===0)return;const r=Math.max(0,Math.min(t,o.length-1));o.forEach((u,b)=>u.setAttribute("tabindex",b===r?"0":"-1")),e&&o[r]?.focus(),this._rovingIndex=r}_rovingNext(){const t=this._getRovingTargets();if(t.length===0)return;const e=this._rovingCurrentIndex(),o=e<t.length-1?e+1:0;this._rovingFocus(o)}_rovingPrev(){const t=this._getRovingTargets();if(t.length===0)return;const e=this._rovingCurrentIndex(),o=e>0?e-1:t.length-1;this._rovingFocus(o)}_rovingFirst(){this._rovingFocus(0)}_rovingLast(){const t=this._getRovingTargets();t.length>0&&this._rovingFocus(t.length-1)}_rovingCurrentIndex(){const t=document.activeElement;return this._getRovingTargets().findIndex(e=>e===t||e.contains(t))}}return i};var a=Object.freeze,x=Object.defineProperty,p=Object.getOwnPropertyDescriptor,f=(n,i,d,t)=>{for(var e=t>1?void 0:t?p(i,d):i,o=n.length-1,r;o>=0;o--)(r=n[o])&&(e=r(e)||e);return e},y=(n,i)=>a(x(n,"raw",{value:a(n.slice())})),c;const T={title:"Mixins/Roving Tabindex",tags:["autodocs"],parameters:{docs:{description:{component:`
|
|
2
|
+
\`RovingTabindexMixin\` provides **roving tabindex** navigation primitives for toolbar and menu components following the <a href="https://www.w3.org/WAI/ARIA/apd/practices/keyboard-interface/#kbd_roving_tabindex" target="_blank">WAI-ARIA Keyboard Interface Pattern</a>.
|
|
3
|
+
|
|
4
|
+
In a roving tabindex, only one element in the group has \`tabindex="0"\` (reachable via Tab), while all others have \`tabindex="-1"\`. Arrow keys move focus between items, wrapping at both ends.
|
|
5
|
+
|
|
6
|
+
<h3>What RovingTabindexMixin Provides</h3>
|
|
7
|
+
|
|
8
|
+
<table>
|
|
9
|
+
<thead>
|
|
10
|
+
<tr>
|
|
11
|
+
<th>Member</th>
|
|
12
|
+
<th>Type</th>
|
|
13
|
+
<th>Description</th>
|
|
14
|
+
</tr>
|
|
15
|
+
</thead>
|
|
16
|
+
<tbody>
|
|
17
|
+
<tr>
|
|
18
|
+
<td><code>_getRovingTargets()</code></td>
|
|
19
|
+
<td>Method (override)</td>
|
|
20
|
+
<td>Return focusable <code>HTMLElement[]</code> in navigation order. <strong>Subclass must override.</strong></td>
|
|
21
|
+
</tr>
|
|
22
|
+
<tr>
|
|
23
|
+
<td><code>_rovingFocus(index, shouldFocus?)</code></td>
|
|
24
|
+
<td>Method</td>
|
|
25
|
+
<td>Set <code>tabindex="0"</code> on target at index, <code>"-1"</code> on all others. Focuses the element unless <code>shouldFocus=false</code>.</td>
|
|
26
|
+
</tr>
|
|
27
|
+
<tr>
|
|
28
|
+
<td><code>_rovingNext()</code></td>
|
|
29
|
+
<td>Method</td>
|
|
30
|
+
<td>Move focus to next target (wraps to first)</td>
|
|
31
|
+
</tr>
|
|
32
|
+
<tr>
|
|
33
|
+
<td><code>_rovingPrev()</code></td>
|
|
34
|
+
<td>Method</td>
|
|
35
|
+
<td>Move focus to previous target (wraps to last)</td>
|
|
36
|
+
</tr>
|
|
37
|
+
<tr>
|
|
38
|
+
<td><code>_rovingFirst()</code></td>
|
|
39
|
+
<td>Method</td>
|
|
40
|
+
<td>Focus the first target</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td><code>_rovingLast()</code></td>
|
|
44
|
+
<td>Method</td>
|
|
45
|
+
<td>Focus the last target</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<td><code>_rovingCurrentIndex()</code></td>
|
|
49
|
+
<td>Method</td>
|
|
50
|
+
<td>Find index of the currently focused target</td>
|
|
51
|
+
</tr>
|
|
52
|
+
<tr>
|
|
53
|
+
<td><code>_rovingIndex</code></td>
|
|
54
|
+
<td>Property</td>
|
|
55
|
+
<td>Index of the last focused target</td>
|
|
56
|
+
</tr>
|
|
57
|
+
</tbody>
|
|
58
|
+
</table>
|
|
59
|
+
|
|
60
|
+
<h3>Keydown Handler is NOT Included</h3>
|
|
61
|
+
|
|
62
|
+
<p>The mixin intentionally does <strong>not</strong> install a keyboard event handler. Each component defines its own because:</p>
|
|
63
|
+
<ul>
|
|
64
|
+
<li><strong>Toolbars</strong> use <code>ArrowRight</code>/<code>ArrowLeft</code> (horizontal) with RTL awareness</li>
|
|
65
|
+
<li><strong>Menus</strong> use <code>ArrowDown</code>/<code>ArrowUp</code> (vertical) plus Enter/Space/Escape/Tab</li>
|
|
66
|
+
</ul>
|
|
67
|
+
|
|
68
|
+
<h3>Where It's Used</h3>
|
|
69
|
+
<ul>
|
|
70
|
+
<li><strong>ActionBar</strong> — horizontal toolbar with ArrowRight/Left, RTL support</li>
|
|
71
|
+
<li><strong>DropdownMenu</strong> — vertical menu with ArrowDown/Up, typeahead</li>
|
|
72
|
+
</ul>
|
|
73
|
+
|
|
74
|
+
<h3>TypeScript Usage</h3>
|
|
75
|
+
|
|
76
|
+
\`\`\`typescript
|
|
77
|
+
import { RovingTabindexMixin } from './RovingTabindexMixin'
|
|
78
|
+
import { EventEmitterMixin } from './EventEmitterMixin'
|
|
79
|
+
import { ReadyMixin } from './ReadyMixin'
|
|
80
|
+
import { LitElement } from 'lit'
|
|
81
|
+
|
|
82
|
+
class MyToolbar extends RovingTabindexMixin(EventEmitterMixin(ReadyMixin(LitElement))) {
|
|
83
|
+
// 1. Override to return your focusable elements
|
|
84
|
+
_getRovingTargets(): HTMLElement[] {
|
|
85
|
+
return Array.from(this.querySelectorAll('button'))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 2. Install your own keydown handler
|
|
89
|
+
connectedCallback() {
|
|
90
|
+
super.connectedCallback()
|
|
91
|
+
this.addEventListener('keydown', this._handleKeydown)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
private _handleKeydown = (e: KeyboardEvent) => {
|
|
95
|
+
switch (e.key) {
|
|
96
|
+
case 'ArrowRight': e.preventDefault(); this._rovingNext(); break
|
|
97
|
+
case 'ArrowLeft': e.preventDefault(); this._rovingPrev(); break
|
|
98
|
+
case 'Home': e.preventDefault(); this._rovingFirst(); break
|
|
99
|
+
case 'End': e.preventDefault(); this._rovingLast(); break
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
\`\`\`
|
|
104
|
+
|
|
105
|
+
<h3>Mixin Composition Order</h3>
|
|
106
|
+
|
|
107
|
+
\`\`\`typescript
|
|
108
|
+
class MyComponent extends RovingTabindexMixin(EventEmitterMixin(ReadyMixin(LitElement))) {}
|
|
109
|
+
\`\`\`
|
|
110
|
+
`}}}};let g=class extends h(v){constructor(){super(...arguments),this._handleKeydown=n=>{switch(n.key){case"ArrowRight":n.preventDefault(),this._rovingNext();break;case"ArrowLeft":n.preventDefault(),this._rovingPrev();break;case"Home":n.preventDefault(),this._rovingFirst();break;case"End":n.preventDefault(),this._rovingLast();break}}}createRenderRoot(){return this}_getRovingTargets(){return Array.from(this.querySelectorAll(".roving-demo-btn"))}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this._handleKeydown)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",this._handleKeydown)}render(){return l`
|
|
111
|
+
<div role="toolbar" aria-label="Demo toolbar" style="display: flex; gap: 0.5rem;">
|
|
112
|
+
<button class="roving-demo-btn btu-button-gray btu-button-md btu-button" tabindex="0">Item 1</button>
|
|
113
|
+
<button class="roving-demo-btn btu-button-gray btu-button-md btu-button" tabindex="-1">Item 2</button>
|
|
114
|
+
<button class="roving-demo-btn btu-button-gray btu-button-md btu-button" tabindex="-1">Item 3</button>
|
|
115
|
+
<button class="roving-demo-btn btu-button-gray btu-button-md btu-button" tabindex="-1">Item 4</button>
|
|
116
|
+
<button class="roving-demo-btn btu-button-gray btu-button-md btu-button" tabindex="-1">Item 5</button>
|
|
117
|
+
</div>
|
|
118
|
+
`}};g=f([m("roving-demo")],g);const s={render:()=>l(c||(c=y([`<div class="flex flex-col gap-4">
|
|
119
|
+
<div>
|
|
120
|
+
<h4 class="mb-2 font-bold">Interactive Roving Tabindex Demo</h4>
|
|
121
|
+
<p class="mb-2 text-sm text-gray-600">
|
|
122
|
+
Click any button below, then use <strong>Arrow Right/Left</strong> to move focus between items.
|
|
123
|
+
<strong>Home</strong> and <strong>End</strong> jump to first/last. Focus wraps at both ends.
|
|
124
|
+
</p>
|
|
125
|
+
<p class="mb-4 text-sm text-gray-600">
|
|
126
|
+
Notice only the focused button has <code>tabindex="0"</code> — pressing <strong>Tab</strong> leaves the
|
|
127
|
+
toolbar entirely, and <strong>Shift+Tab</strong> returns to the last focused item.
|
|
128
|
+
</p>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<roving-demo id="roving-demo"></roving-demo>
|
|
132
|
+
|
|
133
|
+
<div id="roving-status" class="text-sm text-gray-500" style="font-family: monospace;"></div>
|
|
134
|
+
|
|
135
|
+
<script>
|
|
136
|
+
;(() => {
|
|
137
|
+
const demo = document.getElementById('roving-demo')
|
|
138
|
+
const status = document.getElementById('roving-status')
|
|
139
|
+
if (!demo || !status) return
|
|
140
|
+
|
|
141
|
+
demo.addEventListener('focusin', () => {
|
|
142
|
+
const buttons = demo.querySelectorAll('.roving-demo-btn')
|
|
143
|
+
const indices = Array.from(buttons).map(b => b.getAttribute('tabindex'))
|
|
144
|
+
status.textContent = 'tabindex: [' + indices.join(', ') + '] | _rovingIndex: ' + demo._rovingIndex
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
demo.addEventListener('keyup', () => {
|
|
148
|
+
const buttons = demo.querySelectorAll('.roving-demo-btn')
|
|
149
|
+
const indices = Array.from(buttons).map(b => b.getAttribute('tabindex'))
|
|
150
|
+
status.textContent = 'tabindex: [' + indices.join(', ') + '] | _rovingIndex: ' + demo._rovingIndex
|
|
151
|
+
})
|
|
152
|
+
})()
|
|
153
|
+
<\/script>
|
|
154
|
+
</div>`])))};s.parameters={...s.parameters,docs:{...s.parameters?.docs,source:{originalSource:`{
|
|
155
|
+
render: () => html\`<div class="flex flex-col gap-4">
|
|
156
|
+
<div>
|
|
157
|
+
<h4 class="mb-2 font-bold">Interactive Roving Tabindex Demo</h4>
|
|
158
|
+
<p class="mb-2 text-sm text-gray-600">
|
|
159
|
+
Click any button below, then use <strong>Arrow Right/Left</strong> to move focus between items.
|
|
160
|
+
<strong>Home</strong> and <strong>End</strong> jump to first/last. Focus wraps at both ends.
|
|
161
|
+
</p>
|
|
162
|
+
<p class="mb-4 text-sm text-gray-600">
|
|
163
|
+
Notice only the focused button has <code>tabindex="0"</code> — pressing <strong>Tab</strong> leaves the
|
|
164
|
+
toolbar entirely, and <strong>Shift+Tab</strong> returns to the last focused item.
|
|
165
|
+
</p>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<roving-demo id="roving-demo"></roving-demo>
|
|
169
|
+
|
|
170
|
+
<div id="roving-status" class="text-sm text-gray-500" style="font-family: monospace;"></div>
|
|
171
|
+
|
|
172
|
+
<script>
|
|
173
|
+
;(() => {
|
|
174
|
+
const demo = document.getElementById('roving-demo')
|
|
175
|
+
const status = document.getElementById('roving-status')
|
|
176
|
+
if (!demo || !status) return
|
|
177
|
+
|
|
178
|
+
demo.addEventListener('focusin', () => {
|
|
179
|
+
const buttons = demo.querySelectorAll('.roving-demo-btn')
|
|
180
|
+
const indices = Array.from(buttons).map(b => b.getAttribute('tabindex'))
|
|
181
|
+
status.textContent = 'tabindex: [' + indices.join(', ') + '] | _rovingIndex: ' + demo._rovingIndex
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
demo.addEventListener('keyup', () => {
|
|
185
|
+
const buttons = demo.querySelectorAll('.roving-demo-btn')
|
|
186
|
+
const indices = Array.from(buttons).map(b => b.getAttribute('tabindex'))
|
|
187
|
+
status.textContent = 'tabindex: [' + indices.join(', ') + '] | _rovingIndex: ' + demo._rovingIndex
|
|
188
|
+
})
|
|
189
|
+
})()
|
|
190
|
+
<\/script>
|
|
191
|
+
</div>\`
|
|
192
|
+
}`,...s.parameters?.docs?.source}}};const A=["RovingTabindex"];export{s as RovingTabindex,A as __namedExportsOrder,T as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{x as o}from"./iframe-
|
|
1
|
+
import{x as o}from"./iframe-Sf9RHZFu.js";import"./preload-helper-PPVm8Dsz.js";const r={title:"Utilities/RTC",tags:["autodocs"],parameters:{docs:{subtitle:"The `rtc` module provides real-time communication between browser tabs and the Brightspot CMS server. Uses BroadcastChannel for cross-tab coordination with leader election, and Server-Sent Events for server communication."},controls:{expanded:!0}}},e={render:()=>o`
|
|
2
2
|
<div class="space-y-6 text-sm">
|
|
3
3
|
<div>
|
|
4
4
|
<h3 class="mb-2 font-bold">Overview</h3>
|
|
@@ -11,7 +11,7 @@ import{x as o}from"./iframe-BqvwP3or.js";import"./preload-helper-PPVm8Dsz.js";co
|
|
|
11
11
|
|
|
12
12
|
<div class="rounded border border-gray-200 bg-gray-50 p-4">
|
|
13
13
|
<h4 class="mb-2 font-bold">Architecture Diagram</h4>
|
|
14
|
-
<pre class="
|
|
14
|
+
<pre class="leading-relaxed text-xs text-gray-700">
|
|
15
15
|
┌─────────────────────────────────────────────────┐
|
|
16
16
|
│ CMS Server │
|
|
17
17
|
│ (Server-Sent Events) │
|
|
@@ -143,7 +143,7 @@ rtc.execute('com.example.MyAction', { id: '123', value: 'updated' })</code></pre
|
|
|
143
143
|
|
|
144
144
|
<div class="rounded border border-gray-200 bg-gray-50 p-4">
|
|
145
145
|
<h4 class="mb-2 font-bold">Architecture Diagram</h4>
|
|
146
|
-
<pre class="
|
|
146
|
+
<pre class="leading-relaxed text-xs text-gray-700">
|
|
147
147
|
┌─────────────────────────────────────────────────┐
|
|
148
148
|
│ CMS Server │
|
|
149
149
|
│ (Server-Sent Events) │
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import{x as a}from"./iframe-Sf9RHZFu.js";import"./preload-helper-PPVm8Dsz.js";const l=({theme:e="btu-scrollshadow-25"})=>{const r=new Array(100).fill(0).map((s,t)=>`Item ${t+1}`);return a`
|
|
2
|
+
<style>
|
|
3
|
+
:root {
|
|
4
|
+
--can-scroll: ;
|
|
5
|
+
}
|
|
6
|
+
</style>
|
|
7
|
+
<div class=${["flex","gap-2","bg-gray-500",e].join(" ")}>
|
|
8
|
+
${r.map((s,t)=>a`<div
|
|
9
|
+
class="flex aspect-square h-[100px] items-center justify-center text-md"
|
|
10
|
+
style="background:oklch(80% 50% ${Math.floor(Math.random()*710)+10});"
|
|
11
|
+
>
|
|
12
|
+
${s}
|
|
13
|
+
</div>`)}
|
|
14
|
+
</div>
|
|
15
|
+
`},n={title:"CSS Plugins/Scroll Shadow",component:"btu-scrollshadow",tags:["autodocs"],parameters:{docs:{subtitle:"This Tailwind CSS plugin provides the `.btu-scrollshadow` utility class for adding shadows to the edges of a scrollable container once the content overflows. The shadows use our gray color palette. You can choose which shade of gray you want. The scroll container must not already use before & after pseudo elements. But, if you need to use before/after modifiers on the container, make sure you also manually set the content property to the `--whitespace` variable. This is a workaround for TWCSS automatically adding a content property to the before/after pseudo-elements, which overrides the `--whitespace` variable by default. Note: this currently only supports x-axis scrolling."},controls:{expanded:!0}},render:e=>l(e),argTypes:{theme:{control:{type:"select"},description:"Choose a shade of gray for the scroll shadow. 25 is almost white, and 900 is almost black.",options:["btu-scrollshadow-25","btu-scrollshadow-50","btu-scrollshadow-100","btu-scrollshadow-200","btu-scrollshadow-300","btu-scrollshadow-400","btu-scrollshadow-500","btu-scrollshadow-600","btu-scrollshadow-700","btu-scrollshadow-800","btu-scrollshadow-900"]}},args:{}},o={args:{}};o.parameters={...o.parameters,docs:{...o.parameters?.docs,source:{originalSource:`{
|
|
16
|
+
args: {}
|
|
17
|
+
}`,...o.parameters?.docs?.source}}};const i=["Default"];export{o as Default,i as __namedExportsOrder,n as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{g as k,x as c}from"./iframe-
|
|
1
|
+
import{g as k,x as c}from"./iframe-Sf9RHZFu.js";import{o as s}from"./if-defined-CgfCxQoV.js";import{o as f}from"./style-map-B99QiqCo.js";import{L as w}from"./LucideDynamicLoader-jmdq8YDM.js";import"./preload-helper-PPVm8Dsz.js";const{events:v,args:y,argTypes:g}=k("btu-switch"),x={customColorOn:"--switch-color-track-on",customColorOff:"--switch-color-track-off",customKnobColor:"--switch-color-knob",customLabelSpacing:"--switch-label-spacing",customIconSize:"--switch-track-icon-size"},S=e=>Object.entries(x).reduce((o,[t,n])=>(e[t]&&(o[n]=e[t]),o),{}),L={title:"Components/Switch",component:"btu-switch",tags:["autodocs"],parameters:{docs:{subtitle:"A toggle switch for binary on/off states",description:{component:`
|
|
2
2
|
<h3>When to use:</h3>
|
|
3
3
|
<ul>
|
|
4
4
|
<li>For toggling a setting or preference on/off</li>
|
|
@@ -7,9 +7,9 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
7
7
|
</ul>
|
|
8
8
|
|
|
9
9
|
<p>Track icons are powered by the <a href="?path=/docs/components-icon--docs">Icon component</a>. Visit its docs for all available icon names.</p>
|
|
10
|
-
`}},actions:{handles:v},controls:{expanded:!0}},args:{...y,label:"Label",checked:!1},argTypes:{...g,"--switch-color-track-on":{table:{disable:!0}},"--switch-color-track-off":{table:{disable:!0}},"--switch-color-knob":{table:{disable:!0}},"--switch-label-spacing":{table:{disable:!0}},"--switch-icon-size":{table:{disable:!0}},"--switch-track-icon-size":{table:{disable:!0}},customColorOn:{name:"--switch-color-track-on",control:{type:"color"},description:"Background color when the toggle is checked",table:{category:"
|
|
10
|
+
`}},actions:{handles:v},controls:{expanded:!0}},args:{...y,label:"Label",checked:!1},argTypes:{...g,"--switch-color-track-on":{table:{disable:!0}},"--switch-color-track-off":{table:{disable:!0}},"--switch-color-knob":{table:{disable:!0}},"--switch-label-spacing":{table:{disable:!0}},"--switch-icon-size":{table:{disable:!0}},"--switch-track-icon-size":{table:{disable:!0}},customColorOn:{name:"--switch-color-track-on",control:{type:"color"},description:"Background color when the toggle is checked",table:{category:"css properties"}},customColorOff:{name:"--switch-color-track-off",control:{type:"color"},description:"Background color when the toggle is unchecked",table:{category:"css properties"}},customKnobColor:{name:"--switch-color-knob",control:{type:"color"},description:"Color of the sliding circular handle",table:{category:"css properties"}},customLabelSpacing:{name:"--switch-label-spacing",control:{type:"text"},description:"Distance between the switch and the text label (default: 0.75rem)",table:{category:"css properties"}},"on-icon":{...g["on-icon"],control:{type:"text"},description:'<a href="https://lucide.dev/icons/" target="_blank">Lucide</a> icon name shown on the track when checked. Only icons available in Lucide v'+w+" are supported."},"off-icon":{...g["off-icon"],control:{type:"text"},description:'<a href="https://lucide.dev/icons/" target="_blank">Lucide</a> icon name shown on the track when unchecked. Only icons available in Lucide v'+w+" are supported."},customIconSize:{name:"--switch-track-icon-size",control:{type:"text"},description:"Size of the track icons (e.g., `0.5rem`, `0.75rem`, `1rem`). Defaults: sm `0.5rem`, md `0.625rem`, lg `0.75rem`.",table:{category:"css properties"}}},render:e=>c`
|
|
11
11
|
<btu-switch
|
|
12
|
-
size=${e.size??"
|
|
12
|
+
size=${e.size??"sm"}
|
|
13
13
|
label=${s(e.label)}
|
|
14
14
|
description=${s(e.description)}
|
|
15
15
|
label-position=${e["label-position"]??"end"}
|
|
@@ -20,17 +20,17 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
20
20
|
?disabled=${e.disabled}
|
|
21
21
|
style=${f(S(e))}
|
|
22
22
|
></btu-switch>
|
|
23
|
-
`},i={args:{}},a={args:{checked:!0,label:"Enabled"},parameters:{docs:{description:{story:"Switch in the checked/on state. The track uses `--switch-color-track-on` (defaults to primary-700)."}}}},r={args:{label:"Enable notifications",description:"Receive updates via email",checked:!0},parameters:{docs:{description:{story:"Switch with both a primary label and a secondary description."}}}},l={args:{label:"Unavailable option",disabled:!0},parameters:{docs:{description:{story:"Disabled state via the `disabled` attribute. The track opacity is reduced and the wrapper cursor changes to `not-allowed`."}}}},d={args:{label:"Previously enabled",disabled:!0,checked:!0},parameters:{docs:{description:{story:"Disabled switch in the checked state. Useful for showing a locked-on setting."}}}},h={args:{label:"Label on the left","label-position":"start"},parameters:{docs:{description:{story:'Place the label before the switch using `label-position="start"`.'}}}},u={args:{label:"Notifications",checked:!0,"on-icon":"check","off-icon":"x"},parameters:{docs:{description:{story:"Track icons via `on-icon` and `off-icon` attributes. Icons use Lucide names (e.g., `check`, `x`, `bell`, `bell-off`)."}}}},
|
|
23
|
+
`},i={args:{}},a={args:{checked:!0,label:"Enabled"},parameters:{docs:{description:{story:"Switch in the checked/on state. The track uses `--switch-color-track-on` (defaults to primary-700)."}}}},r={args:{label:"Enable notifications",description:"Receive updates via email",checked:!0},parameters:{docs:{description:{story:"Switch with both a primary label and a secondary description."}}}},l={args:{label:"Unavailable option",disabled:!0},parameters:{docs:{description:{story:"Disabled state via the `disabled` attribute. The track opacity is reduced and the wrapper cursor changes to `not-allowed`."}}}},d={args:{label:"Previously enabled",disabled:!0,checked:!0},parameters:{docs:{description:{story:"Disabled switch in the checked state. Useful for showing a locked-on setting."}}}},h={args:{label:"Label on the left","label-position":"start"},parameters:{docs:{description:{story:'Place the label before the switch using `label-position="start"`.'}}}},u={args:{label:"Notifications",checked:!0,"on-icon":"check","off-icon":"x"},parameters:{docs:{description:{story:"Track icons via `on-icon` and `off-icon` attributes. Icons use Lucide names (e.g., `check`, `x`, `bell`, `bell-off`)."}}}},b={render:()=>c`
|
|
24
24
|
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
25
|
-
${["
|
|
25
|
+
${["sm","md","lg"].map(e=>c`
|
|
26
26
|
<btu-switch size=${e} label="${e} with icons" on-icon="check" off-icon="x" checked></btu-switch>
|
|
27
27
|
`)}
|
|
28
28
|
</div>
|
|
29
|
-
`,parameters:{docs:{description:{story:"Track icons scale automatically with the switch size."}}}},
|
|
29
|
+
`,parameters:{docs:{description:{story:"Track icons scale automatically with the switch size."}}}},m={render:()=>c`
|
|
30
30
|
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
31
|
-
${["
|
|
31
|
+
${["sm","md","lg"].map(e=>c` <btu-switch size=${e} label="${e} size" checked></btu-switch> `)}
|
|
32
32
|
</div>
|
|
33
|
-
`,parameters:{docs:{description:{story:"The three available size variants: `
|
|
33
|
+
`,parameters:{docs:{description:{story:"The three available size variants: `sm` (default), `md`, and `lg`."}}}},p={render:()=>c`
|
|
34
34
|
<div class="flex flex-col gap-6">
|
|
35
35
|
<div class="flex flex-col gap-2">
|
|
36
36
|
<strong>Custom colors:</strong>
|
|
@@ -71,7 +71,7 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
71
71
|
<btu-switch label="Email notifications" name="email" checked></btu-switch>
|
|
72
72
|
<btu-switch label="SMS notifications" name="sms"></btu-switch>
|
|
73
73
|
<btu-switch label="Push notifications" name="push" checked></btu-switch>
|
|
74
|
-
<button type="submit" class="btu-button btu-button
|
|
74
|
+
<button type="submit" class="btu-button-sm btu-button w-fit">Submit</button>
|
|
75
75
|
<pre class="form-output text-xs text-gray-600"></pre>
|
|
76
76
|
</form>
|
|
77
77
|
</div>
|
|
@@ -88,9 +88,9 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
88
88
|
<div class="flex flex-col gap-2">
|
|
89
89
|
<strong>Programmatic control:</strong>
|
|
90
90
|
<div class="flex items-center gap-4">
|
|
91
|
-
<btu-switch id="programmatic-switch" label="Controlled switch" size="
|
|
91
|
+
<btu-switch id="programmatic-switch" label="Controlled switch" size="md"></btu-switch>
|
|
92
92
|
<button
|
|
93
|
-
class="btu-button btu-button
|
|
93
|
+
class="btu-button-sm btu-button"
|
|
94
94
|
@click=${()=>{const e=document.getElementById("programmatic-switch");e&&(e.checked=!e.checked)}}
|
|
95
95
|
>
|
|
96
96
|
Toggle externally
|
|
@@ -176,10 +176,10 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
-
}`,...u.parameters?.docs?.source}}};
|
|
179
|
+
}`,...u.parameters?.docs?.source}}};b.parameters={...b.parameters,docs:{...b.parameters?.docs,source:{originalSource:`{
|
|
180
180
|
render: () => html\`
|
|
181
181
|
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
182
|
-
\${(['
|
|
182
|
+
\${(['sm', 'md', 'lg'] as const).map(size => html\`
|
|
183
183
|
<btu-switch size=\${size} label="\${size} with icons" on-icon="check" off-icon="x" checked></btu-switch>
|
|
184
184
|
\`)}
|
|
185
185
|
</div>
|
|
@@ -191,20 +191,20 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
|
-
}`,...
|
|
194
|
+
}`,...b.parameters?.docs?.source}}};m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
|
|
195
195
|
render: () => html\`
|
|
196
196
|
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
197
|
-
\${(['
|
|
197
|
+
\${(['sm', 'md', 'lg'] as const).map(size => html\` <btu-switch size=\${size} label="\${size} size" checked></btu-switch> \`)}
|
|
198
198
|
</div>
|
|
199
199
|
\`,
|
|
200
200
|
parameters: {
|
|
201
201
|
docs: {
|
|
202
202
|
description: {
|
|
203
|
-
story: 'The three available size variants: \`
|
|
203
|
+
story: 'The three available size variants: \`sm\` (default), \`md\`, and \`lg\`.'
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
|
-
}`,...
|
|
207
|
+
}`,...m.parameters?.docs?.source}}};p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
|
|
208
208
|
render: () => html\`
|
|
209
209
|
<div class="flex flex-col gap-6">
|
|
210
210
|
<div class="flex flex-col gap-2">
|
|
@@ -264,7 +264,7 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
264
264
|
<btu-switch label="Email notifications" name="email" checked></btu-switch>
|
|
265
265
|
<btu-switch label="SMS notifications" name="sms"></btu-switch>
|
|
266
266
|
<btu-switch label="Push notifications" name="push" checked></btu-switch>
|
|
267
|
-
<button type="submit" class="btu-button btu-button
|
|
267
|
+
<button type="submit" class="btu-button-sm btu-button w-fit">Submit</button>
|
|
268
268
|
<pre class="form-output text-xs text-gray-600"></pre>
|
|
269
269
|
</form>
|
|
270
270
|
</div>
|
|
@@ -281,9 +281,9 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
281
281
|
<div class="flex flex-col gap-2">
|
|
282
282
|
<strong>Programmatic control:</strong>
|
|
283
283
|
<div class="flex items-center gap-4">
|
|
284
|
-
<btu-switch id="programmatic-switch" label="Controlled switch" size="
|
|
284
|
+
<btu-switch id="programmatic-switch" label="Controlled switch" size="md"></btu-switch>
|
|
285
285
|
<button
|
|
286
|
-
class="btu-button btu-button
|
|
286
|
+
class="btu-button-sm btu-button"
|
|
287
287
|
@click=\${() => {
|
|
288
288
|
const sw = document.getElementById('programmatic-switch') as HTMLElement & {
|
|
289
289
|
checked: boolean;
|
|
@@ -309,4 +309,4 @@ import{g as k,x as c}from"./iframe-BqvwP3or.js";import{o as s}from"./if-defined-
|
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
311
|
}
|
|
312
|
-
}`,...p.parameters?.docs?.source}}};const D=["Default","Checked","WithDescription","Disabled","DisabledChecked","LabelStart","WithIcons","WithIconsSizes","Sizes","AdvancedUsage"];export{p as AdvancedUsage,a as Checked,i as Default,l as Disabled,d as DisabledChecked,h as LabelStart,
|
|
312
|
+
}`,...p.parameters?.docs?.source}}};const D=["Default","Checked","WithDescription","Disabled","DisabledChecked","LabelStart","WithIcons","WithIconsSizes","Sizes","AdvancedUsage"];export{p as AdvancedUsage,a as Checked,i as Default,l as Disabled,d as DisabledChecked,h as LabelStart,m as Sizes,r as WithDescription,u as WithIcons,b as WithIconsSizes,D as __namedExportsOrder,L as default};
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import{g as u,x as e}from"./iframe-Sf9RHZFu.js";import{o as d}from"./style-map-B99QiqCo.js";import"./preload-helper-PPVm8Dsz.js";const{events:c,args:m,argTypes:t}=u("btu-tab"),y={title:"Components/Tabs/Tab",component:"btu-tab",tags:["autodocs"],parameters:{docs:{subtitle:"btu-tab",description:{component:`
|
|
2
|
+
An individual tab within a \`btu-tabs\` group.
|
|
3
|
+
|
|
4
|
+
Renders a button with \`role="tab"\` that participates in keyboard navigation and selection state managed by the parent \`btu-tabs\` container.
|
|
5
|
+
|
|
6
|
+
<h3>Props managed by btu-tabs:</h3>
|
|
7
|
+
<p><code>size</code> and active state are propagated from the parent — do not set them directly.</p>
|
|
8
|
+
`}},actions:{handles:c},controls:{expanded:!0}},args:{...m,label:"Main",name:"main",symbol:"",badge:void 0},argTypes:{...t,size:{table:{disable:!0}},"--badge-color-background":{table:{disable:!0}},"--badge-color-foreground":{table:{disable:!0}},label:{...t.label,control:{type:"text"},description:"Text displayed in the tab."},description:{...t.description,control:{type:"text"},description:"Accessibility description for screen readers (`aria-description`)."},disabled:{...t.disabled,control:{type:"boolean"},description:"Whether the tab is disabled and non-interactive."},symbol:{...t.symbol,control:{type:"text"},description:"Lucide icon name to display."},"icon-position":{...t["icon-position"],control:{type:"select"},options:["leading","trailing"],description:"Placement of the icon relative to the label."},"icon-only":{...t["icon-only"],control:{type:"boolean"},description:'When true, hides the label visually while maintaining accessibility. Intended for use with `variant="full"` only.'},error:{...t.error,control:{type:"boolean"},description:"When true, displays an error badge on the tab."},badge:{...t.badge,control:{type:"text"},description:'Displays a badge with the given value alongside the label. Intended for use with `variant="full"` only.'},customBadgeBackground:{name:"--badge-color-background",control:{type:"color"},description:"Background color of the count badge (default: gray-50)",table:{category:"css properties"}},customBadgeForeground:{name:"--badge-color-foreground",control:{type:"color"},description:"Text color of the count badge (default: gray-700)",table:{category:"css properties"}}},render:a=>{const i={};return a.customBadgeBackground&&(i["--badge-color-background"]=a.customBadgeBackground),a.customBadgeForeground&&(i["--badge-color-foreground"]=a.customBadgeForeground),e`
|
|
9
|
+
<btu-tabs size="md" active-tab="main" style=${d(i)}>
|
|
10
|
+
<btu-tab
|
|
11
|
+
name="main"
|
|
12
|
+
label="${a.label}"
|
|
13
|
+
?disabled="${a.disabled}"
|
|
14
|
+
.symbol="${a.symbol||""}"
|
|
15
|
+
.iconPosition="${a["icon-position"]||"leading"}"
|
|
16
|
+
.iconOnly="${a["icon-only"]??!1}"
|
|
17
|
+
?error="${a.error}"
|
|
18
|
+
.badge="${a.badge}"
|
|
19
|
+
description="${a.description||""}"
|
|
20
|
+
></btu-tab>
|
|
21
|
+
<btu-tab name="other" label="Other"></btu-tab>
|
|
22
|
+
</btu-tabs>
|
|
23
|
+
`}},b={args:{}},n={render:()=>e`
|
|
24
|
+
<div class="flex flex-col gap-8">
|
|
25
|
+
<btu-tabs size="md" active-tab="dashboard">
|
|
26
|
+
<btu-tab name="dashboard" label="Dashboard" symbol="layout-dashboard"></btu-tab>
|
|
27
|
+
<btu-tab name="search" label="Search" symbol="search"></btu-tab>
|
|
28
|
+
<btu-tab name="settings" label="Settings" symbol="settings" icon-position="trailing"></btu-tab>
|
|
29
|
+
</btu-tabs>
|
|
30
|
+
<btu-tabs size="md" variant="menu" active-tab="dashboard">
|
|
31
|
+
<btu-tab name="dashboard" label="Dashboard" symbol="layout-dashboard"></btu-tab>
|
|
32
|
+
<btu-tab name="search" label="Search" symbol="search"></btu-tab>
|
|
33
|
+
<btu-tab name="settings" label="Settings" symbol="settings" icon-position="trailing"></btu-tab>
|
|
34
|
+
</btu-tabs>
|
|
35
|
+
</div>
|
|
36
|
+
`,parameters:{docs:{description:{story:"Set `symbol` to any Lucide icon name. Use `icon-position` to place the icon before (default) or after the label."}}}},o={render:()=>e`
|
|
37
|
+
<btu-tabs size="md" active-tab="dashboard">
|
|
38
|
+
<btu-tab name="dashboard" label="Dashboard" symbol="layout-dashboard" icon-only></btu-tab>
|
|
39
|
+
<btu-tab name="search" label="Search" symbol="search" icon-only></btu-tab>
|
|
40
|
+
<btu-tab name="settings" label="Settings" symbol="settings" icon-only></btu-tab>
|
|
41
|
+
<btu-tab name="help" label="Help" symbol="circle-help" icon-only></btu-tab>
|
|
42
|
+
</btu-tabs>
|
|
43
|
+
`,parameters:{docs:{description:{story:'Set `icon-only` to visually hide the label while keeping it accessible via `aria-label`. Intended for use with `variant="full"` only — the `menu` variant always shows the label text.'}}}},r={render:()=>e`
|
|
44
|
+
<btu-tabs size="md" active-tab="inbox">
|
|
45
|
+
<btu-tab name="inbox" label="Inbox" badge="12"></btu-tab>
|
|
46
|
+
<btu-tab name="drafts" label="Drafts" badge="3"></btu-tab>
|
|
47
|
+
<btu-tab name="sent" label="Sent"></btu-tab>
|
|
48
|
+
<btu-tab name="spam" label="Spam" badge="99+"></btu-tab>
|
|
49
|
+
<btu-tab
|
|
50
|
+
name="primary"
|
|
51
|
+
label="Primary"
|
|
52
|
+
badge="5"
|
|
53
|
+
style=${d({"--badge-color-background":"oklch(var(--btu-theme-primary-50))","--badge-color-foreground":"oklch(var(--btu-theme-primary-700))"})}
|
|
54
|
+
></btu-tab>
|
|
55
|
+
<btu-tab
|
|
56
|
+
name="error"
|
|
57
|
+
label="Error"
|
|
58
|
+
badge="2"
|
|
59
|
+
style=${d({"--badge-color-background":"oklch(var(--btu-theme-error-50))","--badge-color-foreground":"oklch(var(--btu-theme-error-700))"})}
|
|
60
|
+
></btu-tab>
|
|
61
|
+
</btu-tabs>
|
|
62
|
+
`,parameters:{docs:{description:{story:'Set `badge` to display a numeric or text badge alongside the label. Defaults to a gray badge (gray-50 background, gray-700 text). Use `--badge-color-background` and `--badge-color-foreground` to customize — inline on a specific `btu-tab` to scope it, or on `btu-tabs` to apply to all. Intended for use with `variant="full"` only.'}}}},s={render:()=>e`
|
|
63
|
+
<div class="flex flex-col gap-8">
|
|
64
|
+
<btu-tabs size="md" active-tab="main">
|
|
65
|
+
<btu-tab name="main" label="Main" error></btu-tab>
|
|
66
|
+
<btu-tab name="seo" label="SEO"></btu-tab>
|
|
67
|
+
<btu-tab name="overrides" label="Overrides"></btu-tab>
|
|
68
|
+
<btu-tab name="styles" label="Styles" error></btu-tab>
|
|
69
|
+
</btu-tabs>
|
|
70
|
+
<btu-tabs size="md" variant="menu" active-tab="main">
|
|
71
|
+
<btu-tab name="main" label="Main" error></btu-tab>
|
|
72
|
+
<btu-tab name="seo" label="SEO"></btu-tab>
|
|
73
|
+
<btu-tab name="overrides" label="Overrides"></btu-tab>
|
|
74
|
+
<btu-tab name="styles" label="Styles" error></btu-tab>
|
|
75
|
+
</btu-tabs>
|
|
76
|
+
</div>
|
|
77
|
+
`,parameters:{docs:{description:{story:"Set `error` to show a badge indicating the tab content has validation errors. When the tab is active, the indicator underline also turns red. In `menu` variant, the error badge appears next to the active tab label and on items in the dropdown."}}}},l={render:()=>e`
|
|
78
|
+
<div class="flex flex-col gap-8">
|
|
79
|
+
<btu-tabs size="md" active-tab="main">
|
|
80
|
+
<btu-tab name="main" label="Main"></btu-tab>
|
|
81
|
+
<btu-tab name="seo" label="SEO"></btu-tab>
|
|
82
|
+
<btu-tab name="overrides" label="Overrides" disabled></btu-tab>
|
|
83
|
+
<btu-tab name="styles" label="Styles"></btu-tab>
|
|
84
|
+
<btu-tab name="api" label="API" disabled></btu-tab>
|
|
85
|
+
</btu-tabs>
|
|
86
|
+
<btu-tabs size="md" variant="menu" active-tab="main">
|
|
87
|
+
<btu-tab name="main" label="Main"></btu-tab>
|
|
88
|
+
<btu-tab name="seo" label="SEO"></btu-tab>
|
|
89
|
+
<btu-tab name="overrides" label="Overrides" disabled></btu-tab>
|
|
90
|
+
<btu-tab name="styles" label="Styles"></btu-tab>
|
|
91
|
+
<btu-tab name="api" label="API" disabled></btu-tab>
|
|
92
|
+
</btu-tabs>
|
|
93
|
+
</div>
|
|
94
|
+
`,parameters:{docs:{description:{story:"Set `disabled` to make a tab non-interactive. Disabled tabs remain focusable for keyboard navigation but cannot be activated."}}}};b.parameters={...b.parameters,docs:{...b.parameters?.docs,source:{originalSource:`{
|
|
95
|
+
args: {}
|
|
96
|
+
}`,...b.parameters?.docs?.source}}};n.parameters={...n.parameters,docs:{...n.parameters?.docs,source:{originalSource:`{
|
|
97
|
+
render: () => html\`
|
|
98
|
+
<div class="flex flex-col gap-8">
|
|
99
|
+
<btu-tabs size="md" active-tab="dashboard">
|
|
100
|
+
<btu-tab name="dashboard" label="Dashboard" symbol="layout-dashboard"></btu-tab>
|
|
101
|
+
<btu-tab name="search" label="Search" symbol="search"></btu-tab>
|
|
102
|
+
<btu-tab name="settings" label="Settings" symbol="settings" icon-position="trailing"></btu-tab>
|
|
103
|
+
</btu-tabs>
|
|
104
|
+
<btu-tabs size="md" variant="menu" active-tab="dashboard">
|
|
105
|
+
<btu-tab name="dashboard" label="Dashboard" symbol="layout-dashboard"></btu-tab>
|
|
106
|
+
<btu-tab name="search" label="Search" symbol="search"></btu-tab>
|
|
107
|
+
<btu-tab name="settings" label="Settings" symbol="settings" icon-position="trailing"></btu-tab>
|
|
108
|
+
</btu-tabs>
|
|
109
|
+
</div>
|
|
110
|
+
\`,
|
|
111
|
+
parameters: {
|
|
112
|
+
docs: {
|
|
113
|
+
description: {
|
|
114
|
+
story: 'Set \`symbol\` to any Lucide icon name. Use \`icon-position\` to place the icon before (default) or after the label.'
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}`,...n.parameters?.docs?.source}}};o.parameters={...o.parameters,docs:{...o.parameters?.docs,source:{originalSource:`{
|
|
119
|
+
render: () => html\`
|
|
120
|
+
<btu-tabs size="md" active-tab="dashboard">
|
|
121
|
+
<btu-tab name="dashboard" label="Dashboard" symbol="layout-dashboard" icon-only></btu-tab>
|
|
122
|
+
<btu-tab name="search" label="Search" symbol="search" icon-only></btu-tab>
|
|
123
|
+
<btu-tab name="settings" label="Settings" symbol="settings" icon-only></btu-tab>
|
|
124
|
+
<btu-tab name="help" label="Help" symbol="circle-help" icon-only></btu-tab>
|
|
125
|
+
</btu-tabs>
|
|
126
|
+
\`,
|
|
127
|
+
parameters: {
|
|
128
|
+
docs: {
|
|
129
|
+
description: {
|
|
130
|
+
story: 'Set \`icon-only\` to visually hide the label while keeping it accessible via \`aria-label\`. Intended for use with \`variant="full"\` only — the \`menu\` variant always shows the label text.'
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}`,...o.parameters?.docs?.source}}};r.parameters={...r.parameters,docs:{...r.parameters?.docs,source:{originalSource:`{
|
|
135
|
+
render: () => html\`
|
|
136
|
+
<btu-tabs size="md" active-tab="inbox">
|
|
137
|
+
<btu-tab name="inbox" label="Inbox" badge="12"></btu-tab>
|
|
138
|
+
<btu-tab name="drafts" label="Drafts" badge="3"></btu-tab>
|
|
139
|
+
<btu-tab name="sent" label="Sent"></btu-tab>
|
|
140
|
+
<btu-tab name="spam" label="Spam" badge="99+"></btu-tab>
|
|
141
|
+
<btu-tab
|
|
142
|
+
name="primary"
|
|
143
|
+
label="Primary"
|
|
144
|
+
badge="5"
|
|
145
|
+
style=\${styleMap({
|
|
146
|
+
'--badge-color-background': 'oklch(var(--btu-theme-primary-50))',
|
|
147
|
+
'--badge-color-foreground': 'oklch(var(--btu-theme-primary-700))'
|
|
148
|
+
})}
|
|
149
|
+
></btu-tab>
|
|
150
|
+
<btu-tab
|
|
151
|
+
name="error"
|
|
152
|
+
label="Error"
|
|
153
|
+
badge="2"
|
|
154
|
+
style=\${styleMap({
|
|
155
|
+
'--badge-color-background': 'oklch(var(--btu-theme-error-50))',
|
|
156
|
+
'--badge-color-foreground': 'oklch(var(--btu-theme-error-700))'
|
|
157
|
+
})}
|
|
158
|
+
></btu-tab>
|
|
159
|
+
</btu-tabs>
|
|
160
|
+
\`,
|
|
161
|
+
parameters: {
|
|
162
|
+
docs: {
|
|
163
|
+
description: {
|
|
164
|
+
story: 'Set \`badge\` to display a numeric or text badge alongside the label. Defaults to a gray badge (gray-50 background, gray-700 text). Use \`--badge-color-background\` and \`--badge-color-foreground\` to customize — inline on a specific \`btu-tab\` to scope it, or on \`btu-tabs\` to apply to all. Intended for use with \`variant="full"\` only.'
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}`,...r.parameters?.docs?.source}}};s.parameters={...s.parameters,docs:{...s.parameters?.docs,source:{originalSource:`{
|
|
169
|
+
render: () => html\`
|
|
170
|
+
<div class="flex flex-col gap-8">
|
|
171
|
+
<btu-tabs size="md" active-tab="main">
|
|
172
|
+
<btu-tab name="main" label="Main" error></btu-tab>
|
|
173
|
+
<btu-tab name="seo" label="SEO"></btu-tab>
|
|
174
|
+
<btu-tab name="overrides" label="Overrides"></btu-tab>
|
|
175
|
+
<btu-tab name="styles" label="Styles" error></btu-tab>
|
|
176
|
+
</btu-tabs>
|
|
177
|
+
<btu-tabs size="md" variant="menu" active-tab="main">
|
|
178
|
+
<btu-tab name="main" label="Main" error></btu-tab>
|
|
179
|
+
<btu-tab name="seo" label="SEO"></btu-tab>
|
|
180
|
+
<btu-tab name="overrides" label="Overrides"></btu-tab>
|
|
181
|
+
<btu-tab name="styles" label="Styles" error></btu-tab>
|
|
182
|
+
</btu-tabs>
|
|
183
|
+
</div>
|
|
184
|
+
\`,
|
|
185
|
+
parameters: {
|
|
186
|
+
docs: {
|
|
187
|
+
description: {
|
|
188
|
+
story: 'Set \`error\` to show a badge indicating the tab content has validation errors. When the tab is active, the indicator underline also turns red. In \`menu\` variant, the error badge appears next to the active tab label and on items in the dropdown.'
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}`,...s.parameters?.docs?.source}}};l.parameters={...l.parameters,docs:{...l.parameters?.docs,source:{originalSource:`{
|
|
193
|
+
render: () => html\`
|
|
194
|
+
<div class="flex flex-col gap-8">
|
|
195
|
+
<btu-tabs size="md" active-tab="main">
|
|
196
|
+
<btu-tab name="main" label="Main"></btu-tab>
|
|
197
|
+
<btu-tab name="seo" label="SEO"></btu-tab>
|
|
198
|
+
<btu-tab name="overrides" label="Overrides" disabled></btu-tab>
|
|
199
|
+
<btu-tab name="styles" label="Styles"></btu-tab>
|
|
200
|
+
<btu-tab name="api" label="API" disabled></btu-tab>
|
|
201
|
+
</btu-tabs>
|
|
202
|
+
<btu-tabs size="md" variant="menu" active-tab="main">
|
|
203
|
+
<btu-tab name="main" label="Main"></btu-tab>
|
|
204
|
+
<btu-tab name="seo" label="SEO"></btu-tab>
|
|
205
|
+
<btu-tab name="overrides" label="Overrides" disabled></btu-tab>
|
|
206
|
+
<btu-tab name="styles" label="Styles"></btu-tab>
|
|
207
|
+
<btu-tab name="api" label="API" disabled></btu-tab>
|
|
208
|
+
</btu-tabs>
|
|
209
|
+
</div>
|
|
210
|
+
\`,
|
|
211
|
+
parameters: {
|
|
212
|
+
docs: {
|
|
213
|
+
description: {
|
|
214
|
+
story: 'Set \`disabled\` to make a tab non-interactive. Disabled tabs remain focusable for keyboard navigation but cannot be activated.'
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}`,...l.parameters?.docs?.source}}};const v=["Default","WithIcon","IconOnly","WithBadge","WithError","Disabled"];export{b as Default,l as Disabled,o as IconOnly,r as WithBadge,s as WithError,n as WithIcon,v as __namedExportsOrder,y as default};
|