@ashlr/hub 3.11.5 → 3.12.0
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/CHANGELOG.md +70 -0
- package/dist/authority-surface.json +3 -3
- package/dist/build-identity.json +2 -2
- package/dist/core/authority/trust-roots.js +7 -1
- package/dist/core/authority/trust-roots.js.map +1 -1
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +8 -2
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +7 -1
- package/dist/core/web/public/next/assets/{ActionMenu-DffwPklw.js → ActionMenu-B4-39f2S.js} +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-DffwPklw.js.map → ActionMenu-B4-39f2S.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Advanced-CxzE6ekM.js → Advanced-B-LqYXvd.js} +2 -2
- package/dist/core/web/public/next/assets/{Advanced-CxzE6ekM.js.map → Advanced-B-LqYXvd.js.map} +1 -1
- package/dist/core/web/public/next/assets/{App-DFlp-vdv.js → App-E2zCDRxm.js} +2 -2
- package/dist/core/web/public/next/assets/{App-DFlp-vdv.js.map → App-E2zCDRxm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{AppsSection-Ct2O605-.js → AppsSection-8wXPPhZb.js} +2 -2
- package/dist/core/web/public/next/assets/{AppsSection-Ct2O605-.js.map → AppsSection-8wXPPhZb.js.map} +1 -1
- package/dist/core/web/public/next/assets/{AreaTrend-o-GLl2Is.js → AreaTrend-BFimExYn.js} +2 -2
- package/dist/core/web/public/next/assets/{AreaTrend-o-GLl2Is.js.map → AreaTrend-BFimExYn.js.map} +1 -1
- package/dist/core/web/public/next/assets/{AutonomyOffState-CXhXpsim.js → AutonomyOffState-B5eEkmiz.js} +2 -2
- package/dist/core/web/public/next/assets/{AutonomyOffState-CXhXpsim.js.map → AutonomyOffState-B5eEkmiz.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-B46igJKR.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-BTg7yVa1.js.map → AutonomySection-B46igJKR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BranchBar-BjPFtGsj.js → BranchBar-BRkrEQGs.js} +2 -2
- package/dist/core/web/public/next/assets/{BranchBar-BjPFtGsj.js.map → BranchBar-BRkrEQGs.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BudgetControl-ng6swoZp.js → BudgetControl-T_RjPrw9.js} +2 -2
- package/dist/core/web/public/next/assets/{BudgetControl-ng6swoZp.js.map → BudgetControl-T_RjPrw9.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Button-OjVJSrFq.js → Button-BhO-WKPp.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-OjVJSrFq.js.map → Button-BhO-WKPp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CapacityStrip-Bx4c3dxD.js → CapacityStrip-CkFz5vq2.js} +2 -2
- package/dist/core/web/public/next/assets/{CapacityStrip-Bx4c3dxD.js.map → CapacityStrip-CkFz5vq2.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ChartFrame-B_w2Siqg.js → ChartFrame-SygZ7B3x.js} +2 -2
- package/dist/core/web/public/next/assets/{ChartFrame-B_w2Siqg.js.map → ChartFrame-SygZ7B3x.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ChatSection-Bisj9R6E.js → ChatSection-D6WybBpB.js} +3 -3
- package/dist/core/web/public/next/assets/{ChatSection-Bisj9R6E.js.map → ChatSection-D6WybBpB.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CloudBudgetForm-5Gf4iAok.js → CloudBudgetForm-Bd91iStN.js} +2 -2
- package/dist/core/web/public/next/assets/{CloudBudgetForm-5Gf4iAok.js.map → CloudBudgetForm-Bd91iStN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CommandPalette-iTpk6I8r.js → CommandPalette-B6SgDJH-.js} +2 -2
- package/dist/core/web/public/next/assets/{CommandPalette-iTpk6I8r.js.map → CommandPalette-B6SgDJH-.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CommandSection-D8ZihzvE.js → CommandSection-DgMGoepd.js} +2 -2
- package/dist/core/web/public/next/assets/{CommandSection-D8ZihzvE.js.map → CommandSection-DgMGoepd.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ConfirmDialog-_S9iE-cJ.js → ConfirmDialog-Bv4hdK2T.js} +2 -2
- package/dist/core/web/public/next/assets/{ConfirmDialog-_S9iE-cJ.js.map → ConfirmDialog-Bv4hdK2T.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DeleteChatDialog-KUYUygiA.js → DeleteChatDialog-CH1Ix8Eh.js} +2 -2
- package/dist/core/web/public/next/assets/{DeleteChatDialog-KUYUygiA.js.map → DeleteChatDialog-CH1Ix8Eh.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Dialog-BuIaG6HF.js → Dialog-BSsIFNqD.js} +2 -2
- package/dist/core/web/public/next/assets/{Dialog-BuIaG6HF.js.map → Dialog-BSsIFNqD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffPane-De4IQt82.js → DiffPane-BpNuJmth.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffPane-De4IQt82.js.map → DiffPane-BpNuJmth.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffViewer-B75t6Ile.js → DiffViewer-CJarUvs0.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-B75t6Ile.js.map → DiffViewer-CJarUvs0.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DockHost-BPqyhtCP.js → DockHost-DW9q0NdR.js} +2 -2
- package/dist/core/web/public/next/assets/{DockHost-BPqyhtCP.js.map → DockHost-DW9q0NdR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{EmptyState-DXkT4vhW.js → EmptyState-DPrd2aak.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-DXkT4vhW.js.map → EmptyState-DPrd2aak.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-CfqFe_aP.js → Epistemic-D7MxSmED.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-CfqFe_aP.js.map → Epistemic-D7MxSmED.js.map} +1 -1
- package/dist/core/web/public/next/assets/{FleetSection-B7f-XBiX.js → FleetSection-BdZN6rGS.js} +3 -3
- package/dist/core/web/public/next/assets/{FleetSection-B7f-XBiX.js.map → FleetSection-BdZN6rGS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Funnel-pXYySwXQ.js → Funnel-BeNQZWv2.js} +2 -2
- package/dist/core/web/public/next/assets/{Funnel-pXYySwXQ.js.map → Funnel-BeNQZWv2.js.map} +1 -1
- package/dist/core/web/public/next/assets/{GearTray-gj6lT7ba.js → GearTray-CIPtzeIx.js} +2 -2
- package/dist/core/web/public/next/assets/{GearTray-gj6lT7ba.js.map → GearTray-CIPtzeIx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{GrowthSection-D8e9m9Wy.js → GrowthSection-iiQg6wvK.js} +2 -2
- package/dist/core/web/public/next/assets/{GrowthSection-D8e9m9Wy.js.map → GrowthSection-iiQg6wvK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{HandoffDialog-VfKxKhxF.js → HandoffDialog-DrQ6ofuy.js} +2 -2
- package/dist/core/web/public/next/assets/{HandoffDialog-VfKxKhxF.js.map → HandoffDialog-DrQ6ofuy.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Input-u1YR_Ogl.js → Input-C0MQxEM6.js} +2 -2
- package/dist/core/web/public/next/assets/{Input-u1YR_Ogl.js.map → Input-C0MQxEM6.js.map} +1 -1
- package/dist/core/web/public/next/assets/{LeaderCard-BDELBrnx.js → LeaderCard-BRr3_yE-.js} +2 -2
- package/dist/core/web/public/next/assets/{LeaderCard-BDELBrnx.js.map → LeaderCard-BRr3_yE-.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MatrixHeatmap-NKLF2srR.js → MatrixHeatmap-DZvZeWXL.js} +2 -2
- package/dist/core/web/public/next/assets/{MatrixHeatmap-NKLF2srR.js.map → MatrixHeatmap-DZvZeWXL.js.map} +1 -1
- package/dist/core/web/public/next/assets/McpSection-BRuCcTjT.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-D1tDvlRa.js.map → McpSection-BRuCcTjT.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdown-DlfLEJxu.js → MessageMarkdown-bRvD5nSc.js} +3 -3
- package/dist/core/web/public/next/assets/{MessageMarkdown-DlfLEJxu.js.map → MessageMarkdown-bRvD5nSc.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-BYZzI115.js → MessageMarkdownRenderer-FjjkPKA2.js} +2 -2
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-BYZzI115.js.map → MessageMarkdownRenderer-FjjkPKA2.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-BSVhU43Q.js → Meter-CFNLpwA-.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-BSVhU43Q.js.map → Meter-CFNLpwA-.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MindSection-lqV2e_Sq.js → MindSection-BTIiQS8P.js} +2 -2
- package/dist/core/web/public/next/assets/{MindSection-lqV2e_Sq.js.map → MindSection-BTIiQS8P.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MutationTokenDialog-CLGP72g6.js → MutationTokenDialog-T7gv3a9r.js} +2 -2
- package/dist/core/web/public/next/assets/{MutationTokenDialog-CLGP72g6.js.map → MutationTokenDialog-T7gv3a9r.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-D992XTOn.js → NeedsYouDrawer-lYN4G_aM.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-D992XTOn.js.map → NeedsYouDrawer-lYN4G_aM.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NeedsYouList-eBOlJr0b.js → NeedsYouList-BgH8ezqf.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouList-eBOlJr0b.js.map → NeedsYouList-BgH8ezqf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NewChatDialog-DoYTH26M.js → NewChatDialog-Db5Xjrk8.js} +2 -2
- package/dist/core/web/public/next/assets/{NewChatDialog-DoYTH26M.js.map → NewChatDialog-Db5Xjrk8.js.map} +1 -1
- package/dist/core/web/public/next/assets/{OnboardingFlow-D3yfITK1.js → OnboardingFlow-LoY-zuSe.js} +2 -2
- package/dist/core/web/public/next/assets/{OnboardingFlow-D3yfITK1.js.map → OnboardingFlow-LoY-zuSe.js.map} +1 -1
- package/dist/core/web/public/next/assets/OnboardingGate-C4VXn7BJ.js +3 -0
- package/dist/core/web/public/next/assets/{OnboardingGate-DrDEVBqw.js.map → OnboardingGate-C4VXn7BJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{PreviewPane-ULN673zm.js → PreviewPane-BPBbcROb.js} +2 -2
- package/dist/core/web/public/next/assets/{PreviewPane-ULN673zm.js.map → PreviewPane-BPBbcROb.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ProviderLogo-8WaUjTlN.js → ProviderLogo-CT2cSfkg.js} +2 -2
- package/dist/core/web/public/next/assets/{ProviderLogo-8WaUjTlN.js.map → ProviderLogo-CT2cSfkg.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RailStatus-Ckw9nvYU.js → RailStatus-Vgl0GYtd.js} +2 -2
- package/dist/core/web/public/next/assets/{RailStatus-Ckw9nvYU.js.map → RailStatus-Vgl0GYtd.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RefreshIndicator-DGubF4vR.js → RefreshIndicator-CSyqpY_q.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-DGubF4vR.js.map → RefreshIndicator-CSyqpY_q.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BahEaY4d.js → ResourcePoolConsoleApp-BX2nkdmZ.js} +2 -2
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BahEaY4d.js.map → ResourcePoolConsoleApp-BX2nkdmZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcesChrome-C2ZrA7la.js → ResourcesChrome-B2U2lO1H.js} +3 -3
- package/dist/core/web/public/next/assets/{ResourcesChrome-C2ZrA7la.js.map → ResourcesChrome-B2U2lO1H.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcesDrawer-BC93fzwQ.js → ResourcesDrawer-DlUKOjl9.js} +2 -2
- package/dist/core/web/public/next/assets/{ResourcesDrawer-BC93fzwQ.js.map → ResourcesDrawer-DlUKOjl9.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-BvhHNpE_.js → RouteErrorBoundary-BaC7YVzR.js} +2 -2
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-BvhHNpE_.js.map → RouteErrorBoundary-BaC7YVzR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RunInCloudAction-Dywfnw0C.js → RunInCloudAction-D5PDHJPE.js} +2 -2
- package/dist/core/web/public/next/assets/{RunInCloudAction-Dywfnw0C.js.map → RunInCloudAction-D5PDHJPE.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SeatSelector-CH7hTgwy.js → SeatSelector-Cg75LInq.js} +2 -2
- package/dist/core/web/public/next/assets/{SeatSelector-CH7hTgwy.js.map → SeatSelector-Cg75LInq.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Segmented-Wynbg0F5.js → Segmented-CametjLt.js} +2 -2
- package/dist/core/web/public/next/assets/{Segmented-Wynbg0F5.js.map → Segmented-CametjLt.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Select-DMyLCkId.js → Select-De52fghU.js} +2 -2
- package/dist/core/web/public/next/assets/{Select-DMyLCkId.js.map → Select-De52fghU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionGate-8RtQFWeZ.js → SessionGate-CzlcNq3O.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionGate-8RtQFWeZ.js.map → SessionGate-CzlcNq3O.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionInsightChip-zBJbKv2L.js → SessionInsightChip-Bk_Owa7u.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionInsightChip-zBJbKv2L.js.map → SessionInsightChip-Bk_Owa7u.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionSearch-DfJIcxxM.js → SessionSearch-C6C8DHN8.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionSearch-DfJIcxxM.js.map → SessionSearch-C6C8DHN8.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SettingsSection-Da9RYyH5.js → SettingsSection-mI9wQYZg.js} +2 -2
- package/dist/core/web/public/next/assets/{SettingsSection-Da9RYyH5.js.map → SettingsSection-mI9wQYZg.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Sheet-DhXyIDmq.js → Sheet-CJhK9Dqv.js} +2 -2
- package/dist/core/web/public/next/assets/{Sheet-DhXyIDmq.js.map → Sheet-CJhK9Dqv.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-Bi5f-wUw.js → ShortcutsOverlay-DDW-i9Fc.js} +2 -2
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-Bi5f-wUw.js.map → ShortcutsOverlay-DDW-i9Fc.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Sidebar-BuO3sViG.js → Sidebar-DT7ykaqS.js} +3 -3
- package/dist/core/web/public/next/assets/{Sidebar-BuO3sViG.js.map → Sidebar-DT7ykaqS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Slider-Bd9YFWEV.js → Slider-Bwd9HfXl.js} +2 -2
- package/dist/core/web/public/next/assets/{Slider-Bd9YFWEV.js.map → Slider-Bwd9HfXl.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StatTile-DScTd3c-.js → StatTile-DPZ5yyaU.js} +2 -2
- package/dist/core/web/public/next/assets/{StatTile-DScTd3c-.js.map → StatTile-DPZ5yyaU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StatusBadge-DQ1UtQAJ.js → StatusBadge-DHKRtttH.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-DQ1UtQAJ.js.map → StatusBadge-DHKRtttH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StepBand-BB3IJxhr.js → StepBand-DQykLkk_.js} +2 -2
- package/dist/core/web/public/next/assets/{StepBand-BB3IJxhr.js.map → StepBand-DQykLkk_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Surface-DWMtQe3Q.js → Surface-D--LXgQm.js} +2 -2
- package/dist/core/web/public/next/assets/{Surface-DWMtQe3Q.js.map → Surface-D--LXgQm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Swimlane-DcENqtdp.js → Swimlane-BzH6OCee.js} +2 -2
- package/dist/core/web/public/next/assets/{Swimlane-DcENqtdp.js.map → Swimlane-BzH6OCee.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Switch-CenChEYf.js → Switch-PMixU6b0.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-CenChEYf.js.map → Switch-PMixU6b0.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-D4k5E3u0.js → Tag-fordBsrJ.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-D4k5E3u0.js.map → Tag-fordBsrJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{TerminalPane-DCQTukcE.js → TerminalPane-BSnGdUuF.js} +2 -2
- package/dist/core/web/public/next/assets/{TerminalPane-DCQTukcE.js.map → TerminalPane-BSnGdUuF.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-DsuWT0pi.js → UniverseConsoleApp-DtXFhAhw.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-DsuWT0pi.js.map → UniverseConsoleApp-DtXFhAhw.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-DyI5ApsA.js → UniverseView-sWm3pnTW.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseView-DyI5ApsA.js.map → UniverseView-sWm3pnTW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UsageSection-Imr28nwK.js → UsageSection-CiD1DbuF.js} +2 -2
- package/dist/core/web/public/next/assets/{UsageSection-Imr28nwK.js.map → UsageSection-CiD1DbuF.js.map} +1 -1
- package/dist/core/web/public/next/assets/{VerseConsoleApp-DeuBEvAO.js → VerseConsoleApp-BCY5uSok.js} +3 -3
- package/dist/core/web/public/next/assets/{VerseConsoleApp-DeuBEvAO.js.map → VerseConsoleApp-BCY5uSok.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Workspace-CpxBO98E.js → Workspace-BQSZFSeO.js} +5 -5
- package/dist/core/web/public/next/assets/{Workspace-CpxBO98E.js.map → Workspace-BQSZFSeO.js.map} +1 -1
- package/dist/core/web/public/next/assets/{actions-DE8NoWV_.js → actions-Ci6I4C0l.js} +2 -2
- package/dist/core/web/public/next/assets/{actions-DE8NoWV_.js.map → actions-Ci6I4C0l.js.map} +1 -1
- package/dist/core/web/public/next/assets/{apps-model-CFGCUu9p.js → apps-model-DlwnfqwJ.js} +2 -2
- package/dist/core/web/public/next/assets/{apps-model-CFGCUu9p.js.map → apps-model-DlwnfqwJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{authority-model-CmnfJzmM.js → authority-model-BFuPezSo.js} +2 -2
- package/dist/core/web/public/next/assets/{authority-model-CmnfJzmM.js.map → authority-model-BFuPezSo.js.map} +1 -1
- package/dist/core/web/public/next/assets/{budget-queries-DjrPRFwl.js → budget-queries-DsAjH8ac.js} +2 -2
- package/dist/core/web/public/next/assets/{budget-queries-DjrPRFwl.js.map → budget-queries-DsAjH8ac.js.map} +1 -1
- package/dist/core/web/public/next/assets/{capacity-strip-model-C7cdQnuK.js → capacity-strip-model-Dn1cNOhz.js} +2 -2
- package/dist/core/web/public/next/assets/{capacity-strip-model-C7cdQnuK.js.map → capacity-strip-model-Dn1cNOhz.js.map} +1 -1
- package/dist/core/web/public/next/assets/{charts-DUD_jprE.js → charts-C_xJbJiw.js} +2 -2
- package/dist/core/web/public/next/assets/{charts-DUD_jprE.js.map → charts-C_xJbJiw.js.map} +1 -1
- package/dist/core/web/public/next/assets/{cloud-model-DoxBMDvx.js → cloud-model-CX407gPY.js} +2 -2
- package/dist/core/web/public/next/assets/{cloud-model-DoxBMDvx.js.map → cloud-model-CX407gPY.js.map} +1 -1
- package/dist/core/web/public/next/assets/{cloud-queries-CTGvO-k-.js → cloud-queries-QAhpExlz.js} +2 -2
- package/dist/core/web/public/next/assets/{cloud-queries-CTGvO-k-.js.map → cloud-queries-QAhpExlz.js.map} +1 -1
- package/dist/core/web/public/next/assets/{command-catalog-CmrHNFzh.js → command-catalog-CF0cQQac.js} +2 -2
- package/dist/core/web/public/next/assets/{command-catalog-CmrHNFzh.js.map → command-catalog-CF0cQQac.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-model-9xywbXxX.js → context-model-Co4wh3SM.js} +2 -2
- package/dist/core/web/public/next/assets/{context-model-9xywbXxX.js.map → context-model-Co4wh3SM.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-model-2Owp2jYF.js → context-model-DV1zCfAm.js} +2 -2
- package/dist/core/web/public/next/assets/{context-model-2Owp2jYF.js.map → context-model-DV1zCfAm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-queries-wvcRnV-I.js → context-queries-CktFQqSS.js} +2 -2
- package/dist/core/web/public/next/assets/{context-queries-wvcRnV-I.js.map → context-queries-CktFQqSS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{control-queries-DB6Kh7UN.js → control-queries-DAvlh_YM.js} +2 -2
- package/dist/core/web/public/next/assets/{control-queries-DB6Kh7UN.js.map → control-queries-DAvlh_YM.js.map} +1 -1
- package/dist/core/web/public/next/assets/{copy-setup-CJQhFl-4.js → copy-setup-CqRSfELB.js} +2 -2
- package/dist/core/web/public/next/assets/{copy-setup-CJQhFl-4.js.map → copy-setup-CqRSfELB.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-icons-BBUGl4tE.js → dock-icons-BFuBbqJl.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-icons-BBUGl4tE.js.map → dock-icons-BFuBbqJl.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-model-BRfRWkZl.js → fleet-model-Dfd5JyLR.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-model-BRfRWkZl.js.map → fleet-model-Dfd5JyLR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-queries-tU6UEXN2.js → fleet-queries-RtMTd5rR.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-queries-tU6UEXN2.js.map → fleet-queries-RtMTd5rR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{focus-trap-BGOceFvj.js → focus-trap-BdrbWfC4.js} +2 -2
- package/dist/core/web/public/next/assets/{focus-trap-BGOceFvj.js.map → focus-trap-BdrbWfC4.js.map} +1 -1
- package/dist/core/web/public/next/assets/{format-DEAaVF6X.js → format-Dk4Fmxax.js} +2 -2
- package/dist/core/web/public/next/assets/{format-DEAaVF6X.js.map → format-Dk4Fmxax.js.map} +1 -1
- package/dist/core/web/public/next/assets/{git-model-53iRLInY.js → git-model-_BnI_Ogh.js} +2 -2
- package/dist/core/web/public/next/assets/{git-model-53iRLInY.js.map → git-model-_BnI_Ogh.js.map} +1 -1
- package/dist/core/web/public/next/assets/{global-CXHHMz9o.js → global-CNNGMril.js} +2 -2
- package/dist/core/web/public/next/assets/{global-CXHHMz9o.js.map → global-CNNGMril.js.map} +1 -1
- package/dist/core/web/public/next/assets/{guarded-runners-B8zFVBVZ.js → guarded-runners-DPh2d32e.js} +2 -2
- package/dist/core/web/public/next/assets/{guarded-runners-B8zFVBVZ.js.map → guarded-runners-DPh2d32e.js.map} +1 -1
- package/dist/core/web/public/next/assets/{icons-D4s-jlxX.js → icons-0haWy6nh.js} +2 -2
- package/dist/core/web/public/next/assets/{icons-D4s-jlxX.js.map → icons-0haWy6nh.js.map} +1 -1
- package/dist/core/web/public/next/assets/{index-BG177cPN.js → index-QesfXBsb.js} +3 -3
- package/dist/core/web/public/next/assets/{index-BG177cPN.js.map → index-QesfXBsb.js.map} +1 -1
- package/dist/core/web/public/next/assets/{live-model-CEf01wrW.js → live-model-De-q0ZFK.js} +2 -2
- package/dist/core/web/public/next/assets/{live-model-CEf01wrW.js.map → live-model-De-q0ZFK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{mind.module-D_xk6HIQ.js → mind.module-BrK2nFOL.js} +2 -2
- package/dist/core/web/public/next/assets/{mind.module-D_xk6HIQ.js.map → mind.module-BrK2nFOL.js.map} +1 -1
- package/dist/core/web/public/next/assets/{mutations-CbTSofVH.js → mutations-DTCtKCn_.js} +2 -2
- package/dist/core/web/public/next/assets/{mutations-CbTSofVH.js.map → mutations-DTCtKCn_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{nav-CmZcbPFJ.js → nav-KmGX0CVz.js} +2 -2
- package/dist/core/web/public/next/assets/{nav-CmZcbPFJ.js.map → nav-KmGX0CVz.js.map} +1 -1
- package/dist/core/web/public/next/assets/{overnight-queries-CR0b_j-V.js → overnight-queries-mlO0xzsr.js} +2 -2
- package/dist/core/web/public/next/assets/{overnight-queries-CR0b_j-V.js.map → overnight-queries-mlO0xzsr.js.map} +1 -1
- package/dist/core/web/public/next/assets/primitives-D0Fb3TtS.js +1 -0
- package/dist/core/web/public/next/assets/{queries-rvRsAGW2.js → queries-CyBE8nsW.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-rvRsAGW2.js.map → queries-CyBE8nsW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reasoning-pref-DMPQkujg.js → reasoning-pref-CaoA4_Vl.js} +2 -2
- package/dist/core/web/public/next/assets/{reasoning-pref-DMPQkujg.js.map → reasoning-pref-CaoA4_Vl.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reveal-anchor-BKk2wZZZ.js → reveal-anchor-BP1VqnPU.js} +2 -2
- package/dist/core/web/public/next/assets/{reveal-anchor-BKk2wZZZ.js.map → reveal-anchor-BP1VqnPU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{seat-subscription-CLn2ReSZ.js → seat-subscription-C5Tvr0WQ.js} +2 -2
- package/dist/core/web/public/next/assets/{seat-subscription-CLn2ReSZ.js.map → seat-subscription-C5Tvr0WQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-CjQLvdag.js → sidebar-model-B5Qk95k_.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-CjQLvdag.js.map → sidebar-model-B5Qk95k_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{slots-DRxNosZg.js → slots-DHKQDoE6.js} +3 -3
- package/dist/core/web/public/next/assets/{slots-DRxNosZg.js.map → slots-DHKQDoE6.js.map} +1 -1
- package/dist/core/web/public/next/assets/{surface-data-DshUC_TU.js → surface-data-CchClvHo.js} +2 -2
- package/dist/core/web/public/next/assets/{surface-data-DshUC_TU.js.map → surface-data-CchClvHo.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-prefetch-BWr0LBQn.js +2 -0
- package/dist/core/web/public/next/assets/{surface-prefetch-DO8r4ttQ.js.map → surface-prefetch-BWr0LBQn.js.map} +1 -1
- package/dist/core/web/public/next/assets/{tasks-model-BKPFZAmZ.js → tasks-model-D6WFVULI.js} +2 -2
- package/dist/core/web/public/next/assets/{tasks-model-BKPFZAmZ.js.map → tasks-model-D6WFVULI.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-DoeQkP3y.js → terminal-icons-BvCvuXk2.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-DoeQkP3y.js.map → terminal-icons-BvCvuXk2.js.map} +1 -1
- package/dist/core/web/public/next/assets/{usage-queries-MnUeYzwp.js → usage-queries-D1SU1t7r.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-MnUeYzwp.js.map → usage-queries-D1SU1t7r.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-guarded-action-P12MfNwU.js → use-guarded-action-BZmBv7CJ.js} +2 -2
- package/dist/core/web/public/next/assets/{use-guarded-action-P12MfNwU.js.map → use-guarded-action-BZmBv7CJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-ticker-DIvAZ4Ey.js → use-ticker-CkJ4-0wU.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-DIvAZ4Ey.js.map → use-ticker-CkJ4-0wU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-token-gate-DfEja7Wr.js → use-token-gate-CYcfk_GS.js} +2 -2
- package/dist/core/web/public/next/assets/{use-token-gate-DfEja7Wr.js.map → use-token-gate-CYcfk_GS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useOnboarding-CkOHadqC.js → useOnboarding-CujRS6PK.js} +2 -2
- package/dist/core/web/public/next/assets/{useOnboarding-CkOHadqC.js.map → useOnboarding-CujRS6PK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useSeatsRefresh-BDlbDlIU.js → useSeatsRefresh-BEaQdkZs.js} +2 -2
- package/dist/core/web/public/next/assets/{useSeatsRefresh-BDlbDlIU.js.map → useSeatsRefresh-BEaQdkZs.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useVerseTranscript-BGtA55k2.js → useVerseTranscript-BQ0J6Xhx.js} +2 -2
- package/dist/core/web/public/next/assets/{useVerseTranscript-BGtA55k2.js.map → useVerseTranscript-BQ0J6Xhx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-icons-wOet9JZy.js → verse-icons-DndgEgKS.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-icons-wOet9JZy.js.map → verse-icons-DndgEgKS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-model-CSzzdyu2.js → verse-model-MMySehjj.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-model-CSzzdyu2.js.map → verse-model-MMySehjj.js.map} +1 -1
- package/dist/core/web/public/next/assets/{warmup-CecO_Nk0.js → warmup-CNEH_-be.js} +3 -3
- package/dist/core/web/public/next/assets/{warmup-CecO_Nk0.js.map → warmup-CNEH_-be.js.map} +1 -1
- package/dist/core/web/public/next/assets/{why-seat-model-D68ZA7G8.js → why-seat-model-jlDTwYSc.js} +2 -2
- package/dist/core/web/public/next/assets/{why-seat-model-D68ZA7G8.js.map → why-seat-model-jlDTwYSc.js.map} +1 -1
- package/dist/core/web/public/next/assets/{workspace-model-BdIVybKr.js → workspace-model-Dukb2wwv.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-BdIVybKr.js.map → workspace-model-Dukb2wwv.js.map} +1 -1
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-BTg7yVa1.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-D1tDvlRa.js +0 -2
- package/dist/core/web/public/next/assets/OnboardingGate-DrDEVBqw.js +0 -3
- package/dist/core/web/public/next/assets/primitives-DNI-uJBd.js +0 -1
- package/dist/core/web/public/next/assets/surface-prefetch-DO8r4ttQ.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MatrixHeatmap-NKLF2srR.js","names":[],"sources":["../../../../../../src/web-ui/components/charts/Gauge.module.css","../../../../../../src/web-ui/components/charts/Gauge.tsx","../../../../../../src/web-ui/components/charts/MatrixHeatmap.module.css","../../../../../../src/web-ui/components/charts/MatrixHeatmap.tsx"],"sourcesContent":[".gauge {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-1);\n}\n\n.readout {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n margin-top: calc(-1 * var(--space-6));\n text-align: center;\n}\n\n/* Proportional figures for a standalone number (tabular only in columns). */\n.value {\n font-size: var(--text-2xl-size);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.unknownValue {\n font-size: var(--text-lg-size, var(--text-sm-size));\n font-weight: var(--font-weight-medium);\n color: var(--status-unknown-fg);\n}\n\n.state {\n font-size: var(--text-xs-size);\n color: var(--text-secondary);\n}\n\n.gauge[data-severity='warn'] .state {\n color: var(--status-warning-fg);\n}\n\n.gauge[data-severity='danger'] .state {\n color: var(--status-danger-fg);\n}\n\n.caption {\n font-size: var(--text-xs-size);\n color: var(--text-tertiary);\n}\n\n/* V3.10: the measuring box — full card width, so the arc can size to it. */\n.fit {\n width: 100%;\n min-width: 0;\n display: flex;\n justify-content: center;\n}\n","/**\n * components/charts/Gauge.tsx — one fraction on a 180° arc: how much of a\n * window is used, how close a cap is. The fill carries SEVERITY (accent →\n * warning → danger at the thresholds) over a track that is a lighter step of\n * the same ramp; an optional marker shows a line that matters (e.g. the\n * reserve kept for interactive use). The number and a words-first state label\n * sit under the arc, so severity is never colour alone.\n *\n * Honesty: `null` is UNKNOWN — an empty track and \"unknown\", never 0%. Values\n * past 100% are drawn full and printed as they are (\"112%\").\n *\n * Semantics: role=\"meter\" with aria-valuenow/min/max/valuetext.\n */\nimport { useId, useLayoutEffect, useRef, useState } from 'react';\nimport { CHART_SEQUENTIAL, CHART_TRACK, hatchPatternId, toneColor } from './colors.js';\nimport { HatchPattern } from './ChartParts.js';\nimport { ChartFrame, type ChartStatus } from './ChartFrame.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { gaugeArc, gaugeSeverity, polar, type GaugeSeverity } from './chart-math.js';\nimport { formatPercent } from './format.js';\nimport plot from './plot.module.css';\nimport styles from './Gauge.module.css';\n\nexport interface GaugeProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n /** Fraction used, 0..1 (may exceed 1). null = unknown. */\n value: number | null;\n /** Severity thresholds as fractions (defaults 0.7 / 0.9). */\n warnAt?: number;\n dangerAt?: number;\n /** A reference line on the arc, e.g. { value: 0.6, label: 'Autonomy cap' }. */\n marker?: { value: number; label: string };\n /** Words under the number, e.g. \"resets in 2h\". */\n caption?: string;\n /**\n * The LARGEST diameter in px (default 180). V3.10: the gauge fits its\n * container — two gauges side by side at 375 px each shrink (never below\n * MIN_GAUGE_SIZE) instead of widening the page.\n */\n size?: number;\n formatValue?: (fraction: number) => string;\n /**\n * Print the severity words (\"near the limit\"). Default true. Set false for\n * a fraction where higher is BETTER (a hit rate): the fill stays one\n * quantity hue and no limit language is used.\n */\n showState?: boolean;\n}\n\nconst SEVERITY_LABEL: Record<GaugeSeverity, string> = {\n ok: 'within limits',\n warn: 'near the limit',\n danger: 'at the limit',\n unknown: 'unknown',\n};\n\n/** Smallest diameter a gauge draws at; below it the readout would collide with the arc. */\nexport const MIN_GAUGE_SIZE = 112;\n\n/** The container's measured width (0 until laid out: jsdom, a hidden tab). */\nfunction useContainerWidth(ref: React.RefObject<HTMLElement | null>): number {\n const [width, setWidth] = useState(0);\n // Track the node: the gauge mounts after a loading frame (see useChartWidth).\n const [node, setNode] = useState<HTMLElement | null>(null);\n // Runs after every render on purpose (ref.current is not a dependency React\n // can see); the equality guard makes it settle in one pass, never a loop.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useLayoutEffect(() => {\n if (ref.current !== node) setNode(ref.current);\n });\n useLayoutEffect(() => {\n const el = node;\n if (!el) return undefined;\n const read = (): void => {\n const w = Math.floor(el.getBoundingClientRect().width);\n setWidth((prev) => (prev === w ? prev : w));\n };\n read();\n if (typeof ResizeObserver === 'undefined') return undefined;\n let frame = 0;\n const observer = new ResizeObserver(() => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(read);\n });\n observer.observe(el);\n return () => {\n cancelAnimationFrame(frame);\n observer.disconnect();\n };\n }, [node]);\n return width;\n}\n\n/** Diameter for a container: the largest that fits, clamped to [MIN_GAUGE_SIZE, max]. */\nexport function gaugeDiameter(containerWidth: number, max: number): number {\n if (!(containerWidth > 0)) return max;\n return Math.max(MIN_GAUGE_SIZE, Math.min(max, Math.floor(containerWidth)));\n}\n\nfunction severityColor(severity: GaugeSeverity): string {\n if (severity === 'danger') return toneColor('danger');\n if (severity === 'warn') return toneColor('warning');\n return CHART_SEQUENTIAL;\n}\n\ninterface Row {\n key: string;\n label: string;\n value: string;\n}\n\nexport function Gauge({\n title,\n description,\n caveat,\n status,\n value,\n warnAt = 0.7,\n dangerAt = 0.9,\n marker,\n caption,\n size: maxSize = 180,\n formatValue = (f) => formatPercent(f),\n showState = true,\n}: GaugeProps) {\n const captionId = useId();\n const hatchId = hatchPatternId(useId());\n const fitRef = useRef<HTMLDivElement>(null);\n const size = gaugeDiameter(useContainerWidth(fitRef), maxSize);\n const severity = showState ? gaugeSeverity(value, warnAt, dangerAt) : value === null ? 'unknown' : 'ok';\n const stroke = Math.max(10, Math.round(size / 12));\n const r = size / 2 - stroke / 2 - 2;\n const cx = size / 2;\n const cy = size / 2;\n const h = size / 2 + stroke / 2 + 4;\n const valueText = value === null ? 'unknown' : formatValue(value);\n const spoken = value === null ? `${title}: unknown` : showState ? `${title}: ${valueText}, ${SEVERITY_LABEL[severity]}` : `${title}: ${valueText}`;\n\n const rows: Row[] = [\n { key: 'value', label: 'Used', value: valueText },\n ...(showState\n ? [\n { key: 'state', label: 'State', value: SEVERITY_LABEL[severity] },\n { key: 'warn', label: 'Warning at', value: formatValue(warnAt) },\n { key: 'danger', label: 'Limit at', value: formatValue(dangerAt) },\n ]\n : []),\n ...(marker ? [{ key: 'marker', label: marker.label, value: formatValue(marker.value) }] : []),\n ];\n const columns: TableColumn<Row>[] = [\n { key: 'label', label: 'Measure', render: (row) => row.label },\n { key: 'value', label: 'Value', numeric: true, render: (row) => row.value },\n ];\n\n const markerOuter = marker ? polar(cx, cy, r + stroke / 2 + 3, Math.PI * (1 - Math.min(1, Math.max(0, marker.value)))) : null;\n const markerInner = marker ? polar(cx, cy, r - stroke / 2 - 3, Math.PI * (1 - Math.min(1, Math.max(0, marker.value)))) : null;\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={status ?? { kind: 'ready' }}\n table={<TableView caption={title} columns={columns} rows={rows} rowKey={(row) => row.key} />}\n >\n <div ref={fitRef} className={styles.fit}>\n <div\n className={styles.gauge}\n role=\"meter\"\n aria-label={title}\n aria-valuemin={0}\n aria-valuemax={1}\n aria-valuenow={value === null ? undefined : Math.min(1, Math.max(0, value))}\n aria-valuetext={spoken}\n aria-describedby={caption ? captionId : undefined}\n data-severity={severity}\n >\n <svg className={plot.svg} width={size} height={h} viewBox={`0 0 ${size} ${h}`} aria-hidden=\"true\">\n <defs>\n <HatchPattern id={hatchId} />\n </defs>\n {/* Unknown: the track is hatched, not the pale ramp step a \"little\" value would get. */}\n <path\n data-role=\"track\"\n d={gaugeArc(cx, cy, r, 0, 1)}\n fill=\"none\"\n stroke={value === null ? `url(#${hatchId})` : CHART_TRACK}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n />\n {value !== null && value > 0 ? (\n <path\n data-role=\"fill\"\n d={gaugeArc(cx, cy, r, 0, Math.min(1, value))}\n fill=\"none\"\n stroke={severityColor(severity)}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n />\n ) : null}\n {markerOuter && markerInner ? (\n <line\n data-role=\"marker\"\n x1={markerInner.x}\n y1={markerInner.y}\n x2={markerOuter.x}\n y2={markerOuter.y}\n stroke=\"var(--text-primary)\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n />\n ) : null}\n </svg>\n <div className={styles.readout}>\n <span className={value === null ? styles.unknownValue : styles.value}>{valueText}</span>\n {showState && severity !== 'unknown' ? <span className={styles.state}>{SEVERITY_LABEL[severity]}</span> : null}\n {caption ? <span id={captionId} className={styles.caption}>{caption}</span> : null}\n {marker ? <span className={styles.caption}>{marker.label}: {formatValue(marker.value)}</span> : null}\n </div>\n </div>\n </div>\n </ChartFrame>\n );\n}\n","/* MatrixHeatmap — horizontal scroll when a wide matrix meets a narrow card,\n the focused-cell ring, and in-cell numbers. Tokens only. */\n.scroll {\n overflow-x: auto;\n overscroll-behavior-x: contain;\n}\n\n.focus {\n stroke: var(--border-focus);\n stroke-width: 2;\n}\n\n/* In-cell numbers: the fill is set per cell (colors.ts quantityInk, by the\n cell's luminance), so this class must NOT set one — a CSS fill would beat\n the attribute. Never a stroke / halo: paint-order stroke around dark text\n on a dark cell turned the glyphs into blobs. */\n.num {\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n font-weight: var(--font-weight-medium);\n font-variant-numeric: tabular-nums;\n stroke: none;\n pointer-events: none;\n}\n","/**\n * components/charts/MatrixHeatmap.tsx — a rows × columns grid of counts\n * (V3.10, SPEC-310C §5 Mind: insight KIND × ENGINE, faceted per repo;\n * r5/visual.md §2 \"MatrixHeatmap\").\n *\n * Encoding, one meaning per mark:\n * - a KNOWN value is a step of the fixed azure quantity ramp\n * (colors.ts quantityColor) — a TRUE ZERO is the faint heat-0 cell;\n * - an UNKNOWN value (null: nothing was measured for that cell, e.g. an\n * engine with no recorded reasoning) is the 45° unknown hatch with an\n * outline — never the palest step, which would claim \"a little\";\n * - row and column TOTALS sit in the margins as bars (right and top), so\n * \"which kind dominates\" reads without adding cells in your head.\n * A column may carry an engine: its header gets the 2px tick + monogram.\n *\n * Keyboard: the grid is one tab stop; arrows move a cell, Home/End jump\n * along the row; the focused cell is announced. The Table view has every\n * cell and both totals. At 375 px callers usually start on the table\n * (`defaultView=\"table\"`, SPEC-310C §5 \"Mind's matrix shows as a table\").\n */\nimport { useId, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { CHART_SEQUENTIAL_SOFT, hatchPatternId, heatColor, quantityColor, quantityInk, type ChartEngine } from './colors.js';\nimport { ChartFrame, type ChartStatus, type ChartView } from './ChartFrame.js';\nimport { ChartTooltip, EngineTick, HatchPattern, clampTooltipLeft } from './ChartParts.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { formatCompact } from './format.js';\nimport { useChartWidth } from './useChartWidth.js';\nimport { useTextScale } from './useTextScale.js';\nimport plot from './plot.module.css';\nimport styles from './MatrixHeatmap.module.css';\n\nexport interface MatrixAxisItem {\n id: string;\n label: string;\n /** Column-only: the engine this column stands for (tick + monogram in the header). */\n engine?: ChartEngine;\n}\n\nexport interface MatrixHeatmapProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n rows: MatrixAxisItem[];\n columns: MatrixAxisItem[];\n /** values[rowIndex][columnIndex]; null = not measured. */\n values: ReadonlyArray<ReadonlyArray<number | null>>;\n /** Unit word for spoken text and the table (\"insights\"). */\n unit?: string;\n formatValue?: (v: number) => string;\n /** Row / column totals as margin bars (default true). */\n showTotals?: boolean;\n defaultView?: ChartView;\n /** Extra header controls (e.g. the repo facet picker). */\n actions?: ReactNode;\n width?: number;\n ariaLabel?: string;\n}\n\ninterface Totals {\n rows: (number | null)[];\n columns: (number | null)[];\n max: number;\n grand: number | null;\n}\n\n/** Sum known values; a line with NO known value has an unknown (null) total, never 0. */\nexport function matrixTotals(values: ReadonlyArray<ReadonlyArray<number | null>>, rows: number, columns: number): Totals {\n const cell = (r: number, c: number): number | null => {\n const v = values[r]?.[c];\n return v === undefined || v === null || !Number.isFinite(v) ? null : v;\n };\n const sum = (xs: (number | null)[]): number | null => {\n const known = xs.filter((x): x is number => x !== null);\n return known.length ? known.reduce((a, b) => a + b, 0) : null;\n };\n const rowTotals = Array.from({ length: rows }, (_, r) => sum(Array.from({ length: columns }, (_, c) => cell(r, c))));\n const colTotals = Array.from({ length: columns }, (_, c) => sum(Array.from({ length: rows }, (_, r) => cell(r, c))));\n let max = 0;\n for (let r = 0; r < rows; r++) for (let c = 0; c < columns; c++) max = Math.max(max, cell(r, c) ?? 0);\n return { rows: rowTotals, columns: colTotals, max, grand: sum(rowTotals) };\n}\n\nconst HEADER_H = 26;\nconst MARGIN_BAR = 40;\nconst GAP = 2;\nconst MIN_CELL = 22;\nconst MAX_CELL = 56;\n\nexport function MatrixHeatmap({\n title,\n description,\n caveat,\n status,\n rows,\n columns,\n values,\n unit = '',\n formatValue = formatCompact,\n showTotals = true,\n defaultView,\n actions,\n width: fixedWidth,\n ariaLabel,\n}: MatrixHeatmapProps) {\n const wrapRef = useRef<HTMLDivElement>(null);\n const width = useChartWidth(wrapRef, fixedWidth);\n const textScale = useTextScale();\n const [focus, setFocus] = useState<{ r: number; c: number } | null>(null);\n const liveId = useId();\n const hatchId = hatchPatternId(useId());\n const unitText = unit ? ` ${unit}` : '';\n\n const totals = matrixTotals(values, rows.length, columns.length);\n const anyKnown = totals.grand !== null;\n const resolvedStatus: ChartStatus = status ?? (rows.length === 0 || columns.length === 0\n ? { kind: 'empty' }\n : anyKnown ? { kind: 'ready' } : { kind: 'unknown', reason: 'no cell in this matrix was measured.' });\n\n const labelW = Math.max(72, Math.min(150, Math.round(width * 0.24)));\n const marginRight = showTotals ? MARGIN_BAR + 34 : 0;\n const marginTop = showTotals ? MARGIN_BAR * 0.6 : 0;\n const avail = width - labelW - marginRight;\n const cellW = Math.max(MIN_CELL, Math.min(MAX_CELL * 2, Math.floor(avail / Math.max(1, columns.length)) - GAP));\n const cellH = Math.max(MIN_CELL, Math.min(MAX_CELL, 30));\n const gridX = labelW;\n const gridY = marginTop + HEADER_H;\n const svgW = gridX + columns.length * (cellW + GAP) + marginRight;\n const svgH = gridY + rows.length * (cellH + GAP);\n const rowTotalMax = Math.max(1, ...totals.rows.map((t) => t ?? 0));\n const colTotalMax = Math.max(1, ...totals.columns.map((t) => t ?? 0));\n const showNumbers = cellW >= 28;\n // 7 px a character at 12 px text, scaled to the Display size.\n const labelChars = Math.floor(labelW / (7 * textScale));\n\n const cellValue = (r: number, c: number): number | null => {\n const v = values[r]?.[c];\n return v === undefined || v === null || !Number.isFinite(v) ? null : v;\n };\n const fraction = (v: number): number => (totals.max > 0 ? v / totals.max : 0);\n const fill = (v: number | null): string => (v === null ? `url(#${hatchId})` : v <= 0 ? heatColor(0) : quantityColor(fraction(v)));\n // A true zero sits on the faint heat-0 cell, the palest ground there is.\n const cellInk = (v: number): string => (v <= 0 ? quantityInk(0) : quantityInk(fraction(v)));\n const describe = (r: number, c: number): string => {\n const v = cellValue(r, c);\n return `${rows[r]!.label} × ${columns[c]!.label}: ${v === null ? 'not measured' : `${formatValue(v)}${unitText}`}`;\n };\n\n function onKey(e: KeyboardEvent<HTMLDivElement>): void {\n if (rows.length === 0 || columns.length === 0) return;\n const cur = focus ?? { r: 0, c: 0 };\n let next: { r: number; c: number } | null = null;\n if (e.key === 'ArrowRight') next = { r: cur.r, c: cur.c + 1 };\n else if (e.key === 'ArrowLeft') next = { r: cur.r, c: cur.c - 1 };\n else if (e.key === 'ArrowDown') next = { r: cur.r + 1, c: cur.c };\n else if (e.key === 'ArrowUp') next = { r: cur.r - 1, c: cur.c };\n else if (e.key === 'Home') next = { r: cur.r, c: 0 };\n else if (e.key === 'End') next = { r: cur.r, c: columns.length - 1 };\n if (!next) return;\n e.preventDefault();\n setFocus({ r: Math.max(0, Math.min(rows.length - 1, next.r)), c: Math.max(0, Math.min(columns.length - 1, next.c)) });\n }\n\n let peak: { r: number; c: number; v: number } | null = null;\n for (let r = 0; r < rows.length; r++) for (let c = 0; c < columns.length; c++) {\n const v = cellValue(r, c);\n if (v !== null && (!peak || v > peak.v)) peak = { r, c, v };\n }\n const unknownCells = rows.length * columns.length - values.flat().filter((v) => v !== null && v !== undefined).length;\n const summary = ariaLabel ?? `${title}: ${rows.length} × ${columns.length} grid, ${totals.grand === null ? 'nothing measured' : `${formatValue(totals.grand)}${unitText} in total`}` +\n (peak && peak.v > 0 ? `; most in ${rows[peak.r]!.label} × ${columns[peak.c]!.label} (${formatValue(peak.v)})` : '') +\n (unknownCells > 0 ? `; ${unknownCells} cell${unknownCells === 1 ? '' : 's'} not measured` : '') + '.';\n\n interface TableRow { id: string; label: string; index: number }\n const tableRows: TableRow[] = rows.map((r, index) => ({ id: r.id, label: r.label, index }));\n const tableColumns: TableColumn<TableRow>[] = [\n { key: '__row', label: '', render: (r) => r.label },\n ...columns.map((c, ci) => ({\n key: c.id,\n label: c.label,\n numeric: true,\n render: (r: TableRow) => {\n const v = cellValue(r.index, ci);\n return v === null ? '—' : formatValue(v);\n },\n })),\n { key: '__total', label: 'Total', numeric: true, render: (r) => (totals.rows[r.index] === null ? '—' : formatValue(totals.rows[r.index]!)) },\n ];\n\n const focusCell = focus;\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={resolvedStatus}\n defaultView={defaultView}\n actions={actions}\n table={<TableView caption={title} columns={tableColumns} rows={tableRows} rowKey={(r) => r.id} />}\n footer={\n <div className={plot.legend} aria-hidden=\"true\">\n <span className={plot.legendItem}>0</span>\n {[0, 1, 2, 3, 4].map((i) => (\n <span key={i} className={plot.swatch} style={{ background: i === 0 ? heatColor(0) : quantityColor(i / 4) }} />\n ))}\n <span className={plot.legendItem}>{totals.max > 0 ? formatValue(totals.max) : 'more'}</span>\n {unknownCells > 0 ? (\n <span className={plot.legendItem}>\n <span className={plot.swatchHatch} />\n not measured\n </span>\n ) : null}\n </div>\n }\n >\n <div\n ref={wrapRef}\n className={`${plot.plotWrap} ${plot.focusable} ${styles.scroll}`}\n tabIndex={0}\n role=\"group\"\n aria-label={`${title}. Use the arrow keys to move between cells.`}\n aria-describedby={liveId}\n onFocus={() => setFocus((f) => f ?? { r: 0, c: 0 })}\n onBlur={() => setFocus(null)}\n onKeyDown={onKey}\n >\n <svg className={plot.svg} width={svgW} height={svgH} viewBox={`0 0 ${svgW} ${svgH}`} role=\"img\" aria-label={summary}>\n <defs>\n <HatchPattern id={hatchId} />\n </defs>\n {/* Column totals (top margin) */}\n {showTotals\n ? columns.map((c, ci) => {\n const t = totals.columns[ci] ?? null;\n const h = t === null ? 0 : Math.max(t > 0 ? 2 : 0, (t / colTotalMax) * (marginTop - 4));\n const x = gridX + ci * (cellW + GAP);\n return (\n <g key={`ct-${c.id}`} data-col-total={c.id}>\n {t === null ? null : <rect x={x + cellW * 0.2} y={marginTop - h} width={cellW * 0.6} height={h} rx={2} fill={CHART_SEQUENTIAL_SOFT} />}\n </g>\n );\n })\n : null}\n {/* Column headers */}\n {columns.map((c, ci) => {\n const x = gridX + ci * (cellW + GAP);\n const chars = Math.max(2, Math.floor((cellW - (c.engine ? 22 : 0)) / 7));\n return (\n <g key={`ch-${c.id}`}>\n {c.engine ? <EngineTick engine={c.engine} x={x + 2} y={marginTop + 5} height={HEADER_H - 12} /> : null}\n <text className={plot.label} x={x + (c.engine ? 24 : cellW / 2)} y={marginTop + HEADER_H / 2} dy=\"0.32em\" textAnchor={c.engine ? 'start' : 'middle'}>\n {c.label.length > chars ? `${c.label.slice(0, chars - 1)}…` : c.label}\n </text>\n </g>\n );\n })}\n {rows.map((row, ri) => {\n const y = gridY + ri * (cellH + GAP);\n const t = totals.rows[ri] ?? null;\n const barW = t === null ? 0 : Math.max(t > 0 ? 2 : 0, (t / rowTotalMax) * MARGIN_BAR);\n const barX = gridX + columns.length * (cellW + GAP) + 6;\n return (\n <g key={row.id} data-row={row.id}>\n <text className={plot.label} x={labelW - 8} y={y + cellH / 2} dy=\"0.32em\" textAnchor=\"end\">\n {row.label.length > labelChars ? `${row.label.slice(0, labelChars - 1)}…` : row.label}\n </text>\n {columns.map((col, ci) => {\n const v = cellValue(ri, ci);\n const x = gridX + ci * (cellW + GAP);\n const isFocus = focusCell?.r === ri && focusCell.c === ci;\n return (\n <g key={col.id}>\n <rect\n data-cell={`${row.id}:${col.id}`}\n data-value={v === null ? 'unknown' : v}\n className={`${v === null ? plot.unknownMark : ''} ${isFocus ? styles.focus : ''}`}\n x={v === null ? x + 0.5 : x}\n y={v === null ? y + 0.5 : y}\n width={v === null ? cellW - 1 : cellW}\n height={v === null ? cellH - 1 : cellH}\n rx={3}\n fill={fill(v)}\n onPointerEnter={() => setFocus({ r: ri, c: ci })}\n onPointerLeave={() => setFocus(null)}\n />\n {showNumbers && v !== null ? (\n // Plain fill picked by the cell's luminance (colors.ts\n // quantityInk) — no halo: a surface stroke around text\n // on a dark cell smeared \"1\" into a blob.\n <text data-cell-value={`${row.id}:${col.id}`} className={styles.num} x={x + cellW / 2} y={y + cellH / 2} dy=\"0.32em\" textAnchor=\"middle\" fill={cellInk(v)}>\n {formatValue(v)}\n </text>\n ) : null}\n </g>\n );\n })}\n {showTotals ? (\n <g data-row-total={row.id}>\n {t === null ? null : <rect x={barX} y={y + cellH * 0.25} width={barW} height={cellH * 0.5} rx={2} fill={CHART_SEQUENTIAL_SOFT} />}\n <text className={plot.tick} x={barX + barW + 4} y={y + cellH / 2} dy=\"0.32em\">\n {t === null ? '—' : formatValue(t)}\n </text>\n </g>\n ) : null}\n </g>\n );\n })}\n </svg>\n <span id={liveId} className={plot.srOnly} aria-live=\"polite\">\n {focusCell ? describe(focusCell.r, focusCell.c) : ''}\n </span>\n {focusCell ? (\n <ChartTooltip\n left={clampTooltipLeft(gridX + focusCell.c * (cellW + GAP) + cellW / 2, svgW, 80)}\n top={gridY + focusCell.r * (cellH + GAP)}\n title={`${rows[focusCell.r]!.label} × ${columns[focusCell.c]!.label}`}\n rows={[{ key: 'v', label: unit || 'Value', value: cellValue(focusCell.r, focusCell.c) === null ? null : formatValue(cellValue(focusCell.r, focusCell.c)!) }]}\n />\n ) : null}\n </div>\n </ChartFrame>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MatrixHeatmap-DZvZeWXL.js","names":[],"sources":["../../../../../../src/web-ui/components/charts/Gauge.module.css","../../../../../../src/web-ui/components/charts/Gauge.tsx","../../../../../../src/web-ui/components/charts/MatrixHeatmap.module.css","../../../../../../src/web-ui/components/charts/MatrixHeatmap.tsx"],"sourcesContent":[".gauge {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-1);\n}\n\n.readout {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n margin-top: calc(-1 * var(--space-6));\n text-align: center;\n}\n\n/* Proportional figures for a standalone number (tabular only in columns). */\n.value {\n font-size: var(--text-2xl-size);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.unknownValue {\n font-size: var(--text-lg-size, var(--text-sm-size));\n font-weight: var(--font-weight-medium);\n color: var(--status-unknown-fg);\n}\n\n.state {\n font-size: var(--text-xs-size);\n color: var(--text-secondary);\n}\n\n.gauge[data-severity='warn'] .state {\n color: var(--status-warning-fg);\n}\n\n.gauge[data-severity='danger'] .state {\n color: var(--status-danger-fg);\n}\n\n.caption {\n font-size: var(--text-xs-size);\n color: var(--text-tertiary);\n}\n\n/* V3.10: the measuring box — full card width, so the arc can size to it. */\n.fit {\n width: 100%;\n min-width: 0;\n display: flex;\n justify-content: center;\n}\n","/**\n * components/charts/Gauge.tsx — one fraction on a 180° arc: how much of a\n * window is used, how close a cap is. The fill carries SEVERITY (accent →\n * warning → danger at the thresholds) over a track that is a lighter step of\n * the same ramp; an optional marker shows a line that matters (e.g. the\n * reserve kept for interactive use). The number and a words-first state label\n * sit under the arc, so severity is never colour alone.\n *\n * Honesty: `null` is UNKNOWN — an empty track and \"unknown\", never 0%. Values\n * past 100% are drawn full and printed as they are (\"112%\").\n *\n * Semantics: role=\"meter\" with aria-valuenow/min/max/valuetext.\n */\nimport { useId, useLayoutEffect, useRef, useState } from 'react';\nimport { CHART_SEQUENTIAL, CHART_TRACK, hatchPatternId, toneColor } from './colors.js';\nimport { HatchPattern } from './ChartParts.js';\nimport { ChartFrame, type ChartStatus } from './ChartFrame.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { gaugeArc, gaugeSeverity, polar, type GaugeSeverity } from './chart-math.js';\nimport { formatPercent } from './format.js';\nimport plot from './plot.module.css';\nimport styles from './Gauge.module.css';\n\nexport interface GaugeProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n /** Fraction used, 0..1 (may exceed 1). null = unknown. */\n value: number | null;\n /** Severity thresholds as fractions (defaults 0.7 / 0.9). */\n warnAt?: number;\n dangerAt?: number;\n /** A reference line on the arc, e.g. { value: 0.6, label: 'Autonomy cap' }. */\n marker?: { value: number; label: string };\n /** Words under the number, e.g. \"resets in 2h\". */\n caption?: string;\n /**\n * The LARGEST diameter in px (default 180). V3.10: the gauge fits its\n * container — two gauges side by side at 375 px each shrink (never below\n * MIN_GAUGE_SIZE) instead of widening the page.\n */\n size?: number;\n formatValue?: (fraction: number) => string;\n /**\n * Print the severity words (\"near the limit\"). Default true. Set false for\n * a fraction where higher is BETTER (a hit rate): the fill stays one\n * quantity hue and no limit language is used.\n */\n showState?: boolean;\n}\n\nconst SEVERITY_LABEL: Record<GaugeSeverity, string> = {\n ok: 'within limits',\n warn: 'near the limit',\n danger: 'at the limit',\n unknown: 'unknown',\n};\n\n/** Smallest diameter a gauge draws at; below it the readout would collide with the arc. */\nexport const MIN_GAUGE_SIZE = 112;\n\n/** The container's measured width (0 until laid out: jsdom, a hidden tab). */\nfunction useContainerWidth(ref: React.RefObject<HTMLElement | null>): number {\n const [width, setWidth] = useState(0);\n // Track the node: the gauge mounts after a loading frame (see useChartWidth).\n const [node, setNode] = useState<HTMLElement | null>(null);\n // Runs after every render on purpose (ref.current is not a dependency React\n // can see); the equality guard makes it settle in one pass, never a loop.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useLayoutEffect(() => {\n if (ref.current !== node) setNode(ref.current);\n });\n useLayoutEffect(() => {\n const el = node;\n if (!el) return undefined;\n const read = (): void => {\n const w = Math.floor(el.getBoundingClientRect().width);\n setWidth((prev) => (prev === w ? prev : w));\n };\n read();\n if (typeof ResizeObserver === 'undefined') return undefined;\n let frame = 0;\n const observer = new ResizeObserver(() => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(read);\n });\n observer.observe(el);\n return () => {\n cancelAnimationFrame(frame);\n observer.disconnect();\n };\n }, [node]);\n return width;\n}\n\n/** Diameter for a container: the largest that fits, clamped to [MIN_GAUGE_SIZE, max]. */\nexport function gaugeDiameter(containerWidth: number, max: number): number {\n if (!(containerWidth > 0)) return max;\n return Math.max(MIN_GAUGE_SIZE, Math.min(max, Math.floor(containerWidth)));\n}\n\nfunction severityColor(severity: GaugeSeverity): string {\n if (severity === 'danger') return toneColor('danger');\n if (severity === 'warn') return toneColor('warning');\n return CHART_SEQUENTIAL;\n}\n\ninterface Row {\n key: string;\n label: string;\n value: string;\n}\n\nexport function Gauge({\n title,\n description,\n caveat,\n status,\n value,\n warnAt = 0.7,\n dangerAt = 0.9,\n marker,\n caption,\n size: maxSize = 180,\n formatValue = (f) => formatPercent(f),\n showState = true,\n}: GaugeProps) {\n const captionId = useId();\n const hatchId = hatchPatternId(useId());\n const fitRef = useRef<HTMLDivElement>(null);\n const size = gaugeDiameter(useContainerWidth(fitRef), maxSize);\n const severity = showState ? gaugeSeverity(value, warnAt, dangerAt) : value === null ? 'unknown' : 'ok';\n const stroke = Math.max(10, Math.round(size / 12));\n const r = size / 2 - stroke / 2 - 2;\n const cx = size / 2;\n const cy = size / 2;\n const h = size / 2 + stroke / 2 + 4;\n const valueText = value === null ? 'unknown' : formatValue(value);\n const spoken = value === null ? `${title}: unknown` : showState ? `${title}: ${valueText}, ${SEVERITY_LABEL[severity]}` : `${title}: ${valueText}`;\n\n const rows: Row[] = [\n { key: 'value', label: 'Used', value: valueText },\n ...(showState\n ? [\n { key: 'state', label: 'State', value: SEVERITY_LABEL[severity] },\n { key: 'warn', label: 'Warning at', value: formatValue(warnAt) },\n { key: 'danger', label: 'Limit at', value: formatValue(dangerAt) },\n ]\n : []),\n ...(marker ? [{ key: 'marker', label: marker.label, value: formatValue(marker.value) }] : []),\n ];\n const columns: TableColumn<Row>[] = [\n { key: 'label', label: 'Measure', render: (row) => row.label },\n { key: 'value', label: 'Value', numeric: true, render: (row) => row.value },\n ];\n\n const markerOuter = marker ? polar(cx, cy, r + stroke / 2 + 3, Math.PI * (1 - Math.min(1, Math.max(0, marker.value)))) : null;\n const markerInner = marker ? polar(cx, cy, r - stroke / 2 - 3, Math.PI * (1 - Math.min(1, Math.max(0, marker.value)))) : null;\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={status ?? { kind: 'ready' }}\n table={<TableView caption={title} columns={columns} rows={rows} rowKey={(row) => row.key} />}\n >\n <div ref={fitRef} className={styles.fit}>\n <div\n className={styles.gauge}\n role=\"meter\"\n aria-label={title}\n aria-valuemin={0}\n aria-valuemax={1}\n aria-valuenow={value === null ? undefined : Math.min(1, Math.max(0, value))}\n aria-valuetext={spoken}\n aria-describedby={caption ? captionId : undefined}\n data-severity={severity}\n >\n <svg className={plot.svg} width={size} height={h} viewBox={`0 0 ${size} ${h}`} aria-hidden=\"true\">\n <defs>\n <HatchPattern id={hatchId} />\n </defs>\n {/* Unknown: the track is hatched, not the pale ramp step a \"little\" value would get. */}\n <path\n data-role=\"track\"\n d={gaugeArc(cx, cy, r, 0, 1)}\n fill=\"none\"\n stroke={value === null ? `url(#${hatchId})` : CHART_TRACK}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n />\n {value !== null && value > 0 ? (\n <path\n data-role=\"fill\"\n d={gaugeArc(cx, cy, r, 0, Math.min(1, value))}\n fill=\"none\"\n stroke={severityColor(severity)}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n />\n ) : null}\n {markerOuter && markerInner ? (\n <line\n data-role=\"marker\"\n x1={markerInner.x}\n y1={markerInner.y}\n x2={markerOuter.x}\n y2={markerOuter.y}\n stroke=\"var(--text-primary)\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n />\n ) : null}\n </svg>\n <div className={styles.readout}>\n <span className={value === null ? styles.unknownValue : styles.value}>{valueText}</span>\n {showState && severity !== 'unknown' ? <span className={styles.state}>{SEVERITY_LABEL[severity]}</span> : null}\n {caption ? <span id={captionId} className={styles.caption}>{caption}</span> : null}\n {marker ? <span className={styles.caption}>{marker.label}: {formatValue(marker.value)}</span> : null}\n </div>\n </div>\n </div>\n </ChartFrame>\n );\n}\n","/* MatrixHeatmap — horizontal scroll when a wide matrix meets a narrow card,\n the focused-cell ring, and in-cell numbers. Tokens only. */\n.scroll {\n overflow-x: auto;\n overscroll-behavior-x: contain;\n}\n\n.focus {\n stroke: var(--border-focus);\n stroke-width: 2;\n}\n\n/* In-cell numbers: the fill is set per cell (colors.ts quantityInk, by the\n cell's luminance), so this class must NOT set one — a CSS fill would beat\n the attribute. Never a stroke / halo: paint-order stroke around dark text\n on a dark cell turned the glyphs into blobs. */\n.num {\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n font-weight: var(--font-weight-medium);\n font-variant-numeric: tabular-nums;\n stroke: none;\n pointer-events: none;\n}\n","/**\n * components/charts/MatrixHeatmap.tsx — a rows × columns grid of counts\n * (V3.10, SPEC-310C §5 Mind: insight KIND × ENGINE, faceted per repo;\n * r5/visual.md §2 \"MatrixHeatmap\").\n *\n * Encoding, one meaning per mark:\n * - a KNOWN value is a step of the fixed azure quantity ramp\n * (colors.ts quantityColor) — a TRUE ZERO is the faint heat-0 cell;\n * - an UNKNOWN value (null: nothing was measured for that cell, e.g. an\n * engine with no recorded reasoning) is the 45° unknown hatch with an\n * outline — never the palest step, which would claim \"a little\";\n * - row and column TOTALS sit in the margins as bars (right and top), so\n * \"which kind dominates\" reads without adding cells in your head.\n * A column may carry an engine: its header gets the 2px tick + monogram.\n *\n * Keyboard: the grid is one tab stop; arrows move a cell, Home/End jump\n * along the row; the focused cell is announced. The Table view has every\n * cell and both totals. At 375 px callers usually start on the table\n * (`defaultView=\"table\"`, SPEC-310C §5 \"Mind's matrix shows as a table\").\n */\nimport { useId, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { CHART_SEQUENTIAL_SOFT, hatchPatternId, heatColor, quantityColor, quantityInk, type ChartEngine } from './colors.js';\nimport { ChartFrame, type ChartStatus, type ChartView } from './ChartFrame.js';\nimport { ChartTooltip, EngineTick, HatchPattern, clampTooltipLeft } from './ChartParts.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { formatCompact } from './format.js';\nimport { useChartWidth } from './useChartWidth.js';\nimport { useTextScale } from './useTextScale.js';\nimport plot from './plot.module.css';\nimport styles from './MatrixHeatmap.module.css';\n\nexport interface MatrixAxisItem {\n id: string;\n label: string;\n /** Column-only: the engine this column stands for (tick + monogram in the header). */\n engine?: ChartEngine;\n}\n\nexport interface MatrixHeatmapProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n rows: MatrixAxisItem[];\n columns: MatrixAxisItem[];\n /** values[rowIndex][columnIndex]; null = not measured. */\n values: ReadonlyArray<ReadonlyArray<number | null>>;\n /** Unit word for spoken text and the table (\"insights\"). */\n unit?: string;\n formatValue?: (v: number) => string;\n /** Row / column totals as margin bars (default true). */\n showTotals?: boolean;\n defaultView?: ChartView;\n /** Extra header controls (e.g. the repo facet picker). */\n actions?: ReactNode;\n width?: number;\n ariaLabel?: string;\n}\n\ninterface Totals {\n rows: (number | null)[];\n columns: (number | null)[];\n max: number;\n grand: number | null;\n}\n\n/** Sum known values; a line with NO known value has an unknown (null) total, never 0. */\nexport function matrixTotals(values: ReadonlyArray<ReadonlyArray<number | null>>, rows: number, columns: number): Totals {\n const cell = (r: number, c: number): number | null => {\n const v = values[r]?.[c];\n return v === undefined || v === null || !Number.isFinite(v) ? null : v;\n };\n const sum = (xs: (number | null)[]): number | null => {\n const known = xs.filter((x): x is number => x !== null);\n return known.length ? known.reduce((a, b) => a + b, 0) : null;\n };\n const rowTotals = Array.from({ length: rows }, (_, r) => sum(Array.from({ length: columns }, (_, c) => cell(r, c))));\n const colTotals = Array.from({ length: columns }, (_, c) => sum(Array.from({ length: rows }, (_, r) => cell(r, c))));\n let max = 0;\n for (let r = 0; r < rows; r++) for (let c = 0; c < columns; c++) max = Math.max(max, cell(r, c) ?? 0);\n return { rows: rowTotals, columns: colTotals, max, grand: sum(rowTotals) };\n}\n\nconst HEADER_H = 26;\nconst MARGIN_BAR = 40;\nconst GAP = 2;\nconst MIN_CELL = 22;\nconst MAX_CELL = 56;\n\nexport function MatrixHeatmap({\n title,\n description,\n caveat,\n status,\n rows,\n columns,\n values,\n unit = '',\n formatValue = formatCompact,\n showTotals = true,\n defaultView,\n actions,\n width: fixedWidth,\n ariaLabel,\n}: MatrixHeatmapProps) {\n const wrapRef = useRef<HTMLDivElement>(null);\n const width = useChartWidth(wrapRef, fixedWidth);\n const textScale = useTextScale();\n const [focus, setFocus] = useState<{ r: number; c: number } | null>(null);\n const liveId = useId();\n const hatchId = hatchPatternId(useId());\n const unitText = unit ? ` ${unit}` : '';\n\n const totals = matrixTotals(values, rows.length, columns.length);\n const anyKnown = totals.grand !== null;\n const resolvedStatus: ChartStatus = status ?? (rows.length === 0 || columns.length === 0\n ? { kind: 'empty' }\n : anyKnown ? { kind: 'ready' } : { kind: 'unknown', reason: 'no cell in this matrix was measured.' });\n\n const labelW = Math.max(72, Math.min(150, Math.round(width * 0.24)));\n const marginRight = showTotals ? MARGIN_BAR + 34 : 0;\n const marginTop = showTotals ? MARGIN_BAR * 0.6 : 0;\n const avail = width - labelW - marginRight;\n const cellW = Math.max(MIN_CELL, Math.min(MAX_CELL * 2, Math.floor(avail / Math.max(1, columns.length)) - GAP));\n const cellH = Math.max(MIN_CELL, Math.min(MAX_CELL, 30));\n const gridX = labelW;\n const gridY = marginTop + HEADER_H;\n const svgW = gridX + columns.length * (cellW + GAP) + marginRight;\n const svgH = gridY + rows.length * (cellH + GAP);\n const rowTotalMax = Math.max(1, ...totals.rows.map((t) => t ?? 0));\n const colTotalMax = Math.max(1, ...totals.columns.map((t) => t ?? 0));\n const showNumbers = cellW >= 28;\n // 7 px a character at 12 px text, scaled to the Display size.\n const labelChars = Math.floor(labelW / (7 * textScale));\n\n const cellValue = (r: number, c: number): number | null => {\n const v = values[r]?.[c];\n return v === undefined || v === null || !Number.isFinite(v) ? null : v;\n };\n const fraction = (v: number): number => (totals.max > 0 ? v / totals.max : 0);\n const fill = (v: number | null): string => (v === null ? `url(#${hatchId})` : v <= 0 ? heatColor(0) : quantityColor(fraction(v)));\n // A true zero sits on the faint heat-0 cell, the palest ground there is.\n const cellInk = (v: number): string => (v <= 0 ? quantityInk(0) : quantityInk(fraction(v)));\n const describe = (r: number, c: number): string => {\n const v = cellValue(r, c);\n return `${rows[r]!.label} × ${columns[c]!.label}: ${v === null ? 'not measured' : `${formatValue(v)}${unitText}`}`;\n };\n\n function onKey(e: KeyboardEvent<HTMLDivElement>): void {\n if (rows.length === 0 || columns.length === 0) return;\n const cur = focus ?? { r: 0, c: 0 };\n let next: { r: number; c: number } | null = null;\n if (e.key === 'ArrowRight') next = { r: cur.r, c: cur.c + 1 };\n else if (e.key === 'ArrowLeft') next = { r: cur.r, c: cur.c - 1 };\n else if (e.key === 'ArrowDown') next = { r: cur.r + 1, c: cur.c };\n else if (e.key === 'ArrowUp') next = { r: cur.r - 1, c: cur.c };\n else if (e.key === 'Home') next = { r: cur.r, c: 0 };\n else if (e.key === 'End') next = { r: cur.r, c: columns.length - 1 };\n if (!next) return;\n e.preventDefault();\n setFocus({ r: Math.max(0, Math.min(rows.length - 1, next.r)), c: Math.max(0, Math.min(columns.length - 1, next.c)) });\n }\n\n let peak: { r: number; c: number; v: number } | null = null;\n for (let r = 0; r < rows.length; r++) for (let c = 0; c < columns.length; c++) {\n const v = cellValue(r, c);\n if (v !== null && (!peak || v > peak.v)) peak = { r, c, v };\n }\n const unknownCells = rows.length * columns.length - values.flat().filter((v) => v !== null && v !== undefined).length;\n const summary = ariaLabel ?? `${title}: ${rows.length} × ${columns.length} grid, ${totals.grand === null ? 'nothing measured' : `${formatValue(totals.grand)}${unitText} in total`}` +\n (peak && peak.v > 0 ? `; most in ${rows[peak.r]!.label} × ${columns[peak.c]!.label} (${formatValue(peak.v)})` : '') +\n (unknownCells > 0 ? `; ${unknownCells} cell${unknownCells === 1 ? '' : 's'} not measured` : '') + '.';\n\n interface TableRow { id: string; label: string; index: number }\n const tableRows: TableRow[] = rows.map((r, index) => ({ id: r.id, label: r.label, index }));\n const tableColumns: TableColumn<TableRow>[] = [\n { key: '__row', label: '', render: (r) => r.label },\n ...columns.map((c, ci) => ({\n key: c.id,\n label: c.label,\n numeric: true,\n render: (r: TableRow) => {\n const v = cellValue(r.index, ci);\n return v === null ? '—' : formatValue(v);\n },\n })),\n { key: '__total', label: 'Total', numeric: true, render: (r) => (totals.rows[r.index] === null ? '—' : formatValue(totals.rows[r.index]!)) },\n ];\n\n const focusCell = focus;\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={resolvedStatus}\n defaultView={defaultView}\n actions={actions}\n table={<TableView caption={title} columns={tableColumns} rows={tableRows} rowKey={(r) => r.id} />}\n footer={\n <div className={plot.legend} aria-hidden=\"true\">\n <span className={plot.legendItem}>0</span>\n {[0, 1, 2, 3, 4].map((i) => (\n <span key={i} className={plot.swatch} style={{ background: i === 0 ? heatColor(0) : quantityColor(i / 4) }} />\n ))}\n <span className={plot.legendItem}>{totals.max > 0 ? formatValue(totals.max) : 'more'}</span>\n {unknownCells > 0 ? (\n <span className={plot.legendItem}>\n <span className={plot.swatchHatch} />\n not measured\n </span>\n ) : null}\n </div>\n }\n >\n <div\n ref={wrapRef}\n className={`${plot.plotWrap} ${plot.focusable} ${styles.scroll}`}\n tabIndex={0}\n role=\"group\"\n aria-label={`${title}. Use the arrow keys to move between cells.`}\n aria-describedby={liveId}\n onFocus={() => setFocus((f) => f ?? { r: 0, c: 0 })}\n onBlur={() => setFocus(null)}\n onKeyDown={onKey}\n >\n <svg className={plot.svg} width={svgW} height={svgH} viewBox={`0 0 ${svgW} ${svgH}`} role=\"img\" aria-label={summary}>\n <defs>\n <HatchPattern id={hatchId} />\n </defs>\n {/* Column totals (top margin) */}\n {showTotals\n ? columns.map((c, ci) => {\n const t = totals.columns[ci] ?? null;\n const h = t === null ? 0 : Math.max(t > 0 ? 2 : 0, (t / colTotalMax) * (marginTop - 4));\n const x = gridX + ci * (cellW + GAP);\n return (\n <g key={`ct-${c.id}`} data-col-total={c.id}>\n {t === null ? null : <rect x={x + cellW * 0.2} y={marginTop - h} width={cellW * 0.6} height={h} rx={2} fill={CHART_SEQUENTIAL_SOFT} />}\n </g>\n );\n })\n : null}\n {/* Column headers */}\n {columns.map((c, ci) => {\n const x = gridX + ci * (cellW + GAP);\n const chars = Math.max(2, Math.floor((cellW - (c.engine ? 22 : 0)) / 7));\n return (\n <g key={`ch-${c.id}`}>\n {c.engine ? <EngineTick engine={c.engine} x={x + 2} y={marginTop + 5} height={HEADER_H - 12} /> : null}\n <text className={plot.label} x={x + (c.engine ? 24 : cellW / 2)} y={marginTop + HEADER_H / 2} dy=\"0.32em\" textAnchor={c.engine ? 'start' : 'middle'}>\n {c.label.length > chars ? `${c.label.slice(0, chars - 1)}…` : c.label}\n </text>\n </g>\n );\n })}\n {rows.map((row, ri) => {\n const y = gridY + ri * (cellH + GAP);\n const t = totals.rows[ri] ?? null;\n const barW = t === null ? 0 : Math.max(t > 0 ? 2 : 0, (t / rowTotalMax) * MARGIN_BAR);\n const barX = gridX + columns.length * (cellW + GAP) + 6;\n return (\n <g key={row.id} data-row={row.id}>\n <text className={plot.label} x={labelW - 8} y={y + cellH / 2} dy=\"0.32em\" textAnchor=\"end\">\n {row.label.length > labelChars ? `${row.label.slice(0, labelChars - 1)}…` : row.label}\n </text>\n {columns.map((col, ci) => {\n const v = cellValue(ri, ci);\n const x = gridX + ci * (cellW + GAP);\n const isFocus = focusCell?.r === ri && focusCell.c === ci;\n return (\n <g key={col.id}>\n <rect\n data-cell={`${row.id}:${col.id}`}\n data-value={v === null ? 'unknown' : v}\n className={`${v === null ? plot.unknownMark : ''} ${isFocus ? styles.focus : ''}`}\n x={v === null ? x + 0.5 : x}\n y={v === null ? y + 0.5 : y}\n width={v === null ? cellW - 1 : cellW}\n height={v === null ? cellH - 1 : cellH}\n rx={3}\n fill={fill(v)}\n onPointerEnter={() => setFocus({ r: ri, c: ci })}\n onPointerLeave={() => setFocus(null)}\n />\n {showNumbers && v !== null ? (\n // Plain fill picked by the cell's luminance (colors.ts\n // quantityInk) — no halo: a surface stroke around text\n // on a dark cell smeared \"1\" into a blob.\n <text data-cell-value={`${row.id}:${col.id}`} className={styles.num} x={x + cellW / 2} y={y + cellH / 2} dy=\"0.32em\" textAnchor=\"middle\" fill={cellInk(v)}>\n {formatValue(v)}\n </text>\n ) : null}\n </g>\n );\n })}\n {showTotals ? (\n <g data-row-total={row.id}>\n {t === null ? null : <rect x={barX} y={y + cellH * 0.25} width={barW} height={cellH * 0.5} rx={2} fill={CHART_SEQUENTIAL_SOFT} />}\n <text className={plot.tick} x={barX + barW + 4} y={y + cellH / 2} dy=\"0.32em\">\n {t === null ? '—' : formatValue(t)}\n </text>\n </g>\n ) : null}\n </g>\n );\n })}\n </svg>\n <span id={liveId} className={plot.srOnly} aria-live=\"polite\">\n {focusCell ? describe(focusCell.r, focusCell.c) : ''}\n </span>\n {focusCell ? (\n <ChartTooltip\n left={clampTooltipLeft(gridX + focusCell.c * (cellW + GAP) + cellW / 2, svgW, 80)}\n top={gridY + focusCell.r * (cellH + GAP)}\n title={`${rows[focusCell.r]!.label} × ${columns[focusCell.c]!.label}`}\n rows={[{ key: 'v', label: unit || 'Value', value: cellValue(focusCell.r, focusCell.c) === null ? null : formatValue(cellValue(focusCell.r, focusCell.c)!) }]}\n />\n ) : null}\n </div>\n </ChartFrame>\n );\n}\n"],"mappings":"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"}
|
package/dist/core/web/public/next/assets/{McpSection-D1tDvlRa.js.map → McpSection-BRuCcTjT.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpSection-
|
|
1
|
+
{"version":3,"file":"McpSection-BRuCcTjT.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/sections/McpSection.tsx"],"sourcesContent":["/**\n * routes/verse/sections/McpSection.tsx — the legacy MCP entry point, folded\n * into Apps & Accounts (SPEC-310C §0.1 \"MCP moves into Apps\", §4).\n *\n * MCP is no longer a section of its own: its per-seat view, the standing\n * caveat (Claude and local seats load none), the drift alert and — new — the\n * Add flow all live in the MCP SERVERS group of the Apps page. This file stays\n * only so a shell that still routes `mcp` (a stored v2 `section: 'mcp'`, or\n * C1's `fallbackModules: ['McpSection']` while AppsSection is loading) lands\n * on that group instead of on a \"missing section\" notice. It renders the same\n * page — one implementation, never two MCP views that could drift.\n */\nimport { AppsSection } from './AppsSection.js';\n\nexport function McpSection() {\n return <AppsSection focusGroup=\"mcp-servers\" />;\n}\n"],"mappings":"0GAcA,SAAgB,GAAa,CAC3B,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAa,WAAW,aAAe,CAAA,CAChD"}
|
package/dist/core/web/public/next/assets/{MessageMarkdown-DlfLEJxu.js → MessageMarkdown-bRvD5nSc.js}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MessageMarkdownRenderer-
|
|
2
|
-
import{a as e,c as t,n,t as r}from"./index-
|
|
3
|
-
//# sourceMappingURL=MessageMarkdown-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MessageMarkdownRenderer-FjjkPKA2.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e,c as t,n,t as r}from"./index-QesfXBsb.js";var i=t(e(),1),a={transcriptWrap:`_transcriptWrap_5y127_12`,scrollArea:`_scrollArea_5y127_14`,transcript:`_transcript_5y127_12`,list:`_list_5y127_31`,item:`_item_5y127_41`,skeleton:`_skeleton_5y127_43`,skeletonUser:`_skeletonUser_5y127_55`,loadError:`_loadError_5y127_58`,empty:`_empty_5y127_85`,emptyTitle:`_emptyTitle_5y127_86`,emptyBody:`_emptyBody_5y127_95`,user:`_user_5y127_100`,userText:`_userText_5y127_101`,assistant:`_assistant_5y127_115`,markdown:`_markdown_5y127_48`,codeHead:`_codeHead_5y127_210`,codeLang:`_codeLang_5y127_227`,copy:`_copy_5y127_226`,streaming:`_streaming_5y127_253`,"verse-caret":`_verse-caret_5y127_1`,tool:`_tool_5y127_267`,toolRun:`_toolRun_5y127_268`,toolLine:`_toolLine_5y127_270`,toolArg:`_toolArg_5y127_288`,toolState:`_toolState_5y127_288`,toolGlyph:`_toolGlyph_5y127_301`,toolName:`_toolName_5y127_314`,toolFailed:`_toolFailed_5y127_338`,toolBody:`_toolBody_5y127_341`,toolRunBody:`_toolRunBody_5y127_342`,toolRunList:`_toolRunList_5y127_349`,toolLabel:`_toolLabel_5y127_351`,toolLabelPath:`_toolLabelPath_5y127_361`,toolPre:`_toolPre_5y127_362`,toolPending:`_toolPending_5y127_377`,note:`_note_5y127_380`,noteError:`_noteError_5y127_388`,noteRecovered:`_noteRecovered_5y127_389`,noteLead:`_noteLead_5y127_396`,noteHint:`_noteHint_5y127_399`,jump:`_jump_5y127_411`,jumpUnseen:`_jumpUnseen_5y127_434`,turn:`_turn_5y127_457`,turnSettled:`_turnSettled_5y127_479`,turnItems:`_turnItems_5y127_488`,turnFoot:`_turnFoot_5y127_507`,"verse-flash":`_verse-flash_5y127_1`,turnErrorJump:`_turnErrorJump_5y127_549`,toolDelta:`_toolDelta_5y127_569`,toolAdd:`_toolAdd_5y127_577`,toolDel:`_toolDel_5y127_569`,toolNote:`_toolNote_5y127_580`,compaction:`_compaction_5y127_601`,compactionRule:`_compactionRule_5y127_606`,compactionText:`_compactionText_5y127_607`,compactionTitle:`_compactionTitle_5y127_615`,compactionNote:`_compactionNote_5y127_622`,continued:`_continued_5y127_625`,continuedLabel:`_continuedLabel_5y127_633`,continuedTitle:`_continuedTitle_5y127_634`,continuedLink:`_continuedLink_5y127_635`},o=n(),s=null,c=null;function l(){return c??=r(()=>import(`./MessageMarkdownRenderer-FjjkPKA2.js`).then(e=>s=e,e=>{throw c=null,e}),__vite__mapDeps([0])),c}typeof window<`u`&&l().catch(()=>void 0);function u(){let[e,t]=(0,i.useState)(s);return(0,i.useEffect)(()=>{if(e)return;let n=!0;return l().then(e=>{n&&t(e)},()=>void 0),()=>{n=!1}},[e]),e}function d({text:e}){return(0,o.jsx)(`div`,{className:a.markdown,"data-markdown-pending":``,children:(0,o.jsx)(`p`,{style:{whiteSpace:`pre-wrap`},children:e})})}var f=(0,i.memo)(function({text:e,streaming:t=!1}){let n=u();return n?(0,o.jsx)(n.RenderedMarkdown,{text:e,streaming:t}):(0,o.jsx)(d,{text:e})});export{a as n,f as t};
|
|
3
|
+
//# sourceMappingURL=MessageMarkdown-bRvD5nSc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":";gjEA2BI,EAAkC,KAClC,EAA0C,KAM9C,SAAgB,GAAgD,CAS9D,MARA,WAAY,OAAO,wCAA+B,CAAC,KAChD,GAAS,EAAW,EACpB,GAAiB,CAGhB,KADA,GAAU,KACJ,CACR,CACF,wBACO,CACT,CAGI,OAAO,OAAW,KAAa,EAA0B,CAAC,CAAC,UAAY,MAAS,EAEpF,SAAS,GAAqC,CAC5C,GAAM,CAAC,EAAK,MAAU,YAAgC,CAAQ,EAO9D,OANA,mBAAgB,CACd,GAAI,EAAK,OACT,IAAI,EAAO,GAEX,OADA,EAAqB,CAAC,CAAC,KAAM,GAAM,CAAM,GAAM,EAAO,CAAC,CAAG,MAAS,MAAS,MAC/D,CAAE,EAAO,EAAO,CAC/B,EAAG,CAAC,CAAG,CAAC,EACD,CACT,CAGA,SAAS,EAAa,CAAE,QAA0B,CAChD,OACE,SAAC,MAAD,CAAK,UAAW,EAAO,SAAU,wBAAsB,GACrD,mBAAC,IAAD,CAAG,MAAO,CAAE,WAAY,UAAW,EAAI,UAAQ,EAC5C,EAET,CAMA,IAAa,KAAkB,QAAK,SAAyB,CAAE,OAAM,YAAY,IAAgD,CAC/H,IAAM,EAAM,EAAY,EACxB,OAAO,GAAM,SAAC,EAAI,iBAAL,CAA4B,OAAiB,WAAY,IAAI,SAAC,EAAD,CAAoB,MAAO,EACvG,CAAC","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/MessageMarkdown.tsx"],"sourcesContent":["/**\n * routes/verse/MessageMarkdown.tsx — assistant text rendered as Markdown.\n *\n * This file is the light half. The renderer — marked + DOMPurify plus the\n * streaming block cache, ~70 KB minified — lives in MessageMarkdownRenderer\n * and loads as its own chunk (3.10 first paint, SPEC-310A §1: the chat's\n * critical JS was 658 KB against a 350 KB budget, and this was the largest\n * piece the transcript did not need in order to show text).\n *\n * Until the renderer is in, a message shows as PLAIN TEXT (React text, never\n * HTML — model output is untrusted, and nothing unsanitized can reach the\n * DOM on this path either). The download starts when this module evaluates,\n * so on a real load the renderer is usually in before the first message\n * mounts; once in, every mount renders Markdown synchronously. If the chunk\n * fails to load, the text stays plain (still complete and readable) and the\n * next mount asks again.\n *\n * The pure helpers (splitStreamingBlocks, appendInlineText, codeLanguage)\n * live in markdown-stream.ts and are re-exported here for existing importers.\n */\nimport { memo, useEffect, useState } from 'react';\nimport styles from './Transcript.module.css';\n\nexport { appendInlineText, codeLanguage, splitStreamingBlocks, type StreamingSplit } from './markdown-stream.js';\n\ntype RendererModule = typeof import('./MessageMarkdownRenderer.js');\n\nlet renderer: RendererModule | null = null;\nlet pending: Promise<RendererModule> | null = null;\n\n/**\n * Load (once) the Markdown renderer chunk. Exported so a caller that needs\n * Markdown synchronously — a test, a print path — can await it first.\n */\nexport function loadMarkdownRenderer(): Promise<RendererModule> {\n pending ??= import('./MessageMarkdownRenderer.js').then(\n (mod) => (renderer = mod),\n (err: unknown) => {\n // Not cached: a transient failure must not pin every message to plain text for the tab's life.\n pending = null;\n throw err;\n },\n );\n return pending;\n}\n\n// Start now, in parallel with whatever else the transcript is waiting on.\nif (typeof window !== 'undefined') void loadMarkdownRenderer().catch(() => undefined);\n\nfunction useRenderer(): RendererModule | null {\n const [mod, setMod] = useState<RendererModule | null>(renderer);\n useEffect(() => {\n if (mod) return undefined;\n let live = true;\n loadMarkdownRenderer().then((m) => { if (live) setMod(m); }, () => undefined);\n return () => { live = false; };\n }, [mod]);\n return mod;\n}\n\n/** The message before the renderer lands: all of it, as text, in the Markdown box's typography. */\nfunction PlainMessage({ text }: { text: string }) {\n return (\n <div className={styles.markdown} data-markdown-pending=\"\">\n <p style={{ whiteSpace: 'pre-wrap' }}>{text}</p>\n </div>\n );\n}\n\n/**\n * Memoized: a finished message re-renders only when its text changes, so a\n * token streaming into the NEXT reply never re-parses this one.\n */\nexport const MessageMarkdown = memo(function MessageMarkdown({ text, streaming = false }: { text: string; streaming?: boolean }) {\n const mod = useRenderer();\n return mod ? <mod.RenderedMarkdown text={text} streaming={streaming} /> : <PlainMessage text={text} />;\n});\n"],"file":"MessageMarkdown-
|
|
1
|
+
{"version":3,"mappings":";gjEA2BI,EAAkC,KAClC,EAA0C,KAM9C,SAAgB,GAAgD,CAS9D,MARA,WAAY,OAAO,wCAA+B,CAAC,KAChD,GAAS,EAAW,EACpB,GAAiB,CAGhB,KADA,GAAU,KACJ,CACR,CACF,wBACO,CACT,CAGI,OAAO,OAAW,KAAa,EAA0B,CAAC,CAAC,UAAY,MAAS,EAEpF,SAAS,GAAqC,CAC5C,GAAM,CAAC,EAAK,MAAU,YAAgC,CAAQ,EAO9D,OANA,mBAAgB,CACd,GAAI,EAAK,OACT,IAAI,EAAO,GAEX,OADA,EAAqB,CAAC,CAAC,KAAM,GAAM,CAAM,GAAM,EAAO,CAAC,CAAG,MAAS,MAAS,MAC/D,CAAE,EAAO,EAAO,CAC/B,EAAG,CAAC,CAAG,CAAC,EACD,CACT,CAGA,SAAS,EAAa,CAAE,QAA0B,CAChD,OACE,SAAC,MAAD,CAAK,UAAW,EAAO,SAAU,wBAAsB,GACrD,mBAAC,IAAD,CAAG,MAAO,CAAE,WAAY,UAAW,EAAI,UAAQ,EAC5C,EAET,CAMA,IAAa,KAAkB,QAAK,SAAyB,CAAE,OAAM,YAAY,IAAgD,CAC/H,IAAM,EAAM,EAAY,EACxB,OAAO,GAAM,SAAC,EAAI,iBAAL,CAA4B,OAAiB,WAAY,IAAI,SAAC,EAAD,CAAoB,MAAO,EACvG,CAAC","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/MessageMarkdown.tsx"],"sourcesContent":["/**\n * routes/verse/MessageMarkdown.tsx — assistant text rendered as Markdown.\n *\n * This file is the light half. The renderer — marked + DOMPurify plus the\n * streaming block cache, ~70 KB minified — lives in MessageMarkdownRenderer\n * and loads as its own chunk (3.10 first paint, SPEC-310A §1: the chat's\n * critical JS was 658 KB against a 350 KB budget, and this was the largest\n * piece the transcript did not need in order to show text).\n *\n * Until the renderer is in, a message shows as PLAIN TEXT (React text, never\n * HTML — model output is untrusted, and nothing unsanitized can reach the\n * DOM on this path either). The download starts when this module evaluates,\n * so on a real load the renderer is usually in before the first message\n * mounts; once in, every mount renders Markdown synchronously. If the chunk\n * fails to load, the text stays plain (still complete and readable) and the\n * next mount asks again.\n *\n * The pure helpers (splitStreamingBlocks, appendInlineText, codeLanguage)\n * live in markdown-stream.ts and are re-exported here for existing importers.\n */\nimport { memo, useEffect, useState } from 'react';\nimport styles from './Transcript.module.css';\n\nexport { appendInlineText, codeLanguage, splitStreamingBlocks, type StreamingSplit } from './markdown-stream.js';\n\ntype RendererModule = typeof import('./MessageMarkdownRenderer.js');\n\nlet renderer: RendererModule | null = null;\nlet pending: Promise<RendererModule> | null = null;\n\n/**\n * Load (once) the Markdown renderer chunk. Exported so a caller that needs\n * Markdown synchronously — a test, a print path — can await it first.\n */\nexport function loadMarkdownRenderer(): Promise<RendererModule> {\n pending ??= import('./MessageMarkdownRenderer.js').then(\n (mod) => (renderer = mod),\n (err: unknown) => {\n // Not cached: a transient failure must not pin every message to plain text for the tab's life.\n pending = null;\n throw err;\n },\n );\n return pending;\n}\n\n// Start now, in parallel with whatever else the transcript is waiting on.\nif (typeof window !== 'undefined') void loadMarkdownRenderer().catch(() => undefined);\n\nfunction useRenderer(): RendererModule | null {\n const [mod, setMod] = useState<RendererModule | null>(renderer);\n useEffect(() => {\n if (mod) return undefined;\n let live = true;\n loadMarkdownRenderer().then((m) => { if (live) setMod(m); }, () => undefined);\n return () => { live = false; };\n }, [mod]);\n return mod;\n}\n\n/** The message before the renderer lands: all of it, as text, in the Markdown box's typography. */\nfunction PlainMessage({ text }: { text: string }) {\n return (\n <div className={styles.markdown} data-markdown-pending=\"\">\n <p style={{ whiteSpace: 'pre-wrap' }}>{text}</p>\n </div>\n );\n}\n\n/**\n * Memoized: a finished message re-renders only when its text changes, so a\n * token streaming into the NEXT reply never re-parses this one.\n */\nexport const MessageMarkdown = memo(function MessageMarkdown({ text, streaming = false }: { text: string; streaming?: boolean }) {\n const mod = useRenderer();\n return mod ? <mod.RenderedMarkdown text={text} streaming={streaming} /> : <PlainMessage text={text} />;\n});\n"],"file":"MessageMarkdown-bRvD5nSc.js"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,c as t,n}from"./index-
|
|
1
|
+
import{a as e,c as t,n}from"./index-QesfXBsb.js";import{n as r}from"./MessageMarkdown-bRvD5nSc.js";function i(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function a(e){if(Array.isArray(e))return e}function o(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function s(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function c(e,t){return a(e)||o(e,t)||l(e,t)||s()}function l(e,t){if(e){if(typeof e==`string`)return i(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}var u=Object.entries,d=Object.setPrototypeOf,f=Object.isFrozen,ee=Object.getPrototypeOf,p=Object.getOwnPropertyDescriptor,m=Object.freeze,h=Object.seal,te=Object.create,ne=typeof Reflect<`u`&&Reflect,re=ne.apply,g=ne.construct;m||=function(e){return e},h||=function(e){return e},re||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},g||=function(e){return new e(...[...arguments].slice(1))};var ie=x(Array.prototype.forEach),ae=x(Array.prototype.lastIndexOf),oe=x(Array.prototype.pop),se=x(Array.prototype.push),ce=x(Array.prototype.splice),le=Array.isArray,ue=x(String.prototype.toLowerCase),de=x(String.prototype.toString),fe=x(String.prototype.match),pe=x(String.prototype.replace),me=x(String.prototype.indexOf),he=x(String.prototype.trim),ge=x(Number.prototype.toString),_e=x(Boolean.prototype.toString),ve=typeof BigInt>`u`?null:x(BigInt.prototype.toString),_=typeof Symbol>`u`?null:x(Symbol.prototype.toString),v=x(Object.prototype.hasOwnProperty),y=x(Object.prototype.toString),b=x(RegExp.prototype.test),ye=be(TypeError);function x(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return re(e,t,n)}}function be(e){return function(){return g(e,[...arguments])}}function S(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ue;if(d&&d(e,null),!le(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(f(t)||(t[r]=e),i=e)}e[i]=!0}return e}function xe(e){for(let t=0;t<e.length;t++)v(e,t)||(e[t]=null);return e}function C(e){let t=te(null);for(let r of u(e)){var n=c(r,2);let i=n[0],a=n[1];v(e,i)&&(t[i]=le(a)?xe(a):a&&typeof a==`object`&&a.constructor===Object?C(a):a)}return t}function Se(e){switch(typeof e){case`string`:return e;case`number`:return ge(e);case`boolean`:return _e(e);case`bigint`:return ve?ve(e):`0`;case`symbol`:return _?_(e):`Symbol()`;case`undefined`:return y(e);case`function`:case`object`:{if(e===null)return y(e);let t=e,n=w(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:y(e)}return y(e)}default:return y(e)}}function w(e,t){for(;e!==null;){let n=p(e,t);if(n){if(n.get)return x(n.get);if(typeof n.value==`function`)return x(n.value)}e=ee(e)}function n(){return null}return n}function Ce(e){try{return b(e,``),!0}catch{return!1}}var we=m(`a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),Te=m(`svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),Ee=m([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),De=m([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),Oe=m(`math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),ke=m([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),Ae=m([`#text`]),je=m(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),Me=m(`accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dominant-baseline.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.pointer-events.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-orientation.text-rendering.textlength.type.u1.u2.unicode.values.vector-effect.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),Ne=m(`accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),Pe=m([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),Fe=h(/{{[\w\W]*|^[\w\W]*}}/g),Ie=h(/<%[\w\W]*|^[\w\W]*%>/g),Le=h(/\${[\w\W]*/g),Re=h(/^data-[\-\w.\u00B7-\uFFFF]+$/),ze=h(/^aria-[\-\w]+$/),Be=h(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Ve=h(/^(?:\w+script|data):/i),He=h(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ue=h(/^html$/i),We=h(/^[a-z][.\w]*(-[.\w]+)+$/i),Ge=h(/<[/\w!]/g),Ke=h(/<[/\w]/g),qe=h(/<\/no(script|embed|frames)/i),Je=h(/\/>/i),T={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},E=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`],Ye=m(S({},E)),Xe=function(){let e={};return ie(E,t=>{e[t]=h(RegExp(`</`+t+`(?=[\\t\\n\\f\\r />])`,`i`))}),m(e)}(),Ze=function(){return typeof window>`u`?null:window},Qe=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},$e=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},et=function(e,t,n,r){return v(e,t)&&le(e[t])?S(r.base?C(r.base):{},e[t],r.transform):n},tt=function(e,t,n){let r=v(e,t)?e[t]:void 0;return r&&typeof r==`object`?C(r):n()};function nt(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ze(),t=e=>nt(e);if(t.version=`3.4.15`,t.removed=[],!e||!e.document||e.document.nodeType!==T.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,d=e.trustedTypes,f=s.prototype,ee=w(f,`cloneNode`),p=w(f,`remove`),ne=w(f,`removeAttributeNode`),re=w(f,`nextSibling`),g=w(f,`childNodes`),ge=w(f,`parentNode`),_e=w(f,`shadowRoot`),ve=w(f,`attributes`),_=o&&o.prototype?w(o.prototype,`nodeType`):null,y=o&&o.prototype?w(o.prototype,`nodeName`):null,x=o&&o.prototype?w(o.prototype,`ownerDocument`):null,be=function(e){return _?_(e):e.nodeType},xe=function(e){return y?y(e):e.nodeName};if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let E,D=``,rt,it=!1,at=0,O=function(){if(at>0)throw ye(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},k=function(e){O(),at++;try{return E.createHTML(e)}finally{at--}},A=function(e){O(),at++;try{return E.createScriptURL(e)}finally{at--}},ot=function(){return it||=(rt=Qe(d,i),!0),rt},j=n,st=j.implementation,ct=j.createNodeIterator,lt=j.createDocumentFragment,ut=j.getElementsByTagName,dt=r.importNode,M=$e();t.isSupported=typeof u==`function`&&typeof ge==`function`&&st&&st.createHTMLDocument!==void 0;let ft=Fe,pt=Ie,mt=Le,ht=Re,gt=ze,_t=Ve,vt=He,yt=We,bt=Be,N=null,xt=S({},[...we,...Te,...Ee,...Oe,...Ae]),P=null,St=S({},[...je,...Me,...Ne,...Pe]),F=Object.seal(te(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),I=null,Ct=null,L=Object.seal(te(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),wt=!0,Tt=!0,Et=!1,Dt=!0,R=!1,z=!0,B=!1,Ot=!1,kt=null,At=null,jt=!1,Mt=!1,Nt=!1,Pt=!1,Ft=!0,It=!1,Lt=`user-content-`,Rt=!0,zt=!1,Bt={},Vt=null,Ht=S({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),Ut=null,Wt=S({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Gt=null,Kt=S({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),qt=`http://www.w3.org/1998/Math/MathML`,Jt=`http://www.w3.org/2000/svg`,V=`http://www.w3.org/1999/xhtml`,Yt=V,Xt=!1,Zt=null,Qt=S({},[qt,Jt,V],de),$t=m([`mi`,`mo`,`mn`,`ms`,`mtext`]),en=S({},$t),tn=m([`annotation-xml`]),nn=S({},tn),rn=S({},[`title`,`style`,`font`,`a`,`script`]),H=null,an=[`application/xhtml+xml`,`text/html`],U=null,W=null,on=n.createElement(`form`),sn=function(e){return e instanceof RegExp||e instanceof Function},G=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(W&&W===e)return;(!e||typeof e!=`object`)&&(e={}),e=C(e),H=an.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,U=H===`application/xhtml+xml`?de:ue,N=et(e,`ALLOWED_TAGS`,xt,{transform:U}),P=et(e,`ALLOWED_ATTR`,St,{transform:U}),Zt=et(e,`ALLOWED_NAMESPACES`,Qt,{transform:de}),Gt=et(e,`ADD_URI_SAFE_ATTR`,Kt,{transform:U,base:Kt}),Ut=et(e,`ADD_DATA_URI_TAGS`,Wt,{transform:U,base:Wt}),Vt=et(e,`FORBID_CONTENTS`,Ht,{transform:U}),I=et(e,`FORBID_TAGS`,C({}),{transform:U}),Ct=et(e,`FORBID_ATTR`,C({}),{transform:U}),Bt=v(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?C(e.USE_PROFILES):e.USE_PROFILES:!1,wt=e.ALLOW_ARIA_ATTR!==!1,Tt=e.ALLOW_DATA_ATTR!==!1,Et=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Dt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,R=e.SAFE_FOR_TEMPLATES||!1,z=e.SAFE_FOR_XML!==!1,B=e.WHOLE_DOCUMENT||!1,Mt=e.RETURN_DOM||!1,Nt=e.RETURN_DOM_FRAGMENT||!1,Pt=e.RETURN_TRUSTED_TYPE||!1,jt=e.FORCE_BODY||!1,Ft=e.SANITIZE_DOM!==!1,It=e.SANITIZE_NAMED_PROPS||!1,Rt=e.KEEP_CONTENT!==!1,zt=e.IN_PLACE||!1,bt=Ce(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Be,Yt=typeof e.NAMESPACE==`string`?e.NAMESPACE:V,en=tt(e,`MATHML_TEXT_INTEGRATION_POINTS`,()=>S({},$t)),nn=tt(e,`HTML_INTEGRATION_POINTS`,()=>S({},tn));let t=tt(e,`CUSTOM_ELEMENT_HANDLING`,()=>te(null));if(F=te(null),v(t,`tagNameCheck`)&&sn(t.tagNameCheck)&&(F.tagNameCheck=t.tagNameCheck),v(t,`attributeNameCheck`)&&sn(t.attributeNameCheck)&&(F.attributeNameCheck=t.attributeNameCheck),v(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(F.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),h(F),R&&(Tt=!1),Nt&&(Mt=!0),Bt&&(N=S({},Ae),P=te(null),Bt.html===!0&&(S(N,we),S(P,je)),Bt.svg===!0&&(S(N,Te),S(P,Me),S(P,Pe)),Bt.svgFilters===!0&&(S(N,Ee),S(P,Me),S(P,Pe)),Bt.mathMl===!0&&(S(N,Oe),S(P,Ne),S(P,Pe))),L.tagCheck=null,L.attributeCheck=null,v(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?L.tagCheck=e.ADD_TAGS:le(e.ADD_TAGS)&&(N===xt&&(N=C(N)),S(N,e.ADD_TAGS,U))),v(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?L.attributeCheck=e.ADD_ATTR:le(e.ADD_ATTR)&&(P===St&&(P=C(P)),S(P,e.ADD_ATTR,U))),v(e,`ADD_FORBID_CONTENTS`)&&le(e.ADD_FORBID_CONTENTS)&&(Vt===Ht&&(Vt=C(Vt)),S(Vt,e.ADD_FORBID_CONTENTS,U)),Rt&&(N[`#text`]=!0),B&&S(N,[`html`,`head`,`body`]),N.table&&(S(N,[`tbody`]),delete I.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw ye(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw ye(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=E;E=e.TRUSTED_TYPES_POLICY;try{D=k(``)}catch(e){throw E=t,e}}else e.TRUSTED_TYPES_POLICY===null?(E=void 0,D=``):(E===void 0&&(E=ot()),E&&typeof D==`string`&&(D=k(``)));m&&m(e),W=e},cn=S({},[...Te,...Ee,...De]),ln=S({},[...Oe,...ke]),K=function(e,t,n){return t.namespaceURI===V?e===`svg`:t.namespaceURI===qt?e===`svg`&&(n===`annotation-xml`||en[n]):!!cn[e]},un=function(e,t,n){return t.namespaceURI===V?e===`math`:t.namespaceURI===Jt?e===`math`&&nn[n]:!!ln[e]},dn=function(e,t,n){return t.namespaceURI===Jt&&!nn[n]||t.namespaceURI===qt&&!en[n]?!1:!ln[e]&&(rn[e]||!cn[e])},fn=function(e){let t=ge(e);(!t||!t.tagName)&&(t={namespaceURI:Yt,tagName:`template`});let n=ue(e.tagName),r=ue(t.tagName);return Zt[e.namespaceURI]?e.namespaceURI===Jt?K(n,t,r):e.namespaceURI===qt?un(n,t,r):e.namespaceURI===V?dn(n,t,r):!!(H===`application/xhtml+xml`&&Zt[e.namespaceURI]):!1},q=function(e){se(t.removed,{element:e});try{ge(e).removeChild(e)}catch{if(p(e),!ge(e))throw ye(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},pn=function(e,t,n){try{ne(e,t)}catch{try{e.removeAttribute(n)}catch{}}},mn=function(e){gn(e);let t=g(e);if(t){let e=[];ie(t,t=>{se(e,t)}),ie(e,e=>{try{p(e)}catch{}})}let n=ve(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;typeof i==`string`&&pn(e,r,i)}},J=function(e,n,r){if(!r)try{r=n.getAttributeNode(e)}catch{r=null}se(t.removed,{attribute:r||null,from:n});try{r?ne(n,r):n.removeAttribute(e)}catch{try{n.removeAttribute(e)}catch{}}if(e===`is`){if(Mt||Nt)try{q(n)}catch{}else try{n.setAttribute(e,``)}catch{}}},hn=function(e){let t=ve(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;typeof i!=`string`||P[U(i)]||pn(e,r,i)}},gn=function(e){let t=[e];for(;t.length>0;){let e=t.pop();be(e)===T.element&&hn(e);let n=g(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},Y=function(e,t){return z?e===`patchsrc`||e===`for`&&t!==`label`&&t!==`output`:!1},_n=function(e){if(!z)return;let t=[e];for(;t.length>0;){let e=t.pop(),n=be(e);if(n===T.processingInstruction||n===T.comment&&b(Ke,e.data)){try{p(e)}catch{}continue}if(n===T.element){let t=e,n=U(xe(e));try{t.hasAttribute&&t.hasAttribute(`patchsrc`)&&t.removeAttribute(`patchsrc`),t.hasAttribute&&t.hasAttribute(`for`)&&Y(`for`,n)&&t.removeAttribute(`for`)}catch{}}let r=g(e);if(r)for(let e=r.length-1;e>=0;--e)t.push(r[e])}},X=function(e){let t=null,r=null;if(jt)e=`<remove></remove>`+e;else{let t=fe(e,/^[\r\n\t ]+/);r=t&&t[0]}H===`application/xhtml+xml`&&Yt===V&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=E?k(e):e;if(Yt===V)try{t=new l().parseFromString(i,H)}catch{}if(!t||!t.documentElement){t=st.createDocument(Yt,`template`,null);try{t.documentElement.innerHTML=Xt?D:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),Yt===V?ut.call(t,B?`html`:`body`)[0]:B?t.documentElement:a},Z=function(e){let t=x?x(e):e.ownerDocument;return ct.call(t||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},vn=function(e){return e=pe(e,ft,` `),e=pe(e,pt,` `),e=pe(e,mt,` `),e},Q=function(e){e.normalize();let t=x?x(e):e.ownerDocument,n=ct.call(t||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),r=n.nextNode();for(;r;)r.data=vn(r.data),r=n.nextNode();let i=e.querySelectorAll?.call(e,`template`);i&&ie(i,e=>{bn(e.content)&&Q(e.content)})},yn=function(e){let t=y?y(e):null;return typeof t!=`string`||U(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==ve(e)||typeof e.removeAttribute!=`function`||typeof e.removeAttributeNode!=`function`||typeof e.getAttributeNode!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==_(e)||e.childNodes!==g(e)},bn=function(e){if(!_||typeof e!=`object`||!e)return!1;try{return _(e)===T.documentFragment}catch{return!1}},xn=function(e){if(!_||typeof e!=`object`||!e)return!1;try{return typeof _(e)==`number`}catch{return!1}};function $(e,n,r){e.length!==0&&ie(e,e=>{e.call(t,n,r,W)})}let Sn=function(e,t){return!!(z&&e.hasChildNodes()&&!xn(e.firstElementChild)&&b(Ge,e.textContent)&&b(Ge,e.innerHTML)||z&&e.namespaceURI===V&&Ye[t]&&(xn(e.firstElementChild)||typeof e.textContent==`string`&&b(Xe[t],e.textContent))||e.nodeType===T.processingInstruction||z&&e.nodeType===T.comment&&b(Ke,e.data))},Cn=function(e,t){return e instanceof RegExp?b(e,t):e instanceof Function&&!!e(t,...[...arguments].slice(2))},wn=function(e,t,n){if(!I[t]&&An(t)&&Cn(F.tagNameCheck,t))return!1;if(Rt&&!Vt[t]){let t=ge(e),r=g(e);if(r&&t){let i=r.length;for(let a=i-1;a>=0;--a){let i=e===n?ee(r[a],!0):r[a];t.insertBefore(i,re(e))}}}return q(e),!0},Tn=function(e,t,n,r){return e.length===0?t:t===n||t===r?C(t):t},En=function(e,t){return e===t||ge(e)!==null?!1:(zt&&gn(e),!0)},Dn=function(e,n){if($(M.beforeSanitizeElements,e,null),En(e,n))return!0;if(yn(e))return q(e),!0;let r=U(xe(e));if(N=Tn(M.uponSanitizeElement,N,xt,kt),$(M.uponSanitizeElement,e,{tagName:r,allowedTags:N}),En(e,n))return!0;if(Sn(e,r))return q(e),!0;if(I[r]||!(L.tagCheck instanceof Function&&L.tagCheck(r))&&!N[r]){let t=wn(e,r,n);return t===!1&&$(M.afterSanitizeElements,e,null),t}if(be(e)===T.element&&!fn(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&b(qe,e.innerHTML))return q(e),!0;if(R&&e.nodeType===T.text){let n=vn(e.textContent);e.textContent!==n&&(se(t.removed,{element:e.cloneNode()}),e.textContent=n)}return $(M.afterSanitizeElements,e,null),!1},On=function(e,t,r){if(Ct[t]||Y(t,e)||Ft&&(t===`id`||t===`name`)&&(r in n||r in on))return!1;let i=P[t]||L.attributeCheck instanceof Function&&L.attributeCheck(t,e);return Tt&&b(ht,t)||wt&&b(gt,t)?!0:i?Gt[t]||b(bt,pe(r,vt,``))||(t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&me(r,`data:`)===0&&Ut[e]||Et&&!b(_t,pe(r,vt,``))?!0:!r:An(e)&&Cn(F.tagNameCheck,e)&&Cn(F.attributeNameCheck,t,e)||t===`is`&&F.allowCustomizedBuiltInElements&&Cn(F.tagNameCheck,r)},kn=S({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),An=function(e){return!kn[ue(e)]&&b(yt,e)},jn=function(e,t,n,r){if(E&&typeof d==`object`&&typeof d.getAttributeType==`function`&&!n)switch(d.getAttributeType(e,t)){case`TrustedHTML`:return k(r);case`TrustedScriptURL`:return A(r)}return r},Mn=function(e,t,n,r){try{return n?e.setAttributeNS(n,t,r):e.setAttribute(t,r),!yn(e)||(q(e),!1)}catch{return J(t,e),!1}},Nn=function(e){$(M.beforeSanitizeAttributes,e,null);let n=e.attributes;if(!n||yn(e))return;P=Tn(M.uponSanitizeAttribute,P,St,At);let r={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:P,forceKeepAttr:void 0},i=n.length,a=U(e.nodeName);for(;i--;){let o=n[i],s=o.name,c=o.namespaceURI,l=o.value,u=U(s),d=l,f=s===`value`?d:he(d),ee=!1;if(r.attrName=u,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,$(M.uponSanitizeAttribute,e,r),f=r.attrValue,It&&(u===`id`||u===`name`)&&me(f,Lt)!==0&&(J(s,e,o),f=Lt+f,ee=!0),z&&b(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,f)){J(s,e,o);continue}if(u===`attributename`&&fe(f,`href`)){J(s,e,o);continue}if(!r.forceKeepAttr){if(!r.keepAttr){J(s,e,o);continue}if(!Dt&&b(Je,f)){J(s,e,o);continue}if(R&&(f=vn(f)),!On(a,u,f)){J(s,e,o);continue}f=jn(a,u,c,f),f!==d&&Mn(e,s,c,f)&&ee&&oe(t.removed)}}$(M.afterSanitizeAttributes,e,null)},Pn=function(e){let t=null,n=Z(e);for($(M.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if($(M.uponSanitizeShadowNode,t,null),Dn(t,e),Nn(t),bn(t.content)&&Pn(t.content),be(t)===T.element){let e=_e(t);bn(e)&&(Fn(e),Pn(e))}$(M.afterSanitizeShadowDOM,e,null)},Fn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){Pn(e.shadow);continue}let n=e.node,r=be(n)===T.element,i=g(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=y?y(n):null;if(typeof e==`string`&&U(e)===`template`){let e=n.content;bn(e)&&t.push({node:e,shadow:null})}}if(r){let e=_e(n);bn(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(Xt=!e,Xt&&(e=`<!-->`),typeof e!=`string`&&!xn(e)&&(e=Se(e),typeof e!=`string`))throw ye(`dirty is not a string, aborting`);if(!t.isSupported)return e;Ot?(N=kt,P=At):G(n),(M.uponSanitizeElement.length>0||M.uponSanitizeAttribute.length>0)&&(N=C(N)),M.uponSanitizeAttribute.length>0&&(P=C(P)),t.removed=[];let c=zt&&typeof e!=`string`&&xn(e);if(c){_n(e);let t=xe(e);if(typeof t==`string`){let n=U(t);if(!N[n]||I[n])throw mn(e),ye(`root node is forbidden and cannot be sanitized in-place`)}if(yn(e))throw mn(e),ye(`root node is clobbered and cannot be sanitized in-place`);try{Fn(e)}catch(t){throw mn(e),t}}else if(xn(e))i=X(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===T.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),Fn(i);else{if(!Mt&&!R&&!B&&e.indexOf(`<`)===-1)return E&&Pt?k(e):e;if(i=X(e),!i)return Mt?null:Pt?D:``}i&&jt&&q(i.firstChild);let l=c?e:i;try{let e=Z(l);for(;o=e.nextNode();)Dn(o,l),Nn(o),bn(o.content)&&Pn(o.content)}catch(n){throw c&&(mn(e),ie(t.removed,e=>{e.element&&gn(e.element)})),n}if(c)return ie(t.removed,e=>{e.element&&gn(e.element)}),R&&Q(e),e;if(Mt){if(R&&Q(i),Nt)for(s=lt.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(P.shadowroot||P.shadowrootmode)&&(s=dt.call(r,s,!0)),s}let u=B?i.outerHTML:i.innerHTML;return B&&N[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&b(Ue,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
|
|
3
3
|
`+u),R&&(u=vn(u)),E&&Pt?k(u):u},t.setConfig=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};G(e),Ot=!0,kt=N,At=P},t.clearConfig=function(){W=null,Ot=!1,kt=null,At=null,E=rt,D=``},t.isValidAttribute=function(e,t,n){W||G({});let r=U(e),i=U(t);return On(r,i,n)},t.addHook=function(e,t){typeof t==`function`&&v(M,e)&&se(M[e],t)},t.removeHook=function(e,t){if(v(M,e)){if(t!==void 0){let n=ae(M[e],t);return n===-1?void 0:ce(M[e],n,1)[0]}return oe(M[e])}},t.removeHooks=function(e){v(M,e)&&(M[e]=[])},t.removeAllHooks=function(){M=$e()},t}var D=nt();function rt(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var it=rt();function at(e){it=e}var O={exec:()=>null};function k(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function A(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(j.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var ot=((e=``)=>{try{return!!RegExp(`(?<=1)(?<!1)`+e)}catch{return!1}})(),j={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:k(e=>RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:k(e=>RegExp(`^ {0,${e}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:k(e=>RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:k(e=>RegExp(`^ {0,${e}}#`)),htmlBeginRegex:k(e=>RegExp(`^ {0,${e}}<(?:[a-z].*>|!--)`,`i`)),blockquoteBeginRegex:k(e=>RegExp(`^ {0,${e}}>`))},st=/^(?:[ \t]*(?:\n|$))+/,ct=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,lt=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,ut=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,dt=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,M=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,ft=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,pt=A(ft).replace(/bull/g,M).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),mt=A(ft).replace(/bull/g,M).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ht=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,gt=/^[^\n]+/,_t=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,vt=A(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,_t).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),yt=A(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,M).getRegex(),bt=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,N=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,xt=A(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,N).replace(`tag`,bt).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),P=e=>A(ht).replace(`hr`,ut).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,e).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,bt).getRegex(),St=P(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),F=P(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),I={blockquote:A(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,F).getRegex(),code:ct,def:vt,fences:lt,heading:dt,hr:ut,html:xt,lheading:pt,list:yt,newline:st,paragraph:St,table:O,text:gt},Ct=A(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,ut).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,bt).getRegex(),L={...I,lheading:mt,table:Ct,paragraph:A(ht).replace(`hr`,ut).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,Ct).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,bt).getRegex()},wt={...I,html:A(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,N).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:O,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:A(ht).replace(`hr`,ut).replace(`heading`,` *#{1,6} *[^
|
|
4
4
|
]`).replace(`lheading`,pt).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},Tt=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Et=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Dt=/^( {2,}|\\)\n(?!\s*$)/,R=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,z=/[\p{P}\p{S}]/u,B=/[\s\p{P}\p{S}]/u,Ot=/[^\s\p{P}\p{S}]/u,kt=A(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,B).getRegex(),At=/[\p{Pi}\p{Ps}"']/u,jt=/(?!~)[\p{P}\p{S}]/u,Mt=/(?!~)[\s\p{P}\p{S}]/u,Nt=/(?:[^\s\p{P}\p{S}]|~)/u,Pt=A(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,ot?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),Ft=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,It=A(Ft,`u`).replace(/punct/g,z).getRegex(),Lt=A(Ft,`u`).replace(/punct/g,jt).getRegex(),Rt=A(/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,`u`).replace(/openQuote/g,At).replace(/punct/g,z).getRegex(),zt=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Bt=A(zt,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),Vt=A(zt,`gu`).replace(/notPunctSpace/g,Nt).replace(/punctSpace/g,Mt).replace(/punct/g,jt).getRegex(),Ht=A(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),Ut=A(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),Wt=A(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),Gt=A(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,z).getRegex(),Kt=A(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,B).replace(/punct/g,z).getRegex(),qt=A(/\\(punct)/,`gu`).replace(/punct/g,z).getRegex(),Jt=A(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),V=A(N).replace(`(?:-->|$)`,`-->`).getRegex(),Yt=A(`^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,V).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Xt=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Zt=A(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,Xt).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Qt=A(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Xt).replace(`ref`,_t).getRegex(),$t=A(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,_t).getRegex(),en=A(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,Qt).replace(`nolink`,$t).getRegex(),tn=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,nn={_backpedal:O,anyPunctuation:qt,autolink:Jt,blockSkip:Pt,br:Dt,code:Et,del:O,delLDelim:O,delRDelim:O,emStrongLDelim:It,emStrongRDelimAst:Bt,emStrongRDelimUnd:Ut,escape:Tt,link:Zt,nolink:$t,punctuation:kt,reflink:Qt,reflinkSearch:en,tag:Yt,text:R,url:O},rn={...nn,emStrongLDelim:Rt,emStrongRDelimAst:Ht,emStrongRDelimUnd:Wt,link:A(/^!?\[(label)\]\((.*?)\)/).replace(`label`,Xt).getRegex(),reflink:A(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,Xt).getRegex()},H={...nn,emStrongRDelimAst:Vt,emStrongLDelim:Lt,delLDelim:Gt,delRDelim:Kt,url:A(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,tn).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:A(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,tn).getRegex()},an={...H,br:A(Dt).replace(`{2,}`,`*`).getRegex(),text:A(H.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},U={normal:I,gfm:L,pedantic:wt},W={normal:nn,gfm:H,breaks:an,pedantic:rn},on={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},sn=e=>on[e];function G(e,t){if(t){if(j.escapeTest.test(e))return e.replace(j.escapeReplace,sn)}else if(j.escapeTestNoEncode.test(e))return e.replace(j.escapeReplaceNoEncode,sn);return e}function cn(e){try{e=encodeURI(e).replace(j.percentDecode,`%`)}catch{return null}return e}function ln(e,t){let n=e.replace(j.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(j.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t){if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``)}for(;r<n.length;r++)n[r]=n[r].trim().replace(j.slashPipe,`|`);return n}function K(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function un(e){let t=e.split(`
|
|
@@ -69,4 +69,4 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
69
69
|
`)),r=[];continue}r.push(a)}return{done:t,tail:r.join(`
|
|
70
70
|
`),tailInFence:i!==null}}var $=/(`+)([^`]+?)\1|\*\*(?=\S)([^*\n]+?)(?<=\S)\*\*|__(?=\S)([^_\n]+?)(?<=\S)__|(?<![\w*])\*(?=\S)([^*\n]+?)(?<=\S)\*(?![\w*])|(?<![\w_])_(?=\S)([^_\n]+?)(?<=\S)_(?![\w_])/g;function Sn(e,t){let n=e.ownerDocument,r=0;$.lastIndex=0;for(let i=$.exec(t);i!==null;i=$.exec(t)){i.index>r&&e.append(n.createTextNode(t.slice(r,i.index)));let a,o;i[2]===void 0?i[3]===void 0?i[4]===void 0?i[5]===void 0?(a=`em`,o=i[6]??``):(a=`em`,o=i[5]):(a=`strong`,o=i[4]):(a=`strong`,o=i[3]):(a=`code`,o=i[2]);let s=n.createElement(a);s.textContent=o,e.append(s),r=i.index+i[0].length}r<t.length&&e.append(n.createTextNode(t.slice(r)))}var Cn=n(),wn=!1;function Tn(){wn||(wn=!0,D.addHook(`afterSanitizeAttributes`,e=>{e.tagName===`A`&&(e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`))}))}var En={USE_PROFILES:{html:!0},ADD_ATTR:[`target`],FORBID_TAGS:[`style`,`form`,`input`,`button`,`iframe`,`object`,`embed`]};function Dn(e){Tn();let t=Z.parse(e,{async:!1,gfm:!0,breaks:!1});return D.sanitize(t,En)}var On=`Copy`,kn=`Copied`;function An(e){for(let t of e.querySelectorAll(`pre`)){if(t.querySelector(`[data-code-head]`)||t.hasAttribute(`data-stream-tail`))continue;let e=document.createElement(`div`);e.className=r.codeHead??``,e.setAttribute(`data-code-head`,``);let n=yn(t.querySelector(`code`)),i=document.createElement(`span`);i.className=r.codeLang??``,i.textContent=n,e.append(i);let a=document.createElement(`button`);a.type=`button`,a.className=r.copy??``,a.setAttribute(`data-copy`,``),a.setAttribute(`aria-label`,`Copy code`),a.textContent=On,e.append(a),t.prepend(e)}}function jn(e){let t=e.target?.closest(`[data-copy]`);if(!t)return;e.preventDefault();let n=t.closest(`pre`),r=n?.querySelector(`code`),i=n?.querySelector(`[data-code-head]`);In(r?r.textContent??``:Array.from(n?.childNodes??[]).filter(e=>e!==i).map(e=>e.textContent??``).join(``)).then(e=>{t.textContent=e?kn:`Copy failed`,setTimeout(()=>{t.textContent=On},1500)})}var Mn=400;function Nn({text:e}){let t=(0,Q.useRef)(null),n=(0,Q.useRef)(new Map),i=(0,Q.useRef)(null),a=(0,Q.useMemo)(()=>xn(e),[e]),o=a.done.length===0?``:`${a.done.length}:${a.done[a.done.length-1].length}`,s=(0,Q.useMemo)(()=>{let e=n.current;return a.done.map(t=>{let n=e.get(t);return n===void 0&&(n=Dn(t),e.size>=Mn&&e.clear(),e.set(t,n)),n}).join(``)},[o]);return(0,Q.useEffect)(()=>{let e=t.current;e&&(e.innerHTML=s,An(e),i.current=null)},[s]),(0,Q.useEffect)(()=>{let e=t.current;if(!e)return;let n=a.tailInFence,r=i.current;if((!r||r.parentNode!==e||r.tagName===`PRE`!==n)&&(r?.remove(),r=document.createElement(n?`pre`:`p`),r.setAttribute(`data-stream-tail`,``),e.append(r),i.current=r),r.replaceChildren(),n){let e=document.createElement(`code`),t=a.tail.indexOf(`
|
|
71
71
|
`);e.textContent=t===-1?``:a.tail.slice(t+1),r.append(e)}else r.style.whiteSpace=`pre-wrap`,Sn(r,a.tail)},[a,s]),(0,Cn.jsx)(`div`,{ref:t,className:`${r.markdown} ${r.streaming}`,onClick:jn,"data-markdown-streaming":``})}function Pn({text:e}){let t=(0,Q.useMemo)(()=>Dn(e),[e]),n=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let e=n.current;e&&An(e)},[t]),(0,Cn.jsx)(`div`,{ref:n,className:r.markdown,onClick:jn,dangerouslySetInnerHTML:{__html:t}})}function Fn({text:e,streaming:t}){return t?(0,Cn.jsx)(Nn,{text:e},`streaming`):(0,Cn.jsx)(Pn,{text:e},`final`)}async function In(e){try{if(navigator.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.append(t),t.select();let n=document.execCommand(`copy`);return t.remove(),n}catch{return!1}}export{Fn as RenderedMarkdown,Dn as renderMarkdown};
|
|
72
|
-
//# sourceMappingURL=MessageMarkdownRenderer-
|
|
72
|
+
//# sourceMappingURL=MessageMarkdownRenderer-FjjkPKA2.js.map
|