@dou-ui/flow 0.0.0-stage → 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -2
  3. package/dist/collaboration/index.js +360 -0
  4. package/dist/collaboration/index.js.map +1 -0
  5. package/dist/collaboration/peers.js +76 -0
  6. package/dist/collaboration/peers.js.map +1 -0
  7. package/dist/components/default-node.js +6 -0
  8. package/dist/components/default-node.js.map +1 -0
  9. package/dist/components/default-node.vue_vue_type_script_setup_true_lang.js +87 -0
  10. package/dist/components/default-node.vue_vue_type_script_setup_true_lang.js.map +1 -0
  11. package/dist/components/default-node2.js +116 -0
  12. package/dist/components/default-node2.js.map +1 -0
  13. package/dist/components/flow-controls.js +6 -0
  14. package/dist/components/flow-controls.js.map +1 -0
  15. package/dist/components/flow-controls.vue_vue_type_script_setup_true_lang.js +148 -0
  16. package/dist/components/flow-controls.vue_vue_type_script_setup_true_lang.js.map +1 -0
  17. package/dist/components/flow-menu.js +6 -0
  18. package/dist/components/flow-menu.js.map +1 -0
  19. package/dist/components/flow-menu.vue_vue_type_script_setup_true_lang.js +52 -0
  20. package/dist/components/flow-menu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  21. package/dist/components/flow-minimap.js +6 -0
  22. package/dist/components/flow-minimap.js.map +1 -0
  23. package/dist/components/flow-minimap.vue_vue_type_script_setup_true_lang.js +238 -0
  24. package/dist/components/flow-minimap.vue_vue_type_script_setup_true_lang.js.map +1 -0
  25. package/dist/components/flow-port.js +6 -0
  26. package/dist/components/flow-port.js.map +1 -0
  27. package/dist/components/flow-port.vue_vue_type_script_setup_true_lang.js +57 -0
  28. package/dist/components/flow-port.vue_vue_type_script_setup_true_lang.js.map +1 -0
  29. package/dist/components/flow-quick-add.js +6 -0
  30. package/dist/components/flow-quick-add.js.map +1 -0
  31. package/dist/components/flow-quick-add.vue_vue_type_script_setup_true_lang.js +126 -0
  32. package/dist/components/flow-quick-add.vue_vue_type_script_setup_true_lang.js.map +1 -0
  33. package/dist/components/flow-toolbar.js +6 -0
  34. package/dist/components/flow-toolbar.js.map +1 -0
  35. package/dist/components/flow-toolbar.vue_vue_type_script_setup_true_lang.js +161 -0
  36. package/dist/components/flow-toolbar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  37. package/dist/components/group-node.js +6 -0
  38. package/dist/components/group-node.js.map +1 -0
  39. package/dist/components/group-node.vue_vue_type_script_setup_true_lang.js +84 -0
  40. package/dist/components/group-node.vue_vue_type_script_setup_true_lang.js.map +1 -0
  41. package/dist/components/group-node2.js +42 -0
  42. package/dist/components/group-node2.js.map +1 -0
  43. package/dist/components/node-view.js +6 -0
  44. package/dist/components/node-view.js.map +1 -0
  45. package/dist/components/node-view.vue_vue_type_script_setup_true_lang.js +179 -0
  46. package/dist/components/node-view.vue_vue_type_script_setup_true_lang.js.map +1 -0
  47. package/dist/context.js +13 -0
  48. package/dist/context.js.map +1 -0
  49. package/dist/core/clipboard.js +37 -0
  50. package/dist/core/clipboard.js.map +1 -0
  51. package/dist/core/connect.js +74 -0
  52. package/dist/core/connect.js.map +1 -0
  53. package/dist/core/edge-types.js +240 -0
  54. package/dist/core/edge-types.js.map +1 -0
  55. package/dist/core/extension.js +63 -0
  56. package/dist/core/extension.js.map +1 -0
  57. package/dist/core/geometry.js +232 -0
  58. package/dist/core/geometry.js.map +1 -0
  59. package/dist/core/groups.js +76 -0
  60. package/dist/core/groups.js.map +1 -0
  61. package/dist/core/history.js +79 -0
  62. package/dist/core/history.js.map +1 -0
  63. package/dist/core/model.js +21 -0
  64. package/dist/core/model.js.map +1 -0
  65. package/dist/core/node-types.js +32 -0
  66. package/dist/core/node-types.js.map +1 -0
  67. package/dist/core/order.js +42 -0
  68. package/dist/core/order.js.map +1 -0
  69. package/dist/core/transaction.js +288 -0
  70. package/dist/core/transaction.js.map +1 -0
  71. package/dist/document.js +220 -0
  72. package/dist/document.js.map +1 -0
  73. package/dist/export/color.js +38 -0
  74. package/dist/export/color.js.map +1 -0
  75. package/dist/export/context.js +223 -0
  76. package/dist/export/context.js.map +1 -0
  77. package/dist/export/draw.js +249 -0
  78. package/dist/export/draw.js.map +1 -0
  79. package/dist/flow-editor.js +6 -0
  80. package/dist/flow-editor.js.map +1 -0
  81. package/dist/flow-editor.vue_vue_type_script_setup_true_lang.js +3721 -0
  82. package/dist/flow-editor.vue_vue_type_script_setup_true_lang.js.map +1 -0
  83. package/dist/index.js +31 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/kit.js +234 -0
  86. package/dist/kit.js.map +1 -0
  87. package/dist/layers.js +150 -0
  88. package/dist/layers.js.map +1 -0
  89. package/dist/locale.js +426 -0
  90. package/dist/locale.js.map +1 -0
  91. package/dist/style.css +1 -0
  92. package/dist/style.d.ts +1 -0
  93. package/dist/style.js +8 -0
  94. package/dist/types/collaboration/index.d.ts +42 -0
  95. package/dist/types/collaboration/peers.d.ts +27 -0
  96. package/dist/types/components/default-node.d.ts +18 -0
  97. package/dist/types/components/default-node.vue.d.ts +6 -0
  98. package/dist/types/components/flow-controls.vue.d.ts +8 -0
  99. package/dist/types/components/flow-menu.vue.d.ts +29 -0
  100. package/dist/types/components/flow-minimap.vue.d.ts +8 -0
  101. package/dist/types/components/flow-port.vue.d.ts +9 -0
  102. package/dist/types/components/flow-quick-add.vue.d.ts +31 -0
  103. package/dist/types/components/flow-toolbar.vue.d.ts +25 -0
  104. package/dist/types/components/group-node.d.ts +13 -0
  105. package/dist/types/components/group-node.vue.d.ts +6 -0
  106. package/dist/types/components/node-view.vue.d.ts +28 -0
  107. package/dist/types/context.d.ts +362 -0
  108. package/dist/types/core/clipboard.d.ts +9 -0
  109. package/dist/types/core/connect.d.ts +63 -0
  110. package/dist/types/core/edge-types.d.ts +50 -0
  111. package/dist/types/core/extension.d.ts +141 -0
  112. package/dist/types/core/geometry.d.ts +63 -0
  113. package/dist/types/core/groups.d.ts +23 -0
  114. package/dist/types/core/history.d.ts +24 -0
  115. package/dist/types/core/menu.d.ts +40 -0
  116. package/dist/types/core/model.d.ts +87 -0
  117. package/dist/types/core/node-types.d.ts +103 -0
  118. package/dist/types/core/order.d.ts +7 -0
  119. package/dist/types/core/transaction.d.ts +97 -0
  120. package/dist/types/document.d.ts +57 -0
  121. package/dist/types/export/color.d.ts +7 -0
  122. package/dist/types/export/context.d.ts +90 -0
  123. package/dist/types/export/draw.d.ts +72 -0
  124. package/dist/types/flow-editor.vue.d.ts +63 -0
  125. package/dist/types/index.d.ts +202 -0
  126. package/dist/types/kit.d.ts +22 -0
  127. package/dist/types/layers.d.ts +24 -0
  128. package/dist/types/locale.d.ts +172 -0
  129. package/dist/types/whiteboard/board-draft.vue.d.ts +3 -0
  130. package/dist/types/whiteboard/board-node.vue.d.ts +19 -0
  131. package/dist/types/whiteboard/connector.d.ts +12 -0
  132. package/dist/types/whiteboard/draw.d.ts +5 -0
  133. package/dist/types/whiteboard/image.d.ts +27 -0
  134. package/dist/types/whiteboard/index.d.ts +6 -0
  135. package/dist/types/whiteboard/ink.d.ts +30 -0
  136. package/dist/types/whiteboard/kit.d.ts +36 -0
  137. package/dist/types/whiteboard/model.d.ts +79 -0
  138. package/dist/types/whiteboard/pen.d.ts +7 -0
  139. package/dist/types/whiteboard/state.d.ts +37 -0
  140. package/dist/types/whiteboard/transform.d.ts +67 -0
  141. package/dist/types/whiteboard/whiteboard-toolbar.vue.d.ts +3 -0
  142. package/dist/whiteboard/board-draft.js +6 -0
  143. package/dist/whiteboard/board-draft.js.map +1 -0
  144. package/dist/whiteboard/board-draft.vue_vue_type_script_setup_true_lang.js +58 -0
  145. package/dist/whiteboard/board-draft.vue_vue_type_script_setup_true_lang.js.map +1 -0
  146. package/dist/whiteboard/board-node.js +6 -0
  147. package/dist/whiteboard/board-node.js.map +1 -0
  148. package/dist/whiteboard/board-node.vue_vue_type_script_setup_true_lang.js +332 -0
  149. package/dist/whiteboard/board-node.vue_vue_type_script_setup_true_lang.js.map +1 -0
  150. package/dist/whiteboard/connector.js +180 -0
  151. package/dist/whiteboard/connector.js.map +1 -0
  152. package/dist/whiteboard/draw.js +68 -0
  153. package/dist/whiteboard/draw.js.map +1 -0
  154. package/dist/whiteboard/image.js +104 -0
  155. package/dist/whiteboard/image.js.map +1 -0
  156. package/dist/whiteboard/index.js +5 -0
  157. package/dist/whiteboard/ink.js +168 -0
  158. package/dist/whiteboard/ink.js.map +1 -0
  159. package/dist/whiteboard/kit.js +406 -0
  160. package/dist/whiteboard/kit.js.map +1 -0
  161. package/dist/whiteboard/model.js +52 -0
  162. package/dist/whiteboard/model.js.map +1 -0
  163. package/dist/whiteboard/pen.js +88 -0
  164. package/dist/whiteboard/pen.js.map +1 -0
  165. package/dist/whiteboard/state.js +26 -0
  166. package/dist/whiteboard/state.js.map +1 -0
  167. package/dist/whiteboard/transform.js +256 -0
  168. package/dist/whiteboard/transform.js.map +1 -0
  169. package/dist/whiteboard/whiteboard-toolbar.js +6 -0
  170. package/dist/whiteboard/whiteboard-toolbar.js.map +1 -0
  171. package/dist/whiteboard/whiteboard-toolbar.vue_vue_type_script_setup_true_lang.js +171 -0
  172. package/dist/whiteboard/whiteboard-toolbar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  173. package/package.json +74 -4
package/dist/locale.js ADDED
@@ -0,0 +1,426 @@
1
+ import { useLocale } from "dou-ui";
2
+ import { computed, toValue } from "vue";
3
+ // src/locale.ts
4
+ var zhCN = {
5
+ canvas: "流程画布。方向键移动选中的节点,Tab 在节点之间切换,C 从选中的节点连线,E 选中它的连线,Delete 删除。",
6
+ node: "节点",
7
+ ports: "{inputs} 个输入,{outputs} 个输出,已连接 {connected} 条",
8
+ input: "输入",
9
+ output: "输出",
10
+ zoomIn: "放大",
11
+ zoomOut: "缩小",
12
+ zoomLevel: "缩放 {value}%,点击恢复 100%",
13
+ zoomReset: "恢复 100%",
14
+ fit: "适应画布",
15
+ tidy: "整理",
16
+ minimap: "小地图,点击或拖动移动画布",
17
+ undo: "撤销",
18
+ redo: "重做",
19
+ controls: "画布控制",
20
+ menu: "菜单",
21
+ toolbar: "选中节点的操作",
22
+ copy: "复制",
23
+ cut: "剪切",
24
+ paste: "粘贴",
25
+ duplicate: "复制一份",
26
+ delete: "删除",
27
+ selectAll: "全选",
28
+ more: "更多",
29
+ editLabel: "编辑标签",
30
+ label: "连线标签",
31
+ search: "搜索节点",
32
+ noTypes: "没有能接上的节点",
33
+ deleted: "已删除 {count} 项",
34
+ tidied: "已整理 {count} 个节点",
35
+ undone: "已撤销",
36
+ changeCancelled: "这次修改没有生效",
37
+ redone: "已重做",
38
+ connected: "已连接",
39
+ edge: "连线:{from} → {to}",
40
+ edgeLabel: ",标签:{label}",
41
+ noEdges: "这个节点没有连线",
42
+ labelSaved: "已保存标签",
43
+ group: "分组",
44
+ groupName: "分组名称",
45
+ makeGroup: "放进分组",
46
+ ungroup: "取消分组",
47
+ leaveGroup: "移出分组",
48
+ layers: {
49
+ front: "置于顶层",
50
+ forward: "上移一层",
51
+ backward: "下移一层",
52
+ back: "置于底层",
53
+ top: "已经在最上层",
54
+ bottom: "已经在最底层",
55
+ noneAbove: "上面没有和它重叠的节点",
56
+ noneBelow: "下面没有和它重叠的节点"
57
+ },
58
+ expand: "展开",
59
+ collapse: "收起",
60
+ separator: ",",
61
+ inGroup: "在“{group}”里",
62
+ groupSize: "有 {count} 个节点",
63
+ joinedGroup: "已放进“{group}”",
64
+ leftGroup: "已移出“{group}”",
65
+ ungrouped: "已取消“{group}”",
66
+ expanded: "已展开“{group}”",
67
+ collapsed: "已收起“{group}”",
68
+ resized: "{node},宽 {width},高 {height}",
69
+ groupMixed: "选中的节点不在同一个分组里,不能一起放进分组",
70
+ added: "已添加{node}",
71
+ connectTo: "连接到 {node} 的 {port},方向键换一个,Enter 确认",
72
+ noTarget: "没有可以连接的端口",
73
+ stale: "{count} 条连线的端口类型已经对不上",
74
+ refused: {
75
+ direction: "只能从输出连到输入",
76
+ self: "不能连到同一个节点",
77
+ type: "端口类型不匹配",
78
+ duplicate: "这两个端口已经连上了",
79
+ cycle: "这样会连成环",
80
+ custom: "不能连到这个端口"
81
+ },
82
+ status: {
83
+ wait: "等待",
84
+ process: "运行中",
85
+ finish: "已完成",
86
+ error: "失败"
87
+ },
88
+ board: {
89
+ tools: "白板工具",
90
+ select: "选择",
91
+ hand: "移动画布",
92
+ rect: "矩形",
93
+ ellipse: "椭圆",
94
+ diamond: "菱形",
95
+ sticky: "便签",
96
+ text: "文字",
97
+ editText: "编辑文字",
98
+ picked: "已选择{tool}工具",
99
+ named: "{kind}:{text}",
100
+ pen: "画笔",
101
+ eraser: "橡皮",
102
+ image: "图片",
103
+ ink: "笔迹",
104
+ imageFailed: "{name} 没能添加",
105
+ erased: "已擦除 {count} 条笔迹",
106
+ rotate: "顺时针旋转 90°",
107
+ unrotate: "取消旋转",
108
+ turned: "已旋转到 {degrees}°",
109
+ routeOf: "走向:{value}",
110
+ dashOf: "线型:{value}",
111
+ arrowOf: "箭头:{value}",
112
+ routes: {
113
+ straight: "直线",
114
+ elbow: "折线",
115
+ curve: "曲线"
116
+ },
117
+ dashes: {
118
+ solid: "实线",
119
+ dashed: "虚线",
120
+ dotted: "点线",
121
+ "dash-dot": "点划线"
122
+ },
123
+ arrows: {
124
+ none: "无箭头",
125
+ end: "终点箭头",
126
+ both: "两端箭头"
127
+ },
128
+ mixed: "多种",
129
+ routeSet: "已改为{value}",
130
+ dashSet: "已改为{value}",
131
+ arrowSet: "已改为{value}"
132
+ }
133
+ };
134
+ var zhTW = {
135
+ canvas: "流程畫布。方向鍵移動選取的節點,Tab 在節點之間切換,C 從選取的節點連線,E 選取它的連線,Delete 刪除。",
136
+ node: "節點",
137
+ ports: "{inputs} 個輸入,{outputs} 個輸出,已連接 {connected} 條",
138
+ input: "輸入",
139
+ output: "輸出",
140
+ zoomIn: "放大",
141
+ zoomOut: "縮小",
142
+ zoomLevel: "縮放 {value}%,點擊恢復 100%",
143
+ zoomReset: "恢復 100%",
144
+ fit: "適應畫布",
145
+ tidy: "整理",
146
+ minimap: "小地圖,點擊或拖曳移動畫布",
147
+ undo: "復原",
148
+ redo: "重做",
149
+ controls: "畫布控制",
150
+ menu: "選單",
151
+ toolbar: "選取節點的操作",
152
+ copy: "複製",
153
+ cut: "剪下",
154
+ paste: "貼上",
155
+ duplicate: "複製一份",
156
+ delete: "刪除",
157
+ selectAll: "全選",
158
+ more: "更多",
159
+ editLabel: "編輯標籤",
160
+ label: "連線標籤",
161
+ search: "搜尋節點",
162
+ noTypes: "沒有能接上的節點",
163
+ deleted: "已刪除 {count} 項",
164
+ tidied: "已整理 {count} 個節點",
165
+ undone: "已復原",
166
+ changeCancelled: "這次修改沒有生效",
167
+ redone: "已重做",
168
+ connected: "已連接",
169
+ edge: "連線:{from} → {to}",
170
+ edgeLabel: ",標籤:{label}",
171
+ noEdges: "這個節點沒有連線",
172
+ labelSaved: "已儲存標籤",
173
+ group: "群組",
174
+ groupName: "群組名稱",
175
+ makeGroup: "放進群組",
176
+ ungroup: "取消群組",
177
+ leaveGroup: "移出群組",
178
+ layers: {
179
+ front: "移到最上層",
180
+ forward: "上移一層",
181
+ backward: "下移一層",
182
+ back: "移到最下層",
183
+ top: "已經在最上層",
184
+ bottom: "已經在最下層",
185
+ noneAbove: "上面沒有和它重疊的節點",
186
+ noneBelow: "下面沒有和它重疊的節點"
187
+ },
188
+ expand: "展開",
189
+ collapse: "收合",
190
+ separator: ",",
191
+ inGroup: "在「{group}」裡",
192
+ groupSize: "有 {count} 個節點",
193
+ joinedGroup: "已放進「{group}」",
194
+ leftGroup: "已移出「{group}」",
195
+ ungrouped: "已取消「{group}」",
196
+ expanded: "已展開「{group}」",
197
+ collapsed: "已收合「{group}」",
198
+ resized: "{node},寬 {width},高 {height}",
199
+ groupMixed: "選取的節點不在同一個群組裡,不能一起放進群組",
200
+ added: "已新增{node}",
201
+ connectTo: "連接到 {node} 的 {port},方向鍵換一個,Enter 確認",
202
+ noTarget: "沒有可以連接的連接埠",
203
+ stale: "{count} 條連線的連接埠類型已經對不上",
204
+ refused: {
205
+ direction: "只能從輸出連到輸入",
206
+ self: "不能連到同一個節點",
207
+ type: "連接埠類型不符",
208
+ duplicate: "這兩個連接埠已經連上了",
209
+ cycle: "這樣會連成環",
210
+ custom: "不能連到這個連接埠"
211
+ },
212
+ status: {
213
+ wait: "等待",
214
+ process: "執行中",
215
+ finish: "已完成",
216
+ error: "失敗"
217
+ },
218
+ board: {
219
+ tools: "白板工具",
220
+ select: "選取",
221
+ hand: "移動畫布",
222
+ rect: "矩形",
223
+ ellipse: "橢圓",
224
+ diamond: "菱形",
225
+ sticky: "便利貼",
226
+ text: "文字",
227
+ editText: "編輯文字",
228
+ picked: "已選取{tool}工具",
229
+ named: "{kind}:{text}",
230
+ pen: "畫筆",
231
+ eraser: "橡皮擦",
232
+ image: "圖片",
233
+ ink: "筆跡",
234
+ imageFailed: "{name} 未能新增",
235
+ erased: "已擦除 {count} 條筆跡",
236
+ rotate: "順時針旋轉 90°",
237
+ unrotate: "取消旋轉",
238
+ turned: "已旋轉到 {degrees}°",
239
+ routeOf: "走向:{value}",
240
+ dashOf: "線型:{value}",
241
+ arrowOf: "箭頭:{value}",
242
+ routes: {
243
+ straight: "直線",
244
+ elbow: "折線",
245
+ curve: "曲線"
246
+ },
247
+ dashes: {
248
+ solid: "實線",
249
+ dashed: "虛線",
250
+ dotted: "點線",
251
+ "dash-dot": "點劃線"
252
+ },
253
+ arrows: {
254
+ none: "無箭頭",
255
+ end: "終點箭頭",
256
+ both: "兩端箭頭"
257
+ },
258
+ mixed: "多種",
259
+ routeSet: "已改為{value}",
260
+ dashSet: "已改為{value}",
261
+ arrowSet: "已改為{value}"
262
+ }
263
+ };
264
+ var en = {
265
+ canvas: "Flow canvas. Arrow keys move the selected nodes, Tab moves between nodes, C draws an edge from the selected node, E selects its edges, Delete removes.",
266
+ node: "node",
267
+ ports: "{inputs} inputs, {outputs} outputs, {connected} connected",
268
+ input: "Input",
269
+ output: "Output",
270
+ zoomIn: "Zoom in",
271
+ zoomOut: "Zoom out",
272
+ zoomLevel: "Zoom {value}%, click to reset to 100%",
273
+ zoomReset: "Reset to 100%",
274
+ fit: "Fit to view",
275
+ tidy: "Tidy up",
276
+ minimap: "Minimap; click or drag to move the canvas",
277
+ undo: "Undo",
278
+ redo: "Redo",
279
+ controls: "Canvas controls",
280
+ menu: "Menu",
281
+ toolbar: "Selected node actions",
282
+ copy: "Copy",
283
+ cut: "Cut",
284
+ paste: "Paste",
285
+ duplicate: "Duplicate",
286
+ delete: "Delete",
287
+ selectAll: "Select all",
288
+ more: "More",
289
+ editLabel: "Edit label",
290
+ label: "Edge label",
291
+ search: "Search nodes",
292
+ noTypes: "No node can take this edge",
293
+ deleted: "{count} deleted",
294
+ tidied: "{count} nodes tidied up",
295
+ undone: "Undone",
296
+ changeCancelled: "That change wasn't made",
297
+ redone: "Redone",
298
+ connected: "Connected",
299
+ edge: "Edge: {from} → {to}",
300
+ edgeLabel: ", label: {label}",
301
+ noEdges: "This node has no edges",
302
+ labelSaved: "Label saved",
303
+ group: "Group",
304
+ groupName: "Group name",
305
+ makeGroup: "Group",
306
+ ungroup: "Ungroup",
307
+ leaveGroup: "Remove from group",
308
+ layers: {
309
+ front: "Bring to front",
310
+ forward: "Bring forward",
311
+ backward: "Send backward",
312
+ back: "Send to back",
313
+ top: "Already at the front",
314
+ bottom: "Already at the back",
315
+ noneAbove: "No node above overlaps it",
316
+ noneBelow: "No node below overlaps it"
317
+ },
318
+ expand: "Expand",
319
+ collapse: "Collapse",
320
+ separator: ", ",
321
+ inGroup: "in {group}",
322
+ groupSize: "{count} nodes",
323
+ joinedGroup: "Added to {group}",
324
+ leftGroup: "Removed from {group}",
325
+ ungrouped: "Ungrouped {group}",
326
+ expanded: "Expanded {group}",
327
+ collapsed: "Collapsed {group}",
328
+ resized: "{node}, {width} wide, {height} high",
329
+ groupMixed: "The selected nodes are in different groups and can’t be grouped together",
330
+ added: "Added {node}",
331
+ connectTo: "Connect to {port} of {node}; arrow keys pick another, Enter confirms",
332
+ noTarget: "No port to connect to",
333
+ stale: "{count} edges no longer match their ports",
334
+ refused: {
335
+ direction: "Edges go from an output to an input",
336
+ self: "A node can’t connect to itself",
337
+ type: "The port types don’t match",
338
+ duplicate: "These ports are already connected",
339
+ cycle: "This would make a cycle",
340
+ custom: "Can’t connect to this port"
341
+ },
342
+ status: {
343
+ wait: "Waiting",
344
+ process: "Running",
345
+ finish: "Done",
346
+ error: "Failed"
347
+ },
348
+ board: {
349
+ tools: "Whiteboard tools",
350
+ select: "Select",
351
+ hand: "Hand",
352
+ rect: "Rectangle",
353
+ ellipse: "Ellipse",
354
+ diamond: "Diamond",
355
+ sticky: "Sticky note",
356
+ text: "Text",
357
+ editText: "Edit text",
358
+ picked: "{tool} tool",
359
+ named: "{kind}: {text}",
360
+ pen: "Pen",
361
+ eraser: "Eraser",
362
+ image: "Image",
363
+ ink: "Stroke",
364
+ imageFailed: "{name} could not be added",
365
+ erased: "Erased {count} strokes",
366
+ rotate: "Rotate 90° clockwise",
367
+ unrotate: "Reset rotation",
368
+ turned: "Rotated to {degrees}°",
369
+ routeOf: "Route: {value}",
370
+ dashOf: "Line: {value}",
371
+ arrowOf: "Arrows: {value}",
372
+ routes: {
373
+ straight: "Straight",
374
+ elbow: "Elbow",
375
+ curve: "Curved"
376
+ },
377
+ dashes: {
378
+ solid: "Solid",
379
+ dashed: "Dashed",
380
+ dotted: "Dotted",
381
+ "dash-dot": "Dash-dot"
382
+ },
383
+ arrows: {
384
+ none: "No arrows",
385
+ end: "Arrow at end",
386
+ both: "Arrows at both ends"
387
+ },
388
+ mixed: "Mixed",
389
+ routeSet: "Changed to {value}",
390
+ dashSet: "Changed to {value}",
391
+ arrowSet: "Changed to {value}"
392
+ }
393
+ };
394
+ var flowLocales = {
395
+ "zh-CN": zhCN,
396
+ "zh-TW": zhTW,
397
+ en
398
+ };
399
+ /**
400
+ * The flow editor's texts, picked by the name of DouUI's current locale.
401
+ * Pass `messages` to override any of them.
402
+ */
403
+ function useFlowMessages(override) {
404
+ const { locale } = useLocale();
405
+ return computed(() => {
406
+ const name = locale.value.name;
407
+ const base = flowLocales[name] ?? flowLocales[name.split("-")[0]] ?? (name.startsWith("zh") ? zhCN : en);
408
+ const extra = toValue(override);
409
+ if (!extra) return base;
410
+ const out = { ...base };
411
+ for (const [key, value] of Object.entries(extra)) {
412
+ if (value === void 0) continue;
413
+ const own = out[key];
414
+ out[key] = typeof own === "object" && own ? {
415
+ ...own,
416
+ ...value
417
+ } : value;
418
+ }
419
+ return out;
420
+ });
421
+ }
422
+ /** Fills `{name}` placeholders. */
423
+ var format = (text, params) => text.replace(/\{(\w+)\}/g, (match, key) => String(params[key] ?? match));
424
+ export { flowLocales, format, useFlowMessages };
425
+
426
+ //# sourceMappingURL=locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.js","names":[],"sources":["../src/locale.ts"],"sourcesContent":["import type { WhiteboardArrow, WhiteboardDash, WhiteboardRoute } from './whiteboard/model'\nimport { useLocale } from 'dou-ui'\nimport { computed, toValue, type MaybeRefOrGetter } from 'vue'\n\nexport interface FlowMessages {\n /** The canvas's accessible description. */\n canvas: string\n /** What a node is called to screen readers. */\n node: string\n /** Describes a node's ports; `{inputs}`, `{outputs}` and `{connected}` are counts. */\n ports: string\n input: string\n output: string\n zoomIn: string\n zoomOut: string\n /** `{value}` is the zoom in percent. */\n zoomLevel: string\n /** The tip on the zoom level, which resets it. */\n zoomReset: string\n fit: string\n tidy: string\n minimap: string\n undo: string\n redo: string\n controls: string\n /** The context menu and the floating toolbar. */\n menu: string\n toolbar: string\n copy: string\n cut: string\n paste: string\n duplicate: string\n delete: string\n selectAll: string\n more: string\n /** Editing an edge's text. */\n editLabel: string\n label: string\n /** The list offered when an edge is dropped on the canvas. */\n search: string\n noTypes: string\n /** Announcements; `{count}` is a number. */\n deleted: string\n tidied: string\n undone: string\n /** Said when an extension cancels a change without saying why. */\n changeCancelled: string\n redone: string\n connected: string\n /** An edge selected from the keyboard; `{from}` and `{to}` are node names. */\n edge: string\n /** Follows `edge` when it has a label. */\n edgeLabel: string\n noEdges: string\n labelSaved: string\n /** Groups. */\n group: string\n groupName: string\n makeGroup: string\n ungroup: string\n /** Takes a node out of the group it is in. */\n leaveGroup: string\n /**\n * Moving nodes up and down the stack. `top` and `bottom` say nothing moved\n * because the nodes already are there; `noneAbove` and `noneBelow`, that\n * no other node overlaps them that way.\n */\n layers: {\n front: string\n forward: string\n backward: string\n back: string\n top: string\n bottom: string\n noneAbove: string\n noneBelow: string\n }\n expand: string\n collapse: string\n /** Between parts of a node's description. */\n separator: string\n /** `{group}` is the group's name. */\n inGroup: string\n /** `{count}` nodes inside a group. */\n groupSize: string\n /** Announced; `{group}` is the group's name. */\n joinedGroup: string\n leftGroup: string\n ungrouped: string\n expanded: string\n collapsed: string\n /** After resizing from the keyboard; `{node}`, `{width}` and `{height}`. */\n resized: string\n /** Why the selection can't be grouped. */\n groupMixed: string\n /** `{node}` is the new node's name. */\n added: string\n /** While connecting from the keyboard; `{node}` and `{port}` are names. */\n connectTo: string\n noTarget: string\n /** `{count}` edges no longer fit their ports. */\n stale: string\n /** Why an edge was refused, announced when it is dropped. */\n refused: {\n direction: string\n self: string\n type: string\n duplicate: string\n cycle: string\n custom: string\n }\n status: { wait: string; process: string; finish: string; error: string }\n /** The whiteboard's toolbar and nodes. */\n board: {\n tools: string\n select: string\n hand: string\n rect: string\n ellipse: string\n diamond: string\n sticky: string\n text: string\n /** The field for a node's text. */\n editText: string\n /** Announced when a tool is picked; `{tool}` is its name. */\n picked: string\n /** A node's name when it has text; `{kind}` is what it is, as `rect` or `sticky`. */\n named: string\n pen: string\n eraser: string\n /** The toolbar button that inserts an image. */\n image: string\n /** A pen stroke. */\n ink: string\n /** `{name}` is the file's name. */\n imageFailed: string\n /** `{count}` strokes were erased. */\n erased: string\n rotate: string\n unrotate: string\n /** `{degrees}` is the node's new turn. */\n turned: string\n /** The connector buttons' names; `{value}` is the current choice. */\n routeOf: string\n dashOf: string\n arrowOf: string\n routes: Record<WhiteboardRoute, string>\n dashes: Record<WhiteboardDash, string>\n arrows: Record<WhiteboardArrow, string>\n /** The connector buttons' `{value}` when the selected connectors differ. */\n mixed: string\n /** Announced after a choice; `{value}` is the new one. */\n routeSet: string\n dashSet: string\n arrowSet: string\n }\n}\n\nconst zhCN: FlowMessages = {\n canvas:\n '流程画布。方向键移动选中的节点,Tab 在节点之间切换,C 从选中的节点连线,E 选中它的连线,Delete 删除。',\n node: '节点',\n ports: '{inputs} 个输入,{outputs} 个输出,已连接 {connected} 条',\n input: '输入',\n output: '输出',\n zoomIn: '放大',\n zoomOut: '缩小',\n zoomLevel: '缩放 {value}%,点击恢复 100%',\n zoomReset: '恢复 100%',\n fit: '适应画布',\n tidy: '整理',\n minimap: '小地图,点击或拖动移动画布',\n undo: '撤销',\n redo: '重做',\n controls: '画布控制',\n menu: '菜单',\n toolbar: '选中节点的操作',\n copy: '复制',\n cut: '剪切',\n paste: '粘贴',\n duplicate: '复制一份',\n delete: '删除',\n selectAll: '全选',\n more: '更多',\n editLabel: '编辑标签',\n label: '连线标签',\n search: '搜索节点',\n noTypes: '没有能接上的节点',\n deleted: '已删除 {count} 项',\n tidied: '已整理 {count} 个节点',\n undone: '已撤销',\n changeCancelled: '这次修改没有生效',\n redone: '已重做',\n connected: '已连接',\n edge: '连线:{from} → {to}',\n edgeLabel: ',标签:{label}',\n noEdges: '这个节点没有连线',\n labelSaved: '已保存标签',\n group: '分组',\n groupName: '分组名称',\n makeGroup: '放进分组',\n ungroup: '取消分组',\n leaveGroup: '移出分组',\n layers: {\n front: '置于顶层',\n forward: '上移一层',\n backward: '下移一层',\n back: '置于底层',\n top: '已经在最上层',\n bottom: '已经在最底层',\n noneAbove: '上面没有和它重叠的节点',\n noneBelow: '下面没有和它重叠的节点',\n },\n expand: '展开',\n collapse: '收起',\n separator: ',',\n inGroup: '在“{group}”里',\n groupSize: '有 {count} 个节点',\n joinedGroup: '已放进“{group}”',\n leftGroup: '已移出“{group}”',\n ungrouped: '已取消“{group}”',\n expanded: '已展开“{group}”',\n collapsed: '已收起“{group}”',\n resized: '{node},宽 {width},高 {height}',\n groupMixed: '选中的节点不在同一个分组里,不能一起放进分组',\n added: '已添加{node}',\n connectTo: '连接到 {node} 的 {port},方向键换一个,Enter 确认',\n noTarget: '没有可以连接的端口',\n stale: '{count} 条连线的端口类型已经对不上',\n refused: {\n direction: '只能从输出连到输入',\n self: '不能连到同一个节点',\n type: '端口类型不匹配',\n duplicate: '这两个端口已经连上了',\n cycle: '这样会连成环',\n custom: '不能连到这个端口',\n },\n status: { wait: '等待', process: '运行中', finish: '已完成', error: '失败' },\n board: {\n tools: '白板工具',\n select: '选择',\n hand: '移动画布',\n rect: '矩形',\n ellipse: '椭圆',\n diamond: '菱形',\n sticky: '便签',\n text: '文字',\n editText: '编辑文字',\n picked: '已选择{tool}工具',\n named: '{kind}:{text}',\n pen: '画笔',\n eraser: '橡皮',\n image: '图片',\n ink: '笔迹',\n imageFailed: '{name} 没能添加',\n erased: '已擦除 {count} 条笔迹',\n rotate: '顺时针旋转 90°',\n unrotate: '取消旋转',\n turned: '已旋转到 {degrees}°',\n routeOf: '走向:{value}',\n dashOf: '线型:{value}',\n arrowOf: '箭头:{value}',\n routes: { straight: '直线', elbow: '折线', curve: '曲线' },\n dashes: { solid: '实线', dashed: '虚线', dotted: '点线', 'dash-dot': '点划线' },\n arrows: { none: '无箭头', end: '终点箭头', both: '两端箭头' },\n mixed: '多种',\n routeSet: '已改为{value}',\n dashSet: '已改为{value}',\n arrowSet: '已改为{value}',\n },\n}\n\nconst zhTW: FlowMessages = {\n canvas:\n '流程畫布。方向鍵移動選取的節點,Tab 在節點之間切換,C 從選取的節點連線,E 選取它的連線,Delete 刪除。',\n node: '節點',\n ports: '{inputs} 個輸入,{outputs} 個輸出,已連接 {connected} 條',\n input: '輸入',\n output: '輸出',\n zoomIn: '放大',\n zoomOut: '縮小',\n zoomLevel: '縮放 {value}%,點擊恢復 100%',\n zoomReset: '恢復 100%',\n fit: '適應畫布',\n tidy: '整理',\n minimap: '小地圖,點擊或拖曳移動畫布',\n undo: '復原',\n redo: '重做',\n controls: '畫布控制',\n menu: '選單',\n toolbar: '選取節點的操作',\n copy: '複製',\n cut: '剪下',\n paste: '貼上',\n duplicate: '複製一份',\n delete: '刪除',\n selectAll: '全選',\n more: '更多',\n editLabel: '編輯標籤',\n label: '連線標籤',\n search: '搜尋節點',\n noTypes: '沒有能接上的節點',\n deleted: '已刪除 {count} 項',\n tidied: '已整理 {count} 個節點',\n undone: '已復原',\n changeCancelled: '這次修改沒有生效',\n redone: '已重做',\n connected: '已連接',\n edge: '連線:{from} → {to}',\n edgeLabel: ',標籤:{label}',\n noEdges: '這個節點沒有連線',\n labelSaved: '已儲存標籤',\n group: '群組',\n groupName: '群組名稱',\n makeGroup: '放進群組',\n ungroup: '取消群組',\n leaveGroup: '移出群組',\n layers: {\n front: '移到最上層',\n forward: '上移一層',\n backward: '下移一層',\n back: '移到最下層',\n top: '已經在最上層',\n bottom: '已經在最下層',\n noneAbove: '上面沒有和它重疊的節點',\n noneBelow: '下面沒有和它重疊的節點',\n },\n expand: '展開',\n collapse: '收合',\n separator: ',',\n inGroup: '在「{group}」裡',\n groupSize: '有 {count} 個節點',\n joinedGroup: '已放進「{group}」',\n leftGroup: '已移出「{group}」',\n ungrouped: '已取消「{group}」',\n expanded: '已展開「{group}」',\n collapsed: '已收合「{group}」',\n resized: '{node},寬 {width},高 {height}',\n groupMixed: '選取的節點不在同一個群組裡,不能一起放進群組',\n added: '已新增{node}',\n connectTo: '連接到 {node} 的 {port},方向鍵換一個,Enter 確認',\n noTarget: '沒有可以連接的連接埠',\n stale: '{count} 條連線的連接埠類型已經對不上',\n refused: {\n direction: '只能從輸出連到輸入',\n self: '不能連到同一個節點',\n type: '連接埠類型不符',\n duplicate: '這兩個連接埠已經連上了',\n cycle: '這樣會連成環',\n custom: '不能連到這個連接埠',\n },\n status: { wait: '等待', process: '執行中', finish: '已完成', error: '失敗' },\n board: {\n tools: '白板工具',\n select: '選取',\n hand: '移動畫布',\n rect: '矩形',\n ellipse: '橢圓',\n diamond: '菱形',\n sticky: '便利貼',\n text: '文字',\n editText: '編輯文字',\n picked: '已選取{tool}工具',\n named: '{kind}:{text}',\n pen: '畫筆',\n eraser: '橡皮擦',\n image: '圖片',\n ink: '筆跡',\n imageFailed: '{name} 未能新增',\n erased: '已擦除 {count} 條筆跡',\n rotate: '順時針旋轉 90°',\n unrotate: '取消旋轉',\n turned: '已旋轉到 {degrees}°',\n routeOf: '走向:{value}',\n dashOf: '線型:{value}',\n arrowOf: '箭頭:{value}',\n routes: { straight: '直線', elbow: '折線', curve: '曲線' },\n dashes: { solid: '實線', dashed: '虛線', dotted: '點線', 'dash-dot': '點劃線' },\n arrows: { none: '無箭頭', end: '終點箭頭', both: '兩端箭頭' },\n mixed: '多種',\n routeSet: '已改為{value}',\n dashSet: '已改為{value}',\n arrowSet: '已改為{value}',\n },\n}\n\nconst en: FlowMessages = {\n canvas:\n 'Flow canvas. Arrow keys move the selected nodes, Tab moves between nodes, C draws an edge from the selected node, E selects its edges, Delete removes.',\n node: 'node',\n ports: '{inputs} inputs, {outputs} outputs, {connected} connected',\n input: 'Input',\n output: 'Output',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n zoomLevel: 'Zoom {value}%, click to reset to 100%',\n zoomReset: 'Reset to 100%',\n fit: 'Fit to view',\n tidy: 'Tidy up',\n minimap: 'Minimap; click or drag to move the canvas',\n undo: 'Undo',\n redo: 'Redo',\n controls: 'Canvas controls',\n menu: 'Menu',\n toolbar: 'Selected node actions',\n copy: 'Copy',\n cut: 'Cut',\n paste: 'Paste',\n duplicate: 'Duplicate',\n delete: 'Delete',\n selectAll: 'Select all',\n more: 'More',\n editLabel: 'Edit label',\n label: 'Edge label',\n search: 'Search nodes',\n noTypes: 'No node can take this edge',\n deleted: '{count} deleted',\n tidied: '{count} nodes tidied up',\n undone: 'Undone',\n changeCancelled: \"That change wasn't made\",\n redone: 'Redone',\n connected: 'Connected',\n edge: 'Edge: {from} → {to}',\n edgeLabel: ', label: {label}',\n noEdges: 'This node has no edges',\n labelSaved: 'Label saved',\n group: 'Group',\n groupName: 'Group name',\n makeGroup: 'Group',\n ungroup: 'Ungroup',\n leaveGroup: 'Remove from group',\n layers: {\n front: 'Bring to front',\n forward: 'Bring forward',\n backward: 'Send backward',\n back: 'Send to back',\n top: 'Already at the front',\n bottom: 'Already at the back',\n noneAbove: 'No node above overlaps it',\n noneBelow: 'No node below overlaps it',\n },\n expand: 'Expand',\n collapse: 'Collapse',\n separator: ', ',\n inGroup: 'in {group}',\n groupSize: '{count} nodes',\n joinedGroup: 'Added to {group}',\n leftGroup: 'Removed from {group}',\n ungrouped: 'Ungrouped {group}',\n expanded: 'Expanded {group}',\n collapsed: 'Collapsed {group}',\n resized: '{node}, {width} wide, {height} high',\n groupMixed: 'The selected nodes are in different groups and can’t be grouped together',\n added: 'Added {node}',\n connectTo: 'Connect to {port} of {node}; arrow keys pick another, Enter confirms',\n noTarget: 'No port to connect to',\n stale: '{count} edges no longer match their ports',\n refused: {\n direction: 'Edges go from an output to an input',\n self: 'A node can’t connect to itself',\n type: 'The port types don’t match',\n duplicate: 'These ports are already connected',\n cycle: 'This would make a cycle',\n custom: 'Can’t connect to this port',\n },\n status: { wait: 'Waiting', process: 'Running', finish: 'Done', error: 'Failed' },\n board: {\n tools: 'Whiteboard tools',\n select: 'Select',\n hand: 'Hand',\n rect: 'Rectangle',\n ellipse: 'Ellipse',\n diamond: 'Diamond',\n sticky: 'Sticky note',\n text: 'Text',\n editText: 'Edit text',\n picked: '{tool} tool',\n named: '{kind}: {text}',\n pen: 'Pen',\n eraser: 'Eraser',\n image: 'Image',\n ink: 'Stroke',\n imageFailed: '{name} could not be added',\n erased: 'Erased {count} strokes',\n rotate: 'Rotate 90° clockwise',\n unrotate: 'Reset rotation',\n turned: 'Rotated to {degrees}°',\n routeOf: 'Route: {value}',\n dashOf: 'Line: {value}',\n arrowOf: 'Arrows: {value}',\n routes: { straight: 'Straight', elbow: 'Elbow', curve: 'Curved' },\n dashes: { solid: 'Solid', dashed: 'Dashed', dotted: 'Dotted', 'dash-dot': 'Dash-dot' },\n arrows: { none: 'No arrows', end: 'Arrow at end', both: 'Arrows at both ends' },\n mixed: 'Mixed',\n routeSet: 'Changed to {value}',\n dashSet: 'Changed to {value}',\n arrowSet: 'Changed to {value}',\n },\n}\n\nexport const flowLocales: Record<string, FlowMessages> = { 'zh-CN': zhCN, 'zh-TW': zhTW, en }\n\n/** Texts to change; nested groups are merged, so only the ones given are replaced. */\nexport type FlowMessagesOverride = {\n [K in keyof FlowMessages]?: FlowMessages[K] extends string ? string : Partial<FlowMessages[K]>\n}\n\n/**\n * The flow editor's texts, picked by the name of DouUI's current locale.\n * Pass `messages` to override any of them.\n */\nexport function useFlowMessages(override?: MaybeRefOrGetter<FlowMessagesOverride | undefined>) {\n const { locale } = useLocale()\n return computed<FlowMessages>(() => {\n const name = locale.value.name\n const base =\n flowLocales[name] ?? flowLocales[name.split('-')[0]!] ?? (name.startsWith('zh') ? zhCN : en)\n const extra = toValue(override)\n if (!extra) return base\n const out = { ...base } as Record<string, unknown>\n for (const [key, value] of Object.entries(extra)) {\n if (value === undefined) continue\n const own = out[key]\n out[key] = typeof own === 'object' && own ? { ...own, ...(value as object) } : value\n }\n return out as unknown as FlowMessages\n })\n}\n\n/** Fills `{name}` placeholders. */\nexport const format = (text: string, params: Record<string, string | number>) =>\n text.replace(/\\{(\\w+)\\}/g, (match, key: string) => String(params[key] ?? match))\n"],"mappings":"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"}
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ @layer dou.components{.dou-flow-editor{--dou-flow-editor-dot:color-mix(in oklab,var(--dou-color-text)16%,transparent);--dou-flow-editor-node-bg:var(--dou-color-bg-surface);--dou-flow-editor-node-border:var(--dou-color-border);--dou-flow-editor-node-border-hover:var(--dou-color-border-strong);--dou-flow-editor-node-radius:var(--dou-radius-container);--dou-flow-editor-edge:var(--dou-color-border-strong);--dou-flow-editor-edge-hover:var(--dou-color-text-tertiary);--dou-flow-editor-selected:var(--dou-color-primary);--dou-flow-editor-guide:var(--dou-color-primary);--dou-flow-editor-port:var(--dou-color-text-tertiary);--dou-flow-editor-status-wait:var(--dou-color-text-disabled);--dou-flow-editor-status-process:var(--dou-color-warning);--dou-flow-editor-status-finish:var(--dou-color-success);--dou-flow-editor-status-error:var(--dou-color-danger);position:relative;box-sizing:border-box;overflow:hidden;border:1px solid var(--dou-color-border);border-radius:var(--dou-radius-container);background-color:var(--dou-color-bg-canvas);background-image:radial-gradient(circle,var(--dou-flow-editor-dot)1px,transparent 1px);color:var(--dou-color-text);font-family:var(--dou-font-family);font-size:var(--dou-font-size-md);line-height:var(--dou-font-line-height);touch-action:none;user-select:none;-webkit-user-select:none;outline:none;cursor:default;width:100%;min-width:0;height:480px}.dou-flow-editor:focus-visible{outline:2px solid var(--dou-color-focus);outline-offset:2px}.dou-flow-editor.is-space{cursor:grab}.dou-flow-editor.is-connecting{cursor:crosshair}.dou-flow-editor.is-connecting *{cursor:crosshair}.dou-flow-editor.is-refused{cursor:not-allowed}.dou-flow-editor.is-refused *{cursor:not-allowed}.dou-flow-editor.is-panning{cursor:grabbing}.dou-flow-editor.is-panning *{cursor:grabbing}.dou-flow-editor.is-dragging{cursor:grabbing}.dou-flow-editor.is-dragging *{cursor:grabbing}.dou-flow-editor__layer{position:absolute;transform-origin:0 0;top:0;left:0}.dou-flow-editor__edges,.dou-flow-editor__guides{position:absolute;overflow:visible;pointer-events:none;width:1px;height:1px;top:0;left:0}.dou-flow-editor__edge{fill:none;stroke:var(--dou-flow-editor-edge);stroke-width:var(--dou-flow-editor-edge-width,1px);vector-effect:non-scaling-stroke;transition:stroke var(--dou-motion-duration-fast)var(--dou-motion-easing)}.dou-flow-editor__edge.is-selected{stroke:var(--dou-flow-editor-selected);stroke-width:calc(var(--dou-flow-editor-edge-width,1px) + 1px)}.dou-flow-editor__edge.is-stale{stroke:var(--dou-color-danger);stroke-dasharray:4 3}.dou-flow-editor__edge.is-mark{animation:none;stroke-dasharray:none!important}.dou-flow-editor__edge.is-preview{stroke:var(--dou-flow-editor-selected);stroke-dasharray:4 4}.dou-flow-editor__edge-hit{fill:none;stroke:transparent;stroke-width:12px;vector-effect:non-scaling-stroke;pointer-events:stroke;cursor:pointer}.dou-flow-editor__edge-hit:hover~.dou-flow-editor__edge:not(.is-selected){stroke:var(--dou-flow-editor-edge-hover)}.dou-flow-editor__edge.is-animated:not(.is-stale){stroke-dasharray:6 4;animation:.48s linear infinite dou-flow-editor-flow}@media (prefers-reduced-motion:reduce){.dou-flow-editor__edge.is-animated:not(.is-stale){animation:none}}@keyframes dou-flow-editor-flow{0%{stroke-dashoffset:10}to{stroke-dashoffset:0}}.dou-flow-editor__label{position:absolute;box-sizing:border-box;overflow:hidden;border:1px solid var(--dou-color-border);border-radius:var(--dou-radius-control);background:var(--dou-color-bg-surface);color:var(--dou-color-text-secondary);font-size:var(--dou-font-size-sm);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;max-width:200px;padding:0 6px;line-height:20px;top:0;left:0;translate:-50% -50%}.dou-flow-editor__label.is-selected{z-index:1;border-color:var(--dou-flow-editor-selected);color:var(--dou-color-text)}.dou-flow-editor__label.is-bend{cursor:ew-resize}.dou-flow-editor__label.is-bend.is-y{cursor:ns-resize}.dou-flow-editor__label.is-editing{z-index:2;display:inline-grid;overflow:visible;font-size:max(var(--dou-font-size-input-min,0px),var(--dou-font-size-sm));cursor:text;min-width:48px;max-width:none}.dou-flow-editor__label.is-editing:after{content:attr(data-value)" ";grid-area:1/1;visibility:hidden;white-space:pre}.dou-flow-editor__label-input{grid-area:1/1;outline:none;color:inherit;font:inherit;user-select:text;-webkit-user-select:text;background:0 0;border:none;width:100%;min-width:0;padding:0}.dou-flow-editor__simple{position:absolute;display:flex;box-sizing:border-box;overflow:hidden;border:1px solid var(--dou-flow-editor-node-border);border-radius:var(--dou-flow-editor-node-radius);background:var(--dou-flow-editor-node-bg);outline:none;align-items: center;padding:0 16px;top:0;left:0}.dou-flow-editor__simple.is-selected{border-color:var(--dou-flow-editor-selected);box-shadow:0 0 0 1px var(--dou-flow-editor-selected)}.dou-flow-editor.is-tiny .dou-flow-editor__simple:not(.is-selected){background:color-mix(in oklab,var(--dou-color-text)14%,transparent);border-color:#0000}.dou-flow-editor__simple-label{overflow:hidden;color:var(--dou-color-text-secondary);font-size:min(calc(12px/var(--dou-flow-editor-zoom,1)),40px);white-space:nowrap;text-overflow:ellipsis;line-height:1.2}.dou-flow-editor__bend{position:absolute;z-index:1;box-sizing:border-box;border:1px solid var(--dou-flow-editor-selected);background:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-sm);cursor:ew-resize;scale:calc(1/var(--dou-flow-editor-zoom,1));border-radius:3px;width:6px;height:16px;top:0;left:0}.dou-flow-editor__bend.is-y{cursor:ns-resize;width:16px;height:6px}.dou-flow-editor__bend:before{content:"";position:absolute;inset:-8px}.dou-flow-editor__guides line{stroke:var(--dou-flow-editor-guide);stroke-width:1px;vector-effect:non-scaling-stroke}.dou-flow-editor__node{position:absolute;box-sizing:border-box;border:1px solid var(--dou-flow-editor-node-border);border-radius:var(--dou-flow-editor-node-radius);background-color:var(--dou-flow-editor-node-bg);box-shadow:var(--dou-shadow-sm);outline:none;transition-property:border-color,box-shadow;transition-duration:var(--dou-motion-duration-fast);transition-timing-function:var(--dou-motion-easing);top:0;left:0}.dou-flow-editor__node:hover{border-color:var(--dou-flow-editor-node-border-hover)}.dou-flow-editor__node:focus-visible{outline:2px solid var(--dou-color-focus);outline-offset:2px}.dou-flow-editor__node.is-selected{border-color:var(--dou-flow-editor-selected);box-shadow:0 0 0 3px color-mix(in oklab,var(--dou-flow-editor-selected)14%,transparent),var(--dou-shadow-sm)}.dou-flow-editor__node.is-dragging{z-index:1;box-shadow:var(--dou-shadow-md)}.dou-flow-editor__node.is-selected.is-dragging{box-shadow:0 0 0 3px color-mix(in oklab,var(--dou-flow-editor-selected)14%,transparent),var(--dou-shadow-md)}.dou-flow-editor__node :-webkit-any(input,textarea,[contenteditable=true]){user-select:text;-webkit-user-select:text}.dou-flow-editor__node :-moz-any(input,textarea,[contenteditable=true]){user-select:text;-webkit-user-select:text}.dou-flow-editor__node :is(input,textarea,[contenteditable=true]){user-select:text;-webkit-user-select:text}.dou-flow-editor__node.is-bare{box-shadow:none;background:0 0;border-color:#0000}.dou-flow-editor__node.is-bare:hover{border-color:#0000}.dou-flow-editor__node.is-bare.is-selected{box-shadow:none;outline:calc(1px/var(--dou-flow-editor-zoom,1))solid var(--dou-flow-editor-selected);outline-offset:calc(4px/var(--dou-flow-editor-zoom,1));border-color:#0000}.dou-flow-editor__node.is-bare.is-selected.is-turned{outline:none}.dou-flow-editor__node.is-bare.is-selected.is-turned:after{--dou-flow-node-ring:calc(5px/var(--dou-flow-editor-zoom,1));content:"";position:absolute;inset:calc(var(--dou-flow-node-ring)*-1);box-sizing:border-box;border:calc(1px/var(--dou-flow-editor-zoom,1))solid var(--dou-flow-editor-selected);border-radius:calc(var(--dou-flow-editor-node-radius) + var(--dou-flow-node-ring));pointer-events:none;rotate:var(--dou-flow-node-rotation)}.dou-flow-editor__node.is-bare.is-dragging{box-shadow:none}.dou-flow-port{--dou-flow-port-color:var(--dou-flow-editor-port);position:absolute;z-index:1;box-sizing:border-box;border:1px solid var(--dou-flow-port-color);border-radius:var(--dou-radius-full);background-color:var(--dou-flow-editor-node-bg);cursor:crosshair;transition-property:opacity,scale,box-shadow;transition-duration:var(--dou-motion-duration-fast);transition-timing-function:var(--dou-motion-easing);width:8px;height:8px}.dou-flow-port:before{position:absolute;border-radius:inherit;content:"";inset:-8px}@media (pointer:coarse){.dou-flow-port:before{inset:-12px}}.dou-flow-port.is-connected{background-color:var(--dou-flow-port-color)}.dou-flow-port.is-square{border-radius:2px}.dou-flow-port.is-diamond{border-radius:1px;width:8px;height:8px;rotate:45deg}.dou-flow-port.is-triangle{background:0 0;border:0;border-radius:0;width:10px;height:10px}.dou-flow-port.is-triangle svg{display:block;overflow:visible;fill:var(--dou-flow-editor-node-bg);stroke:var(--dou-flow-port-color);stroke-linejoin:round;stroke-width:1px;width:100%;height:100%}.dou-flow-port.is-triangle.is-connected svg{fill:var(--dou-flow-port-color)}.dou-flow-port.is-triangle.is-top svg{rotate:90deg}.dou-flow-port.is-triangle.is-bottom svg{rotate:90deg}.dou-flow-port.is-unavailable{opacity:.32}.dou-flow-port.is-valid{box-shadow:0 0 0 3px color-mix(in oklab,var(--dou-flow-editor-selected)16%,transparent)}.dou-flow-port.is-active{box-shadow:0 0 0 3px color-mix(in oklab,var(--dou-flow-editor-selected)16%,transparent)}.dou-flow-port.is-candidate{border-color:var(--dou-flow-editor-selected);background-color:var(--dou-flow-editor-selected);box-shadow:0 0 0 4px color-mix(in oklab,var(--dou-flow-editor-selected)20%,transparent);scale:1.25}.dou-flow-port.is-refused{opacity:1;border-color:var(--dou-color-danger);box-shadow:0 0 0 3px color-mix(in oklab,var(--dou-color-danger)16%,transparent)}.dou-flow-port.is-triangle.is-candidate{box-shadow:none;background:0 0}.dou-flow-port.is-triangle.is-candidate svg{fill:var(--dou-flow-editor-selected);stroke:var(--dou-flow-editor-selected)}.dou-flow-port.is-left{top:50%;left:0;translate:calc(-50% - .5px) -50%}.dou-flow-port.is-right{top:50%;left:100%;translate:calc(.5px - 50%) -50%}.dou-flow-port.is-top{top:0;left:50%;translate:-50% calc(-50% - .5px)}.dou-flow-port.is-bottom{top:100%;left:50%;translate:-50% calc(.5px - 50%)}.dou-flow-editor__marquee{position:absolute;box-sizing:border-box;border:1px solid var(--dou-flow-editor-selected);background-color:color-mix(in oklab,var(--dou-flow-editor-selected)8%,transparent);pointer-events:none;border-radius:2px;top:0;left:0}.dou-flow-editor__panels{position:absolute;pointer-events:none;inset:0}.dou-flow-editor__panels>*{pointer-events:auto}.dou-flow-editor__find{position:absolute;display:flex;container-type:inline-size;pointer-events:none;justify-content:flex-end;align-items: flex-start;top:12px;left:12px;right:12px}.dou-flow-editor__find>*{pointer-events:auto}.dou-flow-editor__found{position:absolute;box-sizing:border-box;border-radius:var(--dou-flow-editor-node-radius);outline:4px solid color-mix(in oklab,var(--dou-color-warning)35%,transparent);outline-offset:2px;pointer-events:none;top:0;left:0}.dou-flow-editor__found.is-current{outline-color:color-mix(in oklab,var(--dou-color-warning)70%,transparent)}.dou-flow-editor__notice{position:absolute;z-index:20;box-sizing:border-box;border:1px solid var(--dou-color-border);border-radius:var(--dou-radius-control);background-color:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-md);color:var(--dou-color-text);font-size:var(--dou-font-size-sm);pointer-events:none;width:max-content;max-width:calc(100% - 24px);padding:6px 12px;bottom:12px;left:50%;transform:translate(-50%)}.dou-flow-editor__end,.dou-flow-editor__live{position:absolute;overflow:hidden;clip-path:inset(50%);white-space:nowrap;width:1px;height:1px}.dou-flow-editor__node.is-container{background-color:color-mix(in oklab,var(--dou-color-text)3%,var(--dou-flow-editor-node-bg));box-shadow:none}.dou-flow-editor__node.is-container.is-selected{box-shadow:0 0 0 3px color-mix(in oklab,var(--dou-flow-editor-selected)14%,transparent)}.dou-flow-editor__node.is-container.is-selected.is-dragging{box-shadow:0 0 0 3px color-mix(in oklab,var(--dou-flow-editor-selected)14%,transparent)}.dou-flow-editor__node.is-container.is-dragging:not(.is-selected){box-shadow:var(--dou-shadow-sm)}.dou-flow-editor__node.is-drop-target,.dou-flow-editor__simple.is-drop-target{border-color:var(--dou-flow-editor-selected);background-color:color-mix(in oklab,var(--dou-flow-editor-selected)6%,var(--dou-flow-editor-node-bg))}.dou-flow-editor__resize{position:absolute;box-sizing:border-box;border:1px solid var(--dou-flow-editor-selected);background:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-sm);cursor:nwse-resize;translate:50% 50%;scale:calc(1/var(--dou-flow-editor-zoom,1));border-radius:3px;width:10px;height:10px;bottom:0;right:0}.dou-flow-editor__resize:before{content:"";position:absolute;inset:-8px}.dou-flow-peers{--dou-flow-peer-color:var(--dou-color-text-secondary);--dou-flow-peer-line:calc(1.5px/var(--dou-flow-editor-zoom,1))}.dou-flow-peer{position:absolute;box-sizing:border-box;border-radius:var(--dou-flow-editor-node-radius);outline:var(--dou-flow-peer-line)solid var(--dou-flow-peer-color);outline-offset:calc(3px/var(--dou-flow-editor-zoom,1));pointer-events:none;top:0;left:0}.dou-flow-peer.is-moving{outline-style:dashed;background-color:color-mix(in oklab,var(--dou-flow-peer-color)8%,transparent)}.dou-flow-peer__name{position:absolute;margin-bottom:calc(4px/var(--dou-flow-editor-zoom,1));background-color:var(--dou-flow-peer-color);color:oklch(from var(--dou-flow-peer-color)clamp(.2,(.66 - l)*100,.99)0 0);font-size:var(--dou-font-size-sm);white-space:nowrap;scale:calc(1/var(--dou-flow-editor-zoom,1));transform-origin:left bottom;border-radius:4px;padding:0 6px;line-height:18px;bottom:100%;left:0}.dou-flow-peer__lines{position:absolute;overflow:visible;pointer-events:none;width:1px;height:1px;top:0;left:0}.dou-flow-peer__lines path{fill:none;stroke:var(--dou-flow-peer-color);stroke-width:1.5px;stroke-dasharray:4 3;vector-effect:non-scaling-stroke}.dou-flow-group-node{height:100%}.dou-flow-editor__node.is-collapsed>.dou-flow-group-node{height:auto}.dou-flow-group-node__head{display:flex;box-sizing:border-box;align-items: center;gap:4px;height:40px;padding:0 12px 0 8px}.dou-flow-group-node__toggle{display:inline-flex;color:var(--dou-color-text-tertiary);cursor:pointer;transition-property:background-color,color;transition-duration:var(--dou-motion-duration-fast);transition-timing-function:var(--dou-motion-easing);background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items: center;width:24px;height:24px;padding:0;font-size:16px}.dou-flow-group-node__toggle>svg{transition:rotate var(--dou-motion-duration-fast)var(--dou-motion-easing)}.dou-flow-group-node__toggle:hover:not(:disabled){background:color-mix(in oklab,var(--dou-color-text)6%,transparent);color:var(--dou-color-text)}.dou-flow-group-node__toggle:focus-visible{outline:2px solid var(--dou-color-focus);outline-offset:0}.dou-flow-group-node__toggle:disabled{cursor:default}.dou-flow-group-node.is-collapsed .dou-flow-group-node__toggle>svg{rotate:-90deg}.dou-flow-group-node__title{overflow:hidden;color:var(--dou-color-text-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:500;line-height:20px}.dou-flow-group-node__input{box-sizing:border-box;border:1px solid var(--dou-flow-editor-selected);outline:none;background:var(--dou-color-bg-surface);color:var(--dou-color-text);font:inherit;font-size:max(var(--dou-font-size-input-min,0px),13px);border-radius:6px;flex:1;min-width:0;height:24px;padding:0 6px}@media (prefers-reduced-motion:reduce){.dou-flow-group-node__toggle>svg{transition:none}}.dou-flow-default-node{width:208px}.dou-flow-editor__node.is-sized>.dou-flow-default-node{width:auto}.dou-flow-default-node__head{position:relative;display:flex;box-sizing:border-box;align-items: center;gap:8px;min-height:44px;padding:0 12px}.dou-flow-default-node__icon{display:inline-flex;border-radius:var(--dou-radius-control);background-color:var(--dou-color-bg-muted);color:var(--dou-color-text-secondary);flex:none;justify-content:center;align-items: center;width:24px;height:24px}.dou-flow-default-node__icon svg{width:16px;height:16px}.dou-flow-default-node__title{overflow-x:clip;font-weight:var(--dou-font-weight-medium);text-overflow:ellipsis;white-space:nowrap;text-box:trim-both cap alphabetic;flex:1;min-width:0}.dou-flow-default-node__status{border-radius:var(--dou-radius-full);background-color:var(--dou-flow-editor-status-wait);flex:none;width:8px;height:8px}.dou-flow-default-node__status.is-process{background-color:var(--dou-flow-editor-status-process)}.dou-flow-default-node__status.is-finish{background-color:var(--dou-flow-editor-status-finish)}.dou-flow-default-node__status.is-error{background-color:var(--dou-flow-editor-status-error)}.dou-flow-default-node__description{color:var(--dou-color-text-secondary);font-size:var(--dou-font-size-sm);margin:-4px 0 0;padding:0 12px 12px;line-height:20px}.dou-flow-default-node__ports{border-top:1px solid var(--dou-color-border-subtle);padding:3px 0 4px}.dou-flow-default-node__row{position:relative;display:flex;box-sizing:border-box;color:var(--dou-color-text-secondary);font-size:var(--dou-font-size-sm);align-items: center;height:28px;padding:0 12px}.dou-flow-default-node__port{overflow-x:clip;text-overflow:ellipsis;white-space:nowrap;text-box:trim-both cap alphabetic;min-width:0}.dou-flow-default-node__port.is-output{text-align:right;margin-left:auto}.dou-flow-minimap{position:absolute;overflow:hidden;border:1px solid var(--dou-color-border);border-radius:var(--dou-radius-container);background-color:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-sm);line-height:0}.dou-flow-minimap.is-top-left{top:12px;left:12px}.dou-flow-minimap.is-top-right{top:12px;right:12px}.dou-flow-minimap.is-bottom-left{bottom:12px;left:12px}.dou-flow-minimap.is-bottom-right{bottom:12px;right:12px}.dou-flow-minimap svg{display:block;cursor:pointer;touch-action:none}.dou-flow-minimap.is-dragging svg{cursor:grabbing}.dou-flow-minimap__node{fill:var(--dou-color-bg-muted);stroke:var(--dou-color-border-strong);stroke-width:1px;vector-effect:non-scaling-stroke}.dou-flow-minimap__node.is-selected{fill:color-mix(in oklab,var(--dou-flow-editor-selected)24%,var(--dou-color-bg-surface));stroke:var(--dou-flow-editor-selected)}.dou-flow-minimap__shade{fill:color-mix(in oklab,var(--dou-color-text)6%,transparent)}.dou-flow-minimap__view{fill:none;stroke:var(--dou-color-text-tertiary);stroke-width:1px;vector-effect:non-scaling-stroke}.dou-flow-controls{position:absolute;display:flex;border:1px solid var(--dou-color-border);border-radius:calc(var(--dou-radius-control) + 2px);background-color:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-sm);align-items: center;gap:2px;padding:2px}.dou-flow-controls.is-top-left{top:12px;left:12px}.dou-flow-controls.is-top-right{top:12px;right:12px}.dou-flow-controls.is-bottom-left{bottom:12px;left:12px}.dou-flow-controls.is-bottom-right{bottom:12px;right:12px}.dou-flow-controls__button{display:inline-flex;box-sizing:border-box;border-radius:var(--dou-radius-control);color:var(--dou-color-text-secondary);font:inherit;font-size:var(--dou-font-size-sm);font-variant-numeric:tabular-nums;cursor:pointer;transition:background-color var(--dou-motion-duration-fast)var(--dou-motion-easing);background:0 0;border:0;justify-content:center;align-items: center;min-width:28px;height:28px;padding:0 6px}.dou-flow-controls__button svg{width:16px;height:16px}.dou-flow-controls__button:hover:not(:disabled){background-color:var(--dou-color-bg-muted);color:var(--dou-color-text)}.dou-flow-controls__button:focus-visible{outline:2px solid var(--dou-color-focus);outline-offset:0}.dou-flow-controls__button:disabled{color:var(--dou-color-text-disabled);cursor:default}.dou-flow-controls__zoom{min-width:48px}.dou-flow-controls__divider{background-color:var(--dou-color-border);width:1px;height:16px;margin:0 2px}.dou-flow-controls__button.is-active{background-color:var(--dou-color-bg-muted);color:var(--dou-color-text)}.dou-flow-toolbar{position:absolute;display:flex;border:1px solid var(--dou-color-border);border-radius:calc(var(--dou-radius-control) + 2px);background-color:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-md);align-items: center;gap:2px;padding:2px}@media (pointer:coarse){.dou-flow-toolbar .dou-flow-controls__button{min-width:40px;height:40px}}.dou-flow-editor__menu-anchor{position:absolute;overflow:hidden;width:0;height:0}.dou-flow-editor__ghost{position:fixed;z-index:2147480000;pointer-events:none;transition:opacity var(--dou-motion-duration-fast)var(--dou-motion-easing);top:0;left:0;translate:-50% -50%}.dou-flow-editor__ghost.is-outside{opacity:.56}.dou-flow-editor__ghost-card{display:flex;box-sizing:border-box;border:1px solid var(--dou-color-border);border-radius:var(--dou-radius-container);background-color:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-md);color:var(--dou-color-text);font-family:var(--dou-font-family);font-size:var(--dou-font-size-sm);white-space:nowrap;align-items: center;gap:8px;height:36px;padding:0 12px 0 8px}.dou-flow-editor__ghost-icon,.dou-flow-quick-add__icon{display:inline-flex;border-radius:var(--dou-radius-control);background-color:var(--dou-color-bg-muted);color:var(--dou-color-text-secondary);flex:none;justify-content:center;align-items: center;width:20px;height:20px}:is(.dou-flow-editor__ghost-icon,.dou-flow-quick-add__icon) svg{width:14px;height:14px}.dou-flow-quick-add{width:260px;padding:0}.dou-flow-quick-add.is-custom{width:auto}.dou-flow-quick-add .dou-command__search{height:40px;padding:0 12px}.dou-flow-quick-add .dou-command__item{gap:8px}.dou-flow-quick-add .dou-command__label{flex:none}}.dou-flow-editor.is-refused .dou-flow-editor__edge.is-preview{stroke:var(--dou-color-danger)}@layer dou.components{.dou-flow-editor{--dou-flow-whiteboard-ink:color-mix(in oklab,var(--dou-color-text)72%,transparent)}.dou-flow-editor[data-board-tool=hand]{cursor:grab}.dou-flow-editor[data-board-tool=hand] .dou-flow-editor__node{cursor:grab}.dou-flow-editor[data-board-panning]{cursor:grabbing}.dou-flow-editor[data-board-panning] .dou-flow-editor__node{cursor:grabbing}.dou-flow-editor[data-board-tool=rect]{cursor:crosshair}.dou-flow-editor[data-board-tool=rect] .dou-flow-editor__node{cursor:crosshair}.dou-flow-editor[data-board-tool=ellipse]{cursor:crosshair}.dou-flow-editor[data-board-tool=ellipse] .dou-flow-editor__node{cursor:crosshair}.dou-flow-editor[data-board-tool=diamond]{cursor:crosshair}.dou-flow-editor[data-board-tool=diamond] .dou-flow-editor__node{cursor:crosshair}.dou-flow-editor[data-board-tool=sticky]{cursor:crosshair}.dou-flow-editor[data-board-tool=sticky] .dou-flow-editor__node{cursor:crosshair}.dou-flow-editor[data-board-tool=text]{cursor:text}.dou-flow-editor[data-board-tool=text] .dou-flow-editor__node{cursor:text}.dou-flow-editor[data-board-tool=pen]{cursor:crosshair}.dou-flow-editor[data-board-tool=pen] .dou-flow-editor__node{cursor:crosshair}.dou-flow-editor[data-board-tool=eraser]{cursor:crosshair}.dou-flow-editor[data-board-tool=eraser] .dou-flow-editor__node{cursor:crosshair}.dou-flow-editor__node:has(>.dou-whiteboard-node.is-ink){pointer-events:none}.dou-flow-editor__node:has(>.dou-whiteboard-node.is-ink) .dou-flow-editor__resize{pointer-events:auto}.dou-flow-editor__node:has(>.dou-whiteboard-node)>.dou-flow-editor__resize{display:none}.dou-whiteboard-node{--dou-whiteboard-tone:var(--dou-color-neutral);position:relative;display:grid;box-sizing:border-box;min-height:inherit;color:var(--dou-color-text);place-items: center;width:100%;height:100%}.dou-whiteboard-node.is-primary{--dou-whiteboard-tone:var(--dou-color-primary)}.dou-whiteboard-node.is-success{--dou-whiteboard-tone:var(--dou-color-success)}.dou-whiteboard-node.is-warning{--dou-whiteboard-tone:var(--dou-color-warning)}.dou-whiteboard-node.is-danger{--dou-whiteboard-tone:var(--dou-color-danger)}.dou-whiteboard-node.is-sticky{background-color:color-mix(in oklab,var(--dou-whiteboard-tone)20%,var(--dou-color-bg-surface));box-shadow:var(--dou-shadow-sm);border-radius:4px}.dou-whiteboard-node.is-text{place-items: start stretch}.dou-whiteboard-node.is-erasing{opacity:.3}.dou-whiteboard-node__ink{position:absolute;overflow:visible;fill:var(--dou-flow-whiteboard-ink);width:100%;height:100%;inset:0}.dou-whiteboard-node:not(.is-neutral)>.dou-whiteboard-node__ink{fill:var(--dou-whiteboard-tone)}.dou-whiteboard-node__ink path{pointer-events:visiblePainted}.dou-whiteboard-node__ink-hit{fill:none;stroke:transparent;stroke-width:12px;vector-effect:non-scaling-stroke;pointer-events:stroke}.dou-whiteboard-node__image{position:absolute;display:block;box-sizing:border-box;object-fit:contain;pointer-events:none;user-select:none;border-radius:4px;width:100%;height:100%;inset:0}.dou-whiteboard-node__image.is-broken{display:flex;background-color:var(--dou-color-bg-muted);color:var(--dou-color-text-tertiary);justify-content:center;align-items: center}.dou-whiteboard-node__image.is-broken>svg{width:min(24px,40%);height:min(24px,40%)}.dou-whiteboard-handles,.dou-whiteboard-node__frame{position:absolute;pointer-events:none;top:0;left:0}.dou-whiteboard-node__frame{box-sizing:border-box}.dou-whiteboard-node__turn,.dou-whiteboard-node__corner{position:absolute;z-index:1;box-sizing:border-box;border:1px solid var(--dou-flow-editor-selected);background:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-sm);pointer-events:auto;touch-action:none;scale:calc(1/var(--dou-flow-editor-zoom,1));width:10px;height:10px}:is(.dou-whiteboard-node__turn,.dou-whiteboard-node__corner):before{content:"";position:absolute;inset:-8px}@media (pointer:coarse){:is(.dou-whiteboard-node__turn,.dou-whiteboard-node__corner):before{inset:-15px}}:is(.dou-whiteboard-node__turn,.dou-whiteboard-node__corner)>.dou-whiteboard-node__target{content:"";position:absolute;inset:-8px}@media (pointer:coarse){:is(.dou-whiteboard-node__turn,.dou-whiteboard-node__corner)>.dou-whiteboard-node__target{inset:-15px}}.dou-whiteboard-node__turn:before{content:none}.dou-whiteboard-node__turn{bottom:calc(-24px/var(--dou-flow-editor-zoom,1));cursor:grab;border-radius:50%;left:50%;translate:-50% 50%}@media (pointer:coarse){.dou-whiteboard-node__turn{bottom:calc(-40px/var(--dou-flow-editor-zoom,1))}}.dou-whiteboard-node__corner{border-radius:3px;translate:-50% -50%}.dou-whiteboard-node__side{position:absolute;pointer-events:auto;touch-action:none;translate:-50% -50%}.dou-whiteboard-node__side.is-x{width:calc(8px/var(--dou-flow-editor-zoom,1));height:calc(100% - 20px/var(--dou-flow-editor-zoom,1))}.dou-whiteboard-node__side.is-y{width:calc(100% - 20px/var(--dou-flow-editor-zoom,1));height:calc(8px/var(--dou-flow-editor-zoom,1))}@media (pointer:coarse){.dou-whiteboard-node__side.is-x{width:clamp(calc(16px/var(--dou-flow-editor-zoom,1)),50%,calc(40px/var(--dou-flow-editor-zoom,1)))}.dou-whiteboard-node__side.is-y{height:clamp(calc(16px/var(--dou-flow-editor-zoom,1)),50%,calc(40px/var(--dou-flow-editor-zoom,1)))}}.dou-whiteboard-node__shape{position:absolute;overflow:visible;fill:var(--dou-color-bg-surface);stroke:var(--dou-flow-whiteboard-ink);stroke-linejoin:round;stroke-width:1.5px;width:100%;height:100%;inset:0}.dou-whiteboard-node:not(.is-neutral)>.dou-whiteboard-node__shape{fill:color-mix(in oklab,var(--dou-whiteboard-tone)10%,var(--dou-color-bg-surface));stroke:var(--dou-whiteboard-tone)}.dou-whiteboard-node__text{position:relative;box-sizing:border-box;overflow:hidden;font:inherit;font-size:max(var(--dou-font-size-input-min,0px),var(--dou-font-size-md));overflow-wrap:anywhere;text-align:center;white-space:pre-wrap;max-width:100%;max-height:100%;padding:12px 16px;line-height:1.5}.is-sticky>.dou-whiteboard-node__text{padding:16px}.is-shape>.dou-whiteboard-node__text:not(.dou-whiteboard-node__field){display:-webkit-box;clip-path:inset(12px 0);-webkit-box-orient:vertical}.is-sticky>.dou-whiteboard-node__text:not(.dou-whiteboard-node__field){display:-webkit-box;clip-path:inset(12px 0);-webkit-box-orient:vertical}.is-sticky>.dou-whiteboard-node__text:not(.dou-whiteboard-node__field){clip-path:inset(16px 0)}.is-text>.dou-whiteboard-node__text{font-size:var(--dou-font-size-lg);text-align:start;padding:4px 8px}.dou-whiteboard-node__field{display:block;color:inherit;outline:none;resize:none;field-sizing:content;background:0 0;border:0;width:100%;min-height:1lh;margin:0}.dou-whiteboard-node.is-selected .dou-whiteboard-node__anchor:before{inset:-2px}@media (pointer:coarse){.dou-whiteboard-node.is-selected .dou-whiteboard-node__anchor:before{inset:-6px}}.dou-whiteboard-node__anchors{position:absolute;z-index:1;pointer-events:none;inset:0}.dou-whiteboard-node__anchors .dou-flow-port{opacity:0;pointer-events:none;scale:calc(1/var(--dou-flow-editor-zoom,1))}.dou-flow-editor[data-board-tool=select] .dou-flow-editor__node:hover .dou-whiteboard-node:not(.is-editing) .dou-flow-port.is-output{opacity:1;pointer-events:auto}.dou-flow-editor[data-board-tool=select] .dou-flow-editor__node.is-selected .dou-whiteboard-node:not(.is-editing) .dou-flow-port.is-output{opacity:1;pointer-events:auto}.dou-flow-editor.is-connecting .dou-whiteboard-node__anchors .dou-flow-port.is-input.is-valid{opacity:.6}.dou-flow-editor.is-connecting .dou-whiteboard-node__anchors .dou-flow-port.is-input.is-candidate{opacity:1}[data-edge-type=connector]>.dou-flow-editor__edge{stroke-linecap:round;stroke-linejoin:round}[data-edge-type=connector]>.dou-flow-editor__edge:not(.is-selected){stroke:var(--dou-flow-whiteboard-ink);stroke-width:1.5px}.dou-whiteboard-strokes{position:absolute;overflow:visible;pointer-events:none;width:1px;height:1px;top:0;left:0}.dou-whiteboard-strokes__ink{fill:var(--dou-flow-whiteboard-ink)}.dou-whiteboard-strokes__eraser{fill:color-mix(in oklab,var(--dou-color-text)6%,transparent);stroke:var(--dou-color-border-strong);stroke-width:calc(1px/var(--dou-flow-editor-zoom,1))}.dou-whiteboard-draft{position:absolute;box-sizing:border-box;border:calc(1px/var(--dou-flow-editor-zoom,1))dashed var(--dou-flow-editor-selected);background-color:color-mix(in oklab,var(--dou-flow-editor-selected)6%,transparent);pointer-events:none;border-radius:4px;top:0;left:0}.dou-whiteboard-draft.is-ellipse{border-radius:50%}.dou-whiteboard-toolbar{position:absolute;display:flex;box-sizing:border-box;border:1px solid var(--dou-color-border);border-radius:calc(var(--dou-radius-control) + 2px);background-color:var(--dou-color-bg-surface);box-shadow:var(--dou-shadow-sm);width:max-content;max-width:calc(100% - 24px);padding:2px;top:12px;left:50%;translate:-50%}.dou-whiteboard-toolbar__scroll{display:flex;overflow-x:auto;border-radius:var(--dou-radius-control);overscroll-behavior-x:contain;scrollbar-width:none;touch-action:pan-x;align-items: center;gap:2px;min-width:0}.dou-whiteboard-toolbar__scroll::-webkit-scrollbar{display:none}.dou-whiteboard-toolbar__scroll.has-more-start{mask-image:linear-gradient(90deg,#0000,#000 32px)}.dou-whiteboard-toolbar__scroll.has-more-end{mask-image:linear-gradient(270deg,#0000,#000 32px)}.dou-whiteboard-toolbar__scroll.has-more-start.has-more-end{mask-image:linear-gradient(90deg,#0000,#000 32px calc(100% - 32px),#0000)}.dou-whiteboard-toolbar__button{position:relative;display:inline-flex;border-radius:var(--dou-radius-control);color:var(--dou-color-text-secondary);cursor:pointer;transition-property:background-color,color;transition-duration:var(--dou-motion-duration-fast);transition-timing-function:var(--dou-motion-easing);background:0 0;border:0;flex:none;justify-content:center;align-items: center;width:32px;height:32px;padding:0}.dou-whiteboard-toolbar__button svg{width:16px;height:16px}.dou-whiteboard-toolbar__button:hover{background-color:var(--dou-color-bg-muted);color:var(--dou-color-text)}.dou-whiteboard-toolbar__button[aria-pressed=true]{background-color:var(--dou-color-bg-muted);color:var(--dou-color-text)}.dou-whiteboard-toolbar__button.is-locked:after{position:absolute;border-radius:var(--dou-radius-full);content:"";background-color:currentColor;width:4px;height:4px;bottom:3px;left:50%;translate:-50%}.dou-whiteboard-toolbar__button:focus-visible{outline:2px solid var(--dou-color-focus);outline-offset:0}.dou-whiteboard-toolbar__divider{background-color:var(--dou-color-border);flex:none;width:1px;height:16px;margin:0 2px}}
@@ -0,0 +1 @@
1
+ export {}
package/dist/style.js ADDED
@@ -0,0 +1,8 @@
1
+ import 'dou-ui/components/autocomplete/style'
2
+ import 'dou-ui/components/command/style'
3
+ import 'dou-ui/components/dropdown/style'
4
+ import 'dou-ui/components/context-menu/style'
5
+ import 'dou-ui/components/node-graph/style'
6
+ import 'dou-ui/components/toggle/style'
7
+ import 'dou-ui/components/find-replace/style'
8
+ import './style.css'
@@ -0,0 +1,42 @@
1
+ import { collaborationColors } from 'dou-ui';
2
+ import * as Y from 'yjs';
3
+ import { type FlowExtension } from '../core/extension';
4
+ import type { FlowDocument } from '../core/model';
5
+ import { type AwarenessLike, type FlowPresence } from './peers';
6
+ /** How the people editing together see each other. */
7
+ export interface CollaborationUser {
8
+ name: string;
9
+ /** The color of this user's outlines, any CSS color. Picked from the client id when left out. */
10
+ color?: string;
11
+ }
12
+ export interface CollaborationOptions {
13
+ /** Where the nodes live, e.g. `ydoc.getMap('nodes')`. */
14
+ nodes: Y.Map<unknown>;
15
+ /** Where the edges live, e.g. `ydoc.getMap('edges')`; in the same `Y.Doc` as `nodes`. */
16
+ edges: Y.Map<unknown>;
17
+ /** Shares what each person selects, drags and connects (`y-protocols/awareness`). */
18
+ awareness?: AwarenessLike;
19
+ /** This user, shown to the others. Needs `awareness`. */
20
+ user?: CollaborationUser;
21
+ }
22
+ export { collaborationColors };
23
+ /**
24
+ * Writes nodes and edges into empty maps, e.g. when a flow that so far was
25
+ * saved as JSON starts being edited together. Do it once, where the shared
26
+ * document is created.
27
+ */
28
+ export declare function fillMaps(maps: {
29
+ nodes: Y.Map<unknown>;
30
+ edges: Y.Map<unknown>;
31
+ }, doc: FlowDocument): void;
32
+ /**
33
+ * Edit a flow together through a Yjs document. Nodes and edges live in two
34
+ * `Y.Map`s, each field on its own, so two people changing different fields
35
+ * of one node both keep their change. The editor's `v-model` only mirrors
36
+ * them: changes made to `v-model` from outside are not written back. While
37
+ * someone drags, the others see an outline; the document changes once they
38
+ * let go. Undo only takes back this user's own changes. Folding a group
39
+ * stays local.
40
+ */
41
+ export declare function collaboration(options: CollaborationOptions): FlowExtension;
42
+ export type { AwarenessLike, FlowPresence };
@@ -0,0 +1,27 @@
1
+ import { type Component } from 'vue';
2
+ import type { FlowSelection, Rect } from '../core/model';
3
+ /** The part of an `Awareness` (`y-protocols/awareness`) the editor uses. */
4
+ export interface AwarenessLike {
5
+ clientID: number;
6
+ getLocalState(): Record<string, unknown> | null;
7
+ setLocalStateField(field: string, value: unknown): void;
8
+ getStates(): Map<number, Record<string, unknown>>;
9
+ on(event: 'change', listener: (...args: unknown[]) => void): void;
10
+ off(event: 'change', listener: (...args: unknown[]) => void): void;
11
+ }
12
+ /** What each person shares under the awareness field `flow`. */
13
+ export interface FlowPresence {
14
+ /** The nodes they are dragging or resizing, where they would land. */
15
+ moving: ({
16
+ id: string;
17
+ } & Rect)[];
18
+ selection: FlowSelection;
19
+ /** The edge they are drawing, as an SVG path in canvas coordinates. */
20
+ path: string | null;
21
+ }
22
+ /**
23
+ * A layer that shows what other people are doing, in their colors: dashed
24
+ * outlines where the nodes they drag would land, outlines around what they
25
+ * have selected, and the edge they are drawing.
26
+ */
27
+ export declare function createPeers(awareness: AwarenessLike): Component;
@@ -0,0 +1,18 @@
1
+ import type { Component } from 'vue';
2
+ import type { FlowPortSpec } from '../core/model';
3
+ export interface DefaultNodeData {
4
+ [key: string]: unknown;
5
+ /** The title. */
6
+ label?: string;
7
+ description?: string;
8
+ icon?: Component;
9
+ status?: 'wait' | 'process' | 'finish' | 'error';
10
+ inputs?: Omit<FlowPortSpec, 'kind'>[];
11
+ outputs?: Omit<FlowPortSpec, 'kind'>[];
12
+ }
13
+ /**
14
+ * A titled card: an optional icon, a status dot and a description, then a
15
+ * row per port, inputs on the left and outputs on the right. A single
16
+ * unnamed input and output sit on the title row.
17
+ */
18
+ export declare const defaultNode: import("..").NodeTypeSpec<DefaultNodeData>;