silvery 0.19.1 → 0.21.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/README.md +9 -4
- package/dist/Text-Lq0dmj8-.mjs +239 -0
- package/dist/Text-Lq0dmj8-.mjs.map +1 -0
- package/dist/UPNG-Bo33r8rA.mjs +3 -0
- package/dist/UPNG-DosRPdF4.mjs +5075 -0
- package/dist/UPNG-DosRPdF4.mjs.map +1 -0
- package/dist/__vite-browser-external-2447137e-D_JM6skp.mjs +6 -0
- package/dist/__vite-browser-external-2447137e-D_JM6skp.mjs.map +1 -0
- package/dist/{animation-Cn64yepo.mjs → animation-ZMN2_XKv.mjs} +2 -2
- package/dist/animation-ZMN2_XKv.mjs.map +1 -0
- package/dist/{ansi-Cc33mW54.d.mts → ansi-2Xn0yatP.d.mts} +1 -1
- package/dist/{ansi-Cc33mW54.d.mts.map → ansi-2Xn0yatP.d.mts.map} +1 -1
- package/dist/{ansi-CLOitHKx.mjs → ansi-D1KQMAbf.mjs} +1 -1
- package/dist/{ansi-CLOitHKx.mjs.map → ansi-D1KQMAbf.mjs.map} +1 -1
- package/dist/ansi-yC4RyBNY.mjs +22441 -0
- package/dist/ansi-yC4RyBNY.mjs.map +1 -0
- package/dist/apng-CR08rIaH.mjs +58 -0
- package/dist/apng-CR08rIaH.mjs.map +1 -0
- package/dist/apng-DaHfVaVI.mjs +3 -0
- package/dist/assets/resvgjs.darwin-arm64-BtufyGW1.node +0 -0
- package/dist/assets/skia.darwin-arm64-DQs5sT6N.node +0 -0
- package/dist/backend-B-WYLUib.mjs +13396 -0
- package/dist/backend-B-WYLUib.mjs.map +1 -0
- package/dist/backends-CUtan80W.mjs +3 -0
- package/dist/backends-DIVYzKqd.mjs +1083 -0
- package/dist/backends-DIVYzKqd.mjs.map +1 -0
- package/dist/bound-term-0sPrrzH1.d.mts +4640 -0
- package/dist/bound-term-0sPrrzH1.d.mts.map +1 -0
- package/dist/canvas-1v7dPT-_.mjs +3 -0
- package/dist/canvas-CSuPOMNt.mjs +1442 -0
- package/dist/canvas-CSuPOMNt.mjs.map +1 -0
- package/dist/{chunk-Vs_PY4HZ.mjs → chunk-BSw8zbkd.mjs} +1 -1
- package/dist/cli-dvo0r2fs.mjs +4 -0
- package/dist/compare-CQodSH4G.mjs +376 -0
- package/dist/compare-CQodSH4G.mjs.map +1 -0
- package/dist/compare-DHlcxEYA.mjs +3 -0
- package/dist/context-BU5LkkIy.mjs.map +1 -1
- package/dist/devtools-CJdt5H0X.mjs +2 -0
- package/dist/{devtools-DxkSLXDA.mjs → devtools-DcQjgyjL.mjs} +5 -4
- package/dist/{devtools-DxkSLXDA.mjs.map → devtools-DcQjgyjL.mjs.map} +1 -1
- package/dist/easing-BI-ASGMO.d.mts +24 -0
- package/dist/easing-BI-ASGMO.d.mts.map +1 -0
- package/dist/{eta-Bb3RH3wh.mjs → eta-CJlGH06n.mjs} +1 -1
- package/dist/{eta-Bb3RH3wh.mjs.map → eta-CJlGH06n.mjs.map} +1 -1
- package/dist/flexily-zero-adapter-C3Vj0fPt.mjs +306 -0
- package/dist/flexily-zero-adapter-C3Vj0fPt.mjs.map +1 -0
- package/dist/{flexily-zero-adapter-CMxXhdOL.mjs → flexily-zero-adapter-C4lW_Ov5.mjs} +1 -1
- package/dist/fonts-BFmhXDv7.mjs +88 -0
- package/dist/fonts-BFmhXDv7.mjs.map +1 -0
- package/dist/gif-C_AjaT9d.mjs +188 -0
- package/dist/gif-C_AjaT9d.mjs.map +1 -0
- package/dist/gif-DaC4XrxA.mjs +3 -0
- package/dist/gifenc-BOUT-KFB.mjs +730 -0
- package/dist/gifenc-BOUT-KFB.mjs.map +1 -0
- package/dist/image-C2Birh2x.mjs +1252 -0
- package/dist/image-C2Birh2x.mjs.map +1 -0
- package/dist/index-BUMxS65f.d.mts +453 -0
- package/dist/index-BUMxS65f.d.mts.map +1 -0
- package/dist/{index-D3saHouR.d.mts → index-CSQf13CI.d.mts} +1057 -1133
- package/dist/index-CSQf13CI.d.mts.map +1 -0
- package/dist/{index-BXslOebb.d.mts → index-Cl9KKjQ_.d.mts} +4919 -3921
- package/dist/index-Cl9KKjQ_.d.mts.map +1 -0
- package/dist/index-XbNrPhWl.d.mts +336 -0
- package/dist/index-XbNrPhWl.d.mts.map +1 -0
- package/dist/index.d.mts +8 -5
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +14 -12
- package/dist/index.mjs.map +1 -1
- package/dist/key-mapping-CS-YD_cD.mjs +132 -0
- package/dist/key-mapping-CS-YD_cD.mjs.map +1 -0
- package/dist/key-mapping-Yn-Jgrij.mjs +3 -0
- package/dist/{layout-engine-B6Cdz1yZ.mjs → layout-engine-C07LEXWT.mjs} +1 -1
- package/dist/layout-engine-C2px0RJE.mjs +67 -0
- package/dist/layout-engine-C2px0RJE.mjs.map +1 -0
- package/dist/layout-signals-Cnw6xk8Q.mjs +988 -0
- package/dist/layout-signals-Cnw6xk8Q.mjs.map +1 -0
- package/dist/mouse-events-Dki3ISIp.mjs +1044 -0
- package/dist/mouse-events-Dki3ISIp.mjs.map +1 -0
- package/dist/{multi-progress-Bq9Oi_WI.mjs → multi-progress-CIRjrzma.mjs} +3 -3
- package/dist/{multi-progress-Bq9Oi_WI.mjs.map → multi-progress-CIRjrzma.mjs.map} +1 -1
- package/dist/{multi-progress-DAQC7eap.d.mts → multi-progress-DHZ2xUT2.d.mts} +2 -2
- package/dist/{multi-progress-DAQC7eap.d.mts.map → multi-progress-DHZ2xUT2.d.mts.map} +1 -1
- package/dist/{node-BeWlnCPY.mjs → node-CjM5Rt-M.mjs} +4 -4
- package/dist/node-CjM5Rt-M.mjs.map +1 -0
- package/dist/playwright-D5YiZcNS.mjs +76397 -0
- package/dist/playwright-D5YiZcNS.mjs.map +1 -0
- package/dist/png-codec-Dp84742B.mjs +36 -0
- package/dist/png-codec-Dp84742B.mjs.map +1 -0
- package/dist/png-codec-QwOtJ8Zs.mjs +3 -0
- package/dist/progress-DB_Xo071.mjs +675 -0
- package/dist/progress-DB_Xo071.mjs.map +1 -0
- package/dist/{progress-bar-CXE5Qfkd.mjs → progress-bar-oJwq22CR.mjs} +4 -4
- package/dist/{progress-bar-CXE5Qfkd.mjs.map → progress-bar-oJwq22CR.mjs.map} +1 -1
- package/dist/rasterizer-BRXrDdWx.mjs +3 -0
- package/dist/rasterizer-CpEhJvdR.mjs +296 -0
- package/dist/rasterizer-CpEhJvdR.mjs.map +1 -0
- package/dist/reconciler-DldIJB93.mjs +2083 -0
- package/dist/reconciler-DldIJB93.mjs.map +1 -0
- package/dist/{render-string-0mN37DLf.mjs → render-string-BcoCpjCB.mjs} +1 -1
- package/dist/{render-string-X-CxpTdZ.mjs → render-string-DkQacASz.mjs} +2728 -555
- package/dist/render-string-DkQacASz.mjs.map +1 -0
- package/dist/resvg-js-DkOndZI3.mjs +203 -0
- package/dist/resvg-js-DkOndZI3.mjs.map +1 -0
- package/dist/runtime.d.mts +3 -2
- package/dist/runtime.mjs +3 -3
- package/dist/schemes-JjNp4aSl.mjs +2611 -0
- package/dist/schemes-JjNp4aSl.mjs.map +1 -0
- package/dist/{spinner-CGo34vyR.d.mts → spinner-CZINHpkV.d.mts} +2 -2
- package/dist/{spinner-CGo34vyR.d.mts.map → spinner-CZINHpkV.d.mts.map} +1 -1
- package/dist/{spinner-CeOmcuw_.mjs → spinner-D9lrHr8s.mjs} +7 -7
- package/dist/spinner-D9lrHr8s.mjs.map +1 -0
- package/dist/src-5w9QR6_8.mjs +1071 -0
- package/dist/src-5w9QR6_8.mjs.map +1 -0
- package/dist/src-BNTToU7l.mjs +4387 -0
- package/dist/src-BNTToU7l.mjs.map +1 -0
- package/dist/{src-Bd7ezSgG.mjs → src-BR4xNwdG.mjs} +10436 -2622
- package/dist/src-BR4xNwdG.mjs.map +1 -0
- package/dist/{types-Bk2yw9Qj.mjs → src-DKp-_OFG.mjs} +34 -94
- package/dist/src-DKp-_OFG.mjs.map +1 -0
- package/dist/src-bt8wSrfJ.mjs +258 -0
- package/dist/src-bt8wSrfJ.mjs.map +1 -0
- package/dist/src-e33Y6kNJ.mjs +3 -0
- package/dist/src-iDwu25UD.mjs +1814 -0
- package/dist/src-iDwu25UD.mjs.map +1 -0
- package/dist/steps-Bp2uNqnn.d.mts +202 -0
- package/dist/steps-Bp2uNqnn.d.mts.map +1 -0
- package/dist/svg-15lZZzxq.mjs +486 -0
- package/dist/svg-15lZZzxq.mjs.map +1 -0
- package/dist/svg-Cz0UXcDj.mjs +255 -0
- package/dist/svg-Cz0UXcDj.mjs.map +1 -0
- package/dist/svg-DY72a4HK.mjs +3 -0
- package/dist/svg-g1D6ErwR.d.mts +82 -0
- package/dist/svg-g1D6ErwR.d.mts.map +1 -0
- package/dist/term.d.mts +3 -0
- package/dist/term.mjs +9 -0
- package/dist/term.mjs.map +1 -0
- package/dist/theme.d.mts +95 -2
- package/dist/theme.d.mts.map +1 -0
- package/dist/theme.mjs +9 -3
- package/dist/theme.mjs.map +1 -0
- package/dist/{types-BH_v3iMT.d.mts → types-kt_fKR37.d.mts} +2 -15
- package/dist/types-kt_fKR37.d.mts.map +1 -0
- package/dist/ui/animation.d.mts +2 -1
- package/dist/ui/animation.mjs +1 -1
- package/dist/ui/ansi.d.mts +1 -1
- package/dist/ui/ansi.mjs +1 -1
- package/dist/ui/cli.d.mts +3 -3
- package/dist/ui/cli.mjs +5 -5
- package/dist/ui/display.d.mts +1 -1
- package/dist/ui/image.d.mts +2 -2
- package/dist/ui/image.mjs +2 -2
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/input.mjs +4 -2
- package/dist/ui/input.mjs.map +1 -1
- package/dist/ui/progress.d.mts +5 -249
- package/dist/ui/progress.mjs +5 -858
- package/dist/ui/react.d.mts +1 -1
- package/dist/ui/react.mjs +2 -2
- package/dist/ui/recording-chrome-react.d.mts +21 -0
- package/dist/ui/recording-chrome-react.d.mts.map +1 -0
- package/dist/ui/recording-chrome-react.mjs +105 -0
- package/dist/ui/recording-chrome-react.mjs.map +1 -0
- package/dist/ui/recording-chrome.d.mts +2 -0
- package/dist/ui/recording-chrome.mjs +2 -0
- package/dist/ui/utils.mjs +1 -1
- package/dist/ui/wrappers.d.mts +3 -3
- package/dist/ui/wrappers.mjs +2 -2
- package/dist/ui.d.mts +7 -6
- package/dist/ui.mjs +8 -7
- package/dist/{useLatest-Bg2x4bfP.d.mts → useLatest-DRDDVwjh.d.mts} +5 -25
- package/dist/useLatest-DRDDVwjh.d.mts.map +1 -0
- package/dist/{with-text-input-CRfoiFFG.d.mts → with-text-input-YeohVLeo.d.mts} +4 -55
- package/dist/with-text-input-YeohVLeo.d.mts.map +1 -0
- package/dist/wrapper-C70ATkVv.mjs +3527 -0
- package/dist/wrapper-C70ATkVv.mjs.map +1 -0
- package/dist/{wrappers-UTADQkSY.mjs → wrappers-BCUYITrY.mjs} +5 -157
- package/dist/wrappers-BCUYITrY.mjs.map +1 -0
- package/dist/{yoga-adapter-8oRGRw8V.mjs → yoga-adapter-BnZX1PAY.mjs} +28 -2
- package/dist/yoga-adapter-BnZX1PAY.mjs.map +1 -0
- package/dist/yoga-adapter-DxgsQ_gg.mjs +2 -0
- package/dist/zipBundle-3nqeDRtm.mjs +3 -0
- package/dist/zipBundle-VNAYFmqJ.mjs +2003 -0
- package/dist/zipBundle-VNAYFmqJ.mjs.map +1 -0
- package/package.json +20 -9
- package/dist/animation-Cn64yepo.mjs.map +0 -1
- package/dist/cli-BKp0YtBD.mjs +0 -4
- package/dist/devtools-9QY4teqI.mjs +0 -2
- package/dist/flexily-zero-adapter-BlQa46nr.mjs +0 -3385
- package/dist/flexily-zero-adapter-BlQa46nr.mjs.map +0 -1
- package/dist/image-CTII5QWI.mjs +0 -477
- package/dist/image-CTII5QWI.mjs.map +0 -1
- package/dist/index-BXslOebb.d.mts.map +0 -1
- package/dist/index-BnA7mNpo.d.mts +0 -175
- package/dist/index-BnA7mNpo.d.mts.map +0 -1
- package/dist/index-D3saHouR.d.mts.map +0 -1
- package/dist/layout-engine-ClUgv6jB.mjs +0 -50
- package/dist/layout-engine-ClUgv6jB.mjs.map +0 -1
- package/dist/node-BeWlnCPY.mjs.map +0 -1
- package/dist/reconciler-Cwgm8hRR.mjs +0 -8459
- package/dist/reconciler-Cwgm8hRR.mjs.map +0 -1
- package/dist/render-string-X-CxpTdZ.mjs.map +0 -1
- package/dist/spinner-CeOmcuw_.mjs.map +0 -1
- package/dist/src-B5GjfG7g.mjs +0 -4305
- package/dist/src-B5GjfG7g.mjs.map +0 -1
- package/dist/src-Bd7ezSgG.mjs.map +0 -1
- package/dist/src-CChwjk0Z.mjs +0 -738
- package/dist/src-CChwjk0Z.mjs.map +0 -1
- package/dist/src-NCKb8kE5.mjs +0 -2660
- package/dist/src-NCKb8kE5.mjs.map +0 -1
- package/dist/types-BH_v3iMT.d.mts.map +0 -1
- package/dist/types-Bk2yw9Qj.mjs.map +0 -1
- package/dist/ui/progress.d.mts.map +0 -1
- package/dist/ui/progress.mjs.map +0 -1
- package/dist/useLatest-Bg2x4bfP.d.mts.map +0 -1
- package/dist/with-text-input-CRfoiFFG.d.mts.map +0 -1
- package/dist/wrappers-UTADQkSY.mjs.map +0 -1
- package/dist/yoga-adapter-8oRGRw8V.mjs.map +0 -1
- package/dist/yoga-adapter-D_CcxSt5.mjs +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mouse-events-Dki3ISIp.mjs","names":[],"sources":["../packages/ag/src/focus-queries.ts","../packages/ag/src/interactive-signals.ts","../packages/ag/src/tree-utils.ts","../packages/ag-term/src/mouse-events.ts"],"sourcesContent":["/**\n * Focus Queries — pure tree query functions for the silvery focus system.\n *\n * All functions are pure: no state, no React, no side effects.\n * They operate on the SilveryNode tree to resolve focusable elements,\n * tab order, spatial navigation targets, and explicit focus links.\n */\n\nimport type { AgNode, Rect } from \"./types\"\n\n// ============================================================================\n// Focusable Detection\n// ============================================================================\n\n/** Check if a node has the focusable prop set to true (or truthy). */\nfunction isFocusable(node: AgNode): boolean {\n if (node.hidden) return false\n const props = node.props as Record<string, unknown>\n return Boolean(props.focusable) && props.display !== \"none\"\n}\n\n/** Check if a node creates a focus scope (isolated Tab cycle). */\nfunction isFocusScope(node: AgNode): boolean {\n const props = node.props as Record<string, unknown>\n return Boolean(props.focusScope)\n}\n\n// ============================================================================\n// Tree Queries\n// ============================================================================\n\n/**\n * Walk up from node to nearest ancestor (or self) with focusable prop.\n * Useful for mouse clicks — find the focusable target from a deep text node.\n */\nexport function findFocusableAncestor(node: AgNode): AgNode | null {\n let current: AgNode | null = node\n while (current) {\n if (isFocusable(current)) return current\n current = current.parent\n }\n return null\n}\n\n/**\n * DFS traversal of focusable nodes in tab order, optionally scoped.\n *\n * When scope is provided, only nodes within that scope subtree are included.\n * If a focusScope node is encountered during traversal, its children are\n * skipped (they belong to a different scope), unless that scope IS the\n * provided scope node.\n */\nexport function getTabOrder(root: AgNode, scope?: AgNode): AgNode[] {\n const result: AgNode[] = []\n const walkRoot = scope ?? root\n\n function walk(node: AgNode): void {\n // Skip hidden nodes (Suspense) and display: none — entire subtree is excluded\n if (node.hidden) return\n const props = node.props as Record<string, unknown>\n if (props.display === \"none\") return\n\n // If this node is a focusScope boundary and it's NOT the walk root,\n // skip its children — they belong to a different Tab cycle.\n // The focusScope node itself may still be focusable (included below).\n if (node !== walkRoot && isFocusScope(node)) {\n // Include the scope node itself if it's focusable, but don't descend\n if (isFocusable(node)) {\n result.push(node)\n }\n return\n }\n\n if (isFocusable(node)) {\n result.push(node)\n }\n\n for (const child of node.children) {\n walk(child)\n }\n }\n\n walk(walkRoot)\n return result\n}\n\n/**\n * Walk up from a node to find the nearest ancestor (or self) with focusScope prop.\n * Returns the testID of the enclosing scope, or null if none found.\n */\nexport function findEnclosingScope(node: AgNode): string | null {\n let current: AgNode | null = node\n while (current) {\n if (isFocusScope(current)) {\n const props = current.props as Record<string, unknown>\n return typeof props.testID === \"string\" ? props.testID : null\n }\n current = current.parent\n }\n return null\n}\n\n/**\n * Find a node by testID in the subtree rooted at root.\n * DFS, returns the first match.\n */\nexport function findByTestID(root: AgNode, testID: string): AgNode | null {\n const props = root.props as Record<string, unknown>\n if (props.testID === testID) return root\n\n for (const child of root.children) {\n const found = findByTestID(child, testID)\n if (found) return found\n }\n return null\n}\n\n// ============================================================================\n// Spatial Navigation\n// ============================================================================\n\n/**\n * Compute center point of a Rect.\n */\nfunction rectCenter(rect: Rect): { cx: number; cy: number } {\n return {\n cx: rect.x + rect.width / 2,\n cy: rect.y + rect.height / 2,\n }\n}\n\n/**\n * Check if a candidate point falls within a 45-degree cone from source\n * in the given direction (tvOS-style spatial navigation).\n *\n * The cone extends from the center of the source rect in the specified\n * direction with a 45-degree half-angle (90-degree total aperture).\n */\nfunction isInCone(\n source: { cx: number; cy: number },\n candidate: { cx: number; cy: number },\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n): boolean {\n const dx = candidate.cx - source.cx\n const dy = candidate.cy - source.cy\n\n // Must be in the correct general direction\n switch (direction) {\n case \"up\":\n if (dy >= 0) return false\n // Within 45-degree cone: |dx| <= |dy|\n return Math.abs(dx) <= Math.abs(dy)\n case \"down\":\n if (dy <= 0) return false\n return Math.abs(dx) <= Math.abs(dy)\n case \"left\":\n if (dx >= 0) return false\n return Math.abs(dy) <= Math.abs(dx)\n case \"right\":\n if (dx <= 0) return false\n return Math.abs(dy) <= Math.abs(dx)\n }\n}\n\n/**\n * Euclidean distance between two points.\n */\nfunction distance(a: { cx: number; cy: number }, b: { cx: number; cy: number }): number {\n const dx = a.cx - b.cx\n const dy = a.cy - b.cy\n return Math.sqrt(dx * dx + dy * dy)\n}\n\n/**\n * Find the nearest focusable candidate in a given direction using\n * 45-degree cone heuristic (tvOS-style spatial navigation).\n *\n * From the center of the source rect, draw a cone in the target direction.\n * Filter candidates whose center falls within the cone. Pick the closest\n * by Euclidean distance.\n *\n * @param from - The currently focused node\n * @param direction - Direction to search\n * @param candidates - All focusable nodes to consider\n * @param layoutFn - Function to get screen rect for a node (null if not laid out)\n */\nexport function findSpatialTarget(\n from: AgNode,\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n candidates: AgNode[],\n layoutFn: (node: AgNode) => Rect | null,\n): AgNode | null {\n const sourceRect = layoutFn(from)\n if (!sourceRect) return null\n\n const source = rectCenter(sourceRect)\n\n let best: AgNode | null = null\n let bestDist = Infinity\n\n for (const candidate of candidates) {\n if (candidate === from) continue\n\n const candidateRect = layoutFn(candidate)\n if (!candidateRect) continue\n\n const target = rectCenter(candidateRect)\n\n if (!isInCone(source, target, direction)) continue\n\n const dist = distance(source, target)\n if (dist < bestDist) {\n bestDist = dist\n best = candidate\n }\n }\n\n return best\n}\n\n// ============================================================================\n// Explicit Focus Links\n// ============================================================================\n\n/**\n * Check if a node has an explicit nextFocus{Direction} override prop.\n *\n * These props allow components to declare explicit focus targets for\n * spatial navigation, overriding the cone heuristic.\n *\n * @param node - The node to check\n * @param direction - Direction string: \"up\", \"down\", \"left\", \"right\"\n * @returns The testID of the explicit target, or null\n */\nexport function getExplicitFocusLink(node: AgNode, direction: string): string | null {\n const props = node.props as Record<string, unknown>\n // Props follow the pattern: nextFocusUp, nextFocusDown, nextFocusLeft, nextFocusRight\n const propName = `nextFocus${direction.charAt(0).toUpperCase()}${direction.slice(1)}`\n const value = props[propName]\n return typeof value === \"string\" ? value : null\n}\n","/**\n * Interactive Signal Utilities\n *\n * Writer functions for per-node interactive state. State machines call these\n * during event processing to update hovered/armed/selected/focused/dropTarget\n * on AgNode instances.\n *\n * Each setter returns true if the value actually changed — callers can use\n * this for efficient dirty tracking (skip re-render if nothing changed).\n *\n * The InteractiveState object is lazily created on first write to avoid\n * allocating on nodes that never receive interactive events.\n */\n\nimport type { AgNode, InteractiveState } from \"./types\"\n\n// ============================================================================\n// Lazy Initialization\n// ============================================================================\n\n/**\n * Ensure a node has an InteractiveState object, creating one if needed.\n * Returns the (possibly newly created) state.\n */\nexport function ensureInteractiveState(node: AgNode): InteractiveState {\n if (!node.interactiveState) {\n node.interactiveState = {\n hovered: false,\n armed: false,\n selected: false,\n focused: false,\n dropTarget: false,\n }\n }\n return node.interactiveState\n}\n\n// ============================================================================\n// Individual Setters (return true if value changed)\n// ============================================================================\n\n/**\n * Set the hovered state. Returns true if the value changed.\n */\nexport function setHovered(node: AgNode, value: boolean): boolean {\n const state = ensureInteractiveState(node)\n if (state.hovered === value) return false\n state.hovered = value\n return true\n}\n\n/**\n * Set the armed state (pointer-down, awaiting click). Returns true if the value changed.\n */\nexport function setArmed(node: AgNode, value: boolean): boolean {\n const state = ensureInteractiveState(node)\n if (state.armed === value) return false\n state.armed = value\n return true\n}\n\n/**\n * Set the selected state. Returns true if the value changed.\n */\nexport function setSelected(node: AgNode, value: boolean): boolean {\n const state = ensureInteractiveState(node)\n if (state.selected === value) return false\n state.selected = value\n return true\n}\n\n/**\n * Set the focused state. Returns true if the value changed.\n */\nexport function setFocused(node: AgNode, value: boolean): boolean {\n const state = ensureInteractiveState(node)\n if (state.focused === value) return false\n state.focused = value\n return true\n}\n\n/**\n * Set the dropTarget state. Returns true if the value changed.\n */\nexport function setDropTarget(node: AgNode, value: boolean): boolean {\n const state = ensureInteractiveState(node)\n if (state.dropTarget === value) return false\n state.dropTarget = value\n return true\n}\n\n// ============================================================================\n// Batch Operations\n// ============================================================================\n\n/**\n * Clear all interactive state on a node.\n * Useful on pointer-up, focus-change, or when a node is removed from the tree.\n *\n * Sets the interactiveState reference to null to free the object.\n */\nexport function clearInteractiveState(node: AgNode): void {\n node.interactiveState = null\n}\n","/**\n * Shared tree utilities for silvery event systems.\n *\n * Functions used by both focus-events.ts and mouse-events.ts.\n */\n\nimport type { AgNode, Rect } from \"./types.js\"\n\n/**\n * Collect the ancestor path from target to root (inclusive).\n */\nexport function getAncestorPath(node: AgNode): AgNode[] {\n const path: AgNode[] = []\n let current: AgNode | null = node\n while (current) {\n path.push(current)\n current = current.parent\n }\n return path\n}\n\n/**\n * Check if a point is inside a rect.\n */\nexport function pointInRect(x: number, y: number, rect: Rect): boolean {\n return x >= rect.x && x < rect.x + rect.width && y >= rect.y && y < rect.y + rect.height\n}\n","/**\n * DOM-level Mouse Events for silvery\n *\n * Provides React DOM-compatible mouse event infrastructure:\n * - SilveryMouseEvent / SilveryWheelEvent synthetic event objects\n * - Tree-based hit testing using scrollRect (replaces manual HitRegistry)\n * - Event dispatch with bubbling (target → root, stopPropagation support)\n * - Double-click detection (300ms / 2-cell threshold)\n * - mouseenter/mouseleave tracking (no bubble, like DOM spec)\n */\n\nimport { createLogger } from \"loggily\"\nimport type { FocusManager } from \"@silvery/ag/focus-manager\"\nimport { findFocusableAncestor } from \"@silvery/ag/focus-queries\"\nimport type { ParsedMouse } from \"./mouse\"\nimport { getAncestorPath, pointInRect } from \"@silvery/ag/tree-utils\"\nimport type { AgNode, Rect, TextProps, UserSelect } from \"@silvery/ag/types\"\nimport type { SelectionScope } from \"@silvery/headless/selection\"\nimport { setHovered, setArmed } from \"@silvery/ag/interactive-signals\"\nimport { displayWidthAnsi, wrapText } from \"./unicode\"\nimport type { TerminalBuffer } from \"./buffer\"\n\n// Re-export canonical types from ag (avoid duplicate type definitions)\nexport type { SilveryMouseEvent, SilveryWheelEvent } from \"@silvery/ag/mouse-event-types\"\nimport type { SilveryMouseEvent, SilveryWheelEvent } from \"@silvery/ag/mouse-event-types\"\n\nconst mouseLog = createLogger(\"silvery:mouse\")\n\n// ============================================================================\n// Mouse Event Handler Props — canonical location is @silvery/ag\n// ============================================================================\n\nimport type { MouseEventProps } from \"@silvery/ag/mouse-event-types\"\n\n// ============================================================================\n// Event Factory\n// ============================================================================\n\n/**\n * Create a synthetic mouse event.\n *\n * Modifier keys are merged from two sources:\n * - SGR mouse protocol: reports Ctrl, Alt/Meta, Shift (reliable)\n * - Keyboard tracking: reports Super/Cmd, Hyper, CapsLock, NumLock (via Kitty protocol)\n *\n * `metaKey` = keyboard-tracked Super (Cmd on macOS). SGR \"meta\" maps to `altKey`.\n */\nexport function createMouseEvent(\n type: SilveryMouseEvent[\"type\"],\n x: number,\n y: number,\n target: AgNode,\n parsed: ParsedMouse,\n keyboardMods?: KeyboardModifierState,\n): SilveryMouseEvent {\n let propagationStopped = false\n let defaultPrevented = false\n const metaKey = keyboardMods?.super ?? false\n if (type === \"click\" || type === \"mousedown\") {\n mouseLog.debug?.(\n `createMouseEvent(${type}) metaKey=${metaKey} keyboardMods.super=${keyboardMods?.super}`,\n )\n } else if (type === \"wheel\") {\n const targetId = (target.props as Record<string, unknown>).id ?? \"\"\n mouseLog.debug?.(\n `createMouseEvent(wheel) x=${x} y=${y} delta=${parsed.delta ?? 0} target=${target.type}#${targetId}`,\n )\n } else if (type === \"mouseup\") {\n mouseLog.debug?.(`createMouseEvent(mouseup) x=${x} y=${y} button=${parsed.button}`)\n }\n\n return {\n type,\n x,\n y,\n clientX: parsed.clientX,\n clientY: parsed.clientY,\n button: parsed.button,\n altKey: parsed.meta,\n ctrlKey: parsed.ctrl,\n metaKey,\n shiftKey: parsed.shift,\n timeStamp: parsed.receivedAt ?? performance.now(),\n inputBatchId: parsed.inputBatchId,\n target,\n currentTarget: target,\n nativeEvent: parsed,\n get propagationStopped() {\n return propagationStopped\n },\n get defaultPrevented() {\n return defaultPrevented\n },\n stopPropagation() {\n propagationStopped = true\n },\n preventDefault() {\n defaultPrevented = true\n },\n }\n}\n\n/**\n * Create a synthetic wheel event.\n */\nexport function createWheelEvent(\n x: number,\n y: number,\n target: AgNode,\n parsed: ParsedMouse,\n keyboardMods?: KeyboardModifierState,\n): SilveryWheelEvent {\n const base = createMouseEvent(\"wheel\", x, y, target, parsed, keyboardMods) as SilveryWheelEvent\n base.deltaY = parsed.delta ?? 0\n base.deltaX = 0\n return base\n}\n\n// ============================================================================\n// Hit Testing\n// ============================================================================\n\n/** Position property on a Box that takes the node out of normal flow. */\nfunction isAbsolutePositioned(node: AgNode): boolean {\n const p = node.props as { position?: string }\n return p.position === \"absolute\"\n}\n\n/**\n * Geometry-based hit test for absolute-positioned descendants.\n *\n * Walks the whole subtree rooted at `node` in tree order. For each\n * absolute-positioned descendant whose scrollRect contains (x, y), recurse\n * into it as a standalone hit-test (which finds the deepest in-flow child\n * under that absolute) and track the latest-in-tree hit — that one paints\n * on top (third pass in render order uses natural child order, so later =\n * higher z).\n *\n * Respects pointerEvents=\"none\" on the absolute root and its ancestors,\n * and overflow:hidden/scroll clipping on ancestors up to `node`.\n *\n * Returns null if no absolute descendant covers (x, y).\n */\nfunction hitTestAbsoluteDescendants(\n node: AgNode,\n x: number,\n y: number,\n ancestorClipRect: Rect | null,\n): AgNode | null {\n let result: AgNode | null = null\n\n for (const child of node.children) {\n // Honor pointerEvents=\"none\" on any ancestor of the absolute node.\n const cp = child.props as { pointerEvents?: string; overflow?: string }\n if (cp.pointerEvents === \"none\") continue\n\n // Compute the effective clip rect for this child's descendants.\n let childClip = ancestorClipRect\n if (cp.overflow === \"hidden\" || cp.overflow === \"scroll\") {\n const cr = child.scrollRect\n if (cr) {\n childClip = childClip ? intersectRect(childClip, cr) : cr\n }\n }\n\n if (isAbsolutePositioned(child) && child.scrollRect) {\n // If an ancestor clips and the absolute node is outside the clip, skip.\n const clipExcludes = ancestorClipRect && !pointInRect(x, y, ancestorClipRect)\n if (!clipExcludes && pointInRect(x, y, child.scrollRect)) {\n // Recurse INTO the absolute node to find the deepest descendant\n // under it. We use hitTestInFlow plus a nested absolute pass so\n // nested absolutes also resolve geometrically.\n const nestedAbs = hitTestAbsoluteDescendants(child, x, y, null)\n const hit = nestedAbs ?? hitTestInFlow(child, x, y)\n if (hit) {\n // Later-in-tree wins for z-order (paints on top in absolute pass).\n result = hit\n }\n }\n }\n\n // Continue searching this child's subtree for deeper absolute descendants\n // (an absolute node can contain nested absolute nodes; we still want the\n // latest one to win).\n const deeper = hitTestAbsoluteDescendants(child, x, y, childClip)\n if (deeper) result = deeper\n }\n\n return result\n}\n\n/** Compute the intersection of two rects; returns a zero-size rect if disjoint. */\nfunction intersectRect(a: Rect, b: Rect): Rect {\n const x1 = Math.max(a.x, b.x)\n const y1 = Math.max(a.y, b.y)\n const x2 = Math.min(a.x + a.width, b.x + b.width)\n const y2 = Math.min(a.y + a.height, b.y + b.height)\n return { x: x1, y: y1, width: Math.max(0, x2 - x1), height: Math.max(0, y2 - y1) }\n}\n\n/**\n * In-flow (non-absolute) DFS hit test. Used by both `hitTest` after the\n * absolute pass, and by `hitTestAbsoluteDescendants` when recursing into a\n * matched absolute to find the deepest in-flow descendant under it.\n *\n * Skips absolute children — they're handled by the absolute pass at the\n * entry point (`hitTest`).\n */\nfunction hitTestInFlow(node: AgNode, x: number, y: number): AgNode | null {\n const rect = node.scrollRect\n if (!rect) return null\n\n if (!pointInRect(x, y, rect)) return null\n\n const props = node.props as { overflow?: string; pointerEvents?: string }\n if (props.pointerEvents === \"none\") return null\n\n const clips = props.overflow === \"hidden\" || props.overflow === \"scroll\"\n\n // DFS: reverse child order (last child = top z-order).\n for (let i = node.children.length - 1; i >= 0; i--) {\n const child = node.children[i]!\n if (isAbsolutePositioned(child)) continue // handled by absolute pass\n\n if (clips) {\n const childRect = child.scrollRect\n if (childRect && !pointInRect(x, y, rect)) {\n continue\n }\n }\n const hit = hitTestInFlow(child, x, y)\n if (hit) return hit\n }\n\n // Virtual text children with inlineRects (nested Text inside Text).\n if (node.type === \"silvery-text\") {\n for (let i = node.children.length - 1; i >= 0; i--) {\n const child = node.children[i]!\n if (child.inlineRects) {\n for (const inlineRect of child.inlineRects) {\n if (pointInRect(x, y, inlineRect)) return child\n }\n }\n }\n }\n\n return node\n}\n\n/**\n * Tree-based hit test: find the deepest node whose scrollRect contains (x, y).\n *\n * Uses reverse child order (last sibling wins = highest z-order, like DOM).\n * Respects overflow:hidden clipping and pointerEvents=\"none\".\n *\n * ### Absolute-positioned nodes escape parent bounds\n *\n * Absolute descendants participate in hit-testing by GEOMETRY, not by\n * tree order / parent rect containment. An absolute child can be placed\n * outside its parent's bounding rect (e.g., a popover anchored near a\n * viewport edge); it still occupies screen cells at its own geometry and\n * must be hittable.\n *\n * The hit test runs an \"absolute pass\" first that walks the whole subtree\n * for absolute descendants and returns the latest-in-tree hit (matching\n * the three-pass render order where absolute children paint on top of\n * normal + sticky content). If no absolute descendant covers the point,\n * it falls through to standard in-flow DFS.\n *\n * A recursive sub-call (via `hitTest(absolute, ...)`) would re-run the\n * absolute pass on that absolute's subtree — which is correct: nested\n * absolutes also need geometry-based hit testing.\n */\nexport function hitTest(node: AgNode, x: number, y: number): AgNode | null {\n // 1. Absolute pass: find the topmost absolute descendant under (x, y).\n // Respects pointerEvents and overflow:hidden/scroll clipping on\n // ancestors.\n const absHit = hitTestAbsoluteDescendants(node, x, y, null)\n if (absHit) return absHit\n\n // 2. In-flow DFS (classic tree walk).\n return hitTestInFlow(node, x, y)\n}\n\n// ============================================================================\n// Selection Hit Testing\n// ============================================================================\n\n/**\n * Resolve the effective userSelect value for a node.\n * \"auto\" inherits from parent; root defaults to \"text\".\n */\nexport function resolveUserSelect(node: AgNode): \"none\" | \"text\" | \"contain\" {\n let current: AgNode | null = node\n while (current) {\n const props = current.props as { userSelect?: UserSelect }\n const value = props.userSelect\n if (value === \"none\" || value === \"text\" || value === \"contain\") return value\n // \"auto\" or undefined — walk up\n current = current.parent\n }\n // Root default is \"text\"\n return \"text\"\n}\n\n/**\n * Selection hit test: find the deepest node whose text is selectable at (x, y).\n *\n * Unlike pointer hitTest, this:\n * - Ignores pointerEvents (a node with pointerEvents=\"none\" can still be selectable)\n * - Respects userSelect (a node with userSelect=\"none\" is not a selection target)\n */\nexport function selectionHitTest(node: AgNode, x: number, y: number): AgNode | null {\n return selectionHitTestInner(node, x, y, true)\n}\n\nexport interface SelectionCell {\n col: number\n row: number\n}\n\nexport interface SelectionAnchorFromPointOptions {\n root: AgNode | null\n buffer: TerminalBuffer | null\n x: number\n y: number\n forceBufferSelection?: boolean\n}\n\nexport interface SelectionAnchorResolution {\n /** Semantic document node selected by the point, or null for raw buffer selection. */\n node: AgNode | null\n /** Cell used as the selection anchor after document/padding snapping. */\n cell: SelectionCell\n /** Original pointer-down cell, before nearest-text snapping. */\n downCell: SelectionCell\n /** Document/contain boundaries for the selected node, nearest first. */\n boundaries: SelectionBoundary[]\n /** True when Shift/raw terminal selection bypasses document scopes. */\n forceBufferSelection: boolean\n}\n\ninterface SelectableRow {\n row: number\n first: number\n last: number\n nearest: number\n}\n\nfunction selectionCellFromPoint(x: number, y: number): SelectionCell {\n return {\n col: Math.max(0, Math.floor(x)),\n row: Math.max(0, Math.floor(y)),\n }\n}\n\n/**\n * Find the nearest selectable rendered-text cell inside a container rect.\n *\n * This is the terminal-target equivalent of the browser's\n * caretPositionFromPoint behavior for text-containing boxes: a mousedown in\n * padding or interior whitespace can still start text selection by snapping to\n * nearby rendered text, while genuinely text-free containers return null.\n */\nexport function nearestSelectableCellFromPoint(\n buffer: TerminalBuffer,\n rect: Rect,\n x: number,\n y: number,\n): SelectionCell | null {\n if (rect.width <= 0 || rect.height <= 0) return null\n\n const left = Math.max(0, Math.floor(rect.x))\n const right = Math.min(buffer.width - 1, Math.ceil(rect.x + rect.width) - 1)\n const top = Math.max(0, Math.floor(rect.y))\n const bottom = Math.min(buffer.height - 1, Math.ceil(rect.y + rect.height) - 1)\n if (left > right || top > bottom) return null\n\n const pointerCol = Math.max(0, Math.floor(x))\n const pointerRow = Math.max(0, Math.floor(y))\n const rows: SelectableRow[] = []\n\n for (let row = top; row <= bottom; row++) {\n let first = -1\n let last = -1\n let nearest = -1\n let nearestDistance = Number.POSITIVE_INFINITY\n\n for (let col = left; col <= right; col++) {\n if (!buffer.isCellSelectable(col, row)) continue\n if (first === -1) first = col\n last = col\n\n const distance = Math.abs(col - pointerCol)\n if (distance < nearestDistance) {\n nearest = col\n nearestDistance = distance\n }\n }\n\n if (first !== -1) rows.push({ row, first, last, nearest })\n }\n\n if (rows.length === 0) return null\n\n const firstRow = rows[0]!\n const lastRow = rows[rows.length - 1]!\n const sameRow = rows.find((candidate) => candidate.row === pointerRow)\n if (sameRow) {\n if (pointerCol < sameRow.first) return { col: sameRow.first, row: sameRow.row }\n if (pointerCol > sameRow.last)\n return { col: Math.min(right, sameRow.last + 1), row: sameRow.row }\n return { col: sameRow.nearest, row: sameRow.row }\n }\n\n if (pointerRow < firstRow.row) return { col: firstRow.first, row: firstRow.row }\n if (pointerRow > lastRow.row) return { col: lastRow.last, row: lastRow.row }\n\n for (let i = 0; i < rows.length; i++) {\n const candidate = rows[i]!\n if (candidate.row > pointerRow) return { col: candidate.first, row: candidate.row }\n }\n\n return { col: lastRow.last, row: lastRow.row }\n}\n\n/**\n * Resolve the semantic selection anchor for a terminal pointer position.\n *\n * This is the single owner for mousedown selection semantics:\n * - exact selectable glyph / empty rendered line hits\n * - `userSelect=\"none\"` pointer targets that block document selection\n * - nearest rendered text-cell fallback from blank padding inside text containers\n * - `userSelect=\"contain\"` / document boundary discovery\n * - Shift/raw buffer selection that bypasses document scopes\n */\nexport function resolveSelectionAnchorFromPoint(\n options: SelectionAnchorFromPointOptions,\n): SelectionAnchorResolution | null {\n const { root, buffer, x, y } = options\n const forceBufferSelection = options.forceBufferSelection === true\n const downCell = selectionCellFromPoint(x, y)\n let anchorCell = downCell\n\n if (!root) {\n return forceBufferSelection\n ? {\n node: null,\n cell: anchorCell,\n downCell,\n boundaries: [],\n forceBufferSelection,\n }\n : null\n }\n\n const pointerTarget = hitTest(root, x, y)\n const pointerBlocksSelection =\n pointerTarget !== null && resolveUserSelect(pointerTarget) === \"none\"\n let selectedNode = !pointerBlocksSelection ? selectionHitTest(root, x, y) : null\n\n if (\n selectedNode === null &&\n !forceBufferSelection &&\n !pointerBlocksSelection &&\n pointerTarget !== null &&\n buffer\n ) {\n let current: AgNode | null = pointerTarget\n while (current && selectedNode === null) {\n const rect = current.scrollRect\n const nearest = rect ? nearestSelectableCellFromPoint(buffer, rect, x, y) : null\n if (!nearest) {\n current = current.parent\n continue\n }\n const nearestHit = selectionHitTest(root, nearest.col, nearest.row)\n if (nearestHit) {\n anchorCell = nearest\n selectedNode = nearestHit\n }\n current = current.parent\n }\n }\n\n if (selectedNode === null && !forceBufferSelection) return null\n\n return {\n node: selectedNode,\n cell: anchorCell,\n downCell,\n boundaries: selectedNode ? findSelectionBoundaries(selectedNode) : [],\n forceBufferSelection,\n }\n}\n\nfunction selectionHitTestInner(\n node: AgNode,\n x: number,\n y: number,\n allowRowFallback: boolean,\n): AgNode | null {\n const rect = node.scrollRect\n if (!rect) return null\n\n if (!pointInRect(x, y, rect)) return null\n\n // userSelect=\"none\" blocks this subtree from selection hit testing\n // But only if explicitly \"none\" — \"auto\" inherits and root defaults to \"text\"\n const props = node.props as { overflow?: string; userSelect?: UserSelect }\n const resolved = resolveUserSelect(node)\n if (resolved === \"none\") return null\n\n // Check overflow clipping (same as pointer hitTest)\n const clips = props.overflow === \"hidden\" || props.overflow === \"scroll\"\n\n // DFS: check children in reverse order (last child = top z-order)\n for (let i = node.children.length - 1; i >= 0; i--) {\n const child = node.children[i]!\n const childRect = child.scrollRect\n if (clips) {\n if (childRect && !pointInRect(x, y, rect)) {\n continue\n }\n }\n if (childRect && pointInRect(x, y, childRect)) {\n if (resolveUserSelect(child) === \"none\") return null\n const hit = selectionHitTestInner(child, x, y, false)\n if (hit) return hit\n continue\n }\n const hit = selectionHitTestInner(child, x, y, false)\n if (hit) return hit\n }\n\n // Check virtual text children with inlineRects\n if (node.type === \"silvery-text\") {\n for (let i = node.children.length - 1; i >= 0; i--) {\n const child = node.children[i]!\n if (child.inlineRects) {\n for (const inlineRect of child.inlineRects) {\n if (pointInRect(x, y, inlineRect)) return child\n }\n }\n }\n }\n\n if (node.type === \"silvery-text\") {\n return pointHitsRenderedTextRow(node, y) ? node : null\n }\n\n return allowRowFallback ? findTextNodeOnRow(node, y) : null\n}\n\n/**\n * Find the contain boundary for a node.\n * Walks up to the nearest `userSelect=\"contain\"` ancestor and returns its scrollRect\n * as a SelectionScope. Returns null if no contain boundary exists.\n */\nexport function findContainBoundary(node: AgNode): SelectionScope | null {\n let current: AgNode | null = node\n while (current) {\n const props = current.props as { userSelect?: UserSelect }\n if (props.userSelect === \"contain\") {\n const rect = current.scrollRect\n if (rect) {\n return {\n top: rect.y,\n bottom: rect.y + rect.height - 1,\n left: rect.x,\n right: rect.x + rect.width - 1,\n }\n }\n }\n current = current.parent\n }\n return null\n}\n\nexport interface SelectionBoundary {\n node: AgNode\n scope: SelectionScope\n hardContain: boolean\n}\n\nfunction nodeSelectionScope(node: AgNode): SelectionScope | null {\n const rect = node.scrollRect\n if (!rect) return null\n // Reject degenerate (zero-area) rects. Virtual text children expose\n // `inlineRects` for hit testing but carry a placeholder scrollRect of\n // {0,0,0,0}; treating that as a selection scope would produce\n // {top:0, bottom:-1, left:0, right:-1} and clamp every selection\n // anchor/head to (0,0) — silently breaking double/triple-click word\n // selection that goes through `clampToScope`.\n if (rect.width <= 0 || rect.height <= 0) return null\n if (node.type === \"silvery-text\") {\n const textBounds = renderedTextBounds(node)\n if (textBounds === null) return null\n return {\n top: rect.y,\n bottom: rect.y + textBounds.height - 1,\n left: rect.x,\n right: rect.x + textBounds.width - 1,\n }\n }\n\n return {\n top: rect.y,\n bottom: rect.y + rect.height - 1,\n left: rect.x,\n right: rect.x + rect.width - 1,\n }\n}\n\nfunction collectText(node: AgNode): string {\n if (node.type === \"silvery-text\" && node.textContent !== undefined) return node.textContent\n let out = \"\"\n for (const child of node.children) out += collectText(child)\n return out\n}\n\nfunction renderedTextLines(node: AgNode): string[] {\n const rect = node.scrollRect\n if (!rect || rect.width <= 0) return []\n const text = collectText(node)\n if (text.length === 0) return []\n const props = node.props as TextProps\n const wrap = props.wrap\n const shouldWrap =\n wrap !== false && wrap !== \"truncate\" && wrap !== \"truncate-end\" && wrap !== \"clip\"\n return shouldWrap ? wrapText(text, rect.width, true, false) : text.split(\"\\n\")\n}\n\nfunction renderedTextBounds(node: AgNode): { width: number; height: number } | null {\n const rect = node.scrollRect\n if (!rect || rect.width <= 0 || rect.height <= 0) return null\n const lines = renderedTextLines(node)\n if (lines.length === 0) return null\n let maxWidth = 0\n for (const line of lines) {\n maxWidth = Math.max(maxWidth, Math.min(rect.width, displayWidthAnsi(line)))\n }\n if (maxWidth <= 0) return null\n return { width: maxWidth, height: Math.min(rect.height, lines.length) }\n}\n\nfunction pointHitsRenderedTextRow(node: AgNode, y: number): boolean {\n const rect = node.scrollRect\n if (!rect) return false\n const row = y - rect.y\n if (row < 0 || row >= rect.height) return false\n const lines = renderedTextLines(node)\n return lines[row] !== undefined\n}\n\nfunction findTextNodeOnRow(node: AgNode, y: number): AgNode | null {\n for (let i = node.children.length - 1; i >= 0; i--) {\n const child = node.children[i]!\n const hit = findTextNodeOnRow(child, y)\n if (hit) return hit\n }\n return node.type === \"silvery-text\" && pointHitsRenderedTextRow(node, y) ? node : null\n}\n\n/**\n * Return the selectable document-ancestor chain for a node, nearest first.\n *\n * This is the DOM-like selection path: ordinary selectable nodes create\n * semantic selection regions, while `userSelect=\"contain\"` marks a CSS-style\n * hard containment boundary that selection must not escape.\n */\nexport function findSelectionBoundaries(node: AgNode): SelectionBoundary[] {\n const boundaries: SelectionBoundary[] = []\n let current: AgNode | null = node\n while (current) {\n const resolved = resolveUserSelect(current)\n if (resolved !== \"none\") {\n const scope = nodeSelectionScope(current)\n if (scope) {\n const props = current.props as { userSelect?: UserSelect }\n boundaries.push({ node: current, scope, hardContain: props.userSelect === \"contain\" })\n }\n }\n current = current.parent\n }\n return boundaries\n}\n\n// ============================================================================\n// Draggable Resolution\n// ============================================================================\n\n/**\n * Check if a node has draggable=true.\n * Unlike userSelect, draggable is NOT inherited — only the exact node is checked.\n * Ancestors' draggable prop has no effect on children.\n */\nexport function resolveNodeDraggable(node: AgNode | null): boolean {\n if (!node) return false\n const props = node.props as { draggable?: boolean }\n return props.draggable === true\n}\n\n// ============================================================================\n// Event Dispatch\n// ============================================================================\n\n/** Map event type to the handler prop name */\nconst EVENT_HANDLER_MAP: Record<string, string & keyof MouseEventProps> = {\n click: \"onClick\",\n dblclick: \"onDoubleClick\",\n tripleclick: \"onTripleClick\",\n mousedown: \"onMouseDown\",\n mouseup: \"onMouseUp\",\n mousemove: \"onMouseMove\",\n mouseenter: \"onMouseEnter\",\n mouseleave: \"onMouseLeave\",\n wheel: \"onWheel\",\n}\n\n/**\n * Dispatch a mouse event through the render tree with DOM-style bubbling.\n *\n * Bubbles from target → root, calling the appropriate handler on each node.\n * stopPropagation() halts bubbling. mouseenter/mouseleave do NOT bubble (DOM spec).\n */\nexport function dispatchMouseEvent(event: SilveryMouseEvent): void {\n const handlerProp = EVENT_HANDLER_MAP[event.type]\n if (!handlerProp) return\n\n // mouseenter/mouseleave don't bubble (DOM spec)\n const noBubble = event.type === \"mouseenter\" || event.type === \"mouseleave\"\n\n if (noBubble) {\n // Only fire on the target itself\n const handler = (event.target.props as Record<string, unknown>)[handlerProp] as\n | ((e: SilveryMouseEvent) => void)\n | undefined\n if (handler) {\n const mutableEvent = event as { currentTarget: AgNode }\n mutableEvent.currentTarget = event.target\n handler(event)\n }\n return\n }\n\n // Bubble phase: fire from target up to root\n const path = getAncestorPath(event.target)\n for (const node of path) {\n if (event.propagationStopped) break\n\n const handler = (node.props as Record<string, unknown>)[handlerProp] as\n | ((e: SilveryMouseEvent) => void)\n | undefined\n if (handler) {\n const mutableEvent = event as { currentTarget: AgNode }\n mutableEvent.currentTarget = node\n handler(event)\n }\n }\n}\n\n// ============================================================================\n// Click-Count Detection (single / double / triple)\n// ============================================================================\n\n/**\n * Click-count state tracker.\n *\n * Counts up to 3 consecutive clicks within `MULTI_CLICK_TIME_MS` and\n * `MULTI_CLICK_DISTANCE` cells of each other on the same button. After\n * count reaches 3, the next click resets to 1 (matching DOM behavior:\n * `MouseEvent.detail` increments to 3, then a new click chain starts).\n *\n * `DoubleClickState` is kept as a backwards-compatible alias.\n */\nexport interface ClickCountState {\n lastClickTime: number\n lastClickX: number\n lastClickY: number\n lastClickButton: number\n /** Number of consecutive clicks in the current chain (1, 2, or 3). */\n count: number\n}\n\n/** @deprecated Use `ClickCountState` instead — kept as an alias for callers\n * that haven't migrated to the count-based API. */\nexport type DoubleClickState = ClickCountState\n\nexport function createClickCountState(): ClickCountState {\n return {\n lastClickTime: 0,\n lastClickX: -999,\n lastClickY: -999,\n lastClickButton: -1,\n count: 0,\n }\n}\n\n/** @deprecated Use `createClickCountState()` instead. */\nexport const createDoubleClickState = createClickCountState\n\nconst MULTI_CLICK_TIME_MS = 300\nconst MULTI_CLICK_DISTANCE = 2\n\n/**\n * Determine the consecutive-click count for the current click.\n *\n * Returns 1 for a fresh click, 2 for a double-click, 3 for a triple-click.\n * Subsequent clicks restart the chain at 1.\n *\n * Updates `state` so the next call sees the right history.\n */\nexport function checkClickCount(\n state: ClickCountState,\n x: number,\n y: number,\n button: number,\n now: number = Date.now(),\n): 1 | 2 | 3 {\n const timeDelta = now - state.lastClickTime\n const dx = Math.abs(x - state.lastClickX)\n const dy = Math.abs(y - state.lastClickY)\n const sameButton = button === state.lastClickButton\n const inChain =\n sameButton &&\n timeDelta <= MULTI_CLICK_TIME_MS &&\n dx <= MULTI_CLICK_DISTANCE &&\n dy <= MULTI_CLICK_DISTANCE\n\n let count: 1 | 2 | 3\n if (!inChain || state.count >= 3) {\n count = 1\n } else if (state.count === 1) {\n count = 2\n } else {\n count = 3\n }\n\n state.lastClickTime = now\n state.lastClickX = x\n state.lastClickY = y\n state.lastClickButton = button\n state.count = count\n\n return count\n}\n\n/**\n * Check if a click qualifies as a double-click. Backwards-compatible\n * wrapper around `checkClickCount`.\n *\n * @deprecated Use `checkClickCount` and inspect the returned count\n * (`=== 2` for dblclick, `=== 3` for tripleclick).\n */\nexport function checkDoubleClick(\n state: ClickCountState,\n x: number,\n y: number,\n button: number,\n now: number = Date.now(),\n): boolean {\n return checkClickCount(state, x, y, button, now) === 2\n}\n\n// ============================================================================\n// Mouse Enter/Leave Tracking\n// ============================================================================\n\n/**\n * Compute mouseenter/mouseleave transitions between two ancestor paths.\n *\n * Returns { entered, left } — arrays of nodes that were entered or left.\n * Mirrors the DOM spec: fire mouseleave on nodes in prevPath not in nextPath,\n * and mouseenter on nodes in nextPath not in prevPath.\n */\nexport function computeEnterLeave(\n prevPath: AgNode[],\n nextPath: AgNode[],\n): { entered: AgNode[]; left: AgNode[] } {\n const prevSet = new Set(prevPath)\n const nextSet = new Set(nextPath)\n\n const entered = nextPath.filter((n) => !prevSet.has(n))\n const left = prevPath.filter((n) => !nextSet.has(n))\n\n return { entered, left }\n}\n\n// ============================================================================\n// High-Level Mouse Event Processor\n// ============================================================================\n\n/**\n * Options for creating a mouse event processor.\n */\nexport interface MouseEventProcessorOptions {\n /** Optional focus manager — enables click-to-focus behavior.\n * On mousedown, the deepest focusable ancestor of the hit target is focused. */\n focusManager?: FocusManager\n}\n\n/**\n * State for the mouse event processor.\n */\n/**\n * Keyboard modifier state tracked from Kitty protocol key events.\n * Merged into mouse events to provide accurate modifier detection\n * (SGR mouse protocol reports Ctrl/Alt/Shift but NOT Cmd/Super).\n */\nexport interface KeyboardModifierState {\n super: boolean\n hyper: boolean\n capsLock: boolean\n numLock: boolean\n}\n\nexport interface MouseEventProcessorState {\n doubleClick: DoubleClickState\n /** Previous hover path (for enter/leave tracking) */\n hoverPath: AgNode[]\n /** Whether the left button is currently down (for click detection) */\n mouseDownTarget: AgNode | null\n /** Optional ancestor that captures move/up for the active mouse press. */\n mouseCaptureTarget: AgNode | null\n /** Grace timer for captured drags that briefly leave the terminal bounds. */\n outsideCaptureReleaseTimer: ReturnType<typeof setTimeout> | null\n /** Last no-target mouse event observed while the grace timer is armed. */\n outsideCaptureReleaseMouse: ParsedMouse | null\n /** Optional focus manager for click-to-focus */\n focusManager?: FocusManager\n /** Modifier state from Kitty keyboard events, merged into mouse events */\n keyboardModifiers: KeyboardModifierState\n /** Aggregate `defaultPrevented` from the most recent click/dblclick/tripleclick\n * dispatch chain. Set by `processMouseEvent` on every mouseup so callers\n * (e.g., the runtime selection wiring) can gate auto-select on whether the\n * component tree consumed the click. Reset to false at the start of each\n * mouseup dispatch. */\n lastClickPrevented: boolean\n /** Last observed pointer coordinates (terminal cells). Updated on every\n * mouse event so consumers can re-hit-test after layout changes — e.g.\n * scroll-wheel events that reposition content under a stationary cursor.\n * null means the pointer has left the terminal bounds (clearHoverPath\n * ran) or no mouse event has arrived yet. */\n lastPointer: { x: number; y: number } | null\n}\n\nexport function createMouseEventProcessor(\n options?: MouseEventProcessorOptions,\n): MouseEventProcessorState {\n return {\n doubleClick: createDoubleClickState(),\n hoverPath: [],\n mouseDownTarget: null,\n mouseCaptureTarget: null,\n outsideCaptureReleaseTimer: null,\n outsideCaptureReleaseMouse: null,\n focusManager: options?.focusManager,\n keyboardModifiers: { super: false, hyper: false, capsLock: false, numLock: false },\n lastClickPrevented: false,\n lastPointer: null,\n }\n}\n\nfunction findMouseCaptureTarget(node: AgNode | null): AgNode | null {\n let current = node\n while (current) {\n const props = current.props as { mouseCapture?: boolean }\n if (props.mouseCapture === true) return current\n current = current.parent\n }\n return null\n}\n\nconst MOUSE_CAPTURE_OUTSIDE_GRACE_MS = 2000\n\nfunction mouseUpParsed(parsed: ParsedMouse): ParsedMouse {\n return parsed.action === \"up\" ? parsed : { ...parsed, action: \"up\" }\n}\n\n/**\n * Update keyboard modifier state from a parsed key event.\n * Call this for every keyboard event so mouse events can include accurate modifiers.\n */\nexport function updateKeyboardModifiers(\n state: MouseEventProcessorState,\n key: {\n super?: boolean\n hyper?: boolean\n capsLock?: boolean\n numLock?: boolean\n eventType?: string\n },\n): void {\n // On key release events, clear the modifier. On press/repeat, set it.\n const isRelease = key.eventType === \"release\"\n const prevSuper = state.keyboardModifiers.super\n if (key.super !== undefined) state.keyboardModifiers.super = isRelease ? false : key.super\n if (key.hyper !== undefined) state.keyboardModifiers.hyper = isRelease ? false : key.hyper\n if (key.capsLock !== undefined) state.keyboardModifiers.capsLock = key.capsLock\n if (key.numLock !== undefined) state.keyboardModifiers.numLock = key.numLock\n if (state.keyboardModifiers.super !== prevSuper) {\n mouseLog.debug?.(\n `keyboardModifiers.super: ${prevSuper} → ${state.keyboardModifiers.super} (key.super=${key.super}, eventType=${key.eventType})`,\n )\n }\n}\n\nfunction releaseMousePress(state: MouseEventProcessorState, parsed: ParsedMouse): boolean {\n let defaultPrevented = false\n const dispatchTarget = state.mouseCaptureTarget\n const releaseParsed = mouseUpParsed(parsed)\n cancelOutsideCaptureRelease(state)\n\n if (state.mouseDownTarget) {\n setArmed(state.mouseDownTarget, false)\n }\n\n if (dispatchTarget) {\n const event = createMouseEvent(\n \"mouseup\",\n releaseParsed.x,\n releaseParsed.y,\n dispatchTarget,\n releaseParsed,\n state.keyboardModifiers,\n )\n dispatchMouseEvent(event)\n defaultPrevented = event.defaultPrevented\n }\n\n state.lastClickPrevented = false\n state.mouseDownTarget = null\n state.mouseCaptureTarget = null\n return defaultPrevented\n}\n\nfunction cancelOutsideCaptureRelease(state: MouseEventProcessorState): void {\n if (state.outsideCaptureReleaseTimer !== null) {\n clearTimeout(state.outsideCaptureReleaseTimer)\n }\n state.outsideCaptureReleaseTimer = null\n state.outsideCaptureReleaseMouse = null\n}\n\nfunction scheduleOutsideCaptureRelease(state: MouseEventProcessorState, parsed: ParsedMouse): void {\n state.outsideCaptureReleaseMouse = parsed\n if (state.outsideCaptureReleaseTimer !== null) return\n\n state.outsideCaptureReleaseTimer = setTimeout(() => {\n const outsideMouse = state.outsideCaptureReleaseMouse ?? parsed\n releaseMousePress(state, outsideMouse)\n clearHoverPath(state, outsideMouse)\n }, MOUSE_CAPTURE_OUTSIDE_GRACE_MS)\n}\n\nfunction clearHoverPath(state: MouseEventProcessorState, parsed: ParsedMouse): void {\n for (const node of state.hoverPath.slice().reverse()) {\n setHovered(node, false)\n const leaveEvent = createMouseEvent(\n \"mouseleave\",\n parsed.x,\n parsed.y,\n node,\n parsed,\n state.keyboardModifiers,\n )\n dispatchMouseEvent(leaveEvent)\n }\n state.hoverPath = []\n // Pointer has left the terminal bounds — refreshHoverPath becomes a\n // no-op until a fresh in-bounds event arrives.\n state.lastPointer = null\n}\n\n/**\n * Re-resolve the hover path at the last known pointer coordinates and\n * dispatch enter/leave for any nodes that changed. Use after a layout\n * change that didn't come from a mouse event — most importantly:\n *\n * - Wheel scrolls (content shifts under a stationary cursor)\n * - Async content arrival (transcript leaf appended, list re-flowed)\n * - Programmatic re-layout (resize, theme switch)\n *\n * Without this, hover bg / hover-armed popovers stick to whatever AgNode\n * was under the cursor when the last mouse event fired, even after the\n * tree under that coordinate changed. Symptoms: persistent hover bg on\n * rows that have scrolled out from under the pointer; popover targets\n * arming on rows the cursor isn't over anymore.\n *\n * Idempotent — when nothing changed, no events fire and `state.hoverPath`\n * stays identity-equal. Safe to call every render commit.\n *\n * Bead: @km/code/sticky-hover-residue.\n */\nexport function refreshHoverPath(state: MouseEventProcessorState, root: AgNode): void {\n if (state.lastPointer === null) return\n // Don't override an active capture (drag in progress) — the dragger\n // owns the move/up routing until release.\n if (state.mouseCaptureTarget) return\n const { x, y } = state.lastPointer\n const target = hitTest(root, x, y)\n const newPath = target ? getAncestorPath(target) : []\n const { entered, left } = computeEnterLeave(state.hoverPath, newPath)\n if (entered.length === 0 && left.length === 0) return\n // Synthesize a `move`-shaped ParsedMouse so the mouseenter/mouseleave\n // events carry sane button/action metadata. Subscribers that key off\n // event.type (mouseenter/leave) — the typical case — don't care about\n // the underlying button value.\n const synthetic: ParsedMouse = {\n x,\n y,\n button: 0,\n action: \"move\",\n coordinateMode: \"cell\",\n shift: false,\n meta: false,\n ctrl: false,\n }\n for (const node of left) {\n setHovered(node, false)\n const ev = createMouseEvent(\"mouseleave\", x, y, node, synthetic, state.keyboardModifiers)\n dispatchMouseEvent(ev)\n }\n for (const node of entered.reverse()) {\n setHovered(node, true)\n const ev = createMouseEvent(\"mouseenter\", x, y, node, synthetic, state.keyboardModifiers)\n dispatchMouseEvent(ev)\n }\n state.hoverPath = newPath\n}\n\n/**\n * Process a raw ParsedMouse event and dispatch DOM-level events on the render tree.\n *\n * Call this for every SGR mouse event received. It handles:\n * - mousedown / mouseup\n * - click (on mouseup if same target as mousedown)\n * - dblclick (based on timing)\n * - mousemove + mouseenter/mouseleave\n * - wheel\n */\nexport function processMouseEvent(\n state: MouseEventProcessorState,\n parsed: ParsedMouse,\n root: AgNode,\n): boolean {\n const { x, y, action } = parsed\n // Track last pointer coords so refreshHoverPath() can re-hit-test after\n // layout changes (e.g. wheel scrolls content under a stationary cursor;\n // async state arrival shifts rows). Cleared in clearHoverPath when the\n // pointer leaves the terminal bounds.\n state.lastPointer = { x, y }\n const target = hitTest(root, x, y)\n if (action === \"move\") {\n const nodeType = target?.type ?? \"null\"\n const nodeId = target ? ((target.props as Record<string, unknown>).id ?? \"\") : \"\"\n // Check entire ancestor path for onMouseEnter\n let enterAncestor = \"\"\n if (target) {\n let n: AgNode | null = target\n while (n) {\n if (\"onMouseEnter\" in (n.props as Record<string, unknown>)) {\n enterAncestor = `${n.type}#${(n.props as Record<string, unknown>).id ?? \"\"}`\n break\n }\n n = n.parent\n }\n }\n const newPath = target ? getAncestorPath(target) : []\n const { entered } = computeEnterLeave(state.hoverPath, newPath)\n mouseLog.debug?.(\n `move x=${x} y=${y} target=${nodeType}#${nodeId} enterAncestor=${enterAncestor || \"none\"} entered=${entered.length} prevPath=${state.hoverPath.length}`,\n )\n }\n let defaultPrevented = false\n if (target) {\n cancelOutsideCaptureRelease(state)\n }\n if (!target) {\n if (action === \"move\") {\n if (state.mouseCaptureTarget) {\n scheduleOutsideCaptureRelease(state, parsed)\n } else {\n defaultPrevented = releaseMousePress(state, parsed)\n }\n clearHoverPath(state, parsed)\n return defaultPrevented\n }\n if (action === \"up\") {\n defaultPrevented = releaseMousePress(state, parsed)\n }\n return defaultPrevented\n }\n if (action === \"down\") {\n state.mouseDownTarget = target\n state.mouseCaptureTarget = findMouseCaptureTarget(target)\n\n // Set armed state on the target node\n setArmed(target, true)\n\n // Click-to-focus: find nearest focusable ancestor and focus it\n if (state.focusManager) {\n const focusable = findFocusableAncestor(target)\n if (focusable) {\n state.focusManager.focus(focusable, \"mouse\")\n }\n }\n\n const event = createMouseEvent(\"mousedown\", x, y, target, parsed, state.keyboardModifiers)\n dispatchMouseEvent(event)\n if (event.defaultPrevented) defaultPrevented = true\n } else if (action === \"up\") {\n const dispatchTarget = state.mouseCaptureTarget ?? target\n // Clear armed state on the mousedown target\n if (state.mouseDownTarget) {\n setArmed(state.mouseDownTarget, false)\n }\n\n // Reset aggregate at the start of every mouseup so callers reading\n // `lastClickPrevented` after dispatch see only this dispatch's signal.\n state.lastClickPrevented = false\n\n const event = createMouseEvent(\"mouseup\", x, y, dispatchTarget, parsed, state.keyboardModifiers)\n dispatchMouseEvent(event)\n\n // Click = mouseup on the same node (or ancestor) where mousedown happened\n // DOM actually fires click even if up is on a different element, but the target\n // is the nearest common ancestor. For simplicity, we fire click on the up target\n // if mousedown was on the same target or a descendant.\n if (state.mouseDownTarget) {\n // Resolve the multi-click count BEFORE creating the event so we can\n // attach `detail` (DOM `MouseEvent.detail` convention).\n const count = checkClickCount(state.doubleClick, x, y, parsed.button)\n const clickEvent = createMouseEvent(\n \"click\",\n x,\n y,\n dispatchTarget,\n parsed,\n state.keyboardModifiers,\n )\n ;(clickEvent as { detail?: 1 | 2 | 3 }).detail = count\n dispatchMouseEvent(clickEvent)\n if (clickEvent.defaultPrevented) {\n defaultPrevented = true\n state.lastClickPrevented = true\n }\n\n if (count >= 2) {\n const dblEvent = createMouseEvent(\n \"dblclick\",\n x,\n y,\n dispatchTarget,\n parsed,\n state.keyboardModifiers,\n )\n ;(dblEvent as { detail?: 1 | 2 | 3 }).detail = 2\n dispatchMouseEvent(dblEvent)\n if (dblEvent.defaultPrevented) {\n defaultPrevented = true\n state.lastClickPrevented = true\n }\n }\n if (count === 3) {\n const tripleEvent = createMouseEvent(\n \"tripleclick\",\n x,\n y,\n dispatchTarget,\n parsed,\n state.keyboardModifiers,\n )\n ;(tripleEvent as { detail?: 1 | 2 | 3 }).detail = 3\n dispatchMouseEvent(tripleEvent)\n if (tripleEvent.defaultPrevented) {\n defaultPrevented = true\n state.lastClickPrevented = true\n }\n }\n }\n\n state.mouseDownTarget = null\n state.mouseCaptureTarget = null\n } else if (action === \"move\") {\n const dispatchTarget = state.mouseCaptureTarget ?? target\n const event = createMouseEvent(\n \"mousemove\",\n x,\n y,\n dispatchTarget,\n parsed,\n state.keyboardModifiers,\n )\n dispatchMouseEvent(event)\n\n // Compute enter/leave transitions\n const newPath = getAncestorPath(target)\n const { entered, left } = computeEnterLeave(state.hoverPath, newPath)\n\n // Fire mouseleave on nodes that were left (reverse order = deepest first)\n for (const node of left) {\n setHovered(node, false)\n const leaveEvent = createMouseEvent(\"mouseleave\", x, y, node, parsed, state.keyboardModifiers)\n dispatchMouseEvent(leaveEvent)\n }\n\n // Fire mouseenter on newly entered nodes (forward order = shallowest first)\n for (const node of entered.reverse()) {\n setHovered(node, true)\n const enterEvent = createMouseEvent(\"mouseenter\", x, y, node, parsed, state.keyboardModifiers)\n dispatchMouseEvent(enterEvent)\n }\n\n state.hoverPath = newPath\n } else if (action === \"wheel\") {\n const event = createWheelEvent(x, y, target, parsed, state.keyboardModifiers)\n dispatchMouseEvent(event)\n if (event.defaultPrevented) defaultPrevented = true\n }\n return defaultPrevented\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as chalk, t as SPINNER_FRAMES } from "./spinner-
|
|
2
|
-
import { f as isTTY, i as CURSOR_HIDE, m as write, s as CURSOR_SHOW, t as CLEAR_LINE, u as cursorUp } from "./ansi-
|
|
1
|
+
import { a as chalk, t as SPINNER_FRAMES } from "./spinner-D9lrHr8s.mjs";
|
|
2
|
+
import { f as isTTY, i as CURSOR_HIDE, m as write, s as CURSOR_SHOW, t as CLEAR_LINE, u as cursorUp } from "./ansi-D1KQMAbf.mjs";
|
|
3
3
|
//#region packages/ag-react/src/ui/cli/multi-progress.ts
|
|
4
4
|
/**
|
|
5
5
|
* MultiProgress - Container for managing multiple concurrent progress indicators
|
|
@@ -216,4 +216,4 @@ var TaskHandle = class {
|
|
|
216
216
|
//#endregion
|
|
217
217
|
export { MultiProgress as t };
|
|
218
218
|
|
|
219
|
-
//# sourceMappingURL=multi-progress-
|
|
219
|
+
//# sourceMappingURL=multi-progress-CIRjrzma.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-progress-Bq9Oi_WI.mjs","names":[],"sources":["../packages/ag-react/src/ui/cli/multi-progress.ts"],"sourcesContent":["/**\n * MultiProgress - Container for managing multiple concurrent progress indicators\n */\n\nimport chalk from \"@silvery/ink/chalk\"\nimport type { SpinnerStyle, TaskStatus } from \"../types.js\"\nimport { CURSOR_HIDE, CURSOR_SHOW, CLEAR_LINE, cursorUp, write, isTTY } from \"./ansi\"\nimport { Spinner, SPINNER_FRAMES } from \"./spinner\"\nimport { ProgressBar } from \"./progress-bar\"\n\n/** Status icons */\nconst STATUS_ICONS: Record<TaskStatus, string> = {\n pending: chalk.gray(\"○\"),\n running: \"\", // Will be replaced with spinner frame\n completed: chalk.green(\"✔\"),\n failed: chalk.red(\"✖\"),\n skipped: chalk.yellow(\"⊘\"),\n}\n\n/** Task configuration */\ninterface TaskConfig {\n title: string\n type: \"spinner\" | \"bar\" | \"group\"\n status: TaskStatus\n total?: number\n current?: number\n spinnerStyle?: SpinnerStyle\n indent?: number\n}\n\n/** Internal task state */\ninterface TaskState extends TaskConfig {\n id: string\n /** Completion time in ms (shown dimmed after title on completion) */\n completionTime?: number\n}\n\n/**\n * MultiProgress - Manage multiple concurrent progress indicators\n *\n * @example\n * ```ts\n * const multi = new MultiProgress();\n *\n * const download = multi.add(\"Downloading files\", { type: \"bar\", total: 100 });\n * const process = multi.add(\"Processing\", { type: \"spinner\" });\n *\n * download.start();\n * download.update(50);\n * download.complete();\n *\n * process.start();\n * process.complete();\n *\n * multi.stop();\n * ```\n */\nexport class MultiProgress {\n private tasks: Map<string, TaskState> = new Map()\n private taskOrder: string[] = []\n private stream: NodeJS.WriteStream\n private isActive = false\n private timer: ReturnType<typeof setInterval> | null = null\n private frameIndex = 0\n private renderedLines = 0\n\n constructor(stream: NodeJS.WriteStream = process.stdout) {\n this.stream = stream\n }\n\n /**\n * Add a new task\n * @param insertAfter - ID of task to insert after (for hierarchical display)\n */\n add(\n title: string,\n options: {\n type?: \"spinner\" | \"bar\" | \"group\"\n total?: number\n spinnerStyle?: SpinnerStyle\n indent?: number\n insertAfter?: string\n } = {},\n ): TaskHandle {\n const id = `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\n\n const task: TaskState = {\n id,\n title,\n type: options.type ?? \"spinner\",\n status: \"pending\",\n total: options.total,\n current: 0,\n spinnerStyle: options.spinnerStyle ?? \"dots\",\n indent: options.indent ?? 0,\n }\n\n this.tasks.set(id, task)\n\n // Insert after specified task, or append to end\n if (options.insertAfter) {\n const afterIndex = this.taskOrder.indexOf(options.insertAfter)\n if (afterIndex >= 0) {\n this.taskOrder.splice(afterIndex + 1, 0, id)\n } else {\n this.taskOrder.push(id)\n }\n } else {\n this.taskOrder.push(id)\n }\n\n if (this.isActive) {\n this.render()\n }\n\n return new TaskHandle(this, id)\n }\n\n /**\n * Start the multi-progress display\n */\n start(): this {\n if (this.isActive) {\n return this\n }\n\n this.isActive = true\n\n if (isTTY(this.stream)) {\n write(CURSOR_HIDE, this.stream)\n }\n\n this.render()\n\n // Start animation timer\n this.timer = setInterval(() => {\n this.frameIndex = (this.frameIndex + 1) % 10\n this.render()\n }, 80)\n\n return this\n }\n\n /**\n * Dispose the multi-progress display (calls stop)\n */\n [Symbol.dispose](): void {\n this.stop()\n }\n\n /**\n * Stop the multi-progress display\n * @param clear - If true, clear all task lines from terminal\n */\n stop(clear = false): this {\n if (!this.isActive) {\n return this\n }\n\n this.isActive = false\n\n if (this.timer) {\n clearInterval(this.timer)\n this.timer = null\n }\n\n if (clear && isTTY(this.stream)) {\n // Clear all rendered lines\n if (this.renderedLines > 0) {\n write(cursorUp(this.renderedLines), this.stream)\n for (let i = 0; i < this.renderedLines; i++) {\n write(`${CLEAR_LINE}\\n`, this.stream)\n }\n write(cursorUp(this.renderedLines), this.stream)\n }\n } else {\n // Final render\n this.render()\n write(\"\\n\", this.stream)\n }\n\n if (isTTY(this.stream)) {\n write(CURSOR_SHOW, this.stream)\n }\n\n return this\n }\n\n /** @internal Update task state */\n _updateTask(id: string, updates: Partial<TaskState>): void {\n const task = this.tasks.get(id)\n if (task) {\n Object.assign(task, updates)\n // Only render immediately for status changes (complete/fail/etc.)\n // Progress updates (current/total) are debounced by the 80ms animation timer\n if (this.isActive && updates.status) {\n this.render()\n }\n }\n }\n\n /** @internal Get task state */\n _getTask(id: string): TaskState | undefined {\n return this.tasks.get(id)\n }\n\n private render(): void {\n if (!isTTY(this.stream)) {\n return\n }\n\n // Move cursor up to clear previous render\n if (this.renderedLines > 0) {\n write(cursorUp(this.renderedLines), this.stream)\n }\n\n const lines: string[] = []\n\n for (const id of this.taskOrder) {\n const task = this.tasks.get(id)\n if (!task) continue\n\n let icon: string\n if (task.status === \"running\") {\n if (task.type === \"group\") {\n // Groups don't animate - keep pending icon while running\n icon = STATUS_ICONS.pending\n } else {\n const frames = SPINNER_FRAMES[task.spinnerStyle ?? \"dots\"]\n icon = chalk.cyan(frames[this.frameIndex % frames.length])\n }\n } else {\n icon = STATUS_ICONS[task.status]\n }\n\n const indent = \" \".repeat(task.indent ?? 0)\n let line = `${indent}${icon} ${task.title}`\n\n // Add progress bar for bar type\n if (task.type === \"bar\" && task.total && task.total > 0) {\n const percent = task.current! / task.total\n const barWidth = 20\n const filled = Math.round(barWidth * percent)\n const empty = barWidth - filled\n const bar = chalk.cyan(\"█\".repeat(filled)) + chalk.gray(\"░\".repeat(empty))\n line += ` ${bar} ${Math.round(percent * 100)}%`\n }\n\n // Add completion time in dimmed text\n if (task.status === \"completed\" && task.completionTime !== undefined) {\n line += chalk.dim(` ${task.completionTime}ms`)\n }\n\n lines.push(line)\n }\n\n // Clear and write each line\n for (const line of lines) {\n write(`${CLEAR_LINE}${line}\\n`, this.stream)\n }\n\n this.renderedLines = lines.length\n }\n}\n\n/**\n * Handle for controlling an individual task\n */\nclass TaskHandle {\n constructor(\n private multi: MultiProgress,\n private _id: string,\n ) {}\n\n /** Get task ID (for insertAfter) */\n get id(): string {\n return this._id\n }\n\n /** Start the task (set status to running) */\n start(): this {\n this.multi._updateTask(this._id, { status: \"running\" })\n return this\n }\n\n /** Update progress (for bar type) */\n update(current: number): this {\n this.multi._updateTask(this._id, { current })\n return this\n }\n\n /** Mark task as completed */\n complete(titleOrTime?: string | number): this {\n const updates: Partial<TaskState> = { status: \"completed\" }\n if (typeof titleOrTime === \"number\") {\n // Numeric = completion time in ms (preserves current title)\n updates.completionTime = titleOrTime\n } else if (titleOrTime) {\n // String = new title (legacy behavior)\n updates.title = titleOrTime\n }\n this.multi._updateTask(this._id, updates)\n return this\n }\n\n /** Mark task as failed */\n fail(title?: string): this {\n const updates: Partial<TaskState> = { status: \"failed\" }\n if (title) updates.title = title\n this.multi._updateTask(this._id, updates)\n return this\n }\n\n /** Mark task as skipped */\n skip(title?: string): this {\n const updates: Partial<TaskState> = { status: \"skipped\" }\n if (title) updates.title = title\n this.multi._updateTask(this._id, updates)\n return this\n }\n\n /** Update task title */\n setTitle(title: string): this {\n this.multi._updateTask(this._id, { title })\n return this\n }\n\n /** Change task type (e.g., from spinner to group when sub-steps are added) */\n setType(type: \"spinner\" | \"bar\" | \"group\"): this {\n this.multi._updateTask(this._id, { type })\n return this\n }\n\n /** Get current status */\n get status(): TaskStatus {\n return this.multi._getTask(this._id)?.status ?? \"pending\"\n }\n}\n\nexport type { TaskHandle }\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multi-progress-CIRjrzma.mjs","names":[],"sources":["../packages/ag-react/src/ui/cli/multi-progress.ts"],"sourcesContent":["/**\n * MultiProgress - Container for managing multiple concurrent progress indicators\n */\n\nimport chalk from \"@silvery/ink/chalk\"\nimport type { SpinnerStyle, TaskStatus } from \"../types.js\"\nimport { CURSOR_HIDE, CURSOR_SHOW, CLEAR_LINE, cursorUp, write, isTTY } from \"./ansi\"\nimport { Spinner, SPINNER_FRAMES } from \"./spinner\"\nimport { ProgressBar } from \"./progress-bar\"\n\n/** Status icons */\nconst STATUS_ICONS: Record<TaskStatus, string> = {\n pending: chalk.gray(\"○\"),\n running: \"\", // Will be replaced with spinner frame\n completed: chalk.green(\"✔\"),\n failed: chalk.red(\"✖\"),\n skipped: chalk.yellow(\"⊘\"),\n}\n\n/** Task configuration */\ninterface TaskConfig {\n title: string\n type: \"spinner\" | \"bar\" | \"group\"\n status: TaskStatus\n total?: number\n current?: number\n spinnerStyle?: SpinnerStyle\n indent?: number\n}\n\n/** Internal task state */\ninterface TaskState extends TaskConfig {\n id: string\n /** Completion time in ms (shown dimmed after title on completion) */\n completionTime?: number\n}\n\n/**\n * MultiProgress - Manage multiple concurrent progress indicators\n *\n * @example\n * ```ts\n * const multi = new MultiProgress();\n *\n * const download = multi.add(\"Downloading files\", { type: \"bar\", total: 100 });\n * const process = multi.add(\"Processing\", { type: \"spinner\" });\n *\n * download.start();\n * download.update(50);\n * download.complete();\n *\n * process.start();\n * process.complete();\n *\n * multi.stop();\n * ```\n */\nexport class MultiProgress {\n private tasks: Map<string, TaskState> = new Map()\n private taskOrder: string[] = []\n private stream: NodeJS.WriteStream\n private isActive = false\n private timer: ReturnType<typeof setInterval> | null = null\n private frameIndex = 0\n private renderedLines = 0\n\n constructor(stream: NodeJS.WriteStream = process.stdout) {\n this.stream = stream\n }\n\n /**\n * Add a new task\n * @param insertAfter - ID of task to insert after (for hierarchical display)\n */\n add(\n title: string,\n options: {\n type?: \"spinner\" | \"bar\" | \"group\"\n total?: number\n spinnerStyle?: SpinnerStyle\n indent?: number\n insertAfter?: string\n } = {},\n ): TaskHandle {\n const id = `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\n\n const task: TaskState = {\n id,\n title,\n type: options.type ?? \"spinner\",\n status: \"pending\",\n total: options.total,\n current: 0,\n spinnerStyle: options.spinnerStyle ?? \"dots\",\n indent: options.indent ?? 0,\n }\n\n this.tasks.set(id, task)\n\n // Insert after specified task, or append to end\n if (options.insertAfter) {\n const afterIndex = this.taskOrder.indexOf(options.insertAfter)\n if (afterIndex >= 0) {\n this.taskOrder.splice(afterIndex + 1, 0, id)\n } else {\n this.taskOrder.push(id)\n }\n } else {\n this.taskOrder.push(id)\n }\n\n if (this.isActive) {\n this.render()\n }\n\n return new TaskHandle(this, id)\n }\n\n /**\n * Start the multi-progress display\n */\n start(): this {\n if (this.isActive) {\n return this\n }\n\n this.isActive = true\n\n if (isTTY(this.stream)) {\n write(CURSOR_HIDE, this.stream)\n }\n\n this.render()\n\n // Start animation timer\n this.timer = setInterval(() => {\n this.frameIndex = (this.frameIndex + 1) % 10\n this.render()\n }, 80)\n\n return this\n }\n\n /**\n * Dispose the multi-progress display (calls stop)\n */\n [Symbol.dispose](): void {\n this.stop()\n }\n\n /**\n * Stop the multi-progress display\n * @param clear - If true, clear all task lines from terminal\n */\n stop(clear = false): this {\n if (!this.isActive) {\n return this\n }\n\n this.isActive = false\n\n if (this.timer) {\n clearInterval(this.timer)\n this.timer = null\n }\n\n if (clear && isTTY(this.stream)) {\n // Clear all rendered lines\n if (this.renderedLines > 0) {\n write(cursorUp(this.renderedLines), this.stream)\n for (let i = 0; i < this.renderedLines; i++) {\n write(`${CLEAR_LINE}\\n`, this.stream)\n }\n write(cursorUp(this.renderedLines), this.stream)\n }\n } else {\n // Final render\n this.render()\n write(\"\\n\", this.stream)\n }\n\n if (isTTY(this.stream)) {\n write(CURSOR_SHOW, this.stream)\n }\n\n return this\n }\n\n /** @internal Update task state */\n _updateTask(id: string, updates: Partial<TaskState>): void {\n const task = this.tasks.get(id)\n if (task) {\n Object.assign(task, updates)\n // Only render immediately for status changes (complete/fail/etc.)\n // Progress updates (current/total) are debounced by the 80ms animation timer\n if (this.isActive && updates.status) {\n this.render()\n }\n }\n }\n\n /** @internal Get task state */\n _getTask(id: string): TaskState | undefined {\n return this.tasks.get(id)\n }\n\n private render(): void {\n if (!isTTY(this.stream)) {\n return\n }\n\n // Move cursor up to clear previous render\n if (this.renderedLines > 0) {\n write(cursorUp(this.renderedLines), this.stream)\n }\n\n const lines: string[] = []\n\n for (const id of this.taskOrder) {\n const task = this.tasks.get(id)\n if (!task) continue\n\n let icon: string\n if (task.status === \"running\") {\n if (task.type === \"group\") {\n // Groups don't animate - keep pending icon while running\n icon = STATUS_ICONS.pending\n } else {\n const frames = SPINNER_FRAMES[task.spinnerStyle ?? \"dots\"]\n icon = chalk.cyan(frames[this.frameIndex % frames.length])\n }\n } else {\n icon = STATUS_ICONS[task.status]\n }\n\n const indent = \" \".repeat(task.indent ?? 0)\n let line = `${indent}${icon} ${task.title}`\n\n // Add progress bar for bar type\n if (task.type === \"bar\" && task.total && task.total > 0) {\n const percent = task.current! / task.total\n const barWidth = 20\n const filled = Math.round(barWidth * percent)\n const empty = barWidth - filled\n const bar = chalk.cyan(\"█\".repeat(filled)) + chalk.gray(\"░\".repeat(empty))\n line += ` ${bar} ${Math.round(percent * 100)}%`\n }\n\n // Add completion time in dimmed text\n if (task.status === \"completed\" && task.completionTime !== undefined) {\n line += chalk.dim(` ${task.completionTime}ms`)\n }\n\n lines.push(line)\n }\n\n // Clear and write each line\n for (const line of lines) {\n write(`${CLEAR_LINE}${line}\\n`, this.stream)\n }\n\n this.renderedLines = lines.length\n }\n}\n\n/**\n * Handle for controlling an individual task\n */\nclass TaskHandle {\n constructor(\n private multi: MultiProgress,\n private _id: string,\n ) {}\n\n /** Get task ID (for insertAfter) */\n get id(): string {\n return this._id\n }\n\n /** Start the task (set status to running) */\n start(): this {\n this.multi._updateTask(this._id, { status: \"running\" })\n return this\n }\n\n /** Update progress (for bar type) */\n update(current: number): this {\n this.multi._updateTask(this._id, { current })\n return this\n }\n\n /** Mark task as completed */\n complete(titleOrTime?: string | number): this {\n const updates: Partial<TaskState> = { status: \"completed\" }\n if (typeof titleOrTime === \"number\") {\n // Numeric = completion time in ms (preserves current title)\n updates.completionTime = titleOrTime\n } else if (titleOrTime) {\n // String = new title (legacy behavior)\n updates.title = titleOrTime\n }\n this.multi._updateTask(this._id, updates)\n return this\n }\n\n /** Mark task as failed */\n fail(title?: string): this {\n const updates: Partial<TaskState> = { status: \"failed\" }\n if (title) updates.title = title\n this.multi._updateTask(this._id, updates)\n return this\n }\n\n /** Mark task as skipped */\n skip(title?: string): this {\n const updates: Partial<TaskState> = { status: \"skipped\" }\n if (title) updates.title = title\n this.multi._updateTask(this._id, updates)\n return this\n }\n\n /** Update task title */\n setTitle(title: string): this {\n this.multi._updateTask(this._id, { title })\n return this\n }\n\n /** Change task type (e.g., from spinner to group when sub-steps are added) */\n setType(type: \"spinner\" | \"bar\" | \"group\"): this {\n this.multi._updateTask(this._id, { type })\n return this\n }\n\n /** Get current status */\n get status(): TaskStatus {\n return this.multi._getTask(this._id)?.status ?? \"pending\"\n }\n}\n\nexport type { TaskHandle }\n"],"mappings":";;;;;;;AAWA,MAAM,eAA2C;CAC/C,SAAS,MAAM,KAAK,IAAI;CACxB,SAAS;CACT,WAAW,MAAM,MAAM,IAAI;CAC3B,QAAQ,MAAM,IAAI,IAAI;CACtB,SAAS,MAAM,OAAO,IAAI;CAC3B;;;;;;;;;;;;;;;;;;;;;AAwCD,IAAa,gBAAb,MAA2B;CACzB,wBAAwC,IAAI,KAAK;CACjD,YAA8B,EAAE;CAChC;CACA,WAAmB;CACnB,QAAuD;CACvD,aAAqB;CACrB,gBAAwB;CAExB,YAAY,SAA6B,QAAQ,QAAQ;AACvD,OAAK,SAAS;;;;;;CAOhB,IACE,OACA,UAMI,EAAE,EACM;EACZ,MAAM,KAAK,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE;EAEvE,MAAM,OAAkB;GACtB;GACA;GACA,MAAM,QAAQ,QAAQ;GACtB,QAAQ;GACR,OAAO,QAAQ;GACf,SAAS;GACT,cAAc,QAAQ,gBAAgB;GACtC,QAAQ,QAAQ,UAAU;GAC3B;AAED,OAAK,MAAM,IAAI,IAAI,KAAK;AAGxB,MAAI,QAAQ,aAAa;GACvB,MAAM,aAAa,KAAK,UAAU,QAAQ,QAAQ,YAAY;AAC9D,OAAI,cAAc,EAChB,MAAK,UAAU,OAAO,aAAa,GAAG,GAAG,GAAG;OAE5C,MAAK,UAAU,KAAK,GAAG;QAGzB,MAAK,UAAU,KAAK,GAAG;AAGzB,MAAI,KAAK,SACP,MAAK,QAAQ;AAGf,SAAO,IAAI,WAAW,MAAM,GAAG;;;;;CAMjC,QAAc;AACZ,MAAI,KAAK,SACP,QAAO;AAGT,OAAK,WAAW;AAEhB,MAAI,MAAM,KAAK,OAAO,CACpB,OAAM,aAAa,KAAK,OAAO;AAGjC,OAAK,QAAQ;AAGb,OAAK,QAAQ,kBAAkB;AAC7B,QAAK,cAAc,KAAK,aAAa,KAAK;AAC1C,QAAK,QAAQ;KACZ,GAAG;AAEN,SAAO;;;;;CAMT,CAAC,OAAO,WAAiB;AACvB,OAAK,MAAM;;;;;;CAOb,KAAK,QAAQ,OAAa;AACxB,MAAI,CAAC,KAAK,SACR,QAAO;AAGT,OAAK,WAAW;AAEhB,MAAI,KAAK,OAAO;AACd,iBAAc,KAAK,MAAM;AACzB,QAAK,QAAQ;;AAGf,MAAI,SAAS,MAAM,KAAK,OAAO;OAEzB,KAAK,gBAAgB,GAAG;AAC1B,UAAM,SAAS,KAAK,cAAc,EAAE,KAAK,OAAO;AAChD,SAAK,IAAI,IAAI,GAAG,IAAI,KAAK,eAAe,IACtC,OAAM,GAAG,WAAW,KAAK,KAAK,OAAO;AAEvC,UAAM,SAAS,KAAK,cAAc,EAAE,KAAK,OAAO;;SAE7C;AAEL,QAAK,QAAQ;AACb,SAAM,MAAM,KAAK,OAAO;;AAG1B,MAAI,MAAM,KAAK,OAAO,CACpB,OAAM,aAAa,KAAK,OAAO;AAGjC,SAAO;;;CAIT,YAAY,IAAY,SAAmC;EACzD,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,MAAI,MAAM;AACR,UAAO,OAAO,MAAM,QAAQ;AAG5B,OAAI,KAAK,YAAY,QAAQ,OAC3B,MAAK,QAAQ;;;;CAMnB,SAAS,IAAmC;AAC1C,SAAO,KAAK,MAAM,IAAI,GAAG;;CAG3B,SAAuB;AACrB,MAAI,CAAC,MAAM,KAAK,OAAO,CACrB;AAIF,MAAI,KAAK,gBAAgB,EACvB,OAAM,SAAS,KAAK,cAAc,EAAE,KAAK,OAAO;EAGlD,MAAM,QAAkB,EAAE;AAE1B,OAAK,MAAM,MAAM,KAAK,WAAW;GAC/B,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,OAAI,CAAC,KAAM;GAEX,IAAI;AACJ,OAAI,KAAK,WAAW,UAClB,KAAI,KAAK,SAAS,QAEhB,QAAO,aAAa;QACf;IACL,MAAM,SAAS,eAAe,KAAK,gBAAgB;AACnD,WAAO,MAAM,KAAK,OAAO,KAAK,aAAa,OAAO,QAAQ;;OAG5D,QAAO,aAAa,KAAK;GAI3B,IAAI,OAAO,GADI,KAAK,OAAO,KAAK,UAAU,EAAE,GACrB,KAAK,GAAG,KAAK;AAGpC,OAAI,KAAK,SAAS,SAAS,KAAK,SAAS,KAAK,QAAQ,GAAG;IACvD,MAAM,UAAU,KAAK,UAAW,KAAK;IACrC,MAAM,WAAW;IACjB,MAAM,SAAS,KAAK,MAAM,WAAW,QAAQ;IAC7C,MAAM,QAAQ,WAAW;IACzB,MAAM,MAAM,MAAM,KAAK,IAAI,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,IAAI,OAAO,MAAM,CAAC;AAC1E,YAAQ,IAAI,IAAI,GAAG,KAAK,MAAM,UAAU,IAAI,CAAC;;AAI/C,OAAI,KAAK,WAAW,eAAe,KAAK,mBAAmB,KAAA,EACzD,SAAQ,MAAM,IAAI,IAAI,KAAK,eAAe,IAAI;AAGhD,SAAM,KAAK,KAAK;;AAIlB,OAAK,MAAM,QAAQ,MACjB,OAAM,GAAG,aAAa,KAAK,KAAK,KAAK,OAAO;AAG9C,OAAK,gBAAgB,MAAM;;;;;;AAO/B,IAAM,aAAN,MAAiB;CACf,YACE,OACA,KACA;AAFQ,OAAA,QAAA;AACA,OAAA,MAAA;;;CAIV,IAAI,KAAa;AACf,SAAO,KAAK;;;CAId,QAAc;AACZ,OAAK,MAAM,YAAY,KAAK,KAAK,EAAE,QAAQ,WAAW,CAAC;AACvD,SAAO;;;CAIT,OAAO,SAAuB;AAC5B,OAAK,MAAM,YAAY,KAAK,KAAK,EAAE,SAAS,CAAC;AAC7C,SAAO;;;CAIT,SAAS,aAAqC;EAC5C,MAAM,UAA8B,EAAE,QAAQ,aAAa;AAC3D,MAAI,OAAO,gBAAgB,SAEzB,SAAQ,iBAAiB;WAChB,YAET,SAAQ,QAAQ;AAElB,OAAK,MAAM,YAAY,KAAK,KAAK,QAAQ;AACzC,SAAO;;;CAIT,KAAK,OAAsB;EACzB,MAAM,UAA8B,EAAE,QAAQ,UAAU;AACxD,MAAI,MAAO,SAAQ,QAAQ;AAC3B,OAAK,MAAM,YAAY,KAAK,KAAK,QAAQ;AACzC,SAAO;;;CAIT,KAAK,OAAsB;EACzB,MAAM,UAA8B,EAAE,QAAQ,WAAW;AACzD,MAAI,MAAO,SAAQ,QAAQ;AAC3B,OAAK,MAAM,YAAY,KAAK,KAAK,QAAQ;AACzC,SAAO;;;CAIT,SAAS,OAAqB;AAC5B,OAAK,MAAM,YAAY,KAAK,KAAK,EAAE,OAAO,CAAC;AAC3C,SAAO;;;CAIT,QAAQ,MAAyC;AAC/C,OAAK,MAAM,YAAY,KAAK,KAAK,EAAE,MAAM,CAAC;AAC1C,SAAO;;;CAIT,IAAI,SAAqB;AACvB,SAAO,KAAK,MAAM,SAAS,KAAK,IAAI,EAAE,UAAU"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as TaskStatus, t as ProgressBarOptions, u as SpinnerStyle } from "./types-
|
|
1
|
+
import { g as TaskStatus, t as ProgressBarOptions, u as SpinnerStyle } from "./types-kt_fKR37.mjs";
|
|
2
2
|
|
|
3
3
|
//#region packages/ag-react/src/ui/cli/progress-bar.d.ts
|
|
4
4
|
/**
|
|
@@ -177,4 +177,4 @@ declare class TaskHandle {
|
|
|
177
177
|
}
|
|
178
178
|
//#endregion
|
|
179
179
|
export { TaskHandle as n, ProgressBar as r, MultiProgress as t };
|
|
180
|
-
//# sourceMappingURL=multi-progress-
|
|
180
|
+
//# sourceMappingURL=multi-progress-DHZ2xUT2.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-progress-
|
|
1
|
+
{"version":3,"file":"multi-progress-DHZ2xUT2.d.mts","names":[],"sources":["../packages/ag-react/src/ui/cli/progress-bar.ts","../packages/ag-react/src/ui/cli/multi-progress.ts"],"mappings":";;;;;;;;;;;;;;;;;cAkCa,WAAA;EAAA,QACH,KAAA;EAAA,QACA,MAAA;EAAA,QACA,KAAA;EAAA,QACA,QAAA;EAAA,QACA,UAAA;EAAA,QACA,MAAA;EAAA,QACA,UAAA;EAAA,QACA,MAAA;EAAA,QAEA,OAAA;EAAA,QACA,KAAA;EAAA,QACA,SAAA;EAAA,QACA,QAAA;EAAA,QAGA,SAAA;cAEI,OAAA,GAAS,kBAAA;EAmCU;;;EArB/B,KAAA,CAAM,YAAA,WAAkB,YAAA;EAyCO;;;EApB/B,MAAA,CAAO,KAAA,UAAe,MAAA,GAAS,MAAA;EA2BS;;;EAPxC,SAAA,CAAU,MAAA,WAAY,MAAA,GAAS,MAAA;EA6B1B;;;EAtBL,QAAA,CAAS,SAAA,UAAmB,OAAA;IAAY,OAAA;IAAkB,KAAA;EAAA;EAgH3C;;;EA1Ff,IAAA,CAAK,KAAA;;UAqBG,aAAA;ECzIU;;;EAAA,QDgJV,MAAA;EC9IR;;;EAAA,ID8LI,KAAA,CAAA;EC3LJ;;;EAAA,IDkMI,UAAA,CAAA;EChME;;AAAA;EAAA,CDuML,MAAA,CAAO,OAAA;AAAA;;;;UC9MA,UAAA;EACR,KAAA;EACA,IAAA;EACA,MAAA,EAAQ,UAAA;EACR,KAAA;EACA,OAAA;EACA,YAAA,GAAe,YAAA;EACf,MAAA;AAAA;;UAIQ,SAAA,SAAkB,UAAA;EAC1B,EAAA;EDQQ;ECNR,cAAA;AAAA;;;;;;;;;;;;;;;;;;;;;cAuBW,aAAA;EAAA,QACH,KAAA;EAAA,QACA,SAAA;EAAA,QACA,MAAA;EAAA,QACA,QAAA;EAAA,QACA,KAAA;EAAA,QACA,UAAA;EAAA,QACA,aAAA;cAEI,MAAA,GAAQ,MAAA,CAAO,WAAA;EDyJvB;;;;ECjJJ,GAAA,CACE,KAAA,UACA,OAAA;IACE,IAAA;IACA,KAAA;IACA,YAAA,GAAe,YAAA;IACf,MAAA;IACA,WAAA;EAAA,IAED,UAAA;EAzDwB;;;EA+F3B,KAAA,CAAA;EAlGQ;;;EAAA,CA2HP,MAAA,CAAO,OAAA;EAxHO;;;;EAgIf,IAAA,CAAK,KAAA;EA3Ha;EA8JlB,WAAA,CAAY,EAAA,UAAY,OAAA,EAAS,OAAA,CAAQ,SAAA;EA9JL;EA2KpC,QAAA,CAAS,EAAA,WAAa,SAAA;EAAA,QAId,MAAA;AAAA;;;AArJV;cAmNM,UAAA;EAAA,QAEM,KAAA;EAAA,QACA,GAAA;cADA,KAAA,EAAO,aAAA,EACP,GAAA;EA5LP;EAAA,IAgMC,EAAA,CAAA;EAtFqC;EA2FzC,KAAA,CAAA;EA9EsB;EAoFtB,MAAA,CAAO,OAAA;EApFwB;EA0F/B,QAAA,CAAS,WAAA;EAzOD;EAuPR,IAAA,CAAK,KAAA;EArPG;EA6PR,IAAA,CAAK,KAAA;EA3PG;EAmQR,QAAA,CAAS,KAAA;;EAMT,OAAA,CAAQ,IAAA;EAtQmB;EAAA,IA4QvB,MAAA,CAAA,GAAU,UAAA;AAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
|
-
//#region node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/wrapAsm-f766f97f.js
|
|
3
|
+
//#region ../../node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/wrapAsm-f766f97f.js
|
|
4
4
|
var YGEnums = {};
|
|
5
5
|
YGEnums.ALIGN_AUTO = 0;
|
|
6
6
|
YGEnums.ALIGN_FLEX_START = 1;
|
|
@@ -135,7 +135,7 @@ var wrapAsm = (E) => {
|
|
|
135
135
|
};
|
|
136
136
|
};
|
|
137
137
|
//#endregion
|
|
138
|
-
//#region node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/index.js
|
|
138
|
+
//#region ../../node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/index.js
|
|
139
139
|
var yoga = (() => {
|
|
140
140
|
var n = "undefined" != typeof document && document.currentScript ? document.currentScript.src : void 0;
|
|
141
141
|
return function(t = {}) {
|
|
@@ -1077,9 +1077,9 @@ async function initYoga(t) {
|
|
|
1077
1077
|
} }));
|
|
1078
1078
|
}
|
|
1079
1079
|
//#endregion
|
|
1080
|
-
//#region node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/node.js
|
|
1080
|
+
//#region ../../node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/node.js
|
|
1081
1081
|
let Yoga = await initYoga(await readFile(createRequire(import.meta.url).resolve("./yoga.wasm")));
|
|
1082
1082
|
//#endregion
|
|
1083
1083
|
export { Yoga as default };
|
|
1084
1084
|
|
|
1085
|
-
//# sourceMappingURL=node-
|
|
1085
|
+
//# sourceMappingURL=node-CjM5Rt-M.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-CjM5Rt-M.mjs","names":["n","a","E","_"],"sources":["../../../node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/wrapAsm-f766f97f.js","../../../node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/index.js","../../../node_modules/.bun/yoga-wasm-web@0.3.3/node_modules/yoga-wasm-web/dist/node.js"],"sourcesContent":["var YGEnums={},ALIGN_AUTO=YGEnums.ALIGN_AUTO=0,ALIGN_FLEX_START=YGEnums.ALIGN_FLEX_START=1,ALIGN_CENTER=YGEnums.ALIGN_CENTER=2,ALIGN_FLEX_END=YGEnums.ALIGN_FLEX_END=3,ALIGN_STRETCH=YGEnums.ALIGN_STRETCH=4,ALIGN_BASELINE=YGEnums.ALIGN_BASELINE=5,ALIGN_SPACE_BETWEEN=YGEnums.ALIGN_SPACE_BETWEEN=6,ALIGN_SPACE_AROUND=YGEnums.ALIGN_SPACE_AROUND=7,DIMENSION_WIDTH=YGEnums.DIMENSION_WIDTH=0,DIMENSION_HEIGHT=YGEnums.DIMENSION_HEIGHT=1,DIRECTION_INHERIT=YGEnums.DIRECTION_INHERIT=0,DIRECTION_LTR=YGEnums.DIRECTION_LTR=1,DIRECTION_RTL=YGEnums.DIRECTION_RTL=2,DISPLAY_FLEX=YGEnums.DISPLAY_FLEX=0,DISPLAY_NONE=YGEnums.DISPLAY_NONE=1,EDGE_LEFT=YGEnums.EDGE_LEFT=0,EDGE_TOP=YGEnums.EDGE_TOP=1,EDGE_RIGHT=YGEnums.EDGE_RIGHT=2,EDGE_BOTTOM=YGEnums.EDGE_BOTTOM=3,EDGE_START=YGEnums.EDGE_START=4,EDGE_END=YGEnums.EDGE_END=5,EDGE_HORIZONTAL=YGEnums.EDGE_HORIZONTAL=6,EDGE_VERTICAL=YGEnums.EDGE_VERTICAL=7,EDGE_ALL=YGEnums.EDGE_ALL=8,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS=YGEnums.EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS=0,EXPERIMENTAL_FEATURE_ABSOLUTE_PERCENTAGE_AGAINST_PADDING_EDGE=YGEnums.EXPERIMENTAL_FEATURE_ABSOLUTE_PERCENTAGE_AGAINST_PADDING_EDGE=1,EXPERIMENTAL_FEATURE_FIX_ABSOLUTE_TRAILING_COLUMN_MARGIN=YGEnums.EXPERIMENTAL_FEATURE_FIX_ABSOLUTE_TRAILING_COLUMN_MARGIN=2,FLEX_DIRECTION_COLUMN=YGEnums.FLEX_DIRECTION_COLUMN=0,FLEX_DIRECTION_COLUMN_REVERSE=YGEnums.FLEX_DIRECTION_COLUMN_REVERSE=1,FLEX_DIRECTION_ROW=YGEnums.FLEX_DIRECTION_ROW=2,FLEX_DIRECTION_ROW_REVERSE=YGEnums.FLEX_DIRECTION_ROW_REVERSE=3,GUTTER_COLUMN=YGEnums.GUTTER_COLUMN=0,GUTTER_ROW=YGEnums.GUTTER_ROW=1,GUTTER_ALL=YGEnums.GUTTER_ALL=2,JUSTIFY_FLEX_START=YGEnums.JUSTIFY_FLEX_START=0,JUSTIFY_CENTER=YGEnums.JUSTIFY_CENTER=1,JUSTIFY_FLEX_END=YGEnums.JUSTIFY_FLEX_END=2,JUSTIFY_SPACE_BETWEEN=YGEnums.JUSTIFY_SPACE_BETWEEN=3,JUSTIFY_SPACE_AROUND=YGEnums.JUSTIFY_SPACE_AROUND=4,JUSTIFY_SPACE_EVENLY=YGEnums.JUSTIFY_SPACE_EVENLY=5,LOG_LEVEL_ERROR=YGEnums.LOG_LEVEL_ERROR=0,LOG_LEVEL_WARN=YGEnums.LOG_LEVEL_WARN=1,LOG_LEVEL_INFO=YGEnums.LOG_LEVEL_INFO=2,LOG_LEVEL_DEBUG=YGEnums.LOG_LEVEL_DEBUG=3,LOG_LEVEL_VERBOSE=YGEnums.LOG_LEVEL_VERBOSE=4,LOG_LEVEL_FATAL=YGEnums.LOG_LEVEL_FATAL=5,MEASURE_MODE_UNDEFINED=YGEnums.MEASURE_MODE_UNDEFINED=0,MEASURE_MODE_EXACTLY=YGEnums.MEASURE_MODE_EXACTLY=1,MEASURE_MODE_AT_MOST=YGEnums.MEASURE_MODE_AT_MOST=2,NODE_TYPE_DEFAULT=YGEnums.NODE_TYPE_DEFAULT=0,NODE_TYPE_TEXT=YGEnums.NODE_TYPE_TEXT=1,OVERFLOW_VISIBLE=YGEnums.OVERFLOW_VISIBLE=0,OVERFLOW_HIDDEN=YGEnums.OVERFLOW_HIDDEN=1,OVERFLOW_SCROLL=YGEnums.OVERFLOW_SCROLL=2,POSITION_TYPE_STATIC=YGEnums.POSITION_TYPE_STATIC=0,POSITION_TYPE_RELATIVE=YGEnums.POSITION_TYPE_RELATIVE=1,POSITION_TYPE_ABSOLUTE=YGEnums.POSITION_TYPE_ABSOLUTE=2,PRINT_OPTIONS_LAYOUT=YGEnums.PRINT_OPTIONS_LAYOUT=1,PRINT_OPTIONS_STYLE=YGEnums.PRINT_OPTIONS_STYLE=2,PRINT_OPTIONS_CHILDREN=YGEnums.PRINT_OPTIONS_CHILDREN=4,UNIT_UNDEFINED=YGEnums.UNIT_UNDEFINED=0,UNIT_POINT=YGEnums.UNIT_POINT=1,UNIT_PERCENT=YGEnums.UNIT_PERCENT=2,UNIT_AUTO=YGEnums.UNIT_AUTO=3,WRAP_NO_WRAP=YGEnums.WRAP_NO_WRAP=0,WRAP_WRAP=YGEnums.WRAP_WRAP=1,WRAP_WRAP_REVERSE=YGEnums.WRAP_WRAP_REVERSE=2;let CONSTANTS=YGEnums;var wrapAsm=E=>{function _(E,_,T){let N=E[_];E[_]=function(...E){return T.call(this,N,...E)}}for(let T of[\"setPosition\",\"setMargin\",\"setFlexBasis\",\"setWidth\",\"setHeight\",\"setMinWidth\",\"setMinHeight\",\"setMaxWidth\",\"setMaxHeight\",\"setPadding\"]){let N={[YGEnums.UNIT_POINT]:E.Node.prototype[T],[YGEnums.UNIT_PERCENT]:E.Node.prototype[`${T}Percent`],[YGEnums.UNIT_AUTO]:E.Node.prototype[`${T}Auto`]};_(E.Node.prototype,T,function(E,..._){let I,L;let O=_.pop();if(\"auto\"===O)I=YGEnums.UNIT_AUTO,L=void 0;else if(\"object\"==typeof O)I=O.unit,L=O.valueOf();else if(I=\"string\"==typeof O&&O.endsWith(\"%\")?YGEnums.UNIT_PERCENT:YGEnums.UNIT_POINT,L=parseFloat(O),!Number.isNaN(O)&&Number.isNaN(L))throw Error(`Invalid value ${O} for ${T}`);if(!N[I])throw Error(`Failed to execute \"${T}\": Unsupported unit '${O}'`);return void 0!==L?N[I].call(this,..._,L):N[I].call(this,..._)})}function T(_){return E.MeasureCallback.implement({measure:(...E)=>{let{width:T,height:N}=_(...E);return{width:T??NaN,height:N??NaN}}})}function N(_){return E.DirtiedCallback.implement({dirtied:_})}return _(E.Node.prototype,\"setMeasureFunc\",function(E,_){return _?E.call(this,T(_)):this.unsetMeasureFunc()}),_(E.Node.prototype,\"setDirtiedFunc\",function(E,_){E.call(this,N(_))}),_(E.Config.prototype,\"free\",function(){E.Config.destroy(this)}),_(E.Node,\"create\",(_,T)=>T?E.Node.createWithConfig(T):E.Node.createDefault()),_(E.Node.prototype,\"free\",function(){E.Node.destroy(this)}),_(E.Node.prototype,\"freeRecursive\",function(){for(let E=0,_=this.getChildCount();E<_;++E)this.getChild(0).freeRecursive();this.free()}),_(E.Node.prototype,\"calculateLayout\",function(E,_=NaN,T=NaN,N=YGEnums.DIRECTION_LTR){return E.call(this,_,T,N)}),{Config:E.Config,Node:E.Node,...YGEnums}};export{OVERFLOW_HIDDEN as $,ALIGN_AUTO as A,FLEX_DIRECTION_ROW as B,FLEX_DIRECTION_ROW_REVERSE as C,DIMENSION_WIDTH as D,EDGE_LEFT as E,FLEX_DIRECTION_COLUMN as F,GUTTER_COLUMN as G,GUTTER_ROW as H,GUTTER_ALL as I,JUSTIFY_FLEX_START as J,JUSTIFY_CENTER as K,JUSTIFY_FLEX_END as L,JUSTIFY_SPACE_BETWEEN as M,JUSTIFY_SPACE_AROUND as N,JUSTIFY_SPACE_EVENLY as O,LOG_LEVEL_ERROR as P,LOG_LEVEL_WARN as Q,LOG_LEVEL_INFO as R,LOG_LEVEL_DEBUG as S,LOG_LEVEL_VERBOSE as T,LOG_LEVEL_FATAL as U,MEASURE_MODE_UNDEFINED as V,MEASURE_MODE_EXACTLY as W,MEASURE_MODE_AT_MOST as X,NODE_TYPE_DEFAULT as Y,NODE_TYPE_TEXT as Z,OVERFLOW_VISIBLE as _,ALIGN_FLEX_START as a,OVERFLOW_SCROLL as a0,POSITION_TYPE_STATIC as a1,POSITION_TYPE_RELATIVE as a2,POSITION_TYPE_ABSOLUTE as a3,PRINT_OPTIONS_LAYOUT as a4,PRINT_OPTIONS_STYLE as a5,PRINT_OPTIONS_CHILDREN as a6,UNIT_UNDEFINED as a7,UNIT_POINT as a8,UNIT_PERCENT as a9,UNIT_AUTO as aa,WRAP_NO_WRAP as ab,WRAP_WRAP as ac,WRAP_WRAP_REVERSE as ad,ALIGN_CENTER as b,ALIGN_FLEX_END as c,ALIGN_STRETCH as d,ALIGN_BASELINE as e,ALIGN_SPACE_BETWEEN as f,ALIGN_SPACE_AROUND as g,DIMENSION_HEIGHT as h,DIRECTION_INHERIT as i,DIRECTION_LTR as j,DIRECTION_RTL as k,DISPLAY_FLEX as l,DISPLAY_NONE as m,EDGE_TOP as n,EDGE_RIGHT as o,EDGE_BOTTOM as p,EDGE_START as q,EDGE_END as r,EDGE_HORIZONTAL as s,EDGE_VERTICAL as t,EDGE_ALL as u,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS as v,wrapAsm as w,EXPERIMENTAL_FEATURE_ABSOLUTE_PERCENTAGE_AGAINST_PADDING_EDGE as x,EXPERIMENTAL_FEATURE_FIX_ABSOLUTE_TRAILING_COLUMN_MARGIN as y,FLEX_DIRECTION_COLUMN_REVERSE as z};\n","import{w as n}from\"./wrapAsm-f766f97f.js\";export{A as ALIGN_AUTO,e as ALIGN_BASELINE,b as ALIGN_CENTER,c as ALIGN_FLEX_END,a as ALIGN_FLEX_START,g as ALIGN_SPACE_AROUND,f as ALIGN_SPACE_BETWEEN,d as ALIGN_STRETCH,h as DIMENSION_HEIGHT,D as DIMENSION_WIDTH,i as DIRECTION_INHERIT,j as DIRECTION_LTR,k as DIRECTION_RTL,l as DISPLAY_FLEX,m as DISPLAY_NONE,u as EDGE_ALL,p as EDGE_BOTTOM,r as EDGE_END,s as EDGE_HORIZONTAL,E as EDGE_LEFT,o as EDGE_RIGHT,q as EDGE_START,n as EDGE_TOP,t as EDGE_VERTICAL,x as EXPERIMENTAL_FEATURE_ABSOLUTE_PERCENTAGE_AGAINST_PADDING_EDGE,y as EXPERIMENTAL_FEATURE_FIX_ABSOLUTE_TRAILING_COLUMN_MARGIN,v as EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS,F as FLEX_DIRECTION_COLUMN,z as FLEX_DIRECTION_COLUMN_REVERSE,B as FLEX_DIRECTION_ROW,C as FLEX_DIRECTION_ROW_REVERSE,I as GUTTER_ALL,G as GUTTER_COLUMN,H as GUTTER_ROW,K as JUSTIFY_CENTER,L as JUSTIFY_FLEX_END,J as JUSTIFY_FLEX_START,N as JUSTIFY_SPACE_AROUND,M as JUSTIFY_SPACE_BETWEEN,O as JUSTIFY_SPACE_EVENLY,S as LOG_LEVEL_DEBUG,P as LOG_LEVEL_ERROR,U as LOG_LEVEL_FATAL,R as LOG_LEVEL_INFO,T as LOG_LEVEL_VERBOSE,Q as LOG_LEVEL_WARN,X as MEASURE_MODE_AT_MOST,W as MEASURE_MODE_EXACTLY,V as MEASURE_MODE_UNDEFINED,Y as NODE_TYPE_DEFAULT,Z as NODE_TYPE_TEXT,$ as OVERFLOW_HIDDEN,a0 as OVERFLOW_SCROLL,_ as OVERFLOW_VISIBLE,a3 as POSITION_TYPE_ABSOLUTE,a2 as POSITION_TYPE_RELATIVE,a1 as POSITION_TYPE_STATIC,a6 as PRINT_OPTIONS_CHILDREN,a4 as PRINT_OPTIONS_LAYOUT,a5 as PRINT_OPTIONS_STYLE,aa as UNIT_AUTO,a9 as UNIT_PERCENT,a8 as UNIT_POINT,a7 as UNIT_UNDEFINED,ab as WRAP_NO_WRAP,ac as WRAP_WRAP,ad as WRAP_WRAP_REVERSE}from\"./wrapAsm-f766f97f.js\";var yoga=(()=>{var n=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0;return function(t={}){u||(u=void 0!==t?t:{}),u.ready=new Promise(function(n,t){c=n,f=t});var r,e,a=Object.assign({},u),i=\"\";\"undefined\"!=typeof document&&document.currentScript&&(i=document.currentScript.src),n&&(i=n),i=0!==i.indexOf(\"blob:\")?i.substr(0,i.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\";var o=console.log.bind(console),s=console.warn.bind(console);Object.assign(u,a),a=null,\"object\"!=typeof WebAssembly&&w(\"no native wasm support detected\");var u,c,f,l,h=!1;function p(n,t,r){r=t+r;for(var e=\"\";!(t>=r);){var a=n[t++];if(!a)break;if(128&a){var i=63&n[t++];if(192==(224&a))e+=String.fromCharCode((31&a)<<6|i);else{var o=63&n[t++];65536>(a=224==(240&a)?(15&a)<<12|i<<6|o:(7&a)<<18|i<<12|o<<6|63&n[t++])?e+=String.fromCharCode(a):(a-=65536,e+=String.fromCharCode(55296|a>>10,56320|1023&a))}}else e+=String.fromCharCode(a)}return e}function v(){var n=l.buffer;u.HEAP8=d=new Int8Array(n),u.HEAP16=m=new Int16Array(n),u.HEAP32=g=new Int32Array(n),u.HEAPU8=y=new Uint8Array(n),u.HEAPU16=E=new Uint16Array(n),u.HEAPU32=_=new Uint32Array(n),u.HEAPF32=T=new Float32Array(n),u.HEAPF64=L=new Float64Array(n)}var d,y,m,E,g,_,T,L,A,O=[],P=[],b=[],N=0,I=null;function w(n){throw s(n=\"Aborted(\"+n+\")\"),h=!0,f(n=new WebAssembly.RuntimeError(n+\". Build with -sASSERTIONS for more info.\")),n}function S(){return r.startsWith(\"data:application/octet-stream;base64,\")}function R(){try{throw\"both async and sync fetching of the wasm failed\"}catch(n){w(n)}}function C(n){for(;0<n.length;)n.shift()(u)}function W(n){if(void 0===n)return\"_unknown\";var t=(n=n.replace(/[^a-zA-Z0-9_]/g,\"$\")).charCodeAt(0);return 48<=t&&57>=t?\"_\"+n:n}function U(n,t){return n=W(n),function(){return t.apply(this,arguments)}}r=\"yoga.wasm\",S()||(r=i+r);var M=[{},{value:void 0},{value:null},{value:!0},{value:!1}],F=[];function D(n){var t=Error,r=U(n,function(t){this.name=n,this.message=t,void 0!==(t=Error(t).stack)&&(this.stack=this.toString()+\"\\n\"+t.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});return r.prototype=Object.create(t.prototype),r.prototype.constructor=r,r.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message},r}var k=void 0;function V(n){throw new k(n)}var j=n=>(n||V(\"Cannot use deleted val. handle = \"+n),M[n].value),G=n=>{switch(n){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var t=F.length?F.pop():M.length;return M[t]={fa:1,value:n},t}},Y=void 0,X=void 0;function B(n){for(var t=\"\";y[n];)t+=X[y[n++]];return t}var H=[];function x(){for(;H.length;){var n=H.pop();n.L.Z=!1,n.delete()}}var z=void 0,$={};function Z(n,t){for(void 0===t&&V(\"ptr should not be undefined\");n.P;)t=n.aa(t),n=n.P;return t}var J={};function q(n){var t=B(n=nz(n));return nZ(n),t}function K(n,t){var r=J[n];return void 0===r&&V(t+\" has unknown type \"+q(n)),r}function Q(){}var nn=!1;function nt(n){--n.count.value,0===n.count.value&&(n.S?n.T.V(n.S):n.O.M.V(n.N))}var nr={},ne=void 0;function na(n){throw new ne(n)}function ni(n,t){return t.O&&t.N||na(\"makeClassHandle requires ptr and ptrType\"),!!t.T!=!!t.S&&na(\"Both smartPtrType and smartPtr must be specified\"),t.count={value:1},no(Object.create(n,{L:{value:t}}))}function no(n){return\"undefined\"==typeof FinalizationRegistry?(no=n=>n,n):(nn=new FinalizationRegistry(n=>{nt(n.L)}),no=n=>{var t=n.L;return t.S&&nn.register(n,{L:t},n),n},Q=n=>{nn.unregister(n)},no(n))}var ns={};function nu(n){for(;n.length;){var t=n.pop();n.pop()(t)}}function nc(n){return this.fromWireType(g[n>>2])}var nf={},nl={};function nh(n,t,r){function e(t){(t=r(t)).length!==n.length&&na(\"Mismatched type converter count\");for(var e=0;e<n.length;++e)nv(n[e],t[e])}n.forEach(function(n){nl[n]=t});var a=Array(t.length),i=[],o=0;t.forEach((n,t)=>{J.hasOwnProperty(n)?a[t]=J[n]:(i.push(n),nf.hasOwnProperty(n)||(nf[n]=[]),nf[n].push(()=>{a[t]=J[n],++o===i.length&&e(a)}))}),0===i.length&&e(a)}function np(n){switch(n){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw TypeError(\"Unknown type size: \"+n)}}function nv(n,t,r={}){if(!(\"argPackAdvance\"in t))throw TypeError(\"registerType registeredInstance requires argPackAdvance\");var e=t.name;if(n||V('type \"'+e+'\" must have a positive integer typeid pointer'),J.hasOwnProperty(n)){if(r.ta)return;V(\"Cannot register type '\"+e+\"' twice\")}J[n]=t,delete nl[n],nf.hasOwnProperty(n)&&(t=nf[n],delete nf[n],t.forEach(n=>n()))}function nd(n){V(n.L.O.M.name+\" instance already deleted\")}function ny(){}function nm(n,t,r){if(void 0===n[t].R){var e=n[t];n[t]=function(){return n[t].R.hasOwnProperty(arguments.length)||V(\"Function '\"+r+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+n[t].R+\")!\"),n[t].R[arguments.length].apply(this,arguments)},n[t].R=[],n[t].R[e.Y]=e}}function nE(n,t,r,e,a,i,o,s){this.name=n,this.constructor=t,this.W=r,this.V=e,this.P=a,this.oa=i,this.aa=o,this.ma=s,this.ia=[]}function ng(n,t,r){for(;t!==r;)t.aa||V(\"Expected null or instance of \"+r.name+\", got an instance of \"+t.name),n=t.aa(n),t=t.P;return n}function n_(n,t){return null===t?(this.da&&V(\"null is not a valid \"+this.name),0):(t.L||V('Cannot pass \"'+nC(t)+'\" as a '+this.name),t.L.N||V(\"Cannot pass deleted object as a pointer of type \"+this.name),ng(t.L.N,t.L.O.M,this.M))}function nT(n,t){if(null===t){if(this.da&&V(\"null is not a valid \"+this.name),this.ca){var r=this.ea();return null!==n&&n.push(this.V,r),r}return 0}if(t.L||V('Cannot pass \"'+nC(t)+'\" as a '+this.name),t.L.N||V(\"Cannot pass deleted object as a pointer of type \"+this.name),!this.ba&&t.L.O.ba&&V(\"Cannot convert argument of type \"+(t.L.T?t.L.T.name:t.L.O.name)+\" to parameter type \"+this.name),r=ng(t.L.N,t.L.O.M,this.M),this.ca)switch(void 0===t.L.S&&V(\"Passing raw pointer to smart pointer is illegal\"),this.Aa){case 0:t.L.T===this?r=t.L.S:V(\"Cannot convert argument of type \"+(t.L.T?t.L.T.name:t.L.O.name)+\" to parameter type \"+this.name);break;case 1:r=t.L.S;break;case 2:if(t.L.T===this)r=t.L.S;else{var e=t.clone();r=this.wa(r,G(function(){e.delete()})),null!==n&&n.push(this.V,r)}break;default:V(\"Unsupporting sharing policy\")}return r}function nL(n,t){return null===t?(this.da&&V(\"null is not a valid \"+this.name),0):(t.L||V('Cannot pass \"'+nC(t)+'\" as a '+this.name),t.L.N||V(\"Cannot pass deleted object as a pointer of type \"+this.name),t.L.O.ba&&V(\"Cannot convert argument of type \"+t.L.O.name+\" to parameter type \"+this.name),ng(t.L.N,t.L.O.M,this.M))}function nA(n,t,r,e){this.name=n,this.M=t,this.da=r,this.ba=e,this.ca=!1,this.V=this.wa=this.ea=this.ja=this.Aa=this.va=void 0,void 0!==t.P?this.toWireType=nT:(this.toWireType=e?n_:nL,this.U=null)}var nO=[];function nP(n){var t=nO[n];return t||(n>=nO.length&&(nO.length=n+1),nO[n]=t=A.get(n)),t}function nb(n,t){var r,e,a=(n=B(n)).includes(\"j\")?(r=n,e=[],function(){if(e.length=0,Object.assign(e,arguments),r.includes(\"j\")){var n=u[\"dynCall_\"+r];n=e&&e.length?n.apply(null,[t].concat(e)):n.call(null,t)}else n=nP(t).apply(null,e);return n}):nP(t);return\"function\"!=typeof a&&V(\"unknown function pointer with signature \"+n+\": \"+t),a}var nN=void 0;function nI(n,t){var r=[],e={};throw t.forEach(function n(t){e[t]||J[t]||(nl[t]?nl[t].forEach(n):(r.push(t),e[t]=!0))}),new nN(n+\": \"+r.map(q).join([\", \"]))}function nw(n,t,r,e,a){var i=t.length;2>i&&V(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var o=null!==t[1]&&null!==r,s=!1;for(r=1;r<t.length;++r)if(null!==t[r]&&void 0===t[r].U){s=!0;break}var u=\"void\"!==t[0].name,c=i-2,f=Array(c),l=[],h=[];return function(){if(arguments.length!==c&&V(\"function \"+n+\" called with \"+arguments.length+\" arguments, expected \"+c+\" args!\"),h.length=0,l.length=o?2:1,l[0]=a,o){var r=t[1].toWireType(h,this);l[1]=r}for(var i=0;i<c;++i)f[i]=t[i+2].toWireType(h,arguments[i]),l.push(f[i]);if(i=e.apply(null,l),s)nu(h);else for(var p=o?1:2;p<t.length;p++){var v=1===p?r:f[p-2];null!==t[p].U&&t[p].U(v)}return u?t[0].fromWireType(i):void 0}}function nS(n,t){for(var r=[],e=0;e<n;e++)r.push(_[t+4*e>>2]);return r}function nR(n){4<n&&0==--M[n].fa&&(M[n]=void 0,F.push(n))}function nC(n){if(null===n)return\"null\";var t=typeof n;return\"object\"===t||\"array\"===t||\"function\"===t?n.toString():\"\"+n}function nW(n,t){for(var r=\"\",e=0;!(e>=t/2);++e){var a=m[n+2*e>>1];if(0==a)break;r+=String.fromCharCode(a)}return r}function nU(n,t,r){if(void 0===r&&(r=2147483647),2>r)return 0;r-=2;var e=t;r=r<2*n.length?r/2:n.length;for(var a=0;a<r;++a)m[t>>1]=n.charCodeAt(a),t+=2;return m[t>>1]=0,t-e}function nM(n){return 2*n.length}function nF(n,t){for(var r=0,e=\"\";!(r>=t/4);){var a=g[n+4*r>>2];if(0==a)break;++r,65536<=a?(a-=65536,e+=String.fromCharCode(55296|a>>10,56320|1023&a)):e+=String.fromCharCode(a)}return e}function nD(n,t,r){if(void 0===r&&(r=2147483647),4>r)return 0;var e=t;r=e+r-4;for(var a=0;a<n.length;++a){var i=n.charCodeAt(a);if(55296<=i&&57343>=i&&(i=65536+((1023&i)<<10)|1023&n.charCodeAt(++a)),g[t>>2]=i,(t+=4)+4>r)break}return g[t>>2]=0,t-e}function nk(n){for(var t=0,r=0;r<n.length;++r){var e=n.charCodeAt(r);55296<=e&&57343>=e&&++r,t+=4}return t}var nV={};function nj(n){var t=nV[n];return void 0===t?B(n):t}var nG=[],nY=[],nX=[null,[],[]];k=u.BindingError=D(\"BindingError\"),u.count_emval_handles=function(){for(var n=0,t=5;t<M.length;++t)void 0!==M[t]&&++n;return n},u.get_first_emval=function(){for(var n=5;n<M.length;++n)if(void 0!==M[n])return M[n];return null},Y=u.PureVirtualError=D(\"PureVirtualError\");for(var nB=Array(256),nH=0;256>nH;++nH)nB[nH]=String.fromCharCode(nH);X=nB,u.getInheritedInstanceCount=function(){return Object.keys($).length},u.getLiveInheritedInstances=function(){var n,t=[];for(n in $)$.hasOwnProperty(n)&&t.push($[n]);return t},u.flushPendingDeletes=x,u.setDelayFunction=function(n){z=n,H.length&&z&&z(x)},ne=u.InternalError=D(\"InternalError\"),ny.prototype.isAliasOf=function(n){if(!(this instanceof ny&&n instanceof ny))return!1;var t=this.L.O.M,r=this.L.N,e=n.L.O.M;for(n=n.L.N;t.P;)r=t.aa(r),t=t.P;for(;e.P;)n=e.aa(n),e=e.P;return t===e&&r===n},ny.prototype.clone=function(){if(this.L.N||nd(this),this.L.$)return this.L.count.value+=1,this;var n=no,t=Object,r=t.create,e=Object.getPrototypeOf(this),a=this.L;return n=n(r.call(t,e,{L:{value:{count:a.count,Z:a.Z,$:a.$,N:a.N,O:a.O,S:a.S,T:a.T}}})),n.L.count.value+=1,n.L.Z=!1,n},ny.prototype.delete=function(){this.L.N||nd(this),this.L.Z&&!this.L.$&&V(\"Object already scheduled for deletion\"),Q(this),nt(this.L),this.L.$||(this.L.S=void 0,this.L.N=void 0)},ny.prototype.isDeleted=function(){return!this.L.N},ny.prototype.deleteLater=function(){return this.L.N||nd(this),this.L.Z&&!this.L.$&&V(\"Object already scheduled for deletion\"),H.push(this),1===H.length&&z&&z(x),this.L.Z=!0,this},nA.prototype.pa=function(n){return this.ja&&(n=this.ja(n)),n},nA.prototype.ga=function(n){this.V&&this.V(n)},nA.prototype.argPackAdvance=8,nA.prototype.readValueFromPointer=nc,nA.prototype.deleteObject=function(n){null!==n&&n.delete()},nA.prototype.fromWireType=function(n){function t(){return this.ca?ni(this.M.W,{O:this.va,N:e,T:this,S:n}):ni(this.M.W,{O:this,N:n})}var r,e=this.pa(n);if(!e)return this.ga(n),null;var a=$[Z(this.M,e)];if(void 0!==a)return 0===a.L.count.value?(a.L.N=e,a.L.S=n,a.clone()):(a=a.clone(),this.ga(n),a);if(!(a=nr[a=this.M.oa(e)]))return t.call(this);a=this.ba?a.ka:a.pointerType;var i=function n(t,r,e){return r===e?t:void 0===e.P?null:null===(t=n(t,r,e.P))?null:e.ma(t)}(e,this.M,a.M);return null===i?t.call(this):this.ca?ni(a.M.W,{O:a,N:i,T:this,S:n}):ni(a.M.W,{O:a,N:i})},nN=u.UnboundTypeError=D(\"UnboundTypeError\");var nx={q:function(n,t,r){n=B(n),t=K(t,\"wrapper\"),r=j(r);var e=[].slice,a=t.M,i=a.W,o=a.P.W,s=a.P.constructor;for(var u in n=U(n,function(){a.P.ia.forEach((function(n){if(this[n]===o[n])throw new Y(\"Pure virtual function \"+n+\" must be implemented in JavaScript\")}).bind(this)),Object.defineProperty(this,\"__parent\",{value:i}),this.__construct.apply(this,e.call(arguments))}),i.__construct=function(){this===i&&V(\"Pass correct 'this' to __construct\");var n=s.implement.apply(void 0,[this].concat(e.call(arguments)));Q(n);var t=n.L;n.notifyOnDestruction(),t.$=!0,Object.defineProperties(this,{L:{value:t}}),no(this),n=Z(a,n=t.N),$.hasOwnProperty(n)?V(\"Tried to register registered instance: \"+n):$[n]=this},i.__destruct=function(){this===i&&V(\"Pass correct 'this' to __destruct\"),Q(this);var n=this.L.N;n=Z(a,n),$.hasOwnProperty(n)?delete $[n]:V(\"Tried to unregister unregistered instance: \"+n)},n.prototype=Object.create(i),r)n.prototype[u]=r[u];return G(n)},l:function(n){var t=ns[n];delete ns[n];var r=t.ea,e=t.V,a=t.ha;nh([n],a.map(n=>n.sa).concat(a.map(n=>n.ya)),n=>{var i={};return a.forEach((t,r)=>{var e=n[r],o=t.qa,s=t.ra,u=n[r+a.length],c=t.xa,f=t.za;i[t.na]={read:n=>e.fromWireType(o(s,n)),write:(n,t)=>{var r=[];c(f,n,u.toWireType(r,t)),nu(r)}}}),[{name:t.name,fromWireType:function(n){var t,r={};for(t in i)r[t]=i[t].read(n);return e(n),r},toWireType:function(n,t){for(var a in i)if(!(a in t))throw TypeError('Missing field: \"'+a+'\"');var o=r();for(a in i)i[a].write(o,t[a]);return null!==n&&n.push(e,o),o},argPackAdvance:8,readValueFromPointer:nc,U:e}]})},v:function(){},B:function(n,t,r,e,a){var i=np(r);nv(n,{name:t=B(t),fromWireType:function(n){return!!n},toWireType:function(n,t){return t?e:a},argPackAdvance:8,readValueFromPointer:function(n){if(1===r)var e=d;else if(2===r)e=m;else if(4===r)e=g;else throw TypeError(\"Unknown boolean type size: \"+t);return this.fromWireType(e[n>>i])},U:null})},h:function(n,t,r,e,a,i,o,s,c,f,l,h,p){l=B(l),i=nb(a,i),s&&(s=nb(o,s)),f&&(f=nb(c,f)),p=nb(h,p);var v,d=W(l);v=function(){nI(\"Cannot construct \"+l+\" due to unbound types\",[e])},u.hasOwnProperty(d)?(V(\"Cannot register public name '\"+d+\"' twice\"),nm(u,d,d),u.hasOwnProperty(void 0)&&V(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),u[d].R[void 0]=v):u[d]=v,nh([n,t,r],e?[e]:[],function(t){if(t=t[0],e)var r,a=t.M,o=a.W;else o=ny.prototype;t=U(d,function(){if(Object.getPrototypeOf(this)!==c)throw new k(\"Use 'new' to construct \"+l);if(void 0===h.X)throw new k(l+\" has no accessible constructor\");var n=h.X[arguments.length];if(void 0===n)throw new k(\"Tried to invoke ctor of \"+l+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(h.X).toString()+\") parameters instead!\");return n.apply(this,arguments)});var c=Object.create(o,{constructor:{value:t}});t.prototype=c;var h=new nE(l,t,c,p,a,i,s,f);a=new nA(l,h,!0,!1),o=new nA(l+\"*\",h,!1,!1);var v=new nA(l+\" const*\",h,!1,!0);return nr[n]={pointerType:o,ka:v},r=t,u.hasOwnProperty(d)||na(\"Replacing nonexistant public symbol\"),u[d]=r,u[d].Y=void 0,[a,o,v]})},d:function(n,t,r,e,a,i,o){var s=nS(r,e);t=B(t),i=nb(a,i),nh([],[n],function(n){function e(){nI(\"Cannot call \"+a+\" due to unbound types\",s)}var a=(n=n[0]).name+\".\"+t;t.startsWith(\"@@\")&&(t=Symbol[t.substring(2)]);var u=n.M.constructor;return void 0===u[t]?(e.Y=r-1,u[t]=e):(nm(u,t,a),u[t].R[r-1]=e),nh([],s,function(n){return n=nw(a,[n[0],null].concat(n.slice(1)),null,i,o),void 0===u[t].R?(n.Y=r-1,u[t]=n):u[t].R[r-1]=n,[]}),[]})},p:function(n,t,r,e,a,i){0<t||w();var o=nS(t,r);a=nb(e,a),nh([],[n],function(n){var r=\"constructor \"+(n=n[0]).name;if(void 0===n.M.X&&(n.M.X=[]),void 0!==n.M.X[t-1])throw new k(\"Cannot register multiple constructors with identical number of parameters (\"+(t-1)+\") for class '\"+n.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");return n.M.X[t-1]=()=>{nI(\"Cannot construct \"+n.name+\" due to unbound types\",o)},nh([],o,function(e){return e.splice(1,0,null),n.M.X[t-1]=nw(r,e,null,a,i),[]}),[]})},a:function(n,t,r,e,a,i,o,s){var u=nS(r,e);t=B(t),i=nb(a,i),nh([],[n],function(n){function e(){nI(\"Cannot call \"+a+\" due to unbound types\",u)}var a=(n=n[0]).name+\".\"+t;t.startsWith(\"@@\")&&(t=Symbol[t.substring(2)]),s&&n.M.ia.push(t);var c=n.M.W,f=c[t];return void 0===f||void 0===f.R&&f.className!==n.name&&f.Y===r-2?(e.Y=r-2,e.className=n.name,c[t]=e):(nm(c,t,a),c[t].R[r-2]=e),nh([],u,function(e){return e=nw(a,e,n,i,o),void 0===c[t].R?(e.Y=r-2,c[t]=e):c[t].R[r-2]=e,[]}),[]})},A:function(n,t){nv(n,{name:t=B(t),fromWireType:function(n){var t=j(n);return nR(n),t},toWireType:function(n,t){return G(t)},argPackAdvance:8,readValueFromPointer:nc,U:null})},n:function(n,t,r){r=np(r),nv(n,{name:t=B(t),fromWireType:function(n){return n},toWireType:function(n,t){return t},argPackAdvance:8,readValueFromPointer:function(n,t){switch(t){case 2:return function(n){return this.fromWireType(T[n>>2])};case 3:return function(n){return this.fromWireType(L[n>>3])};default:throw TypeError(\"Unknown float type: \"+n)}}(t,r),U:null})},e:function(n,t,r,e,a){t=B(t),-1===a&&(a=4294967295),a=np(r);var i=n=>n;if(0===e){var o=32-8*r;i=n=>n<<o>>>o}r=t.includes(\"unsigned\")?function(n,t){return t>>>0}:function(n,t){return t},nv(n,{name:t,fromWireType:i,toWireType:r,argPackAdvance:8,readValueFromPointer:function(n,t,r){switch(t){case 0:return r?function(n){return d[n]}:function(n){return y[n]};case 1:return r?function(n){return m[n>>1]}:function(n){return E[n>>1]};case 2:return r?function(n){return g[n>>2]}:function(n){return _[n>>2]};default:throw TypeError(\"Unknown integer type: \"+n)}}(t,a,0!==e),U:null})},b:function(n,t,r){function e(n){n>>=2;var t=_;return new a(t.buffer,t[n+1],t[n])}var a=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][t];nv(n,{name:r=B(r),fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{ta:!0})},o:function(n,t){var r=\"std::string\"===(t=B(t));nv(n,{name:t,fromWireType:function(n){var t=_[n>>2],e=n+4;if(r)for(var a=e,i=0;i<=t;++i){var o=e+i;if(i==t||0==y[o]){if(a=a?p(y,a,o-a):\"\",void 0===s)var s=a;else s+=\"\\x00\"+a;a=o+1}}else{for(i=0,s=Array(t);i<t;++i)s[i]=String.fromCharCode(y[e+i]);s=s.join(\"\")}return nZ(n),s},toWireType:function(n,t){t instanceof ArrayBuffer&&(t=new Uint8Array(t));var e,a=\"string\"==typeof t;if(a||t instanceof Uint8Array||t instanceof Uint8ClampedArray||t instanceof Int8Array||V(\"Cannot pass non-string to std::string\"),r&&a){var i=0;for(e=0;e<t.length;++e){var o=t.charCodeAt(e);127>=o?i++:2047>=o?i+=2:55296<=o&&57343>=o?(i+=4,++e):i+=3}e=i}else e=t.length;if(o=(i=n$(4+e+1))+4,_[i>>2]=e,r&&a){if(a=o,o=e+1,e=y,0<o){o=a+o-1;for(var s=0;s<t.length;++s){var u=t.charCodeAt(s);if(55296<=u&&57343>=u&&(u=65536+((1023&u)<<10)|1023&t.charCodeAt(++s)),127>=u){if(a>=o)break;e[a++]=u}else{if(2047>=u){if(a+1>=o)break;e[a++]=192|u>>6}else{if(65535>=u){if(a+2>=o)break;e[a++]=224|u>>12}else{if(a+3>=o)break;e[a++]=240|u>>18,e[a++]=128|u>>12&63}e[a++]=128|u>>6&63}e[a++]=128|63&u}}e[a]=0}}else if(a)for(a=0;a<e;++a)255<(s=t.charCodeAt(a))&&(nZ(o),V(\"String has UTF-16 code units that do not fit in 8 bits\")),y[o+a]=s;else for(a=0;a<e;++a)y[o+a]=t[a];return null!==n&&n.push(nZ,i),i},argPackAdvance:8,readValueFromPointer:nc,U:function(n){nZ(n)}})},k:function(n,t,r){if(r=B(r),2===t)var e=nW,a=nU,i=nM,o=()=>E,s=1;else 4===t&&(e=nF,a=nD,i=nk,o=()=>_,s=2);nv(n,{name:r,fromWireType:function(n){for(var r,a=_[n>>2],i=o(),u=n+4,c=0;c<=a;++c){var f=n+4+c*t;(c==a||0==i[f>>s])&&(u=e(u,f-u),void 0===r?r=u:r+=\"\\x00\"+u,u=f+t)}return nZ(n),r},toWireType:function(n,e){\"string\"!=typeof e&&V(\"Cannot pass non-string to C++ string type \"+r);var o=i(e),u=n$(4+o+t);return _[u>>2]=o>>s,a(e,u+4,o+t),null!==n&&n.push(nZ,u),u},argPackAdvance:8,readValueFromPointer:nc,U:function(n){nZ(n)}})},m:function(n,t,r,e,a,i){ns[n]={name:B(t),ea:nb(r,e),V:nb(a,i),ha:[]}},c:function(n,t,r,e,a,i,o,s,u,c){ns[n].ha.push({na:B(t),sa:r,qa:nb(e,a),ra:i,ya:o,xa:nb(s,u),za:c})},C:function(n,t){nv(n,{ua:!0,name:t=B(t),argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},t:function(n,t,r,e,a){n=nG[n],t=j(t),r=nj(r);var i=[];return _[e>>2]=G(i),n(t,r,i,a)},j:function(n,t,r,e){n=nG[n],n(t=j(t),r=nj(r),null,e)},f:nR,g:function(n,t){var r,e,a=function(n,t){for(var r=Array(n),e=0;e<n;++e)r[e]=K(_[t+4*e>>2],\"parameter \"+e);return r}(n,t),i=a[0],o=nY[t=i.name+\"_$\"+a.slice(1).map(function(n){return n.name}).join(\"_\")+\"$\"];if(void 0!==o)return o;var s=Array(n-1);return r=(t,r,e,o)=>{for(var u=0,c=0;c<n-1;++c)s[c]=a[c+1].readValueFromPointer(o+u),u+=a[c+1].argPackAdvance;for(c=0,t=t[r].apply(t,s);c<n-1;++c)a[c+1].la&&a[c+1].la(s[c]);if(!i.ua)return i.toWireType(e,t)},e=nG.length,nG.push(r),o=e,nY[t]=o},r:function(n){4<n&&(M[n].fa+=1)},s:function(n){nu(j(n)),nR(n)},i:function(){w(\"\")},x:function(n,t,r){y.copyWithin(n,t,t+r)},w:function(n){var t=y.length;if(2147483648<(n>>>=0))return!1;for(var r=1;4>=r;r*=2){var e=t*(1+.2/r);e=Math.min(e,n+100663296);var a=Math,i=a.min;e=Math.max(n,e),e+=(65536-e%65536)%65536;n:{var o=l.buffer;try{l.grow(i.call(a,2147483648,e)-o.byteLength+65535>>>16),v();var s=1;break n}catch(n){}s=void 0}if(s)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(n,t,r,e){for(var a=0,i=0;i<r;i++){var u=_[t>>2],c=_[t+4>>2];t+=8;for(var f=0;f<c;f++){var l=y[u+f],h=nX[n];0===l||10===l?((1===n?o:s)(p(h,0)),h.length=0):h.push(l)}a+=c}return _[e>>2]=a,0}};!function(){function n(n){u.asm=n.exports,l=u.asm.D,v(),A=u.asm.I,P.unshift(u.asm.E),0==--N&&I&&(n=I,I=null,n())}function t(t){n(t.instance)}function e(n){return(\"function\"==typeof fetch?fetch(r,{credentials:\"same-origin\"}).then(function(n){if(!n.ok)throw\"failed to load wasm binary file at '\"+r+\"'\";return n.arrayBuffer()}).catch(function(){return R()}):Promise.resolve().then(function(){return R()})).then(function(n){return WebAssembly.instantiate(n,a)}).then(function(n){return n}).then(n,function(n){s(\"failed to asynchronously prepare wasm: \"+n),w(n)})}var a={a:nx};if(N++,u.instantiateWasm)try{return u.instantiateWasm(a,n)}catch(n){s(\"Module.instantiateWasm callback failed with error: \"+n),f(n)}(\"function\"!=typeof WebAssembly.instantiateStreaming||S()||\"function\"!=typeof fetch?e(t):fetch(r,{credentials:\"same-origin\"}).then(function(n){return WebAssembly.instantiateStreaming(n,a).then(t,function(n){return s(\"wasm streaming compile failed: \"+n),s(\"falling back to ArrayBuffer instantiation\"),e(t)})})).catch(f)}();var nz=u.___getTypeName=function(){return(nz=u.___getTypeName=u.asm.F).apply(null,arguments)};function n$(){return(n$=u.asm.H).apply(null,arguments)}function nZ(){return(nZ=u.asm.J).apply(null,arguments)}function nJ(){0<N||(C(O),0<N||e||(e=!0,u.calledRun=!0,h||(C(P),c(u),C(b))))}return u.__embind_initialize_bindings=function(){return(u.__embind_initialize_bindings=u.asm.G).apply(null,arguments)},u.dynCall_jiji=function(){return(u.dynCall_jiji=u.asm.K).apply(null,arguments)},I=function n(){e||nJ(),e||(I=n)},nJ(),t.ready}})();async function initYoga(t){let r=await yoga({instantiateWasm(n,r){WebAssembly.instantiate(t,n).then(n=>{n instanceof WebAssembly.Instance?r(n):r(n.instance)})}});return n(r)}async function initStreaming(t){let r=await yoga({instantiateWasm(n,r){WebAssembly.instantiateStreaming(t,n).then(({instance:n})=>{r(n)})}});return n(r)}export{initYoga as default,initStreaming};\n","import{readFile as E}from\"node:fs/promises\";import{createRequire as _}from\"node:module\";import a from\"./index.js\";export{A as ALIGN_AUTO,e as ALIGN_BASELINE,b as ALIGN_CENTER,c as ALIGN_FLEX_END,a as ALIGN_FLEX_START,g as ALIGN_SPACE_AROUND,f as ALIGN_SPACE_BETWEEN,d as ALIGN_STRETCH,h as DIMENSION_HEIGHT,D as DIMENSION_WIDTH,i as DIRECTION_INHERIT,j as DIRECTION_LTR,k as DIRECTION_RTL,l as DISPLAY_FLEX,m as DISPLAY_NONE,u as EDGE_ALL,p as EDGE_BOTTOM,r as EDGE_END,s as EDGE_HORIZONTAL,E as EDGE_LEFT,o as EDGE_RIGHT,q as EDGE_START,n as EDGE_TOP,t as EDGE_VERTICAL,x as EXPERIMENTAL_FEATURE_ABSOLUTE_PERCENTAGE_AGAINST_PADDING_EDGE,y as EXPERIMENTAL_FEATURE_FIX_ABSOLUTE_TRAILING_COLUMN_MARGIN,v as EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS,F as FLEX_DIRECTION_COLUMN,z as FLEX_DIRECTION_COLUMN_REVERSE,B as FLEX_DIRECTION_ROW,C as FLEX_DIRECTION_ROW_REVERSE,I as GUTTER_ALL,G as GUTTER_COLUMN,H as GUTTER_ROW,K as JUSTIFY_CENTER,L as JUSTIFY_FLEX_END,J as JUSTIFY_FLEX_START,N as JUSTIFY_SPACE_AROUND,M as JUSTIFY_SPACE_BETWEEN,O as JUSTIFY_SPACE_EVENLY,S as LOG_LEVEL_DEBUG,P as LOG_LEVEL_ERROR,U as LOG_LEVEL_FATAL,R as LOG_LEVEL_INFO,T as LOG_LEVEL_VERBOSE,Q as LOG_LEVEL_WARN,X as MEASURE_MODE_AT_MOST,W as MEASURE_MODE_EXACTLY,V as MEASURE_MODE_UNDEFINED,Y as NODE_TYPE_DEFAULT,Z as NODE_TYPE_TEXT,$ as OVERFLOW_HIDDEN,a0 as OVERFLOW_SCROLL,_ as OVERFLOW_VISIBLE,a3 as POSITION_TYPE_ABSOLUTE,a2 as POSITION_TYPE_RELATIVE,a1 as POSITION_TYPE_STATIC,a6 as PRINT_OPTIONS_CHILDREN,a4 as PRINT_OPTIONS_LAYOUT,a5 as PRINT_OPTIONS_STYLE,aa as UNIT_AUTO,a9 as UNIT_PERCENT,a8 as UNIT_POINT,a7 as UNIT_UNDEFINED,ab as WRAP_NO_WRAP,ac as WRAP_WRAP,ad as WRAP_WRAP_REVERSE}from\"./wrapAsm-f766f97f.js\";let Yoga=await a(await E(_(import.meta.url).resolve(\"./yoga.wasm\")));export{Yoga as default};\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
|