@brightspot/ui 6.8.1 → 6.8.2

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 (170) hide show
  1. package/CHANGELOG.md +661 -0
  2. package/README.md +18 -2
  3. package/dist/storybook/CHANGELOG.md +661 -0
  4. package/dist/storybook/README.md +195 -0
  5. package/dist/storybook/assets/{ActionBar.stories-BOXYJYXy.js → ActionBar.stories-TlhuCumU.js} +1 -1
  6. package/dist/storybook/assets/{ActionItem-WoDvowFu.js → ActionItem-CjtyGLd5.js} +1 -1
  7. package/dist/storybook/assets/{ActionItem.stories-CVFoWP54.js → ActionItem.stories-BVlNQvfP.js} +1 -1
  8. package/dist/storybook/assets/{AiSparkle.stories-Psv9jNpy.js → AiSparkle.stories-DMzc8JUe.js} +2 -2
  9. package/dist/storybook/assets/{Avatar-CIQcHS8b.js → Avatar-C6Li1sPI.js} +1 -1
  10. package/dist/storybook/assets/{Avatar.stories-BE2Xn8fx.js → Avatar.stories-COj6XrPn.js} +1 -1
  11. package/dist/storybook/assets/{AvatarGroup-Chs0VKPg.js → AvatarGroup-DgxRTZBe.js} +1 -1
  12. package/dist/storybook/assets/{AvatarGroup.stories-2ar6gCeX.js → AvatarGroup.stories-Dh3e7iN2.js} +1 -1
  13. package/dist/storybook/assets/{Badge-AV20mCMJ.js → Badge-bWrvpEgX.js} +1 -1
  14. package/dist/storybook/assets/{Badge.stories-w9LqNw0A.js → Badge.stories-KXpmEXpt.js} +1 -1
  15. package/dist/storybook/assets/{Banner.stories-Clhh1bBs.js → Banner.stories-Cnhm3dXK.js} +1 -1
  16. package/dist/storybook/assets/{Button-B7fn_wd5.js → Button-DE0s-gat.js} +1 -1
  17. package/dist/storybook/assets/{Button.stories-5h4M8nd2.js → Button.stories-Cwg1YZEb.js} +1 -1
  18. package/dist/storybook/assets/{ButtonGroup-BmndBsBy.js → ButtonGroup-CoLI5nGO.js} +1 -1
  19. package/dist/storybook/assets/{ButtonGroup.stories-CR1H4H7u.js → ButtonGroup.stories-VhnKPP1n.js} +1 -1
  20. package/dist/storybook/assets/{Card.stories-Bz5vXq5y.js → Card.stories-BgpL90zB.js} +1 -1
  21. package/dist/storybook/assets/{Celebrate.stories-Bu3CNw0k.js → Celebrate.stories-D3NJgYcX.js} +1 -1
  22. package/dist/storybook/assets/{Checkbox-BALsanB1.js → Checkbox-BC1T_KxW.js} +1 -1
  23. package/dist/storybook/assets/{Checkbox.stories-BdvCht5c.js → Checkbox.stories-AFQNz7dQ.js} +1 -1
  24. package/dist/storybook/assets/{CircularProgress-BeE2fWON.js → CircularProgress-eqVb2jUD.js} +1 -1
  25. package/dist/storybook/assets/{CircularProgress.stories-CL8Lc6eU.js → CircularProgress.stories-B6t8VhmJ.js} +1 -1
  26. package/dist/storybook/assets/{ClipboardMixin-C6wcbXIO.js → ClipboardMixin-DcxrOy5B.js} +1 -1
  27. package/dist/storybook/assets/{ClipboardMixin.stories-BsjzC7wd.js → ClipboardMixin.stories-BqtQMjmS.js} +1 -1
  28. package/dist/storybook/assets/{Color-6BZIO3FS-Dsd6EVV9.js → Color-6BZIO3FS-CDluohEc.js} +1 -1
  29. package/dist/storybook/assets/{Colors.stories-CkCdNN9Y.js → Colors.stories-CqTniDIa.js} +1 -1
  30. package/dist/storybook/assets/{CombinedEffects.stories-QG78pIiG.js → CombinedEffects.stories-FwW0chy5.js} +1 -1
  31. package/dist/storybook/assets/{ComponentStatesMixin-CG-Dx_Vk.js → ComponentStatesMixin-hUqOL2aW.js} +1 -1
  32. package/dist/storybook/assets/{ComponentStatesMixin.stories-B1yuAqua.js → ComponentStatesMixin.stories-CwGoq685.js} +1 -1
  33. package/dist/storybook/assets/{CopyToClipboard.stories-CyKcumJ9.js → CopyToClipboard.stories-DUGjgtQx.js} +1 -1
  34. package/dist/storybook/assets/{Debounce.stories-BuNskQ33.js → Debounce.stories-CrWfXhKS.js} +1 -1
  35. package/dist/storybook/assets/{DocsRenderer-LL677BLK-BrPyc8XX.js → DocsRenderer-LL677BLK-9e51z9Xc.js} +3 -3
  36. package/dist/storybook/assets/{Dropdown.stories-DHXeP07z.js → Dropdown.stories-BsBxV0wp.js} +1 -1
  37. package/dist/storybook/assets/{DropdownMenu-WoWnJiQk.js → DropdownMenu-B-LvOIGj.js} +1 -1
  38. package/dist/storybook/assets/{EmptyState.stories-BRoVusey.js → EmptyState.stories-CJ1w8Tp2.js} +1 -1
  39. package/dist/storybook/assets/{EscaAvatar.stories-CWAE-4Uz.js → EscaAvatar.stories-BoLLSj9q.js} +2 -2
  40. package/dist/storybook/assets/{Events.stories-D-npDwlx.js → Events.stories-C3sTBwPJ.js} +1 -1
  41. package/dist/storybook/assets/{Heading.stories-D7hmvFEN.js → Heading.stories-jmXDRBmM.js} +1 -1
  42. package/dist/storybook/assets/{HueRipple.stories-Dx3ozdHi.js → HueRipple.stories-BPx5aSYd.js} +1 -1
  43. package/dist/storybook/assets/{Icon-DPQKiWDz.js → Icon-CWyJRQf7.js} +1 -1
  44. package/dist/storybook/assets/{Icon.stories-CVsQvcwd.js → Icon.stories-iYBxmv2x.js} +1 -1
  45. package/dist/storybook/assets/{IconButton-Dp4Z06bL.js → IconButton-Di5Rgs7F.js} +1 -1
  46. package/dist/storybook/assets/{IconButton.stories-DTbfHfcQ.js → IconButton.stories-DENLoxVk.js} +1 -1
  47. package/dist/storybook/assets/{LinearProgress-DG3tPlGH.js → LinearProgress-D9ngIVlv.js} +1 -1
  48. package/dist/storybook/assets/{LinearProgress.stories-VIU6OqYd.js → LinearProgress.stories-u90B_VJR.js} +1 -1
  49. package/dist/storybook/assets/{Message-BzkpGg8z.js → Message-nFAa55c_.js} +1 -1
  50. package/dist/storybook/assets/{Message.stories-C9bzoQes.js → Message.stories-B4rpz5rI.js} +1 -1
  51. package/dist/storybook/assets/{OnFindMixin-CeeYfx9k.js → OnFindMixin-oL1bvTFj.js} +1 -1
  52. package/dist/storybook/assets/{OnFindMixin.stories-Dq06nuVf.js → OnFindMixin.stories-CdeS5sFA.js} +1 -1
  53. package/dist/storybook/assets/{Pagination-CnWa6AX5.js → Pagination-CSWcjuDU.js} +1 -1
  54. package/dist/storybook/assets/{Pagination.stories-BsH2eN2W.js → Pagination.stories-Da2WzJkv.js} +1 -1
  55. package/dist/storybook/assets/{Popover.stories-CLnzpgEE.js → Popover.stories-CVljlVHc.js} +1 -1
  56. package/dist/storybook/assets/{ProgressMixin-D1atDw3n.js → ProgressMixin-CeSrn0_P.js} +1 -1
  57. package/dist/storybook/assets/{Radio-B6Aq6K0V.js → Radio-rvfGhZwK.js} +1 -1
  58. package/dist/storybook/assets/{Radio.stories-BCVbISmb.js → Radio.stories-B0wHdJuc.js} +1 -1
  59. package/dist/storybook/assets/{RadioGroup.stories-B-TGP_-v.js → RadioGroup.stories-D8krOSlP.js} +1 -1
  60. package/dist/storybook/assets/{ReadyMixin-C8HW2nGE.js → ReadyMixin-CvX_eidU.js} +1 -1
  61. package/dist/storybook/assets/{RovingTabindexMixin-DI5rmyR7.js → RovingTabindexMixin-9z8lwaM9.js} +1 -1
  62. package/dist/storybook/assets/{RovingTabindexMixin.stories-DVKCC_R7.js → RovingTabindexMixin.stories-Y8vBWjJp.js} +1 -1
  63. package/dist/storybook/assets/{Rtc.stories-bBYHOszW.js → Rtc.stories-D3Y-z8y_.js} +1 -1
  64. package/dist/storybook/assets/{ScrollShadow.stories-BIK8YINt.js → ScrollShadow.stories-1KD0lWHX.js} +1 -1
  65. package/dist/storybook/assets/{Switch.stories-COEk74kM.js → Switch.stories-Bsqvm_HE.js} +1 -1
  66. package/dist/storybook/assets/{Tab.stories-Dbt9JvSx.js → Tab.stories-CzcTisNs.js} +1 -1
  67. package/dist/storybook/assets/{Tabs-BIScOPS0.js → Tabs-DdpYNZSW.js} +1 -1
  68. package/dist/storybook/assets/{Tabs.stories-CodKgVf2.js → Tabs.stories-UOS3V0J4.js} +1 -1
  69. package/dist/storybook/assets/{Throttle.stories-BhIqWWrQ.js → Throttle.stories-C8jgzh6e.js} +1 -1
  70. package/dist/storybook/assets/{Tooltip.stories-DKD8nBM1.js → Tooltip.stories-B5BoI0cH.js} +1 -1
  71. package/dist/storybook/assets/{TooltipMixin-CRNNusJ7.js → TooltipMixin-CVKslCDt.js} +1 -1
  72. package/dist/storybook/assets/{Upload.stories-WTO15ST1.js → Upload.stories-BsQDCDqo.js} +1 -1
  73. package/dist/storybook/assets/{UploadItem-DejgZ5A0.js → UploadItem-CYQqNwUF.js} +1 -1
  74. package/dist/storybook/assets/{UploadItem.stories-Pk3ghOcI.js → UploadItem.stories-_le7XBTV.js} +1 -1
  75. package/dist/storybook/assets/{Welcome.stories-DrNnxvt9.js → Welcome.stories-rramKkhd.js} +33 -3
  76. package/dist/storybook/assets/{Widget.stories-CYC5Qdac.js → Widget.stories-DtbAaklk.js} +1 -1
  77. package/dist/storybook/assets/{WithTooltip-65CFNBJE-DK6PZNaa.js → WithTooltip-65CFNBJE-DK6GcBuR.js} +1 -1
  78. package/dist/storybook/assets/{blocks-Dzcxb014.js → blocks-DHnzPh43.js} +5 -5
  79. package/dist/storybook/assets/{formatter-EIJCOSYU-PioIuXjk.js → formatter-EIJCOSYU-qig-qWlG.js} +1 -1
  80. package/dist/storybook/assets/if-defined-DerKRcyC.js +1 -0
  81. package/dist/storybook/assets/{iframe-Byo_x5o2.js → iframe-DlBK9Drk.js} +3 -3
  82. package/dist/storybook/assets/{index-gox-Wle0.js → index-CItQyB37.js} +1 -1
  83. package/dist/storybook/assets/{lottie_svg-3t2UJxjZ.js → lottie_svg-C3v6xdng.js} +1 -1
  84. package/dist/storybook/assets/{onFind-BWiaccUj.js → onFind-Ci35eu2y.js} +1 -1
  85. package/dist/storybook/assets/{onFind.stories-CC_XTN2G.js → onFind.stories-BmbwWWo1.js} +1 -1
  86. package/dist/storybook/assets/{onRemove.stories-CXxpL4ud.js → onRemove.stories-DFWCIgE4.js} +1 -1
  87. package/dist/storybook/assets/{onVisible.stories-DKA9cexx.js → onVisible.stories-B-onpgE-.js} +1 -1
  88. package/dist/storybook/assets/{property-_few0Xe5.js → property-Bmq4RTSP.js} +1 -1
  89. package/dist/storybook/assets/{ref-BaIdO8Sk.js → ref-BhKk4SDh.js} +1 -1
  90. package/dist/storybook/assets/state-DVIUS0Gf.js +1 -0
  91. package/dist/storybook/assets/{style-map-DxZm5Cj7.js → style-map-DE4G47KD.js} +1 -1
  92. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-B0_bSGZz.js → syntaxhighlighter-ED5Y7EFY-Dfgnal1d.js} +1 -1
  93. package/dist/storybook/custom-elements.json +11835 -0
  94. package/dist/storybook/docs/components/ActionBar.md +55 -0
  95. package/dist/storybook/docs/components/ActionItem.md +50 -0
  96. package/dist/storybook/docs/components/AiSparkle.md +33 -0
  97. package/dist/storybook/docs/components/Avatar.md +45 -0
  98. package/dist/storybook/docs/components/AvatarGroup.md +34 -0
  99. package/dist/storybook/docs/components/Badge.md +47 -0
  100. package/dist/storybook/docs/components/Banner.md +35 -0
  101. package/dist/storybook/docs/components/ButtonGroup.md +65 -0
  102. package/dist/storybook/docs/components/Card.md +67 -0
  103. package/dist/storybook/docs/components/Checkbox.md +49 -0
  104. package/dist/storybook/docs/components/CircularProgress.md +40 -0
  105. package/dist/storybook/docs/components/CopyToClipboard.md +51 -0
  106. package/dist/storybook/docs/components/Dropdown.md +74 -0
  107. package/dist/storybook/docs/components/DropdownItem.md +45 -0
  108. package/dist/storybook/docs/components/DropdownMenu.md +41 -0
  109. package/dist/storybook/docs/components/EmptyState.md +62 -0
  110. package/dist/storybook/docs/components/EscaAvatar.md +40 -0
  111. package/dist/storybook/docs/components/Icon.md +40 -0
  112. package/dist/storybook/docs/components/IconButton.md +36 -0
  113. package/dist/storybook/docs/components/LinearProgress.md +37 -0
  114. package/dist/storybook/docs/components/Message.md +50 -0
  115. package/dist/storybook/docs/components/Pagination.md +70 -0
  116. package/dist/storybook/docs/components/Popover.md +59 -0
  117. package/dist/storybook/docs/components/README.md +48 -0
  118. package/dist/storybook/docs/components/Radio.md +55 -0
  119. package/dist/storybook/docs/components/RadioGroup.md +34 -0
  120. package/dist/storybook/docs/components/Switch.md +48 -0
  121. package/dist/storybook/docs/components/Tab.md +40 -0
  122. package/dist/storybook/docs/components/Tabs.md +49 -0
  123. package/dist/storybook/docs/components/Upload.md +63 -0
  124. package/dist/storybook/docs/components/UploadItem.md +30 -0
  125. package/dist/storybook/docs/components/Widget.md +88 -0
  126. package/dist/storybook/docs/dari-elements.md +55 -0
  127. package/dist/storybook/iframe.html +1 -1
  128. package/dist/storybook/index.html +29 -2
  129. package/dist/storybook/llms-full.txt +1721 -0
  130. package/dist/storybook/llms.txt +65 -0
  131. package/dist/storybook/project.json +1 -1
  132. package/dist/storybook/robots.txt +7 -0
  133. package/dist/storybook/sb-addons/storybook-3/manager-bundle.js +1 -1
  134. package/dist/storybook/sitemap.xml +90 -0
  135. package/docs/components/ActionBar.md +41 -64
  136. package/docs/components/ActionItem.md +50 -96
  137. package/docs/components/AiSparkle.md +23 -60
  138. package/docs/components/Avatar.md +45 -88
  139. package/docs/components/AvatarGroup.md +24 -44
  140. package/docs/components/Badge.md +34 -62
  141. package/docs/components/Banner.md +25 -39
  142. package/docs/components/ButtonGroup.md +65 -99
  143. package/docs/components/Card.md +67 -83
  144. package/docs/components/Checkbox.md +49 -91
  145. package/docs/components/CircularProgress.md +40 -84
  146. package/docs/components/CopyToClipboard.md +35 -40
  147. package/docs/components/Dropdown.md +74 -120
  148. package/docs/components/DropdownItem.md +45 -81
  149. package/docs/components/DropdownMenu.md +30 -70
  150. package/docs/components/EmptyState.md +45 -62
  151. package/docs/components/EscaAvatar.md +30 -61
  152. package/docs/components/Icon.md +29 -62
  153. package/docs/components/IconButton.md +36 -83
  154. package/docs/components/LinearProgress.md +28 -70
  155. package/docs/components/Message.md +38 -63
  156. package/docs/components/Pagination.md +70 -100
  157. package/docs/components/Popover.md +46 -79
  158. package/docs/components/README.md +34 -40
  159. package/docs/components/Radio.md +55 -105
  160. package/docs/components/RadioGroup.md +26 -55
  161. package/docs/components/Switch.md +48 -84
  162. package/docs/components/Tab.md +30 -70
  163. package/docs/components/Tabs.md +49 -86
  164. package/docs/components/Upload.md +63 -112
  165. package/docs/components/UploadItem.md +22 -53
  166. package/docs/components/Widget.md +66 -67
  167. package/llms.txt +63 -0
  168. package/package.json +8 -6
  169. package/dist/storybook/assets/if-defined-DL7cQU7O.js +0 -1
  170. package/dist/storybook/assets/state-BBcPmYaV.js +0 -1
@@ -1,81 +1,41 @@
1
- # `src/components/dropdown/DropdownMenu.ts`:
1
+ # `<btu-dropdown-menu>`
2
2
 
3
- ## class: `DropdownMenu`, `btu-dropdown-menu`
3
+ A menu container component that provides keyboard navigation and ARIA menu semantics.
4
4
 
5
- ### Superclass
5
+ Contains `btu-dropdown-item` children and manages roving tabindex, typeahead search,
6
+ and keyboard navigation following the WAI-ARIA Menu Button Pattern.
6
7
 
7
- | Name | Module | Package |
8
- | ------------ | ------ | ------- |
9
- | `LitElement` | | lit |
8
+ ```js
9
+ import '@brightspot/ui/components/dropdown/DropdownMenu.js'
10
+ ```
10
11
 
11
- ### Mixins
12
+ ## Attributes
12
13
 
13
- | Name | Module | Package |
14
- | --------------------- | -------------------------------- | ------- |
15
- | `RovingTabindexMixin` | /src/util/RovingTabindexMixin.js | |
16
- | `EventEmitterMixin` | /src/util/EventEmitterMixin.js | |
17
- | `ReadyMixin` | /src/util/ReadyMixin.js | |
14
+ | Attribute | Property | Type | Default | Description |
15
+ | --- | --- | --- | --- | --- |
16
+ | `name` | `name` | `string` | `''` | Accessible name for the menu, displayed in header when header is true. |
17
+ | `header` | `header` | `boolean` | `false` | Show header bar with menu name. |
18
+ | `checkbox` | `checkbox` | `boolean` | `false` | Enable checkbox mode for items (menuitemcheckbox role). |
19
+ | `icon` | `icon` | `boolean` | `false` | Show icons before each item. |
20
+ | `symbol` | `symbol` | `string` | `''` | Fallback Lucide icon symbol for items without their own. |
21
+ | `favorites` | `favorites` | `boolean` | `false` | Show favorite toggle on each item. |
22
+ | `shortcuts` | `shortcuts` | `boolean` | `false` | Show keyboard shortcut text on each item. |
23
+ | `empty-message` | `emptyMessage` | `string` | `'No items available'` | Message displayed when the menu has no focusable items. |
18
24
 
19
- ### Fields
25
+ ## Events
20
26
 
21
- | Name | Privacy | Type | Default | Description | Inherited From |
22
- | -------------- | ------- | --------- | ---------------------- | ---------------------------------------------------------------------- | -------------- |
23
- | `name` | | `string` | `''` | Accessible name for the menu, displayed in header when header is true. | |
24
- | `header` | | `boolean` | `false` | Show header bar with menu name. | |
25
- | `checkbox` | | `boolean` | `false` | Enable checkbox mode for items (menuitemcheckbox role). | |
26
- | `icon` | | `boolean` | `false` | Show icons before each item. | |
27
- | `symbol` | | `string` | `''` | Fallback Lucide icon symbol for items without their own. | |
28
- | `favorites` | | `boolean` | `false` | Show favorite toggle on each item. | |
29
- | `shortcuts` | | `boolean` | `false` | Show keyboard shortcut text on each item. | |
30
- | `emptyMessage` | | `string` | `'No items available'` | Message displayed when the menu has no focusable items. | |
31
- | `_isEmpty` | private | `boolean` | | Check whether the menu has zero focusable items | |
27
+ | Event | Detail | Description |
28
+ | --- | --- | --- |
29
+ | `btu-dropdown-menu-ready` | | Fired after first render |
32
30
 
33
- ### Methods
31
+ ## Slots
34
32
 
35
- | Name | Privacy | Description | Parameters | Return | Inherited From |
36
- | -------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ---------------- | ----------------- |
37
- | `_configureItems` | private | Configure all child items with menu-level settings | | `void` | |
38
- | `_getAllItems` | private | Get all btu-dropdown-item children | | `DropdownItem[]` | |
39
- | `_getFocusableItems` | private | Get only focusable items (default type, skip dividers/subheads) | | `DropdownItem[]` | |
40
- | `_handleTypeahead` | private | Typeahead character matching with 500ms accumulation | `char: string, focusable: DropdownItem[]` | `void` | |
41
- | `emit` | | Dispatches a type-safe CustomEvent with standardized configuration.&#xA;&#xA;All events are configured with:&#xA;- bubbles: true (event propagates up the DOM tree)&#xA;- cancelable: false (event cannot be cancelled)&#xA;- composed: true (event crosses shadow DOM boundaries) | `type: K, detail: UnpackCustomEvent<CustomEventMap[K]>` | `boolean` | EventEmitterMixin |
33
+ | Slot | Description |
34
+ | --- | --- |
35
+ | (default) | Menu items (`btu-dropdown-item` elements) |
42
36
 
43
- ### Events
37
+ ## CSS custom properties
44
38
 
45
- | Name | Type | Description | Inherited From |
46
- | ------------------------- | ------------- | ------------------------ | -------------- |
47
- | `btu-dropdown-menu-ready` | `CustomEvent` | Fired after first render | |
48
-
49
- ### Attributes
50
-
51
- | Name | Field | Inherited From |
52
- | --------------- | ------------ | -------------- |
53
- | `name` | name | |
54
- | `header` | header | |
55
- | `checkbox` | checkbox | |
56
- | `icon` | icon | |
57
- | `symbol` | symbol | |
58
- | `favorites` | favorites | |
59
- | `shortcuts` | shortcuts | |
60
- | `empty-message` | emptyMessage | |
61
-
62
- ### CSS Properties
63
-
64
- | Name | Default | Description |
65
- | ------------------------ | ------- | ------------------------------------------ |
66
- | `--dropdown-empty-color` | | Empty state text color (default: gray-400) |
67
-
68
- ### Slots
69
-
70
- | Name | Description |
71
- | ---- | ------------------------------------------- |
72
- | | Menu items (\`btu-dropdown-item\` elements) |
73
-
74
- <hr/>
75
-
76
- ## Exports
77
-
78
- | Kind | Name | Declaration | Module | Package |
79
- | --------------------------- | ------------------- | ------------ | --------------------------------------- | ------- |
80
- | `js` | `default` | DropdownMenu | src/components/dropdown/DropdownMenu.ts | |
81
- | `custom-element-definition` | `btu-dropdown-menu` | DropdownMenu | src/components/dropdown/DropdownMenu.ts | |
39
+ | Property | Description |
40
+ | --- | --- |
41
+ | `--dropdown-empty-color` | Empty state text color (default: gray-400) |
@@ -1,79 +1,62 @@
1
- # `src/components/empty-state/EmptyState.ts`:
1
+ # `<btu-empty-state>`
2
2
 
3
- ## class: `EmptyState`, `btu-empty-state`
3
+ An empty state component for displaying placeholder content when no data is available.
4
4
 
5
- ### Superclass
5
+ Supports a graphic slot for icons/images/pictures/SVGs, a heading, a description,
6
+ and an actions slot for buttons or links. Available in three sizes (sm, md, lg)
7
+ with semantic heading levels.
6
8
 
7
- | Name | Module | Package |
8
- | ------------ | ------ | ------- |
9
- | `LitElement` | | lit |
9
+ ## Architecture: Light DOM + Pseudo-Slots
10
10
 
11
- ### Mixins
11
+ This component uses **Light DOM** (no Shadow Root) with pseudo-slots:
12
+ - User-provided children are physically moved into internal containers
13
+ - Movement is based on `slot` attributes
14
+ - The `onFind` utility detects and redistributes newly-added children (one-time per element)
12
15
 
13
- | Name | Module | Package |
14
- | ------------------- | ------------------------------ | ------- |
15
- | `EventEmitterMixin` | /src/util/EventEmitterMixin.js | |
16
- | `OnFindMixin` | /src/util/OnFindMixin.js | |
17
- | `ReadyMixin` | /src/util/ReadyMixin.js | |
16
+ ### Node Redistribution Rules
17
+ - `slot="graphic"` - Moved to graphic container (icon, image, picture, or SVG)
18
+ - `slot="actions"` - Moved to an internal `btu-button-group` (variant="spaced")
18
19
 
19
- ### Fields
20
+ ### Actions composition
20
21
 
21
- | Name | Privacy | Type | Default | Description | Inherited From |
22
- | ---------------- | ------- | ---------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
23
- | `heading` | | `string` | `''` | Heading text displayed in the empty state. | |
24
- | `description` | | `string \| undefined` | | Description text displayed below the heading. | |
25
- | `size` | | `'sm' \| 'md' \| 'lg'` | `'md'` | Size variant of the empty state. Affects spacing, description text, graphic size,&#xA;and — when \`heading-level\` is unset — the default heading level (sm→5, md→4, lg→3). | |
26
- | `headingLevel` | | `number \| undefined` | | Heading level (1-6). When set to a valid integer 1-6, overrides the size-based&#xA;default and drives both the semantic h1-h6 tag and the visual heading size&#xA;(btu-heading-1 through btu-heading-6). Invalid values log a warning and fall&#xA;back to the size-based default. | |
27
- | `initialClasses` | private | `string[]` | `[]` | | |
28
- | `#stopFns` | private | `Array<() => void>` | `[]` | | OnFindMixin |
22
+ The actions container IS a `btu-button-group` with `variant="spaced"`. Its `size`
23
+ is mapped from the empty-state `size` prop (sm→small, md→medium, lg→large) so all
24
+ child `btu-button` / `btu-icon-button` elements get consistent sizing and group
25
+ semantics (`role="group"`, roving tabindex, disabled propagation) for free.
29
26
 
30
- ### Methods
27
+ ```js
28
+ import '@brightspot/ui/components/empty-state/EmptyState.js'
29
+ ```
31
30
 
32
- | Name | Privacy | Description | Parameters | Return | Inherited From |
33
- | --------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------------- | ----------------- |
34
- | `syncGraphicIconSize` | private | | | `void` | |
35
- | `resolveHeadingLevel` | private | | | `HeadingLevel` | |
36
- | `renderHeading` | private | | `level: HeadingLevel, className: string` | `TemplateResult \| string` | |
37
- | `emit` | | Dispatches a type-safe CustomEvent with standardized configuration.&#xA;&#xA;All events are configured with:&#xA;- bubbles: true (event propagates up the DOM tree)&#xA;- cancelable: false (event cannot be cancelled)&#xA;- composed: true (event crosses shadow DOM boundaries) | `type: K, detail: UnpackCustomEvent<CustomEventMap[K]>` | `boolean` | EventEmitterMixin |
38
- | `onFindRegistration` | | | | `OnFindRegistration \| OnFindRegistration[] \| null` | OnFindMixin |
39
- | `#armFind` | private | | | | OnFindMixin |
31
+ Interactive examples: https://ui.brightspot.com/?path=/docs/components-empty-state--docs
40
32
 
41
- ### Events
33
+ ## Attributes
42
34
 
43
- | Name | Type | Description | Inherited From |
44
- | ------------------------ | ------------- | ---------------------------------------------- | -------------- |
45
- | `btu-empty-state-ready` | `CustomEvent` | Fired after first render and initialization | |
46
- | `btu-button-group-ready` | `CustomEvent` | Bubbles from the internal actions button-group | |
35
+ | Attribute | Property | Type | Default | Description |
36
+ | --- | --- | --- | --- | --- |
37
+ | `heading` | `heading` | `string` | `''` | Heading text displayed in the empty state. |
38
+ | `description` | `description` | `string \| undefined` | | Description text displayed below the heading. |
39
+ | `size` | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size variant of the empty state. Affects spacing, description text, graphic size, and — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3). |
40
+ | `heading-level` | `headingLevel` | `number \| undefined` | | Heading level (1-6). When set to a valid integer 1-6, overrides the size-based default and drives both the semantic h1-h6 tag and the visual heading size (btu-heading-1 through btu-heading-6). Invalid values log a warning and fall back to the size-based default. |
47
41
 
48
- ### Attributes
42
+ ## Events
49
43
 
50
- | Name | Field | Inherited From |
51
- | --------------- | ------------ | -------------- |
52
- | `heading` | heading | |
53
- | `description` | description | |
54
- | `size` | size | |
55
- | `heading-level` | headingLevel | |
44
+ | Event | Detail | Description |
45
+ | --- | --- | --- |
46
+ | `btu-empty-state-ready` | | Fired after first render and initialization |
47
+ | `btu-button-group-ready` | | Bubbles from the internal actions button-group |
56
48
 
57
- ### CSS Properties
49
+ ## Slots
58
50
 
59
- | Name | Default | Description |
60
- | --------------------------------- | ------- | --------------------------------------------------------------- |
61
- | `--empty-state-max-width` | | Maximum width of the content block (default: min(75cqw, 360px)) |
62
- | `--empty-state-color-heading` | | Heading text color (default: gray-900) |
63
- | `--empty-state-color-description` | | Description text color (default: gray-500) |
51
+ | Slot | Description |
52
+ | --- | --- |
53
+ | `graphic` | Pseudo-slot for icon, image, picture, or SVG graphic. When the child is a `btu-icon`, the component overrides its `size` attribute based on the empty-state `size` prop (sm→md, md→lg, lg→xl). Use an `img`, `picture`, or inline `svg` for full size control. |
54
+ | `actions` | Pseudo-slot for action buttons. Children are moved into an internal `btu-button-group` (variant="spaced"), so size and disabled state are managed by the group. |
64
55
 
65
- ### Slots
56
+ ## CSS custom properties
66
57
 
67
- | Name | Description |
68
- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
69
- | `graphic` | Pseudo-slot for icon, image, picture, or SVG graphic. When the child is a \`btu-icon\`, the component overrides its \`size\` attribute based on the empty-state \`size\` prop (sm→md, md→lg, lg→xl). Use an \`img\`, \`picture\`, or inline \`svg\` for full size control. |
70
- | `actions` | Pseudo-slot for action buttons. Children are moved into an internal \`btu-button-group\` (variant="spaced"), so size and disabled state are managed by the group. |
71
-
72
- <hr/>
73
-
74
- ## Exports
75
-
76
- | Kind | Name | Declaration | Module | Package |
77
- | --------------------------- | ----------------- | ----------- | ---------------------------------------- | ------- |
78
- | `js` | `default` | EmptyState | src/components/empty-state/EmptyState.ts | |
79
- | `custom-element-definition` | `btu-empty-state` | EmptyState | src/components/empty-state/EmptyState.ts | |
58
+ | Property | Description |
59
+ | --- | --- |
60
+ | `--empty-state-max-width` | Maximum width of the content block (default: min(75cqw, 360px)) |
61
+ | `--empty-state-color-heading` | Heading text color (default: gray-900) |
62
+ | `--empty-state-color-description` | Description text color (default: gray-500) |
@@ -1,71 +1,40 @@
1
- # `src/components/esca-avatar/EscaAvatar.ts`:
1
+ # `<btu-esca-avatar>`
2
2
 
3
- ## class: `EscaAvatar`, `btu-esca-avatar`
3
+ The animated avatar for the Esca AI assistant, driven entirely by its `state` attribute so the same
4
+ element works wherever the assistant appears.
4
5
 
5
- ### Superclass
6
+ Accessibility: the avatar is a visual indicator, not a status channel. By default it exposes a static
7
+ accessible name (`role="img"`, `aria-label="Esca"`) so it reads like an author/identity avatar; both
8
+ are only set when absent, so consumers can override them.
9
+ - When the assistant is already named in the surrounding UI (the common case in a chat), treat the
10
+ avatar as decorative: set `aria-hidden="true"` to avoid a redundant announcement.
11
+ - Do NOT convey activity (thinking / done) by changing this element's ARIA per `state` — a looping
12
+ `search` would announce repeatedly. Surface status as text in a polite `aria-live` region owned by
13
+ the chat UI, which has the context to word and time announcements. This component intentionally
14
+ does not announce its own state.
6
15
 
7
- | Name | Module | Package |
8
- | ------------ | ------ | ------- |
9
- | `LitElement` | | lit |
16
+ ```js
17
+ import '@brightspot/ui/components/esca-avatar/EscaAvatar.js'
18
+ ```
10
19
 
11
- ### Mixins
20
+ Interactive examples: https://ui.brightspot.com/?path=/docs/components-esca-avatar--docs
12
21
 
13
- | Name | Module | Package |
14
- | ------------------- | ------------------------------ | ------- |
15
- | `EventEmitterMixin` | /src/util/EventEmitterMixin.js | |
16
- | `ReadyMixin` | /src/util/ReadyMixin.js | |
22
+ ## Attributes
17
23
 
18
- ### Fields
24
+ | Attribute | Property | Type | Default | Description |
25
+ | --- | --- | --- | --- | --- |
26
+ | `state` | `state` | `'idle' \| 'wave' \| 'search' \| 'complete' \| 'glow'` | `'idle'` | Animation to play; changing it swaps the clip. |
27
+ | `size` | `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Size of the avatar, mirroring `<btu-avatar>`'s scale. `--esca-avatar-size` overrides it. |
19
28
 
20
- | Name | Privacy | Type | Default | Description | Inherited From |
21
- | ----------------------- | ------- | ----------------------------------- | -------- | --------------------------------------------------------------------------------------------- | -------------- |
22
- | `state` | | `EscaAvatarState` | `'idle'` | Animation to play; changing it swaps the clip. | |
23
- | `size` | | `EscaAvatarSize` | `'md'` | Size of the avatar, mirroring \`\<btu-avatar>\`'s scale. \`--esca-avatar-size\` overrides it. | |
24
- | `_containerRef` | private | `Ref<HTMLDivElement>` | | | |
25
- | `_animation` | private | `AnimationItem \| null` | `null` | | |
26
- | `_rendered` | private | `EscaAvatarState \| null` | `null` | | |
27
- | `_reduceMotion` | private | `boolean` | `false` | | |
28
- | `_loadToken` | private | `number` | `0` | | |
29
- | `_resizeObserver` | private | `ResizeObserver \| undefined` | | | |
30
- | `_intersectionObserver` | private | `IntersectionObserver \| undefined` | | | |
31
- | `_motionQuery` | private | `MediaQueryList \| undefined` | | | |
32
- | `_onMotionChange` | private | | | | |
29
+ ## Events
33
30
 
34
- ### Methods
31
+ | Event | Detail | Description |
32
+ | --- | --- | --- |
33
+ | `btu-esca-avatar-ready` | | Fired after the first render |
34
+ | `btu-esca-avatar-complete` | `{state: string}` | Fired when a non-looping animation finishes |
35
35
 
36
- | Name | Privacy | Description | Parameters | Return | Inherited From |
37
- | ------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | --------- | ----------------- |
38
- | `_observe` | private | | | | |
39
- | `_applySize` | private | | | | |
40
- | `_play` | private | | | | |
41
- | `_destroy` | private | | | | |
42
- | `emit` | | Dispatches a type-safe CustomEvent with standardized configuration.&#xA;&#xA;All events are configured with:&#xA;- bubbles: true (event propagates up the DOM tree)&#xA;- cancelable: false (event cannot be cancelled)&#xA;- composed: true (event crosses shadow DOM boundaries) | `type: K, detail: UnpackCustomEvent<CustomEventMap[K]>` | `boolean` | EventEmitterMixin |
36
+ ## CSS custom properties
43
37
 
44
- ### Events
45
-
46
- | Name | Type | Description | Inherited From |
47
- | -------------------------- | ------------------------------ | ------------------------------------------- | -------------- |
48
- | `btu-esca-avatar-ready` | `CustomEvent` | Fired after the first render | |
49
- | `btu-esca-avatar-complete` | `CustomEvent<{state: string}>` | Fired when a non-looping animation finishes | |
50
-
51
- ### Attributes
52
-
53
- | Name | Field | Inherited From |
54
- | ------- | ----- | -------------- |
55
- | `state` | state | |
56
- | `size` | size | |
57
-
58
- ### CSS Properties
59
-
60
- | Name | Default | Description |
61
- | -------------------- | ------- | ---------------------------------------------------------------------------------- |
62
- | `--esca-avatar-size` | | Width and height of the avatar; overrides the \`size\` attribute (default: 2.5rem) |
63
-
64
- <hr/>
65
-
66
- ## Exports
67
-
68
- | Kind | Name | Declaration | Module | Package |
69
- | --------------------------- | ----------------- | ----------- | ---------------------------------------- | ------- |
70
- | `js` | `default` | EscaAvatar | src/components/esca-avatar/EscaAvatar.ts | |
71
- | `custom-element-definition` | `btu-esca-avatar` | EscaAvatar | src/components/esca-avatar/EscaAvatar.ts | |
38
+ | Property | Description |
39
+ | --- | --- |
40
+ | `--esca-avatar-size` | Width and height of the avatar; overrides the `size` attribute (default: 2.5rem) |
@@ -1,73 +1,40 @@
1
- # `src/components/icon/Icon.ts`:
1
+ # `<btu-icon>`
2
2
 
3
- ## class: `Icon`, `btu-icon`
3
+ An icon component for displaying Lucide icons.
4
4
 
5
- ### Superclass
5
+ Icons inherit parent text color by default or can use gradient fills.
6
+ All icons are from the Lucide icon library (https://lucide.dev/icons/).
7
+ Supports both direct SVG rendering and mask-based gradient fills.
6
8
 
7
- | Name | Module | Package |
8
- | ------------ | ------ | ------- |
9
- | `LitElement` | | lit |
9
+ ```js
10
+ import '@brightspot/ui/components/icon/Icon.js'
11
+ ```
10
12
 
11
- ### Mixins
13
+ The CMS page defines this element itself, so a plugin can use it there without the import.
12
14
 
13
- | Name | Module | Package |
14
- | ------------------- | ------------------------------ | ------- |
15
- | `EventEmitterMixin` | /src/util/EventEmitterMixin.js | |
16
- | `ReadyMixin` | /src/util/ReadyMixin.js | |
15
+ Interactive examples: https://ui.brightspot.com/?path=/docs/components-icon--docs
17
16
 
18
- ### Static Fields
17
+ ## Attributes
19
18
 
20
- | Name | Privacy | Type | Default | Description | Inherited From |
21
- | --------- | ------- | ---- | ------- | ----------- | -------------- |
22
- | `tagName` | | | | | |
19
+ | Attribute | Property | Type | Default | Description |
20
+ | --- | --- | --- | --- | --- |
21
+ | `size` | `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Size of the icon. - 'xs': Extra small (0.75rem) - 'sm': Small (1rem) - 'md': Medium (1.25rem, default) - 'lg': Large (1.5rem) - 'xl': Extra large (1.75rem) |
22
+ | `symbol` | `symbol` | `string` | `'circle-dashed'` | Lucide icon name to display. See https://lucide.dev/icons/ for available icons. Lucide v1 removed all brand logos - legacy facebook/instagram/slack/twitter swap to the vendored brand marks at runtime, any other brand name falls back to circle-dashed. |
23
+ | `brand` | `brand` | `string \| undefined` | | Vendored brand mark to display instead of a Lucide icon (names in src/brand-icons.ts); takes precedence over `symbol`. |
24
+ | `gradient` | `gradient` | `IconGradientColor \| undefined` | | Theme color to use for gradient fill. When set, icon displays with gradient. When undefined, icon inherits parent text color. |
25
+ | `emphasize` | `emphasize` | `boolean \| 'pulse' \| undefined` | | Emphasize mode — renders a tonal circle with ring behind the icon. Colors are derived from `currentColor` via oklch relative color syntax. Defaults to primary; override with Tailwind `text-*` classes or `style="color: ..."`. Set as a boolean for the static circle, or `"pulse"` for a one-shot ring animation. Not intended for use with `gradient` — the two features target conflicting rendering modes. |
23
26
 
24
- ### Fields
27
+ ## Events
25
28
 
26
- | Name | Privacy | Type | Default | Description | Inherited From |
27
- | ------------------------- | ------- | -------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
28
- | `size` | | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Size of the icon.&#xA;- 'xs': Extra small (0.75rem)&#xA;- 'sm': Small (1rem)&#xA;- 'md': Medium (1.25rem, default)&#xA;- 'lg': Large (1.5rem)&#xA;- 'xl': Extra large (1.75rem) | |
29
- | `symbol` | | `string` | `'circle-dashed'` | Lucide icon name to display.&#xA;See https\://lucide.dev/icons/ for available icons.&#xA;Lucide v1 removed all brand logos - legacy facebook/instagram/slack/twitter&#xA;swap to the vendored brand marks at runtime, any other brand name falls&#xA;back to circle-dashed. | |
30
- | `brand` | | `string \| undefined` | | Vendored brand mark to display instead of a Lucide icon (names in&#xA;src/brand-icons.ts); takes precedence over \`symbol\`. | |
31
- | `gradient` | | `IconGradientColor \| undefined` | | Theme color to use for gradient fill.&#xA;When set, icon displays with gradient. When undefined, icon inherits parent text color. | |
32
- | `emphasize` | | `boolean \| 'pulse' \| undefined` | | Emphasize mode — renders a tonal circle with ring behind the icon.&#xA;Colors are derived from \`currentColor\` via oklch relative color syntax.&#xA;Defaults to primary; override with Tailwind \`text-\*\` classes or \`style="color: ..."\`.&#xA;Set as a boolean for the static circle, or \`"pulse"\` for a one-shot ring animation.&#xA;Not intended for use with \`gradient\` — the two features target&#xA;conflicting rendering modes. | |
33
- | `_initialClassesCaptured` | private | `boolean` | `false` | | |
29
+ | Event | Detail | Description |
30
+ | --- | --- | --- |
31
+ | `btu-icon-ready` | | Fired after first render and initialization |
34
32
 
35
- ### Methods
33
+ ## CSS custom properties
36
34
 
37
- | Name | Privacy | Description | Parameters | Return | Inherited From |
38
- | ------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | --------- | ----------------- |
39
- | `emit` | | Dispatches a type-safe CustomEvent with standardized configuration.&#xA;&#xA;All events are configured with:&#xA;- bubbles: true (event propagates up the DOM tree)&#xA;- cancelable: false (event cannot be cancelled)&#xA;- composed: true (event crosses shadow DOM boundaries) | `type: K, detail: UnpackCustomEvent<CustomEventMap[K]>` | `boolean` | EventEmitterMixin |
40
-
41
- ### Events
42
-
43
- | Name | Type | Description | Inherited From |
44
- | ---------------- | ------------- | ------------------------------------------- | -------------- |
45
- | `btu-icon-ready` | `CustomEvent` | Fired after first render and initialization | |
46
-
47
- ### Attributes
48
-
49
- | Name | Field | Inherited From |
50
- | ----------- | --------- | -------------- |
51
- | `size` | size | |
52
- | `symbol` | symbol | |
53
- | `brand` | brand | |
54
- | `gradient` | gradient | |
55
- | `emphasize` | emphasize | |
56
-
57
- ### CSS Properties
58
-
59
- | Name | Default | Description |
60
- | --------------------- | ------- | --------------------------------------------------------------------------------------------------- |
61
- | `--icon-size` | | Icon size (overrides size default) |
62
- | `--icon-stroke-width` | | SVG stroke width as a unitless number in viewBox units; scales visually with icon size (default: 2) |
63
- | `--icon-fill` | | Icon fill color for filled icons (e.g., "currentColor") |
64
- | `--icon-svg` | | SVG data URI for mask-based rendering |
65
-
66
- <hr/>
67
-
68
- ## Exports
69
-
70
- | Kind | Name | Declaration | Module | Package |
71
- | --------------------------- | ---------- | ----------- | --------------------------- | ------- |
72
- | `js` | `default` | Icon | src/components/icon/Icon.ts | |
73
- | `custom-element-definition` | `btu-icon` | Icon | src/components/icon/Icon.ts | |
35
+ | Property | Description |
36
+ | --- | --- |
37
+ | `--icon-size` | Icon size (overrides size default) |
38
+ | `--icon-stroke-width` | SVG stroke width as a unitless number in viewBox units; scales visually with icon size (default: 2) |
39
+ | `--icon-fill` | Icon fill color for filled icons (e.g., "currentColor") |
40
+ | `--icon-svg` | SVG data URI for mask-based rendering |