@brightspot/ui 5.1.0 → 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 (105) hide show
  1. package/dist/components/esca-avatar/EscaAvatar.d.ts +70 -0
  2. package/dist/components/esca-avatar/EscaAvatar.d.ts.map +1 -0
  3. package/dist/components/esca-avatar/EscaAvatar.js +218 -0
  4. package/dist/components/esca-avatar/EscaAvatar.js.map +1 -0
  5. package/dist/components/esca-avatar/animations/esca-search.json +1 -0
  6. package/dist/components/esca-avatar/animations/esca-task-complete.json +1 -0
  7. package/dist/components/esca-avatar/animations/esca-wave.json +1 -0
  8. package/dist/custom-elements.json +849 -617
  9. package/dist/storybook/assets/{ActionBar.stories-D9ok2eVg.js → ActionBar.stories-CBN_ShP5.js} +1 -1
  10. package/dist/storybook/assets/{ActionItem.stories-DjPfYpgA.js → ActionItem.stories-DysfIj7U.js} +1 -1
  11. package/dist/storybook/assets/{Avatar.stories-Di3s5wxK.js → Avatar.stories-BdgqH7I_.js} +1 -1
  12. package/dist/storybook/assets/{AvatarGroup.stories-CT7lYX_U.js → AvatarGroup.stories-DFCG_0Py.js} +1 -1
  13. package/dist/storybook/assets/{Badge.stories-9unZqfhH.js → Badge.stories-BWPIJ2jm.js} +1 -1
  14. package/dist/storybook/assets/{Button-DuuAvVjP.js → Button-B1_SwzVL.js} +1 -1
  15. package/dist/storybook/assets/{Button.stories-KDBmJ9xt.js → Button.stories-C-H-KIcV.js} +1 -1
  16. package/dist/storybook/assets/{ButtonGroup.stories-BeWYMkDy.js → ButtonGroup.stories-BBdtnaP_.js} +1 -1
  17. package/dist/storybook/assets/{Card.stories-BNMJ-H5I.js → Card.stories-FLC-WKC_.js} +1 -1
  18. package/dist/storybook/assets/{Celebrate.stories-Cue8O4hb.js → Celebrate.stories-CZ7SfTOh.js} +1 -1
  19. package/dist/storybook/assets/{Checkbox.stories-DLe4npId.js → Checkbox.stories-C42Z-jkF.js} +1 -1
  20. package/dist/storybook/assets/{CircularProgress.stories-BHB2K82M.js → CircularProgress.stories-DoC0japf.js} +1 -1
  21. package/dist/storybook/assets/{ClipboardMixin.stories-mU-JGoHp.js → ClipboardMixin.stories-Ci-drbJq.js} +1 -1
  22. package/dist/storybook/assets/{Color-6BZIO3FS-D3GAvUXG.js → Color-6BZIO3FS-rxeQBzj6.js} +1 -1
  23. package/dist/storybook/assets/{Colors.stories-a83X2cLQ.js → Colors.stories-Bw1Kp3B7.js} +1 -1
  24. package/dist/storybook/assets/{CombinedEffects.stories-sLTopxBQ.js → CombinedEffects.stories-DArqLKI1.js} +1 -1
  25. package/dist/storybook/assets/{ComponentStatesMixin-CJ9pmXHc.js → ComponentStatesMixin-kUcZl-YW.js} +1 -1
  26. package/dist/storybook/assets/{ComponentStatesMixin.stories-DSkFzAxR.js → ComponentStatesMixin.stories-PrGY6akN.js} +1 -1
  27. package/dist/storybook/assets/{CopyToClipboard.stories-DqMxtd4b.js → CopyToClipboard.stories-CUzNoCic.js} +1 -1
  28. package/dist/storybook/assets/{Debounce.stories-DV30whKw.js → Debounce.stories-CrnUlkHs.js} +1 -1
  29. package/dist/storybook/assets/{DocsRenderer-LL677BLK-DmVtYsJx.js → DocsRenderer-LL677BLK-BM3eNhez.js} +3 -3
  30. package/dist/storybook/assets/{Dropdown.stories-sCz8_Hkw.js → Dropdown.stories-DyIY6e6W.js} +1 -1
  31. package/dist/storybook/assets/{EmptyState.stories-kBKfr87C.js → EmptyState.stories-BXFcxFcG.js} +1 -1
  32. package/dist/storybook/assets/EscaAvatar.stories-DnriDX7_.js +138 -0
  33. package/dist/storybook/assets/{Events.stories-BXdHEFJR.js → Events.stories-YjZ1Qtl4.js} +1 -1
  34. package/dist/storybook/assets/{Heading.stories-B2XJMBD8.js → Heading.stories-CfQHk5pf.js} +1 -1
  35. package/dist/storybook/assets/{HueRipple.stories-BfzsAQYM.js → HueRipple.stories-CR75dLBM.js} +1 -1
  36. package/dist/storybook/assets/{Icon.stories--pcHe1x-.js → Icon.stories-BCSRhY2s.js} +1 -1
  37. package/dist/storybook/assets/{IconButton.stories-dbXfrgH3.js → IconButton.stories-0O4LM1u6.js} +1 -1
  38. package/dist/storybook/assets/{LinearProgress.stories-CApOBX0x.js → LinearProgress.stories-B7GYC8WE.js} +1 -1
  39. package/dist/storybook/assets/{OnFindMixin.stories-df6ckqw3.js → OnFindMixin.stories-UOK_ZP2n.js} +1 -1
  40. package/dist/storybook/assets/{Pagination.stories-_MiDRipW.js → Pagination.stories-Co3mbyct.js} +1 -1
  41. package/dist/storybook/assets/{Popover.stories-9hVZFeMx.js → Popover.stories-D5gsWcB0.js} +1 -1
  42. package/dist/storybook/assets/{ReadyMixin-HHwtCrVi.js → ReadyMixin-DkhLzoe0.js} +1 -1
  43. package/dist/storybook/assets/{RovingTabindexMixin.stories-B6MPGbVh.js → RovingTabindexMixin.stories-DPhOWmKd.js} +1 -1
  44. package/dist/storybook/assets/{Rtc.stories-D3tZOSkM.js → Rtc.stories-D5Vpw1oP.js} +1 -1
  45. package/dist/storybook/assets/{ScrollShadow.stories-B1dTcJR4.js → ScrollShadow.stories-Cmbqjk5X.js} +1 -1
  46. package/dist/storybook/assets/{Switch.stories-Bp-Guy3z.js → Switch.stories-Bfmr9Ugg.js} +1 -1
  47. package/dist/storybook/assets/{Tab.stories-Caxi7G_1.js → Tab.stories-DbucUczE.js} +1 -1
  48. package/dist/storybook/assets/{Tabs.stories-g5Nb7YDi.js → Tabs.stories-DnPRsSsj.js} +1 -1
  49. package/dist/storybook/assets/{Throttle.stories-BzWv-mzN.js → Throttle.stories-DNwTsNRC.js} +1 -1
  50. package/dist/storybook/assets/{Tooltip.stories-BlaTc14X.js → Tooltip.stories-Fsp2BRAr.js} +1 -1
  51. package/dist/storybook/assets/{Upload.stories-a9edmUmW.js → Upload.stories-C-WggEd6.js} +1 -1
  52. package/dist/storybook/assets/{UploadItem.stories-BOIu5j_i.js → UploadItem.stories-DwQzECXv.js} +1 -1
  53. package/dist/storybook/assets/{Welcome.stories-D33npbIl.js → Welcome.stories-DFluhbVr.js} +1 -1
  54. package/dist/storybook/assets/{Widget.stories-D0vHPAyP.js → Widget.stories-7pJNHWTu.js} +1 -1
  55. package/dist/storybook/assets/{WithTooltip-65CFNBJE-WOhnQufs.js → WithTooltip-65CFNBJE-BcgHQTz7.js} +1 -1
  56. package/dist/storybook/assets/{blocks-B17JEOI8.js → blocks-U4F5yAu3.js} +5 -5
  57. package/dist/storybook/assets/{formatter-EIJCOSYU-QKmiwKu7.js → formatter-EIJCOSYU-BjQsmbLH.js} +1 -1
  58. package/dist/storybook/assets/if-defined-CM2lJk-0.js +1 -0
  59. package/dist/storybook/assets/iframe-1F7Ef_8q.css +1 -0
  60. package/dist/storybook/assets/{iframe-BqpRijx3.js → iframe-DNJdsh5L.js} +9 -9
  61. package/dist/storybook/assets/{index-CpksO7cK.js → index-1U9xrCIK.js} +1 -1
  62. package/dist/storybook/assets/{onFind-C_VPLxg8.js → onFind-AbVF4rYD.js} +1 -1
  63. package/dist/storybook/assets/{onFind.stories-BuZMC3tk.js → onFind.stories-j334ViWp.js} +1 -1
  64. package/dist/storybook/assets/{onRemove.stories-HDkMhdmO.js → onRemove.stories-fKMxne2_.js} +1 -1
  65. package/dist/storybook/assets/{onVisible.stories-CRCllRfN.js → onVisible.stories-BCRoHlJz.js} +1 -1
  66. package/dist/storybook/assets/{style-map-DukvFNCc.js → style-map-BZ07XihX.js} +1 -1
  67. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-BUo_WYvV.js → syntaxhighlighter-ED5Y7EFY-C2D-CgsB.js} +1 -1
  68. package/dist/storybook/iframe.html +2 -2
  69. package/dist/storybook/index.json +1 -1
  70. package/dist/storybook/project.json +1 -1
  71. package/dist/tailwind-plugin-button.js +5 -5
  72. package/dist/tailwind-plugin-button.js.map +1 -1
  73. package/dist/tailwind-plugin-button.ts +5 -5
  74. package/dist/tailwind.config.d.ts.map +1 -1
  75. package/dist/tailwind.config.js +1 -1
  76. package/dist/tailwind.config.js.map +1 -1
  77. package/dist/tailwind.config.ts +1 -2
  78. package/dist/util/EventEmitterMixin.d.ts +4 -0
  79. package/dist/util/EventEmitterMixin.d.ts.map +1 -1
  80. package/dist/util/EventEmitterMixin.js.map +1 -1
  81. package/docs/components/EscaAvatar.md +70 -0
  82. package/docs/components/README.md +1 -0
  83. package/package.json +2 -1
  84. package/src/legacy/tool-ui/src/ContentForm.css +1 -1
  85. package/src/legacy/tool-ui/src/Guide.css +1 -1
  86. package/src/legacy/tool-ui/src/Notification.css +1 -1
  87. package/src/legacy/tool-ui/src/Popup.css +4 -1
  88. package/src/legacy/tool-ui/src/RepeatableContentInputGroup.css +3 -3
  89. package/src/legacy/tool-ui/src/dropdown/index.ts +2 -2
  90. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.c6f3142a97caa5cd3c21.js +500 -0
  91. package/src/legacy/tool-ui/src/main/webapp/dist/v4.c1c3bde6e394b2a2b75c.css +3 -0
  92. package/src/legacy/tool-ui/src/main/webapp/dist/{v4.b892feb8ec199202fd18.js → v4.da15ce3ce45e85b4880a.js} +3 -3
  93. package/src/legacy/tool-ui/src/main/webapp/dist/v5.4edf99db4a5f4969d041.css +5 -0
  94. package/src/legacy/tool-ui/src/main/webapp/dist/{v5.493c3ddf65c4fa599ff0.js → v5.8491d982a282935a3058.js} +4 -4
  95. package/src/legacy/tool-ui/src/main/webapp/v4/ContentForm.less +1 -1
  96. package/src/legacy/tool-ui/src/main/webapp/v4/ContentSelector.less +3 -3
  97. package/src/legacy/tool-ui/src/v5.ts +1 -1
  98. package/dist/storybook/assets/if-defined-0srVwUDm.js +0 -1
  99. package/dist/storybook/assets/iframe-DfU9RLLj.css +0 -1
  100. package/src/legacy/tool-ui/src/main/webapp/dist/RTEProseMirror.e8344eaeea387c600257.js +0 -500
  101. package/src/legacy/tool-ui/src/main/webapp/dist/v4.a6f53058dbb04a69aa5c.css +0 -3
  102. package/src/legacy/tool-ui/src/main/webapp/dist/v5.d49a759cb0b7cffd76e4.css +0 -5
  103. /package/src/legacy/tool-ui/src/main/webapp/dist/{RTEProseMirror.e8344eaeea387c600257.js.LICENSE.txt → RTEProseMirror.c6f3142a97caa5cd3c21.js.LICENSE.txt} +0 -0
  104. /package/src/legacy/tool-ui/src/main/webapp/dist/{v4.b892feb8ec199202fd18.js.LICENSE.txt → v4.da15ce3ce45e85b4880a.js.LICENSE.txt} +0 -0
  105. /package/src/legacy/tool-ui/src/main/webapp/dist/{v5.493c3ddf65c4fa599ff0.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.",
@@ -2103,93 +2103,95 @@
2103
2103
  },
2104
2104
  {
2105
2105
  "kind": "javascript-module",
2106
- "path": "src/components/checkbox/Checkbox.ts",
2106
+ "path": "src/components/card/Card.ts",
2107
2107
  "declarations": [
2108
2108
  {
2109
2109
  "kind": "class",
2110
- "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).",
2111
- "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",
2112
2112
  "cssProperties": [
2113
2113
  {
2114
- "description": "Background and border color when checked or indeterminate, and tinted background/border on unchecked hover (default: oklch(var(--btu-theme-primary-700)))",
2115
- "name": "--checkbox-color-primary"
2114
+ "description": "Minimum width of the card (default: 160px)",
2115
+ "name": "--card-min-width"
2116
2116
  },
2117
2117
  {
2118
- "description": "Border color in the unchecked state (default: oklch(var(--btu-theme-gray-300)))",
2119
- "name": "--checkbox-color-border"
2118
+ "description": "Background color (default: var(--btu-theme-white))",
2119
+ "name": "--card-background"
2120
2120
  },
2121
2121
  {
2122
- "description": "Border and text color in the error state (default: oklch(var(--btu-theme-error-600)))",
2123
- "name": "--checkbox-color-error"
2122
+ "description": "Border style (default: 1px solid gray-200)",
2123
+ "name": "--card-border"
2124
2124
  },
2125
2125
  {
2126
- "description": "Corner rounding of the checkbox square (default: 4px)",
2127
- "name": "--checkbox-border-radius"
2126
+ "description": "Corner rounding (default: 8px)",
2127
+ "name": "--card-radius"
2128
2128
  },
2129
2129
  {
2130
- "description": "Distance between the checkbox and the label (default: 0.75rem)",
2131
- "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"
2132
2132
  },
2133
2133
  {
2134
- "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.",
2135
- "name": "--checkbox-box-size"
2134
+ "description": "Object-fit mode for the `<img>` child thumbnail (default: contain)",
2135
+ "name": "--card-img-fit"
2136
2136
  },
2137
2137
  {
2138
- "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.",
2139
- "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"
2140
2154
  }
2141
2155
  ],
2142
2156
  "members": [
2143
2157
  {
2144
2158
  "kind": "field",
2145
- "name": "label",
2159
+ "name": "heading",
2146
2160
  "type": {
2147
- "text": "string | undefined"
2161
+ "text": "string"
2148
2162
  },
2149
- "description": "The text label displayed next to the checkbox.",
2150
- "attribute": "label"
2163
+ "default": "''",
2164
+ "description": "Heading text displayed on the card.",
2165
+ "attribute": "heading"
2151
2166
  },
2152
2167
  {
2153
2168
  "kind": "field",
2154
- "name": "description",
2169
+ "name": "headingLevel",
2155
2170
  "type": {
2156
- "text": "string | undefined"
2171
+ "text": "number"
2157
2172
  },
2158
- "description": "Optional helper text displayed below the label.",
2159
- "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"
2160
2176
  },
2161
2177
  {
2162
2178
  "kind": "field",
2163
- "name": "size",
2164
- "type": {
2165
- "text": "'sm' | 'md'"
2166
- },
2167
- "default": "'sm'",
2168
- "description": "Controls the scale of the checkbox and associated typography.",
2169
- "attribute": "size",
2170
- "reflects": true
2171
- },
2172
- {
2173
- "kind": "field",
2174
- "name": "checked",
2179
+ "name": "description",
2175
2180
  "type": {
2176
- "text": "boolean"
2181
+ "text": "string | undefined"
2177
2182
  },
2178
- "default": "false",
2179
- "description": "Whether the checkbox is currently selected.",
2180
- "attribute": "checked",
2181
- "reflects": true
2183
+ "description": "Supporting body text. Truncated to 3 lines via CSS.",
2184
+ "attribute": "description"
2182
2185
  },
2183
2186
  {
2184
2187
  "kind": "field",
2185
- "name": "indeterminate",
2188
+ "name": "compact",
2186
2189
  "type": {
2187
2190
  "text": "boolean"
2188
2191
  },
2189
2192
  "default": "false",
2190
- "description": "Whether the checkbox is in a partially selected state. Sets `aria-checked='mixed'`\nand activates the native `:indeterminate` pseudo-class. Cleared automatically when\nthe user clicks the checkbox.",
2191
- "attribute": "indeterminate",
2192
- "reflects": true
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"
2193
2195
  },
2194
2196
  {
2195
2197
  "kind": "field",
@@ -2198,139 +2200,17 @@
2198
2200
  "text": "boolean"
2199
2201
  },
2200
2202
  "default": "false",
2201
- "description": "If true, the checkbox is non-interactive and visually muted.",
2202
- "attribute": "disabled",
2203
- "reflects": true
2204
- },
2205
- {
2206
- "kind": "field",
2207
- "name": "invalid",
2208
- "type": {
2209
- "text": "boolean"
2210
- },
2211
- "default": "false",
2212
- "description": "If true, displays error styling on the checkbox.",
2213
- "attribute": "invalid",
2214
- "reflects": true
2215
- },
2216
- {
2217
- "kind": "field",
2218
- "name": "error",
2219
- "type": {
2220
- "text": "string | undefined"
2221
- },
2222
- "description": "Error message text displayed below the checkbox when validation fails.\nSetting this also activates error styling without needing to set invalid.",
2223
- "attribute": "error"
2224
- },
2225
- {
2226
- "kind": "field",
2227
- "name": "required",
2228
- "type": {
2229
- "text": "boolean"
2230
- },
2231
- "default": "false",
2232
- "description": "Marks the field as mandatory for form submission.",
2233
- "attribute": "required",
2234
- "reflects": true
2235
- },
2236
- {
2237
- "kind": "field",
2238
- "name": "name",
2239
- "type": {
2240
- "text": "string | undefined"
2241
- },
2242
- "description": "Name of the form control submitted with the form data.",
2243
- "attribute": "name"
2244
- },
2245
- {
2246
- "kind": "field",
2247
- "name": "value",
2248
- "type": {
2249
- "text": "string"
2250
- },
2251
- "default": "'on'",
2252
- "description": "Value associated with the checkbox when submitted.",
2253
- "attribute": "value"
2254
- },
2255
- {
2256
- "kind": "field",
2257
- "name": "_userInitiated",
2258
- "type": {
2259
- "text": "boolean"
2260
- },
2261
- "privacy": "private",
2262
- "default": "false"
2263
- },
2264
- {
2265
- "kind": "field",
2266
- "name": "_initialClasses",
2267
- "type": {
2268
- "text": "string[]"
2269
- },
2270
- "privacy": "private",
2271
- "default": "[]"
2272
- },
2273
- {
2274
- "kind": "field",
2275
- "name": "_initialClassesCaptured",
2276
- "type": {
2277
- "text": "boolean"
2278
- },
2279
- "privacy": "private",
2280
- "default": "false"
2281
- },
2282
- {
2283
- "kind": "field",
2284
- "name": "_descId",
2285
- "privacy": "private",
2286
- "default": "`checkbox-desc-${crypto.randomUUID()}`"
2287
- },
2288
- {
2289
- "kind": "field",
2290
- "name": "_errorId",
2291
- "privacy": "private",
2292
- "default": "`checkbox-error-${crypto.randomUUID()}`"
2293
- },
2294
- {
2295
- "kind": "method",
2296
- "name": "_onInputChange",
2297
- "privacy": "private",
2298
- "return": {
2299
- "type": {
2300
- "text": "void"
2301
- }
2302
- },
2303
- "parameters": [
2304
- {
2305
- "name": "e",
2306
- "type": {
2307
- "text": "Event"
2308
- }
2309
- }
2310
- ]
2311
- },
2312
- {
2313
- "kind": "field",
2314
- "name": "_handleClick",
2315
- "privacy": "private"
2203
+ "description": "Whether the card is disabled.",
2204
+ "attribute": "disabled"
2316
2205
  },
2317
2206
  {
2318
2207
  "kind": "field",
2319
- "name": "_describedBy",
2208
+ "name": "href",
2320
2209
  "type": {
2321
2210
  "text": "string | undefined"
2322
2211
  },
2323
- "privacy": "private",
2324
- "readonly": true
2325
- },
2326
- {
2327
- "kind": "field",
2328
- "name": "_iconSymbol",
2329
- "type": {
2330
- "text": "'minus' | 'check'"
2331
- },
2332
- "privacy": "private",
2333
- "readonly": true
2212
+ "description": "Navigation URL for the entire card surface.\nWhen set, the card renders as a link.",
2213
+ "attribute": "href"
2334
2214
  },
2335
2215
  {
2336
2216
  "kind": "method",
@@ -2362,72 +2242,91 @@
2362
2242
  "name": "EventEmitterMixin",
2363
2243
  "module": "src/util/EventEmitterMixin.ts"
2364
2244
  }
2365
- }
2366
- ],
2367
- "events": [
2245
+ },
2368
2246
  {
2247
+ "kind": "field",
2248
+ "name": "#stopFns",
2249
+ "privacy": "private",
2369
2250
  "type": {
2370
- "text": "CustomEvent"
2251
+ "text": "Array<() => void>"
2371
2252
  },
2372
- "description": "Fired after the checkbox is first rendered and initialized",
2373
- "name": "btu-checkbox-ready"
2253
+ "default": "[]",
2254
+ "inheritedFrom": {
2255
+ "name": "OnFindMixin",
2256
+ "module": "src/util/OnFindMixin.ts"
2257
+ }
2374
2258
  },
2375
2259
  {
2376
- "type": {
2377
- "text": "CustomEvent<{ checked: boolean }>"
2260
+ "kind": "method",
2261
+ "name": "onFindRegistration",
2262
+ "return": {
2263
+ "type": {
2264
+ "text": "OnFindRegistration | OnFindRegistration[] | null"
2265
+ }
2378
2266
  },
2379
- "description": "Fired when the user toggles the checked state",
2380
- "name": "btu-checkbox-change"
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
+ }
2381
2280
  }
2382
2281
  ],
2383
- "attributes": [
2282
+ "events": [
2384
2283
  {
2385
- "name": "label",
2386
2284
  "type": {
2387
- "text": "string | undefined"
2285
+ "text": "CustomEvent"
2388
2286
  },
2389
- "description": "The text label displayed next to the checkbox.",
2390
- "fieldName": "label",
2391
- "attribute": "label"
2392
- },
2287
+ "description": "Fired after first render and initialization",
2288
+ "name": "btu-card-ready"
2289
+ }
2290
+ ],
2291
+ "attributes": [
2393
2292
  {
2394
- "name": "description",
2293
+ "name": "heading",
2395
2294
  "type": {
2396
- "text": "string | undefined"
2295
+ "text": "string"
2397
2296
  },
2398
- "description": "Optional helper text displayed below the label.",
2399
- "fieldName": "description",
2400
- "attribute": "description"
2297
+ "default": "''",
2298
+ "description": "Heading text displayed on the card.",
2299
+ "fieldName": "heading",
2300
+ "attribute": "heading"
2401
2301
  },
2402
2302
  {
2403
- "name": "size",
2303
+ "name": "heading-level",
2404
2304
  "type": {
2405
- "text": "'sm' | 'md'"
2305
+ "text": "number"
2406
2306
  },
2407
- "default": "'sm'",
2408
- "description": "Controls the scale of the checkbox and associated typography.",
2409
- "fieldName": "size",
2410
- "attribute": "size"
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"
2411
2311
  },
2412
2312
  {
2413
- "name": "checked",
2313
+ "name": "description",
2414
2314
  "type": {
2415
- "text": "boolean"
2315
+ "text": "string | undefined"
2416
2316
  },
2417
- "default": "false",
2418
- "description": "Whether the checkbox is currently selected.",
2419
- "fieldName": "checked",
2420
- "attribute": "checked"
2317
+ "description": "Supporting body text. Truncated to 3 lines via CSS.",
2318
+ "fieldName": "description",
2319
+ "attribute": "description"
2421
2320
  },
2422
2321
  {
2423
- "name": "indeterminate",
2322
+ "name": "compact",
2424
2323
  "type": {
2425
2324
  "text": "boolean"
2426
2325
  },
2427
2326
  "default": "false",
2428
- "description": "Whether the checkbox is in a partially selected state. Sets `aria-checked='mixed'`\nand activates the native `:indeterminate` pseudo-class. Cleared automatically when\nthe user clicks the checkbox.",
2429
- "fieldName": "indeterminate",
2430
- "attribute": "indeterminate"
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"
2431
2330
  },
2432
2331
  {
2433
2332
  "name": "disabled",
@@ -2435,57 +2334,18 @@
2435
2334
  "text": "boolean"
2436
2335
  },
2437
2336
  "default": "false",
2438
- "description": "If true, the checkbox is non-interactive and visually muted.",
2337
+ "description": "Whether the card is disabled.",
2439
2338
  "fieldName": "disabled",
2440
2339
  "attribute": "disabled"
2441
2340
  },
2442
2341
  {
2443
- "name": "invalid",
2444
- "type": {
2445
- "text": "boolean"
2446
- },
2447
- "default": "false",
2448
- "description": "If true, displays error styling on the checkbox.",
2449
- "fieldName": "invalid",
2450
- "attribute": "invalid"
2451
- },
2452
- {
2453
- "name": "error",
2454
- "type": {
2455
- "text": "string | undefined"
2456
- },
2457
- "description": "Error message text displayed below the checkbox when validation fails.\nSetting this also activates error styling without needing to set invalid.",
2458
- "fieldName": "error",
2459
- "attribute": "error"
2460
- },
2461
- {
2462
- "name": "required",
2463
- "type": {
2464
- "text": "boolean"
2465
- },
2466
- "default": "false",
2467
- "description": "Marks the field as mandatory for form submission.",
2468
- "fieldName": "required",
2469
- "attribute": "required"
2470
- },
2471
- {
2472
- "name": "name",
2342
+ "name": "href",
2473
2343
  "type": {
2474
2344
  "text": "string | undefined"
2475
2345
  },
2476
- "description": "Name of the form control submitted with the form data.",
2477
- "fieldName": "name",
2478
- "attribute": "name"
2479
- },
2480
- {
2481
- "name": "value",
2482
- "type": {
2483
- "text": "string"
2484
- },
2485
- "default": "'on'",
2486
- "description": "Value associated with the checkbox when submitted.",
2487
- "fieldName": "value",
2488
- "attribute": "value"
2346
+ "description": "Navigation URL for the entire card surface.\nWhen set, the card renders as a link.",
2347
+ "fieldName": "href",
2348
+ "attribute": "href"
2489
2349
  }
2490
2350
  ],
2491
2351
  "mixins": [
@@ -2493,6 +2353,10 @@
2493
2353
  "name": "EventEmitterMixin",
2494
2354
  "module": "/src/util/EventEmitterMixin.js"
2495
2355
  },
2356
+ {
2357
+ "name": "OnFindMixin",
2358
+ "module": "/src/util/OnFindMixin.js"
2359
+ },
2496
2360
  {
2497
2361
  "name": "ReadyMixin",
2498
2362
  "module": "/src/util/ReadyMixin.js"
@@ -2502,7 +2366,7 @@
2502
2366
  "name": "LitElement",
2503
2367
  "package": "lit"
2504
2368
  },
2505
- "tagName": "btu-checkbox",
2369
+ "tagName": "btu-card",
2506
2370
  "customElement": true
2507
2371
  }
2508
2372
  ],
@@ -2511,130 +2375,250 @@
2511
2375
  "kind": "js",
2512
2376
  "name": "default",
2513
2377
  "declaration": {
2514
- "name": "Checkbox",
2515
- "module": "src/components/checkbox/Checkbox.ts"
2378
+ "name": "Card",
2379
+ "module": "src/components/card/Card.ts"
2516
2380
  }
2517
2381
  },
2518
2382
  {
2519
2383
  "kind": "custom-element-definition",
2520
- "name": "btu-checkbox",
2384
+ "name": "btu-card",
2521
2385
  "declaration": {
2522
- "name": "Checkbox",
2523
- "module": "src/components/checkbox/Checkbox.ts"
2386
+ "name": "Card",
2387
+ "module": "src/components/card/Card.ts"
2524
2388
  }
2525
2389
  }
2526
2390
  ]
2527
2391
  },
2528
2392
  {
2529
2393
  "kind": "javascript-module",
2530
- "path": "src/components/card/Card.ts",
2394
+ "path": "src/components/checkbox/Checkbox.ts",
2531
2395
  "declarations": [
2532
2396
  {
2533
2397
  "kind": "class",
2534
- "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.",
2535
- "name": "Card",
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",
2536
2400
  "cssProperties": [
2537
2401
  {
2538
- "description": "Minimum width of the card (default: 160px)",
2539
- "name": "--card-min-width"
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"
2540
2404
  },
2541
2405
  {
2542
- "description": "Background color (default: var(--btu-theme-white))",
2543
- "name": "--card-background"
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",
2452
+ "type": {
2453
+ "text": "'sm' | 'md'"
2454
+ },
2455
+ "default": "'sm'",
2456
+ "description": "Controls the scale of the checkbox and associated typography.",
2457
+ "attribute": "size",
2458
+ "reflects": true
2459
+ },
2460
+ {
2461
+ "kind": "field",
2462
+ "name": "checked",
2463
+ "type": {
2464
+ "text": "boolean"
2465
+ },
2466
+ "default": "false",
2467
+ "description": "Whether the checkbox is currently selected.",
2468
+ "attribute": "checked",
2469
+ "reflects": true
2544
2470
  },
2545
2471
  {
2546
- "description": "Border style (default: 1px solid gray-200)",
2547
- "name": "--card-border"
2472
+ "kind": "field",
2473
+ "name": "indeterminate",
2474
+ "type": {
2475
+ "text": "boolean"
2476
+ },
2477
+ "default": "false",
2478
+ "description": "Whether the checkbox is in a partially selected state. Sets `aria-checked='mixed'`\nand activates the native `:indeterminate` pseudo-class. Cleared automatically when\nthe user clicks the checkbox.",
2479
+ "attribute": "indeterminate",
2480
+ "reflects": true
2548
2481
  },
2549
2482
  {
2550
- "description": "Corner rounding (default: 8px)",
2551
- "name": "--card-radius"
2483
+ "kind": "field",
2484
+ "name": "disabled",
2485
+ "type": {
2486
+ "text": "boolean"
2487
+ },
2488
+ "default": "false",
2489
+ "description": "If true, the checkbox is non-interactive and visually muted.",
2490
+ "attribute": "disabled",
2491
+ "reflects": true
2552
2492
  },
2553
2493
  {
2554
- "description": "Fixed aspect ratio for the thumbnail when an `<img>` child is present (default: 16 / 9)",
2555
- "name": "--card-img-ratio"
2494
+ "kind": "field",
2495
+ "name": "invalid",
2496
+ "type": {
2497
+ "text": "boolean"
2498
+ },
2499
+ "default": "false",
2500
+ "description": "If true, displays error styling on the checkbox.",
2501
+ "attribute": "invalid",
2502
+ "reflects": true
2556
2503
  },
2557
2504
  {
2558
- "description": "Object-fit mode for the `<img>` child thumbnail (default: contain)",
2559
- "name": "--card-img-fit"
2505
+ "kind": "field",
2506
+ "name": "error",
2507
+ "type": {
2508
+ "text": "string | undefined"
2509
+ },
2510
+ "description": "Error message text displayed below the checkbox when validation fails.\nSetting this also activates error styling without needing to set invalid.",
2511
+ "attribute": "error"
2560
2512
  },
2561
2513
  {
2562
- "description": "Background color behind the composed icon (compact card and media-image fallback) (default: gray-100)",
2563
- "name": "--card-icon-background"
2564
- }
2565
- ],
2566
- "slots": [
2567
- {
2568
- "description": "Intended for a single action in the top-right corner of the card.",
2569
- "name": "action"
2514
+ "kind": "field",
2515
+ "name": "required",
2516
+ "type": {
2517
+ "text": "boolean"
2518
+ },
2519
+ "default": "false",
2520
+ "description": "Marks the field as mandatory for form submission.",
2521
+ "attribute": "required",
2522
+ "reflects": true
2570
2523
  },
2571
2524
  {
2572
- "description": "Intended for a single action next to the title.",
2573
- "name": "secondary-action"
2525
+ "kind": "field",
2526
+ "name": "name",
2527
+ "type": {
2528
+ "text": "string | undefined"
2529
+ },
2530
+ "description": "Name of the form control submitted with the form data.",
2531
+ "attribute": "name"
2574
2532
  },
2575
- {
2576
- "description": "Intended for additional metadata fields displayed below the title & description",
2577
- "name": "fields"
2578
- }
2579
- ],
2580
- "members": [
2581
2533
  {
2582
2534
  "kind": "field",
2583
- "name": "heading",
2535
+ "name": "value",
2584
2536
  "type": {
2585
2537
  "text": "string"
2586
2538
  },
2587
- "default": "''",
2588
- "description": "Heading text displayed on the card.",
2589
- "attribute": "heading"
2539
+ "default": "'on'",
2540
+ "description": "Value associated with the checkbox when submitted.",
2541
+ "attribute": "value"
2590
2542
  },
2591
2543
  {
2592
2544
  "kind": "field",
2593
- "name": "headingLevel",
2545
+ "name": "_userInitiated",
2594
2546
  "type": {
2595
- "text": "number"
2547
+ "text": "boolean"
2596
2548
  },
2597
- "default": "2",
2598
- "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).",
2599
- "attribute": "heading-level"
2549
+ "privacy": "private",
2550
+ "default": "false"
2600
2551
  },
2601
2552
  {
2602
2553
  "kind": "field",
2603
- "name": "description",
2554
+ "name": "_initialClasses",
2604
2555
  "type": {
2605
- "text": "string | undefined"
2556
+ "text": "string[]"
2606
2557
  },
2607
- "description": "Supporting body text. Truncated to 3 lines via CSS.",
2608
- "attribute": "description"
2558
+ "privacy": "private",
2559
+ "default": "[]"
2609
2560
  },
2610
2561
  {
2611
2562
  "kind": "field",
2612
- "name": "compact",
2563
+ "name": "_initialClassesCaptured",
2613
2564
  "type": {
2614
2565
  "text": "boolean"
2615
2566
  },
2616
- "default": "false",
2617
- "description": "Renders the card as a compact quick-start tile.\nBadge, image, fields, and secondary-action children are ignored in this case.",
2618
- "attribute": "compact"
2567
+ "privacy": "private",
2568
+ "default": "false"
2619
2569
  },
2620
2570
  {
2621
2571
  "kind": "field",
2622
- "name": "disabled",
2623
- "type": {
2624
- "text": "boolean"
2572
+ "name": "_descId",
2573
+ "privacy": "private",
2574
+ "default": "`checkbox-desc-${crypto.randomUUID()}`"
2575
+ },
2576
+ {
2577
+ "kind": "field",
2578
+ "name": "_errorId",
2579
+ "privacy": "private",
2580
+ "default": "`checkbox-error-${crypto.randomUUID()}`"
2581
+ },
2582
+ {
2583
+ "kind": "method",
2584
+ "name": "_onInputChange",
2585
+ "privacy": "private",
2586
+ "return": {
2587
+ "type": {
2588
+ "text": "void"
2589
+ }
2625
2590
  },
2626
- "default": "false",
2627
- "description": "Whether the card is disabled.",
2628
- "attribute": "disabled"
2591
+ "parameters": [
2592
+ {
2593
+ "name": "e",
2594
+ "type": {
2595
+ "text": "Event"
2596
+ }
2597
+ }
2598
+ ]
2629
2599
  },
2630
2600
  {
2631
2601
  "kind": "field",
2632
- "name": "href",
2602
+ "name": "_handleClick",
2603
+ "privacy": "private"
2604
+ },
2605
+ {
2606
+ "kind": "field",
2607
+ "name": "_describedBy",
2633
2608
  "type": {
2634
2609
  "text": "string | undefined"
2635
2610
  },
2636
- "description": "Navigation URL for the entire card surface.\nWhen set, the card renders as a link.",
2637
- "attribute": "href"
2611
+ "privacy": "private",
2612
+ "readonly": true
2613
+ },
2614
+ {
2615
+ "kind": "field",
2616
+ "name": "_iconSymbol",
2617
+ "type": {
2618
+ "text": "'minus' | 'check'"
2619
+ },
2620
+ "privacy": "private",
2621
+ "readonly": true
2638
2622
  },
2639
2623
  {
2640
2624
  "kind": "method",
@@ -2666,110 +2650,130 @@
2666
2650
  "name": "EventEmitterMixin",
2667
2651
  "module": "src/util/EventEmitterMixin.ts"
2668
2652
  }
2653
+ }
2654
+ ],
2655
+ "events": [
2656
+ {
2657
+ "type": {
2658
+ "text": "CustomEvent"
2659
+ },
2660
+ "description": "Fired after the checkbox is first rendered and initialized",
2661
+ "name": "btu-checkbox-ready"
2669
2662
  },
2670
2663
  {
2671
- "kind": "field",
2672
- "name": "#stopFns",
2673
- "privacy": "private",
2674
2664
  "type": {
2675
- "text": "Array<() => void>"
2665
+ "text": "CustomEvent<{ checked: boolean }>"
2676
2666
  },
2677
- "default": "[]",
2678
- "inheritedFrom": {
2679
- "name": "OnFindMixin",
2680
- "module": "src/util/OnFindMixin.ts"
2681
- }
2667
+ "description": "Fired when the user toggles the checked state",
2668
+ "name": "btu-checkbox-change"
2669
+ }
2670
+ ],
2671
+ "attributes": [
2672
+ {
2673
+ "name": "label",
2674
+ "type": {
2675
+ "text": "string | undefined"
2676
+ },
2677
+ "description": "The text label displayed next to the checkbox.",
2678
+ "fieldName": "label",
2679
+ "attribute": "label"
2682
2680
  },
2683
2681
  {
2684
- "kind": "method",
2685
- "name": "onFindRegistration",
2686
- "return": {
2687
- "type": {
2688
- "text": "OnFindRegistration | OnFindRegistration[] | null"
2689
- }
2682
+ "name": "description",
2683
+ "type": {
2684
+ "text": "string | undefined"
2690
2685
  },
2691
- "inheritedFrom": {
2692
- "name": "OnFindMixin",
2693
- "module": "src/util/OnFindMixin.ts"
2694
- }
2686
+ "description": "Optional helper text displayed below the label.",
2687
+ "fieldName": "description",
2688
+ "attribute": "description"
2695
2689
  },
2696
2690
  {
2697
- "kind": "method",
2698
- "name": "#armFind",
2699
- "privacy": "private",
2700
- "inheritedFrom": {
2701
- "name": "OnFindMixin",
2702
- "module": "src/util/OnFindMixin.ts"
2703
- }
2704
- }
2705
- ],
2706
- "events": [
2691
+ "name": "size",
2692
+ "type": {
2693
+ "text": "'sm' | 'md'"
2694
+ },
2695
+ "default": "'sm'",
2696
+ "description": "Controls the scale of the checkbox and associated typography.",
2697
+ "fieldName": "size",
2698
+ "attribute": "size"
2699
+ },
2707
2700
  {
2701
+ "name": "checked",
2708
2702
  "type": {
2709
- "text": "CustomEvent"
2703
+ "text": "boolean"
2710
2704
  },
2711
- "description": "Fired after first render and initialization",
2712
- "name": "btu-card-ready"
2713
- }
2714
- ],
2715
- "attributes": [
2705
+ "default": "false",
2706
+ "description": "Whether the checkbox is currently selected.",
2707
+ "fieldName": "checked",
2708
+ "attribute": "checked"
2709
+ },
2716
2710
  {
2717
- "name": "heading",
2711
+ "name": "indeterminate",
2718
2712
  "type": {
2719
- "text": "string"
2713
+ "text": "boolean"
2720
2714
  },
2721
- "default": "''",
2722
- "description": "Heading text displayed on the card.",
2723
- "fieldName": "heading",
2724
- "attribute": "heading"
2715
+ "default": "false",
2716
+ "description": "Whether the checkbox is in a partially selected state. Sets `aria-checked='mixed'`\nand activates the native `:indeterminate` pseudo-class. Cleared automatically when\nthe user clicks the checkbox.",
2717
+ "fieldName": "indeterminate",
2718
+ "attribute": "indeterminate"
2719
+ },
2720
+ {
2721
+ "name": "disabled",
2722
+ "type": {
2723
+ "text": "boolean"
2724
+ },
2725
+ "default": "false",
2726
+ "description": "If true, the checkbox is non-interactive and visually muted.",
2727
+ "fieldName": "disabled",
2728
+ "attribute": "disabled"
2725
2729
  },
2726
2730
  {
2727
- "name": "heading-level",
2731
+ "name": "invalid",
2728
2732
  "type": {
2729
- "text": "number"
2733
+ "text": "boolean"
2730
2734
  },
2731
- "default": "2",
2732
- "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).",
2733
- "fieldName": "headingLevel",
2734
- "attribute": "heading-level"
2735
+ "default": "false",
2736
+ "description": "If true, displays error styling on the checkbox.",
2737
+ "fieldName": "invalid",
2738
+ "attribute": "invalid"
2735
2739
  },
2736
2740
  {
2737
- "name": "description",
2741
+ "name": "error",
2738
2742
  "type": {
2739
2743
  "text": "string | undefined"
2740
2744
  },
2741
- "description": "Supporting body text. Truncated to 3 lines via CSS.",
2742
- "fieldName": "description",
2743
- "attribute": "description"
2745
+ "description": "Error message text displayed below the checkbox when validation fails.\nSetting this also activates error styling without needing to set invalid.",
2746
+ "fieldName": "error",
2747
+ "attribute": "error"
2744
2748
  },
2745
2749
  {
2746
- "name": "compact",
2750
+ "name": "required",
2747
2751
  "type": {
2748
2752
  "text": "boolean"
2749
2753
  },
2750
2754
  "default": "false",
2751
- "description": "Renders the card as a compact quick-start tile.\nBadge, image, fields, and secondary-action children are ignored in this case.",
2752
- "fieldName": "compact",
2753
- "attribute": "compact"
2755
+ "description": "Marks the field as mandatory for form submission.",
2756
+ "fieldName": "required",
2757
+ "attribute": "required"
2754
2758
  },
2755
2759
  {
2756
- "name": "disabled",
2760
+ "name": "name",
2757
2761
  "type": {
2758
- "text": "boolean"
2762
+ "text": "string | undefined"
2759
2763
  },
2760
- "default": "false",
2761
- "description": "Whether the card is disabled.",
2762
- "fieldName": "disabled",
2763
- "attribute": "disabled"
2764
+ "description": "Name of the form control submitted with the form data.",
2765
+ "fieldName": "name",
2766
+ "attribute": "name"
2764
2767
  },
2765
2768
  {
2766
- "name": "href",
2769
+ "name": "value",
2767
2770
  "type": {
2768
- "text": "string | undefined"
2771
+ "text": "string"
2769
2772
  },
2770
- "description": "Navigation URL for the entire card surface.\nWhen set, the card renders as a link.",
2771
- "fieldName": "href",
2772
- "attribute": "href"
2773
+ "default": "'on'",
2774
+ "description": "Value associated with the checkbox when submitted.",
2775
+ "fieldName": "value",
2776
+ "attribute": "value"
2773
2777
  }
2774
2778
  ],
2775
2779
  "mixins": [
@@ -2777,10 +2781,6 @@
2777
2781
  "name": "EventEmitterMixin",
2778
2782
  "module": "/src/util/EventEmitterMixin.js"
2779
2783
  },
2780
- {
2781
- "name": "OnFindMixin",
2782
- "module": "/src/util/OnFindMixin.js"
2783
- },
2784
2784
  {
2785
2785
  "name": "ReadyMixin",
2786
2786
  "module": "/src/util/ReadyMixin.js"
@@ -2790,7 +2790,7 @@
2790
2790
  "name": "LitElement",
2791
2791
  "package": "lit"
2792
2792
  },
2793
- "tagName": "btu-card",
2793
+ "tagName": "btu-checkbox",
2794
2794
  "customElement": true
2795
2795
  }
2796
2796
  ],
@@ -2799,16 +2799,16 @@
2799
2799
  "kind": "js",
2800
2800
  "name": "default",
2801
2801
  "declaration": {
2802
- "name": "Card",
2803
- "module": "src/components/card/Card.ts"
2802
+ "name": "Checkbox",
2803
+ "module": "src/components/checkbox/Checkbox.ts"
2804
2804
  }
2805
2805
  },
2806
2806
  {
2807
2807
  "kind": "custom-element-definition",
2808
- "name": "btu-card",
2808
+ "name": "btu-checkbox",
2809
2809
  "declaration": {
2810
- "name": "Card",
2811
- "module": "src/components/card/Card.ts"
2810
+ "name": "Checkbox",
2811
+ "module": "src/components/checkbox/Checkbox.ts"
2812
2812
  }
2813
2813
  }
2814
2814
  ]
@@ -5157,6 +5157,238 @@
5157
5157
  }
5158
5158
  ]
5159
5159
  },
5160
+ {
5161
+ "kind": "javascript-module",
5162
+ "path": "src/components/esca-avatar/EscaAvatar.ts",
5163
+ "declarations": [
5164
+ {
5165
+ "kind": "class",
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",
5168
+ "cssProperties": [
5169
+ {
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
5185
+ },
5186
+ {
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
5196
+ },
5197
+ {
5198
+ "kind": "field",
5199
+ "name": "_containerRef",
5200
+ "type": {
5201
+ "text": "Ref<HTMLDivElement>"
5202
+ },
5203
+ "privacy": "private"
5204
+ },
5205
+ {
5206
+ "kind": "field",
5207
+ "name": "_animation",
5208
+ "type": {
5209
+ "text": "AnimationItem | null"
5210
+ },
5211
+ "privacy": "private",
5212
+ "default": "null"
5213
+ },
5214
+ {
5215
+ "kind": "field",
5216
+ "name": "_rendered",
5217
+ "type": {
5218
+ "text": "EscaAvatarState | null"
5219
+ },
5220
+ "privacy": "private",
5221
+ "default": "null"
5222
+ },
5223
+ {
5224
+ "kind": "field",
5225
+ "name": "_reduceMotion",
5226
+ "type": {
5227
+ "text": "boolean"
5228
+ },
5229
+ "privacy": "private",
5230
+ "default": "false"
5231
+ },
5232
+ {
5233
+ "kind": "field",
5234
+ "name": "_loadToken",
5235
+ "type": {
5236
+ "text": "number"
5237
+ },
5238
+ "privacy": "private",
5239
+ "default": "0"
5240
+ },
5241
+ {
5242
+ "kind": "field",
5243
+ "name": "_resizeObserver",
5244
+ "type": {
5245
+ "text": "ResizeObserver | undefined"
5246
+ },
5247
+ "privacy": "private"
5248
+ },
5249
+ {
5250
+ "kind": "field",
5251
+ "name": "_intersectionObserver",
5252
+ "type": {
5253
+ "text": "IntersectionObserver | undefined"
5254
+ },
5255
+ "privacy": "private"
5256
+ },
5257
+ {
5258
+ "kind": "field",
5259
+ "name": "_motionQuery",
5260
+ "type": {
5261
+ "text": "MediaQueryList | undefined"
5262
+ },
5263
+ "privacy": "private"
5264
+ },
5265
+ {
5266
+ "kind": "method",
5267
+ "name": "_applySize",
5268
+ "privacy": "private"
5269
+ },
5270
+ {
5271
+ "kind": "field",
5272
+ "name": "_onMotionChange",
5273
+ "privacy": "private"
5274
+ },
5275
+ {
5276
+ "kind": "method",
5277
+ "name": "_play",
5278
+ "privacy": "private"
5279
+ },
5280
+ {
5281
+ "kind": "method",
5282
+ "name": "_destroy",
5283
+ "privacy": "private"
5284
+ },
5285
+ {
5286
+ "kind": "method",
5287
+ "name": "emit",
5288
+ "parameters": [
5289
+ {
5290
+ "name": "type",
5291
+ "type": {
5292
+ "text": "K"
5293
+ },
5294
+ "description": "Event name from CustomEventMap"
5295
+ },
5296
+ {
5297
+ "name": "detail",
5298
+ "optional": true,
5299
+ "type": {
5300
+ "text": "UnpackCustomEvent<CustomEventMap[K]>"
5301
+ },
5302
+ "description": "Optional event detail payload"
5303
+ }
5304
+ ],
5305
+ "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)",
5306
+ "return": {
5307
+ "type": {
5308
+ "text": "boolean"
5309
+ }
5310
+ },
5311
+ "inheritedFrom": {
5312
+ "name": "EventEmitterMixin",
5313
+ "module": "src/util/EventEmitterMixin.ts"
5314
+ }
5315
+ }
5316
+ ],
5317
+ "events": [
5318
+ {
5319
+ "type": {
5320
+ "text": "CustomEvent"
5321
+ },
5322
+ "description": "Fired after the first render",
5323
+ "name": "btu-esca-avatar-ready"
5324
+ },
5325
+ {
5326
+ "type": {
5327
+ "text": "CustomEvent<{state: string}>"
5328
+ },
5329
+ "description": "Fired when a non-looping animation finishes",
5330
+ "name": "btu-esca-avatar-complete"
5331
+ }
5332
+ ],
5333
+ "attributes": [
5334
+ {
5335
+ "name": "state",
5336
+ "type": {
5337
+ "text": "EscaAvatarState"
5338
+ },
5339
+ "default": "'idle'",
5340
+ "description": "Animation to play; changing it swaps the clip.",
5341
+ "fieldName": "state",
5342
+ "attribute": "state"
5343
+ },
5344
+ {
5345
+ "name": "size",
5346
+ "type": {
5347
+ "text": "EscaAvatarSize"
5348
+ },
5349
+ "default": "'md'",
5350
+ "description": "Size of the avatar, mirroring `<btu-avatar>`'s scale. `--esca-avatar-size` overrides it.",
5351
+ "fieldName": "size",
5352
+ "attribute": "size"
5353
+ }
5354
+ ],
5355
+ "mixins": [
5356
+ {
5357
+ "name": "EventEmitterMixin",
5358
+ "module": "/src/util/EventEmitterMixin.js"
5359
+ },
5360
+ {
5361
+ "name": "ReadyMixin",
5362
+ "module": "/src/util/ReadyMixin.js"
5363
+ }
5364
+ ],
5365
+ "superclass": {
5366
+ "name": "LitElement",
5367
+ "package": "lit"
5368
+ },
5369
+ "tagName": "btu-esca-avatar",
5370
+ "customElement": true
5371
+ }
5372
+ ],
5373
+ "exports": [
5374
+ {
5375
+ "kind": "js",
5376
+ "name": "default",
5377
+ "declaration": {
5378
+ "name": "EscaAvatar",
5379
+ "module": "src/components/esca-avatar/EscaAvatar.ts"
5380
+ }
5381
+ },
5382
+ {
5383
+ "kind": "custom-element-definition",
5384
+ "name": "btu-esca-avatar",
5385
+ "declaration": {
5386
+ "name": "EscaAvatar",
5387
+ "module": "src/components/esca-avatar/EscaAvatar.ts"
5388
+ }
5389
+ }
5390
+ ]
5391
+ },
5160
5392
  {
5161
5393
  "kind": "javascript-module",
5162
5394
  "path": "src/components/icon/Icon.ts",