dishui 0.0.65 → 0.0.66

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 (500) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +10 -11
  2. package/dist/chart.js +12 -46
  3. package/dist/code-editor.js +16 -43
  4. package/dist/components/Badge/index.js +10 -15
  5. package/dist/components/Badge/index.js.map +1 -1
  6. package/dist/components/Button/index.js +62 -89
  7. package/dist/components/Button/index.js.map +1 -1
  8. package/dist/components/Card/index.d.ts +76 -0
  9. package/dist/components/Card/index.js +178 -69
  10. package/dist/components/Card/index.js.map +1 -1
  11. package/dist/components/Chart/Chart.js +25 -25
  12. package/dist/components/Chart/Chart.js.map +1 -1
  13. package/dist/components/Checkbox/index.js +57 -65
  14. package/dist/components/Checkbox/index.js.map +1 -1
  15. package/dist/components/ChoicePicker/index.d.ts +44 -0
  16. package/dist/components/ChoicePicker/index.js +81 -0
  17. package/dist/components/ChoicePicker/index.js.map +1 -0
  18. package/dist/components/Column/index.d.ts +28 -0
  19. package/dist/components/Column/index.js +30 -0
  20. package/dist/components/Column/index.js.map +1 -0
  21. package/dist/components/DateTimeInput/index.d.ts +44 -0
  22. package/dist/components/DateTimeInput/index.js +48 -0
  23. package/dist/components/DateTimeInput/index.js.map +1 -0
  24. package/dist/components/Demo/index.js +107 -107
  25. package/dist/components/Demo/index.js.map +1 -1
  26. package/dist/components/Divider/index.d.ts +20 -0
  27. package/dist/components/Divider/index.js +30 -0
  28. package/dist/components/Divider/index.js.map +1 -0
  29. package/dist/components/EmptyState/index.js +24 -24
  30. package/dist/components/EmptyState/index.js.map +1 -1
  31. package/dist/components/FileUploader/DropZone.js +134 -136
  32. package/dist/components/FileUploader/DropZone.js.map +1 -1
  33. package/dist/components/FileUploader/FileItem.js +159 -163
  34. package/dist/components/FileUploader/FileItem.js.map +1 -1
  35. package/dist/components/FileUploader/FileUploader.js +126 -127
  36. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  37. package/dist/components/FileUploader/UploadQueue.js +62 -62
  38. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  39. package/dist/components/FloatWindow/index.d.ts +28 -0
  40. package/dist/components/GridLayout/index.d.ts +42 -0
  41. package/dist/components/Icon/index.d.ts +24 -0
  42. package/dist/components/Icon/index.js +26 -0
  43. package/dist/components/Icon/index.js.map +1 -0
  44. package/dist/components/Image/index.d.ts +33 -0
  45. package/dist/components/Image/index.js +44 -0
  46. package/dist/components/Image/index.js.map +1 -0
  47. package/dist/components/Input/index.js +196 -197
  48. package/dist/components/Input/index.js.map +1 -1
  49. package/dist/components/Label/index.js +62 -74
  50. package/dist/components/Label/index.js.map +1 -1
  51. package/dist/components/Layout/index.js +134 -139
  52. package/dist/components/Layout/index.js.map +1 -1
  53. package/dist/components/List/index.js +45 -58
  54. package/dist/components/List/index.js.map +1 -1
  55. package/dist/components/Markdown/Markdown.js +106 -107
  56. package/dist/components/Markdown/Markdown.js.map +1 -1
  57. package/dist/components/Markdown/codeThemes.js +24 -33
  58. package/dist/components/Markdown/codeThemes.js.map +1 -1
  59. package/dist/components/Markdown/markdownComponents.js +203 -208
  60. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  61. package/dist/components/Markdown/parseCodeBlockMeta.js +22 -22
  62. package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
  63. package/dist/components/Markdown/useMarkdownSource.js +46 -46
  64. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  65. package/dist/components/Markdown/useMarkmapRenderer.js +35 -36
  66. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  67. package/dist/components/Markdown/useMermaidRenderer.js +41 -42
  68. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  69. package/dist/components/Modal/index.js +82 -82
  70. package/dist/components/Modal/index.js.map +1 -1
  71. package/dist/components/MultipleChoice/index.d.ts +44 -0
  72. package/dist/components/MultipleChoice/index.js +52 -0
  73. package/dist/components/MultipleChoice/index.js.map +1 -0
  74. package/dist/components/Notification/index.d.ts +17 -0
  75. package/dist/components/Page/index.js +40 -71
  76. package/dist/components/Page/index.js.map +1 -1
  77. package/dist/components/PageHeader/index.js +28 -28
  78. package/dist/components/PageHeader/index.js.map +1 -1
  79. package/dist/components/ProtectedRoute/index.js +8 -9
  80. package/dist/components/ProtectedRoute/index.js.map +1 -1
  81. package/dist/components/Row/index.d.ts +28 -0
  82. package/dist/components/Row/index.js +30 -0
  83. package/dist/components/Row/index.js.map +1 -0
  84. package/dist/components/Select/index.js +251 -254
  85. package/dist/components/Select/index.js.map +1 -1
  86. package/dist/components/SidebarToggleButton/index.js +56 -59
  87. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  88. package/dist/components/Slider/index.d.ts +39 -0
  89. package/dist/components/Slider/index.js +52 -0
  90. package/dist/components/Slider/index.js.map +1 -0
  91. package/dist/components/StatCard/index.d.ts +29 -1
  92. package/dist/components/StatCard/index.js +189 -86
  93. package/dist/components/StatCard/index.js.map +1 -1
  94. package/dist/components/Switch/index.d.ts +34 -0
  95. package/dist/components/Switch/index.js +55 -0
  96. package/dist/components/Switch/index.js.map +1 -0
  97. package/dist/components/Tab/index.d.ts +40 -0
  98. package/dist/components/Table/index.js +109 -121
  99. package/dist/components/Table/index.js.map +1 -1
  100. package/dist/components/Tabs/index.js +28 -38
  101. package/dist/components/Tabs/index.js.map +1 -1
  102. package/dist/components/Text/index.d.ts +43 -0
  103. package/dist/components/Text/index.js +55 -0
  104. package/dist/components/Text/index.js.map +1 -0
  105. package/dist/components/Tooltip/index.d.ts +23 -0
  106. package/dist/components/Tooltip/index.js +34 -0
  107. package/dist/components/Tooltip/index.js.map +1 -0
  108. package/dist/components/Tree/Tree.js +205 -205
  109. package/dist/components/Tree/Tree.js.map +1 -1
  110. package/dist/components/pro/ArticleContextMenu/index.js +86 -87
  111. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  112. package/dist/components/pro/ArticleControl/ArticleControl2.js +250 -250
  113. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  114. package/dist/components/pro/ArticleControl/buildHeadingTree.js +31 -32
  115. package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
  116. package/dist/components/pro/ArticleControl/useArticleToc.js +100 -102
  117. package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
  118. package/dist/components/pro/Calendar/Calendar.d.ts +10 -0
  119. package/dist/components/pro/Calendar/hooks/useCalendarDrag.d.ts +47 -0
  120. package/dist/components/pro/Calendar/hooks/useCalendarState.d.ts +56 -0
  121. package/dist/components/pro/Calendar/index.d.ts +7 -0
  122. package/dist/components/pro/Calendar/types.d.ts +151 -0
  123. package/dist/components/pro/Calendar/utils.d.ts +94 -0
  124. package/dist/components/pro/Chat/Chat.d.ts +6 -0
  125. package/dist/components/pro/Chat/index.d.ts +2 -0
  126. package/dist/components/pro/Chat/types.d.ts +84 -0
  127. package/dist/components/pro/CodeEditor/editors/CodeEditor.js +287 -327
  128. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  129. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -224
  130. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  131. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js +594 -613
  132. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
  133. package/dist/components/pro/CodeEditor/extensions/contextMenu.js +54 -55
  134. package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
  135. package/dist/components/pro/CodeEditor/extensions/index.js +152 -160
  136. package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
  137. package/dist/components/pro/CodeEditor/langs/index.js +7 -15
  138. package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
  139. package/dist/components/pro/CodeEditor/langs/javascript.js +11 -48
  140. package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
  141. package/dist/components/pro/CodeEditor/langs/python.js +4 -40
  142. package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
  143. package/dist/components/pro/CodeEditor/langs/snippets.js +118 -147
  144. package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
  145. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js +153 -153
  146. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  147. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +180 -190
  148. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  149. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js +130 -137
  150. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  151. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js +228 -242
  152. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  153. package/dist/components/pro/CodeEditor/panels/VariablePanel.js +208 -248
  154. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  155. package/dist/components/pro/CodeEditor/themes.js +513 -483
  156. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  157. package/dist/components/pro/CodeEditor/types.d.ts +1 -1
  158. package/dist/components/pro/CodeEditor/utils.js +171 -175
  159. package/dist/components/pro/CodeEditor/utils.js.map +1 -1
  160. package/dist/components/pro/DataTable/DataTable.js +305 -306
  161. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  162. package/dist/components/pro/DataTable/Filters.js +299 -314
  163. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  164. package/dist/components/pro/DataTable/PivotPanel.js +203 -204
  165. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  166. package/dist/components/pro/DataTable/PivotView.js +142 -144
  167. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  168. package/dist/components/pro/DataTable/components/BulkActions.js +42 -42
  169. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  170. package/dist/components/pro/DataTable/components/ColumnSelector.js +84 -84
  171. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  172. package/dist/components/pro/DataTable/components/FilterBar.js +58 -58
  173. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  174. package/dist/components/pro/DataTable/components/TableBody.js +93 -94
  175. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  176. package/dist/components/pro/DataTable/components/TableHeader.js +78 -78
  177. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  178. package/dist/components/pro/DataTable/components/TablePagination.js +77 -77
  179. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  180. package/dist/components/pro/DataTable/components/TableToolbar.js +40 -40
  181. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  182. package/dist/components/pro/DataTable/extension.js +5 -5
  183. package/dist/components/pro/DataTable/extension.js.map +1 -1
  184. package/dist/components/pro/DataTable/pivotEngine.js +84 -92
  185. package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
  186. package/dist/components/pro/DataTable/pivotExtension.js +93 -93
  187. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  188. package/dist/components/pro/DataTable/rowDetailExtension.js +30 -30
  189. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  190. package/dist/components/pro/DataTable/tanstack-table.js +45 -62
  191. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  192. package/dist/components/pro/DataTable/treeDataUtils.js +37 -48
  193. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  194. package/dist/components/pro/DataTable/useColumnDragReorder.js +68 -68
  195. package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
  196. package/dist/components/pro/DataTable/utils.js +156 -168
  197. package/dist/components/pro/DataTable/utils.js.map +1 -1
  198. package/dist/components/pro/FileExplorer/Breadcrumb.js +180 -180
  199. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  200. package/dist/components/pro/FileExplorer/CreateDialog.js +78 -78
  201. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  202. package/dist/components/pro/FileExplorer/FileExplorer.js +202 -205
  203. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  204. package/dist/components/pro/FileExplorer/FileIcon.js +189 -189
  205. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  206. package/dist/components/pro/FileExplorer/GridView.js +100 -100
  207. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  208. package/dist/components/pro/FileExplorer/ListView.js +209 -209
  209. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  210. package/dist/components/pro/FileExplorer/Toolbar.js +199 -199
  211. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  212. package/dist/components/pro/Flow/Flow.js +920 -948
  213. package/dist/components/pro/Flow/Flow.js.map +1 -1
  214. package/dist/components/pro/Flow/FlowCanvas.js +1626 -1662
  215. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  216. package/dist/components/pro/Flow/archify/build.js +85 -94
  217. package/dist/components/pro/Flow/archify/build.js.map +1 -1
  218. package/dist/components/pro/Flow/archify/convert.js +512 -519
  219. package/dist/components/pro/Flow/archify/convert.js.map +1 -1
  220. package/dist/components/pro/Flow/archify/palette.js +87 -104
  221. package/dist/components/pro/Flow/archify/palette.js.map +1 -1
  222. package/dist/components/pro/Flow/archify/presets.js +34 -37
  223. package/dist/components/pro/Flow/archify/presets.js.map +1 -1
  224. package/dist/components/pro/Flow/archify/spec.js +7 -7
  225. package/dist/components/pro/Flow/archify/spec.js.map +1 -1
  226. package/dist/components/pro/Flow/canvas/AlignmentGuides.js +25 -25
  227. package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
  228. package/dist/components/pro/Flow/canvas/GridRenderer.js +54 -55
  229. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  230. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +54 -58
  231. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  232. package/dist/components/pro/Flow/canvas/PixiApp.js +105 -102
  233. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  234. package/dist/components/pro/Flow/canvas/SelectionOverlay.js +38 -38
  235. package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
  236. package/dist/components/pro/Flow/canvas/ViewportContainer.js +117 -117
  237. package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
  238. package/dist/components/pro/Flow/constants.js +266 -278
  239. package/dist/components/pro/Flow/constants.js.map +1 -1
  240. package/dist/components/pro/Flow/context/FlowAIContext.js +27 -28
  241. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
  242. package/dist/components/pro/Flow/context/FlowContext.js +60 -61
  243. package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
  244. package/dist/components/pro/Flow/context/FlowUIContext.js +115 -117
  245. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  246. package/dist/components/pro/Flow/edges/EdgeRenderer.js +135 -138
  247. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  248. package/dist/components/pro/Flow/edges/edgeMarkers.js +11 -14
  249. package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
  250. package/dist/components/pro/Flow/edges/edgePaths.js +351 -367
  251. package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
  252. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js +49 -52
  253. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
  254. package/dist/components/pro/Flow/hooks/useClipboard.js +154 -154
  255. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  256. package/dist/components/pro/Flow/hooks/useCompactMode.js +17 -17
  257. package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
  258. package/dist/components/pro/Flow/hooks/useDeleteSelection.js +40 -40
  259. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  260. package/dist/components/pro/Flow/hooks/useDraggablePanel.js +51 -51
  261. package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
  262. package/dist/components/pro/Flow/hooks/useEdgeMutations.js +157 -157
  263. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  264. package/dist/components/pro/Flow/hooks/useFlowImportExport.js +190 -201
  265. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  266. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js +32 -38
  267. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
  268. package/dist/components/pro/Flow/hooks/useLayoutActions.js +172 -180
  269. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  270. package/dist/components/pro/Flow/hooks/useLineMutations.js +57 -57
  271. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  272. package/dist/components/pro/Flow/hooks/useMindMap.js +229 -238
  273. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  274. package/dist/components/pro/Flow/hooks/useNodeMutations.js +102 -102
  275. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  276. package/dist/components/pro/Flow/hooks/usePdfExport.js +55 -56
  277. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
  278. package/dist/components/pro/Flow/hooks/usePixiApp.js +55 -57
  279. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  280. package/dist/components/pro/Flow/hooks/useResizablePanel.js +31 -31
  281. package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
  282. package/dist/components/pro/Flow/hooks/useSelection.js +69 -69
  283. package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
  284. package/dist/components/pro/Flow/hooks/useUndoRedo.js +27 -27
  285. package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
  286. package/dist/components/pro/Flow/hooks/useViewport.js +28 -28
  287. package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
  288. package/dist/components/pro/Flow/lines/FreehandTool.js +63 -63
  289. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  290. package/dist/components/pro/Flow/lines/GeometricLineTool.js +80 -80
  291. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  292. package/dist/components/pro/Flow/lines/LineRenderer.js +88 -88
  293. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  294. package/dist/components/pro/Flow/lines/lineSmoothing.js +32 -34
  295. package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
  296. package/dist/components/pro/Flow/nodes/DataNodeView.js +236 -242
  297. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  298. package/dist/components/pro/Flow/nodes/MediaContent.js +236 -246
  299. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  300. package/dist/components/pro/Flow/nodes/MediaOverlay.js +63 -63
  301. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  302. package/dist/components/pro/Flow/nodes/Model3DView.js +111 -113
  303. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  304. package/dist/components/pro/Flow/nodes/NodeHandles.js +74 -80
  305. package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
  306. package/dist/components/pro/Flow/nodes/NodeRenderer.js +303 -314
  307. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  308. package/dist/components/pro/Flow/nodes/NodeText.js +25 -29
  309. package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
  310. package/dist/components/pro/Flow/nodes/aiClient.js +124 -137
  311. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  312. package/dist/components/pro/Flow/nodes/animAnchors.js +42 -49
  313. package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
  314. package/dist/components/pro/Flow/nodes/dataUtils.js +246 -267
  315. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  316. package/dist/components/pro/Flow/nodes/nodeUtils.js +23 -28
  317. package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
  318. package/dist/components/pro/Flow/nodes/shapes.js +556 -589
  319. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  320. package/dist/components/pro/Flow/nodes/svgIconTexture.js +37 -39
  321. package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
  322. package/dist/components/pro/Flow/nodes/svgIcons.js +684 -689
  323. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  324. package/dist/components/pro/Flow/panels/AIPanel.js +464 -491
  325. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  326. package/dist/components/pro/Flow/panels/Breadcrumb.js +41 -41
  327. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  328. package/dist/components/pro/Flow/panels/ContextMenu.js +37 -37
  329. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  330. package/dist/components/pro/Flow/panels/DataInspectorSection.js +428 -432
  331. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  332. package/dist/components/pro/Flow/panels/ExpandableTextarea.js +61 -62
  333. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  334. package/dist/components/pro/Flow/panels/FlowPanelGroup.js +114 -114
  335. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  336. package/dist/components/pro/Flow/panels/FlowToolbar.js +347 -391
  337. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  338. package/dist/components/pro/Flow/panels/InspectorPanel.js +1792 -1798
  339. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  340. package/dist/components/pro/Flow/panels/OutlinePanel.js +242 -248
  341. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  342. package/dist/components/pro/Flow/panels/PresentationMode.js +137 -140
  343. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  344. package/dist/components/pro/Flow/panels/ProjectTitle.js +46 -46
  345. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  346. package/dist/components/pro/Flow/panels/ShapePalette.js +557 -572
  347. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  348. package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +0 -1
  349. package/dist/components/pro/Flow/panels/toolbarIcons.js +508 -557
  350. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  351. package/dist/components/pro/Flow/types.js +26 -26
  352. package/dist/components/pro/Flow/types.js.map +1 -1
  353. package/dist/components/pro/Flow/utils/dashedLine.js +113 -117
  354. package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
  355. package/dist/components/pro/Flow/utils/gradient.js +55 -55
  356. package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
  357. package/dist/components/pro/Flow/utils/pdfExport.js +50 -89
  358. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
  359. package/dist/components/pro/Flow/utils/themeColor.js +185 -195
  360. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  361. package/dist/components/pro/Gantt/Gantt.d.ts +7 -0
  362. package/dist/components/pro/Gantt/hooks/useGanttDrag.d.ts +31 -0
  363. package/dist/components/pro/Gantt/hooks/useGanttState.d.ts +58 -0
  364. package/dist/components/pro/Gantt/index.d.ts +6 -0
  365. package/dist/components/pro/Gantt/types.d.ts +478 -0
  366. package/dist/components/pro/Gantt/utils.d.ts +124 -0
  367. package/dist/components/pro/Resizable/Resizable.d.ts +30 -0
  368. package/dist/components/pro/Resizable/index.d.ts +2 -0
  369. package/dist/components/pro/RichTextEditor/AIRewrite.js +323 -334
  370. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  371. package/dist/components/pro/RichTextEditor/BlockHandle.js +314 -316
  372. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  373. package/dist/components/pro/RichTextEditor/BubbleToolbar.js +97 -97
  374. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  375. package/dist/components/pro/RichTextEditor/CommentDialog.js +88 -88
  376. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  377. package/dist/components/pro/RichTextEditor/CommentPanel.js +240 -240
  378. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  379. package/dist/components/pro/RichTextEditor/CommentPopover.js +234 -234
  380. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  381. package/dist/components/pro/RichTextEditor/ContextMenu.js +251 -252
  382. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  383. package/dist/components/pro/RichTextEditor/RichTextEditor.js +267 -271
  384. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  385. package/dist/components/pro/RichTextEditor/SlashMenu.js +214 -214
  386. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  387. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -75
  388. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  389. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +261 -261
  390. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  391. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +172 -526
  392. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  393. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js +112 -114
  394. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  395. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +194 -194
  396. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  397. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +970 -973
  398. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  399. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +11 -12
  400. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  401. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +310 -344
  402. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  403. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +38 -39
  404. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
  405. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +620 -625
  406. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  407. package/dist/components/pro/RichTextEditor/extensions/FontSize.js +25 -25
  408. package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
  409. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +167 -176
  410. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  411. package/dist/components/pro/RichTextEditor/types.js +75 -75
  412. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  413. package/dist/contexts/AppContext.d.ts +1 -1
  414. package/dist/contexts/AppContext.js +216 -221
  415. package/dist/contexts/AppContext.js.map +1 -1
  416. package/dist/data-table.js +15 -41
  417. package/dist/data-table.js.map +1 -1
  418. package/dist/dishui.css +1 -1
  419. package/dist/flow.js +27 -83
  420. package/dist/hooks/useClickOutside.js +18 -18
  421. package/dist/hooks/useClickOutside.js.map +1 -1
  422. package/dist/hooks/useContainerElement.js +9 -9
  423. package/dist/hooks/useContainerElement.js.map +1 -1
  424. package/dist/hooks/useControllableState.js +33 -35
  425. package/dist/hooks/useControllableState.js.map +1 -1
  426. package/dist/hooks/useCopyToClipboard.js +16 -16
  427. package/dist/hooks/useCopyToClipboard.js.map +1 -1
  428. package/dist/hooks/useDebounce.js +14 -14
  429. package/dist/hooks/useDebounce.js.map +1 -1
  430. package/dist/hooks/useDraggable.js +50 -50
  431. package/dist/hooks/useDraggable.js.map +1 -1
  432. package/dist/hooks/useTableColumns.js +39 -41
  433. package/dist/hooks/useTableColumns.js.map +1 -1
  434. package/dist/hooks/useTableData.js +67 -68
  435. package/dist/hooks/useTableData.js.map +1 -1
  436. package/dist/index-nostyled.d.ts +8 -0
  437. package/dist/index.d.ts +27 -1
  438. package/dist/index.js +105 -241
  439. package/dist/layouts/MainLayout.js +56 -56
  440. package/dist/layouts/MainLayout.js.map +1 -1
  441. package/dist/layouts/Navbar.js +214 -214
  442. package/dist/layouts/Navbar.js.map +1 -1
  443. package/dist/layouts/Sidebar.js +184 -186
  444. package/dist/layouts/Sidebar.js.map +1 -1
  445. package/dist/layouts/headbar/Headbar.js +25 -25
  446. package/dist/layouts/headbar/Headbar.js.map +1 -1
  447. package/dist/layouts/headbar/HeadbarLangSwitcher.js +39 -39
  448. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  449. package/dist/layouts/headbar/HeadbarSearch.js +120 -120
  450. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  451. package/dist/layouts/headbar/HeadbarThemeSwitcher.js +27 -27
  452. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  453. package/dist/layouts/headbar/HeadbarTitle.js +26 -26
  454. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  455. package/dist/lite.js +9 -24
  456. package/dist/markdown.js +4 -9
  457. package/dist/pages/components/Calendar/index.d.ts +3 -0
  458. package/dist/pages/components/Calendar/index.en.d.ts +3 -0
  459. package/dist/pages/components/Calendar/index.zh.d.ts +3 -0
  460. package/dist/pages/components/Chat/index.d.ts +3 -0
  461. package/dist/pages/components/Chat/index.en.d.ts +3 -0
  462. package/dist/pages/components/Chat/index.zh.d.ts +3 -0
  463. package/dist/pages/components/FloatWindow/index.d.ts +3 -0
  464. package/dist/pages/components/FloatWindow/index.en.d.ts +3 -0
  465. package/dist/pages/components/FloatWindow/index.zh.d.ts +3 -0
  466. package/dist/pages/components/Gantt/index.d.ts +3 -0
  467. package/dist/pages/components/Gantt/index.en.d.ts +3 -0
  468. package/dist/pages/components/Gantt/index.zh.d.ts +3 -0
  469. package/dist/pages/components/GridLayout/index.d.ts +3 -0
  470. package/dist/pages/components/GridLayout/index.en.d.ts +3 -0
  471. package/dist/pages/components/GridLayout/index.zh.d.ts +3 -0
  472. package/dist/pages/components/Notification/index.d.ts +3 -0
  473. package/dist/pages/components/Notification/index.en.d.ts +3 -0
  474. package/dist/pages/components/Notification/index.zh.d.ts +3 -0
  475. package/dist/pages/components/Resizable/index.d.ts +3 -0
  476. package/dist/pages/components/Resizable/index.en.d.ts +3 -0
  477. package/dist/pages/components/Resizable/index.zh.d.ts +3 -0
  478. package/dist/pages/components/Tab/index.d.ts +3 -0
  479. package/dist/pages/components/Tab/index.en.d.ts +3 -0
  480. package/dist/pages/components/Tab/index.zh.d.ts +3 -0
  481. package/dist/styles/themeStyles.js +87 -86
  482. package/dist/styles/themeStyles.js.map +1 -1
  483. package/dist/utils/cn.d.ts +13 -0
  484. package/dist/utils/cn.js +16 -0
  485. package/dist/utils/cn.js.map +1 -0
  486. package/dist/utils/i18n.js +690 -602
  487. package/dist/utils/i18n.js.map +1 -1
  488. package/dist/utils/menu.js +94 -94
  489. package/dist/utils/menu.js.map +1 -1
  490. package/dist/utils/rehype-code-meta.js +14 -14
  491. package/dist/utils/rehype-code-meta.js.map +1 -1
  492. package/dist/utils/remark-code-meta.js +9 -9
  493. package/dist/utils/remark-code-meta.js.map +1 -1
  494. package/dist/utils/routerBuilder.js +59 -60
  495. package/dist/utils/routerBuilder.js.map +1 -1
  496. package/dist/utils/selection.js +28 -29
  497. package/dist/utils/selection.js.map +1 -1
  498. package/dist/utils/themes.js +275 -255
  499. package/dist/utils/themes.js.map +1 -1
  500. package/package.json +19 -6
@@ -1 +1 @@
1
- {"version":3,"file":"InspectorPanel.js","names":[],"sources":["../../../../../src/components/pro/Flow/panels/InspectorPanel.tsx"],"sourcesContent":["import React, { useMemo, useRef, useState } from 'react';\nimport Input from '../../../Input';\nimport Select from '../../../Select';\nimport Button from '../../../Button';\nimport Label from '../../../Label';\nimport Checkbox from '../../../Checkbox';\nimport { useFlowUI } from '../context/FlowUIContext';\nimport { useFlowContext } from '../context/FlowContext';\nimport { useDraggablePanel } from '../hooks/useDraggablePanel';\nimport { useResizablePanel } from '../hooks/useResizablePanel';\nimport { EDGE_LINE_STYLE_OPTIONS, EDGE_MARKER_OPTIONS, BORDER_STYLE_OPTIONS, EDGE_TYPE_OPTIONS, DEFAULT_NODE_DATA } from '../constants';\nimport { generateId } from '../nodes/nodeUtils';\nimport { getAllSvgIcons, getSvgIcon, getSvgIconsByCategory, SVG_ICON_CATEGORIES, buildSvgMarkup, type SvgIconCategory } from '../nodes/svgIcons';\nimport { BORDER_SIDE_NAMES, BORDER_SIDE_TYPES, hasBorderSideOverrides, type BorderSideName } from '../nodes/shapes';\nimport { FLOW_NODE_TYPES, type FlowNode, type FlowEdge, type FlowLine, type FlowShapeType, type FlowBorderSideOverride } from '../types';\nimport { THEME_SYNC_TOKEN, COMMON_COLORS, isThemeToken, themeTokenCssVar, resolveThemeColor, type ThemeColorFieldKind } from '../utils/themeColor';\nimport { DataInspectorSection } from './DataInspectorSection';\nimport { ExpandableTextarea } from './ExpandableTextarea';\nimport {\n ARCHIFY_COMPONENT_ORDER,\n ARCHIFY_COMPONENT_LABELS,\n COMPONENT_STYLES,\n archifyStylePatch,\n} from '../archify';\n\n/**\n * Standalone panel (legacy). Prefer using InspectorPanelContent inside a FlowPanelGroup.\n */\nexport default function InspectorPanel() {\n const { showInspector } = useFlowUI();\n const { panelStyle, handleProps } = useDraggablePanel();\n const { panelWidth, resizeHandleProps } = useResizablePanel('left', 240);\n\n if (!showInspector) return null;\n\n return (\n <div className=\"flow-inspector\" data-flow-panel style={{ ...panelStyle, width: panelWidth }}>\n <div className=\"flow-panel-resize-handle flow-panel-resize-handle--left\" {...resizeHandleProps} />\n <div\n className=\"flow-panel-drag-handle\"\n {...handleProps}\n style={{ fontSize: 11, fontWeight: 600, marginBottom: 8, color: 'color-mix(in oklch, var(--color-base-content) 50%, transparent)', textTransform: 'uppercase', letterSpacing: '0.05em', cursor: 'grab' }}\n >\n Inspector\n </div>\n <div className=\"flow-inspector-content\">\n <InspectorPanelContent />\n </div>\n </div>\n );\n}\n\n/** Reusable content for embedding inside FlowPanelGroup tabs. */\nexport function InspectorPanelContent() {\n const { currentCanvas, selection, setSelection, setDoc, currentCanvasId } = useFlowContext();\n\n const selectedNodes = useMemo(\n () => currentCanvas.nodes.filter(n => selection.nodeIds.has(n.id)),\n [currentCanvas.nodes, selection.nodeIds],\n );\n const selectedEdges = useMemo(\n () => currentCanvas.edges.filter(e => selection.edgeIds.has(e.id)),\n [currentCanvas.edges, selection.edgeIds],\n );\n const selectedLines = useMemo(\n () => currentCanvas.lines.filter(l => selection.lineIds.has(l.id)),\n [currentCanvas.lines, selection.lineIds],\n );\n\n const hasSelection = selectedNodes.length > 0 || selectedEdges.length > 0 || selectedLines.length > 0;\n const singleIsGroup = selectedNodes.length === 1 && (selectedNodes[0].type === 'flowGroup' || selectedNodes[0].type === 'geometryGroup' || selectedNodes[0].data.isGroup);\n\n const totalSelected = selectedNodes.length + selectedLines.length;\n\n const handleGroup = (type: 'flowGroup' | 'geometryGroup' = 'flowGroup') => {\n if (totalSelected < 2) return;\n const PAD = 20;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of selectedNodes) {\n minX = Math.min(minX, n.position.x);\n minY = Math.min(minY, n.position.y);\n maxX = Math.max(maxX, n.position.x + n.width);\n maxY = Math.max(maxY, n.position.y + n.height);\n }\n for (const l of selectedLines) {\n for (const p of l.points) {\n minX = Math.min(minX, p.x); minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x); maxY = Math.max(maxY, p.y);\n }\n }\n const isGeo = type === 'geometryGroup';\n const groupId = generateId('group');\n const groupNode: FlowNode = {\n id: groupId,\n type,\n position: { x: minX - PAD, y: minY - PAD },\n width: maxX - minX + PAD * 2,\n height: maxY - minY + PAD * 2,\n data: {\n ...DEFAULT_NODE_DATA,\n label: isGeo ? 'Geo Group' : 'Group',\n fill: isGeo ? '#fefce8' : '#f0f9ff',\n stroke: '#9ca3af', strokeWidth: 1.5,\n borderStyle: isGeo ? 'dashed' : 'dotted',\n isGroup: true,\n },\n };\n const nIds = selection.nodeIds;\n const lIds = selection.lineIds;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: { ...prev.canvases, [currentCanvasId]: {\n ...canvas,\n nodes: isGeo\n ? [groupNode, ...canvas.nodes]\n : [groupNode, ...canvas.nodes.map(n => nIds.has(n.id) ? { ...n, parentId: groupId } : n)],\n lines: isGeo\n ? canvas.lines\n : canvas.lines.map(l => lIds.has(l.id) ? { ...l, parentId: groupId } : l),\n }},\n };\n });\n setSelection({ nodeIds: new Set([groupId]), edgeIds: new Set(), lineIds: new Set() });\n };\n\n const handleUngroup = () => {\n const groupIds = new Set<string>();\n const childNodeIds = new Set<string>();\n const childLineIds = new Set<string>();\n for (const n of selectedNodes) {\n if (n.type === 'flowGroup' || n.type === 'geometryGroup' || n.data.isGroup) groupIds.add(n.id);\n }\n if (groupIds.size === 0) return;\n for (const n of currentCanvas.nodes) {\n if (n.parentId && groupIds.has(n.parentId)) childNodeIds.add(n.id);\n }\n for (const l of currentCanvas.lines) {\n if (l.parentId && groupIds.has(l.parentId)) childLineIds.add(l.id);\n }\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: { ...prev.canvases, [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes\n .filter(n => !groupIds.has(n.id))\n .map(n => childNodeIds.has(n.id) ? { ...n, parentId: undefined } : n),\n lines: canvas.lines\n .map(l => childLineIds.has(l.id) ? { ...l, parentId: undefined } : l),\n }},\n };\n });\n setSelection({ nodeIds: childNodeIds, edgeIds: new Set(), lineIds: childLineIds });\n };\n\n const changeNodeZIndex = (mode: 'front' | 'back' | 'up' | 'down') => {\n const ids = selection.nodeIds;\n if (ids.size === 0) return;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n const allZ = canvas.nodes.map(n => n.zIndex ?? 0);\n const maxZ = allZ.length > 0 ? Math.max(...allZ) : 0;\n const minZ = allZ.length > 0 ? Math.min(...allZ) : 0;\n const nodes = canvas.nodes.map(n => {\n if (!ids.has(n.id)) return n;\n const z = n.zIndex ?? 0;\n let newZ = z;\n if (mode === 'front') newZ = maxZ + 1;\n else if (mode === 'back') newZ = minZ - 1;\n else if (mode === 'up') newZ = z + 1;\n else if (mode === 'down') newZ = z - 1;\n return { ...n, zIndex: newZ };\n });\n return { ...prev, canvases: { ...prev.canvases, [currentCanvasId]: { ...canvas, nodes } } };\n });\n };\n\n const changeLineZIndex = (mode: 'front' | 'back' | 'up' | 'down') => {\n const ids = selection.lineIds;\n if (ids.size === 0) return;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n const allZ = canvas.lines.map(l => l.zIndex ?? 0);\n const maxZ = allZ.length > 0 ? Math.max(...allZ) : 0;\n const minZ = allZ.length > 0 ? Math.min(...allZ) : 0;\n const lines = canvas.lines.map(l => {\n if (!ids.has(l.id)) return l;\n const z = l.zIndex ?? 0;\n let newZ = z;\n if (mode === 'front') newZ = maxZ + 1;\n else if (mode === 'back') newZ = minZ - 1;\n else if (mode === 'up') newZ = z + 1;\n else if (mode === 'down') newZ = z - 1;\n return { ...l, zIndex: newZ };\n });\n return { ...prev, canvases: { ...prev.canvases, [currentCanvasId]: { ...canvas, lines } } };\n });\n };\n\n const updateNodeData = (nodeId: string, key: string, value: any) => {\n updateNodeDataBatch(nodeId, { [key]: value });\n };\n\n const updateNodeDataBatch = (nodeId: string, values: Record<string, any>) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.map(n =>\n n.id === nodeId ? { ...n, data: { ...n.data, ...values } } : n,\n ),\n },\n },\n };\n });\n };\n\n const updateNodeDimension = (nodeId: string, key: 'width' | 'height', value: number) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.map(n =>\n n.id === nodeId ? { ...n, [key]: value } : n,\n ),\n },\n },\n };\n });\n };\n\n const updateEdgeData = (edgeId: string, key: string, value: any) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n edges: canvas.edges.map(e =>\n e.id === edgeId ? { ...e, data: { ...e.data, [key]: value } } : e,\n ),\n },\n },\n };\n });\n };\n\n const updateNodeType = (nodeId: string, type: FlowShapeType) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.map(node => node.id === nodeId ? { ...node, type } : node),\n },\n },\n };\n });\n };\n\n const updateEdgeType = (edgeId: string, type: string) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n edges: canvas.edges.map(e =>\n e.id === edgeId ? { ...e, type: type as any } : e,\n ),\n },\n },\n };\n });\n };\n\n const updateLineData = (lineId: string, key: string, value: any) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n lines: canvas.lines.map(l =>\n l.id === lineId ? { ...l, [key]: value } : l,\n ),\n },\n },\n };\n });\n };\n\n return (\n <>\n {!hasSelection && (\n <div style={{ fontSize: 12, color: 'color-mix(in oklch, var(--color-base-content) 40%, transparent)', textAlign: 'center', padding: '20px 0' }}>\n Select an element to inspect\n </div>\n )}\n\n {selectedNodes.length === 1 && (\n <NodeInspector\n node={selectedNodes[0]}\n isGroup={singleIsGroup}\n onUpdateData={updateNodeData}\n onUpdateDataBatch={updateNodeDataBatch}\n onUpdateDimension={updateNodeDimension}\n onUpdateType={updateNodeType}\n />\n )}\n {totalSelected > 1 && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Selection</div>\n <div style={{ fontSize: 12, color: 'color-mix(in oklch, var(--color-base-content) 50%, transparent)', marginBottom: 8 }}>\n {selectedNodes.length > 0 && `${selectedNodes.length} node${selectedNodes.length > 1 ? 's' : ''}`}\n {selectedNodes.length > 0 && selectedLines.length > 0 && ', '}\n {selectedLines.length > 0 && `${selectedLines.length} line${selectedLines.length > 1 ? 's' : ''}`}\n {' selected'}\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, width: '100%' }}>\n <Button size=\"xs\" onClick={() => handleGroup('flowGroup')} block>\n Group (⌘G)\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => handleGroup('geometryGroup')} block>\n Geo Group (⌘⌥G)\n </Button>\n </div>\n </div>\n )}\n {singleIsGroup && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">\n {selectedNodes[0].type === 'geometryGroup' ? 'Geometry Group' : 'Group'}\n </div>\n <div style={{ fontSize: 11, color: 'color-mix(in oklch, var(--color-base-content) 45%, transparent)', marginBottom: 6 }}>\n {selectedNodes[0].type === 'geometryGroup'\n ? 'Auto-binds spatially contained nodes'\n : 'Explicit membership via add/remove'}\n </div>\n <Button size=\"xs\" variant=\"ghost\" onClick={handleUngroup} block>\n Ungroup (⌘⇧G)\n </Button>\n </div>\n )}\n\n {selectedNodes.length > 0 && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Layer</div>\n <div style={{ display: 'flex', gap: 4 }}>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeNodeZIndex('front')}>\n <span title=\"Bring to Front (⌘⇧↑)\">⤒</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeNodeZIndex('up')}>\n <span title=\"Bring Forward (⌘↑)\">↑</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeNodeZIndex('down')}>\n <span title=\"Send Backward (⌘↓)\">↓</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeNodeZIndex('back')}>\n <span title=\"Send to Back (⌘⇧↓)\">⤓</span>\n </Button>\n </div>\n </div>\n )}\n\n {selectedEdges.length === 1 && (\n <EdgeInspector\n edge={selectedEdges[0]}\n onUpdateData={updateEdgeData}\n onUpdateType={updateEdgeType}\n />\n )}\n\n {selectedLines.length === 1 && (\n <>\n <LineInspector\n line={selectedLines[0]}\n onUpdateData={updateLineData}\n />\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Layer</div>\n <div style={{ display: 'flex', gap: 4 }}>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeLineZIndex('front')}>\n <span title=\"Bring to Front\">⤒</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeLineZIndex('up')}>\n <span title=\"Bring Forward\">↑</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeLineZIndex('down')}>\n <span title=\"Send Backward\">↓</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeLineZIndex('back')}>\n <span title=\"Send to Back\">⤓</span>\n </Button>\n </div>\n </div>\n </>\n )}\n </>\n );\n}\n\n/**\n * A color field for Flow node/edge styling. Layout (left → right):\n * 1. Theme-sync swatch — follows the active theme (per-field role), the\n * default choice for new shapes.\n * 2. Common colors — 黑白赤橙黄绿青蓝紫粉.\n * 3. Custom picker — arbitrary color from the OS color dialog.\n * (Optional) Transparent — for fill/stroke.\n * Every swatch shows a descriptive tooltip on hover.\n */\nfunction ThemeColorField({\n value,\n onChange,\n kind,\n allowTransparent,\n customFallback = '#ffffff',\n}: {\n value: string | undefined;\n onChange: (value: string) => void;\n kind: ThemeColorFieldKind;\n allowTransparent?: boolean;\n customFallback?: string;\n}) {\n const syncToken = THEME_SYNC_TOKEN[kind];\n const syncCssVar = themeTokenCssVar(syncToken) ?? 'var(--color-base-content)';\n\n const rawValue = value ?? '';\n const lowerValue = rawValue.toLowerCase();\n const valueIsToken = isThemeToken(rawValue);\n const isTransparent = rawValue === 'transparent';\n const isCommon = COMMON_COLORS.some((c) => c.value.toLowerCase() === lowerValue);\n const isSync = rawValue === syncToken;\n const isCustom = !!rawValue && !valueIsToken && !isTransparent && !isCommon;\n const pickerValue = isCustom ? rawValue : customFallback;\n\n return (\n <div className=\"flow-color-field\">\n {/* 1. 主题同步色 */}\n <button\n type=\"button\"\n title=\"跟随主题切换\"\n aria-label=\"跟随主题切换\"\n className={`flow-color-swatch flow-color-swatch--sync${isSync ? ' is-active' : ''}`}\n style={{ background: syncCssVar }}\n onClick={() => onChange(syncToken)}\n />\n\n <span className=\"flow-color-divider\" />\n\n {/* 2. 常用颜色 */}\n {COMMON_COLORS.map((c) => (\n <button\n key={c.value}\n type=\"button\"\n title={c.label}\n aria-label={c.label}\n className={`flow-color-swatch${!valueIsToken && !isTransparent && lowerValue === c.value.toLowerCase() ? ' is-active' : ''}`}\n style={{ background: c.value }}\n onClick={() => onChange(c.value)}\n />\n ))}\n\n <span className=\"flow-color-divider\" />\n\n {/* 3. 自定义取色 */}\n <label\n className={`flow-color-swatch flow-color-swatch--custom${isCustom ? ' is-active' : ''}`}\n title=\"自定义颜色\"\n style={isCustom ? { background: rawValue } : undefined}\n >\n <input\n type=\"color\"\n value={pickerValue}\n onChange={(e) => onChange(e.target.value)}\n />\n </label>\n\n {/* 可选:透明 */}\n {allowTransparent && (\n <button\n type=\"button\"\n title=\"透明\"\n aria-label=\"透明\"\n className={`flow-color-swatch flow-color-swatch--transparent${isTransparent ? ' is-active' : ''}`}\n onClick={() => onChange('transparent')}\n />\n )}\n </div>\n );\n}\n\n/** Data-URL preview of a registry icon for picker thumbnails. */\nfunction titleIconThumbUrl(id: string): string {\n const def = getSvgIcon(id);\n const brand = resolveThemeColor(def?.brandColor, '') || '#475569';\n const markup = buildSvgMarkup(id, brand);\n return markup ? `data:image/svg+xml;utf8,${encodeURIComponent(markup)}` : '';\n}\n\n/** Configure the optional glyph rendered beside a shape node's title text:\n * pick from the built-in registry, then side / size / color. */\nfunction TitleIconSection({\n node,\n onUpdateData,\n}: {\n node: FlowNode;\n onUpdateData: (id: string, key: string, value: any) => void;\n}) {\n const [cat, setCat] = useState<SvgIconCategory>('lang');\n const icons = useMemo(() => getSvgIconsByCategory(cat), [cat]);\n const current = node.data.titleIcon ?? '';\n const side = node.data.titleIconSide ?? 'left';\n return (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Title Icon</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Icon</Label>\n <div style={{ display: 'flex', gap: 4, alignItems: 'center', flex: 1, minWidth: 0 }}>\n <Select\n options={SVG_ICON_CATEGORIES.map(c => ({ value: c.id, label: c.label }))}\n value={cat}\n onChange={(v) => setCat(v as SvgIconCategory)}\n style={{ fontSize: 12, flex: 1, minWidth: 0 }}\n />\n <Button\n size=\"xs\"\n variant={current ? 'ghost' : 'primary'}\n square\n onClick={() => onUpdateData(node.id, 'titleIcon', undefined)}\n >\n <span title=\"移除标题图标\">✕</span>\n </Button>\n </div>\n </div>\n {current && !icons.some(ic => ic.id === current) && (\n <div style={{ fontSize: 10, opacity: 0.55, marginBottom: 4 }}>\n 当前图标在其他分类\n </div>\n )}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(22px, 1fr))',\n gap: 3,\n maxHeight: 92,\n overflowY: 'auto',\n padding: 3,\n border: '1px solid color-mix(in oklch, var(--color-base-content) 14%, transparent)',\n borderRadius: 6,\n marginBottom: 6,\n }}\n >\n {icons.map((ic) => {\n const url = titleIconThumbUrl(ic.id);\n const active = current === ic.id;\n return (\n <button\n key={ic.id}\n type=\"button\"\n title={ic.label}\n aria-label={ic.label}\n onClick={() => onUpdateData(node.id, 'titleIcon', ic.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 22,\n height: 22,\n borderRadius: 4,\n cursor: 'pointer',\n padding: 0,\n border: active ? '1.5px solid var(--color-primary)' : '1px solid transparent',\n background: active ? 'color-mix(in oklch, var(--color-primary) 12%, transparent)' : 'transparent',\n }}\n >\n {url && <img src={url} width={16} height={16} alt=\"\" style={{ objectFit: 'contain' }} />}\n </button>\n );\n })}\n </div>\n {current && (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Side</Label>\n <Select\n options={[\n { value: 'left', label: 'left' },\n { value: 'right', label: 'right' },\n ]}\n value={side}\n onChange={(v) => onUpdateData(node.id, 'titleIconSide', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Size</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.titleIconSize ?? Math.max(8, Math.round(node.data.fontSize * 1.15)))}\n onChange={(e) => onUpdateData(node.id, 'titleIconSize', Math.max(8, Number(e.target.value) || 8))}\n />\n <span className=\"flow-inspector-suffix\" style={{ fontSize: 10, opacity: 0.5 }}>px</span>\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Color</Label>\n <ThemeColorField\n value={node.data.titleIconColor\n ?? getSvgIcon(current)?.brandColor\n ?? node.data.labelColor\n ?? node.data.color}\n kind=\"stroke\"\n customFallback=\"#334155\"\n onChange={(v) => onUpdateData(node.id, 'titleIconColor', v)}\n />\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction NodeInspector({\n node,\n isGroup,\n onUpdateData,\n onUpdateDataBatch,\n onUpdateDimension,\n onUpdateType,\n}: {\n node: FlowNode;\n isGroup?: boolean;\n onUpdateData: (id: string, key: string, value: any) => void;\n onUpdateDataBatch: (id: string, values: Record<string, any>) => void;\n onUpdateDimension: (id: string, key: 'width' | 'height', value: number) => void;\n onUpdateType: (id: string, type: FlowShapeType) => void;\n}) {\n return (\n <>\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Node</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Label</Label>\n <Input\n size=\"xs\"\n value={node.data.label}\n onChange={(e) => onUpdateData(node.id, 'label', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Type</Label>\n <Select\n options={FLOW_NODE_TYPES.map(type => ({ value: type, label: type }))}\n value={node.type}\n onChange={(value) => onUpdateType(node.id, value as FlowShapeType)}\n style={{ fontSize: 12 }}\n />\n </div>\n </div>\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Size</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">W</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(Math.round(node.width * 100) / 100)}\n onChange={(e) => onUpdateDimension(node.id, 'width', Number(e.target.value) || node.width)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">H</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(Math.round(node.height * 100) / 100)}\n onChange={(e) => onUpdateDimension(node.id, 'height', Number(e.target.value) || node.height)}\n />\n </div>\n </div>\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Style</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Fill</Label>\n <ThemeColorField\n value={node.data.fill}\n kind=\"fill\"\n allowTransparent\n customFallback=\"#ffffff\"\n onChange={(v) => onUpdateData(node.id, 'fill', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Stroke</Label>\n <ThemeColorField\n value={node.data.stroke}\n kind=\"stroke\"\n allowTransparent\n customFallback=\"#000000\"\n onChange={(v) => onUpdateData(node.id, 'stroke', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Font</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.fontSize)}\n onChange={(e) => onUpdateData(node.id, 'fontSize', Number(e.target.value) || 14)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Color</Label>\n <ThemeColorField\n value={node.data.color}\n kind=\"text\"\n customFallback=\"#111827\"\n onChange={(v) => onUpdateData(node.id, 'color', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Font Color</Label>\n <ThemeColorField\n value={node.data.labelColor ?? node.data.color}\n kind=\"text\"\n customFallback=\"#111827\"\n onChange={(v) => onUpdateData(node.id, 'labelColor', v)}\n />\n </div>\n {node.type !== 'shapeSvg' && node.type !== 'mediaNode' && (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Text Pos</Label>\n <Select\n options={[\n { value: 'center', label: 'center' },\n { value: 'top', label: 'top' },\n { value: 'bottom', label: 'bottom' },\n { value: 'left', label: 'left' },\n { value: 'right', label: 'right' },\n { value: 'top-left', label: 'top-left' },\n { value: 'top-right', label: 'top-right' },\n { value: 'bottom-left', label: 'bottom-left' },\n { value: 'bottom-right', label: 'bottom-right' },\n ]}\n value={node.data.textPlacement ?? ((isGroup || node.type === 'animAnchor') ? 'top' : 'center')}\n onChange={(v) => onUpdateData(node.id, 'textPlacement', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Text Off X</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.labelOffsetX ?? 0)}\n onChange={(e) => onUpdateData(node.id, 'labelOffsetX', Number(e.target.value) || 0)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Text Off Y</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.labelOffsetY ?? 0)}\n onChange={(e) => onUpdateData(node.id, 'labelOffsetY', Number(e.target.value) || 0)}\n />\n </div>\n </>\n )}\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Border</Label>\n <Select\n options={[{ value: 'none', label: 'none' }, ...BORDER_STYLE_OPTIONS.map(s => ({ value: s, label: s }))]}\n value={node.data.borderStyle ?? (isGroup ? (node.type === 'geometryGroup' ? 'dashed' : 'dotted') : 'solid')}\n onChange={(v) => onUpdateData(node.id, 'borderStyle', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n {BORDER_SIDE_TYPES.has(node.type) && (() => {\n const sides = node.data.borderSides ?? {};\n const updateSide = (name: BorderSideName, patch: Partial<FlowBorderSideOverride>) => {\n onUpdateData(node.id, 'borderSides', {\n ...(node.data.borderSides ?? {}),\n [name]: { ...(node.data.borderSides?.[name] ?? {}), ...patch },\n });\n };\n const sideLabels: Record<BorderSideName, string> = { top: 'Top', right: 'Right', bottom: 'Bottom', left: 'Left' };\n return (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Sides</Label>\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, flex: 1 }}>\n <span style={{ fontSize: 10, opacity: 0.55 }}>上下左右独立边框</span>\n {hasBorderSideOverrides(node.data, node.type) && (\n <span title=\"恢复与 Border 设置一致\" style={{ display: 'inline-flex' }}>\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={() => onUpdateData(node.id, 'borderSides', undefined)}\n >\n 重置\n </Button>\n </span>\n )}\n </div>\n </div>\n {BORDER_SIDE_NAMES.map((name) => {\n const override = sides[name];\n return (\n <div key={name} style={{ display: 'flex', alignItems: 'center', gap: 4, marginBottom: 4 }}>\n <span\n title={`独立设置${sideLabels[name]}边`}\n style={{ fontSize: 10, width: 40, flexShrink: 0, opacity: override ? 0.95 : 0.6 }}\n >\n {sideLabels[name]}\n </span>\n <span title={`显示/隐藏 ${sideLabels[name]} 边`} style={{ display: 'inline-flex' }}>\n <Checkbox\n size=\"sm\"\n checked={override?.visible ?? true}\n onChange={(v) => updateSide(name, { visible: v })}\n />\n </span>\n <ThemeColorField\n value={override?.color ?? node.data.stroke}\n kind=\"stroke\"\n customFallback=\"#334155\"\n onChange={(v) => updateSide(name, { color: v })}\n />\n <span title={`${sideLabels[name]} 粗细`} style={{ display: 'inline-flex', width: 52 }}>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(override?.width ?? node.data.strokeWidth)}\n onChange={(e) => updateSide(name, { width: Math.max(0, Number(e.target.value) || 0) })}\n />\n </span>\n </div>\n );\n })}\n </>\n );\n })()}\n {node.type === 'shapeSvg' && (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Icon</Label>\n <Select\n options={getAllSvgIcons().map(icon => ({ value: icon.id, label: icon.label }))}\n value={node.data.svgId ?? ''}\n placeholder=\"选择图标\"\n onChange={(value) => {\n const icon = getSvgIcon(String(value));\n onUpdateDataBatch(node.id, {\n svgId: value,\n ...(icon?.brandColor ? { color: icon.brandColor } : {}),\n ...(!node.data.label || node.data.label === 'Text' ? { label: icon?.label ?? String(value) } : {}),\n });\n }}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Box</Label>\n <Checkbox\n size=\"sm\"\n checked={node.data.iconBox ?? false}\n onChange={(v) => onUpdateData(node.id, 'iconBox', v)}\n label=\"显示边框\"\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Label</Label>\n <Select\n options={[\n { value: 'top', label: 'top' },\n { value: 'middle', label: 'middle' },\n { value: 'bottom', label: 'bottom' },\n { value: 'left', label: 'left' },\n { value: 'right', label: 'right' },\n ]}\n value={node.data.labelPlacement === ('above' as any)\n ? 'top'\n : node.data.labelPlacement === ('center' as any)\n ? 'middle'\n : node.data.labelPlacement === ('below' as any)\n ? 'bottom'\n : (node.data.labelPlacement ?? 'bottom')}\n onChange={(v) => onUpdateData(node.id, 'labelPlacement', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Offset X</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.labelOffsetX ?? 0)}\n onChange={(event) => onUpdateData(node.id, 'labelOffsetX', Number(event.target.value) || 0)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Offset Y</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.labelOffsetY ?? 0)}\n onChange={(event) => onUpdateData(node.id, 'labelOffsetY', Number(event.target.value) || 0)}\n />\n </div>\n </>\n )}\n\n </div>\n {node.type === 'mediaNode' && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Palette (Archify)</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Palette</Label>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {ARCHIFY_COMPONENT_ORDER.map((kind) => (\n <button\n key={kind}\n type=\"button\"\n title={ARCHIFY_COMPONENT_LABELS[kind]}\n aria-label={ARCHIFY_COMPONENT_LABELS[kind]}\n onClick={() => onUpdateDataBatch(node.id, archifyStylePatch(kind))}\n style={{\n width: 18,\n height: 18,\n borderRadius: 4,\n cursor: 'pointer',\n background: COMPONENT_STYLES[kind].fill,\n border: `1.5px solid ${COMPONENT_STYLES[kind].stroke}`,\n }}\n />\n ))}\n </div>\n </div>\n </div>\n )}\n {node.type !== 'mediaNode' && node.type !== 'shapeSvg' && (\n <TitleIconSection node={node} onUpdateData={onUpdateData} />\n )}\n {node.type !== 'mediaNode' && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Card (Archify)</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Subtitle</Label>\n <Input\n size=\"xs\"\n value={node.data.sublabel ?? ''}\n placeholder=\"secondary line\"\n onChange={(e) => onUpdateData(node.id, 'sublabel', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Sub Color</Label>\n <ThemeColorField\n value={node.data.sublabelColor ?? '#94a3b8'}\n kind=\"text\"\n customFallback=\"#94a3b8\"\n onChange={(v) => onUpdateData(node.id, 'sublabelColor', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Tag</Label>\n <Input\n size=\"xs\"\n value={node.data.tag ?? ''}\n placeholder=\"corner pill\"\n onChange={(e) => onUpdateData(node.id, 'tag', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Tag Color</Label>\n <ThemeColorField\n value={node.data.tagColor ?? node.data.stroke}\n kind=\"stroke\"\n customFallback=\"#334155\"\n onChange={(v) => onUpdateData(node.id, 'tagColor', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Tag Pos</Label>\n <Select\n options={[\n { value: 'top-left', label: 'top-left' },\n { value: 'top-right', label: 'top-right' },\n { value: 'bottom-left', label: 'bottom-left' },\n { value: 'bottom-right', label: 'bottom-right' },\n ]}\n value={node.data.tagPlacement ?? 'top-right'}\n onChange={(v) => onUpdateData(node.id, 'tagPlacement', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Palette</Label>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {ARCHIFY_COMPONENT_ORDER.map((kind) => (\n <button\n key={kind}\n type=\"button\"\n title={ARCHIFY_COMPONENT_LABELS[kind]}\n aria-label={ARCHIFY_COMPONENT_LABELS[kind]}\n onClick={() => onUpdateDataBatch(node.id, archifyStylePatch(kind))}\n style={{\n width: 18,\n height: 18,\n borderRadius: 4,\n cursor: 'pointer',\n background: COMPONENT_STYLES[kind].fill,\n border: `1.5px solid ${COMPONENT_STYLES[kind].stroke}`,\n }}\n />\n ))}\n </div>\n </div>\n </div>\n )}\n {node.type === 'mediaNode' && (\n <MediaInspectorSection node={node} onUpdateData={onUpdateData} />\n )}\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Transform</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Rotate</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.rotation ?? 0)}\n onChange={(e) => onUpdateData(node.id, 'rotation', Number(e.target.value) || 0)}\n />\n <span className=\"flow-inspector-suffix\" style={{ fontSize: 10, opacity: 0.5 }}>°</span>\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Flip</Label>\n <Button\n size=\"xs\"\n variant={node.data.flipX ? 'primary' : 'ghost'}\n onClick={() => onUpdateData(node.id, 'flipX', !node.data.flipX)}\n square\n >\n <span title=\"Flip Horizontal\">↔</span>\n </Button>\n <Button\n size=\"xs\"\n variant={node.data.flipY ? 'primary' : 'ghost'}\n onClick={() => onUpdateData(node.id, 'flipY', !node.data.flipY)}\n square\n >\n <span title=\"Flip Vertical\">↕</span>\n </Button>\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Quick</Label>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => onUpdateData(node.id, 'rotation', ((node.data.rotation ?? 0) + 90) % 360)}>\n +90°\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => onUpdateData(node.id, 'rotation', ((node.data.rotation ?? 0) - 90 + 360) % 360)}>\n −90°\n </Button>\n </div>\n </div>\n </>\n );\n}\n\nfunction MediaInspectorSection({\n node,\n onUpdateData,\n}: {\n node: FlowNode;\n onUpdateData: (id: string, key: string, value: any) => void;\n}) {\n const kind = node.data.mediaKind ?? 'markdown';\n const ai = node.data.aiConfig;\n const modelFileInputRef = useRef<HTMLInputElement>(null);\n\n const updateAI = (key: string, value: any) => {\n onUpdateData(node.id, 'aiConfig', {\n gateway: '', protocol: 'openai', model: '',\n ...ai,\n [key]: value,\n });\n };\n\n const contentLabels: Record<string, string> = {\n markdown: 'Markdown 源码',\n html: 'HTML 源码',\n mermaid: 'Mermaid 图表',\n math: 'LaTeX 公式',\n };\n\n return (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Media · {kind}</div>\n {kind === 'data' ? (\n <DataInspectorSection node={node} onUpdateData={onUpdateData} />\n ) : kind === 'model3d' ? (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">格式</Label>\n <Select\n options={[\n { value: 'stl', label: 'STL' },\n { value: 'obj', label: 'OBJ' },\n { value: '3mf', label: '3MF' },\n ]}\n value={node.data.modelFormat ?? 'stl'}\n onChange={value => onUpdateData(node.id, 'modelFormat', value)}\n />\n </div>\n <div className=\"flow-inspector-row flow-inspector-multiline\">\n <Label size=\"xs\" className=\"flow-inspector-label\">模型链接</Label>\n <Input\n size=\"xs\"\n value={node.data.mediaContent ?? ''}\n placeholder=\"https://example.com/model.stl\"\n onChange={event => onUpdateData(node.id, 'mediaContent', event.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">本地模型</Label>\n <input\n ref={modelFileInputRef}\n type=\"file\"\n accept=\".stl,.obj,.3mf,model/stl,model/obj,model/3mf,application/vnd.ms-package.3dmanufacturing-3dmodel+xml\"\n hidden\n onChange={event => {\n const file = event.target.files?.[0];\n event.target.value = '';\n if (!file) return;\n if (file.size > 10 * 1024 * 1024) {\n window.alert('本地模型不能超过 10 MiB,请改用模型链接。');\n return;\n }\n const extension = file.name.split('.').pop()?.toLowerCase();\n if (extension !== 'stl' && extension !== 'obj' && extension !== '3mf') {\n window.alert('仅支持 STL、OBJ 和 3MF 模型。');\n return;\n }\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') return;\n onUpdateData(node.id, 'modelFormat', extension);\n onUpdateData(node.id, 'mediaContent', reader.result);\n };\n reader.onerror = () => window.alert('读取本地模型失败。');\n reader.readAsDataURL(file);\n }}\n />\n <Button size=\"xs\" variant=\"neutral\" onClick={() => modelFileInputRef.current?.click()}>\n 选择文件\n </Button>\n {node.data.mediaContent?.startsWith('data:') && (\n <span className=\"flow-inspector-file-status\">已嵌入</span>\n )}\n </div>\n <div className=\"flow-inspector-help\">支持 STL、OBJ、3MF;本地文件将以 Base64 嵌入文档,最大 10 MiB。选中节点后可在内部拖拽旋转、滚轮缩放。</div>\n </>\n ) : kind === 'image' ? (\n <>\n <div className=\"flow-inspector-row flow-inspector-multiline\">\n <Label size=\"xs\" className=\"flow-inspector-label\">图片链接</Label>\n <Input\n size=\"xs\"\n value={node.data.mediaContent ?? ''}\n placeholder=\"https://example.com/image.png\"\n onChange={(event) => onUpdateData(node.id, 'mediaContent', event.target.value)}\n />\n </div>\n <div className=\"flow-inspector-help\">支持 HTTP(S) 链接;选中图片节点后可直接粘贴图片并保存为 Base64。</div>\n </>\n ) : kind !== 'ai' ? (\n <ExpandableTextarea\n label={contentLabels[kind] ?? '内容'}\n value={node.data.mediaContent ?? ''}\n onChange={(value) => onUpdateData(node.id, 'mediaContent', value)}\n rows={8}\n />\n ) : (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">协议</Label>\n <Select\n options={[\n { value: 'openai', label: 'OpenAI 兼容' },\n { value: 'anthropic', label: 'Anthropic 兼容' },\n ]}\n value={ai?.protocol ?? 'openai'}\n onChange={(v) => updateAI('protocol', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 4 }}>\n <Label size=\"xs\" className=\"flow-inspector-label\">接口地址</Label>\n <Input\n size=\"xs\"\n value={ai?.gateway ?? ''}\n placeholder=\"https://api.openai.com/v1/chat/completions\"\n onChange={(e) => updateAI('gateway', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 4 }}>\n <Label size=\"xs\" className=\"flow-inspector-label\">模型</Label>\n <Input\n size=\"xs\"\n value={ai?.model ?? ''}\n placeholder=\"gpt-4o-mini\"\n onChange={(e) => updateAI('model', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 4 }}>\n <Label size=\"xs\" className=\"flow-inspector-label\">API Key</Label>\n <Input\n size=\"xs\"\n type=\"password\"\n value={ai?.apiKey ?? ''}\n placeholder=\"sk-...\"\n onChange={(e) => updateAI('apiKey', e.target.value)}\n />\n </div>\n <ExpandableTextarea\n label=\"System Prompt\"\n value={ai?.systemPrompt ?? ''}\n onChange={(value) => updateAI('systemPrompt', value)}\n rows={3}\n />\n <div style={{ fontSize: 10, color: 'color-mix(in oklch, var(--color-base-content) 45%, transparent)', marginTop: 4 }}>\n 密钥会随文档 JSON 一同导出,请谨慎分享。\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction EdgeInspector({\n edge,\n onUpdateData,\n onUpdateType,\n}: {\n edge: FlowEdge;\n onUpdateData: (id: string, key: string, value: any) => void;\n onUpdateType: (id: string, type: string) => void;\n}) {\n return (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Edge</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Type</Label>\n <Select\n options={EDGE_TYPE_OPTIONS.map(t => ({ value: t, label: t }))}\n value={edge.type}\n onChange={(v) => onUpdateType(edge.id, v as string)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Color</Label>\n <ThemeColorField\n value={edge.data.strokeColor}\n kind=\"line\"\n customFallback=\"#374151\"\n onChange={(v) => onUpdateData(edge.id, 'strokeColor', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Width</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(edge.data.strokeWidth ?? 2)}\n onChange={(e) => onUpdateData(edge.id, 'strokeWidth', Number(e.target.value) || 2)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Animation</Label>\n <Checkbox\n size=\"sm\"\n checked={edge.data.animated ?? false}\n onChange={(value) => onUpdateData(edge.id, 'animated', value)}\n label=\"预览时播放\"\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Line</Label>\n <Select\n options={EDGE_LINE_STYLE_OPTIONS.map(s => ({ value: s, label: s }))}\n value={edge.data.lineStyle ?? 'solid'}\n onChange={(v) => onUpdateData(edge.id, 'lineStyle', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Start</Label>\n <Select\n options={EDGE_MARKER_OPTIONS.map(m => ({ value: m, label: m }))}\n value={edge.data.markerStart ?? 'none'}\n onChange={(v) => onUpdateData(edge.id, 'markerStart', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">End</Label>\n <Select\n options={EDGE_MARKER_OPTIONS.map(m => ({ value: m, label: m }))}\n value={edge.data.markerEnd ?? 'none'}\n onChange={(v) => onUpdateData(edge.id, 'markerEnd', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Label</Label>\n <Input\n size=\"xs\"\n value={edge.data.labelText ?? ''}\n onChange={(e) => onUpdateData(edge.id, 'labelText', e.target.value)}\n placeholder=\"Edge label\"\n />\n </div>\n </div>\n );\n}\n\nfunction LineInspector({\n line,\n onUpdateData,\n}: {\n line: FlowLine;\n onUpdateData: (id: string, key: string, value: any) => void;\n}) {\n return (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Line</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Type</Label>\n <span style={{ fontSize: 12, color: 'color-mix(in oklch, var(--color-base-content) 60%, transparent)' }}>{line.type}</span>\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Color</Label>\n <ThemeColorField\n value={line.strokeColor}\n kind=\"line\"\n customFallback=\"#374151\"\n onChange={(v) => onUpdateData(line.id, 'strokeColor', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Width</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(line.strokeWidth)}\n onChange={(e) => onUpdateData(line.id, 'strokeWidth', Number(e.target.value) || 2)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Style</Label>\n <Select\n options={EDGE_LINE_STYLE_OPTIONS.map(s => ({ value: s, label: s }))}\n value={line.lineStyle}\n onChange={(v) => onUpdateData(line.id, 'lineStyle', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4BA,SAAwB,KAAiB;AACvC,QAAM,EAAE,eAAA,EAAA,IAAkB,GAAU,GAC9B,EAAE,YAAA,GAAY,aAAA,EAAA,IAAgB,GAAkB,GAChD,EAAE,YAAA,GAAY,mBAAA,EAAA,IAAsB,GAAkB,QAAQ,GAAG;AAEvE,SAAK,IAGH,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAiB,mBAAA;AAAA,IAAgB,OAAO;AAAA,MAAE,GAAG;AAAA,MAAY,OAAO;AAAA,IAAW;AAAA,IAA1F,UAAA;AAAA,MACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAA0D,GAAI;AAAA,MAAoB,CAAA;AAAA,MACjG,gBAAA,EAAC,OAAD;AAAA,QACE,WAAU;AAAA,QACV,GAAI;AAAA,QACJ,OAAO;AAAA,UAAE,UAAU;AAAA,UAAI,YAAY;AAAA,UAAK,cAAc;AAAA,UAAG,OAAO;AAAA,UAAmE,eAAe;AAAA,UAAa,eAAe;AAAA,UAAU,QAAQ;AAAA,QAAO;AAAA,QACxM,UAAA;AAAA,MAEI,CAAA;AAAA,MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QACb,UAAA,gBAAA,EAAC,IAAD,CAAwB,CAAA;AAAA,MACrB,CAAA;AAAA,IACF;AAAA,OAfoB;AAiB7B;AAGA,SAAgB,KAAwB;AACtC,QAAM,EAAE,eAAA,GAAe,WAAA,GAAW,cAAA,GAAc,QAAA,GAAQ,iBAAA,EAAA,IAAoB,GAAe,GAErF,IAAgB,EAAA,MACd,EAAc,MAAM,OAAA,CAAO,MAAK,EAAU,QAAQ,IAAI,EAAE,EAAE,CAAC,GACjE,CAAC,EAAc,OAAO,EAAU,OAAO,CACzC,GACM,IAAgB,EAAA,MACd,EAAc,MAAM,OAAA,CAAO,MAAK,EAAU,QAAQ,IAAI,EAAE,EAAE,CAAC,GACjE,CAAC,EAAc,OAAO,EAAU,OAAO,CACzC,GACM,IAAgB,EAAA,MACd,EAAc,MAAM,OAAA,CAAO,MAAK,EAAU,QAAQ,IAAI,EAAE,EAAE,CAAC,GACjE,CAAC,EAAc,OAAO,EAAU,OAAO,CACzC,GAEM,IAAe,EAAc,SAAS,KAAK,EAAc,SAAS,KAAK,EAAc,SAAS,GAC9F,IAAgB,EAAc,WAAW,MAAM,EAAc,CAAA,EAAG,SAAS,eAAe,EAAc,CAAA,EAAG,SAAS,mBAAmB,EAAc,CAAA,EAAG,KAAK,UAE3J,IAAgB,EAAc,SAAS,EAAc,QAErD,IAAA,CAAe,IAAsC,gBAAgB;AACzE,QAAI,IAAgB,EAAG;AACvB,UAAM,IAAM;AACZ,QAAI,IAAO,OAAU,IAAO,OAAU,IAAO,QAAW,IAAO;AAC/D,eAAW,KAAK;AACd,MAAA,IAAO,KAAK,IAAI,GAAM,EAAE,SAAS,CAAC,GAClC,IAAO,KAAK,IAAI,GAAM,EAAE,SAAS,CAAC,GAClC,IAAO,KAAK,IAAI,GAAM,EAAE,SAAS,IAAI,EAAE,KAAK,GAC5C,IAAO,KAAK,IAAI,GAAM,EAAE,SAAS,IAAI,EAAE,MAAM;AAE/C,eAAW,KAAK,EACd,YAAW,KAAK,EAAE;AAChB,MAAA,IAAO,KAAK,IAAI,GAAM,EAAE,CAAC,GAAG,IAAO,KAAK,IAAI,GAAM,EAAE,CAAC,GACrD,IAAO,KAAK,IAAI,GAAM,EAAE,CAAC,GAAG,IAAO,KAAK,IAAI,GAAM,EAAE,CAAC;AAGzD,UAAM,IAAQ,MAAS,iBACjB,IAAU,GAAW,OAAO,GAC5B,IAAsB;AAAA,MAC1B,IAAI;AAAA,MACJ,MAAA;AAAA,MACA,UAAU;AAAA,QAAE,GAAG,IAAO;AAAA,QAAK,GAAG,IAAO;AAAA,MAAI;AAAA,MACzC,OAAO,IAAO,IAAO;AAAA,MACrB,QAAQ,IAAO,IAAO;AAAA,MACtB,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,OAAO,IAAQ,cAAc;AAAA,QAC7B,MAAM,IAAQ,YAAY;AAAA,QAC1B,QAAQ;AAAA,QAAW,aAAa;AAAA,QAChC,aAAa,IAAQ,WAAW;AAAA,QAChC,SAAS;AAAA,MACX;AAAA,IACF,GACM,IAAO,EAAU,SACjB,IAAO,EAAU;AACvB,IAAA,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,aAAK,IACE;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UAAE,GAAG,EAAK;AAAA,UAAW,CAAA,CAAA,GAAkB;AAAA,YAC/C,GAAG;AAAA,YACH,OAAO,IACH,CAAC,GAAW,GAAG,EAAO,KAAK,IAC3B,CAAC,GAAW,GAAG,EAAO,MAAM,IAAA,CAAI,MAAK,EAAK,IAAI,EAAE,EAAE,IAAI;AAAA,cAAE,GAAG;AAAA,cAAG,UAAU;AAAA,YAAQ,IAAI,CAAC,CAAC;AAAA,YAC1F,OAAO,IACH,EAAO,QACP,EAAO,MAAM,IAAA,CAAI,MAAK,EAAK,IAAI,EAAE,EAAE,IAAI;AAAA,cAAE,GAAG;AAAA,cAAG,UAAU;AAAA,YAAQ,IAAI,CAAC;AAAA,UAC5E;AAAA,QAAC;AAAA,MACH,IAZoB;AAAA,IAatB,CAAC,GACD,EAAa;AAAA,MAAE,SAAS,oBAAI,IAAI,CAAC,CAAO,CAAC;AAAA,MAAG,SAAS,oBAAI,IAAI;AAAA,MAAG,SAAS,oBAAI,IAAI;AAAA,IAAE,CAAC;AAAA,EACtF,GAEM,IAAA,MAAsB;AAC1B,UAAM,IAAW,oBAAI,IAAY,GAC3B,IAAe,oBAAI,IAAY,GAC/B,IAAe,oBAAI,IAAY;AACrC,eAAW,KAAK,EACd,EAAI,EAAE,SAAS,eAAe,EAAE,SAAS,mBAAmB,EAAE,KAAK,YAAS,EAAS,IAAI,EAAE,EAAE;AAE/F,QAAI,EAAS,SAAS,GACtB;AAAA,iBAAW,KAAK,EAAc,MAC5B,CAAI,EAAE,YAAY,EAAS,IAAI,EAAE,QAAQ,KAAG,EAAa,IAAI,EAAE,EAAE;AAEnE,iBAAW,KAAK,EAAc,MAC5B,CAAI,EAAE,YAAY,EAAS,IAAI,EAAE,QAAQ,KAAG,EAAa,IAAI,EAAE,EAAE;AAEnE,MAAA,EAAA,CAAO,MAAQ;AACb,cAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,eAAK,IACE;AAAA,UACL,GAAG;AAAA,UACH,UAAU;AAAA,YAAE,GAAG,EAAK;AAAA,YAAW,CAAA,CAAA,GAAkB;AAAA,cAC/C,GAAG;AAAA,cACH,OAAO,EAAO,MACX,OAAA,CAAO,MAAK,CAAC,EAAS,IAAI,EAAE,EAAE,CAAC,EAC/B,IAAA,CAAI,MAAK,EAAa,IAAI,EAAE,EAAE,IAAI;AAAA,gBAAE,GAAG;AAAA,gBAAG,UAAU;AAAA,cAAU,IAAI,CAAC;AAAA,cACtE,OAAO,EAAO,MACX,IAAA,CAAI,MAAK,EAAa,IAAI,EAAE,EAAE,IAAI;AAAA,gBAAE,GAAG;AAAA,gBAAG,UAAU;AAAA,cAAU,IAAI,CAAC;AAAA,YACxE;AAAA,UAAC;AAAA,QACH,IAXoB;AAAA,MAYtB,CAAC,GACD,EAAa;AAAA,QAAE,SAAS;AAAA,QAAc,SAAS,oBAAI,IAAI;AAAA,QAAG,SAAS;AAAA,MAAa,CAAC;AAAA;AAAA,EACnF,GAEM,IAAA,CAAoB,MAA2C;AACnE,UAAM,IAAM,EAAU;AACtB,IAAI,EAAI,SAAS,KACjB,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,UAAI,CAAC,EAAQ,QAAO;AACpB,YAAM,IAAO,EAAO,MAAM,IAAA,CAAI,MAAK,EAAE,UAAU,CAAC,GAC1C,IAAO,EAAK,SAAS,IAAI,KAAK,IAAI,GAAG,CAAI,IAAI,GAC7C,IAAO,EAAK,SAAS,IAAI,KAAK,IAAI,GAAG,CAAI,IAAI,GAC7C,IAAQ,EAAO,MAAM,IAAA,CAAI,MAAK;AAClC,YAAI,CAAC,EAAI,IAAI,EAAE,EAAE,EAAG,QAAO;AAC3B,cAAM,IAAI,EAAE,UAAU;AACtB,YAAI,IAAO;AACX,eAAI,MAAS,UAAS,IAAO,IAAO,IAC3B,MAAS,SAAQ,IAAO,IAAO,IAC/B,MAAS,OAAM,IAAO,IAAI,IAC1B,MAAS,WAAQ,IAAO,IAAI,IAC9B;AAAA,UAAE,GAAG;AAAA,UAAG,QAAQ;AAAA,QAAK;AAAA,MAC9B,CAAC;AACD,aAAO;AAAA,QAAE,GAAG;AAAA,QAAM,UAAU;AAAA,UAAE,GAAG,EAAK;AAAA,UAAW,CAAA,CAAA,GAAkB;AAAA,YAAE,GAAG;AAAA,YAAQ,OAAA;AAAA,UAAM;AAAA,QAAE;AAAA,MAAE;AAAA,IAC5F,CAAC;AAAA,EACH,GAEM,IAAA,CAAoB,MAA2C;AACnE,UAAM,IAAM,EAAU;AACtB,IAAI,EAAI,SAAS,KACjB,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,UAAI,CAAC,EAAQ,QAAO;AACpB,YAAM,IAAO,EAAO,MAAM,IAAA,CAAI,MAAK,EAAE,UAAU,CAAC,GAC1C,IAAO,EAAK,SAAS,IAAI,KAAK,IAAI,GAAG,CAAI,IAAI,GAC7C,IAAO,EAAK,SAAS,IAAI,KAAK,IAAI,GAAG,CAAI,IAAI,GAC7C,IAAQ,EAAO,MAAM,IAAA,CAAI,MAAK;AAClC,YAAI,CAAC,EAAI,IAAI,EAAE,EAAE,EAAG,QAAO;AAC3B,cAAM,IAAI,EAAE,UAAU;AACtB,YAAI,IAAO;AACX,eAAI,MAAS,UAAS,IAAO,IAAO,IAC3B,MAAS,SAAQ,IAAO,IAAO,IAC/B,MAAS,OAAM,IAAO,IAAI,IAC1B,MAAS,WAAQ,IAAO,IAAI,IAC9B;AAAA,UAAE,GAAG;AAAA,UAAG,QAAQ;AAAA,QAAK;AAAA,MAC9B,CAAC;AACD,aAAO;AAAA,QAAE,GAAG;AAAA,QAAM,UAAU;AAAA,UAAE,GAAG,EAAK;AAAA,UAAW,CAAA,CAAA,GAAkB;AAAA,YAAE,GAAG;AAAA,YAAQ,OAAA;AAAA,UAAM;AAAA,QAAE;AAAA,MAAE;AAAA,IAC5F,CAAC;AAAA,EACH,GAEM,IAAA,CAAkB,GAAgB,GAAa,MAAe;AAClE,IAAA,EAAoB,GAAQ,EAAA,CAAG,CAAA,GAAM,EAAM,CAAC;AAAA,EAC9C,GAEM,IAAA,CAAuB,GAAgB,MAAgC;AAC3E,IAAA,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,aAAK,IACE;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,EAAK;AAAA,UACP,CAAA,CAAA,GAAkB;AAAA,YACjB,GAAG;AAAA,YACH,OAAO,EAAO,MAAM,IAAA,CAAI,MACtB,EAAE,OAAO,IAAS;AAAA,cAAE,GAAG;AAAA,cAAG,MAAM;AAAA,gBAAE,GAAG,EAAE;AAAA,gBAAM,GAAG;AAAA,cAAO;AAAA,YAAE,IAAI,CAC/D;AAAA,UACF;AAAA,QACF;AAAA,MACF,IAZoB;AAAA,IAatB,CAAC;AAAA,EACH,GAEM,IAAA,CAAuB,GAAgB,GAAyB,MAAkB;AACtF,IAAA,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,aAAK,IACE;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,EAAK;AAAA,UACP,CAAA,CAAA,GAAkB;AAAA,YACjB,GAAG;AAAA,YACH,OAAO,EAAO,MAAM,IAAA,CAAI,MACtB,EAAE,OAAO,IAAS;AAAA,cAAE,GAAG;AAAA,cAAI,CAAA,CAAA,GAAM;AAAA,YAAM,IAAI,CAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF,IAZoB;AAAA,IAatB,CAAC;AAAA,EACH,GAEM,IAAA,CAAkB,GAAgB,GAAa,MAAe;AAClE,IAAA,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,aAAK,IACE;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,EAAK;AAAA,UACP,CAAA,CAAA,GAAkB;AAAA,YACjB,GAAG;AAAA,YACH,OAAO,EAAO,MAAM,IAAA,CAAI,MACtB,EAAE,OAAO,IAAS;AAAA,cAAE,GAAG;AAAA,cAAG,MAAM;AAAA,gBAAE,GAAG,EAAE;AAAA,gBAAO,CAAA,CAAA,GAAM;AAAA,cAAM;AAAA,YAAE,IAAI,CAClE;AAAA,UACF;AAAA,QACF;AAAA,MACF,IAZoB;AAAA,IAatB,CAAC;AAAA,EACH,GAEM,IAAA,CAAkB,GAAgB,MAAwB;AAC9D,IAAA,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,aAAK,IACE;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,EAAK;AAAA,UACP,CAAA,CAAA,GAAkB;AAAA,YACjB,GAAG;AAAA,YACH,OAAO,EAAO,MAAM,IAAA,CAAI,MAAQ,EAAK,OAAO,IAAS;AAAA,cAAE,GAAG;AAAA,cAAM,MAAA;AAAA,YAAK,IAAI,CAAI;AAAA,UAC/E;AAAA,QACF;AAAA,MACF,IAVoB;AAAA,IAWtB,CAAC;AAAA,EACH,GAEM,IAAA,CAAkB,GAAgB,MAAiB;AACvD,IAAA,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,aAAK,IACE;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,EAAK;AAAA,UACP,CAAA,CAAA,GAAkB;AAAA,YACjB,GAAG;AAAA,YACH,OAAO,EAAO,MAAM,IAAA,CAAI,MACtB,EAAE,OAAO,IAAS;AAAA,cAAE,GAAG;AAAA,cAAS,MAAA;AAAA,YAAY,IAAI,CAClD;AAAA,UACF;AAAA,QACF;AAAA,MACF,IAZoB;AAAA,IAatB,CAAC;AAAA,EACH,GAEM,KAAA,CAAkB,GAAgB,GAAa,MAAe;AAClE,IAAA,EAAA,CAAO,MAAQ;AACb,YAAM,IAAS,EAAK,SAAS,CAAA;AAC7B,aAAK,IACE;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,EAAK;AAAA,UACP,CAAA,CAAA,GAAkB;AAAA,YACjB,GAAG;AAAA,YACH,OAAO,EAAO,MAAM,IAAA,CAAI,MACtB,EAAE,OAAO,IAAS;AAAA,cAAE,GAAG;AAAA,cAAI,CAAA,CAAA,GAAM;AAAA,YAAM,IAAI,CAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF,IAZoB;AAAA,IAatB,CAAC;AAAA,EACH;AAEA,SACE,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,IACG,CAAC,KACA,gBAAA,EAAC,OAAD;AAAA,MAAK,OAAO;AAAA,QAAE,UAAU;AAAA,QAAI,OAAO;AAAA,QAAmE,WAAW;AAAA,QAAU,SAAS;AAAA,MAAS;AAAA,MAAG,UAAA;AAAA,IAE3I,CAAA;AAAA,IAGN,EAAc,WAAW,KACxB,gBAAA,EAAC,IAAD;AAAA,MACE,MAAM,EAAc,CAAA;AAAA,MACpB,SAAS;AAAA,MACT,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,cAAc;AAAA,IACf,CAAA;AAAA,IAEF,IAAgB,KACf,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAA+B,UAAA;AAAA,QAAc,CAAA;AAAA,QAC5D,gBAAA,EAAC,OAAD;AAAA,UAAK,OAAO;AAAA,YAAE,UAAU;AAAA,YAAI,OAAO;AAAA,YAAmE,cAAc;AAAA,UAAE;AAAA,UAAtH,UAAA;AAAA,YACG,EAAc,SAAS,KAAK,GAAG,EAAc,MAAA,QAAc,EAAc,SAAS,IAAI,MAAM,EAAA;AAAA,YAC5F,EAAc,SAAS,KAAK,EAAc,SAAS,KAAK;AAAA,YACxD,EAAc,SAAS,KAAK,GAAG,EAAc,MAAA,QAAc,EAAc,SAAS,IAAI,MAAM,EAAA;AAAA,YAC5F;AAAA,UACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,OAAO;AAAA,YAAE,SAAS;AAAA,YAAQ,eAAe;AAAA,YAAU,KAAK;AAAA,YAAG,OAAO;AAAA,UAAO;AAAA,UAA9E,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAA,MAAe,EAAY,WAAW;AAAA,YAAG,OAAA;AAAA,YAAM,UAAA;AAAA,UAEzD,CAAA,GACR,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAY,eAAe;AAAA,YAAG,OAAA;AAAA,YAAM,UAAA;AAAA,UAE7E,CAAA,CACL;AAAA;MACF;AAAA;IAEN,KACC,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UACZ,UAAA,EAAc,CAAA,EAAG,SAAS,kBAAkB,mBAAmB;AAAA,QAC7D,CAAA;AAAA,QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,OAAO;AAAA,YAAE,UAAU;AAAA,YAAI,OAAO;AAAA,YAAmE,cAAc;AAAA,UAAE;AAAA,UACnH,UAAA,EAAc,CAAA,EAAG,SAAS,kBACvB,yCACA;AAAA,QACD,CAAA;AAAA,QACL,gBAAA,EAAC,GAAD;AAAA,UAAQ,MAAK;AAAA,UAAK,SAAQ;AAAA,UAAQ,SAAS;AAAA,UAAe,OAAA;AAAA,UAAM,UAAA;AAAA,QAExD,CAAA;AAAA,MACL;AAAA;IAGN,EAAc,SAAS,KACtB,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA,CACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAA+B,UAAA;AAAA,MAAU,CAAA,GACxD,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAO;AAAA,UAAE,SAAS;AAAA,UAAQ,KAAK;AAAA,QAAE;AAAA,QAAtC,UAAA;AAAA,UACE,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAiB,OAAO;AAAA,YACvE,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAuB,UAAA;AAAA,YAAO,CAAA;AAAA,UACpC,CAAA;AAAA,UACR,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAiB,IAAI;AAAA,YACpE,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAqB,UAAA;AAAA,YAAO,CAAA;AAAA,UAClC,CAAA;AAAA,UACR,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAiB,MAAM;AAAA,YACtE,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAqB,UAAA;AAAA,YAAO,CAAA;AAAA,UAClC,CAAA;AAAA,UACR,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAiB,MAAM;AAAA,YACtE,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAqB,UAAA;AAAA,YAAO,CAAA;AAAA,UAClC,CAAA;AAAA,QACL;AAAA,MACF,CAAA,CAAA;AAAA;IAGN,EAAc,WAAW,KACxB,gBAAA,EAAC,IAAD;AAAA,MACE,MAAM,EAAc,CAAA;AAAA,MACpB,cAAc;AAAA,MACd,cAAc;AAAA,IACf,CAAA;AAAA,IAGF,EAAc,WAAW,KACxB,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,IAAD;AAAA,MACE,MAAM,EAAc,CAAA;AAAA,MACpB,cAAc;AAAA,IACf,CAAA,GACD,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA,CACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAA+B,UAAA;AAAA,MAAU,CAAA,GACxD,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAO;AAAA,UAAE,SAAS;AAAA,UAAQ,KAAK;AAAA,QAAE;AAAA,QAAtC,UAAA;AAAA,UACE,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAiB,OAAO;AAAA,YACvE,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAiB,UAAA;AAAA,YAAO,CAAA;AAAA,UAC9B,CAAA;AAAA,UACR,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAiB,IAAI;AAAA,YACpE,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAgB,UAAA;AAAA,YAAO,CAAA;AAAA,UAC7B,CAAA;AAAA,UACR,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAiB,MAAM;AAAA,YACtE,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAgB,UAAA;AAAA,YAAO,CAAA;AAAA,UAC7B,CAAA;AAAA,UACR,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAQ,SAAA,MAAe,EAAiB,MAAM;AAAA,YACtE,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAe,UAAA;AAAA,YAAO,CAAA;AAAA,UAC5B,CAAA;AAAA,QACL;AAAA,MACF,CAAA,CAAA;AAAA,IACL,CAAA,CAAA,EAAA,CAAA;AAAA,EAEJ,EAAA,CAAA;AAEN;AAWA,SAAS,EAAgB,EACvB,OAAA,GACA,UAAA,GACA,MAAA,GACA,kBAAA,GACA,gBAAA,IAAiB,UAAA,GAOhB;AACD,QAAM,IAAY,GAAiB,CAAA,GAC7B,IAAa,GAAiB,CAAS,KAAK,6BAE5C,IAAW,KAAS,IACpB,IAAa,EAAS,YAAY,GAClC,IAAe,GAAa,CAAQ,GACpC,IAAgB,MAAa,eAC7B,IAAW,EAAc,KAAA,CAAM,MAAM,EAAE,MAAM,YAAY,MAAM,CAAU,GACzE,IAAS,MAAa,GACtB,IAAW,CAAC,CAAC,KAAY,CAAC,KAAgB,CAAC,KAAiB,CAAC,GAC7D,IAAc,IAAW,IAAW;AAE1C,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAf,UAAA;AAAA,MAEE,gBAAA,EAAC,UAAD;AAAA,QACE,MAAK;AAAA,QACL,OAAM;AAAA,QACN,cAAW;AAAA,QACX,WAAW,4CAA4C,IAAS,eAAe,EAAA;AAAA,QAC/E,OAAO,EAAE,YAAY,EAAW;AAAA,QAChC,SAAA,MAAe,EAAS,CAAS;AAAA,MAClC,CAAA;AAAA,MAED,gBAAA,EAAC,QAAD,EAAM,WAAU,qBAAsB,CAAA;AAAA,MAGrC,EAAc,IAAA,CAAK,MAClB,gBAAA,EAAC,UAAD;AAAA,QAEE,MAAK;AAAA,QACL,OAAO,EAAE;AAAA,QACT,cAAY,EAAE;AAAA,QACd,WAAW,oBAAoB,CAAC,KAAgB,CAAC,KAAiB,MAAe,EAAE,MAAM,YAAY,IAAI,eAAe,EAAA;AAAA,QACxH,OAAO,EAAE,YAAY,EAAE,MAAM;AAAA,QAC7B,SAAA,MAAe,EAAS,EAAE,KAAK;AAAA,MAChC,GAPM,EAAE,KAOR,CACF;AAAA,MAED,gBAAA,EAAC,QAAD,EAAM,WAAU,qBAAsB,CAAA;AAAA,MAGtC,gBAAA,EAAC,SAAD;AAAA,QACE,WAAW,8CAA8C,IAAW,eAAe,EAAA;AAAA,QACnF,OAAM;AAAA,QACN,OAAO,IAAW,EAAE,YAAY,EAAS,IAAI;AAAA,QAE7C,UAAA,gBAAA,EAAC,SAAD;AAAA,UACE,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAA,CAAW,MAAM,EAAS,EAAE,OAAO,KAAK;AAAA,QACzC,CAAA;AAAA,MACI,CAAA;AAAA,MAGN,KACC,gBAAA,EAAC,UAAD;AAAA,QACE,MAAK;AAAA,QACL,OAAM;AAAA,QACN,cAAW;AAAA,QACX,WAAW,mDAAmD,IAAgB,eAAe,EAAA;AAAA,QAC7F,SAAA,MAAe,EAAS,aAAa;AAAA,MACtC,CAAA;AAAA,IAEA;AAAA;AAET;AAGA,SAAS,GAAkB,GAAoB;AAC7C,QAAM,IAAM,EAAW,CAAE,GACnB,IAAQ,GAAkB,GAAK,YAAY,EAAE,KAAK,WAClD,IAAS,GAAe,GAAI,CAAK;AACvC,SAAO,IAAS,2BAA2B,mBAAmB,CAAM,CAAA,KAAM;AAC5E;AAIA,SAAS,GAAiB,EACxB,MAAA,GACA,cAAA,EAAA,GAIC;AACD,QAAM,CAAC,GAAK,CAAA,IAAU,GAA0B,MAAM,GAChD,IAAQ,EAAA,MAAc,GAAsB,CAAG,GAAG,CAAC,CAAG,CAAC,GACvD,IAAU,EAAK,KAAK,aAAa,IACjC,IAAO,EAAK,KAAK,iBAAiB;AACxC,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAf,UAAA;AAAA,MACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAA+B,UAAA;AAAA,MAAe,CAAA;AAAA,MAC7D,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAW,CAAA,GAC7D,gBAAA,EAAC,OAAD;AAAA,UAAK,OAAO;AAAA,YAAE,SAAS;AAAA,YAAQ,KAAK;AAAA,YAAG,YAAY;AAAA,YAAU,MAAM;AAAA,YAAG,UAAU;AAAA,UAAE;AAAA,UAAlF,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YACE,SAAS,GAAoB,IAAA,CAAI,OAAM;AAAA,cAAE,OAAO,EAAE;AAAA,cAAI,OAAO,EAAE;AAAA,YAAM,EAAE;AAAA,YACvE,OAAO;AAAA,YACP,UAAA,CAAW,MAAM,EAAO,CAAoB;AAAA,YAC5C,OAAO;AAAA,cAAE,UAAU;AAAA,cAAI,MAAM;AAAA,cAAG,UAAU;AAAA,YAAE;AAAA,UAC7C,CAAA,GACD,gBAAA,EAAC,GAAD;AAAA,YACE,MAAK;AAAA,YACL,SAAS,IAAU,UAAU;AAAA,YAC7B,QAAA;AAAA,YACA,SAAA,MAAe,EAAa,EAAK,IAAI,aAAa,MAAS;AAAA,YAE3D,UAAA,gBAAA,EAAC,QAAD;AAAA,cAAM,OAAM;AAAA,cAAS,UAAA;AAAA,YAAO,CAAA;AAAA,UACtB,CAAA,CACL;AAAA,QACF,CAAA,CAAA;AAAA;MACJ,KAAW,CAAC,EAAM,KAAA,CAAK,MAAM,EAAG,OAAO,CAAO,KAC7C,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAO;AAAA,UAAE,UAAU;AAAA,UAAI,SAAS;AAAA,UAAM,cAAc;AAAA,QAAE;AAAA,QAAG,UAAA;AAAA,MAEzD,CAAA;AAAA,MAEP,gBAAA,EAAC,OAAD;AAAA,QACE,OAAO;AAAA,UACL,SAAS;AAAA,UACT,qBAAqB;AAAA,UACrB,KAAK;AAAA,UACL,WAAW;AAAA,UACX,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,cAAc;AAAA,QAChB;AAAA,QAEC,UAAA,EAAM,IAAA,CAAK,MAAO;AACjB,gBAAM,IAAM,GAAkB,EAAG,EAAE,GAC7B,IAAS,MAAY,EAAG;AAC9B,iBACE,gBAAA,EAAC,UAAD;AAAA,YAEE,MAAK;AAAA,YACL,OAAO,EAAG;AAAA,YACV,cAAY,EAAG;AAAA,YACf,SAAA,MAAe,EAAa,EAAK,IAAI,aAAa,EAAG,EAAE;AAAA,YACvD,OAAO;AAAA,cACL,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,QAAQ,IAAS,qCAAqC;AAAA,cACtD,YAAY,IAAS,+DAA+D;AAAA,YACtF;AAAA,YAEC,UAAA,KAAO,gBAAA,EAAC,OAAD;AAAA,cAAK,KAAK;AAAA,cAAK,OAAO;AAAA,cAAI,QAAQ;AAAA,cAAI,KAAI;AAAA,cAAG,OAAO,EAAE,WAAW,UAAU;AAAA,YAAI,CAAA;AAAA,UACjF,GAnBD,EAAG,EAmBF;AAAA,QAEZ,CAAC;AAAA,MACE,CAAA;AAAA,MACJ,KACC,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,YACE,SAAS,CACP;AAAA,cAAE,OAAO;AAAA,cAAQ,OAAO;AAAA,YAAO,GAC/B;AAAA,cAAE,OAAO;AAAA,cAAS,OAAO;AAAA,YAAQ,CACnC;AAAA,YACA,OAAO;AAAA,YACP,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,iBAAiB,CAAC;AAAA,YACzD,OAAO,EAAE,UAAU,GAAG;AAAA,UACvB,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA;AAAA,YACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAW,CAAA;AAAA,YAC7D,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO,OAAO,EAAK,KAAK,iBAAiB,KAAK,IAAI,GAAG,KAAK,MAAM,EAAK,KAAK,WAAW,IAAI,CAAC,CAAC;AAAA,cAC3F,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,iBAAiB,KAAK,IAAI,GAAG,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC;AAAA,YACjG,CAAA;AAAA,YACD,gBAAA,EAAC,QAAD;AAAA,cAAM,WAAU;AAAA,cAAwB,OAAO;AAAA,gBAAE,UAAU;AAAA,gBAAI,SAAS;AAAA,cAAI;AAAA,cAAG,UAAA;AAAA,YAAQ,CAAA;AAAA,UACpF;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,YACE,OAAO,EAAK,KAAK,kBACZ,EAAW,CAAO,GAAG,cACrB,EAAK,KAAK,cACV,EAAK,KAAK;AAAA,YACf,MAAK;AAAA,YACL,gBAAe;AAAA,YACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,kBAAkB,CAAC;AAAA,UAC3D,CAAA,CACE;AAAA;MACL,EAAA,CAAA;AAAA,IAED;AAAA;AAET;AAEA,SAAS,GAAc,EACrB,MAAA,GACA,SAAA,GACA,cAAA,GACA,mBAAA,GACA,mBAAA,GACA,cAAA,EAAA,GAQC;AACD,SACE,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,IACE,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAA+B,UAAA;AAAA,QAAS,CAAA;AAAA,QACvD,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,YACE,MAAK;AAAA,YACL,OAAO,EAAK,KAAK;AAAA,YACjB,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,SAAS,EAAE,OAAO,KAAK;AAAA,UAC/D,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,YACE,SAAS,GAAgB,IAAA,CAAI,OAAS;AAAA,cAAE,OAAO;AAAA,cAAM,OAAO;AAAA,YAAK,EAAE;AAAA,YACnE,OAAO,EAAK;AAAA,YACZ,UAAA,CAAW,MAAU,EAAa,EAAK,IAAI,CAAsB;AAAA,YACjE,OAAO,EAAE,UAAU,GAAG;AAAA,UACvB,CAAA,CACE;AAAA;MACF;AAAA;IACL,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAA+B,UAAA;AAAA,QAAS,CAAA;AAAA,QACvD,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAQ,CAAA,GAC1D,gBAAA,EAAC,GAAD;AAAA,YACE,MAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAO,OAAO,KAAK,MAAM,EAAK,QAAQ,GAAG,IAAI,GAAG;AAAA,YAChD,UAAA,CAAW,MAAM,EAAkB,EAAK,IAAI,SAAS,OAAO,EAAE,OAAO,KAAK,KAAK,EAAK,KAAK;AAAA,UAC1F,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAQ,CAAA,GAC1D,gBAAA,EAAC,GAAD;AAAA,YACE,MAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAO,OAAO,KAAK,MAAM,EAAK,SAAS,GAAG,IAAI,GAAG;AAAA,YACjD,UAAA,CAAW,MAAM,EAAkB,EAAK,IAAI,UAAU,OAAO,EAAE,OAAO,KAAK,KAAK,EAAK,MAAM;AAAA,UAC5F,CAAA,CACE;AAAA;MACF;AAAA;IACL,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAA+B,UAAA;AAAA,QAAU,CAAA;AAAA,QACxD,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,YACE,OAAO,EAAK,KAAK;AAAA,YACjB,MAAK;AAAA,YACL,kBAAA;AAAA,YACA,gBAAe;AAAA,YACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,QAAQ,CAAC;AAAA,UACjD,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAa,CAAA,GAC/D,gBAAA,EAAC,GAAD;AAAA,YACE,OAAO,EAAK,KAAK;AAAA,YACjB,MAAK;AAAA,YACL,kBAAA;AAAA,YACA,gBAAe;AAAA,YACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,UAAU,CAAC;AAAA,UACnD,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,YACE,MAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAO,OAAO,EAAK,KAAK,QAAQ;AAAA,YAChC,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,YAAY,OAAO,EAAE,OAAO,KAAK,KAAK,EAAE;AAAA,UAChF,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,YACE,OAAO,EAAK,KAAK;AAAA,YACjB,MAAK;AAAA,YACL,gBAAe;AAAA,YACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,SAAS,CAAC;AAAA,UAClD,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAiB,CAAA,GACnE,gBAAA,EAAC,GAAD;AAAA,YACE,OAAO,EAAK,KAAK,cAAc,EAAK,KAAK;AAAA,YACzC,MAAK;AAAA,YACL,gBAAe;AAAA,YACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,cAAc,CAAC;AAAA,UACvD,CAAA,CACE;AAAA;QACJ,EAAK,SAAS,cAAc,EAAK,SAAS,eACzC,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,UACE,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAe,CAAA,GACjE,gBAAA,EAAC,GAAD;AAAA,cACE,SAAS;AAAA,gBACP;AAAA,kBAAE,OAAO;AAAA,kBAAU,OAAO;AAAA,gBAAS;AAAA,gBACnC;AAAA,kBAAE,OAAO;AAAA,kBAAO,OAAO;AAAA,gBAAM;AAAA,gBAC7B;AAAA,kBAAE,OAAO;AAAA,kBAAU,OAAO;AAAA,gBAAS;AAAA,gBACnC;AAAA,kBAAE,OAAO;AAAA,kBAAQ,OAAO;AAAA,gBAAO;AAAA,gBAC/B;AAAA,kBAAE,OAAO;AAAA,kBAAS,OAAO;AAAA,gBAAQ;AAAA,gBACjC;AAAA,kBAAE,OAAO;AAAA,kBAAY,OAAO;AAAA,gBAAW;AAAA,gBACvC;AAAA,kBAAE,OAAO;AAAA,kBAAa,OAAO;AAAA,gBAAY;AAAA,gBACzC;AAAA,kBAAE,OAAO;AAAA,kBAAe,OAAO;AAAA,gBAAc;AAAA,gBAC7C;AAAA,kBAAE,OAAO;AAAA,kBAAgB,OAAO;AAAA,gBAAe;AAAA,cACjD;AAAA,cACA,OAAO,EAAK,KAAK,kBAAmB,KAAW,EAAK,SAAS,eAAgB,QAAQ;AAAA,cACrF,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,iBAAiB,CAAC;AAAA,cACzD,OAAO,EAAE,UAAU,GAAG;AAAA,YACvB,CAAA,CACE;AAAA;UACL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAiB,CAAA,GACnE,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO,OAAO,EAAK,KAAK,gBAAgB,CAAC;AAAA,cACzC,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,gBAAgB,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,YACnF,CAAA,CACE;AAAA;UACL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAiB,CAAA,GACnE,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO,OAAO,EAAK,KAAK,gBAAgB,CAAC;AAAA,cACzC,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,gBAAgB,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,YACnF,CAAA,CACE;AAAA;QACL,EAAA,CAAA;AAAA,QAEJ,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAa,CAAA,GAC/D,gBAAA,EAAC,GAAD;AAAA,YACE,SAAS,CAAC;AAAA,cAAE,OAAO;AAAA,cAAQ,OAAO;AAAA,YAAO,GAAG,GAAG,GAAqB,IAAA,CAAI,OAAM;AAAA,cAAE,OAAO;AAAA,cAAG,OAAO;AAAA,YAAE,EAAE,CAAC;AAAA,YACtG,OAAO,EAAK,KAAK,gBAAgB,IAAW,EAAK,SAAS,kBAAkB,WAAW,WAAY;AAAA,YACnG,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,eAAe,CAAC;AAAA,YACvD,OAAO,EAAE,UAAU,GAAG;AAAA,UACvB,CAAA,CACE;AAAA;QACJ,GAAkB,IAAI,EAAK,IAAI,MAAA,MAAY;AAC1C,gBAAM,IAAQ,EAAK,KAAK,eAAe,CAAC,GAClC,IAAA,CAAc,GAAsB,MAA2C;AACnF,YAAA,EAAa,EAAK,IAAI,eAAe;AAAA,cACnC,GAAI,EAAK,KAAK,eAAe,CAAC;AAAA,cAC7B,CAAA,CAAA,GAAO;AAAA,gBAAE,GAAI,EAAK,KAAK,cAAc,CAAA,KAAS,CAAC;AAAA,gBAAI,GAAG;AAAA,cAAM;AAAA,YAC/D,CAAC;AAAA,UACH,GACM,IAA6C;AAAA,YAAE,KAAK;AAAA,YAAO,OAAO;AAAA,YAAS,QAAQ;AAAA,YAAU,MAAM;AAAA,UAAO;AAChH,iBACE,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAY,CAAA,GAC9D,gBAAA,EAAC,OAAD;AAAA,cAAK,OAAO;AAAA,gBAAE,SAAS;AAAA,gBAAQ,YAAY;AAAA,gBAAU,KAAK;AAAA,gBAAG,MAAM;AAAA,cAAE;AAAA,cAArE,UAAA,CACE,gBAAA,EAAC,QAAD;AAAA,gBAAM,OAAO;AAAA,kBAAE,UAAU;AAAA,kBAAI,SAAS;AAAA,gBAAK;AAAA,gBAAG,UAAA;AAAA,cAAc,CAAA,GAC3D,GAAuB,EAAK,MAAM,EAAK,IAAI,KAC1C,gBAAA,EAAC,QAAD;AAAA,gBAAM,OAAM;AAAA,gBAAkB,OAAO,EAAE,SAAS,cAAc;AAAA,gBAC5D,UAAA,gBAAA,EAAC,GAAD;AAAA,kBACE,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAA,MAAe,EAAa,EAAK,IAAI,eAAe,MAAS;AAAA,kBAC9D,UAAA;AAAA,gBAEO,CAAA;AAAA,cACJ,CAAA,CAEL;AAAA,YACF,CAAA,CAAA;AAAA,UACJ,CAAA,GAAA,GAAkB,IAAA,CAAK,MAAS;AAC/B,kBAAM,IAAW,EAAM,CAAA;AACvB,mBACE,gBAAA,EAAC,OAAD;AAAA,cAAgB,OAAO;AAAA,gBAAE,SAAS;AAAA,gBAAQ,YAAY;AAAA,gBAAU,KAAK;AAAA,gBAAG,cAAc;AAAA,cAAE;AAAA,cAAxF,UAAA;AAAA,gBACE,gBAAA,EAAC,QAAD;AAAA,kBACE,OAAO,OAAO,EAAW,CAAA,CAAA;AAAA,kBACzB,OAAO;AAAA,oBAAE,UAAU;AAAA,oBAAI,OAAO;AAAA,oBAAI,YAAY;AAAA,oBAAG,SAAS,IAAW,OAAO;AAAA,kBAAI;AAAA,kBAE/E,UAAA,EAAW,CAAA;AAAA,gBACR,CAAA;AAAA,gBACN,gBAAA,EAAC,QAAD;AAAA,kBAAM,OAAO,SAAS,EAAW,CAAA,CAAA;AAAA,kBAAW,OAAO,EAAE,SAAS,cAAc;AAAA,kBAC1E,UAAA,gBAAA,EAAC,GAAD;AAAA,oBACE,MAAK;AAAA,oBACL,SAAS,GAAU,WAAW;AAAA,oBAC9B,UAAA,CAAW,MAAM,EAAW,GAAM,EAAE,SAAS,EAAE,CAAC;AAAA,kBACjD,CAAA;AAAA,gBACG,CAAA;AAAA,gBACN,gBAAA,EAAC,GAAD;AAAA,kBACE,OAAO,GAAU,SAAS,EAAK,KAAK;AAAA,kBACpC,MAAK;AAAA,kBACL,gBAAe;AAAA,kBACf,UAAA,CAAW,MAAM,EAAW,GAAM,EAAE,OAAO,EAAE,CAAC;AAAA,gBAC/C,CAAA;AAAA,gBACD,gBAAA,EAAC,QAAD;AAAA,kBAAM,OAAO,GAAG,EAAW,CAAA,CAAA;AAAA,kBAAY,OAAO;AAAA,oBAAE,SAAS;AAAA,oBAAe,OAAO;AAAA,kBAAG;AAAA,kBAChF,UAAA,gBAAA,EAAC,GAAD;AAAA,oBACE,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,OAAO,OAAO,GAAU,SAAS,EAAK,KAAK,WAAW;AAAA,oBACtD,UAAA,CAAW,MAAM,EAAW,GAAM,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC;AAAA,kBACtF,CAAA;AAAA,gBACG,CAAA;AAAA,cACH;AAAA,YA5BK,GAAA,CA4BL;AAAA,UAET,CAAC,CACD,EAAA,CAAA;AAAA,QAEN,GAAG;AAAA,QACF,EAAK,SAAS,cACb,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,UACE,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,cACE,SAAS,GAAe,EAAE,IAAA,CAAI,OAAS;AAAA,gBAAE,OAAO,EAAK;AAAA,gBAAI,OAAO,EAAK;AAAA,cAAM,EAAE;AAAA,cAC7E,OAAO,EAAK,KAAK,SAAS;AAAA,cAC1B,aAAY;AAAA,cACZ,UAAA,CAAW,MAAU;AACnB,sBAAM,IAAO,EAAW,OAAO,CAAK,CAAC;AACrC,gBAAA,EAAkB,EAAK,IAAI;AAAA,kBACzB,OAAO;AAAA,kBACP,GAAI,GAAM,aAAa,EAAE,OAAO,EAAK,WAAW,IAAI,CAAC;AAAA,kBACrD,GAAI,CAAC,EAAK,KAAK,SAAS,EAAK,KAAK,UAAU,SAAS,EAAE,OAAO,GAAM,SAAS,OAAO,CAAK,EAAE,IAAI,CAAC;AAAA,gBAClG,CAAC;AAAA,cACH;AAAA,cACA,OAAO,EAAE,UAAU,GAAG;AAAA,YACvB,CAAA,CACE;AAAA;UACL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAU,CAAA,GAC5D,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,SAAS,EAAK,KAAK,WAAW;AAAA,cAC9B,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,WAAW,CAAC;AAAA,cACnD,OAAM;AAAA,YACP,CAAA,CACE;AAAA;UACL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,cACE,SAAS;AAAA,gBACP;AAAA,kBAAE,OAAO;AAAA,kBAAO,OAAO;AAAA,gBAAM;AAAA,gBAC7B;AAAA,kBAAE,OAAO;AAAA,kBAAU,OAAO;AAAA,gBAAS;AAAA,gBACnC;AAAA,kBAAE,OAAO;AAAA,kBAAU,OAAO;AAAA,gBAAS;AAAA,gBACnC;AAAA,kBAAE,OAAO;AAAA,kBAAQ,OAAO;AAAA,gBAAO;AAAA,gBAC/B;AAAA,kBAAE,OAAO;AAAA,kBAAS,OAAO;AAAA,gBAAQ;AAAA,cACnC;AAAA,cACA,OAAO,EAAK,KAAK,mBAAoB,UACjC,QACA,EAAK,KAAK,mBAAoB,WAC5B,WACA,EAAK,KAAK,mBAAoB,UAC5B,WACC,EAAK,KAAK,kBAAkB;AAAA,cACrC,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,kBAAkB,CAAC;AAAA,cAC1D,OAAO,EAAE,UAAU,GAAG;AAAA,YACvB,CAAA,CACE;AAAA;UACL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAe,CAAA,GACjE,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO,OAAO,EAAK,KAAK,gBAAgB,CAAC;AAAA,cACzC,UAAA,CAAW,MAAU,EAAa,EAAK,IAAI,gBAAgB,OAAO,EAAM,OAAO,KAAK,KAAK,CAAC;AAAA,YAC3F,CAAA,CACE;AAAA;UACL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAe,CAAA,GACjE,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO,OAAO,EAAK,KAAK,gBAAgB,CAAC;AAAA,cACzC,UAAA,CAAW,MAAU,EAAa,EAAK,IAAI,gBAAgB,OAAO,EAAM,OAAO,KAAK,KAAK,CAAC;AAAA,YAC3F,CAAA,CACE;AAAA;QACL,EAAA,CAAA;AAAA,MAGD;AAAA;IACJ,EAAK,SAAS,eACb,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA,CACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAA+B,UAAA;AAAA,MAAsB,CAAA,GACpE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAc,CAAA,GAChE,gBAAA,EAAC,OAAD;AAAA,UAAK,OAAO;AAAA,YAAE,SAAS;AAAA,YAAQ,UAAU;AAAA,YAAQ,KAAK;AAAA,UAAE;AAAA,UACrD,UAAA,EAAwB,IAAA,CAAK,MAC5B,gBAAA,EAAC,UAAD;AAAA,YAEE,MAAK;AAAA,YACL,OAAO,EAAyB,CAAA;AAAA,YAChC,cAAY,EAAyB,CAAA;AAAA,YACrC,SAAA,MAAe,EAAkB,EAAK,IAAI,EAAkB,CAAI,CAAC;AAAA,YACjE,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,QAAQ;AAAA,cACR,YAAY,EAAiB,CAAA,EAAM;AAAA,cACnC,QAAQ,eAAe,EAAiB,CAAA,EAAM,MAAA;AAAA,YAChD;AAAA,UACD,GAbM,CAaN,CACF;AAAA,QACE,CAAA,CACF;AAAA,MACF,CAAA,CAAA;AAAA;IAEN,EAAK,SAAS,eAAe,EAAK,SAAS,cAC1C,gBAAA,EAAC,IAAD;AAAA,MAAwB,MAAA;AAAA,MAAoB,cAAA;AAAA,IAAe,CAAA;AAAA,IAE5D,EAAK,SAAS,eACb,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAA+B,UAAA;AAAA,QAAmB,CAAA;AAAA,QACjE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAe,CAAA,GACjE,gBAAA,EAAC,GAAD;AAAA,YACE,MAAK;AAAA,YACL,OAAO,EAAK,KAAK,YAAY;AAAA,YAC7B,aAAY;AAAA,YACZ,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,YAAY,EAAE,OAAO,KAAK;AAAA,UAClE,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAgB,CAAA,GAClE,gBAAA,EAAC,GAAD;AAAA,YACE,OAAO,EAAK,KAAK,iBAAiB;AAAA,YAClC,MAAK;AAAA,YACL,gBAAe;AAAA,YACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,iBAAiB,CAAC;AAAA,UAC1D,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAU,CAAA,GAC5D,gBAAA,EAAC,GAAD;AAAA,YACE,MAAK;AAAA,YACL,OAAO,EAAK,KAAK,OAAO;AAAA,YACxB,aAAY;AAAA,YACZ,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,OAAO,EAAE,OAAO,KAAK;AAAA,UAC7D,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAgB,CAAA,GAClE,gBAAA,EAAC,GAAD;AAAA,YACE,OAAO,EAAK,KAAK,YAAY,EAAK,KAAK;AAAA,YACvC,MAAK;AAAA,YACL,gBAAe;AAAA,YACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,YAAY,CAAC;AAAA,UACrD,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAc,CAAA,GAChE,gBAAA,EAAC,GAAD;AAAA,YACE,SAAS;AAAA,cACP;AAAA,gBAAE,OAAO;AAAA,gBAAY,OAAO;AAAA,cAAW;AAAA,cACvC;AAAA,gBAAE,OAAO;AAAA,gBAAa,OAAO;AAAA,cAAY;AAAA,cACzC;AAAA,gBAAE,OAAO;AAAA,gBAAe,OAAO;AAAA,cAAc;AAAA,cAC7C;AAAA,gBAAE,OAAO;AAAA,gBAAgB,OAAO;AAAA,cAAe;AAAA,YACjD;AAAA,YACA,OAAO,EAAK,KAAK,gBAAgB;AAAA,YACjC,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,gBAAgB,CAAC;AAAA,YACxD,OAAO,EAAE,UAAU,GAAG;AAAA,UACvB,CAAA,CACE;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAc,CAAA,GAChE,gBAAA,EAAC,OAAD;AAAA,YAAK,OAAO;AAAA,cAAE,SAAS;AAAA,cAAQ,UAAU;AAAA,cAAQ,KAAK;AAAA,YAAE;AAAA,YACrD,UAAA,EAAwB,IAAA,CAAK,MAC5B,gBAAA,EAAC,UAAD;AAAA,cAEE,MAAK;AAAA,cACL,OAAO,EAAyB,CAAA;AAAA,cAChC,cAAY,EAAyB,CAAA;AAAA,cACrC,SAAA,MAAe,EAAkB,EAAK,IAAI,EAAkB,CAAI,CAAC;AAAA,cACjE,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,QAAQ;AAAA,gBACR,YAAY,EAAiB,CAAA,EAAM;AAAA,gBACnC,QAAQ,eAAe,EAAiB,CAAA,EAAM,MAAA;AAAA,cAChD;AAAA,YACD,GAbM,CAaN,CACF;AAAA,UACE,CAAA,CACF;AAAA;MACF;AAAA;IAEN,EAAK,SAAS,eACb,gBAAA,EAAC,IAAD;AAAA,MAA6B,MAAA;AAAA,MAAoB,cAAA;AAAA,IAAe,CAAA;AAAA,IAElE,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAA+B,UAAA;AAAA,QAAc,CAAA;AAAA,QAC5D,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA;AAAA,YACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAa,CAAA;AAAA,YAC/D,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO,OAAO,EAAK,KAAK,YAAY,CAAC;AAAA,cACrC,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,YAAY,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,YAC/E,CAAA;AAAA,YACD,gBAAA,EAAC,QAAD;AAAA,cAAM,WAAU;AAAA,cAAwB,OAAO;AAAA,gBAAE,UAAU;AAAA,gBAAI,SAAS;AAAA,cAAI;AAAA,cAAG,UAAA;AAAA,YAAO,CAAA;AAAA,UACnF;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA;AAAA,YACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAW,CAAA;AAAA,YAC7D,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,SAAS,EAAK,KAAK,QAAQ,YAAY;AAAA,cACvC,SAAA,MAAe,EAAa,EAAK,IAAI,SAAS,CAAC,EAAK,KAAK,KAAK;AAAA,cAC9D,QAAA;AAAA,cAEA,UAAA,gBAAA,EAAC,QAAD;AAAA,gBAAM,OAAM;AAAA,gBAAkB,UAAA;AAAA,cAAO,CAAA;AAAA,YAC/B,CAAA;AAAA,YACR,gBAAA,EAAC,GAAD;AAAA,cACE,MAAK;AAAA,cACL,SAAS,EAAK,KAAK,QAAQ,YAAY;AAAA,cACvC,SAAA,MAAe,EAAa,EAAK,IAAI,SAAS,CAAC,EAAK,KAAK,KAAK;AAAA,cAC9D,QAAA;AAAA,cAEA,UAAA,gBAAA,EAAC,QAAD;AAAA,gBAAM,OAAM;AAAA,gBAAgB,UAAA;AAAA,cAAO,CAAA;AAAA,YAC7B,CAAA;AAAA,UACL;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,UAAf,UAAA;AAAA,YACE,gBAAA,EAAC,GAAD;AAAA,cAAO,MAAK;AAAA,cAAK,WAAU;AAAA,cAAuB,UAAA;AAAA,YAAY,CAAA;AAAA,YAC9D,gBAAA,EAAC,GAAD;AAAA,cAAQ,MAAK;AAAA,cAAK,SAAQ;AAAA,cAAQ,SAAA,MAAe,EAAa,EAAK,IAAI,cAAc,EAAK,KAAK,YAAY,KAAK,MAAM,GAAG;AAAA,cAAG,UAAA;AAAA,YAEpH,CAAA;AAAA,YACR,gBAAA,EAAC,GAAD;AAAA,cAAQ,MAAK;AAAA,cAAK,SAAQ;AAAA,cAAQ,SAAA,MAAe,EAAa,EAAK,IAAI,cAAc,EAAK,KAAK,YAAY,KAAK,KAAK,OAAO,GAAG;AAAA,cAAG,UAAA;AAAA,YAE1H,CAAA;AAAA,UACL;AAAA;MACF;AAAA;EACL,EAAA,CAAA;AAEN;AAEA,SAAS,GAAsB,EAC7B,MAAA,GACA,cAAA,EAAA,GAIC;AACD,QAAM,IAAO,EAAK,KAAK,aAAa,YAC9B,IAAK,EAAK,KAAK,UACf,IAAoB,GAAyB,IAAI,GAEjD,IAAA,CAAY,GAAa,MAAe;AAC5C,IAAA,EAAa,EAAK,IAAI,YAAY;AAAA,MAChC,SAAS;AAAA,MAAI,UAAU;AAAA,MAAU,OAAO;AAAA,MACxC,GAAG;AAAA,MACF,CAAA,CAAA,GAAM;AAAA,IACT,CAAC;AAAA,EACH;AASA,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAf,UAAA,CACE,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA,CAA8C,YAAS,CAAU;AAAA,IAChE,CAAA,GAAA,MAAS,SACR,gBAAA,EAAC,IAAD;AAAA,MAA4B,MAAA;AAAA,MAAoB,cAAA;AAAA,IAAe,CAAA,IAC7D,MAAS,YACX,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,MACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAS,CAAA,GAC3D,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS;AAAA,YACP;AAAA,cAAE,OAAO;AAAA,cAAO,OAAO;AAAA,YAAM;AAAA,YAC7B;AAAA,cAAE,OAAO;AAAA,cAAO,OAAO;AAAA,YAAM;AAAA,YAC7B;AAAA,cAAE,OAAO;AAAA,cAAO,OAAO;AAAA,YAAM;AAAA,UAC/B;AAAA,UACA,OAAO,EAAK,KAAK,eAAe;AAAA,UAChC,UAAA,CAAU,MAAS,EAAa,EAAK,IAAI,eAAe,CAAK;AAAA,QAC9D,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,UACE,MAAK;AAAA,UACL,OAAO,EAAK,KAAK,gBAAgB;AAAA,UACjC,aAAY;AAAA,UACZ,UAAA,CAAU,MAAS,EAAa,EAAK,IAAI,gBAAgB,EAAM,OAAO,KAAK;AAAA,QAC5E,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA;AAAA,UACE,gBAAA,EAAC,GAAD;AAAA,YAAO,MAAK;AAAA,YAAK,WAAU;AAAA,YAAuB,UAAA;AAAA,UAAW,CAAA;AAAA,UAC7D,gBAAA,EAAC,SAAD;AAAA,YACE,KAAK;AAAA,YACL,MAAK;AAAA,YACL,QAAO;AAAA,YACP,QAAA;AAAA,YACA,UAAA,CAAU,MAAS;AACjB,oBAAM,IAAO,EAAM,OAAO,QAAQ,CAAA;AAElC,kBADA,EAAM,OAAO,QAAQ,IACjB,CAAC,EAAM;AACX,kBAAI,EAAK,OAAO,UAAkB;AAChC,uBAAO,MAAM,0BAA0B;AACvC;AAAA,cACF;AACA,oBAAM,IAAY,EAAK,KAAK,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY;AAC1D,kBAAI,MAAc,SAAS,MAAc,SAAS,MAAc,OAAO;AACrE,uBAAO,MAAM,uBAAuB;AACpC;AAAA,cACF;AACA,oBAAM,IAAS,IAAI,WAAW;AAC9B,cAAA,EAAO,SAAA,MAAe;AACpB,gBAAI,OAAO,EAAO,UAAW,aAC7B,EAAa,EAAK,IAAI,eAAe,CAAS,GAC9C,EAAa,EAAK,IAAI,gBAAgB,EAAO,MAAM;AAAA,cACrD,GACA,EAAO,UAAA,MAAgB,OAAO,MAAM,WAAW,GAC/C,EAAO,cAAc,CAAI;AAAA,YAC3B;AAAA,UACD,CAAA;AAAA,UACD,gBAAA,EAAC,GAAD;AAAA,YAAQ,MAAK;AAAA,YAAK,SAAQ;AAAA,YAAU,SAAA,MAAe,EAAkB,SAAS,MAAM;AAAA,YAAG,UAAA;AAAA,UAE/E,CAAA;AAAA,UACP,EAAK,KAAK,cAAc,WAAW,OAAO,KACzC,gBAAA,EAAC,QAAD;AAAA,YAAM,WAAU;AAAA,YAA6B,UAAA;AAAA,UAAS,CAAA;AAAA,QAErD;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAsB,UAAA;AAAA,MAAoE,CAAA;AAAA,IACzG,EAAA,CAAA,IACA,MAAS,UACX,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,QAAO,MAAK;AAAA,QAAK,WAAU;AAAA,QAAuB,UAAA;AAAA,MAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,QACE,MAAK;AAAA,QACL,OAAO,EAAK,KAAK,gBAAgB;AAAA,QACjC,aAAY;AAAA,QACZ,UAAA,CAAW,MAAU,EAAa,EAAK,IAAI,gBAAgB,EAAM,OAAO,KAAK;AAAA,MAC9E,CAAA,CACE;AAAA,IACL,CAAA,GAAA,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAsB,UAAA;AAAA,IAA6C,CAAA,CAClF,EAAA,CAAA,IACA,MAAS,OACX,gBAAA,EAAC,GAAD;AAAA,MACE,OAAO;AAAA,QAxFb,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,MAqFO,EAAc,CAAA,KAAS;AAAA,MAC9B,OAAO,EAAK,KAAK,gBAAgB;AAAA,MACjC,UAAA,CAAW,MAAU,EAAa,EAAK,IAAI,gBAAgB,CAAK;AAAA,MAChE,MAAM;AAAA,IACP,CAAA,IAED,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,MACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAS,CAAA,GAC3D,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS,CACP;AAAA,YAAE,OAAO;AAAA,YAAU,OAAO;AAAA,UAAY,GACtC;AAAA,YAAE,OAAO;AAAA,YAAa,OAAO;AAAA,UAAe,CAC9C;AAAA,UACA,OAAO,GAAI,YAAY;AAAA,UACvB,UAAA,CAAW,MAAM,EAAS,YAAY,CAAC;AAAA,UACvC,OAAO,EAAE,UAAU,GAAG;AAAA,QACvB,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAqB,OAAO;AAAA,UAAE,eAAe;AAAA,UAAU,YAAY;AAAA,UAAW,KAAK;AAAA,QAAE;AAAA,QAApG,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,UACE,MAAK;AAAA,UACL,OAAO,GAAI,WAAW;AAAA,UACtB,aAAY;AAAA,UACZ,UAAA,CAAW,MAAM,EAAS,WAAW,EAAE,OAAO,KAAK;AAAA,QACpD,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAqB,OAAO;AAAA,UAAE,eAAe;AAAA,UAAU,YAAY;AAAA,UAAW,KAAK;AAAA,QAAE;AAAA,QAApG,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAS,CAAA,GAC3D,gBAAA,EAAC,GAAD;AAAA,UACE,MAAK;AAAA,UACL,OAAO,GAAI,SAAS;AAAA,UACpB,aAAY;AAAA,UACZ,UAAA,CAAW,MAAM,EAAS,SAAS,EAAE,OAAO,KAAK;AAAA,QAClD,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAqB,OAAO;AAAA,UAAE,eAAe;AAAA,UAAU,YAAY;AAAA,UAAW,KAAK;AAAA,QAAE;AAAA,QAApG,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAc,CAAA,GAChE,gBAAA,EAAC,GAAD;AAAA,UACE,MAAK;AAAA,UACL,MAAK;AAAA,UACL,OAAO,GAAI,UAAU;AAAA,UACrB,aAAY;AAAA,UACZ,UAAA,CAAW,MAAM,EAAS,UAAU,EAAE,OAAO,KAAK;AAAA,QACnD,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,GAAD;AAAA,QACE,OAAM;AAAA,QACN,OAAO,GAAI,gBAAgB;AAAA,QAC3B,UAAA,CAAW,MAAU,EAAS,gBAAgB,CAAK;AAAA,QACnD,MAAM;AAAA,MACP,CAAA;AAAA,MACD,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAO;AAAA,UAAE,UAAU;AAAA,UAAI,OAAO;AAAA,UAAmE,WAAW;AAAA,QAAE;AAAA,QAAG,UAAA;AAAA,MAEjH,CAAA;AAAA,IACL,EAAA,CAAA,CAED;AAAA;AAET;AAEA,SAAS,GAAc,EACrB,MAAA,GACA,cAAA,GACA,cAAA,EAAA,GAKC;AACD,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAf,UAAA;AAAA,MACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAA+B,UAAA;AAAA,MAAS,CAAA;AAAA,MACvD,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS,GAAkB,IAAA,CAAI,OAAM;AAAA,YAAE,OAAO;AAAA,YAAG,OAAO;AAAA,UAAE,EAAE;AAAA,UAC5D,OAAO,EAAK;AAAA,UACZ,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,CAAW;AAAA,UAClD,OAAO,EAAE,UAAU,GAAG;AAAA,QACvB,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO,EAAK,KAAK;AAAA,UACjB,MAAK;AAAA,UACL,gBAAe;AAAA,UACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,eAAe,CAAC;AAAA,QACxD,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,UACE,MAAK;AAAA,UACL,MAAK;AAAA,UACL,OAAO,OAAO,EAAK,KAAK,eAAe,CAAC;AAAA,UACxC,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,eAAe,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,QAClF,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAgB,CAAA,GAClE,gBAAA,EAAC,GAAD;AAAA,UACE,MAAK;AAAA,UACL,SAAS,EAAK,KAAK,YAAY;AAAA,UAC/B,UAAA,CAAW,MAAU,EAAa,EAAK,IAAI,YAAY,CAAK;AAAA,UAC5D,OAAM;AAAA,QACP,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAW,CAAA,GAC7D,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS,EAAwB,IAAA,CAAI,OAAM;AAAA,YAAE,OAAO;AAAA,YAAG,OAAO;AAAA,UAAE,EAAE;AAAA,UAClE,OAAO,EAAK,KAAK,aAAa;AAAA,UAC9B,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,aAAa,CAAC;AAAA,UACrD,OAAO,EAAE,UAAU,GAAG;AAAA,QACvB,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS,EAAoB,IAAA,CAAI,OAAM;AAAA,YAAE,OAAO;AAAA,YAAG,OAAO;AAAA,UAAE,EAAE;AAAA,UAC9D,OAAO,EAAK,KAAK,eAAe;AAAA,UAChC,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,eAAe,CAAC;AAAA,UACvD,OAAO,EAAE,UAAU,GAAG;AAAA,QACvB,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAU,CAAA,GAC5D,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS,EAAoB,IAAA,CAAI,OAAM;AAAA,YAAE,OAAO;AAAA,YAAG,OAAO;AAAA,UAAE,EAAE;AAAA,UAC9D,OAAO,EAAK,KAAK,aAAa;AAAA,UAC9B,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,aAAa,CAAC;AAAA,UACrD,OAAO,EAAE,UAAU,GAAG;AAAA,QACvB,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,UACE,MAAK;AAAA,UACL,OAAO,EAAK,KAAK,aAAa;AAAA,UAC9B,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,aAAa,EAAE,OAAO,KAAK;AAAA,UAClE,aAAY;AAAA,QACb,CAAA,CACE;AAAA;IACF;AAAA;AAET;AAEA,SAAS,GAAc,EACrB,MAAA,GACA,cAAA,EAAA,GAIC;AACD,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAf,UAAA;AAAA,MACE,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAA+B,UAAA;AAAA,MAAS,CAAA;AAAA,MACvD,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAW,CAAA,GAC7D,gBAAA,EAAC,QAAD;AAAA,UAAM,OAAO;AAAA,YAAE,UAAU;AAAA,YAAI,OAAO;AAAA,UAAkE;AAAA,UAAI,UAAA,EAAK;AAAA,QAAW,CAAA,CACvH;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,UACE,OAAO,EAAK;AAAA,UACZ,MAAK;AAAA,UACL,gBAAe;AAAA,UACf,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,eAAe,CAAC;AAAA,QACxD,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,UACE,MAAK;AAAA,UACL,MAAK;AAAA,UACL,OAAO,OAAO,EAAK,WAAW;AAAA,UAC9B,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,eAAe,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,QAClF,CAAA,CACE;AAAA;MACL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAO,MAAK;AAAA,UAAK,WAAU;AAAA,UAAuB,UAAA;AAAA,QAAY,CAAA,GAC9D,gBAAA,EAAC,GAAD;AAAA,UACE,SAAS,EAAwB,IAAA,CAAI,OAAM;AAAA,YAAE,OAAO;AAAA,YAAG,OAAO;AAAA,UAAE,EAAE;AAAA,UAClE,OAAO,EAAK;AAAA,UACZ,UAAA,CAAW,MAAM,EAAa,EAAK,IAAI,aAAa,CAAC;AAAA,UACrD,OAAO,EAAE,UAAU,GAAG;AAAA,QACvB,CAAA,CACE;AAAA;IACF;AAAA;AAET"}
1
+ {"version":3,"file":"InspectorPanel.js","names":[],"sources":["../../../../../src/components/pro/Flow/panels/InspectorPanel.tsx"],"sourcesContent":["import React, { useMemo, useRef, useState } from 'react';\nimport Input from '../../../Input';\nimport Select from '../../../Select';\nimport Button from '../../../Button';\nimport Label from '../../../Label';\nimport Checkbox from '../../../Checkbox';\nimport { useFlowUI } from '../context/FlowUIContext';\nimport { useFlowContext } from '../context/FlowContext';\nimport { useDraggablePanel } from '../hooks/useDraggablePanel';\nimport { useResizablePanel } from '../hooks/useResizablePanel';\nimport { EDGE_LINE_STYLE_OPTIONS, EDGE_MARKER_OPTIONS, BORDER_STYLE_OPTIONS, EDGE_TYPE_OPTIONS, DEFAULT_NODE_DATA } from '../constants';\nimport { generateId } from '../nodes/nodeUtils';\nimport { getAllSvgIcons, getSvgIcon, getSvgIconsByCategory, SVG_ICON_CATEGORIES, buildSvgMarkup, type SvgIconCategory } from '../nodes/svgIcons';\nimport { BORDER_SIDE_NAMES, BORDER_SIDE_TYPES, hasBorderSideOverrides, type BorderSideName } from '../nodes/shapes';\nimport { FLOW_NODE_TYPES, type FlowNode, type FlowEdge, type FlowLine, type FlowShapeType, type FlowBorderSideOverride } from '../types';\nimport { THEME_SYNC_TOKEN, COMMON_COLORS, isThemeToken, themeTokenCssVar, resolveThemeColor, type ThemeColorFieldKind } from '../utils/themeColor';\nimport { DataInspectorSection } from './DataInspectorSection';\nimport { ExpandableTextarea } from './ExpandableTextarea';\nimport {\n ARCHIFY_COMPONENT_ORDER,\n ARCHIFY_COMPONENT_LABELS,\n COMPONENT_STYLES,\n archifyStylePatch,\n} from '../archify';\n\n/**\n * Standalone panel (legacy). Prefer using InspectorPanelContent inside a FlowPanelGroup.\n */\nexport default function InspectorPanel() {\n const { showInspector } = useFlowUI();\n const { panelStyle, handleProps } = useDraggablePanel();\n const { panelWidth, resizeHandleProps } = useResizablePanel('left', 240);\n\n if (!showInspector) return null;\n\n return (\n <div className=\"flow-inspector\" data-flow-panel style={{ ...panelStyle, width: panelWidth }}>\n <div className=\"flow-panel-resize-handle flow-panel-resize-handle--left\" {...resizeHandleProps} />\n <div\n className=\"flow-panel-drag-handle\"\n {...handleProps}\n style={{ fontSize: 11, fontWeight: 600, marginBottom: 8, color: 'color-mix(in oklch, var(--color-base-content) 50%, transparent)', textTransform: 'uppercase', letterSpacing: '0.05em', cursor: 'grab' }}\n >\n Inspector\n </div>\n <div className=\"flow-inspector-content\">\n <InspectorPanelContent />\n </div>\n </div>\n );\n}\n\n/** Reusable content for embedding inside FlowPanelGroup tabs. */\nexport function InspectorPanelContent() {\n const { currentCanvas, selection, setSelection, setDoc, currentCanvasId } = useFlowContext();\n\n const selectedNodes = useMemo(\n () => currentCanvas.nodes.filter(n => selection.nodeIds.has(n.id)),\n [currentCanvas.nodes, selection.nodeIds],\n );\n const selectedEdges = useMemo(\n () => currentCanvas.edges.filter(e => selection.edgeIds.has(e.id)),\n [currentCanvas.edges, selection.edgeIds],\n );\n const selectedLines = useMemo(\n () => currentCanvas.lines.filter(l => selection.lineIds.has(l.id)),\n [currentCanvas.lines, selection.lineIds],\n );\n\n const hasSelection = selectedNodes.length > 0 || selectedEdges.length > 0 || selectedLines.length > 0;\n const singleIsGroup = selectedNodes.length === 1 && (selectedNodes[0].type === 'flowGroup' || selectedNodes[0].type === 'geometryGroup' || selectedNodes[0].data.isGroup);\n\n const totalSelected = selectedNodes.length + selectedLines.length;\n\n const handleGroup = (type: 'flowGroup' | 'geometryGroup' = 'flowGroup') => {\n if (totalSelected < 2) return;\n const PAD = 20;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of selectedNodes) {\n minX = Math.min(minX, n.position.x);\n minY = Math.min(minY, n.position.y);\n maxX = Math.max(maxX, n.position.x + n.width);\n maxY = Math.max(maxY, n.position.y + n.height);\n }\n for (const l of selectedLines) {\n for (const p of l.points) {\n minX = Math.min(minX, p.x); minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x); maxY = Math.max(maxY, p.y);\n }\n }\n const isGeo = type === 'geometryGroup';\n const groupId = generateId('group');\n const groupNode: FlowNode = {\n id: groupId,\n type,\n position: { x: minX - PAD, y: minY - PAD },\n width: maxX - minX + PAD * 2,\n height: maxY - minY + PAD * 2,\n data: {\n ...DEFAULT_NODE_DATA,\n label: isGeo ? 'Geo Group' : 'Group',\n fill: isGeo ? '#fefce8' : '#f0f9ff',\n stroke: '#9ca3af', strokeWidth: 1.5,\n borderStyle: isGeo ? 'dashed' : 'dotted',\n isGroup: true,\n },\n };\n const nIds = selection.nodeIds;\n const lIds = selection.lineIds;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: { ...prev.canvases, [currentCanvasId]: {\n ...canvas,\n nodes: isGeo\n ? [groupNode, ...canvas.nodes]\n : [groupNode, ...canvas.nodes.map(n => nIds.has(n.id) ? { ...n, parentId: groupId } : n)],\n lines: isGeo\n ? canvas.lines\n : canvas.lines.map(l => lIds.has(l.id) ? { ...l, parentId: groupId } : l),\n }},\n };\n });\n setSelection({ nodeIds: new Set([groupId]), edgeIds: new Set(), lineIds: new Set() });\n };\n\n const handleUngroup = () => {\n const groupIds = new Set<string>();\n const childNodeIds = new Set<string>();\n const childLineIds = new Set<string>();\n for (const n of selectedNodes) {\n if (n.type === 'flowGroup' || n.type === 'geometryGroup' || n.data.isGroup) groupIds.add(n.id);\n }\n if (groupIds.size === 0) return;\n for (const n of currentCanvas.nodes) {\n if (n.parentId && groupIds.has(n.parentId)) childNodeIds.add(n.id);\n }\n for (const l of currentCanvas.lines) {\n if (l.parentId && groupIds.has(l.parentId)) childLineIds.add(l.id);\n }\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: { ...prev.canvases, [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes\n .filter(n => !groupIds.has(n.id))\n .map(n => childNodeIds.has(n.id) ? { ...n, parentId: undefined } : n),\n lines: canvas.lines\n .map(l => childLineIds.has(l.id) ? { ...l, parentId: undefined } : l),\n }},\n };\n });\n setSelection({ nodeIds: childNodeIds, edgeIds: new Set(), lineIds: childLineIds });\n };\n\n const changeNodeZIndex = (mode: 'front' | 'back' | 'up' | 'down') => {\n const ids = selection.nodeIds;\n if (ids.size === 0) return;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n const allZ = canvas.nodes.map(n => n.zIndex ?? 0);\n const maxZ = allZ.length > 0 ? Math.max(...allZ) : 0;\n const minZ = allZ.length > 0 ? Math.min(...allZ) : 0;\n const nodes = canvas.nodes.map(n => {\n if (!ids.has(n.id)) return n;\n const z = n.zIndex ?? 0;\n let newZ = z;\n if (mode === 'front') newZ = maxZ + 1;\n else if (mode === 'back') newZ = minZ - 1;\n else if (mode === 'up') newZ = z + 1;\n else if (mode === 'down') newZ = z - 1;\n return { ...n, zIndex: newZ };\n });\n return { ...prev, canvases: { ...prev.canvases, [currentCanvasId]: { ...canvas, nodes } } };\n });\n };\n\n const changeLineZIndex = (mode: 'front' | 'back' | 'up' | 'down') => {\n const ids = selection.lineIds;\n if (ids.size === 0) return;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n const allZ = canvas.lines.map(l => l.zIndex ?? 0);\n const maxZ = allZ.length > 0 ? Math.max(...allZ) : 0;\n const minZ = allZ.length > 0 ? Math.min(...allZ) : 0;\n const lines = canvas.lines.map(l => {\n if (!ids.has(l.id)) return l;\n const z = l.zIndex ?? 0;\n let newZ = z;\n if (mode === 'front') newZ = maxZ + 1;\n else if (mode === 'back') newZ = minZ - 1;\n else if (mode === 'up') newZ = z + 1;\n else if (mode === 'down') newZ = z - 1;\n return { ...l, zIndex: newZ };\n });\n return { ...prev, canvases: { ...prev.canvases, [currentCanvasId]: { ...canvas, lines } } };\n });\n };\n\n const updateNodeData = (nodeId: string, key: string, value: any) => {\n updateNodeDataBatch(nodeId, { [key]: value });\n };\n\n const updateNodeDataBatch = (nodeId: string, values: Record<string, any>) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.map(n =>\n n.id === nodeId ? { ...n, data: { ...n.data, ...values } } : n,\n ),\n },\n },\n };\n });\n };\n\n const updateNodeDimension = (nodeId: string, key: 'width' | 'height', value: number) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.map(n =>\n n.id === nodeId ? { ...n, [key]: value } : n,\n ),\n },\n },\n };\n });\n };\n\n const updateEdgeData = (edgeId: string, key: string, value: any) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n edges: canvas.edges.map(e =>\n e.id === edgeId ? { ...e, data: { ...e.data, [key]: value } } : e,\n ),\n },\n },\n };\n });\n };\n\n const updateNodeType = (nodeId: string, type: FlowShapeType) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.map(node => node.id === nodeId ? { ...node, type } : node),\n },\n },\n };\n });\n };\n\n const updateEdgeType = (edgeId: string, type: string) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n edges: canvas.edges.map(e =>\n e.id === edgeId ? { ...e, type: type as any } : e,\n ),\n },\n },\n };\n });\n };\n\n const updateLineData = (lineId: string, key: string, value: any) => {\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n lines: canvas.lines.map(l =>\n l.id === lineId ? { ...l, [key]: value } : l,\n ),\n },\n },\n };\n });\n };\n\n return (\n <>\n {!hasSelection && (\n <div style={{ fontSize: 12, color: 'color-mix(in oklch, var(--color-base-content) 40%, transparent)', textAlign: 'center', padding: '20px 0' }}>\n Select an element to inspect\n </div>\n )}\n\n {selectedNodes.length === 1 && (\n <NodeInspector\n node={selectedNodes[0]}\n isGroup={singleIsGroup}\n onUpdateData={updateNodeData}\n onUpdateDataBatch={updateNodeDataBatch}\n onUpdateDimension={updateNodeDimension}\n onUpdateType={updateNodeType}\n />\n )}\n {totalSelected > 1 && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Selection</div>\n <div style={{ fontSize: 12, color: 'color-mix(in oklch, var(--color-base-content) 50%, transparent)', marginBottom: 8 }}>\n {selectedNodes.length > 0 && `${selectedNodes.length} node${selectedNodes.length > 1 ? 's' : ''}`}\n {selectedNodes.length > 0 && selectedLines.length > 0 && ', '}\n {selectedLines.length > 0 && `${selectedLines.length} line${selectedLines.length > 1 ? 's' : ''}`}\n {' selected'}\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, width: '100%' }}>\n <Button size=\"xs\" onClick={() => handleGroup('flowGroup')} block>\n Group (⌘G)\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => handleGroup('geometryGroup')} block>\n Geo Group (⌘⌥G)\n </Button>\n </div>\n </div>\n )}\n {singleIsGroup && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">\n {selectedNodes[0].type === 'geometryGroup' ? 'Geometry Group' : 'Group'}\n </div>\n <div style={{ fontSize: 11, color: 'color-mix(in oklch, var(--color-base-content) 45%, transparent)', marginBottom: 6 }}>\n {selectedNodes[0].type === 'geometryGroup'\n ? 'Auto-binds spatially contained nodes'\n : 'Explicit membership via add/remove'}\n </div>\n <Button size=\"xs\" variant=\"ghost\" onClick={handleUngroup} block>\n Ungroup (⌘⇧G)\n </Button>\n </div>\n )}\n\n {selectedNodes.length > 0 && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Layer</div>\n <div style={{ display: 'flex', gap: 4 }}>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeNodeZIndex('front')}>\n <span title=\"Bring to Front (⌘⇧↑)\">⤒</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeNodeZIndex('up')}>\n <span title=\"Bring Forward (⌘↑)\">↑</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeNodeZIndex('down')}>\n <span title=\"Send Backward (⌘↓)\">↓</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeNodeZIndex('back')}>\n <span title=\"Send to Back (⌘⇧↓)\">⤓</span>\n </Button>\n </div>\n </div>\n )}\n\n {selectedEdges.length === 1 && (\n <EdgeInspector\n edge={selectedEdges[0]}\n onUpdateData={updateEdgeData}\n onUpdateType={updateEdgeType}\n />\n )}\n\n {selectedLines.length === 1 && (\n <>\n <LineInspector\n line={selectedLines[0]}\n onUpdateData={updateLineData}\n />\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Layer</div>\n <div style={{ display: 'flex', gap: 4 }}>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeLineZIndex('front')}>\n <span title=\"Bring to Front\">⤒</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeLineZIndex('up')}>\n <span title=\"Bring Forward\">↑</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeLineZIndex('down')}>\n <span title=\"Send Backward\">↓</span>\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => changeLineZIndex('back')}>\n <span title=\"Send to Back\">⤓</span>\n </Button>\n </div>\n </div>\n </>\n )}\n </>\n );\n}\n\n/**\n * A color field for Flow node/edge styling. Layout (left → right):\n * 1. Theme-sync swatch — follows the active theme (per-field role), the\n * default choice for new shapes.\n * 2. Common colors — 黑白赤橙黄绿青蓝紫粉.\n * 3. Custom picker — arbitrary color from the OS color dialog.\n * (Optional) Transparent — for fill/stroke.\n * Every swatch shows a descriptive tooltip on hover.\n */\nfunction ThemeColorField({\n value,\n onChange,\n kind,\n allowTransparent,\n customFallback = '#ffffff',\n}: {\n value: string | undefined;\n onChange: (value: string) => void;\n kind: ThemeColorFieldKind;\n allowTransparent?: boolean;\n customFallback?: string;\n}) {\n const syncToken = THEME_SYNC_TOKEN[kind];\n const syncCssVar = themeTokenCssVar(syncToken) ?? 'var(--color-base-content)';\n\n const rawValue = value ?? '';\n const lowerValue = rawValue.toLowerCase();\n const valueIsToken = isThemeToken(rawValue);\n const isTransparent = rawValue === 'transparent';\n const isCommon = COMMON_COLORS.some((c) => c.value.toLowerCase() === lowerValue);\n const isSync = rawValue === syncToken;\n const isCustom = !!rawValue && !valueIsToken && !isTransparent && !isCommon;\n const pickerValue = isCustom ? rawValue : customFallback;\n\n return (\n <div className=\"flow-color-field\">\n {/* 1. 主题同步色 */}\n <button\n type=\"button\"\n title=\"跟随主题切换\"\n aria-label=\"跟随主题切换\"\n className={`flow-color-swatch flow-color-swatch--sync${isSync ? ' is-active' : ''}`}\n style={{ background: syncCssVar }}\n onClick={() => onChange(syncToken)}\n />\n\n <span className=\"flow-color-divider\" />\n\n {/* 2. 常用颜色 */}\n {COMMON_COLORS.map((c) => (\n <button\n key={c.value}\n type=\"button\"\n title={c.label}\n aria-label={c.label}\n className={`flow-color-swatch${!valueIsToken && !isTransparent && lowerValue === c.value.toLowerCase() ? ' is-active' : ''}`}\n style={{ background: c.value }}\n onClick={() => onChange(c.value)}\n />\n ))}\n\n <span className=\"flow-color-divider\" />\n\n {/* 3. 自定义取色 */}\n <label\n className={`flow-color-swatch flow-color-swatch--custom${isCustom ? ' is-active' : ''}`}\n title=\"自定义颜色\"\n style={isCustom ? { background: rawValue } : undefined}\n >\n <input\n type=\"color\"\n value={pickerValue}\n onChange={(e) => onChange(e.target.value)}\n />\n </label>\n\n {/* 可选:透明 */}\n {allowTransparent && (\n <button\n type=\"button\"\n title=\"透明\"\n aria-label=\"透明\"\n className={`flow-color-swatch flow-color-swatch--transparent${isTransparent ? ' is-active' : ''}`}\n onClick={() => onChange('transparent')}\n />\n )}\n </div>\n );\n}\n\n/** Data-URL preview of a registry icon for picker thumbnails. */\nfunction titleIconThumbUrl(id: string): string {\n const def = getSvgIcon(id);\n const brand = resolveThemeColor(def?.brandColor, '') || '#475569';\n const markup = buildSvgMarkup(id, brand);\n return markup ? `data:image/svg+xml;utf8,${encodeURIComponent(markup)}` : '';\n}\n\n/** Configure the optional glyph rendered beside a shape node's title text:\n * pick from the built-in registry, then side / size / color. */\nfunction TitleIconSection({\n node,\n onUpdateData,\n}: {\n node: FlowNode;\n onUpdateData: (id: string, key: string, value: any) => void;\n}) {\n const [cat, setCat] = useState<SvgIconCategory>('lang');\n const icons = useMemo(() => getSvgIconsByCategory(cat), [cat]);\n const current = node.data.titleIcon ?? '';\n const side = node.data.titleIconSide ?? 'left';\n return (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Title Icon</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Icon</Label>\n <div style={{ display: 'flex', gap: 4, alignItems: 'center', flex: 1, minWidth: 0 }}>\n <Select\n options={SVG_ICON_CATEGORIES.map(c => ({ value: c.id, label: c.label }))}\n value={cat}\n onChange={(v) => setCat(v as SvgIconCategory)}\n style={{ fontSize: 12, flex: 1, minWidth: 0 }}\n />\n <Button\n size=\"xs\"\n variant={current ? 'ghost' : 'primary'}\n square\n onClick={() => onUpdateData(node.id, 'titleIcon', undefined)}\n >\n <span title=\"移除标题图标\">✕</span>\n </Button>\n </div>\n </div>\n {current && !icons.some(ic => ic.id === current) && (\n <div style={{ fontSize: 10, opacity: 0.55, marginBottom: 4 }}>\n 当前图标在其他分类\n </div>\n )}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(22px, 1fr))',\n gap: 3,\n maxHeight: 92,\n overflowY: 'auto',\n padding: 3,\n border: '1px solid color-mix(in oklch, var(--color-base-content) 14%, transparent)',\n borderRadius: 6,\n marginBottom: 6,\n }}\n >\n {icons.map((ic) => {\n const url = titleIconThumbUrl(ic.id);\n const active = current === ic.id;\n return (\n <button\n key={ic.id}\n type=\"button\"\n title={ic.label}\n aria-label={ic.label}\n onClick={() => onUpdateData(node.id, 'titleIcon', ic.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 22,\n height: 22,\n borderRadius: 4,\n cursor: 'pointer',\n padding: 0,\n border: active ? '1.5px solid var(--color-primary)' : '1px solid transparent',\n background: active ? 'color-mix(in oklch, var(--color-primary) 12%, transparent)' : 'transparent',\n }}\n >\n {url && <img src={url} width={16} height={16} alt=\"\" style={{ objectFit: 'contain' }} />}\n </button>\n );\n })}\n </div>\n {current && (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Side</Label>\n <Select\n options={[\n { value: 'left', label: 'left' },\n { value: 'right', label: 'right' },\n ]}\n value={side}\n onChange={(v) => onUpdateData(node.id, 'titleIconSide', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Size</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.titleIconSize ?? Math.max(8, Math.round(node.data.fontSize * 1.15)))}\n onChange={(e) => onUpdateData(node.id, 'titleIconSize', Math.max(8, Number(e.target.value) || 8))}\n />\n <span className=\"flow-inspector-suffix\" style={{ fontSize: 10, opacity: 0.5 }}>px</span>\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Color</Label>\n <ThemeColorField\n value={node.data.titleIconColor\n ?? getSvgIcon(current)?.brandColor\n ?? node.data.labelColor\n ?? node.data.color}\n kind=\"stroke\"\n customFallback=\"#334155\"\n onChange={(v) => onUpdateData(node.id, 'titleIconColor', v)}\n />\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction NodeInspector({\n node,\n isGroup,\n onUpdateData,\n onUpdateDataBatch,\n onUpdateDimension,\n onUpdateType,\n}: {\n node: FlowNode;\n isGroup?: boolean;\n onUpdateData: (id: string, key: string, value: any) => void;\n onUpdateDataBatch: (id: string, values: Record<string, any>) => void;\n onUpdateDimension: (id: string, key: 'width' | 'height', value: number) => void;\n onUpdateType: (id: string, type: FlowShapeType) => void;\n}) {\n return (\n <>\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Node</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Label</Label>\n <Input\n size=\"xs\"\n value={node.data.label}\n onChange={(e) => onUpdateData(node.id, 'label', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Type</Label>\n <Select\n options={FLOW_NODE_TYPES.map(type => ({ value: type, label: type }))}\n value={node.type}\n onChange={(value) => onUpdateType(node.id, value as FlowShapeType)}\n style={{ fontSize: 12 }}\n />\n </div>\n </div>\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Size</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">W</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(Math.round(node.width * 100) / 100)}\n onChange={(e) => onUpdateDimension(node.id, 'width', Number(e.target.value) || node.width)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">H</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(Math.round(node.height * 100) / 100)}\n onChange={(e) => onUpdateDimension(node.id, 'height', Number(e.target.value) || node.height)}\n />\n </div>\n </div>\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Style</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Fill</Label>\n <ThemeColorField\n value={node.data.fill}\n kind=\"fill\"\n allowTransparent\n customFallback=\"#ffffff\"\n onChange={(v) => onUpdateData(node.id, 'fill', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Stroke</Label>\n <ThemeColorField\n value={node.data.stroke}\n kind=\"stroke\"\n allowTransparent\n customFallback=\"#000000\"\n onChange={(v) => onUpdateData(node.id, 'stroke', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Font</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.fontSize)}\n onChange={(e) => onUpdateData(node.id, 'fontSize', Number(e.target.value) || 14)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Color</Label>\n <ThemeColorField\n value={node.data.color}\n kind=\"text\"\n customFallback=\"#111827\"\n onChange={(v) => onUpdateData(node.id, 'color', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Font Color</Label>\n <ThemeColorField\n value={node.data.labelColor ?? node.data.color}\n kind=\"text\"\n customFallback=\"#111827\"\n onChange={(v) => onUpdateData(node.id, 'labelColor', v)}\n />\n </div>\n {node.type !== 'shapeSvg' && node.type !== 'mediaNode' && (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Text Pos</Label>\n <Select\n options={[\n { value: 'center', label: 'center' },\n { value: 'top', label: 'top' },\n { value: 'bottom', label: 'bottom' },\n { value: 'left', label: 'left' },\n { value: 'right', label: 'right' },\n { value: 'top-left', label: 'top-left' },\n { value: 'top-right', label: 'top-right' },\n { value: 'bottom-left', label: 'bottom-left' },\n { value: 'bottom-right', label: 'bottom-right' },\n ]}\n value={node.data.textPlacement ?? ((isGroup || node.type === 'animAnchor') ? 'top' : 'center')}\n onChange={(v) => onUpdateData(node.id, 'textPlacement', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Text Off X</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.labelOffsetX ?? 0)}\n onChange={(e) => onUpdateData(node.id, 'labelOffsetX', Number(e.target.value) || 0)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Text Off Y</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.labelOffsetY ?? 0)}\n onChange={(e) => onUpdateData(node.id, 'labelOffsetY', Number(e.target.value) || 0)}\n />\n </div>\n </>\n )}\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Border</Label>\n <Select\n options={[{ value: 'none', label: 'none' }, ...BORDER_STYLE_OPTIONS.map(s => ({ value: s, label: s }))]}\n value={node.data.borderStyle ?? (isGroup ? (node.type === 'geometryGroup' ? 'dashed' : 'dotted') : 'solid')}\n onChange={(v) => onUpdateData(node.id, 'borderStyle', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n {BORDER_SIDE_TYPES.has(node.type) && (() => {\n const sides = node.data.borderSides ?? {};\n const updateSide = (name: BorderSideName, patch: Partial<FlowBorderSideOverride>) => {\n onUpdateData(node.id, 'borderSides', {\n ...node.data.borderSides,\n [name]: { ...node.data.borderSides?.[name], ...patch },\n });\n };\n const sideLabels: Record<BorderSideName, string> = { top: 'Top', right: 'Right', bottom: 'Bottom', left: 'Left' };\n return (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Sides</Label>\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, flex: 1 }}>\n <span style={{ fontSize: 10, opacity: 0.55 }}>上下左右独立边框</span>\n {hasBorderSideOverrides(node.data, node.type) && (\n <span title=\"恢复与 Border 设置一致\" style={{ display: 'inline-flex' }}>\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={() => onUpdateData(node.id, 'borderSides', undefined)}\n >\n 重置\n </Button>\n </span>\n )}\n </div>\n </div>\n {BORDER_SIDE_NAMES.map((name) => {\n const override = sides[name];\n return (\n <div key={name} style={{ display: 'flex', alignItems: 'center', gap: 4, marginBottom: 4 }}>\n <span\n title={`独立设置${sideLabels[name]}边`}\n style={{ fontSize: 10, width: 40, flexShrink: 0, opacity: override ? 0.95 : 0.6 }}\n >\n {sideLabels[name]}\n </span>\n <span title={`显示/隐藏 ${sideLabels[name]} 边`} style={{ display: 'inline-flex' }}>\n <Checkbox\n size=\"sm\"\n checked={override?.visible ?? true}\n onChange={(v) => updateSide(name, { visible: v })}\n />\n </span>\n <ThemeColorField\n value={override?.color ?? node.data.stroke}\n kind=\"stroke\"\n customFallback=\"#334155\"\n onChange={(v) => updateSide(name, { color: v })}\n />\n <span title={`${sideLabels[name]} 粗细`} style={{ display: 'inline-flex', width: 52 }}>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(override?.width ?? node.data.strokeWidth)}\n onChange={(e) => updateSide(name, { width: Math.max(0, Number(e.target.value) || 0) })}\n />\n </span>\n </div>\n );\n })}\n </>\n );\n })()}\n {node.type === 'shapeSvg' && (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Icon</Label>\n <Select\n options={getAllSvgIcons().map(icon => ({ value: icon.id, label: icon.label }))}\n value={node.data.svgId ?? ''}\n placeholder=\"选择图标\"\n onChange={(value) => {\n const icon = getSvgIcon(String(value));\n onUpdateDataBatch(node.id, {\n svgId: value,\n ...(icon?.brandColor ? { color: icon.brandColor } : {}),\n ...(!node.data.label || node.data.label === 'Text' ? { label: icon?.label ?? String(value) } : {}),\n });\n }}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Box</Label>\n <Checkbox\n size=\"sm\"\n checked={node.data.iconBox ?? false}\n onChange={(v) => onUpdateData(node.id, 'iconBox', v)}\n label=\"显示边框\"\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Label</Label>\n <Select\n options={[\n { value: 'top', label: 'top' },\n { value: 'middle', label: 'middle' },\n { value: 'bottom', label: 'bottom' },\n { value: 'left', label: 'left' },\n { value: 'right', label: 'right' },\n ]}\n value={node.data.labelPlacement === ('above' as any)\n ? 'top'\n : node.data.labelPlacement === ('center' as any)\n ? 'middle'\n : node.data.labelPlacement === ('below' as any)\n ? 'bottom'\n : (node.data.labelPlacement ?? 'bottom')}\n onChange={(v) => onUpdateData(node.id, 'labelPlacement', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Offset X</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.labelOffsetX ?? 0)}\n onChange={(event) => onUpdateData(node.id, 'labelOffsetX', Number(event.target.value) || 0)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Offset Y</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.labelOffsetY ?? 0)}\n onChange={(event) => onUpdateData(node.id, 'labelOffsetY', Number(event.target.value) || 0)}\n />\n </div>\n </>\n )}\n\n </div>\n {node.type === 'mediaNode' && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Palette (Archify)</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Palette</Label>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {ARCHIFY_COMPONENT_ORDER.map((kind) => (\n <button\n key={kind}\n type=\"button\"\n title={ARCHIFY_COMPONENT_LABELS[kind]}\n aria-label={ARCHIFY_COMPONENT_LABELS[kind]}\n onClick={() => onUpdateDataBatch(node.id, archifyStylePatch(kind))}\n style={{\n width: 18,\n height: 18,\n borderRadius: 4,\n cursor: 'pointer',\n background: COMPONENT_STYLES[kind].fill,\n border: `1.5px solid ${COMPONENT_STYLES[kind].stroke}`,\n }}\n />\n ))}\n </div>\n </div>\n </div>\n )}\n {node.type !== 'mediaNode' && node.type !== 'shapeSvg' && (\n <TitleIconSection node={node} onUpdateData={onUpdateData} />\n )}\n {node.type !== 'mediaNode' && (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Card (Archify)</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Subtitle</Label>\n <Input\n size=\"xs\"\n value={node.data.sublabel ?? ''}\n placeholder=\"secondary line\"\n onChange={(e) => onUpdateData(node.id, 'sublabel', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Sub Color</Label>\n <ThemeColorField\n value={node.data.sublabelColor ?? '#94a3b8'}\n kind=\"text\"\n customFallback=\"#94a3b8\"\n onChange={(v) => onUpdateData(node.id, 'sublabelColor', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Tag</Label>\n <Input\n size=\"xs\"\n value={node.data.tag ?? ''}\n placeholder=\"corner pill\"\n onChange={(e) => onUpdateData(node.id, 'tag', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Tag Color</Label>\n <ThemeColorField\n value={node.data.tagColor ?? node.data.stroke}\n kind=\"stroke\"\n customFallback=\"#334155\"\n onChange={(v) => onUpdateData(node.id, 'tagColor', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Tag Pos</Label>\n <Select\n options={[\n { value: 'top-left', label: 'top-left' },\n { value: 'top-right', label: 'top-right' },\n { value: 'bottom-left', label: 'bottom-left' },\n { value: 'bottom-right', label: 'bottom-right' },\n ]}\n value={node.data.tagPlacement ?? 'top-right'}\n onChange={(v) => onUpdateData(node.id, 'tagPlacement', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Palette</Label>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {ARCHIFY_COMPONENT_ORDER.map((kind) => (\n <button\n key={kind}\n type=\"button\"\n title={ARCHIFY_COMPONENT_LABELS[kind]}\n aria-label={ARCHIFY_COMPONENT_LABELS[kind]}\n onClick={() => onUpdateDataBatch(node.id, archifyStylePatch(kind))}\n style={{\n width: 18,\n height: 18,\n borderRadius: 4,\n cursor: 'pointer',\n background: COMPONENT_STYLES[kind].fill,\n border: `1.5px solid ${COMPONENT_STYLES[kind].stroke}`,\n }}\n />\n ))}\n </div>\n </div>\n </div>\n )}\n {node.type === 'mediaNode' && (\n <MediaInspectorSection node={node} onUpdateData={onUpdateData} />\n )}\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Transform</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Rotate</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(node.data.rotation ?? 0)}\n onChange={(e) => onUpdateData(node.id, 'rotation', Number(e.target.value) || 0)}\n />\n <span className=\"flow-inspector-suffix\" style={{ fontSize: 10, opacity: 0.5 }}>°</span>\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Flip</Label>\n <Button\n size=\"xs\"\n variant={node.data.flipX ? 'primary' : 'ghost'}\n onClick={() => onUpdateData(node.id, 'flipX', !node.data.flipX)}\n square\n >\n <span title=\"Flip Horizontal\">↔</span>\n </Button>\n <Button\n size=\"xs\"\n variant={node.data.flipY ? 'primary' : 'ghost'}\n onClick={() => onUpdateData(node.id, 'flipY', !node.data.flipY)}\n square\n >\n <span title=\"Flip Vertical\">↕</span>\n </Button>\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Quick</Label>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => onUpdateData(node.id, 'rotation', ((node.data.rotation ?? 0) + 90) % 360)}>\n +90°\n </Button>\n <Button size=\"xs\" variant=\"ghost\" onClick={() => onUpdateData(node.id, 'rotation', ((node.data.rotation ?? 0) - 90 + 360) % 360)}>\n −90°\n </Button>\n </div>\n </div>\n </>\n );\n}\n\nfunction MediaInspectorSection({\n node,\n onUpdateData,\n}: {\n node: FlowNode;\n onUpdateData: (id: string, key: string, value: any) => void;\n}) {\n const kind = node.data.mediaKind ?? 'markdown';\n const ai = node.data.aiConfig;\n const modelFileInputRef = useRef<HTMLInputElement>(null);\n\n const updateAI = (key: string, value: any) => {\n onUpdateData(node.id, 'aiConfig', {\n gateway: '', protocol: 'openai', model: '',\n ...ai,\n [key]: value,\n });\n };\n\n const contentLabels: Record<string, string> = {\n markdown: 'Markdown 源码',\n html: 'HTML 源码',\n mermaid: 'Mermaid 图表',\n math: 'LaTeX 公式',\n };\n\n return (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Media · {kind}</div>\n {kind === 'data' ? (\n <DataInspectorSection node={node} onUpdateData={onUpdateData} />\n ) : kind === 'model3d' ? (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">格式</Label>\n <Select\n options={[\n { value: 'stl', label: 'STL' },\n { value: 'obj', label: 'OBJ' },\n { value: '3mf', label: '3MF' },\n ]}\n value={node.data.modelFormat ?? 'stl'}\n onChange={value => onUpdateData(node.id, 'modelFormat', value)}\n />\n </div>\n <div className=\"flow-inspector-row flow-inspector-multiline\">\n <Label size=\"xs\" className=\"flow-inspector-label\">模型链接</Label>\n <Input\n size=\"xs\"\n value={node.data.mediaContent ?? ''}\n placeholder=\"https://example.com/model.stl\"\n onChange={event => onUpdateData(node.id, 'mediaContent', event.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">本地模型</Label>\n <input\n ref={modelFileInputRef}\n type=\"file\"\n accept=\".stl,.obj,.3mf,model/stl,model/obj,model/3mf,application/vnd.ms-package.3dmanufacturing-3dmodel+xml\"\n hidden\n onChange={event => {\n const file = event.target.files?.[0];\n event.target.value = '';\n if (!file) return;\n if (file.size > 10 * 1024 * 1024) {\n window.alert('本地模型不能超过 10 MiB,请改用模型链接。');\n return;\n }\n const extension = file.name.split('.').pop()?.toLowerCase();\n if (extension !== 'stl' && extension !== 'obj' && extension !== '3mf') {\n window.alert('仅支持 STL、OBJ 和 3MF 模型。');\n return;\n }\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result !== 'string') return;\n onUpdateData(node.id, 'modelFormat', extension);\n onUpdateData(node.id, 'mediaContent', reader.result);\n };\n reader.onerror = () => window.alert('读取本地模型失败。');\n reader.readAsDataURL(file);\n }}\n />\n <Button size=\"xs\" variant=\"neutral\" onClick={() => modelFileInputRef.current?.click()}>\n 选择文件\n </Button>\n {node.data.mediaContent?.startsWith('data:') && (\n <span className=\"flow-inspector-file-status\">已嵌入</span>\n )}\n </div>\n <div className=\"flow-inspector-help\">支持 STL、OBJ、3MF;本地文件将以 Base64 嵌入文档,最大 10 MiB。选中节点后可在内部拖拽旋转、滚轮缩放。</div>\n </>\n ) : kind === 'image' ? (\n <>\n <div className=\"flow-inspector-row flow-inspector-multiline\">\n <Label size=\"xs\" className=\"flow-inspector-label\">图片链接</Label>\n <Input\n size=\"xs\"\n value={node.data.mediaContent ?? ''}\n placeholder=\"https://example.com/image.png\"\n onChange={(event) => onUpdateData(node.id, 'mediaContent', event.target.value)}\n />\n </div>\n <div className=\"flow-inspector-help\">支持 HTTP(S) 链接;选中图片节点后可直接粘贴图片并保存为 Base64。</div>\n </>\n ) : kind !== 'ai' ? (\n <ExpandableTextarea\n label={contentLabels[kind] ?? '内容'}\n value={node.data.mediaContent ?? ''}\n onChange={(value) => onUpdateData(node.id, 'mediaContent', value)}\n rows={8}\n />\n ) : (\n <>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">协议</Label>\n <Select\n options={[\n { value: 'openai', label: 'OpenAI 兼容' },\n { value: 'anthropic', label: 'Anthropic 兼容' },\n ]}\n value={ai?.protocol ?? 'openai'}\n onChange={(v) => updateAI('protocol', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 4 }}>\n <Label size=\"xs\" className=\"flow-inspector-label\">接口地址</Label>\n <Input\n size=\"xs\"\n value={ai?.gateway ?? ''}\n placeholder=\"https://api.openai.com/v1/chat/completions\"\n onChange={(e) => updateAI('gateway', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 4 }}>\n <Label size=\"xs\" className=\"flow-inspector-label\">模型</Label>\n <Input\n size=\"xs\"\n value={ai?.model ?? ''}\n placeholder=\"gpt-4o-mini\"\n onChange={(e) => updateAI('model', e.target.value)}\n />\n </div>\n <div className=\"flow-inspector-row\" style={{ flexDirection: 'column', alignItems: 'stretch', gap: 4 }}>\n <Label size=\"xs\" className=\"flow-inspector-label\">API Key</Label>\n <Input\n size=\"xs\"\n type=\"password\"\n value={ai?.apiKey ?? ''}\n placeholder=\"sk-...\"\n onChange={(e) => updateAI('apiKey', e.target.value)}\n />\n </div>\n <ExpandableTextarea\n label=\"System Prompt\"\n value={ai?.systemPrompt ?? ''}\n onChange={(value) => updateAI('systemPrompt', value)}\n rows={3}\n />\n <div style={{ fontSize: 10, color: 'color-mix(in oklch, var(--color-base-content) 45%, transparent)', marginTop: 4 }}>\n 密钥会随文档 JSON 一同导出,请谨慎分享。\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction EdgeInspector({\n edge,\n onUpdateData,\n onUpdateType,\n}: {\n edge: FlowEdge;\n onUpdateData: (id: string, key: string, value: any) => void;\n onUpdateType: (id: string, type: string) => void;\n}) {\n return (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Edge</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Type</Label>\n <Select\n options={EDGE_TYPE_OPTIONS.map(t => ({ value: t, label: t }))}\n value={edge.type}\n onChange={(v) => onUpdateType(edge.id, v as string)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Color</Label>\n <ThemeColorField\n value={edge.data.strokeColor}\n kind=\"line\"\n customFallback=\"#374151\"\n onChange={(v) => onUpdateData(edge.id, 'strokeColor', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Width</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(edge.data.strokeWidth ?? 2)}\n onChange={(e) => onUpdateData(edge.id, 'strokeWidth', Number(e.target.value) || 2)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Animation</Label>\n <Checkbox\n size=\"sm\"\n checked={edge.data.animated ?? false}\n onChange={(value) => onUpdateData(edge.id, 'animated', value)}\n label=\"预览时播放\"\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Line</Label>\n <Select\n options={EDGE_LINE_STYLE_OPTIONS.map(s => ({ value: s, label: s }))}\n value={edge.data.lineStyle ?? 'solid'}\n onChange={(v) => onUpdateData(edge.id, 'lineStyle', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Start</Label>\n <Select\n options={EDGE_MARKER_OPTIONS.map(m => ({ value: m, label: m }))}\n value={edge.data.markerStart ?? 'none'}\n onChange={(v) => onUpdateData(edge.id, 'markerStart', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">End</Label>\n <Select\n options={EDGE_MARKER_OPTIONS.map(m => ({ value: m, label: m }))}\n value={edge.data.markerEnd ?? 'none'}\n onChange={(v) => onUpdateData(edge.id, 'markerEnd', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Label</Label>\n <Input\n size=\"xs\"\n value={edge.data.labelText ?? ''}\n onChange={(e) => onUpdateData(edge.id, 'labelText', e.target.value)}\n placeholder=\"Edge label\"\n />\n </div>\n </div>\n );\n}\n\nfunction LineInspector({\n line,\n onUpdateData,\n}: {\n line: FlowLine;\n onUpdateData: (id: string, key: string, value: any) => void;\n}) {\n return (\n <div className=\"flow-inspector-section\">\n <div className=\"flow-inspector-section-title\">Line</div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Type</Label>\n <span style={{ fontSize: 12, color: 'color-mix(in oklch, var(--color-base-content) 60%, transparent)' }}>{line.type}</span>\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Color</Label>\n <ThemeColorField\n value={line.strokeColor}\n kind=\"line\"\n customFallback=\"#374151\"\n onChange={(v) => onUpdateData(line.id, 'strokeColor', v)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Width</Label>\n <Input\n size=\"xs\"\n type=\"number\"\n value={String(line.strokeWidth)}\n onChange={(e) => onUpdateData(line.id, 'strokeWidth', Number(e.target.value) || 2)}\n />\n </div>\n <div className=\"flow-inspector-row\">\n <Label size=\"xs\" className=\"flow-inspector-label\">Style</Label>\n <Select\n options={EDGE_LINE_STYLE_OPTIONS.map(s => ({ value: s, label: s }))}\n value={line.lineStyle}\n onChange={(v) => onUpdateData(line.id, 'lineStyle', v)}\n style={{ fontSize: 12 }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"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"}