@brightspot/ui 5.0.3-toggleable-fix.0 → 5.0.3

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 (163) hide show
  1. package/dist/components/button-group/ButtonGroup.d.ts +14 -4
  2. package/dist/components/button-group/ButtonGroup.d.ts.map +1 -1
  3. package/dist/components/button-group/ButtonGroup.js +14 -4
  4. package/dist/components/button-group/ButtonGroup.js.map +1 -1
  5. package/dist/components/circular-progress/CircularProgress.js +2 -2
  6. package/dist/components/dropdown/DropdownItem.d.ts.map +1 -1
  7. package/dist/components/dropdown/DropdownItem.js +3 -4
  8. package/dist/components/dropdown/DropdownItem.js.map +1 -1
  9. package/dist/components/icon/Icon.d.ts.map +1 -1
  10. package/dist/components/icon/Icon.js +7 -4
  11. package/dist/components/icon/Icon.js.map +1 -1
  12. package/dist/components/linear-progress/LinearProgress.js +1 -1
  13. package/dist/components/tabs/Tab.js +1 -1
  14. package/dist/components/tabs/Tab.js.map +1 -1
  15. package/dist/components/upload/UploadItem.js +1 -1
  16. package/dist/components/upload/UploadItem.js.map +1 -1
  17. package/dist/components/widget/Widget.css +1 -1
  18. package/dist/components/widget/Widget.js +1 -1
  19. package/dist/custom-elements.json +2244 -2232
  20. package/dist/storybook/assets/{ActionBar.stories-CTrEOJBH.js → ActionBar.stories-cyX9vc6C.js} +1 -1
  21. package/dist/storybook/assets/{ActionItem.stories-Cm3zQeMa.js → ActionItem.stories-Bs-Kxp5J.js} +1 -1
  22. package/dist/storybook/assets/{Avatar.stories-DSltfj-_.js → Avatar.stories-B1Uee53f.js} +1 -1
  23. package/dist/storybook/assets/{AvatarGroup.stories-BjL-l4VH.js → AvatarGroup.stories-W2EtKQBu.js} +5 -5
  24. package/dist/storybook/assets/{Badge.stories-DLNO3rOl.js → Badge.stories-BotNIO18.js} +1 -1
  25. package/dist/storybook/assets/{Button-TUtCVpwY.js → Button-YTBnP55L.js} +1 -1
  26. package/dist/storybook/assets/{Button.stories-3HjoUoaq.js → Button.stories-B-X7_d_i.js} +1 -1
  27. package/dist/storybook/assets/{ButtonGroup.stories-GF1UFxbr.js → ButtonGroup.stories-BM-pxfK2.js} +48 -48
  28. package/dist/storybook/assets/{Celebrate.stories-KtFU9NEQ.js → Celebrate.stories-D9EJwzxo.js} +7 -7
  29. package/dist/storybook/assets/{Checkbox.stories-CDg2caKU.js → Checkbox.stories-f5VLVSw5.js} +1 -1
  30. package/dist/storybook/assets/{CircularProgress.stories-C0OdRoxU.js → CircularProgress.stories-BI9e372u.js} +1 -1
  31. package/dist/storybook/assets/{ClipboardMixin.stories-B6gIxMuH.js → ClipboardMixin.stories-CsyJDNxc.js} +2 -2
  32. package/dist/storybook/assets/{Color-6BZIO3FS-DDAuf4ms.js → Color-6BZIO3FS-ClVOLIJG.js} +1 -1
  33. package/dist/storybook/assets/{Colors.stories-tJVgPDrl.js → Colors.stories-hUYBvymM.js} +1 -1
  34. package/dist/storybook/assets/{CombinedEffects.stories-BwrWmInr.js → CombinedEffects.stories-DkokyKCS.js} +1 -1
  35. package/dist/storybook/assets/{ComponentStatesMixin-B9_GeVBN.js → ComponentStatesMixin-C4I_rtgt.js} +1 -1
  36. package/dist/storybook/assets/{ComponentStatesMixin.stories-BAn1JPCN.js → ComponentStatesMixin.stories-BeLCYevK.js} +3 -3
  37. package/dist/storybook/assets/{CopyToClipboard.stories-YgaScv3O.js → CopyToClipboard.stories-DN9oagz-.js} +1 -1
  38. package/dist/storybook/assets/{Debounce.stories-y-toLkyr.js → Debounce.stories-CtNQAJxO.js} +3 -3
  39. package/dist/storybook/assets/{DocsRenderer-LL677BLK-BUwAiHkt.js → DocsRenderer-LL677BLK-Bx1Fds2q.js} +3 -3
  40. package/dist/storybook/assets/{Dropdown.stories-DAVkpuM5.js → Dropdown.stories-B862-mco.js} +3 -3
  41. package/dist/storybook/assets/{EmptyState.stories-Buexv2C4.js → EmptyState.stories-Im3Vr4ZL.js} +15 -15
  42. package/dist/storybook/assets/{Events.stories-SjSVTFwA.js → Events.stories-B0tluV0t.js} +1 -1
  43. package/dist/storybook/assets/{Heading.stories-F7pp5AO4.js → Heading.stories-6CzGqAAc.js} +1 -1
  44. package/dist/storybook/assets/{HueRipple.stories-Dt-QniLc.js → HueRipple.stories-DaQiDn9K.js} +1 -1
  45. package/dist/storybook/assets/{Icon.stories-Cxknci9d.js → Icon.stories-CFkYO_7w.js} +7 -7
  46. package/dist/storybook/assets/{IconButton.stories-C7nbDmmd.js → IconButton.stories-DwBTqvTi.js} +1 -1
  47. package/dist/storybook/assets/{LinearProgress.stories-DgP2rsiS.js → LinearProgress.stories-Coxmgjmo.js} +1 -1
  48. package/dist/storybook/assets/{Pagination.stories-DbLKeykx.js → Pagination.stories-CYrKX5iI.js} +3 -3
  49. package/dist/storybook/assets/{Popover.stories-CbmWs7x-.js → Popover.stories-BkGiUOfu.js} +18 -18
  50. package/dist/storybook/assets/{ReadyMixin-BSMJuM5x.js → ReadyMixin-CP6tQ4FB.js} +1 -1
  51. package/dist/storybook/assets/{RovingTabindexMixin.stories-DPojZp67.js → RovingTabindexMixin.stories-CzkPw8Nl.js} +6 -6
  52. package/dist/storybook/assets/{Rtc.stories-BF7lM0fa.js → Rtc.stories-CVch488H.js} +1 -1
  53. package/dist/storybook/assets/{ScrollShadow.stories-DwVglPfj.js → ScrollShadow.stories-BGh-Irt7.js} +1 -1
  54. package/dist/storybook/assets/{Switch.stories-DjjlIvXU.js → Switch.stories-DPfP0QVK.js} +5 -5
  55. package/dist/storybook/assets/{Tab.stories-zUdDTEwX.js → Tab.stories-CBcuRcDB.js} +1 -1
  56. package/dist/storybook/assets/{Tabs.stories-yWCAVVnG.js → Tabs.stories-CDOBjYbs.js} +1 -1
  57. package/dist/storybook/assets/{Throttle.stories-BrcbOwZL.js → Throttle.stories-Bqyul0aW.js} +5 -5
  58. package/dist/storybook/assets/{Tooltip.stories-B4sykiPz.js → Tooltip.stories-B9dohX1h.js} +1 -1
  59. package/dist/storybook/assets/{Upload.stories-DHE43_Zz.js → Upload.stories-C7dq2Wdk.js} +1 -1
  60. package/dist/storybook/assets/{UploadItem.stories-jqjcXP_N.js → UploadItem.stories-35zsIKTv.js} +1 -1
  61. package/dist/storybook/assets/{Welcome.stories-C3rGMIU7.js → Welcome.stories-BuD3fpke.js} +1 -1
  62. package/dist/storybook/assets/{Widget.stories-D7rHrfAr.js → Widget.stories-D2UYzfyE.js} +12 -12
  63. package/dist/storybook/assets/{WithTooltip-65CFNBJE-CYrPgwaa.js → WithTooltip-65CFNBJE-DGiY8cz9.js} +1 -1
  64. package/dist/storybook/assets/{blocks-D8JszFZh.js → blocks-YjKl5E55.js} +5 -5
  65. package/dist/storybook/assets/{formatter-EIJCOSYU-CGZPdVNG.js → formatter-EIJCOSYU-XYAiuXAN.js} +1 -1
  66. package/dist/storybook/assets/if-defined-f_e-RnGa.js +1 -0
  67. package/dist/storybook/assets/{iframe-C3TUQi31.js → iframe-CufEXQ5F.js} +5 -5
  68. package/dist/storybook/assets/iframe-PeGbyIdX.css +1 -0
  69. package/dist/storybook/assets/{index-BZyp3DsT.js → index-DbEDIsEB.js} +1 -1
  70. package/dist/storybook/assets/{onFind-9HPhEfV5.js → onFind-C7Wi8jr6.js} +1 -1
  71. package/dist/storybook/assets/{onFind.stories-BvaTMiWN.js → onFind.stories-UpwJxFqR.js} +25 -25
  72. package/dist/storybook/assets/{onRemove.stories-BPSyS2GE.js → onRemove.stories-BMwQGBCl.js} +3 -3
  73. package/dist/storybook/assets/{onVisible.stories-1lKUeGbt.js → onVisible.stories-axSo0Zv3.js} +1 -1
  74. package/dist/storybook/assets/{style-map-ADugLljH.js → style-map-BkaK9546.js} +1 -1
  75. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CBLos5mJ.js → syntaxhighlighter-ED5Y7EFY-CDDZTVRn.js} +1 -1
  76. package/dist/storybook/iframe.html +2 -2
  77. package/dist/storybook/project.json +1 -1
  78. package/dist/tailwind-plugin-button-group.js +43 -44
  79. package/dist/tailwind-plugin-button-group.js.map +1 -1
  80. package/dist/tailwind-plugin-button-group.ts +43 -43
  81. package/dist/tailwind-plugin-button.js +22 -2
  82. package/dist/tailwind-plugin-button.js.map +1 -1
  83. package/dist/tailwind-plugin-button.ts +22 -2
  84. package/dist/tailwind-plugin-dropdown.js +6 -2
  85. package/dist/tailwind-plugin-dropdown.js.map +1 -1
  86. package/dist/tailwind-plugin-dropdown.ts +6 -2
  87. package/dist/tailwind-plugin-pagination.js +12 -8
  88. package/dist/tailwind-plugin-pagination.js.map +1 -1
  89. package/dist/tailwind-plugin-pagination.ts +12 -8
  90. package/dist/tailwind-plugin-upload.js +3 -2
  91. package/dist/tailwind-plugin-upload.js.map +1 -1
  92. package/dist/tailwind-plugin-upload.ts +3 -2
  93. package/dist/tailwind.config.d.ts +1 -4
  94. package/dist/tailwind.config.d.ts.map +1 -1
  95. package/dist/tailwind.config.js +74 -6
  96. package/dist/tailwind.config.js.map +1 -1
  97. package/dist/tailwind.config.ts +74 -6
  98. package/docs/components/ButtonGroup.md +15 -12
  99. package/package.json +4 -3
  100. package/src/legacy/tool-ui/src/AIInline.css +1 -1
  101. package/src/legacy/tool-ui/src/Admin.css +2 -2
  102. package/src/legacy/tool-ui/src/Base.css +1 -1
  103. package/src/legacy/tool-ui/src/BulkUpload.css +1 -1
  104. package/src/legacy/tool-ui/src/CIGCluster.css +1 -1
  105. package/src/legacy/tool-ui/src/Card.css +1 -1
  106. package/src/legacy/tool-ui/src/CodeMirror.css +4 -4
  107. package/src/legacy/tool-ui/src/ColorInputSpectrum.css +2 -2
  108. package/src/legacy/tool-ui/src/ComboInput.css +3 -3
  109. package/src/legacy/tool-ui/src/Compat.css +6 -4
  110. package/src/legacy/tool-ui/src/ContentEdit.css +12 -12
  111. package/src/legacy/tool-ui/src/ContentEditDrawer.css +6 -6
  112. package/src/legacy/tool-ui/src/ContentInputGroup.css +1 -1
  113. package/src/legacy/tool-ui/src/ContentReporting.css +2 -2
  114. package/src/legacy/tool-ui/src/ContentSelector.css +5 -5
  115. package/src/legacy/tool-ui/src/ContentSummary.css +1 -1
  116. package/src/legacy/tool-ui/src/ContentTemplatesWidget.css +1 -1
  117. package/src/legacy/tool-ui/src/ContentTools.css +1 -1
  118. package/src/legacy/tool-ui/src/Conversation.css +2 -2
  119. package/src/legacy/tool-ui/src/Crosslinker.css +3 -3
  120. package/src/legacy/tool-ui/src/DashboardWidget.css +1 -1
  121. package/src/legacy/tool-ui/src/Dialog.css +4 -2
  122. package/src/legacy/tool-ui/src/Diff.css +1 -1
  123. package/src/legacy/tool-ui/src/Dropdown.css +2 -2
  124. package/src/legacy/tool-ui/src/Enhancement.css +1 -1
  125. package/src/legacy/tool-ui/src/FileInput.css +2 -2
  126. package/src/legacy/tool-ui/src/FormFilter.css +3 -3
  127. package/src/legacy/tool-ui/src/FullscreenView.css +4 -4
  128. package/src/legacy/tool-ui/src/Guide.css +6 -6
  129. package/src/legacy/tool-ui/src/Hierarchy.css +4 -4
  130. package/src/legacy/tool-ui/src/ImageEditor.css +13 -13
  131. package/src/legacy/tool-ui/src/LinkCarousel.css +1 -1
  132. package/src/legacy/tool-ui/src/LiveBlog.css +2 -2
  133. package/src/legacy/tool-ui/src/LocationMap.css +1 -1
  134. package/src/legacy/tool-ui/src/MailPublishing.css +1 -1
  135. package/src/legacy/tool-ui/src/MenuView.css +4 -4
  136. package/src/legacy/tool-ui/src/Message.css +1 -1
  137. package/src/legacy/tool-ui/src/Page.css +35 -16
  138. package/src/legacy/tool-ui/src/Popup.css +8 -3
  139. package/src/legacy/tool-ui/src/ProseMirror.css +1 -1
  140. package/src/legacy/tool-ui/src/ProseMirrorContainer.css +1 -1
  141. package/src/legacy/tool-ui/src/ProseMirrorEnhancementMenu.css +2 -2
  142. package/src/legacy/tool-ui/src/ProseMirrorFindReplace.css +2 -2
  143. package/src/legacy/tool-ui/src/QueryField.css +1 -1
  144. package/src/legacy/tool-ui/src/RepeatableContentInputGroup.css +1 -1
  145. package/src/legacy/tool-ui/src/RepeatableContentSelector.css +1 -1
  146. package/src/legacy/tool-ui/src/RichText.css +1 -1
  147. package/src/legacy/tool-ui/src/SearchFields.css +3 -2
  148. package/src/legacy/tool-ui/src/SearchResult.css +3 -3
  149. package/src/legacy/tool-ui/src/SearchWidget.css +1 -1
  150. package/src/legacy/tool-ui/src/SearchWidgetAdvanced.css +1 -1
  151. package/src/legacy/tool-ui/src/StyleEmbeddedContent.css +3 -3
  152. package/src/legacy/tool-ui/src/TabBar.css +1 -1
  153. package/src/legacy/tool-ui/src/Table.css +1 -1
  154. package/src/legacy/tool-ui/src/Taxonomy.css +4 -4
  155. package/src/legacy/tool-ui/src/ThemeBundleEditor.css +1 -1
  156. package/src/legacy/tool-ui/src/TimedContent.css +2 -2
  157. package/src/legacy/tool-ui/src/ViewWatchers.css +1 -1
  158. package/src/legacy/tool-ui/src/Widget.css +1 -1
  159. package/src/legacy/tool-ui/src/Workflow.css +3 -3
  160. package/src/legacy/tool-ui/src/main/webapp/dist/v5.f60c05ef0c9b89aae888.css +5 -0
  161. package/dist/storybook/assets/if-defined-BkzXcv-a.js +0 -1
  162. package/dist/storybook/assets/iframe-D0roG0J-.css +0 -1
  163. package/src/legacy/tool-ui/src/main/webapp/dist/v5.d6cc2743243cadb90492.css +0 -5
@@ -1,4 +1,4 @@
1
- import{g as S,x as t}from"./iframe-C3TUQi31.js";import{o as f}from"./style-map-ADugLljH.js";import"./preload-helper-PPVm8Dsz.js";const{events:O,args:A,argTypes:n}=S("btu-dropdown"),B={title:"Components/Dropdown",component:"btu-dropdown",tags:["autodocs"],parameters:{docs:{subtitle:"btu-dropdown",description:{component:`
1
+ import{g as S,x as t}from"./iframe-CufEXQ5F.js";import{o as f}from"./style-map-BkaK9546.js";import"./preload-helper-PPVm8Dsz.js";const{events:O,args:A,argTypes:n}=S("btu-dropdown"),B={title:"Components/Dropdown",component:"btu-dropdown",tags:["autodocs"],parameters:{docs:{subtitle:"btu-dropdown",description:{component:`
2
2
  A dropdown menu component that renders a trigger button and manages a floating panel
3
3
  containing a \`btu-dropdown-menu\` with \`btu-dropdown-item\` children.
4
4
 
@@ -271,7 +271,7 @@ Follows the WAI-ARIA Menu Button Pattern for keyboard navigation and accessibili
271
271
  `,parameters:{docs:{description:{story:'When a menu has no focusable items, an empty state message is displayed. Customize with the `empty-message` attribute (default: "No items available").'}}}},h={render:()=>t`
272
272
  <div style="display: flex; gap: 1rem; align-items: center;">
273
273
  <button
274
- class="btu-button-primary btu-button-md btu-button"
274
+ class="btu-button btu-button-primary btu-button-md"
275
275
  @click=${o=>{const e=o.target.parentElement?.querySelector("btu-dropdown");e&&(e.open=!e.open)}}
276
276
  >
277
277
  Toggle Dropdown
@@ -657,7 +657,7 @@ Follows the WAI-ARIA Menu Button Pattern for keyboard navigation and accessibili
657
657
  render: () => html\`
658
658
  <div style="display: flex; gap: 1rem; align-items: center;">
659
659
  <button
660
- class="btu-button-primary btu-button-md btu-button"
660
+ class="btu-button btu-button-primary btu-button-md"
661
661
  @click=\${(e: Event) => {
662
662
  const dropdown = (e.target as HTMLElement).parentElement?.querySelector('btu-dropdown');
663
663
  if (dropdown) dropdown.open = !dropdown.open;
@@ -1,4 +1,4 @@
1
- import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-BkzXcv-a.js";import{o as h}from"./style-map-ADugLljH.js";import"./preload-helper-PPVm8Dsz.js";const{events:b,args:g,argTypes:s}=u("btu-empty-state"),y=["sm","md","lg"],v=[1,2,3,4,5,6],k={title:"Components/Empty State",component:"btu-empty-state",tags:["autodocs"],parameters:{docs:{subtitle:"A standardized component for communicating the absence of content.",description:{component:`
1
+ import{g as u,x as e}from"./iframe-CufEXQ5F.js";import{o as m}from"./if-defined-f_e-RnGa.js";import{o as h}from"./style-map-BkaK9546.js";import"./preload-helper-PPVm8Dsz.js";const{events:b,args:g,argTypes:s}=u("btu-empty-state"),y=["sm","md","lg"],v=[1,2,3,4,5,6],k={title:"Components/Empty State",component:"btu-empty-state",tags:["autodocs"],parameters:{docs:{subtitle:"A standardized component for communicating the absence of content.",description:{component:`
2
2
  <h3>When to use:</h3>
3
3
  <ul>
4
4
  <li>To communicate the absence of content in tables, lists, or search results</li>
@@ -33,8 +33,8 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
33
33
  emphasize="pulse"
34
34
  style="color: oklch(var(--btu-theme-primary-600))"
35
35
  ></btu-icon>
36
- <button slot="actions" class="btu-button-gray btu-button">Clear search</button>
37
- <button slot="actions" class="btu-button-primary btu-button">
36
+ <button slot="actions" class="btu-button btu-button-gray">Clear search</button>
37
+ <button slot="actions" class="btu-button btu-button-primary">
38
38
  <btu-icon symbol="plus"></btu-icon>Create new
39
39
  </button>
40
40
  </btu-empty-state>
@@ -56,12 +56,12 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
56
56
  emphasize="pulse"
57
57
  style="color: oklch(var(--btu-theme-primary-600))"
58
58
  ></btu-icon>
59
- <button slot="actions" class="btu-button-primary btu-button">Get started</button>
59
+ <button slot="actions" class="btu-button btu-button-primary">Get started</button>
60
60
  </btu-empty-state>
61
61
  `,parameters:{docs:{description:{story:"Large variant for full-page empty states. Ideal for dashboards, landing pages, and first-run experiences where the empty state is the primary content."}}}},r={render:()=>e`
62
62
  <btu-empty-state heading="No images uploaded" description="Upload images to see them displayed here." size="md">
63
63
  <img slot="graphic" src="cloud-illustration.svg" alt="Cloud graphic" />
64
- <button slot="actions" class="btu-button-primary btu-button">Upload image</button>
64
+ <button slot="actions" class="btu-button btu-button-primary">Upload image</button>
65
65
  </btu-empty-state>
66
66
  `,parameters:{docs:{description:{story:"Uses a custom SVG in the graphic slot instead of a `btu-icon`. The graphic container automatically sizes `img`, `picture`, and `svg` elements larger than icons."}}}},c={render:()=>{const t=e`
67
67
  <picture slot="graphic">
@@ -85,7 +85,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
85
85
  <div style="width: 240px; border: 1px dashed oklch(var(--btu-theme-gray-300));">
86
86
  <btu-empty-state heading="No results" description="Try a different query." size="sm">
87
87
  ${t}
88
- <button slot="actions" class="btu-button-gray btu-button-sm btu-button">Clear</button>
88
+ <button slot="actions" class="btu-button btu-button-gray btu-button-sm">Clear</button>
89
89
  </btu-empty-state>
90
90
  </div>
91
91
  <div style="width: 360px; border: 1px dashed oklch(var(--btu-theme-gray-300));">
@@ -95,7 +95,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
95
95
  size="md"
96
96
  >
97
97
  ${t}
98
- <button slot="actions" class="btu-button-primary btu-button">Upload image</button>
98
+ <button slot="actions" class="btu-button btu-button-primary">Upload image</button>
99
99
  </btu-empty-state>
100
100
  </div>
101
101
  <div style="width: 520px; border: 1px dashed oklch(var(--btu-theme-gray-300));">
@@ -105,7 +105,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
105
105
  size="lg"
106
106
  >
107
107
  ${t}
108
- <button slot="actions" class="btu-button-primary btu-button">Get started</button>
108
+ <button slot="actions" class="btu-button btu-button-primary">Get started</button>
109
109
  </btu-empty-state>
110
110
  </div>
111
111
  </div>
@@ -132,7 +132,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
132
132
  emphasize="pulse"
133
133
  style="color: oklch(var(--btu-theme-gray-500))"
134
134
  ></btu-icon>
135
- <button slot="actions" class="btu-button-success btu-button-sm btu-button">Add item</button>
135
+ <button slot="actions" class="btu-button btu-button-success btu-button-sm">Add item</button>
136
136
  </btu-empty-state>
137
137
  `,parameters:{docs:{description:{story:"Empty state with heading and actions but no description. The description is omitted by not setting the `description` attribute."}}}};i.parameters={...i.parameters,docs:{...i.parameters?.docs,source:{originalSource:`{
138
138
  args: {
@@ -176,7 +176,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
176
176
  emphasize="pulse"
177
177
  style="color: oklch(var(--btu-theme-primary-600))"
178
178
  ></btu-icon>
179
- <button slot="actions" class="btu-button-primary btu-button">Get started</button>
179
+ <button slot="actions" class="btu-button btu-button-primary">Get started</button>
180
180
  </btu-empty-state>
181
181
  \`,
182
182
  parameters: {
@@ -190,7 +190,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
190
190
  render: () => html\`
191
191
  <btu-empty-state heading="No images uploaded" description="Upload images to see them displayed here." size="md">
192
192
  <img slot="graphic" src="cloud-illustration.svg" alt="Cloud graphic" />
193
- <button slot="actions" class="btu-button-primary btu-button">Upload image</button>
193
+ <button slot="actions" class="btu-button btu-button-primary">Upload image</button>
194
194
  </btu-empty-state>
195
195
  \`,
196
196
  parameters: {
@@ -230,7 +230,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
230
230
  <div style="width: 240px; border: 1px dashed oklch(var(--btu-theme-gray-300));">
231
231
  <btu-empty-state heading="No results" description="Try a different query." size="sm">
232
232
  \${responsiveGraphic}
233
- <button slot="actions" class="btu-button-gray btu-button-sm btu-button">Clear</button>
233
+ <button slot="actions" class="btu-button btu-button-gray btu-button-sm">Clear</button>
234
234
  </btu-empty-state>
235
235
  </div>
236
236
  <div style="width: 360px; border: 1px dashed oklch(var(--btu-theme-gray-300));">
@@ -240,7 +240,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
240
240
  size="md"
241
241
  >
242
242
  \${responsiveGraphic}
243
- <button slot="actions" class="btu-button-primary btu-button">Upload image</button>
243
+ <button slot="actions" class="btu-button btu-button-primary">Upload image</button>
244
244
  </btu-empty-state>
245
245
  </div>
246
246
  <div style="width: 520px; border: 1px dashed oklch(var(--btu-theme-gray-300));">
@@ -250,7 +250,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
250
250
  size="lg"
251
251
  >
252
252
  \${responsiveGraphic}
253
- <button slot="actions" class="btu-button-primary btu-button">Get started</button>
253
+ <button slot="actions" class="btu-button btu-button-primary">Get started</button>
254
254
  </btu-empty-state>
255
255
  </div>
256
256
  </div>
@@ -305,7 +305,7 @@ import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as m}from"./if-defined-
305
305
  emphasize="pulse"
306
306
  style="color: oklch(var(--btu-theme-gray-500))"
307
307
  ></btu-icon>
308
- <button slot="actions" class="btu-button-success btu-button-sm btu-button">Add item</button>
308
+ <button slot="actions" class="btu-button btu-button-success btu-button-sm">Add item</button>
309
309
  </btu-empty-state>
310
310
  \`,
311
311
  parameters: {
@@ -1,4 +1,4 @@
1
- import{x as d}from"./iframe-C3TUQi31.js";import"./preload-helper-PPVm8Dsz.js";var n=Object.freeze,r=Object.defineProperty,s=(t,i)=>n(r(t,"raw",{value:n(t.slice())})),o;const l={title:"Mixins/Events",tags:["autodocs"],parameters:{docs:{subtitle:"Events inherited from EventEmitterMixin",description:{component:`
1
+ import{x as d}from"./iframe-CufEXQ5F.js";import"./preload-helper-PPVm8Dsz.js";var n=Object.freeze,r=Object.defineProperty,s=(t,i)=>n(r(t,"raw",{value:n(t.slice())})),o;const l={title:"Mixins/Events",tags:["autodocs"],parameters:{docs:{subtitle:"Events inherited from EventEmitterMixin",description:{component:`
2
2
  <h3>EventEmitterMixin Events</h3>
3
3
 
4
4
  <p>All Brightspot UI components that extend EventEmitterMixin emit the following lifecycle events in addition to those inherited from LitElement. These events use CustomEvent and bubble through the DOM with <code>composed: true</code>, meaning they cross shadow DOM boundaries.</p>
@@ -1,3 +1,3 @@
1
- import{x as s}from"./iframe-C3TUQi31.js";import"./preload-helper-PPVm8Dsz.js";const r=({size:t})=>s` <div class=${[`btu-heading-${t}`].join(" ")}>Heading</div> `,o={title:"CSS Plugins/Heading",component:"btu-heading",tags:["autodocs"],parameters:{docs:{subtitle:"This Tailwind CSS plugin provides the `.btu-heading` utility class for styling headings. It supports five different sizes, from 1 (largest) to 5 (smallest). Apply the class to `<h1>` through `<h5>` elements to style them accordingly."},controls:{expanded:!0}},render:t=>r(t),argTypes:{size:{control:{type:"range",min:1,max:5,step:1},description:"Heading size from 1 to 5, where 1 is the largest and 5 is the smallest."}},args:{size:1}},e={args:{}};e.parameters={...e.parameters,docs:{...e.parameters?.docs,source:{originalSource:`{
1
+ import{x as s}from"./iframe-CufEXQ5F.js";import"./preload-helper-PPVm8Dsz.js";const r=({size:t})=>s` <div class=${[`btu-heading-${t}`].join(" ")}>Heading</div> `,o={title:"CSS Plugins/Heading",component:"btu-heading",tags:["autodocs"],parameters:{docs:{subtitle:"This Tailwind CSS plugin provides the `.btu-heading` utility class for styling headings. It supports five different sizes, from 1 (largest) to 5 (smallest). Apply the class to `<h1>` through `<h5>` elements to style them accordingly."},controls:{expanded:!0}},render:t=>r(t),argTypes:{size:{control:{type:"range",min:1,max:5,step:1},description:"Heading size from 1 to 5, where 1 is the largest and 5 is the smallest."}},args:{size:1}},e={args:{}};e.parameters={...e.parameters,docs:{...e.parameters?.docs,source:{originalSource:`{
2
2
  args: {}
3
3
  }`,...e.parameters?.docs?.source}}};const n=["Default"];export{e as Default,n as __namedExportsOrder,o as default};
@@ -1,4 +1,4 @@
1
- import{x as i}from"./iframe-C3TUQi31.js";import{b as l}from"./ripple-DQbyyRUw.js";import{B as e}from"./Button-TUtCVpwY.js";import"./preload-helper-PPVm8Dsz.js";import"./position-CFNQy3J6.js";const m={title:"Effects/Hue Ripple",tags:["autodocs"],parameters:{docs:{subtitle:"Click anywhere to send a hue-shifting ripple across the viewport",description:{component:`
1
+ import{x as i}from"./iframe-CufEXQ5F.js";import{b as l}from"./ripple-DQbyyRUw.js";import{B as e}from"./Button-YTBnP55L.js";import"./preload-helper-PPVm8Dsz.js";import"./position-CFNQy3J6.js";const m={title:"Effects/Hue Ripple",tags:["autodocs"],parameters:{docs:{subtitle:"Click anywhere to send a hue-shifting ripple across the viewport",description:{component:`
2
2
  Uses the **View Transition API** to create an expanding ring that reveals OKLCH-shifted colors as it sweeps past each element, then they return to normal.
3
3
 
4
4
  ### Usage
@@ -1,4 +1,4 @@
1
- import{g,x as s}from"./iframe-C3TUQi31.js";import{o as h}from"./style-map-ADugLljH.js";import{L as u}from"./LucideDynamicLoader-jmdq8YDM.js";import"./preload-helper-PPVm8Dsz.js";const{events:x,args:v,argTypes:i}=g("btu-icon"),b=["xs","sm","md","lg","xl"],f=["ai","error","gray","primary","purple","rose","success","teal","warning"],C={title:"Components/Icon",component:"btu-icon",tags:["autodocs"],parameters:{docs:{subtitle:"An icon component using Lucide icons with built-in support for custom colors and sizes.",description:{component:`
1
+ import{g,x as s}from"./iframe-CufEXQ5F.js";import{o as h}from"./style-map-BkaK9546.js";import{L as u}from"./LucideDynamicLoader-jmdq8YDM.js";import"./preload-helper-PPVm8Dsz.js";const{events:x,args:v,argTypes:i}=g("btu-icon"),b=["xs","sm","md","lg","xl"],f=["ai","error","gray","primary","purple","rose","success","teal","warning"],C={title:"Components/Icon",component:"btu-icon",tags:["autodocs"],parameters:{docs:{subtitle:"An icon component using Lucide icons with built-in support for custom colors and sizes.",description:{component:`
2
2
  <strong>When to use:</strong>
3
3
  <ul>
4
4
  <li>To visually reinforce actions, states, or categories</li>
@@ -95,7 +95,7 @@ import{g,x as s}from"./iframe-C3TUQi31.js";import{o as h}from"./style-map-ADugLl
95
95
 
96
96
  <div class="flex items-center gap-2">
97
97
  <strong>Unlabeled icon button (A11y concern!):</strong>
98
- <button class="btu-button-error btu-button-fill-none btu-button-sm btu-button">
98
+ <button class="btu-button btu-button-fill-none btu-button-error btu-button-sm">
99
99
  <btu-icon symbol="trash-2" size="md" class="text-gray-900"></btu-icon>
100
100
  </button>
101
101
  </div>
@@ -103,7 +103,7 @@ import{g,x as s}from"./iframe-C3TUQi31.js";import{o as h}from"./style-map-ADugLl
103
103
  <div class="flex items-center gap-2">
104
104
  <strong>Labeled via <code>aria-label</code> and <code>title</code>:</strong>
105
105
  <button
106
- class="btu-button-primary btu-button-sm btu-button"
106
+ class="btu-button btu-button-primary btu-button-sm"
107
107
  aria-label="Favorite this item"
108
108
  title="Favorite this item"
109
109
  >
@@ -113,7 +113,7 @@ import{g,x as s}from"./iframe-C3TUQi31.js";import{o as h}from"./style-map-ADugLl
113
113
 
114
114
  <div class="flex items-center gap-2">
115
115
  <strong>Labeled via accompanying text:</strong>
116
- <button class="btu-button-primary btu-button-fill-none btu-button-sm btu-button">
116
+ <button class="btu-button btu-button-fill-none btu-button-primary btu-button-sm">
117
117
  <btu-icon symbol="heart" size="md"></btu-icon>
118
118
  <span class="ml-1">Favorite</span>
119
119
  </button>
@@ -276,7 +276,7 @@ import{g,x as s}from"./iframe-C3TUQi31.js";import{o as h}from"./style-map-ADugLl
276
276
 
277
277
  <div class="flex items-center gap-2">
278
278
  <strong>Unlabeled icon button (A11y concern!):</strong>
279
- <button class="btu-button-error btu-button-fill-none btu-button-sm btu-button">
279
+ <button class="btu-button btu-button-fill-none btu-button-error btu-button-sm">
280
280
  <btu-icon symbol="trash-2" size="md" class="text-gray-900"></btu-icon>
281
281
  </button>
282
282
  </div>
@@ -284,7 +284,7 @@ import{g,x as s}from"./iframe-C3TUQi31.js";import{o as h}from"./style-map-ADugLl
284
284
  <div class="flex items-center gap-2">
285
285
  <strong>Labeled via <code>aria-label</code> and <code>title</code>:</strong>
286
286
  <button
287
- class="btu-button-primary btu-button-sm btu-button"
287
+ class="btu-button btu-button-primary btu-button-sm"
288
288
  aria-label="Favorite this item"
289
289
  title="Favorite this item"
290
290
  >
@@ -294,7 +294,7 @@ import{g,x as s}from"./iframe-C3TUQi31.js";import{o as h}from"./style-map-ADugLl
294
294
 
295
295
  <div class="flex items-center gap-2">
296
296
  <strong>Labeled via accompanying text:</strong>
297
- <button class="btu-button-primary btu-button-fill-none btu-button-sm btu-button">
297
+ <button class="btu-button btu-button-fill-none btu-button-primary btu-button-sm">
298
298
  <btu-icon symbol="heart" size="md"></btu-icon>
299
299
  <span class="ml-1">Favorite</span>
300
300
  </button>
@@ -1,4 +1,4 @@
1
- import{g as p,x as e}from"./iframe-C3TUQi31.js";import{o as b}from"./if-defined-BkzXcv-a.js";import{L as d}from"./LucideDynamicLoader-jmdq8YDM.js";import"./preload-helper-PPVm8Dsz.js";const{events:u,args:y,argTypes:o}=p("btu-icon-button"),x={title:"Components/Icon Button",component:"btu-icon-button",tags:["autodocs"],parameters:{docs:{subtitle:"Combines button styles with the icon component along with an opinionated API",description:{component:`
1
+ import{g as p,x as e}from"./iframe-CufEXQ5F.js";import{o as b}from"./if-defined-f_e-RnGa.js";import{L as d}from"./LucideDynamicLoader-jmdq8YDM.js";import"./preload-helper-PPVm8Dsz.js";const{events:u,args:y,argTypes:o}=p("btu-icon-button"),x={title:"Components/Icon Button",component:"btu-icon-button",tags:["autodocs"],parameters:{docs:{subtitle:"Combines button styles with the icon component along with an opinionated API",description:{component:`
2
2
  <h3>When to use:</h3>
3
3
  <ul>
4
4
  <li>For actions in compact or space-constrained interfaces (toolbars, tables, cards)</li>
@@ -1,4 +1,4 @@
1
- import{g as D,E as h,x as T}from"./iframe-C3TUQi31.js";import{o as A}from"./style-map-ADugLljH.js";import"./preload-helper-PPVm8Dsz.js";const{events:V,args:k,argTypes:g}=D("btu-linear-progress"),W={title:"Components/Linear Progress",component:"btu-linear-progress",tags:["autodocs"],parameters:{docs:{subtitle:"A horizontal progress bar for showing task completion",description:{component:`
1
+ import{g as D,E as h,x as T}from"./iframe-CufEXQ5F.js";import{o as A}from"./style-map-BkaK9546.js";import"./preload-helper-PPVm8Dsz.js";const{events:V,args:k,argTypes:g}=D("btu-linear-progress"),W={title:"Components/Linear Progress",component:"btu-linear-progress",tags:["autodocs"],parameters:{docs:{subtitle:"A horizontal progress bar for showing task completion",description:{component:`
2
2
  <h3>When to use:</h3>
3
3
  <ul>
4
4
  <li>To show progress of a specific task with known completion percentage</li>
@@ -1,4 +1,4 @@
1
- import{g as m,x as u}from"./iframe-C3TUQi31.js";import{o as g}from"./style-map-ADugLljH.js";import"./preload-helper-PPVm8Dsz.js";const{events:b,args:h,argTypes:y}=m("btu-pagination"),c=e=>{const t={};return e.customBackgroundColor&&(t["--pagination-color-background"]=e.customBackgroundColor),e.customForegroundColor&&(t["--pagination-color-foreground"]=e.customForegroundColor),t},$={title:"Components/Pagination",component:"btu-pagination",tags:["autodocs"],parameters:{docs:{subtitle:"A component for navigating through paged content",description:{component:`
1
+ import{g as m,x as u}from"./iframe-CufEXQ5F.js";import{o as g}from"./style-map-BkaK9546.js";import"./preload-helper-PPVm8Dsz.js";const{events:b,args:h,argTypes:y}=m("btu-pagination"),c=e=>{const t={};return e.customBackgroundColor&&(t["--pagination-color-background"]=e.customBackgroundColor),e.customForegroundColor&&(t["--pagination-color-foreground"]=e.customForegroundColor),t},$={title:"Components/Pagination",component:"btu-pagination",tags:["autodocs"],parameters:{docs:{subtitle:"A component for navigating through paged content",description:{component:`
2
2
  <h3>When to use:</h3>
3
3
  <ul>
4
4
  <li>To navigate through large sets of data</li>
@@ -62,7 +62,7 @@ import{g as m,x as u}from"./iframe-C3TUQi31.js";import{o as g}from"./style-map-A
62
62
  </btu-dropdown>
63
63
  <button
64
64
  slot="jumper"
65
- class="btu-button-sm btu-button"
65
+ class="btu-button btu-button-sm"
66
66
  @click=${t=>{const n=t.target.closest("btu-pagination");n&&(n.page=1)}}
67
67
  >
68
68
  Today
@@ -162,7 +162,7 @@ import{g as m,x as u}from"./iframe-C3TUQi31.js";import{o as g}from"./style-map-A
162
162
  </btu-dropdown>
163
163
  <button
164
164
  slot="jumper"
165
- class="btu-button-sm btu-button"
165
+ class="btu-button btu-button-sm"
166
166
  @click=\${(e: Event) => {
167
167
  const pagination = (e.target as HTMLElement).closest('btu-pagination');
168
168
  if (pagination) pagination.page = 1;
@@ -1,4 +1,4 @@
1
- import{g as p,x as l}from"./iframe-C3TUQi31.js";import{o as a}from"./if-defined-BkzXcv-a.js";import{o as c}from"./style-map-ADugLljH.js";import"./preload-helper-PPVm8Dsz.js";const{events:d,args:u,argTypes:t}=p("btu-popover"),h={title:"Components/Popover",component:"btu-popover",tags:["autodocs"],parameters:{docs:{subtitle:"Rich interactive content anchored to a trigger element",description:{component:`
1
+ import{g as p,x as l}from"./iframe-CufEXQ5F.js";import{o as a}from"./if-defined-f_e-RnGa.js";import{o as c}from"./style-map-BkaK9546.js";import"./preload-helper-PPVm8Dsz.js";const{events:d,args:u,argTypes:t}=p("btu-popover"),h={title:"Components/Popover",component:"btu-popover",tags:["autodocs"],parameters:{docs:{subtitle:"Rich interactive content anchored to a trigger element",description:{component:`
2
2
  \`btu-popover\` displays rich interactive content anchored to a trigger element using CSS anchor positioning and the native Popover API.
3
3
 
4
4
  <h3>When to use:</h3>
@@ -35,7 +35,7 @@ import{g as p,x as l}from"./iframe-C3TUQi31.js";import{o as a}from"./if-defined-
35
35
  ?no-arrow="${o.noArrow}"
36
36
  ?open="${o.open}"
37
37
  >
38
- <button class="btu-button-gray btu-button-sm btu-button" slot="trigger">
38
+ <button class="btu-button btu-button-gray btu-button-sm" slot="trigger">
39
39
  ${o.trigger==="hover"?"Hover me":o.trigger==="focus"?"Focus me":"Click me"}
40
40
  </button>
41
41
  <div slot="content">
@@ -51,19 +51,19 @@ import{g as p,x as l}from"./iframe-C3TUQi31.js";import{o as a}from"./if-defined-
51
51
  `}},n={args:{noArrow:!1,offset:void 0}},r={render:()=>l`
52
52
  <div style="display: flex; gap: 2rem; justify-content: center; padding: 6rem 2rem; flex-wrap: wrap;">
53
53
  <btu-popover position="top">
54
- <button class="btu-button-primary btu-button-sm btu-button" slot="trigger">Top</button>
54
+ <button class="btu-button btu-button-primary btu-button-sm" slot="trigger">Top</button>
55
55
  <div slot="content">Popover positioned above the trigger</div>
56
56
  </btu-popover>
57
57
  <btu-popover position="bottom">
58
- <button class="btu-button-primary btu-button-sm btu-button" slot="trigger">Bottom</button>
58
+ <button class="btu-button btu-button-primary btu-button-sm" slot="trigger">Bottom</button>
59
59
  <div slot="content">Popover positioned below the trigger</div>
60
60
  </btu-popover>
61
61
  <btu-popover position="left">
62
- <button class="btu-button-primary btu-button-sm btu-button" slot="trigger">Left</button>
62
+ <button class="btu-button btu-button-primary btu-button-sm" slot="trigger">Left</button>
63
63
  <div slot="content">Popover positioned left of the trigger</div>
64
64
  </btu-popover>
65
65
  <btu-popover position="right">
66
- <button class="btu-button-primary btu-button-sm btu-button" slot="trigger">Right</button>
66
+ <button class="btu-button btu-button-primary btu-button-sm" slot="trigger">Right</button>
67
67
  <div slot="content">Popover positioned right of the trigger</div>
68
68
  </btu-popover>
69
69
  </div>
@@ -118,20 +118,20 @@ import{g as p,x as l}from"./iframe-C3TUQi31.js";import{o as a}from"./if-defined-
118
118
  </style>
119
119
  <div style="display: flex; gap: 2rem; justify-content: center; padding: 6rem 2rem; flex-wrap: wrap;">
120
120
  <btu-popover position="bottom">
121
- <button class="btu-button-error btu-button" slot="trigger">Delete item</button>
121
+ <button class="btu-button btu-button-error" slot="trigger">Delete item</button>
122
122
  <div slot="content">
123
123
  <div class="popover-custom-content">
124
124
  <h3>Confirm Delete</h3>
125
125
  <p>Are you sure you want to delete this item? This action cannot be undone.</p>
126
126
  <div class="actions">
127
- <button class="btu-button-warning btu-button-xs btu-button">Cancel</button>
128
- <button class="btu-button-error btu-button-xs btu-button-fill-none btu-button">Delete</button>
127
+ <button class="btu-button btu-button-warning btu-button-xs">Cancel</button>
128
+ <button class="btu-button btu-button-fill-none btu-button-error btu-button-xs">Delete</button>
129
129
  </div>
130
130
  </div>
131
131
  </div>
132
132
  </btu-popover>
133
133
  <btu-popover trigger="hover" delay="200" position="bottom">
134
- <button class="btu-button-primary btu-button" slot="trigger">Hover for chart data</button>
134
+ <button class="btu-button btu-button-primary" slot="trigger">Hover for chart data</button>
135
135
  <div slot="content">
136
136
  <div
137
137
  style="font-weight: 500; font-size: 0.75rem; line-height: 1.125rem; color: oklch(var(--btu-theme-gray-900)); margin-bottom: 8px;"
@@ -210,19 +210,19 @@ import{g as p,x as l}from"./iframe-C3TUQi31.js";import{o as a}from"./if-defined-
210
210
  render: () => html\`
211
211
  <div style="display: flex; gap: 2rem; justify-content: center; padding: 6rem 2rem; flex-wrap: wrap;">
212
212
  <btu-popover position="top">
213
- <button class="btu-button-primary btu-button-sm btu-button" slot="trigger">Top</button>
213
+ <button class="btu-button btu-button-primary btu-button-sm" slot="trigger">Top</button>
214
214
  <div slot="content">Popover positioned above the trigger</div>
215
215
  </btu-popover>
216
216
  <btu-popover position="bottom">
217
- <button class="btu-button-primary btu-button-sm btu-button" slot="trigger">Bottom</button>
217
+ <button class="btu-button btu-button-primary btu-button-sm" slot="trigger">Bottom</button>
218
218
  <div slot="content">Popover positioned below the trigger</div>
219
219
  </btu-popover>
220
220
  <btu-popover position="left">
221
- <button class="btu-button-primary btu-button-sm btu-button" slot="trigger">Left</button>
221
+ <button class="btu-button btu-button-primary btu-button-sm" slot="trigger">Left</button>
222
222
  <div slot="content">Popover positioned left of the trigger</div>
223
223
  </btu-popover>
224
224
  <btu-popover position="right">
225
- <button class="btu-button-primary btu-button-sm btu-button" slot="trigger">Right</button>
225
+ <button class="btu-button btu-button-primary btu-button-sm" slot="trigger">Right</button>
226
226
  <div slot="content">Popover positioned right of the trigger</div>
227
227
  </btu-popover>
228
228
  </div>
@@ -286,20 +286,20 @@ import{g as p,x as l}from"./iframe-C3TUQi31.js";import{o as a}from"./if-defined-
286
286
  </style>
287
287
  <div style="display: flex; gap: 2rem; justify-content: center; padding: 6rem 2rem; flex-wrap: wrap;">
288
288
  <btu-popover position="bottom">
289
- <button class="btu-button-error btu-button" slot="trigger">Delete item</button>
289
+ <button class="btu-button btu-button-error" slot="trigger">Delete item</button>
290
290
  <div slot="content">
291
291
  <div class="popover-custom-content">
292
292
  <h3>Confirm Delete</h3>
293
293
  <p>Are you sure you want to delete this item? This action cannot be undone.</p>
294
294
  <div class="actions">
295
- <button class="btu-button-warning btu-button-xs btu-button">Cancel</button>
296
- <button class="btu-button-error btu-button-xs btu-button-fill-none btu-button">Delete</button>
295
+ <button class="btu-button btu-button-warning btu-button-xs">Cancel</button>
296
+ <button class="btu-button btu-button-fill-none btu-button-error btu-button-xs">Delete</button>
297
297
  </div>
298
298
  </div>
299
299
  </div>
300
300
  </btu-popover>
301
301
  <btu-popover trigger="hover" delay="200" position="bottom">
302
- <button class="btu-button-primary btu-button" slot="trigger">Hover for chart data</button>
302
+ <button class="btu-button btu-button-primary" slot="trigger">Hover for chart data</button>
303
303
  <div slot="content">
304
304
  <div
305
305
  style="font-weight: 500; font-size: 0.75rem; line-height: 1.125rem; color: oklch(var(--btu-theme-gray-900)); margin-bottom: 8px;"
@@ -1 +1 @@
1
- import"./iframe-C3TUQi31.js";const l=t=>{class n extends t{connectedCallback(){super.connectedCallback(),Promise.resolve().then(()=>this.emit("btu-element-connected",{}),e=>this.emit("btu-element-error",{error:e}))}disconnectedCallback(){super.disconnectedCallback(),this.emit("btu-element-disconnected")}emit(e,c){const a=new CustomEvent(e,{bubbles:!0,cancelable:!1,composed:!0,detail:c});return this.dispatchEvent(a)}}return n},d=t=>{class n extends t{connectedCallback(){const e=()=>{super.connectedCallback()};document.readyState!=="loading"?e():document.addEventListener("DOMContentLoaded",()=>e())}}return n};export{l as E,d as R};
1
+ import"./iframe-CufEXQ5F.js";const l=t=>{class n extends t{connectedCallback(){super.connectedCallback(),Promise.resolve().then(()=>this.emit("btu-element-connected",{}),e=>this.emit("btu-element-error",{error:e}))}disconnectedCallback(){super.disconnectedCallback(),this.emit("btu-element-disconnected")}emit(e,c){const a=new CustomEvent(e,{bubbles:!0,cancelable:!1,composed:!0,detail:c});return this.dispatchEvent(a)}}return n},d=t=>{class n extends t{connectedCallback(){const e=()=>{super.connectedCallback()};document.readyState!=="loading"?e():document.addEventListener("DOMContentLoaded",()=>e())}}return n};export{l as E,d as R};
@@ -1,4 +1,4 @@
1
- import{x as l,i as v}from"./iframe-C3TUQi31.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:`
1
+ import{x as l,i as v}from"./iframe-CufEXQ5F.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
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
3
 
4
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.
@@ -109,11 +109,11 @@ class MyComponent extends RovingTabindexMixin(EventEmitterMixin(ReadyMixin(LitEl
109
109
  \`\`\`
110
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
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>
112
+ <button class="roving-demo-btn btu-button btu-button-gray btu-button-md" tabindex="0">Item 1</button>
113
+ <button class="roving-demo-btn btu-button btu-button-gray btu-button-md" tabindex="-1">Item 2</button>
114
+ <button class="roving-demo-btn btu-button btu-button-gray btu-button-md" tabindex="-1">Item 3</button>
115
+ <button class="roving-demo-btn btu-button btu-button-gray btu-button-md" tabindex="-1">Item 4</button>
116
+ <button class="roving-demo-btn btu-button btu-button-gray btu-button-md" tabindex="-1">Item 5</button>
117
117
  </div>
118
118
  `}};g=f([m("roving-demo")],g);const s={render:()=>l(c||(c=y([`<div class="flex flex-col gap-4">
119
119
  <div>
@@ -1,4 +1,4 @@
1
- import{x as o}from"./iframe-C3TUQi31.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`
1
+ import{x as o}from"./iframe-CufEXQ5F.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>
@@ -1,4 +1,4 @@
1
- import{x as a}from"./iframe-C3TUQi31.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`
1
+ import{x as a}from"./iframe-CufEXQ5F.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
2
  <style>
3
3
  :root {
4
4
  --can-scroll: ;
@@ -1,4 +1,4 @@
1
- import{g as k,x as c}from"./iframe-C3TUQi31.js";import{o as s}from"./if-defined-BkzXcv-a.js";import{o as f}from"./style-map-ADugLljH.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:`
1
+ import{g as k,x as c}from"./iframe-CufEXQ5F.js";import{o as s}from"./if-defined-f_e-RnGa.js";import{o as f}from"./style-map-BkaK9546.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>
@@ -71,7 +71,7 @@ import{g as k,x as c}from"./iframe-C3TUQi31.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-sm btu-button w-fit">Submit</button>
74
+ <button type="submit" class="btu-button btu-button-sm w-fit">Submit</button>
75
75
  <pre class="form-output text-xs text-gray-600"></pre>
76
76
  </form>
77
77
  </div>
@@ -90,7 +90,7 @@ import{g as k,x as c}from"./iframe-C3TUQi31.js";import{o as s}from"./if-defined-
90
90
  <div class="flex items-center gap-4">
91
91
  <btu-switch id="programmatic-switch" label="Controlled switch" size="md"></btu-switch>
92
92
  <button
93
- class="btu-button-sm btu-button"
93
+ class="btu-button btu-button-sm"
94
94
  @click=${()=>{const e=document.getElementById("programmatic-switch");e&&(e.checked=!e.checked)}}
95
95
  >
96
96
  Toggle externally
@@ -264,7 +264,7 @@ import{g as k,x as c}from"./iframe-C3TUQi31.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-sm btu-button w-fit">Submit</button>
267
+ <button type="submit" class="btu-button btu-button-sm w-fit">Submit</button>
268
268
  <pre class="form-output text-xs text-gray-600"></pre>
269
269
  </form>
270
270
  </div>
@@ -283,7 +283,7 @@ import{g as k,x as c}from"./iframe-C3TUQi31.js";import{o as s}from"./if-defined-
283
283
  <div class="flex items-center gap-4">
284
284
  <btu-switch id="programmatic-switch" label="Controlled switch" size="md"></btu-switch>
285
285
  <button
286
- class="btu-button-sm btu-button"
286
+ class="btu-button btu-button-sm"
287
287
  @click=\${() => {
288
288
  const sw = document.getElementById('programmatic-switch') as HTMLElement & {
289
289
  checked: boolean;
@@ -1,4 +1,4 @@
1
- import{g as u,x as e}from"./iframe-C3TUQi31.js";import{o as d}from"./style-map-ADugLljH.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:`
1
+ import{g as u,x as e}from"./iframe-CufEXQ5F.js";import{o as d}from"./style-map-BkaK9546.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
2
  An individual tab within a \`btu-tabs\` group.
3
3
 
4
4
  Renders a button with \`role="tab"\` that participates in keyboard navigation and selection state managed by the parent \`btu-tabs\` container.
@@ -1,4 +1,4 @@
1
- import{g as b,E as i,x as s}from"./iframe-C3TUQi31.js";import{o as c}from"./style-map-ADugLljH.js";import"./preload-helper-PPVm8Dsz.js";const{events:d,args:u,argTypes:a}=b("btu-tabs"),h={title:"Components/Tabs",component:"btu-tabs",tags:["autodocs"],parameters:{docs:{subtitle:"btu-tabs",description:{component:`
1
+ import{g as b,E as i,x as s}from"./iframe-CufEXQ5F.js";import{o as c}from"./style-map-BkaK9546.js";import"./preload-helper-PPVm8Dsz.js";const{events:d,args:u,argTypes:a}=b("btu-tabs"),h={title:"Components/Tabs",component:"btu-tabs",tags:["autodocs"],parameters:{docs:{subtitle:"btu-tabs",description:{component:`
2
2
  A tab group component that manages selection state across a set of \`btu-tab\` children.
3
3
 
4
4
  <h3>When to use:</h3>
@@ -1,4 +1,4 @@
1
- import{x as u}from"./iframe-C3TUQi31.js";import"./preload-helper-PPVm8Dsz.js";function v(e,t){if(e<=0)return t;let n,o=0;return function(){if(n)return;const r=Date.now(),s=e-r+o;s<=0?(o=r,t.apply(this,[...arguments])):n=setTimeout(()=>{o=r,n=void 0,t.apply(this,[...arguments])},s)}}const x={title:"Utilities/Throttle",tags:["autodocs"],parameters:{docs:{subtitle:"The `throttle` utility function limits how often a function can execute, ensuring it runs at most once per specified interval. Useful for high-frequency events like scroll, resize, or mousemove."},controls:{expanded:!0}},argTypes:{interval:{control:{type:"number",min:0,max:2e3,step:50},description:"Throttle interval in milliseconds"}},args:{interval:200}},d={render:e=>{const t=`throttle-${Math.random().toString(36).substring(2,9)}`;let n=0,o=0;const r=()=>{const m=document.getElementById(`${t}-normal-count`),h=document.getElementById(`${t}-throttled-count`);m&&(m.textContent=String(n)),h&&(h.textContent=String(o))},s=v(e.interval,()=>{o++,r()}),a=()=>{n++,r()},l=()=>{a(),s()};return u`
1
+ import{x as u}from"./iframe-CufEXQ5F.js";import"./preload-helper-PPVm8Dsz.js";function v(e,t){if(e<=0)return t;let n,o=0;return function(){if(n)return;const r=Date.now(),s=e-r+o;s<=0?(o=r,t.apply(this,[...arguments])):n=setTimeout(()=>{o=r,n=void 0,t.apply(this,[...arguments])},s)}}const x={title:"Utilities/Throttle",tags:["autodocs"],parameters:{docs:{subtitle:"The `throttle` utility function limits how often a function can execute, ensuring it runs at most once per specified interval. Useful for high-frequency events like scroll, resize, or mousemove."},controls:{expanded:!0}},argTypes:{interval:{control:{type:"number",min:0,max:2e3,step:50},description:"Throttle interval in milliseconds"}},args:{interval:200}},d={render:e=>{const t=`throttle-${Math.random().toString(36).substring(2,9)}`;let n=0,o=0;const r=()=>{const m=document.getElementById(`${t}-normal-count`),h=document.getElementById(`${t}-throttled-count`);m&&(m.textContent=String(n)),h&&(h.textContent=String(o))},s=v(e.interval,()=>{o++,r()}),a=()=>{n++,r()},l=()=>{a(),s()};return u`
2
2
  <div class="space-y-4">
3
3
  <div class="text-base">
4
4
  <p class="mb-2">
@@ -25,7 +25,7 @@ import{x as u}from"./iframe-C3TUQi31.js";import"./preload-helper-PPVm8Dsz.js";fu
25
25
 
26
26
  <button
27
27
  @click=${()=>{n=0,o=0,r()}}
28
- class="btu-button-gray btu-button-sm btu-button"
28
+ class="btu-button btu-button-gray btu-button-sm"
29
29
  >
30
30
  Reset Counters
31
31
  </button>
@@ -58,7 +58,7 @@ import{x as u}from"./iframe-C3TUQi31.js";import"./preload-helper-PPVm8Dsz.js";fu
58
58
 
59
59
  <button
60
60
  @click=${()=>{t=0,n=0,o()}}
61
- class="btu-button-gray btu-button-sm btu-button"
61
+ class="btu-button btu-button-gray btu-button-sm"
62
62
  >
63
63
  Reset Counters
64
64
  </button>
@@ -163,7 +163,7 @@ window.addEventListener('scroll', handleScroll)</code></pre>
163
163
  throttledCount = 0;
164
164
  updateCounts();
165
165
  }}
166
- class="btu-button-gray btu-button-sm btu-button"
166
+ class="btu-button btu-button-gray btu-button-sm"
167
167
  >
168
168
  Reset Counters
169
169
  </button>
@@ -231,7 +231,7 @@ window.addEventListener('scroll', handleScroll)</code></pre>
231
231
  throttledScrollCount = 0;
232
232
  updateScrollCounts();
233
233
  }}
234
- class="btu-button-gray btu-button-sm btu-button"
234
+ class="btu-button btu-button-gray btu-button-sm"
235
235
  >
236
236
  Reset Counters
237
237
  </button>