@dxos/plugin-routine 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/PLUGIN.mdl +18 -13
  2. package/dist/lib/RoutinePlugin.mjs +2 -0
  3. package/dist/lib/RoutinePlugin.node.mjs +894 -0
  4. package/dist/lib/RoutinePlugin.node.mjs.map +1 -0
  5. package/dist/lib/RoutinePlugin.workerd.mjs +20 -0
  6. package/dist/lib/RoutinePlugin.workerd.mjs.map +1 -0
  7. package/dist/lib/capabilities/node.mjs +12 -0
  8. package/dist/lib/capabilities/node.mjs.map +1 -0
  9. package/dist/lib/capabilities.mjs +14 -0
  10. package/dist/lib/capabilities.mjs.map +1 -0
  11. package/dist/lib/chunk-RoutineArticle.mjs +79 -0
  12. package/dist/lib/chunk-RoutineArticle.mjs.map +1 -0
  13. package/dist/lib/chunk-RoutineCompanion.mjs +192 -0
  14. package/dist/lib/chunk-RoutineCompanion.mjs.map +1 -0
  15. package/dist/lib/chunk-RoutinePlugin.mjs +38 -0
  16. package/dist/lib/chunk-RoutinePlugin.mjs.map +1 -0
  17. package/dist/lib/chunk-RoutineSettings.mjs +50 -0
  18. package/dist/lib/chunk-RoutineSettings.mjs.map +1 -0
  19. package/dist/lib/chunk-RoutineTraceCompanion.mjs +208 -0
  20. package/dist/lib/chunk-RoutineTraceCompanion.mjs.map +1 -0
  21. package/dist/lib/chunk-SkillArticle.mjs +28 -0
  22. package/dist/lib/chunk-SkillArticle.mjs.map +1 -0
  23. package/dist/lib/chunk-app-graph-builder.mjs +71 -0
  24. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
  25. package/dist/lib/chunk-create-object.mjs +23 -0
  26. package/dist/lib/chunk-create-object.mjs.map +1 -0
  27. package/dist/lib/chunk-create-routine.mjs +34 -0
  28. package/dist/lib/chunk-create-routine.mjs.map +1 -0
  29. package/dist/lib/chunk-create-trigger-from-template.mjs +48 -0
  30. package/dist/lib/chunk-create-trigger-from-template.mjs.map +1 -0
  31. package/dist/lib/chunk-layer-specs.mjs +179 -0
  32. package/dist/lib/chunk-layer-specs.mjs.map +1 -0
  33. package/dist/lib/{neutral/chunk-HLO4LYXT.mjs → chunk-meta.mjs} +19 -27
  34. package/dist/lib/chunk-meta.mjs.map +1 -0
  35. package/dist/lib/chunk-operation-handler.mjs +11 -0
  36. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  37. package/dist/lib/chunk-paths.mjs +11 -0
  38. package/dist/lib/chunk-paths.mjs.map +1 -0
  39. package/dist/lib/chunk-react-surface.mjs +64 -0
  40. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  41. package/dist/lib/chunk-registry-sync.mjs +104 -0
  42. package/dist/lib/chunk-registry-sync.mjs.map +1 -0
  43. package/dist/lib/chunk-run-routine.mjs +57 -0
  44. package/dist/lib/chunk-run-routine.mjs.map +1 -0
  45. package/dist/lib/chunk-templates.mjs +37 -0
  46. package/dist/lib/chunk-templates.mjs.map +1 -0
  47. package/dist/lib/chunk-trigger-runtime-controller.mjs +73 -0
  48. package/dist/lib/chunk-trigger-runtime-controller.mjs.map +1 -0
  49. package/dist/lib/chunk-types.mjs +149 -0
  50. package/dist/lib/chunk-types.mjs.map +1 -0
  51. package/dist/lib/chunk-util.mjs +142 -0
  52. package/dist/lib/chunk-util.mjs.map +1 -0
  53. package/dist/lib/components.mjs +1645 -0
  54. package/dist/lib/components.mjs.map +1 -0
  55. package/dist/lib/containers.mjs +11 -0
  56. package/dist/lib/containers.mjs.map +1 -0
  57. package/dist/lib/hooks.mjs +37 -0
  58. package/dist/lib/hooks.mjs.map +1 -0
  59. package/dist/lib/index.mjs +5 -0
  60. package/dist/lib/meta.mjs +2 -0
  61. package/dist/lib/operations.mjs +7 -0
  62. package/dist/lib/operations.mjs.map +1 -0
  63. package/dist/lib/plugin.mjs +9 -0
  64. package/dist/lib/plugin.mjs.map +1 -0
  65. package/dist/lib/testing.mjs +2 -0
  66. package/dist/lib/translations.mjs +110 -0
  67. package/dist/lib/translations.mjs.map +1 -0
  68. package/dist/lib/types.mjs +2 -0
  69. package/dist/types/src/RoutinePlugin.d.ts.map +1 -1
  70. package/dist/types/src/RoutinePlugin.node.d.ts.map +1 -1
  71. package/dist/types/src/RoutinePlugin.workerd.d.ts.map +1 -1
  72. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  73. package/dist/types/src/capabilities/create-object.d.ts +1 -1
  74. package/dist/types/src/capabilities/index.d.ts +0 -1
  75. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/layer-specs.d.ts +1 -1
  77. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  78. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  79. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/registry-sync.d.ts +1 -1
  81. package/dist/types/src/capabilities/templates.d.ts +1 -1
  82. package/dist/types/src/capabilities/trigger-runtime-controller.d.ts +1 -1
  83. package/dist/types/src/commands/trigger/create/{queue.d.ts → feed.d.ts} +2 -2
  84. package/dist/types/src/commands/trigger/create/feed.d.ts.map +1 -0
  85. package/dist/types/src/commands/trigger/update/{queue.d.ts → feed.d.ts} +2 -2
  86. package/dist/types/src/commands/trigger/update/feed.d.ts.map +1 -0
  87. package/dist/types/src/commands/trigger/util.d.ts +1 -1
  88. package/dist/types/src/commands/trigger/util.d.ts.map +1 -1
  89. package/dist/types/src/components/InstructionsEditor/InstructionsEditor.d.ts +7 -5
  90. package/dist/types/src/components/InstructionsEditor/InstructionsEditor.d.ts.map +1 -1
  91. package/dist/types/src/components/InstructionsEditor/InstructionsEditor.stories.d.ts +3 -3
  92. package/dist/types/src/components/InstructionsEditor/InstructionsEditor.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/RoutineCard/RoutineCard.d.ts +9 -0
  94. package/dist/types/src/components/RoutineCard/RoutineCard.d.ts.map +1 -0
  95. package/dist/types/src/components/RoutineCard/RoutineCard.stories.d.ts +21 -0
  96. package/dist/types/src/components/RoutineCard/RoutineCard.stories.d.ts.map +1 -0
  97. package/dist/types/src/components/RoutineCard/index.d.ts +2 -0
  98. package/dist/types/src/components/RoutineCard/index.d.ts.map +1 -0
  99. package/dist/types/src/components/RoutineForm/RoutineForm.d.ts +7 -2
  100. package/dist/types/src/components/RoutineForm/RoutineForm.d.ts.map +1 -1
  101. package/dist/types/src/components/Schedule/Schedule.d.ts +2 -26
  102. package/dist/types/src/components/Schedule/Schedule.d.ts.map +1 -1
  103. package/dist/types/src/components/Schedule/days.d.ts +24 -0
  104. package/dist/types/src/components/Schedule/days.d.ts.map +1 -0
  105. package/dist/types/src/components/Schedule/describe-schedule.d.ts +3 -0
  106. package/dist/types/src/components/Schedule/describe-schedule.d.ts.map +1 -0
  107. package/dist/types/src/components/Schedule/index.d.ts +2 -0
  108. package/dist/types/src/components/Schedule/index.d.ts.map +1 -1
  109. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +1 -1
  110. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  111. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +1 -2
  112. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  113. package/dist/types/src/components/TriggerEditor/TriggerKindSelector.d.ts +5 -2
  114. package/dist/types/src/components/TriggerEditor/TriggerKindSelector.d.ts.map +1 -1
  115. package/dist/types/src/components/TriggerEditor/trigger-kind-icon.d.ts +5 -0
  116. package/dist/types/src/components/TriggerEditor/trigger-kind-icon.d.ts.map +1 -0
  117. package/dist/types/src/components/index.d.ts +1 -1
  118. package/dist/types/src/components/index.d.ts.map +1 -1
  119. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +5 -10
  120. package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +1 -1
  121. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +6 -2
  122. package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +1 -1
  123. package/dist/types/src/containers/RoutineCompanion/RoutineCompanion.d.ts +4 -12
  124. package/dist/types/src/containers/RoutineCompanion/RoutineCompanion.d.ts.map +1 -1
  125. package/dist/types/src/containers/RoutineCompanion/RoutineCompanion.stories.d.ts.map +1 -1
  126. package/dist/types/src/containers/RoutineSettings/RoutineSettings.d.ts +4 -8
  127. package/dist/types/src/containers/RoutineSettings/RoutineSettings.d.ts.map +1 -1
  128. package/dist/types/src/containers/RoutineTraceCompanion/RoutineTraceCompanion.d.ts +5 -3
  129. package/dist/types/src/containers/RoutineTraceCompanion/RoutineTraceCompanion.d.ts.map +1 -1
  130. package/dist/types/src/containers/RoutineTraceCompanion/RoutineTraceCompanion.stories.d.ts.map +1 -1
  131. package/dist/types/src/containers/RoutineTraceCompanion/useRoutineRuns.d.ts +1 -1
  132. package/dist/types/src/containers/RoutineTraceCompanion/useRoutineRuns.d.ts.map +1 -1
  133. package/dist/types/src/containers/SkillArticle/SkillArticle.d.ts +4 -1
  134. package/dist/types/src/containers/SkillArticle/SkillArticle.d.ts.map +1 -1
  135. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +1 -1
  136. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
  137. package/dist/types/src/index.d.ts +1 -0
  138. package/dist/types/src/index.d.ts.map +1 -1
  139. package/dist/types/src/operations/run-routine.d.ts.map +1 -1
  140. package/dist/types/src/operations/run-routine.test.d.ts +2 -0
  141. package/dist/types/src/operations/run-routine.test.d.ts.map +1 -0
  142. package/dist/types/src/paths.d.ts.map +1 -1
  143. package/dist/types/src/templates/index.d.ts +1 -1
  144. package/dist/types/src/templates/index.d.ts.map +1 -1
  145. package/dist/types/src/testing/test-functions.d.ts +30 -6
  146. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  147. package/dist/types/src/translations.d.ts.map +1 -1
  148. package/dist/types/src/types/RoutineCapabilities.d.ts +9 -3
  149. package/dist/types/src/types/RoutineCapabilities.d.ts.map +1 -1
  150. package/dist/types/src/types/RoutineOperation.d.ts +2 -3
  151. package/dist/types/src/types/RoutineOperation.d.ts.map +1 -1
  152. package/dist/types/src/types/index.d.ts +0 -1
  153. package/dist/types/src/types/index.d.ts.map +1 -1
  154. package/dist/types/src/util/index.d.ts +1 -0
  155. package/dist/types/src/util/index.d.ts.map +1 -1
  156. package/dist/types/src/util/routines-for-object.d.ts +6 -3
  157. package/dist/types/src/util/routines-for-object.d.ts.map +1 -1
  158. package/dist/types/src/util/wire.d.ts +21 -0
  159. package/dist/types/src/util/wire.d.ts.map +1 -0
  160. package/dist/types/src/util/wire.test.d.ts +2 -0
  161. package/dist/types/src/util/wire.test.d.ts.map +1 -0
  162. package/dist/types/tsconfig.tsbuildinfo +1 -1
  163. package/dx.config.ts +3 -2
  164. package/package.json +73 -71
  165. package/src/RoutinePlugin.node.ts +1 -2
  166. package/src/RoutinePlugin.tsx +2 -4
  167. package/src/RoutinePlugin.workerd.ts +1 -2
  168. package/src/capabilities/app-graph-builder.ts +9 -7
  169. package/src/capabilities/create-object.ts +2 -2
  170. package/src/capabilities/index.ts +0 -1
  171. package/src/capabilities/layer-specs.ts +78 -12
  172. package/src/capabilities/{react-surface.tsx → react-surface.ts} +18 -22
  173. package/src/capabilities/trigger-runtime-controller.test.ts +12 -18
  174. package/src/capabilities/trigger-runtime-controller.ts +22 -25
  175. package/src/commands/trigger/create/{queue.ts → feed.ts} +1 -1
  176. package/src/commands/trigger/create/index.ts +2 -2
  177. package/src/commands/trigger/update/{queue.ts → feed.ts} +1 -1
  178. package/src/commands/trigger/update/index.ts +2 -2
  179. package/src/commands/trigger/util.ts +1 -2
  180. package/src/components/InstructionsEditor/InstructionsEditor.stories.tsx +7 -6
  181. package/src/components/InstructionsEditor/InstructionsEditor.tsx +31 -19
  182. package/src/components/RoutineCard/RoutineCard.stories.tsx +95 -0
  183. package/src/components/RoutineCard/RoutineCard.tsx +60 -0
  184. package/src/components/{MasterDetail → RoutineCard}/index.ts +1 -1
  185. package/src/components/RoutineForm/RoutineForm.tsx +60 -52
  186. package/src/components/Schedule/Schedule.stories.tsx +1 -1
  187. package/src/components/Schedule/Schedule.tsx +4 -73
  188. package/src/components/Schedule/days.ts +18 -0
  189. package/src/components/Schedule/describe-schedule.ts +64 -0
  190. package/src/components/Schedule/index.ts +2 -0
  191. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +1 -1
  192. package/src/components/TemplateEditor/TemplateForm.tsx +1 -1
  193. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +3 -3
  194. package/src/components/TriggerEditor/TriggerEditor.tsx +79 -66
  195. package/src/components/TriggerEditor/TriggerKindSelector.tsx +4 -30
  196. package/src/components/TriggerEditor/trigger-kind-icon.ts +38 -0
  197. package/src/components/index.ts +1 -1
  198. package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +78 -19
  199. package/src/containers/RoutineArticle/RoutineArticle.tsx +8 -4
  200. package/src/containers/RoutineCompanion/RoutineCompanion.stories.tsx +5 -4
  201. package/src/containers/RoutineCompanion/RoutineCompanion.tsx +11 -7
  202. package/src/containers/RoutineSettings/RoutineSettings.tsx +22 -33
  203. package/src/containers/RoutineTraceCompanion/RoutineTraceCompanion.stories.tsx +6 -5
  204. package/src/containers/RoutineTraceCompanion/RoutineTraceCompanion.tsx +3 -1
  205. package/src/containers/RoutineTraceCompanion/useRoutineRuns.ts +3 -5
  206. package/src/containers/SkillArticle/SkillArticle.tsx +2 -0
  207. package/src/hooks/useTriggerRuntimeControls.ts +2 -2
  208. package/src/index.ts +1 -0
  209. package/src/operations/create-routine.ts +1 -1
  210. package/src/operations/create-trigger-from-template.ts +2 -2
  211. package/src/operations/run-routine.test.ts +150 -0
  212. package/src/operations/run-routine.ts +18 -2
  213. package/src/paths.ts +5 -5
  214. package/src/templates/index.ts +5 -3
  215. package/src/translations.ts +5 -6
  216. package/src/types/RoutineCapabilities.ts +10 -4
  217. package/src/types/RoutineOperation.ts +7 -6
  218. package/src/types/index.ts +0 -1
  219. package/src/util/index.ts +1 -0
  220. package/src/util/routines-for-object.test.ts +37 -5
  221. package/src/util/routines-for-object.ts +33 -8
  222. package/src/util/wire.test.ts +77 -0
  223. package/src/util/wire.ts +76 -0
  224. package/dist/lib/neutral/RoutineArticle-UNTMV4CC.mjs +0 -95
  225. package/dist/lib/neutral/RoutineArticle-UNTMV4CC.mjs.map +0 -7
  226. package/dist/lib/neutral/RoutineCompanion-ZZ6WMY7I.mjs +0 -249
  227. package/dist/lib/neutral/RoutineCompanion-ZZ6WMY7I.mjs.map +0 -7
  228. package/dist/lib/neutral/RoutinePlugin.mjs +0 -10
  229. package/dist/lib/neutral/RoutinePlugin.mjs.map +0 -7
  230. package/dist/lib/neutral/RoutinePlugin.node.mjs +0 -1133
  231. package/dist/lib/neutral/RoutinePlugin.node.mjs.map +0 -7
  232. package/dist/lib/neutral/RoutinePlugin.workerd.mjs +0 -36
  233. package/dist/lib/neutral/RoutinePlugin.workerd.mjs.map +0 -7
  234. package/dist/lib/neutral/RoutineSettings-ZJOM4F3S.mjs +0 -48
  235. package/dist/lib/neutral/RoutineSettings-ZJOM4F3S.mjs.map +0 -7
  236. package/dist/lib/neutral/RoutineTraceCompanion-5U6R7LJE.mjs +0 -236
  237. package/dist/lib/neutral/RoutineTraceCompanion-5U6R7LJE.mjs.map +0 -7
  238. package/dist/lib/neutral/SkillArticle-WWDNKW2Z.mjs +0 -27
  239. package/dist/lib/neutral/SkillArticle-WWDNKW2Z.mjs.map +0 -7
  240. package/dist/lib/neutral/app-graph-builder-FALWLZTI.mjs +0 -90
  241. package/dist/lib/neutral/app-graph-builder-FALWLZTI.mjs.map +0 -7
  242. package/dist/lib/neutral/capabilities/index.mjs +0 -25
  243. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  244. package/dist/lib/neutral/capabilities/node.mjs +0 -19
  245. package/dist/lib/neutral/capabilities/node.mjs.map +0 -7
  246. package/dist/lib/neutral/chunk-674LDIUJ.mjs +0 -9
  247. package/dist/lib/neutral/chunk-674LDIUJ.mjs.map +0 -7
  248. package/dist/lib/neutral/chunk-HLO4LYXT.mjs.map +0 -7
  249. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  250. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  251. package/dist/lib/neutral/chunk-P3TDQKOO.mjs +0 -8
  252. package/dist/lib/neutral/chunk-P3TDQKOO.mjs.map +0 -7
  253. package/dist/lib/neutral/chunk-R7J2MU2M.mjs +0 -263
  254. package/dist/lib/neutral/chunk-R7J2MU2M.mjs.map +0 -7
  255. package/dist/lib/neutral/chunk-WLNL77C7.mjs +0 -14
  256. package/dist/lib/neutral/chunk-WLNL77C7.mjs.map +0 -7
  257. package/dist/lib/neutral/chunk-YGWSAKLD.mjs +0 -65
  258. package/dist/lib/neutral/chunk-YGWSAKLD.mjs.map +0 -7
  259. package/dist/lib/neutral/components/index.mjs +0 -1921
  260. package/dist/lib/neutral/components/index.mjs.map +0 -7
  261. package/dist/lib/neutral/containers/index.mjs +0 -17
  262. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  263. package/dist/lib/neutral/create-object-V23KVDMJ.mjs +0 -25
  264. package/dist/lib/neutral/create-object-V23KVDMJ.mjs.map +0 -7
  265. package/dist/lib/neutral/create-routine-6QBY6TWF.mjs +0 -38
  266. package/dist/lib/neutral/create-routine-6QBY6TWF.mjs.map +0 -7
  267. package/dist/lib/neutral/create-trigger-from-template-U3KNS77V.mjs +0 -70
  268. package/dist/lib/neutral/create-trigger-from-template-U3KNS77V.mjs.map +0 -7
  269. package/dist/lib/neutral/hooks/index.mjs +0 -47
  270. package/dist/lib/neutral/hooks/index.mjs.map +0 -7
  271. package/dist/lib/neutral/index.mjs +0 -27
  272. package/dist/lib/neutral/index.mjs.map +0 -7
  273. package/dist/lib/neutral/layer-specs-2TWJU5HI.mjs +0 -135
  274. package/dist/lib/neutral/layer-specs-2TWJU5HI.mjs.map +0 -7
  275. package/dist/lib/neutral/meta.json +0 -1
  276. package/dist/lib/neutral/meta.mjs +0 -8
  277. package/dist/lib/neutral/meta.mjs.map +0 -7
  278. package/dist/lib/neutral/navigation-resolver-KQIWUH6F.mjs +0 -18
  279. package/dist/lib/neutral/navigation-resolver-KQIWUH6F.mjs.map +0 -7
  280. package/dist/lib/neutral/operation-handler-QKLJSDCQ.mjs +0 -13
  281. package/dist/lib/neutral/operation-handler-QKLJSDCQ.mjs.map +0 -7
  282. package/dist/lib/neutral/operations/index.mjs +0 -8
  283. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  284. package/dist/lib/neutral/plugin.mjs +0 -16
  285. package/dist/lib/neutral/plugin.mjs.map +0 -7
  286. package/dist/lib/neutral/react-surface-GMO7I7YE.mjs +0 -67
  287. package/dist/lib/neutral/react-surface-GMO7I7YE.mjs.map +0 -7
  288. package/dist/lib/neutral/registry-sync-DYPOC7ZG.mjs +0 -86
  289. package/dist/lib/neutral/registry-sync-DYPOC7ZG.mjs.map +0 -7
  290. package/dist/lib/neutral/run-routine-AEWO6SYD.mjs +0 -37
  291. package/dist/lib/neutral/run-routine-AEWO6SYD.mjs.map +0 -7
  292. package/dist/lib/neutral/templates-IIUCEBAX.mjs +0 -49
  293. package/dist/lib/neutral/templates-IIUCEBAX.mjs.map +0 -7
  294. package/dist/lib/neutral/testing.mjs +0 -8
  295. package/dist/lib/neutral/testing.mjs.map +0 -7
  296. package/dist/lib/neutral/translations.mjs +0 -115
  297. package/dist/lib/neutral/translations.mjs.map +0 -7
  298. package/dist/lib/neutral/trigger-runtime-controller-WIDDFGQT.mjs +0 -77
  299. package/dist/lib/neutral/trigger-runtime-controller-WIDDFGQT.mjs.map +0 -7
  300. package/dist/lib/neutral/types/index.mjs +0 -17
  301. package/dist/lib/neutral/types/index.mjs.map +0 -7
  302. package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
  303. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
  304. package/dist/types/src/commands/trigger/create/queue.d.ts.map +0 -1
  305. package/dist/types/src/commands/trigger/update/queue.d.ts.map +0 -1
  306. package/dist/types/src/components/MasterDetail/MasterDetail.d.ts +0 -51
  307. package/dist/types/src/components/MasterDetail/MasterDetail.d.ts.map +0 -1
  308. package/dist/types/src/components/MasterDetail/MasterDetail.stories.d.ts +0 -16
  309. package/dist/types/src/components/MasterDetail/MasterDetail.stories.d.ts.map +0 -1
  310. package/dist/types/src/components/MasterDetail/index.d.ts +0 -2
  311. package/dist/types/src/components/MasterDetail/index.d.ts.map +0 -1
  312. package/dist/types/src/types/Routine.d.ts +0 -55
  313. package/dist/types/src/types/Routine.d.ts.map +0 -1
  314. package/dist/types/src/types/Routine.test.d.ts +0 -2
  315. package/dist/types/src/types/Routine.test.d.ts.map +0 -1
  316. package/src/capabilities/navigation-resolver.ts +0 -21
  317. package/src/components/MasterDetail/MasterDetail.stories.tsx +0 -100
  318. package/src/components/MasterDetail/MasterDetail.tsx +0 -175
  319. package/src/types/Routine.test.ts +0 -51
  320. package/src/types/Routine.ts +0 -144
@@ -0,0 +1,76 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Instructions, Routine, type Trigger } from '@dxos/compute';
6
+ import { Obj, Ref } from '@dxos/echo';
7
+
8
+ import { runInstructionsRef } from './run-instructions';
9
+
10
+ /** Strip a stale `instructions` binding from a trigger input. */
11
+ const withoutInstructions = (input: Record<string, unknown> | undefined): Record<string, unknown> | undefined => {
12
+ if (!input || !('instructions' in input)) {
13
+ return input;
14
+ }
15
+ const { instructions: _drop, ...rest } = input;
16
+ return rest;
17
+ };
18
+
19
+ /**
20
+ * Wire the routine's owned triggers to dispatch its current action (`spec`): an instructions action sets each
21
+ * trigger's `runnable` to RunInstructions with the owned instructions bound into `input`; an operation action
22
+ * binds the operation directly and drops any stale instructions binding. Call after the action (`spec`) changes
23
+ * so a trigger never keeps a binding for the previous action.
24
+ */
25
+ export const wireTriggers = (routine: Routine.Routine): void => {
26
+ const instructions = Routine.instructionsRef(routine);
27
+ const fn = instructions ? runInstructionsRef() : Routine.runnableRef(routine);
28
+ for (const ref of routine.triggers) {
29
+ const trigger = ref.target;
30
+ if (!trigger) {
31
+ continue;
32
+ }
33
+ Obj.update(trigger, (trigger) => {
34
+ trigger.runnable = fn;
35
+ const base = withoutInstructions(trigger.input);
36
+ trigger.input = instructions ? { input: {}, ...base, instructions } : base;
37
+ });
38
+ }
39
+ };
40
+
41
+ /**
42
+ * Creates a fully-wired in-memory routine graph. `instructions` and `trigger` are optional extras beyond the
43
+ * schema fields: when provided they are parented under the routine and wired together (runnable, trigger
44
+ * runnable, the trigger's instructions input binding, and the `triggers` ref) so that a single `Database.add`
45
+ * cascades the whole graph. `triggers` defaults to `[]` so callers that supply a `trigger` need not provide it.
46
+ */
47
+ export const makeRoutine = ({
48
+ instructions,
49
+ trigger,
50
+ triggers = [],
51
+ ...props
52
+ }: Omit<Obj.MakeProps<typeof Routine.Routine>, 'triggers'> & {
53
+ triggers?: ReadonlyArray<Ref.Ref<Trigger.Trigger>>;
54
+ instructions?: Instructions.Instructions;
55
+ trigger?: Trigger.Trigger;
56
+ }): Routine.Routine => {
57
+ const routine = Routine.make({ ...props, triggers });
58
+ if (instructions) {
59
+ Obj.setParent(instructions, routine);
60
+ Obj.update(routine, (routine) => {
61
+ routine.spec = { kind: 'instructions', instructions: Ref.make(instructions) };
62
+ });
63
+ }
64
+ if (trigger) {
65
+ Obj.setParent(trigger, routine);
66
+ Obj.update(routine, (routine) => {
67
+ routine.triggers.push(Ref.make(trigger));
68
+ });
69
+ }
70
+ // Wire every attached trigger (singular or `triggers`) from the action; preserves template-provided
71
+ // input. Gated on `spec`: with no action yet, wiring would null out pre-set trigger runnables.
72
+ if (routine.spec) {
73
+ wireTriggers(routine);
74
+ }
75
+ return routine;
76
+ };
@@ -1,95 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/containers/RoutineArticle/RoutineArticle.tsx
4
- import { Atom, RegistryContext } from "@effect-atom/atom-react";
5
- import React, { useCallback, useContext, useMemo } from "react";
6
- import { useOperationInvoker } from "@dxos/app-framework/ui";
7
- import { Obj, Ref } from "@dxos/echo";
8
- import { useObject } from "@dxos/react-client/echo";
9
- import { Panel } from "@dxos/react-ui";
10
- import { Menu, MenuBuilder, useMenuBuilder } from "@dxos/react-ui-menu";
11
- import { RoutineForm } from "#components";
12
- import { meta } from "#meta";
13
- import { RoutineOperation } from "#types";
14
- var RoutineArticle = ({ role, attendableId, subject }) => {
15
- const { invokePromise } = useOperationInvoker();
16
- const registry = useContext(RegistryContext);
17
- const [routine] = useObject(subject);
18
- const db = Obj.getDatabase(subject);
19
- const runningAtom = useMemo(() => Atom.make(false), []);
20
- const canRun = useMemo(() => Boolean(routine.spec) && routine.triggers.length > 0, [
21
- routine.spec,
22
- routine.triggers
23
- ]);
24
- const handleRun = useCallback(() => {
25
- if (!invokePromise || !db) {
26
- return;
27
- }
28
- const triggerRef = routine.triggers[0];
29
- registry.set(runningAtom, true);
30
- void invokePromise(RoutineOperation.RunRoutine, {
31
- routine: Ref.make(subject)
32
- }, {
33
- spaceId: db.spaceId,
34
- notify: {
35
- error: [
36
- "run-error.message",
37
- {
38
- ns: meta.profile.key
39
- }
40
- ]
41
- },
42
- ...triggerRef ? {
43
- tracing: {
44
- trigger: triggerRef
45
- }
46
- } : {}
47
- }).finally(() => registry.set(runningAtom, false));
48
- }, [
49
- invokePromise,
50
- db,
51
- subject,
52
- routine,
53
- registry,
54
- runningAtom
55
- ]);
56
- const menuActions = useArticleMenuActions({
57
- canRun,
58
- runningAtom,
59
- handleRun
60
- });
61
- if (!db) {
62
- return null;
63
- }
64
- return /* @__PURE__ */ React.createElement(Menu.Root, {
65
- ...menuActions,
66
- attendableId
67
- }, /* @__PURE__ */ React.createElement(Panel.Root, {
68
- role
69
- }, /* @__PURE__ */ React.createElement(Panel.Toolbar, null, /* @__PURE__ */ React.createElement(Menu.Toolbar, {
70
- className: "dx-document"
71
- })), /* @__PURE__ */ React.createElement(Panel.Content, null, /* @__PURE__ */ React.createElement(RoutineForm, {
72
- db,
73
- routine: subject
74
- }))));
75
- };
76
- var useArticleMenuActions = ({ canRun, runningAtom, handleRun }) => useMenuBuilder((get) => MenuBuilder.make().action("run", {
77
- label: [
78
- "run.label",
79
- {
80
- ns: meta.profile.key
81
- }
82
- ],
83
- icon: "ph--play--regular",
84
- disabled: get(runningAtom) || !canRun,
85
- disposition: "toolbar",
86
- testId: "routine.toolbar.run"
87
- }, () => handleRun()).build(), [
88
- canRun,
89
- handleRun,
90
- runningAtom
91
- ]);
92
- export {
93
- RoutineArticle as default
94
- };
95
- //# sourceMappingURL=RoutineArticle-UNTMV4CC.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/RoutineArticle/RoutineArticle.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Atom, RegistryContext } from '@effect-atom/atom-react';\nimport React, { useCallback, useContext, useMemo } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Obj, Ref } from '@dxos/echo';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Panel } from '@dxos/react-ui';\nimport { Menu, MenuBuilder, useMenuBuilder } from '@dxos/react-ui-menu';\n\nimport { RoutineForm } from '#components';\nimport { meta } from '#meta';\nimport { Routine, RoutineOperation } from '#types';\n\nexport type RoutineArticleProps = AppSurface.ObjectArticleProps<Routine.Routine>;\n\n/**\n * Article surface for a {@link Routine}. The form edits the live routine in place; each trigger's on/off state\n * is toggled inline in the trigger editor. The toolbar exposes Run.\n *\n * TODO(wittjosiah): Disable editing while the routine is running (you shouldn't mutate running code). This was\n * previously wired as \"read-only when enabled\" via a routine-level toggle, but that is not how we want to\n * achieve it — reintroduce a run-state-based lock instead.\n */\nexport const RoutineArticle = ({ role, attendableId, subject }: RoutineArticleProps) => {\n const { invokePromise } = useOperationInvoker();\n const registry = useContext(RegistryContext);\n // Subscribe so the run affordance tracks the routine's action (`spec`).\n const [routine] = useObject(subject);\n const db = Obj.getDatabase(subject);\n\n const runningAtom = useMemo(() => Atom.make(false), []);\n\n // Require both a spec and at least one trigger: manual runs are attributed to the first trigger\n // so they appear in history, and without a trigger the run would be invisible there.\n const canRun = useMemo(() => Boolean(routine.spec) && routine.triggers.length > 0, [routine.spec, routine.triggers]);\n\n const handleRun = useCallback(() => {\n if (!invokePromise || !db) {\n return;\n }\n // Thread the routine's first trigger as trace attribution so the run appears in history.\n // Manual runs bypass the trigger dispatcher (which normally stamps meta.trigger), so we\n // do it here — history filters on trigger entity id, and without this the run is invisible.\n const triggerRef = routine.triggers[0];\n registry.set(runningAtom, true);\n void invokePromise(\n RoutineOperation.RunRoutine,\n { routine: Ref.make(subject) },\n {\n spaceId: db.spaceId,\n notify: { error: ['run-error.message', { ns: meta.profile.key }] },\n ...(triggerRef ? { tracing: { trigger: triggerRef } } : {}),\n },\n ).finally(() => registry.set(runningAtom, false));\n }, [invokePromise, db, subject, routine, registry, runningAtom]);\n\n const menuActions = useArticleMenuActions({ canRun, runningAtom, handleRun });\n\n if (!db) {\n return null;\n }\n\n return (\n <Menu.Root {...menuActions} attendableId={attendableId}>\n <Panel.Root role={role}>\n <Panel.Toolbar>\n <Menu.Toolbar className='dx-document' />\n </Panel.Toolbar>\n <Panel.Content>\n <RoutineForm db={db} routine={subject} />\n </Panel.Content>\n </Panel.Root>\n </Menu.Root>\n );\n};\n\n//\n// Hooks\n//\n\ntype ArticleMenuActionsOptions = {\n canRun: boolean;\n runningAtom: Atom.Writable<boolean>;\n handleRun: () => void;\n};\n\nconst useArticleMenuActions = ({ canRun, runningAtom, handleRun }: ArticleMenuActionsOptions) =>\n useMenuBuilder(\n (get) =>\n MenuBuilder.make()\n .action(\n 'run',\n {\n label: ['run.label', { ns: meta.profile.key }],\n icon: 'ph--play--regular',\n disabled: get(runningAtom) || !canRun,\n disposition: 'toolbar',\n testId: 'routine.toolbar.run',\n },\n () => handleRun(),\n )\n .build(),\n [canRun, handleRun, runningAtom],\n );\n"],
5
- "mappings": ";;;AAIA,SAASA,MAAMC,uBAAuB;AACtC,OAAOC,SAASC,aAAaC,YAAYC,eAAe;AAExD,SAASC,2BAA2B;AAEpC,SAASC,KAAKC,WAAW;AACzB,SAASC,iBAAiB;AAC1B,SAASC,aAAa;AACtB,SAASC,MAAMC,aAAaC,sBAAsB;AAElD,SAASC,mBAAmB;AAC5B,SAASC,YAAY;AACrB,SAAkBC,wBAAwB;AAYnC,IAAMC,iBAAiB,CAAC,EAAEC,MAAMC,cAAcC,QAAO,MAAuB;AACjF,QAAM,EAAEC,cAAa,IAAKf,oBAAAA;AAC1B,QAAMgB,WAAWlB,WAAWH,eAAAA;AAE5B,QAAM,CAACsB,OAAAA,IAAWd,UAAUW,OAAAA;AAC5B,QAAMI,KAAKjB,IAAIkB,YAAYL,OAAAA;AAE3B,QAAMM,cAAcrB,QAAQ,MAAML,KAAK2B,KAAK,KAAA,GAAQ,CAAA,CAAE;AAItD,QAAMC,SAASvB,QAAQ,MAAMwB,QAAQN,QAAQO,IAAI,KAAKP,QAAQQ,SAASC,SAAS,GAAG;IAACT,QAAQO;IAAMP,QAAQQ;GAAS;AAEnH,QAAME,YAAY9B,YAAY,MAAA;AAC5B,QAAI,CAACkB,iBAAiB,CAACG,IAAI;AACzB;IACF;AAIA,UAAMU,aAAaX,QAAQQ,SAAS,CAAA;AACpCT,aAASa,IAAIT,aAAa,IAAA;AAC1B,SAAKL,cACHL,iBAAiBoB,YACjB;MAAEb,SAASf,IAAImB,KAAKP,OAAAA;IAAS,GAC7B;MACEiB,SAASb,GAAGa;MACZC,QAAQ;QAAEC,OAAO;UAAC;UAAqB;YAAEC,IAAIzB,KAAK0B,QAAQC;UAAI;;MAAG;MACjE,GAAIR,aAAa;QAAES,SAAS;UAAEC,SAASV;QAAW;MAAE,IAAI,CAAC;IAC3D,CAAA,EACAW,QAAQ,MAAMvB,SAASa,IAAIT,aAAa,KAAA,CAAA;EAC5C,GAAG;IAACL;IAAeG;IAAIJ;IAASG;IAASD;IAAUI;GAAY;AAE/D,QAAMoB,cAAcC,sBAAsB;IAAEnB;IAAQF;IAAaO;EAAU,CAAA;AAE3E,MAAI,CAACT,IAAI;AACP,WAAO;EACT;AAEA,SACE,sBAAA,cAACb,KAAKqC,MAAI;IAAE,GAAGF;IAAa3B;KAC1B,sBAAA,cAACT,MAAMsC,MAAI;IAAC9B;KACV,sBAAA,cAACR,MAAMuC,SAAO,MACZ,sBAAA,cAACtC,KAAKsC,SAAO;IAACC,WAAU;OAE1B,sBAAA,cAACxC,MAAMyC,SAAO,MACZ,sBAAA,cAACrC,aAAAA;IAAYU;IAAQD,SAASH;;AAKxC;AAYA,IAAM2B,wBAAwB,CAAC,EAAEnB,QAAQF,aAAaO,UAAS,MAC7DpB,eACE,CAACuC,QACCxC,YAAYe,KAAI,EACb0B,OACC,OACA;EACEC,OAAO;IAAC;IAAa;MAAEd,IAAIzB,KAAK0B,QAAQC;IAAI;;EAC5Ca,MAAM;EACNC,UAAUJ,IAAI1B,WAAAA,KAAgB,CAACE;EAC/B6B,aAAa;EACbC,QAAQ;AACV,GACA,MAAMzB,UAAAA,CAAAA,EAEP0B,MAAK,GACV;EAAC/B;EAAQK;EAAWP;CAAY;",
6
- "names": ["Atom", "RegistryContext", "React", "useCallback", "useContext", "useMemo", "useOperationInvoker", "Obj", "Ref", "useObject", "Panel", "Menu", "MenuBuilder", "useMenuBuilder", "RoutineForm", "meta", "RoutineOperation", "RoutineArticle", "role", "attendableId", "subject", "invokePromise", "registry", "routine", "db", "getDatabase", "runningAtom", "make", "canRun", "Boolean", "spec", "triggers", "length", "handleRun", "triggerRef", "set", "RunRoutine", "spaceId", "notify", "error", "ns", "profile", "key", "tracing", "trigger", "finally", "menuActions", "useArticleMenuActions", "Root", "Toolbar", "className", "Content", "get", "action", "label", "icon", "disabled", "disposition", "testId", "build"]
7
- }
@@ -1,249 +0,0 @@
1
- import "./chunk-674LDIUJ.mjs";
2
- import "./chunk-J5LGTIGS.mjs";
3
-
4
- // src/containers/RoutineCompanion/RoutineCompanion.tsx
5
- import { Atom } from "@effect-atom/atom-react";
6
- import * as Effect from "effect/Effect";
7
- import React, { useCallback, useMemo, useRef, useState } from "react";
8
- import { useCapabilities, useOperationInvoker } from "@dxos/app-framework/ui";
9
- import { Database, Filter as Filter2, Obj as Obj2, Type } from "@dxos/echo";
10
- import { EffectEx } from "@dxos/effect";
11
- import { SpaceOperation } from "@dxos/plugin-space";
12
- import { useQuery } from "@dxos/react-client/echo";
13
- import { Panel, ScrollArea, useTranslation } from "@dxos/react-ui";
14
- import { Menu, MenuBuilder, useMenuBuilder } from "@dxos/react-ui-menu";
15
- import { MasterDetail, RoutineForm } from "#components";
16
- import { meta } from "#meta";
17
- import { Routine as Routine2, RoutineCapabilities } from "#types";
18
-
19
- // src/util/routines-for-object.ts
20
- import { Instructions, Trigger } from "@dxos/compute";
21
- import { Filter, Obj, Query, Ref } from "@dxos/echo";
22
- import { Routine } from "#types";
23
- var connectedRoutinesQuery = (object) => {
24
- const byInput = Query.select(Filter.id(object.id)).referencedBy(Trigger.Trigger);
25
- const byFeed = Query.select(Filter.id(object.id)).reference("feed").referencedBy(Trigger.Trigger);
26
- const byTrigger = Query.all(byInput, byFeed).referencedBy(Routine.Routine, "triggers");
27
- const byInstructions = Query.select(Filter.id(object.id)).referencedBy(Instructions.Instructions, "objects").referencedBy(Routine.Routine);
28
- return Query.all(byTrigger, byInstructions);
29
- };
30
-
31
- // src/containers/RoutineCompanion/RoutineCompanion.tsx
32
- var RoutineCompanion = ({ subject: object, attendableId }) => {
33
- const db = Obj2.getDatabase(object);
34
- const { t } = useTranslation(meta.profile.key);
35
- const { invokePromise } = useOperationInvoker();
36
- const { items, statusFor } = useConnectedRoutines(db, object);
37
- const [selectedId, setSelectedId] = useState();
38
- const [draft, setDraft] = useState();
39
- const [savedRoutine, setSavedRoutine] = useState();
40
- const selected = useMemo(() => items.find((routine) => routine.id === selectedId) ?? savedRoutine, [
41
- items,
42
- selectedId,
43
- savedRoutine
44
- ]);
45
- const handleSelect = useCallback((id) => {
46
- if (draft) {
47
- return;
48
- }
49
- setSavedRoutine(void 0);
50
- setSelectedId(id);
51
- }, [
52
- draft
53
- ]);
54
- const handleCreateFromTemplate = useCallback(async (template) => {
55
- if (!db) {
56
- return;
57
- }
58
- const scaffolded = await EffectEx.runPromise(template.scaffold({
59
- subject: object
60
- }).pipe(Effect.provideService(Database.Service, Database.makeService(db))));
61
- setSavedRoutine(void 0);
62
- setSelectedId(void 0);
63
- setDraft(scaffolded);
64
- }, [
65
- db,
66
- object
67
- ]);
68
- const allTemplates = useCapabilities(RoutineCapabilities.Template);
69
- const templates = useMemo(() => allTemplates.filter((template) => template.appliesTo?.(object) ?? true), [
70
- allTemplates,
71
- object
72
- ]);
73
- const menuActions = useCompanionMenuActions({
74
- t,
75
- templates,
76
- draft,
77
- handleCreateFromTemplate
78
- });
79
- const handleCancel = useCallback(() => {
80
- setDraft(void 0);
81
- }, []);
82
- const handleSave = useCallback(async () => {
83
- if (!draft || !db) {
84
- return;
85
- }
86
- const persistedRoutine = db.add(draft);
87
- await db.flush();
88
- setSelectedId(persistedRoutine.id);
89
- setSavedRoutine(persistedRoutine);
90
- setDraft(void 0);
91
- }, [
92
- draft,
93
- db
94
- ]);
95
- const handleDelete = useCallback((routine) => {
96
- if (!db) {
97
- return;
98
- }
99
- setSavedRoutine((current) => current?.id === routine.id ? void 0 : current);
100
- setSelectedId((current) => current === routine.id ? void 0 : current);
101
- void invokePromise?.(SpaceOperation.RemoveObjects, {
102
- objects: [
103
- routine
104
- ]
105
- }, {
106
- spaceId: db.spaceId
107
- });
108
- }, [
109
- invokePromise,
110
- db
111
- ]);
112
- const getMenu = useGetMenu({
113
- t,
114
- handleDelete
115
- });
116
- const getIcon = useCallback((get, routine) => {
117
- const { icon, hue } = Obj2.getIcon(routine) ?? {
118
- icon: "ph--lightning--regular",
119
- hue: void 0
120
- };
121
- const { enabled } = get(routineEnabled(routine));
122
- return {
123
- icon,
124
- hue: enabled ? hue : void 0
125
- };
126
- }, []);
127
- const getLabel = useCallback((get, routine) => get(Obj2.labelAtom(routine)) || t("object-name.placeholder", {
128
- ns: Type.getTypename(Routine2.Routine)
129
- }) || "", [
130
- t
131
- ]);
132
- const getAdornment = useCallback((_get, routine) => statusFor(routine.id) === "detached" ? {
133
- icon: "ph--warning--regular",
134
- label: t("routine-detached.message")
135
- } : void 0, [
136
- statusFor,
137
- t
138
- ]);
139
- if (!db) {
140
- return null;
141
- }
142
- const shown = draft ?? selected;
143
- const detail = shown ? /* @__PURE__ */ React.createElement(RoutineForm, {
144
- key: shown.id,
145
- db,
146
- routine: shown,
147
- onSave: draft ? () => void handleSave() : void 0,
148
- onCancel: draft ? handleCancel : void 0
149
- }) : null;
150
- return /* @__PURE__ */ React.createElement(Menu.Root, {
151
- ...menuActions,
152
- attendableId
153
- }, /* @__PURE__ */ React.createElement(Panel.Root, null, /* @__PURE__ */ React.createElement(Panel.Toolbar, null, /* @__PURE__ */ React.createElement(Menu.Toolbar, {
154
- className: "dx-document"
155
- })), /* @__PURE__ */ React.createElement(Panel.Content, {
156
- asChild: true,
157
- className: "pt-trim-md"
158
- }, /* @__PURE__ */ React.createElement(ScrollArea.Root, null, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(MasterDetail, {
159
- classNames: "dx-document",
160
- items,
161
- selectedId,
162
- detail,
163
- onSelect: handleSelect,
164
- getMenu,
165
- getIcon,
166
- getLabel,
167
- getAdornment,
168
- emptyLabel: t("no-routines.message")
169
- }))))));
170
- };
171
- var useConnectedRoutines = (db, object) => {
172
- const connected = useQuery(db, connectedRoutinesQuery(object));
173
- const connectedIds = useMemo(() => new Set(connected.map((routine) => routine.id)), [
174
- connected
175
- ]);
176
- const all = useQuery(db, Filter2.type(Routine2.Routine));
177
- const byId = useMemo(() => new Map(all.map((routine) => [
178
- routine.id,
179
- routine
180
- ])), [
181
- all
182
- ]);
183
- const seenOrder = useRef([]);
184
- const seenForObject = useRef(object.id);
185
- if (seenForObject.current !== object.id) {
186
- seenForObject.current = object.id;
187
- seenOrder.current = [];
188
- }
189
- for (const id of connectedIds) {
190
- if (!seenOrder.current.includes(id)) {
191
- seenOrder.current.push(id);
192
- }
193
- }
194
- const items = useMemo(() => seenOrder.current.flatMap((id) => byId.has(id) ? [
195
- byId.get(id)
196
- ] : []), [
197
- byId,
198
- connectedIds
199
- ]);
200
- const statusFor = useCallback((id) => connectedIds.has(id) ? "associated" : "detached", [
201
- connectedIds
202
- ]);
203
- return {
204
- items,
205
- statusFor
206
- };
207
- };
208
- var routineEnabled = Atom.family((routine) => Atom.make((get) => {
209
- const triggers = get(Obj2.atomProperty(routine, "triggers"));
210
- const hasTriggers = triggers.length > 0;
211
- return {
212
- hasTriggers,
213
- enabled: hasTriggers && triggers.every((ref) => get(Obj2.atomProperty(ref, "enabled")) === true)
214
- };
215
- }));
216
- var useGetMenu = ({ t, handleDelete }) => useCallback((_get, routine) => MenuBuilder.make().action("delete", {
217
- label: t("delete.label"),
218
- icon: "ph--trash--regular",
219
- testId: "routine.companion.delete"
220
- }, () => handleDelete(routine)).build(), [
221
- t,
222
- handleDelete
223
- ]);
224
- var useCompanionMenuActions = ({ t, templates, draft, handleCreateFromTemplate }) => useMenuBuilder(() => MenuBuilder.make().separator("gap").group("create", {
225
- variant: "dropdownMenu",
226
- label: t("add-routine.label"),
227
- icon: "ph--plus--regular",
228
- iconOnly: true,
229
- caretDown: false,
230
- disabled: draft != null || templates.length === 0,
231
- testId: "routine.companion.create"
232
- }, (group) => {
233
- for (const template of templates) {
234
- group.action(template.id, {
235
- label: template.label,
236
- icon: template.icon ?? "ph--lightning--regular"
237
- }, () => void handleCreateFromTemplate(template));
238
- }
239
- }).build(), [
240
- t,
241
- templates,
242
- draft,
243
- handleCreateFromTemplate
244
- ]);
245
- export {
246
- RoutineCompanion,
247
- RoutineCompanion as default
248
- };
249
- //# sourceMappingURL=RoutineCompanion-ZZ6WMY7I.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/RoutineCompanion/RoutineCompanion.tsx", "../../../src/util/routines-for-object.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Database, Filter, Obj, Type } from '@dxos/echo';\nimport { EffectEx } from '@dxos/effect';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Panel, ScrollArea, useTranslation } from '@dxos/react-ui';\nimport { type ActionGraphProps, Menu, MenuBuilder, useMenuBuilder } from '@dxos/react-ui-menu';\n\nimport { MasterDetail, type MasterDetailAdornment, type MasterDetailIcon, RoutineForm } from '#components';\nimport { meta } from '#meta';\nimport { Routine, RoutineCapabilities } from '#types';\n\nimport { connectedRoutinesQuery } from '../../util';\n\n/** Association state of a row relative to the companion's object. */\ntype Status = 'associated' | 'detached';\n\nexport type RoutineCompanionProps = AppSurface.ObjectArticleProps<Obj.Unknown>;\n\n/**\n * Per-object companion: a master-detail list of automations connected to the object, via\n * {@link connectedRoutinesQuery} (covers both trigger-input and instructions-context paths).\n *\n * The list is session-stable: a routine seen connected stays listed even after it loses its association\n * (flagged with a 'detached' adornment) so it doesn't vanish mid-edit. The toolbar create menu offers a\n * template picker (contributed via {@link RoutineCapabilities.Template}, filtered by `appliesTo`); each\n * template's `scaffold` returns a fully-wired in-memory routine graph, shown editable in {@link RoutineForm}\n * and committed on Save with a single `Database.add` (which cascades the owned children). Existing routines\n * are edited in place.\n */\nexport const RoutineCompanion = ({ subject: object, attendableId }: RoutineCompanionProps) => {\n // A non-persisted subject has no database; `db` may be undefined. Every hook below tolerates that, and the\n // render is guarded after the last hook (see below) so hook order is identical across renders either way.\n const db = Obj.getDatabase(object);\n\n const { t } = useTranslation(meta.profile.key);\n const { invokePromise } = useOperationInvoker();\n const { items, statusFor } = useConnectedRoutines(db, object);\n\n const [selectedId, setSelectedId] = useState<string | undefined>();\n const [draft, setDraft] = useState<Routine.Routine | undefined>();\n // After saving a draft, hold the persisted routine directly so the detail panel renders immediately\n // before the reactive queries catch up to include the newly-connected routine.\n const [savedRoutine, setSavedRoutine] = useState<Routine.Routine | undefined>();\n const selected = useMemo(\n () => items.find((routine) => routine.id === selectedId) ?? savedRoutine,\n [items, selectedId, savedRoutine],\n );\n\n const handleSelect = useCallback(\n (id: string | undefined) => {\n // Ignore selection changes while a draft is active — the edit (or create) must be saved or cancelled first.\n if (draft) {\n return;\n }\n setSavedRoutine(undefined);\n setSelectedId(id);\n },\n [draft],\n );\n\n const handleCreateFromTemplate = useCallback(\n async (template: RoutineCapabilities.Template) => {\n if (!db) {\n return;\n }\n\n // The scaffold returns a fully-wired in-memory routine draft graph (its owned trigger/instructions\n // bound and parented); nothing is persisted until Save.\n const scaffolded = await EffectEx.runPromise(\n template.scaffold({ subject: object }).pipe(Effect.provideService(Database.Service, Database.makeService(db))),\n );\n\n setSavedRoutine(undefined);\n setSelectedId(undefined);\n setDraft(scaffolded);\n },\n [db, object],\n );\n\n // Templates filtered to those applicable to this companion's subject.\n const allTemplates = useCapabilities(RoutineCapabilities.Template);\n const templates = useMemo(\n () => allTemplates.filter((template) => template.appliesTo?.(object) ?? true),\n [allTemplates, object],\n );\n\n // Toolbar create menu: a `+` dropdown of applicable templates, pushed to the trailing edge by a growing gap\n // separator (disabled while a draft is in progress so it can't be silently replaced).\n const menuActions = useCompanionMenuActions({ t, templates, draft, handleCreateFromTemplate });\n\n const handleCancel = useCallback(() => {\n // Draft was never persisted, nothing to clean up.\n setDraft(undefined);\n }, []);\n\n const handleSave = useCallback(async () => {\n if (!draft || !db) {\n return;\n }\n\n // The draft is a fully-wired graph (see `Routine.make`); a single add cascades the owned trigger and\n // instructions, and the subject carried in the instructions' `objects` is the structural connection the\n // query finds.\n const persistedRoutine = db.add(draft);\n await db.flush();\n setSelectedId(persistedRoutine.id);\n // Provide the persisted routine directly so the detail panel renders before the reactive queries\n // catch up to include the newly-connected routine.\n setSavedRoutine(persistedRoutine);\n setDraft(undefined);\n }, [draft, db]);\n\n const handleDelete = useCallback(\n (routine: Routine.Routine) => {\n if (!db) {\n return;\n }\n\n setSavedRoutine((current) => (current?.id === routine.id ? undefined : current));\n setSelectedId((current) => (current === routine.id ? undefined : current));\n // Route through the space operation so the deletion is undoable (toast + RestoreObjects), rather than\n // mutating the database directly.\n void invokePromise?.(SpaceOperation.RemoveObjects, { objects: [routine] }, { spaceId: db.spaceId });\n },\n [invokePromise, db],\n );\n\n // Per-row overflow menu: delete. (A routine's on/off state is toggled per-trigger inline in the form,\n // not from the list.)\n const getMenu = useGetMenu({ t, handleDelete });\n\n // Row icon, reactive per row: an enabled routine takes its type's hue (amber); disabled uses the default\n // icon colour. Subscribes (via `get`) only to this routine's triggers' `enabled` flags.\n const getIcon = useCallback((get: Atom.Context, routine: Routine.Routine): MasterDetailIcon => {\n const { icon, hue } = Obj.getIcon(routine) ?? { icon: 'ph--lightning--regular', hue: undefined };\n const { enabled } = get(routineEnabled(routine));\n return { icon, hue: enabled ? hue : undefined };\n }, []);\n\n // Row label, reactive per row via the object's label atom, so a rename updates the row live.\n const getLabel = useCallback(\n (get: Atom.Context, routine: Routine.Routine): string =>\n get(Obj.labelAtom(routine)) || t('object-name.placeholder', { ns: Type.getTypename(Routine.Routine) }) || '',\n [t],\n );\n\n // Trailing adornment: a warning badge on a row whose routine has left the connected set (it stays in the\n // session-stable list — see {@link useConnectedRoutines} — rather than disappearing while still selected/edited).\n const getAdornment = useCallback(\n (_get: Atom.Context, routine: Routine.Routine): MasterDetailAdornment | undefined =>\n statusFor(routine.id) === 'detached'\n ? { icon: 'ph--warning--regular', label: t('routine-detached.message') }\n : undefined,\n [statusFor, t],\n );\n\n // Render guard placed after every hook so hook order stays stable: a non-persisted subject (no database)\n // has nothing to list.\n if (!db) {\n return null;\n }\n\n // One form for both flows. A selected (persisted) routine is edited in place. The create-from-template draft\n // is the only Save/Cancel flow: an in-memory routine shown editable, discarded on Cancel and persisted by a\n // single `Database.add` on Save. The `key` (the routine id) remounts the uncontrolled form when the shown\n // routine changes; the draft carries a fresh id, so no edits leak between rows.\n const shown = draft ?? selected;\n const detail = shown ? (\n <RoutineForm\n key={shown.id}\n db={db}\n routine={shown}\n onSave={draft ? () => void handleSave() : undefined}\n onCancel={draft ? handleCancel : undefined}\n />\n ) : null;\n\n return (\n <Menu.Root {...menuActions} attendableId={attendableId}>\n <Panel.Root>\n <Panel.Toolbar>\n <Menu.Toolbar className='dx-document' />\n </Panel.Toolbar>\n <Panel.Content asChild className='pt-trim-md'>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <MasterDetail<Routine.Routine>\n classNames='dx-document'\n items={items}\n selectedId={selectedId}\n detail={detail}\n onSelect={handleSelect}\n getMenu={getMenu}\n getIcon={getIcon}\n getLabel={getLabel}\n getAdornment={getAdornment}\n emptyLabel={t('no-routines.message')}\n />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Panel.Content>\n </Panel.Root>\n </Menu.Root>\n );\n};\n\n//\n// Hooks\n//\n\n/**\n * The companion's automation list, session-stable and frozen against disconnection: routines connected to the\n * object via {@link connectedRoutinesQuery} (trigger-input and instructions-context paths unified) are\n * accumulated append-only so rows never reorder, and a routine that leaves the connected set stays in the list\n * (flagged `detached` via {@link statusFor}) rather than vanishing mid-edit — only a hard-deleted routine drops\n * out. Detached rows are resolved from the space's full routine set since the connected query no longer returns\n * them. A freshly-saved routine appears once the query reflects it.\n */\nconst useConnectedRoutines = (\n db: Database.Database | undefined,\n object: Obj.Unknown,\n): { items: Routine.Routine[]; statusFor: (id: string) => Status } => {\n const connected = useQuery(db, connectedRoutinesQuery(object));\n const connectedIds = useMemo(() => new Set(connected.map((routine) => routine.id)), [connected]);\n\n // All routines in the space — used to resolve rows that have left the connected set (still exist, just detached).\n const all = useQuery(db, Filter.type(Routine.Routine));\n const byId = useMemo(() => new Map(all.map((routine) => [routine.id, routine])), [all]);\n\n // Session-stable, append-only: a routine seen connected this session is remembered so its row never reorders\n // or disappears on disconnect. Scoped to the current subject — reset if this instance is reused for another\n // object so the previous subject's rows don't leak in.\n const seenOrder = useRef<string[]>([]);\n const seenForObject = useRef(object.id);\n if (seenForObject.current !== object.id) {\n seenForObject.current = object.id;\n seenOrder.current = [];\n }\n for (const id of connectedIds) {\n if (!seenOrder.current.includes(id)) {\n seenOrder.current.push(id);\n }\n }\n\n // Resolve to live objects in stable order, dropping only ids whose routine was hard-deleted.\n const items = useMemo(\n () => seenOrder.current.flatMap((id) => (byId.has(id) ? [byId.get(id)!] : [])),\n [byId, connectedIds],\n );\n\n const statusFor = useCallback(\n (id: string): Status => (connectedIds.has(id) ? 'associated' : 'detached'),\n [connectedIds],\n );\n\n return { items, statusFor };\n};\n\n/**\n * Reactive family for a routine's on/off state — subscribes (via `get`) to its triggers' `enabled` flags so the\n * row icon re-derives when a flag flips. Keyed by the routine instance.\n */\nconst routineEnabled = Atom.family(\n (routine: Routine.Routine): Atom.Atom<{ hasTriggers: boolean; enabled: boolean }> =>\n Atom.make((get) => {\n const triggers = get(Obj.atomProperty(routine, 'triggers'));\n const hasTriggers = triggers.length > 0;\n return {\n hasTriggers,\n enabled: hasTriggers && triggers.every((ref) => get(Obj.atomProperty(ref, 'enabled')) === true),\n };\n }),\n);\n\ntype GetMenuOptions = {\n t: ReturnType<typeof useTranslation>['t'];\n handleDelete: (routine: Routine.Routine) => void;\n};\n\nconst useGetMenu = ({ t, handleDelete }: GetMenuOptions) =>\n useCallback(\n (_get: Atom.Context, routine: Routine.Routine): ActionGraphProps =>\n MenuBuilder.make()\n .action(\n 'delete',\n {\n label: t('delete.label'),\n icon: 'ph--trash--regular',\n testId: 'routine.companion.delete',\n },\n () => handleDelete(routine),\n )\n .build(),\n [t, handleDelete],\n );\n\ntype CompanionMenuActionsOptions = {\n t: ReturnType<typeof useTranslation>['t'];\n templates: RoutineCapabilities.Template[];\n draft: Routine.Routine | undefined;\n handleCreateFromTemplate: (template: RoutineCapabilities.Template) => Promise<void>;\n};\n\nconst useCompanionMenuActions = ({ t, templates, draft, handleCreateFromTemplate }: CompanionMenuActionsOptions) =>\n useMenuBuilder(\n () =>\n MenuBuilder.make()\n .separator('gap')\n .group(\n 'create',\n {\n variant: 'dropdownMenu',\n label: t('add-routine.label'),\n icon: 'ph--plus--regular',\n iconOnly: true,\n caretDown: false,\n disabled: draft != null || templates.length === 0,\n testId: 'routine.companion.create',\n },\n (group) => {\n for (const template of templates) {\n group.action(\n template.id,\n { label: template.label, icon: template.icon ?? 'ph--lightning--regular' },\n () => void handleCreateFromTemplate(template),\n );\n }\n },\n )\n .build(),\n [t, templates, draft, handleCreateFromTemplate],\n );\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { Instructions, Trigger } from '@dxos/compute';\nimport { Filter, Obj, Query, Ref } from '@dxos/echo';\n\nimport { Routine } from '#types';\n\n/**\n * Reactive query for all routines connected to an object O, via two structural paths:\n *\n * 1. **Trigger path** (two hops): O is referenced by a Trigger (via `input` or `spec.feed`), and that\n * Trigger is referenced by a Routine's `triggers` array.\n * 2. **Instructions path** (two hops): O is listed in an Instructions' `objects` context array, and those\n * Instructions are the Routine's action (`spec.instructions`). Both hops traverse `Ref` fields, so they are\n * fully queryable — no JavaScript parent-symbol traversal needed.\n *\n * ECHO's reverse-ref index is structural — it tracks every `Ref` regardless of schema path, including\n * nested untyped records and union fields — so all variants are covered.\n */\nexport const connectedRoutinesQuery = (object: Obj.Unknown): Query.Query<Routine.Routine> => {\n // Trigger path: O ← Trigger (any ref path, incl. nested `input`) ← Routine.triggers.\n const byInput = Query.select(Filter.id(object.id)).referencedBy(Trigger.Trigger);\n // Feed variant: O's feed ← Trigger.spec.feed ← Routine.triggers.\n // `.reference('feed')` is empty for objects without a feed prop, so this adds nothing for non-feed objects.\n const byFeed = Query.select(Filter.id(object.id)).reference('feed').referencedBy(Trigger.Trigger);\n const byTrigger = Query.all(byInput, byFeed).referencedBy(Routine.Routine, 'triggers');\n\n // Instructions path: O ← Instructions.objects ← Routine (via `spec.instructions`). The second hop drops the\n // property key: the instructions ref is nested in the `spec` union, and the reverse-ref index is structural,\n // so a keyless `referencedBy` matches it (a routine only references its own owned instructions here).\n const byInstructions = Query.select(Filter.id(object.id))\n .referencedBy(Instructions.Instructions, 'objects')\n .referencedBy(Routine.Routine);\n\n return Query.all(byTrigger, byInstructions);\n};\n\n/**\n * Pure predicate equivalent of {@link connectedRoutinesQuery}, over a pre-queried list of routines.\n * Kept for unit tests (asserting the query and predicate agree) and the deferred quick-association check.\n */\nexport const routinesForObject = (object: Obj.Unknown, routines: Routine.Routine[]): Routine.Routine[] =>\n routines.filter((routine) => routineReferencesObject(routine, object));\n\nexport const routineReferencesObject = (routine: Routine.Routine, object: Obj.Unknown): boolean =>\n referencesViaTrigger(routine, object) || referencesViaInstructions(routine, object);\n\n/** Trigger path: a trigger's `input` references O, or a feed trigger is bound to O's feed. */\nconst referencesViaTrigger = (routine: Routine.Routine, object: Obj.Unknown): boolean => {\n const objectFeedId = getFeedId(object);\n return routine.triggers.some((ref) => {\n const trigger = ref.target;\n if (!Obj.instanceOf(Trigger.Trigger, trigger)) {\n return false;\n }\n\n if (trigger.spec?.kind === 'feed' && objectFeedId && trigger.spec.feed?.target?.id === objectFeedId) {\n return true;\n }\n\n return trigger.input != null && referencesId(trigger.input, object.id);\n });\n};\n\n/** Instructions path: the routine's owned instructions list O in their `objects` context array. */\nconst referencesViaInstructions = (routine: Routine.Routine, object: Obj.Unknown): boolean =>\n Routine.instructionsRef(routine)?.target?.objects?.some((ref) => ref.target?.id === object.id) ?? false;\n\n/** The feed id a feed-annotated object points at (e.g. `mailbox.feed`), if any. */\nconst getFeedId = (object: Obj.Unknown): string | undefined => {\n const feedRef = (object as { feed?: Ref.Ref<unknown> }).feed;\n return Ref.isRef(feedRef) ? feedRef.target?.id : undefined;\n};\n\n/** Recursively scan a value for a Ref whose target is the given object id. */\nconst referencesId = (value: unknown, id: string): boolean => {\n if (Ref.isRef(value)) {\n return value.target?.id === id;\n }\n if (Array.isArray(value)) {\n return value.some((entry) => referencesId(entry, id));\n }\n if (value && typeof value === 'object') {\n return Object.values(value).some((entry) => referencesId(entry, id));\n }\n return false;\n};\n"],
5
- "mappings": ";;;;AAIA,SAASA,YAAY;AACrB,YAAYC,YAAY;AACxB,OAAOC,SAASC,aAAaC,SAASC,QAAQC,gBAAgB;AAE9D,SAASC,iBAAiBC,2BAA2B;AAErD,SAASC,UAAUC,UAAAA,SAAQC,OAAAA,MAAKC,YAAY;AAC5C,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,gBAAgB;AACzB,SAASC,OAAOC,YAAYC,sBAAsB;AAClD,SAAgCC,MAAMC,aAAaC,sBAAsB;AAEzE,SAASC,cAAiEC,mBAAmB;AAC7F,SAASC,YAAY;AACrB,SAASC,WAAAA,UAASC,2BAA2B;;;ACf7C,SAASC,cAAcC,eAAe;AACtC,SAASC,QAAQC,KAAKC,OAAOC,WAAW;AAExC,SAASC,eAAe;AAcjB,IAAMC,yBAAyB,CAACC,WAAAA;AAErC,QAAMC,UAAUL,MAAMM,OAAOR,OAAOS,GAAGH,OAAOG,EAAE,CAAA,EAAGC,aAAaX,QAAQA,OAAO;AAG/E,QAAMY,SAAST,MAAMM,OAAOR,OAAOS,GAAGH,OAAOG,EAAE,CAAA,EAAGG,UAAU,MAAA,EAAQF,aAAaX,QAAQA,OAAO;AAChG,QAAMc,YAAYX,MAAMY,IAAIP,SAASI,MAAAA,EAAQD,aAAaN,QAAQA,SAAS,UAAA;AAK3E,QAAMW,iBAAiBb,MAAMM,OAAOR,OAAOS,GAAGH,OAAOG,EAAE,CAAA,EACpDC,aAAaZ,aAAaA,cAAc,SAAA,EACxCY,aAAaN,QAAQA,OAAO;AAE/B,SAAOF,MAAMY,IAAID,WAAWE,cAAAA;AAC9B;;;ADEO,IAAMC,mBAAmB,CAAC,EAAEC,SAASC,QAAQC,aAAY,MAAyB;AAGvF,QAAMC,KAAKC,KAAIC,YAAYJ,MAAAA;AAE3B,QAAM,EAAEK,EAAC,IAAKC,eAAeC,KAAKC,QAAQC,GAAG;AAC7C,QAAM,EAAEC,cAAa,IAAKC,oBAAAA;AAC1B,QAAM,EAAEC,OAAOC,UAAS,IAAKC,qBAAqBZ,IAAIF,MAAAA;AAEtD,QAAM,CAACe,YAAYC,aAAAA,IAAiBC,SAAAA;AACpC,QAAM,CAACC,OAAOC,QAAAA,IAAYF,SAAAA;AAG1B,QAAM,CAACG,cAAcC,eAAAA,IAAmBJ,SAAAA;AACxC,QAAMK,WAAWC,QACf,MAAMX,MAAMY,KAAK,CAACC,YAAYA,QAAQC,OAAOX,UAAAA,KAAeK,cAC5D;IAACR;IAAOG;IAAYK;GAAa;AAGnC,QAAMO,eAAeC,YACnB,CAACF,OAAAA;AAEC,QAAIR,OAAO;AACT;IACF;AACAG,oBAAgBQ,MAAAA;AAChBb,kBAAcU,EAAAA;EAChB,GACA;IAACR;GAAM;AAGT,QAAMY,2BAA2BF,YAC/B,OAAOG,aAAAA;AACL,QAAI,CAAC7B,IAAI;AACP;IACF;AAIA,UAAM8B,aAAa,MAAMC,SAASC,WAChCH,SAASI,SAAS;MAAEpC,SAASC;IAAO,CAAA,EAAGoC,KAAYC,sBAAeC,SAASC,SAASD,SAASE,YAAYtC,EAAAA,CAAAA,CAAAA,CAAAA;AAG3GmB,oBAAgBQ,MAAAA;AAChBb,kBAAca,MAAAA;AACdV,aAASa,UAAAA;EACX,GACA;IAAC9B;IAAIF;GAAO;AAId,QAAMyC,eAAeC,gBAAgBC,oBAAoBC,QAAQ;AACjE,QAAMC,YAAYtB,QAChB,MAAMkB,aAAaK,OAAO,CAACf,aAAaA,SAASgB,YAAY/C,MAAAA,KAAW,IAAA,GACxE;IAACyC;IAAczC;GAAO;AAKxB,QAAMgD,cAAcC,wBAAwB;IAAE5C;IAAGwC;IAAW3B;IAAOY;EAAyB,CAAA;AAE5F,QAAMoB,eAAetB,YAAY,MAAA;AAE/BT,aAASU,MAAAA;EACX,GAAG,CAAA,CAAE;AAEL,QAAMsB,aAAavB,YAAY,YAAA;AAC7B,QAAI,CAACV,SAAS,CAAChB,IAAI;AACjB;IACF;AAKA,UAAMkD,mBAAmBlD,GAAGmD,IAAInC,KAAAA;AAChC,UAAMhB,GAAGoD,MAAK;AACdtC,kBAAcoC,iBAAiB1B,EAAE;AAGjCL,oBAAgB+B,gBAAAA;AAChBjC,aAASU,MAAAA;EACX,GAAG;IAACX;IAAOhB;GAAG;AAEd,QAAMqD,eAAe3B,YACnB,CAACH,YAAAA;AACC,QAAI,CAACvB,IAAI;AACP;IACF;AAEAmB,oBAAgB,CAACmC,YAAaA,SAAS9B,OAAOD,QAAQC,KAAKG,SAAY2B,OAAAA;AACvExC,kBAAc,CAACwC,YAAaA,YAAY/B,QAAQC,KAAKG,SAAY2B,OAAAA;AAGjE,SAAK9C,gBAAgB+C,eAAeC,eAAe;MAAEC,SAAS;QAAClC;;IAAS,GAAG;MAAEmC,SAAS1D,GAAG0D;IAAQ,CAAA;EACnG,GACA;IAAClD;IAAeR;GAAG;AAKrB,QAAM2D,UAAUC,WAAW;IAAEzD;IAAGkD;EAAa,CAAA;AAI7C,QAAMQ,UAAUnC,YAAY,CAACoC,KAAmBvC,YAAAA;AAC9C,UAAM,EAAEwC,MAAMC,IAAG,IAAK/D,KAAI4D,QAAQtC,OAAAA,KAAY;MAAEwC,MAAM;MAA0BC,KAAKrC;IAAU;AAC/F,UAAM,EAAEsC,QAAO,IAAKH,IAAII,eAAe3C,OAAAA,CAAAA;AACvC,WAAO;MAAEwC;MAAMC,KAAKC,UAAUD,MAAMrC;IAAU;EAChD,GAAG,CAAA,CAAE;AAGL,QAAMwC,WAAWzC,YACf,CAACoC,KAAmBvC,YAClBuC,IAAI7D,KAAImE,UAAU7C,OAAAA,CAAAA,KAAapB,EAAE,2BAA2B;IAAEkE,IAAIC,KAAKC,YAAYC,SAAQA,OAAO;EAAE,CAAA,KAAM,IAC5G;IAACrE;GAAE;AAKL,QAAMsE,eAAe/C,YACnB,CAACgD,MAAoBnD,YACnBZ,UAAUY,QAAQC,EAAE,MAAM,aACtB;IAAEuC,MAAM;IAAwBY,OAAOxE,EAAE,0BAAA;EAA4B,IACrEwB,QACN;IAAChB;IAAWR;GAAE;AAKhB,MAAI,CAACH,IAAI;AACP,WAAO;EACT;AAMA,QAAM4E,QAAQ5D,SAASI;AACvB,QAAMyD,SAASD,QACb,sBAAA,cAACE,aAAAA;IACCvE,KAAKqE,MAAMpD;IACXxB;IACAuB,SAASqD;IACTG,QAAQ/D,QAAQ,MAAM,KAAKiC,WAAAA,IAAetB;IAC1CqD,UAAUhE,QAAQgC,eAAerB;OAEjC;AAEJ,SACE,sBAAA,cAACsD,KAAKC,MAAI;IAAE,GAAGpC;IAAa/C;KAC1B,sBAAA,cAACoF,MAAMD,MAAI,MACT,sBAAA,cAACC,MAAMC,SAAO,MACZ,sBAAA,cAACH,KAAKG,SAAO;IAACC,WAAU;OAE1B,sBAAA,cAACF,MAAMG,SAAO;IAACC,SAAAA;IAAQF,WAAU;KAC/B,sBAAA,cAACG,WAAWN,MAAI,MACd,sBAAA,cAACM,WAAWC,UAAQ,MAClB,sBAAA,cAACC,cAAAA;IACCC,YAAW;IACXjF;IACAG;IACAgE;IACAe,UAAUnE;IACVkC;IACAE;IACAM;IACAM;IACAoB,YAAY1F,EAAE,qBAAA;;AAQ9B;AAcA,IAAMS,uBAAuB,CAC3BZ,IACAF,WAAAA;AAEA,QAAMgG,YAAYC,SAAS/F,IAAIgG,uBAAuBlG,MAAAA,CAAAA;AACtD,QAAMmG,eAAe5E,QAAQ,MAAM,IAAI6E,IAAIJ,UAAUK,IAAI,CAAC5E,YAAYA,QAAQC,EAAE,CAAA,GAAI;IAACsE;GAAU;AAG/F,QAAMM,MAAML,SAAS/F,IAAIqG,QAAOC,KAAK9B,SAAQA,OAAO,CAAA;AACpD,QAAM+B,OAAOlF,QAAQ,MAAM,IAAImF,IAAIJ,IAAID,IAAI,CAAC5E,YAAY;IAACA,QAAQC;IAAID;GAAQ,CAAA,GAAI;IAAC6E;GAAI;AAKtF,QAAMK,YAAYC,OAAiB,CAAA,CAAE;AACrC,QAAMC,gBAAgBD,OAAO5G,OAAO0B,EAAE;AACtC,MAAImF,cAAcrD,YAAYxD,OAAO0B,IAAI;AACvCmF,kBAAcrD,UAAUxD,OAAO0B;AAC/BiF,cAAUnD,UAAU,CAAA;EACtB;AACA,aAAW9B,MAAMyE,cAAc;AAC7B,QAAI,CAACQ,UAAUnD,QAAQsD,SAASpF,EAAAA,GAAK;AACnCiF,gBAAUnD,QAAQuD,KAAKrF,EAAAA;IACzB;EACF;AAGA,QAAMd,QAAQW,QACZ,MAAMoF,UAAUnD,QAAQwD,QAAQ,CAACtF,OAAQ+E,KAAKQ,IAAIvF,EAAAA,IAAM;IAAC+E,KAAKzC,IAAItC,EAAAA;MAAQ,CAAA,CAAE,GAC5E;IAAC+E;IAAMN;GAAa;AAGtB,QAAMtF,YAAYe,YAChB,CAACF,OAAwByE,aAAac,IAAIvF,EAAAA,IAAM,eAAe,YAC/D;IAACyE;GAAa;AAGhB,SAAO;IAAEvF;IAAOC;EAAU;AAC5B;AAMA,IAAMuD,iBAAiB8C,KAAKC,OAC1B,CAAC1F,YACCyF,KAAKE,KAAK,CAACpD,QAAAA;AACT,QAAMqD,WAAWrD,IAAI7D,KAAImH,aAAa7F,SAAS,UAAA,CAAA;AAC/C,QAAM8F,cAAcF,SAASG,SAAS;AACtC,SAAO;IACLD;IACApD,SAASoD,eAAeF,SAASI,MAAM,CAACC,QAAQ1D,IAAI7D,KAAImH,aAAaI,KAAK,SAAA,CAAA,MAAgB,IAAA;EAC5F;AACF,CAAA,CAAA;AAQJ,IAAM5D,aAAa,CAAC,EAAEzD,GAAGkD,aAAY,MACnC3B,YACE,CAACgD,MAAoBnD,YACnBkG,YAAYP,KAAI,EACbQ,OACC,UACA;EACE/C,OAAOxE,EAAE,cAAA;EACT4D,MAAM;EACN4D,QAAQ;AACV,GACA,MAAMtE,aAAa9B,OAAAA,CAAAA,EAEpBqG,MAAK,GACV;EAACzH;EAAGkD;CAAa;AAUrB,IAAMN,0BAA0B,CAAC,EAAE5C,GAAGwC,WAAW3B,OAAOY,yBAAwB,MAC9EiG,eACE,MACEJ,YAAYP,KAAI,EACbY,UAAU,KAAA,EACVC,MACC,UACA;EACEC,SAAS;EACTrD,OAAOxE,EAAE,mBAAA;EACT4D,MAAM;EACNkE,UAAU;EACVC,WAAW;EACXC,UAAUnH,SAAS,QAAQ2B,UAAU2E,WAAW;EAChDK,QAAQ;AACV,GACA,CAACI,UAAAA;AACC,aAAWlG,YAAYc,WAAW;AAChCoF,UAAML,OACJ7F,SAASL,IACT;MAAEmD,OAAO9C,SAAS8C;MAAOZ,MAAMlC,SAASkC,QAAQ;IAAyB,GACzE,MAAM,KAAKnC,yBAAyBC,QAAAA,CAAAA;EAExC;AACF,CAAA,EAED+F,MAAK,GACV;EAACzH;EAAGwC;EAAW3B;EAAOY;CAAyB;",
6
- "names": ["Atom", "Effect", "React", "useCallback", "useMemo", "useRef", "useState", "useCapabilities", "useOperationInvoker", "Database", "Filter", "Obj", "Type", "EffectEx", "SpaceOperation", "useQuery", "Panel", "ScrollArea", "useTranslation", "Menu", "MenuBuilder", "useMenuBuilder", "MasterDetail", "RoutineForm", "meta", "Routine", "RoutineCapabilities", "Instructions", "Trigger", "Filter", "Obj", "Query", "Ref", "Routine", "connectedRoutinesQuery", "object", "byInput", "select", "id", "referencedBy", "byFeed", "reference", "byTrigger", "all", "byInstructions", "RoutineCompanion", "subject", "object", "attendableId", "db", "Obj", "getDatabase", "t", "useTranslation", "meta", "profile", "key", "invokePromise", "useOperationInvoker", "items", "statusFor", "useConnectedRoutines", "selectedId", "setSelectedId", "useState", "draft", "setDraft", "savedRoutine", "setSavedRoutine", "selected", "useMemo", "find", "routine", "id", "handleSelect", "useCallback", "undefined", "handleCreateFromTemplate", "template", "scaffolded", "EffectEx", "runPromise", "scaffold", "pipe", "provideService", "Database", "Service", "makeService", "allTemplates", "useCapabilities", "RoutineCapabilities", "Template", "templates", "filter", "appliesTo", "menuActions", "useCompanionMenuActions", "handleCancel", "handleSave", "persistedRoutine", "add", "flush", "handleDelete", "current", "SpaceOperation", "RemoveObjects", "objects", "spaceId", "getMenu", "useGetMenu", "getIcon", "get", "icon", "hue", "enabled", "routineEnabled", "getLabel", "labelAtom", "ns", "Type", "getTypename", "Routine", "getAdornment", "_get", "label", "shown", "detail", "RoutineForm", "onSave", "onCancel", "Menu", "Root", "Panel", "Toolbar", "className", "Content", "asChild", "ScrollArea", "Viewport", "MasterDetail", "classNames", "onSelect", "emptyLabel", "connected", "useQuery", "connectedRoutinesQuery", "connectedIds", "Set", "map", "all", "Filter", "type", "byId", "Map", "seenOrder", "useRef", "seenForObject", "includes", "push", "flatMap", "has", "Atom", "family", "make", "triggers", "atomProperty", "hasTriggers", "length", "every", "ref", "MenuBuilder", "action", "testId", "build", "useMenuBuilder", "separator", "group", "variant", "iconOnly", "caretDown", "disabled"]
7
- }
@@ -1,10 +0,0 @@
1
- import {
2
- RoutinePlugin,
3
- RoutinePlugin_default
4
- } from "./chunk-YGWSAKLD.mjs";
5
- import "./chunk-J5LGTIGS.mjs";
6
- export {
7
- RoutinePlugin,
8
- RoutinePlugin_default as default
9
- };
10
- //# sourceMappingURL=RoutinePlugin.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }