@fses/workbench-app 0.2.0 → 0.2.2

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 (803) hide show
  1. package/WORKBENCH-CLOSURE.json +80 -0
  2. package/dist/Workspace-fYH2XNdb.js +22699 -0
  3. package/dist/fses-workbench-app.js +2 -2
  4. package/dist/{index-DbH6tMQy.js → index-CbIJlts1.js} +8 -8
  5. package/dist/internal/personal-workbench/components/workbench/WorkbenchStudio.vue.d.ts +2 -2
  6. package/dist/internal/personal-workbench/lib/deepAgentApi.d.ts +41 -2
  7. package/dist/internal/personal-workbench/lib/deepAgentQueueState.d.ts +111 -0
  8. package/dist/internal/personal-workbench/lib/vueRuntimeAdapters.d.ts +72 -0
  9. package/dist/internal/personal-workbench/lib/workbenchSocketClient.d.ts +1 -1
  10. package/dist/internal/personal-workbench/lib/workbenchStorage.d.ts +2 -0
  11. package/dist/runtime/index.js +1 -1
  12. package/dist/style.css +1 -1
  13. package/dist/{useWorkbenchRuntime-XpOzwm56.js → useWorkbenchRuntime-Ch8lqkjO.js} +6707 -6315
  14. package/node_modules/@byteluck/agentic-protocol/LICENSE +9 -0
  15. package/node_modules/@byteluck/agentic-protocol/README.md +74 -0
  16. package/node_modules/@byteluck/agentic-protocol/dist/index.d.ts +1623 -0
  17. package/node_modules/@byteluck/agentic-protocol/dist/index.mjs +3380 -0
  18. package/node_modules/@byteluck/agentic-protocol/package.json +37 -0
  19. package/node_modules/@byteluck/workbench-skill-contracts/LICENSE +9 -0
  20. package/node_modules/@byteluck/workbench-skill-contracts/dist/index.d.ts +234 -0
  21. package/node_modules/@byteluck/workbench-skill-contracts/dist/index.mjs +394 -0
  22. package/node_modules/@byteluck/workbench-skill-contracts/package.json +37 -0
  23. package/node_modules/@fses/ai-chat/LICENSE +9 -0
  24. package/node_modules/@fses/ai-chat/README.md +320 -0
  25. package/node_modules/@fses/ai-chat/dist/chart-card/data.d.ts +12 -0
  26. package/node_modules/@fses/ai-chat/dist/chart-card/from-markdown.d.ts +11 -0
  27. package/node_modules/@fses/ai-chat/dist/chart-card/from-tool.d.ts +8 -0
  28. package/node_modules/@fses/ai-chat/dist/chart-card/options.d.ts +4 -0
  29. package/node_modules/@fses/ai-chat/dist/chart-card/trace.d.ts +19 -0
  30. package/node_modules/@fses/ai-chat/dist/chart-card/types.d.ts +133 -0
  31. package/node_modules/@fses/ai-chat/dist/components/CardRecommendationDeferredDraft.vue.d.ts +13 -0
  32. package/node_modules/@fses/ai-chat/dist/components/CardRecommendationDraft.vue.d.ts +18 -0
  33. package/node_modules/@fses/ai-chat/dist/components/ChartCardRenderer.vue.d.ts +11 -0
  34. package/node_modules/@fses/ai-chat/dist/components/ChatMessageItem.vue.d.ts +76 -0
  35. package/node_modules/@fses/ai-chat/dist/components/ChatMessageList.vue.d.ts +79 -0
  36. package/node_modules/@fses/ai-chat/dist/components/ChatSender.vue.d.ts +98 -0
  37. package/node_modules/@fses/ai-chat/dist/components/CollapsedToolActivity.vue.d.ts +9 -0
  38. package/node_modules/@fses/ai-chat/dist/components/ContextUsageRing.vue.d.ts +12 -0
  39. package/node_modules/@fses/ai-chat/dist/components/EChartsView.vue.d.ts +6 -0
  40. package/node_modules/@fses/ai-chat/dist/components/FsesAiChat.vue.d.ts +306 -0
  41. package/node_modules/@fses/ai-chat/dist/components/PlanDraftCard.vue.d.ts +19 -0
  42. package/node_modules/@fses/ai-chat/dist/components/ShellExecPanel.vue.d.ts +6 -0
  43. package/node_modules/@fses/ai-chat/dist/components/TaskTodoPlanBar.vue.d.ts +6 -0
  44. package/node_modules/@fses/ai-chat/dist/components/ThinkingShimmer.vue.d.ts +6 -0
  45. package/node_modules/@fses/ai-chat/dist/composables/context-usage.d.ts +11 -0
  46. package/node_modules/@fses/ai-chat/dist/composables/types.d.ts +465 -0
  47. package/node_modules/@fses/ai-chat/dist/composables/useChat.d.ts +2 -0
  48. package/node_modules/@fses/ai-chat/dist/composables/useSystemEChartsIcon.d.ts +11 -0
  49. package/node_modules/@fses/ai-chat/dist/fses-ai-chat.js +11408 -0
  50. package/node_modules/@fses/ai-chat/dist/fses-ai-chat.umd.cjs +25 -0
  51. package/node_modules/@fses/ai-chat/dist/index.d.ts +17 -0
  52. package/node_modules/@fses/ai-chat/dist/plugin.d.ts +8 -0
  53. package/node_modules/@fses/ai-chat/dist/style.css +1 -0
  54. package/node_modules/@fses/ai-chat/dist/utils/assistant-markdown.d.ts +11 -0
  55. package/node_modules/@fses/ai-chat/dist/utils/attachment-upload.d.ts +22 -0
  56. package/node_modules/@fses/ai-chat/dist/utils/card-recommendation-config-summary.d.ts +86 -0
  57. package/node_modules/@fses/ai-chat/dist/utils/card-recommendation-field-label.d.ts +24 -0
  58. package/node_modules/@fses/ai-chat/dist/utils/card-recommendation-source.d.ts +18 -0
  59. package/node_modules/@fses/ai-chat/dist/utils/card-recommendation-title-source.d.ts +12 -0
  60. package/node_modules/@fses/ai-chat/dist/utils/chart-card-visibility.d.ts +24 -0
  61. package/node_modules/@fses/ai-chat/dist/utils/derived-process-labels.d.ts +13 -0
  62. package/node_modules/@fses/ai-chat/dist/utils/echarts-recommendation-icon.d.ts +36 -0
  63. package/node_modules/@fses/ai-chat/dist/utils/group-messages.d.ts +30 -0
  64. package/node_modules/@fses/ai-chat/dist/utils/status-activity.d.ts +48 -0
  65. package/node_modules/@fses/ai-chat/dist/utils/system-echarts-template-icons.generated.d.ts +305 -0
  66. package/node_modules/@fses/ai-chat/dist/utils/system-echarts-template.d.ts +20 -0
  67. package/node_modules/@fses/ai-chat/dist/utils/task-todo-plan.d.ts +40 -0
  68. package/node_modules/@fses/ai-chat/dist/utils/workbench-echarts-theme.d.ts +35 -0
  69. package/node_modules/@fses/ai-chat/package.json +81 -0
  70. package/node_modules/@fses/workbench-card/LICENSE +9 -0
  71. package/node_modules/@fses/workbench-card/README.md +81 -0
  72. package/node_modules/@fses/workbench-card/dist/chart/index.d.ts +8 -0
  73. package/node_modules/@fses/workbench-card/dist/fses-workbench-card-echarts-protocol.js +2230 -0
  74. package/node_modules/@fses/workbench-card/dist/fses-workbench-card-renderers.js +33742 -0
  75. package/node_modules/@fses/workbench-card/dist/fses-workbench-card.js +21238 -0
  76. package/node_modules/@fses/workbench-card/dist/fses-workbench-card.umd.cjs +1 -0
  77. package/node_modules/@fses/workbench-card/dist/index.d.ts +11 -0
  78. package/node_modules/@fses/workbench-card/dist/registry/cardRegistry.d.ts +50 -0
  79. package/node_modules/@fses/workbench-card/dist/registry/compositeCardPatterns.d.ts +39 -0
  80. package/node_modules/@fses/workbench-card/dist/registry/echartsTemplateCategories.d.ts +20 -0
  81. package/node_modules/@fses/workbench-card/dist/registry/echartsTemplateRegistry.d.ts +1158 -0
  82. package/node_modules/@fses/workbench-card/dist/registry/echartsTemplateRegistry.generated.d.ts +1141 -0
  83. package/node_modules/@fses/workbench-card/dist/registry/echartsTemplateTypes.d.ts +76 -0
  84. package/node_modules/@fses/workbench-card/dist/registry/index.d.ts +10 -0
  85. package/node_modules/@fses/workbench-card/dist/renderers/WorkbenchBlockRenderer.vue.d.ts +55 -0
  86. package/node_modules/@fses/workbench-card/dist/renderers/chart/ChartRegistry.vue.d.ts +22 -0
  87. package/node_modules/@fses/workbench-card/dist/renderers/chart/EChartsProtocolRenderer.vue.d.ts +34 -0
  88. package/node_modules/@fses/workbench-card/dist/renderers/chart/chartRendererRegistry.d.ts +219 -0
  89. package/node_modules/@fses/workbench-card/dist/renderers/chart/chartResponsiveLayout.d.ts +47 -0
  90. package/node_modules/@fses/workbench-card/dist/renderers/chart/dynamicEchartOption.d.ts +30 -0
  91. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/adapter.d.ts +73 -0
  92. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/composite.converter.d.ts +11 -0
  93. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/configOnly.converter.d.ts +11 -0
  94. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/geo.converter.d.ts +10 -0
  95. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/graphic.converter.d.ts +10 -0
  96. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/layout.converter.d.ts +11 -0
  97. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/network.converter.d.ts +10 -0
  98. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/scene3D.converter.d.ts +11 -0
  99. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/series.converter.d.ts +10 -0
  100. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/table.converter.d.ts +10 -0
  101. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/timeline.converter.d.ts +11 -0
  102. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/transition.converter.d.ts +11 -0
  103. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/tree.converter.d.ts +10 -0
  104. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/converters/tuple.converter.d.ts +10 -0
  105. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/index.d.ts +9 -0
  106. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/merger.d.ts +16 -0
  107. package/node_modules/@fses/workbench-card/dist/renderers/chart/echarts-protocol/types.d.ts +447 -0
  108. package/node_modules/@fses/workbench-card/dist/renderers/chart/echartsRuntimeInteractions.d.ts +30 -0
  109. package/node_modules/@fses/workbench-card/dist/renderers/chart/echartsTitle.d.ts +13 -0
  110. package/node_modules/@fses/workbench-card/dist/renderers/chart/echartsTooltipPortal.d.ts +12 -0
  111. package/node_modules/@fses/workbench-card/dist/renderers/chart/types.d.ts +47 -0
  112. package/node_modules/@fses/workbench-card/dist/renderers/chart/useEchart.d.ts +29 -0
  113. package/node_modules/@fses/workbench-card/dist/renderers/chart/workbenchChartTheme.d.ts +36 -0
  114. package/node_modules/@fses/workbench-card/dist/renderers/custom-canvas/canvasLayoutBindings.d.ts +86 -0
  115. package/node_modules/@fses/workbench-card/dist/renderers/hostBridge.d.ts +61 -0
  116. package/node_modules/@fses/workbench-card/dist/renderers/index.d.ts +17 -0
  117. package/node_modules/@fses/workbench-card/dist/renderers/native/nativeBindings.d.ts +145 -0
  118. package/node_modules/@fses/workbench-card/dist/renderers/nested/nestedBlockBindings.d.ts +107 -0
  119. package/node_modules/@fses/workbench-card/dist/renderers/quickLinkDisplay.d.ts +24 -0
  120. package/node_modules/@fses/workbench-card/dist/renderers/reference-composite/referenceCompositeBindings.d.ts +171 -0
  121. package/node_modules/@fses/workbench-card/dist/renderers/reference-composite/referenceRiskAndStrategyBindings.d.ts +91 -0
  122. package/node_modules/@fses/workbench-card/dist/renderers/resizableTable.d.ts +51 -0
  123. package/node_modules/@fses/workbench-card/dist/renderers/style.css +1 -0
  124. package/node_modules/@fses/workbench-card/dist/renderers/tableDisplay.d.ts +25 -0
  125. package/node_modules/@fses/workbench-card/dist/renderers/useWorkbenchBlockRendererBindings.d.ts +580 -0
  126. package/node_modules/@fses/workbench-card/dist/shell/workbenchVisualShell.d.ts +48 -0
  127. package/node_modules/@fses/workbench-card/dist/style.css +1 -0
  128. package/node_modules/@fses/workbench-card/dist/types/block.d.ts +2011 -0
  129. package/node_modules/@fses/workbench-card/dist/types/canvas.d.ts +25 -0
  130. package/node_modules/@fses/workbench-card/dist/types/echartsProtocol.d.ts +445 -0
  131. package/node_modules/@fses/workbench-card/dist/types/index.d.ts +10 -0
  132. package/node_modules/@fses/workbench-card/dist/types/registry.d.ts +7 -0
  133. package/node_modules/@fses/workbench-card/dist/types/runtime.d.ts +34 -0
  134. package/node_modules/@fses/workbench-card/package.json +83 -0
  135. package/node_modules/@fses/workbench-card/src/chart/index.ts +8 -0
  136. package/node_modules/@fses/workbench-card/src/index.ts +13 -0
  137. package/node_modules/@fses/workbench-card/src/registry/cardRegistry.ts +476 -0
  138. package/node_modules/@fses/workbench-card/src/registry/compositeCardPatterns.ts +206 -0
  139. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateCategories.ts +74 -0
  140. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateRegistry.generated.js +19950 -0
  141. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateRegistry.generated.ts +19951 -0
  142. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateRegistry.ts +32 -0
  143. package/node_modules/@fses/workbench-card/src/registry/echartsTemplateTypes.ts +83 -0
  144. package/node_modules/@fses/workbench-card/src/registry/index.ts +10 -0
  145. package/node_modules/@fses/workbench-card/src/renderers/WorkbenchBlockRenderer.vue +2728 -0
  146. package/node_modules/@fses/workbench-card/src/renderers/chart/ChartRegistry.vue +221 -0
  147. package/node_modules/@fses/workbench-card/src/renderers/chart/EChartsProtocolRenderer.vue +304 -0
  148. package/node_modules/@fses/workbench-card/src/renderers/chart/chartRendererRegistry.ts +311 -0
  149. package/node_modules/@fses/workbench-card/src/renderers/chart/chartResponsiveLayout.ts +172 -0
  150. package/node_modules/@fses/workbench-card/src/renderers/chart/dynamicEchartOption.ts +127 -0
  151. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/adapter.ts +1349 -0
  152. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/composite.converter.ts +71 -0
  153. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/configOnly.converter.ts +45 -0
  154. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/geo.converter.ts +97 -0
  155. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/graphic.converter.ts +59 -0
  156. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/layout.converter.ts +53 -0
  157. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/network.converter.ts +82 -0
  158. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/scene3D.converter.ts +73 -0
  159. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/series.converter.ts +795 -0
  160. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/table.converter.ts +195 -0
  161. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/timeline.converter.ts +62 -0
  162. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/transition.converter.ts +58 -0
  163. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/tree.converter.ts +75 -0
  164. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/converters/tuple.converter.ts +112 -0
  165. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/index.ts +10 -0
  166. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/merger.ts +109 -0
  167. package/node_modules/@fses/workbench-card/src/renderers/chart/echarts-protocol/types.ts +515 -0
  168. package/node_modules/@fses/workbench-card/src/renderers/chart/echartsRuntimeInteractions.ts +450 -0
  169. package/node_modules/@fses/workbench-card/src/renderers/chart/echartsTitle.ts +94 -0
  170. package/node_modules/@fses/workbench-card/src/renderers/chart/echartsTooltipPortal.ts +140 -0
  171. package/node_modules/@fses/workbench-card/src/renderers/chart/types.ts +53 -0
  172. package/node_modules/@fses/workbench-card/src/renderers/chart/useEchart.ts +1820 -0
  173. package/node_modules/@fses/workbench-card/src/renderers/chart/workbenchChartTheme.ts +240 -0
  174. package/node_modules/@fses/workbench-card/src/renderers/custom-canvas/canvasLayoutBindings.ts +660 -0
  175. package/node_modules/@fses/workbench-card/src/renderers/hostBridge.ts +74 -0
  176. package/node_modules/@fses/workbench-card/src/renderers/index.ts +25 -0
  177. package/node_modules/@fses/workbench-card/src/renderers/native/nativeBindings.ts +1096 -0
  178. package/node_modules/@fses/workbench-card/src/renderers/nested/nestedBlockBindings.ts +1349 -0
  179. package/node_modules/@fses/workbench-card/src/renderers/quickLinkDisplay.ts +53 -0
  180. package/node_modules/@fses/workbench-card/src/renderers/reference-composite/referenceCompositeBindings.ts +3209 -0
  181. package/node_modules/@fses/workbench-card/src/renderers/reference-composite/referenceRiskAndStrategyBindings.ts +1004 -0
  182. package/node_modules/@fses/workbench-card/src/renderers/resizableTable.ts +136 -0
  183. package/node_modules/@fses/workbench-card/src/renderers/tableDisplay.ts +140 -0
  184. package/node_modules/@fses/workbench-card/src/renderers/useWorkbenchBlockRendererBindings.ts +3192 -0
  185. package/node_modules/@fses/workbench-card/src/shell/workbenchVisualShell.ts +228 -0
  186. package/node_modules/@fses/workbench-card/src/styles/workbench-card.css +343 -0
  187. package/node_modules/@fses/workbench-card/src/types/block.ts +2496 -0
  188. package/node_modules/@fses/workbench-card/src/types/canvas.ts +30 -0
  189. package/node_modules/@fses/workbench-card/src/types/echartsProtocol.ts +513 -0
  190. package/node_modules/@fses/workbench-card/src/types/index.ts +10 -0
  191. package/node_modules/@fses/workbench-card/src/types/registry.ts +17 -0
  192. package/node_modules/@fses/workbench-card/src/types/runtime.ts +31 -0
  193. package/node_modules/dompurify/LICENSE +568 -0
  194. package/node_modules/dompurify/README.md +523 -0
  195. package/node_modules/dompurify/dist/purify.cjs.d.ts +451 -0
  196. package/node_modules/dompurify/dist/purify.cjs.js +1472 -0
  197. package/node_modules/dompurify/dist/purify.cjs.js.map +1 -0
  198. package/node_modules/dompurify/dist/purify.es.d.mts +448 -0
  199. package/node_modules/dompurify/dist/purify.es.mjs +1470 -0
  200. package/node_modules/dompurify/dist/purify.es.mjs.map +1 -0
  201. package/node_modules/dompurify/dist/purify.js +1478 -0
  202. package/node_modules/dompurify/dist/purify.js.map +1 -0
  203. package/node_modules/dompurify/dist/purify.min.js +3 -0
  204. package/node_modules/dompurify/dist/purify.min.js.map +1 -0
  205. package/node_modules/dompurify/package.json +168 -0
  206. package/node_modules/zod/LICENSE +21 -0
  207. package/node_modules/zod/README.md +208 -0
  208. package/node_modules/zod/index.cjs +33 -0
  209. package/node_modules/zod/index.d.cts +4 -0
  210. package/node_modules/zod/index.d.ts +4 -0
  211. package/node_modules/zod/index.js +4 -0
  212. package/node_modules/zod/package.json +118 -0
  213. package/node_modules/zod/src/index.ts +4 -0
  214. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  215. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  216. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  217. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  218. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  219. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  220. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  221. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  222. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  223. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  224. package/node_modules/zod/src/v3/errors.ts +13 -0
  225. package/node_modules/zod/src/v3/external.ts +6 -0
  226. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  227. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  228. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  229. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  230. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  231. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  232. package/node_modules/zod/src/v3/index.ts +4 -0
  233. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  234. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  235. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  236. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  237. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  238. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  239. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  240. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  241. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  242. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  243. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  244. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  245. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  246. package/node_modules/zod/src/v3/tests/complex.test.ts +56 -0
  247. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  248. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  249. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  250. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  251. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  252. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  253. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  254. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  255. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  256. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  257. package/node_modules/zod/src/v3/tests/function.test.ts +257 -0
  258. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  259. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  260. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  261. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  262. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  263. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  264. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  265. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  266. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  267. package/node_modules/zod/src/v3/tests/nan.test.ts +21 -0
  268. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  269. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  270. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  271. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  272. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  273. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  274. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  275. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  276. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  277. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  278. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  279. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  280. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  281. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  282. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  283. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  284. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  285. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  286. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  287. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  288. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  289. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  290. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  291. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  292. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  293. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  294. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  295. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  296. package/node_modules/zod/src/v3/types.ts +5136 -0
  297. package/node_modules/zod/src/v4/classic/checks.ts +30 -0
  298. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  299. package/node_modules/zod/src/v4/classic/compat.ts +66 -0
  300. package/node_modules/zod/src/v4/classic/errors.ts +75 -0
  301. package/node_modules/zod/src/v4/classic/external.ts +50 -0
  302. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  303. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  304. package/node_modules/zod/src/v4/classic/parse.ts +33 -0
  305. package/node_modules/zod/src/v4/classic/schemas.ts +2054 -0
  306. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  307. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  308. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
  309. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  310. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  311. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  312. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  313. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +63 -0
  314. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +252 -0
  315. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  316. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  317. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +352 -0
  318. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  319. package/node_modules/zod/src/v4/classic/tests/date.test.ts +31 -0
  320. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +296 -0
  321. package/node_modules/zod/src/v4/classic/tests/default.test.ts +313 -0
  322. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  323. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +619 -0
  324. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  325. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +527 -0
  326. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  327. package/node_modules/zod/src/v4/classic/tests/file.test.ts +91 -0
  328. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +175 -0
  329. package/node_modules/zod/src/v4/classic/tests/function.test.ts +268 -0
  330. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  331. package/node_modules/zod/src/v4/classic/tests/index.test.ts +829 -0
  332. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +34 -0
  333. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +171 -0
  334. package/node_modules/zod/src/v4/classic/tests/json.test.ts +108 -0
  335. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  336. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +92 -0
  337. package/node_modules/zod/src/v4/classic/tests/map.test.ts +196 -0
  338. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  339. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  340. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +86 -0
  341. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  342. package/node_modules/zod/src/v4/classic/tests/number.test.ts +247 -0
  343. package/node_modules/zod/src/v4/classic/tests/object.test.ts +563 -0
  344. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +123 -0
  345. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +147 -0
  346. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +127 -0
  347. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +81 -0
  348. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +37 -0
  349. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +298 -0
  350. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  351. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  352. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  353. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  354. package/node_modules/zod/src/v4/classic/tests/record.test.ts +342 -0
  355. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +356 -0
  356. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +532 -0
  357. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +204 -0
  358. package/node_modules/zod/src/v4/classic/tests/set.test.ts +179 -0
  359. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +57 -0
  360. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +109 -0
  361. package/node_modules/zod/src/v4/classic/tests/string.test.ts +881 -0
  362. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +66 -0
  363. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +758 -0
  364. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2314 -0
  365. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +250 -0
  366. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +163 -0
  367. package/node_modules/zod/src/v4/classic/tests/union.test.ts +94 -0
  368. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  369. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  370. package/node_modules/zod/src/v4/core/api.ts +1594 -0
  371. package/node_modules/zod/src/v4/core/checks.ts +1283 -0
  372. package/node_modules/zod/src/v4/core/config.ts +15 -0
  373. package/node_modules/zod/src/v4/core/core.ts +134 -0
  374. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  375. package/node_modules/zod/src/v4/core/errors.ts +424 -0
  376. package/node_modules/zod/src/v4/core/function.ts +176 -0
  377. package/node_modules/zod/src/v4/core/index.ts +15 -0
  378. package/node_modules/zod/src/v4/core/json-schema.ts +143 -0
  379. package/node_modules/zod/src/v4/core/parse.ts +94 -0
  380. package/node_modules/zod/src/v4/core/regexes.ts +135 -0
  381. package/node_modules/zod/src/v4/core/registries.ts +96 -0
  382. package/node_modules/zod/src/v4/core/schemas.ts +3842 -0
  383. package/node_modules/zod/src/v4/core/standard-schema.ts +64 -0
  384. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  385. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  386. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  387. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  388. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  389. package/node_modules/zod/src/v4/core/to-json-schema.ts +977 -0
  390. package/node_modules/zod/src/v4/core/util.ts +775 -0
  391. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  392. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  393. package/node_modules/zod/src/v4/index.ts +4 -0
  394. package/node_modules/zod/src/v4/locales/ar.ts +125 -0
  395. package/node_modules/zod/src/v4/locales/az.ts +121 -0
  396. package/node_modules/zod/src/v4/locales/be.ts +184 -0
  397. package/node_modules/zod/src/v4/locales/ca.ts +127 -0
  398. package/node_modules/zod/src/v4/locales/cs.ts +142 -0
  399. package/node_modules/zod/src/v4/locales/de.ts +124 -0
  400. package/node_modules/zod/src/v4/locales/en.ts +127 -0
  401. package/node_modules/zod/src/v4/locales/eo.ts +125 -0
  402. package/node_modules/zod/src/v4/locales/es.ts +125 -0
  403. package/node_modules/zod/src/v4/locales/fa.ts +134 -0
  404. package/node_modules/zod/src/v4/locales/fi.ts +131 -0
  405. package/node_modules/zod/src/v4/locales/fr-CA.ts +126 -0
  406. package/node_modules/zod/src/v4/locales/fr.ts +124 -0
  407. package/node_modules/zod/src/v4/locales/he.ts +125 -0
  408. package/node_modules/zod/src/v4/locales/hu.ts +126 -0
  409. package/node_modules/zod/src/v4/locales/id.ts +125 -0
  410. package/node_modules/zod/src/v4/locales/index.ts +39 -0
  411. package/node_modules/zod/src/v4/locales/it.ts +125 -0
  412. package/node_modules/zod/src/v4/locales/ja.ts +122 -0
  413. package/node_modules/zod/src/v4/locales/kh.ts +126 -0
  414. package/node_modules/zod/src/v4/locales/ko.ts +131 -0
  415. package/node_modules/zod/src/v4/locales/mk.ts +127 -0
  416. package/node_modules/zod/src/v4/locales/ms.ts +124 -0
  417. package/node_modules/zod/src/v4/locales/nl.ts +126 -0
  418. package/node_modules/zod/src/v4/locales/no.ts +124 -0
  419. package/node_modules/zod/src/v4/locales/ota.ts +125 -0
  420. package/node_modules/zod/src/v4/locales/pl.ts +126 -0
  421. package/node_modules/zod/src/v4/locales/ps.ts +133 -0
  422. package/node_modules/zod/src/v4/locales/pt.ts +123 -0
  423. package/node_modules/zod/src/v4/locales/ru.ts +184 -0
  424. package/node_modules/zod/src/v4/locales/sl.ts +126 -0
  425. package/node_modules/zod/src/v4/locales/sv.ts +127 -0
  426. package/node_modules/zod/src/v4/locales/ta.ts +125 -0
  427. package/node_modules/zod/src/v4/locales/th.ts +126 -0
  428. package/node_modules/zod/src/v4/locales/tr.ts +121 -0
  429. package/node_modules/zod/src/v4/locales/ua.ts +126 -0
  430. package/node_modules/zod/src/v4/locales/ur.ts +126 -0
  431. package/node_modules/zod/src/v4/locales/vi.ts +125 -0
  432. package/node_modules/zod/src/v4/locales/zh-CN.ts +123 -0
  433. package/node_modules/zod/src/v4/locales/zh-TW.ts +125 -0
  434. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  435. package/node_modules/zod/src/v4/mini/coerce.ts +22 -0
  436. package/node_modules/zod/src/v4/mini/external.ts +40 -0
  437. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  438. package/node_modules/zod/src/v4/mini/iso.ts +62 -0
  439. package/node_modules/zod/src/v4/mini/parse.ts +1 -0
  440. package/node_modules/zod/src/v4/mini/schemas.ts +1579 -0
  441. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  442. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +51 -0
  443. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  444. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  445. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  446. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +43 -0
  447. package/node_modules/zod/src/v4/mini/tests/index.test.ts +871 -0
  448. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  449. package/node_modules/zod/src/v4/mini/tests/object.test.ts +185 -0
  450. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  451. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
  452. package/node_modules/zod/src/v4/mini/tests/string.test.ts +299 -0
  453. package/node_modules/zod/src/v4-mini/index.ts +1 -0
  454. package/node_modules/zod/v3/ZodError.cjs +138 -0
  455. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  456. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  457. package/node_modules/zod/v3/ZodError.js +133 -0
  458. package/node_modules/zod/v3/errors.cjs +17 -0
  459. package/node_modules/zod/v3/errors.d.cts +5 -0
  460. package/node_modules/zod/v3/errors.d.ts +5 -0
  461. package/node_modules/zod/v3/errors.js +9 -0
  462. package/node_modules/zod/v3/external.cjs +22 -0
  463. package/node_modules/zod/v3/external.d.cts +6 -0
  464. package/node_modules/zod/v3/external.d.ts +6 -0
  465. package/node_modules/zod/v3/external.js +6 -0
  466. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  467. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  468. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  469. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  470. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  471. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  472. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  473. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  474. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  475. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  476. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  477. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  478. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  479. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  480. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  481. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  482. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  483. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  484. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  485. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  486. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  487. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  488. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  489. package/node_modules/zod/v3/helpers/util.js +133 -0
  490. package/node_modules/zod/v3/index.cjs +33 -0
  491. package/node_modules/zod/v3/index.d.cts +4 -0
  492. package/node_modules/zod/v3/index.d.ts +4 -0
  493. package/node_modules/zod/v3/index.js +4 -0
  494. package/node_modules/zod/v3/locales/en.cjs +111 -0
  495. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  496. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  497. package/node_modules/zod/v3/locales/en.js +109 -0
  498. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  499. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  500. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  501. package/node_modules/zod/v3/standard-schema.js +1 -0
  502. package/node_modules/zod/v3/types.cjs +3775 -0
  503. package/node_modules/zod/v3/types.d.cts +1031 -0
  504. package/node_modules/zod/v3/types.d.ts +1031 -0
  505. package/node_modules/zod/v3/types.js +3693 -0
  506. package/node_modules/zod/v4/classic/checks.cjs +32 -0
  507. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  508. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  509. package/node_modules/zod/v4/classic/checks.js +1 -0
  510. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  511. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  512. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  513. package/node_modules/zod/v4/classic/coerce.js +17 -0
  514. package/node_modules/zod/v4/classic/compat.cjs +57 -0
  515. package/node_modules/zod/v4/classic/compat.d.cts +46 -0
  516. package/node_modules/zod/v4/classic/compat.d.ts +46 -0
  517. package/node_modules/zod/v4/classic/compat.js +27 -0
  518. package/node_modules/zod/v4/classic/errors.cjs +67 -0
  519. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  520. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  521. package/node_modules/zod/v4/classic/errors.js +41 -0
  522. package/node_modules/zod/v4/classic/external.cjs +70 -0
  523. package/node_modules/zod/v4/classic/external.d.cts +13 -0
  524. package/node_modules/zod/v4/classic/external.d.ts +13 -0
  525. package/node_modules/zod/v4/classic/external.js +18 -0
  526. package/node_modules/zod/v4/classic/index.cjs +33 -0
  527. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  528. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  529. package/node_modules/zod/v4/classic/index.js +4 -0
  530. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  531. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  532. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  533. package/node_modules/zod/v4/classic/iso.js +30 -0
  534. package/node_modules/zod/v4/classic/parse.cjs +32 -0
  535. package/node_modules/zod/v4/classic/parse.d.cts +23 -0
  536. package/node_modules/zod/v4/classic/parse.d.ts +23 -0
  537. package/node_modules/zod/v4/classic/parse.js +6 -0
  538. package/node_modules/zod/v4/classic/schemas.cjs +1109 -0
  539. package/node_modules/zod/v4/classic/schemas.d.cts +630 -0
  540. package/node_modules/zod/v4/classic/schemas.d.ts +630 -0
  541. package/node_modules/zod/v4/classic/schemas.js +1006 -0
  542. package/node_modules/zod/v4/core/api.cjs +1039 -0
  543. package/node_modules/zod/v4/core/api.d.cts +284 -0
  544. package/node_modules/zod/v4/core/api.d.ts +284 -0
  545. package/node_modules/zod/v4/core/api.js +906 -0
  546. package/node_modules/zod/v4/core/checks.cjs +591 -0
  547. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  548. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  549. package/node_modules/zod/v4/core/checks.js +565 -0
  550. package/node_modules/zod/v4/core/core.cjs +67 -0
  551. package/node_modules/zod/v4/core/core.d.cts +49 -0
  552. package/node_modules/zod/v4/core/core.d.ts +49 -0
  553. package/node_modules/zod/v4/core/core.js +61 -0
  554. package/node_modules/zod/v4/core/doc.cjs +39 -0
  555. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  556. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  557. package/node_modules/zod/v4/core/doc.js +35 -0
  558. package/node_modules/zod/v4/core/errors.cjs +226 -0
  559. package/node_modules/zod/v4/core/errors.d.cts +208 -0
  560. package/node_modules/zod/v4/core/errors.d.ts +208 -0
  561. package/node_modules/zod/v4/core/errors.js +195 -0
  562. package/node_modules/zod/v4/core/function.cjs +102 -0
  563. package/node_modules/zod/v4/core/function.d.cts +52 -0
  564. package/node_modules/zod/v4/core/function.d.ts +52 -0
  565. package/node_modules/zod/v4/core/function.js +75 -0
  566. package/node_modules/zod/v4/core/index.cjs +44 -0
  567. package/node_modules/zod/v4/core/index.d.cts +15 -0
  568. package/node_modules/zod/v4/core/index.d.ts +15 -0
  569. package/node_modules/zod/v4/core/index.js +15 -0
  570. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  571. package/node_modules/zod/v4/core/json-schema.d.cts +87 -0
  572. package/node_modules/zod/v4/core/json-schema.d.ts +87 -0
  573. package/node_modules/zod/v4/core/json-schema.js +1 -0
  574. package/node_modules/zod/v4/core/parse.cjs +87 -0
  575. package/node_modules/zod/v4/core/parse.d.cts +25 -0
  576. package/node_modules/zod/v4/core/parse.d.ts +25 -0
  577. package/node_modules/zod/v4/core/parse.js +57 -0
  578. package/node_modules/zod/v4/core/regexes.cjs +103 -0
  579. package/node_modules/zod/v4/core/regexes.d.cts +62 -0
  580. package/node_modules/zod/v4/core/regexes.d.ts +62 -0
  581. package/node_modules/zod/v4/core/regexes.js +95 -0
  582. package/node_modules/zod/v4/core/registries.cjs +56 -0
  583. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  584. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  585. package/node_modules/zod/v4/core/registries.js +51 -0
  586. package/node_modules/zod/v4/core/schemas.cjs +1748 -0
  587. package/node_modules/zod/v4/core/schemas.d.cts +1041 -0
  588. package/node_modules/zod/v4/core/schemas.d.ts +1041 -0
  589. package/node_modules/zod/v4/core/schemas.js +1717 -0
  590. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  591. package/node_modules/zod/v4/core/standard-schema.d.cts +55 -0
  592. package/node_modules/zod/v4/core/standard-schema.d.ts +55 -0
  593. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  594. package/node_modules/zod/v4/core/to-json-schema.cjs +854 -0
  595. package/node_modules/zod/v4/core/to-json-schema.d.cts +88 -0
  596. package/node_modules/zod/v4/core/to-json-schema.d.ts +88 -0
  597. package/node_modules/zod/v4/core/to-json-schema.js +849 -0
  598. package/node_modules/zod/v4/core/util.cjs +539 -0
  599. package/node_modules/zod/v4/core/util.d.cts +183 -0
  600. package/node_modules/zod/v4/core/util.d.ts +183 -0
  601. package/node_modules/zod/v4/core/util.js +493 -0
  602. package/node_modules/zod/v4/core/versions.cjs +8 -0
  603. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  604. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  605. package/node_modules/zod/v4/core/versions.js +5 -0
  606. package/node_modules/zod/v4/index.cjs +22 -0
  607. package/node_modules/zod/v4/index.d.cts +3 -0
  608. package/node_modules/zod/v4/index.d.ts +3 -0
  609. package/node_modules/zod/v4/index.js +3 -0
  610. package/node_modules/zod/v4/locales/ar.cjs +142 -0
  611. package/node_modules/zod/v4/locales/ar.d.cts +4 -0
  612. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  613. package/node_modules/zod/v4/locales/ar.js +116 -0
  614. package/node_modules/zod/v4/locales/az.cjs +141 -0
  615. package/node_modules/zod/v4/locales/az.d.cts +4 -0
  616. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  617. package/node_modules/zod/v4/locales/az.js +115 -0
  618. package/node_modules/zod/v4/locales/be.cjs +190 -0
  619. package/node_modules/zod/v4/locales/be.d.cts +4 -0
  620. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  621. package/node_modules/zod/v4/locales/be.js +164 -0
  622. package/node_modules/zod/v4/locales/ca.cjs +144 -0
  623. package/node_modules/zod/v4/locales/ca.d.cts +4 -0
  624. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  625. package/node_modules/zod/v4/locales/ca.js +118 -0
  626. package/node_modules/zod/v4/locales/cs.cjs +161 -0
  627. package/node_modules/zod/v4/locales/cs.d.cts +4 -0
  628. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  629. package/node_modules/zod/v4/locales/cs.js +135 -0
  630. package/node_modules/zod/v4/locales/de.cjs +142 -0
  631. package/node_modules/zod/v4/locales/de.d.cts +4 -0
  632. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  633. package/node_modules/zod/v4/locales/de.js +116 -0
  634. package/node_modules/zod/v4/locales/en.cjs +145 -0
  635. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  636. package/node_modules/zod/v4/locales/en.d.ts +5 -0
  637. package/node_modules/zod/v4/locales/en.js +117 -0
  638. package/node_modules/zod/v4/locales/eo.cjs +144 -0
  639. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  640. package/node_modules/zod/v4/locales/eo.d.ts +5 -0
  641. package/node_modules/zod/v4/locales/eo.js +116 -0
  642. package/node_modules/zod/v4/locales/es.cjs +143 -0
  643. package/node_modules/zod/v4/locales/es.d.cts +4 -0
  644. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  645. package/node_modules/zod/v4/locales/es.js +117 -0
  646. package/node_modules/zod/v4/locales/fa.cjs +148 -0
  647. package/node_modules/zod/v4/locales/fa.d.cts +4 -0
  648. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  649. package/node_modules/zod/v4/locales/fa.js +122 -0
  650. package/node_modules/zod/v4/locales/fi.cjs +148 -0
  651. package/node_modules/zod/v4/locales/fi.d.cts +4 -0
  652. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  653. package/node_modules/zod/v4/locales/fi.js +122 -0
  654. package/node_modules/zod/v4/locales/fr-CA.cjs +143 -0
  655. package/node_modules/zod/v4/locales/fr-CA.d.cts +4 -0
  656. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  657. package/node_modules/zod/v4/locales/fr-CA.js +117 -0
  658. package/node_modules/zod/v4/locales/fr.cjs +142 -0
  659. package/node_modules/zod/v4/locales/fr.d.cts +4 -0
  660. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  661. package/node_modules/zod/v4/locales/fr.js +116 -0
  662. package/node_modules/zod/v4/locales/he.cjs +143 -0
  663. package/node_modules/zod/v4/locales/he.d.cts +4 -0
  664. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  665. package/node_modules/zod/v4/locales/he.js +117 -0
  666. package/node_modules/zod/v4/locales/hu.cjs +143 -0
  667. package/node_modules/zod/v4/locales/hu.d.cts +4 -0
  668. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  669. package/node_modules/zod/v4/locales/hu.js +117 -0
  670. package/node_modules/zod/v4/locales/id.cjs +142 -0
  671. package/node_modules/zod/v4/locales/id.d.cts +4 -0
  672. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  673. package/node_modules/zod/v4/locales/id.js +116 -0
  674. package/node_modules/zod/v4/locales/index.cjs +84 -0
  675. package/node_modules/zod/v4/locales/index.d.cts +39 -0
  676. package/node_modules/zod/v4/locales/index.d.ts +39 -0
  677. package/node_modules/zod/v4/locales/index.js +39 -0
  678. package/node_modules/zod/v4/locales/it.cjs +143 -0
  679. package/node_modules/zod/v4/locales/it.d.cts +4 -0
  680. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  681. package/node_modules/zod/v4/locales/it.js +117 -0
  682. package/node_modules/zod/v4/locales/ja.cjs +141 -0
  683. package/node_modules/zod/v4/locales/ja.d.cts +4 -0
  684. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  685. package/node_modules/zod/v4/locales/ja.js +115 -0
  686. package/node_modules/zod/v4/locales/kh.cjs +143 -0
  687. package/node_modules/zod/v4/locales/kh.d.cts +4 -0
  688. package/node_modules/zod/v4/locales/kh.d.ts +4 -0
  689. package/node_modules/zod/v4/locales/kh.js +117 -0
  690. package/node_modules/zod/v4/locales/ko.cjs +147 -0
  691. package/node_modules/zod/v4/locales/ko.d.cts +4 -0
  692. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  693. package/node_modules/zod/v4/locales/ko.js +121 -0
  694. package/node_modules/zod/v4/locales/mk.cjs +144 -0
  695. package/node_modules/zod/v4/locales/mk.d.cts +4 -0
  696. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  697. package/node_modules/zod/v4/locales/mk.js +118 -0
  698. package/node_modules/zod/v4/locales/ms.cjs +142 -0
  699. package/node_modules/zod/v4/locales/ms.d.cts +4 -0
  700. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  701. package/node_modules/zod/v4/locales/ms.js +116 -0
  702. package/node_modules/zod/v4/locales/nl.cjs +143 -0
  703. package/node_modules/zod/v4/locales/nl.d.cts +4 -0
  704. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  705. package/node_modules/zod/v4/locales/nl.js +117 -0
  706. package/node_modules/zod/v4/locales/no.cjs +142 -0
  707. package/node_modules/zod/v4/locales/no.d.cts +4 -0
  708. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  709. package/node_modules/zod/v4/locales/no.js +116 -0
  710. package/node_modules/zod/v4/locales/ota.cjs +143 -0
  711. package/node_modules/zod/v4/locales/ota.d.cts +4 -0
  712. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  713. package/node_modules/zod/v4/locales/ota.js +117 -0
  714. package/node_modules/zod/v4/locales/pl.cjs +143 -0
  715. package/node_modules/zod/v4/locales/pl.d.cts +4 -0
  716. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  717. package/node_modules/zod/v4/locales/pl.js +117 -0
  718. package/node_modules/zod/v4/locales/ps.cjs +148 -0
  719. package/node_modules/zod/v4/locales/ps.d.cts +4 -0
  720. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  721. package/node_modules/zod/v4/locales/ps.js +122 -0
  722. package/node_modules/zod/v4/locales/pt.cjs +142 -0
  723. package/node_modules/zod/v4/locales/pt.d.cts +4 -0
  724. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  725. package/node_modules/zod/v4/locales/pt.js +116 -0
  726. package/node_modules/zod/v4/locales/ru.cjs +190 -0
  727. package/node_modules/zod/v4/locales/ru.d.cts +4 -0
  728. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  729. package/node_modules/zod/v4/locales/ru.js +164 -0
  730. package/node_modules/zod/v4/locales/sl.cjs +143 -0
  731. package/node_modules/zod/v4/locales/sl.d.cts +4 -0
  732. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  733. package/node_modules/zod/v4/locales/sl.js +117 -0
  734. package/node_modules/zod/v4/locales/sv.cjs +144 -0
  735. package/node_modules/zod/v4/locales/sv.d.cts +4 -0
  736. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  737. package/node_modules/zod/v4/locales/sv.js +118 -0
  738. package/node_modules/zod/v4/locales/ta.cjs +143 -0
  739. package/node_modules/zod/v4/locales/ta.d.cts +4 -0
  740. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  741. package/node_modules/zod/v4/locales/ta.js +117 -0
  742. package/node_modules/zod/v4/locales/th.cjs +143 -0
  743. package/node_modules/zod/v4/locales/th.d.cts +4 -0
  744. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  745. package/node_modules/zod/v4/locales/th.js +117 -0
  746. package/node_modules/zod/v4/locales/tr.cjs +143 -0
  747. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  748. package/node_modules/zod/v4/locales/tr.d.ts +5 -0
  749. package/node_modules/zod/v4/locales/tr.js +115 -0
  750. package/node_modules/zod/v4/locales/ua.cjs +143 -0
  751. package/node_modules/zod/v4/locales/ua.d.cts +4 -0
  752. package/node_modules/zod/v4/locales/ua.d.ts +4 -0
  753. package/node_modules/zod/v4/locales/ua.js +117 -0
  754. package/node_modules/zod/v4/locales/ur.cjs +143 -0
  755. package/node_modules/zod/v4/locales/ur.d.cts +4 -0
  756. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  757. package/node_modules/zod/v4/locales/ur.js +117 -0
  758. package/node_modules/zod/v4/locales/vi.cjs +142 -0
  759. package/node_modules/zod/v4/locales/vi.d.cts +4 -0
  760. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  761. package/node_modules/zod/v4/locales/vi.js +116 -0
  762. package/node_modules/zod/v4/locales/zh-CN.cjs +142 -0
  763. package/node_modules/zod/v4/locales/zh-CN.d.cts +4 -0
  764. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  765. package/node_modules/zod/v4/locales/zh-CN.js +116 -0
  766. package/node_modules/zod/v4/locales/zh-TW.cjs +143 -0
  767. package/node_modules/zod/v4/locales/zh-TW.d.cts +4 -0
  768. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  769. package/node_modules/zod/v4/locales/zh-TW.js +117 -0
  770. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  771. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  772. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  773. package/node_modules/zod/v4/mini/checks.js +1 -0
  774. package/node_modules/zod/v4/mini/coerce.cjs +47 -0
  775. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  776. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  777. package/node_modules/zod/v4/mini/coerce.js +17 -0
  778. package/node_modules/zod/v4/mini/external.cjs +62 -0
  779. package/node_modules/zod/v4/mini/external.d.cts +11 -0
  780. package/node_modules/zod/v4/mini/external.d.ts +11 -0
  781. package/node_modules/zod/v4/mini/external.js +13 -0
  782. package/node_modules/zod/v4/mini/index.cjs +32 -0
  783. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  784. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  785. package/node_modules/zod/v4/mini/index.js +3 -0
  786. package/node_modules/zod/v4/mini/iso.cjs +60 -0
  787. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  788. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  789. package/node_modules/zod/v4/mini/iso.js +30 -0
  790. package/node_modules/zod/v4/mini/parse.cjs +8 -0
  791. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  792. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  793. package/node_modules/zod/v4/mini/parse.js +1 -0
  794. package/node_modules/zod/v4/mini/schemas.cjs +839 -0
  795. package/node_modules/zod/v4/mini/schemas.d.cts +356 -0
  796. package/node_modules/zod/v4/mini/schemas.d.ts +356 -0
  797. package/node_modules/zod/v4/mini/schemas.js +732 -0
  798. package/node_modules/zod/v4-mini/index.cjs +17 -0
  799. package/node_modules/zod/v4-mini/index.d.cts +1 -0
  800. package/node_modules/zod/v4-mini/index.d.ts +1 -0
  801. package/node_modules/zod/v4-mini/index.js +1 -0
  802. package/package.json +99 -104
  803. package/dist/Workspace-DMye5DU8.js +0 -43113
@@ -0,0 +1,1004 @@
1
+ /**
2
+ * @fileoverview 引用复合风险与策略绑定 - 提供高密度风险、快捷工作台、策略 KPI 和运营健康预览 helper。
3
+ * @author seadon
4
+ * @created 2026-05-20
5
+ */
6
+ import type { CSSProperties } from 'vue';
7
+ import type { CustomCanvasData, CustomCanvasNestedBlock } from '../../types';
8
+
9
+ type ReferenceRiskStrategyContext = Record<string, any>;
10
+ type NestedBlockVisualKind =
11
+ | 'metric'
12
+ | 'table'
13
+ | 'list'
14
+ | 'chart'
15
+ | 'statusList'
16
+ | 'incidentList'
17
+ | 'resourceBars'
18
+ | 'securityScore'
19
+ | 'simpleList'
20
+ | 'progressList'
21
+ | 'todoGrid'
22
+ | 'quickLinks'
23
+ | 'donut'
24
+ | 'summary';
25
+ type NestedBlockTone = 'healthy' | 'warning' | 'critical' | 'info' | 'violet' | 'neutral';
26
+ type ReferenceOperationEfficiencyGroup = { id: string; title: string; items: Array<Record<string, unknown>> };
27
+
28
+ export interface ReferenceStrategyKpiRiskDisplayTextInput {
29
+ label?: unknown;
30
+ detail?: unknown;
31
+ description?: unknown;
32
+ owner?: unknown;
33
+ subtitle?: unknown;
34
+ value?: unknown;
35
+ status?: unknown;
36
+ amount?: unknown;
37
+ ratio?: unknown;
38
+ progress?: unknown;
39
+ cells?: unknown;
40
+ needsHumanIntervention?: boolean;
41
+ }
42
+
43
+ export interface ReferenceStrategyKpiRiskDisplayText {
44
+ detail: string;
45
+ value: string;
46
+ }
47
+
48
+ /**
49
+ * Cleans visible detail/value copy for strategy-KPI risk child cards.
50
+ * @param input - Label, detail, value, and business-gap state for one risk item.
51
+ * @returns Display text with duplicate titles and internal ids removed.
52
+ */
53
+ export function referenceStrategyKpiRiskDisplayText(
54
+ input: ReferenceStrategyKpiRiskDisplayTextInput,
55
+ ): ReferenceStrategyKpiRiskDisplayText {
56
+ const label = strategyKpiRiskString(input.label);
57
+ let detail = strategyKpiRiskFirstUsableText(
58
+ [input.detail, input.description, input.owner, input.subtitle],
59
+ label,
60
+ );
61
+ const value = strategyKpiRiskFirstUsableText(
62
+ [input.value, input.status, input.amount, input.ratio, input.progress, strategyKpiRiskCellValue(input.cells, 1)],
63
+ label,
64
+ detail,
65
+ );
66
+ if (!detail && input.needsHumanIntervention) detail = '待补口径';
67
+ return { detail, value };
68
+ }
69
+
70
+ /**
71
+ * Normalizes unknown item fields into trimmed display text.
72
+ * @param value - Candidate risk display value.
73
+ * @returns Trimmed string value.
74
+ */
75
+ function strategyKpiRiskString(value: unknown): string {
76
+ if (typeof value === 'number' && Number.isFinite(value)) return String(value);
77
+ return typeof value === 'string' ? value.trim() : '';
78
+ }
79
+
80
+ /**
81
+ * Picks the first visible risk field that is not duplicate title text or internal metadata.
82
+ * @param values - Candidate fields in renderer read order.
83
+ * @param label - Visible risk title.
84
+ * @param previous - Already selected sibling text, used to avoid duplicate detail/value.
85
+ * @returns Clean display text.
86
+ */
87
+ function strategyKpiRiskFirstUsableText(values: unknown[], label: string, previous = ''): string {
88
+ for (const value of values) {
89
+ const text = strategyKpiRiskString(value);
90
+ if (strategyKpiRiskTextUnusable(text, label)) continue;
91
+ if (previous && strategyKpiRiskSameText(text, previous)) continue;
92
+ return text;
93
+ }
94
+ return '';
95
+ }
96
+
97
+ /**
98
+ * Reads a table-cell fallback without assuming the model used item.value.
99
+ * @param cells - Optional cells array from recognized table rows.
100
+ * @param index - Cell index used by the renderer fallback.
101
+ * @returns Cell value when present.
102
+ */
103
+ function strategyKpiRiskCellValue(cells: unknown, index: number): unknown {
104
+ return Array.isArray(cells) ? cells[index] : undefined;
105
+ }
106
+
107
+ /**
108
+ * Checks whether a candidate risk detail/value should be hidden.
109
+ * @param value - Candidate risk text.
110
+ * @param label - Visible risk title.
111
+ * @returns True when the text is empty, duplicate, or internal metadata.
112
+ */
113
+ function strategyKpiRiskTextUnusable(value: string, label: string): boolean {
114
+ if (!value) return true;
115
+ if (strategyKpiRiskSameText(value, label)) return true;
116
+ if (strategyKpiRiskRepeatedLabelText(value, label)) return true;
117
+ return /(?:parentBlockId|dataBindingId|bindingId|refreshApi|workbench\.v2\.image|recognized-\d+|qwen\d+|persisted-)/i.test(value);
118
+ }
119
+
120
+ /**
121
+ * Compares two short display strings after removing visual separators.
122
+ * @param left - First display string.
123
+ * @param right - Second display string.
124
+ * @returns True when both strings represent the same visible text.
125
+ */
126
+ function strategyKpiRiskSameText(left: string, right: string): boolean {
127
+ if (!left || !right) return false;
128
+ return strategyKpiRiskComparableText(left) === strategyKpiRiskComparableText(right);
129
+ }
130
+
131
+ /**
132
+ * Detects text made only of the title repeated through common visual separators.
133
+ * @param value - Candidate visible text.
134
+ * @param label - Risk child title.
135
+ * @returns True when the text is a repeated title pair or triplet.
136
+ */
137
+ function strategyKpiRiskRepeatedLabelText(value: string, label: string): boolean {
138
+ if (!value || !label) return false;
139
+ const labelToken = strategyKpiRiskComparableText(label);
140
+ if (!labelToken) return false;
141
+ const parts = value
142
+ .split(/[\s\-_/|::·,,.。;;()[\]{}【】<>《》]+/g)
143
+ .map((part) => strategyKpiRiskComparableText(part))
144
+ .filter(Boolean);
145
+ return parts.length > 1 && parts.every((part) => part === labelToken);
146
+ }
147
+
148
+ /**
149
+ * Builds a comparable token for duplicate display text detection.
150
+ * @param value - Display text.
151
+ * @returns Lowercase text without whitespace and punctuation separators.
152
+ */
153
+ function strategyKpiRiskComparableText(value: string): string {
154
+ return value
155
+ .toLowerCase()
156
+ .replace(/[\s\-_/|::·,,.。;;()[\]{}【】<>《》]+/g, '');
157
+ }
158
+
159
+ /**
160
+ * Builds the item record consumed by the template after collapsing all display aliases.
161
+ * @param item - Source risk item from OCR/query data.
162
+ * @param displayText - Clean detail and value selected for the visible row.
163
+ * @returns Item record whose renderer-read fields cannot reintroduce duplicate title text.
164
+ */
165
+ function referenceStrategyKpiRiskDisplayItem(
166
+ item: Record<string, unknown>,
167
+ displayText: ReferenceStrategyKpiRiskDisplayText,
168
+ ): Record<string, unknown> {
169
+ return {
170
+ ...item,
171
+ detail: displayText.detail,
172
+ description: '',
173
+ owner: '',
174
+ subtitle: '',
175
+ status: '',
176
+ value: displayText.value,
177
+ amount: '',
178
+ ratio: '',
179
+ progress: '',
180
+ cells: [item.label ?? item.name ?? item.title ?? '', displayText.value],
181
+ };
182
+ }
183
+
184
+ /**
185
+ * Creates helpers for the risk and strategy reference composite families.
186
+ * @param context - Shared reference and nested helper functions.
187
+ * @returns Risk, shortcut, strategy KPI, and operation reference helpers.
188
+ */
189
+ export function createReferenceRiskAndStrategyBindings(context: ReferenceRiskStrategyContext) {
190
+ const {
191
+ textValue,
192
+ referenceNestedBlock,
193
+ referenceMetricItem,
194
+ referenceNestedMetricItem,
195
+ customCanvasTextElementValue,
196
+ nestedBlockClassifierText,
197
+ nestedBlockItemLabel,
198
+ nestedBlockItemValue,
199
+ nestedBlockItemDetail,
200
+ nestedBlockItemTitle,
201
+ nestedBlockRawItems,
202
+ nestedBlockItems,
203
+ nestedBlockItemsLookTooWeak,
204
+ nestedBlockItemsLookTooWeakForVisualKind,
205
+ nestedBlockOptionalNumber,
206
+ nestedBlockDisplayValue,
207
+ nestedBlockMetricValue,
208
+ nestedBlockDataSummary,
209
+ nestedBlockToneFromStatus,
210
+ nestedBlockDonutItems,
211
+ nestedBlockNeedsHumanIntervention,
212
+ nestedBlockNumber,
213
+ } = context;
214
+
215
+ function referenceExpenseRiskRows(data: CustomCanvasData): Array<Record<string, unknown>> {
216
+ const block = referenceNestedBlock(data, /费用超支|超支排行|费用.*排行/);
217
+ const rawItems = block ? nestedBlockRawItems(block) : [];
218
+ if (rawItems.length >= 3 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 5);
219
+ return [
220
+ { label: '管理费用', value: '+12.8%', progress: 72, tone: 'critical' },
221
+ { label: '外包成本', value: '+10.6%', progress: 60, tone: 'critical' },
222
+ { label: '营销投放', value: '+8.4%', progress: 48, tone: 'warning' },
223
+ { label: '物流仓储', value: '+6.2%', progress: 38, tone: 'warning' },
224
+ { label: '差旅会议', value: '-3.1%', progress: 28, tone: 'healthy' },
225
+ ];
226
+ }
227
+
228
+ /**
229
+ * Returns summary rows for the expense-overrun panel.
230
+ * @param data - Custom canvas renderer data.
231
+ * @returns Expense summary rows.
232
+ */
233
+ function referenceExpenseSummaryItems(data: CustomCanvasData): Array<Record<string, unknown>> {
234
+ const block = referenceNestedBlock(data, /超阈值|冻结|审计/);
235
+ if (block && !nestedBlockItemsLookTooWeakForVisualKind(nestedBlockRawItems(block), 'simpleList')) return nestedBlockItems(block).slice(0, 2);
236
+ return [
237
+ { label: '3 项超阈值', detail: '管理费用、外包成本连续超预算。', value: '专项审计', tone: 'critical' },
238
+ ];
239
+ }
240
+
241
+ /**
242
+ * Returns compact rows for the chairman deviation-insight side panel.
243
+ * @param data - Custom canvas renderer data.
244
+ * @returns Insight rows preserving OCR text when available.
245
+ */
246
+ function referenceDeviationInsightItems(data: CustomCanvasData): Array<Record<string, unknown>> {
247
+ const nestedBlocks = Array.isArray(data.nestedBlocks) ? data.nestedBlocks : [];
248
+ const rows = nestedBlocks.flatMap((block) => {
249
+ const rawItems = nestedBlockRawItems(block);
250
+ if (rawItems.length > 0 && !nestedBlockItemsLookTooWeakForVisualKind(rawItems, 'simpleList')) return rawItems;
251
+ const title = textValue(block.title);
252
+ if (!/利润同比|费用环比|预算偏离|偏差|管理费用|新基地/.test(title)) return [];
253
+ return [{
254
+ label: title,
255
+ value: nestedBlockMetricValue(block),
256
+ detail: nestedBlockDataSummary(block),
257
+ tone: /下滑|偏离|超|异动/.test(title) ? 'critical' : 'warning',
258
+ }];
259
+ });
260
+ const fallbackRows = [
261
+ { label: '利润同比下滑:华东事业部', value: '-23.4%', tone: 'critical' },
262
+ { label: '费用环比异动:管理费用', value: '+12.8%', tone: 'critical' },
263
+ { label: '预算偏离:华南新基地', value: '+9.6%', tone: 'warning' },
264
+ ];
265
+ return (rows.length > 0 ? rows : fallbackRows).slice(0, 4);
266
+ }
267
+
268
+ /**
269
+ * Returns metrics for the organization-risk panel.
270
+ * @param data - Custom canvas renderer data.
271
+ * @returns Organization and efficiency metrics.
272
+ */
273
+ function referenceOrganizationRiskMetrics(data: CustomCanvasData): Array<Record<string, unknown>> {
274
+ return [
275
+ referenceMetricItem(data, '组织稳定分', /组织稳定|稳定分/, '71', 'warning'),
276
+ referenceMetricItem(data, '核心流失率', /核心流失|流失率/, '+0.7pp', 'critical'),
277
+ referenceMetricItem(data, '人效下滑', /人效下滑|人效风险/, '-8.6%', 'critical'),
278
+ referenceMetricItem(data, '超编部门', /超编/, '+16%', 'warning'),
279
+ ];
280
+ }
281
+
282
+ /**
283
+ * Builds a conic-gradient donut for the chairman organization stability score.
284
+ * @param item - Organization score metric item.
285
+ * @returns CSS background style for the score donut.
286
+ */
287
+ function referenceOrganizationDonutStyle(item: Record<string, unknown>): CSSProperties {
288
+ const value = nestedBlockNumber(nestedBlockItemValue(item), 71);
289
+ const safeValue = Math.max(0, Math.min(100, value));
290
+ return {
291
+ background: `radial-gradient(circle at center, transparent 0 53%, transparent 54%), conic-gradient(#d12f2f 0 ${safeValue}%, #e28b12 ${safeValue}% 100%)`,
292
+ };
293
+ }
294
+
295
+ /**
296
+ * Returns rows for investment/project-risk panels.
297
+ * @param data - Custom canvas renderer data.
298
+ * @returns Gantt-like project risk rows.
299
+ */
300
+ function referenceInvestmentRiskRows(data: CustomCanvasData): Array<Record<string, unknown>> {
301
+ const block = referenceNestedBlock(data, /项目风险排行|项目风险|投资.*风险/);
302
+ const rawItems = block ? nestedBlockRawItems(block) : [];
303
+ if (rawItems.length >= 3 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 4);
304
+ return [
305
+ { label: '华南新基地', value: '超支', progress: 78, tone: 'critical' },
306
+ { label: '技改一期', value: '延期', progress: 62, tone: 'warning' },
307
+ { label: '合资项目', value: '回报低', progress: 54, tone: 'critical' },
308
+ { label: '数据中台', value: '产出偏', progress: 70, tone: 'warning' },
309
+ ];
310
+ }
311
+
312
+ /**
313
+ * Returns project-risk summary rows.
314
+ * @param data - Custom canvas renderer data.
315
+ * @returns Project summary rows.
316
+ */
317
+ function referenceInvestmentSummaryItems(data: CustomCanvasData): Array<Record<string, unknown>> {
318
+ const block = referenceNestedBlock(data, /战略项目|落地滞后|延期|超支/);
319
+ if (block && !nestedBlockItemsLookTooWeakForVisualKind(nestedBlockRawItems(block), 'simpleList')) return nestedBlockItems(block).slice(0, 2);
320
+ return [
321
+ { label: '战略项目落地滞后', detail: '延期与超支叠加,投资回报周期拉长。', value: '重排里程碑', tone: 'warning' },
322
+ ];
323
+ }
324
+
325
+ /**
326
+ * Returns approval rows for chairman/executive todo panels.
327
+ * @param data - Custom canvas renderer data.
328
+ * @returns Major approval rows.
329
+ */
330
+ function referenceExecutiveTodoItems(data: CustomCanvasData, minRows = 0): Array<Record<string, unknown>> {
331
+ const nestedBlocks = Array.isArray(data.nestedBlocks) ? data.nestedBlocks : [];
332
+ const rows = nestedBlocks.flatMap((block) => {
333
+ if (!referenceExecutiveTodoBlockLooksUsable(block)) return [];
334
+ const rawItems = nestedBlockRawItems(block);
335
+ if (rawItems.length > 0 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems;
336
+ return /战略投资|资金支付|人事|任免|担保|预算|复核|签批|资金缺口|应收逾期|逾期应收/.test(block.title)
337
+ ? [{ label: block.title, value: nestedBlockMetricValue(block), detail: nestedBlockDataSummary(block), tone: /超期|逾期|未/.test(block.title) ? 'critical' : 'warning' }]
338
+ : [];
339
+ });
340
+ const reliableRows = rows.map((row, index) => referenceExecutiveTodoNormalizeRow(row, index));
341
+ if (reliableRows.length > 0) return minRows > 0
342
+ ? referenceExecutiveTodoPadRows(reliableRows, minRows)
343
+ : reliableRows.slice(0, 3);
344
+ const fallbackRows = [
345
+ { label: '待办事项', value: '待确认', detail: '业务口径待补充', tone: 'warning' },
346
+ { label: '待复核事项', value: '待复核', detail: '责任人与截止时间待确认', tone: 'warning' },
347
+ { label: '待审批事项', value: '待审批', detail: '审批链路待确认', tone: 'warning' },
348
+ ];
349
+ if (minRows <= 0) return fallbackRows.slice(0, 3);
350
+ return referenceExecutiveTodoPadRows(fallbackRows, minRows);
351
+ }
352
+
353
+ /**
354
+ * Normalizes a recognized todo row without replacing it with screenshot-specific business text.
355
+ * @param row - Model OCR row or query-refreshed row.
356
+ * @param index - Row index for stable visual fallback labels.
357
+ * @returns Row with generic display fields for the compact todo template.
358
+ */
359
+ function referenceExecutiveTodoNormalizeRow(row: Record<string, unknown>, index: number): Record<string, unknown> {
360
+ const label = nestedBlockItemLabel(row, index);
361
+ const detail = nestedBlockItemDetail(row);
362
+ const impact = nestedBlockDisplayValue(row.impact ?? row.amount ?? row.primaryValue ?? row.value, '');
363
+ const deadline = nestedBlockDisplayValue(row.deadline ?? row.dueDate ?? row.date ?? row.time, '');
364
+ const progress = nestedBlockDisplayValue(row.progress ?? row.ratio ?? row.stage, '');
365
+ return {
366
+ ...row,
367
+ label,
368
+ title: label,
369
+ detail: detail || '业务口径待补充',
370
+ impact: impact || '待确认',
371
+ deadline: deadline || '待确认',
372
+ progress: progress || '待推进',
373
+ status: textValue(row.status, textValue(row.badge, '待处理')),
374
+ };
375
+ }
376
+
377
+ /**
378
+ * Pads a compact todo panel with neutral placeholders when recognition returns too few rows.
379
+ * @param rows - Reliable rows from the image model or query setData result.
380
+ * @param minRows - Minimum visual row count requested by the template.
381
+ * @returns Rows padded with generic placeholders only.
382
+ */
383
+ function referenceExecutiveTodoPadRows(rows: Array<Record<string, unknown>>, minRows: number): Array<Record<string, unknown>> {
384
+ const placeholders = [
385
+ { label: '待办事项', value: '待确认', detail: '业务口径待补充', tone: 'warning' },
386
+ { label: '待复核事项', value: '待复核', detail: '责任人与截止时间待确认', tone: 'warning' },
387
+ { label: '待审批事项', value: '待审批', detail: '审批链路待确认', tone: 'warning' },
388
+ ];
389
+ return [...rows, ...placeholders]
390
+ .slice(0, Math.max(minRows, 3))
391
+ .map((row, index) => referenceExecutiveTodoNormalizeRow(row, index));
392
+ }
393
+
394
+ /**
395
+ * Rejects non-approval business rows before extracting chairman todo content.
396
+ * @param block - Candidate nested card from the screenshot container.
397
+ * @returns True when the block belongs to approval/todo semantics.
398
+ */
399
+ function referenceExecutiveTodoBlockLooksUsable(block: CustomCanvasNestedBlock): boolean {
400
+ const text = [
401
+ block.title,
402
+ nestedBlockDataSummary(block),
403
+ ...nestedBlockRawItems(block).map((item: Record<string, unknown>, index: number) => nestedBlockItemTitle(item, index)),
404
+ ].filter(Boolean).join(' ');
405
+ if (/现金流|坏账/.test(text)) return false;
406
+ return /战略投资|资金支付|人事|任免|担保|预算|复核|签批|待审批|待复核|待签批|流程|资金缺口|应收逾期/.test(text);
407
+ }
408
+
409
+ /**
410
+ * Returns the fixed status badge text for chairman approval rows.
411
+ * @param item - Approval row rendered in the reference panel.
412
+ * @param index - Row index used for stable fallback labels.
413
+ * @returns Short status badge text matching the source screenshot.
414
+ */
415
+ function referenceExecutiveTodoBadge(item: Record<string, unknown>, index: number): string {
416
+ const explicitStatus = textValue(item.status, textValue(item.badge));
417
+ if (explicitStatus && !/待签批|待复核/.test(explicitStatus)) return explicitStatus;
418
+ if (index === 0 || /逾期|超期|应收|缺口/.test(nestedBlockItemTitle(item, index))) return '逾期';
419
+ if (index === 1) return '整改中';
420
+ return '未整改';
421
+ }
422
+
423
+ /**
424
+ * Builds fixed-size status badge classes for chairman approval rows.
425
+ * @param item - Approval row rendered in the reference panel.
426
+ * @param index - Row index used for fallback tone.
427
+ * @returns Tailwind classes for a compact, non-stretching badge.
428
+ */
429
+ function referenceExecutiveTodoBadgeClasses(item: Record<string, unknown>, index: number): string[] {
430
+ const badge = referenceExecutiveTodoBadge(item, index);
431
+ const base = ['inline-flex h-7 w-14 shrink-0 items-center justify-center truncate rounded border px-1.5 text-xs font-semibold leading-none'];
432
+ if (/逾期|未|超期/.test(badge)) return [...base, 'border-red-200 bg-red-50 text-red-600'];
433
+ if (/整改|复核|待/.test(badge)) return [...base, 'border-amber-200 bg-amber-50 text-amber-700'];
434
+ return [...base, 'border-slate-200 bg-slate-50 text-slate-600'];
435
+ }
436
+
437
+ /**
438
+ * Reads impact text for a chairman approval row.
439
+ * @param item - Approval row rendered in the reference panel.
440
+ * @param index - Row index used for stable fallback values.
441
+ * @returns Impact value such as amount or risk level.
442
+ */
443
+ function referenceExecutiveTodoImpact(item: Record<string, unknown>, index: number): string {
444
+ return nestedBlockDisplayValue(
445
+ item.impact ?? item.amount ?? item.primaryValue ?? item.value,
446
+ index === 0 ? '待确认' : '待补充',
447
+ );
448
+ }
449
+
450
+ /**
451
+ * Reads deadline text for a chairman approval row.
452
+ * @param item - Approval row rendered in the reference panel.
453
+ * @param index - Row index used for stable fallback values.
454
+ * @returns Deadline value.
455
+ */
456
+ function referenceExecutiveTodoDeadline(item: Record<string, unknown>, index: number): string {
457
+ return nestedBlockDisplayValue(
458
+ item.deadline ?? item.dueDate ?? item.date ?? item.time,
459
+ index === 0 ? '待确认' : '待补充',
460
+ );
461
+ }
462
+
463
+ /**
464
+ * Reads progress text for a chairman approval row.
465
+ * @param item - Approval row rendered in the reference panel.
466
+ * @param index - Row index used for stable fallback values.
467
+ * @returns Progress percentage or short stage text.
468
+ */
469
+ function referenceExecutiveTodoProgress(item: Record<string, unknown>, index: number): string {
470
+ return nestedBlockDisplayValue(
471
+ item.progress ?? item.ratio ?? item.stage,
472
+ index === 0 ? '待推进' : '待补充',
473
+ );
474
+ }
475
+
476
+ /**
477
+ * Returns shortcut tiles for chairman drill-through panels.
478
+ * @param data - Custom canvas renderer data.
479
+ * @returns Risk drill shortcut rows.
480
+ */
481
+ function referenceShortcutDrillItems(data: CustomCanvasData): Array<Record<string, unknown>> {
482
+ const nestedBlocks = Array.isArray(data.nestedBlocks) ? data.nestedBlocks : [];
483
+ const directRows = nestedBlocks.flatMap((block) => {
484
+ const rawItems = nestedBlockRawItems(block);
485
+ if (rawItems.length > 0 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems;
486
+ return /亏损主体|资金风险|违规|延期|费用超支|组织隐患|逾期应收|现金流|坏账/.test(block.title)
487
+ ? [{ label: block.title, value: nestedBlockMetricValue(block), tone: /资金|亏损|违规|延期/.test(block.title) ? 'critical' : 'warning' }]
488
+ : [];
489
+ });
490
+ const usableRows = directRows.filter((item) => {
491
+ const label = nestedBlockItemLabel(item, 0);
492
+ return /亏损主体|资金风险|违规|延期|费用超支|组织隐患|逾期应收|现金流|坏账/.test(label);
493
+ });
494
+ if (usableRows.length >= 4) return usableRows.slice(0, 6);
495
+ return [
496
+ { label: '亏损主体', value: '8', tone: 'critical' },
497
+ { label: '资金风险', value: '14', tone: 'critical' },
498
+ { label: '违规事项', value: '6', tone: 'critical' },
499
+ { label: '延期项目', value: '5', tone: 'critical' },
500
+ { label: '费用超支', value: '3', tone: 'warning' },
501
+ { label: '组织隐患', value: '4', tone: 'warning' },
502
+ ];
503
+ }
504
+
505
+ type QuickWorkbenchGroup = {
506
+ id: 'todo' | 'report' | 'entry' | 'message';
507
+ title: string;
508
+ visualKind: NestedBlockVisualKind;
509
+ fallbackItems: Array<Record<string, unknown>>;
510
+ };
511
+
512
+ /**
513
+ * Returns source-like shortcut groups for a quick workbench sidebar.
514
+ * @returns Stable group definitions used by the quick workbench preview template.
515
+ */
516
+ function referenceQuickWorkbenchGroups(): QuickWorkbenchGroup[] {
517
+ return [
518
+ {
519
+ id: 'todo',
520
+ title: '待办审批',
521
+ visualKind: 'todoGrid',
522
+ fallbackItems: [
523
+ { label: '预算追加审批', value: '5', tone: 'critical' },
524
+ { label: '重大合同签批', value: '4', tone: 'warning' },
525
+ { label: '人事任免确认', value: '3', tone: 'info' },
526
+ ],
527
+ },
528
+ {
529
+ id: 'report',
530
+ title: '常用报表',
531
+ visualKind: 'quickLinks',
532
+ fallbackItems: [
533
+ { label: '财务月报', value: '打开', tone: 'neutral' },
534
+ { label: '经营分析会材料', value: '打开', tone: 'neutral' },
535
+ { label: '行业报告', value: '打开', tone: 'neutral' },
536
+ ],
537
+ },
538
+ {
539
+ id: 'entry',
540
+ title: '系统入口',
541
+ visualKind: 'quickLinks',
542
+ fallbackItems: [
543
+ { label: '财务' },
544
+ { label: '供应链' },
545
+ { label: 'HR' },
546
+ { label: 'BI' },
547
+ ],
548
+ },
549
+ {
550
+ id: 'message',
551
+ title: '消息中心',
552
+ visualKind: 'incidentList',
553
+ fallbackItems: [
554
+ { label: '现金流预警推送', value: '09:20', tone: 'critical' },
555
+ { label: '经营会提醒', value: '14:00', tone: 'warning' },
556
+ { label: '区域订单异动', value: '刚刚', tone: 'info' },
557
+ ],
558
+ },
559
+ ];
560
+ }
561
+
562
+ /**
563
+ * Returns quick-workbench rows from OCR/model data, falling back to dense preview rows.
564
+ * @param data - Custom canvas renderer data.
565
+ * @param group - Target shortcut group.
566
+ * @returns Rows for one shortcut/sidebar group.
567
+ */
568
+ function referenceQuickWorkbenchGroupItems(data: CustomCanvasData, group: QuickWorkbenchGroup): Array<Record<string, unknown>> {
569
+ const nestedBlocks = Array.isArray(data.nestedBlocks) ? data.nestedBlocks : [];
570
+ const patternMap: Record<QuickWorkbenchGroup['id'], RegExp> = {
571
+ todo: /待办|审批|签批|任免|预算|urgent|todo/i,
572
+ report: /报表|月报|分析|材料|报告|report/i,
573
+ entry: /系统|入口|财务|供应链|HR|BI|平台|quick/i,
574
+ message: /消息|提醒|预警|通知|异动|message|notice|alert/i,
575
+ };
576
+ const rows = nestedBlocks.flatMap((block) => {
577
+ const blockText = [
578
+ block.title,
579
+ nestedBlockDataSummary(block),
580
+ ...nestedBlockRawItems(block).map((item: Record<string, unknown>, index: number) => nestedBlockItemTitle(item, index)),
581
+ ].join(' ');
582
+ if (!patternMap[group.id].test(blockText)) return [];
583
+ const rawItems = nestedBlockRawItems(block);
584
+ if (rawItems.length > 0 && !nestedBlockItemsLookTooWeakForVisualKind(rawItems, group.visualKind)) return rawItems;
585
+ return [{ label: block.title, value: nestedBlockMetricValue(block), detail: nestedBlockDataSummary(block), tone: nestedBlockToneFromStatus(blockText) }];
586
+ });
587
+ const elementRows = rows.length > 0 ? [] : referenceCustomCanvasElementRows(data, patternMap[group.id]);
588
+ const usableRows = rows.length > 0 ? rows : elementRows;
589
+ return (usableRows.length > 0 ? usableRows : group.fallbackItems).slice(0, group.id === 'entry' ? 4 : 3);
590
+ }
591
+
592
+ /**
593
+ * Reads text elements from sparse customCanvas OCR output for a semantic group.
594
+ * @param data - Custom canvas renderer data.
595
+ * @param pattern - Semantic matcher for the target group.
596
+ * @returns Item rows derived from OCR elements.
597
+ */
598
+ function referenceCustomCanvasElementRows(data: CustomCanvasData, pattern: RegExp): Array<Record<string, unknown>> {
599
+ const elements = Array.isArray(data.elements) ? data.elements : [];
600
+ return elements
601
+ .map((element) => customCanvasTextElementValue(element))
602
+ .filter((text) => text && pattern.test(text))
603
+ .map((text) => ({ label: text, value: '', tone: nestedBlockToneFromStatus(text) }));
604
+ }
605
+
606
+ /**
607
+ * Returns the badge text shown on the first quick-workbench group.
608
+ * @param data - Custom canvas renderer data.
609
+ * @returns Urgent count badge.
610
+ */
611
+ function referenceQuickWorkbenchUrgentBadge(data: CustomCanvasData): string {
612
+ const todoItems = referenceQuickWorkbenchGroupItems(data, referenceQuickWorkbenchGroups()[0]);
613
+ const urgent = todoItems
614
+ .map((item) => nestedBlockOptionalNumber(nestedBlockItemValue(item)))
615
+ .filter((value): value is number => value !== undefined)
616
+ .reduce((sum, value) => sum + Math.max(0, value), 0);
617
+ return urgent > 0 ? `${urgent} 急` : '待处理';
618
+ }
619
+
620
+ /**
621
+ * Returns KPI metric tiles for the strategy-KPI reference panel.
622
+ * @param data - Custom canvas renderer data.
623
+ * @returns Six KPI rows plus a leading revenue tile when available.
624
+ */
625
+ function referenceStrategyKpiMetrics(data: CustomCanvasData): Array<Record<string, unknown>> {
626
+ return [
627
+ referenceStrategyKpiMetricItem(data, '营业收入', /营业收入|营收|收入|revenue/i, '¥ 8,642 万', '目标完成率 72%', 'info'),
628
+ referenceStrategyKpiMetricItem(data, '净利率', /净利率|利润|profit/i, '12.8%', '实际 / 目标', 'healthy'),
629
+ referenceStrategyKpiMetricItem(data, '现金流', /现金流|cash/i, '¥ 1.28 亿', '经营净流 -820 万', 'critical'),
630
+ referenceStrategyKpiMetricItem(data, '核心用户 / 订单', /核心用户|订单|客户|user|order/i, '42,860 单', '转化 6.8%', 'healthy'),
631
+ referenceStrategyKpiMetricItem(data, '本月营收完成', /本月营收|完成率|目标完成|target/i, '72%', '同比 +18.4%', 'info'),
632
+ referenceStrategyKpiMetricItem(data, '重点项目', /重点项目|项目|project/i, '8 / 11', '2 个延期风险', 'warning'),
633
+ referenceStrategyKpiMetricItem(data, '市场份额', /市场份额|份额|share/i, '21.6%', '较竞品 A +2.4pp', 'healthy'),
634
+ ];
635
+ }
636
+
637
+ /**
638
+ * Builds compact operation-efficiency groups from recovered nested previews.
639
+ * @param data - Custom canvas renderer data.
640
+ * @returns Three business groups for delivery, resource, and milestone previews.
641
+ */
642
+ function referenceOperationEfficiencyGroups(data: CustomCanvasData): ReferenceOperationEfficiencyGroup[] {
643
+ const semanticGroups: ReferenceOperationEfficiencyGroup[] = [
644
+ {
645
+ id: 'delivery',
646
+ title: '交付 / 履约',
647
+ items: referenceOperationEfficiencyGroupItems(data, /交付|履约|订单准时|生产良率/),
648
+ },
649
+ {
650
+ id: 'resource',
651
+ title: '资源利用',
652
+ items: referenceOperationEfficiencyGroupItems(data, /资源利用|人均产值|服务响应|设备利用|库存周转/),
653
+ },
654
+ {
655
+ id: 'milestone',
656
+ title: '重点项目里程碑',
657
+ items: referenceOperationEfficiencyGroupItems(data, /重点项目里程碑|里程碑|数字化工厂|成本专项|渠道升级|新品上市/),
658
+ },
659
+ ];
660
+ const populatedGroups = semanticGroups.filter((group) => group.items.length > 0);
661
+ return populatedGroups.length > 0 ? populatedGroups : referenceOperationEfficiencyFallbackGroups(data);
662
+ }
663
+
664
+ /**
665
+ * Builds display groups from available child cards when semantic buckets are sparse.
666
+ * @param data - Custom canvas renderer data.
667
+ * @returns Non-empty visual groups based on recognized child cards.
668
+ */
669
+ function referenceOperationEfficiencyFallbackGroups(data: CustomCanvasData): ReferenceOperationEfficiencyGroup[] {
670
+ const nestedBlocks = Array.isArray(data.nestedBlocks) ? data.nestedBlocks : [];
671
+ const sourceItems = nestedBlocks
672
+ .filter((block) => nestedBlockClassifierText(block) || nestedBlockDataSummary(block) || nestedBlockMetricValue(block))
673
+ .map((block, index) => ({
674
+ label: block.title || `识别子卡 ${index + 1}`,
675
+ value: nestedBlockMetricValue(block),
676
+ detail: nestedBlockDataSummary(block),
677
+ tone: nestedBlockNeedsHumanIntervention(block) ? 'warning' : nestedBlockToneFromStatus(nestedBlockClassifierText(block)),
678
+ nestedBlock: block,
679
+ }))
680
+ .slice(0, 6);
681
+ if (sourceItems.length === 0) {
682
+ return [{
683
+ id: 'recognized',
684
+ title: '识别子卡',
685
+ items: [{ label: '等待业务口径', value: '待补充', detail: '识别到的区域将作为子卡补充问数。', tone: 'warning' }],
686
+ }];
687
+ }
688
+ const groupCount = Math.min(3, Math.max(1, sourceItems.length));
689
+ return Array.from({ length: groupCount }, (_, groupIndex) => ({
690
+ id: `recognized-${groupIndex + 1}`,
691
+ title: groupCount === 1 ? '识别子卡' : `识别子卡 ${groupIndex + 1}`,
692
+ items: sourceItems.filter((_, itemIndex) => itemIndex % groupCount === groupIndex),
693
+ })).filter((group) => group.items.length > 0);
694
+ }
695
+
696
+ /**
697
+ * Computes operation-efficiency panel columns from populated groups.
698
+ * @param data - Custom canvas renderer data.
699
+ * @returns CSS grid style that avoids empty right-side columns.
700
+ */
701
+ function referenceOperationEfficiencyPanelStyle(data: CustomCanvasData): CSSProperties {
702
+ const columnCount = Math.min(3, Math.max(1, referenceOperationEfficiencyGroups(data).length));
703
+ return {
704
+ gridTemplateColumns: `repeat(${columnCount}, minmax(0, 1fr))`,
705
+ };
706
+ }
707
+
708
+ /**
709
+ * Builds target progress rows for the ordinary operation-health panel.
710
+ * @param data - Custom canvas renderer data.
711
+ * @returns Progress rows preserving OCR/query labels and values.
712
+ */
713
+ function referenceOperationHealthProgressItems(data: CustomCanvasData): Array<Record<string, unknown>> {
714
+ const block = referenceNestedBlock(data, /目标进度|进度条|目标完成|完成进度/);
715
+ const rawItems = block ? nestedBlockRawItems(block) : [];
716
+ if (rawItems.length > 0 && !nestedBlockItemsLookTooWeakForVisualKind(rawItems, 'progressList')) return rawItems.slice(0, 4);
717
+ return [
718
+ { label: '营收目标', value: '72%', progress: 72, tone: 'info' },
719
+ { label: '利润目标', value: '64%', progress: 64, tone: 'warning' },
720
+ { label: '现金流目标', value: '58%', progress: 58, tone: 'critical' },
721
+ ];
722
+ }
723
+
724
+ /**
725
+ * Builds trend bars for the ordinary operation-health panel.
726
+ * @param data - Custom canvas renderer data.
727
+ * @returns Six compact month bars.
728
+ */
729
+ function referenceOperationHealthTrendItems(data: CustomCanvasData): Array<Record<string, unknown>> {
730
+ const block = referenceNestedBlock(data, /近\s*6\s*个月|核心指标|趋势|同比|预算线|业务线|区域/);
731
+ const rawItems = block ? nestedBlockRawItems(block) : [];
732
+ if (rawItems.length >= 4 && !nestedBlockItemsLookTooWeak(rawItems)) return rawItems.slice(0, 6);
733
+ return [
734
+ { label: '1月', value: '62', progress: 52, tone: 'info' },
735
+ { label: '2月', value: '68', progress: 60, tone: 'info' },
736
+ { label: '3月', value: '74', progress: 68, tone: 'healthy' },
737
+ { label: '4月', value: '71', progress: 64, tone: 'warning' },
738
+ { label: '5月', value: '79', progress: 76, tone: 'healthy' },
739
+ { label: '6月', value: '83', progress: 84, tone: 'healthy' },
740
+ ];
741
+ }
742
+
743
+ /**
744
+ * Finds the structure-ratio child card for ordinary operation-health panels.
745
+ * @param data - Custom canvas renderer data.
746
+ * @returns Structure chart child or generic fallback.
747
+ */
748
+ function referenceOperationHealthStructureBlock(data: CustomCanvasData): CustomCanvasNestedBlock {
749
+ return referenceNestedBlock(data, /结构占比|收入结构|业务结构|渠道结构|区域结构/) ?? {
750
+ id: 'reference-operation-health-structure',
751
+ title: '结构占比',
752
+ kind: 'chart',
753
+ slot: 'body',
754
+ dataBindingStatus: 'none',
755
+ data: {
756
+ visualKind: 'donut',
757
+ items: [
758
+ { label: '核心业务', value: '46%', share: 46, tone: 'info' },
759
+ { label: '增量业务', value: '28%', share: 28, tone: 'healthy' },
760
+ { label: '创新业务', value: '16%', share: 16, tone: 'warning' },
761
+ { label: '其他', value: '10%', share: 10, tone: 'neutral' },
762
+ ],
763
+ },
764
+ };
765
+ }
766
+
767
+ /**
768
+ * Returns structure-ratio legend rows for ordinary operation-health panels.
769
+ * @param data - Custom canvas renderer data.
770
+ * @returns Donut legend rows.
771
+ */
772
+ function referenceOperationHealthStructureItems(data: CustomCanvasData): Array<Record<string, unknown>> {
773
+ return nestedBlockDonutItems(referenceOperationHealthStructureBlock(data));
774
+ }
775
+
776
+ /**
777
+ * Extracts metric-like rows for one operation-efficiency group.
778
+ * @param data - Custom canvas renderer data.
779
+ * @param pattern - Group classifier pattern.
780
+ * @returns Display rows preserving screenshot or query data values.
781
+ */
782
+ function referenceOperationEfficiencyGroupItems(data: CustomCanvasData, pattern: RegExp): Array<Record<string, unknown>> {
783
+ const nestedBlocks = Array.isArray(data.nestedBlocks) ? data.nestedBlocks : [];
784
+ return nestedBlocks
785
+ .filter((block) => pattern.test(nestedBlockClassifierText(block)))
786
+ .map((block, index) => ({
787
+ label: block.title || `指标 ${index + 1}`,
788
+ value: nestedBlockMetricValue(block),
789
+ detail: nestedBlockDataSummary(block),
790
+ tone: nestedBlockNeedsHumanIntervention(block) ? 'warning' : 'healthy',
791
+ nestedBlock: block,
792
+ }))
793
+ .slice(0, 4);
794
+ }
795
+
796
+ /**
797
+ * Finds a metric row and keeps the child card it came from.
798
+ * @param data - Custom canvas renderer data.
799
+ * @param pattern - Pattern matched against metric labels and row text.
800
+ * @returns Matched row with its source nested child card.
801
+ */
802
+ function referenceStrategyNestedMetricMatch(
803
+ data: CustomCanvasData,
804
+ pattern: RegExp,
805
+ ): { item: Record<string, unknown>; sourceBlock: CustomCanvasNestedBlock } | undefined {
806
+ const nestedBlocks = Array.isArray(data.nestedBlocks) ? data.nestedBlocks : [];
807
+ for (const sourceBlock of nestedBlocks) {
808
+ const item = nestedBlockRawItems(sourceBlock).find((candidate: Record<string, unknown>, index: number) => {
809
+ const text = [
810
+ nestedBlockItemLabel(candidate, index),
811
+ nestedBlockItemValue(candidate),
812
+ nestedBlockItemDetail(candidate),
813
+ ].filter(Boolean).join(' ');
814
+ return pattern.test(text);
815
+ });
816
+ if (item) return { item, sourceBlock };
817
+ }
818
+ return undefined;
819
+ }
820
+
821
+ /**
822
+ * Builds one strategy-KPI metric tile, preserving OCR/query values when present.
823
+ * @param data - Custom canvas renderer data.
824
+ * @param label - Display label.
825
+ * @param pattern - Title or item matcher.
826
+ * @param fallbackValue - Screenshot-preview fallback value.
827
+ * @param fallbackDetail - Screenshot-preview fallback detail.
828
+ * @param tone - Visual tone.
829
+ * @returns Metric row.
830
+ */
831
+ function referenceStrategyKpiMetricItem(
832
+ data: CustomCanvasData,
833
+ label: string,
834
+ pattern: RegExp,
835
+ fallbackValue: string,
836
+ fallbackDetail: string,
837
+ tone: NestedBlockTone,
838
+ ): Record<string, unknown> {
839
+ const match = referenceStrategyNestedMetricMatch(data, pattern);
840
+ const item = match?.item ?? referenceNestedMetricItem(data, pattern);
841
+ const sourceBlock = match?.sourceBlock ?? (item ? undefined : referenceNestedBlock(data, pattern));
842
+ const element = referenceCustomCanvasElementRows(data, pattern)[0];
843
+ const blockValue = sourceBlock ? nestedBlockMetricValue(sourceBlock) : '';
844
+ const elementValue = element ? nestedBlockItemValue(element) : '';
845
+ const value = item ? nestedBlockItemValue(item) : blockValue && !/^0(?:\.0)?%?$/.test(blockValue) ? blockValue : elementValue;
846
+ const detail = item ? nestedBlockItemDetail(item) : sourceBlock ? nestedBlockDataSummary(sourceBlock) : '';
847
+ return {
848
+ label,
849
+ value: value || fallbackValue,
850
+ detail: detail || fallbackDetail,
851
+ tone,
852
+ ...(sourceBlock ? { nestedBlock: sourceBlock } : {}),
853
+ };
854
+ }
855
+
856
+ /**
857
+ * Builds the SVG line path for the leading strategy revenue tile.
858
+ * @param data - Custom canvas renderer data.
859
+ * @returns SVG path data string.
860
+ */
861
+ function referenceStrategyKpiTrendPath(data: CustomCanvasData): string {
862
+ const trendBlock = referenceNestedBlock(data, /趋势|走势|营收|收入|trend|revenue/i);
863
+ const items = trendBlock ? nestedBlockRawItems(trendBlock) : [];
864
+ const values = items
865
+ .map((item: Record<string, unknown>) => nestedBlockOptionalNumber(nestedBlockItemValue(item) || item.value || item.amount))
866
+ .filter((value: number | undefined): value is number => value !== undefined)
867
+ .slice(0, 7);
868
+ const series = values.length >= 4 ? values : [18, 25, 22, 36, 33, 45, 41, 54, 49];
869
+ const max = Math.max(...series, 1);
870
+ const min = Math.min(...series);
871
+ const spread = Math.max(1, max - min);
872
+ return series.map((value: number, index: number) => {
873
+ const x = 8 + (index / Math.max(1, series.length - 1)) * 184;
874
+ const y = 68 - ((value - min) / spread) * 48;
875
+ return `${index === 0 ? 'M' : 'L'}${Math.round(x)},${Math.round(y)}`;
876
+ }).join(' ');
877
+ }
878
+
879
+ /**
880
+ * Returns bottom risk summary rows for the strategy-KPI board.
881
+ * @param data - Custom canvas renderer data.
882
+ * @returns Risk rows used by the bottom warning strip.
883
+ */
884
+ function referenceStrategyKpiRiskItems(data: CustomCanvasData): Array<Record<string, unknown>> {
885
+ const nestedBlocks = Array.isArray(data.nestedBlocks) ? data.nestedBlocks : [];
886
+ const rows = nestedBlocks.flatMap((block) => {
887
+ const text = [block.title, nestedBlockDataSummary(block)].join(' ');
888
+ if (!referenceStrategyKpiRiskBlockLooksUsable(block)) return [];
889
+ const rawItems = nestedBlockRawItems(block);
890
+ if (rawItems.length > 0 && !nestedBlockItemsLookTooWeakForVisualKind(rawItems, 'simpleList')) {
891
+ return rawItems.map((item: Record<string, unknown>, index: number) => {
892
+ const displayText = referenceStrategyKpiRiskDisplayText({
893
+ label: nestedBlockItemLabel(item, index),
894
+ detail: nestedBlockItemDetail(item),
895
+ value: nestedBlockItemValue(item),
896
+ description: item.description,
897
+ owner: item.owner,
898
+ subtitle: item.subtitle,
899
+ status: item.status,
900
+ amount: item.amount,
901
+ ratio: item.ratio,
902
+ progress: item.progress,
903
+ cells: item.cells,
904
+ needsHumanIntervention: nestedBlockNeedsHumanIntervention(block),
905
+ });
906
+ return { ...referenceStrategyKpiRiskDisplayItem(item, displayText), nestedBlock: block };
907
+ });
908
+ }
909
+ const displayText = referenceStrategyKpiRiskDisplayText({
910
+ label: block.title,
911
+ detail: nestedBlockDataSummary(block),
912
+ value: nestedBlockMetricValue(block),
913
+ needsHumanIntervention: nestedBlockNeedsHumanIntervention(block),
914
+ });
915
+ return [{ label: block.title, ...displayText, tone: nestedBlockToneFromStatus(text), nestedBlock: block }];
916
+ });
917
+ const fallbackRows = [
918
+ { label: '现金流', detail: '经营性现金流净额为负', tone: 'critical' },
919
+ { label: '逾期账款', detail: '大客户回款延期 11 天', tone: 'warning' },
920
+ { label: '库存', detail: '华东仓周转天数高于阈值', tone: 'warning' },
921
+ { label: '投诉率', detail: '核心区域投诉率连续上升', tone: 'warning' },
922
+ ];
923
+ return (rows.length > 0 ? rows : fallbackRows).slice(0, 4);
924
+ }
925
+
926
+ /**
927
+ * Checks whether a nested card should render in the strategy-KPI bottom warning strip.
928
+ * @param block - Candidate nested child card.
929
+ * @returns True for explicit risk cards, not ordinary KPI metrics that merely mention cash flow.
930
+ */
931
+ function referenceStrategyKpiRiskBlockLooksUsable(block: CustomCanvasNestedBlock): boolean {
932
+ const data = block.data && typeof block.data === 'object' ? block.data as Record<string, unknown> : {};
933
+ const binding = block.dataBinding && typeof block.dataBinding === 'object' ? block.dataBinding as Record<string, unknown> : {};
934
+ const intervention = data.humanIntervention && typeof data.humanIntervention === 'object'
935
+ ? data.humanIntervention as Record<string, unknown>
936
+ : binding.humanIntervention && typeof binding.humanIntervention === 'object'
937
+ ? binding.humanIntervention as Record<string, unknown>
938
+ : {};
939
+ const text = [block.title, data.title, data.label, data.queryIntent, nestedBlockDataSummary(block)].join(' ');
940
+ if (intervention.reason === 'image_compose_backfill_deferred' && /现金流|逾期|库存|投诉|cash\s*flow|overdue|inventory|complaint/i.test(text)) return true;
941
+ if (/预警|风险|warning|risk/i.test(text)) return true;
942
+ return /逾期账款|逾期|库存|投诉率|投诉|overdue|inventory|complaint/i.test(text);
943
+ }
944
+
945
+ /**
946
+ * Returns the risk-strip count label for the strategy-KPI board.
947
+ * @param data - Custom canvas renderer data.
948
+ * @returns Count label based on recognized risk rows.
949
+ */
950
+ function referenceStrategyKpiRiskSummaryLabel(data: CustomCanvasData): string {
951
+ return `${referenceStrategyKpiRiskItems(data).length} 项预警`;
952
+ }
953
+
954
+ /**
955
+ * Computes the risk item grid from actual item count.
956
+ * @param data - Custom canvas renderer data.
957
+ * @returns CSS grid style that avoids unused risk columns.
958
+ */
959
+ function referenceStrategyKpiRiskItemsGridStyle(data: CustomCanvasData): CSSProperties {
960
+ const columnCount = Math.min(4, Math.max(1, referenceStrategyKpiRiskItems(data).length));
961
+ return {
962
+ gridTemplateColumns: `repeat(${columnCount}, minmax(0, 1fr))`,
963
+ };
964
+ }
965
+
966
+
967
+
968
+ return {
969
+ referenceExpenseRiskRows,
970
+ referenceExpenseSummaryItems,
971
+ referenceDeviationInsightItems,
972
+ referenceOrganizationRiskMetrics,
973
+ referenceOrganizationDonutStyle,
974
+ referenceInvestmentRiskRows,
975
+ referenceInvestmentSummaryItems,
976
+ referenceExecutiveTodoItems,
977
+ referenceExecutiveTodoNormalizeRow,
978
+ referenceExecutiveTodoPadRows,
979
+ referenceExecutiveTodoBlockLooksUsable,
980
+ referenceExecutiveTodoBadge,
981
+ referenceExecutiveTodoBadgeClasses,
982
+ referenceExecutiveTodoImpact,
983
+ referenceExecutiveTodoDeadline,
984
+ referenceExecutiveTodoProgress,
985
+ referenceShortcutDrillItems,
986
+ referenceQuickWorkbenchGroups,
987
+ referenceQuickWorkbenchGroupItems,
988
+ referenceCustomCanvasElementRows,
989
+ referenceQuickWorkbenchUrgentBadge,
990
+ referenceStrategyKpiMetrics,
991
+ referenceOperationEfficiencyGroups,
992
+ referenceOperationEfficiencyPanelStyle,
993
+ referenceOperationHealthProgressItems,
994
+ referenceOperationHealthTrendItems,
995
+ referenceOperationHealthStructureBlock,
996
+ referenceOperationHealthStructureItems,
997
+ referenceOperationEfficiencyGroupItems,
998
+ referenceStrategyKpiMetricItem,
999
+ referenceStrategyKpiTrendPath,
1000
+ referenceStrategyKpiRiskItems,
1001
+ referenceStrategyKpiRiskSummaryLabel,
1002
+ referenceStrategyKpiRiskItemsGridStyle,
1003
+ };
1004
+ }