silvery 0.17.4 → 0.18.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.
Files changed (154) hide show
  1. package/README.md +7 -13
  2. package/dist/{UPNG-AVSMjiFE.mjs → UPNG-DvKjM6wE.mjs} +1 -1
  3. package/dist/{UPNG-AVSMjiFE.mjs.map → UPNG-DvKjM6wE.mjs.map} +1 -1
  4. package/dist/{__vite-browser-external-2447137e-D3GdsvS_.mjs → __vite-browser-external-2447137e-DPKHHqQK.mjs} +1 -1
  5. package/dist/{__vite-browser-external-2447137e-D3GdsvS_.mjs.map → __vite-browser-external-2447137e-DPKHHqQK.mjs.map} +1 -1
  6. package/dist/{animation-C_PTO0uH.mjs → animation-DhINOJk8.mjs} +1 -1
  7. package/dist/{animation-C_PTO0uH.mjs.map → animation-DhINOJk8.mjs.map} +1 -1
  8. package/dist/{ansi-CXLE_pt1.mjs → ansi-C6Qs1Wn2.mjs} +1 -1
  9. package/dist/{ansi-CXLE_pt1.mjs.map → ansi-C6Qs1Wn2.mjs.map} +1 -1
  10. package/dist/{ansi-zmNzgkPB.d.mts → ansi-CsjnZtAw.d.mts} +1 -1
  11. package/dist/{ansi-zmNzgkPB.d.mts.map → ansi-CsjnZtAw.d.mts.map} +1 -1
  12. package/dist/apng-CvSlLBtc.mjs +3 -0
  13. package/dist/{apng-ENBAJk-H.mjs → apng-DFFVOItr.mjs} +3 -3
  14. package/dist/{apng-ENBAJk-H.mjs.map → apng-DFFVOItr.mjs.map} +1 -1
  15. package/dist/{backend-CkIkIHR-.mjs → backend-DU0Y938U.mjs} +1 -1
  16. package/dist/{backend-CkIkIHR-.mjs.map → backend-DU0Y938U.mjs.map} +1 -1
  17. package/dist/{backends-CkvbG3js.mjs → backends-BihMKFY_.mjs} +3 -3
  18. package/dist/{backends-CkvbG3js.mjs.map → backends-BihMKFY_.mjs.map} +1 -1
  19. package/dist/backends-Dk_5G_gC.mjs +3 -0
  20. package/dist/cli-GwJ0S2In.mjs +4 -0
  21. package/dist/{context-QreF3UHr.mjs → context-BjWgrikx.mjs} +1 -1
  22. package/dist/{context-QreF3UHr.mjs.map → context-BjWgrikx.mjs.map} +1 -1
  23. package/dist/{derive-D7bFJdfU.d.mts → derive-O_Kb1Bk_.d.mts} +3 -3
  24. package/dist/derive-O_Kb1Bk_.d.mts.map +1 -0
  25. package/dist/{devtools-owvUPfBi.mjs → devtools-CeO9X_uv.mjs} +4 -4
  26. package/dist/{devtools-owvUPfBi.mjs.map → devtools-CeO9X_uv.mjs.map} +1 -1
  27. package/dist/devtools-nX4tj6OH.mjs +2 -0
  28. package/dist/{eta-DLiVPaSD.mjs → eta-BnQSZcWf.mjs} +1 -1
  29. package/dist/{eta-DLiVPaSD.mjs.map → eta-BnQSZcWf.mjs.map} +1 -1
  30. package/dist/{flexily-zero-adapter-DmG4Ge8t.mjs → flexily-zero-adapter-BOM0cl8R.mjs} +61 -9
  31. package/dist/flexily-zero-adapter-BOM0cl8R.mjs.map +1 -0
  32. package/dist/{flexily-zero-adapter-GHwEW11s.mjs → flexily-zero-adapter-V8R3HQtK.mjs} +1 -1
  33. package/dist/{gif-Bp6fIyN3.mjs → gif-B9Uq4qZA.mjs} +3 -3
  34. package/dist/{gif-Bp6fIyN3.mjs.map → gif-B9Uq4qZA.mjs.map} +1 -1
  35. package/dist/gif-BdrLRBmM.mjs +3 -0
  36. package/dist/{gifenc-GiVCZ9-3.mjs → gifenc-DfhOb4xr.mjs} +1 -1
  37. package/dist/{gifenc-GiVCZ9-3.mjs.map → gifenc-DfhOb4xr.mjs.map} +1 -1
  38. package/dist/{image-Dx7gYjkq.mjs → image-B0zMbVUr.mjs} +136 -5
  39. package/dist/image-B0zMbVUr.mjs.map +1 -0
  40. package/dist/index-Bh3U1K09.d.mts +10823 -0
  41. package/dist/index-Bh3U1K09.d.mts.map +1 -0
  42. package/dist/{index-p-wBs_wH.d.mts → index-C4vrhbud.d.mts} +1 -1
  43. package/dist/{index-p-wBs_wH.d.mts.map → index-C4vrhbud.d.mts.map} +1 -1
  44. package/dist/{index-DCVL3jHo.d.mts → index-dehZ18K-.d.mts} +144 -99
  45. package/dist/index-dehZ18K-.d.mts.map +1 -0
  46. package/dist/index.d.mts +7 -7219
  47. package/dist/index.d.mts.map +1 -1
  48. package/dist/index.mjs +13 -9343
  49. package/dist/index.mjs.map +1 -1
  50. package/dist/{key-mapping-BsUHe_nk.mjs → key-mapping-7k2ufK2b.mjs} +1 -1
  51. package/dist/{key-mapping-DsyfLEdC.mjs → key-mapping-WLUmxjx1.mjs} +1 -1
  52. package/dist/{key-mapping-DsyfLEdC.mjs.map → key-mapping-WLUmxjx1.mjs.map} +1 -1
  53. package/dist/{layout-engine-D_lSR4i9.mjs → layout-engine--drvrWjD.mjs} +1 -1
  54. package/dist/{layout-engine-B3dsnVLU.mjs → layout-engine-Dr3cY5U4.mjs} +3 -3
  55. package/dist/{layout-engine-B3dsnVLU.mjs.map → layout-engine-Dr3cY5U4.mjs.map} +1 -1
  56. package/dist/{multi-progress-CQVB9lES.mjs → multi-progress-CcdqJFlf.mjs} +3 -3
  57. package/dist/{multi-progress-CQVB9lES.mjs.map → multi-progress-CcdqJFlf.mjs.map} +1 -1
  58. package/dist/{multi-progress-C0-rkn86.d.mts → multi-progress-DQ-uUzLf.d.mts} +2 -2
  59. package/dist/{multi-progress-C0-rkn86.d.mts.map → multi-progress-DQ-uUzLf.d.mts.map} +1 -1
  60. package/dist/{node-Dedx-6xF.mjs → node-CP5WChgr.mjs} +1 -1
  61. package/dist/{node-Dedx-6xF.mjs.map → node-CP5WChgr.mjs.map} +1 -1
  62. package/dist/{progress-bar-COPSBlT9.mjs → progress-bar-IrUjkLfU.mjs} +4 -4
  63. package/dist/{progress-bar-COPSBlT9.mjs.map → progress-bar-IrUjkLfU.mjs.map} +1 -1
  64. package/dist/{reconciler-B-NaZvbO.mjs → reconciler-B8uxQxaU.mjs} +57 -81
  65. package/dist/reconciler-B8uxQxaU.mjs.map +1 -0
  66. package/dist/{render-string-CZKpuKXo.mjs → render-string-BwLG7rIX.mjs} +1 -1
  67. package/dist/{pipeline-BmfaZb1O.mjs → render-string-DVfgc8xr.mjs} +836 -508
  68. package/dist/render-string-DVfgc8xr.mjs.map +1 -0
  69. package/dist/{resvg-js-V6oMi8CY.mjs → resvg-js-Cwipz-_J.mjs} +1 -1
  70. package/dist/{resvg-js-V6oMi8CY.mjs.map → resvg-js-Cwipz-_J.mjs.map} +1 -1
  71. package/dist/runtime.d.mts +2 -2
  72. package/dist/runtime.mjs +3 -3
  73. package/dist/{spinner-Cgej6Vnb.d.mts → spinner-BRkaJI0N.d.mts} +2 -2
  74. package/dist/{spinner-Cgej6Vnb.d.mts.map → spinner-BRkaJI0N.d.mts.map} +1 -1
  75. package/dist/{spinner-DSByknyx.mjs → spinner-BmldKx0M.mjs} +3 -3
  76. package/dist/{spinner-DSByknyx.mjs.map → spinner-BmldKx0M.mjs.map} +1 -1
  77. package/dist/{src-C9f3hiVG.mjs → src-C0sOQW-t.mjs} +402 -156
  78. package/dist/src-C0sOQW-t.mjs.map +1 -0
  79. package/dist/src-CJPXf3fC.mjs +18348 -0
  80. package/dist/src-CJPXf3fC.mjs.map +1 -0
  81. package/dist/{src-fJVbhdn-.mjs → src-D8kLrQBT.mjs} +1 -1
  82. package/dist/{src-fJVbhdn-.mjs.map → src-D8kLrQBT.mjs.map} +1 -1
  83. package/dist/{src-9B5k0JmY.mjs → src-D_BS-as7.mjs} +1130 -100
  84. package/dist/src-D_BS-as7.mjs.map +1 -0
  85. package/dist/theme.d.mts +45 -30
  86. package/dist/theme.d.mts.map +1 -1
  87. package/dist/theme.mjs +3 -3
  88. package/dist/{types-CDgkE-Rw.d.mts → types-B4A8Ebba.d.mts} +1 -1
  89. package/dist/{types-CDgkE-Rw.d.mts.map → types-B4A8Ebba.d.mts.map} +1 -1
  90. package/dist/types-e4dpfbSa.mjs +468 -0
  91. package/dist/types-e4dpfbSa.mjs.map +1 -0
  92. package/dist/ui/animation.d.mts +1 -1
  93. package/dist/ui/animation.mjs +1 -1
  94. package/dist/ui/ansi.d.mts +1 -1
  95. package/dist/ui/ansi.mjs +1 -1
  96. package/dist/ui/cli.d.mts +3 -3
  97. package/dist/ui/cli.mjs +5 -5
  98. package/dist/ui/display.d.mts +2 -2
  99. package/dist/ui/display.mjs +1 -1
  100. package/dist/ui/display.mjs.map +1 -1
  101. package/dist/ui/image.d.mts +1 -1
  102. package/dist/ui/image.mjs +1 -1
  103. package/dist/ui/input.d.mts +3 -3
  104. package/dist/ui/input.mjs +2 -2
  105. package/dist/ui/input.mjs.map +1 -1
  106. package/dist/ui/progress.d.mts +3 -3
  107. package/dist/ui/progress.mjs +4 -4
  108. package/dist/ui/progress.mjs.map +1 -1
  109. package/dist/ui/react.d.mts +3 -3
  110. package/dist/ui/react.mjs +4 -4
  111. package/dist/ui/react.mjs.map +1 -1
  112. package/dist/ui/utils.mjs +1 -1
  113. package/dist/ui/wrappers.d.mts +2 -2
  114. package/dist/ui/wrappers.mjs +1 -1
  115. package/dist/ui.d.mts +5 -5
  116. package/dist/ui.mjs +6 -6
  117. package/dist/{useLatest-BMIYXd6e.d.mts → useLatest-6xqnGIU6.d.mts} +1 -1
  118. package/dist/{useLatest-BMIYXd6e.d.mts.map → useLatest-6xqnGIU6.d.mts.map} +1 -1
  119. package/dist/{with-text-input-CmHf_9d6.d.mts → with-text-input-lUh9gYAG.d.mts} +3 -3
  120. package/dist/{with-text-input-CmHf_9d6.d.mts.map → with-text-input-lUh9gYAG.d.mts.map} +1 -1
  121. package/dist/{wrapper-Dqh0zi2W.mjs → wrapper-CE6GQ27z.mjs} +1 -1
  122. package/dist/{wrapper-Dqh0zi2W.mjs.map → wrapper-CE6GQ27z.mjs.map} +1 -1
  123. package/dist/{wrappers-hhL8EQ_n.mjs → wrappers-JrEYTuKA.mjs} +4 -4
  124. package/dist/wrappers-JrEYTuKA.mjs.map +1 -0
  125. package/dist/yoga-adapter-B8LZpQcE.mjs +2 -0
  126. package/dist/{yoga-adapter-BJ9SOhTY.mjs → yoga-adapter-Bc8XT9cN.mjs} +11 -2
  127. package/dist/yoga-adapter-Bc8XT9cN.mjs.map +1 -0
  128. package/package.json +19 -14
  129. package/dist/apng-DCWY913R.mjs +0 -3
  130. package/dist/backends-CyJqNLeK.mjs +0 -3
  131. package/dist/cli-B-k7Bm56.mjs +0 -4
  132. package/dist/derive-D7bFJdfU.d.mts.map +0 -1
  133. package/dist/devtools-DS9NseGT.mjs +0 -2
  134. package/dist/flexily-zero-adapter-DmG4Ge8t.mjs.map +0 -1
  135. package/dist/gif-BaJNREpP.mjs +0 -3
  136. package/dist/image-Dx7gYjkq.mjs.map +0 -1
  137. package/dist/index-CBcSpGSM.d.mts +0 -3416
  138. package/dist/index-CBcSpGSM.d.mts.map +0 -1
  139. package/dist/index-DCVL3jHo.d.mts.map +0 -1
  140. package/dist/pipeline-BmfaZb1O.mjs.map +0 -1
  141. package/dist/reconciler-B-NaZvbO.mjs.map +0 -1
  142. package/dist/render-string-Bvh1XzBv.mjs +0 -201
  143. package/dist/render-string-Bvh1XzBv.mjs.map +0 -1
  144. package/dist/runtime-PH2xY1DM.mjs +0 -8723
  145. package/dist/runtime-PH2xY1DM.mjs.map +0 -1
  146. package/dist/src-9B5k0JmY.mjs.map +0 -1
  147. package/dist/src-C9f3hiVG.mjs.map +0 -1
  148. package/dist/types-Bhj5QkIQ.mjs +0 -13
  149. package/dist/types-Bhj5QkIQ.mjs.map +0 -1
  150. package/dist/useLayout-BG2cGl15.mjs +0 -139
  151. package/dist/useLayout-BG2cGl15.mjs.map +0 -1
  152. package/dist/wrappers-hhL8EQ_n.mjs.map +0 -1
  153. package/dist/yoga-adapter-BJ9SOhTY.mjs.map +0 -1
  154. package/dist/yoga-adapter-Daq6-dw1.mjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"progress-bar-COPSBlT9.mjs","names":[],"sources":["../packages/ag-react/src/ui/cli/progress-bar.ts"],"sourcesContent":["/**\n * CLI ProgressBar - Determinate progress indicator with ETA\n */\n\nimport chalk from \"@silvery/ink/chalk\"\nimport type { ProgressBarOptions } from \"../types.js\"\nimport { CURSOR_HIDE, CURSOR_SHOW, CURSOR_TO_START, CLEAR_LINE_END, write, isTTY, getTerminalWidth } from \"./ansi\"\nimport { calculateETA, formatETA, DEFAULT_ETA_BUFFER_SIZE, type ETASample } from \"../utils/eta\"\n\n/** Default format string */\nconst DEFAULT_FORMAT = \":bar :percent | :current/:total | ETA: :eta\"\n\n/**\n * ProgressBar class for CLI progress indication\n *\n * @example\n * ```ts\n * const bar = new ProgressBar({ total: 100 });\n * bar.start();\n * for (let i = 0; i <= 100; i++) {\n * await doWork();\n * bar.update(i);\n * }\n * bar.stop();\n * ```\n */\nexport class ProgressBar {\n private total: number\n private format: string\n private width: number\n private complete: string\n private incomplete: string\n private stream: NodeJS.WriteStream\n private hideCursor: boolean\n private phases: Record<string, string>\n\n private current = 0\n private phase: string | null = null\n private startTime: number | null = null\n private isActive = false\n\n // ETA smoothing - track last N update times\n private etaBuffer: ETASample[] = []\n\n constructor(options: ProgressBarOptions = {}) {\n this.total = options.total ?? 100\n this.format = options.format ?? DEFAULT_FORMAT\n this.width = options.width ?? 40\n this.complete = options.complete ?? \"█\"\n this.incomplete = options.incomplete ?? \"░\"\n this.stream = options.stream ?? process.stdout\n this.hideCursor = options.hideCursor ?? true\n this.phases = options.phases ?? {}\n }\n\n /**\n * Start the progress bar\n */\n start(initialValue = 0, initialTotal?: number): this {\n if (initialTotal !== undefined) {\n this.total = initialTotal\n }\n\n this.current = initialValue\n this.startTime = Date.now()\n this.isActive = true\n this.etaBuffer = [{ time: this.startTime, value: initialValue }]\n\n if (this.hideCursor && isTTY(this.stream)) {\n write(CURSOR_HIDE, this.stream)\n }\n\n this.render()\n return this\n }\n\n /**\n * Update progress value\n */\n update(value: number, tokens?: Record<string, string | number>): this {\n this.current = Math.min(value, this.total)\n\n // Update ETA buffer\n const now = Date.now()\n this.etaBuffer.push({ time: now, value: this.current })\n if (this.etaBuffer.length > DEFAULT_ETA_BUFFER_SIZE) {\n this.etaBuffer.shift()\n }\n\n if (this.isActive) {\n this.render(tokens)\n }\n\n return this\n }\n\n /**\n * Increment progress by amount (default: 1)\n */\n increment(amount = 1, tokens?: Record<string, string | number>): this {\n return this.update(this.current + amount, tokens)\n }\n\n /**\n * Set the current phase (for multi-phase progress)\n */\n setPhase(phaseName: string, options?: { current?: number; total?: number }): this {\n this.phase = phaseName\n\n if (options?.total !== undefined) {\n this.total = options.total\n }\n if (options?.current !== undefined) {\n this.current = options.current\n // Reset ETA buffer on phase change\n this.etaBuffer = [{ time: Date.now(), value: this.current }]\n }\n\n if (this.isActive) {\n this.render()\n }\n\n return this\n }\n\n /**\n * Stop the progress bar\n */\n stop(clear = false): this {\n if (!this.isActive) {\n return this\n }\n\n this.isActive = false\n\n if (clear && isTTY(this.stream)) {\n write(`${CURSOR_TO_START}${CLEAR_LINE_END}`, this.stream)\n } else {\n write(\"\\n\", this.stream)\n }\n\n if (this.hideCursor && isTTY(this.stream)) {\n write(CURSOR_SHOW, this.stream)\n }\n\n return this\n }\n\n /** Get ETA in seconds using smoothed rate */\n private getETASeconds(): number | null {\n return calculateETA(this.etaBuffer, this.current, this.total)\n }\n\n /**\n * Render the progress bar\n */\n private render(tokens?: Record<string, string | number>): void {\n const percent = this.total > 0 ? this.current / this.total : 0\n const eta = this.getETASeconds()\n\n // Build the bar\n const completeLength = Math.round(this.width * percent)\n const incompleteLength = this.width - completeLength\n const bar = this.complete.repeat(completeLength) + this.incomplete.repeat(incompleteLength)\n\n // Get phase display name\n const phaseDisplay = this.phase ? (this.phases[this.phase] ?? this.phase) : \"\"\n\n // Calculate rate\n const elapsed = this.startTime ? (Date.now() - this.startTime) / 1000 : 0\n const rate = elapsed > 0 ? this.current / elapsed : 0\n\n // Replace tokens in format string\n let output = this.format\n .replace(\":bar\", chalk.cyan(bar))\n .replace(\":percent\", `${Math.round(percent * 100)}%`.padStart(4))\n .replace(\":current\", String(this.current))\n .replace(\":total\", String(this.total))\n .replace(\":eta\", formatETA(eta))\n .replace(\":elapsed\", formatETA(elapsed))\n .replace(\":rate\", rate.toFixed(1))\n .replace(\":phase\", chalk.dim(phaseDisplay))\n\n // Replace custom tokens\n if (tokens) {\n for (const [key, value] of Object.entries(tokens)) {\n output = output.replace(`:${key}`, String(value))\n }\n }\n\n // Truncate to terminal width\n const termWidth = getTerminalWidth(this.stream)\n if (output.length > termWidth) {\n output = output.slice(0, termWidth - 1)\n }\n\n if (isTTY(this.stream)) {\n write(`${CURSOR_TO_START}${output}${CLEAR_LINE_END}`, this.stream)\n }\n }\n\n /**\n * Get current progress ratio (0-1)\n */\n get ratio(): number {\n return this.total > 0 ? this.current / this.total : 0\n }\n\n /**\n * Get current progress percentage (0-100)\n */\n get percentage(): number {\n return Math.round(this.ratio * 100)\n }\n\n /**\n * Dispose the progress bar (calls stop)\n */\n [Symbol.dispose](): void {\n this.stop()\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"progress-bar-IrUjkLfU.mjs","names":[],"sources":["../packages/ag-react/src/ui/cli/progress-bar.ts"],"sourcesContent":["/**\n * CLI ProgressBar - Determinate progress indicator with ETA\n */\n\nimport chalk from \"@silvery/ink/chalk\"\nimport type { ProgressBarOptions } from \"../types.js\"\nimport { CURSOR_HIDE, CURSOR_SHOW, CURSOR_TO_START, CLEAR_LINE_END, write, isTTY, getTerminalWidth } from \"./ansi\"\nimport { calculateETA, formatETA, DEFAULT_ETA_BUFFER_SIZE, type ETASample } from \"../utils/eta\"\n\n/** Default format string */\nconst DEFAULT_FORMAT = \":bar :percent | :current/:total | ETA: :eta\"\n\n/**\n * ProgressBar class for CLI progress indication\n *\n * @example\n * ```ts\n * const bar = new ProgressBar({ total: 100 });\n * bar.start();\n * for (let i = 0; i <= 100; i++) {\n * await doWork();\n * bar.update(i);\n * }\n * bar.stop();\n * ```\n */\nexport class ProgressBar {\n private total: number\n private format: string\n private width: number\n private complete: string\n private incomplete: string\n private stream: NodeJS.WriteStream\n private hideCursor: boolean\n private phases: Record<string, string>\n\n private current = 0\n private phase: string | null = null\n private startTime: number | null = null\n private isActive = false\n\n // ETA smoothing - track last N update times\n private etaBuffer: ETASample[] = []\n\n constructor(options: ProgressBarOptions = {}) {\n this.total = options.total ?? 100\n this.format = options.format ?? DEFAULT_FORMAT\n this.width = options.width ?? 40\n this.complete = options.complete ?? \"█\"\n this.incomplete = options.incomplete ?? \"░\"\n this.stream = options.stream ?? process.stdout\n this.hideCursor = options.hideCursor ?? true\n this.phases = options.phases ?? {}\n }\n\n /**\n * Start the progress bar\n */\n start(initialValue = 0, initialTotal?: number): this {\n if (initialTotal !== undefined) {\n this.total = initialTotal\n }\n\n this.current = initialValue\n this.startTime = Date.now()\n this.isActive = true\n this.etaBuffer = [{ time: this.startTime, value: initialValue }]\n\n if (this.hideCursor && isTTY(this.stream)) {\n write(CURSOR_HIDE, this.stream)\n }\n\n this.render()\n return this\n }\n\n /**\n * Update progress value\n */\n update(value: number, tokens?: Record<string, string | number>): this {\n this.current = Math.min(value, this.total)\n\n // Update ETA buffer\n const now = Date.now()\n this.etaBuffer.push({ time: now, value: this.current })\n if (this.etaBuffer.length > DEFAULT_ETA_BUFFER_SIZE) {\n this.etaBuffer.shift()\n }\n\n if (this.isActive) {\n this.render(tokens)\n }\n\n return this\n }\n\n /**\n * Increment progress by amount (default: 1)\n */\n increment(amount = 1, tokens?: Record<string, string | number>): this {\n return this.update(this.current + amount, tokens)\n }\n\n /**\n * Set the current phase (for multi-phase progress)\n */\n setPhase(phaseName: string, options?: { current?: number; total?: number }): this {\n this.phase = phaseName\n\n if (options?.total !== undefined) {\n this.total = options.total\n }\n if (options?.current !== undefined) {\n this.current = options.current\n // Reset ETA buffer on phase change\n this.etaBuffer = [{ time: Date.now(), value: this.current }]\n }\n\n if (this.isActive) {\n this.render()\n }\n\n return this\n }\n\n /**\n * Stop the progress bar\n */\n stop(clear = false): this {\n if (!this.isActive) {\n return this\n }\n\n this.isActive = false\n\n if (clear && isTTY(this.stream)) {\n write(`${CURSOR_TO_START}${CLEAR_LINE_END}`, this.stream)\n } else {\n write(\"\\n\", this.stream)\n }\n\n if (this.hideCursor && isTTY(this.stream)) {\n write(CURSOR_SHOW, this.stream)\n }\n\n return this\n }\n\n /** Get ETA in seconds using smoothed rate */\n private getETASeconds(): number | null {\n return calculateETA(this.etaBuffer, this.current, this.total)\n }\n\n /**\n * Render the progress bar\n */\n private render(tokens?: Record<string, string | number>): void {\n const percent = this.total > 0 ? this.current / this.total : 0\n const eta = this.getETASeconds()\n\n // Build the bar\n const completeLength = Math.round(this.width * percent)\n const incompleteLength = this.width - completeLength\n const bar = this.complete.repeat(completeLength) + this.incomplete.repeat(incompleteLength)\n\n // Get phase display name\n const phaseDisplay = this.phase ? (this.phases[this.phase] ?? this.phase) : \"\"\n\n // Calculate rate\n const elapsed = this.startTime ? (Date.now() - this.startTime) / 1000 : 0\n const rate = elapsed > 0 ? this.current / elapsed : 0\n\n // Replace tokens in format string\n let output = this.format\n .replace(\":bar\", chalk.cyan(bar))\n .replace(\":percent\", `${Math.round(percent * 100)}%`.padStart(4))\n .replace(\":current\", String(this.current))\n .replace(\":total\", String(this.total))\n .replace(\":eta\", formatETA(eta))\n .replace(\":elapsed\", formatETA(elapsed))\n .replace(\":rate\", rate.toFixed(1))\n .replace(\":phase\", chalk.dim(phaseDisplay))\n\n // Replace custom tokens\n if (tokens) {\n for (const [key, value] of Object.entries(tokens)) {\n output = output.replace(`:${key}`, String(value))\n }\n }\n\n // Truncate to terminal width\n const termWidth = getTerminalWidth(this.stream)\n if (output.length > termWidth) {\n output = output.slice(0, termWidth - 1)\n }\n\n if (isTTY(this.stream)) {\n write(`${CURSOR_TO_START}${output}${CLEAR_LINE_END}`, this.stream)\n }\n }\n\n /**\n * Get current progress ratio (0-1)\n */\n get ratio(): number {\n return this.total > 0 ? this.current / this.total : 0\n }\n\n /**\n * Get current progress percentage (0-100)\n */\n get percentage(): number {\n return Math.round(this.ratio * 100)\n }\n\n /**\n * Dispose the progress bar (calls stop)\n */\n [Symbol.dispose](): void {\n this.stop()\n }\n}\n"],"mappings":"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"}
@@ -1,11 +1,12 @@
1
- import { a as __toCommonJS, i as __require, n as __esmMin, r as __exportAll, t as __commonJSMin } from "./chunk-BSw8zbkd.mjs";
2
- import { G as detectColor, H as bgColorCode, J as detectTerminalCaps, K as detectCursor, S as createStyle, U as fgColorCode, W as defaultCaps, Y as detectUnicode, q as detectInput, t as init_src$3, x as createMixedStyle } from "./src-9B5k0JmY.mjs";
3
- import { n as keyToAnsi$1, r as parseKey$1, t as init_key_mapping } from "./key-mapping-DsyfLEdC.mjs";
4
- import { _ as screenshotPng, a as ensureCachedVersion, c as isReady, d as init_terminal, f as createCellView, g as init_png, h as init_views, i as createTerminalByName, l as manifest, m as createRowView, n as backends, o as entry, p as createRegionView, r as buildBackend, s as init_backends, t as backend, u as createTerminal, v as init_svg, y as screenshotSvg } from "./backends-CkvbG3js.mjs";
5
- import { n as src_exports$3, t as init_src$4 } from "./src-C9f3hiVG.mjs";
6
- import { n as init_gif, t as createGif } from "./gif-Bp6fIyN3.mjs";
7
- import { n as init_apng, t as createApng } from "./apng-ENBAJk-H.mjs";
8
- import { n as getConstants, r as getLayoutEngine } from "./layout-engine-B3dsnVLU.mjs";
1
+ import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "./chunk-BSw8zbkd.mjs";
2
+ import { a as syncTextContentSignal } from "./types-e4dpfbSa.mjs";
3
+ import { $ as detectTerminalCaps, C as createMixedStyle, J as fgColorCode, Q as detectInput, X as detectColor, Y as defaultCaps, Z as detectCursor, et as detectUnicode, q as bgColorCode, t as init_src$3, w as createStyle } from "./src-D_BS-as7.mjs";
4
+ import { n as keyToAnsi$1, r as parseKey$1, t as init_key_mapping } from "./key-mapping-WLUmxjx1.mjs";
5
+ import { _ as screenshotPng, a as ensureCachedVersion, c as isReady, d as init_terminal, f as createCellView, g as init_png, h as init_views, i as createTerminalByName, l as manifest, m as createRowView, n as backends, o as entry, p as createRegionView, r as buildBackend, s as init_backends, t as backend, u as createTerminal, v as init_svg, y as screenshotSvg } from "./backends-BihMKFY_.mjs";
6
+ import { n as src_exports$3, t as init_src$4 } from "./src-C0sOQW-t.mjs";
7
+ import { n as init_gif, t as createGif } from "./gif-B9Uq4qZA.mjs";
8
+ import { n as init_apng, t as createApng } from "./apng-DFFVOItr.mjs";
9
+ import { n as getConstants, r as getLayoutEngine } from "./layout-engine-Dr3cY5U4.mjs";
9
10
  import { createContext } from "react";
10
11
  import { createLogger } from "loggily";
11
12
  import stringWidth from "string-width";
@@ -1118,6 +1119,7 @@ var buffer_exports = /* @__PURE__ */ __exportAll({
1118
1119
  SELECTABLE_FLAG: () => SELECTABLE_FLAG,
1119
1120
  TerminalBuffer: () => TerminalBuffer,
1120
1121
  VISIBLE_SPACE_ATTR_MASK: () => VISIBLE_SPACE_ATTR_MASK,
1122
+ ansi256ToRgb: () => ansi256ToRgb,
1121
1123
  attrsEquals: () => attrsEquals,
1122
1124
  attrsToNumber: () => attrsToNumber,
1123
1125
  bufferToHTML: () => bufferToHTML,
@@ -1811,6 +1813,9 @@ function trimTrailingWhitespacePreservingAnsi(str) {
1811
1813
  * Colors 0-15: standard + bright colors (approximate).
1812
1814
  * Colors 16-231: 6×6×6 color cube.
1813
1815
  * Colors 232-255: grayscale ramp.
1816
+ *
1817
+ * Exported for the backdrop-fade pipeline pass, which needs to resolve
1818
+ * palette-indexed cells to RGB before blending via `@silvery/color`.
1814
1819
  */
1815
1820
  function ansi256ToRgb(idx) {
1816
1821
  if (idx < 16) {
@@ -2071,6 +2076,19 @@ var init_buffer = __esmMin((() => {
2071
2076
  * This avoids modifying every individual setCell call — zero overhead (single OR per cell).
2072
2077
  */
2073
2078
  _selectableMode = false;
2079
+ /**
2080
+ * Snapshots of cells underlying outlines drawn on this buffer.
2081
+ *
2082
+ * The decoration phase (outlines draw OUTSIDE owning nodes into parent
2083
+ * pixel space) uses these to restore pre-outline state before the next
2084
+ * frame's content render. Travels with the buffer via clone() so the
2085
+ * prev-buffer cascade naturally carries them forward.
2086
+ *
2087
+ * Written by `renderDecorationPass`, read/cleared by `clearPreviousOutlines`.
2088
+ * Uses `any[]` here to avoid circular typing — see `decoration-phase.ts`
2089
+ * for the `OutlineCellSnapshot` shape.
2090
+ */
2091
+ outlineSnapshots = [];
2074
2092
  width;
2075
2093
  height;
2076
2094
  constructor(width, height) {
@@ -2669,6 +2687,7 @@ var init_buffer = __esmMin((() => {
2669
2687
  copy._minDirtyRow = -1;
2670
2688
  copy._maxDirtyRow = -1;
2671
2689
  copy._rowMetadata = this._rowMetadata.map((m) => ({ ...m }));
2690
+ copy.outlineSnapshots = [...this.outlineSnapshots];
2672
2691
  return copy;
2673
2692
  }
2674
2693
  /**
@@ -3022,7 +3041,7 @@ const displayWidthCache = new DisplayWidthCache(1e4);
3022
3041
  const DEFAULT_TEXT_SIZING_ENABLED = false;
3023
3042
  /**
3024
3043
  * Active measurer for the current pipeline execution.
3025
- * Set by runWithMeasurer() during executeRender, restored after.
3044
+ * Set by runWithMeasurer() during pipeline execution, restored after.
3026
3045
  * When null, module-level functions use the lazy default measurer.
3027
3046
  */
3028
3047
  let _scopedMeasurer = null;
@@ -5632,7 +5651,7 @@ async function executeTape(tape, options) {
5632
5651
  let backendInstance;
5633
5652
  const backendOpt = options?.backend ?? "vterm";
5634
5653
  if (typeof backendOpt === "string") {
5635
- const { backend } = await import("./backends-CyJqNLeK.mjs");
5654
+ const { backend } = await import("./backends-Dk_5G_gC.mjs");
5636
5655
  backendInstance = await backend(backendOpt);
5637
5656
  } else backendInstance = backendOpt;
5638
5657
  const terminal = createTerminal({
@@ -5725,7 +5744,7 @@ async function executeCommand(cmd, terminal, ctx) {
5725
5744
  for (let i = 0; i < count; i++) {
5726
5745
  if (terminal.alive) terminal.press(keyName);
5727
5746
  else {
5728
- const { keyToAnsi, parseKey } = await import("./key-mapping-BsUHe_nk.mjs");
5747
+ const { keyToAnsi, parseKey } = await import("./key-mapping-7k2ufK2b.mjs");
5729
5748
  const ansi = keyToAnsi(parseKey(keyName));
5730
5749
  terminal.feed(ansi);
5731
5750
  }
@@ -5737,7 +5756,7 @@ async function executeCommand(cmd, terminal, ctx) {
5737
5756
  const keyStr = `Ctrl+${cmd.key}`;
5738
5757
  if (terminal.alive) terminal.press(keyStr);
5739
5758
  else {
5740
- const { keyToAnsi, parseKey } = await import("./key-mapping-BsUHe_nk.mjs");
5759
+ const { keyToAnsi, parseKey } = await import("./key-mapping-7k2ufK2b.mjs");
5741
5760
  terminal.feed(keyToAnsi(parseKey(keyStr)));
5742
5761
  }
5743
5762
  break;
@@ -5746,7 +5765,7 @@ async function executeCommand(cmd, terminal, ctx) {
5746
5765
  const keyStr = `Alt+${cmd.key}`;
5747
5766
  if (terminal.alive) terminal.press(keyStr);
5748
5767
  else {
5749
- const { keyToAnsi, parseKey } = await import("./key-mapping-BsUHe_nk.mjs");
5768
+ const { keyToAnsi, parseKey } = await import("./key-mapping-7k2ufK2b.mjs");
5750
5769
  terminal.feed(keyToAnsi(parseKey(keyStr)));
5751
5770
  }
5752
5771
  break;
@@ -6145,11 +6164,11 @@ async function renderAnimation(frames, format, options) {
6145
6164
  switch (format) {
6146
6165
  case "svg": return createAnimatedSvg(frames, options);
6147
6166
  case "gif": {
6148
- const { createGif } = await import("./gif-BaJNREpP.mjs");
6167
+ const { createGif } = await import("./gif-BdrLRBmM.mjs");
6149
6168
  return createGif(frames, options);
6150
6169
  }
6151
6170
  case "apng": {
6152
- const { createApng } = await import("./apng-DCWY913R.mjs");
6171
+ const { createApng } = await import("./apng-CvSlLBtc.mjs");
6153
6172
  return createApng(frames, options);
6154
6173
  }
6155
6174
  default: throw new Error(`Unsupported animation format: ${format}`);
@@ -10619,7 +10638,7 @@ function createXtermBackend(opts) {
10619
10638
  }
10620
10639
  function init(options) {
10621
10640
  if (term) term.dispose();
10622
- term = new import_xterm_headless.Terminal({
10641
+ term = new Terminal({
10623
10642
  cols: options.cols,
10624
10643
  rows: options.rows,
10625
10644
  scrollback: options.scrollbackLimit ?? 1e3,
@@ -10868,10 +10887,11 @@ function createXtermBackend(opts) {
10868
10887
  };
10869
10888
  return backend;
10870
10889
  }
10871
- var import_xterm_headless, ANSI_16, PALETTE_256, DEFAULT_COLS$1, DEFAULT_ROWS$1;
10890
+ var import_xterm_headless, Terminal, ANSI_16, PALETTE_256, DEFAULT_COLS$1, DEFAULT_ROWS$1;
10872
10891
  var init_backend$1 = __esmMin((() => {
10873
- import_xterm_headless = require_xterm_headless();
10892
+ import_xterm_headless = /* @__PURE__ */ __toESM(require_xterm_headless(), 1);
10874
10893
  init_key_encoding();
10894
+ ({Terminal} = import_xterm_headless.default);
10875
10895
  ANSI_16 = [
10876
10896
  {
10877
10897
  r: 0,
@@ -11008,7 +11028,7 @@ var init_ghostty_web = __esmMin((() => {
11008
11028
  await C.exists() && (B = await C.arrayBuffer());
11009
11029
  } catch {}
11010
11030
  if (!B) try {
11011
- const I = await (await import("./__vite-browser-external-2447137e-D3GdsvS_.mjs")).readFile(A);
11031
+ const I = await (await import("./__vite-browser-external-2447137e-DPKHHqQK.mjs")).readFile(A);
11012
11032
  B = I.buffer.slice(I.byteOffset, I.byteOffset + I.byteLength);
11013
11033
  } catch {}
11014
11034
  if (!B) {
@@ -13491,9 +13511,9 @@ function styleTransition(oldStyle, newStyle, ctx) {
13491
13511
  if (Boolean(oa.hidden) !== Boolean(na.hidden)) codes.push(na.hidden ? "8" : "28");
13492
13512
  if (Boolean(oa.strikethrough) !== Boolean(na.strikethrough)) codes.push(na.strikethrough ? "9" : "29");
13493
13513
  if (Boolean(oa.blink) !== Boolean(na.blink)) codes.push(na.blink ? "5" : "25");
13494
- if (!colorEquals(oldStyle.fg, newStyle.fg)) if (newStyle.fg === null) codes.push("39");
13514
+ if (!colorEquals(oldStyle.fg, newStyle.fg)) if (newStyle.fg === null || ctx.caps.colorLevel === "none") codes.push("39");
13495
13515
  else codes.push(fgColorCode(newStyle.fg));
13496
- if (!colorEquals(oldStyle.bg, newStyle.bg)) if (newStyle.bg === null) codes.push("49");
13516
+ if (!colorEquals(oldStyle.bg, newStyle.bg)) if (newStyle.bg === null || ctx.caps.colorLevel === "none") codes.push("49");
13497
13517
  else codes.push(bgColorCode(newStyle.bg));
13498
13518
  if (ctx.caps.underlineColor && !colorEquals(oldStyle.underlineColor, newStyle.underlineColor)) if (newStyle.underlineColor === null || newStyle.underlineColor === void 0) codes.push("59");
13499
13519
  else if (typeof newStyle.underlineColor === "number") codes.push(`58;5;${newStyle.underlineColor}`);
@@ -14241,9 +14261,10 @@ function changesToAnsi(pool, count, ctx = defaultContext, buffer, startLine = 0,
14241
14261
  function styleToAnsi(style, ctx = defaultContext) {
14242
14262
  const fg = style.fg;
14243
14263
  const bg = style.bg;
14264
+ const monoTier = ctx.caps.colorLevel === "none";
14244
14265
  const codes = [];
14245
- if (fg !== null) codes.push(fgColorCode(fg));
14246
- if (bg !== null && !isDefaultBg(bg)) codes.push(bgColorCode(bg));
14266
+ if (fg !== null && !monoTier) codes.push(fgColorCode(fg));
14267
+ if (bg !== null && !isDefaultBg(bg) && !monoTier) codes.push(bgColorCode(bg));
14247
14268
  if (style.attrs.bold) codes.push("1");
14248
14269
  if (style.attrs.dim) codes.push("2");
14249
14270
  if (style.attrs.italic) codes.push("3");
@@ -15387,11 +15408,6 @@ const measureStats = {
15387
15408
  //#endregion
15388
15409
  //#region packages/ag/src/dirty-tracking.ts
15389
15410
  /**
15390
- * Nodes with layoutDirty=true. Replaces hasLayoutDirtyNodes() tree walk.
15391
- * Written by reconciler (host-config.ts), read by layoutPhase.
15392
- */
15393
- const layoutDirtyNodes = /* @__PURE__ */ new Set();
15394
- /**
15395
15411
  * Nodes with any content/style dirty flag. Written by reconciler,
15396
15412
  * read by render phase for targeted subtree entry.
15397
15413
  */
@@ -15407,19 +15423,14 @@ const contentDirtyNodes = /* @__PURE__ */ new Set();
15407
15423
  */
15408
15424
  const styleOnlyDirtyNodes = /* @__PURE__ */ new Set();
15409
15425
  /**
15410
- * Nodes where scrollTo/scrollOffset changed. These don't set layoutDirty
15411
- * (scroll offset doesn't affect Yoga layout dimensions), but the scroll,
15412
- * sticky, scrollRect, and notify phases must still run to update visible
15413
- * children positions.
15426
+ * Nodes where scrollTo/scrollOffset changed. These don't affect Flexily layout
15427
+ * dimensions, but the scroll, sticky, scrollRect, and notify phases must still
15428
+ * run to update visible children positions.
15414
15429
  *
15415
15430
  * Written by reconciler (host-config.ts commitUpdate), read by ag.ts
15416
15431
  * layout-on-demand gate.
15417
15432
  */
15418
15433
  const scrollDirtyNodes = /* @__PURE__ */ new Set();
15419
- /** Mark a node as layout-dirty. Called when layoutDirty is set to true. */
15420
- function trackLayoutDirty(node) {
15421
- layoutDirtyNodes.add(node);
15422
- }
15423
15434
  /** Mark a node as content-dirty. Called when content/style flags are set. */
15424
15435
  function trackContentDirty(node) {
15425
15436
  contentDirtyNodes.add(node);
@@ -15427,8 +15438,8 @@ function trackContentDirty(node) {
15427
15438
  /**
15428
15439
  * Mark a node as style-only dirty. Called when commitUpdate sees
15429
15440
  * contentChanged="style" AND layoutChanged=false.
15430
- * If a node is later marked with contentDirty or layoutDirty, the
15431
- * render phase ignores the style-only flag (full path takes precedence).
15441
+ * If a node is later marked with contentDirty, the render phase ignores
15442
+ * the style-only flag (full path takes precedence).
15432
15443
  */
15433
15444
  function trackStyleOnlyDirty(node) {
15434
15445
  styleOnlyDirtyNodes.add(node);
@@ -15437,25 +15448,16 @@ function trackStyleOnlyDirty(node) {
15437
15448
  function trackScrollDirty(node) {
15438
15449
  scrollDirtyNodes.add(node);
15439
15450
  }
15440
- /** O(1) check: are there any layout-dirty nodes? */
15441
- function hasLayoutDirty() {
15442
- return layoutDirtyNodes.size > 0;
15443
- }
15444
15451
  /** O(1) check: are there any scroll-dirty nodes? */
15445
15452
  function hasScrollDirty() {
15446
15453
  return scrollDirtyNodes.size > 0;
15447
15454
  }
15448
15455
  /** Clear all dirty tracking. Called after each render pass completes. */
15449
15456
  function clearDirtyTracking() {
15450
- layoutDirtyNodes.clear();
15451
15457
  contentDirtyNodes.clear();
15452
15458
  styleOnlyDirtyNodes.clear();
15453
15459
  scrollDirtyNodes.clear();
15454
15460
  }
15455
- /** Clear only layout-dirty tracking. Called after layout phase. */
15456
- function clearLayoutDirtyTracking() {
15457
- layoutDirtyNodes.clear();
15458
- }
15459
15461
  //#endregion
15460
15462
  //#region packages/ag-react/src/reconciler/helpers.ts
15461
15463
  /**
@@ -15517,7 +15519,7 @@ const LAYOUT_PROPS = new Set([
15517
15519
  "overflowY"
15518
15520
  ]);
15519
15521
  /**
15520
- * Set of content props that affect layout dimensions (trigger contentDirty + layoutDirty).
15522
+ * Set of content props that affect layout dimensions (trigger contentDirty + Flexily markDirty()).
15521
15523
  * wrap changes text line count; internal_transform changes text width.
15522
15524
  */
15523
15525
  const TEXT_CONTENT_PROPS = new Set(["wrap", "internal_transform"]);
@@ -15638,10 +15640,8 @@ function createNode(type, props, measurer) {
15638
15640
  prevScrollRect: null,
15639
15641
  prevScreenRect: null,
15640
15642
  layoutChangedThisFrame: epoch,
15641
- layoutDirty: true,
15642
15643
  dirtyBits: 31,
15643
- dirtyEpoch: epoch,
15644
- layoutSubscribers: /* @__PURE__ */ new Set()
15644
+ dirtyEpoch: epoch
15645
15645
  };
15646
15646
  if (type === "silvery-box") applyBoxProps(layoutNode, props);
15647
15647
  if (type === "silvery-text") {
@@ -15747,10 +15747,8 @@ function createVirtualTextNode(props) {
15747
15747
  prevScrollRect: null,
15748
15748
  prevScreenRect: null,
15749
15749
  layoutChangedThisFrame: -1,
15750
- layoutDirty: false,
15751
15750
  dirtyBits: 23,
15752
15751
  dirtyEpoch: getRenderEpoch(),
15753
- layoutSubscribers: /* @__PURE__ */ new Set(),
15754
15752
  isRawText: false,
15755
15753
  inlineRects: null
15756
15754
  };
@@ -15766,6 +15764,8 @@ function applyBoxProps(layoutNode, props, oldProps) {
15766
15764
  if (typeof props.width === "string" && props.width.endsWith("%")) layoutNode.setWidthPercent(Number.parseFloat(props.width));
15767
15765
  else if (typeof props.width === "number") layoutNode.setWidth(props.width);
15768
15766
  else if (props.width === "auto") layoutNode.setWidthAuto();
15767
+ else if (props.width === "fit-content") layoutNode.setWidthFitContent();
15768
+ else if (props.width === "snug-content") layoutNode.setWidthSnugContent();
15769
15769
  } else if (wasRemoved("width")) layoutNode.setWidthAuto();
15770
15770
  if (props.height !== void 0) {
15771
15771
  if (typeof props.height === "string" && props.height.endsWith("%")) layoutNode.setHeightPercent(Number.parseFloat(props.height));
@@ -15994,9 +15994,7 @@ function markLayoutAncestorDirty(node) {
15994
15994
  ancestor.dirtyBits = 3;
15995
15995
  ancestor.dirtyEpoch = epoch;
15996
15996
  } else ancestor.dirtyBits |= 3;
15997
- ancestor.layoutDirty = true;
15998
15997
  ancestor.layoutNode.markDirty();
15999
- trackLayoutDirty(ancestor);
16000
15998
  trackContentDirty(ancestor);
16001
15999
  }
16002
16000
  }
@@ -16076,10 +16074,8 @@ const hostConfig = {
16076
16074
  prevScrollRect: null,
16077
16075
  prevScreenRect: null,
16078
16076
  layoutChangedThisFrame: -1,
16079
- layoutDirty: false,
16080
16077
  dirtyBits: 23,
16081
16078
  dirtyEpoch: epoch,
16082
- layoutSubscribers: /* @__PURE__ */ new Set(),
16083
16079
  textContent: text,
16084
16080
  isRawText: true
16085
16081
  };
@@ -16102,9 +16098,7 @@ const hostConfig = {
16102
16098
  parentInstance.dirtyBits = parentInstance.dirtyEpoch !== epoch ? bits : parentInstance.dirtyBits | bits;
16103
16099
  parentInstance.dirtyEpoch = epoch;
16104
16100
  }
16105
- parentInstance.layoutDirty = true;
16106
16101
  parentInstance.layoutNode?.markDirty();
16107
- trackLayoutDirty(parentInstance);
16108
16102
  trackContentDirty(parentInstance);
16109
16103
  markLayoutAncestorDirty(parentInstance);
16110
16104
  markSubtreeDirty(parentInstance);
@@ -16135,9 +16129,7 @@ const hostConfig = {
16135
16129
  container.root.dirtyBits = container.root.dirtyEpoch !== epoch ? bits : container.root.dirtyBits | bits;
16136
16130
  container.root.dirtyEpoch = epoch;
16137
16131
  }
16138
- container.root.layoutDirty = true;
16139
16132
  container.root.layoutNode?.markDirty();
16140
- trackLayoutDirty(container.root);
16141
16133
  trackContentDirty(container.root);
16142
16134
  markSubtreeDirty(container.root);
16143
16135
  },
@@ -16157,9 +16149,7 @@ const hostConfig = {
16157
16149
  parentInstance.dirtyBits = parentInstance.dirtyEpoch !== epoch ? bits : parentInstance.dirtyBits | bits;
16158
16150
  parentInstance.dirtyEpoch = epoch;
16159
16151
  }
16160
- parentInstance.layoutDirty = true;
16161
16152
  parentInstance.layoutNode?.markDirty();
16162
- trackLayoutDirty(parentInstance);
16163
16153
  trackContentDirty(parentInstance);
16164
16154
  markLayoutAncestorDirty(parentInstance);
16165
16155
  markSubtreeDirty(parentInstance);
@@ -16181,9 +16171,7 @@ const hostConfig = {
16181
16171
  container.root.dirtyBits = container.root.dirtyEpoch !== epoch ? bits : container.root.dirtyBits | bits;
16182
16172
  container.root.dirtyEpoch = epoch;
16183
16173
  }
16184
- container.root.layoutDirty = true;
16185
16174
  container.root.layoutNode?.markDirty();
16186
- trackLayoutDirty(container.root);
16187
16175
  trackContentDirty(container.root);
16188
16176
  markSubtreeDirty(container.root);
16189
16177
  }
@@ -16208,9 +16196,7 @@ const hostConfig = {
16208
16196
  parentInstance.dirtyBits = parentInstance.dirtyEpoch !== epoch ? bits : parentInstance.dirtyBits | bits;
16209
16197
  parentInstance.dirtyEpoch = epoch;
16210
16198
  }
16211
- parentInstance.layoutDirty = true;
16212
16199
  parentInstance.layoutNode?.markDirty();
16213
- trackLayoutDirty(parentInstance);
16214
16200
  trackContentDirty(parentInstance);
16215
16201
  markLayoutAncestorDirty(parentInstance);
16216
16202
  markSubtreeDirty(parentInstance);
@@ -16236,9 +16222,7 @@ const hostConfig = {
16236
16222
  container.root.dirtyBits = container.root.dirtyEpoch !== epoch ? bits : container.root.dirtyBits | bits;
16237
16223
  container.root.dirtyEpoch = epoch;
16238
16224
  }
16239
- container.root.layoutDirty = true;
16240
16225
  container.root.layoutNode?.markDirty();
16241
- trackLayoutDirty(container.root);
16242
16226
  trackContentDirty(container.root);
16243
16227
  markSubtreeDirty(container.root);
16244
16228
  }
@@ -16265,8 +16249,6 @@ const hostConfig = {
16265
16249
  applyBoxProps(instance.layoutNode, newProps, oldProps);
16266
16250
  instance.layoutNode.markDirty();
16267
16251
  }
16268
- instance.layoutDirty = true;
16269
- trackLayoutDirty(instance);
16270
16252
  }
16271
16253
  if (contentChanged) {
16272
16254
  const epoch = getRenderEpoch();
@@ -16277,7 +16259,6 @@ const hostConfig = {
16277
16259
  }
16278
16260
  if (oldProps.backgroundColor !== newProps.backgroundColor) bits |= 4;
16279
16261
  if (oldProps.borderStyle && !newProps.borderStyle) bits |= 4;
16280
- if (oldProps.outlineStyle && !newProps.outlineStyle) bits |= 4;
16281
16262
  if (oldProps.theme !== newProps.theme) bits |= 4;
16282
16263
  instance.dirtyBits = instance.dirtyEpoch !== epoch ? bits : instance.dirtyBits | bits;
16283
16264
  instance.dirtyEpoch = epoch;
@@ -16288,13 +16269,14 @@ const hostConfig = {
16288
16269
  const scrollToChanged = oldProps.scrollTo !== newProps.scrollTo;
16289
16270
  const scrollOffsetChanged = oldProps.scrollOffset !== newProps.scrollOffset;
16290
16271
  if (scrollToChanged || scrollOffsetChanged) trackScrollDirty(instance);
16291
- if (instance.layoutDirty || contentChanged || scrollToChanged || scrollOffsetChanged) {
16272
+ if (layoutChanged || contentChanged || scrollToChanged || scrollOffsetChanged) {
16292
16273
  markLayoutAncestorDirty(instance);
16293
16274
  markSubtreeDirty(instance);
16294
16275
  }
16295
16276
  },
16296
16277
  commitTextUpdate(textInstance, _oldText, newText) {
16297
16278
  textInstance.textContent = newText;
16279
+ syncTextContentSignal(textInstance);
16298
16280
  textInstance.props = { children: newText };
16299
16281
  const epoch = getRenderEpoch();
16300
16282
  const bits = 3;
@@ -16332,9 +16314,7 @@ const hostConfig = {
16332
16314
  container.root.dirtyBits = container.root.dirtyEpoch !== epoch ? bits : container.root.dirtyBits | bits;
16333
16315
  container.root.dirtyEpoch = epoch;
16334
16316
  }
16335
- container.root.layoutDirty = true;
16336
16317
  container.root.layoutNode?.markDirty();
16337
- trackLayoutDirty(container.root);
16338
16318
  trackContentDirty(container.root);
16339
16319
  markSubtreeDirty(container.root);
16340
16320
  },
@@ -16394,9 +16374,7 @@ const hostConfig = {
16394
16374
  const bits = 3;
16395
16375
  instance.dirtyBits = instance.dirtyEpoch !== epoch ? bits : instance.dirtyBits | bits;
16396
16376
  instance.dirtyEpoch = epoch;
16397
- instance.layoutDirty = true;
16398
16377
  if (instance.layoutNode) instance.layoutNode.markDirty();
16399
- trackLayoutDirty(instance);
16400
16378
  trackContentDirty(instance);
16401
16379
  if (instance.parent) {
16402
16380
  if (instance.parent.dirtyEpoch !== epoch) {
@@ -16414,9 +16392,7 @@ const hostConfig = {
16414
16392
  const bits = 3;
16415
16393
  instance.dirtyBits = instance.dirtyEpoch !== epoch ? bits : instance.dirtyBits | bits;
16416
16394
  instance.dirtyEpoch = epoch;
16417
- instance.layoutDirty = true;
16418
16395
  if (instance.layoutNode) instance.layoutNode.markDirty();
16419
- trackLayoutDirty(instance);
16420
16396
  trackContentDirty(instance);
16421
16397
  if (instance.parent) {
16422
16398
  if (instance.parent.dirtyEpoch !== epoch) {
@@ -16501,6 +16477,6 @@ function getContainerRoot(container) {
16501
16477
  return container.root;
16502
16478
  }
16503
16479
  //#endregion
16504
- export { isLikelyEmoji as $, enableBracketedPaste as A, bufferToStyledText as At, createMeasurer as B, keyToAnsi as Bt, createTermProvider as C, detectTextSizingSupport as Ct, PASTE_END as D, textSized as Dt, parseFocusEvent as E, isTextSizingLikelySupported as Et, outputPhase as F, createMutableCell as Ft, getActiveLineHeight as G, parseHotkey as Gt, displayWidth as H, keyToModifiers as Ht, setOutputCaps as I, createTextFrame as It, graphemeWidth as J, splitRawInput$1 as Jt, getFirstCodePoint as K, parseKey as Kt, IncrementalRenderMismatchError as L, init_buffer as Lt, isMouseSequence as M, buffer_exports as Mt, parseMouseSequence as N, cellEquals as Nt, PASTE_START as O, DEFAULT_BG as Ot, createOutputPhase as P, colorEquals as Pt, isCJK as Q, canBreakAnywhere as R, emptyKey as Rt, createTerm as S, writeTextTruncated as St, enableFocusReporting as T, isPrivateUseArea as Tt, displayWidthAnsi as U, keyToName as Ut, createWidthMeasurer as V, keyToKittyAnsi as Vt, ensureEmojiPresentation as W, matchHotkey as Wt, hasWideCharacters as X, hasAnsi as Y, hasZeroWidthCharacters as Z, isCurrentEpoch as _, truncateAnsi as _t, hostConfig as a, normalizeText as at, createOutputGuard as b, writeLinesToBuffer as bt, clearDirtyTracking as c, runWithMeasurer as ct, hasScrollDirty as d, sliceByWidth as dt, isTextSizingEnabled as et, measureStats as f, sliceByWidthFromEnd as ft, isAnyDirty as g, stripAnsi$1 as gt, getRenderEpoch as h, splitGraphemesAnsiAware as ht, reconciler as i, measureText as it, parseBracketedPaste as j, bufferToText as jt, disableBracketedPaste as k, TerminalBuffer as kt, clearLayoutDirtyTracking as l, setTextEmojiWide as lt, advanceRenderEpoch as m, splitGraphemes as mt, createFiberRoot as n, isWordBoundary as nt, runWithDiscreteEvent as o, padText as ot, collectPlainText as p, sliceByWidthRange as pt, graphemeCount as q, parseKeypress as qt, getContainerRoot as r, isZeroWidthGrapheme as rt, setOnNodeRemoved as s, parseAnsiText as st, createContainer as t, isWideGrapheme as tt, hasLayoutDirty as u, setTextSizingEnabled as ut, isDirty as v, truncateText as vt, disableFocusReporting as w, getCachedProbeResult as wt, patchConsole as x, writeTextToBuffer as xt, term as y, wrapText as yt, constrainText as z, isModifierOnlyEvent as zt };
16480
+ export { isWideGrapheme as $, isMouseSequence as A, bufferToText as At, displayWidth as B, keyToAnsi as Bt, enableFocusReporting as C, isPrivateUseArea as Ct, disableBracketedPaste as D, TerminalBuffer as Dt, PASTE_START as E, DEFAULT_BG as Et, IncrementalRenderMismatchError as F, createTextFrame as Ft, graphemeCount as G, parseHotkey as Gt, ensureEmojiPresentation as H, keyToModifiers as Ht, canBreakAnywhere as I, init_buffer as It, hasWideCharacters as J, splitRawInput$1 as Jt, graphemeWidth as K, parseKey as Kt, constrainText as L, isDefaultBg as Lt, createOutputPhase as M, cellEquals as Mt, outputPhase as N, colorEquals as Nt, enableBracketedPaste as O, ansi256ToRgb as Ot, setOutputCaps as P, createMutableCell as Pt, isTextSizingEnabled as Q, createMeasurer as R, emptyKey as Rt, disableFocusReporting as S, getCachedProbeResult as St, PASTE_END as T, textSized as Tt, getActiveLineHeight as U, keyToName as Ut, displayWidthAnsi as V, keyToKittyAnsi as Vt, getFirstCodePoint as W, matchHotkey as Wt, isCJK as X, hasZeroWidthCharacters as Y, isLikelyEmoji as Z, term as _, wrapText as _t, hostConfig as a, parseAnsiText as at, createTerm as b, writeTextTruncated as bt, clearDirtyTracking as c, setTextSizingEnabled as ct, collectPlainText as d, sliceByWidthRange as dt, isWordBoundary as et, advanceRenderEpoch as f, splitGraphemes as ft, isDirty as g, truncateText as gt, isCurrentEpoch as h, truncateAnsi as ht, reconciler as i, padText as it, parseMouseSequence as j, buffer_exports as jt, parseBracketedPaste as k, bufferToStyledText as kt, hasScrollDirty as l, sliceByWidth as lt, isAnyDirty as m, stripAnsi$1 as mt, createFiberRoot as n, measureText as nt, runWithDiscreteEvent as o, runWithMeasurer as ot, getRenderEpoch as p, splitGraphemesAnsiAware as pt, hasAnsi as q, parseKeypress as qt, getContainerRoot as r, normalizeText as rt, setOnNodeRemoved as s, setTextEmojiWide as st, createContainer as t, isZeroWidthGrapheme as tt, measureStats as u, sliceByWidthFromEnd as ut, createOutputGuard as v, writeLinesToBuffer as vt, parseFocusEvent as w, isTextSizingLikelySupported as wt, createTermProvider as x, detectTextSizingSupport as xt, patchConsole as y, writeTextToBuffer as yt, createWidthMeasurer as z, isModifierOnlyEvent as zt };
16505
16481
 
16506
- //# sourceMappingURL=reconciler-B-NaZvbO.mjs.map
16482
+ //# sourceMappingURL=reconciler-B8uxQxaU.mjs.map