silvery 0.23.0 → 0.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/{Text-Ci6UCSTL.mjs → Text-4tWKabKH.mjs} +5 -5
  2. package/dist/{Text-Ci6UCSTL.mjs.map → Text-4tWKabKH.mjs.map} +1 -1
  3. package/dist/{ag-q9lRlKlt.mjs → ag-B-7XAHL8.mjs} +9 -9
  4. package/dist/{ag-q9lRlKlt.mjs.map → ag-B-7XAHL8.mjs.map} +1 -1
  5. package/dist/animation-CZ4x2R7C.mjs.map +1 -1
  6. package/dist/{ansi-zmNzgkPB.d.mts → ansi-qYRTDp5m.d.mts} +1 -1
  7. package/dist/{ansi-zmNzgkPB.d.mts.map → ansi-qYRTDp5m.d.mts.map} +1 -1
  8. package/dist/{chain-bridge-CkYcMxlq.mjs → chain-bridge-B7LNJwVF.mjs} +8 -8
  9. package/dist/{chain-bridge-CkYcMxlq.mjs.map → chain-bridge-B7LNJwVF.mjs.map} +1 -1
  10. package/dist/{chunk-BEJ448es.mjs → chunk-hT5z_Zn9.mjs} +1 -1
  11. package/dist/cli-CuNV0hTE.mjs +4 -0
  12. package/dist/devtools-BuTq07Zb.mjs +2 -0
  13. package/dist/{devtools-td2AjFwc.mjs → devtools-akTjVxxX.mjs} +4 -5
  14. package/dist/{devtools-td2AjFwc.mjs.map → devtools-akTjVxxX.mjs.map} +1 -1
  15. package/dist/{easing-C5MrdO7V.d.mts → easing-8OlNopWv.d.mts} +1 -1
  16. package/dist/{easing-C5MrdO7V.d.mts.map → easing-8OlNopWv.d.mts.map} +1 -1
  17. package/dist/{eta-BwYWEjfS.mjs → eta-CPZ45g_P.mjs} +5 -1
  18. package/dist/{eta-BwYWEjfS.mjs.map → eta-CPZ45g_P.mjs.map} +1 -1
  19. package/dist/flexily-zero-adapter-VoBGHG14.mjs.map +1 -1
  20. package/dist/{hit-registry-D_nxOivS.d.mts → hit-registry-DRV2ig-Y.d.mts} +2 -2
  21. package/dist/{hit-registry-D_nxOivS.d.mts.map → hit-registry-DRV2ig-Y.d.mts.map} +1 -1
  22. package/dist/{image-CIF75xMr.mjs → image-o2WpbrD1.mjs} +22 -22
  23. package/dist/image-o2WpbrD1.mjs.map +1 -0
  24. package/dist/{index-377zdPLP.d.mts → index-3vAxA_EQ.d.mts} +1 -1
  25. package/dist/{index-377zdPLP.d.mts.map → index-3vAxA_EQ.d.mts.map} +1 -1
  26. package/dist/{index-BcSr0RAQ.d.mts → index-BKujGENR.d.mts} +6 -6
  27. package/dist/index-BKujGENR.d.mts.map +1 -0
  28. package/dist/{index-DlNmckTq.d.mts → index-C6oOd9eE.d.mts} +2 -2
  29. package/dist/{index-DlNmckTq.d.mts.map → index-C6oOd9eE.d.mts.map} +1 -1
  30. package/dist/{index-DLnpxDAm.d.mts → index-DhYF3m7V.d.mts} +2 -2
  31. package/dist/{index-DLnpxDAm.d.mts.map → index-DhYF3m7V.d.mts.map} +1 -1
  32. package/dist/index.d.mts +9 -9
  33. package/dist/index.mjs +14 -14
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/{layout-engine-BgR58vL0.mjs → layout-engine-BYp49XPD.mjs} +2 -2
  36. package/dist/{layout-engine-BgR58vL0.mjs.map → layout-engine-BYp49XPD.mjs.map} +1 -1
  37. package/dist/{layout-engine-DNjTha8f.mjs → layout-engine-D0dXw5fr.mjs} +1 -1
  38. package/dist/{layout-signals-CGYbHmxy.mjs → layout-signals-uQadGDmO.mjs} +2 -2
  39. package/dist/{layout-signals-CGYbHmxy.mjs.map → layout-signals-uQadGDmO.mjs.map} +1 -1
  40. package/dist/{mouse-events-WQ2h-uqG.mjs → mouse-events-Pg-XKR3T.mjs} +24 -3
  41. package/dist/{mouse-events-WQ2h-uqG.mjs.map → mouse-events-Pg-XKR3T.mjs.map} +1 -1
  42. package/dist/{mouse-events-B2z5tbsL.d.mts → mouse-events-UoUWNIdS.d.mts} +22 -3
  43. package/dist/{mouse-events-B2z5tbsL.d.mts.map → mouse-events-UoUWNIdS.d.mts.map} +1 -1
  44. package/dist/{multi-progress-zCWHEm9P.mjs → multi-progress-Bvd1BYED.mjs} +2 -2
  45. package/dist/{multi-progress-zCWHEm9P.mjs.map → multi-progress-Bvd1BYED.mjs.map} +1 -1
  46. package/dist/{multi-progress-BaEFfHKP.d.mts → multi-progress-DPOCjomS.d.mts} +2 -2
  47. package/dist/{multi-progress-BaEFfHKP.d.mts.map → multi-progress-DPOCjomS.d.mts.map} +1 -1
  48. package/dist/{node-CJ3J_rW-.mjs → node-Cl-kzQcl.mjs} +4 -4
  49. package/dist/node-Cl-kzQcl.mjs.map +1 -0
  50. package/dist/{progress-6vJ7nxUg.mjs → progress-1r6M_ZAP.mjs} +4 -4
  51. package/dist/{progress-6vJ7nxUg.mjs.map → progress-1r6M_ZAP.mjs.map} +1 -1
  52. package/dist/{progress-bar-BlFNsZL8.mjs → progress-bar-DzW1DzNj.mjs} +3 -3
  53. package/dist/{progress-bar-BlFNsZL8.mjs.map → progress-bar-DzW1DzNj.mjs.map} +1 -1
  54. package/dist/{reconciler--_-biN23.mjs → reconciler-lsTL1y8i.mjs} +45 -5
  55. package/dist/{reconciler--_-biN23.mjs.map → reconciler-lsTL1y8i.mjs.map} +1 -1
  56. package/dist/{render-string-DtHZP0cU.mjs → render-string-2ZcV8n3B.mjs} +6 -6
  57. package/dist/{render-string-DtHZP0cU.mjs.map → render-string-2ZcV8n3B.mjs.map} +1 -1
  58. package/dist/{render-string-DaghHpLN.mjs → render-string-BJZqo5Rr.mjs} +1 -1
  59. package/dist/runtime.d.mts +3 -3
  60. package/dist/runtime.mjs +3 -3
  61. package/dist/{schemes-DWQPxXAi.mjs → schemes-C4SUgVea.mjs} +2 -2
  62. package/dist/{schemes-DWQPxXAi.mjs.map → schemes-C4SUgVea.mjs.map} +1 -1
  63. package/dist/{spinner-B50hILqx.mjs → spinner-Ck3SdCpW.mjs} +2 -2
  64. package/dist/{spinner-B50hILqx.mjs.map → spinner-Ck3SdCpW.mjs.map} +1 -1
  65. package/dist/{spinner-DN10UfF0.d.mts → spinner-CpcGtQ9L.d.mts} +2 -2
  66. package/dist/{spinner-DN10UfF0.d.mts.map → spinner-CpcGtQ9L.d.mts.map} +1 -1
  67. package/dist/{src-BqeBFB3X.mjs → src-B6MuVlOK.mjs} +3 -3
  68. package/dist/src-B6MuVlOK.mjs.map +1 -0
  69. package/dist/{src-DbqcSrhy.mjs → src-BZOfzNeo.mjs} +32 -9
  70. package/dist/src-BZOfzNeo.mjs.map +1 -0
  71. package/dist/{src-BXeTHHlL.mjs → src-ChuXo--x.mjs} +25 -23
  72. package/dist/src-ChuXo--x.mjs.map +1 -0
  73. package/dist/{src-BOLdi3WG.mjs → src-DdGaRDi9.mjs} +3 -3
  74. package/dist/{src-BOLdi3WG.mjs.map → src-DdGaRDi9.mjs.map} +1 -1
  75. package/dist/{src-B8lf1kiR.mjs → src-DorsnS70.mjs} +8 -1
  76. package/dist/src-DorsnS70.mjs.map +1 -0
  77. package/dist/{steps-B2kBmFpb.d.mts → steps-DV34gm_Z.d.mts} +1 -1
  78. package/dist/{steps-B2kBmFpb.d.mts.map → steps-DV34gm_Z.d.mts.map} +1 -1
  79. package/dist/svg-NmV9dgB9.mjs.map +1 -1
  80. package/dist/{svg-VUr78l5d.d.mts → svg-wvIEu-RS.d.mts} +1 -1
  81. package/dist/{svg-VUr78l5d.d.mts.map → svg-wvIEu-RS.d.mts.map} +1 -1
  82. package/dist/term.d.mts +3 -3
  83. package/dist/term.mjs +4 -4
  84. package/dist/test.d.mts +3 -3
  85. package/dist/test.mjs +9 -9
  86. package/dist/test.mjs.map +1 -1
  87. package/dist/theme.d.mts +2 -2
  88. package/dist/theme.mjs +3 -3
  89. package/dist/{types-D_E0FbqA.d.mts → types-VyreAPAB.d.mts} +1 -1
  90. package/dist/{types-D_E0FbqA.d.mts.map → types-VyreAPAB.d.mts.map} +1 -1
  91. package/dist/ui/animation.d.mts +2 -2
  92. package/dist/ui/ansi.d.mts +1 -1
  93. package/dist/ui/cli.d.mts +3 -3
  94. package/dist/ui/cli.mjs +4 -4
  95. package/dist/ui/image.d.mts +1 -1
  96. package/dist/ui/image.mjs +1 -1
  97. package/dist/ui/progress.d.mts +4 -4
  98. package/dist/ui/progress.mjs +4 -4
  99. package/dist/ui/react.d.mts +1 -1
  100. package/dist/ui/react.mjs +2 -2
  101. package/dist/ui/react.mjs.map +1 -1
  102. package/dist/ui/recording-chrome-react.d.mts +1 -1
  103. package/dist/ui/recording-chrome-react.mjs +1 -1
  104. package/dist/ui/recording-chrome.d.mts +1 -1
  105. package/dist/ui/utils.mjs +1 -1
  106. package/dist/ui/wrappers.d.mts +2 -2
  107. package/dist/ui/wrappers.mjs +1 -1
  108. package/dist/ui.d.mts +6 -6
  109. package/dist/ui.mjs +6 -6
  110. package/dist/{unicode-CxyxVGmB.mjs → unicode-X43-fdGF.mjs} +3 -3
  111. package/dist/unicode-X43-fdGF.mjs.map +1 -0
  112. package/dist/{useLatest-UOvWy0ZW.d.mts → useLatest-D9p0ZDAC.d.mts} +2 -2
  113. package/dist/{useLatest-UOvWy0ZW.d.mts.map → useLatest-D9p0ZDAC.d.mts.map} +1 -1
  114. package/dist/{useLayout-D5cE8OCI.mjs → useLayout-Cx01rHVI.mjs} +3 -3
  115. package/dist/{useLayout-D5cE8OCI.mjs.map → useLayout-Cx01rHVI.mjs.map} +1 -1
  116. package/dist/{with-text-input-DLoSCBrm.d.mts → with-text-input-CW8MR9Th.d.mts} +3 -3
  117. package/dist/{with-text-input-DLoSCBrm.d.mts.map → with-text-input-CW8MR9Th.d.mts.map} +1 -1
  118. package/dist/{wrap-measurer-registration-IV2HtcCd.d.mts → wrap-measurer-registration-DNBmtFNM.d.mts} +3 -3
  119. package/dist/{wrap-measurer-registration-IV2HtcCd.d.mts.map → wrap-measurer-registration-DNBmtFNM.d.mts.map} +1 -1
  120. package/dist/{wrapper-CD29afOs.mjs → wrapper-DpMauwdI.mjs} +51 -33
  121. package/dist/wrapper-DpMauwdI.mjs.map +1 -0
  122. package/dist/{wrappers-CInBJm44.mjs → wrappers-DHMzvbRo.mjs} +5 -5
  123. package/dist/{wrappers-CInBJm44.mjs.map → wrappers-DHMzvbRo.mjs.map} +1 -1
  124. package/dist/yoga-adapter-B-DCP4Bx.mjs +2 -0
  125. package/dist/{yoga-adapter-9uab5Qn-.mjs → yoga-adapter-CB_7pLyl.mjs} +2 -2
  126. package/dist/{yoga-adapter-9uab5Qn-.mjs.map → yoga-adapter-CB_7pLyl.mjs.map} +1 -1
  127. package/package.json +2 -2
  128. package/dist/backend-DSiSIc-h.mjs +0 -13396
  129. package/dist/backend-DSiSIc-h.mjs.map +0 -1
  130. package/dist/cli-VNqUKlXw.mjs +0 -4
  131. package/dist/devtools-BF4IMumr.mjs +0 -2
  132. package/dist/image-CIF75xMr.mjs.map +0 -1
  133. package/dist/index-BcSr0RAQ.d.mts.map +0 -1
  134. package/dist/node-CJ3J_rW-.mjs.map +0 -1
  135. package/dist/src-B8lf1kiR.mjs.map +0 -1
  136. package/dist/src-BXeTHHlL.mjs.map +0 -1
  137. package/dist/src-BqeBFB3X.mjs.map +0 -1
  138. package/dist/src-DbqcSrhy.mjs.map +0 -1
  139. package/dist/unicode-CxyxVGmB.mjs.map +0 -1
  140. package/dist/wrapper-CD29afOs.mjs.map +0 -1
  141. package/dist/yoga-adapter-yqTl1aXK.mjs +0 -2
@@ -6,7 +6,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
7
  var __getProtoOf = Object.getPrototypeOf;
8
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
9
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
10
10
  var __exportAll = (all, no_symbols) => {
11
11
  let target = {};
12
12
  for (var name in all) __defProp(target, name, {
@@ -0,0 +1,4 @@
1
+ import "./spinner-Ck3SdCpW.mjs";
2
+ import "./progress-bar-DzW1DzNj.mjs";
3
+ import "./multi-progress-Bvd1BYED.mjs";
4
+ export {};
@@ -0,0 +1,2 @@
1
+ import { t as autoConnectDevTools } from "./devtools-akTjVxxX.mjs";
2
+ export { autoConnectDevTools };
@@ -1,5 +1,4 @@
1
- import { i as __toESM } from "./chunk-BEJ448es.mjs";
2
- import { i as reconciler } from "./reconciler--_-biN23.mjs";
1
+ import { i as reconciler } from "./reconciler-lsTL1y8i.mjs";
3
2
  import { createLogger } from "loggily";
4
3
  //#region packages/ag-term/src/devtools.ts
5
4
  /**
@@ -40,7 +39,7 @@ async function connectDevTools() {
40
39
  if (connected) return true;
41
40
  try {
42
41
  if (typeof globalThis.WebSocket === "undefined") try {
43
- const ws = await import("./wrapper-CD29afOs.mjs");
42
+ const ws = await import("./wrapper-DpMauwdI.mjs");
44
43
  globalThis.WebSocket = ws.default ?? ws;
45
44
  } catch {
46
45
  log.warn?.("WebSocket polyfill (ws) not available. Install ws for DevTools support: bun add -d ws");
@@ -57,7 +56,7 @@ async function connectDevTools() {
57
56
  isEnabled: true,
58
57
  isValid: true
59
58
  }];
60
- const devtools = await import("./backend-DSiSIc-h.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
59
+ const devtools = await import("react-devtools-core");
61
60
  devtools.initialize();
62
61
  devtools.connectToDevTools();
63
62
  reconciler.injectIntoDevTools();
@@ -86,4 +85,4 @@ async function autoConnectDevTools() {
86
85
  //#endregion
87
86
  export { connectDevTools as n, isDevToolsConnected as r, autoConnectDevTools as t };
88
87
 
89
- //# sourceMappingURL=devtools-td2AjFwc.mjs.map
88
+ //# sourceMappingURL=devtools-akTjVxxX.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools-td2AjFwc.mjs","names":[],"sources":["../packages/ag-term/src/devtools.ts"],"sourcesContent":["/**\n * React DevTools integration for silvery.\n *\n * Provides optional connection to React DevTools standalone app for\n * debugging TUI component trees. Requires `react-devtools-core` to be\n * installed (optional peer dependency).\n *\n * Usage:\n * 1. Install: `bun add -d react-devtools-core`\n * 2. Run devtools: `npx react-devtools`\n * 3. Launch app with: `DEBUG_DEVTOOLS=1 bun run app.ts`\n *\n * Or call `connectDevTools()` manually from your app code.\n *\n * @module\n */\n\nimport { reconciler } from \"@silvery/ag-react/reconciler\"\nimport { createLogger } from \"loggily\"\n\nconst log = createLogger(\"silvery:devtools\")\n\nlet connected = false\n\n/**\n * Connect to React DevTools standalone app.\n *\n * This lazy-loads `react-devtools-core` so it has zero impact on\n * production bundles. The connection is established via WebSocket\n * to the devtools electron app (default: ws://localhost:8097).\n *\n * Safe to call multiple times -- subsequent calls are no-ops.\n *\n * @example\n * ```ts\n * import { connectDevTools } from '@silvery/ag-react';\n * await connectDevTools();\n * // Now open React DevTools standalone to inspect the component tree\n * ```\n */\nexport async function connectDevTools(): Promise<boolean> {\n if (connected) return true\n\n try {\n // Polyfill WebSocket for Node.js environments (required by react-devtools-core)\n if (typeof globalThis.WebSocket === \"undefined\") {\n try {\n // @ts-expect-error -- ws is an optional peer dependency\n const ws = await import(\"ws\")\n globalThis.WebSocket = ws.default ?? ws\n } catch {\n // ws not available -- devtools won't be able to connect\n log.warn?.(\n \"WebSocket polyfill (ws) not available. \" +\n \"Install ws for DevTools support: bun add -d ws\",\n )\n return false\n }\n }\n\n // Ensure window/self exist for react-devtools-core internals\n if (typeof globalThis.window === \"undefined\") {\n // @ts-expect-error -- polyfill for devtools\n globalThis.window = globalThis\n }\n\n // Configure component filters to hide silvery internals from the DevTools tree.\n // Filter types from react-devtools-shared/src/types.js:\n // 1 = ComponentFilterElementType, value 7 = HostComponent\n // 2 = ComponentFilterDisplayName (regex on displayName)\n if (!globalThis.__REACT_DEVTOOLS_COMPONENT_FILTERS__) {\n globalThis.__REACT_DEVTOOLS_COMPONENT_FILTERS__ = [\n { type: 1, value: 7, isEnabled: true },\n { type: 2, value: \"SilveryApp\", isEnabled: true, isValid: true },\n ]\n }\n\n // @ts-expect-error -- react-devtools-core has no type declarations\n const devtools = await import(\"react-devtools-core\")\n devtools.initialize()\n devtools.connectToDevTools()\n\n // Inject renderer info so DevTools can identify silvery.\n // rendererPackageName and rendererVersion are read from the host config\n // passed to Reconciler() -- see reconciler/host-config.ts.\n reconciler.injectIntoDevTools()\n\n connected = true\n return true\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error)\n log.warn?.(\n `Failed to connect to React DevTools. ` +\n `Install react-devtools-core: bun add -d react-devtools-core\\n` +\n ` Error: ${message}`,\n )\n return false\n }\n}\n\n/**\n * Check if DevTools are currently connected.\n */\nexport function isDevToolsConnected(): boolean {\n return connected\n}\n\n/**\n * Auto-connect to DevTools if DEBUG_DEVTOOLS=1 environment variable is set.\n * Called internally during render initialization.\n */\nexport async function autoConnectDevTools(): Promise<void> {\n if (process.env.DEBUG_DEVTOOLS === \"1\" || process.env.DEBUG_DEVTOOLS === \"true\") {\n await connectDevTools()\n }\n}\n\n// Global type augmentation for devtools polyfills\ndeclare global {\n var __REACT_DEVTOOLS_COMPONENT_FILTERS__: Array<{\n type: number\n value: number | string\n isEnabled: boolean\n isValid?: boolean\n }>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,MAAM,aAAa,mBAAmB;AAE5C,IAAI,YAAY;;;;;;;;;;;;;;;;;AAkBhB,eAAsB,kBAAoC;AACxD,KAAI,UAAW,QAAO;AAEtB,KAAI;AAEF,MAAI,OAAO,WAAW,cAAc,YAClC,KAAI;GAEF,MAAM,KAAK,MAAM,OAAO;AACxB,cAAW,YAAY,GAAG,WAAW;UAC/B;AAEN,OAAI,OACF,wFAED;AACD,UAAO;;AAKX,MAAI,OAAO,WAAW,WAAW,YAE/B,YAAW,SAAS;AAOtB,MAAI,CAAC,WAAW,qCACd,YAAW,uCAAuC,CAChD;GAAE,MAAM;GAAG,OAAO;GAAG,WAAW;GAAM,EACtC;GAAE,MAAM;GAAG,OAAO;GAAc,WAAW;GAAM,SAAS;GAAM,CACjE;EAIH,MAAM,WAAW,MAAM,OAAO,0BAAA,MAAA,MAAA,wBAAA,EAAA,SAAA,EAAA,CAAA;AAC9B,WAAS,YAAY;AACrB,WAAS,mBAAmB;AAK5B,aAAW,oBAAoB;AAE/B,cAAY;AACZ,SAAO;UACA,OAAgB;EACvB,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,MAAI,OACF;WAEc,UACf;AACD,SAAO;;;;;;AAOX,SAAgB,sBAA+B;AAC7C,QAAO;;;;;;AAOT,eAAsB,sBAAqC;AACzD,KAAI,QAAQ,IAAI,mBAAmB,OAAO,QAAQ,IAAI,mBAAmB,OACvE,OAAM,iBAAiB"}
1
+ {"version":3,"file":"devtools-akTjVxxX.mjs","names":[],"sources":["../packages/ag-term/src/devtools.ts"],"sourcesContent":["/**\n * React DevTools integration for silvery.\n *\n * Provides optional connection to React DevTools standalone app for\n * debugging TUI component trees. Requires `react-devtools-core` to be\n * installed (optional peer dependency).\n *\n * Usage:\n * 1. Install: `bun add -d react-devtools-core`\n * 2. Run devtools: `npx react-devtools`\n * 3. Launch app with: `DEBUG_DEVTOOLS=1 bun run app.ts`\n *\n * Or call `connectDevTools()` manually from your app code.\n *\n * @module\n */\n\nimport { reconciler } from \"@silvery/ag-react/reconciler\"\nimport { createLogger } from \"loggily\"\n\nconst log = createLogger(\"silvery:devtools\")\n\nlet connected = false\n\n/**\n * Connect to React DevTools standalone app.\n *\n * This lazy-loads `react-devtools-core` so it has zero impact on\n * production bundles. The connection is established via WebSocket\n * to the devtools electron app (default: ws://localhost:8097).\n *\n * Safe to call multiple times -- subsequent calls are no-ops.\n *\n * @example\n * ```ts\n * import { connectDevTools } from '@silvery/ag-react';\n * await connectDevTools();\n * // Now open React DevTools standalone to inspect the component tree\n * ```\n */\nexport async function connectDevTools(): Promise<boolean> {\n if (connected) return true\n\n try {\n // Polyfill WebSocket for Node.js environments (required by react-devtools-core)\n if (typeof globalThis.WebSocket === \"undefined\") {\n try {\n // @ts-expect-error -- ws is an optional peer dependency\n const ws = await import(\"ws\")\n globalThis.WebSocket = ws.default ?? ws\n } catch {\n // ws not available -- devtools won't be able to connect\n log.warn?.(\n \"WebSocket polyfill (ws) not available. \" +\n \"Install ws for DevTools support: bun add -d ws\",\n )\n return false\n }\n }\n\n // Ensure window/self exist for react-devtools-core internals\n if (typeof globalThis.window === \"undefined\") {\n // @ts-expect-error -- polyfill for devtools\n globalThis.window = globalThis\n }\n\n // Configure component filters to hide silvery internals from the DevTools tree.\n // Filter types from react-devtools-shared/src/types.js:\n // 1 = ComponentFilterElementType, value 7 = HostComponent\n // 2 = ComponentFilterDisplayName (regex on displayName)\n if (!globalThis.__REACT_DEVTOOLS_COMPONENT_FILTERS__) {\n globalThis.__REACT_DEVTOOLS_COMPONENT_FILTERS__ = [\n { type: 1, value: 7, isEnabled: true },\n { type: 2, value: \"SilveryApp\", isEnabled: true, isValid: true },\n ]\n }\n\n // @ts-expect-error -- react-devtools-core has no type declarations\n const devtools = await import(\"react-devtools-core\")\n devtools.initialize()\n devtools.connectToDevTools()\n\n // Inject renderer info so DevTools can identify silvery.\n // rendererPackageName and rendererVersion are read from the host config\n // passed to Reconciler() -- see reconciler/host-config.ts.\n reconciler.injectIntoDevTools()\n\n connected = true\n return true\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error)\n log.warn?.(\n `Failed to connect to React DevTools. ` +\n `Install react-devtools-core: bun add -d react-devtools-core\\n` +\n ` Error: ${message}`,\n )\n return false\n }\n}\n\n/**\n * Check if DevTools are currently connected.\n */\nexport function isDevToolsConnected(): boolean {\n return connected\n}\n\n/**\n * Auto-connect to DevTools if DEBUG_DEVTOOLS=1 environment variable is set.\n * Called internally during render initialization.\n */\nexport async function autoConnectDevTools(): Promise<void> {\n if (process.env.DEBUG_DEVTOOLS === \"1\" || process.env.DEBUG_DEVTOOLS === \"true\") {\n await connectDevTools()\n }\n}\n\n// Global type augmentation for devtools polyfills\ndeclare global {\n var __REACT_DEVTOOLS_COMPONENT_FILTERS__: Array<{\n type: number\n value: number | string\n isEnabled: boolean\n isValid?: boolean\n }>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBA,MAAM,MAAM,aAAa,mBAAmB;AAE5C,IAAI,YAAY;;;;;;;;;;;;;;;;;AAkBhB,eAAsB,kBAAoC;AACxD,KAAI,UAAW,QAAO;AAEtB,KAAI;AAEF,MAAI,OAAO,WAAW,cAAc,YAClC,KAAI;GAEF,MAAM,KAAK,MAAM,OAAO;AACxB,cAAW,YAAY,GAAG,WAAW;UAC/B;AAEN,OAAI,OACF,wFAED;AACD,UAAO;;AAKX,MAAI,OAAO,WAAW,WAAW,YAE/B,YAAW,SAAS;AAOtB,MAAI,CAAC,WAAW,qCACd,YAAW,uCAAuC,CAChD;GAAE,MAAM;GAAG,OAAO;GAAG,WAAW;GAAM,EACtC;GAAE,MAAM;GAAG,OAAO;GAAc,WAAW;GAAM,SAAS;GAAM,CACjE;EAIH,MAAM,WAAW,MAAM,OAAO;AAC9B,WAAS,YAAY;AACrB,WAAS,mBAAmB;AAK5B,aAAW,oBAAoB;AAE/B,cAAY;AACZ,SAAO;UACA,OAAgB;EACvB,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,MAAI,OACF;WAEc,UACf;AACD,SAAO;;;;;;AAOX,SAAgB,sBAA+B;AAC7C,QAAO;;;;;;AAOT,eAAsB,sBAAqC;AACzD,KAAI,QAAQ,IAAI,mBAAmB,OAAO,QAAQ,IAAI,mBAAmB,OACvE,OAAM,iBAAiB"}
@@ -21,4 +21,4 @@ type EasingName = keyof typeof easings;
21
21
  declare function resolveEasing(easing: EasingName | EasingFn): EasingFn;
22
22
  //#endregion
23
23
  export { resolveEasing as i, EasingName as n, easings as r, EasingFn as t };
24
- //# sourceMappingURL=easing-C5MrdO7V.d.mts.map
24
+ //# sourceMappingURL=easing-8OlNopWv.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"easing-C5MrdO7V.d.mts","names":[],"sources":["../packages/ag-react/src/ui/animation/easing.ts"],"mappings":";;AAYA;;;;;AAMA;AAAA,KANY,QAAA,IAAY,CAAA;AAAA,cAMX,OAAA;EAAA;;;;;;;;KAUD,UAAA,gBAA0B,OAAA;;iBAOtB,aAAA,CAAc,MAAA,EAAQ,UAAA,GAAa,QAAA,GAAW,QAAA"}
1
+ {"version":3,"file":"easing-8OlNopWv.d.mts","names":[],"sources":["../packages/ag-react/src/ui/animation/easing.ts"],"mappings":";;AAYA;;;;;AAMA;AAAA,KANY,QAAA,IAAY,CAAA;AAAA,cAMX,OAAA;EAAA;;;;;;;;KAUD,UAAA,gBAA0B,OAAA;;iBAOtB,aAAA,CAAc,MAAA,EAAQ,UAAA,GAAa,QAAA,GAAW,QAAA"}
@@ -86,6 +86,7 @@ const DEFAULT_ETA_BUFFER_SIZE = 10;
86
86
  function createETATracker(bufferSize = 10) {
87
87
  const buffer = [];
88
88
  return {
89
+ /** Record a new sample */
89
90
  record(value) {
90
91
  buffer.push({
91
92
  time: Date.now(),
@@ -93,12 +94,15 @@ function createETATracker(bufferSize = 10) {
93
94
  });
94
95
  if (buffer.length > bufferSize) buffer.shift();
95
96
  },
97
+ /** Get current ETA */
96
98
  getETA(current, total) {
97
99
  return getETA(buffer, current, total);
98
100
  },
101
+ /** Reset the buffer */
99
102
  reset() {
100
103
  buffer.length = 0;
101
104
  },
105
+ /** Get buffer for external use */
102
106
  getBuffer() {
103
107
  return buffer;
104
108
  }
@@ -107,4 +111,4 @@ function createETATracker(bufferSize = 10) {
107
111
  //#endregion
108
112
  export { getETA as a, formatETA as i, calculateETA as n, createETATracker as r, DEFAULT_ETA_BUFFER_SIZE as t };
109
113
 
110
- //# sourceMappingURL=eta-BwYWEjfS.mjs.map
114
+ //# sourceMappingURL=eta-CPZ45g_P.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"eta-BwYWEjfS.mjs","names":[],"sources":["../packages/ag-react/src/ui/utils/eta.ts"],"sourcesContent":["/**\n * Shared ETA calculation utilities\n */\n\n/** Sample point for ETA calculation */\nexport interface ETASample {\n time: number\n value: number\n}\n\n/** ETA calculation result */\nexport interface ETAResult {\n /** Estimated seconds remaining, or null if insufficient data */\n seconds: number | null\n /** Formatted ETA string (e.g., \"1:30\", \"2:15:30\", \"--:--\") */\n formatted: string\n}\n\n/**\n * Calculate ETA from a buffer of samples\n *\n * @param buffer - Array of {time, value} samples\n * @param current - Current progress value\n * @param total - Total target value\n * @returns ETA in seconds (null if insufficient data)\n *\n * @example\n * ```ts\n * const buffer = [\n * { time: 1000, value: 0 },\n * { time: 2000, value: 10 },\n * ];\n * const eta = calculateETA(buffer, 10, 100);\n * // eta = 9 (9 seconds remaining at 10 items/sec)\n * ```\n */\nexport function calculateETA(buffer: ETASample[], current: number, total: number): number | null {\n if (buffer.length < 2) {\n return null\n }\n\n const first = buffer[0]!\n const last = buffer[buffer.length - 1]!\n\n const elapsed = (last.time - first.time) / 1000 // seconds\n const progress = last.value - first.value\n\n if (elapsed <= 0 || progress <= 0) {\n return null\n }\n\n const rate = progress / elapsed // items per second\n const remaining = total - current\n\n return remaining / rate\n}\n\n/**\n * Format ETA seconds as human-readable string\n *\n * @param eta - ETA in seconds (null for unknown)\n * @returns Formatted string (e.g., \"1:30\", \"2:15:30\", \"--:--\", \">1d\")\n *\n * @example\n * ```ts\n * formatETA(90) // \"1:30\"\n * formatETA(3665) // \"1:01:05\"\n * formatETA(null) // \"--:--\"\n * formatETA(100000) // \">1d\"\n * ```\n */\nexport function formatETA(eta: number | null): string {\n if (eta === null || !isFinite(eta)) {\n return \"--:--\"\n }\n\n if (eta > 86400) {\n // > 24 hours\n return \">1d\"\n }\n\n const hours = Math.floor(eta / 3600)\n const minutes = Math.floor((eta % 3600) / 60)\n const seconds = Math.floor(eta % 60)\n\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, \"0\")}:${seconds.toString().padStart(2, \"0\")}`\n }\n\n return `${minutes}:${seconds.toString().padStart(2, \"0\")}`\n}\n\n/**\n * Calculate and format ETA in one call\n *\n * @param buffer - Array of {time, value} samples\n * @param current - Current progress value\n * @param total - Total target value\n * @returns Object with seconds (number|null) and formatted string\n */\nexport function getETA(buffer: ETASample[], current: number, total: number): ETAResult {\n const seconds = calculateETA(buffer, current, total)\n return {\n seconds,\n formatted: formatETA(seconds),\n }\n}\n\n/** Default buffer size for ETA smoothing */\nexport const DEFAULT_ETA_BUFFER_SIZE = 10\n\n/**\n * Create an ETA tracker with automatic buffer management\n *\n * @param bufferSize - Number of samples to keep (default: 10)\n * @returns ETA tracker object\n *\n * @example\n * ```ts\n * const tracker = createETATracker();\n * tracker.record(0);\n * // ... later ...\n * tracker.record(50);\n * const eta = tracker.getETA(50, 100);\n * console.log(eta.formatted); // \"0:30\"\n * ```\n */\nexport function createETATracker(bufferSize = DEFAULT_ETA_BUFFER_SIZE) {\n const buffer: ETASample[] = []\n\n return {\n /** Record a new sample */\n record(value: number): void {\n buffer.push({ time: Date.now(), value })\n if (buffer.length > bufferSize) {\n buffer.shift()\n }\n },\n\n /** Get current ETA */\n getETA(current: number, total: number): ETAResult {\n return getETA(buffer, current, total)\n },\n\n /** Reset the buffer */\n reset(): void {\n buffer.length = 0\n },\n\n /** Get buffer for external use */\n getBuffer(): readonly ETASample[] {\n return buffer\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAoCA,SAAgB,aAAa,QAAqB,SAAiB,OAA8B;AAC/F,KAAI,OAAO,SAAS,EAClB,QAAO;CAGT,MAAM,QAAQ,OAAO;CACrB,MAAM,OAAO,OAAO,OAAO,SAAS;CAEpC,MAAM,WAAW,KAAK,OAAO,MAAM,QAAQ;CAC3C,MAAM,WAAW,KAAK,QAAQ,MAAM;AAEpC,KAAI,WAAW,KAAK,YAAY,EAC9B,QAAO;CAGT,MAAM,OAAO,WAAW;AAGxB,SAFkB,QAAQ,WAEP;;;;;;;;;;;;;;;;AAiBrB,SAAgB,UAAU,KAA4B;AACpD,KAAI,QAAQ,QAAQ,CAAC,SAAS,IAAI,CAChC,QAAO;AAGT,KAAI,MAAM,MAER,QAAO;CAGT,MAAM,QAAQ,KAAK,MAAM,MAAM,KAAK;CACpC,MAAM,UAAU,KAAK,MAAO,MAAM,OAAQ,GAAG;CAC7C,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG;AAEpC,KAAI,QAAQ,EACV,QAAO,GAAG,MAAM,GAAG,QAAQ,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,QAAQ,UAAU,CAAC,SAAS,GAAG,IAAI;AAG/F,QAAO,GAAG,QAAQ,GAAG,QAAQ,UAAU,CAAC,SAAS,GAAG,IAAI;;;;;;;;;;AAW1D,SAAgB,OAAO,QAAqB,SAAiB,OAA0B;CACrF,MAAM,UAAU,aAAa,QAAQ,SAAS,MAAM;AACpD,QAAO;EACL;EACA,WAAW,UAAU,QAAQ;EAC9B;;;AAIH,MAAa,0BAA0B;;;;;;;;;;;;;;;;;AAkBvC,SAAgB,iBAAiB,aAAA,IAAsC;CACrE,MAAM,SAAsB,EAAE;AAE9B,QAAO;EAEL,OAAO,OAAqB;AAC1B,UAAO,KAAK;IAAE,MAAM,KAAK,KAAK;IAAE;IAAO,CAAC;AACxC,OAAI,OAAO,SAAS,WAClB,QAAO,OAAO;;EAKlB,OAAO,SAAiB,OAA0B;AAChD,UAAO,OAAO,QAAQ,SAAS,MAAM;;EAIvC,QAAc;AACZ,UAAO,SAAS;;EAIlB,YAAkC;AAChC,UAAO;;EAEV"}
1
+ {"version":3,"file":"eta-CPZ45g_P.mjs","names":[],"sources":["../packages/ag-react/src/ui/utils/eta.ts"],"sourcesContent":["/**\n * Shared ETA calculation utilities\n */\n\n/** Sample point for ETA calculation */\nexport interface ETASample {\n time: number\n value: number\n}\n\n/** ETA calculation result */\nexport interface ETAResult {\n /** Estimated seconds remaining, or null if insufficient data */\n seconds: number | null\n /** Formatted ETA string (e.g., \"1:30\", \"2:15:30\", \"--:--\") */\n formatted: string\n}\n\n/**\n * Calculate ETA from a buffer of samples\n *\n * @param buffer - Array of {time, value} samples\n * @param current - Current progress value\n * @param total - Total target value\n * @returns ETA in seconds (null if insufficient data)\n *\n * @example\n * ```ts\n * const buffer = [\n * { time: 1000, value: 0 },\n * { time: 2000, value: 10 },\n * ];\n * const eta = calculateETA(buffer, 10, 100);\n * // eta = 9 (9 seconds remaining at 10 items/sec)\n * ```\n */\nexport function calculateETA(buffer: ETASample[], current: number, total: number): number | null {\n if (buffer.length < 2) {\n return null\n }\n\n const first = buffer[0]!\n const last = buffer[buffer.length - 1]!\n\n const elapsed = (last.time - first.time) / 1000 // seconds\n const progress = last.value - first.value\n\n if (elapsed <= 0 || progress <= 0) {\n return null\n }\n\n const rate = progress / elapsed // items per second\n const remaining = total - current\n\n return remaining / rate\n}\n\n/**\n * Format ETA seconds as human-readable string\n *\n * @param eta - ETA in seconds (null for unknown)\n * @returns Formatted string (e.g., \"1:30\", \"2:15:30\", \"--:--\", \">1d\")\n *\n * @example\n * ```ts\n * formatETA(90) // \"1:30\"\n * formatETA(3665) // \"1:01:05\"\n * formatETA(null) // \"--:--\"\n * formatETA(100000) // \">1d\"\n * ```\n */\nexport function formatETA(eta: number | null): string {\n if (eta === null || !isFinite(eta)) {\n return \"--:--\"\n }\n\n if (eta > 86400) {\n // > 24 hours\n return \">1d\"\n }\n\n const hours = Math.floor(eta / 3600)\n const minutes = Math.floor((eta % 3600) / 60)\n const seconds = Math.floor(eta % 60)\n\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, \"0\")}:${seconds.toString().padStart(2, \"0\")}`\n }\n\n return `${minutes}:${seconds.toString().padStart(2, \"0\")}`\n}\n\n/**\n * Calculate and format ETA in one call\n *\n * @param buffer - Array of {time, value} samples\n * @param current - Current progress value\n * @param total - Total target value\n * @returns Object with seconds (number|null) and formatted string\n */\nexport function getETA(buffer: ETASample[], current: number, total: number): ETAResult {\n const seconds = calculateETA(buffer, current, total)\n return {\n seconds,\n formatted: formatETA(seconds),\n }\n}\n\n/** Default buffer size for ETA smoothing */\nexport const DEFAULT_ETA_BUFFER_SIZE = 10\n\n/**\n * Create an ETA tracker with automatic buffer management\n *\n * @param bufferSize - Number of samples to keep (default: 10)\n * @returns ETA tracker object\n *\n * @example\n * ```ts\n * const tracker = createETATracker();\n * tracker.record(0);\n * // ... later ...\n * tracker.record(50);\n * const eta = tracker.getETA(50, 100);\n * console.log(eta.formatted); // \"0:30\"\n * ```\n */\nexport function createETATracker(bufferSize = DEFAULT_ETA_BUFFER_SIZE) {\n const buffer: ETASample[] = []\n\n return {\n /** Record a new sample */\n record(value: number): void {\n buffer.push({ time: Date.now(), value })\n if (buffer.length > bufferSize) {\n buffer.shift()\n }\n },\n\n /** Get current ETA */\n getETA(current: number, total: number): ETAResult {\n return getETA(buffer, current, total)\n },\n\n /** Reset the buffer */\n reset(): void {\n buffer.length = 0\n },\n\n /** Get buffer for external use */\n getBuffer(): readonly ETASample[] {\n return buffer\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAoCA,SAAgB,aAAa,QAAqB,SAAiB,OAA8B;AAC/F,KAAI,OAAO,SAAS,EAClB,QAAO;CAGT,MAAM,QAAQ,OAAO;CACrB,MAAM,OAAO,OAAO,OAAO,SAAS;CAEpC,MAAM,WAAW,KAAK,OAAO,MAAM,QAAQ;CAC3C,MAAM,WAAW,KAAK,QAAQ,MAAM;AAEpC,KAAI,WAAW,KAAK,YAAY,EAC9B,QAAO;CAGT,MAAM,OAAO,WAAW;AAGxB,SAFkB,QAAQ,WAEP;;;;;;;;;;;;;;;;AAiBrB,SAAgB,UAAU,KAA4B;AACpD,KAAI,QAAQ,QAAQ,CAAC,SAAS,IAAI,CAChC,QAAO;AAGT,KAAI,MAAM,MAER,QAAO;CAGT,MAAM,QAAQ,KAAK,MAAM,MAAM,KAAK;CACpC,MAAM,UAAU,KAAK,MAAO,MAAM,OAAQ,GAAG;CAC7C,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG;AAEpC,KAAI,QAAQ,EACV,QAAO,GAAG,MAAM,GAAG,QAAQ,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,QAAQ,UAAU,CAAC,SAAS,GAAG,IAAI;AAG/F,QAAO,GAAG,QAAQ,GAAG,QAAQ,UAAU,CAAC,SAAS,GAAG,IAAI;;;;;;;;;;AAW1D,SAAgB,OAAO,QAAqB,SAAiB,OAA0B;CACrF,MAAM,UAAU,aAAa,QAAQ,SAAS,MAAM;AACpD,QAAO;EACL;EACA,WAAW,UAAU,QAAQ;EAC9B;;;AAIH,MAAa,0BAA0B;;;;;;;;;;;;;;;;;AAkBvC,SAAgB,iBAAiB,aAAA,IAAsC;CACrE,MAAM,SAAsB,EAAE;AAE9B,QAAO;;EAEL,OAAO,OAAqB;AAC1B,UAAO,KAAK;IAAE,MAAM,KAAK,KAAK;IAAE;IAAO,CAAC;AACxC,OAAI,OAAO,SAAS,WAClB,QAAO,OAAO;;;EAKlB,OAAO,SAAiB,OAA0B;AAChD,UAAO,OAAO,QAAQ,SAAS,MAAM;;;EAIvC,QAAc;AACZ,UAAO,SAAS;;;EAIlB,YAAkC;AAChC,UAAO;;EAEV"}
@@ -1 +1 @@
1
- {"version":3,"file":"flexily-zero-adapter-VoBGHG14.mjs","names":["FlexilyNode"],"sources":["../packages/ag-term/src/adapters/flexily-zero-adapter.ts"],"sourcesContent":["/**\n * Flexily Layout Engine Adapter\n *\n * Wraps Flexily to implement the LayoutEngine interface.\n * Uses the default zero-allocation algorithm from flexily.\n */\n\nimport {\n ALIGN_AUTO,\n ALIGN_BASELINE,\n ALIGN_CENTER,\n ALIGN_FLEX_END,\n ALIGN_FLEX_START,\n ALIGN_SPACE_AROUND,\n ALIGN_SPACE_BETWEEN,\n ALIGN_SPACE_EVENLY,\n ALIGN_STRETCH,\n DIRECTION_LTR,\n DISPLAY_FLEX,\n DISPLAY_NONE,\n EDGE_ALL,\n EDGE_BOTTOM,\n EDGE_HORIZONTAL,\n EDGE_LEFT,\n EDGE_RIGHT,\n EDGE_TOP,\n EDGE_VERTICAL,\n // Constants\n FLEX_DIRECTION_COLUMN,\n FLEX_DIRECTION_COLUMN_REVERSE,\n FLEX_DIRECTION_ROW,\n FLEX_DIRECTION_ROW_REVERSE,\n Node as FlexilyNode,\n GUTTER_ALL,\n GUTTER_COLUMN,\n GUTTER_ROW,\n JUSTIFY_CENTER,\n JUSTIFY_FLEX_END,\n JUSTIFY_FLEX_START,\n JUSTIFY_SPACE_AROUND,\n JUSTIFY_SPACE_BETWEEN,\n JUSTIFY_SPACE_EVENLY,\n MEASURE_MODE_AT_MOST,\n MEASURE_MODE_EXACTLY,\n MEASURE_MODE_MIN_CONTENT,\n MEASURE_MODE_UNDEFINED,\n OVERFLOW_HIDDEN,\n OVERFLOW_SCROLL,\n OVERFLOW_VISIBLE,\n POSITION_TYPE_ABSOLUTE,\n POSITION_TYPE_RELATIVE,\n POSITION_TYPE_STATIC,\n WRAP_NO_WRAP,\n WRAP_WRAP,\n WRAP_WRAP_REVERSE,\n} from \"flexily\"\n\n// Flexily UNIT_CQI / UNIT_CQMIN constants. Hardcoded at this seam rather than\n// imported from \"flexily\" because the published flexily@0.7.1 does not export\n// them yet — A0.2's export-bump (vendor/flexily commit fb61a79) hasn't shipped\n// to npm. Constants are stable per Phase 1 of @km/silvery/responsive-layout-\n// architecture-reframe; same shape as the CONTAINER_TYPE_INLINE_SIZE=1 hardcode\n// in applyBoxProps. When flexily 0.7.2+ ships with the new exports, this can be\n// replaced with a named import.\nconst UNIT_CQI = 6\nconst UNIT_CQMIN = 7\n\nimport type { FitWidthLane, LayoutNode, MeasureFunc, MeasureMode } from \"@silvery/ag/layout-types\"\nimport type {\n AlignValue,\n DirectionValue,\n DisplayValue,\n EdgeValue,\n EngineCapabilities,\n FlexDirectionValue,\n GutterValue,\n JustifyValue,\n LayoutConstants,\n LayoutEngine,\n MeasureModeValue,\n OverflowValue,\n PositionTypeValue,\n WrapValue,\n} from \"../layout-engine\"\n\n/**\n * Capabilities advertised by the flexily-zero adapter.\n *\n * All six A0 primitives shipped: four at A0.1 (engine-native CQ resolution at\n * vendor/flexily `46141e9`), one at A0.2 (fitWidth single-pass lane snap at\n * vendor/flexily `4b44bf9`), one at A0.3 (CSS math functions at vendor/flexily\n * `0aebb95`).\n *\n * - `containerQueries` → A0.1 ✓ — Pass 1 freezeQuerySize + Pass 2 ancestor walk\n * - `containSize` → A0.1 ✓ — Phase 9 inline-axis shrink-wrap gate\n * - `containerQueryUnits` → A0.1 ✓ — UNIT_CQI / UNIT_CQMIN parsed and resolved\n * - `childStyleMutation` → A0.1 ✓ — setContainerQueryStyle hook (A0.0 substrate)\n * - `fitWidth` → A0.2 ✓ — Phase 3 lane-select prefix; single-pass lane snap\n * - `styleMathFunctions` → A0.3 ✓ — UNIT_CALC + MathExpr; late-bound per\n * vendor/flexily/docs/two-phase-layout.md\n */\nconst FLEXILY_CAPABILITIES: EngineCapabilities = Object.freeze({\n containerQueries: true, // ✓ A0.1\n containSize: true, // ✓ A0.1\n containerQueryUnits: true, // ✓ A0.1\n fitWidth: true, // ✓ A0.2\n styleMathFunctions: true, // ✓ A0.3\n childStyleMutation: true, // ✓ A0.1\n})\n\n// ============================================================================\n// Flexily Zero Node Adapter\n// ============================================================================\n\n/**\n * Wraps a Flexily zero-alloc node to implement LayoutNode interface.\n * Since Flexily already has a Yoga-compatible API, this is mostly delegation.\n */\nclass FlexilyZeroNodeAdapter implements LayoutNode {\n private node: FlexilyNode\n\n constructor(node: FlexilyNode) {\n this.node = node\n }\n\n /** Get the underlying Flexily node (for tree operations) */\n getFlexilyNode(): FlexilyNode {\n return this.node\n }\n\n // Tree operations\n insertChild(child: LayoutNode, index: number): void {\n const flexilyChild = (child as FlexilyZeroNodeAdapter).getFlexilyNode()\n this.node.insertChild(flexilyChild, index)\n }\n\n removeChild(child: LayoutNode): void {\n const flexilyChild = (child as FlexilyZeroNodeAdapter).getFlexilyNode()\n this.node.removeChild(flexilyChild)\n }\n\n free(): void {\n this.node.free()\n }\n\n // Measure function\n setMeasureFunc(measureFunc: MeasureFunc): void {\n this.node.setMeasureFunc((width, widthMode, height, heightMode) => {\n const widthModeStr = this.measureModeToString(widthMode)\n const heightModeStr = this.measureModeToString(heightMode)\n return measureFunc(width, widthModeStr, height, heightModeStr)\n })\n }\n\n // Dirty tracking - forces layout recalculation\n markDirty(): void {\n this.node.markDirty()\n }\n isDirty(): boolean {\n return this.node.isDirty()\n }\n\n private measureModeToString(mode: number): MeasureMode {\n if (mode === MEASURE_MODE_EXACTLY) return \"exactly\"\n if (mode === MEASURE_MODE_AT_MOST) return \"at-most\"\n if (mode === MEASURE_MODE_MIN_CONTENT) return \"min-content\"\n return \"undefined\"\n }\n\n // Dimension setters\n setWidth(value: number): void {\n this.node.setWidth(value)\n }\n setWidthPercent(value: number): void {\n this.node.setWidthPercent(value)\n }\n setWidthAuto(): void {\n this.node.setWidthAuto()\n }\n setWidthFitContent(): void {\n this.node.setWidthFitContent()\n }\n setWidthSnugContent(): void {\n this.node.setWidthSnugContent()\n }\n setHeight(value: number): void {\n this.node.setHeight(value)\n }\n setHeightPercent(value: number): void {\n this.node.setHeightPercent(value)\n }\n setHeightAuto(): void {\n this.node.setHeightAuto()\n }\n setMinWidth(value: number): void {\n this.node.setMinWidth(value)\n }\n setMinWidthPercent(value: number): void {\n this.node.setMinWidthPercent(value)\n }\n setMinHeight(value: number): void {\n this.node.setMinHeight(value)\n }\n setMinHeightPercent(value: number): void {\n this.node.setMinHeightPercent(value)\n }\n setMaxWidth(value: number): void {\n this.node.setMaxWidth(value)\n }\n setMaxWidthPercent(value: number): void {\n this.node.setMaxWidthPercent(value)\n }\n setMaxHeight(value: number): void {\n this.node.setMaxHeight(value)\n }\n setMaxHeightPercent(value: number): void {\n this.node.setMaxHeightPercent(value)\n }\n\n // Flex properties\n setFlexGrow(value: number): void {\n this.node.setFlexGrow(value)\n }\n setFlexShrink(value: number): void {\n this.node.setFlexShrink(value)\n }\n setFlexBasis(value: number): void {\n this.node.setFlexBasis(value)\n }\n setFlexBasisPercent(value: number): void {\n this.node.setFlexBasisPercent(value)\n }\n setFlexBasisAuto(): void {\n this.node.setFlexBasisAuto()\n }\n setFlexDirection(direction: number): void {\n this.node.setFlexDirection(direction)\n }\n setFlexWrap(wrap: number): void {\n this.node.setFlexWrap(wrap)\n }\n\n // Alignment\n setAlignItems(align: number): void {\n this.node.setAlignItems(align)\n }\n setAlignSelf(align: number): void {\n this.node.setAlignSelf(align)\n }\n setAlignContent(align: number): void {\n this.node.setAlignContent(align)\n }\n setJustifyContent(justify: number): void {\n this.node.setJustifyContent(justify)\n }\n\n // Spacing\n setPadding(edge: number, value: number): void {\n this.node.setPadding(edge, value)\n }\n setMargin(edge: number, value: number): void {\n this.node.setMargin(edge, value)\n }\n setBorder(edge: number, value: number): void {\n this.node.setBorder(edge, value)\n }\n setGap(gutter: number, value: number): void {\n this.node.setGap(gutter, value)\n }\n\n // Display & Position\n setDisplay(display: number): void {\n this.node.setDisplay(display)\n }\n setPositionType(positionType: number): void {\n this.node.setPositionType(positionType)\n }\n setPosition(edge: number, value: number): void {\n this.node.setPosition(edge, value)\n }\n setPositionPercent(edge: number, value: number): void {\n this.node.setPositionPercent(edge, value)\n }\n setOverflow(overflow: number): void {\n this.node.setOverflow(overflow)\n }\n\n // Container queries (A0.1) — flexily supports both; advertised via FLEXILY_CAPABILITIES.\n setContainerType(containerType: number): void {\n this.node.setContainerType(containerType)\n }\n setContainSize(value: boolean): void {\n this.node.setContainSize(value)\n }\n\n // Fit-width (A0.2) — translate FitWidthLane to flexily's { value, unit: UNIT_* }\n // shape. Lane entries can be plain numbers (treated as UNIT_POINT) or objects\n // with a \"cqi\"/\"cqmin\" unit string.\n setFitWidth(lanes: readonly FitWidthLane[] | undefined): void {\n if (lanes === undefined || lanes.length === 0) {\n this.node.setFitWidth(undefined)\n return\n }\n this.node.setFitWidth(\n lanes.map((entry) => {\n if (typeof entry === \"number\") return entry\n const unit = entry.unit === \"cqi\" ? UNIT_CQI : UNIT_CQMIN\n return { value: entry.value, unit }\n }),\n )\n }\n\n // Aspect Ratio\n setAspectRatio(value: number): void {\n this.node.setAspectRatio(value)\n }\n\n // Layout calculation\n calculateLayout(width: number, height: number, direction?: number): void {\n this.node.calculateLayout(width, height, direction ?? DIRECTION_LTR)\n }\n\n // Layout results\n getComputedLeft(): number {\n return this.node.getComputedLeft()\n }\n getComputedTop(): number {\n return this.node.getComputedTop()\n }\n getComputedWidth(): number {\n return this.node.getComputedWidth()\n }\n getComputedHeight(): number {\n return this.node.getComputedHeight()\n }\n}\n\n// ============================================================================\n// Flexily Zero Layout Engine\n// ============================================================================\n\n/**\n * Layout engine implementation using Flexily zero-allocation variant.\n * Optimized for high-frequency layout with reduced GC pressure.\n */\nexport class FlexilyZeroLayoutEngine implements LayoutEngine {\n private _constants: LayoutConstants = {\n // Flex Direction (cast from Flexily's plain numbers to branded types)\n FLEX_DIRECTION_COLUMN: FLEX_DIRECTION_COLUMN as FlexDirectionValue,\n FLEX_DIRECTION_COLUMN_REVERSE: FLEX_DIRECTION_COLUMN_REVERSE as FlexDirectionValue,\n FLEX_DIRECTION_ROW: FLEX_DIRECTION_ROW as FlexDirectionValue,\n FLEX_DIRECTION_ROW_REVERSE: FLEX_DIRECTION_ROW_REVERSE as FlexDirectionValue,\n\n // Wrap\n WRAP_NO_WRAP: WRAP_NO_WRAP as WrapValue,\n WRAP_WRAP: WRAP_WRAP as WrapValue,\n WRAP_WRAP_REVERSE: WRAP_WRAP_REVERSE as WrapValue,\n\n // Align\n ALIGN_AUTO: ALIGN_AUTO as AlignValue,\n ALIGN_FLEX_START: ALIGN_FLEX_START as AlignValue,\n ALIGN_CENTER: ALIGN_CENTER as AlignValue,\n ALIGN_FLEX_END: ALIGN_FLEX_END as AlignValue,\n ALIGN_STRETCH: ALIGN_STRETCH as AlignValue,\n ALIGN_BASELINE: ALIGN_BASELINE as AlignValue,\n ALIGN_SPACE_BETWEEN: ALIGN_SPACE_BETWEEN as AlignValue,\n ALIGN_SPACE_AROUND: ALIGN_SPACE_AROUND as AlignValue,\n ALIGN_SPACE_EVENLY: ALIGN_SPACE_EVENLY as AlignValue,\n\n // Justify\n JUSTIFY_FLEX_START: JUSTIFY_FLEX_START as JustifyValue,\n JUSTIFY_CENTER: JUSTIFY_CENTER as JustifyValue,\n JUSTIFY_FLEX_END: JUSTIFY_FLEX_END as JustifyValue,\n JUSTIFY_SPACE_BETWEEN: JUSTIFY_SPACE_BETWEEN as JustifyValue,\n JUSTIFY_SPACE_AROUND: JUSTIFY_SPACE_AROUND as JustifyValue,\n JUSTIFY_SPACE_EVENLY: JUSTIFY_SPACE_EVENLY as JustifyValue,\n\n // Edge\n EDGE_LEFT: EDGE_LEFT as EdgeValue,\n EDGE_TOP: EDGE_TOP as EdgeValue,\n EDGE_RIGHT: EDGE_RIGHT as EdgeValue,\n EDGE_BOTTOM: EDGE_BOTTOM as EdgeValue,\n EDGE_HORIZONTAL: EDGE_HORIZONTAL as EdgeValue,\n EDGE_VERTICAL: EDGE_VERTICAL as EdgeValue,\n EDGE_ALL: EDGE_ALL as EdgeValue,\n\n // Gutter\n GUTTER_COLUMN: GUTTER_COLUMN as GutterValue,\n GUTTER_ROW: GUTTER_ROW as GutterValue,\n GUTTER_ALL: GUTTER_ALL as GutterValue,\n\n // Display\n DISPLAY_FLEX: DISPLAY_FLEX as DisplayValue,\n DISPLAY_NONE: DISPLAY_NONE as DisplayValue,\n\n // Position Type\n POSITION_TYPE_STATIC: POSITION_TYPE_STATIC as PositionTypeValue,\n POSITION_TYPE_RELATIVE: POSITION_TYPE_RELATIVE as PositionTypeValue,\n POSITION_TYPE_ABSOLUTE: POSITION_TYPE_ABSOLUTE as PositionTypeValue,\n\n // Overflow\n OVERFLOW_VISIBLE: OVERFLOW_VISIBLE as OverflowValue,\n OVERFLOW_HIDDEN: OVERFLOW_HIDDEN as OverflowValue,\n OVERFLOW_SCROLL: OVERFLOW_SCROLL as OverflowValue,\n\n // Direction\n DIRECTION_LTR: DIRECTION_LTR as DirectionValue,\n\n // Measure Mode\n MEASURE_MODE_UNDEFINED: MEASURE_MODE_UNDEFINED as MeasureModeValue,\n MEASURE_MODE_EXACTLY: MEASURE_MODE_EXACTLY as MeasureModeValue,\n MEASURE_MODE_AT_MOST: MEASURE_MODE_AT_MOST as MeasureModeValue,\n }\n\n createNode(): LayoutNode {\n return new FlexilyZeroNodeAdapter(FlexilyNode.create({ defaults: \"css\" }))\n }\n\n get constants(): LayoutConstants {\n return this._constants\n }\n\n get name(): string {\n return \"flexily-zero\"\n }\n\n get capabilities(): EngineCapabilities {\n return FLEXILY_CAPABILITIES\n }\n}\n\n/**\n * Internal-only Yoga-preset variant of FlexilyZeroLayoutEngine.\n *\n * Production silvery uses CSS-correct defaults via the standard\n * {@link FlexilyZeroLayoutEngine}. The Ink-compat layer (which mimics\n * Ink/Yoga semantics — `flexShrink:0`, `alignContent:flex-start`, no auto\n * min-size on flex items) needs Yoga-preset Nodes. This subclass is the\n * only sanctioned way to opt into Yoga semantics from inside silvery; do\n * not export from the public barrel and do not use in app code.\n */\nclass FlexilyZeroLayoutEngineYoga extends FlexilyZeroLayoutEngine {\n override createNode(): LayoutNode {\n return new FlexilyZeroNodeAdapter(FlexilyNode.create({ defaults: \"yoga\" }))\n }\n}\n\n// ============================================================================\n// Initialization Helpers\n// ============================================================================\n\n/**\n * Create a Flexily zero-allocation layout engine with CSS-correct defaults.\n *\n * silvery's standard layout engine. Sets `flexShrink: 1`,\n * `alignContent: stretch`, and CSS §4.5 flex-item auto min-size on every\n * Node, matching browser flexbox semantics. Unlike Yoga, Flexily doesn't\n * require async initialization.\n *\n * Yoga-flavored semantics are deliberately not exposed here — consumers\n * needing Yoga compat should use `createFlexily({ defaults: \"yoga\" })` from\n * flexily directly. The Ink-compat layer is the single internal user that\n * stays on Yoga; it imports the `@internal` {@link createFlexilyZeroEngineForInkCompat}.\n */\nexport function createFlexilyZeroEngine(): FlexilyZeroLayoutEngine {\n return new FlexilyZeroLayoutEngine()\n}\n\n/**\n * Yoga-preset variant for Ink-compat tests only.\n *\n * Do not use in production silvery code. The Ink-compat layer (`packages/ink`)\n * mimics Ink semantics, which match Yoga (`flexShrink:0`, `alignContent:flex-start`,\n * no auto min-size). When silvery's auto-generated Ink-compat tests render\n * through silvery's layout pipeline, they need Yoga-preset Nodes — that's\n * the one and only purpose of this factory.\n *\n * @internal Visible to silvery tests/compat/ink/helpers and packages/ink internals.\n */\nexport function createFlexilyZeroEngineForInkCompat(): FlexilyZeroLayoutEngine {\n return new FlexilyZeroLayoutEngineYoga()\n}\n"],"mappings":";;;;;;;;AAgEA,MAAM,WAAW;AACjB,MAAM,aAAa;;;;;;;;;;;;;;;;;AAoCnB,MAAM,uBAA2C,OAAO,OAAO;CAC7D,kBAAkB;CAClB,aAAa;CACb,qBAAqB;CACrB,UAAU;CACV,oBAAoB;CACpB,oBAAoB;CACrB,CAAC;;;;;AAUF,IAAM,yBAAN,MAAmD;CACjD;CAEA,YAAY,MAAmB;AAC7B,OAAK,OAAO;;;CAId,iBAA8B;AAC5B,SAAO,KAAK;;CAId,YAAY,OAAmB,OAAqB;EAClD,MAAM,eAAgB,MAAiC,gBAAgB;AACvE,OAAK,KAAK,YAAY,cAAc,MAAM;;CAG5C,YAAY,OAAyB;EACnC,MAAM,eAAgB,MAAiC,gBAAgB;AACvE,OAAK,KAAK,YAAY,aAAa;;CAGrC,OAAa;AACX,OAAK,KAAK,MAAM;;CAIlB,eAAe,aAAgC;AAC7C,OAAK,KAAK,gBAAgB,OAAO,WAAW,QAAQ,eAAe;AAGjE,UAAO,YAAY,OAFE,KAAK,oBAAoB,UAAU,EAEhB,QADlB,KAAK,oBAAoB,WAAW,CACI;IAC9D;;CAIJ,YAAkB;AAChB,OAAK,KAAK,WAAW;;CAEvB,UAAmB;AACjB,SAAO,KAAK,KAAK,SAAS;;CAG5B,oBAA4B,MAA2B;AACrD,MAAI,SAAS,qBAAsB,QAAO;AAC1C,MAAI,SAAS,qBAAsB,QAAO;AAC1C,MAAI,SAAS,yBAA0B,QAAO;AAC9C,SAAO;;CAIT,SAAS,OAAqB;AAC5B,OAAK,KAAK,SAAS,MAAM;;CAE3B,gBAAgB,OAAqB;AACnC,OAAK,KAAK,gBAAgB,MAAM;;CAElC,eAAqB;AACnB,OAAK,KAAK,cAAc;;CAE1B,qBAA2B;AACzB,OAAK,KAAK,oBAAoB;;CAEhC,sBAA4B;AAC1B,OAAK,KAAK,qBAAqB;;CAEjC,UAAU,OAAqB;AAC7B,OAAK,KAAK,UAAU,MAAM;;CAE5B,iBAAiB,OAAqB;AACpC,OAAK,KAAK,iBAAiB,MAAM;;CAEnC,gBAAsB;AACpB,OAAK,KAAK,eAAe;;CAE3B,YAAY,OAAqB;AAC/B,OAAK,KAAK,YAAY,MAAM;;CAE9B,mBAAmB,OAAqB;AACtC,OAAK,KAAK,mBAAmB,MAAM;;CAErC,aAAa,OAAqB;AAChC,OAAK,KAAK,aAAa,MAAM;;CAE/B,oBAAoB,OAAqB;AACvC,OAAK,KAAK,oBAAoB,MAAM;;CAEtC,YAAY,OAAqB;AAC/B,OAAK,KAAK,YAAY,MAAM;;CAE9B,mBAAmB,OAAqB;AACtC,OAAK,KAAK,mBAAmB,MAAM;;CAErC,aAAa,OAAqB;AAChC,OAAK,KAAK,aAAa,MAAM;;CAE/B,oBAAoB,OAAqB;AACvC,OAAK,KAAK,oBAAoB,MAAM;;CAItC,YAAY,OAAqB;AAC/B,OAAK,KAAK,YAAY,MAAM;;CAE9B,cAAc,OAAqB;AACjC,OAAK,KAAK,cAAc,MAAM;;CAEhC,aAAa,OAAqB;AAChC,OAAK,KAAK,aAAa,MAAM;;CAE/B,oBAAoB,OAAqB;AACvC,OAAK,KAAK,oBAAoB,MAAM;;CAEtC,mBAAyB;AACvB,OAAK,KAAK,kBAAkB;;CAE9B,iBAAiB,WAAyB;AACxC,OAAK,KAAK,iBAAiB,UAAU;;CAEvC,YAAY,MAAoB;AAC9B,OAAK,KAAK,YAAY,KAAK;;CAI7B,cAAc,OAAqB;AACjC,OAAK,KAAK,cAAc,MAAM;;CAEhC,aAAa,OAAqB;AAChC,OAAK,KAAK,aAAa,MAAM;;CAE/B,gBAAgB,OAAqB;AACnC,OAAK,KAAK,gBAAgB,MAAM;;CAElC,kBAAkB,SAAuB;AACvC,OAAK,KAAK,kBAAkB,QAAQ;;CAItC,WAAW,MAAc,OAAqB;AAC5C,OAAK,KAAK,WAAW,MAAM,MAAM;;CAEnC,UAAU,MAAc,OAAqB;AAC3C,OAAK,KAAK,UAAU,MAAM,MAAM;;CAElC,UAAU,MAAc,OAAqB;AAC3C,OAAK,KAAK,UAAU,MAAM,MAAM;;CAElC,OAAO,QAAgB,OAAqB;AAC1C,OAAK,KAAK,OAAO,QAAQ,MAAM;;CAIjC,WAAW,SAAuB;AAChC,OAAK,KAAK,WAAW,QAAQ;;CAE/B,gBAAgB,cAA4B;AAC1C,OAAK,KAAK,gBAAgB,aAAa;;CAEzC,YAAY,MAAc,OAAqB;AAC7C,OAAK,KAAK,YAAY,MAAM,MAAM;;CAEpC,mBAAmB,MAAc,OAAqB;AACpD,OAAK,KAAK,mBAAmB,MAAM,MAAM;;CAE3C,YAAY,UAAwB;AAClC,OAAK,KAAK,YAAY,SAAS;;CAIjC,iBAAiB,eAA6B;AAC5C,OAAK,KAAK,iBAAiB,cAAc;;CAE3C,eAAe,OAAsB;AACnC,OAAK,KAAK,eAAe,MAAM;;CAMjC,YAAY,OAAkD;AAC5D,MAAI,UAAU,KAAA,KAAa,MAAM,WAAW,GAAG;AAC7C,QAAK,KAAK,YAAY,KAAA,EAAU;AAChC;;AAEF,OAAK,KAAK,YACR,MAAM,KAAK,UAAU;AACnB,OAAI,OAAO,UAAU,SAAU,QAAO;GACtC,MAAM,OAAO,MAAM,SAAS,QAAQ,WAAW;AAC/C,UAAO;IAAE,OAAO,MAAM;IAAO;IAAM;IACnC,CACH;;CAIH,eAAe,OAAqB;AAClC,OAAK,KAAK,eAAe,MAAM;;CAIjC,gBAAgB,OAAe,QAAgB,WAA0B;AACvE,OAAK,KAAK,gBAAgB,OAAO,QAAQ,aAAa,cAAc;;CAItE,kBAA0B;AACxB,SAAO,KAAK,KAAK,iBAAiB;;CAEpC,iBAAyB;AACvB,SAAO,KAAK,KAAK,gBAAgB;;CAEnC,mBAA2B;AACzB,SAAO,KAAK,KAAK,kBAAkB;;CAErC,oBAA4B;AAC1B,SAAO,KAAK,KAAK,mBAAmB;;;;;;;AAYxC,IAAa,0BAAb,MAA6D;CAC3D,aAAsC;EAEb;EACQ;EACX;EACQ;EAGd;EACH;EACQ;EAGP;EACM;EACJ;EACE;EACD;EACC;EACK;EACD;EACA;EAGA;EACJ;EACE;EACK;EACD;EACA;EAGX;EACD;EACE;EACC;EACI;EACF;EACL;EAGK;EACH;EACA;EAGE;EACA;EAGQ;EACE;EACA;EAGN;EACD;EACA;EAGF;EAGS;EACF;EACA;EACvB;CAED,aAAyB;AACvB,SAAO,IAAI,uBAAuBA,KAAY,OAAO,EAAE,UAAU,OAAO,CAAC,CAAC;;CAG5E,IAAI,YAA6B;AAC/B,SAAO,KAAK;;CAGd,IAAI,OAAe;AACjB,SAAO;;CAGT,IAAI,eAAmC;AACrC,SAAO;;;;;;;;;;;;;;;;AAqCX,SAAgB,0BAAmD;AACjE,QAAO,IAAI,yBAAyB"}
1
+ {"version":3,"file":"flexily-zero-adapter-VoBGHG14.mjs","names":["FlexilyNode"],"sources":["../packages/ag-term/src/adapters/flexily-zero-adapter.ts"],"sourcesContent":["/**\n * Flexily Layout Engine Adapter\n *\n * Wraps Flexily to implement the LayoutEngine interface.\n * Uses the default zero-allocation algorithm from flexily.\n */\n\nimport {\n ALIGN_AUTO,\n ALIGN_BASELINE,\n ALIGN_CENTER,\n ALIGN_FLEX_END,\n ALIGN_FLEX_START,\n ALIGN_SPACE_AROUND,\n ALIGN_SPACE_BETWEEN,\n ALIGN_SPACE_EVENLY,\n ALIGN_STRETCH,\n DIRECTION_LTR,\n DISPLAY_FLEX,\n DISPLAY_NONE,\n EDGE_ALL,\n EDGE_BOTTOM,\n EDGE_HORIZONTAL,\n EDGE_LEFT,\n EDGE_RIGHT,\n EDGE_TOP,\n EDGE_VERTICAL,\n // Constants\n FLEX_DIRECTION_COLUMN,\n FLEX_DIRECTION_COLUMN_REVERSE,\n FLEX_DIRECTION_ROW,\n FLEX_DIRECTION_ROW_REVERSE,\n Node as FlexilyNode,\n GUTTER_ALL,\n GUTTER_COLUMN,\n GUTTER_ROW,\n JUSTIFY_CENTER,\n JUSTIFY_FLEX_END,\n JUSTIFY_FLEX_START,\n JUSTIFY_SPACE_AROUND,\n JUSTIFY_SPACE_BETWEEN,\n JUSTIFY_SPACE_EVENLY,\n MEASURE_MODE_AT_MOST,\n MEASURE_MODE_EXACTLY,\n MEASURE_MODE_MIN_CONTENT,\n MEASURE_MODE_UNDEFINED,\n OVERFLOW_HIDDEN,\n OVERFLOW_SCROLL,\n OVERFLOW_VISIBLE,\n POSITION_TYPE_ABSOLUTE,\n POSITION_TYPE_RELATIVE,\n POSITION_TYPE_STATIC,\n WRAP_NO_WRAP,\n WRAP_WRAP,\n WRAP_WRAP_REVERSE,\n} from \"flexily\"\n\n// Flexily UNIT_CQI / UNIT_CQMIN constants. Hardcoded at this seam rather than\n// imported from \"flexily\" because the published flexily@0.7.1 does not export\n// them yet — A0.2's export-bump (vendor/flexily commit fb61a79) hasn't shipped\n// to npm. Constants are stable per Phase 1 of @km/silvery/responsive-layout-\n// architecture-reframe; same shape as the CONTAINER_TYPE_INLINE_SIZE=1 hardcode\n// in applyBoxProps. When flexily 0.7.2+ ships with the new exports, this can be\n// replaced with a named import.\nconst UNIT_CQI = 6\nconst UNIT_CQMIN = 7\n\nimport type { FitWidthLane, LayoutNode, MeasureFunc, MeasureMode } from \"@silvery/ag/layout-types\"\nimport type {\n AlignValue,\n DirectionValue,\n DisplayValue,\n EdgeValue,\n EngineCapabilities,\n FlexDirectionValue,\n GutterValue,\n JustifyValue,\n LayoutConstants,\n LayoutEngine,\n MeasureModeValue,\n OverflowValue,\n PositionTypeValue,\n WrapValue,\n} from \"../layout-engine\"\n\n/**\n * Capabilities advertised by the flexily-zero adapter.\n *\n * All six A0 primitives shipped: four at A0.1 (engine-native CQ resolution at\n * vendor/flexily `46141e9`), one at A0.2 (fitWidth single-pass lane snap at\n * vendor/flexily `4b44bf9`), one at A0.3 (CSS math functions at vendor/flexily\n * `0aebb95`).\n *\n * - `containerQueries` → A0.1 ✓ — Pass 1 freezeQuerySize + Pass 2 ancestor walk\n * - `containSize` → A0.1 ✓ — Phase 9 inline-axis shrink-wrap gate\n * - `containerQueryUnits` → A0.1 ✓ — UNIT_CQI / UNIT_CQMIN parsed and resolved\n * - `childStyleMutation` → A0.1 ✓ — setContainerQueryStyle hook (A0.0 substrate)\n * - `fitWidth` → A0.2 ✓ — Phase 3 lane-select prefix; single-pass lane snap\n * - `styleMathFunctions` → A0.3 ✓ — UNIT_CALC + MathExpr; late-bound per\n * vendor/flexily/docs/two-phase-layout.md\n */\nconst FLEXILY_CAPABILITIES: EngineCapabilities = Object.freeze({\n containerQueries: true, // ✓ A0.1\n containSize: true, // ✓ A0.1\n containerQueryUnits: true, // ✓ A0.1\n fitWidth: true, // ✓ A0.2\n styleMathFunctions: true, // ✓ A0.3\n childStyleMutation: true, // ✓ A0.1\n})\n\n// ============================================================================\n// Flexily Zero Node Adapter\n// ============================================================================\n\n/**\n * Wraps a Flexily zero-alloc node to implement LayoutNode interface.\n * Since Flexily already has a Yoga-compatible API, this is mostly delegation.\n */\nclass FlexilyZeroNodeAdapter implements LayoutNode {\n private node: FlexilyNode\n\n constructor(node: FlexilyNode) {\n this.node = node\n }\n\n /** Get the underlying Flexily node (for tree operations) */\n getFlexilyNode(): FlexilyNode {\n return this.node\n }\n\n // Tree operations\n insertChild(child: LayoutNode, index: number): void {\n const flexilyChild = (child as FlexilyZeroNodeAdapter).getFlexilyNode()\n this.node.insertChild(flexilyChild, index)\n }\n\n removeChild(child: LayoutNode): void {\n const flexilyChild = (child as FlexilyZeroNodeAdapter).getFlexilyNode()\n this.node.removeChild(flexilyChild)\n }\n\n free(): void {\n this.node.free()\n }\n\n // Measure function\n setMeasureFunc(measureFunc: MeasureFunc): void {\n this.node.setMeasureFunc((width, widthMode, height, heightMode) => {\n const widthModeStr = this.measureModeToString(widthMode)\n const heightModeStr = this.measureModeToString(heightMode)\n return measureFunc(width, widthModeStr, height, heightModeStr)\n })\n }\n\n // Dirty tracking - forces layout recalculation\n markDirty(): void {\n this.node.markDirty()\n }\n isDirty(): boolean {\n return this.node.isDirty()\n }\n\n private measureModeToString(mode: number): MeasureMode {\n if (mode === MEASURE_MODE_EXACTLY) return \"exactly\"\n if (mode === MEASURE_MODE_AT_MOST) return \"at-most\"\n if (mode === MEASURE_MODE_MIN_CONTENT) return \"min-content\"\n return \"undefined\"\n }\n\n // Dimension setters\n setWidth(value: number): void {\n this.node.setWidth(value)\n }\n setWidthPercent(value: number): void {\n this.node.setWidthPercent(value)\n }\n setWidthAuto(): void {\n this.node.setWidthAuto()\n }\n setWidthFitContent(): void {\n this.node.setWidthFitContent()\n }\n setWidthSnugContent(): void {\n this.node.setWidthSnugContent()\n }\n setHeight(value: number): void {\n this.node.setHeight(value)\n }\n setHeightPercent(value: number): void {\n this.node.setHeightPercent(value)\n }\n setHeightAuto(): void {\n this.node.setHeightAuto()\n }\n setMinWidth(value: number): void {\n this.node.setMinWidth(value)\n }\n setMinWidthPercent(value: number): void {\n this.node.setMinWidthPercent(value)\n }\n setMinHeight(value: number): void {\n this.node.setMinHeight(value)\n }\n setMinHeightPercent(value: number): void {\n this.node.setMinHeightPercent(value)\n }\n setMaxWidth(value: number): void {\n this.node.setMaxWidth(value)\n }\n setMaxWidthPercent(value: number): void {\n this.node.setMaxWidthPercent(value)\n }\n setMaxHeight(value: number): void {\n this.node.setMaxHeight(value)\n }\n setMaxHeightPercent(value: number): void {\n this.node.setMaxHeightPercent(value)\n }\n\n // Flex properties\n setFlexGrow(value: number): void {\n this.node.setFlexGrow(value)\n }\n setFlexShrink(value: number): void {\n this.node.setFlexShrink(value)\n }\n setFlexBasis(value: number): void {\n this.node.setFlexBasis(value)\n }\n setFlexBasisPercent(value: number): void {\n this.node.setFlexBasisPercent(value)\n }\n setFlexBasisAuto(): void {\n this.node.setFlexBasisAuto()\n }\n setFlexDirection(direction: number): void {\n this.node.setFlexDirection(direction)\n }\n setFlexWrap(wrap: number): void {\n this.node.setFlexWrap(wrap)\n }\n\n // Alignment\n setAlignItems(align: number): void {\n this.node.setAlignItems(align)\n }\n setAlignSelf(align: number): void {\n this.node.setAlignSelf(align)\n }\n setAlignContent(align: number): void {\n this.node.setAlignContent(align)\n }\n setJustifyContent(justify: number): void {\n this.node.setJustifyContent(justify)\n }\n\n // Spacing\n setPadding(edge: number, value: number): void {\n this.node.setPadding(edge, value)\n }\n setMargin(edge: number, value: number): void {\n this.node.setMargin(edge, value)\n }\n setBorder(edge: number, value: number): void {\n this.node.setBorder(edge, value)\n }\n setGap(gutter: number, value: number): void {\n this.node.setGap(gutter, value)\n }\n\n // Display & Position\n setDisplay(display: number): void {\n this.node.setDisplay(display)\n }\n setPositionType(positionType: number): void {\n this.node.setPositionType(positionType)\n }\n setPosition(edge: number, value: number): void {\n this.node.setPosition(edge, value)\n }\n setPositionPercent(edge: number, value: number): void {\n this.node.setPositionPercent(edge, value)\n }\n setOverflow(overflow: number): void {\n this.node.setOverflow(overflow)\n }\n\n // Container queries (A0.1) — flexily supports both; advertised via FLEXILY_CAPABILITIES.\n setContainerType(containerType: number): void {\n this.node.setContainerType(containerType)\n }\n setContainSize(value: boolean): void {\n this.node.setContainSize(value)\n }\n\n // Fit-width (A0.2) — translate FitWidthLane to flexily's { value, unit: UNIT_* }\n // shape. Lane entries can be plain numbers (treated as UNIT_POINT) or objects\n // with a \"cqi\"/\"cqmin\" unit string.\n setFitWidth(lanes: readonly FitWidthLane[] | undefined): void {\n if (lanes === undefined || lanes.length === 0) {\n this.node.setFitWidth(undefined)\n return\n }\n this.node.setFitWidth(\n lanes.map((entry) => {\n if (typeof entry === \"number\") return entry\n const unit = entry.unit === \"cqi\" ? UNIT_CQI : UNIT_CQMIN\n return { value: entry.value, unit }\n }),\n )\n }\n\n // Aspect Ratio\n setAspectRatio(value: number): void {\n this.node.setAspectRatio(value)\n }\n\n // Layout calculation\n calculateLayout(width: number, height: number, direction?: number): void {\n this.node.calculateLayout(width, height, direction ?? DIRECTION_LTR)\n }\n\n // Layout results\n getComputedLeft(): number {\n return this.node.getComputedLeft()\n }\n getComputedTop(): number {\n return this.node.getComputedTop()\n }\n getComputedWidth(): number {\n return this.node.getComputedWidth()\n }\n getComputedHeight(): number {\n return this.node.getComputedHeight()\n }\n}\n\n// ============================================================================\n// Flexily Zero Layout Engine\n// ============================================================================\n\n/**\n * Layout engine implementation using Flexily zero-allocation variant.\n * Optimized for high-frequency layout with reduced GC pressure.\n */\nexport class FlexilyZeroLayoutEngine implements LayoutEngine {\n private _constants: LayoutConstants = {\n // Flex Direction (cast from Flexily's plain numbers to branded types)\n FLEX_DIRECTION_COLUMN: FLEX_DIRECTION_COLUMN as FlexDirectionValue,\n FLEX_DIRECTION_COLUMN_REVERSE: FLEX_DIRECTION_COLUMN_REVERSE as FlexDirectionValue,\n FLEX_DIRECTION_ROW: FLEX_DIRECTION_ROW as FlexDirectionValue,\n FLEX_DIRECTION_ROW_REVERSE: FLEX_DIRECTION_ROW_REVERSE as FlexDirectionValue,\n\n // Wrap\n WRAP_NO_WRAP: WRAP_NO_WRAP as WrapValue,\n WRAP_WRAP: WRAP_WRAP as WrapValue,\n WRAP_WRAP_REVERSE: WRAP_WRAP_REVERSE as WrapValue,\n\n // Align\n ALIGN_AUTO: ALIGN_AUTO as AlignValue,\n ALIGN_FLEX_START: ALIGN_FLEX_START as AlignValue,\n ALIGN_CENTER: ALIGN_CENTER as AlignValue,\n ALIGN_FLEX_END: ALIGN_FLEX_END as AlignValue,\n ALIGN_STRETCH: ALIGN_STRETCH as AlignValue,\n ALIGN_BASELINE: ALIGN_BASELINE as AlignValue,\n ALIGN_SPACE_BETWEEN: ALIGN_SPACE_BETWEEN as AlignValue,\n ALIGN_SPACE_AROUND: ALIGN_SPACE_AROUND as AlignValue,\n ALIGN_SPACE_EVENLY: ALIGN_SPACE_EVENLY as AlignValue,\n\n // Justify\n JUSTIFY_FLEX_START: JUSTIFY_FLEX_START as JustifyValue,\n JUSTIFY_CENTER: JUSTIFY_CENTER as JustifyValue,\n JUSTIFY_FLEX_END: JUSTIFY_FLEX_END as JustifyValue,\n JUSTIFY_SPACE_BETWEEN: JUSTIFY_SPACE_BETWEEN as JustifyValue,\n JUSTIFY_SPACE_AROUND: JUSTIFY_SPACE_AROUND as JustifyValue,\n JUSTIFY_SPACE_EVENLY: JUSTIFY_SPACE_EVENLY as JustifyValue,\n\n // Edge\n EDGE_LEFT: EDGE_LEFT as EdgeValue,\n EDGE_TOP: EDGE_TOP as EdgeValue,\n EDGE_RIGHT: EDGE_RIGHT as EdgeValue,\n EDGE_BOTTOM: EDGE_BOTTOM as EdgeValue,\n EDGE_HORIZONTAL: EDGE_HORIZONTAL as EdgeValue,\n EDGE_VERTICAL: EDGE_VERTICAL as EdgeValue,\n EDGE_ALL: EDGE_ALL as EdgeValue,\n\n // Gutter\n GUTTER_COLUMN: GUTTER_COLUMN as GutterValue,\n GUTTER_ROW: GUTTER_ROW as GutterValue,\n GUTTER_ALL: GUTTER_ALL as GutterValue,\n\n // Display\n DISPLAY_FLEX: DISPLAY_FLEX as DisplayValue,\n DISPLAY_NONE: DISPLAY_NONE as DisplayValue,\n\n // Position Type\n POSITION_TYPE_STATIC: POSITION_TYPE_STATIC as PositionTypeValue,\n POSITION_TYPE_RELATIVE: POSITION_TYPE_RELATIVE as PositionTypeValue,\n POSITION_TYPE_ABSOLUTE: POSITION_TYPE_ABSOLUTE as PositionTypeValue,\n\n // Overflow\n OVERFLOW_VISIBLE: OVERFLOW_VISIBLE as OverflowValue,\n OVERFLOW_HIDDEN: OVERFLOW_HIDDEN as OverflowValue,\n OVERFLOW_SCROLL: OVERFLOW_SCROLL as OverflowValue,\n\n // Direction\n DIRECTION_LTR: DIRECTION_LTR as DirectionValue,\n\n // Measure Mode\n MEASURE_MODE_UNDEFINED: MEASURE_MODE_UNDEFINED as MeasureModeValue,\n MEASURE_MODE_EXACTLY: MEASURE_MODE_EXACTLY as MeasureModeValue,\n MEASURE_MODE_AT_MOST: MEASURE_MODE_AT_MOST as MeasureModeValue,\n }\n\n createNode(): LayoutNode {\n return new FlexilyZeroNodeAdapter(FlexilyNode.create({ defaults: \"css\" }))\n }\n\n get constants(): LayoutConstants {\n return this._constants\n }\n\n get name(): string {\n return \"flexily-zero\"\n }\n\n get capabilities(): EngineCapabilities {\n return FLEXILY_CAPABILITIES\n }\n}\n\n/**\n * Internal-only Yoga-preset variant of FlexilyZeroLayoutEngine.\n *\n * Production silvery uses CSS-correct defaults via the standard\n * {@link FlexilyZeroLayoutEngine}. The Ink-compat layer (which mimics\n * Ink/Yoga semantics — `flexShrink:0`, `alignContent:flex-start`, no auto\n * min-size on flex items) needs Yoga-preset Nodes. This subclass is the\n * only sanctioned way to opt into Yoga semantics from inside silvery; do\n * not export from the public barrel and do not use in app code.\n */\nclass FlexilyZeroLayoutEngineYoga extends FlexilyZeroLayoutEngine {\n override createNode(): LayoutNode {\n return new FlexilyZeroNodeAdapter(FlexilyNode.create({ defaults: \"yoga\" }))\n }\n}\n\n// ============================================================================\n// Initialization Helpers\n// ============================================================================\n\n/**\n * Create a Flexily zero-allocation layout engine with CSS-correct defaults.\n *\n * silvery's standard layout engine. Sets `flexShrink: 1`,\n * `alignContent: stretch`, and CSS §4.5 flex-item auto min-size on every\n * Node, matching browser flexbox semantics. Unlike Yoga, Flexily doesn't\n * require async initialization.\n *\n * Yoga-flavored semantics are deliberately not exposed here — consumers\n * needing Yoga compat should use `createFlexily({ defaults: \"yoga\" })` from\n * flexily directly. The Ink-compat layer is the single internal user that\n * stays on Yoga; it imports the `@internal` {@link createFlexilyZeroEngineForInkCompat}.\n */\nexport function createFlexilyZeroEngine(): FlexilyZeroLayoutEngine {\n return new FlexilyZeroLayoutEngine()\n}\n\n/**\n * Yoga-preset variant for Ink-compat tests only.\n *\n * Do not use in production silvery code. The Ink-compat layer (`packages/ink`)\n * mimics Ink semantics, which match Yoga (`flexShrink:0`, `alignContent:flex-start`,\n * no auto min-size). When silvery's auto-generated Ink-compat tests render\n * through silvery's layout pipeline, they need Yoga-preset Nodes — that's\n * the one and only purpose of this factory.\n *\n * @internal Visible to silvery tests/compat/ink/helpers and packages/ink internals.\n */\nexport function createFlexilyZeroEngineForInkCompat(): FlexilyZeroLayoutEngine {\n return new FlexilyZeroLayoutEngineYoga()\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jt as Rect, m as HitTarget, p as HitRegistry } from "./mouse-events-B2z5tbsL.mjs";
1
+ import { Ft as Rect, _ as HitTarget, g as HitRegistry } from "./mouse-events-UoUWNIdS.mjs";
2
2
  import * as _$react from "react";
3
3
 
4
4
  //#region packages/ag-term/src/hit-registry.d.ts
@@ -68,4 +68,4 @@ declare function useHitRegion(target: HitTarget, rect: Rect | null, zIndex?: num
68
68
  declare function useHitRegionCallback(target: HitTarget, zIndex?: number, enabled?: boolean): (rect: Rect) => void;
69
69
  //#endregion
70
70
  export { useHitRegistry as i, useHitRegion as n, useHitRegionCallback as r, HitRegistryContext as t };
71
- //# sourceMappingURL=hit-registry-D_nxOivS.d.mts.map
71
+ //# sourceMappingURL=hit-registry-DRV2ig-Y.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hit-registry-D_nxOivS.d.mts","names":[],"sources":["../packages/ag-term/src/hit-registry.ts"],"mappings":";;;;;;;;cA6Ca,kBAAA,EAAkB,OAAA,CAAA,OAAA,CAAA,WAAA;;AA4G/B;;;;iBAjGgB,cAAA,CAAA,GAAkB,WAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BlB,YAAA,CACd,MAAA,EAAQ,SAAA,EACR,IAAA,EAAM,IAAA,SACN,MAAA,WACA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+Dc,oBAAA,CACd,MAAA,EAAQ,SAAA,EACR,MAAA,WACA,OAAA,cACE,IAAA,EAAM,IAAA"}
1
+ {"version":3,"file":"hit-registry-DRV2ig-Y.d.mts","names":[],"sources":["../packages/ag-term/src/hit-registry.ts"],"mappings":";;;;;;;;cA6Ca,kBAAA,EAAkB,OAAA,CAAA,OAAA,CAAA,WAAA;;AA4G/B;;;;iBAjGgB,cAAA,CAAA,GAAkB,WAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BlB,YAAA,CACd,MAAA,EAAQ,SAAA,EACR,IAAA,EAAM,IAAA,SACN,MAAA,WACA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+Dc,oBAAA,CACd,MAAA,EAAQ,SAAA,EACR,MAAA,WACA,OAAA,cACE,IAAA,EAAM,IAAA"}
@@ -1,9 +1,9 @@
1
- import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-BEJ448es.mjs";
2
- import { r as effect } from "./src-BqeBFB3X.mjs";
3
- import { j as createTerminalProfile } from "./src-B8lf1kiR.mjs";
1
+ import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-hT5z_Zn9.mjs";
2
+ import { r as effect } from "./src-B6MuVlOK.mjs";
3
+ import { j as createTerminalProfile } from "./src-DorsnS70.mjs";
4
4
  import { c as StdoutContext, l as TermContext } from "./context-CEhuD1R_.mjs";
5
- import { c as useScreenRect, i as useBoxSize } from "./useLayout-D5cE8OCI.mjs";
6
- import { n as Box, t as Text } from "./Text-Ci6UCSTL.mjs";
5
+ import { c as useScreenRect, i as useBoxSize } from "./useLayout-Cx01rHVI.mjs";
6
+ import { n as Box, t as Text } from "./Text-4tWKabKH.mjs";
7
7
  import { readFileSync } from "node:fs";
8
8
  import { useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useSyncExternalStore } from "react";
9
9
  import { jsx } from "react/jsx-runtime";
@@ -297,7 +297,7 @@ function splitIntoChunks(str, size) {
297
297
  return chunks;
298
298
  }
299
299
  //#endregion
300
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/utils/common.js
300
+ //#region node_modules/pako/lib/utils/common.js
301
301
  var require_common = /* @__PURE__ */ __commonJSMin(((exports) => {
302
302
  var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined";
303
303
  function _has(obj, key) {
@@ -364,7 +364,7 @@ var require_common = /* @__PURE__ */ __commonJSMin(((exports) => {
364
364
  exports.setTyped(TYPED_OK);
365
365
  }));
366
366
  //#endregion
367
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/trees.js
367
+ //#region node_modules/pako/lib/zlib/trees.js
368
368
  var require_trees = /* @__PURE__ */ __commonJSMin(((exports) => {
369
369
  var utils = require_common();
370
370
  var Z_FIXED = 4;
@@ -979,7 +979,7 @@ var require_trees = /* @__PURE__ */ __commonJSMin(((exports) => {
979
979
  exports._tr_align = _tr_align;
980
980
  }));
981
981
  //#endregion
982
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js
982
+ //#region node_modules/pako/lib/zlib/adler32.js
983
983
  var require_adler32 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
984
984
  function adler32(adler, buf, len, pos) {
985
985
  var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0;
@@ -998,7 +998,7 @@ var require_adler32 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
998
998
  module.exports = adler32;
999
999
  }));
1000
1000
  //#endregion
1001
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js
1001
+ //#region node_modules/pako/lib/zlib/crc32.js
1002
1002
  var require_crc32 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1003
1003
  function makeTable() {
1004
1004
  var c, table = [];
@@ -1019,7 +1019,7 @@ var require_crc32 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1019
1019
  module.exports = crc32;
1020
1020
  }));
1021
1021
  //#endregion
1022
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/messages.js
1022
+ //#region node_modules/pako/lib/zlib/messages.js
1023
1023
  var require_messages = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1024
1024
  module.exports = {
1025
1025
  2: "need dictionary",
@@ -1034,7 +1034,7 @@ var require_messages = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1034
1034
  };
1035
1035
  }));
1036
1036
  //#endregion
1037
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js
1037
+ //#region node_modules/pako/lib/zlib/deflate.js
1038
1038
  var require_deflate$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
1039
1039
  var utils = require_common();
1040
1040
  var trees = require_trees();
@@ -1908,7 +1908,7 @@ while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] &
1908
1908
  exports.deflateInfo = "pako deflate (from Nodeca project)";
1909
1909
  }));
1910
1910
  //#endregion
1911
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/utils/strings.js
1911
+ //#region node_modules/pako/lib/utils/strings.js
1912
1912
  var require_strings = /* @__PURE__ */ __commonJSMin(((exports) => {
1913
1913
  var utils = require_common();
1914
1914
  var STR_APPLY_OK = true;
@@ -2028,7 +2028,7 @@ var require_strings = /* @__PURE__ */ __commonJSMin(((exports) => {
2028
2028
  };
2029
2029
  }));
2030
2030
  //#endregion
2031
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js
2031
+ //#region node_modules/pako/lib/zlib/zstream.js
2032
2032
  var require_zstream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2033
2033
  function ZStream() {
2034
2034
  this.input = null;
@@ -2047,7 +2047,7 @@ var require_zstream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2047
2047
  module.exports = ZStream;
2048
2048
  }));
2049
2049
  //#endregion
2050
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/deflate.js
2050
+ //#region node_modules/pako/lib/deflate.js
2051
2051
  var require_deflate = /* @__PURE__ */ __commonJSMin(((exports) => {
2052
2052
  var zlib_deflate = require_deflate$1();
2053
2053
  var utils = require_common();
@@ -2343,7 +2343,7 @@ var require_deflate = /* @__PURE__ */ __commonJSMin(((exports) => {
2343
2343
  exports.gzip = gzip;
2344
2344
  }));
2345
2345
  //#endregion
2346
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js
2346
+ //#region node_modules/pako/lib/zlib/inffast.js
2347
2347
  var require_inffast = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2348
2348
  var BAD = 30;
2349
2349
  var TYPE = 12;
@@ -2560,7 +2560,7 @@ var require_inffast = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2560
2560
  };
2561
2561
  }));
2562
2562
  //#endregion
2563
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js
2563
+ //#region node_modules/pako/lib/zlib/inftrees.js
2564
2564
  var require_inftrees = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2565
2565
  var utils = require_common();
2566
2566
  var MAXBITS = 15;
@@ -2827,7 +2827,7 @@ var require_inftrees = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2827
2827
  };
2828
2828
  }));
2829
2829
  //#endregion
2830
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js
2830
+ //#region node_modules/pako/lib/zlib/inflate.js
2831
2831
  var require_inflate$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
2832
2832
  var utils = require_common();
2833
2833
  var adler32 = require_adler32();
@@ -3850,7 +3850,7 @@ var require_inflate$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
3850
3850
  exports.inflateInfo = "pako inflate (from Nodeca project)";
3851
3851
  }));
3852
3852
  //#endregion
3853
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/constants.js
3853
+ //#region node_modules/pako/lib/zlib/constants.js
3854
3854
  var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3855
3855
  module.exports = {
3856
3856
  Z_NO_FLUSH: 0,
@@ -3883,7 +3883,7 @@ var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3883
3883
  };
3884
3884
  }));
3885
3885
  //#endregion
3886
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js
3886
+ //#region node_modules/pako/lib/zlib/gzheader.js
3887
3887
  var require_gzheader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3888
3888
  function GZheader() {
3889
3889
  this.text = 0;
@@ -3900,7 +3900,7 @@ var require_gzheader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3900
3900
  module.exports = GZheader;
3901
3901
  }));
3902
3902
  //#endregion
3903
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/lib/inflate.js
3903
+ //#region node_modules/pako/lib/inflate.js
3904
3904
  var require_inflate = /* @__PURE__ */ __commonJSMin(((exports) => {
3905
3905
  var zlib_inflate = require_inflate$1();
3906
3906
  var utils = require_common();
@@ -4200,7 +4200,7 @@ var require_inflate = /* @__PURE__ */ __commonJSMin(((exports) => {
4200
4200
  exports.ungzip = inflate;
4201
4201
  }));
4202
4202
  //#endregion
4203
- //#region ../../node_modules/.bun/pako@1.0.11/node_modules/pako/index.js
4203
+ //#region node_modules/pako/index.js
4204
4204
  var require_pako = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4205
4205
  var assign = require_common().assign;
4206
4206
  var deflate = require_deflate();
@@ -5957,4 +5957,4 @@ function ImagePlacement({ src, width: effectiveWidth, height: effectiveHeight, f
5957
5957
  //#endregion
5958
5958
  export { deleteKittyImage as a, isKittyGraphicsSupported as c, shallow as d, useTerm as f, isSixelSupported as i, placeKittyImage as l, decodePngToRgba as n, deleteKittyPlacement as o, encodeSixel as r, encodeKittyImage as s, Image as t, useWindowSize as u };
5959
5959
 
5960
- //# sourceMappingURL=image-CIF75xMr.mjs.map
5960
+ //# sourceMappingURL=image-o2WpbrD1.mjs.map