@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.
- package/dist/{_basePickBy-BlpD3CIQ.js → _basePickBy-BQMPE4-n.js} +3 -3
- package/dist/{_basePickBy-BlpD3CIQ.js.map → _basePickBy-BQMPE4-n.js.map} +1 -1
- package/dist/{_baseUniq-CO35kH5B.js → _baseUniq-Bdp_vFUv.js} +3 -3
- package/dist/{_baseUniq-CO35kH5B.js.map → _baseUniq-Bdp_vFUv.js.map} +1 -1
- package/dist/{alert-dialog-DXa-O6E4.js → alert-dialog-C4dLk25S.js} +5 -5
- package/dist/{alert-dialog-DXa-O6E4.js.map → alert-dialog-C4dLk25S.js.map} +1 -1
- package/dist/{arc-DyfKNDOh.js → arc-jVbrWVYZ.js} +3 -3
- package/dist/{arc-DyfKNDOh.js.map → arc-jVbrWVYZ.js.map} +1 -1
- package/dist/architecture-PBZL5I3N-Zk3GmKE8.js +3 -0
- package/dist/{architectureDiagram-2XIMDMQ5-B4qk6eh9.js → architectureDiagram-2XIMDMQ5-D5q0ma9h.js} +10 -10
- package/dist/{architectureDiagram-2XIMDMQ5-B4qk6eh9.js.map → architectureDiagram-2XIMDMQ5-D5q0ma9h.js.map} +1 -1
- package/dist/{array-DPBIBG3p.js → array-DXadUs1s.js} +1 -1
- package/dist/{array-DPBIBG3p.js.map → array-DXadUs1s.js.map} +1 -1
- package/dist/{arrow-up-BhjinjWg.js → arrow-up-CJJ5q2ht.js} +2 -2
- package/dist/{arrow-up-BhjinjWg.js.map → arrow-up-CJJ5q2ht.js.map} +1 -1
- package/dist/{avatar-CZGZhjvv.js → avatar-DIhd5zYT.js} +1 -1
- package/dist/{avatar-CZGZhjvv.js.map → avatar-DIhd5zYT.js.map} +1 -1
- package/dist/{badge-CAvV5GE2.js → badge-C2kAwL41.js} +1 -1
- package/dist/{badge-CAvV5GE2.js.map → badge-C2kAwL41.js.map} +1 -1
- package/dist/{blockDiagram-WCTKOSBZ-DdPMGZ7X.js → blockDiagram-WCTKOSBZ-BH3jwWeU.js} +13 -13
- package/dist/{blockDiagram-WCTKOSBZ-DdPMGZ7X.js.map → blockDiagram-WCTKOSBZ-BH3jwWeU.js.map} +1 -1
- package/dist/{button-19KWzy7c.js → button-BtTc7Ncu.js} +1 -1
- package/dist/{button-19KWzy7c.js.map → button-BtTc7Ncu.js.map} +1 -1
- package/dist/{c4Diagram-IC4MRINW-Du1j-C4R.js → c4Diagram-IC4MRINW-OFLrunYI.js} +7 -7
- package/dist/{c4Diagram-IC4MRINW-Du1j-C4R.js.map → c4Diagram-IC4MRINW-OFLrunYI.js.map} +1 -1
- package/dist/{carousel-CJ5lxMYs.js → carousel-T96UFALA.js} +3 -3
- package/dist/{carousel-CJ5lxMYs.js.map → carousel-T96UFALA.js.map} +1 -1
- package/dist/{channel-BHvJxX8j.js → channel-LRbq43st.js} +2 -2
- package/dist/{channel-BHvJxX8j.js.map → channel-LRbq43st.js.map} +1 -1
- package/dist/charts/area/index.js +1 -1
- package/dist/charts/bar/index.js +1 -1
- package/dist/charts/index.js +2 -2
- package/dist/charts/line/index.js +1 -1
- package/dist/charts/pie/index.js +1 -1
- package/dist/charts/radar/index.js +1 -1
- package/dist/charts/scatter/index.js +1 -1
- package/dist/charts/waterfall/index.js +1 -1
- package/dist/{check-CybgTpDT.js → check-cGnuDoWp.js} +2 -2
- package/dist/{check-CybgTpDT.js.map → check-cGnuDoWp.js.map} +1 -1
- package/dist/{chevron-down-C_008JAH.js → chevron-down-m05raooX.js} +2 -2
- package/dist/{chevron-down-C_008JAH.js.map → chevron-down-m05raooX.js.map} +1 -1
- package/dist/{chevron-right-DuHRAn8w.js → chevron-right-ByWVa5XY.js} +2 -2
- package/dist/{chevron-right-DuHRAn8w.js.map → chevron-right-ByWVa5XY.js.map} +1 -1
- package/dist/{chevron-up-BY5jyuW2.js → chevron-up-CtvY7fRK.js} +2 -2
- package/dist/{chevron-up-BY5jyuW2.js.map → chevron-up-CtvY7fRK.js.map} +1 -1
- package/dist/{chunk-4BX2VUAB-CL-dnlxR.js → chunk-4BX2VUAB-BS9gpN-y.js} +2 -2
- package/dist/{chunk-4BX2VUAB-CL-dnlxR.js.map → chunk-4BX2VUAB-BS9gpN-y.js.map} +1 -1
- package/dist/{chunk-55IACEB6-DxNTqHZ8.js → chunk-55IACEB6-DZ-UBhHX.js} +3 -3
- package/dist/{chunk-55IACEB6-DxNTqHZ8.js.map → chunk-55IACEB6-DZ-UBhHX.js.map} +1 -1
- package/dist/{chunk-7E7YKBS2-Bewg8t99.js → chunk-7E7YKBS2-BsywoVTt.js} +2 -2
- package/dist/{chunk-7E7YKBS2-Bewg8t99.js.map → chunk-7E7YKBS2-BsywoVTt.js.map} +1 -1
- package/dist/{chunk-7R4GIKGN-DiZ1HYFd.js → chunk-7R4GIKGN-DJmroLCH.js} +3 -3
- package/dist/{chunk-7R4GIKGN-DiZ1HYFd.js.map → chunk-7R4GIKGN-DJmroLCH.js.map} +1 -1
- package/dist/{chunk-C72U2L5F-BqOejReq.js → chunk-C72U2L5F-BwPwVDcP.js} +2 -2
- package/dist/{chunk-C72U2L5F-BqOejReq.js.map → chunk-C72U2L5F-BwPwVDcP.js.map} +1 -1
- package/dist/{chunk-EGIJ26TM-1-wU_wPi.js → chunk-EGIJ26TM-DKd5cEgn.js} +2 -2
- package/dist/{chunk-EGIJ26TM-1-wU_wPi.js.map → chunk-EGIJ26TM-DKd5cEgn.js.map} +1 -1
- package/dist/{chunk-FMBD7UC4-7bd068zf.js → chunk-FMBD7UC4-1IxrpdPX.js} +2 -2
- package/dist/{chunk-FMBD7UC4-7bd068zf.js.map → chunk-FMBD7UC4-1IxrpdPX.js.map} +1 -1
- package/dist/{chunk-GEFDOKGD-bXEkwPrJ.js → chunk-GEFDOKGD-DGJJEGSm.js} +7 -7
- package/dist/{chunk-GEFDOKGD-bXEkwPrJ.js.map → chunk-GEFDOKGD-DGJJEGSm.js.map} +1 -1
- package/dist/{chunk-GLR3WWYH-GIQ55uMn.js → chunk-GLR3WWYH-BDwmgwCA.js} +8 -8
- package/dist/{chunk-GLR3WWYH-GIQ55uMn.js.map → chunk-GLR3WWYH-BDwmgwCA.js.map} +1 -1
- package/dist/{chunk-HHEYEP7N-BdiTBCvb.js → chunk-HHEYEP7N-DJ1b-gA8.js} +4 -4
- package/dist/{chunk-HHEYEP7N-BdiTBCvb.js.map → chunk-HHEYEP7N-DJ1b-gA8.js.map} +1 -1
- package/dist/{chunk-JSJVCQXG-p-BUVvps.js → chunk-JSJVCQXG-Do17yYig.js} +5 -5
- package/dist/{chunk-JSJVCQXG-p-BUVvps.js.map → chunk-JSJVCQXG-Do17yYig.js.map} +1 -1
- package/dist/{chunk-KX2RTZJC-DopwIbE1.js → chunk-KX2RTZJC-d9jFqUAY.js} +3 -3
- package/dist/{chunk-KX2RTZJC-DopwIbE1.js.map → chunk-KX2RTZJC-d9jFqUAY.js.map} +1 -1
- package/dist/{chunk-KYZI473N-4Y4_4kXL.js → chunk-KYZI473N-BXYCe83A.js} +9 -9
- package/dist/{chunk-KYZI473N-4Y4_4kXL.js.map → chunk-KYZI473N-BXYCe83A.js.map} +1 -1
- package/dist/{chunk-L3YUKLVL-U6LYvPh7.js → chunk-L3YUKLVL-Y5k8UNMf.js} +2 -2
- package/dist/{chunk-L3YUKLVL-U6LYvPh7.js.map → chunk-L3YUKLVL-Y5k8UNMf.js.map} +1 -1
- package/dist/{chunk-MX3YWQON-DnBlqD44.js → chunk-MX3YWQON-D43mcq1f.js} +2 -2
- package/dist/{chunk-MX3YWQON-DnBlqD44.js.map → chunk-MX3YWQON-D43mcq1f.js.map} +1 -1
- package/dist/{chunk-NQ4KR5QH-BSylMz0X.js → chunk-NQ4KR5QH-C0nWShNk.js} +7 -7
- package/dist/{chunk-NQ4KR5QH-BSylMz0X.js.map → chunk-NQ4KR5QH-C0nWShNk.js.map} +1 -1
- package/dist/{chunk-O4XLMI2P-BcKxBhcn.js → chunk-O4XLMI2P-DtGEm9QX.js} +12 -12
- package/dist/{chunk-O4XLMI2P-BcKxBhcn.js.map → chunk-O4XLMI2P-DtGEm9QX.js.map} +1 -1
- package/dist/{chunk-OZEHJAEY-D6S6KbwY.js → chunk-OZEHJAEY-BsQ56PV-.js} +2 -2
- package/dist/{chunk-OZEHJAEY-D6S6KbwY.js.map → chunk-OZEHJAEY-BsQ56PV-.js.map} +1 -1
- package/dist/{chunk-PQ6SQG4A-DPz_e-Es.js → chunk-PQ6SQG4A-Cpfc5F4u.js} +3 -3
- package/dist/{chunk-PQ6SQG4A-DPz_e-Es.js.map → chunk-PQ6SQG4A-Cpfc5F4u.js.map} +1 -1
- package/dist/{chunk-PU5JKC2W-CAfe4Tg3.js → chunk-PU5JKC2W-DNpn_Yik.js} +5 -5
- package/dist/{chunk-PU5JKC2W-CAfe4Tg3.js.map → chunk-PU5JKC2W-DNpn_Yik.js.map} +1 -1
- package/dist/{chunk-QZHKN3VN-DMkPzlbH.js → chunk-QZHKN3VN-kDNdTVLo.js} +2 -2
- package/dist/{chunk-QZHKN3VN-DMkPzlbH.js.map → chunk-QZHKN3VN-kDNdTVLo.js.map} +1 -1
- package/dist/{chunk-R5LLSJPH-C90VQC8y.js → chunk-R5LLSJPH-c1IfaK5D.js} +2 -2
- package/dist/{chunk-R5LLSJPH-C90VQC8y.js.map → chunk-R5LLSJPH-c1IfaK5D.js.map} +1 -1
- package/dist/{chunk-WL4C6EOR-B2OMxQLL.js → chunk-WL4C6EOR-BV-op7zg.js} +10 -10
- package/dist/{chunk-WL4C6EOR-B2OMxQLL.js.map → chunk-WL4C6EOR-BV-op7zg.js.map} +1 -1
- package/dist/{chunk-XIRO2GV7-D1_jT4ch.js → chunk-XIRO2GV7-Bv1hlNLi.js} +2 -2
- package/dist/{chunk-XIRO2GV7-D1_jT4ch.js.map → chunk-XIRO2GV7-Bv1hlNLi.js.map} +1 -1
- package/dist/{chunk-XPW4576I-DkznIIIK.js → chunk-XPW4576I-BqiPnb3d.js} +2 -2
- package/dist/{chunk-XPW4576I-DkznIIIK.js.map → chunk-XPW4576I-BqiPnb3d.js.map} +1 -1
- package/dist/{chunk-XZSTWKYB-BZB_wvbZ.js → chunk-XZSTWKYB-C7maKWEr.js} +6 -6
- package/dist/{chunk-XZSTWKYB-BZB_wvbZ.js.map → chunk-XZSTWKYB-C7maKWEr.js.map} +1 -1
- package/dist/{chunk-YBOYWFTD-DVqQ1pen.js → chunk-YBOYWFTD-DkjEOcgZ.js} +4 -4
- package/dist/{chunk-YBOYWFTD-DVqQ1pen.js.map → chunk-YBOYWFTD-DkjEOcgZ.js.map} +1 -1
- package/dist/classDiagram-VBA2DB6C-DZfC0xPM.js +31 -0
- package/dist/{classDiagram-VBA2DB6C-DFfohpM0.js.map → classDiagram-VBA2DB6C-DZfC0xPM.js.map} +1 -1
- package/dist/classDiagram-v2-RAHNMMFH-CtWRD1ax.js +31 -0
- package/dist/{classDiagram-v2-RAHNMMFH-kUMm28FB.js.map → classDiagram-v2-RAHNMMFH-CtWRD1ax.js.map} +1 -1
- package/dist/{clone-DxI1nSTP.js → clone-CliVdNc8.js} +2 -2
- package/dist/{clone-DxI1nSTP.js.map → clone-CliVdNc8.js.map} +1 -1
- package/dist/{component-x2UxdKEC.js → component-C1Jiz1Ki.js} +1 -1
- package/dist/{component-x2UxdKEC.js.map → component-C1Jiz1Ki.js.map} +1 -1
- package/dist/components/index.js +3 -3
- package/dist/components/theme/accent-switcher.d.ts +2 -0
- package/dist/components/theme/accent-switcher.d.ts.map +1 -1
- package/dist/components/theme/accent-switcher.js +5 -1
- package/dist/components/theme/accent-switcher.js.map +1 -1
- package/dist/components/theme/density-switcher.d.ts +2 -0
- package/dist/components/theme/density-switcher.d.ts.map +1 -1
- package/dist/components/theme/density-switcher.js +5 -1
- package/dist/components/theme/density-switcher.js.map +1 -1
- package/dist/components/theme/font-stack-picker.d.ts +2 -0
- package/dist/components/theme/font-stack-picker.d.ts.map +1 -1
- package/dist/components/theme/font-stack-picker.js +5 -1
- package/dist/components/theme/font-stack-picker.js.map +1 -1
- package/dist/components/theme/glass-slider.d.ts +2 -0
- package/dist/components/theme/glass-slider.d.ts.map +1 -1
- package/dist/components/theme/glass-slider.js +21 -15
- package/dist/components/theme/glass-slider.js.map +1 -1
- package/dist/components/theme/icon-gallery-browser.d.ts +16 -0
- package/dist/components/theme/icon-gallery-browser.d.ts.map +1 -0
- package/dist/components/theme/icon-set-picker.d.ts +2 -0
- package/dist/components/theme/icon-set-picker.d.ts.map +1 -1
- package/dist/components/theme/icon-set-picker.js +29 -24
- package/dist/components/theme/icon-set-picker.js.map +1 -1
- package/dist/components/theme/icon-usage-matrix.d.ts +2 -0
- package/dist/components/theme/icon-usage-matrix.d.ts.map +1 -1
- package/dist/components/theme/icon-usage-matrix.js +11 -7
- package/dist/components/theme/icon-usage-matrix.js.map +1 -1
- package/dist/components/theme/index.js +3 -3
- package/dist/components/theme/radius-slider.d.ts +2 -0
- package/dist/components/theme/radius-slider.d.ts.map +1 -1
- package/dist/components/theme/radius-slider.js +17 -12
- package/dist/components/theme/radius-slider.js.map +1 -1
- package/dist/components/theme/theme-preset-grid.d.ts +2 -0
- package/dist/components/theme/theme-preset-grid.d.ts.map +1 -1
- package/dist/components/theme/theme-preset-grid.js +6 -2
- package/dist/components/theme/theme-preset-grid.js.map +1 -1
- package/dist/components/theme/theme-preview-tile.d.ts +2 -0
- package/dist/components/theme/theme-preview-tile.d.ts.map +1 -1
- package/dist/components/theme/theme-preview-tile.js +9 -5
- package/dist/components/theme/theme-preview-tile.js.map +1 -1
- package/dist/components/theme/theme-studio.d.ts +4 -0
- package/dist/components/theme/theme-studio.d.ts.map +1 -1
- package/dist/components/theme/theme-studio.js +2 -93
- package/dist/components/theme/theme-switcher.d.ts +2 -0
- package/dist/components/theme/theme-switcher.d.ts.map +1 -1
- package/dist/components/theme/theme-switcher.js +5 -1
- package/dist/components/theme/theme-switcher.js.map +1 -1
- package/dist/composites/metrics-card.js +1 -1
- package/dist/composites/per-case-stats-table.js +1 -1
- package/dist/composites/run-monitor.js +2 -2
- package/dist/{copy-Hv8btfHH.js → copy-CP6UzCoj.js} +2 -2
- package/dist/{copy-Hv8btfHH.js.map → copy-CP6UzCoj.js.map} +1 -1
- package/dist/{cose-bilkent-S5V4N54A-DSIl5_e8.js → cose-bilkent-S5V4N54A-DxM02fly.js} +4 -4
- package/dist/{cose-bilkent-S5V4N54A-DSIl5_e8.js.map → cose-bilkent-S5V4N54A-DxM02fly.js.map} +1 -1
- package/dist/{createLucideIcon-wKpAnzBe.js → createLucideIcon-Cfb5CZJx.js} +1 -1
- package/dist/{createLucideIcon-wKpAnzBe.js.map → createLucideIcon-Cfb5CZJx.js.map} +1 -1
- package/dist/{cytoscape.esm-klxrH6H1.js → cytoscape.esm-2vKMh7AJ.js} +1 -1
- package/dist/{cytoscape.esm-klxrH6H1.js.map → cytoscape.esm-2vKMh7AJ.js.map} +1 -1
- package/dist/{dagre-Bm7BZZKB.js → dagre-BqC9mhMk.js} +7 -7
- package/dist/{dagre-Bm7BZZKB.js.map → dagre-BqC9mhMk.js.map} +1 -1
- package/dist/{dagre-KLK3FWXG-B0rbfsw9.js → dagre-KLK3FWXG-DTKcsol6.js} +15 -15
- package/dist/{dagre-KLK3FWXG-B0rbfsw9.js.map → dagre-KLK3FWXG-DTKcsol6.js.map} +1 -1
- package/dist/{defaultLocale-Cql_qCPq.js → defaultLocale-PLHpRrsr.js} +1 -1
- package/dist/{defaultLocale-Cql_qCPq.js.map → defaultLocale-PLHpRrsr.js.map} +1 -1
- package/dist/{diagram-E7M64L7V-DWS26Zbm.js → diagram-E7M64L7V-Co7O3gub.js} +12 -12
- package/dist/{diagram-E7M64L7V-DWS26Zbm.js.map → diagram-E7M64L7V-Co7O3gub.js.map} +1 -1
- package/dist/{diagram-IFDJBPK2--zOQrB5O.js → diagram-IFDJBPK2-D-Enf1mK.js} +7 -7
- package/dist/{diagram-IFDJBPK2--zOQrB5O.js.map → diagram-IFDJBPK2-D-Enf1mK.js.map} +1 -1
- package/dist/{diagram-P4PSJMXO-DjNveg1t.js → diagram-P4PSJMXO-O8g_RIkM.js} +7 -7
- package/dist/{diagram-P4PSJMXO-DjNveg1t.js.map → diagram-P4PSJMXO-O8g_RIkM.js.map} +1 -1
- package/dist/display/avatar/index.js +1 -1
- package/dist/display/badge/index.js +1 -1
- package/dist/display/index.js +3 -3
- package/dist/display/markdown-viewer/index.js +1 -1
- package/dist/{dist-Dq1IoZXt.js → dist-B-HCSak9.js} +13 -13
- package/dist/{dist-Dq1IoZXt.js.map → dist-B-HCSak9.js.map} +1 -1
- package/dist/{dist-CbqFryer.js → dist-BhO08NBU.js} +5 -5
- package/dist/{dist-CbqFryer.js.map → dist-BhO08NBU.js.map} +1 -1
- package/dist/{dist-D0fg6pif.js → dist-BlNMcPtC.js} +2 -2
- package/dist/{dist-D0fg6pif.js.map → dist-BlNMcPtC.js.map} +1 -1
- package/dist/{dist-CSE7pO-4.js → dist-BrNloUiz.js} +1 -1
- package/dist/{dist-CSE7pO-4.js.map → dist-BrNloUiz.js.map} +1 -1
- package/dist/{dist-CcNjOWyQ.js → dist-Br_I_YIY.js} +2 -2
- package/dist/{dist-CcNjOWyQ.js.map → dist-Br_I_YIY.js.map} +1 -1
- package/dist/{dist-D0hHNX_3.js → dist-CDa1xTf4.js} +9 -9
- package/dist/{dist-D0hHNX_3.js.map → dist-CDa1xTf4.js.map} +1 -1
- package/dist/{dist-BCCeHAQm.js → dist-CWPamCJD.js} +2 -2
- package/dist/{dist-BCCeHAQm.js.map → dist-CWPamCJD.js.map} +1 -1
- package/dist/{dist-CVCn7F_m.js → dist-CetkIu6m.js} +1 -1
- package/dist/{dist-CVCn7F_m.js.map → dist-CetkIu6m.js.map} +1 -1
- package/dist/{dist-koa_pEtu.js → dist-CjZz16VT.js} +2 -2
- package/dist/{dist-koa_pEtu.js.map → dist-CjZz16VT.js.map} +1 -1
- package/dist/{dist-D5o6xae2.js → dist-DDlxLS_M.js} +2 -2
- package/dist/{dist-D5o6xae2.js.map → dist-DDlxLS_M.js.map} +1 -1
- package/dist/{dist-Cao8o5bZ.js → dist-DFW2ymX5.js} +1 -1
- package/dist/{dist-Cao8o5bZ.js.map → dist-DFW2ymX5.js.map} +1 -1
- package/dist/{dist-Dm7Xaded.js → dist-DHTh2jaC.js} +1 -1
- package/dist/{dist-Dm7Xaded.js.map → dist-DHTh2jaC.js.map} +1 -1
- package/dist/{dist-BBVMDH9A.js → dist-DN5XnB8I.js} +4 -4
- package/dist/{dist-BBVMDH9A.js.map → dist-DN5XnB8I.js.map} +1 -1
- package/dist/{dist-C0wG5dwG.js → dist-DYQiYO9a.js} +2 -2
- package/dist/{dist-C0wG5dwG.js.map → dist-DYQiYO9a.js.map} +1 -1
- package/dist/{dist-RmXz0NYF.js → dist-GA_FAY5r.js} +1 -1
- package/dist/{dist-RmXz0NYF.js.map → dist-GA_FAY5r.js.map} +1 -1
- package/dist/{dist-cMlzVrN6.js → dist-M-TigQUP.js} +3 -3
- package/dist/{dist-cMlzVrN6.js.map → dist-M-TigQUP.js.map} +1 -1
- package/dist/{dist-DxtM7vvP.js → dist-QzxcNtrD.js} +3 -3
- package/dist/{dist-DxtM7vvP.js.map → dist-QzxcNtrD.js.map} +1 -1
- package/dist/{dist-CTlQcJNK.js → dist-W53Bo1BJ.js} +1 -1
- package/dist/{dist-CTlQcJNK.js.map → dist-W53Bo1BJ.js.map} +1 -1
- package/dist/{dist-B1veE5DO.js → dist-bUQfhez2.js} +8 -8
- package/dist/{dist-B1veE5DO.js.map → dist-bUQfhez2.js.map} +1 -1
- package/dist/{dist-DGayZ3ok2.js → dist-e5OOjxMa.js} +2 -2
- package/dist/dist-e5OOjxMa.js.map +1 -0
- package/dist/{dist-CpMqmV-i.js → dist-r_mYhsAH.js} +2 -2
- package/dist/{dist-CpMqmV-i.js.map → dist-r_mYhsAH.js.map} +1 -1
- package/dist/{dropdown-menu-ChWWguC6.js → dropdown-menu-CxFMDZns.js} +7 -7
- package/dist/{dropdown-menu-ChWWguC6.js.map → dropdown-menu-CxFMDZns.js.map} +1 -1
- package/dist/{ellipsis-QzwbUxFu.js → ellipsis-CLIG9-2m.js} +2 -2
- package/dist/{ellipsis-QzwbUxFu.js.map → ellipsis-CLIG9-2m.js.map} +1 -1
- package/dist/{erDiagram-INFDFZHY-Ccs6kW39.js → erDiagram-INFDFZHY-C42JeR9I.js} +15 -15
- package/dist/{erDiagram-INFDFZHY-Ccs6kW39.js.map → erDiagram-INFDFZHY-C42JeR9I.js.map} +1 -1
- package/dist/{es2015-Bv2aaatg.js → es2015-CJnm4_FQ.js} +4 -4
- package/dist/{es2015-Bv2aaatg.js.map → es2015-CJnm4_FQ.js.map} +1 -1
- package/dist/{flowDiagram-PKNHOUZH-BFdCj6uy.js → flowDiagram-PKNHOUZH-DInJjOz3.js} +18 -18
- package/dist/{flowDiagram-PKNHOUZH-BFdCj6uy.js.map → flowDiagram-PKNHOUZH-DInJjOz3.js.map} +1 -1
- package/dist/{ganttDiagram-A5KZAMGK-11X4ChEO.js → ganttDiagram-A5KZAMGK-Dgp-4Yss.js} +8 -8
- package/dist/{ganttDiagram-A5KZAMGK-11X4ChEO.js.map → ganttDiagram-A5KZAMGK-Dgp-4Yss.js.map} +1 -1
- package/dist/gitGraph-HDMCJU4V-D_QsK6Rt.js +3 -0
- package/dist/{gitGraphDiagram-K3NZZRJ6-BaZX5GA5.js → gitGraphDiagram-K3NZZRJ6-Dr_X0dND.js} +8 -8
- package/dist/{gitGraphDiagram-K3NZZRJ6-BaZX5GA5.js.map → gitGraphDiagram-K3NZZRJ6-Dr_X0dND.js.map} +1 -1
- package/dist/{graphlib-DmFENmkJ.js → graphlib-ecencZTG.js} +4 -4
- package/dist/{graphlib-DmFENmkJ.js.map → graphlib-ecencZTG.js.map} +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +121 -121
- package/dist/info-3K5VOQVL-BbLiZXwn.js +3 -0
- package/dist/{infoDiagram-LFFYTUFH-iswGOIAk.js → infoDiagram-LFFYTUFH-DajJJRvc.js} +5 -5
- package/dist/{infoDiagram-LFFYTUFH-iswGOIAk.js.map → infoDiagram-LFFYTUFH-DajJJRvc.js.map} +1 -1
- package/dist/{init-Bdvvvy1Z.js → init-DcLTaNW1.js} +1 -1
- package/dist/{init-Bdvvvy1Z.js.map → init-DcLTaNW1.js.map} +1 -1
- package/dist/{input-DwHjxF_w.js → input-BrmncNsd.js} +1 -1
- package/dist/{input-DwHjxF_w.js.map → input-BrmncNsd.js.map} +1 -1
- package/dist/{interactive-C6OMqZhG.js → interactive-CXfIDzyh.js} +1 -1
- package/dist/{interactive-C6OMqZhG.js.map → interactive-CXfIDzyh.js.map} +1 -1
- package/dist/{isArrayLikeObject-uEhZQuCW.js → isArrayLikeObject-Bjsxaqj7.js} +1 -1
- package/dist/{isArrayLikeObject-uEhZQuCW.js.map → isArrayLikeObject-Bjsxaqj7.js.map} +1 -1
- package/dist/{isEmpty-SB7gHWzg.js → isEmpty-CeZZUVts.js} +2 -2
- package/dist/{isEmpty-SB7gHWzg.js.map → isEmpty-CeZZUVts.js.map} +1 -1
- package/dist/{ishikawaDiagram-PHBUUO56-BYrA8GRt.js → ishikawaDiagram-PHBUUO56-qHBJm2LT.js} +6 -6
- package/dist/{ishikawaDiagram-PHBUUO56-BYrA8GRt.js.map → ishikawaDiagram-PHBUUO56-qHBJm2LT.js.map} +1 -1
- package/dist/{journeyDiagram-4ABVD52K-BlCQNVun.js → journeyDiagram-4ABVD52K-PgfYdoDM.js} +7 -7
- package/dist/{journeyDiagram-4ABVD52K-BlCQNVun.js.map → journeyDiagram-4ABVD52K-PgfYdoDM.js.map} +1 -1
- package/dist/{kanban-definition-K7BYSVSG-85hLaVO4.js → kanban-definition-K7BYSVSG-DFRT8j7A.js} +11 -11
- package/dist/{kanban-definition-K7BYSVSG-85hLaVO4.js.map → kanban-definition-K7BYSVSG-DFRT8j7A.js.map} +1 -1
- package/dist/{katex-DyctUUDD.js → katex-BZdHnXin.js} +1 -1
- package/dist/{katex-DyctUUDD.js.map → katex-BZdHnXin.js.map} +1 -1
- package/dist/{label-DaoC8KCo.js → label-D_TX0q0F.js} +4 -4
- package/dist/{label-DaoC8KCo.js.map → label-D_TX0q0F.js.map} +1 -1
- package/dist/layout-DJ2E8nU0.js +135 -0
- package/dist/layout-DJ2E8nU0.js.map +1 -0
- package/dist/{line-xLJn8e8J.js → line-Cq1AZT4f.js} +4 -4
- package/dist/{line-xLJn8e8J.js.map → line-Cq1AZT4f.js.map} +1 -1
- package/dist/{linear-BePtLBEt.js → linear-BnJD01Xn.js} +5 -5
- package/dist/{linear-BePtLBEt.js.map → linear-BnJD01Xn.js.map} +1 -1
- package/dist/{markdown-viewer-DrwjEcXp.js → markdown-viewer-CBRQVRMp.js} +1 -1
- package/dist/{markdown-viewer-DrwjEcXp.js.map → markdown-viewer-CBRQVRMp.js.map} +1 -1
- package/dist/{math--xT1IZMK.js → math-D4gdAuwG.js} +1 -1
- package/dist/{math--xT1IZMK.js.map → math-D4gdAuwG.js.map} +1 -1
- package/dist/{menubar-CZie7LCj.js → menubar-lQZ-0ckw.js} +13 -13
- package/dist/{menubar-CZie7LCj.js.map → menubar-lQZ-0ckw.js.map} +1 -1
- package/dist/{mermaid-parser.core-Bd7Ghv5c.js → mermaid-parser.core-Dz5qv4CI.js} +16 -16
- package/dist/{mermaid-parser.core-Bd7Ghv5c.js.map → mermaid-parser.core-Dz5qv4CI.js.map} +1 -1
- package/dist/{mermaid.core-beWmNAWY.js → mermaid.core-DTiIXVKa.js} +44 -44
- package/dist/{mermaid.core-beWmNAWY.js.map → mermaid.core-DTiIXVKa.js.map} +1 -1
- package/dist/{mindmap-definition-YRQLILUH-CNBsYwDI.js → mindmap-definition-YRQLILUH-D95OPRMh.js} +13 -13
- package/dist/{mindmap-definition-YRQLILUH-CNBsYwDI.js.map → mindmap-definition-YRQLILUH-D95OPRMh.js.map} +1 -1
- package/dist/{navigation-menu-Db2QQ70P.js → navigation-menu-BpZTlEU0.js} +14 -14
- package/dist/{navigation-menu-Db2QQ70P.js.map → navigation-menu-BpZTlEU0.js.map} +1 -1
- package/dist/{ordinal-BKo-UFaW.js → ordinal-CC9tfh_g.js} +2 -2
- package/dist/{ordinal-BKo-UFaW.js.map → ordinal-CC9tfh_g.js.map} +1 -1
- package/dist/packet-RMMSAZCW-D72DRs1N.js +3 -0
- package/dist/{pagination-BmFjVnmV.js → pagination-CCjNavtQ.js} +5 -5
- package/dist/{pagination-BmFjVnmV.js.map → pagination-CCjNavtQ.js.map} +1 -1
- package/dist/{path-Z-HG_8i_.js → path-y0uQCOMW.js} +1 -1
- package/dist/{path-Z-HG_8i_.js.map → path-y0uQCOMW.js.map} +1 -1
- package/dist/pie-UPGHQEXC-C8RDLrEi.js +3 -0
- package/dist/{pieDiagram-SKSYHLDU-BMrGgUAv.js → pieDiagram-SKSYHLDU-BREEn_Sk.js} +12 -12
- package/dist/{pieDiagram-SKSYHLDU-BMrGgUAv.js.map → pieDiagram-SKSYHLDU-BREEn_Sk.js.map} +1 -1
- package/dist/primitives/button/index.js +1 -1
- package/dist/primitives/index.js +3 -3
- package/dist/primitives/input/index.js +1 -1
- package/dist/primitives/live-log-tail.js +1 -1
- package/dist/primitives/phase-progress.js +1 -1
- package/dist/primitives/sse-live-badge.js +1 -1
- package/dist/primitives/toggle/index.js +1 -1
- package/dist/primitives/yaml-override-editor.js +1 -1
- package/dist/primitives-BzQ6EvIx.js +380 -0
- package/dist/primitives-BzQ6EvIx.js.map +1 -0
- package/dist/{quadrantDiagram-337W2JSQ-kFO50yPy.js → quadrantDiagram-337W2JSQ-CcKc-h2o.js} +5 -5
- package/dist/{quadrantDiagram-337W2JSQ-kFO50yPy.js.map → quadrantDiagram-337W2JSQ-CcKc-h2o.js.map} +1 -1
- package/dist/radar-KQ55EAFF-DhmvjiyN.js +3 -0
- package/dist/{radio-group-Dum8cfXo.js → radio-group-8GO9_jRN.js} +10 -10
- package/dist/{radio-group-Dum8cfXo.js.map → radio-group-8GO9_jRN.js.map} +1 -1
- package/dist/react/app-switcher.js +1 -1
- package/dist/react/brand.js +1 -1
- package/dist/react/consent/preferences.js +1 -1
- package/dist/react/editors/code-editor.js +1 -1
- package/dist/react/editors/diff-viewer.js +1 -1
- package/dist/react/editors/json-viewer.js +1 -1
- package/dist/react/editors/log-viewer.js +1 -1
- package/dist/react/editors/yaml-editor.js +1 -1
- package/dist/react/feedback/notification-banner.js +2 -2
- package/dist/react/hooks/useSSE.js +1 -1
- package/dist/react/hooks/useStorage.js +1 -1
- package/dist/react/layout/app-shell.js +1 -1
- package/dist/react/layout/browser-layout.d.ts +12 -0
- package/dist/react/layout/browser-layout.d.ts.map +1 -0
- package/dist/react/layout/detail-header.d.ts +13 -0
- package/dist/react/layout/detail-header.d.ts.map +1 -0
- package/dist/react/layout/index.d.ts +4 -0
- package/dist/react/layout/index.d.ts.map +1 -1
- package/dist/react/layout/index.js +3 -2
- package/dist/react/layout/page-frame.d.ts +11 -0
- package/dist/react/layout/page-frame.d.ts.map +1 -0
- package/dist/react/layout/page-header.js +1 -1
- package/dist/react/layout/sub-nav.d.ts +15 -0
- package/dist/react/layout/sub-nav.d.ts.map +1 -0
- package/dist/react/primitives/alert-dialog.js +1 -1
- package/dist/react/primitives/alert.js +3 -3
- package/dist/react/primitives/animated-counter.js +1 -1
- package/dist/react/primitives/aspect-ratio.js +1 -1
- package/dist/react/primitives/attack-path.d.ts +1 -1
- package/dist/react/primitives/attack-path.js +2 -2
- package/dist/react/primitives/avatar.js +2 -2
- package/dist/react/primitives/badge.d.ts +1 -1
- package/dist/react/primitives/badge.js +3 -3
- package/dist/react/primitives/breadcrumb.js +3 -3
- package/dist/react/primitives/button.js +3 -3
- package/dist/react/primitives/calendar.js +1 -1
- package/dist/react/primitives/card.js +1 -1
- package/dist/react/primitives/carousel.js +1 -1
- package/dist/react/primitives/chart-area.js +1 -1
- package/dist/react/primitives/chart-bar.js +1 -1
- package/dist/react/primitives/chart-candlestick.js +1 -1
- package/dist/react/primitives/chart-frame.d.ts +14 -0
- package/dist/react/primitives/chart-frame.d.ts.map +1 -0
- package/dist/react/primitives/chart-funnel.js +1 -1
- package/dist/react/primitives/chart-gauge.js +1 -1
- package/dist/react/primitives/chart-heatmap.js +1 -1
- package/dist/react/primitives/chart-line.js +1 -1
- package/dist/react/primitives/chart-pie.js +1 -1
- package/dist/react/primitives/chart-radar.js +1 -1
- package/dist/react/primitives/chart-sankey.js +1 -1
- package/dist/react/primitives/chart-scatter.js +1 -1
- package/dist/react/primitives/chart-sparkline.js +1 -1
- package/dist/react/primitives/chart-treemap.js +1 -1
- package/dist/react/primitives/chart-waterfall.js +1 -1
- package/dist/react/primitives/chat-drawer.d.ts +13 -0
- package/dist/react/primitives/chat-drawer.d.ts.map +1 -0
- package/dist/react/primitives/chat-input.d.ts +10 -0
- package/dist/react/primitives/chat-input.d.ts.map +1 -0
- package/dist/react/primitives/checkbox.js +1 -1
- package/dist/react/primitives/code-block.js +3 -3
- package/dist/react/primitives/code-viewer.js +3 -3
- package/dist/react/primitives/collapsible.js +3 -3
- package/dist/react/primitives/color-picker.js +1 -1
- package/dist/react/primitives/context-menu.js +1 -1
- package/dist/react/primitives/copy-button.js +4 -4
- package/dist/react/primitives/cron-editor.js +1 -1
- package/dist/react/primitives/cvss-badge.d.ts +1 -1
- package/dist/react/primitives/cvss-badge.js +2 -2
- package/dist/react/primitives/dashboard-metric-card.d.ts +18 -0
- package/dist/react/primitives/dashboard-metric-card.d.ts.map +1 -0
- package/dist/react/primitives/data-field.d.ts +13 -0
- package/dist/react/primitives/data-field.d.ts.map +1 -0
- package/dist/react/primitives/data-grid.js +4 -4
- package/dist/react/primitives/data-table.js +2 -2
- package/dist/react/primitives/date-picker.js +1 -1
- package/dist/react/primitives/detection-status.d.ts +1 -1
- package/dist/react/primitives/detection-status.js +2 -2
- package/dist/react/primitives/dialog.js +3 -3
- package/dist/react/primitives/drawer.js +3 -3
- package/dist/react/primitives/dropdown-menu.js +1 -1
- package/dist/react/primitives/empty-state.js +1 -1
- package/dist/react/primitives/field.js +1 -1
- package/dist/react/primitives/file-tree.js +1 -1
- package/dist/react/primitives/flow-diagram.js +1 -1
- package/dist/react/primitives/heatmap-legend.js +1 -1
- package/dist/react/primitives/heatmap-toolbar.js +2 -2
- package/dist/react/primitives/hover-card.js +1 -1
- package/dist/react/primitives/index.d.ts +8 -0
- package/dist/react/primitives/index.d.ts.map +1 -1
- package/dist/react/primitives/index.js +84 -83
- package/dist/react/primitives/input.js +1 -1
- package/dist/react/primitives/json-path-browser.js +1 -1
- package/dist/react/primitives/kanban.js +1 -1
- package/dist/react/primitives/kbd.js +1 -1
- package/dist/react/primitives/label.js +1 -1
- package/dist/react/primitives/map.js +1 -1
- package/dist/react/primitives/markdown-viewer.js +0 -0
- package/dist/react/primitives/menubar.js +1 -1
- package/dist/react/primitives/mermaid-diagram.js +1 -1
- package/dist/react/primitives/metric-tile.js +1 -1
- package/dist/react/primitives/mitre-matrix.d.ts +1 -1
- package/dist/react/primitives/mitre-matrix.js +2 -2
- package/dist/react/primitives/modal.js +3 -3
- package/dist/react/primitives/navigation-menu.js +1 -1
- package/dist/react/primitives/network-graph.js +1 -1
- package/dist/react/primitives/notification-center.js +4 -4
- package/dist/react/primitives/notification-center.js.map +1 -1
- package/dist/react/primitives/pagination.js +1 -1
- package/dist/react/primitives/popover.js +1 -1
- package/dist/react/primitives/progress.js +2 -2
- package/dist/react/primitives/query-boundary.d.ts +15 -0
- package/dist/react/primitives/query-boundary.d.ts.map +1 -0
- package/dist/react/primitives/radio-group.js +1 -1
- package/dist/react/primitives/rule-editor.js +1 -1
- package/dist/react/primitives/score-ring.d.ts +13 -0
- package/dist/react/primitives/score-ring.d.ts.map +1 -0
- package/dist/react/primitives/scroll-area.js +1 -1
- package/dist/react/primitives/search.js +3 -3
- package/dist/react/primitives/section-panel.d.ts +11 -0
- package/dist/react/primitives/section-panel.d.ts.map +1 -0
- package/dist/react/primitives/select.js +1 -1
- package/dist/react/primitives/separator.js +1 -1
- package/dist/react/primitives/severity-indicator.d.ts +1 -1
- package/dist/react/primitives/severity-indicator.js +2 -2
- package/dist/react/primitives/sheet.js +3 -3
- package/dist/react/primitives/skeleton.js +1 -1
- package/dist/react/primitives/slide-panel.js +2 -2
- package/dist/react/primitives/slider.js +1 -1
- package/dist/react/primitives/spinner.js +1 -1
- package/dist/react/primitives/split-pane.js +1 -1
- package/dist/react/primitives/stat-card.js +2 -2
- package/dist/react/primitives/status-bar.js +1 -1
- package/dist/react/primitives/status-dot.js +1 -1
- package/dist/react/primitives/stepper.js +3 -3
- package/dist/react/primitives/switch.js +1 -1
- package/dist/react/primitives/table.js +1 -1
- package/dist/react/primitives/tabs.js +1 -1
- package/dist/react/primitives/tag-input.js +1 -1
- package/dist/react/primitives/terminal.js +1 -1
- package/dist/react/primitives/textarea.js +1 -1
- package/dist/react/primitives/timeline.js +1 -1
- package/dist/react/primitives/toast.js +1 -1
- package/dist/react/primitives/toggle.js +1 -1
- package/dist/react/primitives/tooltip.js +1 -1
- package/dist/react/primitives/tree-view.js +2 -2
- package/dist/react/primitives/typography.js +1 -1
- package/dist/react/primitives/uptime-bar.js +1 -1
- package/dist/react/primitives/vulnerability-card.d.ts +1 -1
- package/dist/react/primitives/vulnerability-card.js +2 -2
- package/dist/react/sidebar.js +2 -2
- package/dist/react/theme-studio.js +1 -1
- package/dist/react/theme-toggle.js +1 -1
- package/dist/react/topology.js +1 -1
- package/dist/react.js +103 -103
- package/dist/{requirementDiagram-Z7DCOOCP-D2Oxfw6G.js → requirementDiagram-Z7DCOOCP-aPcaPduF.js} +13 -13
- package/dist/{requirementDiagram-Z7DCOOCP-D2Oxfw6G.js.map → requirementDiagram-Z7DCOOCP-aPcaPduF.js.map} +1 -1
- package/dist/{rough.esm-Czyj4U3Q.js → rough.esm-C9rQ9YkE.js} +1 -1
- package/dist/{rough.esm-Czyj4U3Q.js.map → rough.esm-C9rQ9YkE.js.map} +1 -1
- package/dist/{sankeyDiagram-WA2Y5GQK-q1_lwNBY.js → sankeyDiagram-WA2Y5GQK-CO_lUqQX.js} +5 -5
- package/dist/{sankeyDiagram-WA2Y5GQK-q1_lwNBY.js.map → sankeyDiagram-WA2Y5GQK-CO_lUqQX.js.map} +1 -1
- package/dist/{scroll-area-CR1iK8Af.js → scroll-area-C_oeG0js.js} +8 -8
- package/dist/{scroll-area-CR1iK8Af.js.map → scroll-area-C_oeG0js.js.map} +1 -1
- package/dist/{search-CrxnZfZ5.js → search-Cu20LdaQ.js} +2 -2
- package/dist/{search-CrxnZfZ5.js.map → search-Cu20LdaQ.js.map} +1 -1
- package/dist/security/index.d.ts +2 -0
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +7 -6
- package/dist/security/mitre-data.d.ts +38 -0
- package/dist/security/mitre-data.d.ts.map +1 -0
- package/dist/security-AzmGrY2-.js +77 -0
- package/dist/security-AzmGrY2-.js.map +1 -0
- package/dist/{select-BX7KT3VP.js → select-Bc7Gn3Oa.js} +19 -19
- package/dist/{select-BX7KT3VP.js.map → select-Bc7Gn3Oa.js.map} +1 -1
- package/dist/{separator-C6KfB7ww.js → separator-C-OWzLst.js} +3 -3
- package/dist/{separator-C6KfB7ww.js.map → separator-C-OWzLst.js.map} +1 -1
- package/dist/{sequenceDiagram-2WXFIKYE-BCEaH0s_.js → sequenceDiagram-2WXFIKYE-D7Vh1Zld.js} +9 -9
- package/dist/{sequenceDiagram-2WXFIKYE-BCEaH0s_.js.map → sequenceDiagram-2WXFIKYE-D7Vh1Zld.js.map} +1 -1
- package/dist/{series-DMc2ZYyj.js → series-DrBALkNS.js} +2 -2
- package/dist/{series-DMc2ZYyj.js.map → series-DrBALkNS.js.map} +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/sse-react.js +1 -1
- package/dist/services/sse.js +1 -1
- package/dist/services/theme-engine/engine.d.ts.map +1 -1
- package/dist/services/theme-engine/fonts.d.ts.map +1 -1
- package/dist/services/theme-engine/icons.d.ts.map +1 -1
- package/dist/services/theme-engine/index.js +120 -48
- package/dist/services/theme-engine/index.js.map +1 -1
- package/dist/services/theme-engine/test-helpers.d.ts +13 -0
- package/dist/services/theme-engine/test-helpers.d.ts.map +1 -0
- package/dist/services/toast-react.js +2 -2
- package/dist/sidebar/index.js +1 -1
- package/dist/{slider-CLgdcoKC.js → slider-CJoWbXQt.js} +10 -10
- package/dist/{slider-CLgdcoKC.js.map → slider-CJoWbXQt.js.map} +1 -1
- package/dist/{src-hxErHTV1.js → src-BhNgmpel.js} +2 -2
- package/dist/{src-hxErHTV1.js.map → src-BhNgmpel.js.map} +1 -1
- package/dist/{src-BEYP07TO.js → src-D1EMXotX.js} +1 -1
- package/dist/{src-BEYP07TO.js.map → src-D1EMXotX.js.map} +1 -1
- package/dist/{sse-D0HLjufB.js → sse-DCaj9UFJ.js} +1 -1
- package/dist/{sse-D0HLjufB.js.map → sse-DCaj9UFJ.js.map} +1 -1
- package/dist/{stateDiagram-RAJIS63D-B-Mu-_BR.js → stateDiagram-RAJIS63D-DdiY5cf3.js} +18 -18
- package/dist/{stateDiagram-RAJIS63D-B-Mu-_BR.js.map → stateDiagram-RAJIS63D-DdiY5cf3.js.map} +1 -1
- package/dist/stateDiagram-v2-FVOUBMTO-CAWy0Pkh.js +29 -0
- package/dist/{stateDiagram-v2-FVOUBMTO-Cnp2uGxd.js.map → stateDiagram-v2-FVOUBMTO-CAWy0Pkh.js.map} +1 -1
- package/dist/{storage-B-gK537W.js → storage-BUlr2J4R.js} +1 -1
- package/dist/{storage-B-gK537W.js.map → storage-BUlr2J4R.js.map} +1 -1
- package/dist/styles/layout.css +18 -18
- package/dist/styles/sidebar.css +31 -19
- package/dist/styles/tenant-ui.css +34 -34
- package/dist/styles/theme-engine.css +546 -23
- package/dist/styles/theme.css +1 -0
- package/dist/styles/tokens.css +69 -34
- package/dist/styles/ui.css +5 -5
- package/dist/{switch-CoTkNGEB.js → switch-Dcd3Fyw_.js} +7 -7
- package/dist/{switch-CoTkNGEB.js.map → switch-Dcd3Fyw_.js.map} +1 -1
- package/dist/{tabs-BT2WAQcK.js → tabs-8AT2ntg_.js} +8 -8
- package/dist/{tabs-BT2WAQcK.js.map → tabs-8AT2ntg_.js.map} +1 -1
- package/dist/theme-studio-CN9Ipb9W.js +236 -0
- package/dist/theme-studio-CN9Ipb9W.js.map +1 -0
- package/dist/{theme-toggle-Csyj-tLm.js → theme-toggle-glKWbKG8.js} +2 -2
- package/dist/{theme-toggle-Csyj-tLm.js.map → theme-toggle-glKWbKG8.js.map} +1 -1
- package/dist/{timeline-definition-YZTLITO2-B0SegHNN.js → timeline-definition-YZTLITO2-CjxxCuOg.js} +5 -5
- package/dist/{timeline-definition-YZTLITO2-B0SegHNN.js.map → timeline-definition-YZTLITO2-CjxxCuOg.js.map} +1 -1
- package/dist/{toast-DRNPdj-R.js → toast-CawTm-7V.js} +6 -6
- package/dist/{toast-DRNPdj-R.js.map → toast-CawTm-7V.js.map} +1 -1
- package/dist/{toggle-DJJEPXXE.js → toggle-C8sazHXX.js} +7 -7
- package/dist/{toggle-DJJEPXXE.js.map → toggle-C8sazHXX.js.map} +1 -1
- package/dist/{toggle-D-WMiAg3.js → toggle-IUUynh_v.js} +1 -1
- package/dist/{toggle-D-WMiAg3.js.map → toggle-IUUynh_v.js.map} +1 -1
- package/dist/{tooltip-DuC73a5E.js → tooltip-NKOSxS28.js} +11 -11
- package/dist/{tooltip-DuC73a5E.js.map → tooltip-NKOSxS28.js.map} +1 -1
- package/dist/{topology-C4Q_kT9X.js → topology-C8cyIHlB.js} +5 -5
- package/dist/{topology-C4Q_kT9X.js.map → topology-C8cyIHlB.js.map} +1 -1
- package/dist/treemap-KZPCXAKY-BvLvHb2t.js +3 -0
- package/dist/{triangle-alert-CKjGAvtd.js → triangle-alert-BtwDDOUp.js} +2 -2
- package/dist/{triangle-alert-CKjGAvtd.js.map → triangle-alert-BtwDDOUp.js.map} +1 -1
- package/dist/types/confidence.d.ts +66 -0
- package/dist/types/confidence.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +6 -6
- package/dist/utils/sage-analysis.d.ts +51 -0
- package/dist/utils/sage-analysis.d.ts.map +1 -0
- package/dist/utils/score.d.ts +58 -0
- package/dist/utils/score.d.ts.map +1 -0
- package/dist/utils/status-tone.d.ts +4 -0
- package/dist/utils/status-tone.d.ts.map +1 -0
- package/dist/{utils-B7XIe3qq.js → utils-DcOSDVkb.js} +1 -1
- package/dist/{utils-B7XIe3qq.js.map → utils-DcOSDVkb.js.map} +1 -1
- package/dist/{utils-CHEq9Vpx.js → utils-JB2cYPor.js} +120 -2
- package/dist/utils-JB2cYPor.js.map +1 -0
- package/dist/{value-CybtvyUg.js → value-gSPnIECy.js} +2 -2
- package/dist/{value-CybtvyUg.js.map → value-gSPnIECy.js.map} +1 -1
- package/dist/{vennDiagram-LZ73GAT5-ClN0stHq.js → vennDiagram-LZ73GAT5-FqpGoq2s.js} +7 -7
- package/dist/{vennDiagram-LZ73GAT5-ClN0stHq.js.map → vennDiagram-LZ73GAT5-FqpGoq2s.js.map} +1 -1
- package/dist/visualization/mermaid-diagram/index.js +1 -1
- package/dist/{x-BleQvk5v.js → x-D2ovnRiN.js} +2 -2
- package/dist/{x-BleQvk5v.js.map → x-D2ovnRiN.js.map} +1 -1
- package/dist/{xychartDiagram-JWTSCODW-DjFaG2VD.js → xychartDiagram-JWTSCODW-BNEAK79X.js} +10 -10
- package/dist/{xychartDiagram-JWTSCODW-DjFaG2VD.js.map → xychartDiagram-JWTSCODW-BNEAK79X.js.map} +1 -1
- package/package.json +1 -1
- package/src/components/theme/accent-switcher.ts +9 -2
- package/src/components/theme/density-switcher.ts +7 -1
- package/src/components/theme/font-stack-picker.ts +7 -1
- package/src/components/theme/glass-slider.ts +19 -8
- package/src/components/theme/icon-gallery-browser.ts +191 -0
- package/src/components/theme/icon-set-picker.ts +19 -8
- package/src/components/theme/icon-usage-matrix.ts +15 -1
- package/src/components/theme/radius-slider.ts +14 -6
- package/src/components/theme/theme-preset-grid.ts +8 -2
- package/src/components/theme/theme-preview-tile.ts +11 -3
- package/src/components/theme/theme-studio-review.test.ts +253 -0
- package/src/components/theme/theme-studio.ts +100 -61
- package/src/components/theme/theme-switcher.ts +7 -1
- package/src/index.ts +11 -0
- package/src/react/layout/browser-layout.tsx +54 -0
- package/src/react/layout/detail-header.tsx +42 -0
- package/src/react/layout/index.ts +4 -0
- package/src/react/layout/page-frame.tsx +32 -0
- package/src/react/layout/sub-nav.tsx +72 -0
- package/src/react/primitives/chart-frame.tsx +51 -0
- package/src/react/primitives/chat-drawer.tsx +94 -0
- package/src/react/primitives/chat-input.tsx +134 -0
- package/src/react/primitives/dashboard-metric-card.tsx +78 -0
- package/src/react/primitives/data-field.tsx +54 -0
- package/src/react/primitives/index.ts +13 -0
- package/src/react/primitives/notification-center.tsx +3 -3
- package/src/react/primitives/query-boundary.tsx +71 -0
- package/src/react/primitives/score-ring.tsx +78 -0
- package/src/react/primitives/section-panel.tsx +42 -0
- package/src/security/index.ts +4 -0
- package/src/security/mitre-data.ts +60 -0
- package/src/services/theme-engine/engine.test.ts +3 -25
- package/src/services/theme-engine/engine.ts +35 -9
- package/src/services/theme-engine/fonts.ts +4 -0
- package/src/services/theme-engine/icons.ts +76 -9
- package/src/services/theme-engine/palettes.ts +2 -2
- package/src/services/theme-engine/test-helpers.ts +37 -0
- package/src/styles/layout.css +18 -18
- package/src/styles/sidebar.css +31 -19
- package/src/styles/tenant-ui.css +34 -34
- package/src/styles/theme-engine.css +546 -23
- package/src/styles/theme.css +1 -0
- package/src/styles/tokens.css +69 -34
- package/src/styles/ui.css +5 -5
- package/src/types/confidence.ts +72 -0
- package/src/types/index.ts +9 -0
- package/src/utils/__tests__/sage-analysis.test.ts +41 -0
- package/src/utils/__tests__/score.test.ts +232 -0
- package/src/utils/__tests__/status-tone.test.ts +164 -0
- package/src/utils/index.ts +29 -0
- package/src/utils/sage-analysis.ts +62 -0
- package/src/utils/score.ts +123 -0
- package/src/utils/status-tone.ts +48 -0
- package/dist/architecture-PBZL5I3N-gCfUhEfQ.js +0 -3
- package/dist/classDiagram-VBA2DB6C-DFfohpM0.js +0 -31
- package/dist/classDiagram-v2-RAHNMMFH-kUMm28FB.js +0 -31
- package/dist/components/theme/theme-studio.js.map +0 -1
- package/dist/dist-DGayZ3ok2.js.map +0 -1
- package/dist/gitGraph-HDMCJU4V--53HTu2M.js +0 -3
- package/dist/info-3K5VOQVL-CmVeZuiG.js +0 -3
- package/dist/packet-RMMSAZCW-jFj7IW8A.js +0 -3
- package/dist/pie-UPGHQEXC-osqmeuax.js +0 -3
- package/dist/radar-KQ55EAFF-Dj2g5Z-W.js +0 -3
- package/dist/stateDiagram-v2-FVOUBMTO-Cnp2uGxd.js +0 -29
- package/dist/treemap-KZPCXAKY-DQ1GEudW.js +0 -3
- package/dist/utils-CHEq9Vpx.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-
|
|
1
|
+
{"version":3,"file":"init-DcLTaNW1.js","names":[],"sources":["../node_modules/d3-scale/src/init.js"],"sourcesContent":["export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n"],"x_google_ignoreList":[0],"mappings":";AAAA,SAAgB,EAAU,GAAQ,GAAO;AACvC,SAAQ,UAAU,QAAlB;EACE,KAAK,EAAG;EACR,KAAK;AAAG,QAAK,MAAM,EAAO;AAAE;EAC5B;AAAS,QAAK,MAAM,EAAM,CAAC,OAAO,EAAO;AAAE;;AAE7C,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-DwHjxF_w.js","names":[],"sources":["../src/primitives/input/input-group.ts","../src/primitives/input/textarea.ts","../src/primitives/input/input-otp.ts","../src/primitives/input/ip-input.ts","../src/primitives/input/index.ts"],"sourcesContent":["/**\n * InputGroup - Groups an input with prefix/suffix elements\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type InputGroupConfig } from './types'\nimport { resolveContainer } from '../utils'\n\nexport class InputGroup {\n public readonly el: HTMLDivElement\n\n private prefixEl: HTMLDivElement | null = null\n private suffixEl: HTMLDivElement | null = null\n private readonly contentEl: HTMLDivElement\n\n constructor(config: InputGroupConfig) {\n this.el = document.createElement('div')\n this.el.className = 'cmm-input-group'\n\n if (config.className) {\n this.el.classList.add(config.className)\n }\n\n // Content area where the input is placed\n this.contentEl = document.createElement('div')\n this.contentEl.className = 'cmm-input-group__content'\n this.el.appendChild(this.contentEl)\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Set a prefix element or text before the input */\n setPrefix(content: HTMLElement | string): void {\n if (this.prefixEl !== null) {\n this.prefixEl.remove()\n }\n\n this.prefixEl = document.createElement('div')\n this.prefixEl.className = 'cmm-input-group__prefix'\n\n if (typeof content === 'string') {\n this.prefixEl.textContent = content\n } else {\n this.prefixEl.appendChild(content)\n }\n\n // Insert before content area\n this.el.insertBefore(this.prefixEl, this.contentEl)\n }\n\n /** Set a suffix element or text after the input */\n setSuffix(content: HTMLElement | string): void {\n if (this.suffixEl !== null) {\n this.suffixEl.remove()\n }\n\n this.suffixEl = document.createElement('div')\n this.suffixEl.className = 'cmm-input-group__suffix'\n\n if (typeof content === 'string') {\n this.suffixEl.textContent = content\n } else {\n this.suffixEl.appendChild(content)\n }\n\n // Insert after content area\n this.el.appendChild(this.suffixEl)\n }\n\n /** Get the content area element to append an input to */\n getContentEl(): HTMLDivElement {\n return this.contentEl\n }\n\n /** Remove from the DOM */\n destroy(): void {\n this.el.remove()\n }\n}\n","/**\n * Textarea - Multi-line text input component\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type TextareaConfig } from './types'\nimport { resolveContainer, uniqueId } from '../utils'\n\nexport class Textarea {\n public readonly el: HTMLDivElement\n public readonly textareaEl: HTMLTextAreaElement\n\n private readonly textareaId: string\n private countEl: HTMLSpanElement | null = null\n private readonly maxLength: number | undefined\n private readonly autoResize: boolean\n private readonly handlers: {\n input: () => void\n change: () => void\n focus: () => void\n blur: () => void\n }\n\n constructor(config: TextareaConfig) {\n this.textareaId = uniqueId('cmm-textarea')\n this.maxLength = config.maxLength\n this.autoResize = config.autoResize === true\n\n // Create wrapper\n this.el = document.createElement('div')\n this.el.className = 'cmm-textarea-wrapper'\n\n if (config.className) {\n this.el.classList.add(config.className)\n }\n\n // Create textarea\n this.textareaEl = document.createElement('textarea')\n this.textareaEl.id = this.textareaId\n this.textareaEl.className = 'cmm-textarea'\n\n if (config.placeholder !== undefined) {\n this.textareaEl.placeholder = config.placeholder\n }\n\n if (config.value !== undefined) {\n this.textareaEl.value = config.value\n }\n\n if (config.disabled === true) {\n this.textareaEl.disabled = true\n }\n\n if (config.readOnly === true) {\n this.textareaEl.readOnly = true\n }\n\n if (config.required === true) {\n this.textareaEl.required = true\n this.textareaEl.setAttribute('aria-required', 'true')\n }\n\n if (config.rows !== undefined) {\n this.textareaEl.rows = config.rows\n }\n\n if (this.maxLength !== undefined) {\n this.textareaEl.maxLength = this.maxLength\n }\n\n if (config.name !== undefined) {\n this.textareaEl.name = config.name\n }\n\n if (config.ariaLabel !== undefined) {\n this.textareaEl.setAttribute('aria-label', config.ariaLabel)\n }\n\n this.el.appendChild(this.textareaEl)\n\n // Character count display\n if (this.maxLength !== undefined) {\n this.countEl = document.createElement('span')\n this.countEl.className = 'cmm-textarea__count'\n this.updateCharCount()\n this.el.appendChild(this.countEl)\n }\n\n // Event handlers\n this.handlers = {\n input: () => {\n if (this.autoResize) {\n this.adjustHeight()\n }\n if (this.countEl !== null) {\n this.updateCharCount()\n }\n config.onInput?.(this.textareaEl.value)\n },\n change: () => {\n config.onChange?.(this.textareaEl.value)\n },\n focus: () => {\n config.onFocus?.()\n },\n blur: () => {\n config.onBlur?.()\n },\n }\n\n this.textareaEl.addEventListener('input', this.handlers.input)\n this.textareaEl.addEventListener('change', this.handlers.change)\n this.textareaEl.addEventListener('focus', this.handlers.focus)\n this.textareaEl.addEventListener('blur', this.handlers.blur)\n\n // Apply initial auto-resize\n if (this.autoResize && config.value !== undefined) {\n this.adjustHeight()\n }\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Get the current textarea value */\n getValue(): string {\n return this.textareaEl.value\n }\n\n /** Set the textarea value */\n setValue(value: string): void {\n this.textareaEl.value = value\n if (this.autoResize) {\n this.adjustHeight()\n }\n if (this.countEl !== null) {\n this.updateCharCount()\n }\n }\n\n /** Toggle the disabled state */\n setDisabled(disabled: boolean): void {\n this.textareaEl.disabled = disabled\n }\n\n /** Toggle the error state */\n setError(error: boolean): void {\n if (error) {\n this.textareaEl.classList.add('cmm-textarea--error')\n this.textareaEl.setAttribute('aria-invalid', 'true')\n } else {\n this.textareaEl.classList.remove('cmm-textarea--error')\n this.textareaEl.removeAttribute('aria-invalid')\n }\n }\n\n /** Remove from the DOM and clean up event listeners */\n destroy(): void {\n this.textareaEl.removeEventListener('input', this.handlers.input)\n this.textareaEl.removeEventListener('change', this.handlers.change)\n this.textareaEl.removeEventListener('focus', this.handlers.focus)\n this.textareaEl.removeEventListener('blur', this.handlers.blur)\n this.el.remove()\n }\n\n private adjustHeight(): void {\n this.textareaEl.style.height = 'auto'\n this.textareaEl.style.height = `${String(this.textareaEl.scrollHeight)}px`\n }\n\n private updateCharCount(): void {\n if (this.countEl !== null && this.maxLength !== undefined) {\n this.countEl.textContent = `${String(this.textareaEl.value.length)}/${String(this.maxLength)}`\n }\n }\n}\n","/**\n * InputOTP - OTP code input with individual character boxes\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type InputOTPConfig } from './types'\nimport { resolveContainer, uniqueId } from '../utils'\n\nexport class InputOTP {\n public readonly el: HTMLDivElement\n\n private readonly otpId: string\n private readonly digitInputs: HTMLInputElement[] = []\n private readonly length: number\n private readonly isMasked: boolean\n private readonly onComplete: ((value: string) => void) | undefined\n private readonly onChange: ((value: string) => void) | undefined\n private readonly inputHandlers = new Map<\n HTMLInputElement,\n {\n input: (e: Event) => void\n keydown: (e: KeyboardEvent) => void\n paste: (e: ClipboardEvent) => void\n focus: () => void\n }\n >()\n\n constructor(config: InputOTPConfig) {\n this.otpId = uniqueId('cmm-otp')\n this.length = config.length ?? 6\n this.isMasked = config.mask === true\n this.onComplete = config.onComplete\n this.onChange = config.onChange\n\n // Create container\n this.el = document.createElement('div')\n this.el.className = 'cmm-input-otp'\n this.el.setAttribute('role', 'group')\n\n if (config.ariaLabel !== undefined) {\n this.el.setAttribute('aria-label', config.ariaLabel)\n } else {\n this.el.setAttribute('aria-label', 'One-time password input')\n }\n\n // Create individual digit inputs\n for (let i = 0; i < this.length; i++) {\n const input = document.createElement('input')\n input.type = this.isMasked ? 'password' : 'text'\n input.className = 'cmm-input-otp__digit'\n input.maxLength = 1\n input.inputMode = 'numeric'\n input.autocomplete = 'one-time-code'\n input.id = `${this.otpId}-${String(i)}`\n input.setAttribute('aria-label', `Digit ${String(i + 1)} of ${String(this.length)}`)\n\n if (config.disabled === true) {\n input.disabled = true\n }\n\n const handlers = {\n input: (e: Event) => {\n this.handleDigitInput(i, e)\n },\n keydown: (e: KeyboardEvent) => {\n this.handleDigitKeydown(i, e)\n },\n paste: (e: ClipboardEvent) => {\n this.handlePaste(e)\n },\n focus: () => {\n input.select()\n },\n }\n\n input.addEventListener('input', handlers.input)\n input.addEventListener('keydown', handlers.keydown)\n input.addEventListener('paste', handlers.paste)\n input.addEventListener('focus', handlers.focus)\n\n this.inputHandlers.set(input, handlers)\n this.digitInputs.push(input)\n\n // Add separator after every 3rd digit (for 6-digit codes)\n if (i < this.length - 1 && (i + 1) % 3 === 0 && this.length === 6) {\n this.el.appendChild(input)\n const separator = document.createElement('span')\n separator.className = 'cmm-input-otp__separator'\n separator.textContent = '-'\n separator.setAttribute('aria-hidden', 'true')\n this.el.appendChild(separator)\n } else {\n this.el.appendChild(input)\n }\n }\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Get the concatenated OTP value */\n getValue(): string {\n return this.digitInputs.map(input => input.value).join('')\n }\n\n /** Set the OTP value by distributing characters across inputs */\n setValue(value: string): void {\n for (let i = 0; i < this.length; i++) {\n const input = this.digitInputs[i]\n const char = value[i]\n if (input !== undefined) {\n input.value = char ?? ''\n }\n }\n this.notifyChange()\n }\n\n /** Clear all inputs and focus the first one */\n clear(): void {\n for (const input of this.digitInputs) {\n input.value = ''\n }\n const first = this.digitInputs[0]\n if (first !== undefined) {\n first.focus()\n }\n this.notifyChange()\n }\n\n /** Toggle disabled state on all digit inputs */\n setDisabled(disabled: boolean): void {\n for (const input of this.digitInputs) {\n input.disabled = disabled\n }\n }\n\n /** Remove from the DOM and clean up event listeners */\n destroy(): void {\n for (const input of this.digitInputs) {\n const handlers = this.inputHandlers.get(input)\n if (handlers !== undefined) {\n input.removeEventListener('input', handlers.input)\n input.removeEventListener('keydown', handlers.keydown)\n input.removeEventListener('paste', handlers.paste)\n input.removeEventListener('focus', handlers.focus)\n }\n }\n this.inputHandlers.clear()\n this.el.remove()\n }\n\n private handleDigitInput(index: number, _e: Event): void {\n const input = this.digitInputs[index]\n if (input === undefined) {\n return\n }\n\n // Only allow single characters\n if (input.value.length > 1) {\n input.value = input.value.slice(0, 1)\n }\n\n // Auto-focus next input on character entry\n if (input.value.length === 1) {\n const next = this.digitInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n }\n\n this.notifyChange()\n\n // Check if all inputs are filled\n const value = this.getValue()\n if (value.length === this.length) {\n this.onComplete?.(value)\n }\n }\n\n private handleDigitKeydown(index: number, e: KeyboardEvent): void {\n const input = this.digitInputs[index]\n if (input === undefined) {\n return\n }\n\n if (e.key === 'Backspace') {\n if (input.value === '') {\n // Move to previous input on backspace when current is empty\n const prev = this.digitInputs[index - 1]\n if (prev !== undefined) {\n prev.focus()\n prev.value = ''\n this.notifyChange()\n }\n }\n } else if (e.key === 'ArrowLeft') {\n const prev = this.digitInputs[index - 1]\n if (prev !== undefined) {\n prev.focus()\n }\n } else if (e.key === 'ArrowRight') {\n const next = this.digitInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n }\n }\n\n private handlePaste(e: ClipboardEvent): void {\n e.preventDefault()\n const pastedData = e.clipboardData?.getData('text') ?? ''\n const chars = pastedData.replace(/\\s/g, '').slice(0, this.length)\n\n for (let i = 0; i < this.length; i++) {\n const input = this.digitInputs[i]\n const char = chars[i]\n if (input !== undefined) {\n input.value = char ?? ''\n }\n }\n\n // Focus the input after the last pasted character or the last input\n const focusIndex = Math.min(chars.length, this.length - 1)\n const target = this.digitInputs[focusIndex]\n if (target !== undefined) {\n target.focus()\n }\n\n this.notifyChange()\n\n if (chars.length >= this.length) {\n this.onComplete?.(this.getValue())\n }\n }\n\n private notifyChange(): void {\n this.onChange?.(this.getValue())\n }\n}\n","/**\n * IPInput - IP address input with segmented fields\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type IPInputConfig } from './types'\nimport { resolveContainer, uniqueId } from '../utils'\n\nconst IPV4_SEGMENTS = 4\nconst IPV4_MAX_VALUE = 255\nconst IPV6_SEGMENTS = 8\nconst IPV4_SEPARATOR = '.'\nconst IPV6_SEPARATOR = ':'\n\nexport class IPInput {\n public readonly el: HTMLDivElement\n\n private readonly ipId: string\n private readonly version: 4 | 6\n private readonly segmentCount: number\n private readonly segmentInputs: HTMLInputElement[] = []\n private readonly separator: string\n private readonly onChange: ((value: string) => void) | undefined\n private readonly inputHandlers = new Map<\n HTMLInputElement,\n {\n input: (e: Event) => void\n keydown: (e: KeyboardEvent) => void\n focus: () => void\n }\n >()\n\n constructor(config: IPInputConfig) {\n this.ipId = uniqueId('cmm-ip')\n this.version = config.version ?? 4\n this.segmentCount = this.version === 4 ? IPV4_SEGMENTS : IPV6_SEGMENTS\n this.separator = this.version === 4 ? IPV4_SEPARATOR : IPV6_SEPARATOR\n this.onChange = config.onChange\n\n // Create container\n this.el = document.createElement('div')\n this.el.className = `cmm-ip-input cmm-ip-input--v${String(this.version)}`\n this.el.setAttribute('role', 'group')\n\n if (config.ariaLabel !== undefined) {\n this.el.setAttribute('aria-label', config.ariaLabel)\n } else {\n this.el.setAttribute('aria-label', `IPv${String(this.version)} address input`)\n }\n\n // Create segment inputs\n for (let i = 0; i < this.segmentCount; i++) {\n const input = document.createElement('input')\n input.type = 'text'\n input.className = 'cmm-ip-input__segment'\n input.id = `${this.ipId}-${String(i)}`\n input.inputMode = this.version === 4 ? 'numeric' : 'text'\n input.maxLength = this.version === 4 ? 3 : 4\n input.placeholder = this.version === 4 ? '0' : '0000'\n input.setAttribute('aria-label', `Segment ${String(i + 1)} of ${String(this.segmentCount)}`)\n\n if (config.disabled === true) {\n input.disabled = true\n }\n\n const handlers = {\n input: (_e: Event) => {\n this.handleSegmentInput(i)\n },\n keydown: (e: KeyboardEvent) => {\n this.handleSegmentKeydown(i, e)\n },\n focus: () => {\n input.select()\n },\n }\n\n input.addEventListener('input', handlers.input)\n input.addEventListener('keydown', handlers.keydown)\n input.addEventListener('focus', handlers.focus)\n\n this.inputHandlers.set(input, handlers)\n this.segmentInputs.push(input)\n\n this.el.appendChild(input)\n\n // Add separator between segments\n if (i < this.segmentCount - 1) {\n const sep = document.createElement('span')\n sep.className = 'cmm-ip-input__separator'\n sep.textContent = this.separator\n sep.setAttribute('aria-hidden', 'true')\n this.el.appendChild(sep)\n }\n }\n\n // Set initial value if provided\n if (config.value !== undefined) {\n this.setValue(config.value)\n }\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Get the full IP address string */\n getValue(): string {\n return this.segmentInputs.map(input => input.value).join(this.separator)\n }\n\n /** Set the IP address value by parsing and distributing segments */\n setValue(value: string): void {\n const parts = value.split(this.separator)\n for (let i = 0; i < this.segmentCount; i++) {\n const input = this.segmentInputs[i]\n const part = parts[i]\n if (input !== undefined) {\n input.value = part ?? ''\n }\n }\n }\n\n /** Toggle disabled state on all segment inputs */\n setDisabled(disabled: boolean): void {\n for (const input of this.segmentInputs) {\n input.disabled = disabled\n }\n }\n\n /** Remove from the DOM and clean up event listeners */\n destroy(): void {\n for (const input of this.segmentInputs) {\n const handlers = this.inputHandlers.get(input)\n if (handlers !== undefined) {\n input.removeEventListener('input', handlers.input)\n input.removeEventListener('keydown', handlers.keydown)\n input.removeEventListener('focus', handlers.focus)\n }\n }\n this.inputHandlers.clear()\n this.el.remove()\n }\n\n private handleSegmentInput(index: number): void {\n const input = this.segmentInputs[index]\n if (input === undefined) {\n return\n }\n\n // Validate and sanitize input\n if (this.version === 4) {\n this.sanitizeIPv4Segment(input)\n } else {\n this.sanitizeIPv6Segment(input)\n }\n\n // Auto-advance when segment is full\n const maxLen = this.version === 4 ? 3 : 4\n if (input.value.length >= maxLen) {\n const next = this.segmentInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n }\n\n this.onChange?.(this.getValue())\n }\n\n private handleSegmentKeydown(index: number, e: KeyboardEvent): void {\n const input = this.segmentInputs[index]\n if (input === undefined) {\n return\n }\n\n // Auto-advance on separator key\n if ((this.version === 4 && e.key === '.') || (this.version === 6 && e.key === ':')) {\n e.preventDefault()\n const next = this.segmentInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n return\n }\n\n if (e.key === 'Backspace' && input.value === '') {\n const prev = this.segmentInputs[index - 1]\n if (prev !== undefined) {\n prev.focus()\n }\n } else if (e.key === 'ArrowLeft' && input.selectionStart === 0) {\n const prev = this.segmentInputs[index - 1]\n if (prev !== undefined) {\n prev.focus()\n }\n } else if (e.key === 'ArrowRight' && input.selectionStart === input.value.length) {\n const next = this.segmentInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n }\n }\n\n private sanitizeIPv4Segment(input: HTMLInputElement): void {\n // Remove non-numeric characters\n const cleaned = input.value.replace(/[^0-9]/g, '')\n const num = parseInt(cleaned, 10)\n\n if (cleaned === '') {\n input.value = ''\n } else if (Number.isNaN(num)) {\n input.value = ''\n } else if (num > IPV4_MAX_VALUE) {\n input.value = String(IPV4_MAX_VALUE)\n } else {\n input.value = cleaned\n }\n }\n\n private sanitizeIPv6Segment(input: HTMLInputElement): void {\n // Remove non-hex characters\n input.value = input.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 4)\n }\n}\n","/**\n * Input - Text input component with wrapper\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type InputConfig, type InputSize } from './types'\nimport { resolveContainer, uniqueId } from '../utils'\n\nexport type {\n InputConfig,\n InputType,\n InputSize,\n InputGroupConfig,\n TextareaConfig,\n InputOTPConfig,\n IPInputConfig,\n} from './types'\nexport { InputGroup } from './input-group'\nexport { Textarea } from './textarea'\nexport { InputOTP } from './input-otp'\nexport { IPInput } from './ip-input'\n\nexport class Input {\n public readonly el: HTMLDivElement\n public readonly inputEl: HTMLInputElement\n\n private readonly inputId: string\n private currentSize: InputSize\n private readonly handlers: {\n input: (e: Event) => void\n change: (e: Event) => void\n focus: () => void\n blur: () => void\n keydown: (e: KeyboardEvent) => void\n }\n\n constructor(config: InputConfig) {\n this.inputId = uniqueId('cmm-input')\n this.currentSize = config.size ?? 'md'\n\n // Create wrapper\n this.el = document.createElement('div')\n this.el.className = 'cmm-input-wrapper'\n\n // Create input element\n this.inputEl = document.createElement('input')\n this.inputEl.id = this.inputId\n this.inputEl.type = config.type ?? 'text'\n this.inputEl.className = `cmm-input cmm-input--${this.currentSize}`\n\n if (config.className) {\n this.el.classList.add(config.className)\n }\n\n if (config.placeholder !== undefined) {\n this.inputEl.placeholder = config.placeholder\n }\n\n if (config.value !== undefined) {\n this.inputEl.value = config.value\n }\n\n if (config.disabled === true) {\n this.inputEl.disabled = true\n }\n\n if (config.readOnly === true) {\n this.inputEl.readOnly = true\n }\n\n if (config.required === true) {\n this.inputEl.required = true\n this.inputEl.setAttribute('aria-required', 'true')\n }\n\n if (config.name !== undefined) {\n this.inputEl.name = config.name\n }\n\n if (config.ariaLabel !== undefined) {\n this.inputEl.setAttribute('aria-label', config.ariaLabel)\n }\n\n if (config.maxLength !== undefined) {\n this.inputEl.maxLength = config.maxLength\n }\n\n if (config.pattern !== undefined) {\n this.inputEl.pattern = config.pattern\n }\n\n if (config.autocomplete !== undefined) {\n this.inputEl.setAttribute('autocomplete', config.autocomplete)\n }\n\n // Event handlers\n this.handlers = {\n input: (_e: Event) => {\n config.onInput?.(this.inputEl.value)\n },\n change: (_e: Event) => {\n config.onChange?.(this.inputEl.value)\n },\n focus: () => {\n config.onFocus?.()\n },\n blur: () => {\n config.onBlur?.()\n },\n keydown: (e: KeyboardEvent) => {\n config.onKeyDown?.(e)\n },\n }\n\n this.inputEl.addEventListener('input', this.handlers.input)\n this.inputEl.addEventListener('change', this.handlers.change)\n this.inputEl.addEventListener('focus', this.handlers.focus)\n this.inputEl.addEventListener('blur', this.handlers.blur)\n this.inputEl.addEventListener('keydown', this.handlers.keydown)\n\n this.el.appendChild(this.inputEl)\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Get the current input value */\n getValue(): string {\n return this.inputEl.value\n }\n\n /** Set the input value */\n setValue(value: string): void {\n this.inputEl.value = value\n }\n\n /** Toggle the disabled state */\n setDisabled(disabled: boolean): void {\n this.inputEl.disabled = disabled\n }\n\n /** Toggle the error state */\n setError(error: boolean): void {\n if (error) {\n this.inputEl.classList.add('cmm-input--error')\n this.inputEl.setAttribute('aria-invalid', 'true')\n } else {\n this.inputEl.classList.remove('cmm-input--error')\n this.inputEl.removeAttribute('aria-invalid')\n }\n }\n\n /** Focus the input element */\n focus(): void {\n this.inputEl.focus()\n }\n\n /** Blur the input element */\n blur(): void {\n this.inputEl.blur()\n }\n\n /** Remove from the DOM and clean up event listeners */\n destroy(): void {\n this.inputEl.removeEventListener('input', this.handlers.input)\n this.inputEl.removeEventListener('change', this.handlers.change)\n this.inputEl.removeEventListener('focus', this.handlers.focus)\n this.inputEl.removeEventListener('blur', this.handlers.blur)\n this.inputEl.removeEventListener('keydown', this.handlers.keydown)\n this.el.remove()\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"input-BrmncNsd.js","names":[],"sources":["../src/primitives/input/input-group.ts","../src/primitives/input/textarea.ts","../src/primitives/input/input-otp.ts","../src/primitives/input/ip-input.ts","../src/primitives/input/index.ts"],"sourcesContent":["/**\n * InputGroup - Groups an input with prefix/suffix elements\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type InputGroupConfig } from './types'\nimport { resolveContainer } from '../utils'\n\nexport class InputGroup {\n public readonly el: HTMLDivElement\n\n private prefixEl: HTMLDivElement | null = null\n private suffixEl: HTMLDivElement | null = null\n private readonly contentEl: HTMLDivElement\n\n constructor(config: InputGroupConfig) {\n this.el = document.createElement('div')\n this.el.className = 'cmm-input-group'\n\n if (config.className) {\n this.el.classList.add(config.className)\n }\n\n // Content area where the input is placed\n this.contentEl = document.createElement('div')\n this.contentEl.className = 'cmm-input-group__content'\n this.el.appendChild(this.contentEl)\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Set a prefix element or text before the input */\n setPrefix(content: HTMLElement | string): void {\n if (this.prefixEl !== null) {\n this.prefixEl.remove()\n }\n\n this.prefixEl = document.createElement('div')\n this.prefixEl.className = 'cmm-input-group__prefix'\n\n if (typeof content === 'string') {\n this.prefixEl.textContent = content\n } else {\n this.prefixEl.appendChild(content)\n }\n\n // Insert before content area\n this.el.insertBefore(this.prefixEl, this.contentEl)\n }\n\n /** Set a suffix element or text after the input */\n setSuffix(content: HTMLElement | string): void {\n if (this.suffixEl !== null) {\n this.suffixEl.remove()\n }\n\n this.suffixEl = document.createElement('div')\n this.suffixEl.className = 'cmm-input-group__suffix'\n\n if (typeof content === 'string') {\n this.suffixEl.textContent = content\n } else {\n this.suffixEl.appendChild(content)\n }\n\n // Insert after content area\n this.el.appendChild(this.suffixEl)\n }\n\n /** Get the content area element to append an input to */\n getContentEl(): HTMLDivElement {\n return this.contentEl\n }\n\n /** Remove from the DOM */\n destroy(): void {\n this.el.remove()\n }\n}\n","/**\n * Textarea - Multi-line text input component\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type TextareaConfig } from './types'\nimport { resolveContainer, uniqueId } from '../utils'\n\nexport class Textarea {\n public readonly el: HTMLDivElement\n public readonly textareaEl: HTMLTextAreaElement\n\n private readonly textareaId: string\n private countEl: HTMLSpanElement | null = null\n private readonly maxLength: number | undefined\n private readonly autoResize: boolean\n private readonly handlers: {\n input: () => void\n change: () => void\n focus: () => void\n blur: () => void\n }\n\n constructor(config: TextareaConfig) {\n this.textareaId = uniqueId('cmm-textarea')\n this.maxLength = config.maxLength\n this.autoResize = config.autoResize === true\n\n // Create wrapper\n this.el = document.createElement('div')\n this.el.className = 'cmm-textarea-wrapper'\n\n if (config.className) {\n this.el.classList.add(config.className)\n }\n\n // Create textarea\n this.textareaEl = document.createElement('textarea')\n this.textareaEl.id = this.textareaId\n this.textareaEl.className = 'cmm-textarea'\n\n if (config.placeholder !== undefined) {\n this.textareaEl.placeholder = config.placeholder\n }\n\n if (config.value !== undefined) {\n this.textareaEl.value = config.value\n }\n\n if (config.disabled === true) {\n this.textareaEl.disabled = true\n }\n\n if (config.readOnly === true) {\n this.textareaEl.readOnly = true\n }\n\n if (config.required === true) {\n this.textareaEl.required = true\n this.textareaEl.setAttribute('aria-required', 'true')\n }\n\n if (config.rows !== undefined) {\n this.textareaEl.rows = config.rows\n }\n\n if (this.maxLength !== undefined) {\n this.textareaEl.maxLength = this.maxLength\n }\n\n if (config.name !== undefined) {\n this.textareaEl.name = config.name\n }\n\n if (config.ariaLabel !== undefined) {\n this.textareaEl.setAttribute('aria-label', config.ariaLabel)\n }\n\n this.el.appendChild(this.textareaEl)\n\n // Character count display\n if (this.maxLength !== undefined) {\n this.countEl = document.createElement('span')\n this.countEl.className = 'cmm-textarea__count'\n this.updateCharCount()\n this.el.appendChild(this.countEl)\n }\n\n // Event handlers\n this.handlers = {\n input: () => {\n if (this.autoResize) {\n this.adjustHeight()\n }\n if (this.countEl !== null) {\n this.updateCharCount()\n }\n config.onInput?.(this.textareaEl.value)\n },\n change: () => {\n config.onChange?.(this.textareaEl.value)\n },\n focus: () => {\n config.onFocus?.()\n },\n blur: () => {\n config.onBlur?.()\n },\n }\n\n this.textareaEl.addEventListener('input', this.handlers.input)\n this.textareaEl.addEventListener('change', this.handlers.change)\n this.textareaEl.addEventListener('focus', this.handlers.focus)\n this.textareaEl.addEventListener('blur', this.handlers.blur)\n\n // Apply initial auto-resize\n if (this.autoResize && config.value !== undefined) {\n this.adjustHeight()\n }\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Get the current textarea value */\n getValue(): string {\n return this.textareaEl.value\n }\n\n /** Set the textarea value */\n setValue(value: string): void {\n this.textareaEl.value = value\n if (this.autoResize) {\n this.adjustHeight()\n }\n if (this.countEl !== null) {\n this.updateCharCount()\n }\n }\n\n /** Toggle the disabled state */\n setDisabled(disabled: boolean): void {\n this.textareaEl.disabled = disabled\n }\n\n /** Toggle the error state */\n setError(error: boolean): void {\n if (error) {\n this.textareaEl.classList.add('cmm-textarea--error')\n this.textareaEl.setAttribute('aria-invalid', 'true')\n } else {\n this.textareaEl.classList.remove('cmm-textarea--error')\n this.textareaEl.removeAttribute('aria-invalid')\n }\n }\n\n /** Remove from the DOM and clean up event listeners */\n destroy(): void {\n this.textareaEl.removeEventListener('input', this.handlers.input)\n this.textareaEl.removeEventListener('change', this.handlers.change)\n this.textareaEl.removeEventListener('focus', this.handlers.focus)\n this.textareaEl.removeEventListener('blur', this.handlers.blur)\n this.el.remove()\n }\n\n private adjustHeight(): void {\n this.textareaEl.style.height = 'auto'\n this.textareaEl.style.height = `${String(this.textareaEl.scrollHeight)}px`\n }\n\n private updateCharCount(): void {\n if (this.countEl !== null && this.maxLength !== undefined) {\n this.countEl.textContent = `${String(this.textareaEl.value.length)}/${String(this.maxLength)}`\n }\n }\n}\n","/**\n * InputOTP - OTP code input with individual character boxes\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type InputOTPConfig } from './types'\nimport { resolveContainer, uniqueId } from '../utils'\n\nexport class InputOTP {\n public readonly el: HTMLDivElement\n\n private readonly otpId: string\n private readonly digitInputs: HTMLInputElement[] = []\n private readonly length: number\n private readonly isMasked: boolean\n private readonly onComplete: ((value: string) => void) | undefined\n private readonly onChange: ((value: string) => void) | undefined\n private readonly inputHandlers = new Map<\n HTMLInputElement,\n {\n input: (e: Event) => void\n keydown: (e: KeyboardEvent) => void\n paste: (e: ClipboardEvent) => void\n focus: () => void\n }\n >()\n\n constructor(config: InputOTPConfig) {\n this.otpId = uniqueId('cmm-otp')\n this.length = config.length ?? 6\n this.isMasked = config.mask === true\n this.onComplete = config.onComplete\n this.onChange = config.onChange\n\n // Create container\n this.el = document.createElement('div')\n this.el.className = 'cmm-input-otp'\n this.el.setAttribute('role', 'group')\n\n if (config.ariaLabel !== undefined) {\n this.el.setAttribute('aria-label', config.ariaLabel)\n } else {\n this.el.setAttribute('aria-label', 'One-time password input')\n }\n\n // Create individual digit inputs\n for (let i = 0; i < this.length; i++) {\n const input = document.createElement('input')\n input.type = this.isMasked ? 'password' : 'text'\n input.className = 'cmm-input-otp__digit'\n input.maxLength = 1\n input.inputMode = 'numeric'\n input.autocomplete = 'one-time-code'\n input.id = `${this.otpId}-${String(i)}`\n input.setAttribute('aria-label', `Digit ${String(i + 1)} of ${String(this.length)}`)\n\n if (config.disabled === true) {\n input.disabled = true\n }\n\n const handlers = {\n input: (e: Event) => {\n this.handleDigitInput(i, e)\n },\n keydown: (e: KeyboardEvent) => {\n this.handleDigitKeydown(i, e)\n },\n paste: (e: ClipboardEvent) => {\n this.handlePaste(e)\n },\n focus: () => {\n input.select()\n },\n }\n\n input.addEventListener('input', handlers.input)\n input.addEventListener('keydown', handlers.keydown)\n input.addEventListener('paste', handlers.paste)\n input.addEventListener('focus', handlers.focus)\n\n this.inputHandlers.set(input, handlers)\n this.digitInputs.push(input)\n\n // Add separator after every 3rd digit (for 6-digit codes)\n if (i < this.length - 1 && (i + 1) % 3 === 0 && this.length === 6) {\n this.el.appendChild(input)\n const separator = document.createElement('span')\n separator.className = 'cmm-input-otp__separator'\n separator.textContent = '-'\n separator.setAttribute('aria-hidden', 'true')\n this.el.appendChild(separator)\n } else {\n this.el.appendChild(input)\n }\n }\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Get the concatenated OTP value */\n getValue(): string {\n return this.digitInputs.map(input => input.value).join('')\n }\n\n /** Set the OTP value by distributing characters across inputs */\n setValue(value: string): void {\n for (let i = 0; i < this.length; i++) {\n const input = this.digitInputs[i]\n const char = value[i]\n if (input !== undefined) {\n input.value = char ?? ''\n }\n }\n this.notifyChange()\n }\n\n /** Clear all inputs and focus the first one */\n clear(): void {\n for (const input of this.digitInputs) {\n input.value = ''\n }\n const first = this.digitInputs[0]\n if (first !== undefined) {\n first.focus()\n }\n this.notifyChange()\n }\n\n /** Toggle disabled state on all digit inputs */\n setDisabled(disabled: boolean): void {\n for (const input of this.digitInputs) {\n input.disabled = disabled\n }\n }\n\n /** Remove from the DOM and clean up event listeners */\n destroy(): void {\n for (const input of this.digitInputs) {\n const handlers = this.inputHandlers.get(input)\n if (handlers !== undefined) {\n input.removeEventListener('input', handlers.input)\n input.removeEventListener('keydown', handlers.keydown)\n input.removeEventListener('paste', handlers.paste)\n input.removeEventListener('focus', handlers.focus)\n }\n }\n this.inputHandlers.clear()\n this.el.remove()\n }\n\n private handleDigitInput(index: number, _e: Event): void {\n const input = this.digitInputs[index]\n if (input === undefined) {\n return\n }\n\n // Only allow single characters\n if (input.value.length > 1) {\n input.value = input.value.slice(0, 1)\n }\n\n // Auto-focus next input on character entry\n if (input.value.length === 1) {\n const next = this.digitInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n }\n\n this.notifyChange()\n\n // Check if all inputs are filled\n const value = this.getValue()\n if (value.length === this.length) {\n this.onComplete?.(value)\n }\n }\n\n private handleDigitKeydown(index: number, e: KeyboardEvent): void {\n const input = this.digitInputs[index]\n if (input === undefined) {\n return\n }\n\n if (e.key === 'Backspace') {\n if (input.value === '') {\n // Move to previous input on backspace when current is empty\n const prev = this.digitInputs[index - 1]\n if (prev !== undefined) {\n prev.focus()\n prev.value = ''\n this.notifyChange()\n }\n }\n } else if (e.key === 'ArrowLeft') {\n const prev = this.digitInputs[index - 1]\n if (prev !== undefined) {\n prev.focus()\n }\n } else if (e.key === 'ArrowRight') {\n const next = this.digitInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n }\n }\n\n private handlePaste(e: ClipboardEvent): void {\n e.preventDefault()\n const pastedData = e.clipboardData?.getData('text') ?? ''\n const chars = pastedData.replace(/\\s/g, '').slice(0, this.length)\n\n for (let i = 0; i < this.length; i++) {\n const input = this.digitInputs[i]\n const char = chars[i]\n if (input !== undefined) {\n input.value = char ?? ''\n }\n }\n\n // Focus the input after the last pasted character or the last input\n const focusIndex = Math.min(chars.length, this.length - 1)\n const target = this.digitInputs[focusIndex]\n if (target !== undefined) {\n target.focus()\n }\n\n this.notifyChange()\n\n if (chars.length >= this.length) {\n this.onComplete?.(this.getValue())\n }\n }\n\n private notifyChange(): void {\n this.onChange?.(this.getValue())\n }\n}\n","/**\n * IPInput - IP address input with segmented fields\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type IPInputConfig } from './types'\nimport { resolveContainer, uniqueId } from '../utils'\n\nconst IPV4_SEGMENTS = 4\nconst IPV4_MAX_VALUE = 255\nconst IPV6_SEGMENTS = 8\nconst IPV4_SEPARATOR = '.'\nconst IPV6_SEPARATOR = ':'\n\nexport class IPInput {\n public readonly el: HTMLDivElement\n\n private readonly ipId: string\n private readonly version: 4 | 6\n private readonly segmentCount: number\n private readonly segmentInputs: HTMLInputElement[] = []\n private readonly separator: string\n private readonly onChange: ((value: string) => void) | undefined\n private readonly inputHandlers = new Map<\n HTMLInputElement,\n {\n input: (e: Event) => void\n keydown: (e: KeyboardEvent) => void\n focus: () => void\n }\n >()\n\n constructor(config: IPInputConfig) {\n this.ipId = uniqueId('cmm-ip')\n this.version = config.version ?? 4\n this.segmentCount = this.version === 4 ? IPV4_SEGMENTS : IPV6_SEGMENTS\n this.separator = this.version === 4 ? IPV4_SEPARATOR : IPV6_SEPARATOR\n this.onChange = config.onChange\n\n // Create container\n this.el = document.createElement('div')\n this.el.className = `cmm-ip-input cmm-ip-input--v${String(this.version)}`\n this.el.setAttribute('role', 'group')\n\n if (config.ariaLabel !== undefined) {\n this.el.setAttribute('aria-label', config.ariaLabel)\n } else {\n this.el.setAttribute('aria-label', `IPv${String(this.version)} address input`)\n }\n\n // Create segment inputs\n for (let i = 0; i < this.segmentCount; i++) {\n const input = document.createElement('input')\n input.type = 'text'\n input.className = 'cmm-ip-input__segment'\n input.id = `${this.ipId}-${String(i)}`\n input.inputMode = this.version === 4 ? 'numeric' : 'text'\n input.maxLength = this.version === 4 ? 3 : 4\n input.placeholder = this.version === 4 ? '0' : '0000'\n input.setAttribute('aria-label', `Segment ${String(i + 1)} of ${String(this.segmentCount)}`)\n\n if (config.disabled === true) {\n input.disabled = true\n }\n\n const handlers = {\n input: (_e: Event) => {\n this.handleSegmentInput(i)\n },\n keydown: (e: KeyboardEvent) => {\n this.handleSegmentKeydown(i, e)\n },\n focus: () => {\n input.select()\n },\n }\n\n input.addEventListener('input', handlers.input)\n input.addEventListener('keydown', handlers.keydown)\n input.addEventListener('focus', handlers.focus)\n\n this.inputHandlers.set(input, handlers)\n this.segmentInputs.push(input)\n\n this.el.appendChild(input)\n\n // Add separator between segments\n if (i < this.segmentCount - 1) {\n const sep = document.createElement('span')\n sep.className = 'cmm-ip-input__separator'\n sep.textContent = this.separator\n sep.setAttribute('aria-hidden', 'true')\n this.el.appendChild(sep)\n }\n }\n\n // Set initial value if provided\n if (config.value !== undefined) {\n this.setValue(config.value)\n }\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Get the full IP address string */\n getValue(): string {\n return this.segmentInputs.map(input => input.value).join(this.separator)\n }\n\n /** Set the IP address value by parsing and distributing segments */\n setValue(value: string): void {\n const parts = value.split(this.separator)\n for (let i = 0; i < this.segmentCount; i++) {\n const input = this.segmentInputs[i]\n const part = parts[i]\n if (input !== undefined) {\n input.value = part ?? ''\n }\n }\n }\n\n /** Toggle disabled state on all segment inputs */\n setDisabled(disabled: boolean): void {\n for (const input of this.segmentInputs) {\n input.disabled = disabled\n }\n }\n\n /** Remove from the DOM and clean up event listeners */\n destroy(): void {\n for (const input of this.segmentInputs) {\n const handlers = this.inputHandlers.get(input)\n if (handlers !== undefined) {\n input.removeEventListener('input', handlers.input)\n input.removeEventListener('keydown', handlers.keydown)\n input.removeEventListener('focus', handlers.focus)\n }\n }\n this.inputHandlers.clear()\n this.el.remove()\n }\n\n private handleSegmentInput(index: number): void {\n const input = this.segmentInputs[index]\n if (input === undefined) {\n return\n }\n\n // Validate and sanitize input\n if (this.version === 4) {\n this.sanitizeIPv4Segment(input)\n } else {\n this.sanitizeIPv6Segment(input)\n }\n\n // Auto-advance when segment is full\n const maxLen = this.version === 4 ? 3 : 4\n if (input.value.length >= maxLen) {\n const next = this.segmentInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n }\n\n this.onChange?.(this.getValue())\n }\n\n private handleSegmentKeydown(index: number, e: KeyboardEvent): void {\n const input = this.segmentInputs[index]\n if (input === undefined) {\n return\n }\n\n // Auto-advance on separator key\n if ((this.version === 4 && e.key === '.') || (this.version === 6 && e.key === ':')) {\n e.preventDefault()\n const next = this.segmentInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n return\n }\n\n if (e.key === 'Backspace' && input.value === '') {\n const prev = this.segmentInputs[index - 1]\n if (prev !== undefined) {\n prev.focus()\n }\n } else if (e.key === 'ArrowLeft' && input.selectionStart === 0) {\n const prev = this.segmentInputs[index - 1]\n if (prev !== undefined) {\n prev.focus()\n }\n } else if (e.key === 'ArrowRight' && input.selectionStart === input.value.length) {\n const next = this.segmentInputs[index + 1]\n if (next !== undefined) {\n next.focus()\n }\n }\n }\n\n private sanitizeIPv4Segment(input: HTMLInputElement): void {\n // Remove non-numeric characters\n const cleaned = input.value.replace(/[^0-9]/g, '')\n const num = parseInt(cleaned, 10)\n\n if (cleaned === '') {\n input.value = ''\n } else if (Number.isNaN(num)) {\n input.value = ''\n } else if (num > IPV4_MAX_VALUE) {\n input.value = String(IPV4_MAX_VALUE)\n } else {\n input.value = cleaned\n }\n }\n\n private sanitizeIPv6Segment(input: HTMLInputElement): void {\n // Remove non-hex characters\n input.value = input.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 4)\n }\n}\n","/**\n * Input - Text input component with wrapper\n * @countermeasure/web-components/primitives/input\n */\n\nimport { type InputConfig, type InputSize } from './types'\nimport { resolveContainer, uniqueId } from '../utils'\n\nexport type {\n InputConfig,\n InputType,\n InputSize,\n InputGroupConfig,\n TextareaConfig,\n InputOTPConfig,\n IPInputConfig,\n} from './types'\nexport { InputGroup } from './input-group'\nexport { Textarea } from './textarea'\nexport { InputOTP } from './input-otp'\nexport { IPInput } from './ip-input'\n\nexport class Input {\n public readonly el: HTMLDivElement\n public readonly inputEl: HTMLInputElement\n\n private readonly inputId: string\n private currentSize: InputSize\n private readonly handlers: {\n input: (e: Event) => void\n change: (e: Event) => void\n focus: () => void\n blur: () => void\n keydown: (e: KeyboardEvent) => void\n }\n\n constructor(config: InputConfig) {\n this.inputId = uniqueId('cmm-input')\n this.currentSize = config.size ?? 'md'\n\n // Create wrapper\n this.el = document.createElement('div')\n this.el.className = 'cmm-input-wrapper'\n\n // Create input element\n this.inputEl = document.createElement('input')\n this.inputEl.id = this.inputId\n this.inputEl.type = config.type ?? 'text'\n this.inputEl.className = `cmm-input cmm-input--${this.currentSize}`\n\n if (config.className) {\n this.el.classList.add(config.className)\n }\n\n if (config.placeholder !== undefined) {\n this.inputEl.placeholder = config.placeholder\n }\n\n if (config.value !== undefined) {\n this.inputEl.value = config.value\n }\n\n if (config.disabled === true) {\n this.inputEl.disabled = true\n }\n\n if (config.readOnly === true) {\n this.inputEl.readOnly = true\n }\n\n if (config.required === true) {\n this.inputEl.required = true\n this.inputEl.setAttribute('aria-required', 'true')\n }\n\n if (config.name !== undefined) {\n this.inputEl.name = config.name\n }\n\n if (config.ariaLabel !== undefined) {\n this.inputEl.setAttribute('aria-label', config.ariaLabel)\n }\n\n if (config.maxLength !== undefined) {\n this.inputEl.maxLength = config.maxLength\n }\n\n if (config.pattern !== undefined) {\n this.inputEl.pattern = config.pattern\n }\n\n if (config.autocomplete !== undefined) {\n this.inputEl.setAttribute('autocomplete', config.autocomplete)\n }\n\n // Event handlers\n this.handlers = {\n input: (_e: Event) => {\n config.onInput?.(this.inputEl.value)\n },\n change: (_e: Event) => {\n config.onChange?.(this.inputEl.value)\n },\n focus: () => {\n config.onFocus?.()\n },\n blur: () => {\n config.onBlur?.()\n },\n keydown: (e: KeyboardEvent) => {\n config.onKeyDown?.(e)\n },\n }\n\n this.inputEl.addEventListener('input', this.handlers.input)\n this.inputEl.addEventListener('change', this.handlers.change)\n this.inputEl.addEventListener('focus', this.handlers.focus)\n this.inputEl.addEventListener('blur', this.handlers.blur)\n this.inputEl.addEventListener('keydown', this.handlers.keydown)\n\n this.el.appendChild(this.inputEl)\n\n // Mount if container provided\n if (config.container !== undefined) {\n const parent = resolveContainer(config.container)\n parent.appendChild(this.el)\n }\n }\n\n /** Get the current input value */\n getValue(): string {\n return this.inputEl.value\n }\n\n /** Set the input value */\n setValue(value: string): void {\n this.inputEl.value = value\n }\n\n /** Toggle the disabled state */\n setDisabled(disabled: boolean): void {\n this.inputEl.disabled = disabled\n }\n\n /** Toggle the error state */\n setError(error: boolean): void {\n if (error) {\n this.inputEl.classList.add('cmm-input--error')\n this.inputEl.setAttribute('aria-invalid', 'true')\n } else {\n this.inputEl.classList.remove('cmm-input--error')\n this.inputEl.removeAttribute('aria-invalid')\n }\n }\n\n /** Focus the input element */\n focus(): void {\n this.inputEl.focus()\n }\n\n /** Blur the input element */\n blur(): void {\n this.inputEl.blur()\n }\n\n /** Remove from the DOM and clean up event listeners */\n destroy(): void {\n this.inputEl.removeEventListener('input', this.handlers.input)\n this.inputEl.removeEventListener('change', this.handlers.change)\n this.inputEl.removeEventListener('focus', this.handlers.focus)\n this.inputEl.removeEventListener('blur', this.handlers.blur)\n this.inputEl.removeEventListener('keydown', this.handlers.keydown)\n this.el.remove()\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-
|
|
1
|
+
{"version":3,"file":"interactive-CXfIDzyh.js","names":[],"sources":["../src/charts/interactive.ts"],"sourcesContent":["/**\n * Interactive chart base class with tooltip + legend + mouse event plumbing\n * @countermeasure/web-components/charts/interactive\n */\n\nimport { BaseChart } from './base'\nimport type { InteractiveChartConfig } from './types'\nimport { ChartLegend } from './legend'\nimport { ChartTooltip } from './tooltip'\n\nexport abstract class InteractiveChart extends BaseChart {\n protected tooltip: ChartTooltip | null\n protected legend: ChartLegend | null\n private readonly boundMouseMove: (e: MouseEvent) => void\n private readonly boundMouseLeave: () => void\n\n constructor(config: InteractiveChartConfig) {\n super(config)\n\n // Initialize tooltip\n if (config.tooltip?.enabled !== false) {\n this.tooltip = new ChartTooltip(this.container)\n } else {\n this.tooltip = null\n }\n\n // Initialize legend\n if (config.legend !== undefined) {\n this.legend = new ChartLegend(this.container, config.legend)\n } else {\n this.legend = null\n }\n\n // Bind mouse handlers\n this.boundMouseMove = (e: MouseEvent) => {\n this.handleMouseMove(e)\n }\n this.boundMouseLeave = () => {\n this.handleMouseLeave()\n }\n this.canvas.addEventListener('mousemove', this.boundMouseMove)\n this.canvas.addEventListener('mouseleave', this.boundMouseLeave)\n }\n\n protected abstract handleMouseMove(e: MouseEvent): void\n protected abstract handleMouseLeave(): void\n\n public override destroy(): void {\n this.canvas.removeEventListener('mousemove', this.boundMouseMove)\n this.canvas.removeEventListener('mouseleave', this.boundMouseLeave)\n if (this.legend !== null) {\n this.legend.destroy()\n }\n if (this.tooltip !== null) {\n this.tooltip.destroy()\n }\n super.destroy()\n }\n}\n"],"mappings":";;;;AAUA,IAAsB,IAAtB,cAA+C,EAAU;CACvD;CACA;CACA;CACA;CAEA,YAAY,GAAgC;AAyB1C,EAxBA,MAAM,EAAO,EAGT,EAAO,SAAS,YAAY,KAG9B,KAAK,UAAU,OAFf,KAAK,UAAU,IAAI,EAAa,KAAK,UAAU,EAM7C,EAAO,WAAW,KAAA,IAGpB,KAAK,SAAS,OAFd,KAAK,SAAS,IAAI,EAAY,KAAK,WAAW,EAAO,OAAO,EAM9D,KAAK,kBAAkB,MAAkB;AACvC,QAAK,gBAAgB,EAAE;KAEzB,KAAK,wBAAwB;AAC3B,QAAK,kBAAkB;KAEzB,KAAK,OAAO,iBAAiB,aAAa,KAAK,eAAe,EAC9D,KAAK,OAAO,iBAAiB,cAAc,KAAK,gBAAgB;;CAMlE,UAAgC;AAS9B,EARA,KAAK,OAAO,oBAAoB,aAAa,KAAK,eAAe,EACjE,KAAK,OAAO,oBAAoB,cAAc,KAAK,gBAAgB,EAC/D,KAAK,WAAW,QAClB,KAAK,OAAO,SAAS,EAEnB,KAAK,YAAY,QACnB,KAAK,QAAQ,SAAS,EAExB,MAAM,SAAS"}
|
|
@@ -577,4 +577,4 @@ function cn(e) {
|
|
|
577
577
|
//#endregion
|
|
578
578
|
export { w as A, p as B, j as C, D, O as E, Ce as F, n as G, f as H, _ as I, de as L, S as M, x as N, je as O, y as P, h as R, Ne as S, k as T, d as U, re as V, r as W, H as _, nn as a, F as b, Z as c, Y as d, q as f, ht as g, _t as h, rn as i, C as j, T as k, Gt as l, vt as m, sn as n, $ as o, St as p, an as r, tn as s, cn as t, X as u, ft as v, A as w, M as x, Be as y, m as z };
|
|
579
579
|
|
|
580
|
-
//# sourceMappingURL=isArrayLikeObject-
|
|
580
|
+
//# sourceMappingURL=isArrayLikeObject-Bjsxaqj7.js.map
|