@brightspot/ui 5.0.2 → 5.0.3-css-bloat.1

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 (180) 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 +1238 -1226
  20. package/dist/storybook/assets/{ActionBar.stories-DR8qKNFC.js → ActionBar.stories-mJT7v57p.js} +1 -1
  21. package/dist/storybook/assets/{ActionItem.stories-n0lxOjIK.js → ActionItem.stories-BlFf4xEA.js} +1 -1
  22. package/dist/storybook/assets/{Avatar.stories-DWNXboUH.js → Avatar.stories--_L9Vbdp.js} +1 -1
  23. package/dist/storybook/assets/{AvatarGroup.stories-CJy1A8Mq.js → AvatarGroup.stories-C51JkHGo.js} +5 -5
  24. package/dist/storybook/assets/{Badge.stories-BkrU56BA.js → Badge.stories-Cb7xiaXg.js} +1 -1
  25. package/dist/storybook/assets/{Button-DqChP2U6.js → Button-CUSnc1o5.js} +1 -1
  26. package/dist/storybook/assets/{Button.stories-C1SqU1BT.js → Button.stories-DYN1XkuS.js} +1 -1
  27. package/dist/storybook/assets/{ButtonGroup.stories-CF1Mh2ug.js → ButtonGroup.stories-DG8aRtzR.js} +48 -48
  28. package/dist/storybook/assets/{Celebrate.stories-ClqAmUk2.js → Celebrate.stories-DTEESbu8.js} +7 -7
  29. package/dist/storybook/assets/{Checkbox.stories-hmxev_eW.js → Checkbox.stories-C9YH29GV.js} +1 -1
  30. package/dist/storybook/assets/{CircularProgress.stories-cWJl_EBP.js → CircularProgress.stories-DdYXxjoB.js} +1 -1
  31. package/dist/storybook/assets/{ClipboardMixin.stories-E6G4v8eu.js → ClipboardMixin.stories-CmZELLpR.js} +2 -2
  32. package/dist/storybook/assets/{Color-6BZIO3FS-mGoabL41.js → Color-6BZIO3FS-o42Z8gTi.js} +1 -1
  33. package/dist/storybook/assets/{Colors.stories-CjWwNT2v.js → Colors.stories-DjuerTf9.js} +1 -1
  34. package/dist/storybook/assets/{CombinedEffects.stories-DahZszMM.js → CombinedEffects.stories-C_AMq9k4.js} +1 -1
  35. package/dist/storybook/assets/{ComponentStatesMixin-iXss03sN.js → ComponentStatesMixin-kk-5wcvM.js} +1 -1
  36. package/dist/storybook/assets/{ComponentStatesMixin.stories-C1b3zMgf.js → ComponentStatesMixin.stories-cy7-TcbF.js} +3 -3
  37. package/dist/storybook/assets/{CopyToClipboard.stories-BEFwR9iw.js → CopyToClipboard.stories-nM41pfEH.js} +1 -1
  38. package/dist/storybook/assets/{Debounce.stories-m7227tf1.js → Debounce.stories-B8jBQli0.js} +3 -3
  39. package/dist/storybook/assets/{DocsRenderer-LL677BLK-ByZAmSPf.js → DocsRenderer-LL677BLK-wNqfOPga.js} +3 -3
  40. package/dist/storybook/assets/{Dropdown.stories-CELZm3nV.js → Dropdown.stories-D_TlsBqs.js} +3 -3
  41. package/dist/storybook/assets/{EmptyState.stories-DbIlZsvG.js → EmptyState.stories-BI98FUIg.js} +15 -15
  42. package/dist/storybook/assets/{Events.stories-E8SpdK9f.js → Events.stories-BoH9pXaI.js} +1 -1
  43. package/dist/storybook/assets/{Heading.stories-DIHkdyir.js → Heading.stories-BmjIILOl.js} +1 -1
  44. package/dist/storybook/assets/{HueRipple.stories-TE5VhBNI.js → HueRipple.stories-DOeusr2J.js} +1 -1
  45. package/dist/storybook/assets/{Icon.stories-V9A8zx3l.js → Icon.stories-DUSkJwNE.js} +7 -7
  46. package/dist/storybook/assets/{IconButton.stories-kyYFPqat.js → IconButton.stories-Bj5mC5rr.js} +1 -1
  47. package/dist/storybook/assets/{LinearProgress.stories-DMQkVCfc.js → LinearProgress.stories-BtVWYb-l.js} +1 -1
  48. package/dist/storybook/assets/{Pagination.stories-B4Kikiss.js → Pagination.stories-tspgl3pY.js} +3 -3
  49. package/dist/storybook/assets/{Popover.stories-DKYzeCVX.js → Popover.stories-CBZaxHo7.js} +18 -18
  50. package/dist/storybook/assets/{ReadyMixin-CfbnRH2m.js → ReadyMixin-DH37_O0o.js} +1 -1
  51. package/dist/storybook/assets/{RovingTabindexMixin.stories-B1QUtSUN.js → RovingTabindexMixin.stories-C1QArA31.js} +6 -6
  52. package/dist/storybook/assets/{Rtc.stories-DPk94cW8.js → Rtc.stories-zWf-zb6K.js} +1 -1
  53. package/dist/storybook/assets/{ScrollShadow.stories-BzsVosZE.js → ScrollShadow.stories-CtVTMAY-.js} +1 -1
  54. package/dist/storybook/assets/{Switch.stories-2ixJ66i0.js → Switch.stories-BGFvlrF1.js} +5 -5
  55. package/dist/storybook/assets/{Tab.stories-DjPAaRUe.js → Tab.stories-fFHdA-0z.js} +1 -1
  56. package/dist/storybook/assets/{Tabs.stories-DNGYpwdL.js → Tabs.stories-DUxUf-8D.js} +1 -1
  57. package/dist/storybook/assets/{Throttle.stories-DqiX39Q4.js → Throttle.stories-BUBzkB-y.js} +5 -5
  58. package/dist/storybook/assets/{Tooltip.stories-RWvjZUq6.js → Tooltip.stories-BRZ9x5GZ.js} +1 -1
  59. package/dist/storybook/assets/{Upload.stories-BPImkf-w.js → Upload.stories-9PNQJTXv.js} +1 -1
  60. package/dist/storybook/assets/{UploadItem.stories-sF91eklH.js → UploadItem.stories-Dg1Osr5_.js} +1 -1
  61. package/dist/storybook/assets/{Welcome.stories-C7T0lxjn.js → Welcome.stories-BbidbZpj.js} +1 -1
  62. package/dist/storybook/assets/{Widget.stories-hIm4Mgoy.js → Widget.stories-B5MKOa3i.js} +12 -12
  63. package/dist/storybook/assets/{WithTooltip-65CFNBJE-FBY88pP9.js → WithTooltip-65CFNBJE-DEoC8S9g.js} +1 -1
  64. package/dist/storybook/assets/{blocks-DNAwNK2O.js → blocks-BzEtLpfg.js} +5 -5
  65. package/dist/storybook/assets/{formatter-EIJCOSYU--IWOLjx2.js → formatter-EIJCOSYU-Dpapfc1g.js} +1 -1
  66. package/dist/storybook/assets/if-defined-CzvBkd64.js +1 -0
  67. package/dist/storybook/assets/{iframe-apn1Lgr_.js → iframe-Bi6noyvR.js} +5 -5
  68. package/dist/storybook/assets/iframe-PeGbyIdX.css +1 -0
  69. package/dist/storybook/assets/{index-BSiX30xx.js → index-B6rDQTSl.js} +1 -1
  70. package/dist/storybook/assets/{onFind-BrtZPfAg.js → onFind-eyMIAO26.js} +1 -1
  71. package/dist/storybook/assets/{onFind.stories-CdBIAJjT.js → onFind.stories-CPJuRapJ.js} +25 -25
  72. package/dist/storybook/assets/{onRemove.stories-BhaBwi44.js → onRemove.stories-Dbwmibgi.js} +3 -3
  73. package/dist/storybook/assets/{onVisible.stories-BOsxDhRj.js → onVisible.stories-C_V2xOaA.js} +1 -1
  74. package/dist/storybook/assets/{style-map-CAjfRbcg.js → style-map-D3mT-6Qa.js} +1 -1
  75. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-5ISl-7xc.js → syntaxhighlighter-ED5Y7EFY-BJK43TGw.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/adr/0001-monolith-css-delivery.md +20 -0
  99. package/docs/adr/0002-complete-component-preset.md +26 -0
  100. package/docs/adr/0003-plugin-selector-isolation.md +24 -0
  101. package/docs/adr/0004-dynamic-icon-names-route-through-runtime-injectors.md +50 -0
  102. package/docs/adr/0005-rtl-conditional-overlay.md +44 -0
  103. package/docs/adr/0006-editor-has-runtime-perf.md +33 -0
  104. package/docs/components/ButtonGroup.md +15 -12
  105. package/package.json +4 -3
  106. package/src/legacy/tool-ui/src/AIInline.css +1 -1
  107. package/src/legacy/tool-ui/src/Admin.css +2 -2
  108. package/src/legacy/tool-ui/src/Base.css +1 -1
  109. package/src/legacy/tool-ui/src/BulkUpload.css +1 -1
  110. package/src/legacy/tool-ui/src/CIGCluster.css +1 -1
  111. package/src/legacy/tool-ui/src/Card.css +1 -1
  112. package/src/legacy/tool-ui/src/CodeMirror.css +4 -4
  113. package/src/legacy/tool-ui/src/ColorInputSpectrum.css +2 -2
  114. package/src/legacy/tool-ui/src/ComboInput.css +3 -3
  115. package/src/legacy/tool-ui/src/Compat.css +6 -4
  116. package/src/legacy/tool-ui/src/ContentEdit.css +12 -12
  117. package/src/legacy/tool-ui/src/ContentEditDrawer.css +6 -6
  118. package/src/legacy/tool-ui/src/ContentInputGroup.css +5 -10
  119. package/src/legacy/tool-ui/src/ContentReporting.css +2 -2
  120. package/src/legacy/tool-ui/src/ContentSelector.css +5 -5
  121. package/src/legacy/tool-ui/src/ContentSummary.css +1 -3
  122. package/src/legacy/tool-ui/src/ContentTemplatesWidget.css +1 -1
  123. package/src/legacy/tool-ui/src/ContentTools.css +1 -1
  124. package/src/legacy/tool-ui/src/Conversation.css +2 -2
  125. package/src/legacy/tool-ui/src/Conversation.ts +10 -54
  126. package/src/legacy/tool-ui/src/Crosslinker.css +3 -3
  127. package/src/legacy/tool-ui/src/DashboardWidget.css +1 -1
  128. package/src/legacy/tool-ui/src/Dialog.css +4 -2
  129. package/src/legacy/tool-ui/src/Diff.css +1 -1
  130. package/src/legacy/tool-ui/src/Dropdown.css +2 -2
  131. package/src/legacy/tool-ui/src/Enhancement.css +1 -1
  132. package/src/legacy/tool-ui/src/FileInput.css +2 -2
  133. package/src/legacy/tool-ui/src/FormFilter.css +3 -3
  134. package/src/legacy/tool-ui/src/FullscreenView.css +4 -4
  135. package/src/legacy/tool-ui/src/Guide.css +6 -6
  136. package/src/legacy/tool-ui/src/Hierarchy.css +4 -4
  137. package/src/legacy/tool-ui/src/ImageEditor.css +13 -13
  138. package/src/legacy/tool-ui/src/LinkCarousel.css +1 -1
  139. package/src/legacy/tool-ui/src/LiveBlog.css +2 -2
  140. package/src/legacy/tool-ui/src/LocationMap.css +1 -1
  141. package/src/legacy/tool-ui/src/MailPublishing.css +1 -1
  142. package/src/legacy/tool-ui/src/MenuView.css +4 -4
  143. package/src/legacy/tool-ui/src/Message.css +1 -1
  144. package/src/legacy/tool-ui/src/Page.css +35 -16
  145. package/src/legacy/tool-ui/src/Popup.css +8 -3
  146. package/src/legacy/tool-ui/src/ProseMirror.css +1 -1
  147. package/src/legacy/tool-ui/src/ProseMirrorContainer.css +1 -1
  148. package/src/legacy/tool-ui/src/ProseMirrorEnhancementMenu.css +2 -2
  149. package/src/legacy/tool-ui/src/ProseMirrorFindReplace.css +2 -2
  150. package/src/legacy/tool-ui/src/QueryField.css +1 -1
  151. package/src/legacy/tool-ui/src/RepeatableContentInputGroup.css +1 -1
  152. package/src/legacy/tool-ui/src/RepeatableContentSelector.css +1 -1
  153. package/src/legacy/tool-ui/src/RichText.css +1 -1
  154. package/src/legacy/tool-ui/src/SearchFields.css +3 -2
  155. package/src/legacy/tool-ui/src/SearchResult.css +3 -3
  156. package/src/legacy/tool-ui/src/SearchWidget.css +1 -1
  157. package/src/legacy/tool-ui/src/SearchWidgetAdvanced.css +1 -1
  158. package/src/legacy/tool-ui/src/StyleEmbeddedContent.css +3 -3
  159. package/src/legacy/tool-ui/src/TabBar.css +1 -1
  160. package/src/legacy/tool-ui/src/Table.css +1 -1
  161. package/src/legacy/tool-ui/src/Taxonomy.css +4 -4
  162. package/src/legacy/tool-ui/src/ThemeBundleEditor.css +1 -1
  163. package/src/legacy/tool-ui/src/TimedContent.css +2 -2
  164. package/src/legacy/tool-ui/src/ViewWatchers.css +1 -1
  165. package/src/legacy/tool-ui/src/Widget.css +3 -2
  166. package/src/legacy/tool-ui/src/Workflow.css +3 -3
  167. package/src/legacy/tool-ui/src/main/webapp/dist/{7718.a937b0cafa8cf7c039d2.css → 2111.70d9e2ee26ead4bd147b.css} +1 -1
  168. package/src/legacy/tool-ui/src/main/webapp/dist/{6216.2d532054fcb8e634f96b.js → 6216.cf8adc1990ee1111f065.js} +1 -1
  169. package/src/legacy/tool-ui/src/main/webapp/dist/{2111.a937b0cafa8cf7c039d2.css → 7718.70d9e2ee26ead4bd147b.css} +1 -1
  170. package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.945bd28778b1a3e937c7.js → RTEProseMirror.e8521581e28e90ef6f30.js} +2 -2
  171. package/src/legacy/tool-ui/src/main/webapp/dist/{v4.dc7d7c1a18ddb6117061.js → v4.ab96a7dd75fa7af9c970.js} +3 -3
  172. package/src/legacy/tool-ui/src/main/webapp/dist/v5.58cad1e6193f2106d271.css +5 -0
  173. package/src/legacy/tool-ui/src/main/webapp/dist/{v5.7eea426a9a47341f03f8.js → v5.e48c1d8f41b5e088bef0.js} +3 -3
  174. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/ProseMirror-table.less +1 -28
  175. package/dist/storybook/assets/if-defined-Cxz6E-2i.js +0 -1
  176. package/dist/storybook/assets/iframe-D0roG0J-.css +0 -1
  177. package/src/legacy/tool-ui/src/main/webapp/dist/v5.951c664100c4fb201fd8.css +0 -5
  178. /package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.945bd28778b1a3e937c7.js.LICENSE.txt → RTEProseMirror.e8521581e28e90ef6f30.js.LICENSE.txt} +0 -0
  179. /package/src/legacy/tool-ui/src/main/webapp/dist/{v4.dc7d7c1a18ddb6117061.js.LICENSE.txt → v4.ab96a7dd75fa7af9c970.js.LICENSE.txt} +0 -0
  180. /package/src/legacy/tool-ui/src/main/webapp/dist/{v5.7eea426a9a47341f03f8.js.LICENSE.txt → v5.e48c1d8f41b5e088bef0.js.LICENSE.txt} +0 -0
@@ -1529,187 +1529,6 @@
1529
1529
  }
1530
1530
  ]
1531
1531
  },
1532
- {
1533
- "kind": "javascript-module",
1534
- "path": "src/components/badge/Badge.ts",
1535
- "declarations": [
1536
- {
1537
- "kind": "class",
1538
- "description": "A badge component for highlighting important information.\n\nBadges help highlight notifications, status, or new messages.\nPrimarily used for communicating secondary or additional information.",
1539
- "name": "Badge",
1540
- "cssProperties": [
1541
- {
1542
- "description": "Text color (overrides theme color)",
1543
- "name": "--badge-color-foreground"
1544
- },
1545
- {
1546
- "description": "Background color (overrides theme color)",
1547
- "name": "--badge-color-background"
1548
- },
1549
- {
1550
- "description": "Border radius size (overrides shape default, default: 999px)",
1551
- "name": "--badge-radius-size"
1552
- },
1553
- {
1554
- "description": "Horizontal padding (overrides size default)",
1555
- "name": "--badge-px"
1556
- },
1557
- {
1558
- "description": "Vertical padding (overrides size default)",
1559
- "name": "--badge-py"
1560
- },
1561
- {
1562
- "description": "Size of the dot affordance (default: 6px)",
1563
- "name": "--badge-dot-size"
1564
- }
1565
- ],
1566
- "slots": [
1567
- {
1568
- "description": "Label text or child elements (e.g., btu-icon + text)",
1569
- "name": ""
1570
- }
1571
- ],
1572
- "members": [
1573
- {
1574
- "kind": "field",
1575
- "name": "variant",
1576
- "type": {
1577
- "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
1578
- },
1579
- "default": "'info'",
1580
- "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
1581
- "attribute": "variant"
1582
- },
1583
- {
1584
- "kind": "field",
1585
- "name": "dot",
1586
- "type": {
1587
- "text": "boolean"
1588
- },
1589
- "default": "false",
1590
- "description": "Should a dot be displayed before the label?",
1591
- "attribute": "dot"
1592
- },
1593
- {
1594
- "kind": "field",
1595
- "name": "size",
1596
- "type": {
1597
- "text": "'sm' | 'md' | 'lg'"
1598
- },
1599
- "default": "'sm'",
1600
- "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
1601
- "attribute": "size"
1602
- },
1603
- {
1604
- "kind": "method",
1605
- "name": "emit",
1606
- "parameters": [
1607
- {
1608
- "name": "type",
1609
- "type": {
1610
- "text": "K"
1611
- },
1612
- "description": "Event name from CustomEventMap"
1613
- },
1614
- {
1615
- "name": "detail",
1616
- "optional": true,
1617
- "type": {
1618
- "text": "UnpackCustomEvent<CustomEventMap[K]>"
1619
- },
1620
- "description": "Optional event detail payload"
1621
- }
1622
- ],
1623
- "description": "Dispatches a type-safe CustomEvent with standardized configuration.\n\nAll events are configured with:\n- bubbles: true (event propagates up the DOM tree)\n- cancelable: false (event cannot be cancelled)\n- composed: true (event crosses shadow DOM boundaries)",
1624
- "return": {
1625
- "type": {
1626
- "text": "boolean"
1627
- }
1628
- },
1629
- "inheritedFrom": {
1630
- "name": "EventEmitterMixin",
1631
- "module": "src/util/EventEmitterMixin.ts"
1632
- }
1633
- }
1634
- ],
1635
- "events": [
1636
- {
1637
- "type": {
1638
- "text": "CustomEvent"
1639
- },
1640
- "description": "Fired after first render and initialization",
1641
- "name": "btu-badge-ready"
1642
- }
1643
- ],
1644
- "attributes": [
1645
- {
1646
- "name": "variant",
1647
- "type": {
1648
- "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
1649
- },
1650
- "default": "'info'",
1651
- "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
1652
- "fieldName": "variant",
1653
- "attribute": "variant"
1654
- },
1655
- {
1656
- "name": "dot",
1657
- "type": {
1658
- "text": "boolean"
1659
- },
1660
- "default": "false",
1661
- "description": "Should a dot be displayed before the label?",
1662
- "fieldName": "dot",
1663
- "attribute": "dot"
1664
- },
1665
- {
1666
- "name": "size",
1667
- "type": {
1668
- "text": "'sm' | 'md' | 'lg'"
1669
- },
1670
- "default": "'sm'",
1671
- "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
1672
- "fieldName": "size",
1673
- "attribute": "size"
1674
- }
1675
- ],
1676
- "mixins": [
1677
- {
1678
- "name": "EventEmitterMixin",
1679
- "module": "/src/util/EventEmitterMixin.js"
1680
- },
1681
- {
1682
- "name": "ReadyMixin",
1683
- "module": "/src/util/ReadyMixin.js"
1684
- }
1685
- ],
1686
- "superclass": {
1687
- "name": "LitElement",
1688
- "package": "lit"
1689
- },
1690
- "tagName": "btu-badge",
1691
- "customElement": true
1692
- }
1693
- ],
1694
- "exports": [
1695
- {
1696
- "kind": "js",
1697
- "name": "default",
1698
- "declaration": {
1699
- "name": "Badge",
1700
- "module": "src/components/badge/Badge.ts"
1701
- }
1702
- },
1703
- {
1704
- "kind": "custom-element-definition",
1705
- "name": "btu-badge",
1706
- "declaration": {
1707
- "name": "Badge",
1708
- "module": "src/components/badge/Badge.ts"
1709
- }
1710
- }
1711
- ]
1712
- },
1713
1532
  {
1714
1533
  "kind": "javascript-module",
1715
1534
  "path": "src/components/button-group/ButtonGroup.ts",
@@ -1732,21 +1551,33 @@
1732
1551
  "name": "--button-group-border-color"
1733
1552
  },
1734
1553
  {
1735
- "description": "Background of a toggled/selected child (default: primary-50)",
1554
+ "description": "Background of a toggled/selected child (default: child's --button-tint-subtle)",
1736
1555
  "name": "--button-group-selection-bg"
1737
1556
  },
1738
1557
  {
1739
- "description": "Text/icon color of a toggled/selected child (default: primary-700)",
1558
+ "description": "Text/icon color of a toggled/selected child (default: child's --button-tint-strong)",
1740
1559
  "name": "--button-group-selection-color"
1741
1560
  },
1742
1561
  {
1743
- "description": "Highlight color of the selection shimmer effect (default: primary-200)",
1562
+ "description": "Highlight color of the selection shimmer effect (default: child's --button-tint-highlight) Reads the following CSS custom properties from each child button (set by the button plugin per color variant — see tailwind-plugin-button.ts):",
1744
1563
  "name": "--button-group-shimmer-highlight"
1564
+ },
1565
+ {
1566
+ "description": "Subtle tint of the child button's color family (read-only here)",
1567
+ "name": "--button-tint-subtle"
1568
+ },
1569
+ {
1570
+ "description": "Strong tint of the child button's color family (read-only here)",
1571
+ "name": "--button-tint-strong"
1572
+ },
1573
+ {
1574
+ "description": "Highlight tint of the child button's color family (read-only here)",
1575
+ "name": "--button-tint-highlight"
1745
1576
  }
1746
1577
  ],
1747
1578
  "slots": [
1748
1579
  {
1749
- "description": "One or more btu-button or btu-icon-button elements to display in the group",
1580
+ "description": "One or more `<button class=\"btu-button …\">` or `<btu-icon-button>` elements to display in the group. The `connected` variant rounds the outer corners on the real `<button>`, so anchors styled as `.btu-button` slotted directly will not get rounded corners. Use `<button>` for grouped controls.",
1750
1581
  "name": ""
1751
1582
  },
1752
1583
  {
@@ -2052,79 +1883,260 @@
2052
1883
  },
2053
1884
  {
2054
1885
  "kind": "javascript-module",
2055
- "path": "src/components/checkbox/Checkbox.ts",
1886
+ "path": "src/components/badge/Badge.ts",
2056
1887
  "declarations": [
2057
1888
  {
2058
1889
  "kind": "class",
2059
- "description": "A checkbox component for selecting one or more options from a set.\n\nUses a hidden native checkbox internally for accessibility and form\nparticipation. Styled via the `btu-checkbox` Tailwind plugin classes.\nThe component manages its own `className` do not modify it externally\nafter initialization (classes present at connection time are preserved).",
2060
- "name": "Checkbox",
1890
+ "description": "A badge component for highlighting important information.\n\nBadges help highlight notifications, status, or new messages.\nPrimarily used for communicating secondary or additional information.",
1891
+ "name": "Badge",
2061
1892
  "cssProperties": [
2062
1893
  {
2063
- "description": "Background and border color when checked or indeterminate, and tinted background/border on unchecked hover (default: oklch(var(--btu-theme-primary-700)))",
2064
- "name": "--checkbox-color-primary"
1894
+ "description": "Text color (overrides theme color)",
1895
+ "name": "--badge-color-foreground"
2065
1896
  },
2066
1897
  {
2067
- "description": "Border color in the unchecked state (default: oklch(var(--btu-theme-gray-300)))",
2068
- "name": "--checkbox-color-border"
1898
+ "description": "Background color (overrides theme color)",
1899
+ "name": "--badge-color-background"
2069
1900
  },
2070
1901
  {
2071
- "description": "Border and text color in the error state (default: oklch(var(--btu-theme-error-600)))",
2072
- "name": "--checkbox-color-error"
1902
+ "description": "Border radius size (overrides shape default, default: 999px)",
1903
+ "name": "--badge-radius-size"
2073
1904
  },
2074
1905
  {
2075
- "description": "Corner rounding of the checkbox square (default: 4px)",
2076
- "name": "--checkbox-border-radius"
1906
+ "description": "Horizontal padding (overrides size default)",
1907
+ "name": "--badge-px"
2077
1908
  },
2078
1909
  {
2079
- "description": "Distance between the checkbox and the label (default: 0.75rem)",
2080
- "name": "--checkbox-label-spacing"
1910
+ "description": "Vertical padding (overrides size default)",
1911
+ "name": "--badge-py"
2081
1912
  },
2082
1913
  {
2083
- "description": "[Internal] Width and height of the checkbox square, set by the size variant (sm: 1rem, md: 1.25rem). Use the `size` attribute instead of overriding directly — the icon must scale in tandem.",
2084
- "name": "--checkbox-box-size"
2085
- },
1914
+ "description": "Size of the dot affordance (default: 6px)",
1915
+ "name": "--badge-dot-size"
1916
+ }
1917
+ ],
1918
+ "slots": [
2086
1919
  {
2087
- "description": "[Internal] Width and height of the icon inside the box, set by the size variant (sm: 0.75rem, md: 0.875rem). Use the `size` attribute instead of overriding directly.",
2088
- "name": "--checkbox-icon-size"
1920
+ "description": "Label text or child elements (e.g., btu-icon + text)",
1921
+ "name": ""
2089
1922
  }
2090
1923
  ],
2091
1924
  "members": [
2092
1925
  {
2093
1926
  "kind": "field",
2094
- "name": "label",
1927
+ "name": "variant",
2095
1928
  "type": {
2096
- "text": "string | undefined"
1929
+ "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
2097
1930
  },
2098
- "description": "The text label displayed next to the checkbox.",
2099
- "attribute": "label"
1931
+ "default": "'info'",
1932
+ "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
1933
+ "attribute": "variant"
2100
1934
  },
2101
1935
  {
2102
1936
  "kind": "field",
2103
- "name": "description",
1937
+ "name": "dot",
2104
1938
  "type": {
2105
- "text": "string | undefined"
1939
+ "text": "boolean"
2106
1940
  },
2107
- "description": "Optional helper text displayed below the label.",
2108
- "attribute": "description"
1941
+ "default": "false",
1942
+ "description": "Should a dot be displayed before the label?",
1943
+ "attribute": "dot"
2109
1944
  },
2110
1945
  {
2111
1946
  "kind": "field",
2112
1947
  "name": "size",
2113
1948
  "type": {
2114
- "text": "'sm' | 'md'"
1949
+ "text": "'sm' | 'md' | 'lg'"
2115
1950
  },
2116
1951
  "default": "'sm'",
2117
- "description": "Controls the scale of the checkbox and associated typography.",
2118
- "attribute": "size",
2119
- "reflects": true
1952
+ "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
1953
+ "attribute": "size"
2120
1954
  },
2121
1955
  {
2122
- "kind": "field",
2123
- "name": "checked",
2124
- "type": {
2125
- "text": "boolean"
2126
- },
2127
- "default": "false",
1956
+ "kind": "method",
1957
+ "name": "emit",
1958
+ "parameters": [
1959
+ {
1960
+ "name": "type",
1961
+ "type": {
1962
+ "text": "K"
1963
+ },
1964
+ "description": "Event name from CustomEventMap"
1965
+ },
1966
+ {
1967
+ "name": "detail",
1968
+ "optional": true,
1969
+ "type": {
1970
+ "text": "UnpackCustomEvent<CustomEventMap[K]>"
1971
+ },
1972
+ "description": "Optional event detail payload"
1973
+ }
1974
+ ],
1975
+ "description": "Dispatches a type-safe CustomEvent with standardized configuration.\n\nAll events are configured with:\n- bubbles: true (event propagates up the DOM tree)\n- cancelable: false (event cannot be cancelled)\n- composed: true (event crosses shadow DOM boundaries)",
1976
+ "return": {
1977
+ "type": {
1978
+ "text": "boolean"
1979
+ }
1980
+ },
1981
+ "inheritedFrom": {
1982
+ "name": "EventEmitterMixin",
1983
+ "module": "src/util/EventEmitterMixin.ts"
1984
+ }
1985
+ }
1986
+ ],
1987
+ "events": [
1988
+ {
1989
+ "type": {
1990
+ "text": "CustomEvent"
1991
+ },
1992
+ "description": "Fired after first render and initialization",
1993
+ "name": "btu-badge-ready"
1994
+ }
1995
+ ],
1996
+ "attributes": [
1997
+ {
1998
+ "name": "variant",
1999
+ "type": {
2000
+ "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
2001
+ },
2002
+ "default": "'info'",
2003
+ "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
2004
+ "fieldName": "variant",
2005
+ "attribute": "variant"
2006
+ },
2007
+ {
2008
+ "name": "dot",
2009
+ "type": {
2010
+ "text": "boolean"
2011
+ },
2012
+ "default": "false",
2013
+ "description": "Should a dot be displayed before the label?",
2014
+ "fieldName": "dot",
2015
+ "attribute": "dot"
2016
+ },
2017
+ {
2018
+ "name": "size",
2019
+ "type": {
2020
+ "text": "'sm' | 'md' | 'lg'"
2021
+ },
2022
+ "default": "'sm'",
2023
+ "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
2024
+ "fieldName": "size",
2025
+ "attribute": "size"
2026
+ }
2027
+ ],
2028
+ "mixins": [
2029
+ {
2030
+ "name": "EventEmitterMixin",
2031
+ "module": "/src/util/EventEmitterMixin.js"
2032
+ },
2033
+ {
2034
+ "name": "ReadyMixin",
2035
+ "module": "/src/util/ReadyMixin.js"
2036
+ }
2037
+ ],
2038
+ "superclass": {
2039
+ "name": "LitElement",
2040
+ "package": "lit"
2041
+ },
2042
+ "tagName": "btu-badge",
2043
+ "customElement": true
2044
+ }
2045
+ ],
2046
+ "exports": [
2047
+ {
2048
+ "kind": "js",
2049
+ "name": "default",
2050
+ "declaration": {
2051
+ "name": "Badge",
2052
+ "module": "src/components/badge/Badge.ts"
2053
+ }
2054
+ },
2055
+ {
2056
+ "kind": "custom-element-definition",
2057
+ "name": "btu-badge",
2058
+ "declaration": {
2059
+ "name": "Badge",
2060
+ "module": "src/components/badge/Badge.ts"
2061
+ }
2062
+ }
2063
+ ]
2064
+ },
2065
+ {
2066
+ "kind": "javascript-module",
2067
+ "path": "src/components/checkbox/Checkbox.ts",
2068
+ "declarations": [
2069
+ {
2070
+ "kind": "class",
2071
+ "description": "A checkbox component for selecting one or more options from a set.\n\nUses a hidden native checkbox internally for accessibility and form\nparticipation. Styled via the `btu-checkbox` Tailwind plugin classes.\nThe component manages its own `className` — do not modify it externally\nafter initialization (classes present at connection time are preserved).",
2072
+ "name": "Checkbox",
2073
+ "cssProperties": [
2074
+ {
2075
+ "description": "Background and border color when checked or indeterminate, and tinted background/border on unchecked hover (default: oklch(var(--btu-theme-primary-700)))",
2076
+ "name": "--checkbox-color-primary"
2077
+ },
2078
+ {
2079
+ "description": "Border color in the unchecked state (default: oklch(var(--btu-theme-gray-300)))",
2080
+ "name": "--checkbox-color-border"
2081
+ },
2082
+ {
2083
+ "description": "Border and text color in the error state (default: oklch(var(--btu-theme-error-600)))",
2084
+ "name": "--checkbox-color-error"
2085
+ },
2086
+ {
2087
+ "description": "Corner rounding of the checkbox square (default: 4px)",
2088
+ "name": "--checkbox-border-radius"
2089
+ },
2090
+ {
2091
+ "description": "Distance between the checkbox and the label (default: 0.75rem)",
2092
+ "name": "--checkbox-label-spacing"
2093
+ },
2094
+ {
2095
+ "description": "[Internal] Width and height of the checkbox square, set by the size variant (sm: 1rem, md: 1.25rem). Use the `size` attribute instead of overriding directly — the icon must scale in tandem.",
2096
+ "name": "--checkbox-box-size"
2097
+ },
2098
+ {
2099
+ "description": "[Internal] Width and height of the icon inside the box, set by the size variant (sm: 0.75rem, md: 0.875rem). Use the `size` attribute instead of overriding directly.",
2100
+ "name": "--checkbox-icon-size"
2101
+ }
2102
+ ],
2103
+ "members": [
2104
+ {
2105
+ "kind": "field",
2106
+ "name": "label",
2107
+ "type": {
2108
+ "text": "string | undefined"
2109
+ },
2110
+ "description": "The text label displayed next to the checkbox.",
2111
+ "attribute": "label"
2112
+ },
2113
+ {
2114
+ "kind": "field",
2115
+ "name": "description",
2116
+ "type": {
2117
+ "text": "string | undefined"
2118
+ },
2119
+ "description": "Optional helper text displayed below the label.",
2120
+ "attribute": "description"
2121
+ },
2122
+ {
2123
+ "kind": "field",
2124
+ "name": "size",
2125
+ "type": {
2126
+ "text": "'sm' | 'md'"
2127
+ },
2128
+ "default": "'sm'",
2129
+ "description": "Controls the scale of the checkbox and associated typography.",
2130
+ "attribute": "size",
2131
+ "reflects": true
2132
+ },
2133
+ {
2134
+ "kind": "field",
2135
+ "name": "checked",
2136
+ "type": {
2137
+ "text": "boolean"
2138
+ },
2139
+ "default": "false",
2128
2140
  "description": "Whether the checkbox is currently selected.",
2129
2141
  "attribute": "checked",
2130
2142
  "reflects": true
@@ -4532,89 +4544,279 @@
4532
4544
  },
4533
4545
  {
4534
4546
  "kind": "javascript-module",
4535
- "path": "src/components/empty-state/EmptyState.ts",
4547
+ "path": "src/components/icon/Icon.ts",
4536
4548
  "declarations": [
4537
4549
  {
4538
4550
  "kind": "class",
4539
- "description": "An empty state component for displaying placeholder content when no data is available.\n\nSupports a graphic slot for icons/images/pictures/SVGs, a heading, a description,\nand an actions slot for buttons or links. Available in three sizes (sm, md, lg)\nwith semantic heading levels.\n\n## Architecture: Light DOM + Pseudo-Slots\n\nThis component uses **Light DOM** (no Shadow Root) with pseudo-slots:\n- User-provided children are physically moved into internal containers\n- Movement is based on `slot` attributes\n- The `onFind` utility detects and redistributes newly-added children (one-time per element)\n\n### Node Redistribution Rules\n- `slot=\"graphic\"` - Moved to graphic container (icon, image, picture, or SVG)\n- `slot=\"actions\"` - Moved to an internal `btu-button-group` (variant=\"spaced\")\n\n### Actions composition\n\nThe actions container IS a `btu-button-group` with `variant=\"spaced\"`. Its `size`\nis mapped from the empty-state `size` prop (sm→small, md→medium, lg→large) so all\nchild `btu-button` / `btu-icon-button` elements get consistent sizing and group\nsemantics (`role=\"group\"`, roving tabindex, disabled propagation) for free.",
4540
- "name": "EmptyState",
4551
+ "description": "An icon component for displaying Lucide icons.\n\nIcons inherit parent text color by default or can use gradient fills.\nAll icons are from the Lucide icon library (https://lucide.dev/icons/).\nSupports both direct SVG rendering and mask-based gradient fills.",
4552
+ "name": "Icon",
4541
4553
  "cssProperties": [
4542
4554
  {
4543
- "description": "Maximum width of the content block (default: min(75cqw, 360px))",
4544
- "name": "--empty-state-max-width"
4555
+ "description": "Icon size (overrides size default)",
4556
+ "name": "--icon-size"
4545
4557
  },
4546
4558
  {
4547
- "description": "Heading text color (default: gray-900)",
4548
- "name": "--empty-state-color-heading"
4559
+ "description": "SVG stroke width as a unitless number in viewBox units; scales visually with icon size (default: 2)",
4560
+ "name": "--icon-stroke-width"
4549
4561
  },
4550
4562
  {
4551
- "description": "Description text color (default: gray-500)",
4552
- "name": "--empty-state-color-description"
4553
- }
4554
- ],
4555
- "slots": [
4556
- {
4557
- "description": "Pseudo-slot for icon, image, picture, or SVG graphic. When the child is a `btu-icon`, the component overrides its `size` attribute based on the empty-state `size` prop (sm→md, md→lg, lg→xl). Use an `img`, `picture`, or inline `svg` for full size control.",
4558
- "name": "graphic"
4563
+ "description": "Icon fill color for filled icons (e.g., \"currentColor\")",
4564
+ "name": "--icon-fill"
4559
4565
  },
4560
4566
  {
4561
- "description": "Pseudo-slot for action buttons. Children are moved into an internal `btu-button-group` (variant=\"spaced\"), so size and disabled state are managed by the group.",
4562
- "name": "actions"
4567
+ "description": "SVG data URI for mask-based rendering",
4568
+ "name": "--icon-svg"
4563
4569
  }
4564
4570
  ],
4565
4571
  "members": [
4566
4572
  {
4567
4573
  "kind": "field",
4568
- "name": "heading",
4569
- "type": {
4570
- "text": "string"
4571
- },
4572
- "default": "''",
4573
- "description": "Heading text displayed in the empty state.",
4574
- "attribute": "heading"
4575
- },
4576
- {
4577
- "kind": "field",
4578
- "name": "description",
4579
- "type": {
4580
- "text": "string | undefined"
4581
- },
4582
- "description": "Description text displayed below the heading.",
4583
- "attribute": "description"
4574
+ "name": "tagName",
4575
+ "static": true,
4576
+ "readonly": true
4584
4577
  },
4585
4578
  {
4586
4579
  "kind": "field",
4587
4580
  "name": "size",
4588
4581
  "type": {
4589
- "text": "'sm' | 'md' | 'lg'"
4582
+ "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
4590
4583
  },
4591
4584
  "default": "'md'",
4592
- "description": "Size variant of the empty state. Affects spacing, description text, graphic size,\nand when `heading-level` is unset the default heading level (sm→5, md→4, lg→3).",
4585
+ "description": "Size of the icon.\n- 'xs': Extra small (0.75rem)\n- 'sm': Small (1rem)\n- 'md': Medium (1.25rem, default)\n- 'lg': Large (1.5rem)\n- 'xl': Extra large (1.75rem)",
4593
4586
  "attribute": "size"
4594
4587
  },
4595
4588
  {
4596
4589
  "kind": "field",
4597
- "name": "headingLevel",
4590
+ "name": "symbol",
4598
4591
  "type": {
4599
- "text": "number | undefined"
4592
+ "text": "string"
4600
4593
  },
4601
- "description": "Heading level (1-6). When set to a valid integer 1-6, overrides the size-based\ndefault and drives both the semantic h1-h6 tag and the visual heading size\n(btu-heading-1 through btu-heading-6). Invalid values log a warning and fall\nback to the size-based default.",
4602
- "attribute": "heading-level"
4594
+ "default": "'circle-dashed'",
4595
+ "description": "Lucide icon name to display.\nSee https://lucide.dev/icons/ for available icons.",
4596
+ "attribute": "symbol"
4603
4597
  },
4604
4598
  {
4605
4599
  "kind": "field",
4606
- "name": "initialClasses",
4600
+ "name": "gradient",
4607
4601
  "type": {
4608
- "text": "string[]"
4602
+ "text": "IconGradientColor | undefined"
4609
4603
  },
4610
- "privacy": "private",
4611
- "default": "[]"
4604
+ "description": "Theme color to use for gradient fill.\nWhen set, icon displays with gradient. When undefined, icon inherits parent text color.",
4605
+ "attribute": "gradient"
4612
4606
  },
4613
4607
  {
4614
- "kind": "method",
4615
- "name": "syncGraphicIconSize",
4616
- "privacy": "private",
4617
- "return": {
4608
+ "kind": "field",
4609
+ "name": "emphasize",
4610
+ "type": {
4611
+ "text": "boolean | 'pulse' | undefined"
4612
+ },
4613
+ "description": "Emphasize mode — renders a tonal circle with ring behind the icon.\nColors are derived from `currentColor` via oklch relative color syntax.\nDefaults to primary; override with Tailwind `text-*` classes or `style=\"color: ...\"`.\nSet as a boolean for the static circle, or `\"pulse\"` for a one-shot ring animation.\nNot intended for use with `gradient` — the two features target\nconflicting rendering modes.",
4614
+ "attribute": "emphasize",
4615
+ "reflects": true
4616
+ },
4617
+ {
4618
+ "kind": "method",
4619
+ "name": "emit",
4620
+ "parameters": [
4621
+ {
4622
+ "name": "type",
4623
+ "type": {
4624
+ "text": "K"
4625
+ },
4626
+ "description": "Event name from CustomEventMap"
4627
+ },
4628
+ {
4629
+ "name": "detail",
4630
+ "optional": true,
4631
+ "type": {
4632
+ "text": "UnpackCustomEvent<CustomEventMap[K]>"
4633
+ },
4634
+ "description": "Optional event detail payload"
4635
+ }
4636
+ ],
4637
+ "description": "Dispatches a type-safe CustomEvent with standardized configuration.\n\nAll events are configured with:\n- bubbles: true (event propagates up the DOM tree)\n- cancelable: false (event cannot be cancelled)\n- composed: true (event crosses shadow DOM boundaries)",
4638
+ "return": {
4639
+ "type": {
4640
+ "text": "boolean"
4641
+ }
4642
+ },
4643
+ "inheritedFrom": {
4644
+ "name": "EventEmitterMixin",
4645
+ "module": "src/util/EventEmitterMixin.ts"
4646
+ }
4647
+ }
4648
+ ],
4649
+ "events": [
4650
+ {
4651
+ "type": {
4652
+ "text": "CustomEvent"
4653
+ },
4654
+ "description": "Fired after first render and initialization",
4655
+ "name": "btu-icon-ready"
4656
+ }
4657
+ ],
4658
+ "attributes": [
4659
+ {
4660
+ "name": "size",
4661
+ "type": {
4662
+ "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
4663
+ },
4664
+ "default": "'md'",
4665
+ "description": "Size of the icon.\n- 'xs': Extra small (0.75rem)\n- 'sm': Small (1rem)\n- 'md': Medium (1.25rem, default)\n- 'lg': Large (1.5rem)\n- 'xl': Extra large (1.75rem)",
4666
+ "fieldName": "size",
4667
+ "attribute": "size"
4668
+ },
4669
+ {
4670
+ "name": "symbol",
4671
+ "type": {
4672
+ "text": "string"
4673
+ },
4674
+ "default": "'circle-dashed'",
4675
+ "description": "Lucide icon name to display.\nSee https://lucide.dev/icons/ for available icons.",
4676
+ "fieldName": "symbol",
4677
+ "attribute": "symbol"
4678
+ },
4679
+ {
4680
+ "name": "gradient",
4681
+ "type": {
4682
+ "text": "IconGradientColor | undefined"
4683
+ },
4684
+ "description": "Theme color to use for gradient fill.\nWhen set, icon displays with gradient. When undefined, icon inherits parent text color.",
4685
+ "fieldName": "gradient",
4686
+ "attribute": "gradient"
4687
+ },
4688
+ {
4689
+ "name": "emphasize",
4690
+ "type": {
4691
+ "text": "boolean | 'pulse' | undefined"
4692
+ },
4693
+ "description": "Emphasize mode — renders a tonal circle with ring behind the icon.\nColors are derived from `currentColor` via oklch relative color syntax.\nDefaults to primary; override with Tailwind `text-*` classes or `style=\"color: ...\"`.\nSet as a boolean for the static circle, or `\"pulse\"` for a one-shot ring animation.\nNot intended for use with `gradient` — the two features target\nconflicting rendering modes.",
4694
+ "fieldName": "emphasize",
4695
+ "attribute": "emphasize"
4696
+ }
4697
+ ],
4698
+ "mixins": [
4699
+ {
4700
+ "name": "EventEmitterMixin",
4701
+ "module": "/src/util/EventEmitterMixin.js"
4702
+ },
4703
+ {
4704
+ "name": "ReadyMixin",
4705
+ "module": "/src/util/ReadyMixin.js"
4706
+ }
4707
+ ],
4708
+ "superclass": {
4709
+ "name": "LitElement",
4710
+ "package": "lit"
4711
+ },
4712
+ "tagName": "btu-icon",
4713
+ "customElement": true
4714
+ }
4715
+ ],
4716
+ "exports": [
4717
+ {
4718
+ "kind": "js",
4719
+ "name": "default",
4720
+ "declaration": {
4721
+ "name": "Icon",
4722
+ "module": "src/components/icon/Icon.ts"
4723
+ }
4724
+ },
4725
+ {
4726
+ "kind": "custom-element-definition",
4727
+ "name": "btu-icon",
4728
+ "declaration": {
4729
+ "name": "Icon",
4730
+ "module": "src/components/icon/Icon.ts"
4731
+ }
4732
+ }
4733
+ ]
4734
+ },
4735
+ {
4736
+ "kind": "javascript-module",
4737
+ "path": "src/components/empty-state/EmptyState.ts",
4738
+ "declarations": [
4739
+ {
4740
+ "kind": "class",
4741
+ "description": "An empty state component for displaying placeholder content when no data is available.\n\nSupports a graphic slot for icons/images/pictures/SVGs, a heading, a description,\nand an actions slot for buttons or links. Available in three sizes (sm, md, lg)\nwith semantic heading levels.\n\n## Architecture: Light DOM + Pseudo-Slots\n\nThis component uses **Light DOM** (no Shadow Root) with pseudo-slots:\n- User-provided children are physically moved into internal containers\n- Movement is based on `slot` attributes\n- The `onFind` utility detects and redistributes newly-added children (one-time per element)\n\n### Node Redistribution Rules\n- `slot=\"graphic\"` - Moved to graphic container (icon, image, picture, or SVG)\n- `slot=\"actions\"` - Moved to an internal `btu-button-group` (variant=\"spaced\")\n\n### Actions composition\n\nThe actions container IS a `btu-button-group` with `variant=\"spaced\"`. Its `size`\nis mapped from the empty-state `size` prop (sm→small, md→medium, lg→large) so all\nchild `btu-button` / `btu-icon-button` elements get consistent sizing and group\nsemantics (`role=\"group\"`, roving tabindex, disabled propagation) for free.",
4742
+ "name": "EmptyState",
4743
+ "cssProperties": [
4744
+ {
4745
+ "description": "Maximum width of the content block (default: min(75cqw, 360px))",
4746
+ "name": "--empty-state-max-width"
4747
+ },
4748
+ {
4749
+ "description": "Heading text color (default: gray-900)",
4750
+ "name": "--empty-state-color-heading"
4751
+ },
4752
+ {
4753
+ "description": "Description text color (default: gray-500)",
4754
+ "name": "--empty-state-color-description"
4755
+ }
4756
+ ],
4757
+ "slots": [
4758
+ {
4759
+ "description": "Pseudo-slot for icon, image, picture, or SVG graphic. When the child is a `btu-icon`, the component overrides its `size` attribute based on the empty-state `size` prop (sm→md, md→lg, lg→xl). Use an `img`, `picture`, or inline `svg` for full size control.",
4760
+ "name": "graphic"
4761
+ },
4762
+ {
4763
+ "description": "Pseudo-slot for action buttons. Children are moved into an internal `btu-button-group` (variant=\"spaced\"), so size and disabled state are managed by the group.",
4764
+ "name": "actions"
4765
+ }
4766
+ ],
4767
+ "members": [
4768
+ {
4769
+ "kind": "field",
4770
+ "name": "heading",
4771
+ "type": {
4772
+ "text": "string"
4773
+ },
4774
+ "default": "''",
4775
+ "description": "Heading text displayed in the empty state.",
4776
+ "attribute": "heading"
4777
+ },
4778
+ {
4779
+ "kind": "field",
4780
+ "name": "description",
4781
+ "type": {
4782
+ "text": "string | undefined"
4783
+ },
4784
+ "description": "Description text displayed below the heading.",
4785
+ "attribute": "description"
4786
+ },
4787
+ {
4788
+ "kind": "field",
4789
+ "name": "size",
4790
+ "type": {
4791
+ "text": "'sm' | 'md' | 'lg'"
4792
+ },
4793
+ "default": "'md'",
4794
+ "description": "Size variant of the empty state. Affects spacing, description text, graphic size,\nand — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3).",
4795
+ "attribute": "size"
4796
+ },
4797
+ {
4798
+ "kind": "field",
4799
+ "name": "headingLevel",
4800
+ "type": {
4801
+ "text": "number | undefined"
4802
+ },
4803
+ "description": "Heading level (1-6). When set to a valid integer 1-6, overrides the size-based\ndefault and drives both the semantic h1-h6 tag and the visual heading size\n(btu-heading-1 through btu-heading-6). Invalid values log a warning and fall\nback to the size-based default.",
4804
+ "attribute": "heading-level"
4805
+ },
4806
+ {
4807
+ "kind": "field",
4808
+ "name": "initialClasses",
4809
+ "type": {
4810
+ "text": "string[]"
4811
+ },
4812
+ "privacy": "private",
4813
+ "default": "[]"
4814
+ },
4815
+ {
4816
+ "kind": "method",
4817
+ "name": "syncGraphicIconSize",
4818
+ "privacy": "private",
4819
+ "return": {
4618
4820
  "type": {
4619
4821
  "text": "void"
4620
4822
  }
@@ -4781,75 +4983,205 @@
4781
4983
  },
4782
4984
  {
4783
4985
  "kind": "javascript-module",
4784
- "path": "src/components/icon/Icon.ts",
4986
+ "path": "src/components/linear-progress/LinearProgress.ts",
4785
4987
  "declarations": [
4786
4988
  {
4787
4989
  "kind": "class",
4788
- "description": "An icon component for displaying Lucide icons.\n\nIcons inherit parent text color by default or can use gradient fills.\nAll icons are from the Lucide icon library (https://lucide.dev/icons/).\nSupports both direct SVG rendering and mask-based gradient fills.",
4789
- "name": "Icon",
4990
+ "description": "A horizontal linear progress bar for showing task completion.",
4991
+ "name": "LinearProgress",
4790
4992
  "cssProperties": [
4791
4993
  {
4792
- "description": "Icon size (overrides size default)",
4793
- "name": "--icon-size"
4794
- },
4795
- {
4796
- "description": "SVG stroke width as a unitless number in viewBox units; scales visually with icon size (default: 2)",
4797
- "name": "--icon-stroke-width"
4798
- },
4799
- {
4800
- "description": "Icon fill color for filled icons (e.g., \"currentColor\")",
4801
- "name": "--icon-fill"
4994
+ "description": "Custom progress bar color (overrides theme color)",
4995
+ "name": "--progress-color"
4802
4996
  },
4803
4997
  {
4804
- "description": "SVG data URI for mask-based rendering",
4805
- "name": "--icon-svg"
4998
+ "description": "Track/background color (overrides default gray-100)",
4999
+ "name": "--track-color"
4806
5000
  }
4807
5001
  ],
4808
5002
  "members": [
4809
5003
  {
4810
5004
  "kind": "field",
4811
- "name": "tagName",
4812
- "static": true,
4813
- "readonly": true
4814
- },
4815
- {
4816
- "kind": "field",
4817
- "name": "size",
5005
+ "name": "color",
4818
5006
  "type": {
4819
- "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
5007
+ "text": "ProgressColors"
4820
5008
  },
4821
- "default": "'md'",
4822
- "description": "Size of the icon.\n- 'xs': Extra small (0.75rem)\n- 'sm': Small (1rem)\n- 'md': Medium (1.25rem, default)\n- 'lg': Large (1.5rem)\n- 'xl': Extra large (1.75rem)",
4823
- "attribute": "size"
5009
+ "default": "'primary'",
5010
+ "description": "Color theme of the progress indicator.\nSupports: black, white, primary, teal, gray, purple, rose, error, warning, success",
5011
+ "attribute": "color",
5012
+ "inheritedFrom": {
5013
+ "name": "ProgressMixin",
5014
+ "module": "src/util/ProgressMixin.ts"
5015
+ }
4824
5016
  },
4825
5017
  {
4826
5018
  "kind": "field",
4827
- "name": "symbol",
5019
+ "name": "thickness",
4828
5020
  "type": {
4829
- "text": "string"
5021
+ "text": "number | undefined"
4830
5022
  },
4831
- "default": "'circle-dashed'",
4832
- "description": "Lucide icon name to display.\nSee https://lucide.dev/icons/ for available icons.",
4833
- "attribute": "symbol"
5023
+ "description": "Stroke width of the progress indicator.",
5024
+ "attribute": "thickness",
5025
+ "inheritedFrom": {
5026
+ "name": "ProgressMixin",
5027
+ "module": "src/util/ProgressMixin.ts"
5028
+ }
4834
5029
  },
4835
5030
  {
4836
5031
  "kind": "field",
4837
- "name": "gradient",
5032
+ "name": "_progress",
4838
5033
  "type": {
4839
- "text": "IconGradientColor | undefined"
5034
+ "text": "number"
4840
5035
  },
4841
- "description": "Theme color to use for gradient fill.\nWhen set, icon displays with gradient. When undefined, icon inherits parent text color.",
4842
- "attribute": "gradient"
5036
+ "privacy": "private",
5037
+ "default": "0",
5038
+ "inheritedFrom": {
5039
+ "name": "ProgressMixin",
5040
+ "module": "src/util/ProgressMixin.ts"
5041
+ }
4843
5042
  },
4844
5043
  {
4845
5044
  "kind": "field",
4846
- "name": "emphasize",
5045
+ "name": "progress",
5046
+ "description": "Progress value for determinate variant. Clamped to 0–100.",
5047
+ "attribute": "progress",
5048
+ "inheritedFrom": {
5049
+ "name": "ProgressMixin",
5050
+ "module": "src/util/ProgressMixin.ts"
5051
+ }
5052
+ },
5053
+ {
5054
+ "kind": "field",
5055
+ "name": "label",
4847
5056
  "type": {
4848
- "text": "boolean | 'pulse' | undefined"
5057
+ "text": "string | undefined"
4849
5058
  },
4850
- "description": "Emphasize mode renders a tonal circle with ring behind the icon.\nColors are derived from `currentColor` via oklch relative color syntax.\nDefaults to primary; override with Tailwind `text-*` classes or `style=\"color: ...\"`.\nSet as a boolean for the static circle, or `\"pulse\"` for a one-shot ring animation.\nNot intended for use with `gradient` — the two features target\nconflicting rendering modes.",
4851
- "attribute": "emphasize",
4852
- "reflects": true
5059
+ "description": "Optional label text to display with the progress indicator.",
5060
+ "attribute": "label",
5061
+ "inheritedFrom": {
5062
+ "name": "ProgressMixin",
5063
+ "module": "src/util/ProgressMixin.ts"
5064
+ }
5065
+ },
5066
+ {
5067
+ "kind": "field",
5068
+ "name": "initialAnimation",
5069
+ "type": {
5070
+ "text": "boolean"
5071
+ },
5072
+ "default": "true",
5073
+ "description": "Whether to animate progress from 0 to target value when component first becomes visible.",
5074
+ "attribute": "initial-animation",
5075
+ "inheritedFrom": {
5076
+ "name": "ProgressMixin",
5077
+ "module": "src/util/ProgressMixin.ts"
5078
+ }
5079
+ },
5080
+ {
5081
+ "kind": "field",
5082
+ "name": "ariaLabel",
5083
+ "type": {
5084
+ "text": "string | null"
5085
+ },
5086
+ "default": "null",
5087
+ "description": "Optional aria-label attribute for screen readers.\nDescribes what the progress indicator represents.",
5088
+ "attribute": "aria-label",
5089
+ "inheritedFrom": {
5090
+ "name": "ProgressMixin",
5091
+ "module": "src/util/ProgressMixin.ts"
5092
+ }
5093
+ },
5094
+ {
5095
+ "kind": "field",
5096
+ "name": "ariaLabelledBy",
5097
+ "type": {
5098
+ "text": "string | null"
5099
+ },
5100
+ "default": "null",
5101
+ "description": "Optional aria-labelledby attribute for screen readers.\nReferences the ID of an element that labels the progress indicator.",
5102
+ "attribute": "aria-labelledby",
5103
+ "inheritedFrom": {
5104
+ "name": "ProgressMixin",
5105
+ "module": "src/util/ProgressMixin.ts"
5106
+ }
5107
+ },
5108
+ {
5109
+ "kind": "field",
5110
+ "name": "ariaValueText",
5111
+ "type": {
5112
+ "text": "string | null"
5113
+ },
5114
+ "default": "null",
5115
+ "description": "Optional aria-valuetext attribute for screen readers.\nProvides human-readable text alternative for progress value.",
5116
+ "attribute": "aria-valuetext",
5117
+ "inheritedFrom": {
5118
+ "name": "ProgressMixin",
5119
+ "module": "src/util/ProgressMixin.ts"
5120
+ }
5121
+ },
5122
+ {
5123
+ "kind": "field",
5124
+ "name": "completionAnnouncement",
5125
+ "type": {
5126
+ "text": "string | undefined"
5127
+ },
5128
+ "description": "Optional message to announce to screen readers when progress reaches 100%.\nIf not provided, no announcement will be made on completion.",
5129
+ "attribute": "completion-announcement",
5130
+ "inheritedFrom": {
5131
+ "name": "ProgressMixin",
5132
+ "module": "src/util/ProgressMixin.ts"
5133
+ }
5134
+ },
5135
+ {
5136
+ "kind": "field",
5137
+ "name": "_isAnimationInitialized",
5138
+ "type": {
5139
+ "text": "boolean"
5140
+ },
5141
+ "privacy": "private",
5142
+ "default": "false",
5143
+ "inheritedFrom": {
5144
+ "name": "ProgressMixin",
5145
+ "module": "src/util/ProgressMixin.ts"
5146
+ }
5147
+ },
5148
+ {
5149
+ "kind": "field",
5150
+ "name": "_intersectionObserver",
5151
+ "type": {
5152
+ "text": "IntersectionObserver | undefined"
5153
+ },
5154
+ "privacy": "private",
5155
+ "inheritedFrom": {
5156
+ "name": "ProgressMixin",
5157
+ "module": "src/util/ProgressMixin.ts"
5158
+ }
5159
+ },
5160
+ {
5161
+ "kind": "field",
5162
+ "name": "_hasCompletedAt100",
5163
+ "type": {
5164
+ "text": "boolean"
5165
+ },
5166
+ "privacy": "private",
5167
+ "default": "false",
5168
+ "inheritedFrom": {
5169
+ "name": "ProgressMixin",
5170
+ "module": "src/util/ProgressMixin.ts"
5171
+ }
5172
+ },
5173
+ {
5174
+ "kind": "field",
5175
+ "name": "_hostTag",
5176
+ "type": {
5177
+ "text": "'btu-linear-progress' | 'btu-circular-progress'"
5178
+ },
5179
+ "privacy": "private",
5180
+ "readonly": true,
5181
+ "inheritedFrom": {
5182
+ "name": "ProgressMixin",
5183
+ "module": "src/util/ProgressMixin.ts"
5184
+ }
4853
5185
  },
4854
5186
  {
4855
5187
  "kind": "method",
@@ -4889,50 +5221,21 @@
4889
5221
  "text": "CustomEvent"
4890
5222
  },
4891
5223
  "description": "Fired after first render and initialization",
4892
- "name": "btu-icon-ready"
4893
- }
4894
- ],
4895
- "attributes": [
4896
- {
4897
- "name": "size",
4898
- "type": {
4899
- "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
4900
- },
4901
- "default": "'md'",
4902
- "description": "Size of the icon.\n- 'xs': Extra small (0.75rem)\n- 'sm': Small (1rem)\n- 'md': Medium (1.25rem, default)\n- 'lg': Large (1.5rem)\n- 'xl': Extra large (1.75rem)",
4903
- "fieldName": "size",
4904
- "attribute": "size"
4905
- },
4906
- {
4907
- "name": "symbol",
4908
- "type": {
4909
- "text": "string"
4910
- },
4911
- "default": "'circle-dashed'",
4912
- "description": "Lucide icon name to display.\nSee https://lucide.dev/icons/ for available icons.",
4913
- "fieldName": "symbol",
4914
- "attribute": "symbol"
4915
- },
4916
- {
4917
- "name": "gradient",
4918
- "type": {
4919
- "text": "IconGradientColor | undefined"
4920
- },
4921
- "description": "Theme color to use for gradient fill.\nWhen set, icon displays with gradient. When undefined, icon inherits parent text color.",
4922
- "fieldName": "gradient",
4923
- "attribute": "gradient"
5224
+ "name": "btu-linear-progress-ready"
4924
5225
  },
4925
5226
  {
4926
- "name": "emphasize",
4927
5227
  "type": {
4928
- "text": "boolean | 'pulse' | undefined"
5228
+ "text": "CustomEvent"
4929
5229
  },
4930
- "description": "Emphasize mode renders a tonal circle with ring behind the icon.\nColors are derived from `currentColor` via oklch relative color syntax.\nDefaults to primary; override with Tailwind `text-*` classes or `style=\"color: ...\"`.\nSet as a boolean for the static circle, or `\"pulse\"` for a one-shot ring animation.\nNot intended for use with `gradient` — the two features target\nconflicting rendering modes.",
4931
- "fieldName": "emphasize",
4932
- "attribute": "emphasize"
5230
+ "description": "Fired when progress reaches 100",
5231
+ "name": "btu-linear-progress-complete"
4933
5232
  }
4934
5233
  ],
4935
5234
  "mixins": [
5235
+ {
5236
+ "name": "ProgressMixin",
5237
+ "module": "/src/util/ProgressMixin.js"
5238
+ },
4936
5239
  {
4937
5240
  "name": "EventEmitterMixin",
4938
5241
  "module": "/src/util/EventEmitterMixin.js"
@@ -4946,49 +5249,170 @@
4946
5249
  "name": "LitElement",
4947
5250
  "package": "lit"
4948
5251
  },
4949
- "tagName": "btu-icon",
4950
- "customElement": true
4951
- }
4952
- ],
4953
- "exports": [
4954
- {
4955
- "kind": "js",
4956
- "name": "default",
4957
- "declaration": {
4958
- "name": "Icon",
4959
- "module": "src/components/icon/Icon.ts"
4960
- }
4961
- },
4962
- {
4963
- "kind": "custom-element-definition",
4964
- "name": "btu-icon",
4965
- "declaration": {
4966
- "name": "Icon",
4967
- "module": "src/components/icon/Icon.ts"
4968
- }
4969
- }
4970
- ]
4971
- },
4972
- {
4973
- "kind": "javascript-module",
4974
- "path": "src/components/icon-button/IconButton.ts",
4975
- "declarations": [
4976
- {
4977
- "kind": "class",
4978
- "description": "Surfaces the different actions someone can perform in an interface where space is limited.\n\nUses an icon to communicate the action and supports multiple visual types and sizes.\nTooltip support is built-in for accessibility in compact layouts.",
4979
- "name": "IconButton",
4980
- "members": [
5252
+ "tagName": "btu-linear-progress",
5253
+ "customElement": true,
5254
+ "attributes": [
4981
5255
  {
4982
- "kind": "field",
4983
- "name": "name",
5256
+ "name": "color",
4984
5257
  "type": {
4985
- "text": "string | undefined"
5258
+ "text": "ProgressColors"
4986
5259
  },
4987
- "description": "Optional name for the button which can be used to identify the button in a callback.",
4988
- "attribute": "name"
4989
- },
4990
- {
4991
- "kind": "field",
5260
+ "default": "'primary'",
5261
+ "description": "Color theme of the progress indicator.\nSupports: black, white, primary, teal, gray, purple, rose, error, warning, success",
5262
+ "fieldName": "color",
5263
+ "attribute": "color",
5264
+ "inheritedFrom": {
5265
+ "name": "ProgressMixin",
5266
+ "module": "src/util/ProgressMixin.ts"
5267
+ }
5268
+ },
5269
+ {
5270
+ "name": "thickness",
5271
+ "type": {
5272
+ "text": "number | undefined"
5273
+ },
5274
+ "description": "Stroke width of the progress indicator.",
5275
+ "fieldName": "thickness",
5276
+ "attribute": "thickness",
5277
+ "inheritedFrom": {
5278
+ "name": "ProgressMixin",
5279
+ "module": "src/util/ProgressMixin.ts"
5280
+ }
5281
+ },
5282
+ {
5283
+ "name": "progress",
5284
+ "description": "Progress value for determinate variant. Clamped to 0–100.",
5285
+ "fieldName": "progress",
5286
+ "attribute": "progress",
5287
+ "inheritedFrom": {
5288
+ "name": "ProgressMixin",
5289
+ "module": "src/util/ProgressMixin.ts"
5290
+ }
5291
+ },
5292
+ {
5293
+ "name": "label",
5294
+ "type": {
5295
+ "text": "string | undefined"
5296
+ },
5297
+ "description": "Optional label text to display with the progress indicator.",
5298
+ "fieldName": "label",
5299
+ "attribute": "label",
5300
+ "inheritedFrom": {
5301
+ "name": "ProgressMixin",
5302
+ "module": "src/util/ProgressMixin.ts"
5303
+ }
5304
+ },
5305
+ {
5306
+ "name": "initial-animation",
5307
+ "type": {
5308
+ "text": "boolean"
5309
+ },
5310
+ "default": "true",
5311
+ "description": "Whether to animate progress from 0 to target value when component first becomes visible.",
5312
+ "fieldName": "initialAnimation",
5313
+ "attribute": "initial-animation",
5314
+ "inheritedFrom": {
5315
+ "name": "ProgressMixin",
5316
+ "module": "src/util/ProgressMixin.ts"
5317
+ }
5318
+ },
5319
+ {
5320
+ "name": "aria-label",
5321
+ "type": {
5322
+ "text": "string | null"
5323
+ },
5324
+ "default": "null",
5325
+ "description": "Optional aria-label attribute for screen readers.\nDescribes what the progress indicator represents.",
5326
+ "fieldName": "ariaLabel",
5327
+ "attribute": "aria-label",
5328
+ "inheritedFrom": {
5329
+ "name": "ProgressMixin",
5330
+ "module": "src/util/ProgressMixin.ts"
5331
+ }
5332
+ },
5333
+ {
5334
+ "name": "aria-labelledby",
5335
+ "type": {
5336
+ "text": "string | null"
5337
+ },
5338
+ "default": "null",
5339
+ "description": "Optional aria-labelledby attribute for screen readers.\nReferences the ID of an element that labels the progress indicator.",
5340
+ "fieldName": "ariaLabelledBy",
5341
+ "attribute": "aria-labelledby",
5342
+ "inheritedFrom": {
5343
+ "name": "ProgressMixin",
5344
+ "module": "src/util/ProgressMixin.ts"
5345
+ }
5346
+ },
5347
+ {
5348
+ "name": "aria-valuetext",
5349
+ "type": {
5350
+ "text": "string | null"
5351
+ },
5352
+ "default": "null",
5353
+ "description": "Optional aria-valuetext attribute for screen readers.\nProvides human-readable text alternative for progress value.",
5354
+ "fieldName": "ariaValueText",
5355
+ "attribute": "aria-valuetext",
5356
+ "inheritedFrom": {
5357
+ "name": "ProgressMixin",
5358
+ "module": "src/util/ProgressMixin.ts"
5359
+ }
5360
+ },
5361
+ {
5362
+ "name": "completion-announcement",
5363
+ "type": {
5364
+ "text": "string | undefined"
5365
+ },
5366
+ "description": "Optional message to announce to screen readers when progress reaches 100%.\nIf not provided, no announcement will be made on completion.",
5367
+ "fieldName": "completionAnnouncement",
5368
+ "attribute": "completion-announcement",
5369
+ "inheritedFrom": {
5370
+ "name": "ProgressMixin",
5371
+ "module": "src/util/ProgressMixin.ts"
5372
+ }
5373
+ }
5374
+ ]
5375
+ }
5376
+ ],
5377
+ "exports": [
5378
+ {
5379
+ "kind": "js",
5380
+ "name": "default",
5381
+ "declaration": {
5382
+ "name": "LinearProgress",
5383
+ "module": "src/components/linear-progress/LinearProgress.ts"
5384
+ }
5385
+ },
5386
+ {
5387
+ "kind": "custom-element-definition",
5388
+ "name": "btu-linear-progress",
5389
+ "declaration": {
5390
+ "name": "LinearProgress",
5391
+ "module": "src/components/linear-progress/LinearProgress.ts"
5392
+ }
5393
+ }
5394
+ ]
5395
+ },
5396
+ {
5397
+ "kind": "javascript-module",
5398
+ "path": "src/components/icon-button/IconButton.ts",
5399
+ "declarations": [
5400
+ {
5401
+ "kind": "class",
5402
+ "description": "Surfaces the different actions someone can perform in an interface where space is limited.\n\nUses an icon to communicate the action and supports multiple visual types and sizes.\nTooltip support is built-in for accessibility in compact layouts.",
5403
+ "name": "IconButton",
5404
+ "members": [
5405
+ {
5406
+ "kind": "field",
5407
+ "name": "name",
5408
+ "type": {
5409
+ "text": "string | undefined"
5410
+ },
5411
+ "description": "Optional name for the button which can be used to identify the button in a callback.",
5412
+ "attribute": "name"
5413
+ },
5414
+ {
5415
+ "kind": "field",
4992
5416
  "name": "type",
4993
5417
  "type": {
4994
5418
  "text": "IconButtonType"
@@ -5517,205 +5941,150 @@
5517
5941
  },
5518
5942
  {
5519
5943
  "kind": "javascript-module",
5520
- "path": "src/components/linear-progress/LinearProgress.ts",
5944
+ "path": "src/components/popover/Popover.ts",
5521
5945
  "declarations": [
5522
5946
  {
5523
5947
  "kind": "class",
5524
- "description": "A horizontal linear progress bar for showing task completion.",
5525
- "name": "LinearProgress",
5948
+ "description": "A popover component for displaying rich interactive content anchored to a trigger element.\n\nUses the native HTML Popover API for top-layer rendering, light dismiss (click-outside\nand Escape for click triggers), and focus management. CSS anchor positioning handles\nviewport-aware placement.\n\nFor click triggers (`popover=\"auto\"`), the browser provides:\n- Light dismiss (Escape key and click-outside)\n- Top-layer rendering (no z-index needed)\n- Focus restoration on close\n- `autofocus` support — add `autofocus` to an element inside `slot=\"content\"`\n to have it receive focus when the popover opens",
5949
+ "name": "Popover",
5526
5950
  "cssProperties": [
5527
5951
  {
5528
- "description": "Custom progress bar color (overrides theme color)",
5529
- "name": "--progress-color"
5952
+ "description": "Panel background color (default: var(--btu-theme-white))",
5953
+ "name": "--popover-color-background"
5530
5954
  },
5531
5955
  {
5532
- "description": "Track/background color (overrides default gray-100)",
5533
- "name": "--track-color"
5956
+ "description": "Panel text color (default: oklch(var(--btu-theme-gray-900)))",
5957
+ "name": "--popover-color-content"
5958
+ },
5959
+ {
5960
+ "description": "Panel corner radius (default: theme borderRadius.lg)",
5961
+ "name": "--popover-border-radius"
5962
+ },
5963
+ {
5964
+ "description": "Gap between trigger and panel (default: 8px; see btu-popover-offset-{sm|md|lg|xl})",
5965
+ "name": "--popover-offset"
5966
+ },
5967
+ {
5968
+ "description": "Width/height of the pointer arrow (default: 8px)",
5969
+ "name": "--popover-arrow-size"
5970
+ }
5971
+ ],
5972
+ "slots": [
5973
+ {
5974
+ "description": "The element that activates the popover",
5975
+ "name": "trigger"
5976
+ },
5977
+ {
5978
+ "description": "Rich HTML content displayed inside the popover panel",
5979
+ "name": "content"
5534
5980
  }
5535
5981
  ],
5536
5982
  "members": [
5537
5983
  {
5538
5984
  "kind": "field",
5539
- "name": "color",
5985
+ "name": "position",
5540
5986
  "type": {
5541
- "text": "ProgressColors"
5987
+ "text": "'top' | 'bottom' | 'left' | 'right'"
5542
5988
  },
5543
- "default": "'primary'",
5544
- "description": "Color theme of the progress indicator.\nSupports: black, white, primary, teal, gray, purple, rose, error, warning, success",
5545
- "attribute": "color",
5546
- "inheritedFrom": {
5547
- "name": "ProgressMixin",
5548
- "module": "src/util/ProgressMixin.ts"
5549
- }
5989
+ "default": "'bottom'",
5990
+ "description": "Position relative to the trigger element.\nAuto-flips when constrained by the viewport.",
5991
+ "attribute": "position"
5550
5992
  },
5551
5993
  {
5552
5994
  "kind": "field",
5553
- "name": "thickness",
5995
+ "name": "trigger",
5554
5996
  "type": {
5555
- "text": "number | undefined"
5997
+ "text": "'click' | 'hover' | 'focus'"
5556
5998
  },
5557
- "description": "Stroke width of the progress indicator.",
5558
- "attribute": "thickness",
5559
- "inheritedFrom": {
5560
- "name": "ProgressMixin",
5561
- "module": "src/util/ProgressMixin.ts"
5562
- }
5999
+ "default": "'click'",
6000
+ "description": "How the popover is activated.\n- 'click': Toggle on click with light dismiss\n- 'hover': Show on mouseenter with delay\n- 'focus': Show on focusin",
6001
+ "attribute": "trigger"
5563
6002
  },
5564
6003
  {
5565
6004
  "kind": "field",
5566
- "name": "_progress",
6005
+ "name": "delay",
5567
6006
  "type": {
5568
6007
  "text": "number"
5569
6008
  },
5570
- "privacy": "private",
5571
- "default": "0",
5572
- "inheritedFrom": {
5573
- "name": "ProgressMixin",
5574
- "module": "src/util/ProgressMixin.ts"
5575
- }
5576
- },
5577
- {
5578
- "kind": "field",
5579
- "name": "progress",
5580
- "description": "Progress value for determinate variant. Clamped to 0–100.",
5581
- "attribute": "progress",
5582
- "inheritedFrom": {
5583
- "name": "ProgressMixin",
5584
- "module": "src/util/ProgressMixin.ts"
5585
- }
6009
+ "default": "300",
6010
+ "description": "Show delay in milliseconds (hover trigger only).",
6011
+ "attribute": "delay"
5586
6012
  },
5587
6013
  {
5588
6014
  "kind": "field",
5589
- "name": "label",
6015
+ "name": "offset",
5590
6016
  "type": {
5591
- "text": "string | undefined"
6017
+ "text": "PopoverOffset | null"
5592
6018
  },
5593
- "description": "Optional label text to display with the progress indicator.",
5594
- "attribute": "label",
5595
- "inheritedFrom": {
5596
- "name": "ProgressMixin",
5597
- "module": "src/util/ProgressMixin.ts"
5598
- }
6019
+ "default": "null",
6020
+ "description": "Gap between trigger and popover (sm=4px, md=8px, lg=12px, xl=16px).",
6021
+ "attribute": "offset"
5599
6022
  },
5600
6023
  {
5601
6024
  "kind": "field",
5602
- "name": "initialAnimation",
6025
+ "name": "noArrow",
5603
6026
  "type": {
5604
6027
  "text": "boolean"
5605
6028
  },
5606
- "default": "true",
5607
- "description": "Whether to animate progress from 0 to target value when component first becomes visible.",
5608
- "attribute": "initial-animation",
5609
- "inheritedFrom": {
5610
- "name": "ProgressMixin",
5611
- "module": "src/util/ProgressMixin.ts"
5612
- }
6029
+ "default": "false",
6030
+ "description": "Hide the arrow pseudo-element.",
6031
+ "attribute": "no-arrow"
5613
6032
  },
5614
6033
  {
5615
6034
  "kind": "field",
5616
- "name": "ariaLabel",
6035
+ "name": "open",
5617
6036
  "type": {
5618
- "text": "string | null"
6037
+ "text": "boolean"
5619
6038
  },
5620
- "default": "null",
5621
- "description": "Optional aria-label attribute for screen readers.\nDescribes what the progress indicator represents.",
5622
- "attribute": "aria-label",
5623
- "inheritedFrom": {
5624
- "name": "ProgressMixin",
5625
- "module": "src/util/ProgressMixin.ts"
5626
- }
6039
+ "default": "false",
6040
+ "description": "Programmatic open/close state (reflected).",
6041
+ "attribute": "open",
6042
+ "reflects": true
5627
6043
  },
5628
6044
  {
5629
6045
  "kind": "field",
5630
- "name": "ariaLabelledBy",
6046
+ "name": "panelLabel",
5631
6047
  "type": {
5632
- "text": "string | null"
6048
+ "text": "string"
5633
6049
  },
5634
- "default": "null",
5635
- "description": "Optional aria-labelledby attribute for screen readers.\nReferences the ID of an element that labels the progress indicator.",
5636
- "attribute": "aria-labelledby",
5637
- "inheritedFrom": {
5638
- "name": "ProgressMixin",
5639
- "module": "src/util/ProgressMixin.ts"
5640
- }
6050
+ "default": "''",
6051
+ "description": "Accessible label for the popover panel (applied as aria-label on the dialog).",
6052
+ "attribute": "panel-label"
5641
6053
  },
5642
6054
  {
5643
6055
  "kind": "field",
5644
- "name": "ariaValueText",
5645
- "type": {
5646
- "text": "string | null"
5647
- },
5648
- "default": "null",
5649
- "description": "Optional aria-valuetext attribute for screen readers.\nProvides human-readable text alternative for progress value.",
5650
- "attribute": "aria-valuetext",
5651
- "inheritedFrom": {
5652
- "name": "ProgressMixin",
5653
- "module": "src/util/ProgressMixin.ts"
5654
- }
6056
+ "name": "_onTriggerMouseLeave",
6057
+ "privacy": "private"
5655
6058
  },
5656
6059
  {
5657
6060
  "kind": "field",
5658
- "name": "completionAnnouncement",
5659
- "type": {
5660
- "text": "string | undefined"
5661
- },
5662
- "description": "Optional message to announce to screen readers when progress reaches 100%.\nIf not provided, no announcement will be made on completion.",
5663
- "attribute": "completion-announcement",
5664
- "inheritedFrom": {
5665
- "name": "ProgressMixin",
5666
- "module": "src/util/ProgressMixin.ts"
5667
- }
6061
+ "name": "_onTriggerFocusIn",
6062
+ "privacy": "private"
5668
6063
  },
5669
6064
  {
5670
6065
  "kind": "field",
5671
- "name": "_isAnimationInitialized",
5672
- "type": {
5673
- "text": "boolean"
5674
- },
5675
- "privacy": "private",
5676
- "default": "false",
5677
- "inheritedFrom": {
5678
- "name": "ProgressMixin",
5679
- "module": "src/util/ProgressMixin.ts"
5680
- }
6066
+ "name": "_onTriggerFocusOut",
6067
+ "privacy": "private"
5681
6068
  },
5682
6069
  {
5683
6070
  "kind": "field",
5684
- "name": "_intersectionObserver",
5685
- "type": {
5686
- "text": "IntersectionObserver | undefined"
5687
- },
5688
- "privacy": "private",
5689
- "inheritedFrom": {
5690
- "name": "ProgressMixin",
5691
- "module": "src/util/ProgressMixin.ts"
5692
- }
6071
+ "name": "_onPanelMouseEnter",
6072
+ "privacy": "private"
5693
6073
  },
5694
6074
  {
5695
6075
  "kind": "field",
5696
- "name": "_hasCompletedAt100",
5697
- "type": {
5698
- "text": "boolean"
5699
- },
5700
- "privacy": "private",
5701
- "default": "false",
5702
- "inheritedFrom": {
5703
- "name": "ProgressMixin",
5704
- "module": "src/util/ProgressMixin.ts"
5705
- }
6076
+ "name": "_onPanelMouseLeave",
6077
+ "privacy": "private"
5706
6078
  },
5707
6079
  {
5708
6080
  "kind": "field",
5709
- "name": "_hostTag",
5710
- "type": {
5711
- "text": "'btu-linear-progress' | 'btu-circular-progress'"
5712
- },
5713
- "privacy": "private",
5714
- "readonly": true,
5715
- "inheritedFrom": {
5716
- "name": "ProgressMixin",
5717
- "module": "src/util/ProgressMixin.ts"
5718
- }
6081
+ "name": "_onNativeToggle",
6082
+ "privacy": "private"
6083
+ },
6084
+ {
6085
+ "kind": "field",
6086
+ "name": "_onKeyDown",
6087
+ "privacy": "private"
5719
6088
  },
5720
6089
  {
5721
6090
  "kind": "method",
@@ -5754,158 +6123,114 @@
5754
6123
  "type": {
5755
6124
  "text": "CustomEvent"
5756
6125
  },
5757
- "description": "Fired after first render and initialization",
5758
- "name": "btu-linear-progress-ready"
6126
+ "description": "Fired when the popover opens",
6127
+ "name": "btu-popover-show"
5759
6128
  },
5760
6129
  {
5761
6130
  "type": {
5762
6131
  "text": "CustomEvent"
5763
6132
  },
5764
- "description": "Fired when progress reaches 100",
5765
- "name": "btu-linear-progress-complete"
5766
- }
5767
- ],
5768
- "mixins": [
5769
- {
5770
- "name": "ProgressMixin",
5771
- "module": "/src/util/ProgressMixin.js"
5772
- },
5773
- {
5774
- "name": "EventEmitterMixin",
5775
- "module": "/src/util/EventEmitterMixin.js"
5776
- },
5777
- {
5778
- "name": "ReadyMixin",
5779
- "module": "/src/util/ReadyMixin.js"
6133
+ "description": "Fired when the popover closes",
6134
+ "name": "btu-popover-hide"
5780
6135
  }
5781
6136
  ],
5782
- "superclass": {
5783
- "name": "LitElement",
5784
- "package": "lit"
5785
- },
5786
- "tagName": "btu-linear-progress",
5787
- "customElement": true,
5788
6137
  "attributes": [
5789
6138
  {
5790
- "name": "color",
6139
+ "name": "position",
5791
6140
  "type": {
5792
- "text": "ProgressColors"
6141
+ "text": "'top' | 'bottom' | 'left' | 'right'"
5793
6142
  },
5794
- "default": "'primary'",
5795
- "description": "Color theme of the progress indicator.\nSupports: black, white, primary, teal, gray, purple, rose, error, warning, success",
5796
- "fieldName": "color",
5797
- "attribute": "color",
5798
- "inheritedFrom": {
5799
- "name": "ProgressMixin",
5800
- "module": "src/util/ProgressMixin.ts"
5801
- }
6143
+ "default": "'bottom'",
6144
+ "description": "Position relative to the trigger element.\nAuto-flips when constrained by the viewport.",
6145
+ "fieldName": "position",
6146
+ "attribute": "position"
5802
6147
  },
5803
6148
  {
5804
- "name": "thickness",
6149
+ "name": "trigger",
5805
6150
  "type": {
5806
- "text": "number | undefined"
6151
+ "text": "'click' | 'hover' | 'focus'"
5807
6152
  },
5808
- "description": "Stroke width of the progress indicator.",
5809
- "fieldName": "thickness",
5810
- "attribute": "thickness",
5811
- "inheritedFrom": {
5812
- "name": "ProgressMixin",
5813
- "module": "src/util/ProgressMixin.ts"
5814
- }
6153
+ "default": "'click'",
6154
+ "description": "How the popover is activated.\n- 'click': Toggle on click with light dismiss\n- 'hover': Show on mouseenter with delay\n- 'focus': Show on focusin",
6155
+ "fieldName": "trigger",
6156
+ "attribute": "trigger"
5815
6157
  },
5816
6158
  {
5817
- "name": "progress",
5818
- "description": "Progress value for determinate variant. Clamped to 0–100.",
5819
- "fieldName": "progress",
5820
- "attribute": "progress",
5821
- "inheritedFrom": {
5822
- "name": "ProgressMixin",
5823
- "module": "src/util/ProgressMixin.ts"
5824
- }
6159
+ "name": "delay",
6160
+ "type": {
6161
+ "text": "number"
6162
+ },
6163
+ "default": "300",
6164
+ "description": "Show delay in milliseconds (hover trigger only).",
6165
+ "fieldName": "delay",
6166
+ "attribute": "delay"
5825
6167
  },
5826
6168
  {
5827
- "name": "label",
6169
+ "name": "offset",
5828
6170
  "type": {
5829
- "text": "string | undefined"
6171
+ "text": "PopoverOffset | null"
5830
6172
  },
5831
- "description": "Optional label text to display with the progress indicator.",
5832
- "fieldName": "label",
5833
- "attribute": "label",
5834
- "inheritedFrom": {
5835
- "name": "ProgressMixin",
5836
- "module": "src/util/ProgressMixin.ts"
5837
- }
6173
+ "default": "null",
6174
+ "description": "Gap between trigger and popover (sm=4px, md=8px, lg=12px, xl=16px).",
6175
+ "fieldName": "offset",
6176
+ "attribute": "offset"
5838
6177
  },
5839
6178
  {
5840
- "name": "initial-animation",
6179
+ "name": "noArrow",
5841
6180
  "type": {
5842
6181
  "text": "boolean"
5843
6182
  },
5844
- "default": "true",
5845
- "description": "Whether to animate progress from 0 to target value when component first becomes visible.",
5846
- "fieldName": "initialAnimation",
5847
- "attribute": "initial-animation",
5848
- "inheritedFrom": {
5849
- "name": "ProgressMixin",
5850
- "module": "src/util/ProgressMixin.ts"
5851
- }
6183
+ "default": "false",
6184
+ "description": "Hide the arrow pseudo-element.",
6185
+ "fieldName": "noArrow"
5852
6186
  },
5853
6187
  {
5854
- "name": "aria-label",
6188
+ "name": "open",
5855
6189
  "type": {
5856
- "text": "string | null"
6190
+ "text": "boolean"
5857
6191
  },
5858
- "default": "null",
5859
- "description": "Optional aria-label attribute for screen readers.\nDescribes what the progress indicator represents.",
5860
- "fieldName": "ariaLabel",
5861
- "attribute": "aria-label",
5862
- "inheritedFrom": {
5863
- "name": "ProgressMixin",
5864
- "module": "src/util/ProgressMixin.ts"
5865
- }
6192
+ "default": "false",
6193
+ "description": "Programmatic open/close state (reflected).",
6194
+ "fieldName": "open",
6195
+ "attribute": "open"
5866
6196
  },
5867
6197
  {
5868
- "name": "aria-labelledby",
6198
+ "name": "panel-label",
5869
6199
  "type": {
5870
- "text": "string | null"
6200
+ "text": "string"
5871
6201
  },
5872
- "default": "null",
5873
- "description": "Optional aria-labelledby attribute for screen readers.\nReferences the ID of an element that labels the progress indicator.",
5874
- "fieldName": "ariaLabelledBy",
5875
- "attribute": "aria-labelledby",
5876
- "inheritedFrom": {
5877
- "name": "ProgressMixin",
5878
- "module": "src/util/ProgressMixin.ts"
5879
- }
6202
+ "default": "''",
6203
+ "description": "Accessible label for the popover panel (applied as aria-label on the dialog).",
6204
+ "fieldName": "panelLabel",
6205
+ "attribute": "panel-label"
5880
6206
  },
5881
6207
  {
5882
- "name": "aria-valuetext",
6208
+ "name": "no-arrow",
5883
6209
  "type": {
5884
- "text": "string | null"
6210
+ "text": "boolean"
5885
6211
  },
5886
- "default": "null",
5887
- "description": "Optional aria-valuetext attribute for screen readers.\nProvides human-readable text alternative for progress value.",
5888
- "fieldName": "ariaValueText",
5889
- "attribute": "aria-valuetext",
5890
- "inheritedFrom": {
5891
- "name": "ProgressMixin",
5892
- "module": "src/util/ProgressMixin.ts"
5893
- }
6212
+ "default": "false",
6213
+ "description": "Hide the arrow pseudo-element.",
6214
+ "attribute": "noArrow",
6215
+ "fieldName": "noArrow"
6216
+ }
6217
+ ],
6218
+ "mixins": [
6219
+ {
6220
+ "name": "EventEmitterMixin",
6221
+ "module": "/src/util/EventEmitterMixin.js"
5894
6222
  },
5895
6223
  {
5896
- "name": "completion-announcement",
5897
- "type": {
5898
- "text": "string | undefined"
5899
- },
5900
- "description": "Optional message to announce to screen readers when progress reaches 100%.\nIf not provided, no announcement will be made on completion.",
5901
- "fieldName": "completionAnnouncement",
5902
- "attribute": "completion-announcement",
5903
- "inheritedFrom": {
5904
- "name": "ProgressMixin",
5905
- "module": "src/util/ProgressMixin.ts"
5906
- }
6224
+ "name": "ReadyMixin",
6225
+ "module": "/src/util/ReadyMixin.js"
5907
6226
  }
5908
- ]
6227
+ ],
6228
+ "superclass": {
6229
+ "name": "LitElement",
6230
+ "package": "lit"
6231
+ },
6232
+ "tagName": "btu-popover",
6233
+ "customElement": true
5909
6234
  }
5910
6235
  ],
5911
6236
  "exports": [
@@ -5913,699 +6238,339 @@
5913
6238
  "kind": "js",
5914
6239
  "name": "default",
5915
6240
  "declaration": {
5916
- "name": "LinearProgress",
5917
- "module": "src/components/linear-progress/LinearProgress.ts"
6241
+ "name": "Popover",
6242
+ "module": "src/components/popover/Popover.ts"
5918
6243
  }
5919
6244
  },
5920
6245
  {
5921
6246
  "kind": "custom-element-definition",
5922
- "name": "btu-linear-progress",
6247
+ "name": "btu-popover",
5923
6248
  "declaration": {
5924
- "name": "LinearProgress",
5925
- "module": "src/components/linear-progress/LinearProgress.ts"
6249
+ "name": "Popover",
6250
+ "module": "src/components/popover/Popover.ts"
5926
6251
  }
5927
6252
  }
5928
- ]
5929
- },
5930
- {
5931
- "kind": "javascript-module",
5932
- "path": "src/components/pagination/Pagination.ts",
5933
- "declarations": [
5934
- {
5935
- "kind": "class",
5936
- "description": "A pagination component for navigating through paged content.\n\nSupports multiple layout variants (Search, Widget, Widget Small, Calendar)\nthrough configurable props and pseudo-slots.\n\n**Page size modes:**\n\n- **Built-in** (default): When no `slot=\"page-size\"` is provided and `page-size-changer`\n is true, Pagination renders its own `btu-dropdown` from the `page-size-options` attribute.\n Events, label sync, and page size changes are managed automatically.\n\n- **Custom slot**: When a child has `slot=\"page-size\"`, the built-in dropdown is suppressed.\n The consumer owns all behavior — event handling, label sync, etc. Use this for non-standard\n selectors like a calendar week/month toggle.\n\n**Page jumper modes:**\n\n- **Built-in**: When `page-jumper` is true and no `slot=\"jumper\"` is provided, Pagination\n renders a dropdown with \"Page 1\" through \"Page N\" items. Fully reactive — updates\n automatically when page, page size, or total items change.\n\n- **Custom slot**: When a child has `slot=\"jumper\"`, the built-in dropdown is suppressed.\n The consumer owns all behavior. Use this for custom jumper content like a \"Today\" button.",
5937
- "name": "Pagination",
5938
- "cssProperties": [
5939
- {
5940
- "description": "Background color for dropdowns, buttons, and jumper",
5941
- "name": "--pagination-color-background"
5942
- },
5943
- {
5944
- "description": "Text/icon color",
5945
- "name": "--pagination-color-foreground"
5946
- }
5947
- ],
5948
- "slots": [
5949
- {
5950
- "description": "Custom page-size selector (replaces built-in dropdown). Consumer manages all behavior.",
5951
- "name": "page-size"
5952
- },
5953
- {
5954
- "description": "Custom jumper content (replaces built-in page jumper dropdown). Consumer manages all behavior.",
5955
- "name": "jumper"
5956
- }
5957
- ],
5958
- "members": [
5959
- {
5960
- "kind": "field",
5961
- "name": "page",
5962
- "type": {
5963
- "text": "number"
5964
- },
5965
- "default": "1",
5966
- "description": "Current page number (1-based)",
5967
- "attribute": "page"
5968
- },
5969
- {
5970
- "kind": "field",
5971
- "name": "pageSize",
5972
- "type": {
5973
- "text": "number"
5974
- },
5975
- "default": "0",
5976
- "description": "Number of items per page",
5977
- "attribute": "page-size"
5978
- },
5979
- {
5980
- "kind": "field",
5981
- "name": "disabled",
5982
- "type": {
5983
- "text": "boolean"
5984
- },
5985
- "default": "false",
5986
- "description": "Disables all pagination controls",
5987
- "attribute": "disabled"
5988
- },
5989
- {
5990
- "kind": "field",
5991
- "name": "loading",
5992
- "type": {
5993
- "text": "boolean"
5994
- },
5995
- "default": "false",
5996
- "description": "Shows loading spinner and dims controls",
5997
- "attribute": "loading"
5998
- },
5999
- {
6000
- "kind": "field",
6001
- "name": "hideOnSinglePage",
6002
- "type": {
6003
- "text": "boolean"
6004
- },
6005
- "default": "true",
6006
- "description": "Hide controls when there is only one page",
6007
- "attribute": "hide-on-single-page"
6008
- },
6009
- {
6010
- "kind": "field",
6011
- "name": "pageSizeChanger",
6012
- "type": {
6013
- "text": "boolean"
6014
- },
6015
- "default": "true",
6016
- "description": "Show the page size dropdown",
6017
- "attribute": "page-size-changer"
6018
- },
6019
- {
6020
- "kind": "field",
6021
- "name": "pageSizeOptions",
6022
- "type": {
6023
- "text": "string"
6024
- },
6025
- "default": "'10, 20, 50'",
6026
- "description": "Comma-separated page size options",
6027
- "attribute": "page-size-options"
6028
- },
6029
- {
6030
- "kind": "field",
6031
- "name": "totalItems",
6032
- "type": {
6033
- "text": "number"
6034
- },
6035
- "default": "0",
6036
- "description": "Total number of items across all pages",
6037
- "attribute": "total-items"
6038
- },
6039
- {
6040
- "kind": "field",
6041
- "name": "boundaryButtons",
6042
- "type": {
6043
- "text": "boolean"
6044
- },
6045
- "default": "true",
6046
- "description": "Show first and last page buttons",
6047
- "attribute": "boundary-buttons"
6048
- },
6049
- {
6050
- "kind": "field",
6051
- "name": "hideTotalCount",
6052
- "type": {
6053
- "text": "boolean"
6054
- },
6055
- "default": "false",
6056
- "description": "Hide the item count display (e.g., \"1-10 of 200\")",
6057
- "attribute": "hide-total-count"
6058
- },
6059
- {
6060
- "kind": "field",
6061
- "name": "pageJumper",
6062
- "type": {
6063
- "text": "boolean"
6064
- },
6065
- "default": "false",
6066
- "description": "Show the page jumper dropdown. Intended for moderate page counts (under ~100 pages).\nFor large datasets, use a custom `slot=\"jumper\"` with a virtualized or input-based control.",
6067
- "attribute": "page-jumper"
6068
- },
6069
- {
6070
- "kind": "field",
6071
- "name": "label",
6072
- "type": {
6073
- "text": "string | undefined"
6074
- },
6075
- "description": "Accessible label for the pagination nav landmark",
6076
- "attribute": "label"
6077
- },
6078
- {
6079
- "kind": "field",
6080
- "name": "_parsedPageSizeOptions",
6081
- "type": {
6082
- "text": "number[]"
6083
- },
6084
- "privacy": "private",
6085
- "readonly": true
6086
- },
6087
- {
6088
- "kind": "field",
6089
- "name": "_totalPages",
6090
- "type": {
6091
- "text": "number"
6092
- },
6093
- "privacy": "private",
6094
- "readonly": true
6095
- },
6096
- {
6097
- "kind": "field",
6098
- "name": "_startItem",
6099
- "type": {
6100
- "text": "number"
6101
- },
6102
- "privacy": "private",
6103
- "readonly": true
6104
- },
6105
- {
6106
- "kind": "field",
6107
- "name": "_endItem",
6108
- "type": {
6109
- "text": "number"
6110
- },
6111
- "privacy": "private",
6112
- "readonly": true
6113
- },
6114
- {
6115
- "kind": "method",
6116
- "name": "_setupSlots",
6117
- "privacy": "private",
6118
- "return": {
6119
- "type": {
6120
- "text": "void"
6121
- }
6122
- }
6123
- },
6124
- {
6125
- "kind": "method",
6126
- "name": "_goToFirstPage",
6127
- "privacy": "private",
6128
- "return": {
6129
- "type": {
6130
- "text": "void"
6131
- }
6132
- },
6133
- "parameters": [
6134
- {
6135
- "name": "e",
6136
- "type": {
6137
- "text": "Event"
6138
- }
6139
- }
6140
- ]
6141
- },
6142
- {
6143
- "kind": "method",
6144
- "name": "_goToPreviousPage",
6145
- "privacy": "private",
6146
- "return": {
6147
- "type": {
6148
- "text": "void"
6149
- }
6150
- },
6151
- "parameters": [
6152
- {
6153
- "name": "e",
6154
- "type": {
6155
- "text": "Event"
6156
- }
6157
- }
6158
- ]
6159
- },
6160
- {
6161
- "kind": "method",
6162
- "name": "_goToNextPage",
6163
- "privacy": "private",
6164
- "return": {
6165
- "type": {
6166
- "text": "void"
6167
- }
6168
- },
6169
- "parameters": [
6170
- {
6171
- "name": "e",
6172
- "type": {
6173
- "text": "Event"
6174
- }
6175
- }
6176
- ]
6177
- },
6178
- {
6179
- "kind": "method",
6180
- "name": "_goToLastPage",
6181
- "privacy": "private",
6182
- "return": {
6183
- "type": {
6184
- "text": "void"
6185
- }
6186
- },
6187
- "parameters": [
6188
- {
6189
- "name": "e",
6190
- "type": {
6191
- "text": "Event"
6192
- }
6193
- }
6194
- ]
6195
- },
6196
- {
6197
- "kind": "method",
6198
- "name": "_manageBoundaryFocus",
6199
- "privacy": "private",
6200
- "return": {
6201
- "type": {
6202
- "text": "void"
6203
- }
6204
- },
6205
- "parameters": [
6206
- {
6207
- "name": "clickedButton",
6208
- "type": {
6209
- "text": "IconButton"
6210
- }
6211
- }
6212
- ]
6213
- },
6214
- {
6215
- "kind": "method",
6216
- "name": "_onBuiltinPageSizeSelect",
6217
- "privacy": "private",
6218
- "return": {
6219
- "type": {
6220
- "text": "void"
6221
- }
6222
- },
6223
- "parameters": [
6224
- {
6225
- "name": "e",
6226
- "type": {
6227
- "text": "Event"
6228
- }
6229
- }
6230
- ]
6231
- },
6232
- {
6233
- "kind": "method",
6234
- "name": "_onBuiltinJumperSelect",
6235
- "privacy": "private",
6236
- "return": {
6237
- "type": {
6238
- "text": "void"
6239
- }
6240
- },
6241
- "parameters": [
6242
- {
6243
- "name": "e",
6244
- "type": {
6245
- "text": "Event"
6246
- }
6247
- }
6248
- ]
6249
- },
6250
- {
6251
- "kind": "method",
6252
- "name": "emit",
6253
- "parameters": [
6254
- {
6255
- "name": "type",
6256
- "type": {
6257
- "text": "K"
6258
- },
6259
- "description": "Event name from CustomEventMap"
6260
- },
6261
- {
6262
- "name": "detail",
6263
- "optional": true,
6264
- "type": {
6265
- "text": "UnpackCustomEvent<CustomEventMap[K]>"
6266
- },
6267
- "description": "Optional event detail payload"
6268
- }
6269
- ],
6270
- "description": "Dispatches a type-safe CustomEvent with standardized configuration.\n\nAll events are configured with:\n- bubbles: true (event propagates up the DOM tree)\n- cancelable: false (event cannot be cancelled)\n- composed: true (event crosses shadow DOM boundaries)",
6271
- "return": {
6272
- "type": {
6273
- "text": "boolean"
6274
- }
6275
- },
6276
- "inheritedFrom": {
6277
- "name": "EventEmitterMixin",
6278
- "module": "src/util/EventEmitterMixin.ts"
6279
- }
6280
- }
6281
- ],
6282
- "events": [
6253
+ ]
6254
+ },
6255
+ {
6256
+ "kind": "javascript-module",
6257
+ "path": "src/components/pagination/Pagination.ts",
6258
+ "declarations": [
6259
+ {
6260
+ "kind": "class",
6261
+ "description": "A pagination component for navigating through paged content.\n\nSupports multiple layout variants (Search, Widget, Widget Small, Calendar)\nthrough configurable props and pseudo-slots.\n\n**Page size modes:**\n\n- **Built-in** (default): When no `slot=\"page-size\"` is provided and `page-size-changer`\n is true, Pagination renders its own `btu-dropdown` from the `page-size-options` attribute.\n Events, label sync, and page size changes are managed automatically.\n\n- **Custom slot**: When a child has `slot=\"page-size\"`, the built-in dropdown is suppressed.\n The consumer owns all behavior — event handling, label sync, etc. Use this for non-standard\n selectors like a calendar week/month toggle.\n\n**Page jumper modes:**\n\n- **Built-in**: When `page-jumper` is true and no `slot=\"jumper\"` is provided, Pagination\n renders a dropdown with \"Page 1\" through \"Page N\" items. Fully reactive — updates\n automatically when page, page size, or total items change.\n\n- **Custom slot**: When a child has `slot=\"jumper\"`, the built-in dropdown is suppressed.\n The consumer owns all behavior. Use this for custom jumper content like a \"Today\" button.",
6262
+ "name": "Pagination",
6263
+ "cssProperties": [
6283
6264
  {
6284
- "type": {
6285
- "text": "CustomEvent"
6286
- },
6287
- "description": "Fired after first render",
6288
- "name": "btu-pagination-ready"
6265
+ "description": "Background color for dropdowns, buttons, and jumper",
6266
+ "name": "--pagination-color-background"
6289
6267
  },
6290
6268
  {
6291
- "type": {
6292
- "text": "CustomEvent<{page: number, pageSize: number}>"
6293
- },
6294
- "description": "Fired on page navigation",
6295
- "name": "btu-pagination-change"
6269
+ "description": "Text/icon color",
6270
+ "name": "--pagination-color-foreground"
6271
+ }
6272
+ ],
6273
+ "slots": [
6274
+ {
6275
+ "description": "Custom page-size selector (replaces built-in dropdown). Consumer manages all behavior.",
6276
+ "name": "page-size"
6296
6277
  },
6297
6278
  {
6298
- "type": {
6299
- "text": "CustomEvent<{page: number, pageSize: number}>"
6300
- },
6301
- "description": "Fired on page size change",
6302
- "name": "btu-pagination-page-size-change"
6279
+ "description": "Custom jumper content (replaces built-in page jumper dropdown). Consumer manages all behavior.",
6280
+ "name": "jumper"
6303
6281
  }
6304
6282
  ],
6305
- "attributes": [
6283
+ "members": [
6306
6284
  {
6285
+ "kind": "field",
6307
6286
  "name": "page",
6308
6287
  "type": {
6309
6288
  "text": "number"
6310
6289
  },
6311
6290
  "default": "1",
6312
6291
  "description": "Current page number (1-based)",
6313
- "fieldName": "page",
6314
6292
  "attribute": "page"
6315
6293
  },
6316
6294
  {
6317
- "name": "page-size",
6295
+ "kind": "field",
6296
+ "name": "pageSize",
6318
6297
  "type": {
6319
6298
  "text": "number"
6320
6299
  },
6321
6300
  "default": "0",
6322
6301
  "description": "Number of items per page",
6323
- "fieldName": "pageSize",
6324
6302
  "attribute": "page-size"
6325
6303
  },
6326
6304
  {
6305
+ "kind": "field",
6327
6306
  "name": "disabled",
6328
6307
  "type": {
6329
6308
  "text": "boolean"
6330
6309
  },
6331
6310
  "default": "false",
6332
6311
  "description": "Disables all pagination controls",
6333
- "fieldName": "disabled",
6334
6312
  "attribute": "disabled"
6335
6313
  },
6336
6314
  {
6315
+ "kind": "field",
6337
6316
  "name": "loading",
6338
6317
  "type": {
6339
6318
  "text": "boolean"
6340
6319
  },
6341
6320
  "default": "false",
6342
6321
  "description": "Shows loading spinner and dims controls",
6343
- "fieldName": "loading",
6344
6322
  "attribute": "loading"
6345
6323
  },
6346
6324
  {
6347
- "name": "hide-on-single-page",
6325
+ "kind": "field",
6326
+ "name": "hideOnSinglePage",
6348
6327
  "type": {
6349
6328
  "text": "boolean"
6350
6329
  },
6351
6330
  "default": "true",
6352
6331
  "description": "Hide controls when there is only one page",
6353
- "fieldName": "hideOnSinglePage",
6354
6332
  "attribute": "hide-on-single-page"
6355
6333
  },
6356
6334
  {
6357
- "name": "page-size-changer",
6335
+ "kind": "field",
6336
+ "name": "pageSizeChanger",
6358
6337
  "type": {
6359
6338
  "text": "boolean"
6360
6339
  },
6361
6340
  "default": "true",
6362
6341
  "description": "Show the page size dropdown",
6363
- "fieldName": "pageSizeChanger",
6364
6342
  "attribute": "page-size-changer"
6365
6343
  },
6366
6344
  {
6367
- "name": "page-size-options",
6345
+ "kind": "field",
6346
+ "name": "pageSizeOptions",
6368
6347
  "type": {
6369
6348
  "text": "string"
6370
6349
  },
6371
6350
  "default": "'10, 20, 50'",
6372
6351
  "description": "Comma-separated page size options",
6373
- "fieldName": "pageSizeOptions",
6374
6352
  "attribute": "page-size-options"
6375
6353
  },
6376
6354
  {
6377
- "name": "total-items",
6355
+ "kind": "field",
6356
+ "name": "totalItems",
6378
6357
  "type": {
6379
6358
  "text": "number"
6380
6359
  },
6381
6360
  "default": "0",
6382
6361
  "description": "Total number of items across all pages",
6383
- "fieldName": "totalItems",
6384
6362
  "attribute": "total-items"
6385
6363
  },
6386
6364
  {
6387
- "name": "boundary-buttons",
6365
+ "kind": "field",
6366
+ "name": "boundaryButtons",
6388
6367
  "type": {
6389
6368
  "text": "boolean"
6390
6369
  },
6391
6370
  "default": "true",
6392
6371
  "description": "Show first and last page buttons",
6393
- "fieldName": "boundaryButtons",
6394
6372
  "attribute": "boundary-buttons"
6395
6373
  },
6396
6374
  {
6397
- "name": "hide-total-count",
6375
+ "kind": "field",
6376
+ "name": "hideTotalCount",
6398
6377
  "type": {
6399
6378
  "text": "boolean"
6400
6379
  },
6401
6380
  "default": "false",
6402
6381
  "description": "Hide the item count display (e.g., \"1-10 of 200\")",
6403
- "fieldName": "hideTotalCount",
6404
6382
  "attribute": "hide-total-count"
6405
6383
  },
6406
6384
  {
6407
- "name": "page-jumper",
6385
+ "kind": "field",
6386
+ "name": "pageJumper",
6408
6387
  "type": {
6409
6388
  "text": "boolean"
6410
6389
  },
6411
6390
  "default": "false",
6412
6391
  "description": "Show the page jumper dropdown. Intended for moderate page counts (under ~100 pages).\nFor large datasets, use a custom `slot=\"jumper\"` with a virtualized or input-based control.",
6413
- "fieldName": "pageJumper",
6414
6392
  "attribute": "page-jumper"
6415
6393
  },
6416
6394
  {
6395
+ "kind": "field",
6417
6396
  "name": "label",
6418
6397
  "type": {
6419
6398
  "text": "string | undefined"
6420
6399
  },
6421
6400
  "description": "Accessible label for the pagination nav landmark",
6422
- "fieldName": "label",
6423
6401
  "attribute": "label"
6424
- }
6425
- ],
6426
- "mixins": [
6427
- {
6428
- "name": "EventEmitterMixin",
6429
- "module": "/src/util/EventEmitterMixin.js"
6430
- },
6431
- {
6432
- "name": "ReadyMixin",
6433
- "module": "/src/util/ReadyMixin.js"
6434
- }
6435
- ],
6436
- "superclass": {
6437
- "name": "LitElement",
6438
- "package": "lit"
6439
- },
6440
- "tagName": "btu-pagination",
6441
- "customElement": true
6442
- }
6443
- ],
6444
- "exports": [
6445
- {
6446
- "kind": "js",
6447
- "name": "default",
6448
- "declaration": {
6449
- "name": "Pagination",
6450
- "module": "src/components/pagination/Pagination.ts"
6451
- }
6452
- },
6453
- {
6454
- "kind": "custom-element-definition",
6455
- "name": "btu-pagination",
6456
- "declaration": {
6457
- "name": "Pagination",
6458
- "module": "src/components/pagination/Pagination.ts"
6459
- }
6460
- }
6461
- ]
6462
- },
6463
- {
6464
- "kind": "javascript-module",
6465
- "path": "src/components/popover/Popover.ts",
6466
- "declarations": [
6467
- {
6468
- "kind": "class",
6469
- "description": "A popover component for displaying rich interactive content anchored to a trigger element.\n\nUses the native HTML Popover API for top-layer rendering, light dismiss (click-outside\nand Escape for click triggers), and focus management. CSS anchor positioning handles\nviewport-aware placement.\n\nFor click triggers (`popover=\"auto\"`), the browser provides:\n- Light dismiss (Escape key and click-outside)\n- Top-layer rendering (no z-index needed)\n- Focus restoration on close\n- `autofocus` support — add `autofocus` to an element inside `slot=\"content\"`\n to have it receive focus when the popover opens",
6470
- "name": "Popover",
6471
- "cssProperties": [
6472
- {
6473
- "description": "Panel background color (default: var(--btu-theme-white))",
6474
- "name": "--popover-color-background"
6475
- },
6476
- {
6477
- "description": "Panel text color (default: oklch(var(--btu-theme-gray-900)))",
6478
- "name": "--popover-color-content"
6479
- },
6480
- {
6481
- "description": "Panel corner radius (default: theme borderRadius.lg)",
6482
- "name": "--popover-border-radius"
6483
- },
6484
- {
6485
- "description": "Gap between trigger and panel (default: 8px; see btu-popover-offset-{sm|md|lg|xl})",
6486
- "name": "--popover-offset"
6487
- },
6488
- {
6489
- "description": "Width/height of the pointer arrow (default: 8px)",
6490
- "name": "--popover-arrow-size"
6491
- }
6492
- ],
6493
- "slots": [
6494
- {
6495
- "description": "The element that activates the popover",
6496
- "name": "trigger"
6497
6402
  },
6498
- {
6499
- "description": "Rich HTML content displayed inside the popover panel",
6500
- "name": "content"
6501
- }
6502
- ],
6503
- "members": [
6504
6403
  {
6505
6404
  "kind": "field",
6506
- "name": "position",
6405
+ "name": "_parsedPageSizeOptions",
6507
6406
  "type": {
6508
- "text": "'top' | 'bottom' | 'left' | 'right'"
6407
+ "text": "number[]"
6509
6408
  },
6510
- "default": "'bottom'",
6511
- "description": "Position relative to the trigger element.\nAuto-flips when constrained by the viewport.",
6512
- "attribute": "position"
6409
+ "privacy": "private",
6410
+ "readonly": true
6513
6411
  },
6514
6412
  {
6515
6413
  "kind": "field",
6516
- "name": "trigger",
6414
+ "name": "_totalPages",
6517
6415
  "type": {
6518
- "text": "'click' | 'hover' | 'focus'"
6416
+ "text": "number"
6519
6417
  },
6520
- "default": "'click'",
6521
- "description": "How the popover is activated.\n- 'click': Toggle on click with light dismiss\n- 'hover': Show on mouseenter with delay\n- 'focus': Show on focusin",
6522
- "attribute": "trigger"
6418
+ "privacy": "private",
6419
+ "readonly": true
6523
6420
  },
6524
6421
  {
6525
6422
  "kind": "field",
6526
- "name": "delay",
6423
+ "name": "_startItem",
6527
6424
  "type": {
6528
6425
  "text": "number"
6529
6426
  },
6530
- "default": "300",
6531
- "description": "Show delay in milliseconds (hover trigger only).",
6532
- "attribute": "delay"
6427
+ "privacy": "private",
6428
+ "readonly": true
6533
6429
  },
6534
6430
  {
6535
6431
  "kind": "field",
6536
- "name": "offset",
6432
+ "name": "_endItem",
6537
6433
  "type": {
6538
- "text": "PopoverOffset | null"
6434
+ "text": "number"
6539
6435
  },
6540
- "default": "null",
6541
- "description": "Gap between trigger and popover (sm=4px, md=8px, lg=12px, xl=16px).",
6542
- "attribute": "offset"
6436
+ "privacy": "private",
6437
+ "readonly": true
6543
6438
  },
6544
6439
  {
6545
- "kind": "field",
6546
- "name": "noArrow",
6547
- "type": {
6548
- "text": "boolean"
6549
- },
6550
- "default": "false",
6551
- "description": "Hide the arrow pseudo-element.",
6552
- "attribute": "no-arrow"
6440
+ "kind": "method",
6441
+ "name": "_setupSlots",
6442
+ "privacy": "private",
6443
+ "return": {
6444
+ "type": {
6445
+ "text": "void"
6446
+ }
6447
+ }
6553
6448
  },
6554
6449
  {
6555
- "kind": "field",
6556
- "name": "open",
6557
- "type": {
6558
- "text": "boolean"
6450
+ "kind": "method",
6451
+ "name": "_goToFirstPage",
6452
+ "privacy": "private",
6453
+ "return": {
6454
+ "type": {
6455
+ "text": "void"
6456
+ }
6559
6457
  },
6560
- "default": "false",
6561
- "description": "Programmatic open/close state (reflected).",
6562
- "attribute": "open",
6563
- "reflects": true
6458
+ "parameters": [
6459
+ {
6460
+ "name": "e",
6461
+ "type": {
6462
+ "text": "Event"
6463
+ }
6464
+ }
6465
+ ]
6564
6466
  },
6565
6467
  {
6566
- "kind": "field",
6567
- "name": "panelLabel",
6568
- "type": {
6569
- "text": "string"
6468
+ "kind": "method",
6469
+ "name": "_goToPreviousPage",
6470
+ "privacy": "private",
6471
+ "return": {
6472
+ "type": {
6473
+ "text": "void"
6474
+ }
6570
6475
  },
6571
- "default": "''",
6572
- "description": "Accessible label for the popover panel (applied as aria-label on the dialog).",
6573
- "attribute": "panel-label"
6574
- },
6575
- {
6576
- "kind": "field",
6577
- "name": "_onTriggerMouseLeave",
6578
- "privacy": "private"
6579
- },
6580
- {
6581
- "kind": "field",
6582
- "name": "_onTriggerFocusIn",
6583
- "privacy": "private"
6476
+ "parameters": [
6477
+ {
6478
+ "name": "e",
6479
+ "type": {
6480
+ "text": "Event"
6481
+ }
6482
+ }
6483
+ ]
6584
6484
  },
6585
6485
  {
6586
- "kind": "field",
6587
- "name": "_onTriggerFocusOut",
6588
- "privacy": "private"
6486
+ "kind": "method",
6487
+ "name": "_goToNextPage",
6488
+ "privacy": "private",
6489
+ "return": {
6490
+ "type": {
6491
+ "text": "void"
6492
+ }
6493
+ },
6494
+ "parameters": [
6495
+ {
6496
+ "name": "e",
6497
+ "type": {
6498
+ "text": "Event"
6499
+ }
6500
+ }
6501
+ ]
6589
6502
  },
6590
6503
  {
6591
- "kind": "field",
6592
- "name": "_onPanelMouseEnter",
6593
- "privacy": "private"
6504
+ "kind": "method",
6505
+ "name": "_goToLastPage",
6506
+ "privacy": "private",
6507
+ "return": {
6508
+ "type": {
6509
+ "text": "void"
6510
+ }
6511
+ },
6512
+ "parameters": [
6513
+ {
6514
+ "name": "e",
6515
+ "type": {
6516
+ "text": "Event"
6517
+ }
6518
+ }
6519
+ ]
6594
6520
  },
6595
6521
  {
6596
- "kind": "field",
6597
- "name": "_onPanelMouseLeave",
6598
- "privacy": "private"
6522
+ "kind": "method",
6523
+ "name": "_manageBoundaryFocus",
6524
+ "privacy": "private",
6525
+ "return": {
6526
+ "type": {
6527
+ "text": "void"
6528
+ }
6529
+ },
6530
+ "parameters": [
6531
+ {
6532
+ "name": "clickedButton",
6533
+ "type": {
6534
+ "text": "IconButton"
6535
+ }
6536
+ }
6537
+ ]
6599
6538
  },
6600
6539
  {
6601
- "kind": "field",
6602
- "name": "_onNativeToggle",
6603
- "privacy": "private"
6540
+ "kind": "method",
6541
+ "name": "_onBuiltinPageSizeSelect",
6542
+ "privacy": "private",
6543
+ "return": {
6544
+ "type": {
6545
+ "text": "void"
6546
+ }
6547
+ },
6548
+ "parameters": [
6549
+ {
6550
+ "name": "e",
6551
+ "type": {
6552
+ "text": "Event"
6553
+ }
6554
+ }
6555
+ ]
6604
6556
  },
6605
6557
  {
6606
- "kind": "field",
6607
- "name": "_onKeyDown",
6608
- "privacy": "private"
6558
+ "kind": "method",
6559
+ "name": "_onBuiltinJumperSelect",
6560
+ "privacy": "private",
6561
+ "return": {
6562
+ "type": {
6563
+ "text": "void"
6564
+ }
6565
+ },
6566
+ "parameters": [
6567
+ {
6568
+ "name": "e",
6569
+ "type": {
6570
+ "text": "Event"
6571
+ }
6572
+ }
6573
+ ]
6609
6574
  },
6610
6575
  {
6611
6576
  "kind": "method",
@@ -6644,96 +6609,143 @@
6644
6609
  "type": {
6645
6610
  "text": "CustomEvent"
6646
6611
  },
6647
- "description": "Fired when the popover opens",
6648
- "name": "btu-popover-show"
6612
+ "description": "Fired after first render",
6613
+ "name": "btu-pagination-ready"
6649
6614
  },
6650
6615
  {
6651
6616
  "type": {
6652
- "text": "CustomEvent"
6617
+ "text": "CustomEvent<{page: number, pageSize: number}>"
6653
6618
  },
6654
- "description": "Fired when the popover closes",
6655
- "name": "btu-popover-hide"
6619
+ "description": "Fired on page navigation",
6620
+ "name": "btu-pagination-change"
6621
+ },
6622
+ {
6623
+ "type": {
6624
+ "text": "CustomEvent<{page: number, pageSize: number}>"
6625
+ },
6626
+ "description": "Fired on page size change",
6627
+ "name": "btu-pagination-page-size-change"
6656
6628
  }
6657
6629
  ],
6658
6630
  "attributes": [
6659
6631
  {
6660
- "name": "position",
6632
+ "name": "page",
6661
6633
  "type": {
6662
- "text": "'top' | 'bottom' | 'left' | 'right'"
6634
+ "text": "number"
6663
6635
  },
6664
- "default": "'bottom'",
6665
- "description": "Position relative to the trigger element.\nAuto-flips when constrained by the viewport.",
6666
- "fieldName": "position",
6667
- "attribute": "position"
6636
+ "default": "1",
6637
+ "description": "Current page number (1-based)",
6638
+ "fieldName": "page",
6639
+ "attribute": "page"
6668
6640
  },
6669
6641
  {
6670
- "name": "trigger",
6642
+ "name": "page-size",
6671
6643
  "type": {
6672
- "text": "'click' | 'hover' | 'focus'"
6644
+ "text": "number"
6673
6645
  },
6674
- "default": "'click'",
6675
- "description": "How the popover is activated.\n- 'click': Toggle on click with light dismiss\n- 'hover': Show on mouseenter with delay\n- 'focus': Show on focusin",
6676
- "fieldName": "trigger",
6677
- "attribute": "trigger"
6646
+ "default": "0",
6647
+ "description": "Number of items per page",
6648
+ "fieldName": "pageSize",
6649
+ "attribute": "page-size"
6678
6650
  },
6679
6651
  {
6680
- "name": "delay",
6652
+ "name": "disabled",
6681
6653
  "type": {
6682
- "text": "number"
6654
+ "text": "boolean"
6683
6655
  },
6684
- "default": "300",
6685
- "description": "Show delay in milliseconds (hover trigger only).",
6686
- "fieldName": "delay",
6687
- "attribute": "delay"
6656
+ "default": "false",
6657
+ "description": "Disables all pagination controls",
6658
+ "fieldName": "disabled",
6659
+ "attribute": "disabled"
6688
6660
  },
6689
6661
  {
6690
- "name": "offset",
6662
+ "name": "loading",
6691
6663
  "type": {
6692
- "text": "PopoverOffset | null"
6664
+ "text": "boolean"
6693
6665
  },
6694
- "default": "null",
6695
- "description": "Gap between trigger and popover (sm=4px, md=8px, lg=12px, xl=16px).",
6696
- "fieldName": "offset",
6697
- "attribute": "offset"
6666
+ "default": "false",
6667
+ "description": "Shows loading spinner and dims controls",
6668
+ "fieldName": "loading",
6669
+ "attribute": "loading"
6698
6670
  },
6699
6671
  {
6700
- "name": "noArrow",
6672
+ "name": "hide-on-single-page",
6701
6673
  "type": {
6702
6674
  "text": "boolean"
6703
6675
  },
6704
- "default": "false",
6705
- "description": "Hide the arrow pseudo-element.",
6706
- "fieldName": "noArrow"
6676
+ "default": "true",
6677
+ "description": "Hide controls when there is only one page",
6678
+ "fieldName": "hideOnSinglePage",
6679
+ "attribute": "hide-on-single-page"
6707
6680
  },
6708
6681
  {
6709
- "name": "open",
6682
+ "name": "page-size-changer",
6710
6683
  "type": {
6711
6684
  "text": "boolean"
6712
6685
  },
6713
- "default": "false",
6714
- "description": "Programmatic open/close state (reflected).",
6715
- "fieldName": "open",
6716
- "attribute": "open"
6686
+ "default": "true",
6687
+ "description": "Show the page size dropdown",
6688
+ "fieldName": "pageSizeChanger",
6689
+ "attribute": "page-size-changer"
6717
6690
  },
6718
6691
  {
6719
- "name": "panel-label",
6692
+ "name": "page-size-options",
6720
6693
  "type": {
6721
6694
  "text": "string"
6722
6695
  },
6723
- "default": "''",
6724
- "description": "Accessible label for the popover panel (applied as aria-label on the dialog).",
6725
- "fieldName": "panelLabel",
6726
- "attribute": "panel-label"
6696
+ "default": "'10, 20, 50'",
6697
+ "description": "Comma-separated page size options",
6698
+ "fieldName": "pageSizeOptions",
6699
+ "attribute": "page-size-options"
6727
6700
  },
6728
6701
  {
6729
- "name": "no-arrow",
6702
+ "name": "total-items",
6703
+ "type": {
6704
+ "text": "number"
6705
+ },
6706
+ "default": "0",
6707
+ "description": "Total number of items across all pages",
6708
+ "fieldName": "totalItems",
6709
+ "attribute": "total-items"
6710
+ },
6711
+ {
6712
+ "name": "boundary-buttons",
6713
+ "type": {
6714
+ "text": "boolean"
6715
+ },
6716
+ "default": "true",
6717
+ "description": "Show first and last page buttons",
6718
+ "fieldName": "boundaryButtons",
6719
+ "attribute": "boundary-buttons"
6720
+ },
6721
+ {
6722
+ "name": "hide-total-count",
6730
6723
  "type": {
6731
6724
  "text": "boolean"
6732
6725
  },
6733
6726
  "default": "false",
6734
- "description": "Hide the arrow pseudo-element.",
6735
- "attribute": "noArrow",
6736
- "fieldName": "noArrow"
6727
+ "description": "Hide the item count display (e.g., \"1-10 of 200\")",
6728
+ "fieldName": "hideTotalCount",
6729
+ "attribute": "hide-total-count"
6730
+ },
6731
+ {
6732
+ "name": "page-jumper",
6733
+ "type": {
6734
+ "text": "boolean"
6735
+ },
6736
+ "default": "false",
6737
+ "description": "Show the page jumper dropdown. Intended for moderate page counts (under ~100 pages).\nFor large datasets, use a custom `slot=\"jumper\"` with a virtualized or input-based control.",
6738
+ "fieldName": "pageJumper",
6739
+ "attribute": "page-jumper"
6740
+ },
6741
+ {
6742
+ "name": "label",
6743
+ "type": {
6744
+ "text": "string | undefined"
6745
+ },
6746
+ "description": "Accessible label for the pagination nav landmark",
6747
+ "fieldName": "label",
6748
+ "attribute": "label"
6737
6749
  }
6738
6750
  ],
6739
6751
  "mixins": [
@@ -6750,7 +6762,7 @@
6750
6762
  "name": "LitElement",
6751
6763
  "package": "lit"
6752
6764
  },
6753
- "tagName": "btu-popover",
6765
+ "tagName": "btu-pagination",
6754
6766
  "customElement": true
6755
6767
  }
6756
6768
  ],
@@ -6759,16 +6771,16 @@
6759
6771
  "kind": "js",
6760
6772
  "name": "default",
6761
6773
  "declaration": {
6762
- "name": "Popover",
6763
- "module": "src/components/popover/Popover.ts"
6774
+ "name": "Pagination",
6775
+ "module": "src/components/pagination/Pagination.ts"
6764
6776
  }
6765
6777
  },
6766
6778
  {
6767
6779
  "kind": "custom-element-definition",
6768
- "name": "btu-popover",
6780
+ "name": "btu-pagination",
6769
6781
  "declaration": {
6770
- "name": "Popover",
6771
- "module": "src/components/popover/Popover.ts"
6782
+ "name": "Pagination",
6783
+ "module": "src/components/pagination/Pagination.ts"
6772
6784
  }
6773
6785
  }
6774
6786
  ]