@brightspot/ui 3.0.1-cms-ui-migration.2 → 3.0.1-cms-ui-migration.4

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 (320) hide show
  1. package/README.md +56 -37
  2. package/dist/custom-elements.json +1807 -1807
  3. package/dist/storybook/assets/{ActionBar.stories-hJ_5cm-P.js → ActionBar.stories-BZAVK1QG.js} +1 -1
  4. package/dist/storybook/assets/{ActionItem.stories-Bjx2803w.js → ActionItem.stories-BqiWvlWi.js} +1 -1
  5. package/dist/storybook/assets/{Avatar.stories-Cj0YgZ6f.js → Avatar.stories-DkdB6hd_.js} +1 -1
  6. package/dist/storybook/assets/{AvatarGroup.stories-Lh_sQFCU.js → AvatarGroup.stories-DODqaIix.js} +1 -1
  7. package/dist/storybook/assets/{Badge.stories-BL7RUibx.js → Badge.stories-DZoum08S.js} +1 -1
  8. package/dist/storybook/assets/{Button-BPHNcxqK.js → Button-BkmBgNO-.js} +1 -1
  9. package/dist/storybook/assets/{Button.stories-CAYO4gdU.js → Button.stories-BFhCL2dp.js} +1 -1
  10. package/dist/storybook/assets/{ButtonGroup.stories-Cd13Us5K.js → ButtonGroup.stories-DlTGTvkq.js} +1 -1
  11. package/dist/storybook/assets/{Celebrate.stories-D_KE3Qze.js → Celebrate.stories-m4d4zTEz.js} +1 -1
  12. package/dist/storybook/assets/{Checkbox.stories-Aj1xgZVn.js → Checkbox.stories-Y253YeU7.js} +1 -1
  13. package/dist/storybook/assets/{CircularProgress.stories-BecV_v6d.js → CircularProgress.stories-6BD8uV5G.js} +1 -1
  14. package/dist/storybook/assets/{ClipboardMixin.stories-DU-WiZ2f.js → ClipboardMixin.stories-BkH66rIU.js} +1 -1
  15. package/dist/storybook/assets/{Color-6BZIO3FS-BYl4KZZn.js → Color-6BZIO3FS-iG0OjPBU.js} +1 -1
  16. package/dist/storybook/assets/{Colors.stories-BMUVUy2q.js → Colors.stories-BxiyQnEg.js} +1 -1
  17. package/dist/storybook/assets/{CombinedEffects.stories-FHcPKFm6.js → CombinedEffects.stories-Bs3U7qRl.js} +1 -1
  18. package/dist/storybook/assets/{ComponentStatesMixin-EMUnfT5y.js → ComponentStatesMixin-DampYb5c.js} +1 -1
  19. package/dist/storybook/assets/{ComponentStatesMixin.stories-SXq0kzS9.js → ComponentStatesMixin.stories-CZ2OW7as.js} +1 -1
  20. package/dist/storybook/assets/{CopyToClipboard.stories-u43lhvcI.js → CopyToClipboard.stories-CdlghjaE.js} +1 -1
  21. package/dist/storybook/assets/{Debounce.stories-BdCn5qgO.js → Debounce.stories-CymT8PnT.js} +1 -1
  22. package/dist/storybook/assets/{DocsRenderer-LL677BLK-DxiEJ_jx.js → DocsRenderer-LL677BLK-dqHCo-GE.js} +3 -3
  23. package/dist/storybook/assets/{Dropdown.stories-BWSRwjIF.js → Dropdown.stories-B6JwKg-I.js} +1 -1
  24. package/dist/storybook/assets/{EmptyState.stories-BpobeZL5.js → EmptyState.stories-Bk229lPH.js} +1 -1
  25. package/dist/storybook/assets/{Events.stories-CP5kMzpr.js → Events.stories-C8-k9cx8.js} +1 -1
  26. package/dist/storybook/assets/{Heading.stories-CbJD-oTB.js → Heading.stories-DIdnAQRG.js} +1 -1
  27. package/dist/storybook/assets/{HueRipple.stories-BOABJ7zw.js → HueRipple.stories-B1gXAEaH.js} +1 -1
  28. package/dist/storybook/assets/{Icon.stories-CWlUHL4j.js → Icon.stories--1VJ0_yt.js} +1 -1
  29. package/dist/storybook/assets/{IconButton.stories-BWBs-OLT.js → IconButton.stories-CS2rEIir.js} +1 -1
  30. package/dist/storybook/assets/{LinearProgress.stories-LZ0GZoxF.js → LinearProgress.stories-Bx0CQQls.js} +1 -1
  31. package/dist/storybook/assets/{Pagination.stories-CbLaR3P9.js → Pagination.stories-B4AogTXB.js} +1 -1
  32. package/dist/storybook/assets/{Popover.stories-JHrWqYZw.js → Popover.stories-BR88DPgU.js} +1 -1
  33. package/dist/storybook/assets/{ReadyMixin-B1H2a9x8.js → ReadyMixin-n6qZO39Y.js} +1 -1
  34. package/dist/storybook/assets/{RovingTabindexMixin.stories-UMHpYG73.js → RovingTabindexMixin.stories-1xTJSMSv.js} +1 -1
  35. package/dist/storybook/assets/{Rtc.stories-VQtNSlls.js → Rtc.stories-Rt0A_rUZ.js} +1 -1
  36. package/dist/storybook/assets/{ScrollShadow.stories-CYdi8Tgp.js → ScrollShadow.stories-CjLdJyYu.js} +1 -1
  37. package/dist/storybook/assets/{Switch.stories-D8F2hZCf.js → Switch.stories-CF8wO4v2.js} +1 -1
  38. package/dist/storybook/assets/{Tab.stories-wgBP0lTj.js → Tab.stories-C8XNshog.js} +1 -1
  39. package/dist/storybook/assets/{Tabs.stories-C00rr5sf.js → Tabs.stories-B01l4rQx.js} +1 -1
  40. package/dist/storybook/assets/{Throttle.stories-BhQEfJbS.js → Throttle.stories-Bpi0K5j9.js} +1 -1
  41. package/dist/storybook/assets/{Tooltip.stories-CGoZ5qTn.js → Tooltip.stories-BC4zMiZ1.js} +1 -1
  42. package/dist/storybook/assets/{Upload.stories-B3K-HAXw.js → Upload.stories-2pWv_fZ1.js} +1 -1
  43. package/dist/storybook/assets/{UploadItem.stories-71ArSoUh.js → UploadItem.stories-aLeAUM7y.js} +1 -1
  44. package/dist/storybook/assets/{Welcome.stories-CihlfFXS.js → Welcome.stories-DJV83eb7.js} +1 -1
  45. package/dist/storybook/assets/{Widget.stories-1u4KbiJM.js → Widget.stories-Cz0i2o6L.js} +1 -1
  46. package/dist/storybook/assets/{WithTooltip-65CFNBJE-B3Jitxw9.js → WithTooltip-65CFNBJE-D8QwVYG8.js} +1 -1
  47. package/dist/storybook/assets/{blocks-C1HaXuQB.js → blocks-BFmpEZRy.js} +5 -5
  48. package/dist/storybook/assets/{formatter-EIJCOSYU-Dy9Lt9fs.js → formatter-EIJCOSYU-CdwdJOPy.js} +1 -1
  49. package/dist/storybook/assets/if-defined-gbJXriW-.js +1 -0
  50. package/dist/storybook/assets/{iframe-Dx6IxWXF.js → iframe-CyssRDCd.js} +4 -4
  51. package/dist/storybook/assets/{index-OrjedSVh.js → index-B82i8dhg.js} +1 -1
  52. package/dist/storybook/assets/{onFind-YTqjw6W0.js → onFind-BFI1uIxr.js} +1 -1
  53. package/dist/storybook/assets/{onFind.stories-DEvwTrmx.js → onFind.stories-zZjQs_Gn.js} +1 -1
  54. package/dist/storybook/assets/{onRemove.stories-D5mO-Lin.js → onRemove.stories-pFBwAIex.js} +1 -1
  55. package/dist/storybook/assets/{onVisible.stories-C3Rcz0Eb.js → onVisible.stories-5dErOVRq.js} +1 -1
  56. package/dist/storybook/assets/{style-map-CiMHry7H.js → style-map-D0EcLEWO.js} +1 -1
  57. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-DIZnuhb2.js → syntaxhighlighter-ED5Y7EFY--2h_dVga.js} +1 -1
  58. package/dist/storybook/iframe.html +1 -1
  59. package/dist/storybook/project.json +1 -1
  60. package/package.json +16 -2
  61. package/src/legacy/tool-ui/src/AnalyticsWidget.css +1 -1
  62. package/src/legacy/tool-ui/src/Board.css +1 -1
  63. package/src/legacy/tool-ui/src/BulkUpload.css +1 -1
  64. package/src/legacy/tool-ui/src/ComboInput.css +1 -1
  65. package/src/legacy/tool-ui/src/Compat.css +5 -5
  66. package/src/legacy/tool-ui/src/ContentEditDrawer.css +1 -1
  67. package/src/legacy/tool-ui/src/Dialog.css +1 -1
  68. package/src/legacy/tool-ui/src/FormFilter.css +1 -1
  69. package/src/legacy/tool-ui/src/Icon/index.css +1 -1
  70. package/src/legacy/tool-ui/src/ImageEditor.css +1 -1
  71. package/src/legacy/tool-ui/src/Incompatible.css +2 -2
  72. package/src/legacy/tool-ui/src/LinkCarousel.css +1 -1
  73. package/src/legacy/tool-ui/src/Page.css +1 -1
  74. package/src/legacy/tool-ui/src/RepeatableContentInputGroup.css +1 -1
  75. package/src/legacy/tool-ui/src/RichText.css +1 -1
  76. package/src/legacy/tool-ui/src/SearchWidget.css +2 -2
  77. package/src/legacy/tool-ui/src/SearchWidgetAdvanced.css +1 -1
  78. package/src/legacy/tool-ui/src/Widget.css +1 -1
  79. package/src/legacy/tool-ui/src/main/webapp/dist/v5.5e5d7f655e174ddd85f5.css +5 -0
  80. package/dist/storybook/assets/if-defined-CA2KmTqA.js +0 -1
  81. package/docs/adr/0001-retire-cms-ui-package-fold-under-src-legacy.md +0 -78
  82. package/docs/adr/0002-yarn-workspaces-preserve-cms-ui-deps.md +0 -130
  83. package/docs/adr/0003-bundle-equivalence-as-fold-acceptance-criterion.md +0 -286
  84. package/src/legacy/tool-ui/src/main/resources/settings.properties +0 -1
  85. package/src/legacy/tool-ui/src/main/webapp/WEB-INF/web.xml +0 -81
  86. package/src/legacy/tool-ui/src/main/webapp/dist/v5.5e3fdf0f0b20b4e3c170.css +0 -5
  87. package/src/legacy/tool-ui/src/main/webapp/script/bsp-uploader.js +0 -170
  88. package/src/legacy/tool-ui/src/main/webapp/script/bsp-utils.js +0 -393
  89. package/src/legacy/tool-ui/src/main/webapp/script/content/layout-element.js +0 -141
  90. package/src/legacy/tool-ui/src/main/webapp/script/input/query.js +0 -78
  91. package/src/legacy/tool-ui/src/main/webapp/script/input/workflow.js +0 -718
  92. package/src/legacy/tool-ui/src/main/webapp/script/jquery.extra.js +0 -633
  93. package/src/legacy/tool-ui/src/main/webapp/script/v3/Dropbox.js +0 -18
  94. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdate.js +0 -406
  95. package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdateCache.js +0 -1
  96. package/src/legacy/tool-ui/src/main/webapp/script/v3/Notification.js +0 -151
  97. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/edit.js +0 -194
  98. package/src/legacy/tool-ui/src/main/webapp/script/v3/content/state.js +0 -785
  99. package/src/legacy/tool-ui/src/main/webapp/script/v3/csrf.js +0 -35
  100. package/src/legacy/tool-ui/src/main/webapp/script/v3/dashboard.js +0 -65
  101. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/dataTransfer.js +0 -129
  102. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/file.js +0 -433
  103. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/object.js +0 -743
  104. package/src/legacy/tool-ui/src/main/webapp/script/v3/input/read-only.js +0 -17
  105. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.frame.js +0 -478
  106. package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.repeatable.js +0 -2406
  107. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.d.ts +0 -2
  108. package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.js +0 -446
  109. package/src/legacy/tool-ui/src/main/webapp/script/v3/search-filters.js +0 -62
  110. package/src/legacy/tool-ui/src/main/webapp/script/v3/search.js +0 -53
  111. package/src/legacy/tool-ui/src/main/webapp/script/v3.js +0 -1049
  112. package/src/legacy/tool-ui/src/main/webapp/v4/Admin.js +0 -16
  113. package/src/legacy/tool-ui/src/main/webapp/v4/AutoExpand.js +0 -84
  114. package/src/legacy/tool-ui/src/main/webapp/v4/AutoSubmit.js +0 -68
  115. package/src/legacy/tool-ui/src/main/webapp/v4/Bridge.js +0 -536
  116. package/src/legacy/tool-ui/src/main/webapp/v4/CheckboxInput.js +0 -22
  117. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInput.js +0 -5
  118. package/src/legacy/tool-ui/src/main/webapp/v4/ColorInputSpectrum.js +0 -107
  119. package/src/legacy/tool-ui/src/main/webapp/v4/ComboInput.js +0 -1491
  120. package/src/legacy/tool-ui/src/main/webapp/v4/CommunityWidget.js +0 -29
  121. package/src/legacy/tool-ui/src/main/webapp/v4/ContentEdit.js +0 -2427
  122. package/src/legacy/tool-ui/src/main/webapp/v4/ContentLock.js +0 -470
  123. package/src/legacy/tool-ui/src/main/webapp/v4/ContentReporting.js +0 -32
  124. package/src/legacy/tool-ui/src/main/webapp/v4/DataTable.js +0 -31
  125. package/src/legacy/tool-ui/src/main/webapp/v4/DateStringField.js +0 -485
  126. package/src/legacy/tool-ui/src/main/webapp/v4/Entry.js +0 -264
  127. package/src/legacy/tool-ui/src/main/webapp/v4/ExternalItemAuth.js +0 -16
  128. package/src/legacy/tool-ui/src/main/webapp/v4/Form.js +0 -31
  129. package/src/legacy/tool-ui/src/main/webapp/v4/Hierarchy.js +0 -100
  130. package/src/legacy/tool-ui/src/main/webapp/v4/Icon.ts +0 -49
  131. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditor.js +0 -2403
  132. package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditorBundle.js +0 -5
  133. package/src/legacy/tool-ui/src/main/webapp/v4/LinkCarousel.js +0 -40
  134. package/src/legacy/tool-ui/src/main/webapp/v4/LinkList.js +0 -14
  135. package/src/legacy/tool-ui/src/main/webapp/v4/LinkTable.js +0 -123
  136. package/src/legacy/tool-ui/src/main/webapp/v4/Location.js +0 -19
  137. package/src/legacy/tool-ui/src/main/webapp/v4/LocationMap.js +0 -148
  138. package/src/legacy/tool-ui/src/main/webapp/v4/LookingGlass.js +0 -24
  139. package/src/legacy/tool-ui/src/main/webapp/v4/Message.js +0 -14
  140. package/src/legacy/tool-ui/src/main/webapp/v4/NumberBar.js +0 -32
  141. package/src/legacy/tool-ui/src/main/webapp/v4/Page.js +0 -890
  142. package/src/legacy/tool-ui/src/main/webapp/v4/Preview.js +0 -758
  143. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewEditor.js +0 -86
  144. package/src/legacy/tool-ui/src/main/webapp/v4/PreviewOverlay.js +0 -1005
  145. package/src/legacy/tool-ui/src/main/webapp/v4/PubSub.js +0 -47
  146. package/src/legacy/tool-ui/src/main/webapp/v4/QueryField.js +0 -211
  147. package/src/legacy/tool-ui/src/main/webapp/v4/RegionMap.js +0 -215
  148. package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentInputGroup.js +0 -160
  149. package/src/legacy/tool-ui/src/main/webapp/v4/RichTextEditor.js +0 -154
  150. package/src/legacy/tool-ui/src/main/webapp/v4/SearchFields.js +0 -281
  151. package/src/legacy/tool-ui/src/main/webapp/v4/SearchResult.js +0 -255
  152. package/src/legacy/tool-ui/src/main/webapp/v4/SharePreview.js +0 -56
  153. package/src/legacy/tool-ui/src/main/webapp/v4/Sortable.js +0 -874
  154. package/src/legacy/tool-ui/src/main/webapp/v4/StyleEmbeddedContent.js +0 -100
  155. package/src/legacy/tool-ui/src/main/webapp/v4/StyleguidePresets.js +0 -357
  156. package/src/legacy/tool-ui/src/main/webapp/v4/TabContainer.js +0 -360
  157. package/src/legacy/tool-ui/src/main/webapp/v4/Taxonomy.js +0 -27
  158. package/src/legacy/tool-ui/src/main/webapp/v4/ThemeBundleEditor.js +0 -224
  159. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContent.js +0 -147
  160. package/src/legacy/tool-ui/src/main/webapp/v4/TimedContentBundle.js +0 -8
  161. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditor.js +0 -2417
  162. package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditorBundle.js +0 -8
  163. package/src/legacy/tool-ui/src/main/webapp/v4/ViewMirror.js +0 -52
  164. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.d.ts +0 -13
  165. package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.js +0 -177
  166. package/src/legacy/tool-ui/src/main/webapp/v4/Widget.js +0 -90
  167. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/fileMock.js +0 -1
  168. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/styleMock.js +0 -1
  169. package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/textArea.mock.js +0 -20
  170. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/globals.js +0 -770
  171. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/ProseMirror.test.js +0 -16
  172. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/index.html +0 -54
  173. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/CommentManager.test.js +0 -29
  174. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/index.html +0 -35
  175. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -42
  176. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/index.html +0 -37
  177. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -288
  178. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/block.html +0 -38
  179. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/inline.html +0 -38
  180. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/no-popups.html +0 -38
  181. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/ListManager.js +0 -257
  182. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/index.html +0 -38
  183. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/hierarchal.html +0 -33
  184. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/index.html +0 -33
  185. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/menubar.test.js +0 -195
  186. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/small.html +0 -34
  187. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/tags.html +0 -34
  188. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/PlaceholderManager.test.js +0 -134
  189. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-editable-placeholder.html +0 -32
  190. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-text.html +0 -34
  191. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/index.html +0 -31
  192. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/TableManager.test.js +0 -63
  193. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/existing.html +0 -48
  194. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/TrackManager.test.js +0 -291
  195. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/existing.html +0 -39
  196. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/insert.html +0 -37
  197. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/Sortable.test.js +0 -105
  198. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/ProseMirror.test.js +0 -41
  199. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/codemirror-shim.test.js +0 -72
  200. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/collab_manager/CollabManager.test.js +0 -46
  201. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -84
  202. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/list_manager/ListManager.test.js +0 -54
  203. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/menubar/menubar.test.js +0 -183
  204. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/spellcheck/SpellCheck.test.js +0 -45
  205. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/BSSerializer.test.js +0 -346
  206. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/menuItemsBuilder.test.js +0 -226
  207. package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/utilities.test.js +0 -118
  208. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/Appetizeio.js +0 -5
  209. package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/AppetizeioEmbedded.js +0 -113
  210. package/src/legacy/tool-ui/src/main/webapp/v4/compat/Fetch.js +0 -16
  211. package/src/legacy/tool-ui/src/main/webapp/v4/compat/jquery.js +0 -32
  212. package/src/legacy/tool-ui/src/main/webapp/v4/compat/requirejs.js +0 -13
  213. package/src/legacy/tool-ui/src/main/webapp/v4/dom/Tether.js +0 -1
  214. package/src/legacy/tool-ui/src/main/webapp/v4/dom/TetherLayout.js +0 -1
  215. package/src/legacy/tool-ui/src/main/webapp/v4/dom/closest.js +0 -1
  216. package/src/legacy/tool-ui/src/main/webapp/v4/dom/create.js +0 -1
  217. package/src/legacy/tool-ui/src/main/webapp/v4/dom/find.js +0 -1
  218. package/src/legacy/tool-ui/src/main/webapp/v4/dom/findAll.js +0 -1
  219. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifClick.js +0 -1
  220. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifMatches.js +0 -1
  221. package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifUnmodified.js +0 -1
  222. package/src/legacy/tool-ui/src/main/webapp/v4/dom/index.js +0 -5
  223. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertBefore.js +0 -1
  224. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertFirst.js +0 -1
  225. package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertLast.js +0 -1
  226. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFind.js +0 -1
  227. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFindOnce.js +0 -1
  228. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRTEReady.js +0 -1
  229. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRemove.js +0 -1
  230. package/src/legacy/tool-ui/src/main/webapp/v4/dom/onVisible.js +0 -1
  231. package/src/legacy/tool-ui/src/main/webapp/v4/dom/previousUntil.js +0 -1
  232. package/src/legacy/tool-ui/src/main/webapp/v4/dom/resolveIconCompat.js +0 -40
  233. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/Socket.js +0 -1
  234. package/src/legacy/tool-ui/src/main/webapp/v4/rtc/index.js +0 -1
  235. package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirror.js +0 -909
  236. package/src/legacy/tool-ui/src/main/webapp/v4/rte/README.md +0 -68
  237. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.d.ts +0 -8
  238. package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.js +0 -274
  239. package/src/legacy/tool-ui/src/main/webapp/v4/rte/collab-workflow.jpeg +0 -0
  240. package/src/legacy/tool-ui/src/main/webapp/v4/rte/interchangeable.ts +0 -250
  241. package/src/legacy/tool-ui/src/main/webapp/v4/rte/mention.js +0 -90
  242. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/PluginProvider.js +0 -124
  243. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/README.md +0 -46
  244. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/AIInlineManager.ts +0 -124
  245. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/views/AIInlineView.ts +0 -1019
  246. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_manager/AiManager.ts +0 -199
  247. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/CollabManager.js +0 -339
  248. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/AvatarView.js +0 -96
  249. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/comment_manager/CommentManager.js +0 -348
  250. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -110
  251. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/README.md +0 -29
  252. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/EnhancementManager.js +0 -428
  253. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/README.md +0 -63
  254. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/commands.js +0 -690
  255. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/constants.js +0 -12
  256. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/enhancement-creation.jpeg +0 -0
  257. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/index.js +0 -15
  258. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/rte-flow.jpeg +0 -0
  259. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/ActionButtonView.js +0 -86
  260. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/BlockSubmenuView.js +0 -60
  261. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/EnhancementView.js +0 -208
  262. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/PreviewView.js +0 -102
  263. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/SubmenuView.js +0 -365
  264. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/FindReplaceManager.js +0 -239
  265. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/views/FindView.js +0 -604
  266. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/FullscreenManager.js +0 -57
  267. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/README.md +0 -26
  268. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/commands.js +0 -16
  269. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/index.js +0 -4
  270. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/views/FullscreenView.js +0 -474
  271. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/htmlEditorManager.js +0 -66
  272. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/views/HtmlEditorView.js +0 -97
  273. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/ListManager.js +0 -342
  274. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/README.md +0 -50
  275. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/commands.js +0 -207
  276. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/constants.js +0 -26
  277. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/index.js +0 -4
  278. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/Menubar.js +0 -485
  279. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/README.md +0 -40
  280. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/views/MenuView.js +0 -842
  281. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/paste_manager/PasteManager.js +0 -368
  282. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/placeholder_manager/PlaceHolderManager.js +0 -128
  283. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/README.md +0 -13
  284. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/RawTextManager.js +0 -96
  285. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/index.js +0 -3
  286. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-plugin.js +0 -280
  287. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-service.js +0 -94
  288. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/TableManager.js +0 -57
  289. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/commands.js +0 -97
  290. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableSizerView.js +0 -88
  291. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableView.js +0 -613
  292. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/README.md +0 -13
  293. package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/TrackManager.js +0 -905
  294. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/BSSerializer.js +0 -819
  295. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/README.md +0 -80
  296. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/commands.js +0 -98
  297. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.d.ts +0 -84
  298. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.js +0 -87
  299. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/index.js +0 -13
  300. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/keymapBuilder.js +0 -223
  301. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/menuItemsBuilder.js +0 -559
  302. package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/schemaBuilder.js +0 -1281
  303. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.d.ts +0 -4
  304. package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.js +0 -359
  305. package/src/legacy/tool-ui/src/main/webapp/v4/theme/ColorRotator.js +0 -1
  306. package/src/legacy/tool-ui/src/main/webapp/v4/util/debounce.js +0 -1
  307. package/src/legacy/tool-ui/src/main/webapp/v4/util/getComponentKey.js +0 -1
  308. package/src/legacy/tool-ui/src/main/webapp/v4/util/noise.js +0 -1
  309. package/src/legacy/tool-ui/src/main/webapp/v4/util/repaint.js +0 -1
  310. package/src/legacy/tool-ui/src/main/webapp/v4/util/storage.js +0 -1
  311. package/src/legacy/tool-ui/src/main/webapp/v4/util/throttle.js +0 -1
  312. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentContent.js +0 -33
  313. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskDashboard.js +0 -217
  314. package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssociatedContentWidget.js +0 -7
  315. package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkUpload.js +0 -19
  316. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Calendar.js +0 -7
  317. package/src/legacy/tool-ui/src/main/webapp/v4/widget/ClosableWindow.js +0 -13
  318. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchAssignments.js +0 -25
  319. package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchContent.js +0 -33
  320. package/src/legacy/tool-ui/src/main/webapp/v4/widget/Revisions.js +0 -61
@@ -4,225 +4,105 @@
4
4
  "modules": [
5
5
  {
6
6
  "kind": "javascript-module",
7
- "path": "src/components/avatar/Avatar.ts",
7
+ "path": "src/components/action-bar/ActionBar.ts",
8
8
  "declarations": [
9
9
  {
10
10
  "kind": "class",
11
- "description": "An avatar component for displaying user profile images with fallback support.\n\nAvatars display user profile images with automatic fallback to initials when\nthe image fails to load or is not provided.",
12
- "name": "Avatar",
11
+ "description": "A persistent container for primary, secondary, tertiary, and destructive actions\nwithin an interface, typically anchored to the bottom of a view.\n\nUses a two-zone layout: destructive actions on the left (start zone),\nmain actions on the right (end zone). Both zones maintain their position\neven when the other zone is empty (BSP-18087).\n\n**Positioning:** Uses `margin-top: auto` to push to bottom of flex/grid parents.\nIn block layout parents, the bar sits after content (a console warning is emitted).\n\n**Overflow:** When items don't fit, the least important overflow into a \"More\" dropdown.\nItems are auto-sorted by variant priority (tertiary → secondary → primary).\nWith `compact`, compactable items progressively hide labels one-by-one before overflowing.",
12
+ "name": "ActionBar",
13
13
  "cssProperties": [
14
14
  {
15
- "description": "Custom size (overrides size prop)",
16
- "name": "--avatar-size"
15
+ "description": "Gap between items (default: 0.75rem)",
16
+ "name": "--action-bar-gap"
17
17
  },
18
18
  {
19
- "description": "Fallback background color (default: purple-600)",
20
- "name": "--avatar-bg-color"
19
+ "description": "Bar padding (default: 1.5rem)",
20
+ "name": "--action-bar-padding"
21
21
  },
22
22
  {
23
- "description": "How rounded is the avatar (default: circle)",
24
- "name": "--avatar-corner-rounding"
23
+ "description": "Background color (default: white)",
24
+ "name": "--action-bar-background"
25
25
  },
26
26
  {
27
- "description": "Optional ring border color",
28
- "name": "--avatar-ring-color"
27
+ "description": "Border color (default: gray-200)",
28
+ "name": "--action-bar-border-color"
29
29
  },
30
30
  {
31
- "description": "Ring border width (default: 2px)",
32
- "name": "--avatar-ring-width"
31
+ "description": "Z-index (default: 100)",
32
+ "name": "--action-bar-z-index"
33
+ }
34
+ ],
35
+ "slots": [
36
+ {
37
+ "description": "One or more `btu-action-item` elements",
38
+ "name": ""
33
39
  }
34
40
  ],
35
41
  "members": [
36
42
  {
37
43
  "kind": "field",
38
- "name": "src",
44
+ "name": "position",
39
45
  "type": {
40
- "text": "string"
46
+ "text": "Position"
41
47
  },
42
- "default": "''",
43
- "description": "Image source URL",
44
- "attribute": "src"
48
+ "default": "'bottom'",
49
+ "description": "Bar position: 'top' or 'bottom' (default).",
50
+ "attribute": "position",
51
+ "reflects": true
45
52
  },
46
53
  {
47
54
  "kind": "field",
48
- "name": "alt",
55
+ "name": "sticky",
49
56
  "type": {
50
- "text": "string"
57
+ "text": "boolean"
51
58
  },
52
- "default": "''",
53
- "description": "Alt text for the image",
54
- "attribute": "alt"
59
+ "default": "false",
60
+ "description": "Enables CSS sticky positioning. When combined with position='top',\nthe bar sticks to the top of the scroll container. With position='bottom'\n(default), it sticks to the bottom.",
61
+ "attribute": "sticky",
62
+ "reflects": true
55
63
  },
56
64
  {
57
65
  "kind": "field",
58
- "name": "fallback",
66
+ "name": "alignment",
59
67
  "type": {
60
- "text": "string"
68
+ "text": "Alignment"
61
69
  },
62
- "default": "''",
63
- "description": "Fallback text (typically user initials)",
64
- "attribute": "fallback"
70
+ "default": "'default'",
71
+ "description": "Content alignment: 'default' (two-zone), 'start', 'center', 'end'.\nNon-default alignments disable two-zone layout.",
72
+ "attribute": "item-alignment",
73
+ "reflects": true
65
74
  },
66
75
  {
67
76
  "kind": "field",
68
- "name": "size",
77
+ "name": "shadow",
69
78
  "type": {
70
- "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'"
79
+ "text": "boolean"
71
80
  },
72
- "default": "'md'",
73
- "description": "Size variant.\n- 'xs': Extra small (1.5rem)\n- 'sm': Small (2.25rem)\n- 'md': Medium (2.5rem) - default\n- 'lg': Large (3rem)\n- 'xl': Extra large (3.5rem)\n- 'xxl': Extra extra large (4rem)",
74
- "attribute": "size"
81
+ "default": "false",
82
+ "description": "Adds a box-shadow to the bar.",
83
+ "attribute": "shadow",
84
+ "reflects": true
75
85
  },
76
86
  {
77
87
  "kind": "field",
78
- "name": "tooltip",
88
+ "name": "label",
79
89
  "type": {
80
90
  "text": "string"
81
91
  },
82
92
  "default": "''",
83
- "description": "Tooltip text content. Set to empty string to remove the tooltip.",
84
- "attribute": "tooltip",
85
- "inheritedFrom": {
86
- "name": "TooltipMixin",
87
- "module": "src/util/TooltipMixin.ts"
88
- }
89
- },
90
- {
91
- "kind": "field",
92
- "name": "tooltipPosition",
93
- "type": {
94
- "text": "'top' | 'bottom' | 'left' | 'right'"
95
- },
96
- "default": "'top'",
97
- "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
98
- "attribute": "tooltip-position",
99
- "inheritedFrom": {
100
- "name": "TooltipMixin",
101
- "module": "src/util/TooltipMixin.ts"
102
- }
103
- },
104
- {
105
- "kind": "field",
106
- "name": "tooltipDelay",
107
- "type": {
108
- "text": "number"
109
- },
110
- "default": "300",
111
- "description": "Show delay in milliseconds (hover trigger only).",
112
- "attribute": "tooltip-delay",
113
- "inheritedFrom": {
114
- "name": "TooltipMixin",
115
- "module": "src/util/TooltipMixin.ts"
116
- }
117
- },
118
- {
119
- "kind": "field",
120
- "name": "tooltipOffset",
121
- "type": {
122
- "text": "TooltipOffset | null"
123
- },
124
- "default": "null",
125
- "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
126
- "attribute": "tooltip-offset",
127
- "inheritedFrom": {
128
- "name": "TooltipMixin",
129
- "module": "src/util/TooltipMixin.ts"
130
- }
93
+ "description": "Accessible label for the toolbar region.",
94
+ "attribute": "label"
131
95
  },
132
96
  {
133
97
  "kind": "field",
134
- "name": "tooltipNoArrow",
98
+ "name": "compact",
135
99
  "type": {
136
100
  "text": "boolean"
137
101
  },
138
102
  "default": "false",
139
- "description": "Hide the arrow pseudo-element.",
140
- "attribute": "tooltip-no-arrow",
141
- "inheritedFrom": {
142
- "name": "TooltipMixin",
143
- "module": "src/util/TooltipMixin.ts"
144
- }
145
- },
146
- {
147
- "kind": "field",
148
- "name": "tooltipTrigger",
149
- "type": {
150
- "text": "string"
151
- },
152
- "default": "'hover focus'",
153
- "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
154
- "attribute": "tooltip-trigger",
155
- "inheritedFrom": {
156
- "name": "TooltipMixin",
157
- "module": "src/util/TooltipMixin.ts"
158
- }
159
- },
160
- {
161
- "kind": "field",
162
- "name": "_onMouseLeave",
163
- "privacy": "private",
164
- "inheritedFrom": {
165
- "name": "TooltipMixin",
166
- "module": "src/util/TooltipMixin.ts"
167
- }
168
- },
169
- {
170
- "kind": "field",
171
- "name": "_onFocusIn",
172
- "privacy": "private",
173
- "inheritedFrom": {
174
- "name": "TooltipMixin",
175
- "module": "src/util/TooltipMixin.ts"
176
- }
177
- },
178
- {
179
- "kind": "field",
180
- "name": "_onFocusOut",
181
- "privacy": "private",
182
- "inheritedFrom": {
183
- "name": "TooltipMixin",
184
- "module": "src/util/TooltipMixin.ts"
185
- }
186
- },
187
- {
188
- "kind": "field",
189
- "name": "_onClick",
190
- "privacy": "private",
191
- "inheritedFrom": {
192
- "name": "TooltipMixin",
193
- "module": "src/util/TooltipMixin.ts"
194
- }
195
- },
196
- {
197
- "kind": "field",
198
- "name": "_onNativeToggle",
199
- "privacy": "private",
200
- "inheritedFrom": {
201
- "name": "TooltipMixin",
202
- "module": "src/util/TooltipMixin.ts"
203
- }
204
- },
205
- {
206
- "kind": "field",
207
- "name": "_onKeyDown",
208
- "privacy": "private",
209
- "inheritedFrom": {
210
- "name": "TooltipMixin",
211
- "module": "src/util/TooltipMixin.ts"
212
- }
213
- },
214
- {
215
- "kind": "field",
216
- "name": "_onDocumentClick",
217
- "type": {
218
- "text": "((e: MouseEvent) => void) | null"
219
- },
220
- "privacy": "private",
221
- "default": "null",
222
- "inheritedFrom": {
223
- "name": "TooltipMixin",
224
- "module": "src/util/TooltipMixin.ts"
225
- }
103
+ "description": "Enables progressive label compacting. When space shrinks, items marked\n`compactable` (with icons) have their labels hidden one-by-one\nfrom least to most important before items overflow into \"More\".",
104
+ "attribute": "compact",
105
+ "reflects": true
226
106
  },
227
107
  {
228
108
  "kind": "method",
@@ -262,218 +142,82 @@
262
142
  "text": "CustomEvent"
263
143
  },
264
144
  "description": "Fired after first render and initialization",
265
- "name": "btu-avatar-ready"
266
- },
267
- {
268
- "type": {
269
- "text": "CustomEvent<{src: string}>"
270
- },
271
- "description": "Fired when image successfully loads",
272
- "name": "btu-avatar-image-loaded"
145
+ "name": "btu-action-bar-ready"
273
146
  },
274
147
  {
275
148
  "type": {
276
- "text": "CustomEvent<{src: string, error: Event}>"
149
+ "text": "CustomEvent<{label: string}>"
277
150
  },
278
- "description": "Fired when image fails to load",
279
- "name": "btu-avatar-image-error"
151
+ "description": "Fired when an action item is clicked (bubbles from btu-action-item)",
152
+ "name": "btu-action-item-click"
280
153
  }
281
154
  ],
282
155
  "attributes": [
283
156
  {
284
- "name": "src",
157
+ "name": "position",
285
158
  "type": {
286
- "text": "string"
159
+ "text": "Position"
287
160
  },
288
- "default": "''",
289
- "description": "Image source URL",
290
- "fieldName": "src",
291
- "attribute": "src"
161
+ "default": "'bottom'",
162
+ "description": "Bar position: 'top' or 'bottom' (default).",
163
+ "fieldName": "position",
164
+ "attribute": "position"
292
165
  },
293
166
  {
294
- "name": "alt",
167
+ "name": "sticky",
295
168
  "type": {
296
- "text": "string"
169
+ "text": "boolean"
297
170
  },
298
- "default": "''",
299
- "description": "Alt text for the image",
300
- "fieldName": "alt",
301
- "attribute": "alt"
302
- },
303
- {
304
- "name": "fallback",
305
- "type": {
306
- "text": "string"
307
- },
308
- "default": "''",
309
- "description": "Fallback text (typically user initials)",
310
- "fieldName": "fallback",
311
- "attribute": "fallback"
312
- },
313
- {
314
- "name": "size",
315
- "type": {
316
- "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'"
317
- },
318
- "default": "'md'",
319
- "description": "Size variant.\n- 'xs': Extra small (1.5rem)\n- 'sm': Small (2.25rem)\n- 'md': Medium (2.5rem) - default\n- 'lg': Large (3rem)\n- 'xl': Extra large (3.5rem)\n- 'xxl': Extra extra large (4rem)",
320
- "fieldName": "size",
321
- "attribute": "size"
322
- },
323
- {
324
- "name": "tooltip",
325
- "type": {
326
- "text": "string"
327
- },
328
- "default": "''",
329
- "description": "Tooltip text content. Set to empty string to remove the tooltip.",
330
- "fieldName": "tooltip",
331
- "attribute": "tooltip",
332
- "inheritedFrom": {
333
- "name": "TooltipMixin",
334
- "module": "src/util/TooltipMixin.ts"
335
- }
336
- },
337
- {
338
- "name": "tooltipPosition",
339
- "type": {
340
- "text": "'top' | 'bottom' | 'left' | 'right'"
341
- },
342
- "default": "'top'",
343
- "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
344
- "fieldName": "tooltipPosition",
345
- "inheritedFrom": {
346
- "name": "TooltipMixin",
347
- "module": "src/util/TooltipMixin.ts"
348
- }
349
- },
350
- {
351
- "name": "tooltipDelay",
352
- "type": {
353
- "text": "number"
354
- },
355
- "default": "300",
356
- "description": "Show delay in milliseconds (hover trigger only).",
357
- "fieldName": "tooltipDelay",
358
- "inheritedFrom": {
359
- "name": "TooltipMixin",
360
- "module": "src/util/TooltipMixin.ts"
361
- }
171
+ "default": "false",
172
+ "description": "Enables CSS sticky positioning. When combined with position='top',\nthe bar sticks to the top of the scroll container. With position='bottom'\n(default), it sticks to the bottom.",
173
+ "fieldName": "sticky",
174
+ "attribute": "sticky"
362
175
  },
363
176
  {
364
- "name": "tooltipOffset",
177
+ "name": "item-alignment",
365
178
  "type": {
366
- "text": "TooltipOffset | null"
179
+ "text": "Alignment"
367
180
  },
368
- "default": "null",
369
- "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
370
- "fieldName": "tooltipOffset",
371
- "inheritedFrom": {
372
- "name": "TooltipMixin",
373
- "module": "src/util/TooltipMixin.ts"
374
- }
181
+ "default": "'default'",
182
+ "description": "Content alignment: 'default' (two-zone), 'start', 'center', 'end'.\nNon-default alignments disable two-zone layout.",
183
+ "fieldName": "alignment",
184
+ "attribute": "item-alignment"
375
185
  },
376
186
  {
377
- "name": "tooltipNoArrow",
187
+ "name": "shadow",
378
188
  "type": {
379
189
  "text": "boolean"
380
190
  },
381
191
  "default": "false",
382
- "description": "Hide the arrow pseudo-element.",
383
- "fieldName": "tooltipNoArrow",
384
- "inheritedFrom": {
385
- "name": "TooltipMixin",
386
- "module": "src/util/TooltipMixin.ts"
387
- }
192
+ "description": "Adds a box-shadow to the bar.",
193
+ "fieldName": "shadow",
194
+ "attribute": "shadow"
388
195
  },
389
196
  {
390
- "name": "tooltipTrigger",
197
+ "name": "label",
391
198
  "type": {
392
199
  "text": "string"
393
200
  },
394
- "default": "'hover focus'",
395
- "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
396
- "fieldName": "tooltipTrigger",
397
- "inheritedFrom": {
398
- "name": "TooltipMixin",
399
- "module": "src/util/TooltipMixin.ts"
400
- }
401
- },
402
- {
403
- "name": "tooltip-position",
404
- "type": {
405
- "text": "'top' | 'bottom' | 'left' | 'right'"
406
- },
407
- "default": "'top'",
408
- "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
409
- "attribute": "tooltipPosition",
410
- "fieldName": "tooltipPosition",
411
- "inheritedFrom": {
412
- "name": "TooltipMixin",
413
- "module": "src/util/TooltipMixin.ts"
414
- }
415
- },
416
- {
417
- "name": "tooltip-delay",
418
- "type": {
419
- "text": "number"
420
- },
421
- "default": "300",
422
- "description": "Show delay in milliseconds (hover trigger only).",
423
- "attribute": "tooltipDelay",
424
- "fieldName": "tooltipDelay",
425
- "inheritedFrom": {
426
- "name": "TooltipMixin",
427
- "module": "src/util/TooltipMixin.ts"
428
- }
429
- },
430
- {
431
- "name": "tooltip-offset",
432
- "type": {
433
- "text": "TooltipOffset | null"
434
- },
435
- "default": "null",
436
- "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
437
- "attribute": "tooltipOffset",
438
- "fieldName": "tooltipOffset",
439
- "inheritedFrom": {
440
- "name": "TooltipMixin",
441
- "module": "src/util/TooltipMixin.ts"
442
- }
201
+ "default": "''",
202
+ "description": "Accessible label for the toolbar region.",
203
+ "fieldName": "label",
204
+ "attribute": "label"
443
205
  },
444
206
  {
445
- "name": "tooltip-no-arrow",
207
+ "name": "compact",
446
208
  "type": {
447
209
  "text": "boolean"
448
210
  },
449
211
  "default": "false",
450
- "description": "Hide the arrow pseudo-element.",
451
- "attribute": "tooltipNoArrow",
452
- "fieldName": "tooltipNoArrow",
453
- "inheritedFrom": {
454
- "name": "TooltipMixin",
455
- "module": "src/util/TooltipMixin.ts"
456
- }
457
- },
458
- {
459
- "name": "tooltip-trigger",
460
- "type": {
461
- "text": "string"
462
- },
463
- "default": "'hover focus'",
464
- "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
465
- "attribute": "tooltipTrigger",
466
- "fieldName": "tooltipTrigger",
467
- "inheritedFrom": {
468
- "name": "TooltipMixin",
469
- "module": "src/util/TooltipMixin.ts"
470
- }
212
+ "description": "Enables progressive label compacting. When space shrinks, items marked\n`compactable` (with icons) have their labels hidden one-by-one\nfrom least to most important before items overflow into \"More\".",
213
+ "fieldName": "compact",
214
+ "attribute": "compact"
471
215
  }
472
216
  ],
473
217
  "mixins": [
474
218
  {
475
- "name": "TooltipMixin",
476
- "module": "/src/util/TooltipMixin.js"
219
+ "name": "RovingTabindexMixin",
220
+ "module": "/src/util/RovingTabindexMixin.js"
477
221
  },
478
222
  {
479
223
  "name": "EventEmitterMixin",
@@ -488,7 +232,7 @@
488
232
  "name": "LitElement",
489
233
  "package": "lit"
490
234
  },
491
- "tagName": "btu-avatar",
235
+ "tagName": "btu-action-bar",
492
236
  "customElement": true
493
237
  }
494
238
  ],
@@ -497,265 +241,327 @@
497
241
  "kind": "js",
498
242
  "name": "default",
499
243
  "declaration": {
500
- "name": "Avatar",
501
- "module": "src/components/avatar/Avatar.ts"
244
+ "name": "ActionBar",
245
+ "module": "src/components/action-bar/ActionBar.ts"
502
246
  }
503
247
  },
504
248
  {
505
249
  "kind": "custom-element-definition",
506
- "name": "btu-avatar",
250
+ "name": "btu-action-bar",
507
251
  "declaration": {
508
- "name": "Avatar",
509
- "module": "src/components/avatar/Avatar.ts"
252
+ "name": "ActionBar",
253
+ "module": "src/components/action-bar/ActionBar.ts"
510
254
  }
511
255
  }
512
256
  ]
513
257
  },
514
258
  {
515
259
  "kind": "javascript-module",
516
- "path": "src/components/avatar/AvatarGroup.ts",
260
+ "path": "src/components/action-bar/ActionItem.ts",
517
261
  "declarations": [
518
262
  {
519
263
  "kind": "class",
520
- "description": "A container component for grouping multiple avatars with consistent styling.\n\nAvatarGroup wraps multiple avatar elements and provides:\n- Overflow handling (shows \"+N\" for excess avatars)\n- Consistent spacing and ring borders\n- Size inheritance for all child avatars",
521
- "name": "AvatarGroup",
264
+ "description": "An action item button for use within `btu-action-bar`.\n\nRenders a styled button using existing `btu-button-*` classes. Supports\nprimary, secondary, tertiary, and destructive variants. When `iconOnly`\nis set, the label is hidden and a tooltip is shown instead.\n\n**Button styling:** Set `--button-*` CSS custom properties on `<btu-action-item>`\nor a parent element to customize via CSS inheritance. See\n`tailwind-plugin-button.ts` for available props.",
265
+ "name": "ActionItem",
266
+ "cssProperties": [
267
+ {
268
+ "description": "Override button background color",
269
+ "name": "--button-color"
270
+ },
271
+ {
272
+ "description": "Override button text color",
273
+ "name": "--button-text-color"
274
+ },
275
+ {
276
+ "description": "Override button border radius",
277
+ "name": "--button-border-radius"
278
+ }
279
+ ],
522
280
  "members": [
523
281
  {
524
282
  "kind": "field",
525
- "name": "max",
283
+ "name": "label",
526
284
  "type": {
527
- "text": "number | undefined"
285
+ "text": "string"
528
286
  },
529
- "description": "Maximum number of visible avatars. Remaining avatars shown as \"+N\"",
530
- "attribute": "max"
287
+ "default": "''",
288
+ "description": "Button label text.",
289
+ "attribute": "label"
531
290
  },
532
291
  {
533
292
  "kind": "field",
534
- "name": "size",
293
+ "name": "variant",
535
294
  "type": {
536
- "text": "'xs' | 'sm' | 'md'"
295
+ "text": "ActionItemVariant"
537
296
  },
538
- "default": "'md'",
539
- "description": "Size variant for all child avatars (unless individually overridden)",
540
- "attribute": "size"
297
+ "default": "'secondary'",
298
+ "description": "Visual variant: 'primary', 'secondary', 'tertiary', 'destructive'.",
299
+ "attribute": "variant"
541
300
  },
542
301
  {
543
- "kind": "method",
544
- "name": "processAvatars",
545
- "return": {
546
- "type": {
547
- "text": "void"
548
- }
302
+ "kind": "field",
303
+ "name": "symbol",
304
+ "type": {
305
+ "text": "string"
549
306
  },
550
- "description": "Process all avatar children: apply size, handle overflow\nCall this method when avatars are dynamically added or removed"
307
+ "default": "''",
308
+ "description": "Lucide icon symbol for the leading icon.",
309
+ "attribute": "symbol"
551
310
  },
552
311
  {
553
- "kind": "method",
554
- "name": "emit",
555
- "parameters": [
556
- {
557
- "name": "type",
558
- "type": {
559
- "text": "K"
560
- },
561
- "description": "Event name from CustomEventMap"
562
- },
563
- {
564
- "name": "detail",
565
- "optional": true,
566
- "type": {
567
- "text": "UnpackCustomEvent<CustomEventMap[K]>"
568
- },
569
- "description": "Optional event detail payload"
570
- }
571
- ],
572
- "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)",
573
- "return": {
574
- "type": {
575
- "text": "boolean"
576
- }
312
+ "kind": "field",
313
+ "name": "iconOnly",
314
+ "type": {
315
+ "text": "boolean"
577
316
  },
578
- "inheritedFrom": {
579
- "name": "EventEmitterMixin",
580
- "module": "src/util/EventEmitterMixin.ts"
581
- }
582
- }
583
- ],
584
- "events": [
317
+ "default": "false",
318
+ "description": "Show icon only, hiding the label. Tooltip activates automatically with the label text.",
319
+ "attribute": "icon-only"
320
+ },
585
321
  {
322
+ "kind": "field",
323
+ "name": "disabled",
586
324
  "type": {
587
- "text": "CustomEvent"
325
+ "text": "boolean"
588
326
  },
589
- "description": "Fired after first render and initialization",
590
- "name": "btu-avatar-group-ready"
327
+ "default": "false",
328
+ "description": "Disables the action item. The button remains focusable for accessibility\nbut click events are suppressed.",
329
+ "attribute": "disabled",
330
+ "reflects": true
591
331
  },
592
332
  {
333
+ "kind": "field",
334
+ "name": "loading",
593
335
  "type": {
594
- "text": "CustomEvent<{hidden: number}>"
336
+ "text": "boolean"
595
337
  },
596
- "description": "Fired when avatars are hidden due to max limit",
597
- "name": "btu-avatar-group-overflow"
598
- }
599
- ],
600
- "attributes": [
338
+ "default": "false",
339
+ "description": "Shows a loading spinner and prevents interaction.",
340
+ "attribute": "loading",
341
+ "reflects": true
342
+ },
601
343
  {
602
- "name": "max",
344
+ "kind": "field",
345
+ "name": "zone",
603
346
  "type": {
604
- "text": "number | undefined"
347
+ "text": "'start' | 'end' | ''"
605
348
  },
606
- "description": "Maximum number of visible avatars. Remaining avatars shown as \"+N\"",
607
- "fieldName": "max",
608
- "attribute": "max"
349
+ "default": "''",
350
+ "description": "Zone placement: 'start' or 'end'. Used by ActionBar for two-zone layout.\nIf unset, auto-detected from variant (destructive → start, others → end).",
351
+ "attribute": "zone",
352
+ "reflects": true
609
353
  },
610
354
  {
611
- "name": "size",
355
+ "kind": "field",
356
+ "name": "compactable",
612
357
  "type": {
613
- "text": "'xs' | 'sm' | 'md'"
358
+ "text": "boolean"
614
359
  },
615
- "default": "'md'",
616
- "description": "Size variant for all child avatars (unless individually overridden)",
617
- "fieldName": "size",
618
- "attribute": "size"
619
- }
620
- ],
621
- "mixins": [
360
+ "default": "false",
361
+ "description": "Opt-in for progressive label compacting. When the parent bar has `compact`\nenabled and space shrinks, compactable items with icons have their labels\nhidden one-by-one (least important first) before overflowing.\nItems without an icon ignore this attribute and go directly to overflow.",
362
+ "attribute": "compactable",
363
+ "reflects": true
364
+ },
622
365
  {
623
- "name": "EventEmitterMixin",
624
- "module": "/src/util/EventEmitterMixin.js"
366
+ "kind": "method",
367
+ "name": "_relayTooltipAttrs",
368
+ "privacy": "private",
369
+ "return": {
370
+ "type": {
371
+ "text": "void"
372
+ }
373
+ }
625
374
  },
626
375
  {
627
- "name": "ReadyMixin",
628
- "module": "/src/util/ReadyMixin.js"
629
- }
630
- ],
631
- "superclass": {
632
- "name": "LitElement",
633
- "package": "lit"
634
- },
635
- "tagName": "btu-avatar-group",
636
- "customElement": true
637
- }
638
- ],
639
- "exports": [
640
- {
641
- "kind": "js",
642
- "name": "default",
643
- "declaration": {
644
- "name": "AvatarGroup",
645
- "module": "src/components/avatar/AvatarGroup.ts"
646
- }
647
- },
648
- {
649
- "kind": "custom-element-definition",
650
- "name": "btu-avatar-group",
651
- "declaration": {
652
- "name": "AvatarGroup",
653
- "module": "src/components/avatar/AvatarGroup.ts"
654
- }
655
- }
656
- ]
657
- },
658
- {
659
- "kind": "javascript-module",
660
- "path": "src/components/action-bar/ActionBar.ts",
661
- "declarations": [
662
- {
663
- "kind": "class",
664
- "description": "A persistent container for primary, secondary, tertiary, and destructive actions\nwithin an interface, typically anchored to the bottom of a view.\n\nUses a two-zone layout: destructive actions on the left (start zone),\nmain actions on the right (end zone). Both zones maintain their position\neven when the other zone is empty (BSP-18087).\n\n**Positioning:** Uses `margin-top: auto` to push to bottom of flex/grid parents.\nIn block layout parents, the bar sits after content (a console warning is emitted).\n\n**Overflow:** When items don't fit, the least important overflow into a \"More\" dropdown.\nItems are auto-sorted by variant priority (tertiary → secondary → primary).\nWith `compact`, compactable items progressively hide labels one-by-one before overflowing.",
665
- "name": "ActionBar",
666
- "cssProperties": [
376
+ "kind": "method",
377
+ "name": "_handleClick",
378
+ "privacy": "private",
379
+ "return": {
380
+ "type": {
381
+ "text": "void"
382
+ }
383
+ }
384
+ },
667
385
  {
668
- "description": "Gap between items (default: 0.75rem)",
669
- "name": "--action-bar-gap"
386
+ "kind": "method",
387
+ "name": "_getSpinnerColor",
388
+ "privacy": "private",
389
+ "return": {
390
+ "type": {
391
+ "text": "string"
392
+ }
393
+ }
670
394
  },
671
395
  {
672
- "description": "Bar padding (default: 1.5rem)",
673
- "name": "--action-bar-padding"
396
+ "kind": "method",
397
+ "name": "_buildButtonClasses",
398
+ "privacy": "private",
399
+ "return": {
400
+ "type": {
401
+ "text": "string"
402
+ }
403
+ }
674
404
  },
675
405
  {
676
- "description": "Background color (default: white)",
677
- "name": "--action-bar-background"
406
+ "kind": "method",
407
+ "name": "_getButtonStyles",
408
+ "privacy": "private",
409
+ "return": {
410
+ "type": {
411
+ "text": "Record<string, string>"
412
+ }
413
+ }
678
414
  },
679
415
  {
680
- "description": "Border color (default: gray-200)",
681
- "name": "--action-bar-border-color"
416
+ "kind": "field",
417
+ "name": "tooltip",
418
+ "type": {
419
+ "text": "string"
420
+ },
421
+ "default": "''",
422
+ "description": "Tooltip text content. Set to empty string to remove the tooltip.",
423
+ "attribute": "tooltip",
424
+ "inheritedFrom": {
425
+ "name": "TooltipMixin",
426
+ "module": "src/util/TooltipMixin.ts"
427
+ }
682
428
  },
683
429
  {
684
- "description": "Z-index (default: 100)",
685
- "name": "--action-bar-z-index"
686
- }
687
- ],
688
- "slots": [
430
+ "kind": "field",
431
+ "name": "tooltipPosition",
432
+ "type": {
433
+ "text": "'top' | 'bottom' | 'left' | 'right'"
434
+ },
435
+ "default": "'top'",
436
+ "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
437
+ "attribute": "tooltip-position",
438
+ "inheritedFrom": {
439
+ "name": "TooltipMixin",
440
+ "module": "src/util/TooltipMixin.ts"
441
+ }
442
+ },
689
443
  {
690
- "description": "One or more `btu-action-item` elements",
691
- "name": ""
692
- }
693
- ],
694
- "members": [
444
+ "kind": "field",
445
+ "name": "tooltipDelay",
446
+ "type": {
447
+ "text": "number"
448
+ },
449
+ "default": "300",
450
+ "description": "Show delay in milliseconds (hover trigger only).",
451
+ "attribute": "tooltip-delay",
452
+ "inheritedFrom": {
453
+ "name": "TooltipMixin",
454
+ "module": "src/util/TooltipMixin.ts"
455
+ }
456
+ },
695
457
  {
696
458
  "kind": "field",
697
- "name": "position",
459
+ "name": "tooltipOffset",
698
460
  "type": {
699
- "text": "Position"
461
+ "text": "TooltipOffset | null"
700
462
  },
701
- "default": "'bottom'",
702
- "description": "Bar position: 'top' or 'bottom' (default).",
703
- "attribute": "position",
704
- "reflects": true
463
+ "default": "null",
464
+ "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
465
+ "attribute": "tooltip-offset",
466
+ "inheritedFrom": {
467
+ "name": "TooltipMixin",
468
+ "module": "src/util/TooltipMixin.ts"
469
+ }
705
470
  },
706
471
  {
707
472
  "kind": "field",
708
- "name": "sticky",
473
+ "name": "tooltipNoArrow",
709
474
  "type": {
710
475
  "text": "boolean"
711
476
  },
712
477
  "default": "false",
713
- "description": "Enables CSS sticky positioning. When combined with position='top',\nthe bar sticks to the top of the scroll container. With position='bottom'\n(default), it sticks to the bottom.",
714
- "attribute": "sticky",
715
- "reflects": true
478
+ "description": "Hide the arrow pseudo-element.",
479
+ "attribute": "tooltip-no-arrow",
480
+ "inheritedFrom": {
481
+ "name": "TooltipMixin",
482
+ "module": "src/util/TooltipMixin.ts"
483
+ }
716
484
  },
717
485
  {
718
486
  "kind": "field",
719
- "name": "alignment",
487
+ "name": "tooltipTrigger",
720
488
  "type": {
721
- "text": "Alignment"
489
+ "text": "string"
722
490
  },
723
- "default": "'default'",
724
- "description": "Content alignment: 'default' (two-zone), 'start', 'center', 'end'.\nNon-default alignments disable two-zone layout.",
725
- "attribute": "item-alignment",
726
- "reflects": true
491
+ "default": "'hover focus'",
492
+ "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
493
+ "attribute": "tooltip-trigger",
494
+ "inheritedFrom": {
495
+ "name": "TooltipMixin",
496
+ "module": "src/util/TooltipMixin.ts"
497
+ }
498
+ },
499
+ {
500
+ "kind": "field",
501
+ "name": "_onMouseLeave",
502
+ "privacy": "private",
503
+ "inheritedFrom": {
504
+ "name": "TooltipMixin",
505
+ "module": "src/util/TooltipMixin.ts"
506
+ }
507
+ },
508
+ {
509
+ "kind": "field",
510
+ "name": "_onFocusIn",
511
+ "privacy": "private",
512
+ "inheritedFrom": {
513
+ "name": "TooltipMixin",
514
+ "module": "src/util/TooltipMixin.ts"
515
+ }
516
+ },
517
+ {
518
+ "kind": "field",
519
+ "name": "_onFocusOut",
520
+ "privacy": "private",
521
+ "inheritedFrom": {
522
+ "name": "TooltipMixin",
523
+ "module": "src/util/TooltipMixin.ts"
524
+ }
525
+ },
526
+ {
527
+ "kind": "field",
528
+ "name": "_onClick",
529
+ "privacy": "private",
530
+ "inheritedFrom": {
531
+ "name": "TooltipMixin",
532
+ "module": "src/util/TooltipMixin.ts"
533
+ }
727
534
  },
728
535
  {
729
536
  "kind": "field",
730
- "name": "shadow",
731
- "type": {
732
- "text": "boolean"
733
- },
734
- "default": "false",
735
- "description": "Adds a box-shadow to the bar.",
736
- "attribute": "shadow",
737
- "reflects": true
537
+ "name": "_onNativeToggle",
538
+ "privacy": "private",
539
+ "inheritedFrom": {
540
+ "name": "TooltipMixin",
541
+ "module": "src/util/TooltipMixin.ts"
542
+ }
738
543
  },
739
544
  {
740
545
  "kind": "field",
741
- "name": "label",
742
- "type": {
743
- "text": "string"
744
- },
745
- "default": "''",
746
- "description": "Accessible label for the toolbar region.",
747
- "attribute": "label"
546
+ "name": "_onKeyDown",
547
+ "privacy": "private",
548
+ "inheritedFrom": {
549
+ "name": "TooltipMixin",
550
+ "module": "src/util/TooltipMixin.ts"
551
+ }
748
552
  },
749
553
  {
750
554
  "kind": "field",
751
- "name": "compact",
555
+ "name": "_onDocumentClick",
752
556
  "type": {
753
- "text": "boolean"
557
+ "text": "((e: MouseEvent) => void) | null"
754
558
  },
755
- "default": "false",
756
- "description": "Enables progressive label compacting. When space shrinks, items marked\n`compactable` (with icons) have their labels hidden one-by-one\nfrom least to most important before items overflow into \"More\".",
757
- "attribute": "compact",
758
- "reflects": true
559
+ "privacy": "private",
560
+ "default": "null",
561
+ "inheritedFrom": {
562
+ "name": "TooltipMixin",
563
+ "module": "src/util/TooltipMixin.ts"
564
+ }
759
565
  },
760
566
  {
761
567
  "kind": "method",
@@ -790,87 +596,249 @@
790
596
  }
791
597
  ],
792
598
  "events": [
793
- {
794
- "type": {
795
- "text": "CustomEvent"
796
- },
797
- "description": "Fired after first render and initialization",
798
- "name": "btu-action-bar-ready"
799
- },
800
599
  {
801
600
  "type": {
802
601
  "text": "CustomEvent<{label: string}>"
803
602
  },
804
- "description": "Fired when an action item is clicked (bubbles from btu-action-item)",
603
+ "description": "Fired when the action item is clicked (not fired when disabled or loading)",
805
604
  "name": "btu-action-item-click"
806
605
  }
807
606
  ],
808
607
  "attributes": [
809
608
  {
810
- "name": "position",
609
+ "name": "label",
811
610
  "type": {
812
- "text": "Position"
611
+ "text": "string"
813
612
  },
814
- "default": "'bottom'",
815
- "description": "Bar position: 'top' or 'bottom' (default).",
816
- "fieldName": "position",
817
- "attribute": "position"
613
+ "default": "''",
614
+ "description": "Button label text.",
615
+ "fieldName": "label",
616
+ "attribute": "label"
818
617
  },
819
618
  {
820
- "name": "sticky",
619
+ "name": "variant",
620
+ "type": {
621
+ "text": "ActionItemVariant"
622
+ },
623
+ "default": "'secondary'",
624
+ "description": "Visual variant: 'primary', 'secondary', 'tertiary', 'destructive'.",
625
+ "fieldName": "variant",
626
+ "attribute": "variant"
627
+ },
628
+ {
629
+ "name": "symbol",
630
+ "type": {
631
+ "text": "string"
632
+ },
633
+ "default": "''",
634
+ "description": "Lucide icon symbol for the leading icon.",
635
+ "fieldName": "symbol",
636
+ "attribute": "symbol"
637
+ },
638
+ {
639
+ "name": "icon-only",
821
640
  "type": {
822
641
  "text": "boolean"
823
642
  },
824
643
  "default": "false",
825
- "description": "Enables CSS sticky positioning. When combined with position='top',\nthe bar sticks to the top of the scroll container. With position='bottom'\n(default), it sticks to the bottom.",
826
- "fieldName": "sticky",
827
- "attribute": "sticky"
644
+ "description": "Show icon only, hiding the label. Tooltip activates automatically with the label text.",
645
+ "fieldName": "iconOnly",
646
+ "attribute": "icon-only"
828
647
  },
829
648
  {
830
- "name": "item-alignment",
649
+ "name": "disabled",
831
650
  "type": {
832
- "text": "Alignment"
651
+ "text": "boolean"
833
652
  },
834
- "default": "'default'",
835
- "description": "Content alignment: 'default' (two-zone), 'start', 'center', 'end'.\nNon-default alignments disable two-zone layout.",
836
- "fieldName": "alignment",
837
- "attribute": "item-alignment"
653
+ "default": "false",
654
+ "description": "Disables the action item. The button remains focusable for accessibility\nbut click events are suppressed.",
655
+ "fieldName": "disabled",
656
+ "attribute": "disabled"
838
657
  },
839
658
  {
840
- "name": "shadow",
659
+ "name": "loading",
841
660
  "type": {
842
661
  "text": "boolean"
843
662
  },
844
663
  "default": "false",
845
- "description": "Adds a box-shadow to the bar.",
846
- "fieldName": "shadow",
847
- "attribute": "shadow"
664
+ "description": "Shows a loading spinner and prevents interaction.",
665
+ "fieldName": "loading",
666
+ "attribute": "loading"
667
+ },
668
+ {
669
+ "name": "zone",
670
+ "type": {
671
+ "text": "'start' | 'end' | ''"
672
+ },
673
+ "default": "''",
674
+ "description": "Zone placement: 'start' or 'end'. Used by ActionBar for two-zone layout.\nIf unset, auto-detected from variant (destructive → start, others → end).",
675
+ "fieldName": "zone",
676
+ "attribute": "zone"
677
+ },
678
+ {
679
+ "name": "compactable",
680
+ "type": {
681
+ "text": "boolean"
682
+ },
683
+ "default": "false",
684
+ "description": "Opt-in for progressive label compacting. When the parent bar has `compact`\nenabled and space shrinks, compactable items with icons have their labels\nhidden one-by-one (least important first) before overflowing.\nItems without an icon ignore this attribute and go directly to overflow.",
685
+ "fieldName": "compactable",
686
+ "attribute": "compactable"
687
+ },
688
+ {
689
+ "name": "tooltip",
690
+ "type": {
691
+ "text": "string"
692
+ },
693
+ "default": "''",
694
+ "description": "Tooltip text content. Set to empty string to remove the tooltip.",
695
+ "fieldName": "tooltip",
696
+ "attribute": "tooltip",
697
+ "inheritedFrom": {
698
+ "name": "TooltipMixin",
699
+ "module": "src/util/TooltipMixin.ts"
700
+ }
701
+ },
702
+ {
703
+ "name": "tooltipPosition",
704
+ "type": {
705
+ "text": "'top' | 'bottom' | 'left' | 'right'"
706
+ },
707
+ "default": "'top'",
708
+ "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
709
+ "fieldName": "tooltipPosition",
710
+ "inheritedFrom": {
711
+ "name": "TooltipMixin",
712
+ "module": "src/util/TooltipMixin.ts"
713
+ }
714
+ },
715
+ {
716
+ "name": "tooltipDelay",
717
+ "type": {
718
+ "text": "number"
719
+ },
720
+ "default": "300",
721
+ "description": "Show delay in milliseconds (hover trigger only).",
722
+ "fieldName": "tooltipDelay",
723
+ "inheritedFrom": {
724
+ "name": "TooltipMixin",
725
+ "module": "src/util/TooltipMixin.ts"
726
+ }
727
+ },
728
+ {
729
+ "name": "tooltipOffset",
730
+ "type": {
731
+ "text": "TooltipOffset | null"
732
+ },
733
+ "default": "null",
734
+ "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
735
+ "fieldName": "tooltipOffset",
736
+ "inheritedFrom": {
737
+ "name": "TooltipMixin",
738
+ "module": "src/util/TooltipMixin.ts"
739
+ }
740
+ },
741
+ {
742
+ "name": "tooltipNoArrow",
743
+ "type": {
744
+ "text": "boolean"
745
+ },
746
+ "default": "false",
747
+ "description": "Hide the arrow pseudo-element.",
748
+ "fieldName": "tooltipNoArrow",
749
+ "inheritedFrom": {
750
+ "name": "TooltipMixin",
751
+ "module": "src/util/TooltipMixin.ts"
752
+ }
753
+ },
754
+ {
755
+ "name": "tooltipTrigger",
756
+ "type": {
757
+ "text": "string"
758
+ },
759
+ "default": "'hover focus'",
760
+ "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
761
+ "fieldName": "tooltipTrigger",
762
+ "inheritedFrom": {
763
+ "name": "TooltipMixin",
764
+ "module": "src/util/TooltipMixin.ts"
765
+ }
766
+ },
767
+ {
768
+ "name": "tooltip-position",
769
+ "type": {
770
+ "text": "'top' | 'bottom' | 'left' | 'right'"
771
+ },
772
+ "default": "'top'",
773
+ "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
774
+ "attribute": "tooltipPosition",
775
+ "fieldName": "tooltipPosition",
776
+ "inheritedFrom": {
777
+ "name": "TooltipMixin",
778
+ "module": "src/util/TooltipMixin.ts"
779
+ }
780
+ },
781
+ {
782
+ "name": "tooltip-delay",
783
+ "type": {
784
+ "text": "number"
785
+ },
786
+ "default": "300",
787
+ "description": "Show delay in milliseconds (hover trigger only).",
788
+ "attribute": "tooltipDelay",
789
+ "fieldName": "tooltipDelay",
790
+ "inheritedFrom": {
791
+ "name": "TooltipMixin",
792
+ "module": "src/util/TooltipMixin.ts"
793
+ }
794
+ },
795
+ {
796
+ "name": "tooltip-offset",
797
+ "type": {
798
+ "text": "TooltipOffset | null"
799
+ },
800
+ "default": "null",
801
+ "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
802
+ "attribute": "tooltipOffset",
803
+ "fieldName": "tooltipOffset",
804
+ "inheritedFrom": {
805
+ "name": "TooltipMixin",
806
+ "module": "src/util/TooltipMixin.ts"
807
+ }
848
808
  },
849
809
  {
850
- "name": "label",
810
+ "name": "tooltip-no-arrow",
851
811
  "type": {
852
- "text": "string"
812
+ "text": "boolean"
853
813
  },
854
- "default": "''",
855
- "description": "Accessible label for the toolbar region.",
856
- "fieldName": "label",
857
- "attribute": "label"
814
+ "default": "false",
815
+ "description": "Hide the arrow pseudo-element.",
816
+ "attribute": "tooltipNoArrow",
817
+ "fieldName": "tooltipNoArrow",
818
+ "inheritedFrom": {
819
+ "name": "TooltipMixin",
820
+ "module": "src/util/TooltipMixin.ts"
821
+ }
858
822
  },
859
823
  {
860
- "name": "compact",
824
+ "name": "tooltip-trigger",
861
825
  "type": {
862
- "text": "boolean"
826
+ "text": "string"
863
827
  },
864
- "default": "false",
865
- "description": "Enables progressive label compacting. When space shrinks, items marked\n`compactable` (with icons) have their labels hidden one-by-one\nfrom least to most important before items overflow into \"More\".",
866
- "fieldName": "compact",
867
- "attribute": "compact"
828
+ "default": "'hover focus'",
829
+ "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
830
+ "attribute": "tooltipTrigger",
831
+ "fieldName": "tooltipTrigger",
832
+ "inheritedFrom": {
833
+ "name": "TooltipMixin",
834
+ "module": "src/util/TooltipMixin.ts"
835
+ }
868
836
  }
869
837
  ],
870
838
  "mixins": [
871
839
  {
872
- "name": "RovingTabindexMixin",
873
- "module": "/src/util/RovingTabindexMixin.js"
840
+ "name": "TooltipMixin",
841
+ "module": "/src/util/TooltipMixin.js"
874
842
  },
875
843
  {
876
844
  "name": "EventEmitterMixin",
@@ -885,7 +853,7 @@
885
853
  "name": "LitElement",
886
854
  "package": "lit"
887
855
  },
888
- "tagName": "btu-action-bar",
856
+ "tagName": "btu-action-item",
889
857
  "customElement": true
890
858
  }
891
859
  ],
@@ -894,176 +862,90 @@
894
862
  "kind": "js",
895
863
  "name": "default",
896
864
  "declaration": {
897
- "name": "ActionBar",
898
- "module": "src/components/action-bar/ActionBar.ts"
865
+ "name": "ActionItem",
866
+ "module": "src/components/action-bar/ActionItem.ts"
899
867
  }
900
868
  },
901
869
  {
902
870
  "kind": "custom-element-definition",
903
- "name": "btu-action-bar",
871
+ "name": "btu-action-item",
904
872
  "declaration": {
905
- "name": "ActionBar",
906
- "module": "src/components/action-bar/ActionBar.ts"
873
+ "name": "ActionItem",
874
+ "module": "src/components/action-bar/ActionItem.ts"
907
875
  }
908
876
  }
909
877
  ]
910
878
  },
911
879
  {
912
880
  "kind": "javascript-module",
913
- "path": "src/components/action-bar/ActionItem.ts",
881
+ "path": "src/components/avatar/Avatar.ts",
914
882
  "declarations": [
915
883
  {
916
884
  "kind": "class",
917
- "description": "An action item button for use within `btu-action-bar`.\n\nRenders a styled button using existing `btu-button-*` classes. Supports\nprimary, secondary, tertiary, and destructive variants. When `iconOnly`\nis set, the label is hidden and a tooltip is shown instead.\n\n**Button styling:** Set `--button-*` CSS custom properties on `<btu-action-item>`\nor a parent element to customize via CSS inheritance. See\n`tailwind-plugin-button.ts` for available props.",
918
- "name": "ActionItem",
885
+ "description": "An avatar component for displaying user profile images with fallback support.\n\nAvatars display user profile images with automatic fallback to initials when\nthe image fails to load or is not provided.",
886
+ "name": "Avatar",
919
887
  "cssProperties": [
920
888
  {
921
- "description": "Override button background color",
922
- "name": "--button-color"
889
+ "description": "Custom size (overrides size prop)",
890
+ "name": "--avatar-size"
923
891
  },
924
892
  {
925
- "description": "Override button text color",
926
- "name": "--button-text-color"
893
+ "description": "Fallback background color (default: purple-600)",
894
+ "name": "--avatar-bg-color"
927
895
  },
928
896
  {
929
- "description": "Override button border radius",
930
- "name": "--button-border-radius"
897
+ "description": "How rounded is the avatar (default: circle)",
898
+ "name": "--avatar-corner-rounding"
899
+ },
900
+ {
901
+ "description": "Optional ring border color",
902
+ "name": "--avatar-ring-color"
903
+ },
904
+ {
905
+ "description": "Ring border width (default: 2px)",
906
+ "name": "--avatar-ring-width"
931
907
  }
932
908
  ],
933
909
  "members": [
934
910
  {
935
911
  "kind": "field",
936
- "name": "label",
912
+ "name": "src",
937
913
  "type": {
938
914
  "text": "string"
939
915
  },
940
916
  "default": "''",
941
- "description": "Button label text.",
942
- "attribute": "label"
943
- },
944
- {
945
- "kind": "field",
946
- "name": "variant",
947
- "type": {
948
- "text": "ActionItemVariant"
949
- },
950
- "default": "'secondary'",
951
- "description": "Visual variant: 'primary', 'secondary', 'tertiary', 'destructive'.",
952
- "attribute": "variant"
917
+ "description": "Image source URL",
918
+ "attribute": "src"
953
919
  },
954
920
  {
955
921
  "kind": "field",
956
- "name": "symbol",
922
+ "name": "alt",
957
923
  "type": {
958
924
  "text": "string"
959
925
  },
960
926
  "default": "''",
961
- "description": "Lucide icon symbol for the leading icon.",
962
- "attribute": "symbol"
963
- },
964
- {
965
- "kind": "field",
966
- "name": "iconOnly",
967
- "type": {
968
- "text": "boolean"
969
- },
970
- "default": "false",
971
- "description": "Show icon only, hiding the label. Tooltip activates automatically with the label text.",
972
- "attribute": "icon-only"
973
- },
974
- {
975
- "kind": "field",
976
- "name": "disabled",
977
- "type": {
978
- "text": "boolean"
979
- },
980
- "default": "false",
981
- "description": "Disables the action item. The button remains focusable for accessibility\nbut click events are suppressed.",
982
- "attribute": "disabled",
983
- "reflects": true
984
- },
985
- {
986
- "kind": "field",
987
- "name": "loading",
988
- "type": {
989
- "text": "boolean"
990
- },
991
- "default": "false",
992
- "description": "Shows a loading spinner and prevents interaction.",
993
- "attribute": "loading",
994
- "reflects": true
927
+ "description": "Alt text for the image",
928
+ "attribute": "alt"
995
929
  },
996
930
  {
997
931
  "kind": "field",
998
- "name": "zone",
932
+ "name": "fallback",
999
933
  "type": {
1000
- "text": "'start' | 'end' | ''"
934
+ "text": "string"
1001
935
  },
1002
936
  "default": "''",
1003
- "description": "Zone placement: 'start' or 'end'. Used by ActionBar for two-zone layout.\nIf unset, auto-detected from variant (destructive start, others → end).",
1004
- "attribute": "zone",
1005
- "reflects": true
937
+ "description": "Fallback text (typically user initials)",
938
+ "attribute": "fallback"
1006
939
  },
1007
940
  {
1008
941
  "kind": "field",
1009
- "name": "compactable",
942
+ "name": "size",
1010
943
  "type": {
1011
- "text": "boolean"
944
+ "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'"
1012
945
  },
1013
- "default": "false",
1014
- "description": "Opt-in for progressive label compacting. When the parent bar has `compact`\nenabled and space shrinks, compactable items with icons have their labels\nhidden one-by-one (least important first) before overflowing.\nItems without an icon ignore this attribute and go directly to overflow.",
1015
- "attribute": "compactable",
1016
- "reflects": true
1017
- },
1018
- {
1019
- "kind": "method",
1020
- "name": "_relayTooltipAttrs",
1021
- "privacy": "private",
1022
- "return": {
1023
- "type": {
1024
- "text": "void"
1025
- }
1026
- }
1027
- },
1028
- {
1029
- "kind": "method",
1030
- "name": "_handleClick",
1031
- "privacy": "private",
1032
- "return": {
1033
- "type": {
1034
- "text": "void"
1035
- }
1036
- }
1037
- },
1038
- {
1039
- "kind": "method",
1040
- "name": "_getSpinnerColor",
1041
- "privacy": "private",
1042
- "return": {
1043
- "type": {
1044
- "text": "string"
1045
- }
1046
- }
1047
- },
1048
- {
1049
- "kind": "method",
1050
- "name": "_buildButtonClasses",
1051
- "privacy": "private",
1052
- "return": {
1053
- "type": {
1054
- "text": "string"
1055
- }
1056
- }
1057
- },
1058
- {
1059
- "kind": "method",
1060
- "name": "_getButtonStyles",
1061
- "privacy": "private",
1062
- "return": {
1063
- "type": {
1064
- "text": "Record<string, string>"
1065
- }
1066
- }
946
+ "default": "'md'",
947
+ "description": "Size variant.\n- 'xs': Extra small (1.5rem)\n- 'sm': Small (2.25rem)\n- 'md': Medium (2.5rem) - default\n- 'lg': Large (3rem)\n- 'xl': Extra large (3.5rem)\n- 'xxl': Extra extra large (4rem)",
948
+ "attribute": "size"
1067
949
  },
1068
950
  {
1069
951
  "kind": "field",
@@ -1251,92 +1133,66 @@
1251
1133
  "events": [
1252
1134
  {
1253
1135
  "type": {
1254
- "text": "CustomEvent<{label: string}>"
1255
- },
1256
- "description": "Fired when the action item is clicked (not fired when disabled or loading)",
1257
- "name": "btu-action-item-click"
1258
- }
1259
- ],
1260
- "attributes": [
1261
- {
1262
- "name": "label",
1263
- "type": {
1264
- "text": "string"
1265
- },
1266
- "default": "''",
1267
- "description": "Button label text.",
1268
- "fieldName": "label",
1269
- "attribute": "label"
1270
- },
1271
- {
1272
- "name": "variant",
1273
- "type": {
1274
- "text": "ActionItemVariant"
1136
+ "text": "CustomEvent"
1275
1137
  },
1276
- "default": "'secondary'",
1277
- "description": "Visual variant: 'primary', 'secondary', 'tertiary', 'destructive'.",
1278
- "fieldName": "variant",
1279
- "attribute": "variant"
1138
+ "description": "Fired after first render and initialization",
1139
+ "name": "btu-avatar-ready"
1280
1140
  },
1281
1141
  {
1282
- "name": "symbol",
1283
1142
  "type": {
1284
- "text": "string"
1143
+ "text": "CustomEvent<{src: string}>"
1285
1144
  },
1286
- "default": "''",
1287
- "description": "Lucide icon symbol for the leading icon.",
1288
- "fieldName": "symbol",
1289
- "attribute": "symbol"
1145
+ "description": "Fired when image successfully loads",
1146
+ "name": "btu-avatar-image-loaded"
1290
1147
  },
1291
1148
  {
1292
- "name": "icon-only",
1293
1149
  "type": {
1294
- "text": "boolean"
1150
+ "text": "CustomEvent<{src: string, error: Event}>"
1295
1151
  },
1296
- "default": "false",
1297
- "description": "Show icon only, hiding the label. Tooltip activates automatically with the label text.",
1298
- "fieldName": "iconOnly",
1299
- "attribute": "icon-only"
1300
- },
1152
+ "description": "Fired when image fails to load",
1153
+ "name": "btu-avatar-image-error"
1154
+ }
1155
+ ],
1156
+ "attributes": [
1301
1157
  {
1302
- "name": "disabled",
1158
+ "name": "src",
1303
1159
  "type": {
1304
- "text": "boolean"
1305
- },
1306
- "default": "false",
1307
- "description": "Disables the action item. The button remains focusable for accessibility\nbut click events are suppressed.",
1308
- "fieldName": "disabled",
1309
- "attribute": "disabled"
1160
+ "text": "string"
1161
+ },
1162
+ "default": "''",
1163
+ "description": "Image source URL",
1164
+ "fieldName": "src",
1165
+ "attribute": "src"
1310
1166
  },
1311
1167
  {
1312
- "name": "loading",
1168
+ "name": "alt",
1313
1169
  "type": {
1314
- "text": "boolean"
1170
+ "text": "string"
1315
1171
  },
1316
- "default": "false",
1317
- "description": "Shows a loading spinner and prevents interaction.",
1318
- "fieldName": "loading",
1319
- "attribute": "loading"
1172
+ "default": "''",
1173
+ "description": "Alt text for the image",
1174
+ "fieldName": "alt",
1175
+ "attribute": "alt"
1320
1176
  },
1321
1177
  {
1322
- "name": "zone",
1178
+ "name": "fallback",
1323
1179
  "type": {
1324
- "text": "'start' | 'end' | ''"
1180
+ "text": "string"
1325
1181
  },
1326
1182
  "default": "''",
1327
- "description": "Zone placement: 'start' or 'end'. Used by ActionBar for two-zone layout.\nIf unset, auto-detected from variant (destructive start, others → end).",
1328
- "fieldName": "zone",
1329
- "attribute": "zone"
1183
+ "description": "Fallback text (typically user initials)",
1184
+ "fieldName": "fallback",
1185
+ "attribute": "fallback"
1330
1186
  },
1331
1187
  {
1332
- "name": "compactable",
1188
+ "name": "size",
1333
1189
  "type": {
1334
- "text": "boolean"
1190
+ "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'"
1335
1191
  },
1336
- "default": "false",
1337
- "description": "Opt-in for progressive label compacting. When the parent bar has `compact`\nenabled and space shrinks, compactable items with icons have their labels\nhidden one-by-one (least important first) before overflowing.\nItems without an icon ignore this attribute and go directly to overflow.",
1338
- "fieldName": "compactable",
1339
- "attribute": "compactable"
1192
+ "default": "'md'",
1193
+ "description": "Size variant.\n- 'xs': Extra small (1.5rem)\n- 'sm': Small (2.25rem)\n- 'md': Medium (2.5rem) - default\n- 'lg': Large (3rem)\n- 'xl': Extra large (3.5rem)\n- 'xxl': Extra extra large (4rem)",
1194
+ "fieldName": "size",
1195
+ "attribute": "size"
1340
1196
  },
1341
1197
  {
1342
1198
  "name": "tooltip",
@@ -1506,7 +1362,7 @@
1506
1362
  "name": "LitElement",
1507
1363
  "package": "lit"
1508
1364
  },
1509
- "tagName": "btu-action-item",
1365
+ "tagName": "btu-avatar",
1510
1366
  "customElement": true
1511
1367
  }
1512
1368
  ],
@@ -1515,90 +1371,57 @@
1515
1371
  "kind": "js",
1516
1372
  "name": "default",
1517
1373
  "declaration": {
1518
- "name": "ActionItem",
1519
- "module": "src/components/action-bar/ActionItem.ts"
1374
+ "name": "Avatar",
1375
+ "module": "src/components/avatar/Avatar.ts"
1520
1376
  }
1521
1377
  },
1522
1378
  {
1523
1379
  "kind": "custom-element-definition",
1524
- "name": "btu-action-item",
1380
+ "name": "btu-avatar",
1525
1381
  "declaration": {
1526
- "name": "ActionItem",
1527
- "module": "src/components/action-bar/ActionItem.ts"
1382
+ "name": "Avatar",
1383
+ "module": "src/components/avatar/Avatar.ts"
1528
1384
  }
1529
1385
  }
1530
1386
  ]
1531
1387
  },
1532
1388
  {
1533
1389
  "kind": "javascript-module",
1534
- "path": "src/components/badge/Badge.ts",
1390
+ "path": "src/components/avatar/AvatarGroup.ts",
1535
1391
  "declarations": [
1536
1392
  {
1537
1393
  "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
- ],
1394
+ "description": "A container component for grouping multiple avatars with consistent styling.\n\nAvatarGroup wraps multiple avatar elements and provides:\n- Overflow handling (shows \"+N\" for excess avatars)\n- Consistent spacing and ring borders\n- Size inheritance for all child avatars",
1395
+ "name": "AvatarGroup",
1572
1396
  "members": [
1573
1397
  {
1574
1398
  "kind": "field",
1575
- "name": "variant",
1399
+ "name": "max",
1576
1400
  "type": {
1577
- "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
1401
+ "text": "number | undefined"
1578
1402
  },
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"
1403
+ "description": "Maximum number of visible avatars. Remaining avatars shown as \"+N\"",
1404
+ "attribute": "max"
1582
1405
  },
1583
1406
  {
1584
1407
  "kind": "field",
1585
- "name": "dot",
1408
+ "name": "size",
1586
1409
  "type": {
1587
- "text": "boolean"
1410
+ "text": "'xs' | 'sm' | 'md'"
1588
1411
  },
1589
- "default": "false",
1590
- "description": "Should a dot be displayed before the label?",
1591
- "attribute": "dot"
1412
+ "default": "'md'",
1413
+ "description": "Size variant for all child avatars (unless individually overridden)",
1414
+ "attribute": "size"
1592
1415
  },
1593
1416
  {
1594
- "kind": "field",
1595
- "name": "size",
1596
- "type": {
1597
- "text": "'sm' | 'md' | 'lg'"
1417
+ "kind": "method",
1418
+ "name": "processAvatars",
1419
+ "return": {
1420
+ "type": {
1421
+ "text": "void"
1422
+ }
1598
1423
  },
1599
- "default": "'sm'",
1600
- "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
1601
- "attribute": "size"
1424
+ "description": "Process all avatar children: apply size, handle overflow\nCall this method when avatars are dynamically added or removed"
1602
1425
  },
1603
1426
  {
1604
1427
  "kind": "method",
@@ -1638,37 +1461,33 @@
1638
1461
  "text": "CustomEvent"
1639
1462
  },
1640
1463
  "description": "Fired after first render and initialization",
1641
- "name": "btu-badge-ready"
1642
- }
1643
- ],
1644
- "attributes": [
1464
+ "name": "btu-avatar-group-ready"
1465
+ },
1645
1466
  {
1646
- "name": "variant",
1647
1467
  "type": {
1648
- "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
1468
+ "text": "CustomEvent<{hidden: number}>"
1649
1469
  },
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
- },
1470
+ "description": "Fired when avatars are hidden due to max limit",
1471
+ "name": "btu-avatar-group-overflow"
1472
+ }
1473
+ ],
1474
+ "attributes": [
1655
1475
  {
1656
- "name": "dot",
1476
+ "name": "max",
1657
1477
  "type": {
1658
- "text": "boolean"
1478
+ "text": "number | undefined"
1659
1479
  },
1660
- "default": "false",
1661
- "description": "Should a dot be displayed before the label?",
1662
- "fieldName": "dot",
1663
- "attribute": "dot"
1480
+ "description": "Maximum number of visible avatars. Remaining avatars shown as \"+N\"",
1481
+ "fieldName": "max",
1482
+ "attribute": "max"
1664
1483
  },
1665
1484
  {
1666
1485
  "name": "size",
1667
1486
  "type": {
1668
- "text": "'sm' | 'md' | 'lg'"
1487
+ "text": "'xs' | 'sm' | 'md'"
1669
1488
  },
1670
- "default": "'sm'",
1671
- "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
1489
+ "default": "'md'",
1490
+ "description": "Size variant for all child avatars (unless individually overridden)",
1672
1491
  "fieldName": "size",
1673
1492
  "attribute": "size"
1674
1493
  }
@@ -1687,7 +1506,7 @@
1687
1506
  "name": "LitElement",
1688
1507
  "package": "lit"
1689
1508
  },
1690
- "tagName": "btu-badge",
1509
+ "tagName": "btu-avatar-group",
1691
1510
  "customElement": true
1692
1511
  }
1693
1512
  ],
@@ -1696,16 +1515,16 @@
1696
1515
  "kind": "js",
1697
1516
  "name": "default",
1698
1517
  "declaration": {
1699
- "name": "Badge",
1700
- "module": "src/components/badge/Badge.ts"
1518
+ "name": "AvatarGroup",
1519
+ "module": "src/components/avatar/AvatarGroup.ts"
1701
1520
  }
1702
1521
  },
1703
1522
  {
1704
1523
  "kind": "custom-element-definition",
1705
- "name": "btu-badge",
1524
+ "name": "btu-avatar-group",
1706
1525
  "declaration": {
1707
- "name": "Badge",
1708
- "module": "src/components/badge/Badge.ts"
1526
+ "name": "AvatarGroup",
1527
+ "module": "src/components/avatar/AvatarGroup.ts"
1709
1528
  }
1710
1529
  }
1711
1530
  ]
@@ -2592,71 +2411,74 @@
2592
2411
  },
2593
2412
  {
2594
2413
  "kind": "javascript-module",
2595
- "path": "src/components/copy-to-clipboard/CopyToClipboard.ts",
2414
+ "path": "src/components/badge/Badge.ts",
2596
2415
  "declarations": [
2597
2416
  {
2598
2417
  "kind": "class",
2599
- "description": "A button component that copies text to the system clipboard.\n\nProvides visual feedback when text is successfully copied by applying\na temporary state that can be styled with CSS.\n\nButton styling is inherited from `btu-button-*` classes. Override appearance\nby passing custom classes via the `buttonClasses` attribute.",
2600
- "name": "CopyToClipboard",
2418
+ "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.",
2419
+ "name": "Badge",
2420
+ "cssProperties": [
2421
+ {
2422
+ "description": "Text color (overrides theme color)",
2423
+ "name": "--badge-color-foreground"
2424
+ },
2425
+ {
2426
+ "description": "Background color (overrides theme color)",
2427
+ "name": "--badge-color-background"
2428
+ },
2429
+ {
2430
+ "description": "Border radius size (overrides shape default, default: 999px)",
2431
+ "name": "--badge-radius-size"
2432
+ },
2433
+ {
2434
+ "description": "Horizontal padding (overrides size default)",
2435
+ "name": "--badge-px"
2436
+ },
2437
+ {
2438
+ "description": "Vertical padding (overrides size default)",
2439
+ "name": "--badge-py"
2440
+ },
2441
+ {
2442
+ "description": "Size of the dot affordance (default: 6px)",
2443
+ "name": "--badge-dot-size"
2444
+ }
2445
+ ],
2446
+ "slots": [
2447
+ {
2448
+ "description": "Label text or child elements (e.g., btu-icon + text)",
2449
+ "name": ""
2450
+ }
2451
+ ],
2601
2452
  "members": [
2602
2453
  {
2603
2454
  "kind": "field",
2604
- "name": "copydata",
2455
+ "name": "variant",
2605
2456
  "type": {
2606
- "text": "string | undefined"
2457
+ "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
2607
2458
  },
2608
- "description": "The text to be copied to the system clipboard.",
2609
- "attribute": "copydata"
2459
+ "default": "'info'",
2460
+ "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",
2461
+ "attribute": "variant"
2610
2462
  },
2611
2463
  {
2612
2464
  "kind": "field",
2613
- "name": "buttonClasses",
2465
+ "name": "dot",
2614
2466
  "type": {
2615
- "text": "string | undefined"
2616
- },
2617
- "description": "Custom CSS classes for the button. If provided, replaces the default classes.",
2618
- "attribute": "buttonClasses"
2619
- },
2620
- {
2621
- "kind": "method",
2622
- "name": "copy",
2623
- "return": {
2624
- "type": {
2625
- "text": ""
2626
- }
2467
+ "text": "boolean"
2627
2468
  },
2628
- "parameters": [
2629
- {
2630
- "name": "text",
2631
- "type": {
2632
- "text": "string"
2633
- },
2634
- "description": "The text to copy to clipboard"
2635
- },
2636
- {
2637
- "name": "timeout",
2638
- "default": "3000",
2639
- "description": "Duration in milliseconds to show success state (default: 3000)"
2640
- }
2641
- ],
2642
- "description": "Copies the copydata to the system clipboard.\nDisplays a success state for 3 seconds after copying.",
2643
- "inheritedFrom": {
2644
- "name": "ClipboardMixin",
2645
- "module": "src/util/ClipboardMixin.ts"
2646
- }
2469
+ "default": "false",
2470
+ "description": "Should a dot be displayed before the label?",
2471
+ "attribute": "dot"
2647
2472
  },
2648
2473
  {
2649
2474
  "kind": "field",
2650
- "name": "copiedStateKey",
2475
+ "name": "size",
2651
2476
  "type": {
2652
- "text": "'btu-copy-to-clipboard-copied'"
2477
+ "text": "'sm' | 'md' | 'lg'"
2653
2478
  },
2654
- "description": "Custom state applied briefly after a successful copy; also emitted as an event.",
2655
- "readonly": true,
2656
- "inheritedFrom": {
2657
- "name": "ClipboardMixin",
2658
- "module": "src/util/ClipboardMixin.ts"
2659
- }
2479
+ "default": "'sm'",
2480
+ "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
2481
+ "attribute": "size"
2660
2482
  },
2661
2483
  {
2662
2484
  "kind": "method",
@@ -2696,51 +2518,42 @@
2696
2518
  "text": "CustomEvent"
2697
2519
  },
2698
2520
  "description": "Fired after first render and initialization",
2699
- "name": "btu-copy-to-clipboard-ready"
2700
- },
2701
- {
2702
- "type": {
2703
- "text": "CustomEvent"
2704
- },
2705
- "description": "Fired when text is successfully copied to clipboard",
2706
- "name": "btu-copy-to-clipboard-copied"
2521
+ "name": "btu-badge-ready"
2707
2522
  }
2708
2523
  ],
2709
2524
  "attributes": [
2710
2525
  {
2711
- "name": "copydata",
2526
+ "name": "variant",
2712
2527
  "type": {
2713
- "text": "string | undefined"
2528
+ "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
2714
2529
  },
2715
- "description": "The text to be copied to the system clipboard.",
2716
- "fieldName": "copydata",
2717
- "attribute": "copydata"
2530
+ "default": "'info'",
2531
+ "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",
2532
+ "fieldName": "variant",
2533
+ "attribute": "variant"
2718
2534
  },
2719
2535
  {
2720
- "name": "buttonClasses",
2536
+ "name": "dot",
2721
2537
  "type": {
2722
- "text": "string | undefined"
2538
+ "text": "boolean"
2723
2539
  },
2724
- "description": "Custom CSS classes for the button. If provided, replaces the default classes.",
2725
- "fieldName": "buttonClasses",
2726
- "attribute": "buttonClasses"
2727
- }
2728
- ],
2729
- "cssStates": [
2540
+ "default": "false",
2541
+ "description": "Should a dot be displayed before the label?",
2542
+ "fieldName": "dot",
2543
+ "attribute": "dot"
2544
+ },
2730
2545
  {
2731
- "description": "Applied briefly after a successful copy, targetable via :state(btu-copy-to-clipboard-copied)",
2732
- "name": "btu-copy-to-clipboard-copied"
2546
+ "name": "size",
2547
+ "type": {
2548
+ "text": "'sm' | 'md' | 'lg'"
2549
+ },
2550
+ "default": "'sm'",
2551
+ "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
2552
+ "fieldName": "size",
2553
+ "attribute": "size"
2733
2554
  }
2734
2555
  ],
2735
2556
  "mixins": [
2736
- {
2737
- "name": "ClipboardMixin",
2738
- "module": "/src/util/ClipboardMixin.js"
2739
- },
2740
- {
2741
- "name": "ComponentStatesMixin",
2742
- "module": "/src/util/ComponentStatesMixin.js"
2743
- },
2744
2557
  {
2745
2558
  "name": "EventEmitterMixin",
2746
2559
  "module": "/src/util/EventEmitterMixin.js"
@@ -2754,7 +2567,7 @@
2754
2567
  "name": "LitElement",
2755
2568
  "package": "lit"
2756
2569
  },
2757
- "tagName": "btu-copy-to-clipboard",
2570
+ "tagName": "btu-badge",
2758
2571
  "customElement": true
2759
2572
  }
2760
2573
  ],
@@ -2763,89 +2576,71 @@
2763
2576
  "kind": "js",
2764
2577
  "name": "default",
2765
2578
  "declaration": {
2766
- "name": "CopyToClipboard",
2767
- "module": "src/components/copy-to-clipboard/CopyToClipboard.ts"
2579
+ "name": "Badge",
2580
+ "module": "src/components/badge/Badge.ts"
2768
2581
  }
2769
2582
  },
2770
2583
  {
2771
2584
  "kind": "custom-element-definition",
2772
- "name": "btu-copy-to-clipboard",
2585
+ "name": "btu-badge",
2773
2586
  "declaration": {
2774
- "name": "CopyToClipboard",
2775
- "module": "src/components/copy-to-clipboard/CopyToClipboard.ts"
2587
+ "name": "Badge",
2588
+ "module": "src/components/badge/Badge.ts"
2776
2589
  }
2777
2590
  }
2778
2591
  ]
2779
2592
  },
2780
2593
  {
2781
2594
  "kind": "javascript-module",
2782
- "path": "src/components/dropdown/Dropdown.ts",
2595
+ "path": "src/components/button-group/ButtonGroup.ts",
2783
2596
  "declarations": [
2784
2597
  {
2785
2598
  "kind": "class",
2786
- "description": "A dropdown component that renders a trigger button and manages a floating panel\ncontaining a `btu-dropdown-menu`.\n\nUses the native Popover API and CSS anchor positioning for panel management.\nThe trigger button is built with existing `btu-button-*` classes.\n\n**Trigger button styling:** Set `--button-*` CSS custom properties on `<btu-dropdown>`\nor a parent element to customize the trigger via CSS inheritance (e.g.,\n`--button-border-radius`, `--button-color-background`). See\n`tailwind-plugin-button.ts` for available props.",
2787
- "name": "Dropdown",
2599
+ "description": "A semantic container for grouping related buttons together.\n\nSupports connected (joined) and spaced layouts, horizontal and vertical\norientation, group-level size and disabled propagation, and optional\ntoggle/selection modes (single-select or multi-select).",
2600
+ "name": "ButtonGroup",
2788
2601
  "cssProperties": [
2789
2602
  {
2790
- "description": "Panel background color (default: white)",
2791
- "name": "--dropdown-panel-background"
2792
- },
2793
- {
2794
- "description": "Panel border color (default: gray-200)",
2795
- "name": "--dropdown-panel-border-color"
2796
- },
2797
- {
2798
- "description": "Panel border radius (default: borderRadius.lg)",
2799
- "name": "--dropdown-panel-border-radius"
2800
- },
2801
- {
2802
- "description": "Panel minimum width (default: max(12rem, anchor-size(width)))",
2803
- "name": "--dropdown-panel-min-width"
2804
- },
2805
- {
2806
- "description": "Item background color (default: transparent)",
2807
- "name": "--dropdown-item-background"
2808
- },
2809
- {
2810
- "description": "Item text color (default: gray-700)",
2811
- "name": "--dropdown-item-color"
2812
- },
2813
- {
2814
- "description": "Item hover background (default: gray-100)",
2815
- "name": "--dropdown-item-hover-background"
2816
- },
2817
- {
2818
- "description": "Item hover text color (default: gray-900)",
2819
- "name": "--dropdown-item-hover-color"
2603
+ "description": "Space between buttons when variant=\"spaced\" (default: spacing.sm)",
2604
+ "name": "--button-group-gap"
2820
2605
  },
2821
2606
  {
2822
- "description": "Selected item background (default: primary-50)",
2823
- "name": "--dropdown-item-selected-background"
2607
+ "description": "Corner radius of outer edges when variant=\"connected\" (default: 0.5rem)",
2608
+ "name": "--button-group-border-radius"
2824
2609
  },
2825
2610
  {
2826
- "description": "Selected item text color (default: primary-700)",
2827
- "name": "--dropdown-item-selected-color"
2611
+ "description": "Internal divider color between connected buttons (default: gray-300)",
2612
+ "name": "--button-group-border-color"
2828
2613
  },
2829
2614
  {
2830
- "description": "Item font size (default: fontSize.sm)",
2831
- "name": "--dropdown-item-font-size"
2615
+ "description": "Background of a toggled/selected child (default: primary-50)",
2616
+ "name": "--button-group-selection-bg"
2832
2617
  },
2833
2618
  {
2834
- "description": "Divider line color (default: gray-200)",
2835
- "name": "--dropdown-divider-color"
2619
+ "description": "Text/icon color of a toggled/selected child (default: primary-700)",
2620
+ "name": "--button-group-selection-color"
2836
2621
  },
2837
2622
  {
2838
- "description": "Empty state text color (default: gray-400)",
2839
- "name": "--dropdown-empty-color"
2623
+ "description": "Highlight color of the selection shimmer effect (default: primary-200)",
2624
+ "name": "--button-group-shimmer-highlight"
2840
2625
  }
2841
2626
  ],
2842
2627
  "slots": [
2843
2628
  {
2844
- "description": "A `btu-dropdown-menu` element containing `btu-dropdown-item` children",
2629
+ "description": "One or more btu-button or btu-icon-button elements to display in the group",
2845
2630
  "name": ""
2631
+ },
2632
+ {
2633
+ "description": "Pushes the child to the end of the group via auto-margin (vertical: bottom, horizontal: right)",
2634
+ "name": "end"
2846
2635
  }
2847
2636
  ],
2848
2637
  "members": [
2638
+ {
2639
+ "kind": "field",
2640
+ "name": "tagName",
2641
+ "static": true,
2642
+ "readonly": true
2643
+ },
2849
2644
  {
2850
2645
  "kind": "field",
2851
2646
  "name": "label",
@@ -2853,294 +2648,354 @@
2853
2648
  "text": "string"
2854
2649
  },
2855
2650
  "default": "''",
2856
- "description": "Trigger button text.",
2651
+ "description": "Accessible name for the group, announced by assistive devices via aria-label.",
2857
2652
  "attribute": "label"
2858
2653
  },
2859
2654
  {
2860
2655
  "kind": "field",
2861
- "name": "open",
2656
+ "name": "orientation",
2862
2657
  "type": {
2863
- "text": "boolean"
2658
+ "text": "'horizontal' | 'vertical'"
2864
2659
  },
2865
- "default": "false",
2866
- "description": "Panel visibility state. Can be set programmatically (e.g., for tour UIs)\n— syncs to `showPopover()`/`hidePopover()` in `updated()`.",
2867
- "attribute": "open",
2660
+ "default": "'horizontal'",
2661
+ "description": "Layout direction of the buttons.",
2662
+ "attribute": "orientation",
2868
2663
  "reflects": true
2869
2664
  },
2870
2665
  {
2871
2666
  "kind": "field",
2872
- "name": "placement",
2667
+ "name": "variant",
2873
2668
  "type": {
2874
- "text": "Placement"
2669
+ "text": "'connected' | 'spaced'"
2875
2670
  },
2876
- "default": "'bottom-start'",
2877
- "description": "Panel placement: 'bottom-start', 'bottom-end', 'top-start', 'top-end'.",
2878
- "attribute": "placement"
2671
+ "default": "'connected'",
2672
+ "description": "`connected` collapses shared borders for a joined appearance.\n`spaced` renders buttons with a gap.",
2673
+ "attribute": "variant",
2674
+ "reflects": true
2879
2675
  },
2880
2676
  {
2881
2677
  "kind": "field",
2882
2678
  "name": "size",
2883
2679
  "type": {
2884
- "text": "Size"
2680
+ "text": "'sm' | 'md' | 'lg'"
2885
2681
  },
2886
2682
  "default": "'md'",
2887
- "description": "Button size: 'sm', 'md', 'lg'.",
2888
- "attribute": "size"
2683
+ "description": "Propagates a uniform size to all child buttons.",
2684
+ "attribute": "size",
2685
+ "reflects": true
2889
2686
  },
2890
2687
  {
2891
2688
  "kind": "field",
2892
2689
  "name": "disabled",
2893
2690
  "type": {
2894
- "text": "boolean"
2691
+ "text": "boolean"
2692
+ },
2693
+ "default": "false",
2694
+ "description": "When true, disables all child buttons as a group.",
2695
+ "attribute": "disabled"
2696
+ },
2697
+ {
2698
+ "kind": "field",
2699
+ "name": "selection",
2700
+ "type": {
2701
+ "text": "'none' | 'single' | 'multiple'"
2702
+ },
2703
+ "default": "'none'",
2704
+ "description": "Enables toggle/selection behavior.\n`single` allows one active button; `multiple` allows many.",
2705
+ "attribute": "selection",
2706
+ "reflects": true
2707
+ },
2708
+ {
2709
+ "kind": "field",
2710
+ "name": "value",
2711
+ "type": {
2712
+ "text": "string"
2713
+ },
2714
+ "default": "''",
2715
+ "description": "Reflects the currently selected button value(s).\nFor `single`, the value of the active button.\nFor `multiple`, a comma-delimited list of active values.",
2716
+ "attribute": "value",
2717
+ "reflects": true
2718
+ },
2719
+ {
2720
+ "kind": "field",
2721
+ "name": "name",
2722
+ "type": {
2723
+ "text": "string"
2724
+ },
2725
+ "default": "''",
2726
+ "description": "When set, creates hidden input(s) for native form participation.",
2727
+ "attribute": "name"
2728
+ },
2729
+ {
2730
+ "kind": "method",
2731
+ "name": "emit",
2732
+ "parameters": [
2733
+ {
2734
+ "name": "type",
2735
+ "type": {
2736
+ "text": "K"
2737
+ },
2738
+ "description": "Event name from CustomEventMap"
2739
+ },
2740
+ {
2741
+ "name": "detail",
2742
+ "optional": true,
2743
+ "type": {
2744
+ "text": "UnpackCustomEvent<CustomEventMap[K]>"
2745
+ },
2746
+ "description": "Optional event detail payload"
2747
+ }
2748
+ ],
2749
+ "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)",
2750
+ "return": {
2751
+ "type": {
2752
+ "text": "boolean"
2753
+ }
2754
+ },
2755
+ "inheritedFrom": {
2756
+ "name": "EventEmitterMixin",
2757
+ "module": "src/util/EventEmitterMixin.ts"
2758
+ }
2759
+ }
2760
+ ],
2761
+ "events": [
2762
+ {
2763
+ "type": {
2764
+ "text": "CustomEvent"
2765
+ },
2766
+ "description": "Fired after first render and initialization",
2767
+ "name": "btu-button-group-ready"
2768
+ },
2769
+ {
2770
+ "type": {
2771
+ "text": "CustomEvent<{value: string}>"
2895
2772
  },
2896
- "default": "false",
2897
- "description": "Prevents opening.",
2898
- "attribute": "disabled",
2899
- "reflects": true
2773
+ "description": "Fired when selection changes (single/multiple modes only)",
2774
+ "name": "btu-button-group-change"
2900
2775
  },
2901
2776
  {
2902
- "kind": "field",
2903
- "name": "variant",
2904
2777
  "type": {
2905
- "text": "Variant"
2778
+ "text": "CustomEvent<{name: string | undefined}>"
2906
2779
  },
2907
- "default": "'secondary'",
2908
- "description": "Button variant: 'primary', 'secondary', 'tertiary', 'primary-clear', 'secondary-clear', 'tertiary-clear'.",
2909
- "attribute": "variant"
2910
- },
2780
+ "description": "Bubbles from child btu-icon-button elements when clicked",
2781
+ "name": "btu-icon-button-click"
2782
+ }
2783
+ ],
2784
+ "attributes": [
2911
2785
  {
2912
- "kind": "field",
2913
- "name": "symbol",
2786
+ "name": "label",
2914
2787
  "type": {
2915
2788
  "text": "string"
2916
2789
  },
2917
2790
  "default": "''",
2918
- "description": "Lucide icon symbol for the trigger.",
2919
- "attribute": "symbol"
2791
+ "description": "Accessible name for the group, announced by assistive devices via aria-label.",
2792
+ "fieldName": "label",
2793
+ "attribute": "label"
2920
2794
  },
2921
2795
  {
2922
- "kind": "field",
2923
- "name": "iconPosition",
2796
+ "name": "orientation",
2924
2797
  "type": {
2925
- "text": "'leading' | 'trailing'"
2798
+ "text": "'horizontal' | 'vertical'"
2926
2799
  },
2927
- "default": "'leading'",
2928
- "description": "Icon position: 'leading' or 'trailing'.",
2929
- "attribute": "icon-position"
2800
+ "default": "'horizontal'",
2801
+ "description": "Layout direction of the buttons.",
2802
+ "fieldName": "orientation",
2803
+ "attribute": "orientation"
2930
2804
  },
2931
2805
  {
2932
- "kind": "field",
2933
- "name": "iconOnly",
2806
+ "name": "variant",
2934
2807
  "type": {
2935
- "text": "boolean"
2808
+ "text": "'connected' | 'spaced'"
2936
2809
  },
2937
- "default": "false",
2938
- "description": "Hides label, shows icon only.",
2939
- "attribute": "icon-only"
2810
+ "default": "'connected'",
2811
+ "description": "`connected` collapses shared borders for a joined appearance.\n`spaced` renders buttons with a gap.",
2812
+ "fieldName": "variant",
2813
+ "attribute": "variant"
2940
2814
  },
2941
2815
  {
2942
- "kind": "field",
2943
- "name": "stayOpenOnSelect",
2816
+ "name": "size",
2944
2817
  "type": {
2945
- "text": "boolean"
2818
+ "text": "'sm' | 'md' | 'lg'"
2946
2819
  },
2947
- "default": "false",
2948
- "description": "Keeps panel open on item click.",
2949
- "attribute": "stay-open-on-select"
2820
+ "default": "'md'",
2821
+ "description": "Propagates a uniform size to all child buttons.",
2822
+ "fieldName": "size",
2823
+ "attribute": "size"
2950
2824
  },
2951
2825
  {
2952
- "kind": "field",
2953
- "name": "noChevron",
2826
+ "name": "disabled",
2954
2827
  "type": {
2955
2828
  "text": "boolean"
2956
2829
  },
2957
2830
  "default": "false",
2958
- "description": "Hides the chevron icon on the trigger button.",
2959
- "attribute": "no-chevron",
2960
- "reflects": true
2961
- },
2962
- {
2963
- "kind": "method",
2964
- "name": "_getButtonClasses",
2965
- "privacy": "private",
2966
- "return": {
2967
- "type": {
2968
- "text": "string"
2969
- }
2970
- },
2971
- "description": "Build the button class string based on variant and size"
2972
- },
2973
- {
2974
- "kind": "method",
2975
- "name": "_showPanel",
2976
- "privacy": "private",
2977
- "return": {
2978
- "type": {
2979
- "text": "void"
2980
- }
2981
- },
2982
- "description": "Show the dropdown panel"
2831
+ "description": "When true, disables all child buttons as a group.",
2832
+ "fieldName": "disabled",
2833
+ "attribute": "disabled"
2983
2834
  },
2984
2835
  {
2985
- "kind": "method",
2986
- "name": "_hidePanel",
2987
- "privacy": "private",
2988
- "return": {
2989
- "type": {
2990
- "text": "void"
2991
- }
2836
+ "name": "selection",
2837
+ "type": {
2838
+ "text": "'none' | 'single' | 'multiple'"
2992
2839
  },
2993
- "description": "Hide the dropdown panel"
2840
+ "default": "'none'",
2841
+ "description": "Enables toggle/selection behavior.\n`single` allows one active button; `multiple` allows many.",
2842
+ "fieldName": "selection",
2843
+ "attribute": "selection"
2994
2844
  },
2995
2845
  {
2996
- "kind": "field",
2997
- "name": "tooltip",
2846
+ "name": "value",
2998
2847
  "type": {
2999
2848
  "text": "string"
3000
2849
  },
3001
2850
  "default": "''",
3002
- "description": "Tooltip text content. Set to empty string to remove the tooltip.",
3003
- "attribute": "tooltip",
3004
- "inheritedFrom": {
3005
- "name": "TooltipMixin",
3006
- "module": "src/util/TooltipMixin.ts"
3007
- }
2851
+ "description": "Reflects the currently selected button value(s).\nFor `single`, the value of the active button.\nFor `multiple`, a comma-delimited list of active values.",
2852
+ "fieldName": "value",
2853
+ "attribute": "value"
3008
2854
  },
3009
2855
  {
3010
- "kind": "field",
3011
- "name": "tooltipPosition",
2856
+ "name": "name",
3012
2857
  "type": {
3013
- "text": "'top' | 'bottom' | 'left' | 'right'"
2858
+ "text": "string"
3014
2859
  },
3015
- "default": "'top'",
3016
- "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
3017
- "attribute": "tooltip-position",
3018
- "inheritedFrom": {
3019
- "name": "TooltipMixin",
3020
- "module": "src/util/TooltipMixin.ts"
3021
- }
3022
- },
2860
+ "default": "''",
2861
+ "description": "When set, creates hidden input(s) for native form participation.",
2862
+ "fieldName": "name",
2863
+ "attribute": "name"
2864
+ }
2865
+ ],
2866
+ "cssStates": [
3023
2867
  {
3024
- "kind": "field",
3025
- "name": "tooltipDelay",
3026
- "type": {
3027
- "text": "number"
3028
- },
3029
- "default": "300",
3030
- "description": "Show delay in milliseconds (hover trigger only).",
3031
- "attribute": "tooltip-delay",
3032
- "inheritedFrom": {
3033
- "name": "TooltipMixin",
3034
- "module": "src/util/TooltipMixin.ts"
3035
- }
2868
+ "description": "Applied when variant=\"connected\", targetable via :state(btu-connected)",
2869
+ "name": "btu-connected"
3036
2870
  },
3037
2871
  {
3038
- "kind": "field",
3039
- "name": "tooltipOffset",
3040
- "type": {
3041
- "text": "TooltipOffset | null"
3042
- },
3043
- "default": "null",
3044
- "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
3045
- "attribute": "tooltip-offset",
3046
- "inheritedFrom": {
3047
- "name": "TooltipMixin",
3048
- "module": "src/util/TooltipMixin.ts"
3049
- }
2872
+ "description": "Applied when variant=\"spaced\", targetable via :state(btu-spaced)",
2873
+ "name": "btu-spaced"
3050
2874
  },
3051
2875
  {
3052
- "kind": "field",
3053
- "name": "tooltipNoArrow",
3054
- "type": {
3055
- "text": "boolean"
3056
- },
3057
- "default": "false",
3058
- "description": "Hide the arrow pseudo-element.",
3059
- "attribute": "tooltip-no-arrow",
3060
- "inheritedFrom": {
3061
- "name": "TooltipMixin",
3062
- "module": "src/util/TooltipMixin.ts"
3063
- }
2876
+ "description": "Applied when orientation=\"horizontal\", targetable via :state(btu-horizontal)",
2877
+ "name": "btu-horizontal"
3064
2878
  },
3065
2879
  {
3066
- "kind": "field",
3067
- "name": "tooltipTrigger",
3068
- "type": {
3069
- "text": "string"
3070
- },
3071
- "default": "'hover focus'",
3072
- "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
3073
- "attribute": "tooltip-trigger",
3074
- "inheritedFrom": {
3075
- "name": "TooltipMixin",
3076
- "module": "src/util/TooltipMixin.ts"
3077
- }
2880
+ "description": "Applied when orientation=\"vertical\", targetable via :state(btu-vertical)",
2881
+ "name": "btu-vertical"
3078
2882
  },
3079
2883
  {
3080
- "kind": "field",
3081
- "name": "_onMouseLeave",
3082
- "privacy": "private",
3083
- "inheritedFrom": {
3084
- "name": "TooltipMixin",
3085
- "module": "src/util/TooltipMixin.ts"
3086
- }
2884
+ "description": "Applied when the group is disabled, targetable via :state(btu-disabled)",
2885
+ "name": "btu-disabled"
2886
+ }
2887
+ ],
2888
+ "mixins": [
2889
+ {
2890
+ "name": "RovingTabindexMixin",
2891
+ "module": "/src/util/RovingTabindexMixin.js"
3087
2892
  },
3088
2893
  {
3089
- "kind": "field",
3090
- "name": "_onFocusIn",
3091
- "privacy": "private",
3092
- "inheritedFrom": {
3093
- "name": "TooltipMixin",
3094
- "module": "src/util/TooltipMixin.ts"
3095
- }
2894
+ "name": "ComponentStatesMixin",
2895
+ "module": "/src/util/ComponentStatesMixin.js"
3096
2896
  },
3097
2897
  {
3098
- "kind": "field",
3099
- "name": "_onFocusOut",
3100
- "privacy": "private",
3101
- "inheritedFrom": {
3102
- "name": "TooltipMixin",
3103
- "module": "src/util/TooltipMixin.ts"
3104
- }
2898
+ "name": "EventEmitterMixin",
2899
+ "module": "/src/util/EventEmitterMixin.js"
3105
2900
  },
2901
+ {
2902
+ "name": "ReadyMixin",
2903
+ "module": "/src/util/ReadyMixin.js"
2904
+ }
2905
+ ],
2906
+ "superclass": {
2907
+ "name": "LitElement",
2908
+ "package": "lit"
2909
+ },
2910
+ "tagName": "btu-button-group",
2911
+ "customElement": true
2912
+ }
2913
+ ],
2914
+ "exports": [
2915
+ {
2916
+ "kind": "js",
2917
+ "name": "default",
2918
+ "declaration": {
2919
+ "name": "ButtonGroup",
2920
+ "module": "src/components/button-group/ButtonGroup.ts"
2921
+ }
2922
+ },
2923
+ {
2924
+ "kind": "custom-element-definition",
2925
+ "name": "btu-button-group",
2926
+ "declaration": {
2927
+ "name": "ButtonGroup",
2928
+ "module": "src/components/button-group/ButtonGroup.ts"
2929
+ }
2930
+ }
2931
+ ]
2932
+ },
2933
+ {
2934
+ "kind": "javascript-module",
2935
+ "path": "src/components/copy-to-clipboard/CopyToClipboard.ts",
2936
+ "declarations": [
2937
+ {
2938
+ "kind": "class",
2939
+ "description": "A button component that copies text to the system clipboard.\n\nProvides visual feedback when text is successfully copied by applying\na temporary state that can be styled with CSS.\n\nButton styling is inherited from `btu-button-*` classes. Override appearance\nby passing custom classes via the `buttonClasses` attribute.",
2940
+ "name": "CopyToClipboard",
2941
+ "members": [
3106
2942
  {
3107
2943
  "kind": "field",
3108
- "name": "_onClick",
3109
- "privacy": "private",
3110
- "inheritedFrom": {
3111
- "name": "TooltipMixin",
3112
- "module": "src/util/TooltipMixin.ts"
3113
- }
2944
+ "name": "copydata",
2945
+ "type": {
2946
+ "text": "string | undefined"
2947
+ },
2948
+ "description": "The text to be copied to the system clipboard.",
2949
+ "attribute": "copydata"
3114
2950
  },
3115
2951
  {
3116
2952
  "kind": "field",
3117
- "name": "_onNativeToggle",
3118
- "privacy": "private",
3119
- "inheritedFrom": {
3120
- "name": "TooltipMixin",
3121
- "module": "src/util/TooltipMixin.ts"
3122
- }
2953
+ "name": "buttonClasses",
2954
+ "type": {
2955
+ "text": "string | undefined"
2956
+ },
2957
+ "description": "Custom CSS classes for the button. If provided, replaces the default classes.",
2958
+ "attribute": "buttonClasses"
3123
2959
  },
3124
2960
  {
3125
- "kind": "field",
3126
- "name": "_onKeyDown",
3127
- "privacy": "private",
2961
+ "kind": "method",
2962
+ "name": "copy",
2963
+ "return": {
2964
+ "type": {
2965
+ "text": ""
2966
+ }
2967
+ },
2968
+ "parameters": [
2969
+ {
2970
+ "name": "text",
2971
+ "type": {
2972
+ "text": "string"
2973
+ },
2974
+ "description": "The text to copy to clipboard"
2975
+ },
2976
+ {
2977
+ "name": "timeout",
2978
+ "default": "3000",
2979
+ "description": "Duration in milliseconds to show success state (default: 3000)"
2980
+ }
2981
+ ],
2982
+ "description": "Copies the copydata to the system clipboard.\nDisplays a success state for 3 seconds after copying.",
3128
2983
  "inheritedFrom": {
3129
- "name": "TooltipMixin",
3130
- "module": "src/util/TooltipMixin.ts"
2984
+ "name": "ClipboardMixin",
2985
+ "module": "src/util/ClipboardMixin.ts"
3131
2986
  }
3132
2987
  },
3133
2988
  {
3134
2989
  "kind": "field",
3135
- "name": "_onDocumentClick",
2990
+ "name": "copiedStateKey",
3136
2991
  "type": {
3137
- "text": "((e: MouseEvent) => void) | null"
2992
+ "text": "'btu-copy-to-clipboard-copied'"
3138
2993
  },
3139
- "privacy": "private",
3140
- "default": "null",
2994
+ "description": "Custom state applied briefly after a successful copy; also emitted as an event.",
2995
+ "readonly": true,
3141
2996
  "inheritedFrom": {
3142
- "name": "TooltipMixin",
3143
- "module": "src/util/TooltipMixin.ts"
2997
+ "name": "ClipboardMixin",
2998
+ "module": "src/util/ClipboardMixin.ts"
3144
2999
  }
3145
3000
  },
3146
3001
  {
@@ -3181,156 +3036,310 @@
3181
3036
  "text": "CustomEvent"
3182
3037
  },
3183
3038
  "description": "Fired after first render and initialization",
3184
- "name": "btu-dropdown-ready"
3039
+ "name": "btu-copy-to-clipboard-ready"
3185
3040
  },
3186
3041
  {
3187
3042
  "type": {
3188
3043
  "text": "CustomEvent"
3189
3044
  },
3190
- "description": "Fired when the dropdown panel opens",
3191
- "name": "btu-dropdown-show"
3192
- },
3045
+ "description": "Fired when text is successfully copied to clipboard",
3046
+ "name": "btu-copy-to-clipboard-copied"
3047
+ }
3048
+ ],
3049
+ "attributes": [
3193
3050
  {
3051
+ "name": "copydata",
3194
3052
  "type": {
3195
- "text": "CustomEvent"
3053
+ "text": "string | undefined"
3196
3054
  },
3197
- "description": "Fired when the dropdown panel closes",
3198
- "name": "btu-dropdown-hide"
3055
+ "description": "The text to be copied to the system clipboard.",
3056
+ "fieldName": "copydata",
3057
+ "attribute": "copydata"
3199
3058
  },
3200
3059
  {
3060
+ "name": "buttonClasses",
3201
3061
  "type": {
3202
- "text": "CustomEvent<{label: string, value: string, selected: boolean}>"
3062
+ "text": "string | undefined"
3203
3063
  },
3204
- "description": "Fired when a menu item is activated (bubbles from btu-dropdown-item)",
3205
- "name": "btu-dropdown-item-select"
3064
+ "description": "Custom CSS classes for the button. If provided, replaces the default classes.",
3065
+ "fieldName": "buttonClasses",
3066
+ "attribute": "buttonClasses"
3067
+ }
3068
+ ],
3069
+ "cssStates": [
3070
+ {
3071
+ "description": "Applied briefly after a successful copy, targetable via :state(btu-copy-to-clipboard-copied)",
3072
+ "name": "btu-copy-to-clipboard-copied"
3073
+ }
3074
+ ],
3075
+ "mixins": [
3076
+ {
3077
+ "name": "ClipboardMixin",
3078
+ "module": "/src/util/ClipboardMixin.js"
3206
3079
  },
3207
3080
  {
3208
- "type": {
3209
- "text": "CustomEvent<{label: string, favorited: boolean}>"
3210
- },
3211
- "description": "Fired when a menu item's favorite is toggled (bubbles from btu-dropdown-item)",
3212
- "name": "btu-dropdown-item-favorite"
3081
+ "name": "ComponentStatesMixin",
3082
+ "module": "/src/util/ComponentStatesMixin.js"
3083
+ },
3084
+ {
3085
+ "name": "EventEmitterMixin",
3086
+ "module": "/src/util/EventEmitterMixin.js"
3087
+ },
3088
+ {
3089
+ "name": "ReadyMixin",
3090
+ "module": "/src/util/ReadyMixin.js"
3213
3091
  }
3214
3092
  ],
3215
- "attributes": [
3093
+ "superclass": {
3094
+ "name": "LitElement",
3095
+ "package": "lit"
3096
+ },
3097
+ "tagName": "btu-copy-to-clipboard",
3098
+ "customElement": true
3099
+ }
3100
+ ],
3101
+ "exports": [
3102
+ {
3103
+ "kind": "js",
3104
+ "name": "default",
3105
+ "declaration": {
3106
+ "name": "CopyToClipboard",
3107
+ "module": "src/components/copy-to-clipboard/CopyToClipboard.ts"
3108
+ }
3109
+ },
3110
+ {
3111
+ "kind": "custom-element-definition",
3112
+ "name": "btu-copy-to-clipboard",
3113
+ "declaration": {
3114
+ "name": "CopyToClipboard",
3115
+ "module": "src/components/copy-to-clipboard/CopyToClipboard.ts"
3116
+ }
3117
+ }
3118
+ ]
3119
+ },
3120
+ {
3121
+ "kind": "javascript-module",
3122
+ "path": "src/components/dropdown/Dropdown.ts",
3123
+ "declarations": [
3124
+ {
3125
+ "kind": "class",
3126
+ "description": "A dropdown component that renders a trigger button and manages a floating panel\ncontaining a `btu-dropdown-menu`.\n\nUses the native Popover API and CSS anchor positioning for panel management.\nThe trigger button is built with existing `btu-button-*` classes.\n\n**Trigger button styling:** Set `--button-*` CSS custom properties on `<btu-dropdown>`\nor a parent element to customize the trigger via CSS inheritance (e.g.,\n`--button-border-radius`, `--button-color-background`). See\n`tailwind-plugin-button.ts` for available props.",
3127
+ "name": "Dropdown",
3128
+ "cssProperties": [
3129
+ {
3130
+ "description": "Panel background color (default: white)",
3131
+ "name": "--dropdown-panel-background"
3132
+ },
3133
+ {
3134
+ "description": "Panel border color (default: gray-200)",
3135
+ "name": "--dropdown-panel-border-color"
3136
+ },
3137
+ {
3138
+ "description": "Panel border radius (default: borderRadius.lg)",
3139
+ "name": "--dropdown-panel-border-radius"
3140
+ },
3141
+ {
3142
+ "description": "Panel minimum width (default: max(12rem, anchor-size(width)))",
3143
+ "name": "--dropdown-panel-min-width"
3144
+ },
3145
+ {
3146
+ "description": "Item background color (default: transparent)",
3147
+ "name": "--dropdown-item-background"
3148
+ },
3149
+ {
3150
+ "description": "Item text color (default: gray-700)",
3151
+ "name": "--dropdown-item-color"
3152
+ },
3153
+ {
3154
+ "description": "Item hover background (default: gray-100)",
3155
+ "name": "--dropdown-item-hover-background"
3156
+ },
3157
+ {
3158
+ "description": "Item hover text color (default: gray-900)",
3159
+ "name": "--dropdown-item-hover-color"
3160
+ },
3161
+ {
3162
+ "description": "Selected item background (default: primary-50)",
3163
+ "name": "--dropdown-item-selected-background"
3164
+ },
3165
+ {
3166
+ "description": "Selected item text color (default: primary-700)",
3167
+ "name": "--dropdown-item-selected-color"
3168
+ },
3169
+ {
3170
+ "description": "Item font size (default: fontSize.sm)",
3171
+ "name": "--dropdown-item-font-size"
3172
+ },
3173
+ {
3174
+ "description": "Divider line color (default: gray-200)",
3175
+ "name": "--dropdown-divider-color"
3176
+ },
3177
+ {
3178
+ "description": "Empty state text color (default: gray-400)",
3179
+ "name": "--dropdown-empty-color"
3180
+ }
3181
+ ],
3182
+ "slots": [
3183
+ {
3184
+ "description": "A `btu-dropdown-menu` element containing `btu-dropdown-item` children",
3185
+ "name": ""
3186
+ }
3187
+ ],
3188
+ "members": [
3216
3189
  {
3190
+ "kind": "field",
3217
3191
  "name": "label",
3218
3192
  "type": {
3219
3193
  "text": "string"
3220
3194
  },
3221
3195
  "default": "''",
3222
3196
  "description": "Trigger button text.",
3223
- "fieldName": "label",
3224
3197
  "attribute": "label"
3225
3198
  },
3226
3199
  {
3200
+ "kind": "field",
3227
3201
  "name": "open",
3228
3202
  "type": {
3229
3203
  "text": "boolean"
3230
3204
  },
3231
3205
  "default": "false",
3232
3206
  "description": "Panel visibility state. Can be set programmatically (e.g., for tour UIs)\n— syncs to `showPopover()`/`hidePopover()` in `updated()`.",
3233
- "fieldName": "open",
3234
- "attribute": "open"
3207
+ "attribute": "open",
3208
+ "reflects": true
3235
3209
  },
3236
3210
  {
3211
+ "kind": "field",
3237
3212
  "name": "placement",
3238
3213
  "type": {
3239
3214
  "text": "Placement"
3240
3215
  },
3241
3216
  "default": "'bottom-start'",
3242
3217
  "description": "Panel placement: 'bottom-start', 'bottom-end', 'top-start', 'top-end'.",
3243
- "fieldName": "placement",
3244
3218
  "attribute": "placement"
3245
3219
  },
3246
3220
  {
3221
+ "kind": "field",
3247
3222
  "name": "size",
3248
3223
  "type": {
3249
3224
  "text": "Size"
3250
3225
  },
3251
3226
  "default": "'md'",
3252
3227
  "description": "Button size: 'sm', 'md', 'lg'.",
3253
- "fieldName": "size",
3254
3228
  "attribute": "size"
3255
3229
  },
3256
3230
  {
3231
+ "kind": "field",
3257
3232
  "name": "disabled",
3258
3233
  "type": {
3259
3234
  "text": "boolean"
3260
3235
  },
3261
3236
  "default": "false",
3262
3237
  "description": "Prevents opening.",
3263
- "fieldName": "disabled",
3264
- "attribute": "disabled"
3238
+ "attribute": "disabled",
3239
+ "reflects": true
3265
3240
  },
3266
3241
  {
3242
+ "kind": "field",
3267
3243
  "name": "variant",
3268
3244
  "type": {
3269
3245
  "text": "Variant"
3270
3246
  },
3271
3247
  "default": "'secondary'",
3272
3248
  "description": "Button variant: 'primary', 'secondary', 'tertiary', 'primary-clear', 'secondary-clear', 'tertiary-clear'.",
3273
- "fieldName": "variant",
3274
3249
  "attribute": "variant"
3275
3250
  },
3276
3251
  {
3252
+ "kind": "field",
3277
3253
  "name": "symbol",
3278
3254
  "type": {
3279
3255
  "text": "string"
3280
3256
  },
3281
3257
  "default": "''",
3282
3258
  "description": "Lucide icon symbol for the trigger.",
3283
- "fieldName": "symbol",
3284
3259
  "attribute": "symbol"
3285
3260
  },
3286
3261
  {
3287
- "name": "icon-position",
3262
+ "kind": "field",
3263
+ "name": "iconPosition",
3288
3264
  "type": {
3289
3265
  "text": "'leading' | 'trailing'"
3290
3266
  },
3291
3267
  "default": "'leading'",
3292
3268
  "description": "Icon position: 'leading' or 'trailing'.",
3293
- "fieldName": "iconPosition",
3294
3269
  "attribute": "icon-position"
3295
3270
  },
3296
3271
  {
3297
- "name": "icon-only",
3272
+ "kind": "field",
3273
+ "name": "iconOnly",
3298
3274
  "type": {
3299
3275
  "text": "boolean"
3300
3276
  },
3301
3277
  "default": "false",
3302
3278
  "description": "Hides label, shows icon only.",
3303
- "fieldName": "iconOnly",
3304
3279
  "attribute": "icon-only"
3305
3280
  },
3306
3281
  {
3307
- "name": "stay-open-on-select",
3282
+ "kind": "field",
3283
+ "name": "stayOpenOnSelect",
3308
3284
  "type": {
3309
3285
  "text": "boolean"
3310
3286
  },
3311
3287
  "default": "false",
3312
3288
  "description": "Keeps panel open on item click.",
3313
- "fieldName": "stayOpenOnSelect",
3314
3289
  "attribute": "stay-open-on-select"
3315
3290
  },
3316
3291
  {
3317
- "name": "no-chevron",
3292
+ "kind": "field",
3293
+ "name": "noChevron",
3318
3294
  "type": {
3319
3295
  "text": "boolean"
3320
3296
  },
3321
3297
  "default": "false",
3322
3298
  "description": "Hides the chevron icon on the trigger button.",
3323
- "fieldName": "noChevron",
3324
- "attribute": "no-chevron"
3299
+ "attribute": "no-chevron",
3300
+ "reflects": true
3301
+ },
3302
+ {
3303
+ "kind": "method",
3304
+ "name": "_getButtonClasses",
3305
+ "privacy": "private",
3306
+ "return": {
3307
+ "type": {
3308
+ "text": "string"
3309
+ }
3310
+ },
3311
+ "description": "Build the button class string based on variant and size"
3312
+ },
3313
+ {
3314
+ "kind": "method",
3315
+ "name": "_showPanel",
3316
+ "privacy": "private",
3317
+ "return": {
3318
+ "type": {
3319
+ "text": "void"
3320
+ }
3321
+ },
3322
+ "description": "Show the dropdown panel"
3323
+ },
3324
+ {
3325
+ "kind": "method",
3326
+ "name": "_hidePanel",
3327
+ "privacy": "private",
3328
+ "return": {
3329
+ "type": {
3330
+ "text": "void"
3331
+ }
3332
+ },
3333
+ "description": "Hide the dropdown panel"
3325
3334
  },
3326
3335
  {
3336
+ "kind": "field",
3327
3337
  "name": "tooltip",
3328
3338
  "type": {
3329
3339
  "text": "string"
3330
3340
  },
3331
3341
  "default": "''",
3332
3342
  "description": "Tooltip text content. Set to empty string to remove the tooltip.",
3333
- "fieldName": "tooltip",
3334
3343
  "attribute": "tooltip",
3335
3344
  "inheritedFrom": {
3336
3345
  "name": "TooltipMixin",
@@ -3338,339 +3347,140 @@
3338
3347
  }
3339
3348
  },
3340
3349
  {
3350
+ "kind": "field",
3341
3351
  "name": "tooltipPosition",
3342
3352
  "type": {
3343
3353
  "text": "'top' | 'bottom' | 'left' | 'right'"
3344
3354
  },
3345
3355
  "default": "'top'",
3346
3356
  "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
3347
- "fieldName": "tooltipPosition",
3357
+ "attribute": "tooltip-position",
3348
3358
  "inheritedFrom": {
3349
3359
  "name": "TooltipMixin",
3350
3360
  "module": "src/util/TooltipMixin.ts"
3351
3361
  }
3352
3362
  },
3353
3363
  {
3364
+ "kind": "field",
3354
3365
  "name": "tooltipDelay",
3355
3366
  "type": {
3356
3367
  "text": "number"
3357
3368
  },
3358
3369
  "default": "300",
3359
3370
  "description": "Show delay in milliseconds (hover trigger only).",
3360
- "fieldName": "tooltipDelay",
3371
+ "attribute": "tooltip-delay",
3361
3372
  "inheritedFrom": {
3362
3373
  "name": "TooltipMixin",
3363
3374
  "module": "src/util/TooltipMixin.ts"
3364
3375
  }
3365
3376
  },
3366
3377
  {
3378
+ "kind": "field",
3367
3379
  "name": "tooltipOffset",
3368
3380
  "type": {
3369
3381
  "text": "TooltipOffset | null"
3370
3382
  },
3371
3383
  "default": "null",
3372
3384
  "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
3373
- "fieldName": "tooltipOffset",
3385
+ "attribute": "tooltip-offset",
3374
3386
  "inheritedFrom": {
3375
3387
  "name": "TooltipMixin",
3376
3388
  "module": "src/util/TooltipMixin.ts"
3377
3389
  }
3378
3390
  },
3379
3391
  {
3392
+ "kind": "field",
3380
3393
  "name": "tooltipNoArrow",
3381
3394
  "type": {
3382
3395
  "text": "boolean"
3383
3396
  },
3384
3397
  "default": "false",
3385
3398
  "description": "Hide the arrow pseudo-element.",
3386
- "fieldName": "tooltipNoArrow",
3399
+ "attribute": "tooltip-no-arrow",
3387
3400
  "inheritedFrom": {
3388
3401
  "name": "TooltipMixin",
3389
3402
  "module": "src/util/TooltipMixin.ts"
3390
3403
  }
3391
3404
  },
3392
3405
  {
3406
+ "kind": "field",
3393
3407
  "name": "tooltipTrigger",
3394
3408
  "type": {
3395
3409
  "text": "string"
3396
3410
  },
3397
3411
  "default": "'hover focus'",
3398
3412
  "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
3399
- "fieldName": "tooltipTrigger",
3400
- "inheritedFrom": {
3401
- "name": "TooltipMixin",
3402
- "module": "src/util/TooltipMixin.ts"
3403
- }
3404
- },
3405
- {
3406
- "name": "tooltip-position",
3407
- "type": {
3408
- "text": "'top' | 'bottom' | 'left' | 'right'"
3409
- },
3410
- "default": "'top'",
3411
- "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
3412
- "attribute": "tooltipPosition",
3413
- "fieldName": "tooltipPosition",
3414
- "inheritedFrom": {
3415
- "name": "TooltipMixin",
3416
- "module": "src/util/TooltipMixin.ts"
3417
- }
3418
- },
3419
- {
3420
- "name": "tooltip-delay",
3421
- "type": {
3422
- "text": "number"
3423
- },
3424
- "default": "300",
3425
- "description": "Show delay in milliseconds (hover trigger only).",
3426
- "attribute": "tooltipDelay",
3427
- "fieldName": "tooltipDelay",
3428
- "inheritedFrom": {
3429
- "name": "TooltipMixin",
3430
- "module": "src/util/TooltipMixin.ts"
3431
- }
3432
- },
3433
- {
3434
- "name": "tooltip-offset",
3435
- "type": {
3436
- "text": "TooltipOffset | null"
3437
- },
3438
- "default": "null",
3439
- "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
3440
- "attribute": "tooltipOffset",
3441
- "fieldName": "tooltipOffset",
3442
- "inheritedFrom": {
3443
- "name": "TooltipMixin",
3444
- "module": "src/util/TooltipMixin.ts"
3445
- }
3446
- },
3447
- {
3448
- "name": "tooltip-no-arrow",
3449
- "type": {
3450
- "text": "boolean"
3451
- },
3452
- "default": "false",
3453
- "description": "Hide the arrow pseudo-element.",
3454
- "attribute": "tooltipNoArrow",
3455
- "fieldName": "tooltipNoArrow",
3413
+ "attribute": "tooltip-trigger",
3456
3414
  "inheritedFrom": {
3457
3415
  "name": "TooltipMixin",
3458
3416
  "module": "src/util/TooltipMixin.ts"
3459
3417
  }
3460
3418
  },
3461
3419
  {
3462
- "name": "tooltip-trigger",
3463
- "type": {
3464
- "text": "string"
3465
- },
3466
- "default": "'hover focus'",
3467
- "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
3468
- "attribute": "tooltipTrigger",
3469
- "fieldName": "tooltipTrigger",
3420
+ "kind": "field",
3421
+ "name": "_onMouseLeave",
3422
+ "privacy": "private",
3470
3423
  "inheritedFrom": {
3471
3424
  "name": "TooltipMixin",
3472
- "module": "src/util/TooltipMixin.ts"
3473
- }
3474
- }
3475
- ],
3476
- "mixins": [
3477
- {
3478
- "name": "TooltipMixin",
3479
- "module": "/src/util/TooltipMixin.js"
3480
- },
3481
- {
3482
- "name": "EventEmitterMixin",
3483
- "module": "/src/util/EventEmitterMixin.js"
3484
- },
3485
- {
3486
- "name": "ReadyMixin",
3487
- "module": "/src/util/ReadyMixin.js"
3488
- }
3489
- ],
3490
- "superclass": {
3491
- "name": "LitElement",
3492
- "package": "lit"
3493
- },
3494
- "tagName": "btu-dropdown",
3495
- "customElement": true
3496
- }
3497
- ],
3498
- "exports": [
3499
- {
3500
- "kind": "js",
3501
- "name": "default",
3502
- "declaration": {
3503
- "name": "Dropdown",
3504
- "module": "src/components/dropdown/Dropdown.ts"
3505
- }
3506
- },
3507
- {
3508
- "kind": "custom-element-definition",
3509
- "name": "btu-dropdown",
3510
- "declaration": {
3511
- "name": "Dropdown",
3512
- "module": "src/components/dropdown/Dropdown.ts"
3513
- }
3514
- }
3515
- ]
3516
- },
3517
- {
3518
- "kind": "javascript-module",
3519
- "path": "src/components/dropdown/DropdownItem.ts",
3520
- "declarations": [
3521
- {
3522
- "kind": "class",
3523
- "description": "A menu item component for use inside `btu-dropdown-menu`.\n\nRenders as a menu item, divider, or subhead depending on the `type` property.\nSupports checkbox mode (inherited from parent menu), icons, keyboard shortcuts,\nand favorite toggles.",
3524
- "name": "DropdownItem",
3525
- "cssProperties": [
3526
- {
3527
- "description": "Item font size (default: theme fontSize.sm)",
3528
- "name": "--dropdown-item-font-size"
3529
- },
3530
- {
3531
- "description": "Item text color (default: gray-700)",
3532
- "name": "--dropdown-item-color"
3533
- },
3534
- {
3535
- "description": "Item background color (default: transparent)",
3536
- "name": "--dropdown-item-background"
3537
- },
3538
- {
3539
- "description": "Background on hover (default: gray-100)",
3540
- "name": "--dropdown-item-hover-background"
3541
- },
3542
- {
3543
- "description": "Text color on hover (default: gray-900)",
3544
- "name": "--dropdown-item-hover-color"
3545
- },
3546
- {
3547
- "description": "Background when selected (default: primary-50)",
3548
- "name": "--dropdown-item-selected-background"
3549
- },
3550
- {
3551
- "description": "Text color when selected (default: primary-700)",
3552
- "name": "--dropdown-item-selected-color"
3553
- }
3554
- ],
3555
- "members": [
3556
- {
3557
- "kind": "field",
3558
- "name": "label",
3559
- "type": {
3560
- "text": "string"
3561
- },
3562
- "default": "''",
3563
- "description": "Display text for the item.",
3564
- "attribute": "label"
3565
- },
3566
- {
3567
- "kind": "field",
3568
- "name": "type",
3569
- "type": {
3570
- "text": "'default' | 'divider' | 'subhead'"
3571
- },
3572
- "default": "'default'",
3573
- "description": "Item type: 'default', 'divider', or 'subhead'.",
3574
- "attribute": "type"
3575
- },
3576
- {
3577
- "kind": "field",
3578
- "name": "symbol",
3579
- "type": {
3580
- "text": "string"
3581
- },
3582
- "default": "''",
3583
- "description": "Lucide icon symbol.",
3584
- "attribute": "symbol"
3585
- },
3586
- {
3587
- "kind": "field",
3588
- "name": "shortcut",
3589
- "type": {
3590
- "text": "string"
3591
- },
3592
- "default": "''",
3593
- "description": "Keyboard shortcut display text.",
3594
- "attribute": "shortcut"
3425
+ "module": "src/util/TooltipMixin.ts"
3426
+ }
3595
3427
  },
3596
3428
  {
3597
3429
  "kind": "field",
3598
- "name": "value",
3599
- "type": {
3600
- "text": "string"
3601
- },
3602
- "default": "''",
3603
- "description": "Optional data value associated with the item.",
3604
- "attribute": "value"
3430
+ "name": "_onFocusIn",
3431
+ "privacy": "private",
3432
+ "inheritedFrom": {
3433
+ "name": "TooltipMixin",
3434
+ "module": "src/util/TooltipMixin.ts"
3435
+ }
3605
3436
  },
3606
3437
  {
3607
3438
  "kind": "field",
3608
- "name": "disabled",
3609
- "type": {
3610
- "text": "boolean"
3611
- },
3612
- "default": "false",
3613
- "description": "Whether the item is disabled.",
3614
- "attribute": "disabled"
3439
+ "name": "_onFocusOut",
3440
+ "privacy": "private",
3441
+ "inheritedFrom": {
3442
+ "name": "TooltipMixin",
3443
+ "module": "src/util/TooltipMixin.ts"
3444
+ }
3615
3445
  },
3616
3446
  {
3617
3447
  "kind": "field",
3618
- "name": "selected",
3619
- "type": {
3620
- "text": "boolean"
3621
- },
3622
- "default": "false",
3623
- "description": "Whether the item is selected/checked.",
3624
- "attribute": "selected",
3625
- "reflects": true
3448
+ "name": "_onClick",
3449
+ "privacy": "private",
3450
+ "inheritedFrom": {
3451
+ "name": "TooltipMixin",
3452
+ "module": "src/util/TooltipMixin.ts"
3453
+ }
3626
3454
  },
3627
3455
  {
3628
3456
  "kind": "field",
3629
- "name": "favorited",
3630
- "type": {
3631
- "text": "boolean"
3632
- },
3633
- "default": "false",
3634
- "description": "Whether the item is favorited.",
3635
- "attribute": "favorited"
3457
+ "name": "_onNativeToggle",
3458
+ "privacy": "private",
3459
+ "inheritedFrom": {
3460
+ "name": "TooltipMixin",
3461
+ "module": "src/util/TooltipMixin.ts"
3462
+ }
3636
3463
  },
3637
3464
  {
3638
3465
  "kind": "field",
3639
- "name": "error",
3640
- "type": {
3641
- "text": "boolean"
3642
- },
3643
- "default": "false",
3644
- "description": "Whether the item has an error.",
3645
- "attribute": "error"
3646
- },
3647
- {
3648
- "kind": "method",
3649
- "name": "_toggleFavorite",
3466
+ "name": "_onKeyDown",
3650
3467
  "privacy": "private",
3651
- "return": {
3652
- "type": {
3653
- "text": "void"
3654
- }
3655
- },
3656
- "parameters": [
3657
- {
3658
- "name": "e",
3659
- "type": {
3660
- "text": "Event"
3661
- }
3662
- }
3663
- ],
3664
- "description": "Toggle favorite state"
3468
+ "inheritedFrom": {
3469
+ "name": "TooltipMixin",
3470
+ "module": "src/util/TooltipMixin.ts"
3471
+ }
3665
3472
  },
3666
3473
  {
3667
- "kind": "method",
3668
- "name": "_handleClick",
3474
+ "kind": "field",
3475
+ "name": "_onDocumentClick",
3476
+ "type": {
3477
+ "text": "((e: MouseEvent) => void) | null"
3478
+ },
3669
3479
  "privacy": "private",
3670
- "return": {
3671
- "type": {
3672
- "text": "void"
3673
- }
3480
+ "default": "null",
3481
+ "inheritedFrom": {
3482
+ "name": "TooltipMixin",
3483
+ "module": "src/util/TooltipMixin.ts"
3674
3484
  }
3675
3485
  },
3676
3486
  {
@@ -3710,21 +3520,35 @@
3710
3520
  "type": {
3711
3521
  "text": "CustomEvent"
3712
3522
  },
3713
- "description": "Fired after first render",
3714
- "name": "btu-dropdown-item-ready"
3523
+ "description": "Fired after first render and initialization",
3524
+ "name": "btu-dropdown-ready"
3525
+ },
3526
+ {
3527
+ "type": {
3528
+ "text": "CustomEvent"
3529
+ },
3530
+ "description": "Fired when the dropdown panel opens",
3531
+ "name": "btu-dropdown-show"
3532
+ },
3533
+ {
3534
+ "type": {
3535
+ "text": "CustomEvent"
3536
+ },
3537
+ "description": "Fired when the dropdown panel closes",
3538
+ "name": "btu-dropdown-hide"
3715
3539
  },
3716
3540
  {
3717
3541
  "type": {
3718
3542
  "text": "CustomEvent<{label: string, value: string, selected: boolean}>"
3719
3543
  },
3720
- "description": "Fired when item is activated",
3544
+ "description": "Fired when a menu item is activated (bubbles from btu-dropdown-item)",
3721
3545
  "name": "btu-dropdown-item-select"
3722
3546
  },
3723
3547
  {
3724
3548
  "type": {
3725
3549
  "text": "CustomEvent<{label: string, favorited: boolean}>"
3726
3550
  },
3727
- "description": "Fired when favorite is toggled",
3551
+ "description": "Fired when a menu item's favorite is toggled (bubbles from btu-dropdown-item)",
3728
3552
  "name": "btu-dropdown-item-favorite"
3729
3553
  }
3730
3554
  ],
@@ -3735,92 +3559,265 @@
3735
3559
  "text": "string"
3736
3560
  },
3737
3561
  "default": "''",
3738
- "description": "Display text for the item.",
3562
+ "description": "Trigger button text.",
3739
3563
  "fieldName": "label",
3740
3564
  "attribute": "label"
3741
3565
  },
3742
3566
  {
3743
- "name": "type",
3567
+ "name": "open",
3568
+ "type": {
3569
+ "text": "boolean"
3570
+ },
3571
+ "default": "false",
3572
+ "description": "Panel visibility state. Can be set programmatically (e.g., for tour UIs)\n— syncs to `showPopover()`/`hidePopover()` in `updated()`.",
3573
+ "fieldName": "open",
3574
+ "attribute": "open"
3575
+ },
3576
+ {
3577
+ "name": "placement",
3578
+ "type": {
3579
+ "text": "Placement"
3580
+ },
3581
+ "default": "'bottom-start'",
3582
+ "description": "Panel placement: 'bottom-start', 'bottom-end', 'top-start', 'top-end'.",
3583
+ "fieldName": "placement",
3584
+ "attribute": "placement"
3585
+ },
3586
+ {
3587
+ "name": "size",
3588
+ "type": {
3589
+ "text": "Size"
3590
+ },
3591
+ "default": "'md'",
3592
+ "description": "Button size: 'sm', 'md', 'lg'.",
3593
+ "fieldName": "size",
3594
+ "attribute": "size"
3595
+ },
3596
+ {
3597
+ "name": "disabled",
3598
+ "type": {
3599
+ "text": "boolean"
3600
+ },
3601
+ "default": "false",
3602
+ "description": "Prevents opening.",
3603
+ "fieldName": "disabled",
3604
+ "attribute": "disabled"
3605
+ },
3606
+ {
3607
+ "name": "variant",
3608
+ "type": {
3609
+ "text": "Variant"
3610
+ },
3611
+ "default": "'secondary'",
3612
+ "description": "Button variant: 'primary', 'secondary', 'tertiary', 'primary-clear', 'secondary-clear', 'tertiary-clear'.",
3613
+ "fieldName": "variant",
3614
+ "attribute": "variant"
3615
+ },
3616
+ {
3617
+ "name": "symbol",
3618
+ "type": {
3619
+ "text": "string"
3620
+ },
3621
+ "default": "''",
3622
+ "description": "Lucide icon symbol for the trigger.",
3623
+ "fieldName": "symbol",
3624
+ "attribute": "symbol"
3625
+ },
3626
+ {
3627
+ "name": "icon-position",
3628
+ "type": {
3629
+ "text": "'leading' | 'trailing'"
3630
+ },
3631
+ "default": "'leading'",
3632
+ "description": "Icon position: 'leading' or 'trailing'.",
3633
+ "fieldName": "iconPosition",
3634
+ "attribute": "icon-position"
3635
+ },
3636
+ {
3637
+ "name": "icon-only",
3638
+ "type": {
3639
+ "text": "boolean"
3640
+ },
3641
+ "default": "false",
3642
+ "description": "Hides label, shows icon only.",
3643
+ "fieldName": "iconOnly",
3644
+ "attribute": "icon-only"
3645
+ },
3646
+ {
3647
+ "name": "stay-open-on-select",
3648
+ "type": {
3649
+ "text": "boolean"
3650
+ },
3651
+ "default": "false",
3652
+ "description": "Keeps panel open on item click.",
3653
+ "fieldName": "stayOpenOnSelect",
3654
+ "attribute": "stay-open-on-select"
3655
+ },
3656
+ {
3657
+ "name": "no-chevron",
3658
+ "type": {
3659
+ "text": "boolean"
3660
+ },
3661
+ "default": "false",
3662
+ "description": "Hides the chevron icon on the trigger button.",
3663
+ "fieldName": "noChevron",
3664
+ "attribute": "no-chevron"
3665
+ },
3666
+ {
3667
+ "name": "tooltip",
3668
+ "type": {
3669
+ "text": "string"
3670
+ },
3671
+ "default": "''",
3672
+ "description": "Tooltip text content. Set to empty string to remove the tooltip.",
3673
+ "fieldName": "tooltip",
3674
+ "attribute": "tooltip",
3675
+ "inheritedFrom": {
3676
+ "name": "TooltipMixin",
3677
+ "module": "src/util/TooltipMixin.ts"
3678
+ }
3679
+ },
3680
+ {
3681
+ "name": "tooltipPosition",
3682
+ "type": {
3683
+ "text": "'top' | 'bottom' | 'left' | 'right'"
3684
+ },
3685
+ "default": "'top'",
3686
+ "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
3687
+ "fieldName": "tooltipPosition",
3688
+ "inheritedFrom": {
3689
+ "name": "TooltipMixin",
3690
+ "module": "src/util/TooltipMixin.ts"
3691
+ }
3692
+ },
3693
+ {
3694
+ "name": "tooltipDelay",
3695
+ "type": {
3696
+ "text": "number"
3697
+ },
3698
+ "default": "300",
3699
+ "description": "Show delay in milliseconds (hover trigger only).",
3700
+ "fieldName": "tooltipDelay",
3701
+ "inheritedFrom": {
3702
+ "name": "TooltipMixin",
3703
+ "module": "src/util/TooltipMixin.ts"
3704
+ }
3705
+ },
3706
+ {
3707
+ "name": "tooltipOffset",
3744
3708
  "type": {
3745
- "text": "'default' | 'divider' | 'subhead'"
3709
+ "text": "TooltipOffset | null"
3746
3710
  },
3747
- "default": "'default'",
3748
- "description": "Item type: 'default', 'divider', or 'subhead'.",
3749
- "fieldName": "type",
3750
- "attribute": "type"
3711
+ "default": "null",
3712
+ "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
3713
+ "fieldName": "tooltipOffset",
3714
+ "inheritedFrom": {
3715
+ "name": "TooltipMixin",
3716
+ "module": "src/util/TooltipMixin.ts"
3717
+ }
3751
3718
  },
3752
3719
  {
3753
- "name": "symbol",
3720
+ "name": "tooltipNoArrow",
3754
3721
  "type": {
3755
- "text": "string"
3722
+ "text": "boolean"
3756
3723
  },
3757
- "default": "''",
3758
- "description": "Lucide icon symbol.",
3759
- "fieldName": "symbol",
3760
- "attribute": "symbol"
3724
+ "default": "false",
3725
+ "description": "Hide the arrow pseudo-element.",
3726
+ "fieldName": "tooltipNoArrow",
3727
+ "inheritedFrom": {
3728
+ "name": "TooltipMixin",
3729
+ "module": "src/util/TooltipMixin.ts"
3730
+ }
3761
3731
  },
3762
3732
  {
3763
- "name": "shortcut",
3733
+ "name": "tooltipTrigger",
3764
3734
  "type": {
3765
3735
  "text": "string"
3766
3736
  },
3767
- "default": "''",
3768
- "description": "Keyboard shortcut display text.",
3769
- "fieldName": "shortcut",
3770
- "attribute": "shortcut"
3737
+ "default": "'hover focus'",
3738
+ "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
3739
+ "fieldName": "tooltipTrigger",
3740
+ "inheritedFrom": {
3741
+ "name": "TooltipMixin",
3742
+ "module": "src/util/TooltipMixin.ts"
3743
+ }
3771
3744
  },
3772
3745
  {
3773
- "name": "value",
3746
+ "name": "tooltip-position",
3774
3747
  "type": {
3775
- "text": "string"
3748
+ "text": "'top' | 'bottom' | 'left' | 'right'"
3776
3749
  },
3777
- "default": "''",
3778
- "description": "Optional data value associated with the item.",
3779
- "fieldName": "value",
3780
- "attribute": "value"
3750
+ "default": "'top'",
3751
+ "description": "Position relative to the host element. Auto-flips when constrained by the viewport.",
3752
+ "attribute": "tooltipPosition",
3753
+ "fieldName": "tooltipPosition",
3754
+ "inheritedFrom": {
3755
+ "name": "TooltipMixin",
3756
+ "module": "src/util/TooltipMixin.ts"
3757
+ }
3781
3758
  },
3782
3759
  {
3783
- "name": "disabled",
3760
+ "name": "tooltip-delay",
3784
3761
  "type": {
3785
- "text": "boolean"
3762
+ "text": "number"
3786
3763
  },
3787
- "default": "false",
3788
- "description": "Whether the item is disabled.",
3789
- "fieldName": "disabled",
3790
- "attribute": "disabled"
3764
+ "default": "300",
3765
+ "description": "Show delay in milliseconds (hover trigger only).",
3766
+ "attribute": "tooltipDelay",
3767
+ "fieldName": "tooltipDelay",
3768
+ "inheritedFrom": {
3769
+ "name": "TooltipMixin",
3770
+ "module": "src/util/TooltipMixin.ts"
3771
+ }
3791
3772
  },
3792
3773
  {
3793
- "name": "selected",
3774
+ "name": "tooltip-offset",
3794
3775
  "type": {
3795
- "text": "boolean"
3776
+ "text": "TooltipOffset | null"
3796
3777
  },
3797
- "default": "false",
3798
- "description": "Whether the item is selected/checked.",
3799
- "fieldName": "selected",
3800
- "attribute": "selected"
3778
+ "default": "null",
3779
+ "description": "Gap between host and tooltip (sm=4px, md=8px, lg=12px, xl=16px).",
3780
+ "attribute": "tooltipOffset",
3781
+ "fieldName": "tooltipOffset",
3782
+ "inheritedFrom": {
3783
+ "name": "TooltipMixin",
3784
+ "module": "src/util/TooltipMixin.ts"
3785
+ }
3801
3786
  },
3802
3787
  {
3803
- "name": "favorited",
3788
+ "name": "tooltip-no-arrow",
3804
3789
  "type": {
3805
3790
  "text": "boolean"
3806
3791
  },
3807
3792
  "default": "false",
3808
- "description": "Whether the item is favorited.",
3809
- "fieldName": "favorited",
3810
- "attribute": "favorited"
3793
+ "description": "Hide the arrow pseudo-element.",
3794
+ "attribute": "tooltipNoArrow",
3795
+ "fieldName": "tooltipNoArrow",
3796
+ "inheritedFrom": {
3797
+ "name": "TooltipMixin",
3798
+ "module": "src/util/TooltipMixin.ts"
3799
+ }
3811
3800
  },
3812
3801
  {
3813
- "name": "error",
3802
+ "name": "tooltip-trigger",
3814
3803
  "type": {
3815
- "text": "boolean"
3804
+ "text": "string"
3816
3805
  },
3817
- "default": "false",
3818
- "description": "Whether the item has an error.",
3819
- "fieldName": "error",
3820
- "attribute": "error"
3806
+ "default": "'hover focus'",
3807
+ "description": "Space-separated trigger types: 'hover', 'focus', 'click'.",
3808
+ "attribute": "tooltipTrigger",
3809
+ "fieldName": "tooltipTrigger",
3810
+ "inheritedFrom": {
3811
+ "name": "TooltipMixin",
3812
+ "module": "src/util/TooltipMixin.ts"
3813
+ }
3821
3814
  }
3822
3815
  ],
3823
3816
  "mixins": [
3817
+ {
3818
+ "name": "TooltipMixin",
3819
+ "module": "/src/util/TooltipMixin.js"
3820
+ },
3824
3821
  {
3825
3822
  "name": "EventEmitterMixin",
3826
3823
  "module": "/src/util/EventEmitterMixin.js"
@@ -3834,7 +3831,7 @@
3834
3831
  "name": "LitElement",
3835
3832
  "package": "lit"
3836
3833
  },
3837
- "tagName": "btu-dropdown-item",
3834
+ "tagName": "btu-dropdown",
3838
3835
  "customElement": true
3839
3836
  }
3840
3837
  ],
@@ -3843,157 +3840,153 @@
3843
3840
  "kind": "js",
3844
3841
  "name": "default",
3845
3842
  "declaration": {
3846
- "name": "DropdownItem",
3847
- "module": "src/components/dropdown/DropdownItem.ts"
3843
+ "name": "Dropdown",
3844
+ "module": "src/components/dropdown/Dropdown.ts"
3848
3845
  }
3849
3846
  },
3850
3847
  {
3851
3848
  "kind": "custom-element-definition",
3852
- "name": "btu-dropdown-item",
3849
+ "name": "btu-dropdown",
3853
3850
  "declaration": {
3854
- "name": "DropdownItem",
3855
- "module": "src/components/dropdown/DropdownItem.ts"
3851
+ "name": "Dropdown",
3852
+ "module": "src/components/dropdown/Dropdown.ts"
3856
3853
  }
3857
3854
  }
3858
3855
  ]
3859
3856
  },
3860
3857
  {
3861
3858
  "kind": "javascript-module",
3862
- "path": "src/components/dropdown/DropdownMenu.ts",
3859
+ "path": "src/components/dropdown/DropdownItem.ts",
3863
3860
  "declarations": [
3864
3861
  {
3865
3862
  "kind": "class",
3866
- "description": "A menu container component that provides keyboard navigation and ARIA menu semantics.\n\nContains `btu-dropdown-item` children and manages roving tabindex, typeahead search,\nand keyboard navigation following the WAI-ARIA Menu Button Pattern.",
3867
- "name": "DropdownMenu",
3863
+ "description": "A menu item component for use inside `btu-dropdown-menu`.\n\nRenders as a menu item, divider, or subhead depending on the `type` property.\nSupports checkbox mode (inherited from parent menu), icons, keyboard shortcuts,\nand favorite toggles.",
3864
+ "name": "DropdownItem",
3868
3865
  "cssProperties": [
3869
3866
  {
3870
- "description": "Empty state text color (default: gray-400)",
3871
- "name": "--dropdown-empty-color"
3872
- }
3873
- ],
3874
- "slots": [
3867
+ "description": "Item font size (default: theme fontSize.sm)",
3868
+ "name": "--dropdown-item-font-size"
3869
+ },
3875
3870
  {
3876
- "description": "Menu items (`btu-dropdown-item` elements)",
3877
- "name": ""
3871
+ "description": "Item text color (default: gray-700)",
3872
+ "name": "--dropdown-item-color"
3873
+ },
3874
+ {
3875
+ "description": "Item background color (default: transparent)",
3876
+ "name": "--dropdown-item-background"
3877
+ },
3878
+ {
3879
+ "description": "Background on hover (default: gray-100)",
3880
+ "name": "--dropdown-item-hover-background"
3881
+ },
3882
+ {
3883
+ "description": "Text color on hover (default: gray-900)",
3884
+ "name": "--dropdown-item-hover-color"
3885
+ },
3886
+ {
3887
+ "description": "Background when selected (default: primary-50)",
3888
+ "name": "--dropdown-item-selected-background"
3889
+ },
3890
+ {
3891
+ "description": "Text color when selected (default: primary-700)",
3892
+ "name": "--dropdown-item-selected-color"
3878
3893
  }
3879
3894
  ],
3880
3895
  "members": [
3881
3896
  {
3882
3897
  "kind": "field",
3883
- "name": "name",
3898
+ "name": "label",
3884
3899
  "type": {
3885
3900
  "text": "string"
3886
3901
  },
3887
3902
  "default": "''",
3888
- "description": "Accessible name for the menu, displayed in header when header is true.",
3889
- "attribute": "name"
3903
+ "description": "Display text for the item.",
3904
+ "attribute": "label"
3890
3905
  },
3891
3906
  {
3892
3907
  "kind": "field",
3893
- "name": "header",
3908
+ "name": "type",
3894
3909
  "type": {
3895
- "text": "boolean"
3910
+ "text": "'default' | 'divider' | 'subhead'"
3896
3911
  },
3897
- "default": "false",
3898
- "description": "Show header bar with menu name.",
3899
- "attribute": "header"
3912
+ "default": "'default'",
3913
+ "description": "Item type: 'default', 'divider', or 'subhead'.",
3914
+ "attribute": "type"
3900
3915
  },
3901
3916
  {
3902
3917
  "kind": "field",
3903
- "name": "checkbox",
3918
+ "name": "symbol",
3904
3919
  "type": {
3905
- "text": "boolean"
3920
+ "text": "string"
3906
3921
  },
3907
- "default": "false",
3908
- "description": "Enable checkbox mode for items (menuitemcheckbox role).",
3909
- "attribute": "checkbox"
3922
+ "default": "''",
3923
+ "description": "Lucide icon symbol.",
3924
+ "attribute": "symbol"
3910
3925
  },
3911
3926
  {
3912
3927
  "kind": "field",
3913
- "name": "icon",
3928
+ "name": "shortcut",
3914
3929
  "type": {
3915
- "text": "boolean"
3930
+ "text": "string"
3916
3931
  },
3917
- "default": "false",
3918
- "description": "Show icons before each item.",
3919
- "attribute": "icon"
3932
+ "default": "''",
3933
+ "description": "Keyboard shortcut display text.",
3934
+ "attribute": "shortcut"
3920
3935
  },
3921
3936
  {
3922
3937
  "kind": "field",
3923
- "name": "symbol",
3938
+ "name": "value",
3924
3939
  "type": {
3925
3940
  "text": "string"
3926
3941
  },
3927
3942
  "default": "''",
3928
- "description": "Fallback Lucide icon symbol for items without their own.",
3929
- "attribute": "symbol"
3943
+ "description": "Optional data value associated with the item.",
3944
+ "attribute": "value"
3930
3945
  },
3931
3946
  {
3932
3947
  "kind": "field",
3933
- "name": "favorites",
3948
+ "name": "disabled",
3934
3949
  "type": {
3935
3950
  "text": "boolean"
3936
3951
  },
3937
3952
  "default": "false",
3938
- "description": "Show favorite toggle on each item.",
3939
- "attribute": "favorites"
3953
+ "description": "Whether the item is disabled.",
3954
+ "attribute": "disabled"
3940
3955
  },
3941
3956
  {
3942
3957
  "kind": "field",
3943
- "name": "shortcuts",
3958
+ "name": "selected",
3944
3959
  "type": {
3945
3960
  "text": "boolean"
3946
3961
  },
3947
3962
  "default": "false",
3948
- "description": "Show keyboard shortcut text on each item.",
3949
- "attribute": "shortcuts"
3950
- },
3951
- {
3952
- "kind": "field",
3953
- "name": "emptyMessage",
3954
- "type": {
3955
- "text": "string"
3956
- },
3957
- "default": "'No items available'",
3958
- "description": "Message displayed when the menu has no focusable items.",
3959
- "attribute": "empty-message"
3960
- },
3961
- {
3962
- "kind": "method",
3963
- "name": "_configureItems",
3964
- "privacy": "private",
3965
- "return": {
3966
- "type": {
3967
- "text": "void"
3968
- }
3969
- },
3970
- "description": "Configure all child items with menu-level settings"
3963
+ "description": "Whether the item is selected/checked.",
3964
+ "attribute": "selected",
3965
+ "reflects": true
3971
3966
  },
3972
3967
  {
3973
- "kind": "method",
3974
- "name": "_getAllItems",
3975
- "privacy": "private",
3976
- "return": {
3977
- "type": {
3978
- "text": "DropdownItem[]"
3979
- }
3968
+ "kind": "field",
3969
+ "name": "favorited",
3970
+ "type": {
3971
+ "text": "boolean"
3980
3972
  },
3981
- "description": "Get all btu-dropdown-item children"
3973
+ "default": "false",
3974
+ "description": "Whether the item is favorited.",
3975
+ "attribute": "favorited"
3982
3976
  },
3983
3977
  {
3984
- "kind": "method",
3985
- "name": "_getFocusableItems",
3986
- "privacy": "private",
3987
- "return": {
3988
- "type": {
3989
- "text": "DropdownItem[]"
3990
- }
3978
+ "kind": "field",
3979
+ "name": "error",
3980
+ "type": {
3981
+ "text": "boolean"
3991
3982
  },
3992
- "description": "Get only focusable items (default type, skip dividers/subheads)"
3983
+ "default": "false",
3984
+ "description": "Whether the item has an error.",
3985
+ "attribute": "error"
3993
3986
  },
3994
3987
  {
3995
3988
  "kind": "method",
3996
- "name": "_handleTypeahead",
3989
+ "name": "_toggleFavorite",
3997
3990
  "privacy": "private",
3998
3991
  "return": {
3999
3992
  "type": {
@@ -4002,29 +3995,23 @@
4002
3995
  },
4003
3996
  "parameters": [
4004
3997
  {
4005
- "name": "char",
4006
- "type": {
4007
- "text": "string"
4008
- }
4009
- },
4010
- {
4011
- "name": "focusable",
3998
+ "name": "e",
4012
3999
  "type": {
4013
- "text": "DropdownItem[]"
4000
+ "text": "Event"
4014
4001
  }
4015
4002
  }
4016
4003
  ],
4017
- "description": "Typeahead character matching with 500ms accumulation"
4004
+ "description": "Toggle favorite state"
4018
4005
  },
4019
4006
  {
4020
- "kind": "field",
4021
- "name": "_isEmpty",
4022
- "type": {
4023
- "text": "boolean"
4024
- },
4007
+ "kind": "method",
4008
+ "name": "_handleClick",
4025
4009
  "privacy": "private",
4026
- "description": "Check whether the menu has zero focusable items",
4027
- "readonly": true
4010
+ "return": {
4011
+ "type": {
4012
+ "text": "void"
4013
+ }
4014
+ }
4028
4015
  },
4029
4016
  {
4030
4017
  "kind": "method",
@@ -4064,96 +4051,116 @@
4064
4051
  "text": "CustomEvent"
4065
4052
  },
4066
4053
  "description": "Fired after first render",
4067
- "name": "btu-dropdown-menu-ready"
4054
+ "name": "btu-dropdown-item-ready"
4055
+ },
4056
+ {
4057
+ "type": {
4058
+ "text": "CustomEvent<{label: string, value: string, selected: boolean}>"
4059
+ },
4060
+ "description": "Fired when item is activated",
4061
+ "name": "btu-dropdown-item-select"
4062
+ },
4063
+ {
4064
+ "type": {
4065
+ "text": "CustomEvent<{label: string, favorited: boolean}>"
4066
+ },
4067
+ "description": "Fired when favorite is toggled",
4068
+ "name": "btu-dropdown-item-favorite"
4068
4069
  }
4069
4070
  ],
4070
4071
  "attributes": [
4071
4072
  {
4072
- "name": "name",
4073
+ "name": "label",
4073
4074
  "type": {
4074
4075
  "text": "string"
4075
4076
  },
4076
4077
  "default": "''",
4077
- "description": "Accessible name for the menu, displayed in header when header is true.",
4078
- "fieldName": "name",
4079
- "attribute": "name"
4078
+ "description": "Display text for the item.",
4079
+ "fieldName": "label",
4080
+ "attribute": "label"
4080
4081
  },
4081
4082
  {
4082
- "name": "header",
4083
+ "name": "type",
4083
4084
  "type": {
4084
- "text": "boolean"
4085
+ "text": "'default' | 'divider' | 'subhead'"
4085
4086
  },
4086
- "default": "false",
4087
- "description": "Show header bar with menu name.",
4088
- "fieldName": "header",
4089
- "attribute": "header"
4087
+ "default": "'default'",
4088
+ "description": "Item type: 'default', 'divider', or 'subhead'.",
4089
+ "fieldName": "type",
4090
+ "attribute": "type"
4090
4091
  },
4091
4092
  {
4092
- "name": "checkbox",
4093
+ "name": "symbol",
4093
4094
  "type": {
4094
- "text": "boolean"
4095
+ "text": "string"
4095
4096
  },
4096
- "default": "false",
4097
- "description": "Enable checkbox mode for items (menuitemcheckbox role).",
4098
- "fieldName": "checkbox",
4099
- "attribute": "checkbox"
4097
+ "default": "''",
4098
+ "description": "Lucide icon symbol.",
4099
+ "fieldName": "symbol",
4100
+ "attribute": "symbol"
4100
4101
  },
4101
4102
  {
4102
- "name": "icon",
4103
+ "name": "shortcut",
4103
4104
  "type": {
4104
- "text": "boolean"
4105
+ "text": "string"
4105
4106
  },
4106
- "default": "false",
4107
- "description": "Show icons before each item.",
4108
- "fieldName": "icon",
4109
- "attribute": "icon"
4107
+ "default": "''",
4108
+ "description": "Keyboard shortcut display text.",
4109
+ "fieldName": "shortcut",
4110
+ "attribute": "shortcut"
4110
4111
  },
4111
4112
  {
4112
- "name": "symbol",
4113
+ "name": "value",
4113
4114
  "type": {
4114
4115
  "text": "string"
4115
4116
  },
4116
4117
  "default": "''",
4117
- "description": "Fallback Lucide icon symbol for items without their own.",
4118
- "fieldName": "symbol",
4119
- "attribute": "symbol"
4118
+ "description": "Optional data value associated with the item.",
4119
+ "fieldName": "value",
4120
+ "attribute": "value"
4120
4121
  },
4121
4122
  {
4122
- "name": "favorites",
4123
+ "name": "disabled",
4123
4124
  "type": {
4124
4125
  "text": "boolean"
4125
4126
  },
4126
4127
  "default": "false",
4127
- "description": "Show favorite toggle on each item.",
4128
- "fieldName": "favorites",
4129
- "attribute": "favorites"
4128
+ "description": "Whether the item is disabled.",
4129
+ "fieldName": "disabled",
4130
+ "attribute": "disabled"
4130
4131
  },
4131
4132
  {
4132
- "name": "shortcuts",
4133
+ "name": "selected",
4133
4134
  "type": {
4134
4135
  "text": "boolean"
4135
4136
  },
4136
4137
  "default": "false",
4137
- "description": "Show keyboard shortcut text on each item.",
4138
- "fieldName": "shortcuts",
4139
- "attribute": "shortcuts"
4138
+ "description": "Whether the item is selected/checked.",
4139
+ "fieldName": "selected",
4140
+ "attribute": "selected"
4140
4141
  },
4141
4142
  {
4142
- "name": "empty-message",
4143
+ "name": "favorited",
4143
4144
  "type": {
4144
- "text": "string"
4145
+ "text": "boolean"
4145
4146
  },
4146
- "default": "'No items available'",
4147
- "description": "Message displayed when the menu has no focusable items.",
4148
- "fieldName": "emptyMessage",
4149
- "attribute": "empty-message"
4147
+ "default": "false",
4148
+ "description": "Whether the item is favorited.",
4149
+ "fieldName": "favorited",
4150
+ "attribute": "favorited"
4151
+ },
4152
+ {
4153
+ "name": "error",
4154
+ "type": {
4155
+ "text": "boolean"
4156
+ },
4157
+ "default": "false",
4158
+ "description": "Whether the item has an error.",
4159
+ "fieldName": "error",
4160
+ "attribute": "error"
4150
4161
  }
4151
4162
  ],
4152
4163
  "mixins": [
4153
- {
4154
- "name": "RovingTabindexMixin",
4155
- "module": "/src/util/RovingTabindexMixin.js"
4156
- },
4157
4164
  {
4158
4165
  "name": "EventEmitterMixin",
4159
4166
  "module": "/src/util/EventEmitterMixin.js"
@@ -4167,7 +4174,7 @@
4167
4174
  "name": "LitElement",
4168
4175
  "package": "lit"
4169
4176
  },
4170
- "tagName": "btu-dropdown-menu",
4177
+ "tagName": "btu-dropdown-item",
4171
4178
  "customElement": true
4172
4179
  }
4173
4180
  ],
@@ -4176,155 +4183,188 @@
4176
4183
  "kind": "js",
4177
4184
  "name": "default",
4178
4185
  "declaration": {
4179
- "name": "DropdownMenu",
4180
- "module": "src/components/dropdown/DropdownMenu.ts"
4186
+ "name": "DropdownItem",
4187
+ "module": "src/components/dropdown/DropdownItem.ts"
4181
4188
  }
4182
4189
  },
4183
4190
  {
4184
4191
  "kind": "custom-element-definition",
4185
- "name": "btu-dropdown-menu",
4192
+ "name": "btu-dropdown-item",
4186
4193
  "declaration": {
4187
- "name": "DropdownMenu",
4188
- "module": "src/components/dropdown/DropdownMenu.ts"
4194
+ "name": "DropdownItem",
4195
+ "module": "src/components/dropdown/DropdownItem.ts"
4189
4196
  }
4190
4197
  }
4191
4198
  ]
4192
4199
  },
4193
4200
  {
4194
4201
  "kind": "javascript-module",
4195
- "path": "src/components/button-group/ButtonGroup.ts",
4202
+ "path": "src/components/dropdown/DropdownMenu.ts",
4196
4203
  "declarations": [
4197
4204
  {
4198
4205
  "kind": "class",
4199
- "description": "A semantic container for grouping related buttons together.\n\nSupports connected (joined) and spaced layouts, horizontal and vertical\norientation, group-level size and disabled propagation, and optional\ntoggle/selection modes (single-select or multi-select).",
4200
- "name": "ButtonGroup",
4206
+ "description": "A menu container component that provides keyboard navigation and ARIA menu semantics.\n\nContains `btu-dropdown-item` children and manages roving tabindex, typeahead search,\nand keyboard navigation following the WAI-ARIA Menu Button Pattern.",
4207
+ "name": "DropdownMenu",
4201
4208
  "cssProperties": [
4202
4209
  {
4203
- "description": "Space between buttons when variant=\"spaced\" (default: spacing.sm)",
4204
- "name": "--button-group-gap"
4205
- },
4206
- {
4207
- "description": "Corner radius of outer edges when variant=\"connected\" (default: 0.5rem)",
4208
- "name": "--button-group-border-radius"
4209
- },
4210
- {
4211
- "description": "Internal divider color between connected buttons (default: gray-300)",
4212
- "name": "--button-group-border-color"
4213
- },
4214
- {
4215
- "description": "Background of a toggled/selected child (default: primary-50)",
4216
- "name": "--button-group-selection-bg"
4217
- },
4218
- {
4219
- "description": "Text/icon color of a toggled/selected child (default: primary-700)",
4220
- "name": "--button-group-selection-color"
4221
- },
4222
- {
4223
- "description": "Highlight color of the selection shimmer effect (default: primary-200)",
4224
- "name": "--button-group-shimmer-highlight"
4210
+ "description": "Empty state text color (default: gray-400)",
4211
+ "name": "--dropdown-empty-color"
4225
4212
  }
4226
4213
  ],
4227
4214
  "slots": [
4228
4215
  {
4229
- "description": "One or more btu-button or btu-icon-button elements to display in the group",
4216
+ "description": "Menu items (`btu-dropdown-item` elements)",
4230
4217
  "name": ""
4231
- },
4232
- {
4233
- "description": "Pushes the child to the end of the group via auto-margin (vertical: bottom, horizontal: right)",
4234
- "name": "end"
4235
4218
  }
4236
4219
  ],
4237
4220
  "members": [
4238
4221
  {
4239
4222
  "kind": "field",
4240
- "name": "tagName",
4241
- "static": true,
4242
- "readonly": true
4243
- },
4244
- {
4245
- "kind": "field",
4246
- "name": "label",
4223
+ "name": "name",
4247
4224
  "type": {
4248
4225
  "text": "string"
4249
4226
  },
4250
4227
  "default": "''",
4251
- "description": "Accessible name for the group, announced by assistive devices via aria-label.",
4252
- "attribute": "label"
4228
+ "description": "Accessible name for the menu, displayed in header when header is true.",
4229
+ "attribute": "name"
4253
4230
  },
4254
4231
  {
4255
4232
  "kind": "field",
4256
- "name": "orientation",
4233
+ "name": "header",
4257
4234
  "type": {
4258
- "text": "'horizontal' | 'vertical'"
4235
+ "text": "boolean"
4259
4236
  },
4260
- "default": "'horizontal'",
4261
- "description": "Layout direction of the buttons.",
4262
- "attribute": "orientation",
4263
- "reflects": true
4237
+ "default": "false",
4238
+ "description": "Show header bar with menu name.",
4239
+ "attribute": "header"
4264
4240
  },
4265
4241
  {
4266
4242
  "kind": "field",
4267
- "name": "variant",
4243
+ "name": "checkbox",
4268
4244
  "type": {
4269
- "text": "'connected' | 'spaced'"
4245
+ "text": "boolean"
4270
4246
  },
4271
- "default": "'connected'",
4272
- "description": "`connected` collapses shared borders for a joined appearance.\n`spaced` renders buttons with a gap.",
4273
- "attribute": "variant",
4274
- "reflects": true
4247
+ "default": "false",
4248
+ "description": "Enable checkbox mode for items (menuitemcheckbox role).",
4249
+ "attribute": "checkbox"
4250
+ },
4251
+ {
4252
+ "kind": "field",
4253
+ "name": "icon",
4254
+ "type": {
4255
+ "text": "boolean"
4256
+ },
4257
+ "default": "false",
4258
+ "description": "Show icons before each item.",
4259
+ "attribute": "icon"
4275
4260
  },
4276
4261
  {
4277
4262
  "kind": "field",
4278
- "name": "size",
4263
+ "name": "symbol",
4279
4264
  "type": {
4280
- "text": "'sm' | 'md' | 'lg'"
4265
+ "text": "string"
4281
4266
  },
4282
- "default": "'md'",
4283
- "description": "Propagates a uniform size to all child buttons.",
4284
- "attribute": "size",
4285
- "reflects": true
4267
+ "default": "''",
4268
+ "description": "Fallback Lucide icon symbol for items without their own.",
4269
+ "attribute": "symbol"
4286
4270
  },
4287
4271
  {
4288
4272
  "kind": "field",
4289
- "name": "disabled",
4273
+ "name": "favorites",
4290
4274
  "type": {
4291
4275
  "text": "boolean"
4292
4276
  },
4293
4277
  "default": "false",
4294
- "description": "When true, disables all child buttons as a group.",
4295
- "attribute": "disabled"
4278
+ "description": "Show favorite toggle on each item.",
4279
+ "attribute": "favorites"
4296
4280
  },
4297
4281
  {
4298
4282
  "kind": "field",
4299
- "name": "selection",
4283
+ "name": "shortcuts",
4300
4284
  "type": {
4301
- "text": "'none' | 'single' | 'multiple'"
4285
+ "text": "boolean"
4302
4286
  },
4303
- "default": "'none'",
4304
- "description": "Enables toggle/selection behavior.\n`single` allows one active button; `multiple` allows many.",
4305
- "attribute": "selection",
4306
- "reflects": true
4287
+ "default": "false",
4288
+ "description": "Show keyboard shortcut text on each item.",
4289
+ "attribute": "shortcuts"
4307
4290
  },
4308
4291
  {
4309
4292
  "kind": "field",
4310
- "name": "value",
4293
+ "name": "emptyMessage",
4311
4294
  "type": {
4312
4295
  "text": "string"
4313
4296
  },
4314
- "default": "''",
4315
- "description": "Reflects the currently selected button value(s).\nFor `single`, the value of the active button.\nFor `multiple`, a comma-delimited list of active values.",
4316
- "attribute": "value",
4317
- "reflects": true
4297
+ "default": "'No items available'",
4298
+ "description": "Message displayed when the menu has no focusable items.",
4299
+ "attribute": "empty-message"
4300
+ },
4301
+ {
4302
+ "kind": "method",
4303
+ "name": "_configureItems",
4304
+ "privacy": "private",
4305
+ "return": {
4306
+ "type": {
4307
+ "text": "void"
4308
+ }
4309
+ },
4310
+ "description": "Configure all child items with menu-level settings"
4311
+ },
4312
+ {
4313
+ "kind": "method",
4314
+ "name": "_getAllItems",
4315
+ "privacy": "private",
4316
+ "return": {
4317
+ "type": {
4318
+ "text": "DropdownItem[]"
4319
+ }
4320
+ },
4321
+ "description": "Get all btu-dropdown-item children"
4322
+ },
4323
+ {
4324
+ "kind": "method",
4325
+ "name": "_getFocusableItems",
4326
+ "privacy": "private",
4327
+ "return": {
4328
+ "type": {
4329
+ "text": "DropdownItem[]"
4330
+ }
4331
+ },
4332
+ "description": "Get only focusable items (default type, skip dividers/subheads)"
4333
+ },
4334
+ {
4335
+ "kind": "method",
4336
+ "name": "_handleTypeahead",
4337
+ "privacy": "private",
4338
+ "return": {
4339
+ "type": {
4340
+ "text": "void"
4341
+ }
4342
+ },
4343
+ "parameters": [
4344
+ {
4345
+ "name": "char",
4346
+ "type": {
4347
+ "text": "string"
4348
+ }
4349
+ },
4350
+ {
4351
+ "name": "focusable",
4352
+ "type": {
4353
+ "text": "DropdownItem[]"
4354
+ }
4355
+ }
4356
+ ],
4357
+ "description": "Typeahead character matching with 500ms accumulation"
4318
4358
  },
4319
4359
  {
4320
4360
  "kind": "field",
4321
- "name": "name",
4361
+ "name": "_isEmpty",
4322
4362
  "type": {
4323
- "text": "string"
4363
+ "text": "boolean"
4324
4364
  },
4325
- "default": "''",
4326
- "description": "When set, creates hidden input(s) for native form participation.",
4327
- "attribute": "name"
4365
+ "privacy": "private",
4366
+ "description": "Check whether the menu has zero focusable items",
4367
+ "readonly": true
4328
4368
  },
4329
4369
  {
4330
4370
  "kind": "method",
@@ -4363,126 +4403,90 @@
4363
4403
  "type": {
4364
4404
  "text": "CustomEvent"
4365
4405
  },
4366
- "description": "Fired after first render and initialization",
4367
- "name": "btu-button-group-ready"
4368
- },
4369
- {
4370
- "type": {
4371
- "text": "CustomEvent<{value: string}>"
4372
- },
4373
- "description": "Fired when selection changes (single/multiple modes only)",
4374
- "name": "btu-button-group-change"
4375
- },
4376
- {
4377
- "type": {
4378
- "text": "CustomEvent<{name: string | undefined}>"
4379
- },
4380
- "description": "Bubbles from child btu-icon-button elements when clicked",
4381
- "name": "btu-icon-button-click"
4406
+ "description": "Fired after first render",
4407
+ "name": "btu-dropdown-menu-ready"
4382
4408
  }
4383
4409
  ],
4384
4410
  "attributes": [
4385
4411
  {
4386
- "name": "label",
4412
+ "name": "name",
4387
4413
  "type": {
4388
4414
  "text": "string"
4389
4415
  },
4390
4416
  "default": "''",
4391
- "description": "Accessible name for the group, announced by assistive devices via aria-label.",
4392
- "fieldName": "label",
4393
- "attribute": "label"
4417
+ "description": "Accessible name for the menu, displayed in header when header is true.",
4418
+ "fieldName": "name",
4419
+ "attribute": "name"
4394
4420
  },
4395
4421
  {
4396
- "name": "orientation",
4422
+ "name": "header",
4397
4423
  "type": {
4398
- "text": "'horizontal' | 'vertical'"
4424
+ "text": "boolean"
4399
4425
  },
4400
- "default": "'horizontal'",
4401
- "description": "Layout direction of the buttons.",
4402
- "fieldName": "orientation",
4403
- "attribute": "orientation"
4426
+ "default": "false",
4427
+ "description": "Show header bar with menu name.",
4428
+ "fieldName": "header",
4429
+ "attribute": "header"
4404
4430
  },
4405
4431
  {
4406
- "name": "variant",
4432
+ "name": "checkbox",
4407
4433
  "type": {
4408
- "text": "'connected' | 'spaced'"
4434
+ "text": "boolean"
4409
4435
  },
4410
- "default": "'connected'",
4411
- "description": "`connected` collapses shared borders for a joined appearance.\n`spaced` renders buttons with a gap.",
4412
- "fieldName": "variant",
4413
- "attribute": "variant"
4436
+ "default": "false",
4437
+ "description": "Enable checkbox mode for items (menuitemcheckbox role).",
4438
+ "fieldName": "checkbox",
4439
+ "attribute": "checkbox"
4414
4440
  },
4415
4441
  {
4416
- "name": "size",
4442
+ "name": "icon",
4417
4443
  "type": {
4418
- "text": "'sm' | 'md' | 'lg'"
4444
+ "text": "boolean"
4419
4445
  },
4420
- "default": "'md'",
4421
- "description": "Propagates a uniform size to all child buttons.",
4422
- "fieldName": "size",
4423
- "attribute": "size"
4446
+ "default": "false",
4447
+ "description": "Show icons before each item.",
4448
+ "fieldName": "icon",
4449
+ "attribute": "icon"
4424
4450
  },
4425
4451
  {
4426
- "name": "disabled",
4452
+ "name": "symbol",
4427
4453
  "type": {
4428
- "text": "boolean"
4454
+ "text": "string"
4429
4455
  },
4430
- "default": "false",
4431
- "description": "When true, disables all child buttons as a group.",
4432
- "fieldName": "disabled",
4433
- "attribute": "disabled"
4456
+ "default": "''",
4457
+ "description": "Fallback Lucide icon symbol for items without their own.",
4458
+ "fieldName": "symbol",
4459
+ "attribute": "symbol"
4434
4460
  },
4435
4461
  {
4436
- "name": "selection",
4462
+ "name": "favorites",
4437
4463
  "type": {
4438
- "text": "'none' | 'single' | 'multiple'"
4464
+ "text": "boolean"
4439
4465
  },
4440
- "default": "'none'",
4441
- "description": "Enables toggle/selection behavior.\n`single` allows one active button; `multiple` allows many.",
4442
- "fieldName": "selection",
4443
- "attribute": "selection"
4466
+ "default": "false",
4467
+ "description": "Show favorite toggle on each item.",
4468
+ "fieldName": "favorites",
4469
+ "attribute": "favorites"
4444
4470
  },
4445
4471
  {
4446
- "name": "value",
4472
+ "name": "shortcuts",
4447
4473
  "type": {
4448
- "text": "string"
4474
+ "text": "boolean"
4449
4475
  },
4450
- "default": "''",
4451
- "description": "Reflects the currently selected button value(s).\nFor `single`, the value of the active button.\nFor `multiple`, a comma-delimited list of active values.",
4452
- "fieldName": "value",
4453
- "attribute": "value"
4476
+ "default": "false",
4477
+ "description": "Show keyboard shortcut text on each item.",
4478
+ "fieldName": "shortcuts",
4479
+ "attribute": "shortcuts"
4454
4480
  },
4455
4481
  {
4456
- "name": "name",
4482
+ "name": "empty-message",
4457
4483
  "type": {
4458
4484
  "text": "string"
4459
4485
  },
4460
- "default": "''",
4461
- "description": "When set, creates hidden input(s) for native form participation.",
4462
- "fieldName": "name",
4463
- "attribute": "name"
4464
- }
4465
- ],
4466
- "cssStates": [
4467
- {
4468
- "description": "Applied when variant=\"connected\", targetable via :state(btu-connected)",
4469
- "name": "btu-connected"
4470
- },
4471
- {
4472
- "description": "Applied when variant=\"spaced\", targetable via :state(btu-spaced)",
4473
- "name": "btu-spaced"
4474
- },
4475
- {
4476
- "description": "Applied when orientation=\"horizontal\", targetable via :state(btu-horizontal)",
4477
- "name": "btu-horizontal"
4478
- },
4479
- {
4480
- "description": "Applied when orientation=\"vertical\", targetable via :state(btu-vertical)",
4481
- "name": "btu-vertical"
4482
- },
4483
- {
4484
- "description": "Applied when the group is disabled, targetable via :state(btu-disabled)",
4485
- "name": "btu-disabled"
4486
+ "default": "'No items available'",
4487
+ "description": "Message displayed when the menu has no focusable items.",
4488
+ "fieldName": "emptyMessage",
4489
+ "attribute": "empty-message"
4486
4490
  }
4487
4491
  ],
4488
4492
  "mixins": [
@@ -4490,10 +4494,6 @@
4490
4494
  "name": "RovingTabindexMixin",
4491
4495
  "module": "/src/util/RovingTabindexMixin.js"
4492
4496
  },
4493
- {
4494
- "name": "ComponentStatesMixin",
4495
- "module": "/src/util/ComponentStatesMixin.js"
4496
- },
4497
4497
  {
4498
4498
  "name": "EventEmitterMixin",
4499
4499
  "module": "/src/util/EventEmitterMixin.js"
@@ -4507,7 +4507,7 @@
4507
4507
  "name": "LitElement",
4508
4508
  "package": "lit"
4509
4509
  },
4510
- "tagName": "btu-button-group",
4510
+ "tagName": "btu-dropdown-menu",
4511
4511
  "customElement": true
4512
4512
  }
4513
4513
  ],
@@ -4516,16 +4516,16 @@
4516
4516
  "kind": "js",
4517
4517
  "name": "default",
4518
4518
  "declaration": {
4519
- "name": "ButtonGroup",
4520
- "module": "src/components/button-group/ButtonGroup.ts"
4519
+ "name": "DropdownMenu",
4520
+ "module": "src/components/dropdown/DropdownMenu.ts"
4521
4521
  }
4522
4522
  },
4523
4523
  {
4524
4524
  "kind": "custom-element-definition",
4525
- "name": "btu-button-group",
4525
+ "name": "btu-dropdown-menu",
4526
4526
  "declaration": {
4527
- "name": "ButtonGroup",
4528
- "module": "src/components/button-group/ButtonGroup.ts"
4527
+ "name": "DropdownMenu",
4528
+ "module": "src/components/dropdown/DropdownMenu.ts"
4529
4529
  }
4530
4530
  }
4531
4531
  ]