@brightspot/ui 1.9.0 → 1.11.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.
Files changed (178) hide show
  1. package/dist/components/action-bar/ActionBar.d.ts +163 -0
  2. package/dist/components/action-bar/ActionBar.d.ts.map +1 -0
  3. package/dist/components/action-bar/ActionBar.js +479 -0
  4. package/dist/components/action-bar/ActionBar.js.map +1 -0
  5. package/dist/components/action-bar/ActionItem.d.ts +103 -0
  6. package/dist/components/action-bar/ActionItem.d.ts.map +1 -0
  7. package/dist/components/action-bar/ActionItem.js +237 -0
  8. package/dist/components/action-bar/ActionItem.js.map +1 -0
  9. package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts.map +1 -1
  10. package/dist/components/copy-to-clipboard/CopyToClipboard.js +4 -0
  11. package/dist/components/copy-to-clipboard/CopyToClipboard.js.map +1 -1
  12. package/dist/components/dropdown/Dropdown.d.ts +3 -1
  13. package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
  14. package/dist/components/dropdown/Dropdown.js +22 -6
  15. package/dist/components/dropdown/Dropdown.js.map +1 -1
  16. package/dist/components/dropdown/DropdownItem.d.ts +14 -1
  17. package/dist/components/dropdown/DropdownItem.d.ts.map +1 -1
  18. package/dist/components/dropdown/DropdownItem.js +20 -1
  19. package/dist/components/dropdown/DropdownItem.js.map +1 -1
  20. package/dist/components/dropdown/DropdownMenu.d.ts +3 -5
  21. package/dist/components/dropdown/DropdownMenu.d.ts.map +1 -1
  22. package/dist/components/dropdown/DropdownMenu.js +17 -32
  23. package/dist/components/dropdown/DropdownMenu.js.map +1 -1
  24. package/dist/components/pagination/Pagination.d.ts +33 -4
  25. package/dist/components/pagination/Pagination.d.ts.map +1 -1
  26. package/dist/components/pagination/Pagination.js +80 -16
  27. package/dist/components/pagination/Pagination.js.map +1 -1
  28. package/dist/components/switch/Switch.d.ts +92 -0
  29. package/dist/components/switch/Switch.d.ts.map +1 -0
  30. package/dist/components/switch/Switch.js +189 -0
  31. package/dist/components/switch/Switch.js.map +1 -0
  32. package/dist/components/tabs/Tab.d.ts +108 -0
  33. package/dist/components/tabs/Tab.d.ts.map +1 -0
  34. package/dist/components/tabs/Tab.js +152 -0
  35. package/dist/components/tabs/Tab.js.map +1 -0
  36. package/dist/components/tabs/Tabs.d.ts +126 -0
  37. package/dist/components/tabs/Tabs.d.ts.map +1 -0
  38. package/dist/components/tabs/Tabs.js +390 -0
  39. package/dist/components/tabs/Tabs.js.map +1 -0
  40. package/dist/custom-elements.json +2736 -1390
  41. package/dist/effects/celebrate.d.ts +18 -0
  42. package/dist/effects/celebrate.d.ts.map +1 -0
  43. package/dist/effects/celebrate.js +81 -0
  44. package/dist/effects/celebrate.js.map +1 -0
  45. package/dist/effects/ripple.d.ts +31 -0
  46. package/dist/effects/ripple.d.ts.map +1 -0
  47. package/dist/effects/ripple.js +131 -0
  48. package/dist/effects/ripple.js.map +1 -0
  49. package/dist/effects/sparkle-worklet.d.ts +7 -0
  50. package/dist/effects/sparkle-worklet.d.ts.map +1 -0
  51. package/dist/effects/sparkle-worklet.js +211 -0
  52. package/dist/effects/sparkle-worklet.js.map +1 -0
  53. package/dist/effects/sparkle.d.ts +6 -0
  54. package/dist/effects/sparkle.d.ts.map +1 -0
  55. package/dist/effects/sparkle.js +91 -0
  56. package/dist/effects/sparkle.js.map +1 -0
  57. package/dist/storybook/BSPLogoMark.svg +3 -0
  58. package/dist/storybook/WelcomeBG.svg +292 -0
  59. package/dist/storybook/assets/ActionBar.stories--nAeDC-G.js +408 -0
  60. package/dist/storybook/assets/ActionItem.stories-BHrGjk-P.js +203 -0
  61. package/dist/storybook/assets/{Avatar.stories-Du1qM73U.js → Avatar.stories-Da-mRj6_.js} +1 -1
  62. package/dist/storybook/assets/{AvatarGroup.stories-DxwZQE-q.js → AvatarGroup.stories-BQlaC_yl.js} +1 -1
  63. package/dist/storybook/assets/{Badge.stories-CfvkMIx2.js → Badge.stories-DnVnOrnF.js} +1 -1
  64. package/dist/storybook/assets/Button-CFLAI1H9.js +10 -0
  65. package/dist/storybook/assets/Button.stories-DxaBOjwv.js +54 -0
  66. package/dist/storybook/assets/Celebrate.stories-CuMm15Nr.js +184 -0
  67. package/dist/storybook/assets/{CircularProgress.stories-rPzKwQYD.js → CircularProgress.stories-DRN8Mtvj.js} +1 -1
  68. package/dist/storybook/assets/{ClipboardMixin.stories-BlUeYDSi.js → ClipboardMixin.stories-DR7Ou2Av.js} +1 -1
  69. package/dist/storybook/assets/Color-6BZIO3FS-Die62Y0Z.js +1 -0
  70. package/dist/storybook/assets/{Colors.stories-BspfjZ5q.js → Colors.stories-bIq_ssbI.js} +1 -1
  71. package/dist/storybook/assets/CombinedEffects.stories-CtKzOUZn.js +355 -0
  72. package/dist/storybook/assets/{ComponentStatesMixin-eTV7XXqB.js → ComponentStatesMixin-DMLCk9fE.js} +1 -1
  73. package/dist/storybook/assets/{ComponentStatesMixin.stories-BbLSY3df.js → ComponentStatesMixin.stories-D8UI9o-d.js} +1 -1
  74. package/dist/storybook/assets/{CopyToClipboard.stories-B2ailiFF.js → CopyToClipboard.stories-ti6CpJNp.js} +1 -1
  75. package/dist/storybook/assets/{Debounce.stories-DJmp4eNo.js → Debounce.stories-DzZUSvbk.js} +1 -1
  76. package/dist/storybook/assets/DocsRenderer-LL677BLK-CIRGv5IX.js +10 -0
  77. package/dist/storybook/assets/{Dropdown.stories-Dd6vKiDd.js → Dropdown.stories-Lt4cY0Re.js} +41 -14
  78. package/dist/storybook/assets/{Events.stories-Byj-VOM9.js → Events.stories-B1ddcgpT.js} +1 -1
  79. package/dist/storybook/assets/{Heading.stories-Dqw-wzpx.js → Heading.stories-DI4w61cf.js} +1 -1
  80. package/dist/storybook/assets/HueRipple.stories-DjhoxxEw.js +310 -0
  81. package/dist/storybook/assets/{Icon.stories-Bp1nvWER.js → Icon.stories-CpziAhae.js} +1 -1
  82. package/dist/storybook/assets/{IconButton.stories-o9g9mGdh.js → IconButton.stories-KjN28hfc.js} +1 -1
  83. package/dist/storybook/assets/{LinearProgress.stories-DnXQVpzX.js → LinearProgress.stories-DcIpdz6R.js} +1 -1
  84. package/dist/storybook/assets/Pagination.stories-BBkLEwoP.js +252 -0
  85. package/dist/storybook/assets/{Popover.stories-BvavsRfq.js → Popover.stories-DLv48c2h.js} +3 -11
  86. package/dist/storybook/assets/{ReadyMixin-6On1MFFr.js → ReadyMixin-Cw2Dfbu2.js} +1 -1
  87. package/dist/storybook/assets/RovingTabindexMixin.stories-BWaFx9mu.js +192 -0
  88. package/dist/storybook/assets/{Rtc.stories-Bb5Y-908.js → Rtc.stories-Ve7Bwo_l.js} +1 -1
  89. package/dist/storybook/assets/ScrollShadow.stories-C6XmrRLm.js +17 -0
  90. package/dist/storybook/assets/Switch.stories-Cf8WM1LG.js +312 -0
  91. package/dist/storybook/assets/Tab.stories-CEtdEtOx.js +218 -0
  92. package/dist/storybook/assets/Tabs.stories-CIAO1bPO.js +211 -0
  93. package/dist/storybook/assets/{Throttle.stories-DmP-yKke.js → Throttle.stories-BqxVIb-r.js} +1 -1
  94. package/dist/storybook/assets/{Tooltip.stories-Dl6xHBaM.js → Tooltip.stories-B6fw6875.js} +3 -7
  95. package/dist/storybook/assets/Welcome.stories-CfJtSM19.js +215 -0
  96. package/dist/storybook/assets/{Widget.stories-BjXfgNjZ.js → Widget.stories-CiOho7lO.js} +1 -1
  97. package/dist/storybook/assets/WithTooltip-65CFNBJE-PGcopp73.js +9 -0
  98. package/dist/storybook/assets/blocks-dP2DwISI.js +707 -0
  99. package/dist/storybook/assets/celebrate-KwPoF1K3.js +21 -0
  100. package/dist/storybook/assets/formatter-EIJCOSYU-CZSAC3tg.js +1 -0
  101. package/dist/storybook/assets/if-defined-B1RdczOE.js +1 -0
  102. package/dist/storybook/assets/iframe-DloIUNZz.js +1104 -0
  103. package/dist/storybook/assets/{iframe-CNxIA3cQ.css → iframe-bJgLXZKK.css} +1 -1
  104. package/dist/storybook/assets/index-DKF0ypu5.js +1 -0
  105. package/dist/storybook/assets/onFind-C0l4Gew0.js +1 -0
  106. package/dist/storybook/assets/{onFind.stories-B2GYLrjV.js → onFind.stories-DOTt9puO.js} +2 -2
  107. package/dist/storybook/assets/{onRemove.stories-CoLJFkWa.js → onRemove.stories-CQ9ZC5dm.js} +1 -1
  108. package/dist/storybook/assets/{onVisible.stories-DOeZx7wi.js → onVisible.stories-Cbj5_Vz0.js} +2 -2
  109. package/dist/storybook/assets/position-CFNQy3J6.js +1 -0
  110. package/dist/storybook/assets/ripple-DQbyyRUw.js +251 -0
  111. package/dist/storybook/assets/style-map-DLXysq3r.js +1 -0
  112. package/dist/storybook/assets/syntaxhighlighter-ED5Y7EFY-Bjjbl9ca.js +6 -0
  113. package/dist/storybook/brightspot-logo.svg +19 -0
  114. package/dist/storybook/iframe.html +23 -3
  115. package/dist/storybook/index.html +42 -1
  116. package/dist/storybook/index.json +1 -1
  117. package/dist/storybook/project.json +1 -1
  118. package/dist/storybook/sb-addons/storybook-3/manager-bundle.js +3 -0
  119. package/dist/tailwind-plugin-action-bar.d.ts +2 -0
  120. package/dist/tailwind-plugin-action-bar.d.ts.map +1 -0
  121. package/dist/tailwind-plugin-action-bar.js +120 -0
  122. package/dist/tailwind-plugin-action-bar.js.map +1 -0
  123. package/dist/tailwind-plugin-action-bar.ts +134 -0
  124. package/dist/tailwind-plugin-badge.js +4 -5
  125. package/dist/tailwind-plugin-badge.js.map +1 -1
  126. package/dist/tailwind-plugin-badge.ts +4 -5
  127. package/dist/tailwind-plugin-button.js +1 -0
  128. package/dist/tailwind-plugin-button.js.map +1 -1
  129. package/dist/tailwind-plugin-button.ts +1 -0
  130. package/dist/tailwind-plugin-pagination.js +13 -23
  131. package/dist/tailwind-plugin-pagination.js.map +1 -1
  132. package/dist/tailwind-plugin-pagination.ts +15 -25
  133. package/dist/tailwind-plugin-switch.d.ts +2 -0
  134. package/dist/tailwind-plugin-switch.d.ts.map +1 -0
  135. package/dist/tailwind-plugin-switch.js +223 -0
  136. package/dist/tailwind-plugin-switch.js.map +1 -0
  137. package/dist/tailwind-plugin-switch.ts +252 -0
  138. package/dist/tailwind-plugin-tabs.d.ts +2 -0
  139. package/dist/tailwind-plugin-tabs.d.ts.map +1 -0
  140. package/dist/tailwind-plugin-tabs.js +151 -0
  141. package/dist/tailwind-plugin-tabs.js.map +1 -0
  142. package/dist/tailwind-plugin-tabs.ts +162 -0
  143. package/dist/util/EventEmitterMixin.d.ts +21 -0
  144. package/dist/util/EventEmitterMixin.d.ts.map +1 -1
  145. package/dist/util/EventEmitterMixin.js.map +1 -1
  146. package/dist/util/RovingTabindexMixin.d.ts +38 -0
  147. package/dist/util/RovingTabindexMixin.d.ts.map +1 -0
  148. package/dist/util/RovingTabindexMixin.js +83 -0
  149. package/dist/util/RovingTabindexMixin.js.map +1 -0
  150. package/dist/util/position.d.ts +9 -0
  151. package/dist/util/position.d.ts.map +1 -0
  152. package/dist/util/position.js +11 -0
  153. package/dist/util/position.js.map +1 -0
  154. package/docs/components/ActionBar.md +71 -0
  155. package/docs/components/ActionItem.md +76 -0
  156. package/docs/components/Dropdown.md +7 -7
  157. package/docs/components/DropdownItem.md +9 -5
  158. package/docs/components/DropdownMenu.md +12 -12
  159. package/docs/components/Pagination.md +37 -34
  160. package/docs/components/README.md +5 -0
  161. package/docs/components/Switch.md +79 -0
  162. package/docs/components/Tab.md +73 -0
  163. package/docs/components/Tabs.md +77 -0
  164. package/package.json +2 -1
  165. package/dist/storybook/assets/Button.stories-hDMDDh81.js +0 -63
  166. package/dist/storybook/assets/Color-6BZIO3FS-C_nQSB2u.js +0 -1
  167. package/dist/storybook/assets/DocsRenderer-LL677BLK-56Pige1J.js +0 -758
  168. package/dist/storybook/assets/Pagination.stories-DQD8uvDc.js +0 -272
  169. package/dist/storybook/assets/ScrollShadow.stories-ZovRXpte.js +0 -17
  170. package/dist/storybook/assets/WithTooltip-65CFNBJE-CGB5q-AN.js +0 -9
  171. package/dist/storybook/assets/_commonjsHelpers-CqkleIqs.js +0 -1
  172. package/dist/storybook/assets/formatter-EIJCOSYU-BhNtSFM9.js +0 -1
  173. package/dist/storybook/assets/if-defined-BFyUeSVF.js +0 -1
  174. package/dist/storybook/assets/iframe-BeKreX-l.js +0 -1061
  175. package/dist/storybook/assets/index-Uz2kGy8J.js +0 -1
  176. package/dist/storybook/assets/onFind-DqriYjEB.js +0 -1
  177. package/dist/storybook/assets/style-map-CmHqpCu1.js +0 -1
  178. package/dist/storybook/assets/syntaxhighlighter-ED5Y7EFY-BqFfcc7x.js +0 -6
@@ -0,0 +1,312 @@
1
+ import{g as k,x as c}from"./iframe-DloIUNZz.js";import{o as s}from"./if-defined-B1RdczOE.js";import{o as f}from"./style-map-DLXysq3r.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
+ <h3>When to use:</h3>
3
+ <ul>
4
+ <li>For toggling a setting or preference on/off</li>
5
+ <li>When the effect of the change is immediate or near-immediate</li>
6
+ <li>As an alternative to a single checkbox for boolean options</li>
7
+ </ul>
8
+
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:"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
+ <btu-switch
12
+ size=${e.size??"small"}
13
+ label=${s(e.label)}
14
+ description=${s(e.description)}
15
+ label-position=${e["label-position"]??"end"}
16
+ on-icon=${s(e["on-icon"])}
17
+ off-icon=${s(e["off-icon"])}
18
+ name=${s(e.name)}
19
+ .checked=${e.checked??!1}
20
+ ?disabled=${e.disabled}
21
+ style=${f(S(e))}
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`)."}}}},m={render:()=>c`
24
+ <div style="display: flex; flex-direction: column; gap: 1rem;">
25
+ ${["small","medium","large"].map(e=>c`
26
+ <btu-switch size=${e} label="${e} with icons" on-icon="check" off-icon="x" checked></btu-switch>
27
+ `)}
28
+ </div>
29
+ `,parameters:{docs:{description:{story:"Track icons scale automatically with the switch size."}}}},b={render:()=>c`
30
+ <div style="display: flex; flex-direction: column; gap: 1rem;">
31
+ ${["small","medium","large"].map(e=>c` <btu-switch size=${e} label="${e} size" checked></btu-switch> `)}
32
+ </div>
33
+ `,parameters:{docs:{description:{story:"The three available size variants: `small` (default), `medium`, and `large`."}}}},p={render:()=>c`
34
+ <div class="flex flex-col gap-6">
35
+ <div class="flex flex-col gap-2">
36
+ <strong>Custom colors:</strong>
37
+ <div class="flex items-center gap-6">
38
+ <btu-switch
39
+ label="Success"
40
+ checked
41
+ style=${f({"--switch-color-track-on":"oklch(var(--btu-theme-success-600))"})}
42
+ ></btu-switch>
43
+ <btu-switch
44
+ label="Warning"
45
+ checked
46
+ style=${f({"--switch-color-track-on":"oklch(var(--btu-theme-warning-500))"})}
47
+ ></btu-switch>
48
+ <btu-switch
49
+ label="Error"
50
+ checked
51
+ style=${f({"--switch-color-track-on":"oklch(var(--btu-theme-error-600))"})}
52
+ ></btu-switch>
53
+ </div>
54
+ </div>
55
+
56
+ <div class="flex flex-col gap-2">
57
+ <strong>Event handling:</strong>
58
+ <btu-switch
59
+ label="Toggle me"
60
+ description="Check the Actions panel to see events"
61
+ @btu-switch-change=${e=>{const t=e.target.querySelector(".btu-switch-description");t&&(t.textContent=e.detail.checked?"Switch is ON":"Switch is OFF")}}
62
+ ></btu-switch>
63
+ </div>
64
+
65
+ <div class="flex flex-col gap-2">
66
+ <strong>Form participation:</strong>
67
+ <form
68
+ class="flex flex-col gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4"
69
+ @submit=${e=>{e.preventDefault();const o=e.target,t=new FormData(o),n=o.querySelector(".form-output");n&&(n.textContent=JSON.stringify(Object.fromEntries(t),null,2))}}
70
+ >
71
+ <btu-switch label="Email notifications" name="email" checked></btu-switch>
72
+ <btu-switch label="SMS notifications" name="sms"></btu-switch>
73
+ <btu-switch label="Push notifications" name="push" checked></btu-switch>
74
+ <button type="submit" class="btu-button btu-button-sm w-fit">Submit</button>
75
+ <pre class="form-output text-xs text-gray-600"></pre>
76
+ </form>
77
+ </div>
78
+
79
+ <div class="flex flex-col gap-2">
80
+ <strong>Track icons:</strong>
81
+ <div class="flex items-center gap-6">
82
+ <btu-switch label="Check / X" on-icon="check" off-icon="x" checked></btu-switch>
83
+ <btu-switch label="Lock" on-icon="lock-open" off-icon="lock"></btu-switch>
84
+ <btu-switch label="Sound" on-icon="volume-2" off-icon="volume-off" checked></btu-switch>
85
+ </div>
86
+ </div>
87
+
88
+ <div class="flex flex-col gap-2">
89
+ <strong>Programmatic control:</strong>
90
+ <div class="flex items-center gap-4">
91
+ <btu-switch id="programmatic-switch" label="Controlled switch" size="medium"></btu-switch>
92
+ <button
93
+ class="btu-button btu-button-sm"
94
+ @click=${()=>{const e=document.getElementById("programmatic-switch");e&&(e.checked=!e.checked)}}
95
+ >
96
+ Toggle externally
97
+ </button>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ `,parameters:{docs:{description:{story:"\n- **Custom colors** via CSS custom properties (`--switch-color-track-on`, `--switch-color-track-off`) using theme tokens.\n- **Event handling** with the `btu-switch-change` event, which provides `{ checked: boolean }` in its detail.\n- **Form participation** using the `name` attribute — the hidden checkbox participates in native form submission.\n- **Track icons** via `on-icon` and `off-icon` attributes using Lucide icon names (e.g., `check`, `x`, `lock`, `volume-2`).\n- **Programmatic control** by setting the `checked` property directly from JavaScript."}}}};i.parameters={...i.parameters,docs:{...i.parameters?.docs,source:{originalSource:`{
102
+ args: {}
103
+ }`,...i.parameters?.docs?.source}}};a.parameters={...a.parameters,docs:{...a.parameters?.docs,source:{originalSource:`{
104
+ args: {
105
+ checked: true,
106
+ label: 'Enabled'
107
+ },
108
+ parameters: {
109
+ docs: {
110
+ description: {
111
+ story: 'Switch in the checked/on state. The track uses \`--switch-color-track-on\` (defaults to primary-700).'
112
+ }
113
+ }
114
+ }
115
+ }`,...a.parameters?.docs?.source}}};r.parameters={...r.parameters,docs:{...r.parameters?.docs,source:{originalSource:`{
116
+ args: {
117
+ label: 'Enable notifications',
118
+ description: 'Receive updates via email',
119
+ checked: true
120
+ },
121
+ parameters: {
122
+ docs: {
123
+ description: {
124
+ story: 'Switch with both a primary label and a secondary description.'
125
+ }
126
+ }
127
+ }
128
+ }`,...r.parameters?.docs?.source}}};l.parameters={...l.parameters,docs:{...l.parameters?.docs,source:{originalSource:`{
129
+ args: {
130
+ label: 'Unavailable option',
131
+ disabled: true
132
+ },
133
+ parameters: {
134
+ docs: {
135
+ description: {
136
+ story: 'Disabled state via the \`disabled\` attribute. The track opacity is reduced and the wrapper cursor changes to \`not-allowed\`.'
137
+ }
138
+ }
139
+ }
140
+ }`,...l.parameters?.docs?.source}}};d.parameters={...d.parameters,docs:{...d.parameters?.docs,source:{originalSource:`{
141
+ args: {
142
+ label: 'Previously enabled',
143
+ disabled: true,
144
+ checked: true
145
+ },
146
+ parameters: {
147
+ docs: {
148
+ description: {
149
+ story: 'Disabled switch in the checked state. Useful for showing a locked-on setting.'
150
+ }
151
+ }
152
+ }
153
+ }`,...d.parameters?.docs?.source}}};h.parameters={...h.parameters,docs:{...h.parameters?.docs,source:{originalSource:`{
154
+ args: {
155
+ label: 'Label on the left',
156
+ 'label-position': 'start'
157
+ },
158
+ parameters: {
159
+ docs: {
160
+ description: {
161
+ story: 'Place the label before the switch using \`label-position="start"\`.'
162
+ }
163
+ }
164
+ }
165
+ }`,...h.parameters?.docs?.source}}};u.parameters={...u.parameters,docs:{...u.parameters?.docs,source:{originalSource:`{
166
+ args: {
167
+ label: 'Notifications',
168
+ checked: true,
169
+ 'on-icon': 'check',
170
+ 'off-icon': 'x'
171
+ },
172
+ parameters: {
173
+ docs: {
174
+ description: {
175
+ story: 'Track icons via \`on-icon\` and \`off-icon\` attributes. Icons use Lucide names (e.g., \`check\`, \`x\`, \`bell\`, \`bell-off\`).'
176
+ }
177
+ }
178
+ }
179
+ }`,...u.parameters?.docs?.source}}};m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
180
+ render: () => html\`
181
+ <div style="display: flex; flex-direction: column; gap: 1rem;">
182
+ \${(['small', 'medium', 'large'] as const).map(size => html\`
183
+ <btu-switch size=\${size} label="\${size} with icons" on-icon="check" off-icon="x" checked></btu-switch>
184
+ \`)}
185
+ </div>
186
+ \`,
187
+ parameters: {
188
+ docs: {
189
+ description: {
190
+ story: 'Track icons scale automatically with the switch size.'
191
+ }
192
+ }
193
+ }
194
+ }`,...m.parameters?.docs?.source}}};b.parameters={...b.parameters,docs:{...b.parameters?.docs,source:{originalSource:`{
195
+ render: () => html\`
196
+ <div style="display: flex; flex-direction: column; gap: 1rem;">
197
+ \${(['small', 'medium', 'large'] as const).map(size => html\` <btu-switch size=\${size} label="\${size} size" checked></btu-switch> \`)}
198
+ </div>
199
+ \`,
200
+ parameters: {
201
+ docs: {
202
+ description: {
203
+ story: 'The three available size variants: \`small\` (default), \`medium\`, and \`large\`.'
204
+ }
205
+ }
206
+ }
207
+ }`,...b.parameters?.docs?.source}}};p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
208
+ render: () => html\`
209
+ <div class="flex flex-col gap-6">
210
+ <div class="flex flex-col gap-2">
211
+ <strong>Custom colors:</strong>
212
+ <div class="flex items-center gap-6">
213
+ <btu-switch
214
+ label="Success"
215
+ checked
216
+ style=\${styleMap({
217
+ '--switch-color-track-on': 'oklch(var(--btu-theme-success-600))'
218
+ })}
219
+ ></btu-switch>
220
+ <btu-switch
221
+ label="Warning"
222
+ checked
223
+ style=\${styleMap({
224
+ '--switch-color-track-on': 'oklch(var(--btu-theme-warning-500))'
225
+ })}
226
+ ></btu-switch>
227
+ <btu-switch
228
+ label="Error"
229
+ checked
230
+ style=\${styleMap({
231
+ '--switch-color-track-on': 'oklch(var(--btu-theme-error-600))'
232
+ })}
233
+ ></btu-switch>
234
+ </div>
235
+ </div>
236
+
237
+ <div class="flex flex-col gap-2">
238
+ <strong>Event handling:</strong>
239
+ <btu-switch
240
+ label="Toggle me"
241
+ description="Check the Actions panel to see events"
242
+ @btu-switch-change=\${(e: CustomEvent<{
243
+ checked: boolean;
244
+ }>) => {
245
+ const el = e.target as HTMLElement;
246
+ const label = el.querySelector('.btu-switch-description');
247
+ if (label) label.textContent = e.detail.checked ? 'Switch is ON' : 'Switch is OFF';
248
+ }}
249
+ ></btu-switch>
250
+ </div>
251
+
252
+ <div class="flex flex-col gap-2">
253
+ <strong>Form participation:</strong>
254
+ <form
255
+ class="flex flex-col gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4"
256
+ @submit=\${(e: Event) => {
257
+ e.preventDefault();
258
+ const form = e.target as HTMLFormElement;
259
+ const data = new FormData(form);
260
+ const output = form.querySelector('.form-output');
261
+ if (output) output.textContent = JSON.stringify(Object.fromEntries(data), null, 2);
262
+ }}
263
+ >
264
+ <btu-switch label="Email notifications" name="email" checked></btu-switch>
265
+ <btu-switch label="SMS notifications" name="sms"></btu-switch>
266
+ <btu-switch label="Push notifications" name="push" checked></btu-switch>
267
+ <button type="submit" class="btu-button btu-button-sm w-fit">Submit</button>
268
+ <pre class="form-output text-xs text-gray-600"></pre>
269
+ </form>
270
+ </div>
271
+
272
+ <div class="flex flex-col gap-2">
273
+ <strong>Track icons:</strong>
274
+ <div class="flex items-center gap-6">
275
+ <btu-switch label="Check / X" on-icon="check" off-icon="x" checked></btu-switch>
276
+ <btu-switch label="Lock" on-icon="lock-open" off-icon="lock"></btu-switch>
277
+ <btu-switch label="Sound" on-icon="volume-2" off-icon="volume-off" checked></btu-switch>
278
+ </div>
279
+ </div>
280
+
281
+ <div class="flex flex-col gap-2">
282
+ <strong>Programmatic control:</strong>
283
+ <div class="flex items-center gap-4">
284
+ <btu-switch id="programmatic-switch" label="Controlled switch" size="medium"></btu-switch>
285
+ <button
286
+ class="btu-button btu-button-sm"
287
+ @click=\${() => {
288
+ const sw = document.getElementById('programmatic-switch') as HTMLElement & {
289
+ checked: boolean;
290
+ };
291
+ if (sw) sw.checked = !sw.checked;
292
+ }}
293
+ >
294
+ Toggle externally
295
+ </button>
296
+ </div>
297
+ </div>
298
+ </div>
299
+ \`,
300
+ parameters: {
301
+ docs: {
302
+ description: {
303
+ story: \`
304
+ - **Custom colors** via CSS custom properties (\\\`--switch-color-track-on\\\`, \\\`--switch-color-track-off\\\`) using theme tokens.
305
+ - **Event handling** with the \\\`btu-switch-change\\\` event, which provides \\\`{ checked: boolean }\\\` in its detail.
306
+ - **Form participation** using the \\\`name\\\` attribute — the hidden checkbox participates in native form submission.
307
+ - **Track icons** via \\\`on-icon\\\` and \\\`off-icon\\\` attributes using Lucide icon names (e.g., \\\`check\\\`, \\\`x\\\`, \\\`lock\\\`, \\\`volume-2\\\`).
308
+ - **Programmatic control** by setting the \\\`checked\\\` property directly from JavaScript.\`
309
+ }
310
+ }
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,b as Sizes,r as WithDescription,u as WithIcons,m as WithIconsSizes,D as __namedExportsOrder,L as default};
@@ -0,0 +1,218 @@
1
+ import{g as c,x as t}from"./iframe-DloIUNZz.js";import{o as d}from"./style-map-DLXysq3r.js";import"./preload-helper-PPVm8Dsz.js";const{events:u,args:m,argTypes:e}=c("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:u},controls:{expanded:!0}},args:{...m,label:"Main",name:"main","icon-name":"",badge:void 0},argTypes:{...e,size:{table:{disable:!0}},"--badge-color-background":{table:{disable:!0}},"--badge-color-foreground":{table:{disable:!0}},label:{...e.label,control:{type:"text"},description:"Text displayed in the tab."},description:{...e.description,control:{type:"text"},description:"Accessibility description for screen readers (`aria-description`)."},disabled:{...e.disabled,control:{type:"boolean"},description:"Whether the tab is disabled and non-interactive."},"icon-name":{...e["icon-name"],control:{type:"text"},description:"Lucide icon name to display."},"icon-position":{...e["icon-position"],control:{type:"select"},options:["leading","trailing"],description:"Placement of the icon relative to the label."},"icon-only":{...e["icon-only"],control:{type:"boolean"},description:'When true, hides the label visually while maintaining accessibility. Intended for use with `variant="full"` only.'},error:{...e.error,control:{type:"boolean"},description:"When true, displays an error badge on the tab."},badge:{...e.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 l={};return a.customBadgeBackground&&(l["--badge-color-background"]=a.customBadgeBackground),a.customBadgeForeground&&(l["--badge-color-foreground"]=a.customBadgeForeground),t`
9
+ <btu-tabs size="md" active-tab="main" style=${d(l)}>
10
+ <btu-tab
11
+ name="main"
12
+ label="${a.label}"
13
+ ?disabled="${a.disabled}"
14
+ .iconName="${a["icon-name"]||""}"
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:()=>t`
24
+ <div class="flex flex-col gap-8">
25
+ <btu-tabs size="md" active-tab="dashboard">
26
+ <btu-tab name="dashboard" label="Dashboard" icon-name="layout-dashboard"></btu-tab>
27
+ <btu-tab name="search" label="Search" icon-name="search"></btu-tab>
28
+ <btu-tab name="settings" label="Settings" icon-name="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" icon-name="layout-dashboard"></btu-tab>
32
+ <btu-tab name="search" label="Search" icon-name="search"></btu-tab>
33
+ <btu-tab name="settings" label="Settings" icon-name="settings" icon-position="trailing"></btu-tab>
34
+ </btu-tabs>
35
+ </div>
36
+ `,parameters:{docs:{description:{story:"Set `icon-name` to any Lucide icon name. Use `icon-position` to place the icon before (default) or after the label."}}}},o={render:()=>t`
37
+ <btu-tabs size="md" active-tab="dashboard">
38
+ <btu-tab name="dashboard" label="Dashboard" icon-name="layout-dashboard" icon-only></btu-tab>
39
+ <btu-tab name="search" label="Search" icon-name="search" icon-only></btu-tab>
40
+ <btu-tab name="settings" label="Settings" icon-name="settings" icon-only></btu-tab>
41
+ <btu-tab name="help" label="Help" icon-name="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:()=>t`
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.'}}}},i={render:()=>t`
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."}}}},s={render:()=>t`
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" icon-name="layout-dashboard"></btu-tab>
101
+ <btu-tab name="search" label="Search" icon-name="search"></btu-tab>
102
+ <btu-tab name="settings" label="Settings" icon-name="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" icon-name="layout-dashboard"></btu-tab>
106
+ <btu-tab name="search" label="Search" icon-name="search"></btu-tab>
107
+ <btu-tab name="settings" label="Settings" icon-name="settings" icon-position="trailing"></btu-tab>
108
+ </btu-tabs>
109
+ </div>
110
+ \`,
111
+ parameters: {
112
+ docs: {
113
+ description: {
114
+ story: 'Set \`icon-name\` 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" icon-name="layout-dashboard" icon-only></btu-tab>
122
+ <btu-tab name="search" label="Search" icon-name="search" icon-only></btu-tab>
123
+ <btu-tab name="settings" label="Settings" icon-name="settings" icon-only></btu-tab>
124
+ <btu-tab name="help" label="Help" icon-name="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}}};i.parameters={...i.parameters,docs:{...i.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
+ }`,...i.parameters?.docs?.source}}};s.parameters={...s.parameters,docs:{...s.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
+ }`,...s.parameters?.docs?.source}}};const v=["Default","WithIcon","IconOnly","WithBadge","WithError","Disabled"];export{b as Default,s as Disabled,o as IconOnly,r as WithBadge,i as WithError,n as WithIcon,v as __namedExportsOrder,y as default};