@countermeasure-platform/web-components 1.2.1 → 1.2.2-dev.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{arc-jVbrWVYZ.js → arc-DOJ9myHo.js} +21 -21
- package/dist/{arc-jVbrWVYZ.js.map → arc-DOJ9myHo.js.map} +1 -1
- package/dist/architecture-7EHR7CIX-RjIwnEbG.js +3 -0
- package/dist/{architectureDiagram-2XIMDMQ5-D5q0ma9h.js → architectureDiagram-3BPJPVTR-cYFnhp15.js} +165 -152
- package/dist/{architectureDiagram-2XIMDMQ5-D5q0ma9h.js.map → architectureDiagram-3BPJPVTR-cYFnhp15.js.map} +1 -1
- package/dist/{array-DXadUs1s.js → array-BLp0zq5K.js} +1 -1
- package/dist/{array-DXadUs1s.js.map → array-BLp0zq5K.js.map} +1 -1
- package/dist/{blockDiagram-WCTKOSBZ-BH3jwWeU.js → blockDiagram-GPEHLZMM-DNLPMFXL.js} +994 -864
- package/dist/blockDiagram-GPEHLZMM-DNLPMFXL.js.map +1 -0
- package/dist/{c4Diagram-IC4MRINW-OFLrunYI.js → c4Diagram-AAUBKEIU-G8g3OBBg.js} +232 -235
- package/dist/c4Diagram-AAUBKEIU-G8g3OBBg.js.map +1 -0
- package/dist/channel-MTYqUJFm.js +7 -0
- package/dist/{channel-LRbq43st.js.map → channel-MTYqUJFm.js.map} +1 -1
- package/dist/{chunk-KX2RTZJC-d9jFqUAY.js → chunk-2J33WTMH-BKsVIUnb.js} +4 -4
- package/dist/{chunk-KX2RTZJC-d9jFqUAY.js.map → chunk-2J33WTMH-BKsVIUnb.js.map} +1 -1
- package/dist/chunk-3OPIFGDE-CcNRL44h.js +3669 -0
- package/dist/chunk-3OPIFGDE-CcNRL44h.js.map +1 -0
- package/dist/{chunk-4BX2VUAB-BS9gpN-y.js → chunk-4BX2VUAB-BeLKo9Pn.js} +2 -2
- package/dist/{chunk-4BX2VUAB-BS9gpN-y.js.map → chunk-4BX2VUAB-BeLKo9Pn.js.map} +1 -1
- package/dist/{chunk-R5LLSJPH-c1IfaK5D.js → chunk-4EGX6M5U-Bh9as06l.js} +13 -13
- package/dist/chunk-4EGX6M5U-Bh9as06l.js.map +1 -0
- package/dist/{chunk-55IACEB6-DZ-UBhHX.js → chunk-55IACEB6-CuKbiO89.js} +3 -3
- package/dist/{chunk-55IACEB6-DZ-UBhHX.js.map → chunk-55IACEB6-CuKbiO89.js.map} +1 -1
- package/dist/chunk-5DO6E6H7-CAB8pWf5.js +25 -0
- package/dist/chunk-5DO6E6H7-CAB8pWf5.js.map +1 -0
- package/dist/{chunk-GEFDOKGD-DGJJEGSm.js → chunk-5ZQYHXKU-CjOcwRY6.js} +570 -326
- package/dist/chunk-5ZQYHXKU-CjOcwRY6.js.map +1 -0
- package/dist/{chunk-WL4C6EOR-BV-op7zg.js → chunk-727SXJPM-kowsFLrz.js} +724 -569
- package/dist/chunk-727SXJPM-kowsFLrz.js.map +1 -0
- package/dist/{chunk-NQ4KR5QH-C0nWShNk.js → chunk-AQP2D5EJ-Bc1gUIeA.js} +384 -362
- package/dist/chunk-AQP2D5EJ-Bc1gUIeA.js.map +1 -0
- package/dist/{chunk-OZEHJAEY-BsQ56PV-.js → chunk-BR22UD5L-BCFxmd5-.js} +16 -16
- package/dist/chunk-BR22UD5L-BCFxmd5-.js.map +1 -0
- package/dist/{chunk-MX3YWQON-D43mcq1f.js → chunk-BSJP7CBP-Bl94i3-1.js} +7 -5
- package/dist/chunk-BSJP7CBP-Bl94i3-1.js.map +1 -0
- package/dist/chunk-CSCIHK7Q-DyRIc27i.js +2868 -0
- package/dist/chunk-CSCIHK7Q-DyRIc27i.js.map +1 -0
- package/dist/chunk-FHYWG6QK-kLWdRarG.js +25 -0
- package/dist/chunk-FHYWG6QK-kLWdRarG.js.map +1 -0
- package/dist/{chunk-FMBD7UC4-1IxrpdPX.js → chunk-FMBD7UC4-IdpWVRCU.js} +2 -2
- package/dist/{chunk-FMBD7UC4-1IxrpdPX.js.map → chunk-FMBD7UC4-IdpWVRCU.js.map} +1 -1
- package/dist/chunk-KSCS5N6A-CVcDS9QV.js +563 -0
- package/dist/chunk-KSCS5N6A-CVcDS9QV.js.map +1 -0
- package/dist/{chunk-YBOYWFTD-DkjEOcgZ.js → chunk-L5ZTLDWV-Day0EgsR.js} +9 -9
- package/dist/{chunk-YBOYWFTD-DkjEOcgZ.js.map → chunk-L5ZTLDWV-Day0EgsR.js.map} +1 -1
- package/dist/chunk-LZXEDZCA-BO_GpQSR.js +51 -0
- package/dist/chunk-LZXEDZCA-BO_GpQSR.js.map +1 -0
- package/dist/chunk-MPE355IW-BkN6MrMO.js +25 -0
- package/dist/chunk-MPE355IW-BkN6MrMO.js.map +1 -0
- package/dist/chunk-MZUSXYTE-94iWO-dh.js +32 -0
- package/dist/chunk-MZUSXYTE-94iWO-dh.js.map +1 -0
- package/dist/chunk-N66VUXT2-QbIUkiJZ.js +56 -0
- package/dist/chunk-N66VUXT2-QbIUkiJZ.js.map +1 -0
- package/dist/{chunk-JSJVCQXG-Do17yYig.js → chunk-ND2GUHAM-Boh7GenS.js} +6 -6
- package/dist/{chunk-JSJVCQXG-Do17yYig.js.map → chunk-ND2GUHAM-Boh7GenS.js.map} +1 -1
- package/dist/chunk-NNHCCRGN-CNU0zvRn.js +20603 -0
- package/dist/chunk-NNHCCRGN-CNU0zvRn.js.map +1 -0
- package/dist/{chunk-PQ6SQG4A-Cpfc5F4u.js → chunk-NZK2D7GU-D4Ird7wv.js} +4 -4
- package/dist/{chunk-PQ6SQG4A-Cpfc5F4u.js.map → chunk-NZK2D7GU-D4Ird7wv.js.map} +1 -1
- package/dist/{chunk-PU5JKC2W-DNpn_Yik.js → chunk-O5CBEL6O-DThtyjPO.js} +85 -74
- package/dist/{chunk-PU5JKC2W-DNpn_Yik.js.map → chunk-O5CBEL6O-DThtyjPO.js.map} +1 -1
- package/dist/chunk-PUPMXCY4-DsO2K8st.js +25 -0
- package/dist/chunk-PUPMXCY4-DsO2K8st.js.map +1 -0
- package/dist/{chunk-QZHKN3VN-kDNdTVLo.js → chunk-QZHKN3VN-DC5aJQQT.js} +2 -2
- package/dist/{chunk-QZHKN3VN-kDNdTVLo.js.map → chunk-QZHKN3VN-DC5aJQQT.js.map} +1 -1
- package/dist/chunk-UIBZB4QT-Cu3IcTk1.js +25 -0
- package/dist/chunk-UIBZB4QT-Cu3IcTk1.js.map +1 -0
- package/dist/chunk-WCWK7LTN-DpMt57Ty.js +33 -0
- package/dist/chunk-WCWK7LTN-DpMt57Ty.js.map +1 -0
- package/dist/chunk-WU5MYG2G-mzocEmS2.js +12 -0
- package/dist/{chunk-HHEYEP7N-DJ1b-gA8.js.map → chunk-WU5MYG2G-mzocEmS2.js.map} +1 -1
- package/dist/{chunk-XPW4576I-BqiPnb3d.js → chunk-XPW4576I-BwxN5U1_.js} +2 -2
- package/dist/{chunk-XPW4576I-BqiPnb3d.js.map → chunk-XPW4576I-BwxN5U1_.js.map} +1 -1
- package/dist/classDiagram-4FO5ZUOK-CZv04EX-.js +31 -0
- package/dist/{classDiagram-VBA2DB6C-DZfC0xPM.js.map → classDiagram-4FO5ZUOK-CZv04EX-.js.map} +1 -1
- package/dist/classDiagram-v2-Q7XG4LA2-aOPSPoxt.js +31 -0
- package/dist/{classDiagram-v2-RAHNMMFH-CtWRD1ax.js.map → classDiagram-v2-Q7XG4LA2-aOPSPoxt.js.map} +1 -1
- package/dist/component-COshXojx.js +163 -0
- package/dist/component-COshXojx.js.map +1 -0
- package/dist/components/brand/index.d.ts +8 -2
- package/dist/components/brand/index.d.ts.map +1 -1
- package/dist/components/brand/index.js +58 -31
- package/dist/components/brand/index.js.map +1 -1
- package/dist/components/brand/types.d.ts +8 -0
- package/dist/components/brand/types.d.ts.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/tree-view/index.d.ts.map +1 -1
- package/dist/components/tree-view/index.js +1 -1
- package/dist/{cose-bilkent-S5V4N54A-DxM02fly.js → cose-bilkent-S5V4N54A-D_hwzCJc.js} +7 -8
- package/dist/{cose-bilkent-S5V4N54A-DxM02fly.js.map → cose-bilkent-S5V4N54A-D_hwzCJc.js.map} +1 -1
- package/dist/{cytoscape.esm-2vKMh7AJ.js → cytoscape.esm-C85eXBIz.js} +1 -1
- package/dist/{cytoscape.esm-2vKMh7AJ.js.map → cytoscape.esm-C85eXBIz.js.map} +1 -1
- package/dist/dagre-BM42HDAG-DBqY2dVf.js +299 -0
- package/dist/dagre-BM42HDAG-DBqY2dVf.js.map +1 -0
- package/dist/dagre-IxFkiJHF.js +1938 -0
- package/dist/dagre-IxFkiJHF.js.map +1 -0
- package/dist/{defaultLocale-PLHpRrsr.js → defaultLocale-DSDxELFN.js} +1 -1
- package/dist/{defaultLocale-PLHpRrsr.js.map → defaultLocale-DSDxELFN.js.map} +1 -1
- package/dist/{diagram-IFDJBPK2-D-Enf1mK.js → diagram-2AECGRRQ-BwC5Qbme.js} +39 -39
- package/dist/{diagram-IFDJBPK2-D-Enf1mK.js.map → diagram-2AECGRRQ-BwC5Qbme.js.map} +1 -1
- package/dist/diagram-5GNKFQAL-BpJ9oZ4s.js +103 -0
- package/dist/diagram-5GNKFQAL-BpJ9oZ4s.js.map +1 -0
- package/dist/diagram-KO2AKTUF-kSLn21uw.js +434 -0
- package/dist/diagram-KO2AKTUF-kSLn21uw.js.map +1 -0
- package/dist/{diagram-P4PSJMXO-O8g_RIkM.js → diagram-LMA3HP47-BRqyGMLP.js} +43 -43
- package/dist/{diagram-P4PSJMXO-O8g_RIkM.js.map → diagram-LMA3HP47-BRqyGMLP.js.map} +1 -1
- package/dist/{diagram-E7M64L7V-Co7O3gub.js → diagram-OG6HWLK6-BsskLXHm.js} +171 -174
- package/dist/diagram-OG6HWLK6-BsskLXHm.js.map +1 -0
- package/dist/{dist-BrNloUiz.js → dist-BScrlPBC.js} +32 -23
- package/dist/dist-BScrlPBC.js.map +1 -0
- package/dist/{erDiagram-INFDFZHY-C42JeR9I.js → erDiagram-TEJ5UH35-DzB7hnCi.js} +198 -164
- package/dist/erDiagram-TEJ5UH35-DzB7hnCi.js.map +1 -0
- package/dist/eventmodeling-FCH6USID-HcA67HMu.js +3 -0
- package/dist/{flowDiagram-PKNHOUZH-DInJjOz3.js → flowDiagram-I6XJVG4X-RYkPtPRG.js} +453 -469
- package/dist/flowDiagram-I6XJVG4X-RYkPtPRG.js.map +1 -0
- package/dist/{ganttDiagram-A5KZAMGK-Dgp-4Yss.js → ganttDiagram-6RSMTGT7-BfjlFVNd.js} +340 -333
- package/dist/ganttDiagram-6RSMTGT7-BfjlFVNd.js.map +1 -0
- package/dist/gitGraph-WXDBUCRP-D60yP8mT.js +3 -0
- package/dist/gitGraphDiagram-PVQCEYII-DbUp_ElG.js +731 -0
- package/dist/gitGraphDiagram-PVQCEYII-DbUp_ElG.js.map +1 -0
- package/dist/graphlib-k-wJtbbK.js +1268 -0
- package/dist/graphlib-k-wJtbbK.js.map +1 -0
- package/dist/icons/lucide.d.ts +1 -2
- package/dist/icons/lucide.d.ts.map +1 -1
- package/dist/icons/lucide.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/info-J43DQDTF-DDmtkMBG.js +3 -0
- package/dist/{infoDiagram-LFFYTUFH-DajJJRvc.js → infoDiagram-5YYISTIA-C0TqWTrr.js} +7 -7
- package/dist/{infoDiagram-LFFYTUFH-DajJJRvc.js.map → infoDiagram-5YYISTIA-C0TqWTrr.js.map} +1 -1
- package/dist/{init-DcLTaNW1.js → init-CGzIZb6J.js} +1 -1
- package/dist/{init-DcLTaNW1.js.map → init-CGzIZb6J.js.map} +1 -1
- package/dist/{ishikawaDiagram-PHBUUO56-qHBJm2LT.js → ishikawaDiagram-YF4QCWOH-Cyk_Antz.js} +98 -97
- package/dist/ishikawaDiagram-YF4QCWOH-Cyk_Antz.js.map +1 -0
- package/dist/{journeyDiagram-4ABVD52K-PgfYdoDM.js → journeyDiagram-JHISSGLW-CTl8eDDe.js} +78 -78
- package/dist/journeyDiagram-JHISSGLW-CTl8eDDe.js.map +1 -0
- package/dist/{kanban-definition-K7BYSVSG-DFRT8j7A.js → kanban-definition-UN3LZRKU-homeDoHF.js} +46 -44
- package/dist/{kanban-definition-K7BYSVSG-DFRT8j7A.js.map → kanban-definition-UN3LZRKU-homeDoHF.js.map} +1 -1
- package/dist/{katex-BZdHnXin.js → katex-CgkxVokH.js} +1 -1
- package/dist/{katex-BZdHnXin.js.map → katex-CgkxVokH.js.map} +1 -1
- package/dist/line-k_aZSToM.js +36 -0
- package/dist/{line-Cq1AZT4f.js.map → line-k_aZSToM.js.map} +1 -1
- package/dist/{linear-BnJD01Xn.js → linear-Dpcbf4VP.js} +5 -5
- package/dist/{linear-BnJD01Xn.js.map → linear-Dpcbf4VP.js.map} +1 -1
- package/dist/{mermaid-parser.core-Dz5qv4CI.js → mermaid-parser.core-B_q76LYz.js} +32 -17
- package/dist/mermaid-parser.core-B_q76LYz.js.map +1 -0
- package/dist/mermaid.core-DAh-gNcn.js +997 -0
- package/dist/mermaid.core-DAh-gNcn.js.map +1 -0
- package/dist/{mindmap-definition-YRQLILUH-D95OPRMh.js → mindmap-definition-RKZ34NQL-Cjglmmr7.js} +153 -108
- package/dist/mindmap-definition-RKZ34NQL-Cjglmmr7.js.map +1 -0
- package/dist/{ordinal-CC9tfh_g.js → ordinal-DHGdAr1Y.js} +2 -2
- package/dist/{ordinal-CC9tfh_g.js.map → ordinal-DHGdAr1Y.js.map} +1 -1
- package/dist/packet-YPE3B663-Bo9N32Mb.js +3 -0
- package/dist/{path-y0uQCOMW.js → path-D-DDb3Wo.js} +1 -1
- package/dist/{path-y0uQCOMW.js.map → path-D-DDb3Wo.js.map} +1 -1
- package/dist/pie-LRSECV5Y-DndCyILX.js +3 -0
- package/dist/pieDiagram-4H26LBE5-Swbny_uk.js +167 -0
- package/dist/pieDiagram-4H26LBE5-Swbny_uk.js.map +1 -0
- package/dist/{quadrantDiagram-337W2JSQ-CcKc-h2o.js → quadrantDiagram-W4KKPZXB-kyt1iJkC.js} +359 -332
- package/dist/quadrantDiagram-W4KKPZXB-kyt1iJkC.js.map +1 -0
- package/dist/radar-GUYGQ44K-DpLG1fRN.js +3 -0
- package/dist/react/brand/index.d.ts +13 -1
- package/dist/react/brand/index.d.ts.map +1 -1
- package/dist/react/brand.js +28 -3
- package/dist/react/brand.js.map +1 -1
- package/dist/react/sidebar.d.ts +22 -1
- package/dist/react/sidebar.d.ts.map +1 -1
- package/dist/react/sidebar.js +26 -2
- package/dist/react/sidebar.js.map +1 -1
- package/dist/react/topology.js +1 -1
- package/dist/react.js +100 -100
- package/dist/{requirementDiagram-Z7DCOOCP-aPcaPduF.js → requirementDiagram-4Y6WPE33-DWRks7dz.js} +153 -133
- package/dist/requirementDiagram-4Y6WPE33-DWRks7dz.js.map +1 -0
- package/dist/{rough.esm-C9rQ9YkE.js → rough.esm-C7tiDdBn.js} +1 -1
- package/dist/{rough.esm-C9rQ9YkE.js.map → rough.esm-C7tiDdBn.js.map} +1 -1
- package/dist/{sankeyDiagram-WA2Y5GQK-CO_lUqQX.js → sankeyDiagram-5OEKKPKP-J_SVMd-0.js} +125 -76
- package/dist/{sankeyDiagram-WA2Y5GQK-CO_lUqQX.js.map → sankeyDiagram-5OEKKPKP-J_SVMd-0.js.map} +1 -1
- package/dist/sequenceDiagram-3UESZ5HK-BMhjbe8U.js +4167 -0
- package/dist/sequenceDiagram-3UESZ5HK-BMhjbe8U.js.map +1 -0
- package/dist/sidebar/component.d.ts +5 -0
- package/dist/sidebar/component.d.ts.map +1 -1
- package/dist/sidebar/index.d.ts +1 -1
- package/dist/sidebar/index.d.ts.map +1 -1
- package/dist/sidebar/index.js +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/dist/sidebar/types.d.ts +59 -0
- package/dist/sidebar/types.d.ts.map +1 -1
- package/dist/{src-D1EMXotX.js → src-CWnvxuyh.js} +603 -591
- package/dist/{src-D1EMXotX.js.map → src-CWnvxuyh.js.map} +1 -1
- package/dist/{src-BhNgmpel.js → src-DngnQkx_.js} +4 -5
- package/dist/{src-BhNgmpel.js.map → src-DngnQkx_.js.map} +1 -1
- package/dist/stateDiagram-AJRCARHV-x4JHehDk.js +220 -0
- package/dist/stateDiagram-AJRCARHV-x4JHehDk.js.map +1 -0
- package/dist/stateDiagram-v2-BHNVJYJU-CO93vpHl.js +29 -0
- package/dist/{stateDiagram-v2-FVOUBMTO-CAWy0Pkh.js.map → stateDiagram-v2-BHNVJYJU-CO93vpHl.js.map} +1 -1
- package/dist/styles/components/brand.css +30 -0
- package/dist/styles/sidebar.css +586 -6
- package/dist/styles/tenant-ui.css +3 -4
- package/dist/styles/threat-library.css +0 -1
- package/dist/styles/tokens.css +0 -1
- package/dist/{timeline-definition-YZTLITO2-CjxxCuOg.js → timeline-definition-PNZ67QCA-rsiMN1-p.js} +517 -279
- package/dist/timeline-definition-PNZ67QCA-rsiMN1-p.js.map +1 -0
- package/dist/{topology-C8cyIHlB.js → topology-B9Lv-y1-.js} +181 -182
- package/dist/{topology-C8cyIHlB.js.map → topology-B9Lv-y1-.js.map} +1 -1
- package/dist/{tree-view-SpbHG9Yi.js → tree-view-gML5wGlz.js} +3 -3
- package/dist/{tree-view-SpbHG9Yi.js.map → tree-view-gML5wGlz.js.map} +1 -1
- package/dist/treeView-BLDUP644-mJdM3Q6x.js +3 -0
- package/dist/treemap-LRROVOQU-BbNMhR6z.js +3 -0
- package/dist/{value-gSPnIECy.js → value-CnwEagIg.js} +2 -2
- package/dist/{value-gSPnIECy.js.map → value-CnwEagIg.js.map} +1 -1
- package/dist/{vennDiagram-LZ73GAT5-FqpGoq2s.js → vennDiagram-CIIHVFJN-JUCgWboO.js} +98 -98
- package/dist/{vennDiagram-LZ73GAT5-FqpGoq2s.js.map → vennDiagram-CIIHVFJN-JUCgWboO.js.map} +1 -1
- package/dist/visualization/mermaid-diagram/index.js +1 -1
- package/dist/wardley-L42UT6IY-DB53GwcN.js +3 -0
- package/dist/wardleyDiagram-YWT4CUSO-D9ZPcSHL.js +646 -0
- package/dist/wardleyDiagram-YWT4CUSO-D9ZPcSHL.js.map +1 -0
- package/dist/{xychartDiagram-JWTSCODW-BNEAK79X.js → xychartDiagram-2RQKCTM6-D3ufsY0S.js} +146 -143
- package/dist/{xychartDiagram-JWTSCODW-BNEAK79X.js.map → xychartDiagram-2RQKCTM6-D3ufsY0S.js.map} +1 -1
- package/package.json +1 -1
- package/src/components/brand/index.ts +63 -0
- package/src/components/brand/types.ts +9 -0
- package/src/components/theme/theme-studio-review.test.ts +34 -0
- package/src/components/tree-view/index.ts +0 -2
- package/src/icons/lucide.ts +1 -2
- package/src/react/brand/index.test.tsx +28 -0
- package/src/react/brand/index.tsx +38 -0
- package/src/react/sidebar.test.tsx +30 -0
- package/src/react/sidebar.tsx +52 -1
- package/src/sidebar/component.test.ts +109 -0
- package/src/sidebar/component.ts +233 -44
- package/src/sidebar/index.ts +1 -0
- package/src/sidebar/types.ts +60 -0
- package/src/styles/components/brand.css +30 -0
- package/src/styles/sidebar.css +586 -6
- package/src/styles/tenant-ui.css +3 -4
- package/src/styles/threat-library.css +0 -1
- package/src/styles/tokens.css +0 -1
- package/dist/_basePickBy-BQMPE4-n.js +0 -168
- package/dist/_basePickBy-BQMPE4-n.js.map +0 -1
- package/dist/_baseUniq-Bdp_vFUv.js +0 -684
- package/dist/_baseUniq-Bdp_vFUv.js.map +0 -1
- package/dist/architecture-PBZL5I3N-Zk3GmKE8.js +0 -3
- package/dist/blockDiagram-WCTKOSBZ-BH3jwWeU.js.map +0 -1
- package/dist/c4Diagram-IC4MRINW-OFLrunYI.js.map +0 -1
- package/dist/channel-LRbq43st.js +0 -7
- package/dist/chunk-7E7YKBS2-BsywoVTt.js +0 -25
- package/dist/chunk-7E7YKBS2-BsywoVTt.js.map +0 -1
- package/dist/chunk-7R4GIKGN-DJmroLCH.js +0 -2054
- package/dist/chunk-7R4GIKGN-DJmroLCH.js.map +0 -1
- package/dist/chunk-C72U2L5F-BwPwVDcP.js +0 -25
- package/dist/chunk-C72U2L5F-BwPwVDcP.js.map +0 -1
- package/dist/chunk-EGIJ26TM-DKd5cEgn.js +0 -25
- package/dist/chunk-EGIJ26TM-DKd5cEgn.js.map +0 -1
- package/dist/chunk-GEFDOKGD-DGJJEGSm.js.map +0 -1
- package/dist/chunk-GLR3WWYH-BDwmgwCA.js +0 -43
- package/dist/chunk-GLR3WWYH-BDwmgwCA.js.map +0 -1
- package/dist/chunk-HHEYEP7N-DJ1b-gA8.js +0 -12
- package/dist/chunk-KYZI473N-BXYCe83A.js +0 -3437
- package/dist/chunk-KYZI473N-BXYCe83A.js.map +0 -1
- package/dist/chunk-L3YUKLVL-Y5k8UNMf.js +0 -25
- package/dist/chunk-L3YUKLVL-Y5k8UNMf.js.map +0 -1
- package/dist/chunk-MX3YWQON-D43mcq1f.js.map +0 -1
- package/dist/chunk-NBPlniwU.js +0 -23
- package/dist/chunk-NQ4KR5QH-C0nWShNk.js.map +0 -1
- package/dist/chunk-O4XLMI2P-DtGEm9QX.js +0 -514
- package/dist/chunk-O4XLMI2P-DtGEm9QX.js.map +0 -1
- package/dist/chunk-OZEHJAEY-BsQ56PV-.js.map +0 -1
- package/dist/chunk-R5LLSJPH-c1IfaK5D.js.map +0 -1
- package/dist/chunk-WL4C6EOR-BV-op7zg.js.map +0 -1
- package/dist/chunk-XIRO2GV7-Bv1hlNLi.js +0 -32
- package/dist/chunk-XIRO2GV7-Bv1hlNLi.js.map +0 -1
- package/dist/chunk-XZSTWKYB-C7maKWEr.js +0 -15799
- package/dist/chunk-XZSTWKYB-C7maKWEr.js.map +0 -1
- package/dist/classDiagram-VBA2DB6C-DZfC0xPM.js +0 -31
- package/dist/classDiagram-v2-RAHNMMFH-CtWRD1ax.js +0 -31
- package/dist/clone-CliVdNc8.js +0 -10
- package/dist/clone-CliVdNc8.js.map +0 -1
- package/dist/component-C1Jiz1Ki.js +0 -103
- package/dist/component-C1Jiz1Ki.js.map +0 -1
- package/dist/dagre-BqC9mhMk.js +0 -1485
- package/dist/dagre-BqC9mhMk.js.map +0 -1
- package/dist/dagre-KLK3FWXG-DTKcsol6.js +0 -296
- package/dist/dagre-KLK3FWXG-DTKcsol6.js.map +0 -1
- package/dist/diagram-E7M64L7V-Co7O3gub.js.map +0 -1
- package/dist/dist-BrNloUiz.js.map +0 -1
- package/dist/erDiagram-INFDFZHY-C42JeR9I.js.map +0 -1
- package/dist/flowDiagram-PKNHOUZH-DInJjOz3.js.map +0 -1
- package/dist/ganttDiagram-A5KZAMGK-Dgp-4Yss.js.map +0 -1
- package/dist/gitGraph-HDMCJU4V-D_QsK6Rt.js +0 -3
- package/dist/gitGraphDiagram-K3NZZRJ6-Dr_X0dND.js +0 -628
- package/dist/gitGraphDiagram-K3NZZRJ6-Dr_X0dND.js.map +0 -1
- package/dist/graphlib-ecencZTG.js +0 -227
- package/dist/graphlib-ecencZTG.js.map +0 -1
- package/dist/info-3K5VOQVL-BbLiZXwn.js +0 -3
- package/dist/isArrayLikeObject-Bjsxaqj7.js +0 -580
- package/dist/isArrayLikeObject-Bjsxaqj7.js.map +0 -1
- package/dist/isEmpty-CeZZUVts.js +0 -37
- package/dist/isEmpty-CeZZUVts.js.map +0 -1
- package/dist/ishikawaDiagram-PHBUUO56-qHBJm2LT.js.map +0 -1
- package/dist/journeyDiagram-4ABVD52K-PgfYdoDM.js.map +0 -1
- package/dist/line-Cq1AZT4f.js +0 -36
- package/dist/math-D4gdAuwG.js +0 -12
- package/dist/math-D4gdAuwG.js.map +0 -1
- package/dist/mermaid-parser.core-Dz5qv4CI.js.map +0 -1
- package/dist/mermaid.core-DTiIXVKa.js +0 -923
- package/dist/mermaid.core-DTiIXVKa.js.map +0 -1
- package/dist/mindmap-definition-YRQLILUH-D95OPRMh.js.map +0 -1
- package/dist/packet-RMMSAZCW-D72DRs1N.js +0 -3
- package/dist/pie-UPGHQEXC-C8RDLrEi.js +0 -3
- package/dist/pieDiagram-SKSYHLDU-BREEn_Sk.js +0 -167
- package/dist/pieDiagram-SKSYHLDU-BREEn_Sk.js.map +0 -1
- package/dist/quadrantDiagram-337W2JSQ-CcKc-h2o.js.map +0 -1
- package/dist/radar-KQ55EAFF-DhmvjiyN.js +0 -3
- package/dist/requirementDiagram-Z7DCOOCP-aPcaPduF.js.map +0 -1
- package/dist/sequenceDiagram-2WXFIKYE-D7Vh1Zld.js +0 -4112
- package/dist/sequenceDiagram-2WXFIKYE-D7Vh1Zld.js.map +0 -1
- package/dist/stateDiagram-RAJIS63D-DdiY5cf3.js +0 -220
- package/dist/stateDiagram-RAJIS63D-DdiY5cf3.js.map +0 -1
- package/dist/stateDiagram-v2-FVOUBMTO-CAWy0Pkh.js +0 -29
- package/dist/timeline-definition-YZTLITO2-CjxxCuOg.js.map +0 -1
- package/dist/treemap-KZPCXAKY-BvLvHb2t.js +0 -3
|
@@ -240,9 +240,9 @@ var c = class {
|
|
|
240
240
|
let s = e.children !== void 0 || e.lazyLoad !== void 0, c = e.expandable !== !1 && s;
|
|
241
241
|
c && a.setAttribute("aria-expanded", e.expanded === !0 ? "true" : "false"), this.selectedNode !== null && this.selectedNode.id === e.id ? a.setAttribute("aria-selected", "true") : a.setAttribute("aria-selected", "false");
|
|
242
242
|
let l = document.createElement("span");
|
|
243
|
-
if (l.className = "cmm-tree-node__toggle", l.setAttribute("aria-hidden", "true"), c ?
|
|
243
|
+
if (l.className = "cmm-tree-node__toggle", l.setAttribute("aria-hidden", "true"), c ? l.addEventListener("click", (t) => {
|
|
244
244
|
t.stopPropagation(), this.handleToggle(e);
|
|
245
|
-
})
|
|
245
|
+
}) : l.style.visibility = "hidden", a.appendChild(l), e.icon !== void 0) {
|
|
246
246
|
let t = document.createElement("span");
|
|
247
247
|
t.className = "cmm-tree-node__icon", t.setAttribute("aria-hidden", "true"), t.textContent = e.icon, a.appendChild(t);
|
|
248
248
|
}
|
|
@@ -273,4 +273,4 @@ var c = class {
|
|
|
273
273
|
//#endregion
|
|
274
274
|
export { c as t };
|
|
275
275
|
|
|
276
|
-
//# sourceMappingURL=tree-view-
|
|
276
|
+
//# sourceMappingURL=tree-view-gML5wGlz.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-view-SpbHG9Yi.js","names":[],"sources":["../src/components/tree-view/lazy.ts","../src/components/tree-view/index.ts"],"sourcesContent":["/**\n * TreeView lazy loading helper\n * @countermeasure/web-components/components/tree-view\n */\n\nimport { type TreeNode } from './types'\n\n/**\n * Load children for a tree node using its lazyLoad function.\n * Caches the result on node.children after the first load.\n */\nexport async function loadChildren(node: TreeNode): Promise<TreeNode[]> {\n if (node.children !== undefined && node.children.length > 0) {\n return node.children\n }\n\n if (node.lazyLoad === undefined) {\n return []\n }\n\n const children = await node.lazyLoad()\n node.children = children\n return children\n}\n","/**\n * TreeView - Accessible expandable tree component with lazy loading and search\n * @countermeasure/web-components/components/tree-view\n *\n * Implements ARIA Tree pattern with full keyboard navigation.\n * WCAG 2.1 AA compliant.\n */\n\nimport { type TreeNode, type TreeViewConfig } from './types'\nimport { loadChildren } from './lazy'\nimport { uniqueId } from '../../primitives/utils'\nimport { escapeHtml } from '../../utils/sanitize'\nimport { announce, createLiveRegion, type LiveRegion } from '../../utils/a11y'\nimport { Keys, createTypeAhead } from '../../utils/keyboard'\n\nexport type { TreeNode, TreeViewConfig } from './types'\n\n/** Resolve a container reference to an HTMLElement */\nfunction resolveContainer(container: HTMLElement | string): HTMLElement {\n if (typeof container === 'string') {\n const el = document.querySelector<HTMLElement>(container)\n if (!el) {\n throw new Error(`TreeView container not found: ${container}`)\n }\n return el\n }\n return container\n}\n\n/** Flatten tree nodes with their depth for keyboard navigation */\ninterface FlatNode {\n node: TreeNode\n depth: number\n parent: TreeNode | null\n index: number\n}\n\nexport class TreeView {\n private readonly container: HTMLElement\n private readonly config: TreeViewConfig\n private data: TreeNode[] = []\n private selectedNode: TreeNode | null = null\n private focusedNode: TreeNode | null = null\n private wrapperEl: HTMLElement | null = null\n private highlightQuery = ''\n private liveRegion: LiveRegion | null = null\n\n // Accessibility state\n private readonly treeId: string\n private readonly labelId: string\n private flatNodes: FlatNode[] = []\n private typeAhead: ReturnType<typeof createTypeAhead> | null = null\n\n constructor(config: TreeViewConfig) {\n this.container = resolveContainer(config.container)\n this.config = config\n this.treeId = uniqueId('cmm-tree')\n this.labelId = uniqueId('cmm-tree-label')\n\n if (config.data !== undefined) {\n this.data = config.data\n }\n\n // Create live region for announcements\n this.liveRegion = createLiveRegion('polite')\n\n this.render()\n }\n\n /** Replace all nodes and re-render */\n setData(data: TreeNode[]): void {\n this.data = data\n this.selectedNode = null\n this.focusedNode = null\n this.render()\n this.announceUpdate(`Tree updated with ${String(this.countNodes(data))} items`)\n }\n\n /** Expand all nodes recursively */\n expandAll(): void {\n this.setExpandedRecursive(this.data, true)\n this.render()\n this.announceUpdate('All nodes expanded')\n }\n\n /** Collapse all nodes recursively */\n collapseAll(): void {\n this.setExpandedRecursive(this.data, false)\n this.render()\n this.announceUpdate('All nodes collapsed')\n }\n\n /** Expand a specific node by id */\n expandNode(id: string): void {\n const node = this.findNodeById(this.data, id)\n if (node) {\n node.expanded = true\n this.render()\n this.announceUpdate(`${node.label} expanded`)\n }\n }\n\n /** Collapse a specific node by id */\n collapseNode(id: string): void {\n const node = this.findNodeById(this.data, id)\n if (node) {\n node.expanded = false\n this.render()\n this.announceUpdate(`${node.label} collapsed`)\n }\n }\n\n /** Highlight nodes matching the given query string */\n highlight(query: string): void {\n this.highlightQuery = query.toLowerCase()\n this.render()\n }\n\n /** Get the last selected node, or null */\n getSelectedNode(): TreeNode | null {\n return this.selectedNode\n }\n\n /** Remove the tree from the DOM and clean up */\n destroy(): void {\n this.container.innerHTML = ''\n this.wrapperEl = null\n this.selectedNode = null\n this.focusedNode = null\n this.liveRegion?.destroy()\n this.liveRegion = null\n }\n\n /** Announce an update to screen readers */\n private announceUpdate(message: string): void {\n this.liveRegion?.announce(message)\n }\n\n /** Count total nodes in tree */\n private countNodes(nodes: TreeNode[]): number {\n let count = 0\n for (const node of nodes) {\n count++\n if (node.children !== undefined) {\n count += this.countNodes(node.children)\n }\n }\n return count\n }\n\n /** Set expanded state on all nodes recursively */\n private setExpandedRecursive(nodes: TreeNode[], expanded: boolean): void {\n for (const node of nodes) {\n if (\n node.expandable !== false &&\n (node.children !== undefined || node.lazyLoad !== undefined)\n ) {\n node.expanded = expanded\n }\n if (node.children !== undefined) {\n this.setExpandedRecursive(node.children, expanded)\n }\n }\n }\n\n /** Find a node by id in the tree */\n private findNodeById(nodes: TreeNode[], id: string): TreeNode | null {\n for (const node of nodes) {\n if (node.id === id) {\n return node\n }\n if (node.children !== undefined) {\n const found = this.findNodeById(node.children, id)\n if (found) {\n return found\n }\n }\n }\n return null\n }\n\n /** Check if a node or any descendant matches the current search */\n private nodeMatchesSearch(node: TreeNode, query: string): boolean {\n if (query === '') {\n return true\n }\n\n if (node.label.toLowerCase().includes(query)) {\n return true\n }\n\n if (node.children !== undefined) {\n for (const child of node.children) {\n if (this.nodeMatchesSearch(child, query)) {\n return true\n }\n }\n }\n\n return false\n }\n\n /** Build flat list of visible nodes for keyboard navigation */\n private buildFlatNodes(): void {\n this.flatNodes = []\n this.flattenNodes(this.data, 0, null)\n\n // Update type-ahead with labels\n const items = this.flatNodes.map(fn => ({ label: fn.node.label }))\n this.typeAhead = createTypeAhead({ items })\n }\n\n /** Recursively flatten visible nodes */\n private flattenNodes(nodes: TreeNode[], depth: number, parent: TreeNode | null): void {\n for (const node of nodes) {\n if (this.highlightQuery !== '' && !this.nodeMatchesSearch(node, this.highlightQuery)) {\n continue\n }\n\n this.flatNodes.push({\n node,\n depth,\n parent,\n index: this.flatNodes.length,\n })\n\n if (node.expanded === true && node.children !== undefined && node.children.length > 0) {\n this.flattenNodes(node.children, depth + 1, node)\n }\n }\n }\n\n /** Get the flat node info for a tree node */\n private getFlatNode(node: TreeNode): FlatNode | null {\n return this.flatNodes.find(fn => fn.node.id === node.id) ?? null\n }\n\n /** Get visible nodes (for aria-setsize) at same level */\n private getSiblingsAtLevel(node: TreeNode): TreeNode[] {\n const flatNode = this.getFlatNode(node)\n if (flatNode === null) {\n return []\n }\n\n const parent = flatNode.parent\n if (parent === null) {\n // Root level\n return this.data.filter(\n n => this.highlightQuery === '' || this.nodeMatchesSearch(n, this.highlightQuery)\n )\n }\n\n // Get parent's children\n return (parent.children ?? []).filter(\n n => this.highlightQuery === '' || this.nodeMatchesSearch(n, this.highlightQuery)\n )\n }\n\n /** Handle keyboard navigation within the tree */\n private handleKeyDown(event: KeyboardEvent): void {\n if (this.flatNodes.length === 0 || this.focusedNode === null) {\n return\n }\n\n const currentFlatNode = this.getFlatNode(this.focusedNode)\n if (currentFlatNode === null) {\n return\n }\n\n const currentIndex = currentFlatNode.index\n const node = this.focusedNode\n const hasChildren = node.children !== undefined || node.lazyLoad !== undefined\n const isExpanded = node.expanded === true\n\n switch (event.key) {\n case Keys.ARROW_DOWN: {\n event.preventDefault()\n // Move to next visible node\n if (currentIndex < this.flatNodes.length - 1) {\n const nextFlatNode = this.flatNodes[currentIndex + 1]\n if (nextFlatNode !== undefined) {\n this.focusNode(nextFlatNode.node)\n }\n }\n break\n }\n case Keys.ARROW_UP: {\n event.preventDefault()\n // Move to previous visible node\n if (currentIndex > 0) {\n const prevFlatNode = this.flatNodes[currentIndex - 1]\n if (prevFlatNode !== undefined) {\n this.focusNode(prevFlatNode.node)\n }\n }\n break\n }\n case Keys.ARROW_RIGHT: {\n event.preventDefault()\n if (hasChildren) {\n if (!isExpanded) {\n // Expand closed node\n void this.handleToggle(node)\n } else if (node.children !== undefined && node.children.length > 0) {\n // Move to first child\n const firstChild = node.children[0]\n if (firstChild !== undefined) {\n this.focusNode(firstChild)\n }\n }\n }\n break\n }\n case Keys.ARROW_LEFT: {\n event.preventDefault()\n if (isExpanded && hasChildren) {\n // Collapse expanded node\n void this.handleToggle(node)\n } else if (currentFlatNode.parent !== null) {\n // Move to parent\n this.focusNode(currentFlatNode.parent)\n }\n break\n }\n case Keys.HOME: {\n event.preventDefault()\n // Move to first visible node\n const firstFlatNode = this.flatNodes[0]\n if (firstFlatNode !== undefined) {\n this.focusNode(firstFlatNode.node)\n }\n break\n }\n case Keys.END: {\n event.preventDefault()\n // Move to last visible node\n const lastFlatNode = this.flatNodes[this.flatNodes.length - 1]\n if (lastFlatNode !== undefined) {\n this.focusNode(lastFlatNode.node)\n }\n break\n }\n case Keys.ENTER:\n case Keys.SPACE: {\n event.preventDefault()\n // Select/activate the node\n this.selectNode(node)\n break\n }\n case '*': {\n event.preventDefault()\n // Expand all siblings at this level\n const siblings = this.getSiblingsAtLevel(node)\n for (const sibling of siblings) {\n if (sibling.expandable !== false && sibling.children !== undefined) {\n sibling.expanded = true\n }\n }\n this.render()\n this.announceUpdate('All siblings expanded')\n break\n }\n default: {\n // Type-ahead: focus node starting with typed character\n if (event.key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n const matchIndex = this.typeAhead?.handleKey(event.key)\n if (matchIndex !== undefined && matchIndex >= 0) {\n const matchedFlatNode = this.flatNodes[matchIndex]\n if (matchedFlatNode !== undefined) {\n this.focusNode(matchedFlatNode.node)\n }\n }\n }\n break\n }\n }\n }\n\n /** Focus a specific node */\n private focusNode(node: TreeNode): void {\n this.focusedNode = node\n this.updateFocusState()\n\n // Announce the node\n const hasChildren = node.children !== undefined || node.lazyLoad !== undefined\n const isExpanded = node.expanded === true\n let announcement = node.label\n\n if (hasChildren) {\n announcement += isExpanded ? ', expanded' : ', collapsed'\n }\n\n announce(announcement, 'polite')\n }\n\n /** Select a node (activate it) */\n private selectNode(node: TreeNode): void {\n this.selectedNode = node\n this.focusedNode = node\n this.config.onSelect?.(node)\n this.render()\n this.announceUpdate(`${node.label} selected`)\n }\n\n /** Update focus state in the DOM */\n private updateFocusState(): void {\n if (!this.wrapperEl) {\n return\n }\n\n // Remove focus from all nodes\n const allItems = this.wrapperEl.querySelectorAll<HTMLElement>('[role=\"treeitem\"]')\n for (const item of allItems) {\n item.setAttribute('tabindex', '-1')\n }\n\n // Set focus on current node\n if (this.focusedNode !== null) {\n const focusedEl = this.wrapperEl.querySelector<HTMLElement>(\n `[data-node-id=\"${this.focusedNode.id}\"] > [role=\"treeitem\"]`\n )\n if (focusedEl !== null) {\n focusedEl.setAttribute('tabindex', '0')\n focusedEl.focus()\n }\n }\n }\n\n /** Render the full tree into the container */\n private render(): void {\n this.container.innerHTML = ''\n\n const wrapper = document.createElement('div')\n wrapper.className = 'cmm-tree-view'\n this.wrapperEl = wrapper\n\n // Accessible label (hidden)\n const label = document.createElement('span')\n label.id = this.labelId\n label.className = 'cmm-sr-only'\n label.textContent =\n 'Tree navigation. Use arrow keys to navigate. Press Enter or Space to select.'\n wrapper.appendChild(label)\n\n // Search input\n if (this.config.searchable === true) {\n const searchBox = document.createElement('div')\n searchBox.className = 'cmm-tree-view__search'\n\n const searchLabel = document.createElement('label')\n searchLabel.className = 'cmm-sr-only'\n const searchId = uniqueId('cmm-tree-search')\n searchLabel.setAttribute('for', searchId)\n searchLabel.textContent = 'Filter tree'\n searchBox.appendChild(searchLabel)\n\n const input = document.createElement('input')\n input.type = 'text'\n input.id = searchId\n input.className = 'cmm-tree-view__search-input'\n input.placeholder = 'Filter...'\n input.value = this.highlightQuery\n input.setAttribute('aria-label', 'Filter tree items')\n input.addEventListener('input', () => {\n this.highlightQuery = input.value.toLowerCase()\n this.renderNodes()\n })\n\n searchBox.appendChild(input)\n wrapper.appendChild(searchBox)\n }\n\n // Tree container\n const treeContainer = document.createElement('div')\n treeContainer.className = 'cmm-tree-view__nodes'\n treeContainer.id = this.treeId\n treeContainer.setAttribute('role', 'tree')\n treeContainer.setAttribute('aria-labelledby', this.labelId)\n treeContainer.dataset.role = 'nodes'\n\n // Add keyboard handler\n treeContainer.addEventListener('keydown', e => {\n this.handleKeyDown(e)\n })\n\n wrapper.appendChild(treeContainer)\n this.container.appendChild(wrapper)\n this.renderNodes()\n }\n\n /** Re-render only the nodes portion of the tree */\n private renderNodes(): void {\n if (!this.wrapperEl) {\n return\n }\n\n const nodesContainer = this.wrapperEl.querySelector<HTMLElement>('[data-role=\"nodes\"]')\n if (!nodesContainer) {\n return\n }\n\n nodesContainer.innerHTML = ''\n\n // Build flat nodes for keyboard navigation\n this.buildFlatNodes()\n\n // Get visible root nodes for aria-setsize\n const visibleRootNodes = this.data.filter(\n n => this.highlightQuery === '' || this.nodeMatchesSearch(n, this.highlightQuery)\n )\n\n let posInSet = 0\n for (const node of this.data) {\n if (this.highlightQuery !== '' && !this.nodeMatchesSearch(node, this.highlightQuery)) {\n continue\n }\n posInSet++\n const el = this.buildNodeElement(node, 0, posInSet, visibleRootNodes.length)\n nodesContainer.appendChild(el)\n }\n\n // Focus first node if none focused\n if (this.focusedNode === null && this.flatNodes.length > 0) {\n const firstNode = this.flatNodes[0]?.node\n if (firstNode !== undefined) {\n this.focusedNode = firstNode\n }\n }\n\n this.updateFocusState()\n }\n\n /** Build a DOM element for a single tree node (recursive) */\n private buildNodeElement(\n node: TreeNode,\n depth: number,\n posInSet: number,\n setSize: number\n ): HTMLElement {\n const nodeEl = document.createElement('div')\n nodeEl.className = 'cmm-tree-node'\n nodeEl.dataset.nodeId = node.id\n\n if (node.expanded === true) {\n nodeEl.classList.add('cmm-tree-node--expanded')\n }\n\n if (this.selectedNode !== null && this.selectedNode.id === node.id) {\n nodeEl.classList.add('cmm-tree-node--selected')\n }\n\n // The row is the treeitem\n const row = document.createElement('div')\n row.className = 'cmm-tree-node__row'\n row.setAttribute('role', 'treeitem')\n row.setAttribute('aria-level', String(depth + 1))\n row.setAttribute('aria-setsize', String(setSize))\n row.setAttribute('aria-posinset', String(posInSet))\n row.style.paddingLeft = `${String(depth * 16 + 8)}px`\n\n // Determine if node is focusable\n const isFocused = this.focusedNode !== null && this.focusedNode.id === node.id\n row.setAttribute('tabindex', isFocused ? '0' : '-1')\n\n // Handle expand/collapse state\n const hasChildren = node.children !== undefined || node.lazyLoad !== undefined\n const isExpandable = node.expandable !== false && hasChildren\n\n if (isExpandable) {\n row.setAttribute('aria-expanded', node.expanded === true ? 'true' : 'false')\n }\n\n // Selection state\n if (this.selectedNode !== null && this.selectedNode.id === node.id) {\n row.setAttribute('aria-selected', 'true')\n } else {\n row.setAttribute('aria-selected', 'false')\n }\n\n // Toggle button (for visual indication)\n const toggle = document.createElement('span')\n toggle.className = 'cmm-tree-node__toggle'\n toggle.setAttribute('aria-hidden', 'true')\n\n if (isExpandable) {\n toggle.textContent = node.expanded === true ? '\\u25BE' : '\\u25B8'\n toggle.addEventListener('click', (e: Event) => {\n e.stopPropagation()\n void this.handleToggle(node)\n })\n } else {\n toggle.textContent = ' '\n toggle.style.visibility = 'hidden'\n }\n\n row.appendChild(toggle)\n\n // Icon\n if (node.icon !== undefined) {\n const icon = document.createElement('span')\n icon.className = 'cmm-tree-node__icon'\n icon.setAttribute('aria-hidden', 'true')\n icon.textContent = node.icon\n row.appendChild(icon)\n }\n\n // Label\n const label = document.createElement('span')\n label.className = 'cmm-tree-node__label'\n\n if (this.highlightQuery !== '' && node.label.toLowerCase().includes(this.highlightQuery)) {\n label.innerHTML = this.highlightText(node.label, this.highlightQuery)\n } else {\n label.textContent = node.label\n }\n\n row.appendChild(label)\n\n // Click handlers\n row.addEventListener('click', () => {\n this.selectNode(node)\n })\n\n row.addEventListener('dblclick', () => {\n this.config.onDoubleClick?.(node)\n })\n\n nodeEl.appendChild(row)\n\n // Children (nested group)\n if (node.expanded === true && node.children !== undefined && node.children.length > 0) {\n const childrenEl = document.createElement('div')\n childrenEl.className = 'cmm-tree-node__children'\n childrenEl.setAttribute('role', 'group')\n\n // Get visible children for setsize\n const visibleChildren = node.children.filter(\n n => this.highlightQuery === '' || this.nodeMatchesSearch(n, this.highlightQuery)\n )\n\n let childPosInSet = 0\n for (const child of node.children) {\n if (this.highlightQuery !== '' && !this.nodeMatchesSearch(child, this.highlightQuery)) {\n continue\n }\n childPosInSet++\n childrenEl.appendChild(\n this.buildNodeElement(child, depth + 1, childPosInSet, visibleChildren.length)\n )\n }\n\n nodeEl.appendChild(childrenEl)\n }\n\n return nodeEl\n }\n\n /** Handle expand/collapse toggle, including lazy loading */\n private async handleToggle(node: TreeNode): Promise<void> {\n if (node.expanded === true) {\n node.expanded = false\n this.announceUpdate(`${node.label} collapsed`)\n } else {\n node.expanded = true\n if (\n node.lazyLoad !== undefined &&\n (node.children === undefined || node.children.length === 0)\n ) {\n this.announceUpdate(`Loading ${node.label}`)\n await loadChildren(node)\n }\n this.announceUpdate(`${node.label} expanded`)\n this.config.onExpand?.(node)\n }\n this.render()\n }\n\n /** Highlight matching text within a label */\n private highlightText(text: string, query: string): string {\n const lowerText = text.toLowerCase()\n const idx = lowerText.indexOf(query)\n if (idx < 0) {\n return escapeHtml(text)\n }\n\n const before = text.slice(0, idx)\n const match = text.slice(idx, idx + query.length)\n const after = text.slice(idx + query.length)\n\n return `${escapeHtml(before)}<mark class=\"cmm-tree-node__highlight\">${escapeHtml(match)}</mark>${escapeHtml(after)}`\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree-view-gML5wGlz.js","names":[],"sources":["../src/components/tree-view/lazy.ts","../src/components/tree-view/index.ts"],"sourcesContent":["/**\n * TreeView lazy loading helper\n * @countermeasure/web-components/components/tree-view\n */\n\nimport { type TreeNode } from './types'\n\n/**\n * Load children for a tree node using its lazyLoad function.\n * Caches the result on node.children after the first load.\n */\nexport async function loadChildren(node: TreeNode): Promise<TreeNode[]> {\n if (node.children !== undefined && node.children.length > 0) {\n return node.children\n }\n\n if (node.lazyLoad === undefined) {\n return []\n }\n\n const children = await node.lazyLoad()\n node.children = children\n return children\n}\n","/**\n * TreeView - Accessible expandable tree component with lazy loading and search\n * @countermeasure/web-components/components/tree-view\n *\n * Implements ARIA Tree pattern with full keyboard navigation.\n * WCAG 2.1 AA compliant.\n */\n\nimport { type TreeNode, type TreeViewConfig } from './types'\nimport { loadChildren } from './lazy'\nimport { uniqueId } from '../../primitives/utils'\nimport { escapeHtml } from '../../utils/sanitize'\nimport { announce, createLiveRegion, type LiveRegion } from '../../utils/a11y'\nimport { Keys, createTypeAhead } from '../../utils/keyboard'\n\nexport type { TreeNode, TreeViewConfig } from './types'\n\n/** Resolve a container reference to an HTMLElement */\nfunction resolveContainer(container: HTMLElement | string): HTMLElement {\n if (typeof container === 'string') {\n const el = document.querySelector<HTMLElement>(container)\n if (!el) {\n throw new Error(`TreeView container not found: ${container}`)\n }\n return el\n }\n return container\n}\n\n/** Flatten tree nodes with their depth for keyboard navigation */\ninterface FlatNode {\n node: TreeNode\n depth: number\n parent: TreeNode | null\n index: number\n}\n\nexport class TreeView {\n private readonly container: HTMLElement\n private readonly config: TreeViewConfig\n private data: TreeNode[] = []\n private selectedNode: TreeNode | null = null\n private focusedNode: TreeNode | null = null\n private wrapperEl: HTMLElement | null = null\n private highlightQuery = ''\n private liveRegion: LiveRegion | null = null\n\n // Accessibility state\n private readonly treeId: string\n private readonly labelId: string\n private flatNodes: FlatNode[] = []\n private typeAhead: ReturnType<typeof createTypeAhead> | null = null\n\n constructor(config: TreeViewConfig) {\n this.container = resolveContainer(config.container)\n this.config = config\n this.treeId = uniqueId('cmm-tree')\n this.labelId = uniqueId('cmm-tree-label')\n\n if (config.data !== undefined) {\n this.data = config.data\n }\n\n // Create live region for announcements\n this.liveRegion = createLiveRegion('polite')\n\n this.render()\n }\n\n /** Replace all nodes and re-render */\n setData(data: TreeNode[]): void {\n this.data = data\n this.selectedNode = null\n this.focusedNode = null\n this.render()\n this.announceUpdate(`Tree updated with ${String(this.countNodes(data))} items`)\n }\n\n /** Expand all nodes recursively */\n expandAll(): void {\n this.setExpandedRecursive(this.data, true)\n this.render()\n this.announceUpdate('All nodes expanded')\n }\n\n /** Collapse all nodes recursively */\n collapseAll(): void {\n this.setExpandedRecursive(this.data, false)\n this.render()\n this.announceUpdate('All nodes collapsed')\n }\n\n /** Expand a specific node by id */\n expandNode(id: string): void {\n const node = this.findNodeById(this.data, id)\n if (node) {\n node.expanded = true\n this.render()\n this.announceUpdate(`${node.label} expanded`)\n }\n }\n\n /** Collapse a specific node by id */\n collapseNode(id: string): void {\n const node = this.findNodeById(this.data, id)\n if (node) {\n node.expanded = false\n this.render()\n this.announceUpdate(`${node.label} collapsed`)\n }\n }\n\n /** Highlight nodes matching the given query string */\n highlight(query: string): void {\n this.highlightQuery = query.toLowerCase()\n this.render()\n }\n\n /** Get the last selected node, or null */\n getSelectedNode(): TreeNode | null {\n return this.selectedNode\n }\n\n /** Remove the tree from the DOM and clean up */\n destroy(): void {\n this.container.innerHTML = ''\n this.wrapperEl = null\n this.selectedNode = null\n this.focusedNode = null\n this.liveRegion?.destroy()\n this.liveRegion = null\n }\n\n /** Announce an update to screen readers */\n private announceUpdate(message: string): void {\n this.liveRegion?.announce(message)\n }\n\n /** Count total nodes in tree */\n private countNodes(nodes: TreeNode[]): number {\n let count = 0\n for (const node of nodes) {\n count++\n if (node.children !== undefined) {\n count += this.countNodes(node.children)\n }\n }\n return count\n }\n\n /** Set expanded state on all nodes recursively */\n private setExpandedRecursive(nodes: TreeNode[], expanded: boolean): void {\n for (const node of nodes) {\n if (\n node.expandable !== false &&\n (node.children !== undefined || node.lazyLoad !== undefined)\n ) {\n node.expanded = expanded\n }\n if (node.children !== undefined) {\n this.setExpandedRecursive(node.children, expanded)\n }\n }\n }\n\n /** Find a node by id in the tree */\n private findNodeById(nodes: TreeNode[], id: string): TreeNode | null {\n for (const node of nodes) {\n if (node.id === id) {\n return node\n }\n if (node.children !== undefined) {\n const found = this.findNodeById(node.children, id)\n if (found) {\n return found\n }\n }\n }\n return null\n }\n\n /** Check if a node or any descendant matches the current search */\n private nodeMatchesSearch(node: TreeNode, query: string): boolean {\n if (query === '') {\n return true\n }\n\n if (node.label.toLowerCase().includes(query)) {\n return true\n }\n\n if (node.children !== undefined) {\n for (const child of node.children) {\n if (this.nodeMatchesSearch(child, query)) {\n return true\n }\n }\n }\n\n return false\n }\n\n /** Build flat list of visible nodes for keyboard navigation */\n private buildFlatNodes(): void {\n this.flatNodes = []\n this.flattenNodes(this.data, 0, null)\n\n // Update type-ahead with labels\n const items = this.flatNodes.map(fn => ({ label: fn.node.label }))\n this.typeAhead = createTypeAhead({ items })\n }\n\n /** Recursively flatten visible nodes */\n private flattenNodes(nodes: TreeNode[], depth: number, parent: TreeNode | null): void {\n for (const node of nodes) {\n if (this.highlightQuery !== '' && !this.nodeMatchesSearch(node, this.highlightQuery)) {\n continue\n }\n\n this.flatNodes.push({\n node,\n depth,\n parent,\n index: this.flatNodes.length,\n })\n\n if (node.expanded === true && node.children !== undefined && node.children.length > 0) {\n this.flattenNodes(node.children, depth + 1, node)\n }\n }\n }\n\n /** Get the flat node info for a tree node */\n private getFlatNode(node: TreeNode): FlatNode | null {\n return this.flatNodes.find(fn => fn.node.id === node.id) ?? null\n }\n\n /** Get visible nodes (for aria-setsize) at same level */\n private getSiblingsAtLevel(node: TreeNode): TreeNode[] {\n const flatNode = this.getFlatNode(node)\n if (flatNode === null) {\n return []\n }\n\n const parent = flatNode.parent\n if (parent === null) {\n // Root level\n return this.data.filter(\n n => this.highlightQuery === '' || this.nodeMatchesSearch(n, this.highlightQuery)\n )\n }\n\n // Get parent's children\n return (parent.children ?? []).filter(\n n => this.highlightQuery === '' || this.nodeMatchesSearch(n, this.highlightQuery)\n )\n }\n\n /** Handle keyboard navigation within the tree */\n private handleKeyDown(event: KeyboardEvent): void {\n if (this.flatNodes.length === 0 || this.focusedNode === null) {\n return\n }\n\n const currentFlatNode = this.getFlatNode(this.focusedNode)\n if (currentFlatNode === null) {\n return\n }\n\n const currentIndex = currentFlatNode.index\n const node = this.focusedNode\n const hasChildren = node.children !== undefined || node.lazyLoad !== undefined\n const isExpanded = node.expanded === true\n\n switch (event.key) {\n case Keys.ARROW_DOWN: {\n event.preventDefault()\n // Move to next visible node\n if (currentIndex < this.flatNodes.length - 1) {\n const nextFlatNode = this.flatNodes[currentIndex + 1]\n if (nextFlatNode !== undefined) {\n this.focusNode(nextFlatNode.node)\n }\n }\n break\n }\n case Keys.ARROW_UP: {\n event.preventDefault()\n // Move to previous visible node\n if (currentIndex > 0) {\n const prevFlatNode = this.flatNodes[currentIndex - 1]\n if (prevFlatNode !== undefined) {\n this.focusNode(prevFlatNode.node)\n }\n }\n break\n }\n case Keys.ARROW_RIGHT: {\n event.preventDefault()\n if (hasChildren) {\n if (!isExpanded) {\n // Expand closed node\n void this.handleToggle(node)\n } else if (node.children !== undefined && node.children.length > 0) {\n // Move to first child\n const firstChild = node.children[0]\n if (firstChild !== undefined) {\n this.focusNode(firstChild)\n }\n }\n }\n break\n }\n case Keys.ARROW_LEFT: {\n event.preventDefault()\n if (isExpanded && hasChildren) {\n // Collapse expanded node\n void this.handleToggle(node)\n } else if (currentFlatNode.parent !== null) {\n // Move to parent\n this.focusNode(currentFlatNode.parent)\n }\n break\n }\n case Keys.HOME: {\n event.preventDefault()\n // Move to first visible node\n const firstFlatNode = this.flatNodes[0]\n if (firstFlatNode !== undefined) {\n this.focusNode(firstFlatNode.node)\n }\n break\n }\n case Keys.END: {\n event.preventDefault()\n // Move to last visible node\n const lastFlatNode = this.flatNodes[this.flatNodes.length - 1]\n if (lastFlatNode !== undefined) {\n this.focusNode(lastFlatNode.node)\n }\n break\n }\n case Keys.ENTER:\n case Keys.SPACE: {\n event.preventDefault()\n // Select/activate the node\n this.selectNode(node)\n break\n }\n case '*': {\n event.preventDefault()\n // Expand all siblings at this level\n const siblings = this.getSiblingsAtLevel(node)\n for (const sibling of siblings) {\n if (sibling.expandable !== false && sibling.children !== undefined) {\n sibling.expanded = true\n }\n }\n this.render()\n this.announceUpdate('All siblings expanded')\n break\n }\n default: {\n // Type-ahead: focus node starting with typed character\n if (event.key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n const matchIndex = this.typeAhead?.handleKey(event.key)\n if (matchIndex !== undefined && matchIndex >= 0) {\n const matchedFlatNode = this.flatNodes[matchIndex]\n if (matchedFlatNode !== undefined) {\n this.focusNode(matchedFlatNode.node)\n }\n }\n }\n break\n }\n }\n }\n\n /** Focus a specific node */\n private focusNode(node: TreeNode): void {\n this.focusedNode = node\n this.updateFocusState()\n\n // Announce the node\n const hasChildren = node.children !== undefined || node.lazyLoad !== undefined\n const isExpanded = node.expanded === true\n let announcement = node.label\n\n if (hasChildren) {\n announcement += isExpanded ? ', expanded' : ', collapsed'\n }\n\n announce(announcement, 'polite')\n }\n\n /** Select a node (activate it) */\n private selectNode(node: TreeNode): void {\n this.selectedNode = node\n this.focusedNode = node\n this.config.onSelect?.(node)\n this.render()\n this.announceUpdate(`${node.label} selected`)\n }\n\n /** Update focus state in the DOM */\n private updateFocusState(): void {\n if (!this.wrapperEl) {\n return\n }\n\n // Remove focus from all nodes\n const allItems = this.wrapperEl.querySelectorAll<HTMLElement>('[role=\"treeitem\"]')\n for (const item of allItems) {\n item.setAttribute('tabindex', '-1')\n }\n\n // Set focus on current node\n if (this.focusedNode !== null) {\n const focusedEl = this.wrapperEl.querySelector<HTMLElement>(\n `[data-node-id=\"${this.focusedNode.id}\"] > [role=\"treeitem\"]`\n )\n if (focusedEl !== null) {\n focusedEl.setAttribute('tabindex', '0')\n focusedEl.focus()\n }\n }\n }\n\n /** Render the full tree into the container */\n private render(): void {\n this.container.innerHTML = ''\n\n const wrapper = document.createElement('div')\n wrapper.className = 'cmm-tree-view'\n this.wrapperEl = wrapper\n\n // Accessible label (hidden)\n const label = document.createElement('span')\n label.id = this.labelId\n label.className = 'cmm-sr-only'\n label.textContent =\n 'Tree navigation. Use arrow keys to navigate. Press Enter or Space to select.'\n wrapper.appendChild(label)\n\n // Search input\n if (this.config.searchable === true) {\n const searchBox = document.createElement('div')\n searchBox.className = 'cmm-tree-view__search'\n\n const searchLabel = document.createElement('label')\n searchLabel.className = 'cmm-sr-only'\n const searchId = uniqueId('cmm-tree-search')\n searchLabel.setAttribute('for', searchId)\n searchLabel.textContent = 'Filter tree'\n searchBox.appendChild(searchLabel)\n\n const input = document.createElement('input')\n input.type = 'text'\n input.id = searchId\n input.className = 'cmm-tree-view__search-input'\n input.placeholder = 'Filter...'\n input.value = this.highlightQuery\n input.setAttribute('aria-label', 'Filter tree items')\n input.addEventListener('input', () => {\n this.highlightQuery = input.value.toLowerCase()\n this.renderNodes()\n })\n\n searchBox.appendChild(input)\n wrapper.appendChild(searchBox)\n }\n\n // Tree container\n const treeContainer = document.createElement('div')\n treeContainer.className = 'cmm-tree-view__nodes'\n treeContainer.id = this.treeId\n treeContainer.setAttribute('role', 'tree')\n treeContainer.setAttribute('aria-labelledby', this.labelId)\n treeContainer.dataset.role = 'nodes'\n\n // Add keyboard handler\n treeContainer.addEventListener('keydown', e => {\n this.handleKeyDown(e)\n })\n\n wrapper.appendChild(treeContainer)\n this.container.appendChild(wrapper)\n this.renderNodes()\n }\n\n /** Re-render only the nodes portion of the tree */\n private renderNodes(): void {\n if (!this.wrapperEl) {\n return\n }\n\n const nodesContainer = this.wrapperEl.querySelector<HTMLElement>('[data-role=\"nodes\"]')\n if (!nodesContainer) {\n return\n }\n\n nodesContainer.innerHTML = ''\n\n // Build flat nodes for keyboard navigation\n this.buildFlatNodes()\n\n // Get visible root nodes for aria-setsize\n const visibleRootNodes = this.data.filter(\n n => this.highlightQuery === '' || this.nodeMatchesSearch(n, this.highlightQuery)\n )\n\n let posInSet = 0\n for (const node of this.data) {\n if (this.highlightQuery !== '' && !this.nodeMatchesSearch(node, this.highlightQuery)) {\n continue\n }\n posInSet++\n const el = this.buildNodeElement(node, 0, posInSet, visibleRootNodes.length)\n nodesContainer.appendChild(el)\n }\n\n // Focus first node if none focused\n if (this.focusedNode === null && this.flatNodes.length > 0) {\n const firstNode = this.flatNodes[0]?.node\n if (firstNode !== undefined) {\n this.focusedNode = firstNode\n }\n }\n\n this.updateFocusState()\n }\n\n /** Build a DOM element for a single tree node (recursive) */\n private buildNodeElement(\n node: TreeNode,\n depth: number,\n posInSet: number,\n setSize: number\n ): HTMLElement {\n const nodeEl = document.createElement('div')\n nodeEl.className = 'cmm-tree-node'\n nodeEl.dataset.nodeId = node.id\n\n if (node.expanded === true) {\n nodeEl.classList.add('cmm-tree-node--expanded')\n }\n\n if (this.selectedNode !== null && this.selectedNode.id === node.id) {\n nodeEl.classList.add('cmm-tree-node--selected')\n }\n\n // The row is the treeitem\n const row = document.createElement('div')\n row.className = 'cmm-tree-node__row'\n row.setAttribute('role', 'treeitem')\n row.setAttribute('aria-level', String(depth + 1))\n row.setAttribute('aria-setsize', String(setSize))\n row.setAttribute('aria-posinset', String(posInSet))\n row.style.paddingLeft = `${String(depth * 16 + 8)}px`\n\n // Determine if node is focusable\n const isFocused = this.focusedNode !== null && this.focusedNode.id === node.id\n row.setAttribute('tabindex', isFocused ? '0' : '-1')\n\n // Handle expand/collapse state\n const hasChildren = node.children !== undefined || node.lazyLoad !== undefined\n const isExpandable = node.expandable !== false && hasChildren\n\n if (isExpandable) {\n row.setAttribute('aria-expanded', node.expanded === true ? 'true' : 'false')\n }\n\n // Selection state\n if (this.selectedNode !== null && this.selectedNode.id === node.id) {\n row.setAttribute('aria-selected', 'true')\n } else {\n row.setAttribute('aria-selected', 'false')\n }\n\n // Toggle button (for visual indication)\n const toggle = document.createElement('span')\n toggle.className = 'cmm-tree-node__toggle'\n toggle.setAttribute('aria-hidden', 'true')\n\n if (isExpandable) {\n toggle.addEventListener('click', (e: Event) => {\n e.stopPropagation()\n void this.handleToggle(node)\n })\n } else {\n toggle.style.visibility = 'hidden'\n }\n\n row.appendChild(toggle)\n\n // Icon\n if (node.icon !== undefined) {\n const icon = document.createElement('span')\n icon.className = 'cmm-tree-node__icon'\n icon.setAttribute('aria-hidden', 'true')\n icon.textContent = node.icon\n row.appendChild(icon)\n }\n\n // Label\n const label = document.createElement('span')\n label.className = 'cmm-tree-node__label'\n\n if (this.highlightQuery !== '' && node.label.toLowerCase().includes(this.highlightQuery)) {\n label.innerHTML = this.highlightText(node.label, this.highlightQuery)\n } else {\n label.textContent = node.label\n }\n\n row.appendChild(label)\n\n // Click handlers\n row.addEventListener('click', () => {\n this.selectNode(node)\n })\n\n row.addEventListener('dblclick', () => {\n this.config.onDoubleClick?.(node)\n })\n\n nodeEl.appendChild(row)\n\n // Children (nested group)\n if (node.expanded === true && node.children !== undefined && node.children.length > 0) {\n const childrenEl = document.createElement('div')\n childrenEl.className = 'cmm-tree-node__children'\n childrenEl.setAttribute('role', 'group')\n\n // Get visible children for setsize\n const visibleChildren = node.children.filter(\n n => this.highlightQuery === '' || this.nodeMatchesSearch(n, this.highlightQuery)\n )\n\n let childPosInSet = 0\n for (const child of node.children) {\n if (this.highlightQuery !== '' && !this.nodeMatchesSearch(child, this.highlightQuery)) {\n continue\n }\n childPosInSet++\n childrenEl.appendChild(\n this.buildNodeElement(child, depth + 1, childPosInSet, visibleChildren.length)\n )\n }\n\n nodeEl.appendChild(childrenEl)\n }\n\n return nodeEl\n }\n\n /** Handle expand/collapse toggle, including lazy loading */\n private async handleToggle(node: TreeNode): Promise<void> {\n if (node.expanded === true) {\n node.expanded = false\n this.announceUpdate(`${node.label} collapsed`)\n } else {\n node.expanded = true\n if (\n node.lazyLoad !== undefined &&\n (node.children === undefined || node.children.length === 0)\n ) {\n this.announceUpdate(`Loading ${node.label}`)\n await loadChildren(node)\n }\n this.announceUpdate(`${node.label} expanded`)\n this.config.onExpand?.(node)\n }\n this.render()\n }\n\n /** Highlight matching text within a label */\n private highlightText(text: string, query: string): string {\n const lowerText = text.toLowerCase()\n const idx = lowerText.indexOf(query)\n if (idx < 0) {\n return escapeHtml(text)\n }\n\n const before = text.slice(0, idx)\n const match = text.slice(idx, idx + query.length)\n const after = text.slice(idx + query.length)\n\n return `${escapeHtml(before)}<mark class=\"cmm-tree-node__highlight\">${escapeHtml(match)}</mark>${escapeHtml(after)}`\n }\n}\n"],"mappings":";;;;;AAWA,eAAsB,EAAa,GAAqC;AACtE,KAAI,EAAK,aAAa,KAAA,KAAa,EAAK,SAAS,SAAS,EACxD,QAAO,EAAK;AAGd,KAAI,EAAK,aAAa,KAAA,EACpB,QAAO,EAAE;CAGX,IAAM,IAAW,MAAM,EAAK,UAAU;AAEtC,QADA,EAAK,WAAW,GACT;;;;ACJT,SAAS,EAAiB,GAA8C;AACtE,KAAI,OAAO,KAAc,UAAU;EACjC,IAAM,IAAK,SAAS,cAA2B,EAAU;AACzD,MAAI,CAAC,EACH,OAAU,MAAM,iCAAiC,IAAY;AAE/D,SAAO;;AAET,QAAO;;AAWT,IAAa,IAAb,MAAsB;CACpB;CACA;CACA,OAA2B,EAAE;CAC7B,eAAwC;CACxC,cAAuC;CACvC,YAAwC;CACxC,iBAAyB;CACzB,aAAwC;CAGxC;CACA;CACA,YAAgC,EAAE;CAClC,YAA+D;CAE/D,YAAY,GAAwB;AAalC,EAZA,KAAK,YAAY,EAAiB,EAAO,UAAU,EACnD,KAAK,SAAS,GACd,KAAK,SAAS,EAAS,WAAW,EAClC,KAAK,UAAU,EAAS,iBAAiB,EAErC,EAAO,SAAS,KAAA,MAClB,KAAK,OAAO,EAAO,OAIrB,KAAK,aAAa,EAAiB,SAAS,EAE5C,KAAK,QAAQ;;CAIf,QAAQ,GAAwB;AAK9B,EAJA,KAAK,OAAO,GACZ,KAAK,eAAe,MACpB,KAAK,cAAc,MACnB,KAAK,QAAQ,EACb,KAAK,eAAe,qBAAqB,OAAO,KAAK,WAAW,EAAK,CAAC,CAAC,QAAQ;;CAIjF,YAAkB;AAGhB,EAFA,KAAK,qBAAqB,KAAK,MAAM,GAAK,EAC1C,KAAK,QAAQ,EACb,KAAK,eAAe,qBAAqB;;CAI3C,cAAoB;AAGlB,EAFA,KAAK,qBAAqB,KAAK,MAAM,GAAM,EAC3C,KAAK,QAAQ,EACb,KAAK,eAAe,sBAAsB;;CAI5C,WAAW,GAAkB;EAC3B,IAAM,IAAO,KAAK,aAAa,KAAK,MAAM,EAAG;AAC7C,EAAI,MACF,EAAK,WAAW,IAChB,KAAK,QAAQ,EACb,KAAK,eAAe,GAAG,EAAK,MAAM,WAAW;;CAKjD,aAAa,GAAkB;EAC7B,IAAM,IAAO,KAAK,aAAa,KAAK,MAAM,EAAG;AAC7C,EAAI,MACF,EAAK,WAAW,IAChB,KAAK,QAAQ,EACb,KAAK,eAAe,GAAG,EAAK,MAAM,YAAY;;CAKlD,UAAU,GAAqB;AAE7B,EADA,KAAK,iBAAiB,EAAM,aAAa,EACzC,KAAK,QAAQ;;CAIf,kBAAmC;AACjC,SAAO,KAAK;;CAId,UAAgB;AAMd,EALA,KAAK,UAAU,YAAY,IAC3B,KAAK,YAAY,MACjB,KAAK,eAAe,MACpB,KAAK,cAAc,MACnB,KAAK,YAAY,SAAS,EAC1B,KAAK,aAAa;;CAIpB,eAAuB,GAAuB;AAC5C,OAAK,YAAY,SAAS,EAAQ;;CAIpC,WAAmB,GAA2B;EAC5C,IAAI,IAAQ;AACZ,OAAK,IAAM,KAAQ,EAEjB,CADA,KACI,EAAK,aAAa,KAAA,MACpB,KAAS,KAAK,WAAW,EAAK,SAAS;AAG3C,SAAO;;CAIT,qBAA6B,GAAmB,GAAyB;AACvE,OAAK,IAAM,KAAQ,EAOjB,CALE,EAAK,eAAe,OACnB,EAAK,aAAa,KAAA,KAAa,EAAK,aAAa,KAAA,OAElD,EAAK,WAAW,IAEd,EAAK,aAAa,KAAA,KACpB,KAAK,qBAAqB,EAAK,UAAU,EAAS;;CAMxD,aAAqB,GAAmB,GAA6B;AACnE,OAAK,IAAM,KAAQ,GAAO;AACxB,OAAI,EAAK,OAAO,EACd,QAAO;AAET,OAAI,EAAK,aAAa,KAAA,GAAW;IAC/B,IAAM,IAAQ,KAAK,aAAa,EAAK,UAAU,EAAG;AAClD,QAAI,EACF,QAAO;;;AAIb,SAAO;;CAIT,kBAA0B,GAAgB,GAAwB;AAKhE,MAJI,MAAU,MAIV,EAAK,MAAM,aAAa,CAAC,SAAS,EAAM,CAC1C,QAAO;AAGT,MAAI,EAAK,aAAa,KAAA;QACf,IAAM,KAAS,EAAK,SACvB,KAAI,KAAK,kBAAkB,GAAO,EAAM,CACtC,QAAO;;AAKb,SAAO;;CAIT,iBAA+B;AAM7B,EALA,KAAK,YAAY,EAAE,EACnB,KAAK,aAAa,KAAK,MAAM,GAAG,KAAK,EAIrC,KAAK,YAAY,EAAgB,EAAE,OADrB,KAAK,UAAU,KAAI,OAAO,EAAE,OAAO,EAAG,KAAK,OAAO,EAAE,EACxB,CAAC;;CAI7C,aAAqB,GAAmB,GAAe,GAA+B;AACpF,OAAK,IAAM,KAAQ,EACb,MAAK,mBAAmB,MAAM,CAAC,KAAK,kBAAkB,GAAM,KAAK,eAAe,KAIpF,KAAK,UAAU,KAAK;GAClB;GACA;GACA;GACA,OAAO,KAAK,UAAU;GACvB,CAAC,EAEE,EAAK,aAAa,MAAQ,EAAK,aAAa,KAAA,KAAa,EAAK,SAAS,SAAS,KAClF,KAAK,aAAa,EAAK,UAAU,IAAQ,GAAG,EAAK;;CAMvD,YAAoB,GAAiC;AACnD,SAAO,KAAK,UAAU,MAAK,MAAM,EAAG,KAAK,OAAO,EAAK,GAAG,IAAI;;CAI9D,mBAA2B,GAA4B;EACrD,IAAM,IAAW,KAAK,YAAY,EAAK;AACvC,MAAI,MAAa,KACf,QAAO,EAAE;EAGX,IAAM,IAAS,EAAS;AASxB,SARI,MAAW,OAEN,KAAK,KAAK,QACf,MAAK,KAAK,mBAAmB,MAAM,KAAK,kBAAkB,GAAG,KAAK,eAAe,CAClF,IAIK,EAAO,YAAY,EAAE,EAAE,QAC7B,MAAK,KAAK,mBAAmB,MAAM,KAAK,kBAAkB,GAAG,KAAK,eAAe,CAClF;;CAIH,cAAsB,GAA4B;AAChD,MAAI,KAAK,UAAU,WAAW,KAAK,KAAK,gBAAgB,KACtD;EAGF,IAAM,IAAkB,KAAK,YAAY,KAAK,YAAY;AAC1D,MAAI,MAAoB,KACtB;EAGF,IAAM,IAAe,EAAgB,OAC/B,IAAO,KAAK,aACZ,IAAc,EAAK,aAAa,KAAA,KAAa,EAAK,aAAa,KAAA,GAC/D,IAAa,EAAK,aAAa;AAErC,UAAQ,EAAM,KAAd;GACE,KAAK,EAAK;AAGR,QAFA,EAAM,gBAAgB,EAElB,IAAe,KAAK,UAAU,SAAS,GAAG;KAC5C,IAAM,IAAe,KAAK,UAAU,IAAe;AACnD,KAAI,MAAiB,KAAA,KACnB,KAAK,UAAU,EAAa,KAAK;;AAGrC;GAEF,KAAK,EAAK;AAGR,QAFA,EAAM,gBAAgB,EAElB,IAAe,GAAG;KACpB,IAAM,IAAe,KAAK,UAAU,IAAe;AACnD,KAAI,MAAiB,KAAA,KACnB,KAAK,UAAU,EAAa,KAAK;;AAGrC;GAEF,KAAK,EAAK;AAER,QADA,EAAM,gBAAgB,EAClB;SACE,CAAC,EAEE,MAAK,aAAa,EAAK;cACnB,EAAK,aAAa,KAAA,KAAa,EAAK,SAAS,SAAS,GAAG;MAElE,IAAM,IAAa,EAAK,SAAS;AACjC,MAAI,MAAe,KAAA,KACjB,KAAK,UAAU,EAAW;;;AAIhC;GAEF,KAAK,EAAK;AAER,IADA,EAAM,gBAAgB,EAClB,KAAc,IAEX,KAAK,aAAa,EAAK,GACnB,EAAgB,WAAW,QAEpC,KAAK,UAAU,EAAgB,OAAO;AAExC;GAEF,KAAK,EAAK,MAAM;AACd,MAAM,gBAAgB;IAEtB,IAAM,IAAgB,KAAK,UAAU;AACrC,IAAI,MAAkB,KAAA,KACpB,KAAK,UAAU,EAAc,KAAK;AAEpC;;GAEF,KAAK,EAAK,KAAK;AACb,MAAM,gBAAgB;IAEtB,IAAM,IAAe,KAAK,UAAU,KAAK,UAAU,SAAS;AAC5D,IAAI,MAAiB,KAAA,KACnB,KAAK,UAAU,EAAa,KAAK;AAEnC;;GAEF,KAAK,EAAK;GACV,KAAK,EAAK;AAGR,IAFA,EAAM,gBAAgB,EAEtB,KAAK,WAAW,EAAK;AACrB;GAEF,KAAK,KAAK;AACR,MAAM,gBAAgB;IAEtB,IAAM,IAAW,KAAK,mBAAmB,EAAK;AAC9C,SAAK,IAAM,KAAW,EACpB,CAAI,EAAQ,eAAe,MAAS,EAAQ,aAAa,KAAA,MACvD,EAAQ,WAAW;AAIvB,IADA,KAAK,QAAQ,EACb,KAAK,eAAe,wBAAwB;AAC5C;;GAEF;AAEE,QAAI,EAAM,IAAI,WAAW,KAAK,CAAC,EAAM,WAAW,CAAC,EAAM,UAAU,CAAC,EAAM,SAAS;KAC/E,IAAM,IAAa,KAAK,WAAW,UAAU,EAAM,IAAI;AACvD,SAAI,MAAe,KAAA,KAAa,KAAc,GAAG;MAC/C,IAAM,IAAkB,KAAK,UAAU;AACvC,MAAI,MAAoB,KAAA,KACtB,KAAK,UAAU,EAAgB,KAAK;;;AAI1C;;;CAMN,UAAkB,GAAsB;AAEtC,EADA,KAAK,cAAc,GACnB,KAAK,kBAAkB;EAGvB,IAAM,IAAc,EAAK,aAAa,KAAA,KAAa,EAAK,aAAa,KAAA,GAC/D,IAAa,EAAK,aAAa,IACjC,IAAe,EAAK;AAMxB,EAJI,MACF,KAAgB,IAAa,eAAe,gBAG9C,EAAS,GAAc,SAAS;;CAIlC,WAAmB,GAAsB;AAKvC,EAJA,KAAK,eAAe,GACpB,KAAK,cAAc,GACnB,KAAK,OAAO,WAAW,EAAK,EAC5B,KAAK,QAAQ,EACb,KAAK,eAAe,GAAG,EAAK,MAAM,WAAW;;CAI/C,mBAAiC;AAC/B,MAAI,CAAC,KAAK,UACR;EAIF,IAAM,IAAW,KAAK,UAAU,iBAA8B,sBAAoB;AAClF,OAAK,IAAM,KAAQ,EACjB,GAAK,aAAa,YAAY,KAAK;AAIrC,MAAI,KAAK,gBAAgB,MAAM;GAC7B,IAAM,IAAY,KAAK,UAAU,cAC/B,kBAAkB,KAAK,YAAY,GAAG,wBACvC;AACD,GAAI,MAAc,SAChB,EAAU,aAAa,YAAY,IAAI,EACvC,EAAU,OAAO;;;CAMvB,SAAuB;AACrB,OAAK,UAAU,YAAY;EAE3B,IAAM,IAAU,SAAS,cAAc,MAAM;AAE7C,EADA,EAAQ,YAAY,iBACpB,KAAK,YAAY;EAGjB,IAAM,IAAQ,SAAS,cAAc,OAAO;AAQ5C,MAPA,EAAM,KAAK,KAAK,SAChB,EAAM,YAAY,eAClB,EAAM,cACJ,gFACF,EAAQ,YAAY,EAAM,EAGtB,KAAK,OAAO,eAAe,IAAM;GACnC,IAAM,IAAY,SAAS,cAAc,MAAM;AAC/C,KAAU,YAAY;GAEtB,IAAM,IAAc,SAAS,cAAc,QAAQ;AACnD,KAAY,YAAY;GACxB,IAAM,IAAW,EAAS,kBAAkB;AAG5C,GAFA,EAAY,aAAa,OAAO,EAAS,EACzC,EAAY,cAAc,eAC1B,EAAU,YAAY,EAAY;GAElC,IAAM,IAAQ,SAAS,cAAc,QAAQ;AAa7C,GAZA,EAAM,OAAO,QACb,EAAM,KAAK,GACX,EAAM,YAAY,+BAClB,EAAM,cAAc,aACpB,EAAM,QAAQ,KAAK,gBACnB,EAAM,aAAa,cAAc,oBAAoB,EACrD,EAAM,iBAAiB,eAAe;AAEpC,IADA,KAAK,iBAAiB,EAAM,MAAM,aAAa,EAC/C,KAAK,aAAa;KAClB,EAEF,EAAU,YAAY,EAAM,EAC5B,EAAQ,YAAY,EAAU;;EAIhC,IAAM,IAAgB,SAAS,cAAc,MAAM;AAcnD,EAbA,EAAc,YAAY,wBAC1B,EAAc,KAAK,KAAK,QACxB,EAAc,aAAa,QAAQ,OAAO,EAC1C,EAAc,aAAa,mBAAmB,KAAK,QAAQ,EAC3D,EAAc,QAAQ,OAAO,SAG7B,EAAc,iBAAiB,YAAW,MAAK;AAC7C,QAAK,cAAc,EAAE;IACrB,EAEF,EAAQ,YAAY,EAAc,EAClC,KAAK,UAAU,YAAY,EAAQ,EACnC,KAAK,aAAa;;CAIpB,cAA4B;AAC1B,MAAI,CAAC,KAAK,UACR;EAGF,IAAM,IAAiB,KAAK,UAAU,cAA2B,wBAAsB;AACvF,MAAI,CAAC,EACH;AAMF,EAHA,EAAe,YAAY,IAG3B,KAAK,gBAAgB;EAGrB,IAAM,IAAmB,KAAK,KAAK,QACjC,MAAK,KAAK,mBAAmB,MAAM,KAAK,kBAAkB,GAAG,KAAK,eAAe,CAClF,EAEG,IAAW;AACf,OAAK,IAAM,KAAQ,KAAK,MAAM;AAC5B,OAAI,KAAK,mBAAmB,MAAM,CAAC,KAAK,kBAAkB,GAAM,KAAK,eAAe,CAClF;AAEF;GACA,IAAM,IAAK,KAAK,iBAAiB,GAAM,GAAG,GAAU,EAAiB,OAAO;AAC5E,KAAe,YAAY,EAAG;;AAIhC,MAAI,KAAK,gBAAgB,QAAQ,KAAK,UAAU,SAAS,GAAG;GAC1D,IAAM,IAAY,KAAK,UAAU,IAAI;AACrC,GAAI,MAAc,KAAA,MAChB,KAAK,cAAc;;AAIvB,OAAK,kBAAkB;;CAIzB,iBACE,GACA,GACA,GACA,GACa;EACb,IAAM,IAAS,SAAS,cAAc,MAAM;AAQ5C,EAPA,EAAO,YAAY,iBACnB,EAAO,QAAQ,SAAS,EAAK,IAEzB,EAAK,aAAa,MACpB,EAAO,UAAU,IAAI,0BAA0B,EAG7C,KAAK,iBAAiB,QAAQ,KAAK,aAAa,OAAO,EAAK,MAC9D,EAAO,UAAU,IAAI,0BAA0B;EAIjD,IAAM,IAAM,SAAS,cAAc,MAAM;AAMzC,EALA,EAAI,YAAY,sBAChB,EAAI,aAAa,QAAQ,WAAW,EACpC,EAAI,aAAa,cAAc,OAAO,IAAQ,EAAE,CAAC,EACjD,EAAI,aAAa,gBAAgB,OAAO,EAAQ,CAAC,EACjD,EAAI,aAAa,iBAAiB,OAAO,EAAS,CAAC,EACnD,EAAI,MAAM,cAAc,GAAG,OAAO,IAAQ,KAAK,EAAE,CAAC;EAGlD,IAAM,IAAY,KAAK,gBAAgB,QAAQ,KAAK,YAAY,OAAO,EAAK;AAC5E,IAAI,aAAa,YAAY,IAAY,MAAM,KAAK;EAGpD,IAAM,IAAc,EAAK,aAAa,KAAA,KAAa,EAAK,aAAa,KAAA,GAC/D,IAAe,EAAK,eAAe,MAAS;AAOlD,EALI,KACF,EAAI,aAAa,iBAAiB,EAAK,aAAa,KAAO,SAAS,QAAQ,EAI1E,KAAK,iBAAiB,QAAQ,KAAK,aAAa,OAAO,EAAK,KAC9D,EAAI,aAAa,iBAAiB,OAAO,GAEzC,EAAI,aAAa,iBAAiB,QAAQ;EAI5C,IAAM,IAAS,SAAS,cAAc,OAAO;AAgB7C,MAfA,EAAO,YAAY,yBACnB,EAAO,aAAa,eAAe,OAAO,EAEtC,IACF,EAAO,iBAAiB,UAAU,MAAa;AAExC,GADL,EAAE,iBAAiB,EACd,KAAK,aAAa,EAAK;IAC5B,GAEF,EAAO,MAAM,aAAa,UAG5B,EAAI,YAAY,EAAO,EAGnB,EAAK,SAAS,KAAA,GAAW;GAC3B,IAAM,IAAO,SAAS,cAAc,OAAO;AAI3C,GAHA,EAAK,YAAY,uBACjB,EAAK,aAAa,eAAe,OAAO,EACxC,EAAK,cAAc,EAAK,MACxB,EAAI,YAAY,EAAK;;EAIvB,IAAM,IAAQ,SAAS,cAAc,OAAO;AAuB5C,MAtBA,EAAM,YAAY,wBAEd,KAAK,mBAAmB,MAAM,EAAK,MAAM,aAAa,CAAC,SAAS,KAAK,eAAe,GACtF,EAAM,YAAY,KAAK,cAAc,EAAK,OAAO,KAAK,eAAe,GAErE,EAAM,cAAc,EAAK,OAG3B,EAAI,YAAY,EAAM,EAGtB,EAAI,iBAAiB,eAAe;AAClC,QAAK,WAAW,EAAK;IACrB,EAEF,EAAI,iBAAiB,kBAAkB;AACrC,QAAK,OAAO,gBAAgB,EAAK;IACjC,EAEF,EAAO,YAAY,EAAI,EAGnB,EAAK,aAAa,MAAQ,EAAK,aAAa,KAAA,KAAa,EAAK,SAAS,SAAS,GAAG;GACrF,IAAM,IAAa,SAAS,cAAc,MAAM;AAEhD,GADA,EAAW,YAAY,2BACvB,EAAW,aAAa,QAAQ,QAAQ;GAGxC,IAAM,IAAkB,EAAK,SAAS,QACpC,MAAK,KAAK,mBAAmB,MAAM,KAAK,kBAAkB,GAAG,KAAK,eAAe,CAClF,EAEG,IAAgB;AACpB,QAAK,IAAM,KAAS,EAAK,SACnB,MAAK,mBAAmB,MAAM,CAAC,KAAK,kBAAkB,GAAO,KAAK,eAAe,KAGrF,KACA,EAAW,YACT,KAAK,iBAAiB,GAAO,IAAQ,GAAG,GAAe,EAAgB,OAAO,CAC/E;AAGH,KAAO,YAAY,EAAW;;AAGhC,SAAO;;CAIT,MAAc,aAAa,GAA+B;AAgBxD,EAfI,EAAK,aAAa,MACpB,EAAK,WAAW,IAChB,KAAK,eAAe,GAAG,EAAK,MAAM,YAAY,KAE9C,EAAK,WAAW,IAEd,EAAK,aAAa,KAAA,MACjB,EAAK,aAAa,KAAA,KAAa,EAAK,SAAS,WAAW,OAEzD,KAAK,eAAe,WAAW,EAAK,QAAQ,EAC5C,MAAM,EAAa,EAAK,GAE1B,KAAK,eAAe,GAAG,EAAK,MAAM,WAAW,EAC7C,KAAK,OAAO,WAAW,EAAK,GAE9B,KAAK,QAAQ;;CAIf,cAAsB,GAAc,GAAuB;EAEzD,IAAM,IADY,EAAK,aAAa,CACd,QAAQ,EAAM;AACpC,MAAI,IAAM,EACR,QAAO,EAAW,EAAK;EAGzB,IAAM,IAAS,EAAK,MAAM,GAAG,EAAI,EAC3B,IAAQ,EAAK,MAAM,GAAK,IAAM,EAAM,OAAO,EAC3C,IAAQ,EAAK,MAAM,IAAM,EAAM,OAAO;AAE5C,SAAO,GAAG,EAAW,EAAO,CAAC,yCAAyC,EAAW,EAAM,CAAC,SAAS,EAAW,EAAM"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as e, o as t, p as n, s as r, u as i } from "./src-
|
|
1
|
+
import { a as e, o as t, p as n, s as r, u as i } from "./src-CWnvxuyh.js";
|
|
2
2
|
//#region node_modules/d3-interpolate/src/numberArray.js
|
|
3
3
|
function a(e, t) {
|
|
4
4
|
t ||= [];
|
|
@@ -49,4 +49,4 @@ function u(u, d) {
|
|
|
49
49
|
//#endregion
|
|
50
50
|
export { u as t };
|
|
51
51
|
|
|
52
|
-
//# sourceMappingURL=value-
|
|
52
|
+
//# sourceMappingURL=value-CnwEagIg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-
|
|
1
|
+
{"version":3,"file":"value-CnwEagIg.js","names":["value","value","constant","number","rgb","string","date","numberArray","object"],"sources":["../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/value.js"],"sourcesContent":["export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n"],"x_google_ignoreList":[0,1,2,3,4],"mappings":";;AAAA,SAAA,EAAwB,GAAG,GAAG;AAC5B,CAAQ,MAAI,EAAE;CACd,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,GACvC,IAAI,EAAE,OAAO,EACb;AACJ,QAAO,SAAS,GAAG;AACjB,OAAK,IAAI,GAAG,IAAI,GAAG,EAAE,EAAG,GAAE,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,KAAK;AACvD,SAAO;;;AAIX,SAAgB,EAAc,GAAG;AAC/B,QAAO,YAAY,OAAO,EAAE,IAAI,EAAE,aAAa;;;;ACLjD,SAAgB,EAAa,GAAG,GAAG;CACjC,IAAI,IAAK,IAAI,EAAE,SAAS,GACpB,IAAK,IAAI,KAAK,IAAI,GAAI,EAAE,OAAO,GAAG,GAClC,IAAQ,MAAM,EAAG,EACjB,IAAQ,MAAM,EAAG,EACjB;AAEJ,MAAK,IAAI,GAAG,IAAI,GAAI,EAAE,EAAG,GAAE,KAAKA,EAAM,EAAE,IAAI,EAAE,GAAG;AACjD,QAAO,IAAI,GAAI,EAAE,EAAG,GAAE,KAAK,EAAE;AAE7B,QAAO,SAAS,GAAG;AACjB,OAAK,IAAI,GAAG,IAAI,GAAI,EAAE,EAAG,GAAE,KAAK,EAAE,GAAG,EAAE;AACvC,SAAO;;;;;ACnBX,SAAA,EAAwB,GAAG,GAAG;CAC5B,IAAI,oBAAI,IAAI,MAAI;AAChB,QAAO,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG;AACjC,SAAO,EAAE,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,EAAE;;;;;ACD3C,SAAA,EAAwB,GAAG,GAAG;CAC5B,IAAI,IAAI,EAAE,EACN,IAAI,EAAE,EACN;AAKJ,MAAK,MAHa,OAAO,KAAM,aAA3B,OAAqC,IAAI,EAAE,IAC7B,OAAO,KAAM,aAA3B,OAAqC,IAAI,EAAE,GAErC,EACR,CAAI,KAAK,IACP,EAAE,KAAKC,EAAM,EAAE,IAAI,EAAE,GAAG,GAExB,EAAE,KAAK,EAAE;AAIb,QAAO,SAAS,GAAG;AACjB,OAAK,KAAK,EAAG,GAAE,KAAK,EAAE,GAAG,EAAE;AAC3B,SAAO;;;;;ACVX,SAAA,EAAwB,GAAG,GAAG;CAC5B,IAAI,IAAI,OAAO,GAAG;AAClB,QAAO,KAAK,QAAQ,MAAM,YAAYC,EAAS,EAAE,IAC1C,MAAM,WAAWC,IAClB,MAAM,YAAa,IAAI,EAAM,EAAE,KAAK,IAAI,GAAGC,KAAOC,IAClD,aAAa,IAAQD,IACrB,aAAa,OAAOE,IACpB,EAAc,EAAE,GAAGC,IACnB,MAAM,QAAQ,EAAE,GAAG,IACnB,OAAO,EAAE,WAAY,cAAc,OAAO,EAAE,YAAa,cAAc,MAAM,EAAE,GAAGC,IAClFL,GAAQ,GAAG,EAAE"}
|