@countermeasure-platform/web-components 1.2.0 → 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,4 +1,4 @@
1
- import { t as e } from "./interactive-C6OMqZhG.js";
1
+ import { t as e } from "./interactive-CXfIDzyh.js";
2
2
  import { defaultColors as t } from "./charts/utils.js";
3
3
  //#region src/charts/series.ts
4
4
  var n = class extends e {
@@ -41,4 +41,4 @@ var n = class extends e {
41
41
  //#endregion
42
42
  export { n as t };
43
43
 
44
- //# sourceMappingURL=series-DMc2ZYyj.js.map
44
+ //# sourceMappingURL=series-DrBALkNS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"series-DMc2ZYyj.js","names":[],"sources":["../src/charts/series.ts"],"sourcesContent":["/**\n * Series chart base class with series management, visibility toggling, and legend updates\n * @countermeasure/web-components/charts/series\n */\n\nimport { InteractiveChart } from './interactive'\nimport type { ChartSeries, LegendItem, ResolvedSeries, SeriesChartConfig } from './types'\nimport { defaultColors } from './utils'\n\nexport abstract class SeriesChart extends InteractiveChart {\n protected series: ResolvedSeries[]\n protected hiddenSeries: Set<string>\n\n constructor(config: SeriesChartConfig) {\n // Series charts show legend by default unless explicitly disabled\n if (config.legend?.visible === false) {\n const { legend: _omit, ...rest } = config\n super(rest)\n } else {\n super({ ...config, legend: config.legend ?? { visible: true } })\n }\n\n this.hiddenSeries = new Set()\n this.series = this.resolveSeries(config.series)\n\n // Wire legend toggle to hidden series management\n if (this.legend !== null) {\n this.legend.onToggle((index: number, _active: boolean) => {\n const s = this.series[index]\n if (s === undefined) return\n if (this.hiddenSeries.has(s.name)) {\n this.hiddenSeries.delete(s.name)\n } else {\n this.hiddenSeries.add(s.name)\n }\n this.render()\n })\n }\n }\n\n protected resolveSeries(rawSeries: ChartSeries[]): ResolvedSeries[] {\n const colors = defaultColors()\n return rawSeries.map((s, i) => ({\n name: s.name,\n data: s.data,\n color: s.color ?? colors[i % colors.length] ?? '#3b82f6',\n }))\n }\n\n protected getVisibleSeries(): ResolvedSeries[] {\n return this.series.filter(s => !this.hiddenSeries.has(s.name))\n }\n\n protected updateSeriesLegend(): void {\n if (this.legend === null) return\n const items: LegendItem[] = this.series.map(s => ({\n label: s.name,\n color: s.color,\n active: !this.hiddenSeries.has(s.name),\n }))\n this.legend.update(items)\n }\n}\n"],"mappings":";;;AASA,IAAsB,IAAtB,cAA0C,EAAiB;CACzD;CACA;CAEA,YAAY,GAA2B;AAErC,MAAI,EAAO,QAAQ,YAAY,IAAO;GACpC,IAAM,EAAE,QAAQ,GAAO,GAAG,MAAS;AACnC,SAAM,EAAK;QAEX,OAAM;GAAE,GAAG;GAAQ,QAAQ,EAAO,UAAU,EAAE,SAAS,IAAM;GAAE,CAAC;AAOlE,EAJA,KAAK,+BAAe,IAAI,KAAK,EAC7B,KAAK,SAAS,KAAK,cAAc,EAAO,OAAO,EAG3C,KAAK,WAAW,QAClB,KAAK,OAAO,UAAU,GAAe,MAAqB;GACxD,IAAM,IAAI,KAAK,OAAO;AAClB,SAAM,KAAA,MACN,KAAK,aAAa,IAAI,EAAE,KAAK,GAC/B,KAAK,aAAa,OAAO,EAAE,KAAK,GAEhC,KAAK,aAAa,IAAI,EAAE,KAAK,EAE/B,KAAK,QAAQ;IACb;;CAIN,cAAwB,GAA4C;EAClE,IAAM,IAAS,GAAe;AAC9B,SAAO,EAAU,KAAK,GAAG,OAAO;GAC9B,MAAM,EAAE;GACR,MAAM,EAAE;GACR,OAAO,EAAE,SAAS,EAAO,IAAI,EAAO,WAAW;GAChD,EAAE;;CAGL,mBAA+C;AAC7C,SAAO,KAAK,OAAO,QAAO,MAAK,CAAC,KAAK,aAAa,IAAI,EAAE,KAAK,CAAC;;CAGhE,qBAAqC;AACnC,MAAI,KAAK,WAAW,KAAM;EAC1B,IAAM,IAAsB,KAAK,OAAO,KAAI,OAAM;GAChD,OAAO,EAAE;GACT,OAAO,EAAE;GACT,QAAQ,CAAC,KAAK,aAAa,IAAI,EAAE,KAAK;GACvC,EAAE;AACH,OAAK,OAAO,OAAO,EAAM"}
1
+ {"version":3,"file":"series-DrBALkNS.js","names":[],"sources":["../src/charts/series.ts"],"sourcesContent":["/**\n * Series chart base class with series management, visibility toggling, and legend updates\n * @countermeasure/web-components/charts/series\n */\n\nimport { InteractiveChart } from './interactive'\nimport type { ChartSeries, LegendItem, ResolvedSeries, SeriesChartConfig } from './types'\nimport { defaultColors } from './utils'\n\nexport abstract class SeriesChart extends InteractiveChart {\n protected series: ResolvedSeries[]\n protected hiddenSeries: Set<string>\n\n constructor(config: SeriesChartConfig) {\n // Series charts show legend by default unless explicitly disabled\n if (config.legend?.visible === false) {\n const { legend: _omit, ...rest } = config\n super(rest)\n } else {\n super({ ...config, legend: config.legend ?? { visible: true } })\n }\n\n this.hiddenSeries = new Set()\n this.series = this.resolveSeries(config.series)\n\n // Wire legend toggle to hidden series management\n if (this.legend !== null) {\n this.legend.onToggle((index: number, _active: boolean) => {\n const s = this.series[index]\n if (s === undefined) return\n if (this.hiddenSeries.has(s.name)) {\n this.hiddenSeries.delete(s.name)\n } else {\n this.hiddenSeries.add(s.name)\n }\n this.render()\n })\n }\n }\n\n protected resolveSeries(rawSeries: ChartSeries[]): ResolvedSeries[] {\n const colors = defaultColors()\n return rawSeries.map((s, i) => ({\n name: s.name,\n data: s.data,\n color: s.color ?? colors[i % colors.length] ?? '#3b82f6',\n }))\n }\n\n protected getVisibleSeries(): ResolvedSeries[] {\n return this.series.filter(s => !this.hiddenSeries.has(s.name))\n }\n\n protected updateSeriesLegend(): void {\n if (this.legend === null) return\n const items: LegendItem[] = this.series.map(s => ({\n label: s.name,\n color: s.color,\n active: !this.hiddenSeries.has(s.name),\n }))\n this.legend.update(items)\n }\n}\n"],"mappings":";;;AASA,IAAsB,IAAtB,cAA0C,EAAiB;CACzD;CACA;CAEA,YAAY,GAA2B;AAErC,MAAI,EAAO,QAAQ,YAAY,IAAO;GACpC,IAAM,EAAE,QAAQ,GAAO,GAAG,MAAS;AACnC,SAAM,EAAK;QAEX,OAAM;GAAE,GAAG;GAAQ,QAAQ,EAAO,UAAU,EAAE,SAAS,IAAM;GAAE,CAAC;AAOlE,EAJA,KAAK,+BAAe,IAAI,KAAK,EAC7B,KAAK,SAAS,KAAK,cAAc,EAAO,OAAO,EAG3C,KAAK,WAAW,QAClB,KAAK,OAAO,UAAU,GAAe,MAAqB;GACxD,IAAM,IAAI,KAAK,OAAO;AAClB,SAAM,KAAA,MACN,KAAK,aAAa,IAAI,EAAE,KAAK,GAC/B,KAAK,aAAa,OAAO,EAAE,KAAK,GAEhC,KAAK,aAAa,IAAI,EAAE,KAAK,EAE/B,KAAK,QAAQ;IACb;;CAIN,cAAwB,GAA4C;EAClE,IAAM,IAAS,GAAe;AAC9B,SAAO,EAAU,KAAK,GAAG,OAAO;GAC9B,MAAM,EAAE;GACR,MAAM,EAAE;GACR,OAAO,EAAE,SAAS,EAAO,IAAI,EAAO,WAAW;GAChD,EAAE;;CAGL,mBAA+C;AAC7C,SAAO,KAAK,OAAO,QAAO,MAAK,CAAC,KAAK,aAAa,IAAI,EAAE,KAAK,CAAC;;CAGhE,qBAAqC;AACnC,MAAI,KAAK,WAAW,KAAM;EAC1B,IAAM,IAAsB,KAAK,OAAO,KAAI,OAAM;GAChD,OAAO,EAAE;GACT,OAAO,EAAE;GACT,QAAQ,CAAC,KAAK,aAAa,IAAI,EAAE,KAAK;GACvC,EAAE;AACH,OAAK,OAAO,OAAO,EAAM"}
@@ -1,7 +1,7 @@
1
1
  import { ACCENT_PALETTES as e, CM_ICON_PATHS as t, COLOR_MODES as n, FONT_STACKS as r, ICON_SETS as i, ICON_USAGES as a, THEME_DEFAULT as o, THEME_LS_KEY as s, THEME_PRESETS as c, _resetCache as l, applyTheme as u, bootstrapTheme as d, defaultTheme as f, ensureGoogleFont as p, findActivePresetId as m, getTheme as h, loadTheme as g, resetTheme as _, saveTheme as v, setThemeFull as y, setThemePartial as b, teardownTheme as x } from "./theme-engine/index.js";
2
2
  import { ApiClient as S, createApiClient as C } from "./api.js";
3
- import { t as w } from "../sse-D0HLjufB.js";
3
+ import { t as w } from "../sse-DCaj9UFJ.js";
4
4
  import { KeybindingManager as T } from "./keybindings.js";
5
- import { a as E, i as D, n as O, r as k, t as A } from "../storage-B-gK537W.js";
5
+ import { a as E, i as D, n as O, r as k, t as A } from "../storage-BUlr2J4R.js";
6
6
  import { Router as j, createRouter as M } from "./router.js";
7
7
  export { e as ACCENT_PALETTES, S as ApiClient, t as CM_ICON_PATHS, n as COLOR_MODES, r as FONT_STACKS, i as ICON_SETS, a as ICON_USAGES, T as KeybindingManager, j as Router, w as SSEManager, A as StorageManager, o as THEME_DEFAULT, s as THEME_LS_KEY, c as THEME_PRESETS, l as _resetCache, u as applyTheme, d as bootstrapTheme, C as createApiClient, M as createRouter, f as defaultTheme, p as ensureGoogleFont, m as findActivePresetId, h as getTheme, g as loadTheme, _ as resetTheme, v as saveTheme, y as setThemeFull, b as setThemePartial, O as storageGet, k as storageHas, D as storageRemove, E as storageSet, x as teardownTheme };
@@ -1,2 +1,2 @@
1
- import { n as e } from "../sse-D0HLjufB.js";
1
+ import { n as e } from "../sse-DCaj9UFJ.js";
2
2
  export { e as useSSE };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../sse-D0HLjufB.js";
1
+ import { n as e, t } from "../sse-DCaj9UFJ.js";
2
2
  export { t as SSEManager, e as useSSE };
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/services/theme-engine/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,OAAO,KAAK,EAAa,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/C,eAAO,MAAM,YAAY,gBAAgB,CAAA;AAiCzC,wBAAgB,SAAS,IAAI,KAAK,CAajC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAS5C;AAWD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CA0E7C;AAQD,wBAAgB,QAAQ,IAAI,KAAK,CAKhC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAK5D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAIhD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAOvD;AAED,wBAAgB,UAAU,IAAI,KAAK,CAElC;AASD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAuCrC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,oEAAoE;AACpE,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/services/theme-engine/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,OAAO,KAAK,EAAa,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/C,eAAO,MAAM,YAAY,gBAAgB,CAAA;AAiCzC,wBAAgB,SAAS,IAAI,KAAK,CAajC;AAcD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAU5C;AAWD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAuF7C;AAQD,wBAAgB,QAAQ,IAAI,KAAK,CAKhC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAK5D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAIhD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAOvD;AAED,wBAAgB,UAAU,IAAI,KAAK,CAElC;AASD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAuCrC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,oEAAoE;AACpE,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/services/theme-engine/fonts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEhD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA8CjD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAgB1D"}
1
+ {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/services/theme-engine/fonts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEhD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA8CjD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAoB1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/services/theme-engine/icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE5D,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CA8ChD,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBhD,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,WAAW,EAAE,SAAS,EAiGlC,CAAA"}
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/services/theme-engine/icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE5D,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CA8ChD,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqFhD,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,WAAW,EAAE,SAAS,EAiGlC,CAAA"}
@@ -28,11 +28,11 @@ var t = {
28
28
  label: "Monokai",
29
29
  icon: "Code2",
30
30
  swatch: [
31
- "#0a0a0a",
32
- "#1a1a1a",
33
- "#272822"
31
+ "#272822",
32
+ "#3e3d32",
33
+ "#49483e"
34
34
  ],
35
- surfaceTint: "255, 255, 255"
35
+ surfaceTint: "248, 248, 242"
36
36
  },
37
37
  glass: {
38
38
  id: "glass",
@@ -146,7 +146,9 @@ function i(e) {
146
146
  let t = `cm-gfont-${e}`;
147
147
  if (document.getElementById(t)) return;
148
148
  let n = document.createElement("link");
149
- n.id = t, n.rel = "stylesheet", n.href = "https://fonts.googleapis.com/css2?" + e.split("|").map((e) => `family=${e}`).join("&") + "&display=swap", document.head.appendChild(n);
149
+ n.id = t, n.rel = "stylesheet", n.href = "https://fonts.googleapis.com/css2?" + e.split("|").map((e) => `family=${e}`).join("&") + "&display=swap", n.onerror = () => {
150
+ n.remove();
151
+ }, document.head.appendChild(n);
150
152
  }
151
153
  //#endregion
152
154
  //#region src/services/theme-engine/icons.ts
@@ -199,18 +201,62 @@ var a = {
199
201
  }, o = {
200
202
  Shield: "M12 2l9 4-3 11-6 5-6-5-3-11z M12 7v10 M7.5 10l9 4 M16.5 10l-9 4",
201
203
  ShieldCheck: "M12 2l9 4-3 11-6 5-6-5-3-11z M8.5 12l3 3 4-5",
202
- Crosshair: "M12 12m-9 0a9 9 0 1 0 18 0 9 9 0 1 0-18 0 M12 12m-5 0a5 5 0 1 0 10 0 5 5 0 1 0-10 0 M22 12h-2 M4 12H2 M12 4V2 M12 22v-2 M12 12v.01",
204
+ Crosshair: "M12 2l9 5v10l-9 5-9-5V7z M12 7l5 5-5 5-5-5z M22 12h-2 M4 12H2 M12 4V2 M12 22v-2 M12 12v.01",
205
+ Target: "M12 2l9 5v10l-9 5-9-5V7z M12 7l5 5-5 5-5-5z M12 10l2 2-2 2-2-2z",
206
+ Lock: "M5 11h14v10H5z M8 11V7l4-5 4 5v4 M12 15l1 2h-2z",
207
+ KeyRound: "M16 2l5 5-3 3-2-1-2 2-1-1-2 2H9v-2l7-8z M9 13v4h3",
208
+ Eye: "M2 12l4-6h12l4 6-4 6H6z M12 9l3 3-3 3-3-3z",
209
+ CircleCheck: "M12 2l9 5v10l-9 5-9-5V7z M9 12l2 2 4-4",
210
+ CircleX: "M12 2l9 5v10l-9 5-9-5V7z M9 9l6 6 M15 9l-6 6",
211
+ CircleAlert: "M12 2l9 5v10l-9 5-9-5V7z M12 8v5 M12 16h.01",
212
+ TriangleAlert: "M12 2l10 18H2z M12 9v5 M12 17h.01",
203
213
  Bug: "M12 3l4 5h-8z M12 8v13 M5 12l-2 2 2 2 M19 12l2 2-2 2 M8 21h8",
214
+ Skull: "M12 3l8 7v6l-3 3v3h-2v-3h-2v3h-2v-3h-2v3H7v-3l-3-3v-6z M9 12h.01 M15 12h.01",
215
+ Radar: "M12 2l10 10-10 10L2 12z M12 7l5 5-5 5-5-5z M12 12v.01",
216
+ Siren: "M7 18l3-6h4l3 6z M12 2v4 M5 7l2 3 M19 7l-2 3 M4 21h16",
204
217
  Database: "M4 4h16v5H4z M4 9.5h16v5H4z M4 15h16v5H4z M9 6.5h.01 M9 12h.01 M9 17.5h.01",
205
- Plug: "M12 2l4 4-4 4-4-4z M12 10v4 M9 14h6v3a3 3 0 0 1-3 3 3 3 0 0 1-3-3z",
218
+ Server: "M3 3h18v7H3z M3 14h18v7H3z M7 6.5h.01 M7 17.5h.01 M17 6.5h-4 M17 17.5h-4",
219
+ Network: "M9 2h6v5H9z M3 17h6v5H3z M15 17h6v5h-6z M12 7v4 M6 17v-3l6-3 6 3v3",
220
+ Globe: "M12 2l9 5v10l-9 5-9-5V7z M12 2v20 M3 7l9 5 9-5 M3 17l9-5 9 5",
221
+ Search: "M11 4l5 3v6l-5 3-5-3V7z M20 21l-4-4",
222
+ Plus: "M12 5v14 M5 12h14",
223
+ X: "M6 6l12 12 M18 6L6 18",
224
+ ChevronDown: "M5 9l7 7 7-7",
225
+ ChevronRight: "M9 5l7 7-7 7",
226
+ Maximize2: "M15 3h6v6 M3 15v6h6 M21 3l-7 7 M3 21l7-7",
227
+ ArrowUpRight: "M7 7h10v10 M7 17L17 7",
228
+ Download: "M12 3v13 M6 11l6 6 6-6 M4 21h16",
229
+ RefreshCw: "M4 8h4V4 M20 16h-4v4 M8 4l8 0 4 4 M16 20l-8 0-4-4",
230
+ LogOut: "M14 3h5v18h-5 M3 12h12 M11 8l4 4-4 4",
231
+ PanelLeftClose: "M3 3h18v18H3z M9 3v18 M16 15l-3-3 3-3",
232
+ Plug: "M12 2l4 4-4 4-4-4z M12 10v4 M9 14h6v3l-3 4-3-4z",
233
+ Workflow: "M3 3h6v6H3z M15 15h6v6h-6z M21 3h-6v6h6z M6 9v3l6 3 6-3V9",
234
+ GitBranch: "M6 3v12 M18 3v6 M6 18l3-3h6l3-3",
235
+ FileCode2: "M6 2h8l5 5v14H6V2z M14 2v5h5 M10 13l-2 2 2 2 M14 13l2 2-2 2",
236
+ FileText: "M6 2h8l5 5v14H6V2z M14 2v5h5 M9 13h6 M9 17h4",
237
+ Folder: "M2 7l2-4h7l2 2h7l2 2v13H2z",
238
+ BookOpen: "M2 3h8l2 2 2-2h8v16h-8l-2 2-2-2H2z M12 5v16",
239
+ Tag: "M2 4h9l10 8-6 6-10-8V4z M6 8h.01",
240
+ Package: "M12 2l9 5v10l-9 5-9-5V7z M12 12l9-5 M12 12v10 M12 12L3 7",
241
+ Boxes: "M2 7l5-3 5 3v6l-5 3-5-3z M12 7l5-3 5 3v6l-5 3-5-3z M7 13l5 3 5-3",
242
+ BarChart3: "M3 3v18h18 M8 21v-7 M13 21V8 M18 21v-4",
243
+ Gauge: "M4 19l4-7 4 2 4-9 4 3 M2 21h20",
244
+ ListFilter: "M2 5h20 M6 12h12 M9 19h6",
245
+ Grid3X3: "M2 2h20v20H2z M2 9h20 M2 16h20 M9 2v20 M16 2v20",
246
+ LayoutGrid: "M3 3h8v8H3z M13 3h8v8h-8z M3 13h8v8H3z M13 13h8v8h-8z",
247
+ Settings: "M12 2l1.5 2.6L16 4l.5 3 3 .5L19 10l2.6 1.5L20 14l1 3-3 1-1 3-3-1-1.5 2.6L11 20l-1 2-3-1L6 18l-3-1 1-3-2.6-1.5L4 11 2 9.5 5 8l-1-3 3-1z M12 9l3 3-3 3-3-3z",
248
+ Cog: "M12 2v2 M12 20v2 M4.93 4.93l1.41 1.41 M17.66 17.66l1.41 1.41 M2 12h2 M20 12h2 M4.93 19.07l1.41-1.41 M17.66 6.34l1.41-1.41 M12 8l4 4-4 4-4-4z",
249
+ Lightbulb: "M12 3l5 6-5 8-5-8z M9 18h6 M10 21h4",
206
250
  Sparkles: "M12 2l3 7 7 3-7 3-3 7-3-7-7-3 7-3z",
207
251
  Rocket: "M12 2l5 8h-3v8h-4v-8H7z M9 22h6",
208
- Settings: "M12 2l1.5 2.6L16 4l.5 3 3 .5L19 10l2.6 1.5L20 14l1 3-3 1-1 3-3-1-1.5 2.6L11 20l-1 2-3-1L6 18l-3-1 1-3-2.6-1.5L4 11 2 9.5 5 8l-1-3 3-1z M12 12m-3 0a3 3 0 1 0 6 0 3 3 0 1 0-6 0",
209
252
  Activity: "M2 12h4l3 8 3-16 3 8 3-4h4",
210
- Skull: "M12 3l8 7v6l-3 3v3h-2v-3h-2v3h-2v-3h-2v3H7v-3l-3-3v-6z M9 12h.01 M15 12h.01",
211
- Lightbulb: "M12 3l5 6-5 8-5-8z M9 18h6 M10 21h4",
212
- Target: "M12 12m-10 0a10 10 0 1 0 20 0 10 10 0 1 0-20 0 M12 12m-5 0a5 5 0 1 0 10 0 5 5 0 1 0-10 0 M12 7l3 3 M12 17l3-3",
213
- Globe: "M12 2l9 5v10l-9 5-9-5V7z M12 2v20 M3 7l9 5 9-5 M3 17l9-5 9 5"
253
+ Layers: "M12 2l10 5-10 5L2 7z M2 12l10 5 10-5 M2 17l10 5 10-5",
254
+ Sun: "M12 6l5 3v6l-5 3-5-3V9z M12 2v2 M12 20v2 M4 4l1.5 1.5 M18.5 18.5L20 20 M2 12h2 M20 12h2 M4 20l1.5-1.5 M18.5 5.5L20 4",
255
+ Clock: "M12 2l9 5v10l-9 5-9-5V7z M12 7v5l3 3",
256
+ History: "M12 2l9 5v10l-9 5-9-5V7z M12 7v5l3 2 M3 4l1 4h3",
257
+ Users: "M8 10l4 3-4 3V10z M14 7l4 3-4 3V7z M4 21v-2l4-2 4 2 4-2 4 2v2",
258
+ Building2: "M6 22V4l6-2 6 2v18 M2 22h20 M10 8h4 M10 12h4 M10 16h4",
259
+ Code2: "M8 4L2 12l6 8 M16 4l6 8-6 8"
214
260
  }, s = [
215
261
  {
216
262
  id: "nav.search",
@@ -497,44 +543,70 @@ function h() {
497
543
  }
498
544
  }
499
545
  function g(e) {
546
+ let i = Object.prototype.hasOwnProperty, o = e;
547
+ return i.call(t, o.mode) || (o = {
548
+ ...o,
549
+ mode: "dark"
550
+ }), i.call(n, o.accent) || (o = {
551
+ ...o,
552
+ accent: "orange"
553
+ }), i.call(r, o.font) || (o = {
554
+ ...o,
555
+ font: "inter"
556
+ }), i.call(a, o.iconSet) || (o = {
557
+ ...o,
558
+ iconSet: "lucide"
559
+ }), [
560
+ "compact",
561
+ "comfortable",
562
+ "cozy"
563
+ ].includes(o.density) || (o = {
564
+ ...o,
565
+ density: "comfortable"
566
+ }), o;
567
+ }
568
+ function _(e) {
569
+ let t = g(e);
500
570
  try {
501
- typeof localStorage < "u" && localStorage.setItem(d, JSON.stringify(e));
571
+ typeof localStorage < "u" && localStorage.setItem(d, JSON.stringify(t));
502
572
  } catch {}
503
- v(e);
573
+ y(t);
504
574
  }
505
- function _(e, t, n) {
575
+ function v(e, t, n) {
506
576
  return Number.isFinite(e) ? Math.max(t, Math.min(n, e)) : t;
507
577
  }
508
- function v(o) {
578
+ function y(o) {
509
579
  if (typeof document > "u") return;
510
580
  let s = document.documentElement, c = t[o.mode] ?? t.dark, l = n[o.accent] ?? n.orange, u = r[o.font] ?? r.inter, d = a[o.iconSet] ?? a.lucide, m = s.getAttribute("data-theme"), h = c.id;
511
581
  m === h ? s.setAttribute("data-theme", h) : e(h), o.accent === "orange" ? s.removeAttribute("data-accent") : s.setAttribute("data-accent", o.accent), s.setAttribute("data-density", o.density);
512
- let g = _(Number(o.transparency) || 0, 0, .3), v = c.surfaceTint;
513
- s.style.setProperty("--bg-glass", `rgba(${v}, ${(g * .5).toFixed(4)})`), s.style.setProperty("--bg-glass-2", `rgba(${v}, ${g.toFixed(4)})`), s.style.setProperty("--bg-glass-3", `rgba(${v}, ${(g * 1.75).toFixed(4)})`), s.style.setProperty("--brand", l.brand), s.style.setProperty("--brand-hot", l.hot), s.style.setProperty("--brand-soft", l.soft), s.style.setProperty("--accent-rgb", l.rgb);
514
- let y = _(Number(o.radius) || 0, 0, 32);
515
- s.style.setProperty("--radius-sm", `${y * .5}px`), s.style.setProperty("--radius-md", `${y}px`), s.style.setProperty("--radius-lg", `${y * 1.5}px`), s.style.setProperty("--radius-xl", `${y * 2}px`);
516
- let b = o.density === "compact" ? 32 : o.density === "cozy" ? 42 : 36;
517
- s.style.setProperty("--density-row", `${b}px`), i(u.google), s.style.setProperty("--font-display", u.display), s.style.setProperty("--font-mono", u.mono), s.setAttribute("data-icon-set", o.iconSet), s.style.setProperty("--icon-stroke-width", String(d.strokeWidth)), s.style.setProperty("--icon-linecap", d.linecap), s.style.setProperty("--icon-linejoin", d.linejoin);
582
+ let g = v(Number(o.transparency) || 0, 0, .3), _ = c.surfaceTint;
583
+ s.style.setProperty("--bg-glass", `rgba(${_}, ${(g * .5).toFixed(4)})`), s.style.setProperty("--bg-glass-2", `rgba(${_}, ${g.toFixed(4)})`), s.style.setProperty("--bg-glass-3", `rgba(${_}, ${(g * 1.75).toFixed(4)})`);
584
+ let y = o.mode === "monokai", b = y && o.accent === "emerald" ? "#a6e22e" : l.brand, x = y && o.accent === "emerald" ? "#b8e85b" : l.hot, S = y && o.accent === "emerald" ? "rgba(166,226,46,0.12)" : l.soft, C = y && o.accent === "emerald" ? "166,226,46" : l.rgb;
585
+ s.style.setProperty("--brand", b), s.style.setProperty("--brand-hot", x), s.style.setProperty("--brand-soft", S), s.style.setProperty("--accent-rgb", C);
586
+ let w = v(Number(o.radius) || 0, 0, 32);
587
+ s.style.setProperty("--radius-sm", `${w * .5}px`), s.style.setProperty("--radius-md", `${w}px`), s.style.setProperty("--radius-lg", `${w * 1.5}px`), s.style.setProperty("--radius-xl", `${w * 2}px`);
588
+ let T = o.density === "compact", E = o.density === "cozy", D = T ? 32 : E ? 42 : 36;
589
+ s.style.setProperty("--density-row", `${D}px`), s.style.setProperty("--density-padding-y", T ? "0.375rem" : E ? "0.75rem" : "0.55rem"), s.style.setProperty("--density-padding-x", T ? "0.5rem" : E ? "1rem" : "0.75rem"), s.style.setProperty("--density-gap", T ? "0.25rem" : E ? "0.625rem" : "0.5rem"), s.style.setProperty("--density-section-gap", T ? "0.5rem" : E ? "1.25rem" : "1rem"), s.style.setProperty("--density-font", T ? "0.8125rem" : E ? "0.9375rem" : "0.875rem"), s.style.setProperty("--density-icon", T ? "1.75rem" : E ? "2.5rem" : "2.25rem"), i(u.google), s.style.setProperty("--font-display", u.display), s.style.setProperty("--font-mono", u.mono), s.setAttribute("data-icon-set", o.iconSet), s.style.setProperty("--icon-stroke-width", String(d.strokeWidth)), s.style.setProperty("--icon-linecap", d.linecap), s.style.setProperty("--icon-linejoin", d.linejoin);
518
590
  try {
519
591
  typeof localStorage < "u" && (localStorage.setItem(f, String(o.transparency)), localStorage.setItem(p, o.density));
520
592
  } catch {}
521
593
  document.dispatchEvent(new CustomEvent("cm:theme-change", { detail: o }));
522
594
  }
523
- var y = null;
524
- function b() {
525
- return y ||= h(), y;
595
+ var b = null;
596
+ function x() {
597
+ return b ||= h(), b;
526
598
  }
527
- function x(e) {
599
+ function S(e) {
528
600
  let t = {
529
- ...b(),
601
+ ...x(),
530
602
  ...e
531
603
  };
532
- return y = t, g(t), t;
533
- }
534
- function S(e) {
535
- return y = e, g(e), e;
604
+ return b = t, _(t), t;
536
605
  }
537
606
  function C(e) {
607
+ return b = e, _(e), e;
608
+ }
609
+ function w(e) {
538
610
  for (let t of c) {
539
611
  let n = {
540
612
  ...t.theme,
@@ -547,39 +619,39 @@ function C(e) {
547
619
  }
548
620
  return "custom";
549
621
  }
550
- function w() {
551
- return S(u());
622
+ function T() {
623
+ return C(u());
552
624
  }
553
- var T = !1, E = null;
554
- function D() {
555
- if (!(typeof document > "u") && !T) {
556
- T = !0;
625
+ var E = !1, D = null;
626
+ function O() {
627
+ if (!(typeof document > "u") && !E) {
628
+ E = !0;
557
629
  try {
558
- v(b());
630
+ y(x());
559
631
  } catch {}
560
632
  try {
561
- E = new MutationObserver((e) => {
633
+ D = new MutationObserver((e) => {
562
634
  for (let t of e) if (t.type === "attributes" && t.attributeName === "data-theme") {
563
635
  let e = document.documentElement.getAttribute("data-theme");
564
- (e === "dark" || e === "light" || e === "monokai" || e === "glass") && y && y.mode !== e && (y = {
565
- ...y,
636
+ (e === "dark" || e === "light" || e === "monokai" || e === "glass") && b && b.mode !== e && (b = {
637
+ ...b,
566
638
  mode: e
567
- }, document.dispatchEvent(new CustomEvent("cm:theme-change", { detail: y })));
639
+ }, document.dispatchEvent(new CustomEvent("cm:theme-change", { detail: b })));
568
640
  }
569
- }), E.observe(document.documentElement, {
641
+ }), D.observe(document.documentElement, {
570
642
  attributes: !0,
571
643
  attributeFilter: ["data-theme"]
572
644
  });
573
645
  } catch {}
574
646
  }
575
647
  }
576
- function O() {
577
- E &&= (E.disconnect(), null), T = !1;
578
- }
579
648
  function k() {
580
- y = null;
649
+ D &&= (D.disconnect(), null), E = !1;
650
+ }
651
+ function A() {
652
+ b = null;
581
653
  }
582
654
  //#endregion
583
- export { n as ACCENT_PALETTES, o as CM_ICON_PATHS, t as COLOR_MODES, r as FONT_STACKS, a as ICON_SETS, s as ICON_USAGES, l as THEME_DEFAULT, d as THEME_LS_KEY, c as THEME_PRESETS, k as _resetCache, v as applyTheme, D as bootstrapTheme, u as defaultTheme, i as ensureGoogleFont, C as findActivePresetId, b as getTheme, h as loadTheme, w as resetTheme, g as saveTheme, S as setThemeFull, x as setThemePartial, O as teardownTheme };
655
+ export { n as ACCENT_PALETTES, o as CM_ICON_PATHS, t as COLOR_MODES, r as FONT_STACKS, a as ICON_SETS, s as ICON_USAGES, l as THEME_DEFAULT, d as THEME_LS_KEY, c as THEME_PRESETS, A as _resetCache, y as applyTheme, O as bootstrapTheme, u as defaultTheme, i as ensureGoogleFont, w as findActivePresetId, x as getTheme, h as loadTheme, T as resetTheme, _ as saveTheme, C as setThemeFull, S as setThemePartial, k as teardownTheme };
584
656
 
585
657
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/services/theme-engine/palettes.ts","../../../src/services/theme-engine/fonts.ts","../../../src/services/theme-engine/icons.ts","../../../src/services/theme-engine/presets.ts","../../../src/services/theme-engine/engine.ts"],"sourcesContent":["/**\n * Color modes + accent palettes for the theme engine.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport type { AccentId, AccentPalette, ColorMode, ColorModeMeta } from './types'\n\nexport const COLOR_MODES: Record<ColorMode, ColorModeMeta> = {\n dark: {\n id: 'dark',\n label: 'Dark',\n icon: 'Moon',\n swatch: ['#0b0f17', '#111827', '#161f31'],\n surfaceTint: '255, 255, 255',\n },\n light: {\n id: 'light',\n label: 'Light',\n icon: 'Sun',\n swatch: ['#ffffff', '#f4f5f8', '#e4e7ee'],\n surfaceTint: '15, 23, 42',\n },\n monokai: {\n id: 'monokai',\n label: 'Monokai',\n icon: 'Code2',\n swatch: ['#0a0a0a', '#1a1a1a', '#272822'],\n surfaceTint: '255, 255, 255',\n },\n glass: {\n id: 'glass',\n label: 'Glass',\n icon: 'Layers',\n swatch: ['#171a26', '#202435', '#2a2f44'],\n surfaceTint: '255, 255, 255',\n },\n}\n\nexport const ACCENT_PALETTES: Record<AccentId, AccentPalette> = {\n orange: {\n id: 'orange',\n label: 'Orange',\n brand: '#ff7a00',\n hot: '#ff9233',\n soft: 'rgba(255,122,0,0.10)',\n rgb: '255,122,0',\n },\n cyan: {\n id: 'cyan',\n label: 'Cyan',\n brand: '#06b6d4',\n hot: '#22d3ee',\n soft: 'rgba(6,182,212,0.10)',\n rgb: '6,182,212',\n },\n violet: {\n id: 'violet',\n label: 'Violet',\n brand: '#8b5cf6',\n hot: '#a78bfa',\n soft: 'rgba(139,92,246,0.10)',\n rgb: '139,92,246',\n },\n rose: {\n id: 'rose',\n label: 'Rose',\n brand: '#ef4444',\n hot: '#f87171',\n soft: 'rgba(239,68,68,0.10)',\n rgb: '239,68,68',\n },\n emerald: {\n id: 'emerald',\n label: 'Emerald',\n brand: '#10b981',\n hot: '#34d399',\n soft: 'rgba(16,185,129,0.10)',\n rgb: '16,185,129',\n },\n amber: {\n id: 'amber',\n label: 'Amber',\n brand: '#f59e0b',\n hot: '#fbbf24',\n soft: 'rgba(245,158,11,0.10)',\n rgb: '245,158,11',\n },\n}\n","/**\n * Font stacks + Google Fonts on-demand loader for the theme engine.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport type { FontId, FontStack } from './types'\n\nexport const FONT_STACKS: Record<FontId, FontStack> = {\n inter: {\n id: 'inter',\n label: 'Inter',\n sample: 'Aa Bb Cc 123',\n description: 'Default — neutral, professional',\n display: \"'Inter', system-ui, -apple-system, sans-serif\",\n mono: \"'IBM Plex Mono', ui-monospace, 'SF Mono', Menlo, monospace\",\n google: 'Inter:wght@400;500;600;700|IBM+Plex+Mono:wght@400;500;600',\n },\n sora: {\n id: 'sora',\n label: 'Sora',\n sample: 'Aa Bb Cc 123',\n description: 'Geometric, modern',\n display: \"'Sora', system-ui, sans-serif\",\n mono: \"'JetBrains Mono', ui-monospace, monospace\",\n google: 'Sora:wght@400;500;600;700|JetBrains+Mono:wght@400;500;600',\n },\n roboto: {\n id: 'roboto',\n label: 'Roboto',\n sample: 'Aa Bb Cc 123',\n description: 'Friendly, classic web',\n display: \"'Roboto', system-ui, sans-serif\",\n mono: \"'Roboto Mono', ui-monospace, monospace\",\n google: 'Roboto:wght@400;500;700|Roboto+Mono:wght@400;500;600',\n },\n jetbrainsMono: {\n id: 'jetbrainsMono',\n label: 'JetBrains Mono',\n sample: 'Aa Bb Cc 123',\n description: 'Mono everywhere — IDE feel',\n display: \"'JetBrains Mono', ui-monospace, monospace\",\n mono: \"'JetBrains Mono', ui-monospace, monospace\",\n google: 'JetBrains+Mono:wght@400;500;600;700',\n },\n system: {\n id: 'system',\n label: 'System',\n sample: 'Aa Bb Cc 123',\n description: 'Use OS native fonts',\n display: 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\n mono: 'ui-monospace, \"SF Mono\", Menlo, monospace',\n google: null,\n },\n}\n\n/**\n * Idempotent injector for a Google Fonts `<link>` tag. Safe to call repeatedly\n * with the same `spec` — returns early if a `<link id=\"cm-gfont-${spec}\">`\n * already exists. Returns early in non-DOM environments (SSR-safe).\n */\nexport function ensureGoogleFont(spec: string | null): void {\n if (!spec) return\n if (typeof document === 'undefined') return\n const id = `cm-gfont-${spec}`\n if (document.getElementById(id)) return\n const link = document.createElement('link')\n link.id = id\n link.rel = 'stylesheet'\n link.href =\n 'https://fonts.googleapis.com/css2?' +\n spec\n .split('|')\n .map(s => `family=${s}`)\n .join('&') +\n '&display=swap'\n document.head.appendChild(link)\n}\n","/**\n * Icon sets, brand glyph paths, and semantic icon-usage slots for the theme engine.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport type { IconSet, IconSetId, IconUsage } from './types'\n\nexport const ICON_SETS: Record<IconSetId, IconSet> = {\n lucide: {\n id: 'lucide',\n label: 'Lucide',\n description: 'Default — clean 2px stroke',\n strokeWidth: 2,\n linecap: 'round',\n linejoin: 'round',\n brand: false,\n },\n heroicons: {\n id: 'heroicons',\n label: 'Heroicons',\n description: 'Heavier 2.4px stroke',\n strokeWidth: 2.4,\n linecap: 'round',\n linejoin: 'round',\n brand: false,\n },\n phosphor: {\n id: 'phosphor',\n label: 'Phosphor',\n description: 'Lighter 1.5px stroke',\n strokeWidth: 1.5,\n linecap: 'round',\n linejoin: 'round',\n brand: false,\n },\n material: {\n id: 'material',\n label: 'Material',\n description: 'Square caps, geometric',\n strokeWidth: 2,\n linecap: 'square',\n linejoin: 'miter',\n brand: false,\n },\n countermeasure: {\n id: 'countermeasure',\n label: 'CounterMeasure',\n description: 'Brand set — bespoke marks for security',\n strokeWidth: 1.75,\n linecap: 'round',\n linejoin: 'round',\n brand: true,\n },\n}\n\n/** Brand glyph paths — used when `iconSet === 'countermeasure'`. */\nexport const CM_ICON_PATHS: Record<string, string> = {\n Shield: 'M12 2l9 4-3 11-6 5-6-5-3-11z M12 7v10 M7.5 10l9 4 M16.5 10l-9 4',\n ShieldCheck: 'M12 2l9 4-3 11-6 5-6-5-3-11z M8.5 12l3 3 4-5',\n Crosshair:\n 'M12 12m-9 0a9 9 0 1 0 18 0 9 9 0 1 0-18 0 M12 12m-5 0a5 5 0 1 0 10 0 5 5 0 1 0-10 0 M22 12h-2 M4 12H2 M12 4V2 M12 22v-2 M12 12v.01',\n Bug: 'M12 3l4 5h-8z M12 8v13 M5 12l-2 2 2 2 M19 12l2 2-2 2 M8 21h8',\n Database: 'M4 4h16v5H4z M4 9.5h16v5H4z M4 15h16v5H4z M9 6.5h.01 M9 12h.01 M9 17.5h.01',\n Plug: 'M12 2l4 4-4 4-4-4z M12 10v4 M9 14h6v3a3 3 0 0 1-3 3 3 3 0 0 1-3-3z',\n Sparkles: 'M12 2l3 7 7 3-7 3-3 7-3-7-7-3 7-3z',\n Rocket: 'M12 2l5 8h-3v8h-4v-8H7z M9 22h6',\n Settings:\n 'M12 2l1.5 2.6L16 4l.5 3 3 .5L19 10l2.6 1.5L20 14l1 3-3 1-1 3-3-1-1.5 2.6L11 20l-1 2-3-1L6 18l-3-1 1-3-2.6-1.5L4 11 2 9.5 5 8l-1-3 3-1z M12 12m-3 0a3 3 0 1 0 6 0 3 3 0 1 0-6 0',\n Activity: 'M2 12h4l3 8 3-16 3 8 3-4h4',\n Skull: 'M12 3l8 7v6l-3 3v3h-2v-3h-2v3h-2v-3h-2v3H7v-3l-3-3v-6z M9 12h.01 M15 12h.01',\n Lightbulb: 'M12 3l5 6-5 8-5-8z M9 18h6 M10 21h4',\n Target:\n 'M12 12m-10 0a10 10 0 1 0 20 0 10 10 0 1 0-20 0 M12 12m-5 0a5 5 0 1 0 10 0 5 5 0 1 0-10 0 M12 7l3 3 M12 17l3-3',\n Globe: 'M12 2l9 5v10l-9 5-9-5V7z M12 2v20 M3 7l9 5 9-5 M3 17l9-5 9 5',\n}\n\n/** Semantic icon-usage slots driving the per-icon override matrix. */\nexport const ICON_USAGES: IconUsage[] = [\n {\n id: 'nav.search',\n label: 'Search',\n defaultIcon: 'Search',\n alternates: ['Search', 'Crosshair', 'Target'],\n },\n {\n id: 'nav.notifications',\n label: 'Notifications',\n defaultIcon: 'Bell',\n alternates: ['Bell', 'AlertCircle', 'Activity'],\n },\n {\n id: 'nav.help',\n label: 'Help',\n defaultIcon: 'HelpCircle',\n alternates: ['HelpCircle', 'BookOpen', 'MessageSquare'],\n },\n {\n id: 'nav.feedback',\n label: 'Feedback',\n defaultIcon: 'MessageSquare',\n alternates: ['MessageSquare', 'Send', 'Mic'],\n },\n {\n id: 'product.detection',\n label: 'Detection',\n defaultIcon: 'Shield',\n alternates: ['Shield', 'ShieldCheck', 'Bug', 'AlertTriangle'],\n },\n {\n id: 'product.coverage',\n label: 'Coverage',\n defaultIcon: 'Crosshair',\n alternates: ['Crosshair', 'Target', 'Grid3X3'],\n },\n {\n id: 'product.intel',\n label: 'Threat intel',\n defaultIcon: 'Skull',\n alternates: ['Skull', 'Bug', 'AlertTriangle'],\n },\n {\n id: 'product.connectors',\n label: 'Connectors',\n defaultIcon: 'Plug',\n alternates: ['Plug', 'Network', 'Workflow'],\n },\n {\n id: 'product.detections',\n label: 'Detection library',\n defaultIcon: 'FileCode',\n alternates: ['FileCode', 'BookOpen', 'Files'],\n },\n {\n id: 'product.opps',\n label: 'Opportunities',\n defaultIcon: 'Lightbulb',\n alternates: ['Lightbulb', 'Sparkles', 'TrendingUp'],\n },\n {\n id: 'product.studio',\n label: 'Studio (IDE)',\n defaultIcon: 'Terminal',\n alternates: ['Terminal', 'Code2', 'Code'],\n },\n {\n id: 'system.settings',\n label: 'Settings',\n defaultIcon: 'Settings',\n alternates: ['Settings', 'SlidersHorizontal', 'Wrench'],\n },\n {\n id: 'system.user',\n label: 'User',\n defaultIcon: 'UserCheck',\n alternates: ['UserCheck', 'UserCog', 'Users'],\n },\n {\n id: 'system.logout',\n label: 'Sign out',\n defaultIcon: 'LogOut',\n alternates: ['LogOut', 'LogIn'],\n },\n {\n id: 'state.success',\n label: 'Success',\n defaultIcon: 'CheckCircle',\n alternates: ['CheckCircle', 'Check'],\n },\n {\n id: 'state.warning',\n label: 'Warning',\n defaultIcon: 'AlertTriangle',\n alternates: ['AlertTriangle', 'AlertCircle'],\n },\n]\n","/**\n * Curated theme presets shipped with the design system.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport type { Theme, ThemePreset } from './types'\n\nexport const THEME_PRESETS: ThemePreset[] = [\n {\n id: 'mission-control',\n label: 'Mission Control',\n description: 'CounterMeasure default — dark, restrained, orange accent.',\n theme: {\n mode: 'dark',\n accent: 'orange',\n font: 'inter',\n iconSet: 'lucide',\n density: 'comfortable',\n radius: 8,\n transparency: 0.04,\n iconOverrides: {},\n },\n },\n {\n id: 'glass-violet',\n label: 'Frost & Violet',\n description: 'Glassy surfaces with a violet glow. Operations + intel.',\n theme: {\n mode: 'glass',\n accent: 'violet',\n font: 'sora',\n iconSet: 'phosphor',\n density: 'comfortable',\n radius: 12,\n transparency: 0.1,\n iconOverrides: {},\n },\n },\n {\n id: 'monokai',\n label: 'Monokai',\n description: 'Pure black, IDE-like. For detection engineers.',\n theme: {\n mode: 'monokai',\n accent: 'emerald',\n font: 'jetbrainsMono',\n iconSet: 'countermeasure',\n density: 'compact',\n radius: 4,\n transparency: 0.04,\n iconOverrides: {},\n },\n },\n {\n id: 'cyan-mint',\n label: 'Cyan Mint',\n description: 'Cooler dark surfaces, cyan accent — daytime ops.',\n theme: {\n mode: 'dark',\n accent: 'cyan',\n font: 'inter',\n iconSet: 'heroicons',\n density: 'comfortable',\n radius: 10,\n transparency: 0.05,\n iconOverrides: {},\n },\n },\n {\n id: 'rose-soc',\n label: 'Rose SOC',\n description: 'High-energy red accent for incident-response shifts.',\n theme: {\n mode: 'dark',\n accent: 'rose',\n font: 'inter',\n iconSet: 'material',\n density: 'compact',\n radius: 6,\n transparency: 0.04,\n iconOverrides: {},\n },\n },\n {\n id: 'paper-light',\n label: 'Paper',\n description: 'Light mode for printouts, executives, daylight.',\n theme: {\n mode: 'light',\n accent: 'orange',\n font: 'inter',\n iconSet: 'lucide',\n density: 'comfortable',\n radius: 8,\n transparency: 0.03,\n iconOverrides: {},\n },\n },\n]\n\nexport const THEME_DEFAULT = 'mission-control'\n\nexport function defaultTheme(): Theme {\n const preset = THEME_PRESETS.find(p => p.id === THEME_DEFAULT)\n if (!preset) {\n throw new Error(`THEME_DEFAULT preset \"${THEME_DEFAULT}\" not found`)\n }\n return JSON.parse(JSON.stringify(preset.theme)) as Theme\n}\n","/**\n * Theme engine — load / save / apply pipeline.\n *\n * Public API:\n * loadTheme() read theme from localStorage (with legacy migration)\n * saveTheme(theme) persist + apply\n * applyTheme(theme) write CSS variables + data-* attrs to :root\n * getTheme() sync read of in-memory cache\n * setThemePartial(patch) merge + persist + apply\n * setThemeFull(theme) replace + persist + apply\n * findActivePresetId(t) match a Theme to a preset id (or 'custom')\n * resetTheme() reset to THEME_DEFAULT\n * bootstrapTheme() explicit start-up call (apply persisted theme +\n * install a MutationObserver for legacy data-theme\n * sync). Idempotent — safe to call multiple times.\n *\n * The engine emits a `cm:theme-change` CustomEvent on `document` on every\n * apply. Components subscribe to that event to refresh their state.\n *\n * SSR-safe: every DOM access is guarded by `typeof document !== 'undefined'`,\n * so importing this module in a server build does nothing observable.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport { setTheme as setUiTheme } from '../../ui'\nimport type { ResolvedTheme } from '../../ui'\n\nimport { ACCENT_PALETTES, COLOR_MODES } from './palettes'\nimport { FONT_STACKS, ensureGoogleFont } from './fonts'\nimport { ICON_SETS } from './icons'\nimport { THEME_PRESETS, defaultTheme } from './presets'\nimport type { ColorMode, Theme } from './types'\n\nexport const THEME_LS_KEY = 'cm-theme-v1'\n\nconst LEGACY_GLASS_KEY = 'preview:glass-level'\nconst LEGACY_DENSITY_KEY = 'preview:density'\n\n// ---------------------------------------------------------------------------\n// Persistence (with one-shot legacy migration)\n// ---------------------------------------------------------------------------\n\nfunction readLegacyMigration(base: Theme): Theme {\n let migrated = base\n try {\n const glassRaw = localStorage.getItem(LEGACY_GLASS_KEY)\n if (glassRaw !== null) {\n const n = Number(glassRaw)\n if (Number.isFinite(n)) {\n migrated = { ...migrated, transparency: Math.max(0, Math.min(0.2, n)) }\n }\n }\n } catch {\n /* ignore */\n }\n try {\n const density = localStorage.getItem(LEGACY_DENSITY_KEY)\n if (density === 'compact' || density === 'comfortable' || density === 'cozy') {\n migrated = { ...migrated, density }\n }\n } catch {\n /* ignore */\n }\n return migrated\n}\n\nexport function loadTheme(): Theme {\n if (typeof localStorage === 'undefined') return defaultTheme()\n try {\n const raw = localStorage.getItem(THEME_LS_KEY)\n if (!raw) {\n // First-load migration: try to honor any legacy preview keys.\n return readLegacyMigration(defaultTheme())\n }\n const parsed = JSON.parse(raw) as Partial<Theme> | null\n return { ...defaultTheme(), ...(parsed ?? {}) }\n } catch {\n return defaultTheme()\n }\n}\n\nexport function saveTheme(theme: Theme): void {\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(THEME_LS_KEY, JSON.stringify(theme))\n }\n } catch {\n /* ignore */\n }\n applyTheme(theme)\n}\n\n// ---------------------------------------------------------------------------\n// Apply pipeline\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\n/**\n * Resolve a `Theme` into CSS variables + `data-*` attributes on `:root`.\n *\n * Returns silently in non-DOM environments (SSR-safe). Always emits a\n * `cm:theme-change` CustomEvent on `document` after applying.\n */\nexport function applyTheme(theme: Theme): void {\n if (typeof document === 'undefined') return\n const root = document.documentElement\n const mode = COLOR_MODES[theme.mode] ?? COLOR_MODES.dark\n const accent = ACCENT_PALETTES[theme.accent] ?? ACCENT_PALETTES.orange\n const font = FONT_STACKS[theme.font] ?? FONT_STACKS.inter\n const set = ICON_SETS[theme.iconSet] ?? ICON_SETS.lucide\n\n // 1) data-theme — surface palette via tokens.css\n const previous = root.getAttribute('data-theme')\n const next = mode.id as ResolvedTheme\n if (previous !== next) {\n setUiTheme(next)\n } else {\n root.setAttribute('data-theme', next)\n }\n\n // 2) data-accent — emit the per-accent var block from tokens.css\n if (theme.accent === 'orange') {\n root.removeAttribute('data-accent')\n } else {\n root.setAttribute('data-accent', theme.accent)\n }\n\n // 3) data-density\n root.setAttribute('data-density', theme.density)\n\n // 4) Glass translucency derived from `transparency` (0..0.30)\n const t = clamp(Number(theme.transparency) || 0, 0, 0.3)\n const tint = mode.surfaceTint\n root.style.setProperty('--bg-glass', `rgba(${tint}, ${(t * 0.5).toFixed(4)})`)\n root.style.setProperty('--bg-glass-2', `rgba(${tint}, ${t.toFixed(4)})`)\n root.style.setProperty('--bg-glass-3', `rgba(${tint}, ${(t * 1.75).toFixed(4)})`)\n\n // 5) Brand / accent\n root.style.setProperty('--brand', accent.brand)\n root.style.setProperty('--brand-hot', accent.hot)\n root.style.setProperty('--brand-soft', accent.soft)\n root.style.setProperty('--accent-rgb', accent.rgb)\n\n // 6) Radius\n const r = clamp(Number(theme.radius) || 0, 0, 32)\n root.style.setProperty('--radius-sm', `${r * 0.5}px`)\n root.style.setProperty('--radius-md', `${r}px`)\n root.style.setProperty('--radius-lg', `${r * 1.5}px`)\n root.style.setProperty('--radius-xl', `${r * 2}px`)\n\n // 7) Density row height\n const rowHeight = theme.density === 'compact' ? 32 : theme.density === 'cozy' ? 42 : 36\n root.style.setProperty('--density-row', `${rowHeight}px`)\n\n // 8) Typography (lazy-load Google fonts, then write CSS vars)\n ensureGoogleFont(font.google)\n root.style.setProperty('--font-display', font.display)\n root.style.setProperty('--font-mono', font.mono)\n\n // 9) Icon set hooks\n root.setAttribute('data-icon-set', theme.iconSet)\n root.style.setProperty('--icon-stroke-width', String(set.strokeWidth))\n root.style.setProperty('--icon-linecap', set.linecap)\n root.style.setProperty('--icon-linejoin', set.linejoin)\n\n // Persist legacy keys for back-compat (existing components keep working).\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(LEGACY_GLASS_KEY, String(theme.transparency))\n localStorage.setItem(LEGACY_DENSITY_KEY, theme.density)\n }\n } catch {\n /* ignore */\n }\n\n // Broadcast\n document.dispatchEvent(new CustomEvent('cm:theme-change', { detail: theme }))\n}\n\n// ---------------------------------------------------------------------------\n// In-memory current state cache\n// ---------------------------------------------------------------------------\n\nlet cached: Theme | null = null\n\nexport function getTheme(): Theme {\n if (!cached) {\n cached = loadTheme()\n }\n return cached\n}\n\nexport function setThemePartial(patch: Partial<Theme>): Theme {\n const next = { ...getTheme(), ...patch }\n cached = next\n saveTheme(next)\n return next\n}\n\nexport function setThemeFull(theme: Theme): Theme {\n cached = theme\n saveTheme(theme)\n return theme\n}\n\nexport function findActivePresetId(theme: Theme): string {\n for (const preset of THEME_PRESETS) {\n const a = { ...preset.theme, iconOverrides: {} }\n const b = { ...theme, iconOverrides: {} }\n if (JSON.stringify(a) === JSON.stringify(b)) return preset.id\n }\n return 'custom'\n}\n\nexport function resetTheme(): Theme {\n return setThemeFull(defaultTheme())\n}\n\n// ---------------------------------------------------------------------------\n// Bootstrap (explicit, idempotent)\n// ---------------------------------------------------------------------------\n\nlet bootstrapped = false\nlet observer: MutationObserver | null = null\n\n/**\n * Apply the persisted theme to `:root` and install a MutationObserver that\n * keeps the in-memory cache in sync if some other code path flips\n * `data-theme` directly (e.g. legacy `ThemeSwitcher` / URL handlers).\n *\n * Must be called explicitly by the host app — the engine no longer\n * auto-applies on import so it does not clobber a host's existing theme.\n *\n * Idempotent — calling it twice is a no-op.\n */\nexport function bootstrapTheme(): void {\n if (typeof document === 'undefined') return\n if (bootstrapped) return\n bootstrapped = true\n\n try {\n applyTheme(getTheme())\n } catch {\n /* ignore — likely test env */\n }\n\n try {\n observer = new MutationObserver(mutations => {\n for (const m of mutations) {\n if (m.type !== 'attributes') continue\n if (m.attributeName === 'data-theme') {\n const current = document.documentElement.getAttribute('data-theme')\n if (\n (current === 'dark' ||\n current === 'light' ||\n current === 'monokai' ||\n current === 'glass') &&\n cached &&\n cached.mode !== current\n ) {\n cached = { ...cached, mode: current as ColorMode }\n // Re-broadcast so listeners (preview tile, switchers) refresh\n document.dispatchEvent(new CustomEvent('cm:theme-change', { detail: cached }))\n }\n }\n }\n })\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n })\n } catch {\n /* ignore */\n }\n}\n\n/**\n * Tear down the bootstrap-installed observer. Mostly useful for tests.\n */\nexport function teardownTheme(): void {\n if (observer) {\n observer.disconnect()\n observer = null\n }\n bootstrapped = false\n}\n\n/** @internal Reset the in-memory cache. Mostly useful for tests. */\nexport function _resetCache(): void {\n cached = null\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/services/theme-engine/palettes.ts","../../../src/services/theme-engine/fonts.ts","../../../src/services/theme-engine/icons.ts","../../../src/services/theme-engine/presets.ts","../../../src/services/theme-engine/engine.ts"],"sourcesContent":["/**\n * Color modes + accent palettes for the theme engine.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport type { AccentId, AccentPalette, ColorMode, ColorModeMeta } from './types'\n\nexport const COLOR_MODES: Record<ColorMode, ColorModeMeta> = {\n dark: {\n id: 'dark',\n label: 'Dark',\n icon: 'Moon',\n swatch: ['#0b0f17', '#111827', '#161f31'],\n surfaceTint: '255, 255, 255',\n },\n light: {\n id: 'light',\n label: 'Light',\n icon: 'Sun',\n swatch: ['#ffffff', '#f4f5f8', '#e4e7ee'],\n surfaceTint: '15, 23, 42',\n },\n monokai: {\n id: 'monokai',\n label: 'Monokai',\n icon: 'Code2',\n swatch: ['#272822', '#3e3d32', '#49483e'],\n surfaceTint: '248, 248, 242',\n },\n glass: {\n id: 'glass',\n label: 'Glass',\n icon: 'Layers',\n swatch: ['#171a26', '#202435', '#2a2f44'],\n surfaceTint: '255, 255, 255',\n },\n}\n\nexport const ACCENT_PALETTES: Record<AccentId, AccentPalette> = {\n orange: {\n id: 'orange',\n label: 'Orange',\n brand: '#ff7a00',\n hot: '#ff9233',\n soft: 'rgba(255,122,0,0.10)',\n rgb: '255,122,0',\n },\n cyan: {\n id: 'cyan',\n label: 'Cyan',\n brand: '#06b6d4',\n hot: '#22d3ee',\n soft: 'rgba(6,182,212,0.10)',\n rgb: '6,182,212',\n },\n violet: {\n id: 'violet',\n label: 'Violet',\n brand: '#8b5cf6',\n hot: '#a78bfa',\n soft: 'rgba(139,92,246,0.10)',\n rgb: '139,92,246',\n },\n rose: {\n id: 'rose',\n label: 'Rose',\n brand: '#ef4444',\n hot: '#f87171',\n soft: 'rgba(239,68,68,0.10)',\n rgb: '239,68,68',\n },\n emerald: {\n id: 'emerald',\n label: 'Emerald',\n brand: '#10b981',\n hot: '#34d399',\n soft: 'rgba(16,185,129,0.10)',\n rgb: '16,185,129',\n },\n amber: {\n id: 'amber',\n label: 'Amber',\n brand: '#f59e0b',\n hot: '#fbbf24',\n soft: 'rgba(245,158,11,0.10)',\n rgb: '245,158,11',\n },\n}\n","/**\n * Font stacks + Google Fonts on-demand loader for the theme engine.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport type { FontId, FontStack } from './types'\n\nexport const FONT_STACKS: Record<FontId, FontStack> = {\n inter: {\n id: 'inter',\n label: 'Inter',\n sample: 'Aa Bb Cc 123',\n description: 'Default — neutral, professional',\n display: \"'Inter', system-ui, -apple-system, sans-serif\",\n mono: \"'IBM Plex Mono', ui-monospace, 'SF Mono', Menlo, monospace\",\n google: 'Inter:wght@400;500;600;700|IBM+Plex+Mono:wght@400;500;600',\n },\n sora: {\n id: 'sora',\n label: 'Sora',\n sample: 'Aa Bb Cc 123',\n description: 'Geometric, modern',\n display: \"'Sora', system-ui, sans-serif\",\n mono: \"'JetBrains Mono', ui-monospace, monospace\",\n google: 'Sora:wght@400;500;600;700|JetBrains+Mono:wght@400;500;600',\n },\n roboto: {\n id: 'roboto',\n label: 'Roboto',\n sample: 'Aa Bb Cc 123',\n description: 'Friendly, classic web',\n display: \"'Roboto', system-ui, sans-serif\",\n mono: \"'Roboto Mono', ui-monospace, monospace\",\n google: 'Roboto:wght@400;500;700|Roboto+Mono:wght@400;500;600',\n },\n jetbrainsMono: {\n id: 'jetbrainsMono',\n label: 'JetBrains Mono',\n sample: 'Aa Bb Cc 123',\n description: 'Mono everywhere — IDE feel',\n display: \"'JetBrains Mono', ui-monospace, monospace\",\n mono: \"'JetBrains Mono', ui-monospace, monospace\",\n google: 'JetBrains+Mono:wght@400;500;600;700',\n },\n system: {\n id: 'system',\n label: 'System',\n sample: 'Aa Bb Cc 123',\n description: 'Use OS native fonts',\n display: 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\n mono: 'ui-monospace, \"SF Mono\", Menlo, monospace',\n google: null,\n },\n}\n\n/**\n * Idempotent injector for a Google Fonts `<link>` tag. Safe to call repeatedly\n * with the same `spec` — returns early if a `<link id=\"cm-gfont-${spec}\">`\n * already exists. Returns early in non-DOM environments (SSR-safe).\n */\nexport function ensureGoogleFont(spec: string | null): void {\n if (!spec) return\n if (typeof document === 'undefined') return\n const id = `cm-gfont-${spec}`\n if (document.getElementById(id)) return\n const link = document.createElement('link')\n link.id = id\n link.rel = 'stylesheet'\n link.href =\n 'https://fonts.googleapis.com/css2?' +\n spec\n .split('|')\n .map(s => `family=${s}`)\n .join('&') +\n '&display=swap'\n link.onerror = () => {\n link.remove()\n // Allow retry by removing the element so the ID check passes next time\n }\n document.head.appendChild(link)\n}\n","/**\n * Icon sets, brand glyph paths, and semantic icon-usage slots for the theme engine.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport type { IconSet, IconSetId, IconUsage } from './types'\n\nexport const ICON_SETS: Record<IconSetId, IconSet> = {\n lucide: {\n id: 'lucide',\n label: 'Lucide',\n description: 'Default — clean 2px stroke',\n strokeWidth: 2,\n linecap: 'round',\n linejoin: 'round',\n brand: false,\n },\n heroicons: {\n id: 'heroicons',\n label: 'Heroicons',\n description: 'Heavier 2.4px stroke',\n strokeWidth: 2.4,\n linecap: 'round',\n linejoin: 'round',\n brand: false,\n },\n phosphor: {\n id: 'phosphor',\n label: 'Phosphor',\n description: 'Lighter 1.5px stroke',\n strokeWidth: 1.5,\n linecap: 'round',\n linejoin: 'round',\n brand: false,\n },\n material: {\n id: 'material',\n label: 'Material',\n description: 'Square caps, geometric',\n strokeWidth: 2,\n linecap: 'square',\n linejoin: 'miter',\n brand: false,\n },\n countermeasure: {\n id: 'countermeasure',\n label: 'CounterMeasure',\n description: 'Brand set — bespoke marks for security',\n strokeWidth: 1.75,\n linecap: 'round',\n linejoin: 'round',\n brand: true,\n },\n}\n\n/** Brand glyph paths — used when `iconSet === 'countermeasure'`. */\nexport const CM_ICON_PATHS: Record<string, string> = {\n // Shields & security\n Shield: 'M12 2l9 4-3 11-6 5-6-5-3-11z M12 7v10 M7.5 10l9 4 M16.5 10l-9 4',\n ShieldCheck: 'M12 2l9 4-3 11-6 5-6-5-3-11z M8.5 12l3 3 4-5',\n Crosshair:\n 'M12 2l9 5v10l-9 5-9-5V7z M12 7l5 5-5 5-5-5z M22 12h-2 M4 12H2 M12 4V2 M12 22v-2 M12 12v.01',\n Target:\n 'M12 2l9 5v10l-9 5-9-5V7z M12 7l5 5-5 5-5-5z M12 10l2 2-2 2-2-2z',\n Lock: 'M5 11h14v10H5z M8 11V7l4-5 4 5v4 M12 15l1 2h-2z',\n KeyRound: 'M16 2l5 5-3 3-2-1-2 2-1-1-2 2H9v-2l7-8z M9 13v4h3',\n Eye: 'M2 12l4-6h12l4 6-4 6H6z M12 9l3 3-3 3-3-3z',\n\n // Status — hexagonal frames\n CircleCheck: 'M12 2l9 5v10l-9 5-9-5V7z M9 12l2 2 4-4',\n CircleX: 'M12 2l9 5v10l-9 5-9-5V7z M9 9l6 6 M15 9l-6 6',\n CircleAlert: 'M12 2l9 5v10l-9 5-9-5V7z M12 8v5 M12 16h.01',\n TriangleAlert: 'M12 2l10 18H2z M12 9v5 M12 17h.01',\n\n // Threat & intel\n Bug: 'M12 3l4 5h-8z M12 8v13 M5 12l-2 2 2 2 M19 12l2 2-2 2 M8 21h8',\n Skull: 'M12 3l8 7v6l-3 3v3h-2v-3h-2v3h-2v-3h-2v3H7v-3l-3-3v-6z M9 12h.01 M15 12h.01',\n Radar: 'M12 2l10 10-10 10L2 12z M12 7l5 5-5 5-5-5z M12 12v.01',\n Siren: 'M7 18l3-6h4l3 6z M12 2v4 M5 7l2 3 M19 7l-2 3 M4 21h16',\n\n // Data & infrastructure\n Database: 'M4 4h16v5H4z M4 9.5h16v5H4z M4 15h16v5H4z M9 6.5h.01 M9 12h.01 M9 17.5h.01',\n Server: 'M3 3h18v7H3z M3 14h18v7H3z M7 6.5h.01 M7 17.5h.01 M17 6.5h-4 M17 17.5h-4',\n Network: 'M9 2h6v5H9z M3 17h6v5H3z M15 17h6v5h-6z M12 7v4 M6 17v-3l6-3 6 3v3',\n Globe: 'M12 2l9 5v10l-9 5-9-5V7z M12 2v20 M3 7l9 5 9-5 M3 17l9-5 9 5',\n\n // Navigation & actions\n Search: 'M11 4l5 3v6l-5 3-5-3V7z M20 21l-4-4',\n Plus: 'M12 5v14 M5 12h14',\n X: 'M6 6l12 12 M18 6L6 18',\n ChevronDown: 'M5 9l7 7 7-7',\n ChevronRight: 'M9 5l7 7-7 7',\n Maximize2: 'M15 3h6v6 M3 15v6h6 M21 3l-7 7 M3 21l7-7',\n ArrowUpRight: 'M7 7h10v10 M7 17L17 7',\n Download: 'M12 3v13 M6 11l6 6 6-6 M4 21h16',\n RefreshCw: 'M4 8h4V4 M20 16h-4v4 M8 4l8 0 4 4 M16 20l-8 0-4-4',\n LogOut: 'M14 3h5v18h-5 M3 12h12 M11 8l4 4-4 4',\n PanelLeftClose: 'M3 3h18v18H3z M9 3v18 M16 15l-3-3 3-3',\n\n // Connectors & workflow\n Plug: 'M12 2l4 4-4 4-4-4z M12 10v4 M9 14h6v3l-3 4-3-4z',\n Workflow: 'M3 3h6v6H3z M15 15h6v6h-6z M21 3h-6v6h6z M6 9v3l6 3 6-3V9',\n GitBranch: 'M6 3v12 M18 3v6 M6 18l3-3h6l3-3',\n\n // Files & content\n FileCode2: 'M6 2h8l5 5v14H6V2z M14 2v5h5 M10 13l-2 2 2 2 M14 13l2 2-2 2',\n FileText: 'M6 2h8l5 5v14H6V2z M14 2v5h5 M9 13h6 M9 17h4',\n Folder: 'M2 7l2-4h7l2 2h7l2 2v13H2z',\n BookOpen: 'M2 3h8l2 2 2-2h8v16h-8l-2 2-2-2H2z M12 5v16',\n Tag: 'M2 4h9l10 8-6 6-10-8V4z M6 8h.01',\n Package: 'M12 2l9 5v10l-9 5-9-5V7z M12 12l9-5 M12 12v10 M12 12L3 7',\n Boxes: 'M2 7l5-3 5 3v6l-5 3-5-3z M12 7l5-3 5 3v6l-5 3-5-3z M7 13l5 3 5-3',\n\n // Analytics & data viz\n BarChart3: 'M3 3v18h18 M8 21v-7 M13 21V8 M18 21v-4',\n Gauge: 'M4 19l4-7 4 2 4-9 4 3 M2 21h20',\n ListFilter: 'M2 5h20 M6 12h12 M9 19h6',\n Grid3X3: 'M2 2h20v20H2z M2 9h20 M2 16h20 M9 2v20 M16 2v20',\n LayoutGrid: 'M3 3h8v8H3z M13 3h8v8h-8z M3 13h8v8H3z M13 13h8v8h-8z',\n\n // Tools & settings\n Settings:\n 'M12 2l1.5 2.6L16 4l.5 3 3 .5L19 10l2.6 1.5L20 14l1 3-3 1-1 3-3-1-1.5 2.6L11 20l-1 2-3-1L6 18l-3-1 1-3-2.6-1.5L4 11 2 9.5 5 8l-1-3 3-1z M12 9l3 3-3 3-3-3z',\n Cog: 'M12 2v2 M12 20v2 M4.93 4.93l1.41 1.41 M17.66 17.66l1.41 1.41 M2 12h2 M20 12h2 M4.93 19.07l1.41-1.41 M17.66 6.34l1.41-1.41 M12 8l4 4-4 4-4-4z',\n\n // Objects & concepts\n Lightbulb: 'M12 3l5 6-5 8-5-8z M9 18h6 M10 21h4',\n Sparkles: 'M12 2l3 7 7 3-7 3-3 7-3-7-7-3 7-3z',\n Rocket: 'M12 2l5 8h-3v8h-4v-8H7z M9 22h6',\n Activity: 'M2 12h4l3 8 3-16 3 8 3-4h4',\n Layers: 'M12 2l10 5-10 5L2 7z M2 12l10 5 10-5 M2 17l10 5 10-5',\n Sun: 'M12 6l5 3v6l-5 3-5-3V9z M12 2v2 M12 20v2 M4 4l1.5 1.5 M18.5 18.5L20 20 M2 12h2 M20 12h2 M4 20l1.5-1.5 M18.5 5.5L20 4',\n Clock: 'M12 2l9 5v10l-9 5-9-5V7z M12 7v5l3 3',\n History: 'M12 2l9 5v10l-9 5-9-5V7z M12 7v5l3 2 M3 4l1 4h3',\n\n // People & places\n Users: 'M8 10l4 3-4 3V10z M14 7l4 3-4 3V7z M4 21v-2l4-2 4 2 4-2 4 2v2',\n Building2: 'M6 22V4l6-2 6 2v18 M2 22h20 M10 8h4 M10 12h4 M10 16h4',\n\n // Code & dev\n Code2: 'M8 4L2 12l6 8 M16 4l6 8-6 8',\n}\n\n/** Semantic icon-usage slots driving the per-icon override matrix. */\nexport const ICON_USAGES: IconUsage[] = [\n {\n id: 'nav.search',\n label: 'Search',\n defaultIcon: 'Search',\n alternates: ['Search', 'Crosshair', 'Target'],\n },\n {\n id: 'nav.notifications',\n label: 'Notifications',\n defaultIcon: 'Bell',\n alternates: ['Bell', 'AlertCircle', 'Activity'],\n },\n {\n id: 'nav.help',\n label: 'Help',\n defaultIcon: 'HelpCircle',\n alternates: ['HelpCircle', 'BookOpen', 'MessageSquare'],\n },\n {\n id: 'nav.feedback',\n label: 'Feedback',\n defaultIcon: 'MessageSquare',\n alternates: ['MessageSquare', 'Send', 'Mic'],\n },\n {\n id: 'product.detection',\n label: 'Detection',\n defaultIcon: 'Shield',\n alternates: ['Shield', 'ShieldCheck', 'Bug', 'AlertTriangle'],\n },\n {\n id: 'product.coverage',\n label: 'Coverage',\n defaultIcon: 'Crosshair',\n alternates: ['Crosshair', 'Target', 'Grid3X3'],\n },\n {\n id: 'product.intel',\n label: 'Threat intel',\n defaultIcon: 'Skull',\n alternates: ['Skull', 'Bug', 'AlertTriangle'],\n },\n {\n id: 'product.connectors',\n label: 'Connectors',\n defaultIcon: 'Plug',\n alternates: ['Plug', 'Network', 'Workflow'],\n },\n {\n id: 'product.detections',\n label: 'Detection library',\n defaultIcon: 'FileCode',\n alternates: ['FileCode', 'BookOpen', 'Files'],\n },\n {\n id: 'product.opps',\n label: 'Opportunities',\n defaultIcon: 'Lightbulb',\n alternates: ['Lightbulb', 'Sparkles', 'TrendingUp'],\n },\n {\n id: 'product.studio',\n label: 'Studio (IDE)',\n defaultIcon: 'Terminal',\n alternates: ['Terminal', 'Code2', 'Code'],\n },\n {\n id: 'system.settings',\n label: 'Settings',\n defaultIcon: 'Settings',\n alternates: ['Settings', 'SlidersHorizontal', 'Wrench'],\n },\n {\n id: 'system.user',\n label: 'User',\n defaultIcon: 'UserCheck',\n alternates: ['UserCheck', 'UserCog', 'Users'],\n },\n {\n id: 'system.logout',\n label: 'Sign out',\n defaultIcon: 'LogOut',\n alternates: ['LogOut', 'LogIn'],\n },\n {\n id: 'state.success',\n label: 'Success',\n defaultIcon: 'CheckCircle',\n alternates: ['CheckCircle', 'Check'],\n },\n {\n id: 'state.warning',\n label: 'Warning',\n defaultIcon: 'AlertTriangle',\n alternates: ['AlertTriangle', 'AlertCircle'],\n },\n]\n","/**\n * Curated theme presets shipped with the design system.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport type { Theme, ThemePreset } from './types'\n\nexport const THEME_PRESETS: ThemePreset[] = [\n {\n id: 'mission-control',\n label: 'Mission Control',\n description: 'CounterMeasure default — dark, restrained, orange accent.',\n theme: {\n mode: 'dark',\n accent: 'orange',\n font: 'inter',\n iconSet: 'lucide',\n density: 'comfortable',\n radius: 8,\n transparency: 0.04,\n iconOverrides: {},\n },\n },\n {\n id: 'glass-violet',\n label: 'Frost & Violet',\n description: 'Glassy surfaces with a violet glow. Operations + intel.',\n theme: {\n mode: 'glass',\n accent: 'violet',\n font: 'sora',\n iconSet: 'phosphor',\n density: 'comfortable',\n radius: 12,\n transparency: 0.1,\n iconOverrides: {},\n },\n },\n {\n id: 'monokai',\n label: 'Monokai',\n description: 'Pure black, IDE-like. For detection engineers.',\n theme: {\n mode: 'monokai',\n accent: 'emerald',\n font: 'jetbrainsMono',\n iconSet: 'countermeasure',\n density: 'compact',\n radius: 4,\n transparency: 0.04,\n iconOverrides: {},\n },\n },\n {\n id: 'cyan-mint',\n label: 'Cyan Mint',\n description: 'Cooler dark surfaces, cyan accent — daytime ops.',\n theme: {\n mode: 'dark',\n accent: 'cyan',\n font: 'inter',\n iconSet: 'heroicons',\n density: 'comfortable',\n radius: 10,\n transparency: 0.05,\n iconOverrides: {},\n },\n },\n {\n id: 'rose-soc',\n label: 'Rose SOC',\n description: 'High-energy red accent for incident-response shifts.',\n theme: {\n mode: 'dark',\n accent: 'rose',\n font: 'inter',\n iconSet: 'material',\n density: 'compact',\n radius: 6,\n transparency: 0.04,\n iconOverrides: {},\n },\n },\n {\n id: 'paper-light',\n label: 'Paper',\n description: 'Light mode for printouts, executives, daylight.',\n theme: {\n mode: 'light',\n accent: 'orange',\n font: 'inter',\n iconSet: 'lucide',\n density: 'comfortable',\n radius: 8,\n transparency: 0.03,\n iconOverrides: {},\n },\n },\n]\n\nexport const THEME_DEFAULT = 'mission-control'\n\nexport function defaultTheme(): Theme {\n const preset = THEME_PRESETS.find(p => p.id === THEME_DEFAULT)\n if (!preset) {\n throw new Error(`THEME_DEFAULT preset \"${THEME_DEFAULT}\" not found`)\n }\n return JSON.parse(JSON.stringify(preset.theme)) as Theme\n}\n","/**\n * Theme engine — load / save / apply pipeline.\n *\n * Public API:\n * loadTheme() read theme from localStorage (with legacy migration)\n * saveTheme(theme) persist + apply\n * applyTheme(theme) write CSS variables + data-* attrs to :root\n * getTheme() sync read of in-memory cache\n * setThemePartial(patch) merge + persist + apply\n * setThemeFull(theme) replace + persist + apply\n * findActivePresetId(t) match a Theme to a preset id (or 'custom')\n * resetTheme() reset to THEME_DEFAULT\n * bootstrapTheme() explicit start-up call (apply persisted theme +\n * install a MutationObserver for legacy data-theme\n * sync). Idempotent — safe to call multiple times.\n *\n * The engine emits a `cm:theme-change` CustomEvent on `document` on every\n * apply. Components subscribe to that event to refresh their state.\n *\n * SSR-safe: every DOM access is guarded by `typeof document !== 'undefined'`,\n * so importing this module in a server build does nothing observable.\n *\n * @countermeasure-platform/web-components/services/theme-engine\n */\n\nimport { setTheme as setUiTheme } from '../../ui'\nimport type { ResolvedTheme } from '../../ui'\n\nimport { ACCENT_PALETTES, COLOR_MODES } from './palettes'\nimport { FONT_STACKS, ensureGoogleFont } from './fonts'\nimport { ICON_SETS } from './icons'\nimport { THEME_PRESETS, defaultTheme } from './presets'\nimport type { ColorMode, Theme } from './types'\n\nexport const THEME_LS_KEY = 'cm-theme-v1'\n\nconst LEGACY_GLASS_KEY = 'preview:glass-level'\nconst LEGACY_DENSITY_KEY = 'preview:density'\n\n// ---------------------------------------------------------------------------\n// Persistence (with one-shot legacy migration)\n// ---------------------------------------------------------------------------\n\nfunction readLegacyMigration(base: Theme): Theme {\n let migrated = base\n try {\n const glassRaw = localStorage.getItem(LEGACY_GLASS_KEY)\n if (glassRaw !== null) {\n const n = Number(glassRaw)\n if (Number.isFinite(n)) {\n migrated = { ...migrated, transparency: Math.max(0, Math.min(0.2, n)) }\n }\n }\n } catch {\n /* ignore */\n }\n try {\n const density = localStorage.getItem(LEGACY_DENSITY_KEY)\n if (density === 'compact' || density === 'comfortable' || density === 'cozy') {\n migrated = { ...migrated, density }\n }\n } catch {\n /* ignore */\n }\n return migrated\n}\n\nexport function loadTheme(): Theme {\n if (typeof localStorage === 'undefined') return defaultTheme()\n try {\n const raw = localStorage.getItem(THEME_LS_KEY)\n if (!raw) {\n // First-load migration: try to honor any legacy preview keys.\n return readLegacyMigration(defaultTheme())\n }\n const parsed = JSON.parse(raw) as Partial<Theme> | null\n return { ...defaultTheme(), ...(parsed ?? {}) }\n } catch {\n return defaultTheme()\n }\n}\n\nfunction sanitizeThemeEnums(theme: Theme): Theme {\n const has = Object.prototype.hasOwnProperty\n let t = theme\n if (!has.call(COLOR_MODES, t.mode)) t = { ...t, mode: 'dark' }\n if (!has.call(ACCENT_PALETTES, t.accent)) t = { ...t, accent: 'orange' }\n if (!has.call(FONT_STACKS, t.font)) t = { ...t, font: 'inter' }\n if (!has.call(ICON_SETS, t.iconSet)) t = { ...t, iconSet: 'lucide' }\n const validDensities = ['compact', 'comfortable', 'cozy'] as const\n if (!validDensities.includes(t.density)) t = { ...t, density: 'comfortable' }\n return t\n}\n\nexport function saveTheme(theme: Theme): void {\n const sanitized = sanitizeThemeEnums(theme)\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(THEME_LS_KEY, JSON.stringify(sanitized))\n }\n } catch {\n /* ignore */\n }\n applyTheme(sanitized)\n}\n\n// ---------------------------------------------------------------------------\n// Apply pipeline\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\n/**\n * Resolve a `Theme` into CSS variables + `data-*` attributes on `:root`.\n *\n * Returns silently in non-DOM environments (SSR-safe). Always emits a\n * `cm:theme-change` CustomEvent on `document` after applying.\n */\nexport function applyTheme(theme: Theme): void {\n if (typeof document === 'undefined') return\n const root = document.documentElement\n const mode = COLOR_MODES[theme.mode] ?? COLOR_MODES.dark\n const accent = ACCENT_PALETTES[theme.accent] ?? ACCENT_PALETTES.orange\n const font = FONT_STACKS[theme.font] ?? FONT_STACKS.inter\n const set = ICON_SETS[theme.iconSet] ?? ICON_SETS.lucide\n\n // 1) data-theme — surface palette via tokens.css\n const previous = root.getAttribute('data-theme')\n const next = mode.id as ResolvedTheme\n if (previous !== next) {\n setUiTheme(next)\n } else {\n root.setAttribute('data-theme', next)\n }\n\n // 2) data-accent — emit the per-accent var block from tokens.css\n if (theme.accent === 'orange') {\n root.removeAttribute('data-accent')\n } else {\n root.setAttribute('data-accent', theme.accent)\n }\n\n // 3) data-density\n root.setAttribute('data-density', theme.density)\n\n // 4) Glass translucency derived from `transparency` (0..0.30)\n const t = clamp(Number(theme.transparency) || 0, 0, 0.3)\n const tint = mode.surfaceTint\n root.style.setProperty('--bg-glass', `rgba(${tint}, ${(t * 0.5).toFixed(4)})`)\n root.style.setProperty('--bg-glass-2', `rgba(${tint}, ${t.toFixed(4)})`)\n root.style.setProperty('--bg-glass-3', `rgba(${tint}, ${(t * 1.75).toFixed(4)})`)\n\n // 5) Brand / accent — Monokai overrides emerald with its signature green\n const isMonokai = theme.mode === 'monokai'\n const brandColor = isMonokai && theme.accent === 'emerald' ? '#a6e22e' : accent.brand\n const brandHot = isMonokai && theme.accent === 'emerald' ? '#b8e85b' : accent.hot\n const brandSoft = isMonokai && theme.accent === 'emerald' ? 'rgba(166,226,46,0.12)' : accent.soft\n const brandRgb = isMonokai && theme.accent === 'emerald' ? '166,226,46' : accent.rgb\n root.style.setProperty('--brand', brandColor)\n root.style.setProperty('--brand-hot', brandHot)\n root.style.setProperty('--brand-soft', brandSoft)\n root.style.setProperty('--accent-rgb', brandRgb)\n\n // 6) Radius\n const r = clamp(Number(theme.radius) || 0, 0, 32)\n root.style.setProperty('--radius-sm', `${r * 0.5}px`)\n root.style.setProperty('--radius-md', `${r}px`)\n root.style.setProperty('--radius-lg', `${r * 1.5}px`)\n root.style.setProperty('--radius-xl', `${r * 2}px`)\n\n // 7) Density tokens\n const isCompact = theme.density === 'compact'\n const isCozy = theme.density === 'cozy'\n const rowHeight = isCompact ? 32 : isCozy ? 42 : 36\n root.style.setProperty('--density-row', `${rowHeight}px`)\n root.style.setProperty('--density-padding-y', isCompact ? '0.375rem' : isCozy ? '0.75rem' : '0.55rem')\n root.style.setProperty('--density-padding-x', isCompact ? '0.5rem' : isCozy ? '1rem' : '0.75rem')\n root.style.setProperty('--density-gap', isCompact ? '0.25rem' : isCozy ? '0.625rem' : '0.5rem')\n root.style.setProperty('--density-section-gap', isCompact ? '0.5rem' : isCozy ? '1.25rem' : '1rem')\n root.style.setProperty('--density-font', isCompact ? '0.8125rem' : isCozy ? '0.9375rem' : '0.875rem')\n root.style.setProperty('--density-icon', isCompact ? '1.75rem' : isCozy ? '2.5rem' : '2.25rem')\n\n // 8) Typography (lazy-load Google fonts, then write CSS vars)\n ensureGoogleFont(font.google)\n root.style.setProperty('--font-display', font.display)\n root.style.setProperty('--font-mono', font.mono)\n\n // 9) Icon set hooks\n root.setAttribute('data-icon-set', theme.iconSet)\n root.style.setProperty('--icon-stroke-width', String(set.strokeWidth))\n root.style.setProperty('--icon-linecap', set.linecap)\n root.style.setProperty('--icon-linejoin', set.linejoin)\n\n // Persist legacy keys for back-compat (existing components keep working).\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(LEGACY_GLASS_KEY, String(theme.transparency))\n localStorage.setItem(LEGACY_DENSITY_KEY, theme.density)\n }\n } catch {\n /* ignore */\n }\n\n // Broadcast\n document.dispatchEvent(new CustomEvent('cm:theme-change', { detail: theme }))\n}\n\n// ---------------------------------------------------------------------------\n// In-memory current state cache\n// ---------------------------------------------------------------------------\n\nlet cached: Theme | null = null\n\nexport function getTheme(): Theme {\n if (!cached) {\n cached = loadTheme()\n }\n return cached\n}\n\nexport function setThemePartial(patch: Partial<Theme>): Theme {\n const next = { ...getTheme(), ...patch }\n cached = next\n saveTheme(next)\n return next\n}\n\nexport function setThemeFull(theme: Theme): Theme {\n cached = theme\n saveTheme(theme)\n return theme\n}\n\nexport function findActivePresetId(theme: Theme): string {\n for (const preset of THEME_PRESETS) {\n const a = { ...preset.theme, iconOverrides: {} }\n const b = { ...theme, iconOverrides: {} }\n if (JSON.stringify(a) === JSON.stringify(b)) return preset.id\n }\n return 'custom'\n}\n\nexport function resetTheme(): Theme {\n return setThemeFull(defaultTheme())\n}\n\n// ---------------------------------------------------------------------------\n// Bootstrap (explicit, idempotent)\n// ---------------------------------------------------------------------------\n\nlet bootstrapped = false\nlet observer: MutationObserver | null = null\n\n/**\n * Apply the persisted theme to `:root` and install a MutationObserver that\n * keeps the in-memory cache in sync if some other code path flips\n * `data-theme` directly (e.g. legacy `ThemeSwitcher` / URL handlers).\n *\n * Must be called explicitly by the host app — the engine no longer\n * auto-applies on import so it does not clobber a host's existing theme.\n *\n * Idempotent — calling it twice is a no-op.\n */\nexport function bootstrapTheme(): void {\n if (typeof document === 'undefined') return\n if (bootstrapped) return\n bootstrapped = true\n\n try {\n applyTheme(getTheme())\n } catch {\n /* ignore — likely test env */\n }\n\n try {\n observer = new MutationObserver(mutations => {\n for (const m of mutations) {\n if (m.type !== 'attributes') continue\n if (m.attributeName === 'data-theme') {\n const current = document.documentElement.getAttribute('data-theme')\n if (\n (current === 'dark' ||\n current === 'light' ||\n current === 'monokai' ||\n current === 'glass') &&\n cached &&\n cached.mode !== current\n ) {\n cached = { ...cached, mode: current as ColorMode }\n // Re-broadcast so listeners (preview tile, switchers) refresh\n document.dispatchEvent(new CustomEvent('cm:theme-change', { detail: cached }))\n }\n }\n }\n })\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n })\n } catch {\n /* ignore */\n }\n}\n\n/**\n * Tear down the bootstrap-installed observer. Mostly useful for tests.\n */\nexport function teardownTheme(): void {\n if (observer) {\n observer.disconnect()\n observer = null\n }\n bootstrapped = false\n}\n\n/** @internal Reset the in-memory cache. Mostly useful for tests. */\nexport function _resetCache(): void {\n cached = null\n}\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared test utilities for theme-engine tests.
3
+ *
4
+ * Provides common DOM reset, setup, and teardown helpers used across
5
+ * theme-studio-review.test.ts and engine.test.ts.
6
+ */
7
+ /** Strip all theme-related attributes and content from the document. */
8
+ export declare function resetDom(): void;
9
+ /** Clear storage, reset engine cache, reset DOM, optionally apply the default theme. */
10
+ export declare function setupThemeTest(applyDefault?: boolean): void;
11
+ /** Disconnect observer, reset cache, clear storage, reset DOM. */
12
+ export declare function teardownThemeTest(): void;
13
+ //# sourceMappingURL=test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/services/theme-engine/test-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,wEAAwE;AACxE,wBAAgB,QAAQ,IAAI,IAAI,CAQ/B;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,YAAY,UAAO,GAAG,IAAI,CAMxD;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
@@ -1,5 +1,5 @@
1
- import { t as e } from "../utils-B7XIe3qq.js";
2
- import { t } from "../toast-DRNPdj-R.js";
1
+ import { t as e } from "../utils-DcOSDVkb.js";
2
+ import { t } from "../toast-CawTm-7V.js";
3
3
  import * as n from "react";
4
4
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
5
  //#region src/services/toast-react.tsx
@@ -1,4 +1,4 @@
1
- import { t as e } from "../component-x2UxdKEC.js";
1
+ import { t as e } from "../component-C1Jiz1Ki.js";
2
2
  //#region src/sidebar/index.ts
3
3
  var t = {
4
4
  storageKey: "sidebar-collapsed",
@@ -1,12 +1,12 @@
1
- import { t as e } from "./utils-B7XIe3qq.js";
2
- import { n as t } from "./dist-CTlQcJNK.js";
3
- import { a as n, o as r, t as i } from "./dist-koa_pEtu.js";
4
- import { t as a } from "./dist-C0wG5dwG.js";
5
- import { t as o } from "./dist-cMlzVrN6.js";
6
- import { t as s } from "./dist-CVCn7F_m.js";
7
- import { t as c } from "./dist-D5o6xae2.js";
8
- import { t as l } from "./dist-Cao8o5bZ.js";
9
- import { t as u } from "./dist-Dm7Xaded.js";
1
+ import { t as e } from "./utils-DcOSDVkb.js";
2
+ import { n as t } from "./dist-W53Bo1BJ.js";
3
+ import { a as n, o as r, t as i } from "./dist-CjZz16VT.js";
4
+ import { t as a } from "./dist-DYQiYO9a.js";
5
+ import { t as o } from "./dist-M-TigQUP.js";
6
+ import { t as s } from "./dist-CetkIu6m.js";
7
+ import { t as c } from "./dist-DDlxLS_M.js";
8
+ import { t as l } from "./dist-DFW2ymX5.js";
9
+ import { t as u } from "./dist-DHTh2jaC.js";
10
10
  import * as d from "react";
11
11
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
12
12
  //#region node_modules/@radix-ui/react-slider/dist/index.mjs
@@ -380,4 +380,4 @@ function ee({ className: t, defaultValue: n, value: r, min: i = 0, max: a = 100,
380
380
  //#endregion
381
381
  export { ee as t };
382
382
 
383
- //# sourceMappingURL=slider-CLgdcoKC.js.map
383
+ //# sourceMappingURL=slider-CJoWbXQt.js.map