@brightspot/ui 5.0.4-pre.20260624 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/components/button-group/ButtonGroup.d.ts +7 -2
  2. package/dist/components/button-group/ButtonGroup.d.ts.map +1 -1
  3. package/dist/components/button-group/ButtonGroup.js +23 -16
  4. package/dist/components/button-group/ButtonGroup.js.map +1 -1
  5. package/dist/components/card/Card.css +7 -0
  6. package/dist/components/card/Card.d.ts +244 -0
  7. package/dist/components/card/Card.d.ts.map +1 -0
  8. package/dist/components/card/Card.js +512 -0
  9. package/dist/components/card/Card.js.map +1 -0
  10. package/dist/components/empty-state/EmptyState.d.ts +11 -2
  11. package/dist/components/empty-state/EmptyState.d.ts.map +1 -1
  12. package/dist/components/empty-state/EmptyState.js +19 -8
  13. package/dist/components/empty-state/EmptyState.js.map +1 -1
  14. package/dist/components/esca-avatar/EscaAvatar.d.ts +70 -0
  15. package/dist/components/esca-avatar/EscaAvatar.d.ts.map +1 -0
  16. package/dist/components/esca-avatar/EscaAvatar.js +218 -0
  17. package/dist/components/esca-avatar/EscaAvatar.js.map +1 -0
  18. package/dist/components/esca-avatar/animations/esca-search.json +1 -0
  19. package/dist/components/esca-avatar/animations/esca-task-complete.json +1 -0
  20. package/dist/components/esca-avatar/animations/esca-wave.json +1 -0
  21. package/dist/components/widget/Widget.d.ts +11 -2
  22. package/dist/components/widget/Widget.d.ts.map +1 -1
  23. package/dist/components/widget/Widget.js +21 -10
  24. package/dist/components/widget/Widget.js.map +1 -1
  25. package/dist/custom-elements.json +1081 -365
  26. package/dist/storybook/assets/{ActionBar.stories-cyX9vc6C.js → ActionBar.stories-CBN_ShP5.js} +1 -1
  27. package/dist/storybook/assets/{ActionItem.stories-Bs-Kxp5J.js → ActionItem.stories-DysfIj7U.js} +1 -1
  28. package/dist/storybook/assets/{Avatar.stories-B1Uee53f.js → Avatar.stories-BdgqH7I_.js} +1 -1
  29. package/dist/storybook/assets/{AvatarGroup.stories-W2EtKQBu.js → AvatarGroup.stories-DFCG_0Py.js} +1 -1
  30. package/dist/storybook/assets/{Badge.stories-BotNIO18.js → Badge.stories-BWPIJ2jm.js} +1 -1
  31. package/dist/storybook/assets/{Button-YTBnP55L.js → Button-B1_SwzVL.js} +1 -1
  32. package/dist/storybook/assets/{Button.stories-B-X7_d_i.js → Button.stories-C-H-KIcV.js} +1 -1
  33. package/dist/storybook/assets/{ButtonGroup.stories-BM-pxfK2.js → ButtonGroup.stories-BBdtnaP_.js} +1 -1
  34. package/dist/storybook/assets/Card.stories-FLC-WKC_.js +556 -0
  35. package/dist/storybook/assets/{Celebrate.stories-D9EJwzxo.js → Celebrate.stories-CZ7SfTOh.js} +1 -1
  36. package/dist/storybook/assets/{Checkbox.stories-f5VLVSw5.js → Checkbox.stories-C42Z-jkF.js} +1 -1
  37. package/dist/storybook/assets/{CircularProgress.stories-BI9e372u.js → CircularProgress.stories-DoC0japf.js} +1 -1
  38. package/dist/storybook/assets/{ClipboardMixin.stories-CsyJDNxc.js → ClipboardMixin.stories-Ci-drbJq.js} +1 -1
  39. package/dist/storybook/assets/{Color-6BZIO3FS-ClVOLIJG.js → Color-6BZIO3FS-rxeQBzj6.js} +1 -1
  40. package/dist/storybook/assets/{Colors.stories-hUYBvymM.js → Colors.stories-Bw1Kp3B7.js} +1 -1
  41. package/dist/storybook/assets/{CombinedEffects.stories-DkokyKCS.js → CombinedEffects.stories-DArqLKI1.js} +1 -1
  42. package/dist/storybook/assets/{ComponentStatesMixin-C4I_rtgt.js → ComponentStatesMixin-kUcZl-YW.js} +1 -1
  43. package/dist/storybook/assets/{ComponentStatesMixin.stories-BeLCYevK.js → ComponentStatesMixin.stories-PrGY6akN.js} +1 -1
  44. package/dist/storybook/assets/{CopyToClipboard.stories-DN9oagz-.js → CopyToClipboard.stories-CUzNoCic.js} +1 -1
  45. package/dist/storybook/assets/{Debounce.stories-CtNQAJxO.js → Debounce.stories-CrnUlkHs.js} +1 -1
  46. package/dist/storybook/assets/{DocsRenderer-LL677BLK-Bx1Fds2q.js → DocsRenderer-LL677BLK-BM3eNhez.js} +3 -3
  47. package/dist/storybook/assets/{Dropdown.stories-B862-mco.js → Dropdown.stories-DyIY6e6W.js} +1 -1
  48. package/dist/storybook/assets/{EmptyState.stories-Im3Vr4ZL.js → EmptyState.stories-BXFcxFcG.js} +1 -1
  49. package/dist/storybook/assets/EscaAvatar.stories-DnriDX7_.js +138 -0
  50. package/dist/storybook/assets/{Events.stories-B0tluV0t.js → Events.stories-YjZ1Qtl4.js} +1 -1
  51. package/dist/storybook/assets/{Heading.stories-6CzGqAAc.js → Heading.stories-CfQHk5pf.js} +1 -1
  52. package/dist/storybook/assets/{HueRipple.stories-DaQiDn9K.js → HueRipple.stories-CR75dLBM.js} +1 -1
  53. package/dist/storybook/assets/{Icon.stories-CFkYO_7w.js → Icon.stories-BCSRhY2s.js} +1 -1
  54. package/dist/storybook/assets/{IconButton.stories-DwBTqvTi.js → IconButton.stories-0O4LM1u6.js} +1 -1
  55. package/dist/storybook/assets/{LinearProgress.stories-Coxmgjmo.js → LinearProgress.stories-B7GYC8WE.js} +1 -1
  56. package/dist/storybook/assets/OnFindMixin.stories-UOK_ZP2n.js +300 -0
  57. package/dist/storybook/assets/{Pagination.stories-CYrKX5iI.js → Pagination.stories-Co3mbyct.js} +1 -1
  58. package/dist/storybook/assets/{Popover.stories-BkGiUOfu.js → Popover.stories-D5gsWcB0.js} +1 -1
  59. package/dist/storybook/assets/{ReadyMixin-CP6tQ4FB.js → ReadyMixin-DkhLzoe0.js} +1 -1
  60. package/dist/storybook/assets/{RovingTabindexMixin.stories-CzkPw8Nl.js → RovingTabindexMixin.stories-DPhOWmKd.js} +1 -1
  61. package/dist/storybook/assets/{Rtc.stories-CVch488H.js → Rtc.stories-D5Vpw1oP.js} +1 -1
  62. package/dist/storybook/assets/{ScrollShadow.stories-BGh-Irt7.js → ScrollShadow.stories-Cmbqjk5X.js} +1 -1
  63. package/dist/storybook/assets/{Switch.stories-DPfP0QVK.js → Switch.stories-Bfmr9Ugg.js} +1 -1
  64. package/dist/storybook/assets/{Tab.stories-CBcuRcDB.js → Tab.stories-DbucUczE.js} +1 -1
  65. package/dist/storybook/assets/{Tabs.stories-CDOBjYbs.js → Tabs.stories-DnPRsSsj.js} +1 -1
  66. package/dist/storybook/assets/{Throttle.stories-Bqyul0aW.js → Throttle.stories-DNwTsNRC.js} +1 -1
  67. package/dist/storybook/assets/{Tooltip.stories-B9dohX1h.js → Tooltip.stories-Fsp2BRAr.js} +1 -1
  68. package/dist/storybook/assets/{Upload.stories-C7dq2Wdk.js → Upload.stories-C-WggEd6.js} +1 -1
  69. package/dist/storybook/assets/{UploadItem.stories-35zsIKTv.js → UploadItem.stories-DwQzECXv.js} +1 -1
  70. package/dist/storybook/assets/{Welcome.stories-BuD3fpke.js → Welcome.stories-DFluhbVr.js} +1 -1
  71. package/dist/storybook/assets/{Widget.stories-D2UYzfyE.js → Widget.stories-7pJNHWTu.js} +1 -1
  72. package/dist/storybook/assets/{WithTooltip-65CFNBJE-DGiY8cz9.js → WithTooltip-65CFNBJE-BcgHQTz7.js} +1 -1
  73. package/dist/storybook/assets/{blocks-YjKl5E55.js → blocks-U4F5yAu3.js} +5 -5
  74. package/dist/storybook/assets/{formatter-EIJCOSYU-XYAiuXAN.js → formatter-EIJCOSYU-BjQsmbLH.js} +1 -1
  75. package/dist/storybook/assets/if-defined-CM2lJk-0.js +1 -0
  76. package/dist/storybook/assets/iframe-1F7Ef_8q.css +1 -0
  77. package/dist/storybook/assets/{iframe-CufEXQ5F.js → iframe-DNJdsh5L.js} +225 -225
  78. package/dist/storybook/assets/{index-DbEDIsEB.js → index-1U9xrCIK.js} +1 -1
  79. package/dist/storybook/assets/onFind-AbVF4rYD.js +1 -0
  80. package/dist/storybook/assets/{onFind.stories-UpwJxFqR.js → onFind.stories-j334ViWp.js} +15 -15
  81. package/dist/storybook/assets/{onRemove.stories-BMwQGBCl.js → onRemove.stories-fKMxne2_.js} +1 -1
  82. package/dist/storybook/assets/{onVisible.stories-axSo0Zv3.js → onVisible.stories-BCRoHlJz.js} +1 -1
  83. package/dist/storybook/assets/{style-map-BkaK9546.js → style-map-BZ07XihX.js} +1 -1
  84. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-CDDZTVRn.js → syntaxhighlighter-ED5Y7EFY-C2D-CgsB.js} +1 -1
  85. package/dist/storybook/iframe.html +48 -2
  86. package/dist/storybook/index.json +1 -1
  87. package/dist/storybook/project.json +1 -1
  88. package/dist/tailwind-plugin-button.js +5 -5
  89. package/dist/tailwind-plugin-button.js.map +1 -1
  90. package/dist/tailwind-plugin-button.ts +5 -5
  91. package/dist/tailwind-plugin-card.d.ts +2 -0
  92. package/dist/tailwind-plugin-card.d.ts.map +1 -0
  93. package/dist/tailwind-plugin-card.js +438 -0
  94. package/dist/tailwind-plugin-card.js.map +1 -0
  95. package/dist/tailwind-plugin-card.ts +515 -0
  96. package/dist/tailwind.config.d.ts.map +1 -1
  97. package/dist/tailwind.config.js +3 -1
  98. package/dist/tailwind.config.js.map +1 -1
  99. package/dist/tailwind.config.ts +3 -2
  100. package/dist/util/EventEmitterMixin.d.ts +5 -0
  101. package/dist/util/EventEmitterMixin.d.ts.map +1 -1
  102. package/dist/util/EventEmitterMixin.js.map +1 -1
  103. package/dist/util/OnFindMixin.d.ts +55 -0
  104. package/dist/util/OnFindMixin.d.ts.map +1 -0
  105. package/dist/util/OnFindMixin.js +70 -0
  106. package/dist/util/OnFindMixin.js.map +1 -0
  107. package/dist/util/onFind.d.ts +4 -2
  108. package/dist/util/onFind.d.ts.map +1 -1
  109. package/dist/util/onFind.js +12 -0
  110. package/dist/util/onFind.js.map +1 -1
  111. package/docs/components/ButtonGroup.md +7 -3
  112. package/docs/components/Card.md +83 -0
  113. package/docs/components/EmptyState.md +10 -6
  114. package/docs/components/EscaAvatar.md +70 -0
  115. package/docs/components/README.md +2 -0
  116. package/docs/components/Widget.md +18 -14
  117. package/package.json +2 -2
  118. package/src/legacy/tool-ui/src/AIInline.css +1 -1
  119. package/src/legacy/tool-ui/src/ContentForm.css +1 -1
  120. package/src/legacy/tool-ui/src/Guide.css +1 -1
  121. package/src/legacy/tool-ui/src/Notification.css +1 -1
  122. package/src/legacy/tool-ui/src/Popup.css +4 -1
  123. package/src/legacy/tool-ui/src/RepeatableContentInputGroup.css +3 -3
  124. package/src/legacy/tool-ui/src/SearchWidget.ts +10 -1
  125. package/src/legacy/tool-ui/src/dropdown/index.ts +2 -2
  126. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.c6f3142a97caa5cd3c21.js +500 -0
  127. package/src/legacy/tool-ui/src/main/webapp/dist/v4.c1c3bde6e394b2a2b75c.css +3 -0
  128. package/src/legacy/tool-ui/src/main/webapp/dist/{v4.c5bcef50efdfa2d2e35f.js → v4.da15ce3ce45e85b4880a.js} +5 -5
  129. package/src/legacy/tool-ui/src/main/webapp/dist/v5.4edf99db4a5f4969d041.css +5 -0
  130. package/src/legacy/tool-ui/src/main/webapp/dist/{v5.86effb9bf858ae7b0640.js → v5.8491d982a282935a3058.js} +5 -5
  131. package/src/legacy/tool-ui/src/main/webapp/v4/ContentForm.less +1 -1
  132. package/src/legacy/tool-ui/src/main/webapp/v4/ContentSelector.less +3 -3
  133. package/src/legacy/tool-ui/src/v5.ts +4 -2
  134. package/dist/storybook/assets/if-defined-f_e-RnGa.js +0 -1
  135. package/dist/storybook/assets/iframe-PeGbyIdX.css +0 -1
  136. package/dist/storybook/assets/onFind-C7Wi8jr6.js +0 -1
  137. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.945bd28778b1a3e937c7.js +0 -500
  138. package/src/legacy/tool-ui/src/main/webapp/dist/v4.a6f53058dbb04a69aa5c.css +0 -3
  139. package/src/legacy/tool-ui/src/main/webapp/dist/v5.f60c05ef0c9b89aae888.css +0 -5
  140. /package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.945bd28778b1a3e937c7.js.LICENSE.txt → RTEProseMirror.c6f3142a97caa5cd3c21.js.LICENSE.txt} +0 -0
  141. /package/src/legacy/tool-ui/src/main/webapp/dist/{v4.c5bcef50efdfa2d2e35f.js.LICENSE.txt → v4.da15ce3ce45e85b4880a.js.LICENSE.txt} +0 -0
  142. /package/src/legacy/tool-ui/src/main/webapp/dist/{v5.86effb9bf858ae7b0640.js.LICENSE.txt → v5.8491d982a282935a3058.js.LICENSE.txt} +0 -0
@@ -876,6 +876,187 @@
876
876
  }
877
877
  ]
878
878
  },
879
+ {
880
+ "kind": "javascript-module",
881
+ "path": "src/components/badge/Badge.ts",
882
+ "declarations": [
883
+ {
884
+ "kind": "class",
885
+ "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.",
886
+ "name": "Badge",
887
+ "cssProperties": [
888
+ {
889
+ "description": "Text color (overrides theme color)",
890
+ "name": "--badge-color-foreground"
891
+ },
892
+ {
893
+ "description": "Background color (overrides theme color)",
894
+ "name": "--badge-color-background"
895
+ },
896
+ {
897
+ "description": "Border radius size (overrides shape default, default: 999px)",
898
+ "name": "--badge-radius-size"
899
+ },
900
+ {
901
+ "description": "Horizontal padding (overrides size default)",
902
+ "name": "--badge-px"
903
+ },
904
+ {
905
+ "description": "Vertical padding (overrides size default)",
906
+ "name": "--badge-py"
907
+ },
908
+ {
909
+ "description": "Size of the dot affordance (default: 6px)",
910
+ "name": "--badge-dot-size"
911
+ }
912
+ ],
913
+ "slots": [
914
+ {
915
+ "description": "Label text or child elements (e.g., btu-icon + text)",
916
+ "name": ""
917
+ }
918
+ ],
919
+ "members": [
920
+ {
921
+ "kind": "field",
922
+ "name": "variant",
923
+ "type": {
924
+ "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
925
+ },
926
+ "default": "'info'",
927
+ "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",
928
+ "attribute": "variant"
929
+ },
930
+ {
931
+ "kind": "field",
932
+ "name": "dot",
933
+ "type": {
934
+ "text": "boolean"
935
+ },
936
+ "default": "false",
937
+ "description": "Should a dot be displayed before the label?",
938
+ "attribute": "dot"
939
+ },
940
+ {
941
+ "kind": "field",
942
+ "name": "size",
943
+ "type": {
944
+ "text": "'sm' | 'md' | 'lg'"
945
+ },
946
+ "default": "'sm'",
947
+ "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
948
+ "attribute": "size"
949
+ },
950
+ {
951
+ "kind": "method",
952
+ "name": "emit",
953
+ "parameters": [
954
+ {
955
+ "name": "type",
956
+ "type": {
957
+ "text": "K"
958
+ },
959
+ "description": "Event name from CustomEventMap"
960
+ },
961
+ {
962
+ "name": "detail",
963
+ "optional": true,
964
+ "type": {
965
+ "text": "UnpackCustomEvent<CustomEventMap[K]>"
966
+ },
967
+ "description": "Optional event detail payload"
968
+ }
969
+ ],
970
+ "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)",
971
+ "return": {
972
+ "type": {
973
+ "text": "boolean"
974
+ }
975
+ },
976
+ "inheritedFrom": {
977
+ "name": "EventEmitterMixin",
978
+ "module": "src/util/EventEmitterMixin.ts"
979
+ }
980
+ }
981
+ ],
982
+ "events": [
983
+ {
984
+ "type": {
985
+ "text": "CustomEvent"
986
+ },
987
+ "description": "Fired after first render and initialization",
988
+ "name": "btu-badge-ready"
989
+ }
990
+ ],
991
+ "attributes": [
992
+ {
993
+ "name": "variant",
994
+ "type": {
995
+ "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
996
+ },
997
+ "default": "'info'",
998
+ "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",
999
+ "fieldName": "variant",
1000
+ "attribute": "variant"
1001
+ },
1002
+ {
1003
+ "name": "dot",
1004
+ "type": {
1005
+ "text": "boolean"
1006
+ },
1007
+ "default": "false",
1008
+ "description": "Should a dot be displayed before the label?",
1009
+ "fieldName": "dot",
1010
+ "attribute": "dot"
1011
+ },
1012
+ {
1013
+ "name": "size",
1014
+ "type": {
1015
+ "text": "'sm' | 'md' | 'lg'"
1016
+ },
1017
+ "default": "'sm'",
1018
+ "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
1019
+ "fieldName": "size",
1020
+ "attribute": "size"
1021
+ }
1022
+ ],
1023
+ "mixins": [
1024
+ {
1025
+ "name": "EventEmitterMixin",
1026
+ "module": "/src/util/EventEmitterMixin.js"
1027
+ },
1028
+ {
1029
+ "name": "ReadyMixin",
1030
+ "module": "/src/util/ReadyMixin.js"
1031
+ }
1032
+ ],
1033
+ "superclass": {
1034
+ "name": "LitElement",
1035
+ "package": "lit"
1036
+ },
1037
+ "tagName": "btu-badge",
1038
+ "customElement": true
1039
+ }
1040
+ ],
1041
+ "exports": [
1042
+ {
1043
+ "kind": "js",
1044
+ "name": "default",
1045
+ "declaration": {
1046
+ "name": "Badge",
1047
+ "module": "src/components/badge/Badge.ts"
1048
+ }
1049
+ },
1050
+ {
1051
+ "kind": "custom-element-definition",
1052
+ "name": "btu-badge",
1053
+ "declaration": {
1054
+ "name": "Badge",
1055
+ "module": "src/components/badge/Badge.ts"
1056
+ }
1057
+ }
1058
+ ]
1059
+ },
879
1060
  {
880
1061
  "kind": "javascript-module",
881
1062
  "path": "src/components/avatar/Avatar.ts",
@@ -1531,263 +1712,82 @@
1531
1712
  },
1532
1713
  {
1533
1714
  "kind": "javascript-module",
1534
- "path": "src/components/badge/Badge.ts",
1715
+ "path": "src/components/button-group/ButtonGroup.ts",
1535
1716
  "declarations": [
1536
1717
  {
1537
1718
  "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",
1719
+ "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).",
1720
+ "name": "ButtonGroup",
1540
1721
  "cssProperties": [
1541
1722
  {
1542
- "description": "Text color (overrides theme color)",
1543
- "name": "--badge-color-foreground"
1723
+ "description": "Space between buttons when variant=\"spaced\" (default: spacing.sm)",
1724
+ "name": "--button-group-gap"
1544
1725
  },
1545
1726
  {
1546
- "description": "Background color (overrides theme color)",
1547
- "name": "--badge-color-background"
1727
+ "description": "Corner radius of outer edges when variant=\"connected\" (default: 0.5rem)",
1728
+ "name": "--button-group-border-radius"
1548
1729
  },
1549
1730
  {
1550
- "description": "Border radius size (overrides shape default, default: 999px)",
1551
- "name": "--badge-radius-size"
1731
+ "description": "Internal divider color between connected buttons (default: gray-300)",
1732
+ "name": "--button-group-border-color"
1552
1733
  },
1553
1734
  {
1554
- "description": "Horizontal padding (overrides size default)",
1555
- "name": "--badge-px"
1735
+ "description": "Background of a toggled/selected child (default: child's --button-tint-subtle)",
1736
+ "name": "--button-group-selection-bg"
1556
1737
  },
1557
1738
  {
1558
- "description": "Vertical padding (overrides size default)",
1559
- "name": "--badge-py"
1739
+ "description": "Text/icon color of a toggled/selected child (default: child's --button-tint-strong)",
1740
+ "name": "--button-group-selection-color"
1560
1741
  },
1561
1742
  {
1562
- "description": "Size of the dot affordance (default: 6px)",
1563
- "name": "--badge-dot-size"
1743
+ "description": "Highlight color of the selection shimmer effect (default: child's --button-tint-highlight) Reads the following CSS custom properties from each child button (set by the button plugin per color variant — see tailwind-plugin-button.ts):",
1744
+ "name": "--button-group-shimmer-highlight"
1745
+ },
1746
+ {
1747
+ "description": "Subtle tint of the child button's color family (read-only here)",
1748
+ "name": "--button-tint-subtle"
1749
+ },
1750
+ {
1751
+ "description": "Strong tint of the child button's color family (read-only here)",
1752
+ "name": "--button-tint-strong"
1753
+ },
1754
+ {
1755
+ "description": "Highlight tint of the child button's color family (read-only here)",
1756
+ "name": "--button-tint-highlight"
1564
1757
  }
1565
1758
  ],
1566
1759
  "slots": [
1567
1760
  {
1568
- "description": "Label text or child elements (e.g., btu-icon + text)",
1761
+ "description": "One or more `<button class=\"btu-button …\">` or `<btu-icon-button>` elements to display in the group. The `connected` variant rounds the outer corners on the real `<button>`, so anchors styled as `.btu-button` slotted directly will not get rounded corners. Use `<button>` for grouped controls.",
1569
1762
  "name": ""
1763
+ },
1764
+ {
1765
+ "description": "Pushes the child to the end of the group via auto-margin (vertical: bottom, horizontal: right)",
1766
+ "name": "end"
1570
1767
  }
1571
1768
  ],
1572
1769
  "members": [
1573
1770
  {
1574
1771
  "kind": "field",
1575
- "name": "variant",
1576
- "type": {
1577
- "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
1578
- },
1579
- "default": "'info'",
1580
- "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
1581
- "attribute": "variant"
1772
+ "name": "tagName",
1773
+ "static": true,
1774
+ "readonly": true
1582
1775
  },
1583
1776
  {
1584
1777
  "kind": "field",
1585
- "name": "dot",
1778
+ "name": "label",
1586
1779
  "type": {
1587
- "text": "boolean"
1780
+ "text": "string"
1588
1781
  },
1589
- "default": "false",
1590
- "description": "Should a dot be displayed before the label?",
1591
- "attribute": "dot"
1782
+ "default": "''",
1783
+ "description": "Accessible name for the group, announced by assistive devices via aria-label.",
1784
+ "attribute": "label"
1592
1785
  },
1593
1786
  {
1594
1787
  "kind": "field",
1595
- "name": "size",
1788
+ "name": "orientation",
1596
1789
  "type": {
1597
- "text": "'sm' | 'md' | 'lg'"
1598
- },
1599
- "default": "'sm'",
1600
- "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
1601
- "attribute": "size"
1602
- },
1603
- {
1604
- "kind": "method",
1605
- "name": "emit",
1606
- "parameters": [
1607
- {
1608
- "name": "type",
1609
- "type": {
1610
- "text": "K"
1611
- },
1612
- "description": "Event name from CustomEventMap"
1613
- },
1614
- {
1615
- "name": "detail",
1616
- "optional": true,
1617
- "type": {
1618
- "text": "UnpackCustomEvent<CustomEventMap[K]>"
1619
- },
1620
- "description": "Optional event detail payload"
1621
- }
1622
- ],
1623
- "description": "Dispatches a type-safe CustomEvent with standardized configuration.\n\nAll events are configured with:\n- bubbles: true (event propagates up the DOM tree)\n- cancelable: false (event cannot be cancelled)\n- composed: true (event crosses shadow DOM boundaries)",
1624
- "return": {
1625
- "type": {
1626
- "text": "boolean"
1627
- }
1628
- },
1629
- "inheritedFrom": {
1630
- "name": "EventEmitterMixin",
1631
- "module": "src/util/EventEmitterMixin.ts"
1632
- }
1633
- }
1634
- ],
1635
- "events": [
1636
- {
1637
- "type": {
1638
- "text": "CustomEvent"
1639
- },
1640
- "description": "Fired after first render and initialization",
1641
- "name": "btu-badge-ready"
1642
- }
1643
- ],
1644
- "attributes": [
1645
- {
1646
- "name": "variant",
1647
- "type": {
1648
- "text": "'info' | 'primary' | 'error' | 'success' | 'warning'"
1649
- },
1650
- "default": "'info'",
1651
- "description": "Style of the badge.\n- 'info': Informational (default)\n- 'primary': Primary action or emphasis\n- 'error': Error or danger state\n- 'success': Success or completion state\n- 'warning': Warning or caution state",
1652
- "fieldName": "variant",
1653
- "attribute": "variant"
1654
- },
1655
- {
1656
- "name": "dot",
1657
- "type": {
1658
- "text": "boolean"
1659
- },
1660
- "default": "false",
1661
- "description": "Should a dot be displayed before the label?",
1662
- "fieldName": "dot",
1663
- "attribute": "dot"
1664
- },
1665
- {
1666
- "name": "size",
1667
- "type": {
1668
- "text": "'sm' | 'md' | 'lg'"
1669
- },
1670
- "default": "'sm'",
1671
- "description": "Size variant.\n- 'sm': Small (default)\n- 'md': Medium\n- 'lg': Large",
1672
- "fieldName": "size",
1673
- "attribute": "size"
1674
- }
1675
- ],
1676
- "mixins": [
1677
- {
1678
- "name": "EventEmitterMixin",
1679
- "module": "/src/util/EventEmitterMixin.js"
1680
- },
1681
- {
1682
- "name": "ReadyMixin",
1683
- "module": "/src/util/ReadyMixin.js"
1684
- }
1685
- ],
1686
- "superclass": {
1687
- "name": "LitElement",
1688
- "package": "lit"
1689
- },
1690
- "tagName": "btu-badge",
1691
- "customElement": true
1692
- }
1693
- ],
1694
- "exports": [
1695
- {
1696
- "kind": "js",
1697
- "name": "default",
1698
- "declaration": {
1699
- "name": "Badge",
1700
- "module": "src/components/badge/Badge.ts"
1701
- }
1702
- },
1703
- {
1704
- "kind": "custom-element-definition",
1705
- "name": "btu-badge",
1706
- "declaration": {
1707
- "name": "Badge",
1708
- "module": "src/components/badge/Badge.ts"
1709
- }
1710
- }
1711
- ]
1712
- },
1713
- {
1714
- "kind": "javascript-module",
1715
- "path": "src/components/button-group/ButtonGroup.ts",
1716
- "declarations": [
1717
- {
1718
- "kind": "class",
1719
- "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).",
1720
- "name": "ButtonGroup",
1721
- "cssProperties": [
1722
- {
1723
- "description": "Space between buttons when variant=\"spaced\" (default: spacing.sm)",
1724
- "name": "--button-group-gap"
1725
- },
1726
- {
1727
- "description": "Corner radius of outer edges when variant=\"connected\" (default: 0.5rem)",
1728
- "name": "--button-group-border-radius"
1729
- },
1730
- {
1731
- "description": "Internal divider color between connected buttons (default: gray-300)",
1732
- "name": "--button-group-border-color"
1733
- },
1734
- {
1735
- "description": "Background of a toggled/selected child (default: child's --button-tint-subtle)",
1736
- "name": "--button-group-selection-bg"
1737
- },
1738
- {
1739
- "description": "Text/icon color of a toggled/selected child (default: child's --button-tint-strong)",
1740
- "name": "--button-group-selection-color"
1741
- },
1742
- {
1743
- "description": "Highlight color of the selection shimmer effect (default: child's --button-tint-highlight) Reads the following CSS custom properties from each child button (set by the button plugin per color variant — see tailwind-plugin-button.ts):",
1744
- "name": "--button-group-shimmer-highlight"
1745
- },
1746
- {
1747
- "description": "Subtle tint of the child button's color family (read-only here)",
1748
- "name": "--button-tint-subtle"
1749
- },
1750
- {
1751
- "description": "Strong tint of the child button's color family (read-only here)",
1752
- "name": "--button-tint-strong"
1753
- },
1754
- {
1755
- "description": "Highlight tint of the child button's color family (read-only here)",
1756
- "name": "--button-tint-highlight"
1757
- }
1758
- ],
1759
- "slots": [
1760
- {
1761
- "description": "One or more `<button class=\"btu-button …\">` or `<btu-icon-button>` elements to display in the group. The `connected` variant rounds the outer corners on the real `<button>`, so anchors styled as `.btu-button` slotted directly will not get rounded corners. Use `<button>` for grouped controls.",
1762
- "name": ""
1763
- },
1764
- {
1765
- "description": "Pushes the child to the end of the group via auto-margin (vertical: bottom, horizontal: right)",
1766
- "name": "end"
1767
- }
1768
- ],
1769
- "members": [
1770
- {
1771
- "kind": "field",
1772
- "name": "tagName",
1773
- "static": true,
1774
- "readonly": true
1775
- },
1776
- {
1777
- "kind": "field",
1778
- "name": "label",
1779
- "type": {
1780
- "text": "string"
1781
- },
1782
- "default": "''",
1783
- "description": "Accessible name for the group, announced by assistive devices via aria-label.",
1784
- "attribute": "label"
1785
- },
1786
- {
1787
- "kind": "field",
1788
- "name": "orientation",
1789
- "type": {
1790
- "text": "'horizontal' | 'vertical'"
1790
+ "text": "'horizontal' | 'vertical'"
1791
1791
  },
1792
1792
  "default": "'horizontal'",
1793
1793
  "description": "Layout direction of the buttons.",
@@ -1888,6 +1888,41 @@
1888
1888
  "name": "EventEmitterMixin",
1889
1889
  "module": "src/util/EventEmitterMixin.ts"
1890
1890
  }
1891
+ },
1892
+ {
1893
+ "kind": "field",
1894
+ "name": "#stopFns",
1895
+ "privacy": "private",
1896
+ "type": {
1897
+ "text": "Array<() => void>"
1898
+ },
1899
+ "default": "[]",
1900
+ "inheritedFrom": {
1901
+ "name": "OnFindMixin",
1902
+ "module": "src/util/OnFindMixin.ts"
1903
+ }
1904
+ },
1905
+ {
1906
+ "kind": "method",
1907
+ "name": "onFindRegistration",
1908
+ "return": {
1909
+ "type": {
1910
+ "text": "OnFindRegistration | OnFindRegistration[] | null"
1911
+ }
1912
+ },
1913
+ "inheritedFrom": {
1914
+ "name": "OnFindMixin",
1915
+ "module": "src/util/OnFindMixin.ts"
1916
+ }
1917
+ },
1918
+ {
1919
+ "kind": "method",
1920
+ "name": "#armFind",
1921
+ "privacy": "private",
1922
+ "inheritedFrom": {
1923
+ "name": "OnFindMixin",
1924
+ "module": "src/util/OnFindMixin.ts"
1925
+ }
1891
1926
  }
1892
1927
  ],
1893
1928
  "events": [
@@ -2030,6 +2065,10 @@
2030
2065
  "name": "EventEmitterMixin",
2031
2066
  "module": "/src/util/EventEmitterMixin.js"
2032
2067
  },
2068
+ {
2069
+ "name": "OnFindMixin",
2070
+ "module": "/src/util/OnFindMixin.js"
2071
+ },
2033
2072
  {
2034
2073
  "name": "ReadyMixin",
2035
2074
  "module": "/src/util/ReadyMixin.js"
@@ -2064,64 +2103,352 @@
2064
2103
  },
2065
2104
  {
2066
2105
  "kind": "javascript-module",
2067
- "path": "src/components/checkbox/Checkbox.ts",
2106
+ "path": "src/components/card/Card.ts",
2068
2107
  "declarations": [
2069
2108
  {
2070
2109
  "kind": "class",
2071
- "description": "A checkbox component for selecting one or more options from a set.\n\nUses a hidden native checkbox internally for accessibility and form\nparticipation. Styled via the `btu-checkbox` Tailwind plugin classes.\nThe component manages its own `className` — do not modify it externally\nafter initialization (classes present at connection time are preserved).",
2072
- "name": "Checkbox",
2110
+ "description": "A flexible content container for presenting and organizing information.\n\nThe layout is driven by composition:\n\n- a direct `<img>` or `<btu-icon>` child renders the media layout (image area);\n the icon shows in the image area as the fallback.\n- neither child renders a text-only card.\n- the `compact` attribute renders a quick-start tile; only a\n featured `<btu-icon>` and the `action` slot are used.\n\nComposable children, all relocated into the layout automatically:\n- `<img>` — the thumbnail.\n- `<btu-icon>` — the featured icon (compact) or the media image fallback (shown\n when no `<img>` is provided or it fails to load; defaults to `file-text`). The card sizes it.\n- `<btu-badge>` a status badge.\n- `slot=\"action\"` / `slot=\"secondary-action\"` a control in the top-right corner\n or next to the title. A `<btu-checkbox>` there stays visible and toggles the\n selected styling (listen for the bubbling `btu-checkbox-change` event); buttons\n reveal on hover/focus.\n\nCards are full-width by default and rely on the parent layout (grid or flex) to\ncontrol their size.",
2111
+ "name": "Card",
2073
2112
  "cssProperties": [
2074
2113
  {
2075
- "description": "Background and border color when checked or indeterminate, and tinted background/border on unchecked hover (default: oklch(var(--btu-theme-primary-700)))",
2076
- "name": "--checkbox-color-primary"
2114
+ "description": "Minimum width of the card (default: 160px)",
2115
+ "name": "--card-min-width"
2077
2116
  },
2078
2117
  {
2079
- "description": "Border color in the unchecked state (default: oklch(var(--btu-theme-gray-300)))",
2080
- "name": "--checkbox-color-border"
2118
+ "description": "Background color (default: var(--btu-theme-white))",
2119
+ "name": "--card-background"
2081
2120
  },
2082
2121
  {
2083
- "description": "Border and text color in the error state (default: oklch(var(--btu-theme-error-600)))",
2084
- "name": "--checkbox-color-error"
2122
+ "description": "Border style (default: 1px solid gray-200)",
2123
+ "name": "--card-border"
2085
2124
  },
2086
2125
  {
2087
- "description": "Corner rounding of the checkbox square (default: 4px)",
2088
- "name": "--checkbox-border-radius"
2126
+ "description": "Corner rounding (default: 8px)",
2127
+ "name": "--card-radius"
2089
2128
  },
2090
2129
  {
2091
- "description": "Distance between the checkbox and the label (default: 0.75rem)",
2092
- "name": "--checkbox-label-spacing"
2130
+ "description": "Fixed aspect ratio for the thumbnail when an `<img>` child is present (default: 16 / 9)",
2131
+ "name": "--card-img-ratio"
2093
2132
  },
2094
2133
  {
2095
- "description": "[Internal] Width and height of the checkbox square, set by the size variant (sm: 1rem, md: 1.25rem). Use the `size` attribute instead of overriding directly — the icon must scale in tandem.",
2096
- "name": "--checkbox-box-size"
2134
+ "description": "Object-fit mode for the `<img>` child thumbnail (default: contain)",
2135
+ "name": "--card-img-fit"
2097
2136
  },
2098
2137
  {
2099
- "description": "[Internal] Width and height of the icon inside the box, set by the size variant (sm: 0.75rem, md: 0.875rem). Use the `size` attribute instead of overriding directly.",
2100
- "name": "--checkbox-icon-size"
2138
+ "description": "Background color behind the composed icon (compact card and media-image fallback) (default: gray-100)",
2139
+ "name": "--card-icon-background"
2140
+ }
2141
+ ],
2142
+ "slots": [
2143
+ {
2144
+ "description": "Intended for a single action in the top-right corner of the card.",
2145
+ "name": "action"
2146
+ },
2147
+ {
2148
+ "description": "Intended for a single action next to the title.",
2149
+ "name": "secondary-action"
2150
+ },
2151
+ {
2152
+ "description": "Intended for additional metadata fields displayed below the title & description",
2153
+ "name": "fields"
2101
2154
  }
2102
2155
  ],
2103
2156
  "members": [
2104
2157
  {
2105
2158
  "kind": "field",
2106
- "name": "label",
2159
+ "name": "heading",
2107
2160
  "type": {
2108
- "text": "string | undefined"
2161
+ "text": "string"
2109
2162
  },
2110
- "description": "The text label displayed next to the checkbox.",
2111
- "attribute": "label"
2163
+ "default": "''",
2164
+ "description": "Heading text displayed on the card.",
2165
+ "attribute": "heading"
2112
2166
  },
2113
2167
  {
2114
2168
  "kind": "field",
2115
- "name": "description",
2169
+ "name": "headingLevel",
2116
2170
  "type": {
2117
- "text": "string | undefined"
2171
+ "text": "number"
2118
2172
  },
2119
- "description": "Optional helper text displayed below the label.",
2120
- "attribute": "description"
2173
+ "default": "2",
2174
+ "description": "Heading level (1-6) for the card heading element. Drives the semantic h1–h6 tag.\nInvalid values log a warning and fall back to the default (2).",
2175
+ "attribute": "heading-level"
2121
2176
  },
2122
2177
  {
2123
2178
  "kind": "field",
2124
- "name": "size",
2179
+ "name": "description",
2180
+ "type": {
2181
+ "text": "string | undefined"
2182
+ },
2183
+ "description": "Supporting body text. Truncated to 3 lines via CSS.",
2184
+ "attribute": "description"
2185
+ },
2186
+ {
2187
+ "kind": "field",
2188
+ "name": "compact",
2189
+ "type": {
2190
+ "text": "boolean"
2191
+ },
2192
+ "default": "false",
2193
+ "description": "Renders the card as a compact quick-start tile.\nBadge, image, fields, and secondary-action children are ignored in this case.",
2194
+ "attribute": "compact"
2195
+ },
2196
+ {
2197
+ "kind": "field",
2198
+ "name": "disabled",
2199
+ "type": {
2200
+ "text": "boolean"
2201
+ },
2202
+ "default": "false",
2203
+ "description": "Whether the card is disabled.",
2204
+ "attribute": "disabled"
2205
+ },
2206
+ {
2207
+ "kind": "field",
2208
+ "name": "href",
2209
+ "type": {
2210
+ "text": "string | undefined"
2211
+ },
2212
+ "description": "Navigation URL for the entire card surface.\nWhen set, the card renders as a link.",
2213
+ "attribute": "href"
2214
+ },
2215
+ {
2216
+ "kind": "method",
2217
+ "name": "emit",
2218
+ "parameters": [
2219
+ {
2220
+ "name": "type",
2221
+ "type": {
2222
+ "text": "K"
2223
+ },
2224
+ "description": "Event name from CustomEventMap"
2225
+ },
2226
+ {
2227
+ "name": "detail",
2228
+ "optional": true,
2229
+ "type": {
2230
+ "text": "UnpackCustomEvent<CustomEventMap[K]>"
2231
+ },
2232
+ "description": "Optional event detail payload"
2233
+ }
2234
+ ],
2235
+ "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)",
2236
+ "return": {
2237
+ "type": {
2238
+ "text": "boolean"
2239
+ }
2240
+ },
2241
+ "inheritedFrom": {
2242
+ "name": "EventEmitterMixin",
2243
+ "module": "src/util/EventEmitterMixin.ts"
2244
+ }
2245
+ },
2246
+ {
2247
+ "kind": "field",
2248
+ "name": "#stopFns",
2249
+ "privacy": "private",
2250
+ "type": {
2251
+ "text": "Array<() => void>"
2252
+ },
2253
+ "default": "[]",
2254
+ "inheritedFrom": {
2255
+ "name": "OnFindMixin",
2256
+ "module": "src/util/OnFindMixin.ts"
2257
+ }
2258
+ },
2259
+ {
2260
+ "kind": "method",
2261
+ "name": "onFindRegistration",
2262
+ "return": {
2263
+ "type": {
2264
+ "text": "OnFindRegistration | OnFindRegistration[] | null"
2265
+ }
2266
+ },
2267
+ "inheritedFrom": {
2268
+ "name": "OnFindMixin",
2269
+ "module": "src/util/OnFindMixin.ts"
2270
+ }
2271
+ },
2272
+ {
2273
+ "kind": "method",
2274
+ "name": "#armFind",
2275
+ "privacy": "private",
2276
+ "inheritedFrom": {
2277
+ "name": "OnFindMixin",
2278
+ "module": "src/util/OnFindMixin.ts"
2279
+ }
2280
+ }
2281
+ ],
2282
+ "events": [
2283
+ {
2284
+ "type": {
2285
+ "text": "CustomEvent"
2286
+ },
2287
+ "description": "Fired after first render and initialization",
2288
+ "name": "btu-card-ready"
2289
+ }
2290
+ ],
2291
+ "attributes": [
2292
+ {
2293
+ "name": "heading",
2294
+ "type": {
2295
+ "text": "string"
2296
+ },
2297
+ "default": "''",
2298
+ "description": "Heading text displayed on the card.",
2299
+ "fieldName": "heading",
2300
+ "attribute": "heading"
2301
+ },
2302
+ {
2303
+ "name": "heading-level",
2304
+ "type": {
2305
+ "text": "number"
2306
+ },
2307
+ "default": "2",
2308
+ "description": "Heading level (1-6) for the card heading element. Drives the semantic h1–h6 tag.\nInvalid values log a warning and fall back to the default (2).",
2309
+ "fieldName": "headingLevel",
2310
+ "attribute": "heading-level"
2311
+ },
2312
+ {
2313
+ "name": "description",
2314
+ "type": {
2315
+ "text": "string | undefined"
2316
+ },
2317
+ "description": "Supporting body text. Truncated to 3 lines via CSS.",
2318
+ "fieldName": "description",
2319
+ "attribute": "description"
2320
+ },
2321
+ {
2322
+ "name": "compact",
2323
+ "type": {
2324
+ "text": "boolean"
2325
+ },
2326
+ "default": "false",
2327
+ "description": "Renders the card as a compact quick-start tile.\nBadge, image, fields, and secondary-action children are ignored in this case.",
2328
+ "fieldName": "compact",
2329
+ "attribute": "compact"
2330
+ },
2331
+ {
2332
+ "name": "disabled",
2333
+ "type": {
2334
+ "text": "boolean"
2335
+ },
2336
+ "default": "false",
2337
+ "description": "Whether the card is disabled.",
2338
+ "fieldName": "disabled",
2339
+ "attribute": "disabled"
2340
+ },
2341
+ {
2342
+ "name": "href",
2343
+ "type": {
2344
+ "text": "string | undefined"
2345
+ },
2346
+ "description": "Navigation URL for the entire card surface.\nWhen set, the card renders as a link.",
2347
+ "fieldName": "href",
2348
+ "attribute": "href"
2349
+ }
2350
+ ],
2351
+ "mixins": [
2352
+ {
2353
+ "name": "EventEmitterMixin",
2354
+ "module": "/src/util/EventEmitterMixin.js"
2355
+ },
2356
+ {
2357
+ "name": "OnFindMixin",
2358
+ "module": "/src/util/OnFindMixin.js"
2359
+ },
2360
+ {
2361
+ "name": "ReadyMixin",
2362
+ "module": "/src/util/ReadyMixin.js"
2363
+ }
2364
+ ],
2365
+ "superclass": {
2366
+ "name": "LitElement",
2367
+ "package": "lit"
2368
+ },
2369
+ "tagName": "btu-card",
2370
+ "customElement": true
2371
+ }
2372
+ ],
2373
+ "exports": [
2374
+ {
2375
+ "kind": "js",
2376
+ "name": "default",
2377
+ "declaration": {
2378
+ "name": "Card",
2379
+ "module": "src/components/card/Card.ts"
2380
+ }
2381
+ },
2382
+ {
2383
+ "kind": "custom-element-definition",
2384
+ "name": "btu-card",
2385
+ "declaration": {
2386
+ "name": "Card",
2387
+ "module": "src/components/card/Card.ts"
2388
+ }
2389
+ }
2390
+ ]
2391
+ },
2392
+ {
2393
+ "kind": "javascript-module",
2394
+ "path": "src/components/checkbox/Checkbox.ts",
2395
+ "declarations": [
2396
+ {
2397
+ "kind": "class",
2398
+ "description": "A checkbox component for selecting one or more options from a set.\n\nUses a hidden native checkbox internally for accessibility and form\nparticipation. Styled via the `btu-checkbox` Tailwind plugin classes.\nThe component manages its own `className` — do not modify it externally\nafter initialization (classes present at connection time are preserved).",
2399
+ "name": "Checkbox",
2400
+ "cssProperties": [
2401
+ {
2402
+ "description": "Background and border color when checked or indeterminate, and tinted background/border on unchecked hover (default: oklch(var(--btu-theme-primary-700)))",
2403
+ "name": "--checkbox-color-primary"
2404
+ },
2405
+ {
2406
+ "description": "Border color in the unchecked state (default: oklch(var(--btu-theme-gray-300)))",
2407
+ "name": "--checkbox-color-border"
2408
+ },
2409
+ {
2410
+ "description": "Border and text color in the error state (default: oklch(var(--btu-theme-error-600)))",
2411
+ "name": "--checkbox-color-error"
2412
+ },
2413
+ {
2414
+ "description": "Corner rounding of the checkbox square (default: 4px)",
2415
+ "name": "--checkbox-border-radius"
2416
+ },
2417
+ {
2418
+ "description": "Distance between the checkbox and the label (default: 0.75rem)",
2419
+ "name": "--checkbox-label-spacing"
2420
+ },
2421
+ {
2422
+ "description": "[Internal] Width and height of the checkbox square, set by the size variant (sm: 1rem, md: 1.25rem). Use the `size` attribute instead of overriding directly — the icon must scale in tandem.",
2423
+ "name": "--checkbox-box-size"
2424
+ },
2425
+ {
2426
+ "description": "[Internal] Width and height of the icon inside the box, set by the size variant (sm: 0.75rem, md: 0.875rem). Use the `size` attribute instead of overriding directly.",
2427
+ "name": "--checkbox-icon-size"
2428
+ }
2429
+ ],
2430
+ "members": [
2431
+ {
2432
+ "kind": "field",
2433
+ "name": "label",
2434
+ "type": {
2435
+ "text": "string | undefined"
2436
+ },
2437
+ "description": "The text label displayed next to the checkbox.",
2438
+ "attribute": "label"
2439
+ },
2440
+ {
2441
+ "kind": "field",
2442
+ "name": "description",
2443
+ "type": {
2444
+ "text": "string | undefined"
2445
+ },
2446
+ "description": "Optional helper text displayed below the label.",
2447
+ "attribute": "description"
2448
+ },
2449
+ {
2450
+ "kind": "field",
2451
+ "name": "size",
2125
2452
  "type": {
2126
2453
  "text": "'sm' | 'md'"
2127
2454
  },
@@ -4534,137 +4861,426 @@
4534
4861
  },
4535
4862
  {
4536
4863
  "kind": "custom-element-definition",
4537
- "name": "btu-dropdown-menu",
4864
+ "name": "btu-dropdown-menu",
4865
+ "declaration": {
4866
+ "name": "DropdownMenu",
4867
+ "module": "src/components/dropdown/DropdownMenu.ts"
4868
+ }
4869
+ }
4870
+ ]
4871
+ },
4872
+ {
4873
+ "kind": "javascript-module",
4874
+ "path": "src/components/empty-state/EmptyState.ts",
4875
+ "declarations": [
4876
+ {
4877
+ "kind": "class",
4878
+ "description": "An empty state component for displaying placeholder content when no data is available.\n\nSupports a graphic slot for icons/images/pictures/SVGs, a heading, a description,\nand an actions slot for buttons or links. Available in three sizes (sm, md, lg)\nwith semantic heading levels.\n\n## Architecture: Light DOM + Pseudo-Slots\n\nThis component uses **Light DOM** (no Shadow Root) with pseudo-slots:\n- User-provided children are physically moved into internal containers\n- Movement is based on `slot` attributes\n- The `onFind` utility detects and redistributes newly-added children (one-time per element)\n\n### Node Redistribution Rules\n- `slot=\"graphic\"` - Moved to graphic container (icon, image, picture, or SVG)\n- `slot=\"actions\"` - Moved to an internal `btu-button-group` (variant=\"spaced\")\n\n### Actions composition\n\nThe actions container IS a `btu-button-group` with `variant=\"spaced\"`. Its `size`\nis mapped from the empty-state `size` prop (sm→small, md→medium, lg→large) so all\nchild `btu-button` / `btu-icon-button` elements get consistent sizing and group\nsemantics (`role=\"group\"`, roving tabindex, disabled propagation) for free.",
4879
+ "name": "EmptyState",
4880
+ "cssProperties": [
4881
+ {
4882
+ "description": "Maximum width of the content block (default: min(75cqw, 360px))",
4883
+ "name": "--empty-state-max-width"
4884
+ },
4885
+ {
4886
+ "description": "Heading text color (default: gray-900)",
4887
+ "name": "--empty-state-color-heading"
4888
+ },
4889
+ {
4890
+ "description": "Description text color (default: gray-500)",
4891
+ "name": "--empty-state-color-description"
4892
+ }
4893
+ ],
4894
+ "slots": [
4895
+ {
4896
+ "description": "Pseudo-slot for icon, image, picture, or SVG graphic. When the child is a `btu-icon`, the component overrides its `size` attribute based on the empty-state `size` prop (sm→md, md→lg, lg→xl). Use an `img`, `picture`, or inline `svg` for full size control.",
4897
+ "name": "graphic"
4898
+ },
4899
+ {
4900
+ "description": "Pseudo-slot for action buttons. Children are moved into an internal `btu-button-group` (variant=\"spaced\"), so size and disabled state are managed by the group.",
4901
+ "name": "actions"
4902
+ }
4903
+ ],
4904
+ "members": [
4905
+ {
4906
+ "kind": "field",
4907
+ "name": "heading",
4908
+ "type": {
4909
+ "text": "string"
4910
+ },
4911
+ "default": "''",
4912
+ "description": "Heading text displayed in the empty state.",
4913
+ "attribute": "heading"
4914
+ },
4915
+ {
4916
+ "kind": "field",
4917
+ "name": "description",
4918
+ "type": {
4919
+ "text": "string | undefined"
4920
+ },
4921
+ "description": "Description text displayed below the heading.",
4922
+ "attribute": "description"
4923
+ },
4924
+ {
4925
+ "kind": "field",
4926
+ "name": "size",
4927
+ "type": {
4928
+ "text": "'sm' | 'md' | 'lg'"
4929
+ },
4930
+ "default": "'md'",
4931
+ "description": "Size variant of the empty state. Affects spacing, description text, graphic size,\nand — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3).",
4932
+ "attribute": "size"
4933
+ },
4934
+ {
4935
+ "kind": "field",
4936
+ "name": "headingLevel",
4937
+ "type": {
4938
+ "text": "number | undefined"
4939
+ },
4940
+ "description": "Heading level (1-6). When set to a valid integer 1-6, overrides the size-based\ndefault and drives both the semantic h1-h6 tag and the visual heading size\n(btu-heading-1 through btu-heading-6). Invalid values log a warning and fall\nback to the size-based default.",
4941
+ "attribute": "heading-level"
4942
+ },
4943
+ {
4944
+ "kind": "field",
4945
+ "name": "initialClasses",
4946
+ "type": {
4947
+ "text": "string[]"
4948
+ },
4949
+ "privacy": "private",
4950
+ "default": "[]"
4951
+ },
4952
+ {
4953
+ "kind": "method",
4954
+ "name": "syncGraphicIconSize",
4955
+ "privacy": "private",
4956
+ "return": {
4957
+ "type": {
4958
+ "text": "void"
4959
+ }
4960
+ }
4961
+ },
4962
+ {
4963
+ "kind": "method",
4964
+ "name": "resolveHeadingLevel",
4965
+ "privacy": "private",
4966
+ "return": {
4967
+ "type": {
4968
+ "text": "HeadingLevel"
4969
+ }
4970
+ }
4971
+ },
4972
+ {
4973
+ "kind": "method",
4974
+ "name": "renderHeading",
4975
+ "privacy": "private",
4976
+ "return": {
4977
+ "type": {
4978
+ "text": "TemplateResult | string"
4979
+ }
4980
+ },
4981
+ "parameters": [
4982
+ {
4983
+ "name": "level",
4984
+ "type": {
4985
+ "text": "HeadingLevel"
4986
+ }
4987
+ },
4988
+ {
4989
+ "name": "className",
4990
+ "type": {
4991
+ "text": "string"
4992
+ }
4993
+ }
4994
+ ]
4995
+ },
4996
+ {
4997
+ "kind": "method",
4998
+ "name": "emit",
4999
+ "parameters": [
5000
+ {
5001
+ "name": "type",
5002
+ "type": {
5003
+ "text": "K"
5004
+ },
5005
+ "description": "Event name from CustomEventMap"
5006
+ },
5007
+ {
5008
+ "name": "detail",
5009
+ "optional": true,
5010
+ "type": {
5011
+ "text": "UnpackCustomEvent<CustomEventMap[K]>"
5012
+ },
5013
+ "description": "Optional event detail payload"
5014
+ }
5015
+ ],
5016
+ "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)",
5017
+ "return": {
5018
+ "type": {
5019
+ "text": "boolean"
5020
+ }
5021
+ },
5022
+ "inheritedFrom": {
5023
+ "name": "EventEmitterMixin",
5024
+ "module": "src/util/EventEmitterMixin.ts"
5025
+ }
5026
+ },
5027
+ {
5028
+ "kind": "field",
5029
+ "name": "#stopFns",
5030
+ "privacy": "private",
5031
+ "type": {
5032
+ "text": "Array<() => void>"
5033
+ },
5034
+ "default": "[]",
5035
+ "inheritedFrom": {
5036
+ "name": "OnFindMixin",
5037
+ "module": "src/util/OnFindMixin.ts"
5038
+ }
5039
+ },
5040
+ {
5041
+ "kind": "method",
5042
+ "name": "onFindRegistration",
5043
+ "return": {
5044
+ "type": {
5045
+ "text": "OnFindRegistration | OnFindRegistration[] | null"
5046
+ }
5047
+ },
5048
+ "inheritedFrom": {
5049
+ "name": "OnFindMixin",
5050
+ "module": "src/util/OnFindMixin.ts"
5051
+ }
5052
+ },
5053
+ {
5054
+ "kind": "method",
5055
+ "name": "#armFind",
5056
+ "privacy": "private",
5057
+ "inheritedFrom": {
5058
+ "name": "OnFindMixin",
5059
+ "module": "src/util/OnFindMixin.ts"
5060
+ }
5061
+ }
5062
+ ],
5063
+ "events": [
5064
+ {
5065
+ "type": {
5066
+ "text": "CustomEvent"
5067
+ },
5068
+ "description": "Fired after first render and initialization",
5069
+ "name": "btu-empty-state-ready"
5070
+ },
5071
+ {
5072
+ "type": {
5073
+ "text": "CustomEvent"
5074
+ },
5075
+ "description": "Bubbles from the internal actions button-group",
5076
+ "name": "btu-button-group-ready"
5077
+ }
5078
+ ],
5079
+ "attributes": [
5080
+ {
5081
+ "name": "heading",
5082
+ "type": {
5083
+ "text": "string"
5084
+ },
5085
+ "default": "''",
5086
+ "description": "Heading text displayed in the empty state.",
5087
+ "fieldName": "heading",
5088
+ "attribute": "heading"
5089
+ },
5090
+ {
5091
+ "name": "description",
5092
+ "type": {
5093
+ "text": "string | undefined"
5094
+ },
5095
+ "description": "Description text displayed below the heading.",
5096
+ "fieldName": "description",
5097
+ "attribute": "description"
5098
+ },
5099
+ {
5100
+ "name": "size",
5101
+ "type": {
5102
+ "text": "'sm' | 'md' | 'lg'"
5103
+ },
5104
+ "default": "'md'",
5105
+ "description": "Size variant of the empty state. Affects spacing, description text, graphic size,\nand — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3).",
5106
+ "fieldName": "size",
5107
+ "attribute": "size"
5108
+ },
5109
+ {
5110
+ "name": "heading-level",
5111
+ "type": {
5112
+ "text": "number | undefined"
5113
+ },
5114
+ "description": "Heading level (1-6). When set to a valid integer 1-6, overrides the size-based\ndefault and drives both the semantic h1-h6 tag and the visual heading size\n(btu-heading-1 through btu-heading-6). Invalid values log a warning and fall\nback to the size-based default.",
5115
+ "fieldName": "headingLevel",
5116
+ "attribute": "heading-level"
5117
+ }
5118
+ ],
5119
+ "mixins": [
5120
+ {
5121
+ "name": "EventEmitterMixin",
5122
+ "module": "/src/util/EventEmitterMixin.js"
5123
+ },
5124
+ {
5125
+ "name": "OnFindMixin",
5126
+ "module": "/src/util/OnFindMixin.js"
5127
+ },
5128
+ {
5129
+ "name": "ReadyMixin",
5130
+ "module": "/src/util/ReadyMixin.js"
5131
+ }
5132
+ ],
5133
+ "superclass": {
5134
+ "name": "LitElement",
5135
+ "package": "lit"
5136
+ },
5137
+ "tagName": "btu-empty-state",
5138
+ "customElement": true
5139
+ }
5140
+ ],
5141
+ "exports": [
5142
+ {
5143
+ "kind": "js",
5144
+ "name": "default",
5145
+ "declaration": {
5146
+ "name": "EmptyState",
5147
+ "module": "src/components/empty-state/EmptyState.ts"
5148
+ }
5149
+ },
5150
+ {
5151
+ "kind": "custom-element-definition",
5152
+ "name": "btu-empty-state",
4538
5153
  "declaration": {
4539
- "name": "DropdownMenu",
4540
- "module": "src/components/dropdown/DropdownMenu.ts"
5154
+ "name": "EmptyState",
5155
+ "module": "src/components/empty-state/EmptyState.ts"
4541
5156
  }
4542
5157
  }
4543
5158
  ]
4544
5159
  },
4545
5160
  {
4546
5161
  "kind": "javascript-module",
4547
- "path": "src/components/empty-state/EmptyState.ts",
5162
+ "path": "src/components/esca-avatar/EscaAvatar.ts",
4548
5163
  "declarations": [
4549
5164
  {
4550
5165
  "kind": "class",
4551
- "description": "An empty state component for displaying placeholder content when no data is available.\n\nSupports a graphic slot for icons/images/pictures/SVGs, a heading, a description,\nand an actions slot for buttons or links. Available in three sizes (sm, md, lg)\nwith semantic heading levels.\n\n## Architecture: Light DOM + Pseudo-Slots\n\nThis component uses **Light DOM** (no Shadow Root) with pseudo-slots:\n- User-provided children are physically moved into internal containers\n- Movement is based on `slot` attributes\n- The `onFind` utility detects and redistributes newly-added children (one-time per element)\n\n### Node Redistribution Rules\n- `slot=\"graphic\"` - Moved to graphic container (icon, image, picture, or SVG)\n- `slot=\"actions\"` - Moved to an internal `btu-button-group` (variant=\"spaced\")\n\n### Actions composition\n\nThe actions container IS a `btu-button-group` with `variant=\"spaced\"`. Its `size`\nis mapped from the empty-state `size` prop (sm→small, md→medium, lg→large) so all\nchild `btu-button` / `btu-icon-button` elements get consistent sizing and group\nsemantics (`role=\"group\"`, roving tabindex, disabled propagation) for free.",
4552
- "name": "EmptyState",
5166
+ "description": "The animated avatar for the Esca AI assistant, driven entirely by its `state` attribute so the same\nelement works wherever the assistant appears.\n\nAccessibility: the avatar is a visual indicator, not a status channel. By default it exposes a static\naccessible name (`role=\"img\"`, `aria-label=\"Esca\"`) so it reads like an author/identity avatar; both\nare only set when absent, so consumers can override them.\n- When the assistant is already named in the surrounding UI (the common case in a chat), treat the\n avatar as decorative: set `aria-hidden=\"true\"` to avoid a redundant announcement.\n- Do NOT convey activity (thinking / done) by changing this element's ARIA per `state` a looping\n `search` would announce repeatedly. Surface status as text in a polite `aria-live` region owned by\n the chat UI, which has the context to word and time announcements. This component intentionally\n does not announce its own state.",
5167
+ "name": "EscaAvatar",
4553
5168
  "cssProperties": [
4554
5169
  {
4555
- "description": "Maximum width of the content block (default: min(75cqw, 360px))",
4556
- "name": "--empty-state-max-width"
5170
+ "description": "Width and height of the avatar; overrides the `size` attribute (default: 2.5rem)",
5171
+ "name": "--esca-avatar-size"
5172
+ }
5173
+ ],
5174
+ "members": [
5175
+ {
5176
+ "kind": "field",
5177
+ "name": "state",
5178
+ "type": {
5179
+ "text": "EscaAvatarState"
5180
+ },
5181
+ "default": "'idle'",
5182
+ "description": "Animation to play; changing it swaps the clip.",
5183
+ "attribute": "state",
5184
+ "reflects": true
4557
5185
  },
4558
5186
  {
4559
- "description": "Heading text color (default: gray-900)",
4560
- "name": "--empty-state-color-heading"
5187
+ "kind": "field",
5188
+ "name": "size",
5189
+ "type": {
5190
+ "text": "EscaAvatarSize"
5191
+ },
5192
+ "default": "'md'",
5193
+ "description": "Size of the avatar, mirroring `<btu-avatar>`'s scale. `--esca-avatar-size` overrides it.",
5194
+ "attribute": "size",
5195
+ "reflects": true
4561
5196
  },
4562
5197
  {
4563
- "description": "Description text color (default: gray-500)",
4564
- "name": "--empty-state-color-description"
4565
- }
4566
- ],
4567
- "slots": [
5198
+ "kind": "field",
5199
+ "name": "_containerRef",
5200
+ "type": {
5201
+ "text": "Ref<HTMLDivElement>"
5202
+ },
5203
+ "privacy": "private"
5204
+ },
4568
5205
  {
4569
- "description": "Pseudo-slot for icon, image, picture, or SVG graphic. When the child is a `btu-icon`, the component overrides its `size` attribute based on the empty-state `size` prop (sm→md, md→lg, lg→xl). Use an `img`, `picture`, or inline `svg` for full size control.",
4570
- "name": "graphic"
5206
+ "kind": "field",
5207
+ "name": "_animation",
5208
+ "type": {
5209
+ "text": "AnimationItem | null"
5210
+ },
5211
+ "privacy": "private",
5212
+ "default": "null"
4571
5213
  },
4572
5214
  {
4573
- "description": "Pseudo-slot for action buttons. Children are moved into an internal `btu-button-group` (variant=\"spaced\"), so size and disabled state are managed by the group.",
4574
- "name": "actions"
4575
- }
4576
- ],
4577
- "members": [
5215
+ "kind": "field",
5216
+ "name": "_rendered",
5217
+ "type": {
5218
+ "text": "EscaAvatarState | null"
5219
+ },
5220
+ "privacy": "private",
5221
+ "default": "null"
5222
+ },
4578
5223
  {
4579
5224
  "kind": "field",
4580
- "name": "heading",
5225
+ "name": "_reduceMotion",
4581
5226
  "type": {
4582
- "text": "string"
5227
+ "text": "boolean"
4583
5228
  },
4584
- "default": "''",
4585
- "description": "Heading text displayed in the empty state.",
4586
- "attribute": "heading"
5229
+ "privacy": "private",
5230
+ "default": "false"
4587
5231
  },
4588
5232
  {
4589
5233
  "kind": "field",
4590
- "name": "description",
5234
+ "name": "_loadToken",
4591
5235
  "type": {
4592
- "text": "string | undefined"
5236
+ "text": "number"
4593
5237
  },
4594
- "description": "Description text displayed below the heading.",
4595
- "attribute": "description"
5238
+ "privacy": "private",
5239
+ "default": "0"
4596
5240
  },
4597
5241
  {
4598
5242
  "kind": "field",
4599
- "name": "size",
5243
+ "name": "_resizeObserver",
4600
5244
  "type": {
4601
- "text": "'sm' | 'md' | 'lg'"
5245
+ "text": "ResizeObserver | undefined"
4602
5246
  },
4603
- "default": "'md'",
4604
- "description": "Size variant of the empty state. Affects spacing, description text, graphic size,\nand — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3).",
4605
- "attribute": "size"
5247
+ "privacy": "private"
4606
5248
  },
4607
5249
  {
4608
5250
  "kind": "field",
4609
- "name": "headingLevel",
5251
+ "name": "_intersectionObserver",
4610
5252
  "type": {
4611
- "text": "number | undefined"
5253
+ "text": "IntersectionObserver | undefined"
4612
5254
  },
4613
- "description": "Heading level (1-6). When set to a valid integer 1-6, overrides the size-based\ndefault and drives both the semantic h1-h6 tag and the visual heading size\n(btu-heading-1 through btu-heading-6). Invalid values log a warning and fall\nback to the size-based default.",
4614
- "attribute": "heading-level"
5255
+ "privacy": "private"
4615
5256
  },
4616
5257
  {
4617
5258
  "kind": "field",
4618
- "name": "initialClasses",
5259
+ "name": "_motionQuery",
4619
5260
  "type": {
4620
- "text": "string[]"
5261
+ "text": "MediaQueryList | undefined"
4621
5262
  },
4622
- "privacy": "private",
4623
- "default": "[]"
5263
+ "privacy": "private"
4624
5264
  },
4625
5265
  {
4626
5266
  "kind": "method",
4627
- "name": "syncGraphicIconSize",
4628
- "privacy": "private",
4629
- "return": {
4630
- "type": {
4631
- "text": "void"
4632
- }
4633
- }
5267
+ "name": "_applySize",
5268
+ "privacy": "private"
5269
+ },
5270
+ {
5271
+ "kind": "field",
5272
+ "name": "_onMotionChange",
5273
+ "privacy": "private"
4634
5274
  },
4635
5275
  {
4636
5276
  "kind": "method",
4637
- "name": "resolveHeadingLevel",
4638
- "privacy": "private",
4639
- "return": {
4640
- "type": {
4641
- "text": "HeadingLevel"
4642
- }
4643
- }
5277
+ "name": "_play",
5278
+ "privacy": "private"
4644
5279
  },
4645
5280
  {
4646
5281
  "kind": "method",
4647
- "name": "renderHeading",
4648
- "privacy": "private",
4649
- "return": {
4650
- "type": {
4651
- "text": "TemplateResult | string"
4652
- }
4653
- },
4654
- "parameters": [
4655
- {
4656
- "name": "level",
4657
- "type": {
4658
- "text": "HeadingLevel"
4659
- }
4660
- },
4661
- {
4662
- "name": "className",
4663
- "type": {
4664
- "text": "string"
4665
- }
4666
- }
4667
- ]
5282
+ "name": "_destroy",
5283
+ "privacy": "private"
4668
5284
  },
4669
5285
  {
4670
5286
  "kind": "method",
@@ -4703,55 +5319,37 @@
4703
5319
  "type": {
4704
5320
  "text": "CustomEvent"
4705
5321
  },
4706
- "description": "Fired after first render and initialization",
4707
- "name": "btu-empty-state-ready"
5322
+ "description": "Fired after the first render",
5323
+ "name": "btu-esca-avatar-ready"
4708
5324
  },
4709
5325
  {
4710
5326
  "type": {
4711
- "text": "CustomEvent"
5327
+ "text": "CustomEvent<{state: string}>"
4712
5328
  },
4713
- "description": "Bubbles from the internal actions button-group",
4714
- "name": "btu-button-group-ready"
5329
+ "description": "Fired when a non-looping animation finishes",
5330
+ "name": "btu-esca-avatar-complete"
4715
5331
  }
4716
5332
  ],
4717
5333
  "attributes": [
4718
5334
  {
4719
- "name": "heading",
4720
- "type": {
4721
- "text": "string"
4722
- },
4723
- "default": "''",
4724
- "description": "Heading text displayed in the empty state.",
4725
- "fieldName": "heading",
4726
- "attribute": "heading"
4727
- },
4728
- {
4729
- "name": "description",
5335
+ "name": "state",
4730
5336
  "type": {
4731
- "text": "string | undefined"
5337
+ "text": "EscaAvatarState"
4732
5338
  },
4733
- "description": "Description text displayed below the heading.",
4734
- "fieldName": "description",
4735
- "attribute": "description"
5339
+ "default": "'idle'",
5340
+ "description": "Animation to play; changing it swaps the clip.",
5341
+ "fieldName": "state",
5342
+ "attribute": "state"
4736
5343
  },
4737
5344
  {
4738
5345
  "name": "size",
4739
5346
  "type": {
4740
- "text": "'sm' | 'md' | 'lg'"
5347
+ "text": "EscaAvatarSize"
4741
5348
  },
4742
5349
  "default": "'md'",
4743
- "description": "Size variant of the empty state. Affects spacing, description text, graphic size,\nand — when `heading-level` is unset — the default heading level (sm→5, md→4, lg→3).",
5350
+ "description": "Size of the avatar, mirroring `<btu-avatar>`'s scale. `--esca-avatar-size` overrides it.",
4744
5351
  "fieldName": "size",
4745
5352
  "attribute": "size"
4746
- },
4747
- {
4748
- "name": "heading-level",
4749
- "type": {
4750
- "text": "number | undefined"
4751
- },
4752
- "description": "Heading level (1-6). When set to a valid integer 1-6, overrides the size-based\ndefault and drives both the semantic h1-h6 tag and the visual heading size\n(btu-heading-1 through btu-heading-6). Invalid values log a warning and fall\nback to the size-based default.",
4753
- "fieldName": "headingLevel",
4754
- "attribute": "heading-level"
4755
5353
  }
4756
5354
  ],
4757
5355
  "mixins": [
@@ -4768,7 +5366,7 @@
4768
5366
  "name": "LitElement",
4769
5367
  "package": "lit"
4770
5368
  },
4771
- "tagName": "btu-empty-state",
5369
+ "tagName": "btu-esca-avatar",
4772
5370
  "customElement": true
4773
5371
  }
4774
5372
  ],
@@ -4777,16 +5375,16 @@
4777
5375
  "kind": "js",
4778
5376
  "name": "default",
4779
5377
  "declaration": {
4780
- "name": "EmptyState",
4781
- "module": "src/components/empty-state/EmptyState.ts"
5378
+ "name": "EscaAvatar",
5379
+ "module": "src/components/esca-avatar/EscaAvatar.ts"
4782
5380
  }
4783
5381
  },
4784
5382
  {
4785
5383
  "kind": "custom-element-definition",
4786
- "name": "btu-empty-state",
5384
+ "name": "btu-esca-avatar",
4787
5385
  "declaration": {
4788
- "name": "EmptyState",
4789
- "module": "src/components/empty-state/EmptyState.ts"
5386
+ "name": "EscaAvatar",
5387
+ "module": "src/components/esca-avatar/EscaAvatar.ts"
4790
5388
  }
4791
5389
  }
4792
5390
  ]
@@ -8805,6 +9403,41 @@
8805
9403
  "name": "EventEmitterMixin",
8806
9404
  "module": "src/util/EventEmitterMixin.ts"
8807
9405
  }
9406
+ },
9407
+ {
9408
+ "kind": "field",
9409
+ "name": "#stopFns",
9410
+ "privacy": "private",
9411
+ "type": {
9412
+ "text": "Array<() => void>"
9413
+ },
9414
+ "default": "[]",
9415
+ "inheritedFrom": {
9416
+ "name": "OnFindMixin",
9417
+ "module": "src/util/OnFindMixin.ts"
9418
+ }
9419
+ },
9420
+ {
9421
+ "kind": "method",
9422
+ "name": "onFindRegistration",
9423
+ "return": {
9424
+ "type": {
9425
+ "text": "OnFindRegistration | OnFindRegistration[] | null"
9426
+ }
9427
+ },
9428
+ "inheritedFrom": {
9429
+ "name": "OnFindMixin",
9430
+ "module": "src/util/OnFindMixin.ts"
9431
+ }
9432
+ },
9433
+ {
9434
+ "kind": "method",
9435
+ "name": "#armFind",
9436
+ "privacy": "private",
9437
+ "inheritedFrom": {
9438
+ "name": "OnFindMixin",
9439
+ "module": "src/util/OnFindMixin.ts"
9440
+ }
8808
9441
  }
8809
9442
  ],
8810
9443
  "events": [
@@ -8887,6 +9520,10 @@
8887
9520
  "name": "EventEmitterMixin",
8888
9521
  "module": "/src/util/EventEmitterMixin.js"
8889
9522
  },
9523
+ {
9524
+ "name": "OnFindMixin",
9525
+ "module": "/src/util/OnFindMixin.js"
9526
+ },
8890
9527
  {
8891
9528
  "name": "ReadyMixin",
8892
9529
  "module": "/src/util/ReadyMixin.js"
@@ -9212,6 +9849,85 @@
9212
9849
  }
9213
9850
  ]
9214
9851
  },
9852
+ {
9853
+ "kind": "javascript-module",
9854
+ "path": "src/util/OnFindMixin.ts",
9855
+ "declarations": [
9856
+ {
9857
+ "kind": "class",
9858
+ "description": "",
9859
+ "name": "OnFindMixinInterface",
9860
+ "members": [
9861
+ {
9862
+ "kind": "method",
9863
+ "name": "onFindRegistration",
9864
+ "return": {
9865
+ "type": {
9866
+ "text": "OnFindRegistration | OnFindRegistration[] | null"
9867
+ }
9868
+ },
9869
+ "description": "Return this component's onFind registration(s), or null to skip registering\n(e.g. required containers aren't present yet). Return an array to register\nseveral independent sweeps; each is disposed together on disconnect.\nRe-invoked on every (re)registration — query containers HERE rather than\ncapturing them once, so a reattach re-binds against the current DOM."
9870
+ }
9871
+ ]
9872
+ },
9873
+ {
9874
+ "kind": "mixin",
9875
+ "description": "",
9876
+ "name": "OnFindMixin",
9877
+ "members": [
9878
+ {
9879
+ "kind": "field",
9880
+ "name": "#stopFns",
9881
+ "privacy": "private",
9882
+ "type": {
9883
+ "text": "Array<() => void>"
9884
+ },
9885
+ "default": "[]"
9886
+ },
9887
+ {
9888
+ "kind": "method",
9889
+ "name": "onFindRegistration",
9890
+ "return": {
9891
+ "type": {
9892
+ "text": "OnFindRegistration | OnFindRegistration[] | null"
9893
+ }
9894
+ }
9895
+ },
9896
+ {
9897
+ "kind": "method",
9898
+ "name": "#armFind",
9899
+ "privacy": "private"
9900
+ }
9901
+ ],
9902
+ "parameters": [
9903
+ {
9904
+ "name": "superClass",
9905
+ "type": {
9906
+ "text": "T"
9907
+ }
9908
+ }
9909
+ ]
9910
+ }
9911
+ ],
9912
+ "exports": [
9913
+ {
9914
+ "kind": "js",
9915
+ "name": "OnFindMixinInterface",
9916
+ "declaration": {
9917
+ "name": "OnFindMixinInterface",
9918
+ "module": "src/util/OnFindMixin.ts"
9919
+ }
9920
+ },
9921
+ {
9922
+ "kind": "js",
9923
+ "name": "OnFindMixin",
9924
+ "declaration": {
9925
+ "name": "OnFindMixin",
9926
+ "module": "src/util/OnFindMixin.ts"
9927
+ }
9928
+ }
9929
+ ]
9930
+ },
9215
9931
  {
9216
9932
  "kind": "javascript-module",
9217
9933
  "path": "src/util/ProgressMixin.ts",