@countermeasure-platform/web-components 1.2.1-dev.4.1 → 1.2.1-dev.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (639) hide show
  1. package/dist/{_basePickBy-BlpD3CIQ.js → _basePickBy-BQMPE4-n.js} +3 -3
  2. package/dist/{_basePickBy-BlpD3CIQ.js.map → _basePickBy-BQMPE4-n.js.map} +1 -1
  3. package/dist/{_baseUniq-CO35kH5B.js → _baseUniq-Bdp_vFUv.js} +3 -3
  4. package/dist/{_baseUniq-CO35kH5B.js.map → _baseUniq-Bdp_vFUv.js.map} +1 -1
  5. package/dist/{alert-dialog-DXa-O6E4.js → alert-dialog-C4dLk25S.js} +5 -5
  6. package/dist/{alert-dialog-DXa-O6E4.js.map → alert-dialog-C4dLk25S.js.map} +1 -1
  7. package/dist/{arc-DyfKNDOh.js → arc-jVbrWVYZ.js} +3 -3
  8. package/dist/{arc-DyfKNDOh.js.map → arc-jVbrWVYZ.js.map} +1 -1
  9. package/dist/architecture-PBZL5I3N-Zk3GmKE8.js +3 -0
  10. package/dist/{architectureDiagram-2XIMDMQ5-B4qk6eh9.js → architectureDiagram-2XIMDMQ5-D5q0ma9h.js} +10 -10
  11. package/dist/{architectureDiagram-2XIMDMQ5-B4qk6eh9.js.map → architectureDiagram-2XIMDMQ5-D5q0ma9h.js.map} +1 -1
  12. package/dist/{array-DPBIBG3p.js → array-DXadUs1s.js} +1 -1
  13. package/dist/{array-DPBIBG3p.js.map → array-DXadUs1s.js.map} +1 -1
  14. package/dist/{arrow-up-BhjinjWg.js → arrow-up-CJJ5q2ht.js} +2 -2
  15. package/dist/{arrow-up-BhjinjWg.js.map → arrow-up-CJJ5q2ht.js.map} +1 -1
  16. package/dist/{avatar-CZGZhjvv.js → avatar-DIhd5zYT.js} +1 -1
  17. package/dist/{avatar-CZGZhjvv.js.map → avatar-DIhd5zYT.js.map} +1 -1
  18. package/dist/{badge-CAvV5GE2.js → badge-C2kAwL41.js} +1 -1
  19. package/dist/{badge-CAvV5GE2.js.map → badge-C2kAwL41.js.map} +1 -1
  20. package/dist/{blockDiagram-WCTKOSBZ-DdPMGZ7X.js → blockDiagram-WCTKOSBZ-BH3jwWeU.js} +13 -13
  21. package/dist/{blockDiagram-WCTKOSBZ-DdPMGZ7X.js.map → blockDiagram-WCTKOSBZ-BH3jwWeU.js.map} +1 -1
  22. package/dist/{button-19KWzy7c.js → button-BtTc7Ncu.js} +1 -1
  23. package/dist/{button-19KWzy7c.js.map → button-BtTc7Ncu.js.map} +1 -1
  24. package/dist/{c4Diagram-IC4MRINW-Du1j-C4R.js → c4Diagram-IC4MRINW-OFLrunYI.js} +7 -7
  25. package/dist/{c4Diagram-IC4MRINW-Du1j-C4R.js.map → c4Diagram-IC4MRINW-OFLrunYI.js.map} +1 -1
  26. package/dist/{carousel-CJ5lxMYs.js → carousel-T96UFALA.js} +3 -3
  27. package/dist/{carousel-CJ5lxMYs.js.map → carousel-T96UFALA.js.map} +1 -1
  28. package/dist/{channel-BHvJxX8j.js → channel-LRbq43st.js} +2 -2
  29. package/dist/{channel-BHvJxX8j.js.map → channel-LRbq43st.js.map} +1 -1
  30. package/dist/charts/area/index.js +1 -1
  31. package/dist/charts/bar/index.js +1 -1
  32. package/dist/charts/index.js +2 -2
  33. package/dist/charts/line/index.js +1 -1
  34. package/dist/charts/pie/index.js +1 -1
  35. package/dist/charts/radar/index.js +1 -1
  36. package/dist/charts/scatter/index.js +1 -1
  37. package/dist/charts/waterfall/index.js +1 -1
  38. package/dist/{check-CybgTpDT.js → check-cGnuDoWp.js} +2 -2
  39. package/dist/{check-CybgTpDT.js.map → check-cGnuDoWp.js.map} +1 -1
  40. package/dist/{chevron-down-C_008JAH.js → chevron-down-m05raooX.js} +2 -2
  41. package/dist/{chevron-down-C_008JAH.js.map → chevron-down-m05raooX.js.map} +1 -1
  42. package/dist/{chevron-right-DuHRAn8w.js → chevron-right-ByWVa5XY.js} +2 -2
  43. package/dist/{chevron-right-DuHRAn8w.js.map → chevron-right-ByWVa5XY.js.map} +1 -1
  44. package/dist/{chevron-up-BY5jyuW2.js → chevron-up-CtvY7fRK.js} +2 -2
  45. package/dist/{chevron-up-BY5jyuW2.js.map → chevron-up-CtvY7fRK.js.map} +1 -1
  46. package/dist/{chunk-4BX2VUAB-CL-dnlxR.js → chunk-4BX2VUAB-BS9gpN-y.js} +2 -2
  47. package/dist/{chunk-4BX2VUAB-CL-dnlxR.js.map → chunk-4BX2VUAB-BS9gpN-y.js.map} +1 -1
  48. package/dist/{chunk-55IACEB6-DxNTqHZ8.js → chunk-55IACEB6-DZ-UBhHX.js} +3 -3
  49. package/dist/{chunk-55IACEB6-DxNTqHZ8.js.map → chunk-55IACEB6-DZ-UBhHX.js.map} +1 -1
  50. package/dist/{chunk-7E7YKBS2-Bewg8t99.js → chunk-7E7YKBS2-BsywoVTt.js} +2 -2
  51. package/dist/{chunk-7E7YKBS2-Bewg8t99.js.map → chunk-7E7YKBS2-BsywoVTt.js.map} +1 -1
  52. package/dist/{chunk-7R4GIKGN-DiZ1HYFd.js → chunk-7R4GIKGN-DJmroLCH.js} +3 -3
  53. package/dist/{chunk-7R4GIKGN-DiZ1HYFd.js.map → chunk-7R4GIKGN-DJmroLCH.js.map} +1 -1
  54. package/dist/{chunk-C72U2L5F-BqOejReq.js → chunk-C72U2L5F-BwPwVDcP.js} +2 -2
  55. package/dist/{chunk-C72U2L5F-BqOejReq.js.map → chunk-C72U2L5F-BwPwVDcP.js.map} +1 -1
  56. package/dist/{chunk-EGIJ26TM-1-wU_wPi.js → chunk-EGIJ26TM-DKd5cEgn.js} +2 -2
  57. package/dist/{chunk-EGIJ26TM-1-wU_wPi.js.map → chunk-EGIJ26TM-DKd5cEgn.js.map} +1 -1
  58. package/dist/{chunk-FMBD7UC4-7bd068zf.js → chunk-FMBD7UC4-1IxrpdPX.js} +2 -2
  59. package/dist/{chunk-FMBD7UC4-7bd068zf.js.map → chunk-FMBD7UC4-1IxrpdPX.js.map} +1 -1
  60. package/dist/{chunk-GEFDOKGD-bXEkwPrJ.js → chunk-GEFDOKGD-DGJJEGSm.js} +7 -7
  61. package/dist/{chunk-GEFDOKGD-bXEkwPrJ.js.map → chunk-GEFDOKGD-DGJJEGSm.js.map} +1 -1
  62. package/dist/{chunk-GLR3WWYH-GIQ55uMn.js → chunk-GLR3WWYH-BDwmgwCA.js} +8 -8
  63. package/dist/{chunk-GLR3WWYH-GIQ55uMn.js.map → chunk-GLR3WWYH-BDwmgwCA.js.map} +1 -1
  64. package/dist/{chunk-HHEYEP7N-BdiTBCvb.js → chunk-HHEYEP7N-DJ1b-gA8.js} +4 -4
  65. package/dist/{chunk-HHEYEP7N-BdiTBCvb.js.map → chunk-HHEYEP7N-DJ1b-gA8.js.map} +1 -1
  66. package/dist/{chunk-JSJVCQXG-p-BUVvps.js → chunk-JSJVCQXG-Do17yYig.js} +5 -5
  67. package/dist/{chunk-JSJVCQXG-p-BUVvps.js.map → chunk-JSJVCQXG-Do17yYig.js.map} +1 -1
  68. package/dist/{chunk-KX2RTZJC-DopwIbE1.js → chunk-KX2RTZJC-d9jFqUAY.js} +3 -3
  69. package/dist/{chunk-KX2RTZJC-DopwIbE1.js.map → chunk-KX2RTZJC-d9jFqUAY.js.map} +1 -1
  70. package/dist/{chunk-KYZI473N-4Y4_4kXL.js → chunk-KYZI473N-BXYCe83A.js} +9 -9
  71. package/dist/{chunk-KYZI473N-4Y4_4kXL.js.map → chunk-KYZI473N-BXYCe83A.js.map} +1 -1
  72. package/dist/{chunk-L3YUKLVL-U6LYvPh7.js → chunk-L3YUKLVL-Y5k8UNMf.js} +2 -2
  73. package/dist/{chunk-L3YUKLVL-U6LYvPh7.js.map → chunk-L3YUKLVL-Y5k8UNMf.js.map} +1 -1
  74. package/dist/{chunk-MX3YWQON-DnBlqD44.js → chunk-MX3YWQON-D43mcq1f.js} +2 -2
  75. package/dist/{chunk-MX3YWQON-DnBlqD44.js.map → chunk-MX3YWQON-D43mcq1f.js.map} +1 -1
  76. package/dist/{chunk-NQ4KR5QH-BSylMz0X.js → chunk-NQ4KR5QH-C0nWShNk.js} +7 -7
  77. package/dist/{chunk-NQ4KR5QH-BSylMz0X.js.map → chunk-NQ4KR5QH-C0nWShNk.js.map} +1 -1
  78. package/dist/{chunk-O4XLMI2P-BcKxBhcn.js → chunk-O4XLMI2P-DtGEm9QX.js} +12 -12
  79. package/dist/{chunk-O4XLMI2P-BcKxBhcn.js.map → chunk-O4XLMI2P-DtGEm9QX.js.map} +1 -1
  80. package/dist/{chunk-OZEHJAEY-D6S6KbwY.js → chunk-OZEHJAEY-BsQ56PV-.js} +2 -2
  81. package/dist/{chunk-OZEHJAEY-D6S6KbwY.js.map → chunk-OZEHJAEY-BsQ56PV-.js.map} +1 -1
  82. package/dist/{chunk-PQ6SQG4A-DPz_e-Es.js → chunk-PQ6SQG4A-Cpfc5F4u.js} +3 -3
  83. package/dist/{chunk-PQ6SQG4A-DPz_e-Es.js.map → chunk-PQ6SQG4A-Cpfc5F4u.js.map} +1 -1
  84. package/dist/{chunk-PU5JKC2W-CAfe4Tg3.js → chunk-PU5JKC2W-DNpn_Yik.js} +5 -5
  85. package/dist/{chunk-PU5JKC2W-CAfe4Tg3.js.map → chunk-PU5JKC2W-DNpn_Yik.js.map} +1 -1
  86. package/dist/{chunk-QZHKN3VN-DMkPzlbH.js → chunk-QZHKN3VN-kDNdTVLo.js} +2 -2
  87. package/dist/{chunk-QZHKN3VN-DMkPzlbH.js.map → chunk-QZHKN3VN-kDNdTVLo.js.map} +1 -1
  88. package/dist/{chunk-R5LLSJPH-C90VQC8y.js → chunk-R5LLSJPH-c1IfaK5D.js} +2 -2
  89. package/dist/{chunk-R5LLSJPH-C90VQC8y.js.map → chunk-R5LLSJPH-c1IfaK5D.js.map} +1 -1
  90. package/dist/{chunk-WL4C6EOR-B2OMxQLL.js → chunk-WL4C6EOR-BV-op7zg.js} +10 -10
  91. package/dist/{chunk-WL4C6EOR-B2OMxQLL.js.map → chunk-WL4C6EOR-BV-op7zg.js.map} +1 -1
  92. package/dist/{chunk-XIRO2GV7-D1_jT4ch.js → chunk-XIRO2GV7-Bv1hlNLi.js} +2 -2
  93. package/dist/{chunk-XIRO2GV7-D1_jT4ch.js.map → chunk-XIRO2GV7-Bv1hlNLi.js.map} +1 -1
  94. package/dist/{chunk-XPW4576I-DkznIIIK.js → chunk-XPW4576I-BqiPnb3d.js} +2 -2
  95. package/dist/{chunk-XPW4576I-DkznIIIK.js.map → chunk-XPW4576I-BqiPnb3d.js.map} +1 -1
  96. package/dist/{chunk-XZSTWKYB-BZB_wvbZ.js → chunk-XZSTWKYB-C7maKWEr.js} +6 -6
  97. package/dist/{chunk-XZSTWKYB-BZB_wvbZ.js.map → chunk-XZSTWKYB-C7maKWEr.js.map} +1 -1
  98. package/dist/{chunk-YBOYWFTD-DVqQ1pen.js → chunk-YBOYWFTD-DkjEOcgZ.js} +4 -4
  99. package/dist/{chunk-YBOYWFTD-DVqQ1pen.js.map → chunk-YBOYWFTD-DkjEOcgZ.js.map} +1 -1
  100. package/dist/classDiagram-VBA2DB6C-DZfC0xPM.js +31 -0
  101. package/dist/{classDiagram-VBA2DB6C-DFfohpM0.js.map → classDiagram-VBA2DB6C-DZfC0xPM.js.map} +1 -1
  102. package/dist/classDiagram-v2-RAHNMMFH-CtWRD1ax.js +31 -0
  103. package/dist/{classDiagram-v2-RAHNMMFH-kUMm28FB.js.map → classDiagram-v2-RAHNMMFH-CtWRD1ax.js.map} +1 -1
  104. package/dist/{clone-DxI1nSTP.js → clone-CliVdNc8.js} +2 -2
  105. package/dist/{clone-DxI1nSTP.js.map → clone-CliVdNc8.js.map} +1 -1
  106. package/dist/{component-x2UxdKEC.js → component-C1Jiz1Ki.js} +1 -1
  107. package/dist/{component-x2UxdKEC.js.map → component-C1Jiz1Ki.js.map} +1 -1
  108. package/dist/components/index.js +3 -3
  109. package/dist/components/theme/accent-switcher.d.ts +2 -0
  110. package/dist/components/theme/accent-switcher.d.ts.map +1 -1
  111. package/dist/components/theme/accent-switcher.js +5 -1
  112. package/dist/components/theme/accent-switcher.js.map +1 -1
  113. package/dist/components/theme/density-switcher.d.ts +2 -0
  114. package/dist/components/theme/density-switcher.d.ts.map +1 -1
  115. package/dist/components/theme/density-switcher.js +5 -1
  116. package/dist/components/theme/density-switcher.js.map +1 -1
  117. package/dist/components/theme/font-stack-picker.d.ts +2 -0
  118. package/dist/components/theme/font-stack-picker.d.ts.map +1 -1
  119. package/dist/components/theme/font-stack-picker.js +5 -1
  120. package/dist/components/theme/font-stack-picker.js.map +1 -1
  121. package/dist/components/theme/glass-slider.d.ts +2 -0
  122. package/dist/components/theme/glass-slider.d.ts.map +1 -1
  123. package/dist/components/theme/glass-slider.js +21 -15
  124. package/dist/components/theme/glass-slider.js.map +1 -1
  125. package/dist/components/theme/icon-gallery-browser.d.ts +16 -0
  126. package/dist/components/theme/icon-gallery-browser.d.ts.map +1 -0
  127. package/dist/components/theme/icon-set-picker.d.ts +2 -0
  128. package/dist/components/theme/icon-set-picker.d.ts.map +1 -1
  129. package/dist/components/theme/icon-set-picker.js +29 -24
  130. package/dist/components/theme/icon-set-picker.js.map +1 -1
  131. package/dist/components/theme/icon-usage-matrix.d.ts +2 -0
  132. package/dist/components/theme/icon-usage-matrix.d.ts.map +1 -1
  133. package/dist/components/theme/icon-usage-matrix.js +11 -7
  134. package/dist/components/theme/icon-usage-matrix.js.map +1 -1
  135. package/dist/components/theme/index.js +3 -3
  136. package/dist/components/theme/radius-slider.d.ts +2 -0
  137. package/dist/components/theme/radius-slider.d.ts.map +1 -1
  138. package/dist/components/theme/radius-slider.js +17 -12
  139. package/dist/components/theme/radius-slider.js.map +1 -1
  140. package/dist/components/theme/theme-preset-grid.d.ts +2 -0
  141. package/dist/components/theme/theme-preset-grid.d.ts.map +1 -1
  142. package/dist/components/theme/theme-preset-grid.js +6 -2
  143. package/dist/components/theme/theme-preset-grid.js.map +1 -1
  144. package/dist/components/theme/theme-preview-tile.d.ts +2 -0
  145. package/dist/components/theme/theme-preview-tile.d.ts.map +1 -1
  146. package/dist/components/theme/theme-preview-tile.js +9 -5
  147. package/dist/components/theme/theme-preview-tile.js.map +1 -1
  148. package/dist/components/theme/theme-studio.d.ts +4 -0
  149. package/dist/components/theme/theme-studio.d.ts.map +1 -1
  150. package/dist/components/theme/theme-studio.js +2 -93
  151. package/dist/components/theme/theme-switcher.d.ts +2 -0
  152. package/dist/components/theme/theme-switcher.d.ts.map +1 -1
  153. package/dist/components/theme/theme-switcher.js +5 -1
  154. package/dist/components/theme/theme-switcher.js.map +1 -1
  155. package/dist/composites/metrics-card.js +1 -1
  156. package/dist/composites/per-case-stats-table.js +1 -1
  157. package/dist/composites/run-monitor.js +2 -2
  158. package/dist/{copy-Hv8btfHH.js → copy-CP6UzCoj.js} +2 -2
  159. package/dist/{copy-Hv8btfHH.js.map → copy-CP6UzCoj.js.map} +1 -1
  160. package/dist/{cose-bilkent-S5V4N54A-DSIl5_e8.js → cose-bilkent-S5V4N54A-DxM02fly.js} +4 -4
  161. package/dist/{cose-bilkent-S5V4N54A-DSIl5_e8.js.map → cose-bilkent-S5V4N54A-DxM02fly.js.map} +1 -1
  162. package/dist/{createLucideIcon-wKpAnzBe.js → createLucideIcon-Cfb5CZJx.js} +1 -1
  163. package/dist/{createLucideIcon-wKpAnzBe.js.map → createLucideIcon-Cfb5CZJx.js.map} +1 -1
  164. package/dist/{cytoscape.esm-klxrH6H1.js → cytoscape.esm-2vKMh7AJ.js} +1 -1
  165. package/dist/{cytoscape.esm-klxrH6H1.js.map → cytoscape.esm-2vKMh7AJ.js.map} +1 -1
  166. package/dist/{dagre-Bm7BZZKB.js → dagre-BqC9mhMk.js} +7 -7
  167. package/dist/{dagre-Bm7BZZKB.js.map → dagre-BqC9mhMk.js.map} +1 -1
  168. package/dist/{dagre-KLK3FWXG-B0rbfsw9.js → dagre-KLK3FWXG-DTKcsol6.js} +15 -15
  169. package/dist/{dagre-KLK3FWXG-B0rbfsw9.js.map → dagre-KLK3FWXG-DTKcsol6.js.map} +1 -1
  170. package/dist/{defaultLocale-Cql_qCPq.js → defaultLocale-PLHpRrsr.js} +1 -1
  171. package/dist/{defaultLocale-Cql_qCPq.js.map → defaultLocale-PLHpRrsr.js.map} +1 -1
  172. package/dist/{diagram-E7M64L7V-DWS26Zbm.js → diagram-E7M64L7V-Co7O3gub.js} +12 -12
  173. package/dist/{diagram-E7M64L7V-DWS26Zbm.js.map → diagram-E7M64L7V-Co7O3gub.js.map} +1 -1
  174. package/dist/{diagram-IFDJBPK2--zOQrB5O.js → diagram-IFDJBPK2-D-Enf1mK.js} +7 -7
  175. package/dist/{diagram-IFDJBPK2--zOQrB5O.js.map → diagram-IFDJBPK2-D-Enf1mK.js.map} +1 -1
  176. package/dist/{diagram-P4PSJMXO-DjNveg1t.js → diagram-P4PSJMXO-O8g_RIkM.js} +7 -7
  177. package/dist/{diagram-P4PSJMXO-DjNveg1t.js.map → diagram-P4PSJMXO-O8g_RIkM.js.map} +1 -1
  178. package/dist/display/avatar/index.js +1 -1
  179. package/dist/display/badge/index.js +1 -1
  180. package/dist/display/index.js +3 -3
  181. package/dist/display/markdown-viewer/index.js +1 -1
  182. package/dist/{dist-Dq1IoZXt.js → dist-B-HCSak9.js} +13 -13
  183. package/dist/{dist-Dq1IoZXt.js.map → dist-B-HCSak9.js.map} +1 -1
  184. package/dist/{dist-CbqFryer.js → dist-BhO08NBU.js} +5 -5
  185. package/dist/{dist-CbqFryer.js.map → dist-BhO08NBU.js.map} +1 -1
  186. package/dist/{dist-D0fg6pif.js → dist-BlNMcPtC.js} +2 -2
  187. package/dist/{dist-D0fg6pif.js.map → dist-BlNMcPtC.js.map} +1 -1
  188. package/dist/{dist-CSE7pO-4.js → dist-BrNloUiz.js} +1 -1
  189. package/dist/{dist-CSE7pO-4.js.map → dist-BrNloUiz.js.map} +1 -1
  190. package/dist/{dist-CcNjOWyQ.js → dist-Br_I_YIY.js} +2 -2
  191. package/dist/{dist-CcNjOWyQ.js.map → dist-Br_I_YIY.js.map} +1 -1
  192. package/dist/{dist-D0hHNX_3.js → dist-CDa1xTf4.js} +9 -9
  193. package/dist/{dist-D0hHNX_3.js.map → dist-CDa1xTf4.js.map} +1 -1
  194. package/dist/{dist-BCCeHAQm.js → dist-CWPamCJD.js} +2 -2
  195. package/dist/{dist-BCCeHAQm.js.map → dist-CWPamCJD.js.map} +1 -1
  196. package/dist/{dist-CVCn7F_m.js → dist-CetkIu6m.js} +1 -1
  197. package/dist/{dist-CVCn7F_m.js.map → dist-CetkIu6m.js.map} +1 -1
  198. package/dist/{dist-koa_pEtu.js → dist-CjZz16VT.js} +2 -2
  199. package/dist/{dist-koa_pEtu.js.map → dist-CjZz16VT.js.map} +1 -1
  200. package/dist/{dist-D5o6xae2.js → dist-DDlxLS_M.js} +2 -2
  201. package/dist/{dist-D5o6xae2.js.map → dist-DDlxLS_M.js.map} +1 -1
  202. package/dist/{dist-Cao8o5bZ.js → dist-DFW2ymX5.js} +1 -1
  203. package/dist/{dist-Cao8o5bZ.js.map → dist-DFW2ymX5.js.map} +1 -1
  204. package/dist/{dist-Dm7Xaded.js → dist-DHTh2jaC.js} +1 -1
  205. package/dist/{dist-Dm7Xaded.js.map → dist-DHTh2jaC.js.map} +1 -1
  206. package/dist/{dist-BBVMDH9A.js → dist-DN5XnB8I.js} +4 -4
  207. package/dist/{dist-BBVMDH9A.js.map → dist-DN5XnB8I.js.map} +1 -1
  208. package/dist/{dist-C0wG5dwG.js → dist-DYQiYO9a.js} +2 -2
  209. package/dist/{dist-C0wG5dwG.js.map → dist-DYQiYO9a.js.map} +1 -1
  210. package/dist/{dist-RmXz0NYF.js → dist-GA_FAY5r.js} +1 -1
  211. package/dist/{dist-RmXz0NYF.js.map → dist-GA_FAY5r.js.map} +1 -1
  212. package/dist/{dist-cMlzVrN6.js → dist-M-TigQUP.js} +3 -3
  213. package/dist/{dist-cMlzVrN6.js.map → dist-M-TigQUP.js.map} +1 -1
  214. package/dist/{dist-DxtM7vvP.js → dist-QzxcNtrD.js} +3 -3
  215. package/dist/{dist-DxtM7vvP.js.map → dist-QzxcNtrD.js.map} +1 -1
  216. package/dist/{dist-CTlQcJNK.js → dist-W53Bo1BJ.js} +1 -1
  217. package/dist/{dist-CTlQcJNK.js.map → dist-W53Bo1BJ.js.map} +1 -1
  218. package/dist/{dist-B1veE5DO.js → dist-bUQfhez2.js} +8 -8
  219. package/dist/{dist-B1veE5DO.js.map → dist-bUQfhez2.js.map} +1 -1
  220. package/dist/{dist-DGayZ3ok2.js → dist-e5OOjxMa.js} +2 -2
  221. package/dist/dist-e5OOjxMa.js.map +1 -0
  222. package/dist/{dist-CpMqmV-i.js → dist-r_mYhsAH.js} +2 -2
  223. package/dist/{dist-CpMqmV-i.js.map → dist-r_mYhsAH.js.map} +1 -1
  224. package/dist/{dropdown-menu-ChWWguC6.js → dropdown-menu-CxFMDZns.js} +7 -7
  225. package/dist/{dropdown-menu-ChWWguC6.js.map → dropdown-menu-CxFMDZns.js.map} +1 -1
  226. package/dist/{ellipsis-QzwbUxFu.js → ellipsis-CLIG9-2m.js} +2 -2
  227. package/dist/{ellipsis-QzwbUxFu.js.map → ellipsis-CLIG9-2m.js.map} +1 -1
  228. package/dist/{erDiagram-INFDFZHY-Ccs6kW39.js → erDiagram-INFDFZHY-C42JeR9I.js} +15 -15
  229. package/dist/{erDiagram-INFDFZHY-Ccs6kW39.js.map → erDiagram-INFDFZHY-C42JeR9I.js.map} +1 -1
  230. package/dist/{es2015-Bv2aaatg.js → es2015-CJnm4_FQ.js} +4 -4
  231. package/dist/{es2015-Bv2aaatg.js.map → es2015-CJnm4_FQ.js.map} +1 -1
  232. package/dist/{flowDiagram-PKNHOUZH-BFdCj6uy.js → flowDiagram-PKNHOUZH-DInJjOz3.js} +18 -18
  233. package/dist/{flowDiagram-PKNHOUZH-BFdCj6uy.js.map → flowDiagram-PKNHOUZH-DInJjOz3.js.map} +1 -1
  234. package/dist/{ganttDiagram-A5KZAMGK-11X4ChEO.js → ganttDiagram-A5KZAMGK-Dgp-4Yss.js} +8 -8
  235. package/dist/{ganttDiagram-A5KZAMGK-11X4ChEO.js.map → ganttDiagram-A5KZAMGK-Dgp-4Yss.js.map} +1 -1
  236. package/dist/gitGraph-HDMCJU4V-D_QsK6Rt.js +3 -0
  237. package/dist/{gitGraphDiagram-K3NZZRJ6-BaZX5GA5.js → gitGraphDiagram-K3NZZRJ6-Dr_X0dND.js} +8 -8
  238. package/dist/{gitGraphDiagram-K3NZZRJ6-BaZX5GA5.js.map → gitGraphDiagram-K3NZZRJ6-Dr_X0dND.js.map} +1 -1
  239. package/dist/{graphlib-DmFENmkJ.js → graphlib-ecencZTG.js} +4 -4
  240. package/dist/{graphlib-DmFENmkJ.js.map → graphlib-ecencZTG.js.map} +1 -1
  241. package/dist/index.d.ts +1 -0
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js +121 -121
  244. package/dist/info-3K5VOQVL-BbLiZXwn.js +3 -0
  245. package/dist/{infoDiagram-LFFYTUFH-iswGOIAk.js → infoDiagram-LFFYTUFH-DajJJRvc.js} +5 -5
  246. package/dist/{infoDiagram-LFFYTUFH-iswGOIAk.js.map → infoDiagram-LFFYTUFH-DajJJRvc.js.map} +1 -1
  247. package/dist/{init-Bdvvvy1Z.js → init-DcLTaNW1.js} +1 -1
  248. package/dist/{init-Bdvvvy1Z.js.map → init-DcLTaNW1.js.map} +1 -1
  249. package/dist/{input-DwHjxF_w.js → input-BrmncNsd.js} +1 -1
  250. package/dist/{input-DwHjxF_w.js.map → input-BrmncNsd.js.map} +1 -1
  251. package/dist/{interactive-C6OMqZhG.js → interactive-CXfIDzyh.js} +1 -1
  252. package/dist/{interactive-C6OMqZhG.js.map → interactive-CXfIDzyh.js.map} +1 -1
  253. package/dist/{isArrayLikeObject-uEhZQuCW.js → isArrayLikeObject-Bjsxaqj7.js} +1 -1
  254. package/dist/{isArrayLikeObject-uEhZQuCW.js.map → isArrayLikeObject-Bjsxaqj7.js.map} +1 -1
  255. package/dist/{isEmpty-SB7gHWzg.js → isEmpty-CeZZUVts.js} +2 -2
  256. package/dist/{isEmpty-SB7gHWzg.js.map → isEmpty-CeZZUVts.js.map} +1 -1
  257. package/dist/{ishikawaDiagram-PHBUUO56-BYrA8GRt.js → ishikawaDiagram-PHBUUO56-qHBJm2LT.js} +6 -6
  258. package/dist/{ishikawaDiagram-PHBUUO56-BYrA8GRt.js.map → ishikawaDiagram-PHBUUO56-qHBJm2LT.js.map} +1 -1
  259. package/dist/{journeyDiagram-4ABVD52K-BlCQNVun.js → journeyDiagram-4ABVD52K-PgfYdoDM.js} +7 -7
  260. package/dist/{journeyDiagram-4ABVD52K-BlCQNVun.js.map → journeyDiagram-4ABVD52K-PgfYdoDM.js.map} +1 -1
  261. package/dist/{kanban-definition-K7BYSVSG-85hLaVO4.js → kanban-definition-K7BYSVSG-DFRT8j7A.js} +11 -11
  262. package/dist/{kanban-definition-K7BYSVSG-85hLaVO4.js.map → kanban-definition-K7BYSVSG-DFRT8j7A.js.map} +1 -1
  263. package/dist/{katex-DyctUUDD.js → katex-BZdHnXin.js} +1 -1
  264. package/dist/{katex-DyctUUDD.js.map → katex-BZdHnXin.js.map} +1 -1
  265. package/dist/{label-DaoC8KCo.js → label-D_TX0q0F.js} +4 -4
  266. package/dist/{label-DaoC8KCo.js.map → label-D_TX0q0F.js.map} +1 -1
  267. package/dist/layout-DJ2E8nU0.js +135 -0
  268. package/dist/layout-DJ2E8nU0.js.map +1 -0
  269. package/dist/{line-xLJn8e8J.js → line-Cq1AZT4f.js} +4 -4
  270. package/dist/{line-xLJn8e8J.js.map → line-Cq1AZT4f.js.map} +1 -1
  271. package/dist/{linear-BePtLBEt.js → linear-BnJD01Xn.js} +5 -5
  272. package/dist/{linear-BePtLBEt.js.map → linear-BnJD01Xn.js.map} +1 -1
  273. package/dist/{markdown-viewer-DrwjEcXp.js → markdown-viewer-CBRQVRMp.js} +1 -1
  274. package/dist/{markdown-viewer-DrwjEcXp.js.map → markdown-viewer-CBRQVRMp.js.map} +1 -1
  275. package/dist/{math--xT1IZMK.js → math-D4gdAuwG.js} +1 -1
  276. package/dist/{math--xT1IZMK.js.map → math-D4gdAuwG.js.map} +1 -1
  277. package/dist/{menubar-CZie7LCj.js → menubar-lQZ-0ckw.js} +13 -13
  278. package/dist/{menubar-CZie7LCj.js.map → menubar-lQZ-0ckw.js.map} +1 -1
  279. package/dist/{mermaid-parser.core-Bd7Ghv5c.js → mermaid-parser.core-Dz5qv4CI.js} +16 -16
  280. package/dist/{mermaid-parser.core-Bd7Ghv5c.js.map → mermaid-parser.core-Dz5qv4CI.js.map} +1 -1
  281. package/dist/{mermaid.core-beWmNAWY.js → mermaid.core-DTiIXVKa.js} +44 -44
  282. package/dist/{mermaid.core-beWmNAWY.js.map → mermaid.core-DTiIXVKa.js.map} +1 -1
  283. package/dist/{mindmap-definition-YRQLILUH-CNBsYwDI.js → mindmap-definition-YRQLILUH-D95OPRMh.js} +13 -13
  284. package/dist/{mindmap-definition-YRQLILUH-CNBsYwDI.js.map → mindmap-definition-YRQLILUH-D95OPRMh.js.map} +1 -1
  285. package/dist/{navigation-menu-Db2QQ70P.js → navigation-menu-BpZTlEU0.js} +14 -14
  286. package/dist/{navigation-menu-Db2QQ70P.js.map → navigation-menu-BpZTlEU0.js.map} +1 -1
  287. package/dist/{ordinal-BKo-UFaW.js → ordinal-CC9tfh_g.js} +2 -2
  288. package/dist/{ordinal-BKo-UFaW.js.map → ordinal-CC9tfh_g.js.map} +1 -1
  289. package/dist/packet-RMMSAZCW-D72DRs1N.js +3 -0
  290. package/dist/{pagination-BmFjVnmV.js → pagination-CCjNavtQ.js} +5 -5
  291. package/dist/{pagination-BmFjVnmV.js.map → pagination-CCjNavtQ.js.map} +1 -1
  292. package/dist/{path-Z-HG_8i_.js → path-y0uQCOMW.js} +1 -1
  293. package/dist/{path-Z-HG_8i_.js.map → path-y0uQCOMW.js.map} +1 -1
  294. package/dist/pie-UPGHQEXC-C8RDLrEi.js +3 -0
  295. package/dist/{pieDiagram-SKSYHLDU-BMrGgUAv.js → pieDiagram-SKSYHLDU-BREEn_Sk.js} +12 -12
  296. package/dist/{pieDiagram-SKSYHLDU-BMrGgUAv.js.map → pieDiagram-SKSYHLDU-BREEn_Sk.js.map} +1 -1
  297. package/dist/primitives/button/index.js +1 -1
  298. package/dist/primitives/index.js +3 -3
  299. package/dist/primitives/input/index.js +1 -1
  300. package/dist/primitives/live-log-tail.js +1 -1
  301. package/dist/primitives/phase-progress.js +1 -1
  302. package/dist/primitives/sse-live-badge.js +1 -1
  303. package/dist/primitives/toggle/index.js +1 -1
  304. package/dist/primitives/yaml-override-editor.js +1 -1
  305. package/dist/primitives-BzQ6EvIx.js +380 -0
  306. package/dist/primitives-BzQ6EvIx.js.map +1 -0
  307. package/dist/{quadrantDiagram-337W2JSQ-kFO50yPy.js → quadrantDiagram-337W2JSQ-CcKc-h2o.js} +5 -5
  308. package/dist/{quadrantDiagram-337W2JSQ-kFO50yPy.js.map → quadrantDiagram-337W2JSQ-CcKc-h2o.js.map} +1 -1
  309. package/dist/radar-KQ55EAFF-DhmvjiyN.js +3 -0
  310. package/dist/{radio-group-Dum8cfXo.js → radio-group-8GO9_jRN.js} +10 -10
  311. package/dist/{radio-group-Dum8cfXo.js.map → radio-group-8GO9_jRN.js.map} +1 -1
  312. package/dist/react/app-switcher.js +1 -1
  313. package/dist/react/brand.js +1 -1
  314. package/dist/react/consent/preferences.js +1 -1
  315. package/dist/react/editors/code-editor.js +1 -1
  316. package/dist/react/editors/diff-viewer.js +1 -1
  317. package/dist/react/editors/json-viewer.js +1 -1
  318. package/dist/react/editors/log-viewer.js +1 -1
  319. package/dist/react/editors/yaml-editor.js +1 -1
  320. package/dist/react/feedback/notification-banner.js +2 -2
  321. package/dist/react/hooks/useSSE.js +1 -1
  322. package/dist/react/hooks/useStorage.js +1 -1
  323. package/dist/react/layout/app-shell.js +1 -1
  324. package/dist/react/layout/browser-layout.d.ts +12 -0
  325. package/dist/react/layout/browser-layout.d.ts.map +1 -0
  326. package/dist/react/layout/detail-header.d.ts +13 -0
  327. package/dist/react/layout/detail-header.d.ts.map +1 -0
  328. package/dist/react/layout/index.d.ts +4 -0
  329. package/dist/react/layout/index.d.ts.map +1 -1
  330. package/dist/react/layout/index.js +3 -2
  331. package/dist/react/layout/page-frame.d.ts +11 -0
  332. package/dist/react/layout/page-frame.d.ts.map +1 -0
  333. package/dist/react/layout/page-header.js +1 -1
  334. package/dist/react/layout/sub-nav.d.ts +15 -0
  335. package/dist/react/layout/sub-nav.d.ts.map +1 -0
  336. package/dist/react/primitives/alert-dialog.js +1 -1
  337. package/dist/react/primitives/alert.js +3 -3
  338. package/dist/react/primitives/animated-counter.js +1 -1
  339. package/dist/react/primitives/aspect-ratio.js +1 -1
  340. package/dist/react/primitives/attack-path.d.ts +1 -1
  341. package/dist/react/primitives/attack-path.js +2 -2
  342. package/dist/react/primitives/avatar.js +2 -2
  343. package/dist/react/primitives/badge.d.ts +1 -1
  344. package/dist/react/primitives/badge.js +3 -3
  345. package/dist/react/primitives/breadcrumb.js +3 -3
  346. package/dist/react/primitives/button.js +3 -3
  347. package/dist/react/primitives/calendar.js +1 -1
  348. package/dist/react/primitives/card.js +1 -1
  349. package/dist/react/primitives/carousel.js +1 -1
  350. package/dist/react/primitives/chart-area.js +1 -1
  351. package/dist/react/primitives/chart-bar.js +1 -1
  352. package/dist/react/primitives/chart-candlestick.js +1 -1
  353. package/dist/react/primitives/chart-frame.d.ts +14 -0
  354. package/dist/react/primitives/chart-frame.d.ts.map +1 -0
  355. package/dist/react/primitives/chart-funnel.js +1 -1
  356. package/dist/react/primitives/chart-gauge.js +1 -1
  357. package/dist/react/primitives/chart-heatmap.js +1 -1
  358. package/dist/react/primitives/chart-line.js +1 -1
  359. package/dist/react/primitives/chart-pie.js +1 -1
  360. package/dist/react/primitives/chart-radar.js +1 -1
  361. package/dist/react/primitives/chart-sankey.js +1 -1
  362. package/dist/react/primitives/chart-scatter.js +1 -1
  363. package/dist/react/primitives/chart-sparkline.js +1 -1
  364. package/dist/react/primitives/chart-treemap.js +1 -1
  365. package/dist/react/primitives/chart-waterfall.js +1 -1
  366. package/dist/react/primitives/chat-drawer.d.ts +13 -0
  367. package/dist/react/primitives/chat-drawer.d.ts.map +1 -0
  368. package/dist/react/primitives/chat-input.d.ts +10 -0
  369. package/dist/react/primitives/chat-input.d.ts.map +1 -0
  370. package/dist/react/primitives/checkbox.js +1 -1
  371. package/dist/react/primitives/code-block.js +3 -3
  372. package/dist/react/primitives/code-viewer.js +3 -3
  373. package/dist/react/primitives/collapsible.js +3 -3
  374. package/dist/react/primitives/color-picker.js +1 -1
  375. package/dist/react/primitives/context-menu.js +1 -1
  376. package/dist/react/primitives/copy-button.js +4 -4
  377. package/dist/react/primitives/cron-editor.js +1 -1
  378. package/dist/react/primitives/cvss-badge.d.ts +1 -1
  379. package/dist/react/primitives/cvss-badge.js +2 -2
  380. package/dist/react/primitives/dashboard-metric-card.d.ts +18 -0
  381. package/dist/react/primitives/dashboard-metric-card.d.ts.map +1 -0
  382. package/dist/react/primitives/data-field.d.ts +13 -0
  383. package/dist/react/primitives/data-field.d.ts.map +1 -0
  384. package/dist/react/primitives/data-grid.js +4 -4
  385. package/dist/react/primitives/data-table.js +2 -2
  386. package/dist/react/primitives/date-picker.js +1 -1
  387. package/dist/react/primitives/detection-status.d.ts +1 -1
  388. package/dist/react/primitives/detection-status.js +2 -2
  389. package/dist/react/primitives/dialog.js +3 -3
  390. package/dist/react/primitives/drawer.js +3 -3
  391. package/dist/react/primitives/dropdown-menu.js +1 -1
  392. package/dist/react/primitives/empty-state.js +1 -1
  393. package/dist/react/primitives/field.js +1 -1
  394. package/dist/react/primitives/file-tree.js +1 -1
  395. package/dist/react/primitives/flow-diagram.js +1 -1
  396. package/dist/react/primitives/heatmap-legend.js +1 -1
  397. package/dist/react/primitives/heatmap-toolbar.js +2 -2
  398. package/dist/react/primitives/hover-card.js +1 -1
  399. package/dist/react/primitives/index.d.ts +8 -0
  400. package/dist/react/primitives/index.d.ts.map +1 -1
  401. package/dist/react/primitives/index.js +84 -83
  402. package/dist/react/primitives/input.js +1 -1
  403. package/dist/react/primitives/json-path-browser.js +1 -1
  404. package/dist/react/primitives/kanban.js +1 -1
  405. package/dist/react/primitives/kbd.js +1 -1
  406. package/dist/react/primitives/label.js +1 -1
  407. package/dist/react/primitives/map.js +1 -1
  408. package/dist/react/primitives/markdown-viewer.js +0 -0
  409. package/dist/react/primitives/menubar.js +1 -1
  410. package/dist/react/primitives/mermaid-diagram.js +1 -1
  411. package/dist/react/primitives/metric-tile.js +1 -1
  412. package/dist/react/primitives/mitre-matrix.d.ts +1 -1
  413. package/dist/react/primitives/mitre-matrix.js +2 -2
  414. package/dist/react/primitives/modal.js +3 -3
  415. package/dist/react/primitives/navigation-menu.js +1 -1
  416. package/dist/react/primitives/network-graph.js +1 -1
  417. package/dist/react/primitives/notification-center.js +4 -4
  418. package/dist/react/primitives/notification-center.js.map +1 -1
  419. package/dist/react/primitives/pagination.js +1 -1
  420. package/dist/react/primitives/popover.js +1 -1
  421. package/dist/react/primitives/progress.js +2 -2
  422. package/dist/react/primitives/query-boundary.d.ts +15 -0
  423. package/dist/react/primitives/query-boundary.d.ts.map +1 -0
  424. package/dist/react/primitives/radio-group.js +1 -1
  425. package/dist/react/primitives/rule-editor.js +1 -1
  426. package/dist/react/primitives/score-ring.d.ts +13 -0
  427. package/dist/react/primitives/score-ring.d.ts.map +1 -0
  428. package/dist/react/primitives/scroll-area.js +1 -1
  429. package/dist/react/primitives/search.js +3 -3
  430. package/dist/react/primitives/section-panel.d.ts +11 -0
  431. package/dist/react/primitives/section-panel.d.ts.map +1 -0
  432. package/dist/react/primitives/select.js +1 -1
  433. package/dist/react/primitives/separator.js +1 -1
  434. package/dist/react/primitives/severity-indicator.d.ts +1 -1
  435. package/dist/react/primitives/severity-indicator.js +2 -2
  436. package/dist/react/primitives/sheet.js +3 -3
  437. package/dist/react/primitives/skeleton.js +1 -1
  438. package/dist/react/primitives/slide-panel.js +2 -2
  439. package/dist/react/primitives/slider.js +1 -1
  440. package/dist/react/primitives/spinner.js +1 -1
  441. package/dist/react/primitives/split-pane.js +1 -1
  442. package/dist/react/primitives/stat-card.js +2 -2
  443. package/dist/react/primitives/status-bar.js +1 -1
  444. package/dist/react/primitives/status-dot.js +1 -1
  445. package/dist/react/primitives/stepper.js +3 -3
  446. package/dist/react/primitives/switch.js +1 -1
  447. package/dist/react/primitives/table.js +1 -1
  448. package/dist/react/primitives/tabs.js +1 -1
  449. package/dist/react/primitives/tag-input.js +1 -1
  450. package/dist/react/primitives/terminal.js +1 -1
  451. package/dist/react/primitives/textarea.js +1 -1
  452. package/dist/react/primitives/timeline.js +1 -1
  453. package/dist/react/primitives/toast.js +1 -1
  454. package/dist/react/primitives/toggle.js +1 -1
  455. package/dist/react/primitives/tooltip.js +1 -1
  456. package/dist/react/primitives/tree-view.js +2 -2
  457. package/dist/react/primitives/typography.js +1 -1
  458. package/dist/react/primitives/uptime-bar.js +1 -1
  459. package/dist/react/primitives/vulnerability-card.d.ts +1 -1
  460. package/dist/react/primitives/vulnerability-card.js +2 -2
  461. package/dist/react/sidebar.js +2 -2
  462. package/dist/react/theme-studio.js +1 -1
  463. package/dist/react/theme-toggle.js +1 -1
  464. package/dist/react/topology.js +1 -1
  465. package/dist/react.js +103 -103
  466. package/dist/{requirementDiagram-Z7DCOOCP-D2Oxfw6G.js → requirementDiagram-Z7DCOOCP-aPcaPduF.js} +13 -13
  467. package/dist/{requirementDiagram-Z7DCOOCP-D2Oxfw6G.js.map → requirementDiagram-Z7DCOOCP-aPcaPduF.js.map} +1 -1
  468. package/dist/{rough.esm-Czyj4U3Q.js → rough.esm-C9rQ9YkE.js} +1 -1
  469. package/dist/{rough.esm-Czyj4U3Q.js.map → rough.esm-C9rQ9YkE.js.map} +1 -1
  470. package/dist/{sankeyDiagram-WA2Y5GQK-q1_lwNBY.js → sankeyDiagram-WA2Y5GQK-CO_lUqQX.js} +5 -5
  471. package/dist/{sankeyDiagram-WA2Y5GQK-q1_lwNBY.js.map → sankeyDiagram-WA2Y5GQK-CO_lUqQX.js.map} +1 -1
  472. package/dist/{scroll-area-CR1iK8Af.js → scroll-area-C_oeG0js.js} +8 -8
  473. package/dist/{scroll-area-CR1iK8Af.js.map → scroll-area-C_oeG0js.js.map} +1 -1
  474. package/dist/{search-CrxnZfZ5.js → search-Cu20LdaQ.js} +2 -2
  475. package/dist/{search-CrxnZfZ5.js.map → search-Cu20LdaQ.js.map} +1 -1
  476. package/dist/security/index.d.ts +2 -0
  477. package/dist/security/index.d.ts.map +1 -1
  478. package/dist/security/index.js +7 -6
  479. package/dist/security/mitre-data.d.ts +38 -0
  480. package/dist/security/mitre-data.d.ts.map +1 -0
  481. package/dist/security-AzmGrY2-.js +77 -0
  482. package/dist/security-AzmGrY2-.js.map +1 -0
  483. package/dist/{select-BX7KT3VP.js → select-Bc7Gn3Oa.js} +19 -19
  484. package/dist/{select-BX7KT3VP.js.map → select-Bc7Gn3Oa.js.map} +1 -1
  485. package/dist/{separator-C6KfB7ww.js → separator-C-OWzLst.js} +3 -3
  486. package/dist/{separator-C6KfB7ww.js.map → separator-C-OWzLst.js.map} +1 -1
  487. package/dist/{sequenceDiagram-2WXFIKYE-BCEaH0s_.js → sequenceDiagram-2WXFIKYE-D7Vh1Zld.js} +9 -9
  488. package/dist/{sequenceDiagram-2WXFIKYE-BCEaH0s_.js.map → sequenceDiagram-2WXFIKYE-D7Vh1Zld.js.map} +1 -1
  489. package/dist/{series-DMc2ZYyj.js → series-DrBALkNS.js} +2 -2
  490. package/dist/{series-DMc2ZYyj.js.map → series-DrBALkNS.js.map} +1 -1
  491. package/dist/services/index.js +2 -2
  492. package/dist/services/sse-react.js +1 -1
  493. package/dist/services/sse.js +1 -1
  494. package/dist/services/theme-engine/engine.d.ts.map +1 -1
  495. package/dist/services/theme-engine/fonts.d.ts.map +1 -1
  496. package/dist/services/theme-engine/icons.d.ts.map +1 -1
  497. package/dist/services/theme-engine/index.js +120 -48
  498. package/dist/services/theme-engine/index.js.map +1 -1
  499. package/dist/services/theme-engine/test-helpers.d.ts +13 -0
  500. package/dist/services/theme-engine/test-helpers.d.ts.map +1 -0
  501. package/dist/services/toast-react.js +2 -2
  502. package/dist/sidebar/index.js +1 -1
  503. package/dist/{slider-CLgdcoKC.js → slider-CJoWbXQt.js} +10 -10
  504. package/dist/{slider-CLgdcoKC.js.map → slider-CJoWbXQt.js.map} +1 -1
  505. package/dist/{src-hxErHTV1.js → src-BhNgmpel.js} +2 -2
  506. package/dist/{src-hxErHTV1.js.map → src-BhNgmpel.js.map} +1 -1
  507. package/dist/{src-BEYP07TO.js → src-D1EMXotX.js} +1 -1
  508. package/dist/{src-BEYP07TO.js.map → src-D1EMXotX.js.map} +1 -1
  509. package/dist/{sse-D0HLjufB.js → sse-DCaj9UFJ.js} +1 -1
  510. package/dist/{sse-D0HLjufB.js.map → sse-DCaj9UFJ.js.map} +1 -1
  511. package/dist/{stateDiagram-RAJIS63D-B-Mu-_BR.js → stateDiagram-RAJIS63D-DdiY5cf3.js} +18 -18
  512. package/dist/{stateDiagram-RAJIS63D-B-Mu-_BR.js.map → stateDiagram-RAJIS63D-DdiY5cf3.js.map} +1 -1
  513. package/dist/stateDiagram-v2-FVOUBMTO-CAWy0Pkh.js +29 -0
  514. package/dist/{stateDiagram-v2-FVOUBMTO-Cnp2uGxd.js.map → stateDiagram-v2-FVOUBMTO-CAWy0Pkh.js.map} +1 -1
  515. package/dist/{storage-B-gK537W.js → storage-BUlr2J4R.js} +1 -1
  516. package/dist/{storage-B-gK537W.js.map → storage-BUlr2J4R.js.map} +1 -1
  517. package/dist/styles/layout.css +18 -18
  518. package/dist/styles/sidebar.css +31 -19
  519. package/dist/styles/tenant-ui.css +34 -34
  520. package/dist/styles/theme-engine.css +546 -23
  521. package/dist/styles/theme.css +1 -0
  522. package/dist/styles/tokens.css +69 -34
  523. package/dist/styles/ui.css +5 -5
  524. package/dist/{switch-CoTkNGEB.js → switch-Dcd3Fyw_.js} +7 -7
  525. package/dist/{switch-CoTkNGEB.js.map → switch-Dcd3Fyw_.js.map} +1 -1
  526. package/dist/{tabs-BT2WAQcK.js → tabs-8AT2ntg_.js} +8 -8
  527. package/dist/{tabs-BT2WAQcK.js.map → tabs-8AT2ntg_.js.map} +1 -1
  528. package/dist/theme-studio-CN9Ipb9W.js +236 -0
  529. package/dist/theme-studio-CN9Ipb9W.js.map +1 -0
  530. package/dist/{theme-toggle-Csyj-tLm.js → theme-toggle-glKWbKG8.js} +2 -2
  531. package/dist/{theme-toggle-Csyj-tLm.js.map → theme-toggle-glKWbKG8.js.map} +1 -1
  532. package/dist/{timeline-definition-YZTLITO2-B0SegHNN.js → timeline-definition-YZTLITO2-CjxxCuOg.js} +5 -5
  533. package/dist/{timeline-definition-YZTLITO2-B0SegHNN.js.map → timeline-definition-YZTLITO2-CjxxCuOg.js.map} +1 -1
  534. package/dist/{toast-DRNPdj-R.js → toast-CawTm-7V.js} +6 -6
  535. package/dist/{toast-DRNPdj-R.js.map → toast-CawTm-7V.js.map} +1 -1
  536. package/dist/{toggle-DJJEPXXE.js → toggle-C8sazHXX.js} +7 -7
  537. package/dist/{toggle-DJJEPXXE.js.map → toggle-C8sazHXX.js.map} +1 -1
  538. package/dist/{toggle-D-WMiAg3.js → toggle-IUUynh_v.js} +1 -1
  539. package/dist/{toggle-D-WMiAg3.js.map → toggle-IUUynh_v.js.map} +1 -1
  540. package/dist/{tooltip-DuC73a5E.js → tooltip-NKOSxS28.js} +11 -11
  541. package/dist/{tooltip-DuC73a5E.js.map → tooltip-NKOSxS28.js.map} +1 -1
  542. package/dist/{topology-C4Q_kT9X.js → topology-C8cyIHlB.js} +5 -5
  543. package/dist/{topology-C4Q_kT9X.js.map → topology-C8cyIHlB.js.map} +1 -1
  544. package/dist/treemap-KZPCXAKY-BvLvHb2t.js +3 -0
  545. package/dist/{triangle-alert-CKjGAvtd.js → triangle-alert-BtwDDOUp.js} +2 -2
  546. package/dist/{triangle-alert-CKjGAvtd.js.map → triangle-alert-BtwDDOUp.js.map} +1 -1
  547. package/dist/types/confidence.d.ts +66 -0
  548. package/dist/types/confidence.d.ts.map +1 -0
  549. package/dist/types/index.d.ts +2 -0
  550. package/dist/types/index.d.ts.map +1 -0
  551. package/dist/utils/index.d.ts +3 -0
  552. package/dist/utils/index.d.ts.map +1 -1
  553. package/dist/utils/index.js +6 -6
  554. package/dist/utils/sage-analysis.d.ts +51 -0
  555. package/dist/utils/sage-analysis.d.ts.map +1 -0
  556. package/dist/utils/score.d.ts +58 -0
  557. package/dist/utils/score.d.ts.map +1 -0
  558. package/dist/utils/status-tone.d.ts +4 -0
  559. package/dist/utils/status-tone.d.ts.map +1 -0
  560. package/dist/{utils-B7XIe3qq.js → utils-DcOSDVkb.js} +1 -1
  561. package/dist/{utils-B7XIe3qq.js.map → utils-DcOSDVkb.js.map} +1 -1
  562. package/dist/{utils-CHEq9Vpx.js → utils-JB2cYPor.js} +120 -2
  563. package/dist/utils-JB2cYPor.js.map +1 -0
  564. package/dist/{value-CybtvyUg.js → value-gSPnIECy.js} +2 -2
  565. package/dist/{value-CybtvyUg.js.map → value-gSPnIECy.js.map} +1 -1
  566. package/dist/{vennDiagram-LZ73GAT5-ClN0stHq.js → vennDiagram-LZ73GAT5-FqpGoq2s.js} +7 -7
  567. package/dist/{vennDiagram-LZ73GAT5-ClN0stHq.js.map → vennDiagram-LZ73GAT5-FqpGoq2s.js.map} +1 -1
  568. package/dist/visualization/mermaid-diagram/index.js +1 -1
  569. package/dist/{x-BleQvk5v.js → x-D2ovnRiN.js} +2 -2
  570. package/dist/{x-BleQvk5v.js.map → x-D2ovnRiN.js.map} +1 -1
  571. package/dist/{xychartDiagram-JWTSCODW-DjFaG2VD.js → xychartDiagram-JWTSCODW-BNEAK79X.js} +10 -10
  572. package/dist/{xychartDiagram-JWTSCODW-DjFaG2VD.js.map → xychartDiagram-JWTSCODW-BNEAK79X.js.map} +1 -1
  573. package/package.json +1 -1
  574. package/src/components/theme/accent-switcher.ts +9 -2
  575. package/src/components/theme/density-switcher.ts +7 -1
  576. package/src/components/theme/font-stack-picker.ts +7 -1
  577. package/src/components/theme/glass-slider.ts +19 -8
  578. package/src/components/theme/icon-gallery-browser.ts +191 -0
  579. package/src/components/theme/icon-set-picker.ts +19 -8
  580. package/src/components/theme/icon-usage-matrix.ts +15 -1
  581. package/src/components/theme/radius-slider.ts +14 -6
  582. package/src/components/theme/theme-preset-grid.ts +8 -2
  583. package/src/components/theme/theme-preview-tile.ts +11 -3
  584. package/src/components/theme/theme-studio-review.test.ts +253 -0
  585. package/src/components/theme/theme-studio.ts +100 -61
  586. package/src/components/theme/theme-switcher.ts +7 -1
  587. package/src/index.ts +11 -0
  588. package/src/react/layout/browser-layout.tsx +54 -0
  589. package/src/react/layout/detail-header.tsx +42 -0
  590. package/src/react/layout/index.ts +4 -0
  591. package/src/react/layout/page-frame.tsx +32 -0
  592. package/src/react/layout/sub-nav.tsx +72 -0
  593. package/src/react/primitives/chart-frame.tsx +51 -0
  594. package/src/react/primitives/chat-drawer.tsx +94 -0
  595. package/src/react/primitives/chat-input.tsx +134 -0
  596. package/src/react/primitives/dashboard-metric-card.tsx +78 -0
  597. package/src/react/primitives/data-field.tsx +54 -0
  598. package/src/react/primitives/index.ts +13 -0
  599. package/src/react/primitives/notification-center.tsx +3 -3
  600. package/src/react/primitives/query-boundary.tsx +71 -0
  601. package/src/react/primitives/score-ring.tsx +78 -0
  602. package/src/react/primitives/section-panel.tsx +42 -0
  603. package/src/security/index.ts +4 -0
  604. package/src/security/mitre-data.ts +60 -0
  605. package/src/services/theme-engine/engine.test.ts +3 -25
  606. package/src/services/theme-engine/engine.ts +35 -9
  607. package/src/services/theme-engine/fonts.ts +4 -0
  608. package/src/services/theme-engine/icons.ts +76 -9
  609. package/src/services/theme-engine/palettes.ts +2 -2
  610. package/src/services/theme-engine/test-helpers.ts +37 -0
  611. package/src/styles/layout.css +18 -18
  612. package/src/styles/sidebar.css +31 -19
  613. package/src/styles/tenant-ui.css +34 -34
  614. package/src/styles/theme-engine.css +546 -23
  615. package/src/styles/theme.css +1 -0
  616. package/src/styles/tokens.css +69 -34
  617. package/src/styles/ui.css +5 -5
  618. package/src/types/confidence.ts +72 -0
  619. package/src/types/index.ts +9 -0
  620. package/src/utils/__tests__/sage-analysis.test.ts +41 -0
  621. package/src/utils/__tests__/score.test.ts +232 -0
  622. package/src/utils/__tests__/status-tone.test.ts +164 -0
  623. package/src/utils/index.ts +29 -0
  624. package/src/utils/sage-analysis.ts +62 -0
  625. package/src/utils/score.ts +123 -0
  626. package/src/utils/status-tone.ts +48 -0
  627. package/dist/architecture-PBZL5I3N-gCfUhEfQ.js +0 -3
  628. package/dist/classDiagram-VBA2DB6C-DFfohpM0.js +0 -31
  629. package/dist/classDiagram-v2-RAHNMMFH-kUMm28FB.js +0 -31
  630. package/dist/components/theme/theme-studio.js.map +0 -1
  631. package/dist/dist-DGayZ3ok2.js.map +0 -1
  632. package/dist/gitGraph-HDMCJU4V--53HTu2M.js +0 -3
  633. package/dist/info-3K5VOQVL-CmVeZuiG.js +0 -3
  634. package/dist/packet-RMMSAZCW-jFj7IW8A.js +0 -3
  635. package/dist/pie-UPGHQEXC-osqmeuax.js +0 -3
  636. package/dist/radar-KQ55EAFF-Dj2g5Z-W.js +0 -3
  637. package/dist/stateDiagram-v2-FVOUBMTO-Cnp2uGxd.js +0 -29
  638. package/dist/treemap-KZPCXAKY-DQ1GEudW.js +0 -3
  639. package/dist/utils-CHEq9Vpx.js.map +0 -1
@@ -1,34 +1,39 @@
1
1
  import { CM_ICON_PATHS as e, ICON_SETS as t, getTheme as n, setThemePartial as r } from "../../services/theme-engine/index.js";
2
2
  //#region src/components/theme/icon-set-picker.ts
3
- var i = {
3
+ function i(e, t) {
4
+ for (let n of t.split(/(?=M)/g)) {
5
+ let t = n.trim();
6
+ if (!t) continue;
7
+ let r = document.createElementNS("http://www.w3.org/2000/svg", "path");
8
+ r.setAttribute("d", t), e.appendChild(r);
9
+ }
10
+ }
11
+ var a = {
4
12
  Search: "M11 11m-7 0a7 7 0 1 0 14 0 7 7 0 1 0-14 0 M21 21l-4.35-4.35",
5
13
  Shield: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",
6
14
  Settings: "M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9c.06.55.39 1.04.86 1.34"
7
15
  };
8
- function a(t, n) {
16
+ function o(t, n) {
9
17
  let r = document.createElementNS("http://www.w3.org/2000/svg", "svg");
10
- r.setAttribute("viewBox", `0 0 ${24 * n.length + 8} 24`), r.setAttribute("width", String(24 * n.length + 8)), r.setAttribute("height", "24"), r.setAttribute("class", "theme-studio-icon-tile__row");
11
- for (let a = 0; a < n.length; a++) {
12
- let o = n[a];
13
- if (!o) continue;
14
- let s = t.brand && e[o] ? e[o] : i[o] ?? "";
18
+ r.setAttribute("viewBox", `0 0 ${24 * n.length + 8} 24`), r.setAttribute("width", String(24 * n.length + 8)), r.setAttribute("height", "24"), r.setAttribute("class", "theme-studio-icon-tile__row"), r.setAttribute("aria-hidden", "true");
19
+ for (let o = 0; o < n.length; o++) {
20
+ let s = n[o];
15
21
  if (!s) continue;
16
- let c = document.createElementNS("http://www.w3.org/2000/svg", "g");
17
- c.setAttribute("transform", `translate(${a * 28},0)`), c.setAttribute("fill", "none"), c.setAttribute("stroke", "currentColor"), c.setAttribute("stroke-width", String(t.strokeWidth)), c.setAttribute("stroke-linecap", t.linecap), c.setAttribute("stroke-linejoin", t.linejoin);
18
- for (let e of s.split(/(?=M)/g)) {
19
- let t = e.trim();
20
- if (!t) continue;
21
- let n = document.createElementNS("http://www.w3.org/2000/svg", "path");
22
- n.setAttribute("d", t), c.appendChild(n);
23
- }
24
- r.appendChild(c);
22
+ let c = t.brand && e[s] ? e[s] : a[s] ?? "";
23
+ if (!c) continue;
24
+ let l = document.createElementNS("http://www.w3.org/2000/svg", "g");
25
+ l.setAttribute("transform", `translate(${o * 28},0)`), l.setAttribute("fill", "none"), l.setAttribute("stroke", "currentColor"), l.setAttribute("stroke-width", String(t.strokeWidth)), l.setAttribute("stroke-linecap", t.linecap), l.setAttribute("stroke-linejoin", t.linejoin), i(l, c), r.appendChild(l);
25
26
  }
26
27
  return r;
27
28
  }
28
- var o = class {
29
+ var s = class {
29
30
  el;
31
+ _onThemeChange = () => this.updateActive();
30
32
  constructor() {
31
- this.el = document.createElement("div"), this.el.className = "theme-studio-iconsets", this.render(), document.addEventListener("cm:theme-change", () => this.updateActive());
33
+ this.el = document.createElement("div"), this.el.className = "theme-studio-iconsets", this.render(), document.addEventListener("cm:theme-change", this._onThemeChange);
34
+ }
35
+ destroy() {
36
+ document.removeEventListener("cm:theme-change", this._onThemeChange);
32
37
  }
33
38
  render() {
34
39
  this.el.innerHTML = "";
@@ -38,14 +43,14 @@ var o = class {
38
43
  "Settings"
39
44
  ];
40
45
  for (let n of Object.keys(t)) {
41
- let o = t[n], s = document.createElement("button");
42
- s.type = "button", s.className = "theme-studio-icon-tile", s.dataset.iconSet = n, n === e && s.classList.add("is-active"), s.setAttribute("aria-pressed", String(n === e)), s.setAttribute("aria-label", `Use ${o.label} icon set`);
46
+ let a = t[n], s = document.createElement("button");
47
+ s.type = "button", s.className = "theme-studio-icon-tile", s.dataset.iconSet = n, n === e && s.classList.add("is-active"), s.setAttribute("aria-pressed", String(n === e)), s.setAttribute("aria-label", `Use ${a.label} icon set`);
43
48
  let c = document.createElement("div");
44
- c.className = "theme-studio-icon-tile__preview", c.appendChild(a(o, i)), s.appendChild(c);
49
+ c.className = "theme-studio-icon-tile__preview", c.appendChild(o(a, i)), s.appendChild(c);
45
50
  let l = document.createElement("div");
46
- l.className = "theme-studio-icon-tile__name", l.textContent = o.label, s.appendChild(l);
51
+ l.className = "theme-studio-icon-tile__name", l.textContent = a.label, s.appendChild(l);
47
52
  let u = document.createElement("div");
48
- if (u.className = "theme-studio-icon-tile__desc", u.textContent = o.description, s.appendChild(u), o.brand) {
53
+ if (u.className = "theme-studio-icon-tile__desc", u.textContent = a.description, s.appendChild(u), a.brand) {
49
54
  let e = document.createElement("span");
50
55
  e.className = "theme-studio-icon-tile__badge", e.textContent = "Brand", s.appendChild(e);
51
56
  }
@@ -61,6 +66,6 @@ var o = class {
61
66
  }
62
67
  };
63
68
  //#endregion
64
- export { o as IconSetPicker };
69
+ export { s as IconSetPicker };
65
70
 
66
71
  //# sourceMappingURL=icon-set-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon-set-picker.js","names":[],"sources":["../../../src/components/theme/icon-set-picker.ts"],"sourcesContent":["/**\n * Icon Set Picker — 5 icon-style tiles.\n *\n * Each tile renders a small icon row in the set's stroke style so users can\n * see how icons will look. The 'countermeasure' tile gets a Brand badge.\n */\n\nimport { CM_ICON_PATHS, ICON_SETS, getTheme, setThemePartial } from '../../services/theme-engine'\nimport type { IconSet, IconSetId } from '../../services/theme-engine'\n\nconst PREVIEW_ICON_PATHS: Record<string, string> = {\n Search: 'M11 11m-7 0a7 7 0 1 0 14 0 7 7 0 1 0-14 0 M21 21l-4.35-4.35',\n Shield: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z',\n Settings:\n 'M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9c.06.55.39 1.04.86 1.34',\n}\n\nfunction buildIconRow(set: IconSet, names: ReadonlyArray<string>): SVGElement {\n const wrap = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n wrap.setAttribute('viewBox', `0 0 ${24 * names.length + 8} 24`)\n wrap.setAttribute('width', String(24 * names.length + 8))\n wrap.setAttribute('height', '24')\n wrap.setAttribute('class', 'theme-studio-icon-tile__row')\n\n for (let i = 0; i < names.length; i++) {\n const name = names[i]\n if (!name) continue\n const useBrand = set.brand && CM_ICON_PATHS[name]\n const raw = useBrand ? CM_ICON_PATHS[name]! : (PREVIEW_ICON_PATHS[name] ?? '')\n if (!raw) continue\n const g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n g.setAttribute('transform', `translate(${i * 28},0)`)\n g.setAttribute('fill', 'none')\n g.setAttribute('stroke', 'currentColor')\n g.setAttribute('stroke-width', String(set.strokeWidth))\n g.setAttribute('stroke-linecap', set.linecap)\n g.setAttribute('stroke-linejoin', set.linejoin)\n\n for (const segment of raw.split(/(?=M)/g)) {\n const trimmed = segment.trim()\n if (!trimmed) continue\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n path.setAttribute('d', trimmed)\n g.appendChild(path)\n }\n wrap.appendChild(g)\n }\n return wrap\n}\n\nexport class IconSetPicker {\n public readonly el: HTMLElement\n\n constructor() {\n this.el = document.createElement('div')\n this.el.className = 'theme-studio-iconsets'\n this.render()\n document.addEventListener('cm:theme-change', () => this.updateActive())\n }\n\n private render(): void {\n this.el.innerHTML = ''\n const current = getTheme().iconSet\n const names = ['Search', 'Shield', 'Settings'] as const\n\n for (const id of Object.keys(ICON_SETS) as IconSetId[]) {\n const set = ICON_SETS[id]\n const tile = document.createElement('button')\n tile.type = 'button'\n tile.className = 'theme-studio-icon-tile'\n tile.dataset.iconSet = id\n if (id === current) tile.classList.add('is-active')\n tile.setAttribute('aria-pressed', String(id === current))\n tile.setAttribute('aria-label', `Use ${set.label} icon set`)\n\n const preview = document.createElement('div')\n preview.className = 'theme-studio-icon-tile__preview'\n preview.appendChild(buildIconRow(set, names))\n tile.appendChild(preview)\n\n const name = document.createElement('div')\n name.className = 'theme-studio-icon-tile__name'\n name.textContent = set.label\n tile.appendChild(name)\n\n const desc = document.createElement('div')\n desc.className = 'theme-studio-icon-tile__desc'\n desc.textContent = set.description\n tile.appendChild(desc)\n\n if (set.brand) {\n const badge = document.createElement('span')\n badge.className = 'theme-studio-icon-tile__badge'\n badge.textContent = 'Brand'\n tile.appendChild(badge)\n }\n\n tile.addEventListener('click', () => setThemePartial({ iconSet: id }))\n this.el.appendChild(tile)\n }\n }\n\n private updateActive(): void {\n const current = getTheme().iconSet\n const tiles = this.el.querySelectorAll<HTMLButtonElement>('.theme-studio-icon-tile')\n for (const tile of tiles) {\n const isActive = tile.dataset.iconSet === current\n tile.classList.toggle('is-active', isActive)\n tile.setAttribute('aria-pressed', String(isActive))\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"icon-set-picker.js","names":[],"sources":["../../../src/components/theme/icon-set-picker.ts"],"sourcesContent":["/**\n * Icon Set Picker — 5 icon-style tiles.\n *\n * Each tile renders a small icon row in the set's stroke style so users can\n * see how icons will look. The 'countermeasure' tile gets a Brand badge.\n */\n\nimport { CM_ICON_PATHS, ICON_SETS, getTheme, setThemePartial } from '../../services/theme-engine'\nimport type { IconSet, IconSetId } from '../../services/theme-engine'\n\n/** Split an SVG path-data string on `M` commands and append each as a child `<path>`. */\nfunction appendSvgPaths(parent: SVGElement, pathData: string): void {\n for (const segment of pathData.split(/(?=M)/g)) {\n const trimmed = segment.trim()\n if (!trimmed) continue\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n path.setAttribute('d', trimmed)\n parent.appendChild(path)\n }\n}\n\nconst PREVIEW_ICON_PATHS: Record<string, string> = {\n Search: 'M11 11m-7 0a7 7 0 1 0 14 0 7 7 0 1 0-14 0 M21 21l-4.35-4.35',\n Shield: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z',\n Settings:\n 'M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9c.06.55.39 1.04.86 1.34',\n}\n\nfunction buildIconRow(set: IconSet, names: ReadonlyArray<string>): SVGElement {\n const wrap = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n wrap.setAttribute('viewBox', `0 0 ${24 * names.length + 8} 24`)\n wrap.setAttribute('width', String(24 * names.length + 8))\n wrap.setAttribute('height', '24')\n wrap.setAttribute('class', 'theme-studio-icon-tile__row')\n wrap.setAttribute('aria-hidden', 'true')\n\n for (let i = 0; i < names.length; i++) {\n const name = names[i]\n if (!name) continue\n const useBrand = set.brand && CM_ICON_PATHS[name]\n const raw = useBrand ? CM_ICON_PATHS[name]! : (PREVIEW_ICON_PATHS[name] ?? '')\n if (!raw) continue\n const g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n g.setAttribute('transform', `translate(${i * 28},0)`)\n g.setAttribute('fill', 'none')\n g.setAttribute('stroke', 'currentColor')\n g.setAttribute('stroke-width', String(set.strokeWidth))\n g.setAttribute('stroke-linecap', set.linecap)\n g.setAttribute('stroke-linejoin', set.linejoin)\n\n appendSvgPaths(g, raw)\n wrap.appendChild(g)\n }\n return wrap\n}\n\nexport class IconSetPicker {\n public readonly el: HTMLElement\n private _onThemeChange = () => this.updateActive()\n\n constructor() {\n this.el = document.createElement('div')\n this.el.className = 'theme-studio-iconsets'\n this.render()\n document.addEventListener('cm:theme-change', this._onThemeChange)\n }\n\n destroy(): void {\n document.removeEventListener('cm:theme-change', this._onThemeChange)\n }\n\n private render(): void {\n this.el.innerHTML = ''\n const current = getTheme().iconSet\n const names = ['Search', 'Shield', 'Settings'] as const\n\n for (const id of Object.keys(ICON_SETS) as IconSetId[]) {\n const set = ICON_SETS[id]\n const tile = document.createElement('button')\n tile.type = 'button'\n tile.className = 'theme-studio-icon-tile'\n tile.dataset.iconSet = id\n if (id === current) tile.classList.add('is-active')\n tile.setAttribute('aria-pressed', String(id === current))\n tile.setAttribute('aria-label', `Use ${set.label} icon set`)\n\n const preview = document.createElement('div')\n preview.className = 'theme-studio-icon-tile__preview'\n preview.appendChild(buildIconRow(set, names))\n tile.appendChild(preview)\n\n const name = document.createElement('div')\n name.className = 'theme-studio-icon-tile__name'\n name.textContent = set.label\n tile.appendChild(name)\n\n const desc = document.createElement('div')\n desc.className = 'theme-studio-icon-tile__desc'\n desc.textContent = set.description\n tile.appendChild(desc)\n\n if (set.brand) {\n const badge = document.createElement('span')\n badge.className = 'theme-studio-icon-tile__badge'\n badge.textContent = 'Brand'\n tile.appendChild(badge)\n }\n\n tile.addEventListener('click', () => setThemePartial({ iconSet: id }))\n this.el.appendChild(tile)\n }\n }\n\n private updateActive(): void {\n const current = getTheme().iconSet\n const tiles = this.el.querySelectorAll<HTMLButtonElement>('.theme-studio-icon-tile')\n for (const tile of tiles) {\n const isActive = tile.dataset.iconSet === current\n tile.classList.toggle('is-active', isActive)\n tile.setAttribute('aria-pressed', String(isActive))\n }\n }\n}\n"],"mappings":"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"}
@@ -7,7 +7,9 @@
7
7
  */
8
8
  export declare class IconUsageMatrix {
9
9
  readonly el: HTMLElement;
10
+ private readonly _onThemeChange;
10
11
  constructor();
12
+ destroy(): void;
11
13
  private currentIcon;
12
14
  private cycle;
13
15
  private reset;
@@ -1 +1 @@
1
- {"version":3,"file":"icon-usage-matrix.d.ts","sourceRoot":"","sources":["../../../src/components/theme/icon-usage-matrix.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,qBAAa,eAAe;IAC1B,SAAgB,EAAE,EAAE,WAAW,CAAA;;IAS/B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,MAAM;IAuCd,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"icon-usage-matrix.d.ts","sourceRoot":"","sources":["../../../src/components/theme/icon-usage-matrix.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,qBAAa,eAAe;IAC1B,SAAgB,EAAE,EAAE,WAAW,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAY;;IAY3C,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,MAAM;IA6Cd,OAAO,CAAC,aAAa;CAUtB"}
@@ -2,8 +2,12 @@ import { ICON_USAGES as e, getTheme as t, setThemePartial as n } from "../../ser
2
2
  //#region src/components/theme/icon-usage-matrix.ts
3
3
  var r = class {
4
4
  el;
5
+ _onThemeChange;
5
6
  constructor() {
6
- this.el = document.createElement("div"), this.el.className = "theme-studio-icon-matrix", this.render(), document.addEventListener("cm:theme-change", () => this.refreshLabels());
7
+ this.el = document.createElement("div"), this.el.className = "theme-studio-icon-matrix", this.el.setAttribute("role", "table"), this.el.setAttribute("aria-label", "Per-icon mapping"), this.render(), this._onThemeChange = () => this.refreshLabels(), document.addEventListener("cm:theme-change", this._onThemeChange);
8
+ }
9
+ destroy() {
10
+ document.removeEventListener("cm:theme-change", this._onThemeChange);
7
11
  }
8
12
  currentIcon(e) {
9
13
  return (t().iconOverrides ?? {})[e.id] ?? e.defaultIcon;
@@ -20,17 +24,17 @@ var r = class {
20
24
  this.el.innerHTML = "";
21
25
  for (let t of e) {
22
26
  let e = document.createElement("div");
23
- e.className = "theme-studio-icon-matrix__row", e.dataset.slot = t.id;
27
+ e.className = "theme-studio-icon-matrix__row", e.dataset.slot = t.id, e.setAttribute("role", "row");
24
28
  let n = document.createElement("div");
25
- n.className = "theme-studio-icon-matrix__label", n.textContent = t.label, e.appendChild(n);
29
+ n.className = "theme-studio-icon-matrix__label", n.textContent = t.label, n.setAttribute("role", "cell"), e.appendChild(n);
26
30
  let r = document.createElement("code");
27
- r.className = "theme-studio-icon-matrix__icon", r.textContent = this.currentIcon(t), e.appendChild(r);
31
+ r.className = "theme-studio-icon-matrix__icon", r.textContent = this.currentIcon(t), r.setAttribute("role", "cell"), e.appendChild(r);
28
32
  let i = document.createElement("div");
29
- i.className = "theme-studio-icon-matrix__actions";
33
+ i.className = "theme-studio-icon-matrix__actions", i.setAttribute("role", "cell");
30
34
  let a = document.createElement("button");
31
- a.type = "button", a.className = "theme-studio-icon-matrix__change", a.textContent = "Change", a.addEventListener("click", () => this.cycle(t)), i.appendChild(a);
35
+ a.type = "button", a.className = "theme-studio-icon-matrix__change", a.textContent = "Change", a.setAttribute("aria-label", `Cycle icon for ${t.label}`), a.addEventListener("click", () => this.cycle(t)), i.appendChild(a);
32
36
  let o = document.createElement("button");
33
- o.type = "button", o.className = "theme-studio-icon-matrix__reset", o.textContent = "Reset", o.addEventListener("click", () => this.reset(t)), i.appendChild(o), e.appendChild(i), this.el.appendChild(e);
37
+ o.type = "button", o.className = "theme-studio-icon-matrix__reset", o.textContent = "Reset", o.setAttribute("aria-label", `Reset ${t.label} icon to default`), o.addEventListener("click", () => this.reset(t)), i.appendChild(o), e.appendChild(i), this.el.appendChild(e);
34
38
  }
35
39
  }
36
40
  refreshLabels() {
@@ -1 +1 @@
1
- {"version":3,"file":"icon-usage-matrix.js","names":[],"sources":["../../../src/components/theme/icon-usage-matrix.ts"],"sourcesContent":["/**\n * Icon Usage Matrix — 16 semantic-slot rows.\n *\n * Renders the slots from `ICON_USAGES`. Each row shows the slot's label and\n * its current binding; clicking \"Change\" cycles through the slot's alternates.\n * Persists into `theme.iconOverrides`.\n */\n\nimport { ICON_USAGES, getTheme, setThemePartial } from '../../services/theme-engine'\nimport type { IconUsage } from '../../services/theme-engine'\n\nexport class IconUsageMatrix {\n public readonly el: HTMLElement\n\n constructor() {\n this.el = document.createElement('div')\n this.el.className = 'theme-studio-icon-matrix'\n this.render()\n document.addEventListener('cm:theme-change', () => this.refreshLabels())\n }\n\n private currentIcon(usage: IconUsage): string {\n const overrides = getTheme().iconOverrides ?? {}\n return overrides[usage.id] ?? usage.defaultIcon\n }\n\n private cycle(usage: IconUsage): void {\n const current = this.currentIcon(usage)\n const list = usage.alternates.length > 0 ? usage.alternates : [usage.defaultIcon]\n const idx = list.indexOf(current)\n const next = list[(idx + 1) % list.length] ?? usage.defaultIcon\n const overrides = { ...(getTheme().iconOverrides ?? {}) }\n if (next === usage.defaultIcon) {\n delete overrides[usage.id]\n } else {\n overrides[usage.id] = next\n }\n setThemePartial({ iconOverrides: overrides })\n }\n\n private reset(usage: IconUsage): void {\n const overrides = { ...(getTheme().iconOverrides ?? {}) }\n delete overrides[usage.id]\n setThemePartial({ iconOverrides: overrides })\n }\n\n private render(): void {\n this.el.innerHTML = ''\n for (const usage of ICON_USAGES) {\n const row = document.createElement('div')\n row.className = 'theme-studio-icon-matrix__row'\n row.dataset.slot = usage.id\n\n const label = document.createElement('div')\n label.className = 'theme-studio-icon-matrix__label'\n label.textContent = usage.label\n row.appendChild(label)\n\n const value = document.createElement('code')\n value.className = 'theme-studio-icon-matrix__icon'\n value.textContent = this.currentIcon(usage)\n row.appendChild(value)\n\n const actions = document.createElement('div')\n actions.className = 'theme-studio-icon-matrix__actions'\n\n const change = document.createElement('button')\n change.type = 'button'\n change.className = 'theme-studio-icon-matrix__change'\n change.textContent = 'Change'\n change.addEventListener('click', () => this.cycle(usage))\n actions.appendChild(change)\n\n const reset = document.createElement('button')\n reset.type = 'button'\n reset.className = 'theme-studio-icon-matrix__reset'\n reset.textContent = 'Reset'\n reset.addEventListener('click', () => this.reset(usage))\n actions.appendChild(reset)\n\n row.appendChild(actions)\n this.el.appendChild(row)\n }\n }\n\n private refreshLabels(): void {\n const rows = this.el.querySelectorAll<HTMLElement>('.theme-studio-icon-matrix__row')\n for (const row of rows) {\n const slotId = row.dataset.slot\n const usage = ICON_USAGES.find(u => u.id === slotId)\n if (!usage) continue\n const code = row.querySelector<HTMLElement>('.theme-studio-icon-matrix__icon')\n if (code) code.textContent = this.currentIcon(usage)\n }\n }\n}\n"],"mappings":";;AAWA,IAAa,IAAb,MAA6B;CAC3B;CAEA,cAAc;AAIZ,EAHA,KAAK,KAAK,SAAS,cAAc,MAAM,EACvC,KAAK,GAAG,YAAY,4BACpB,KAAK,QAAQ,EACb,SAAS,iBAAiB,yBAAyB,KAAK,eAAe,CAAC;;CAG1E,YAAoB,GAA0B;AAE5C,UADkB,GAAU,CAAC,iBAAiB,EAAE,EAC/B,EAAM,OAAO,EAAM;;CAGtC,MAAc,GAAwB;EACpC,IAAM,IAAU,KAAK,YAAY,EAAM,EACjC,IAAO,EAAM,WAAW,SAAS,IAAI,EAAM,aAAa,CAAC,EAAM,YAAY,EAE3E,IAAO,GADD,EAAK,QAAQ,EAAQ,GACR,KAAK,EAAK,WAAW,EAAM,aAC9C,IAAY,EAAE,GAAI,GAAU,CAAC,iBAAiB,EAAE,EAAG;AAMzD,EALI,MAAS,EAAM,cACjB,OAAO,EAAU,EAAM,MAEvB,EAAU,EAAM,MAAM,GAExB,EAAgB,EAAE,eAAe,GAAW,CAAC;;CAG/C,MAAc,GAAwB;EACpC,IAAM,IAAY,EAAE,GAAI,GAAU,CAAC,iBAAiB,EAAE,EAAG;AAEzD,EADA,OAAO,EAAU,EAAM,KACvB,EAAgB,EAAE,eAAe,GAAW,CAAC;;CAG/C,SAAuB;AACrB,OAAK,GAAG,YAAY;AACpB,OAAK,IAAM,KAAS,GAAa;GAC/B,IAAM,IAAM,SAAS,cAAc,MAAM;AAEzC,GADA,EAAI,YAAY,iCAChB,EAAI,QAAQ,OAAO,EAAM;GAEzB,IAAM,IAAQ,SAAS,cAAc,MAAM;AAG3C,GAFA,EAAM,YAAY,mCAClB,EAAM,cAAc,EAAM,OAC1B,EAAI,YAAY,EAAM;GAEtB,IAAM,IAAQ,SAAS,cAAc,OAAO;AAG5C,GAFA,EAAM,YAAY,kCAClB,EAAM,cAAc,KAAK,YAAY,EAAM,EAC3C,EAAI,YAAY,EAAM;GAEtB,IAAM,IAAU,SAAS,cAAc,MAAM;AAC7C,KAAQ,YAAY;GAEpB,IAAM,IAAS,SAAS,cAAc,SAAS;AAK/C,GAJA,EAAO,OAAO,UACd,EAAO,YAAY,oCACnB,EAAO,cAAc,UACrB,EAAO,iBAAiB,eAAe,KAAK,MAAM,EAAM,CAAC,EACzD,EAAQ,YAAY,EAAO;GAE3B,IAAM,IAAQ,SAAS,cAAc,SAAS;AAQ9C,GAPA,EAAM,OAAO,UACb,EAAM,YAAY,mCAClB,EAAM,cAAc,SACpB,EAAM,iBAAiB,eAAe,KAAK,MAAM,EAAM,CAAC,EACxD,EAAQ,YAAY,EAAM,EAE1B,EAAI,YAAY,EAAQ,EACxB,KAAK,GAAG,YAAY,EAAI;;;CAI5B,gBAA8B;EAC5B,IAAM,IAAO,KAAK,GAAG,iBAA8B,iCAAiC;AACpF,OAAK,IAAM,KAAO,GAAM;GACtB,IAAM,IAAS,EAAI,QAAQ,MACrB,IAAQ,EAAY,MAAK,MAAK,EAAE,OAAO,EAAO;AACpD,OAAI,CAAC,EAAO;GACZ,IAAM,IAAO,EAAI,cAA2B,kCAAkC;AAC9E,GAAI,MAAM,EAAK,cAAc,KAAK,YAAY,EAAM"}
1
+ {"version":3,"file":"icon-usage-matrix.js","names":[],"sources":["../../../src/components/theme/icon-usage-matrix.ts"],"sourcesContent":["/**\n * Icon Usage Matrix — 16 semantic-slot rows.\n *\n * Renders the slots from `ICON_USAGES`. Each row shows the slot's label and\n * its current binding; clicking \"Change\" cycles through the slot's alternates.\n * Persists into `theme.iconOverrides`.\n */\n\nimport { ICON_USAGES, getTheme, setThemePartial } from '../../services/theme-engine'\nimport type { IconUsage } from '../../services/theme-engine'\n\nexport class IconUsageMatrix {\n public readonly el: HTMLElement\n private readonly _onThemeChange: () => void\n\n constructor() {\n this.el = document.createElement('div')\n this.el.className = 'theme-studio-icon-matrix'\n this.el.setAttribute('role', 'table')\n this.el.setAttribute('aria-label', 'Per-icon mapping')\n this.render()\n this._onThemeChange = () => this.refreshLabels()\n document.addEventListener('cm:theme-change', this._onThemeChange)\n }\n\n destroy(): void {\n document.removeEventListener('cm:theme-change', this._onThemeChange)\n }\n\n private currentIcon(usage: IconUsage): string {\n const overrides = getTheme().iconOverrides ?? {}\n return overrides[usage.id] ?? usage.defaultIcon\n }\n\n private cycle(usage: IconUsage): void {\n const current = this.currentIcon(usage)\n const list = usage.alternates.length > 0 ? usage.alternates : [usage.defaultIcon]\n const idx = list.indexOf(current)\n const next = list[(idx + 1) % list.length] ?? usage.defaultIcon\n const overrides = { ...(getTheme().iconOverrides ?? {}) }\n if (next === usage.defaultIcon) {\n delete overrides[usage.id]\n } else {\n overrides[usage.id] = next\n }\n setThemePartial({ iconOverrides: overrides })\n }\n\n private reset(usage: IconUsage): void {\n const overrides = { ...(getTheme().iconOverrides ?? {}) }\n delete overrides[usage.id]\n setThemePartial({ iconOverrides: overrides })\n }\n\n private render(): void {\n this.el.innerHTML = ''\n for (const usage of ICON_USAGES) {\n const row = document.createElement('div')\n row.className = 'theme-studio-icon-matrix__row'\n row.dataset.slot = usage.id\n row.setAttribute('role', 'row')\n\n const label = document.createElement('div')\n label.className = 'theme-studio-icon-matrix__label'\n label.textContent = usage.label\n label.setAttribute('role', 'cell')\n row.appendChild(label)\n\n const value = document.createElement('code')\n value.className = 'theme-studio-icon-matrix__icon'\n value.textContent = this.currentIcon(usage)\n value.setAttribute('role', 'cell')\n row.appendChild(value)\n\n const actions = document.createElement('div')\n actions.className = 'theme-studio-icon-matrix__actions'\n actions.setAttribute('role', 'cell')\n\n const change = document.createElement('button')\n change.type = 'button'\n change.className = 'theme-studio-icon-matrix__change'\n change.textContent = 'Change'\n change.setAttribute('aria-label', `Cycle icon for ${usage.label}`)\n change.addEventListener('click', () => this.cycle(usage))\n actions.appendChild(change)\n\n const reset = document.createElement('button')\n reset.type = 'button'\n reset.className = 'theme-studio-icon-matrix__reset'\n reset.textContent = 'Reset'\n reset.setAttribute('aria-label', `Reset ${usage.label} icon to default`)\n reset.addEventListener('click', () => this.reset(usage))\n actions.appendChild(reset)\n\n row.appendChild(actions)\n this.el.appendChild(row)\n }\n }\n\n private refreshLabels(): void {\n const rows = this.el.querySelectorAll<HTMLElement>('.theme-studio-icon-matrix__row')\n for (const row of rows) {\n const slotId = row.dataset.slot\n const usage = ICON_USAGES.find(u => u.id === slotId)\n if (!usage) continue\n const code = row.querySelector<HTMLElement>('.theme-studio-icon-matrix__icon')\n if (code) code.textContent = this.currentIcon(usage)\n }\n }\n}\n"],"mappings":";;AAWA,IAAa,IAAb,MAA6B;CAC3B;CACA;CAEA,cAAc;AAOZ,EANA,KAAK,KAAK,SAAS,cAAc,MAAM,EACvC,KAAK,GAAG,YAAY,4BACpB,KAAK,GAAG,aAAa,QAAQ,QAAQ,EACrC,KAAK,GAAG,aAAa,cAAc,mBAAmB,EACtD,KAAK,QAAQ,EACb,KAAK,uBAAuB,KAAK,eAAe,EAChD,SAAS,iBAAiB,mBAAmB,KAAK,eAAe;;CAGnE,UAAgB;AACd,WAAS,oBAAoB,mBAAmB,KAAK,eAAe;;CAGtE,YAAoB,GAA0B;AAE5C,UADkB,GAAU,CAAC,iBAAiB,EAAE,EAC/B,EAAM,OAAO,EAAM;;CAGtC,MAAc,GAAwB;EACpC,IAAM,IAAU,KAAK,YAAY,EAAM,EACjC,IAAO,EAAM,WAAW,SAAS,IAAI,EAAM,aAAa,CAAC,EAAM,YAAY,EAE3E,IAAO,GADD,EAAK,QAAQ,EAAQ,GACR,KAAK,EAAK,WAAW,EAAM,aAC9C,IAAY,EAAE,GAAI,GAAU,CAAC,iBAAiB,EAAE,EAAG;AAMzD,EALI,MAAS,EAAM,cACjB,OAAO,EAAU,EAAM,MAEvB,EAAU,EAAM,MAAM,GAExB,EAAgB,EAAE,eAAe,GAAW,CAAC;;CAG/C,MAAc,GAAwB;EACpC,IAAM,IAAY,EAAE,GAAI,GAAU,CAAC,iBAAiB,EAAE,EAAG;AAEzD,EADA,OAAO,EAAU,EAAM,KACvB,EAAgB,EAAE,eAAe,GAAW,CAAC;;CAG/C,SAAuB;AACrB,OAAK,GAAG,YAAY;AACpB,OAAK,IAAM,KAAS,GAAa;GAC/B,IAAM,IAAM,SAAS,cAAc,MAAM;AAGzC,GAFA,EAAI,YAAY,iCAChB,EAAI,QAAQ,OAAO,EAAM,IACzB,EAAI,aAAa,QAAQ,MAAM;GAE/B,IAAM,IAAQ,SAAS,cAAc,MAAM;AAI3C,GAHA,EAAM,YAAY,mCAClB,EAAM,cAAc,EAAM,OAC1B,EAAM,aAAa,QAAQ,OAAO,EAClC,EAAI,YAAY,EAAM;GAEtB,IAAM,IAAQ,SAAS,cAAc,OAAO;AAI5C,GAHA,EAAM,YAAY,kCAClB,EAAM,cAAc,KAAK,YAAY,EAAM,EAC3C,EAAM,aAAa,QAAQ,OAAO,EAClC,EAAI,YAAY,EAAM;GAEtB,IAAM,IAAU,SAAS,cAAc,MAAM;AAE7C,GADA,EAAQ,YAAY,qCACpB,EAAQ,aAAa,QAAQ,OAAO;GAEpC,IAAM,IAAS,SAAS,cAAc,SAAS;AAM/C,GALA,EAAO,OAAO,UACd,EAAO,YAAY,oCACnB,EAAO,cAAc,UACrB,EAAO,aAAa,cAAc,kBAAkB,EAAM,QAAQ,EAClE,EAAO,iBAAiB,eAAe,KAAK,MAAM,EAAM,CAAC,EACzD,EAAQ,YAAY,EAAO;GAE3B,IAAM,IAAQ,SAAS,cAAc,SAAS;AAS9C,GARA,EAAM,OAAO,UACb,EAAM,YAAY,mCAClB,EAAM,cAAc,SACpB,EAAM,aAAa,cAAc,SAAS,EAAM,MAAM,kBAAkB,EACxE,EAAM,iBAAiB,eAAe,KAAK,MAAM,EAAM,CAAC,EACxD,EAAQ,YAAY,EAAM,EAE1B,EAAI,YAAY,EAAQ,EACxB,KAAK,GAAG,YAAY,EAAI;;;CAI5B,gBAA8B;EAC5B,IAAM,IAAO,KAAK,GAAG,iBAA8B,iCAAiC;AACpF,OAAK,IAAM,KAAO,GAAM;GACtB,IAAM,IAAS,EAAI,QAAQ,MACrB,IAAQ,EAAY,MAAK,MAAK,EAAE,OAAO,EAAO;AACpD,OAAI,CAAC,EAAO;GACZ,IAAM,IAAO,EAAI,cAA2B,kCAAkC;AAC9E,GAAI,MAAM,EAAK,cAAc,KAAK,YAAY,EAAM"}
@@ -7,6 +7,6 @@ import { IconUsageMatrix as c } from "./icon-usage-matrix.js";
7
7
  import { RadiusSlider as l } from "./radius-slider.js";
8
8
  import { ThemePresetGrid as u } from "./theme-preset-grid.js";
9
9
  import { ThemePreviewTile as d } from "./theme-preview-tile.js";
10
- import { ThemeSwitcher as f } from "./theme-switcher.js";
11
- import { ThemeStudio as p, renderThemeStudio as m } from "./theme-studio.js";
12
- export { e as AccentSwitcher, i as DensitySwitcher, a as FontStackPicker, o as GlassSlider, s as IconSetPicker, c as IconUsageMatrix, l as RadiusSlider, u as ThemePresetGrid, d as ThemePreviewTile, p as ThemeStudio, f as ThemeSwitcher, t as applyAccentFromUrl, n as getCurrentAccent, m as renderThemeStudio, r as setPreviewAccent };
10
+ import { n as f, t as p } from "../../theme-studio-CN9Ipb9W.js";
11
+ import { ThemeSwitcher as m } from "./theme-switcher.js";
12
+ export { e as AccentSwitcher, i as DensitySwitcher, a as FontStackPicker, o as GlassSlider, s as IconSetPicker, c as IconUsageMatrix, l as RadiusSlider, u as ThemePresetGrid, d as ThemePreviewTile, p as ThemeStudio, m as ThemeSwitcher, t as applyAccentFromUrl, n as getCurrentAccent, f as renderThemeStudio, r as setPreviewAccent };
@@ -8,7 +8,9 @@ export declare class RadiusSlider {
8
8
  readonly el: HTMLElement;
9
9
  private readonly input;
10
10
  private readonly value;
11
+ private readonly _onThemeChange;
11
12
  constructor();
13
+ destroy(): void;
12
14
  private applySliderFill;
13
15
  }
14
16
  //# sourceMappingURL=radius-slider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"radius-slider.d.ts","sourceRoot":"","sources":["../../../src/components/theme/radius-slider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,qBAAa,YAAY;IACvB,SAAgB,EAAE,EAAE,WAAW,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;;IA8CvC,OAAO,CAAC,eAAe;CAIxB"}
1
+ {"version":3,"file":"radius-slider.d.ts","sourceRoot":"","sources":["../../../src/components/theme/radius-slider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,qBAAa,YAAY;IACvB,SAAgB,EAAE,EAAE,WAAW,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAY;;IAiD3C,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,eAAe;CAIxB"}
@@ -1,31 +1,36 @@
1
1
  import { getTheme as e, setThemePartial as t } from "../../services/theme-engine/index.js";
2
2
  //#region src/components/theme/radius-slider.ts
3
- var n = 0, r = 20, i = 1, a = class {
3
+ function n(e, t, n) {
4
+ return Math.max(t, Math.min(n, e));
5
+ }
6
+ var r = 0, i = 20, a = 1, o = class {
4
7
  el;
5
8
  input;
6
9
  value;
10
+ _onThemeChange;
7
11
  constructor() {
8
- let a = o(e().radius, n, r);
12
+ let o = n(e().radius, r, i);
9
13
  this.el = document.createElement("div"), this.el.className = "preview-radius-slider";
10
14
  let s = document.createElement("div");
11
15
  s.className = "preview-radius-slider__head";
12
16
  let c = document.createElement("span");
13
- c.className = "preview-radius-slider__label", c.textContent = "Corner radius", s.appendChild(c), this.value = document.createElement("span"), this.value.className = "preview-radius-slider__value", this.value.textContent = `${a}px`, s.appendChild(this.value), this.el.appendChild(s), this.input = document.createElement("input"), this.input.type = "range", this.input.min = String(n), this.input.max = String(r), this.input.step = String(i), this.input.value = String(a), this.input.className = "preview-radius-slider__input", this.input.setAttribute("aria-label", "Corner radius (px)"), this.el.appendChild(this.input), this.applySliderFill(a), this.input.addEventListener("input", () => {
14
- t({ radius: o(Number(this.input.value), n, r) });
15
- }), document.addEventListener("cm:theme-change", () => {
16
- let t = o(e().radius, n, r);
17
+ c.className = "preview-radius-slider__label", c.textContent = "Corner radius", s.appendChild(c), this.value = document.createElement("span"), this.value.className = "preview-radius-slider__value", this.value.textContent = `${o}px`, s.appendChild(this.value), this.el.appendChild(s), this.input = document.createElement("input"), this.input.type = "range", this.input.min = String(r), this.input.max = String(i), this.input.step = String(a), this.input.value = String(o), this.input.className = "preview-radius-slider__input", this.input.setAttribute("aria-label", "Corner radius (px)"), this.el.appendChild(this.input), this.applySliderFill(o), this.input.addEventListener("input", () => {
18
+ let e = n(Number(this.input.value), r, i);
19
+ this.value.textContent = `${e}px`, this.applySliderFill(e), t({ radius: e });
20
+ }), this._onThemeChange = () => {
21
+ let t = n(e().radius, r, i);
17
22
  Number(this.input.value) !== t && (this.input.value = String(t)), this.value.textContent = `${t}px`, this.applySliderFill(t);
18
- });
23
+ }, document.addEventListener("cm:theme-change", this._onThemeChange);
24
+ }
25
+ destroy() {
26
+ document.removeEventListener("cm:theme-change", this._onThemeChange);
19
27
  }
20
28
  applySliderFill(e) {
21
- let t = (e - n) / (r - n) * 100;
29
+ let t = (e - r) / (i - r) * 100;
22
30
  this.input.style.setProperty("--slider-pct", `${t}%`);
23
31
  }
24
32
  };
25
- function o(e, t, n) {
26
- return Number.isFinite(e) ? Math.max(t, Math.min(n, e)) : t;
27
- }
28
33
  //#endregion
29
- export { a as RadiusSlider };
34
+ export { o as RadiusSlider };
30
35
 
31
36
  //# sourceMappingURL=radius-slider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"radius-slider.js","names":[],"sources":["../../../src/components/theme/radius-slider.ts"],"sourcesContent":["/**\n * Radius Slider — 0..20px slider that drives `radius` on the theme engine.\n *\n * The engine then derives `--radius-sm` (0.5×), `--radius-md` (1×),\n * `--radius-lg` (1.5×), `--radius-xl` (2×).\n */\n\nimport { getTheme, setThemePartial } from '../../services/theme-engine'\n\nconst MIN = 0\nconst MAX = 20\nconst STEP = 1\n\nexport class RadiusSlider {\n public readonly el: HTMLElement\n private readonly input: HTMLInputElement\n private readonly value: HTMLSpanElement\n\n constructor() {\n const initial = clamp(getTheme().radius, MIN, MAX)\n\n this.el = document.createElement('div')\n this.el.className = 'preview-radius-slider'\n\n const head = document.createElement('div')\n head.className = 'preview-radius-slider__head'\n\n const label = document.createElement('span')\n label.className = 'preview-radius-slider__label'\n label.textContent = 'Corner radius'\n head.appendChild(label)\n\n this.value = document.createElement('span')\n this.value.className = 'preview-radius-slider__value'\n this.value.textContent = `${initial}px`\n head.appendChild(this.value)\n this.el.appendChild(head)\n\n this.input = document.createElement('input')\n this.input.type = 'range'\n this.input.min = String(MIN)\n this.input.max = String(MAX)\n this.input.step = String(STEP)\n this.input.value = String(initial)\n this.input.className = 'preview-radius-slider__input'\n this.input.setAttribute('aria-label', 'Corner radius (px)')\n this.el.appendChild(this.input)\n this.applySliderFill(initial)\n\n this.input.addEventListener('input', () => {\n const next = clamp(Number(this.input.value), MIN, MAX)\n setThemePartial({ radius: next })\n })\n\n document.addEventListener('cm:theme-change', () => {\n const r = clamp(getTheme().radius, MIN, MAX)\n if (Number(this.input.value) !== r) this.input.value = String(r)\n this.value.textContent = `${r}px`\n this.applySliderFill(r)\n })\n }\n\n private applySliderFill(level: number): void {\n const pct = ((level - MIN) / (MAX - MIN)) * 100\n this.input.style.setProperty('--slider-pct', `${pct}%`)\n }\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n if (!Number.isFinite(value)) return min\n return Math.max(min, Math.min(max, value))\n}\n"],"mappings":";;AASA,IAAM,IAAM,GACN,IAAM,IACN,IAAO,GAEA,IAAb,MAA0B;CACxB;CACA;CACA;CAEA,cAAc;EACZ,IAAM,IAAU,EAAM,GAAU,CAAC,QAAQ,GAAK,EAAI;AAGlD,EADA,KAAK,KAAK,SAAS,cAAc,MAAM,EACvC,KAAK,GAAG,YAAY;EAEpB,IAAM,IAAO,SAAS,cAAc,MAAM;AAC1C,IAAK,YAAY;EAEjB,IAAM,IAAQ,SAAS,cAAc,OAAO;AA2B5C,EA1BA,EAAM,YAAY,gCAClB,EAAM,cAAc,iBACpB,EAAK,YAAY,EAAM,EAEvB,KAAK,QAAQ,SAAS,cAAc,OAAO,EAC3C,KAAK,MAAM,YAAY,gCACvB,KAAK,MAAM,cAAc,GAAG,EAAQ,KACpC,EAAK,YAAY,KAAK,MAAM,EAC5B,KAAK,GAAG,YAAY,EAAK,EAEzB,KAAK,QAAQ,SAAS,cAAc,QAAQ,EAC5C,KAAK,MAAM,OAAO,SAClB,KAAK,MAAM,MAAM,OAAO,EAAI,EAC5B,KAAK,MAAM,MAAM,OAAO,EAAI,EAC5B,KAAK,MAAM,OAAO,OAAO,EAAK,EAC9B,KAAK,MAAM,QAAQ,OAAO,EAAQ,EAClC,KAAK,MAAM,YAAY,gCACvB,KAAK,MAAM,aAAa,cAAc,qBAAqB,EAC3D,KAAK,GAAG,YAAY,KAAK,MAAM,EAC/B,KAAK,gBAAgB,EAAQ,EAE7B,KAAK,MAAM,iBAAiB,eAAe;AAEzC,KAAgB,EAAE,QADL,EAAM,OAAO,KAAK,MAAM,MAAM,EAAE,GAAK,EAAI,EACtB,CAAC;IACjC,EAEF,SAAS,iBAAiB,yBAAyB;GACjD,IAAM,IAAI,EAAM,GAAU,CAAC,QAAQ,GAAK,EAAI;AAG5C,GAFI,OAAO,KAAK,MAAM,MAAM,KAAK,MAAG,KAAK,MAAM,QAAQ,OAAO,EAAE,GAChE,KAAK,MAAM,cAAc,GAAG,EAAE,KAC9B,KAAK,gBAAgB,EAAE;IACvB;;CAGJ,gBAAwB,GAAqB;EAC3C,IAAM,KAAQ,IAAQ,MAAQ,IAAM,KAAQ;AAC5C,OAAK,MAAM,MAAM,YAAY,gBAAgB,GAAG,EAAI,GAAG;;;AAI3D,SAAS,EAAM,GAAe,GAAa,GAAqB;AAE9D,QADK,OAAO,SAAS,EAAM,GACpB,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,EAAM,CAAC,GADN"}
1
+ {"version":3,"file":"radius-slider.js","names":[],"sources":["../../../src/components/theme/radius-slider.ts"],"sourcesContent":["/**\n * Radius Slider — 0..20px slider that drives `radius` on the theme engine.\n *\n * The engine then derives `--radius-sm` (0.5×), `--radius-md` (1×),\n * `--radius-lg` (1.5×), `--radius-xl` (2×).\n */\n\nimport { getTheme, setThemePartial } from '../../services/theme-engine'\n\nfunction clamp(v: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, v))\n}\n\nconst MIN = 0\nconst MAX = 20\nconst STEP = 1\n\nexport class RadiusSlider {\n public readonly el: HTMLElement\n private readonly input: HTMLInputElement\n private readonly value: HTMLSpanElement\n private readonly _onThemeChange: () => void\n\n constructor() {\n const initial = clamp(getTheme().radius, MIN, MAX)\n\n this.el = document.createElement('div')\n this.el.className = 'preview-radius-slider'\n\n const head = document.createElement('div')\n head.className = 'preview-radius-slider__head'\n\n const label = document.createElement('span')\n label.className = 'preview-radius-slider__label'\n label.textContent = 'Corner radius'\n head.appendChild(label)\n\n this.value = document.createElement('span')\n this.value.className = 'preview-radius-slider__value'\n this.value.textContent = `${initial}px`\n head.appendChild(this.value)\n this.el.appendChild(head)\n\n this.input = document.createElement('input')\n this.input.type = 'range'\n this.input.min = String(MIN)\n this.input.max = String(MAX)\n this.input.step = String(STEP)\n this.input.value = String(initial)\n this.input.className = 'preview-radius-slider__input'\n this.input.setAttribute('aria-label', 'Corner radius (px)')\n this.el.appendChild(this.input)\n this.applySliderFill(initial)\n\n this.input.addEventListener('input', () => {\n const next = clamp(Number(this.input.value), MIN, MAX)\n this.value.textContent = `${next}px`\n this.applySliderFill(next)\n setThemePartial({ radius: next })\n })\n\n this._onThemeChange = () => {\n const r = clamp(getTheme().radius, MIN, MAX)\n if (Number(this.input.value) !== r) this.input.value = String(r)\n this.value.textContent = `${r}px`\n this.applySliderFill(r)\n }\n document.addEventListener('cm:theme-change', this._onThemeChange)\n }\n\n destroy(): void {\n document.removeEventListener('cm:theme-change', this._onThemeChange)\n }\n\n private applySliderFill(level: number): void {\n const pct = ((level - MIN) / (MAX - MIN)) * 100\n this.input.style.setProperty('--slider-pct', `${pct}%`)\n }\n}\n\n"],"mappings":";;AASA,SAAS,EAAM,GAAW,GAAa,GAAqB;AAC1D,QAAO,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,EAAE,CAAC;;AAGxC,IAAM,IAAM,GACN,IAAM,IACN,IAAO,GAEA,IAAb,MAA0B;CACxB;CACA;CACA;CACA;CAEA,cAAc;EACZ,IAAM,IAAU,EAAM,GAAU,CAAC,QAAQ,GAAK,EAAI;AAGlD,EADA,KAAK,KAAK,SAAS,cAAc,MAAM,EACvC,KAAK,GAAG,YAAY;EAEpB,IAAM,IAAO,SAAS,cAAc,MAAM;AAC1C,IAAK,YAAY;EAEjB,IAAM,IAAQ,SAAS,cAAc,OAAO;AAmC5C,EAlCA,EAAM,YAAY,gCAClB,EAAM,cAAc,iBACpB,EAAK,YAAY,EAAM,EAEvB,KAAK,QAAQ,SAAS,cAAc,OAAO,EAC3C,KAAK,MAAM,YAAY,gCACvB,KAAK,MAAM,cAAc,GAAG,EAAQ,KACpC,EAAK,YAAY,KAAK,MAAM,EAC5B,KAAK,GAAG,YAAY,EAAK,EAEzB,KAAK,QAAQ,SAAS,cAAc,QAAQ,EAC5C,KAAK,MAAM,OAAO,SAClB,KAAK,MAAM,MAAM,OAAO,EAAI,EAC5B,KAAK,MAAM,MAAM,OAAO,EAAI,EAC5B,KAAK,MAAM,OAAO,OAAO,EAAK,EAC9B,KAAK,MAAM,QAAQ,OAAO,EAAQ,EAClC,KAAK,MAAM,YAAY,gCACvB,KAAK,MAAM,aAAa,cAAc,qBAAqB,EAC3D,KAAK,GAAG,YAAY,KAAK,MAAM,EAC/B,KAAK,gBAAgB,EAAQ,EAE7B,KAAK,MAAM,iBAAiB,eAAe;GACzC,IAAM,IAAO,EAAM,OAAO,KAAK,MAAM,MAAM,EAAE,GAAK,EAAI;AAGtD,GAFA,KAAK,MAAM,cAAc,GAAG,EAAK,KACjC,KAAK,gBAAgB,EAAK,EAC1B,EAAgB,EAAE,QAAQ,GAAM,CAAC;IACjC,EAEF,KAAK,uBAAuB;GAC1B,IAAM,IAAI,EAAM,GAAU,CAAC,QAAQ,GAAK,EAAI;AAG5C,GAFI,OAAO,KAAK,MAAM,MAAM,KAAK,MAAG,KAAK,MAAM,QAAQ,OAAO,EAAE,GAChE,KAAK,MAAM,cAAc,GAAG,EAAE,KAC9B,KAAK,gBAAgB,EAAE;KAEzB,SAAS,iBAAiB,mBAAmB,KAAK,eAAe;;CAGnE,UAAgB;AACd,WAAS,oBAAoB,mBAAmB,KAAK,eAAe;;CAGtE,gBAAwB,GAAqB;EAC3C,IAAM,KAAQ,IAAQ,MAAQ,IAAM,KAAQ;AAC5C,OAAK,MAAM,MAAM,YAAY,gBAAgB,GAAG,EAAI,GAAG"}
@@ -7,7 +7,9 @@
7
7
  */
8
8
  export declare class ThemePresetGrid {
9
9
  readonly el: HTMLElement;
10
+ private readonly _onThemeChange;
10
11
  constructor();
12
+ destroy(): void;
11
13
  private render;
12
14
  private updateActive;
13
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"theme-preset-grid.d.ts","sourceRoot":"","sources":["../../../src/components/theme/theme-preset-grid.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkEH,qBAAa,eAAe;IAC1B,SAAgB,EAAE,EAAE,WAAW,CAAA;;IAS/B,OAAO,CAAC,MAAM;IAiCd,OAAO,CAAC,YAAY;CASrB"}
1
+ {"version":3,"file":"theme-preset-grid.d.ts","sourceRoot":"","sources":["../../../src/components/theme/theme-preset-grid.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkEH,qBAAa,eAAe;IAC1B,SAAgB,EAAE,EAAE,WAAW,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAY;;IAU3C,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;IAiCd,OAAO,CAAC,YAAY;CASrB"}
@@ -13,7 +13,7 @@ function o(n) {
13
13
  }
14
14
  a.appendChild(o);
15
15
  let c = document.createElement("div");
16
- c.className = "theme-studio-preset__art-card", c.style.background = i.swatch[2], c.style.borderColor = "rgba(255,255,255,0.10)";
16
+ c.className = "theme-studio-preset__art-card", c.style.background = i.swatch[2], c.style.borderColor = "var(--border-2)";
17
17
  let l = document.createElement("span");
18
18
  l.className = "theme-studio-preset__art-pill", l.style.background = r.soft, l.style.color = r.brand, l.style.borderColor = r.brand, l.textContent = n.label.split(" ")[0] ?? n.label, c.appendChild(l);
19
19
  let u = document.createElement("span");
@@ -35,8 +35,12 @@ function o(n) {
35
35
  }
36
36
  var s = class {
37
37
  el;
38
+ _onThemeChange;
38
39
  constructor() {
39
- this.el = document.createElement("div"), this.el.className = "theme-studio-presets", this.render(), document.addEventListener("cm:theme-change", () => this.updateActive());
40
+ this.el = document.createElement("div"), this.el.className = "theme-studio-presets", this.render(), this._onThemeChange = () => this.updateActive(), document.addEventListener("cm:theme-change", this._onThemeChange);
41
+ }
42
+ destroy() {
43
+ document.removeEventListener("cm:theme-change", this._onThemeChange);
40
44
  }
41
45
  render() {
42
46
  this.el.innerHTML = "";
@@ -1 +1 @@
1
- {"version":3,"file":"theme-preset-grid.js","names":[],"sources":["../../../src/components/theme/theme-preset-grid.ts"],"sourcesContent":["/**\n * Theme Preset Grid — 6 curated preset cards.\n *\n * Modeled on Theme.jsx ThemePresetGrid (~L460-482). Each card shows a small\n * art preview (header bar + accent dot + content card with bars) and the\n * preset's label + description. Clicking applies the preset to the engine.\n */\n\nimport {\n ACCENT_PALETTES,\n COLOR_MODES,\n THEME_PRESETS,\n findActivePresetId,\n getTheme,\n setThemeFull,\n} from '../../services/theme-engine'\nimport type { ThemePreset } from '../../services/theme-engine'\n\nfunction buildArt(preset: ThemePreset): HTMLElement {\n const accent = ACCENT_PALETTES[preset.theme.accent]\n const mode = COLOR_MODES[preset.theme.mode]\n\n const art = document.createElement('div')\n art.className = 'theme-studio-preset__art'\n art.style.background = mode.swatch[1]\n\n const bar = document.createElement('div')\n bar.className = 'theme-studio-preset__art-bar'\n bar.style.background = mode.swatch[0]\n bar.style.borderColor = mode.swatch[2]\n\n const dot = document.createElement('span')\n dot.className = 'theme-studio-preset__art-dot'\n dot.style.background = accent.brand\n bar.appendChild(dot)\n\n for (let i = 0; i < 2; i++) {\n const line = document.createElement('span')\n line.className = 'theme-studio-preset__art-line'\n bar.appendChild(line)\n }\n art.appendChild(bar)\n\n const card = document.createElement('div')\n card.className = 'theme-studio-preset__art-card'\n card.style.background = mode.swatch[2]\n card.style.borderColor = 'rgba(255,255,255,0.10)'\n\n const pill = document.createElement('span')\n pill.className = 'theme-studio-preset__art-pill'\n pill.style.background = accent.soft\n pill.style.color = accent.brand\n pill.style.borderColor = accent.brand\n pill.textContent = preset.label.split(' ')[0] ?? preset.label\n card.appendChild(pill)\n\n const bars = document.createElement('span')\n bars.className = 'theme-studio-preset__art-bars'\n const widths = ['70%', '46%', '60%']\n const colors = [accent.brand, 'rgba(255,255,255,0.30)', 'rgba(255,255,255,0.20)']\n for (let i = 0; i < 3; i++) {\n const b = document.createElement('i')\n b.style.background = colors[i] ?? 'rgba(255,255,255,0.20)'\n b.style.width = widths[i] ?? '60%'\n bars.appendChild(b)\n }\n card.appendChild(bars)\n art.appendChild(card)\n\n return art\n}\n\nexport class ThemePresetGrid {\n public readonly el: HTMLElement\n\n constructor() {\n this.el = document.createElement('div')\n this.el.className = 'theme-studio-presets'\n this.render()\n document.addEventListener('cm:theme-change', () => this.updateActive())\n }\n\n private render(): void {\n this.el.innerHTML = ''\n const activeId = findActivePresetId(getTheme())\n\n for (const preset of THEME_PRESETS) {\n const card = document.createElement('button')\n card.type = 'button'\n card.className = 'theme-studio-preset'\n card.dataset.presetId = preset.id\n if (activeId === preset.id) card.classList.add('is-active')\n card.setAttribute('aria-pressed', String(activeId === preset.id))\n card.setAttribute('aria-label', `Apply ${preset.label} preset`)\n\n card.appendChild(buildArt(preset))\n\n const name = document.createElement('div')\n name.className = 'theme-studio-preset__name'\n name.textContent = preset.label\n card.appendChild(name)\n\n const desc = document.createElement('div')\n desc.className = 'theme-studio-preset__desc'\n desc.textContent = preset.description\n card.appendChild(desc)\n\n card.addEventListener('click', () => {\n setThemeFull({ ...preset.theme, iconOverrides: {} })\n })\n\n this.el.appendChild(card)\n }\n }\n\n private updateActive(): void {\n const activeId = findActivePresetId(getTheme())\n const cards = this.el.querySelectorAll<HTMLButtonElement>('.theme-studio-preset')\n for (const card of cards) {\n const isActive = card.dataset.presetId === activeId\n card.classList.toggle('is-active', isActive)\n card.setAttribute('aria-pressed', String(isActive))\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"theme-preset-grid.js","names":[],"sources":["../../../src/components/theme/theme-preset-grid.ts"],"sourcesContent":["/**\n * Theme Preset Grid — 6 curated preset cards.\n *\n * Modeled on Theme.jsx ThemePresetGrid (~L460-482). Each card shows a small\n * art preview (header bar + accent dot + content card with bars) and the\n * preset's label + description. Clicking applies the preset to the engine.\n */\n\nimport {\n ACCENT_PALETTES,\n COLOR_MODES,\n THEME_PRESETS,\n findActivePresetId,\n getTheme,\n setThemeFull,\n} from '../../services/theme-engine'\nimport type { ThemePreset } from '../../services/theme-engine'\n\nfunction buildArt(preset: ThemePreset): HTMLElement {\n const accent = ACCENT_PALETTES[preset.theme.accent]\n const mode = COLOR_MODES[preset.theme.mode]\n\n const art = document.createElement('div')\n art.className = 'theme-studio-preset__art'\n art.style.background = mode.swatch[1]\n\n const bar = document.createElement('div')\n bar.className = 'theme-studio-preset__art-bar'\n bar.style.background = mode.swatch[0]\n bar.style.borderColor = mode.swatch[2]\n\n const dot = document.createElement('span')\n dot.className = 'theme-studio-preset__art-dot'\n dot.style.background = accent.brand\n bar.appendChild(dot)\n\n for (let i = 0; i < 2; i++) {\n const line = document.createElement('span')\n line.className = 'theme-studio-preset__art-line'\n bar.appendChild(line)\n }\n art.appendChild(bar)\n\n const card = document.createElement('div')\n card.className = 'theme-studio-preset__art-card'\n card.style.background = mode.swatch[2]\n card.style.borderColor = 'var(--border-2)'\n\n const pill = document.createElement('span')\n pill.className = 'theme-studio-preset__art-pill'\n pill.style.background = accent.soft\n pill.style.color = accent.brand\n pill.style.borderColor = accent.brand\n pill.textContent = preset.label.split(' ')[0] ?? preset.label\n card.appendChild(pill)\n\n const bars = document.createElement('span')\n bars.className = 'theme-studio-preset__art-bars'\n const widths = ['70%', '46%', '60%']\n const colors = [accent.brand, 'rgba(255,255,255,0.30)', 'rgba(255,255,255,0.20)']\n for (let i = 0; i < 3; i++) {\n const b = document.createElement('i')\n b.style.background = colors[i] ?? 'rgba(255,255,255,0.20)'\n b.style.width = widths[i] ?? '60%'\n bars.appendChild(b)\n }\n card.appendChild(bars)\n art.appendChild(card)\n\n return art\n}\n\nexport class ThemePresetGrid {\n public readonly el: HTMLElement\n private readonly _onThemeChange: () => void\n\n constructor() {\n this.el = document.createElement('div')\n this.el.className = 'theme-studio-presets'\n this.render()\n this._onThemeChange = () => this.updateActive()\n document.addEventListener('cm:theme-change', this._onThemeChange)\n }\n\n destroy(): void {\n document.removeEventListener('cm:theme-change', this._onThemeChange)\n }\n\n private render(): void {\n this.el.innerHTML = ''\n const activeId = findActivePresetId(getTheme())\n\n for (const preset of THEME_PRESETS) {\n const card = document.createElement('button')\n card.type = 'button'\n card.className = 'theme-studio-preset'\n card.dataset.presetId = preset.id\n if (activeId === preset.id) card.classList.add('is-active')\n card.setAttribute('aria-pressed', String(activeId === preset.id))\n card.setAttribute('aria-label', `Apply ${preset.label} preset`)\n\n card.appendChild(buildArt(preset))\n\n const name = document.createElement('div')\n name.className = 'theme-studio-preset__name'\n name.textContent = preset.label\n card.appendChild(name)\n\n const desc = document.createElement('div')\n desc.className = 'theme-studio-preset__desc'\n desc.textContent = preset.description\n card.appendChild(desc)\n\n card.addEventListener('click', () => {\n setThemeFull({ ...preset.theme, iconOverrides: {} })\n })\n\n this.el.appendChild(card)\n }\n }\n\n private updateActive(): void {\n const activeId = findActivePresetId(getTheme())\n const cards = this.el.querySelectorAll<HTMLButtonElement>('.theme-studio-preset')\n for (const card of cards) {\n const isActive = card.dataset.presetId === activeId\n card.classList.toggle('is-active', isActive)\n card.setAttribute('aria-pressed', String(isActive))\n }\n }\n}\n"],"mappings":"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"}
@@ -8,7 +8,9 @@
8
8
  */
9
9
  export declare class ThemePreviewTile {
10
10
  readonly el: HTMLElement;
11
+ private readonly _onThemeChange;
11
12
  constructor();
13
+ destroy(): void;
12
14
  private render;
13
15
  }
14
16
  //# sourceMappingURL=theme-preview-tile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-preview-tile.d.ts","sourceRoot":"","sources":["../../../src/components/theme/theme-preview-tile.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyCH,qBAAa,gBAAgB;IAC3B,SAAgB,EAAE,EAAE,WAAW,CAAA;;IAS/B,OAAO,CAAC,MAAM;CA0Gf"}
1
+ {"version":3,"file":"theme-preview-tile.d.ts","sourceRoot":"","sources":["../../../src/components/theme/theme-preview-tile.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0CH,qBAAa,gBAAgB;IAC3B,SAAgB,EAAE,EAAE,WAAW,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAY;;IAU3C,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;CA2Gf"}
@@ -3,7 +3,7 @@ import { ACCENT_PALETTES as e, getTheme as t } from "../../services/theme-engine
3
3
  var n = "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z", r = "M12 2l4 5h-8z M12 7v15 M5 12l-2 2 2 2 M19 12l2 2-2 2 M8 22h8 M3 9c2 0 3 1 4 2 M21 9c-2 0-3 1-4 2", i = "M12 3a8 8 0 0 0-8 8v6l3 1v3h2v-3h2v3h2v-3h2v3h2v-3l3-1v-6a8 8 0 0 0-8-8z M9 12h.01 M15 12h.01", a = "M11 11m-7 0a7 7 0 1 0 14 0 7 7 0 1 0-14 0 M21 21l-4.35-4.35", o = "M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9 M13.73 21a2 2 0 0 1-3.46 0", s = "M12 2v4 M9 6h6 M10 6v4a4 4 0 0 0 8 0V6";
4
4
  function c(e, t = 14) {
5
5
  let n = document.createElementNS("http://www.w3.org/2000/svg", "svg");
6
- n.setAttribute("width", String(t)), n.setAttribute("height", String(t)), n.setAttribute("viewBox", "0 0 24 24"), n.setAttribute("fill", "none"), n.setAttribute("stroke", "currentColor"), n.setAttribute("stroke-width", "2"), n.setAttribute("stroke-linecap", "round"), n.setAttribute("stroke-linejoin", "round");
6
+ n.setAttribute("width", String(t)), n.setAttribute("height", String(t)), n.setAttribute("viewBox", "0 0 24 24"), n.setAttribute("fill", "none"), n.setAttribute("stroke", "currentColor"), n.setAttribute("stroke-width", "2"), n.setAttribute("stroke-linecap", "round"), n.setAttribute("stroke-linejoin", "round"), n.setAttribute("aria-hidden", "true");
7
7
  for (let t of e.split(/(?=M)/g)) {
8
8
  let e = t.trim();
9
9
  if (!e) continue;
@@ -14,8 +14,12 @@ function c(e, t = 14) {
14
14
  }
15
15
  var l = class {
16
16
  el;
17
+ _onThemeChange;
17
18
  constructor() {
18
- this.el = document.createElement("div"), this.el.className = "theme-studio-preview-tile", this.render(), document.addEventListener("cm:theme-change", () => this.render());
19
+ this.el = document.createElement("div"), this.el.className = "theme-studio-preview-tile", this.render(), this._onThemeChange = () => this.render(), document.addEventListener("cm:theme-change", this._onThemeChange);
20
+ }
21
+ destroy() {
22
+ document.removeEventListener("cm:theme-change", this._onThemeChange);
19
23
  }
20
24
  render() {
21
25
  let l = t(), u = e[l.accent];
@@ -50,8 +54,8 @@ var l = class {
50
54
  iconPath: r,
51
55
  label: "Lateral movement (PsExec)",
52
56
  pillText: "HIGH",
53
- pillBg: "rgba(239,68,68,0.10)",
54
- pillColor: "#f87171"
57
+ pillBg: "hsl(var(--accent-rose) / 0.15)",
58
+ pillColor: "hsl(var(--accent-rose))"
55
59
  },
56
60
  {
57
61
  iconPath: i,
@@ -71,7 +75,7 @@ var l = class {
71
75
  }
72
76
  _.appendChild(v);
73
77
  let x = document.createElement("button");
74
- x.type = "button", x.className = "theme-studio-preview-tile__cta", x.style.background = u.brand, x.appendChild(c(s, 12));
78
+ x.type = "button", x.className = "theme-studio-preview-tile__cta", x.style.background = u.brand, x.disabled = !0, x.appendChild(c(s, 12));
75
79
  let S = document.createElement("span");
76
80
  S.textContent = "Connect source", x.appendChild(S), _.appendChild(x), this.el.appendChild(_);
77
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"theme-preview-tile.js","names":[],"sources":["../../../src/components/theme/theme-preview-tile.ts"],"sourcesContent":["/**\n * Theme Preview Tile — port of Theme.jsx `ThemePreviewTile` (~L484-522).\n *\n * Mini app-shell: header with brand mark + wordmark + search/bell, body with\n * a \"DETECTIONS\" eyebrow + 3 detection rows + a \"Connect source\" CTA. Re-renders\n * reactively on `cm:theme-change` so users see preset/accent/font changes\n * immediately.\n */\n\nimport { ACCENT_PALETTES, getTheme } from '../../services/theme-engine'\n\nconst SHIELD_PATH = 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'\nconst BUG_PATH =\n 'M12 2l4 5h-8z M12 7v15 M5 12l-2 2 2 2 M19 12l2 2-2 2 M8 22h8 M3 9c2 0 3 1 4 2 M21 9c-2 0-3 1-4 2'\nconst SKULL_PATH =\n 'M12 3a8 8 0 0 0-8 8v6l3 1v3h2v-3h2v3h2v-3h2v3h2v-3l3-1v-6a8 8 0 0 0-8-8z M9 12h.01 M15 12h.01'\nconst SEARCH_PATH = 'M11 11m-7 0a7 7 0 1 0 14 0 7 7 0 1 0-14 0 M21 21l-4.35-4.35'\nconst BELL_PATH = 'M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9 M13.73 21a2 2 0 0 1-3.46 0'\nconst PLUG_PATH = 'M12 2v4 M9 6h6 M10 6v4a4 4 0 0 0 8 0V6'\n\nfunction svgIcon(d: string, size = 14): SVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', String(size))\n svg.setAttribute('height', String(size))\n svg.setAttribute('viewBox', '0 0 24 24')\n svg.setAttribute('fill', 'none')\n svg.setAttribute('stroke', 'currentColor')\n svg.setAttribute('stroke-width', '2')\n svg.setAttribute('stroke-linecap', 'round')\n svg.setAttribute('stroke-linejoin', 'round')\n for (const segment of d.split(/(?=M)/g)) {\n const trimmed = segment.trim()\n if (!trimmed) continue\n const p = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n p.setAttribute('d', trimmed)\n svg.appendChild(p)\n }\n return svg\n}\n\ninterface RowSpec {\n iconPath: string\n label: string\n pillText: string\n pillBg: string\n pillColor: string\n}\n\nexport class ThemePreviewTile {\n public readonly el: HTMLElement\n\n constructor() {\n this.el = document.createElement('div')\n this.el.className = 'theme-studio-preview-tile'\n this.render()\n document.addEventListener('cm:theme-change', () => this.render())\n }\n\n private render(): void {\n const theme = getTheme()\n const accent = ACCENT_PALETTES[theme.accent]\n this.el.dataset.mode = theme.mode\n this.el.innerHTML = ''\n\n // Header\n const head = document.createElement('div')\n head.className = 'theme-studio-preview-tile__head'\n\n const mark = document.createElement('span')\n mark.className = 'theme-studio-preview-tile__mark'\n mark.style.background = accent.brand\n mark.appendChild(svgIcon(SHIELD_PATH, 12))\n head.appendChild(mark)\n\n const title = document.createElement('span')\n title.className = 'theme-studio-preview-tile__title'\n title.textContent = 'CounterMeasure'\n head.appendChild(title)\n\n const spacer = document.createElement('span')\n spacer.className = 'theme-studio-preview-tile__spacer'\n head.appendChild(spacer)\n\n const searchBtn = document.createElement('span')\n searchBtn.className = 'theme-studio-preview-tile__icon'\n searchBtn.appendChild(svgIcon(SEARCH_PATH, 14))\n head.appendChild(searchBtn)\n\n const bellBtn = document.createElement('span')\n bellBtn.className = 'theme-studio-preview-tile__icon'\n bellBtn.appendChild(svgIcon(BELL_PATH, 14))\n head.appendChild(bellBtn)\n\n this.el.appendChild(head)\n\n // Body\n const body = document.createElement('div')\n body.className = 'theme-studio-preview-tile__body'\n\n const section = document.createElement('div')\n section.className = 'theme-studio-preview-tile__section'\n\n const eyebrow = document.createElement('div')\n eyebrow.className = 'theme-studio-preview-tile__eyebrow'\n eyebrow.textContent = 'DETECTIONS'\n section.appendChild(eyebrow)\n\n const rows: RowSpec[] = [\n {\n iconPath: SHIELD_PATH,\n label: 'Cobalt Strike beacon',\n pillText: '87',\n pillBg: accent.soft,\n pillColor: accent.brand,\n },\n {\n iconPath: BUG_PATH,\n label: 'Lateral movement (PsExec)',\n pillText: 'HIGH',\n pillBg: 'rgba(239,68,68,0.10)',\n pillColor: '#f87171',\n },\n {\n iconPath: SKULL_PATH,\n label: 'APT29 — kerberoasting',\n pillText: '23',\n pillBg: 'rgba(255,255,255,0.06)',\n pillColor: 'var(--text-3)',\n },\n ]\n\n for (const row of rows) {\n const r = document.createElement('div')\n r.className = 'theme-studio-preview-tile__row'\n r.appendChild(svgIcon(row.iconPath, 14))\n\n const label = document.createElement('span')\n label.className = 'theme-studio-preview-tile__row-label'\n label.textContent = row.label\n r.appendChild(label)\n\n const pill = document.createElement('span')\n pill.className = 'theme-studio-preview-tile__pill'\n pill.style.background = row.pillBg\n pill.style.color = row.pillColor\n pill.textContent = row.pillText\n r.appendChild(pill)\n\n section.appendChild(r)\n }\n body.appendChild(section)\n\n const cta = document.createElement('button')\n cta.type = 'button'\n cta.className = 'theme-studio-preview-tile__cta'\n cta.style.background = accent.brand\n cta.appendChild(svgIcon(PLUG_PATH, 12))\n const ctaLabel = document.createElement('span')\n ctaLabel.textContent = 'Connect source'\n cta.appendChild(ctaLabel)\n body.appendChild(cta)\n\n this.el.appendChild(body)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"theme-preview-tile.js","names":[],"sources":["../../../src/components/theme/theme-preview-tile.ts"],"sourcesContent":["/**\n * Theme Preview Tile — port of Theme.jsx `ThemePreviewTile` (~L484-522).\n *\n * Mini app-shell: header with brand mark + wordmark + search/bell, body with\n * a \"DETECTIONS\" eyebrow + 3 detection rows + a \"Connect source\" CTA. Re-renders\n * reactively on `cm:theme-change` so users see preset/accent/font changes\n * immediately.\n */\n\nimport { ACCENT_PALETTES, getTheme } from '../../services/theme-engine'\n\nconst SHIELD_PATH = 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'\nconst BUG_PATH =\n 'M12 2l4 5h-8z M12 7v15 M5 12l-2 2 2 2 M19 12l2 2-2 2 M8 22h8 M3 9c2 0 3 1 4 2 M21 9c-2 0-3 1-4 2'\nconst SKULL_PATH =\n 'M12 3a8 8 0 0 0-8 8v6l3 1v3h2v-3h2v3h2v-3h2v3h2v-3l3-1v-6a8 8 0 0 0-8-8z M9 12h.01 M15 12h.01'\nconst SEARCH_PATH = 'M11 11m-7 0a7 7 0 1 0 14 0 7 7 0 1 0-14 0 M21 21l-4.35-4.35'\nconst BELL_PATH = 'M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9 M13.73 21a2 2 0 0 1-3.46 0'\nconst PLUG_PATH = 'M12 2v4 M9 6h6 M10 6v4a4 4 0 0 0 8 0V6'\n\nfunction svgIcon(d: string, size = 14): SVGElement {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', String(size))\n svg.setAttribute('height', String(size))\n svg.setAttribute('viewBox', '0 0 24 24')\n svg.setAttribute('fill', 'none')\n svg.setAttribute('stroke', 'currentColor')\n svg.setAttribute('stroke-width', '2')\n svg.setAttribute('stroke-linecap', 'round')\n svg.setAttribute('stroke-linejoin', 'round')\n svg.setAttribute('aria-hidden', 'true')\n for (const segment of d.split(/(?=M)/g)) {\n const trimmed = segment.trim()\n if (!trimmed) continue\n const p = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n p.setAttribute('d', trimmed)\n svg.appendChild(p)\n }\n return svg\n}\n\ninterface RowSpec {\n iconPath: string\n label: string\n pillText: string\n pillBg: string\n pillColor: string\n}\n\nexport class ThemePreviewTile {\n public readonly el: HTMLElement\n private readonly _onThemeChange: () => void\n\n constructor() {\n this.el = document.createElement('div')\n this.el.className = 'theme-studio-preview-tile'\n this.render()\n this._onThemeChange = () => this.render()\n document.addEventListener('cm:theme-change', this._onThemeChange)\n }\n\n destroy(): void {\n document.removeEventListener('cm:theme-change', this._onThemeChange)\n }\n\n private render(): void {\n const theme = getTheme()\n const accent = ACCENT_PALETTES[theme.accent]\n this.el.dataset.mode = theme.mode\n this.el.innerHTML = ''\n\n // Header\n const head = document.createElement('div')\n head.className = 'theme-studio-preview-tile__head'\n\n const mark = document.createElement('span')\n mark.className = 'theme-studio-preview-tile__mark'\n mark.style.background = accent.brand\n mark.appendChild(svgIcon(SHIELD_PATH, 12))\n head.appendChild(mark)\n\n const title = document.createElement('span')\n title.className = 'theme-studio-preview-tile__title'\n title.textContent = 'CounterMeasure'\n head.appendChild(title)\n\n const spacer = document.createElement('span')\n spacer.className = 'theme-studio-preview-tile__spacer'\n head.appendChild(spacer)\n\n const searchBtn = document.createElement('span')\n searchBtn.className = 'theme-studio-preview-tile__icon'\n searchBtn.appendChild(svgIcon(SEARCH_PATH, 14))\n head.appendChild(searchBtn)\n\n const bellBtn = document.createElement('span')\n bellBtn.className = 'theme-studio-preview-tile__icon'\n bellBtn.appendChild(svgIcon(BELL_PATH, 14))\n head.appendChild(bellBtn)\n\n this.el.appendChild(head)\n\n // Body\n const body = document.createElement('div')\n body.className = 'theme-studio-preview-tile__body'\n\n const section = document.createElement('div')\n section.className = 'theme-studio-preview-tile__section'\n\n const eyebrow = document.createElement('div')\n eyebrow.className = 'theme-studio-preview-tile__eyebrow'\n eyebrow.textContent = 'DETECTIONS'\n section.appendChild(eyebrow)\n\n const rows: RowSpec[] = [\n {\n iconPath: SHIELD_PATH,\n label: 'Cobalt Strike beacon',\n pillText: '87',\n pillBg: accent.soft,\n pillColor: accent.brand,\n },\n {\n iconPath: BUG_PATH,\n label: 'Lateral movement (PsExec)',\n pillText: 'HIGH',\n pillBg: 'hsl(var(--accent-rose) / 0.15)',\n pillColor: 'hsl(var(--accent-rose))',\n },\n {\n iconPath: SKULL_PATH,\n label: 'APT29 — kerberoasting',\n pillText: '23',\n pillBg: 'rgba(255,255,255,0.06)',\n pillColor: 'var(--text-3)',\n },\n ]\n\n for (const row of rows) {\n const r = document.createElement('div')\n r.className = 'theme-studio-preview-tile__row'\n r.appendChild(svgIcon(row.iconPath, 14))\n\n const label = document.createElement('span')\n label.className = 'theme-studio-preview-tile__row-label'\n label.textContent = row.label\n r.appendChild(label)\n\n const pill = document.createElement('span')\n pill.className = 'theme-studio-preview-tile__pill'\n pill.style.background = row.pillBg\n pill.style.color = row.pillColor\n pill.textContent = row.pillText\n r.appendChild(pill)\n\n section.appendChild(r)\n }\n body.appendChild(section)\n\n const cta = document.createElement('button')\n cta.type = 'button'\n cta.className = 'theme-studio-preview-tile__cta'\n cta.style.background = accent.brand\n cta.disabled = true\n cta.appendChild(svgIcon(PLUG_PATH, 12))\n const ctaLabel = document.createElement('span')\n ctaLabel.textContent = 'Connect source'\n cta.appendChild(ctaLabel)\n body.appendChild(cta)\n\n this.el.appendChild(body)\n }\n}\n"],"mappings":"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"}
@@ -6,8 +6,12 @@ export interface ThemeStudioOptions {
6
6
  export declare class ThemeStudio {
7
7
  readonly el: HTMLElement;
8
8
  private readonly options;
9
+ private children;
9
10
  constructor(options?: ThemeStudioOptions);
10
11
  render(): void;
12
+ private buildAdvancedSection;
13
+ private buildAdvanced;
14
+ destroy(): void;
11
15
  }
12
16
  export declare function renderThemeStudio(container: HTMLElement, options?: ThemeStudioOptions): ThemeStudio;
13
17
  //# sourceMappingURL=theme-studio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-studio.d.ts","sourceRoot":"","sources":["../../../src/components/theme/theme-studio.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAgHD,qBAAa,WAAW;IACtB,SAAgB,EAAE,EAAE,WAAW,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;gBAE1C,OAAO,GAAE,kBAAuB;IAO5C,MAAM,IAAI,IAAI;CAoFf;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,WAAW,CAKb"}
1
+ {"version":3,"file":"theme-studio.d.ts","sourceRoot":"","sources":["../../../src/components/theme/theme-studio.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AA2DD,qBAAa,WAAW;IACtB,SAAgB,EAAE,EAAE,WAAW,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAuD;gBAE3D,OAAO,GAAE,kBAAuB;IAO5C,MAAM,IAAI,IAAI;IA+Gd,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,aAAa;IAgCrB,OAAO,IAAI,IAAI;CAIhB;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,WAAW,CAKb"}