@countermeasure-platform/web-components 1.2.1 → 1.2.2-dev.15.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 (320) hide show
  1. package/dist/{arc-jVbrWVYZ.js → arc-DOJ9myHo.js} +21 -21
  2. package/dist/{arc-jVbrWVYZ.js.map → arc-DOJ9myHo.js.map} +1 -1
  3. package/dist/architecture-7EHR7CIX-RjIwnEbG.js +3 -0
  4. package/dist/{architectureDiagram-2XIMDMQ5-D5q0ma9h.js → architectureDiagram-3BPJPVTR-cYFnhp15.js} +165 -152
  5. package/dist/{architectureDiagram-2XIMDMQ5-D5q0ma9h.js.map → architectureDiagram-3BPJPVTR-cYFnhp15.js.map} +1 -1
  6. package/dist/{array-DXadUs1s.js → array-BLp0zq5K.js} +1 -1
  7. package/dist/{array-DXadUs1s.js.map → array-BLp0zq5K.js.map} +1 -1
  8. package/dist/{blockDiagram-WCTKOSBZ-BH3jwWeU.js → blockDiagram-GPEHLZMM-DNLPMFXL.js} +994 -864
  9. package/dist/blockDiagram-GPEHLZMM-DNLPMFXL.js.map +1 -0
  10. package/dist/{c4Diagram-IC4MRINW-OFLrunYI.js → c4Diagram-AAUBKEIU-G8g3OBBg.js} +232 -235
  11. package/dist/c4Diagram-AAUBKEIU-G8g3OBBg.js.map +1 -0
  12. package/dist/channel-MTYqUJFm.js +7 -0
  13. package/dist/{channel-LRbq43st.js.map → channel-MTYqUJFm.js.map} +1 -1
  14. package/dist/{chunk-KX2RTZJC-d9jFqUAY.js → chunk-2J33WTMH-BKsVIUnb.js} +4 -4
  15. package/dist/{chunk-KX2RTZJC-d9jFqUAY.js.map → chunk-2J33WTMH-BKsVIUnb.js.map} +1 -1
  16. package/dist/chunk-3OPIFGDE-CcNRL44h.js +3669 -0
  17. package/dist/chunk-3OPIFGDE-CcNRL44h.js.map +1 -0
  18. package/dist/{chunk-4BX2VUAB-BS9gpN-y.js → chunk-4BX2VUAB-BeLKo9Pn.js} +2 -2
  19. package/dist/{chunk-4BX2VUAB-BS9gpN-y.js.map → chunk-4BX2VUAB-BeLKo9Pn.js.map} +1 -1
  20. package/dist/{chunk-R5LLSJPH-c1IfaK5D.js → chunk-4EGX6M5U-Bh9as06l.js} +13 -13
  21. package/dist/chunk-4EGX6M5U-Bh9as06l.js.map +1 -0
  22. package/dist/{chunk-55IACEB6-DZ-UBhHX.js → chunk-55IACEB6-CuKbiO89.js} +3 -3
  23. package/dist/{chunk-55IACEB6-DZ-UBhHX.js.map → chunk-55IACEB6-CuKbiO89.js.map} +1 -1
  24. package/dist/chunk-5DO6E6H7-CAB8pWf5.js +25 -0
  25. package/dist/chunk-5DO6E6H7-CAB8pWf5.js.map +1 -0
  26. package/dist/{chunk-GEFDOKGD-DGJJEGSm.js → chunk-5ZQYHXKU-CjOcwRY6.js} +570 -326
  27. package/dist/chunk-5ZQYHXKU-CjOcwRY6.js.map +1 -0
  28. package/dist/{chunk-WL4C6EOR-BV-op7zg.js → chunk-727SXJPM-kowsFLrz.js} +724 -569
  29. package/dist/chunk-727SXJPM-kowsFLrz.js.map +1 -0
  30. package/dist/{chunk-NQ4KR5QH-C0nWShNk.js → chunk-AQP2D5EJ-Bc1gUIeA.js} +384 -362
  31. package/dist/chunk-AQP2D5EJ-Bc1gUIeA.js.map +1 -0
  32. package/dist/{chunk-OZEHJAEY-BsQ56PV-.js → chunk-BR22UD5L-BCFxmd5-.js} +16 -16
  33. package/dist/chunk-BR22UD5L-BCFxmd5-.js.map +1 -0
  34. package/dist/{chunk-MX3YWQON-D43mcq1f.js → chunk-BSJP7CBP-Bl94i3-1.js} +7 -5
  35. package/dist/chunk-BSJP7CBP-Bl94i3-1.js.map +1 -0
  36. package/dist/chunk-CSCIHK7Q-DyRIc27i.js +2868 -0
  37. package/dist/chunk-CSCIHK7Q-DyRIc27i.js.map +1 -0
  38. package/dist/chunk-FHYWG6QK-kLWdRarG.js +25 -0
  39. package/dist/chunk-FHYWG6QK-kLWdRarG.js.map +1 -0
  40. package/dist/{chunk-FMBD7UC4-1IxrpdPX.js → chunk-FMBD7UC4-IdpWVRCU.js} +2 -2
  41. package/dist/{chunk-FMBD7UC4-1IxrpdPX.js.map → chunk-FMBD7UC4-IdpWVRCU.js.map} +1 -1
  42. package/dist/chunk-KSCS5N6A-CVcDS9QV.js +563 -0
  43. package/dist/chunk-KSCS5N6A-CVcDS9QV.js.map +1 -0
  44. package/dist/{chunk-YBOYWFTD-DkjEOcgZ.js → chunk-L5ZTLDWV-Day0EgsR.js} +9 -9
  45. package/dist/{chunk-YBOYWFTD-DkjEOcgZ.js.map → chunk-L5ZTLDWV-Day0EgsR.js.map} +1 -1
  46. package/dist/chunk-LZXEDZCA-BO_GpQSR.js +51 -0
  47. package/dist/chunk-LZXEDZCA-BO_GpQSR.js.map +1 -0
  48. package/dist/chunk-MPE355IW-BkN6MrMO.js +25 -0
  49. package/dist/chunk-MPE355IW-BkN6MrMO.js.map +1 -0
  50. package/dist/chunk-MZUSXYTE-94iWO-dh.js +32 -0
  51. package/dist/chunk-MZUSXYTE-94iWO-dh.js.map +1 -0
  52. package/dist/chunk-N66VUXT2-QbIUkiJZ.js +56 -0
  53. package/dist/chunk-N66VUXT2-QbIUkiJZ.js.map +1 -0
  54. package/dist/{chunk-JSJVCQXG-Do17yYig.js → chunk-ND2GUHAM-Boh7GenS.js} +6 -6
  55. package/dist/{chunk-JSJVCQXG-Do17yYig.js.map → chunk-ND2GUHAM-Boh7GenS.js.map} +1 -1
  56. package/dist/chunk-NNHCCRGN-CNU0zvRn.js +20603 -0
  57. package/dist/chunk-NNHCCRGN-CNU0zvRn.js.map +1 -0
  58. package/dist/{chunk-PQ6SQG4A-Cpfc5F4u.js → chunk-NZK2D7GU-D4Ird7wv.js} +4 -4
  59. package/dist/{chunk-PQ6SQG4A-Cpfc5F4u.js.map → chunk-NZK2D7GU-D4Ird7wv.js.map} +1 -1
  60. package/dist/{chunk-PU5JKC2W-DNpn_Yik.js → chunk-O5CBEL6O-DThtyjPO.js} +85 -74
  61. package/dist/{chunk-PU5JKC2W-DNpn_Yik.js.map → chunk-O5CBEL6O-DThtyjPO.js.map} +1 -1
  62. package/dist/chunk-PUPMXCY4-DsO2K8st.js +25 -0
  63. package/dist/chunk-PUPMXCY4-DsO2K8st.js.map +1 -0
  64. package/dist/{chunk-QZHKN3VN-kDNdTVLo.js → chunk-QZHKN3VN-DC5aJQQT.js} +2 -2
  65. package/dist/{chunk-QZHKN3VN-kDNdTVLo.js.map → chunk-QZHKN3VN-DC5aJQQT.js.map} +1 -1
  66. package/dist/chunk-UIBZB4QT-Cu3IcTk1.js +25 -0
  67. package/dist/chunk-UIBZB4QT-Cu3IcTk1.js.map +1 -0
  68. package/dist/chunk-WCWK7LTN-DpMt57Ty.js +33 -0
  69. package/dist/chunk-WCWK7LTN-DpMt57Ty.js.map +1 -0
  70. package/dist/chunk-WU5MYG2G-mzocEmS2.js +12 -0
  71. package/dist/{chunk-HHEYEP7N-DJ1b-gA8.js.map → chunk-WU5MYG2G-mzocEmS2.js.map} +1 -1
  72. package/dist/{chunk-XPW4576I-BqiPnb3d.js → chunk-XPW4576I-BwxN5U1_.js} +2 -2
  73. package/dist/{chunk-XPW4576I-BqiPnb3d.js.map → chunk-XPW4576I-BwxN5U1_.js.map} +1 -1
  74. package/dist/classDiagram-4FO5ZUOK-CZv04EX-.js +31 -0
  75. package/dist/{classDiagram-VBA2DB6C-DZfC0xPM.js.map → classDiagram-4FO5ZUOK-CZv04EX-.js.map} +1 -1
  76. package/dist/classDiagram-v2-Q7XG4LA2-aOPSPoxt.js +31 -0
  77. package/dist/{classDiagram-v2-RAHNMMFH-CtWRD1ax.js.map → classDiagram-v2-Q7XG4LA2-aOPSPoxt.js.map} +1 -1
  78. package/dist/component-COshXojx.js +163 -0
  79. package/dist/component-COshXojx.js.map +1 -0
  80. package/dist/components/brand/index.d.ts +8 -2
  81. package/dist/components/brand/index.d.ts.map +1 -1
  82. package/dist/components/brand/index.js +58 -31
  83. package/dist/components/brand/index.js.map +1 -1
  84. package/dist/components/brand/types.d.ts +8 -0
  85. package/dist/components/brand/types.d.ts.map +1 -1
  86. package/dist/components/index.js +1 -1
  87. package/dist/components/tree-view/index.d.ts.map +1 -1
  88. package/dist/components/tree-view/index.js +1 -1
  89. package/dist/{cose-bilkent-S5V4N54A-DxM02fly.js → cose-bilkent-S5V4N54A-D_hwzCJc.js} +7 -8
  90. package/dist/{cose-bilkent-S5V4N54A-DxM02fly.js.map → cose-bilkent-S5V4N54A-D_hwzCJc.js.map} +1 -1
  91. package/dist/{cytoscape.esm-2vKMh7AJ.js → cytoscape.esm-C85eXBIz.js} +1 -1
  92. package/dist/{cytoscape.esm-2vKMh7AJ.js.map → cytoscape.esm-C85eXBIz.js.map} +1 -1
  93. package/dist/dagre-BM42HDAG-DBqY2dVf.js +299 -0
  94. package/dist/dagre-BM42HDAG-DBqY2dVf.js.map +1 -0
  95. package/dist/dagre-IxFkiJHF.js +1938 -0
  96. package/dist/dagre-IxFkiJHF.js.map +1 -0
  97. package/dist/{defaultLocale-PLHpRrsr.js → defaultLocale-DSDxELFN.js} +1 -1
  98. package/dist/{defaultLocale-PLHpRrsr.js.map → defaultLocale-DSDxELFN.js.map} +1 -1
  99. package/dist/{diagram-IFDJBPK2-D-Enf1mK.js → diagram-2AECGRRQ-BwC5Qbme.js} +39 -39
  100. package/dist/{diagram-IFDJBPK2-D-Enf1mK.js.map → diagram-2AECGRRQ-BwC5Qbme.js.map} +1 -1
  101. package/dist/diagram-5GNKFQAL-BpJ9oZ4s.js +103 -0
  102. package/dist/diagram-5GNKFQAL-BpJ9oZ4s.js.map +1 -0
  103. package/dist/diagram-KO2AKTUF-kSLn21uw.js +434 -0
  104. package/dist/diagram-KO2AKTUF-kSLn21uw.js.map +1 -0
  105. package/dist/{diagram-P4PSJMXO-O8g_RIkM.js → diagram-LMA3HP47-BRqyGMLP.js} +43 -43
  106. package/dist/{diagram-P4PSJMXO-O8g_RIkM.js.map → diagram-LMA3HP47-BRqyGMLP.js.map} +1 -1
  107. package/dist/{diagram-E7M64L7V-Co7O3gub.js → diagram-OG6HWLK6-BsskLXHm.js} +171 -174
  108. package/dist/diagram-OG6HWLK6-BsskLXHm.js.map +1 -0
  109. package/dist/{dist-BrNloUiz.js → dist-BScrlPBC.js} +32 -23
  110. package/dist/dist-BScrlPBC.js.map +1 -0
  111. package/dist/{erDiagram-INFDFZHY-C42JeR9I.js → erDiagram-TEJ5UH35-DzB7hnCi.js} +198 -164
  112. package/dist/erDiagram-TEJ5UH35-DzB7hnCi.js.map +1 -0
  113. package/dist/eventmodeling-FCH6USID-HcA67HMu.js +3 -0
  114. package/dist/{flowDiagram-PKNHOUZH-DInJjOz3.js → flowDiagram-I6XJVG4X-RYkPtPRG.js} +453 -469
  115. package/dist/flowDiagram-I6XJVG4X-RYkPtPRG.js.map +1 -0
  116. package/dist/{ganttDiagram-A5KZAMGK-Dgp-4Yss.js → ganttDiagram-6RSMTGT7-BfjlFVNd.js} +340 -333
  117. package/dist/ganttDiagram-6RSMTGT7-BfjlFVNd.js.map +1 -0
  118. package/dist/gitGraph-WXDBUCRP-D60yP8mT.js +3 -0
  119. package/dist/gitGraphDiagram-PVQCEYII-DbUp_ElG.js +731 -0
  120. package/dist/gitGraphDiagram-PVQCEYII-DbUp_ElG.js.map +1 -0
  121. package/dist/graphlib-k-wJtbbK.js +1268 -0
  122. package/dist/graphlib-k-wJtbbK.js.map +1 -0
  123. package/dist/icons/lucide.d.ts +1 -2
  124. package/dist/icons/lucide.d.ts.map +1 -1
  125. package/dist/icons/lucide.js.map +1 -1
  126. package/dist/index.js +1 -1
  127. package/dist/info-J43DQDTF-DDmtkMBG.js +3 -0
  128. package/dist/{infoDiagram-LFFYTUFH-DajJJRvc.js → infoDiagram-5YYISTIA-C0TqWTrr.js} +7 -7
  129. package/dist/{infoDiagram-LFFYTUFH-DajJJRvc.js.map → infoDiagram-5YYISTIA-C0TqWTrr.js.map} +1 -1
  130. package/dist/{init-DcLTaNW1.js → init-CGzIZb6J.js} +1 -1
  131. package/dist/{init-DcLTaNW1.js.map → init-CGzIZb6J.js.map} +1 -1
  132. package/dist/{ishikawaDiagram-PHBUUO56-qHBJm2LT.js → ishikawaDiagram-YF4QCWOH-Cyk_Antz.js} +98 -97
  133. package/dist/ishikawaDiagram-YF4QCWOH-Cyk_Antz.js.map +1 -0
  134. package/dist/{journeyDiagram-4ABVD52K-PgfYdoDM.js → journeyDiagram-JHISSGLW-CTl8eDDe.js} +78 -78
  135. package/dist/journeyDiagram-JHISSGLW-CTl8eDDe.js.map +1 -0
  136. package/dist/{kanban-definition-K7BYSVSG-DFRT8j7A.js → kanban-definition-UN3LZRKU-homeDoHF.js} +46 -44
  137. package/dist/{kanban-definition-K7BYSVSG-DFRT8j7A.js.map → kanban-definition-UN3LZRKU-homeDoHF.js.map} +1 -1
  138. package/dist/{katex-BZdHnXin.js → katex-CgkxVokH.js} +1 -1
  139. package/dist/{katex-BZdHnXin.js.map → katex-CgkxVokH.js.map} +1 -1
  140. package/dist/line-k_aZSToM.js +36 -0
  141. package/dist/{line-Cq1AZT4f.js.map → line-k_aZSToM.js.map} +1 -1
  142. package/dist/{linear-BnJD01Xn.js → linear-Dpcbf4VP.js} +5 -5
  143. package/dist/{linear-BnJD01Xn.js.map → linear-Dpcbf4VP.js.map} +1 -1
  144. package/dist/{mermaid-parser.core-Dz5qv4CI.js → mermaid-parser.core-B_q76LYz.js} +32 -17
  145. package/dist/mermaid-parser.core-B_q76LYz.js.map +1 -0
  146. package/dist/mermaid.core-DAh-gNcn.js +997 -0
  147. package/dist/mermaid.core-DAh-gNcn.js.map +1 -0
  148. package/dist/{mindmap-definition-YRQLILUH-D95OPRMh.js → mindmap-definition-RKZ34NQL-Cjglmmr7.js} +153 -108
  149. package/dist/mindmap-definition-RKZ34NQL-Cjglmmr7.js.map +1 -0
  150. package/dist/{ordinal-CC9tfh_g.js → ordinal-DHGdAr1Y.js} +2 -2
  151. package/dist/{ordinal-CC9tfh_g.js.map → ordinal-DHGdAr1Y.js.map} +1 -1
  152. package/dist/packet-YPE3B663-Bo9N32Mb.js +3 -0
  153. package/dist/{path-y0uQCOMW.js → path-D-DDb3Wo.js} +1 -1
  154. package/dist/{path-y0uQCOMW.js.map → path-D-DDb3Wo.js.map} +1 -1
  155. package/dist/pie-LRSECV5Y-DndCyILX.js +3 -0
  156. package/dist/pieDiagram-4H26LBE5-Swbny_uk.js +167 -0
  157. package/dist/pieDiagram-4H26LBE5-Swbny_uk.js.map +1 -0
  158. package/dist/{quadrantDiagram-337W2JSQ-CcKc-h2o.js → quadrantDiagram-W4KKPZXB-kyt1iJkC.js} +359 -332
  159. package/dist/quadrantDiagram-W4KKPZXB-kyt1iJkC.js.map +1 -0
  160. package/dist/radar-GUYGQ44K-DpLG1fRN.js +3 -0
  161. package/dist/react/brand/index.d.ts +13 -1
  162. package/dist/react/brand/index.d.ts.map +1 -1
  163. package/dist/react/brand.js +28 -3
  164. package/dist/react/brand.js.map +1 -1
  165. package/dist/react/sidebar.d.ts +22 -1
  166. package/dist/react/sidebar.d.ts.map +1 -1
  167. package/dist/react/sidebar.js +26 -2
  168. package/dist/react/sidebar.js.map +1 -1
  169. package/dist/react/topology.js +1 -1
  170. package/dist/react.js +100 -100
  171. package/dist/{requirementDiagram-Z7DCOOCP-aPcaPduF.js → requirementDiagram-4Y6WPE33-DWRks7dz.js} +153 -133
  172. package/dist/requirementDiagram-4Y6WPE33-DWRks7dz.js.map +1 -0
  173. package/dist/{rough.esm-C9rQ9YkE.js → rough.esm-C7tiDdBn.js} +1 -1
  174. package/dist/{rough.esm-C9rQ9YkE.js.map → rough.esm-C7tiDdBn.js.map} +1 -1
  175. package/dist/{sankeyDiagram-WA2Y5GQK-CO_lUqQX.js → sankeyDiagram-5OEKKPKP-J_SVMd-0.js} +125 -76
  176. package/dist/{sankeyDiagram-WA2Y5GQK-CO_lUqQX.js.map → sankeyDiagram-5OEKKPKP-J_SVMd-0.js.map} +1 -1
  177. package/dist/sequenceDiagram-3UESZ5HK-BMhjbe8U.js +4167 -0
  178. package/dist/sequenceDiagram-3UESZ5HK-BMhjbe8U.js.map +1 -0
  179. package/dist/sidebar/component.d.ts +5 -0
  180. package/dist/sidebar/component.d.ts.map +1 -1
  181. package/dist/sidebar/index.d.ts +1 -1
  182. package/dist/sidebar/index.d.ts.map +1 -1
  183. package/dist/sidebar/index.js +1 -1
  184. package/dist/sidebar/index.js.map +1 -1
  185. package/dist/sidebar/types.d.ts +59 -0
  186. package/dist/sidebar/types.d.ts.map +1 -1
  187. package/dist/{src-D1EMXotX.js → src-CWnvxuyh.js} +603 -591
  188. package/dist/{src-D1EMXotX.js.map → src-CWnvxuyh.js.map} +1 -1
  189. package/dist/{src-BhNgmpel.js → src-DngnQkx_.js} +4 -5
  190. package/dist/{src-BhNgmpel.js.map → src-DngnQkx_.js.map} +1 -1
  191. package/dist/stateDiagram-AJRCARHV-x4JHehDk.js +220 -0
  192. package/dist/stateDiagram-AJRCARHV-x4JHehDk.js.map +1 -0
  193. package/dist/stateDiagram-v2-BHNVJYJU-CO93vpHl.js +29 -0
  194. package/dist/{stateDiagram-v2-FVOUBMTO-CAWy0Pkh.js.map → stateDiagram-v2-BHNVJYJU-CO93vpHl.js.map} +1 -1
  195. package/dist/styles/components/brand.css +30 -0
  196. package/dist/styles/sidebar.css +586 -6
  197. package/dist/styles/tenant-ui.css +3 -4
  198. package/dist/styles/threat-library.css +0 -1
  199. package/dist/styles/tokens.css +0 -1
  200. package/dist/{timeline-definition-YZTLITO2-CjxxCuOg.js → timeline-definition-PNZ67QCA-rsiMN1-p.js} +517 -279
  201. package/dist/timeline-definition-PNZ67QCA-rsiMN1-p.js.map +1 -0
  202. package/dist/{topology-C8cyIHlB.js → topology-B9Lv-y1-.js} +181 -182
  203. package/dist/{topology-C8cyIHlB.js.map → topology-B9Lv-y1-.js.map} +1 -1
  204. package/dist/{tree-view-SpbHG9Yi.js → tree-view-gML5wGlz.js} +3 -3
  205. package/dist/{tree-view-SpbHG9Yi.js.map → tree-view-gML5wGlz.js.map} +1 -1
  206. package/dist/treeView-BLDUP644-mJdM3Q6x.js +3 -0
  207. package/dist/treemap-LRROVOQU-BbNMhR6z.js +3 -0
  208. package/dist/{value-gSPnIECy.js → value-CnwEagIg.js} +2 -2
  209. package/dist/{value-gSPnIECy.js.map → value-CnwEagIg.js.map} +1 -1
  210. package/dist/{vennDiagram-LZ73GAT5-FqpGoq2s.js → vennDiagram-CIIHVFJN-JUCgWboO.js} +98 -98
  211. package/dist/{vennDiagram-LZ73GAT5-FqpGoq2s.js.map → vennDiagram-CIIHVFJN-JUCgWboO.js.map} +1 -1
  212. package/dist/visualization/mermaid-diagram/index.js +1 -1
  213. package/dist/wardley-L42UT6IY-DB53GwcN.js +3 -0
  214. package/dist/wardleyDiagram-YWT4CUSO-D9ZPcSHL.js +646 -0
  215. package/dist/wardleyDiagram-YWT4CUSO-D9ZPcSHL.js.map +1 -0
  216. package/dist/{xychartDiagram-JWTSCODW-BNEAK79X.js → xychartDiagram-2RQKCTM6-D3ufsY0S.js} +146 -143
  217. package/dist/{xychartDiagram-JWTSCODW-BNEAK79X.js.map → xychartDiagram-2RQKCTM6-D3ufsY0S.js.map} +1 -1
  218. package/package.json +1 -1
  219. package/src/components/brand/index.ts +63 -0
  220. package/src/components/brand/types.ts +9 -0
  221. package/src/components/theme/theme-studio-review.test.ts +34 -0
  222. package/src/components/tree-view/index.ts +0 -2
  223. package/src/icons/lucide.ts +1 -2
  224. package/src/react/brand/index.test.tsx +28 -0
  225. package/src/react/brand/index.tsx +38 -0
  226. package/src/react/sidebar.test.tsx +30 -0
  227. package/src/react/sidebar.tsx +52 -1
  228. package/src/sidebar/component.test.ts +109 -0
  229. package/src/sidebar/component.ts +233 -44
  230. package/src/sidebar/index.ts +1 -0
  231. package/src/sidebar/types.ts +60 -0
  232. package/src/styles/components/brand.css +30 -0
  233. package/src/styles/sidebar.css +586 -6
  234. package/src/styles/tenant-ui.css +3 -4
  235. package/src/styles/threat-library.css +0 -1
  236. package/src/styles/tokens.css +0 -1
  237. package/dist/_basePickBy-BQMPE4-n.js +0 -168
  238. package/dist/_basePickBy-BQMPE4-n.js.map +0 -1
  239. package/dist/_baseUniq-Bdp_vFUv.js +0 -684
  240. package/dist/_baseUniq-Bdp_vFUv.js.map +0 -1
  241. package/dist/architecture-PBZL5I3N-Zk3GmKE8.js +0 -3
  242. package/dist/blockDiagram-WCTKOSBZ-BH3jwWeU.js.map +0 -1
  243. package/dist/c4Diagram-IC4MRINW-OFLrunYI.js.map +0 -1
  244. package/dist/channel-LRbq43st.js +0 -7
  245. package/dist/chunk-7E7YKBS2-BsywoVTt.js +0 -25
  246. package/dist/chunk-7E7YKBS2-BsywoVTt.js.map +0 -1
  247. package/dist/chunk-7R4GIKGN-DJmroLCH.js +0 -2054
  248. package/dist/chunk-7R4GIKGN-DJmroLCH.js.map +0 -1
  249. package/dist/chunk-C72U2L5F-BwPwVDcP.js +0 -25
  250. package/dist/chunk-C72U2L5F-BwPwVDcP.js.map +0 -1
  251. package/dist/chunk-EGIJ26TM-DKd5cEgn.js +0 -25
  252. package/dist/chunk-EGIJ26TM-DKd5cEgn.js.map +0 -1
  253. package/dist/chunk-GEFDOKGD-DGJJEGSm.js.map +0 -1
  254. package/dist/chunk-GLR3WWYH-BDwmgwCA.js +0 -43
  255. package/dist/chunk-GLR3WWYH-BDwmgwCA.js.map +0 -1
  256. package/dist/chunk-HHEYEP7N-DJ1b-gA8.js +0 -12
  257. package/dist/chunk-KYZI473N-BXYCe83A.js +0 -3437
  258. package/dist/chunk-KYZI473N-BXYCe83A.js.map +0 -1
  259. package/dist/chunk-L3YUKLVL-Y5k8UNMf.js +0 -25
  260. package/dist/chunk-L3YUKLVL-Y5k8UNMf.js.map +0 -1
  261. package/dist/chunk-MX3YWQON-D43mcq1f.js.map +0 -1
  262. package/dist/chunk-NBPlniwU.js +0 -23
  263. package/dist/chunk-NQ4KR5QH-C0nWShNk.js.map +0 -1
  264. package/dist/chunk-O4XLMI2P-DtGEm9QX.js +0 -514
  265. package/dist/chunk-O4XLMI2P-DtGEm9QX.js.map +0 -1
  266. package/dist/chunk-OZEHJAEY-BsQ56PV-.js.map +0 -1
  267. package/dist/chunk-R5LLSJPH-c1IfaK5D.js.map +0 -1
  268. package/dist/chunk-WL4C6EOR-BV-op7zg.js.map +0 -1
  269. package/dist/chunk-XIRO2GV7-Bv1hlNLi.js +0 -32
  270. package/dist/chunk-XIRO2GV7-Bv1hlNLi.js.map +0 -1
  271. package/dist/chunk-XZSTWKYB-C7maKWEr.js +0 -15799
  272. package/dist/chunk-XZSTWKYB-C7maKWEr.js.map +0 -1
  273. package/dist/classDiagram-VBA2DB6C-DZfC0xPM.js +0 -31
  274. package/dist/classDiagram-v2-RAHNMMFH-CtWRD1ax.js +0 -31
  275. package/dist/clone-CliVdNc8.js +0 -10
  276. package/dist/clone-CliVdNc8.js.map +0 -1
  277. package/dist/component-C1Jiz1Ki.js +0 -103
  278. package/dist/component-C1Jiz1Ki.js.map +0 -1
  279. package/dist/dagre-BqC9mhMk.js +0 -1485
  280. package/dist/dagre-BqC9mhMk.js.map +0 -1
  281. package/dist/dagre-KLK3FWXG-DTKcsol6.js +0 -296
  282. package/dist/dagre-KLK3FWXG-DTKcsol6.js.map +0 -1
  283. package/dist/diagram-E7M64L7V-Co7O3gub.js.map +0 -1
  284. package/dist/dist-BrNloUiz.js.map +0 -1
  285. package/dist/erDiagram-INFDFZHY-C42JeR9I.js.map +0 -1
  286. package/dist/flowDiagram-PKNHOUZH-DInJjOz3.js.map +0 -1
  287. package/dist/ganttDiagram-A5KZAMGK-Dgp-4Yss.js.map +0 -1
  288. package/dist/gitGraph-HDMCJU4V-D_QsK6Rt.js +0 -3
  289. package/dist/gitGraphDiagram-K3NZZRJ6-Dr_X0dND.js +0 -628
  290. package/dist/gitGraphDiagram-K3NZZRJ6-Dr_X0dND.js.map +0 -1
  291. package/dist/graphlib-ecencZTG.js +0 -227
  292. package/dist/graphlib-ecencZTG.js.map +0 -1
  293. package/dist/info-3K5VOQVL-BbLiZXwn.js +0 -3
  294. package/dist/isArrayLikeObject-Bjsxaqj7.js +0 -580
  295. package/dist/isArrayLikeObject-Bjsxaqj7.js.map +0 -1
  296. package/dist/isEmpty-CeZZUVts.js +0 -37
  297. package/dist/isEmpty-CeZZUVts.js.map +0 -1
  298. package/dist/ishikawaDiagram-PHBUUO56-qHBJm2LT.js.map +0 -1
  299. package/dist/journeyDiagram-4ABVD52K-PgfYdoDM.js.map +0 -1
  300. package/dist/line-Cq1AZT4f.js +0 -36
  301. package/dist/math-D4gdAuwG.js +0 -12
  302. package/dist/math-D4gdAuwG.js.map +0 -1
  303. package/dist/mermaid-parser.core-Dz5qv4CI.js.map +0 -1
  304. package/dist/mermaid.core-DTiIXVKa.js +0 -923
  305. package/dist/mermaid.core-DTiIXVKa.js.map +0 -1
  306. package/dist/mindmap-definition-YRQLILUH-D95OPRMh.js.map +0 -1
  307. package/dist/packet-RMMSAZCW-D72DRs1N.js +0 -3
  308. package/dist/pie-UPGHQEXC-C8RDLrEi.js +0 -3
  309. package/dist/pieDiagram-SKSYHLDU-BREEn_Sk.js +0 -167
  310. package/dist/pieDiagram-SKSYHLDU-BREEn_Sk.js.map +0 -1
  311. package/dist/quadrantDiagram-337W2JSQ-CcKc-h2o.js.map +0 -1
  312. package/dist/radar-KQ55EAFF-DhmvjiyN.js +0 -3
  313. package/dist/requirementDiagram-Z7DCOOCP-aPcaPduF.js.map +0 -1
  314. package/dist/sequenceDiagram-2WXFIKYE-D7Vh1Zld.js +0 -4112
  315. package/dist/sequenceDiagram-2WXFIKYE-D7Vh1Zld.js.map +0 -1
  316. package/dist/stateDiagram-RAJIS63D-DdiY5cf3.js +0 -220
  317. package/dist/stateDiagram-RAJIS63D-DdiY5cf3.js.map +0 -1
  318. package/dist/stateDiagram-v2-FVOUBMTO-CAWy0Pkh.js +0 -29
  319. package/dist/timeline-definition-YZTLITO2-CjxxCuOg.js.map +0 -1
  320. package/dist/treemap-KZPCXAKY-BvLvHb2t.js +0 -3
@@ -18,17 +18,23 @@
18
18
  * sidebar.setActive('dashboard')
19
19
  */
20
20
 
21
+ import { createBrandLockupElement } from '../components/brand'
21
22
  import { getIconSvgInner, type IconSet } from '../icons/index'
22
23
  import { resolveContainer } from '../primitives/utils'
23
- import { type SidebarComponentConfig } from './types'
24
+ import { type SidebarComponentConfig, type SidebarSection } from './types'
25
+
26
+ function toSidebarVariantClassName(variant: string): string {
27
+ const normalized = variant.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')
28
+ return `sidebar--${normalized || 'app'}`
29
+ }
24
30
 
25
31
  /** Create an SVG element populated with icon content from the registry. */
26
32
  function createIconSvg(iconSet: IconSet, name: string): SVGElement {
27
33
  const svgNs = 'http://www.w3.org/2000/svg'
28
34
  const svg = document.createElementNS(svgNs, 'svg')
29
35
  svg.setAttribute('xmlns', svgNs)
30
- svg.setAttribute('width', '18')
31
- svg.setAttribute('height', '18')
36
+ svg.setAttribute('width', '16')
37
+ svg.setAttribute('height', '16')
32
38
  svg.setAttribute('viewBox', '0 0 24 24')
33
39
  svg.setAttribute('fill', 'none')
34
40
  svg.setAttribute('stroke', 'currentColor')
@@ -52,6 +58,7 @@ export class SidebarComponent {
52
58
  private readonly aside: HTMLElement
53
59
  private readonly config: SidebarComponentConfig
54
60
  private readonly iconSet: IconSet
61
+ private collapseButton: HTMLButtonElement | null = null
55
62
 
56
63
  constructor(config: SidebarComponentConfig) {
57
64
  this.config = config
@@ -59,64 +66,217 @@ export class SidebarComponent {
59
66
  this.iconSet = config.iconSet ?? 'lucide'
60
67
 
61
68
  this.aside = document.createElement('aside')
62
- this.aside.classList.add('sidebar')
63
- this.aside.setAttribute('data-sidebar', config.variant ?? 'app')
69
+ const variant = config.variant ?? 'app'
70
+ this.aside.classList.add('sidebar', toSidebarVariantClassName(variant))
71
+ this.aside.setAttribute('data-sidebar', variant)
72
+ if (config.collapsed === true) {
73
+ this.aside.classList.add('sidebar--collapsed')
74
+ }
64
75
 
65
76
  this.render()
66
77
  this.container.appendChild(this.aside)
67
78
  }
68
79
 
69
80
  private render(): void {
81
+ if (this.config.collapsible === true) {
82
+ this.renderCollapseButton()
83
+ }
84
+
85
+ this.renderHeader()
86
+
87
+ const body = document.createElement('div')
88
+ body.classList.add('sidebar__body')
89
+
70
90
  for (const section of this.config.sections) {
71
- const sectionEl = document.createElement('div')
72
- sectionEl.classList.add('sidebar__section')
73
-
74
- if (section.label) {
75
- const labelEl = document.createElement('div')
76
- labelEl.classList.add('sidebar__section-label')
77
- labelEl.textContent = section.label
78
- sectionEl.appendChild(labelEl)
91
+ body.appendChild(this.buildSection(section))
92
+ }
93
+
94
+ this.aside.appendChild(body)
95
+ this.renderFooter()
96
+ }
97
+
98
+ private buildSection(section: SidebarSection): HTMLElement {
99
+ const sectionEl = document.createElement('div')
100
+ sectionEl.classList.add('sidebar__section')
101
+ sectionEl.setAttribute('data-section-id', section.id)
102
+
103
+ const collapsible = section.collapsible === true
104
+ const expanded = section.defaultExpanded !== false
105
+
106
+ if (collapsible && section.label) {
107
+ sectionEl.classList.add('sidebar__section--collapsible')
108
+ if (expanded) sectionEl.classList.add('sidebar__section--expanded')
109
+
110
+ const header = document.createElement('button')
111
+ header.type = 'button'
112
+ header.classList.add('sidebar__group-header')
113
+ header.setAttribute('aria-expanded', String(expanded))
114
+ header.setAttribute('aria-controls', `sidebar-group-${section.id}`)
115
+
116
+ if (section.icon) {
117
+ header.appendChild(createIconSvg(this.iconSet, section.icon))
79
118
  }
80
119
 
81
- for (const item of section.items) {
82
- const link = document.createElement('a')
83
- link.classList.add('sidebar__item')
84
- link.setAttribute('data-item-id', item.id)
120
+ const labelSpan = document.createElement('span')
121
+ labelSpan.classList.add('sidebar__group-label')
122
+ labelSpan.textContent = section.label
123
+ header.appendChild(labelSpan)
124
+
125
+ const chevron = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
126
+ chevron.setAttribute('class', 'sidebar__group-chevron')
127
+ chevron.setAttribute('viewBox', '0 0 24 24')
128
+ chevron.setAttribute('width', '14')
129
+ chevron.setAttribute('height', '14')
130
+ chevron.setAttribute('fill', 'none')
131
+ chevron.setAttribute('stroke', 'currentColor')
132
+ chevron.setAttribute('stroke-width', '2')
133
+ chevron.setAttribute('stroke-linecap', 'round')
134
+ chevron.setAttribute('stroke-linejoin', 'round')
135
+ chevron.setAttribute('aria-hidden', 'true')
136
+ const chevronPath = document.createElementNS('http://www.w3.org/2000/svg', 'path')
137
+ chevronPath.setAttribute('d', 'm6 9 6 6 6-6')
138
+ chevron.appendChild(chevronPath)
139
+ header.appendChild(chevron)
140
+
141
+ header.addEventListener('click', () => {
142
+ const nowExpanded = sectionEl.classList.toggle('sidebar__section--expanded')
143
+ header.setAttribute('aria-expanded', String(nowExpanded))
144
+ })
145
+
146
+ sectionEl.appendChild(header)
147
+ } else if (section.label) {
148
+ const labelEl = document.createElement('div')
149
+ labelEl.classList.add('sidebar__section-label')
150
+ labelEl.textContent = section.label
151
+ sectionEl.appendChild(labelEl)
152
+ }
85
153
 
86
- if (item.icon) {
87
- const icon = createIconSvg(this.iconSet, item.icon)
88
- link.appendChild(icon)
89
- }
154
+ const itemsWrap = document.createElement('div')
155
+ itemsWrap.classList.add('sidebar__items')
156
+ itemsWrap.id = `sidebar-group-${section.id}`
90
157
 
91
- const label = document.createElement('span')
92
- label.classList.add('sidebar__item-label')
93
- label.textContent = item.label
94
- link.appendChild(label)
95
-
96
- if (item.badge !== undefined && item.badge > 0) {
97
- const badge = document.createElement('span')
98
- badge.classList.add('sidebar__badge')
99
- badge.setAttribute('data-badge', item.id)
100
- badge.textContent = String(item.badge)
101
- link.appendChild(badge)
102
- }
158
+ for (const item of section.items) {
159
+ const link = document.createElement('a')
160
+ link.classList.add('sidebar__item')
161
+ link.setAttribute('data-item-id', item.id)
162
+ link.setAttribute('title', item.label)
103
163
 
104
- link.addEventListener('click', () => {
105
- if (this.config.onNavigate) {
106
- this.config.onNavigate(item)
107
- }
108
- if (item.onClick) {
109
- item.onClick()
110
- }
111
- })
164
+ if (item.icon) {
165
+ const icon = createIconSvg(this.iconSet, item.icon)
166
+ link.appendChild(icon)
167
+ }
112
168
 
113
- sectionEl.appendChild(link)
169
+ const label = document.createElement('span')
170
+ label.classList.add('sidebar__item-label')
171
+ label.textContent = item.label
172
+ link.appendChild(label)
173
+
174
+ if (item.badge !== undefined && item.badge > 0) {
175
+ const badge = document.createElement('span')
176
+ const tone = item.badgeTone ?? 'primary'
177
+ link.setAttribute('data-badge-visible', 'true')
178
+ link.setAttribute('data-badge-tone', tone)
179
+ badge.classList.add('sidebar__badge', `sidebar__badge--${tone}`)
180
+ badge.setAttribute('data-badge', item.id)
181
+ badge.textContent = String(item.badge)
182
+ link.appendChild(badge)
114
183
  }
115
184
 
116
- this.aside.appendChild(sectionEl)
185
+ link.addEventListener('click', () => {
186
+ if (this.config.onNavigate) {
187
+ this.config.onNavigate(item)
188
+ }
189
+ if (item.onClick) {
190
+ item.onClick()
191
+ }
192
+ })
193
+
194
+ itemsWrap.appendChild(link)
117
195
  }
118
196
 
119
- this.renderFooter()
197
+ sectionEl.appendChild(itemsWrap)
198
+ return sectionEl
199
+ }
200
+
201
+ private renderHeader(): void {
202
+ const brand = this.config.brand
203
+ if (brand === undefined) {
204
+ return
205
+ }
206
+
207
+ const header = document.createElement('div')
208
+ header.classList.add('sidebar__header')
209
+
210
+ const row = document.createElement('div')
211
+ row.classList.add('sidebar__header-row')
212
+
213
+ const brandEl =
214
+ brand.href !== undefined
215
+ ? document.createElement('a')
216
+ : brand.onClick !== undefined
217
+ ? document.createElement('button')
218
+ : document.createElement('span')
219
+
220
+ brandEl.classList.add('sidebar__brand')
221
+
222
+ if (brandEl instanceof HTMLAnchorElement) {
223
+ brandEl.href = brand.href ?? '#'
224
+ brandEl.setAttribute('aria-label', brand.label ?? 'CounterMeasure')
225
+ }
226
+
227
+ if (brandEl instanceof HTMLButtonElement) {
228
+ brandEl.type = 'button'
229
+ brandEl.setAttribute('aria-label', brand.label ?? 'CounterMeasure')
230
+ }
231
+
232
+ if (brand.onClick !== undefined) {
233
+ brandEl.addEventListener('click', brand.onClick)
234
+ }
235
+
236
+ brandEl.appendChild(
237
+ createBrandLockupElement({
238
+ label: brand.label ?? 'CounterMeasure',
239
+ markSize: brand.markSize ?? 22,
240
+ showWordmark: brand.showWordmark ?? true,
241
+ decorative: brand.decorative ?? false,
242
+ })
243
+ )
244
+
245
+ row.appendChild(brandEl)
246
+ header.appendChild(row)
247
+ this.aside.appendChild(header)
248
+ }
249
+
250
+ private renderCollapseButton(): void {
251
+ const button = document.createElement('button')
252
+ button.type = 'button'
253
+ button.classList.add('sidebar__collapse-btn', 'sidebar__collapse-btn--edge')
254
+ button.setAttribute('data-sidebar-toggle', '')
255
+
256
+ if (this.config.collapseButtonVisible === true) {
257
+ button.setAttribute('data-visible', 'true')
258
+ }
259
+
260
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
261
+ svg.setAttribute('aria-hidden', 'true')
262
+ svg.setAttribute('viewBox', '0 0 24 24')
263
+ svg.setAttribute('fill', 'none')
264
+ svg.setAttribute('stroke', 'currentColor')
265
+ svg.setAttribute('stroke-width', '2')
266
+ svg.setAttribute('stroke-linecap', 'round')
267
+ svg.setAttribute('stroke-linejoin', 'round')
268
+
269
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')
270
+ svg.appendChild(path)
271
+ button.appendChild(svg)
272
+
273
+ button.addEventListener('click', () => {
274
+ this.toggleCollapse()
275
+ })
276
+
277
+ this.collapseButton = button
278
+ this.updateCollapseButton()
279
+ this.aside.appendChild(button)
120
280
  }
121
281
 
122
282
  private renderFooter(): void {
@@ -195,12 +355,15 @@ export class SidebarComponent {
195
355
  const badge = this.aside.querySelector<HTMLElement>(`[data-badge="${itemId}"]`)
196
356
  if (badge) {
197
357
  badge.textContent = count > 0 ? String(count) : ''
358
+ const item = badge.closest<HTMLElement>('.sidebar__item')
359
+ item?.setAttribute('data-badge-visible', String(count > 0))
198
360
  }
199
361
  }
200
362
 
201
363
  /** Toggle the sidebar between collapsed and expanded states. */
202
364
  toggleCollapse(): void {
203
365
  const isCollapsed = this.aside.classList.toggle('sidebar--collapsed')
366
+ this.updateCollapseButton()
204
367
  if (this.config.onCollapse) {
205
368
  this.config.onCollapse(isCollapsed)
206
369
  }
@@ -208,16 +371,42 @@ export class SidebarComponent {
208
371
 
209
372
  /** Collapse the sidebar. */
210
373
  collapse(): void {
374
+ const wasCollapsed = this.aside.classList.contains('sidebar--collapsed')
211
375
  this.aside.classList.add('sidebar--collapsed')
376
+ this.updateCollapseButton()
377
+ if (!wasCollapsed && this.config.onCollapse) {
378
+ this.config.onCollapse(true)
379
+ }
212
380
  }
213
381
 
214
382
  /** Expand the sidebar. */
215
383
  expand(): void {
384
+ const wasCollapsed = this.aside.classList.contains('sidebar--collapsed')
216
385
  this.aside.classList.remove('sidebar--collapsed')
386
+ this.updateCollapseButton()
387
+ if (wasCollapsed && this.config.onCollapse) {
388
+ this.config.onCollapse(false)
389
+ }
217
390
  }
218
391
 
219
392
  /** Remove the sidebar from the DOM. */
220
393
  destroy(): void {
221
394
  this.aside.remove()
222
395
  }
396
+
397
+ private updateCollapseButton(): void {
398
+ if (this.collapseButton === null) {
399
+ return
400
+ }
401
+
402
+ const isCollapsed = this.aside.classList.contains('sidebar--collapsed')
403
+ const label = isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'
404
+ this.collapseButton.setAttribute('aria-label', label)
405
+ this.collapseButton.setAttribute('aria-expanded', String(!isCollapsed))
406
+ this.collapseButton.setAttribute('title', label)
407
+ this.collapseButton.setAttribute('data-collapsed', String(isCollapsed))
408
+ this.collapseButton
409
+ .querySelector('path')
410
+ ?.setAttribute('d', isCollapsed ? 'm9 18 6-6-6-6' : 'm15 18-6-6 6-6')
411
+ }
223
412
  }
@@ -15,6 +15,7 @@
15
15
  export { SidebarComponent } from './component'
16
16
  export type {
17
17
  SidebarComponentConfig,
18
+ SidebarBrandConfig,
18
19
  SidebarNavItem,
19
20
  SidebarSection,
20
21
  SidebarUser,
@@ -3,6 +3,7 @@
3
3
  * @countermeasure/web-components/sidebar/component
4
4
  */
5
5
 
6
+ import { type BrandSize } from '../components/brand'
6
7
  import { type IconSet } from '../icons/index'
7
8
 
8
9
  export interface SidebarNavItem {
@@ -14,6 +15,11 @@ export interface SidebarNavItem {
14
15
  icon?: string
15
16
  /** Numeric badge displayed at the trailing edge of the row. */
16
17
  badge?: number
18
+ /**
19
+ * Visual tone for the badge.
20
+ * @default 'primary'
21
+ */
22
+ badgeTone?: 'default' | 'primary' | 'amber' | 'cyan' | 'rose' | 'warning' | 'error'
17
23
  /** Called when the item is activated. */
18
24
  onClick?: () => void
19
25
  }
@@ -25,6 +31,20 @@ export interface SidebarSection {
25
31
  label?: string
26
32
  /** Nav items rendered within this section. */
27
33
  items: SidebarNavItem[]
34
+ /**
35
+ * Render the section as a collapsible accordion group with a clickable
36
+ * header instead of a flat label. When set, `label` is rendered as the
37
+ * toggle and items collapse/expand on click.
38
+ * @default false
39
+ */
40
+ collapsible?: boolean
41
+ /**
42
+ * Initial expanded state when `collapsible` is true.
43
+ * @default true
44
+ */
45
+ defaultExpanded?: boolean
46
+ /** Optional icon for the collapsible group header. */
47
+ icon?: string
28
48
  }
29
49
 
30
50
  export interface SidebarUser {
@@ -48,6 +68,27 @@ export interface SidebarFooterAction {
48
68
  onClick?: () => void
49
69
  }
50
70
 
71
+ export interface SidebarBrandConfig {
72
+ /** Accessible brand label. */
73
+ label?: string
74
+ /** Brand mark size. */
75
+ markSize?: BrandSize | number
76
+ /**
77
+ * Show the COUNTERMEASURE wordmark next to the diamond.
78
+ * @default true
79
+ */
80
+ showWordmark?: boolean
81
+ /** Optional link target for the brand surface. */
82
+ href?: string
83
+ /** Called when the brand surface is activated. */
84
+ onClick?: () => void
85
+ /**
86
+ * Render the brand as decorative.
87
+ * @default false
88
+ */
89
+ decorative?: boolean
90
+ }
91
+
51
92
  export interface SidebarComponentConfig {
52
93
  /** Container element (or selector) the sidebar is mounted into. */
53
94
  container: HTMLElement | string
@@ -55,6 +96,19 @@ export interface SidebarComponentConfig {
55
96
  variant?: string
56
97
  /** Sections rendered top-to-bottom. */
57
98
  sections: SidebarSection[]
99
+ /** Optional brand header rendered above the navigation. */
100
+ brand?: SidebarBrandConfig
101
+ /**
102
+ * Render the shared edge-docked collapse control.
103
+ * @default false
104
+ */
105
+ collapsible?: boolean
106
+ /**
107
+ * Keep the collapse control visible instead of hover/focus-only.
108
+ * Useful for docs and constrained previews.
109
+ * @default false
110
+ */
111
+ collapseButtonVisible?: boolean
58
112
  /** Optional user surface rendered in the footer. */
59
113
  user?: SidebarUser
60
114
  /** Footer action buttons rendered next to the user surface. */
@@ -64,6 +118,12 @@ export interface SidebarComponentConfig {
64
118
  * @default 'lucide'
65
119
  */
66
120
  iconSet?: IconSet
121
+ /**
122
+ * Initial collapsed state. When `collapsible` is true the collapse button
123
+ * starts pointing the matching direction.
124
+ * @default false
125
+ */
126
+ collapsed?: boolean
67
127
  /** Called when a nav item is activated. */
68
128
  onNavigate?: (item: SidebarNavItem) => void
69
129
  /** Called when the sidebar's collapsed state changes. */
@@ -95,6 +95,36 @@
95
95
  text-transform: uppercase;
96
96
  }
97
97
 
98
+ .cmm-brand-lockup {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ gap: 0.625rem;
102
+ max-width: 100%;
103
+ color: var(--color-text, hsl(var(--foreground)));
104
+ vertical-align: middle;
105
+ }
106
+
107
+ .cmm-brand-lockup__wordmark {
108
+ display: inline-flex;
109
+ align-items: baseline;
110
+ min-width: 0;
111
+ overflow: hidden;
112
+ white-space: nowrap;
113
+ font-family: var(--font-display, var(--font-sans, Outfit, sans-serif));
114
+ font-size: 0.8125rem;
115
+ font-weight: 700;
116
+ line-height: 1;
117
+ letter-spacing: 0.08em;
118
+ }
119
+
120
+ .cmm-brand-lockup__counter {
121
+ color: currentColor;
122
+ }
123
+
124
+ .cmm-brand-lockup__measure {
125
+ color: var(--color-orange-500, hsl(var(--primary)));
126
+ }
127
+
98
128
  .cmm-connector-logo {
99
129
  --cmm-connector-logo-bg: #475569;
100
130