@dxos/plugin-automation 0.8.4-main.a4bbb77 → 0.8.4-main.ae835ea

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 (156) hide show
  1. package/dist/lib/browser/AutomationPanel-LBXJDM6Z.mjs +11 -0
  2. package/dist/lib/browser/{AutomationSettings-6XLG2PCK.mjs → AutomationSettings-IIEI5D2K.mjs} +6 -7
  3. package/dist/lib/{node-esm/AutomationSettings-4IW7RGMN.mjs.map → browser/AutomationSettings-IIEI5D2K.mjs.map} +1 -1
  4. package/dist/lib/browser/{FunctionsContainer-BQ6VBDIG.mjs → FunctionsContainer-IZTCGNJZ.mjs} +3 -3
  5. package/dist/lib/browser/{FunctionsPanel-QBTOFFNU.mjs → FunctionsPanel-HFCK3JRB.mjs} +3 -3
  6. package/dist/lib/browser/{app-graph-builder-6TP6ZNYG.mjs → app-graph-builder-7VKA2GS3.mjs} +8 -7
  7. package/dist/lib/browser/app-graph-builder-7VKA2GS3.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-M2WQCY2T.mjs → chunk-CVYJM6OO.mjs} +19 -6
  9. package/dist/lib/browser/chunk-CVYJM6OO.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-EAQL33PI.mjs → chunk-FHSN7G4H.mjs} +22 -9
  11. package/dist/lib/browser/chunk-FHSN7G4H.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-ZTXBAXUT.mjs → chunk-GCGHLQM2.mjs} +2 -2
  13. package/dist/lib/browser/chunk-GCGHLQM2.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-IN2YC7NY.mjs → chunk-JW7XSPYW.mjs} +57 -20
  15. package/dist/lib/browser/chunk-JW7XSPYW.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-LNMCGQC2.mjs → chunk-K5YNWESC.mjs} +60 -20
  17. package/dist/lib/browser/chunk-K5YNWESC.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-LZQFZO3B.mjs +17 -0
  19. package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-U66KBK53.mjs → chunk-XXZNGORC.mjs} +5 -5
  21. package/dist/lib/browser/{chunk-F4K5EMWL.mjs → chunk-YBPJCY3F.mjs} +3 -3
  22. package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +7 -0
  23. package/dist/lib/browser/{compute-runtime-OFQPXD5I.mjs → compute-runtime-PFYRMGN2.mjs} +27 -71
  24. package/dist/lib/browser/compute-runtime-PFYRMGN2.mjs.map +7 -0
  25. package/dist/lib/browser/hooks/index.mjs +3 -4
  26. package/dist/lib/browser/index.mjs +26 -10
  27. package/dist/lib/browser/index.mjs.map +4 -4
  28. package/dist/lib/browser/{intent-resolver-JXVWRAAH.mjs → intent-resolver-5HR7M7T6.mjs} +8 -8
  29. package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs.map +7 -0
  30. package/dist/lib/browser/meta.json +1 -1
  31. package/dist/lib/browser/{react-surface-NG3MJCDH.mjs → react-surface-WPMY3EX2.mjs} +5 -6
  32. package/dist/lib/browser/react-surface-WPMY3EX2.mjs.map +7 -0
  33. package/dist/lib/browser/types/index.mjs +2 -2
  34. package/dist/lib/node-esm/{AutomationPanel-WMVR3IST.mjs → AutomationPanel-NVEIUIZP.mjs} +4 -4
  35. package/dist/lib/node-esm/{AutomationSettings-4IW7RGMN.mjs → AutomationSettings-VIIEPI2P.mjs} +6 -7
  36. package/dist/lib/node-esm/{FunctionsContainer-LHUUOLA5.mjs → FunctionsContainer-KKRCIXGB.mjs} +3 -3
  37. package/dist/lib/node-esm/{FunctionsPanel-SHTQIMDV.mjs → FunctionsPanel-74ELGR7P.mjs} +3 -3
  38. package/dist/lib/node-esm/{app-graph-builder-3A2NIPR5.mjs → app-graph-builder-RTOFJNFV.mjs} +8 -7
  39. package/dist/lib/node-esm/app-graph-builder-RTOFJNFV.mjs.map +7 -0
  40. package/dist/lib/node-esm/{chunk-DSEZPWSO.mjs → chunk-3BJ6BR3E.mjs} +19 -6
  41. package/dist/lib/node-esm/chunk-3BJ6BR3E.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-5MQJPJR2.mjs → chunk-CEVIVRTY.mjs} +6 -2
  43. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-CEWZ2CDM.mjs → chunk-ECJKIUBO.mjs} +3 -3
  45. package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-PBULJE4B.mjs → chunk-JOCKHLFT.mjs} +22 -9
  47. package/dist/lib/node-esm/chunk-JOCKHLFT.mjs.map +7 -0
  48. package/dist/lib/node-esm/{chunk-B6O6UBS7.mjs → chunk-MRYKW5TM.mjs} +2 -2
  49. package/dist/lib/node-esm/chunk-MRYKW5TM.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-2L2X4JMP.mjs → chunk-U5Q2NI7H.mjs} +5 -5
  51. package/dist/lib/node-esm/{chunk-N7NES6SZ.mjs → chunk-W76WUTZY.mjs} +57 -20
  52. package/dist/lib/node-esm/chunk-W76WUTZY.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-MN5S5J4O.mjs → chunk-Y7PJXFCJ.mjs} +60 -20
  54. package/dist/lib/node-esm/chunk-Y7PJXFCJ.mjs.map +7 -0
  55. package/dist/lib/node-esm/{compute-runtime-W5UJNSQY.mjs → compute-runtime-IXCSD3W7.mjs} +27 -71
  56. package/dist/lib/node-esm/compute-runtime-IXCSD3W7.mjs.map +7 -0
  57. package/dist/lib/node-esm/hooks/index.mjs +3 -4
  58. package/dist/lib/node-esm/index.mjs +26 -10
  59. package/dist/lib/node-esm/index.mjs.map +4 -4
  60. package/dist/lib/node-esm/{intent-resolver-ROEBZXSS.mjs → intent-resolver-KDRYB5BC.mjs} +8 -8
  61. package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs.map +7 -0
  62. package/dist/lib/node-esm/meta.json +1 -1
  63. package/dist/lib/node-esm/{react-surface-A4KTYX6Z.mjs → react-surface-Y2BBJV2I.mjs} +5 -6
  64. package/dist/lib/node-esm/react-surface-Y2BBJV2I.mjs.map +7 -0
  65. package/dist/lib/node-esm/types/index.mjs +2 -2
  66. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/capabilities.d.ts +3 -2
  69. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  72. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +2 -2
  73. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  74. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +1 -0
  75. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  77. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +2 -2
  78. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  79. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  80. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +7 -5
  81. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  82. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +4 -2
  83. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  84. package/dist/types/src/events.d.ts +4 -0
  85. package/dist/types/src/events.d.ts.map +1 -0
  86. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +1 -1
  87. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -1
  88. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +2 -2
  89. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
  90. package/dist/types/src/index.d.ts +2 -0
  91. package/dist/types/src/index.d.ts.map +1 -1
  92. package/dist/types/src/meta.d.ts.map +1 -1
  93. package/dist/types/src/translations.d.ts +1 -0
  94. package/dist/types/src/translations.d.ts.map +1 -1
  95. package/dist/types/src/types/schema.d.ts +1 -1
  96. package/dist/types/src/types/schema.d.ts.map +1 -1
  97. package/dist/types/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +33 -31
  99. package/src/AutomationPlugin.tsx +4 -2
  100. package/src/capabilities/app-graph-builder.ts +7 -6
  101. package/src/capabilities/capabilities.ts +3 -2
  102. package/src/capabilities/compute-runtime.ts +7 -5
  103. package/src/capabilities/intent-resolver.ts +5 -5
  104. package/src/capabilities/react-surface.tsx +2 -3
  105. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +3 -4
  106. package/src/components/AutomationPanel/AutomationPanel.tsx +91 -28
  107. package/src/components/FunctionsPanel/FunctionsPanel.tsx +22 -10
  108. package/src/components/TriggerEditor/FunctionInputEditor.tsx +10 -4
  109. package/src/components/TriggerEditor/SpecSelector.tsx +12 -6
  110. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +58 -17
  111. package/src/components/TriggerEditor/TriggerEditor.tsx +44 -18
  112. package/src/events.ts +11 -0
  113. package/src/hooks/useComputeRuntimeCallback.ts +3 -1
  114. package/src/hooks/useTriggerRuntimeControls.ts +4 -4
  115. package/src/index.ts +2 -0
  116. package/src/meta.ts +5 -2
  117. package/src/testing/test-functions.ts +1 -1
  118. package/src/translations.ts +1 -0
  119. package/src/types/schema.ts +1 -1
  120. package/dist/lib/browser/AutomationPanel-4QA5G3ZY.mjs +0 -11
  121. package/dist/lib/browser/app-graph-builder-6TP6ZNYG.mjs.map +0 -7
  122. package/dist/lib/browser/chunk-BDJPBZGC.mjs +0 -14
  123. package/dist/lib/browser/chunk-BDJPBZGC.mjs.map +0 -7
  124. package/dist/lib/browser/chunk-EAQL33PI.mjs.map +0 -7
  125. package/dist/lib/browser/chunk-F4K5EMWL.mjs.map +0 -7
  126. package/dist/lib/browser/chunk-IN2YC7NY.mjs.map +0 -7
  127. package/dist/lib/browser/chunk-LNMCGQC2.mjs.map +0 -7
  128. package/dist/lib/browser/chunk-M2WQCY2T.mjs.map +0 -7
  129. package/dist/lib/browser/chunk-WWURMV25.mjs +0 -13
  130. package/dist/lib/browser/chunk-WWURMV25.mjs.map +0 -7
  131. package/dist/lib/browser/chunk-ZTXBAXUT.mjs.map +0 -7
  132. package/dist/lib/browser/compute-runtime-OFQPXD5I.mjs.map +0 -7
  133. package/dist/lib/browser/intent-resolver-JXVWRAAH.mjs.map +0 -7
  134. package/dist/lib/browser/react-surface-NG3MJCDH.mjs.map +0 -7
  135. package/dist/lib/node-esm/app-graph-builder-3A2NIPR5.mjs.map +0 -7
  136. package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +0 -7
  137. package/dist/lib/node-esm/chunk-B6O6UBS7.mjs.map +0 -7
  138. package/dist/lib/node-esm/chunk-CEWZ2CDM.mjs.map +0 -7
  139. package/dist/lib/node-esm/chunk-DSEZPWSO.mjs.map +0 -7
  140. package/dist/lib/node-esm/chunk-MN5S5J4O.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-N7NES6SZ.mjs.map +0 -7
  142. package/dist/lib/node-esm/chunk-PBULJE4B.mjs.map +0 -7
  143. package/dist/lib/node-esm/chunk-UTZIMYCX.mjs +0 -16
  144. package/dist/lib/node-esm/chunk-UTZIMYCX.mjs.map +0 -7
  145. package/dist/lib/node-esm/compute-runtime-W5UJNSQY.mjs.map +0 -7
  146. package/dist/lib/node-esm/intent-resolver-ROEBZXSS.mjs.map +0 -7
  147. package/dist/lib/node-esm/react-surface-A4KTYX6Z.mjs.map +0 -7
  148. /package/dist/lib/browser/{AutomationPanel-4QA5G3ZY.mjs.map → AutomationPanel-LBXJDM6Z.mjs.map} +0 -0
  149. /package/dist/lib/browser/{FunctionsContainer-BQ6VBDIG.mjs.map → FunctionsContainer-IZTCGNJZ.mjs.map} +0 -0
  150. /package/dist/lib/browser/{FunctionsPanel-QBTOFFNU.mjs.map → FunctionsPanel-HFCK3JRB.mjs.map} +0 -0
  151. /package/dist/lib/browser/{chunk-U66KBK53.mjs.map → chunk-XXZNGORC.mjs.map} +0 -0
  152. /package/dist/lib/node-esm/{AutomationPanel-WMVR3IST.mjs.map → AutomationPanel-NVEIUIZP.mjs.map} +0 -0
  153. /package/dist/lib/{browser/AutomationSettings-6XLG2PCK.mjs.map → node-esm/AutomationSettings-VIIEPI2P.mjs.map} +0 -0
  154. /package/dist/lib/node-esm/{FunctionsContainer-LHUUOLA5.mjs.map → FunctionsContainer-KKRCIXGB.mjs.map} +0 -0
  155. /package/dist/lib/node-esm/{FunctionsPanel-SHTQIMDV.mjs.map → FunctionsPanel-74ELGR7P.mjs.map} +0 -0
  156. /package/dist/lib/node-esm/{chunk-2L2X4JMP.mjs.map → chunk-U5Q2NI7H.mjs.map} +0 -0
@@ -0,0 +1,11 @@
1
+ import {
2
+ AutomationPanel,
3
+ AutomationPanel_default
4
+ } from "./chunk-K5YNWESC.mjs";
5
+ import "./chunk-JW7XSPYW.mjs";
6
+ import "./chunk-LZQFZO3B.mjs";
7
+ export {
8
+ AutomationPanel,
9
+ AutomationPanel_default as default
10
+ };
11
+ //# sourceMappingURL=AutomationPanel-LBXJDM6Z.mjs.map
@@ -1,15 +1,14 @@
1
1
  import {
2
2
  useTriggerRuntimeControls
3
- } from "./chunk-M2WQCY2T.mjs";
4
- import "./chunk-BDJPBZGC.mjs";
5
- import "./chunk-ZTXBAXUT.mjs";
3
+ } from "./chunk-CVYJM6OO.mjs";
4
+ import "./chunk-GCGHLQM2.mjs";
6
5
  import {
7
6
  AutomationPanel
8
- } from "./chunk-LNMCGQC2.mjs";
9
- import "./chunk-IN2YC7NY.mjs";
7
+ } from "./chunk-K5YNWESC.mjs";
8
+ import "./chunk-JW7XSPYW.mjs";
10
9
  import {
11
10
  meta
12
- } from "./chunk-WWURMV25.mjs";
11
+ } from "./chunk-LZQFZO3B.mjs";
13
12
 
14
13
  // src/components/AutomationSettings.tsx
15
14
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
@@ -66,4 +65,4 @@ export {
66
65
  AutomationSettings,
67
66
  AutomationSettings_default as default
68
67
  };
69
- //# sourceMappingURL=AutomationSettings-6XLG2PCK.mjs.map
68
+ //# sourceMappingURL=AutomationSettings-IIEI5D2K.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/AutomationSettings.tsx", "../../../src/components/TriggerSettings.tsx"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { ControlPage, ControlSection } from '@dxos/react-ui-form';\n\nimport { meta } from '../meta';\n\nimport { AutomationPanel, type AutomationPanelProps } from './AutomationPanel';\nimport { TriggersSettings } from './TriggerSettings';\n\nexport const AutomationSettings = (props: AutomationPanelProps) => {\n const { t } = useTranslation(meta.id);\n return (\n <ControlPage>\n <ControlSection\n title={t('automation verbose label', { ns: meta.id })}\n description={t('automation description', { ns: meta.id })}\n >\n <AutomationPanel {...props} />\n <TriggersSettings space={props.space} />\n </ControlSection>\n </ControlPage>\n );\n};\n\nexport default AutomationSettings;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { ControlItemInput } from '@dxos/react-ui-form';\n\nimport { useTriggerRuntimeControls } from '../hooks';\nimport { meta } from '../meta';\n\nexport const TriggersSettings = ({ space }: { space: Space }) => {\n const { triggers, isRunning, start, stop } = useTriggerRuntimeControls(space);\n const { t } = useTranslation(meta.id);\n\n return (\n <div className='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'>\n <ControlItemInput title={t('runtime label')} description={t('runtime description')}>\n <Input.Switch classNames='justify-self-end' checked={isRunning} onCheckedChange={isRunning ? stop : start} />\n </ControlItemInput>\n </div>\n );\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,aAAaC,sBAAsB;;;;ACH5C,OAAOC,WAAW;AAGlB,SAASC,OAAOC,sBAAsB;AACtC,SAASC,wBAAwB;AAK1B,IAAMC,mBAAmB,CAAC,EAAEC,MAAK,MAAoB;;;AAC1D,UAAM,EAAEC,UAAUC,WAAWC,OAAOC,KAAI,IAAKC,0BAA0BL,KAAAA;AACvE,UAAM,EAAEM,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AAEpC,WACE,sBAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACC,kBAAAA;MAAiBC,OAAOP,EAAE,eAAA;MAAkBQ,aAAaR,EAAE,qBAAA;OAC1D,sBAAA,cAACS,MAAMC,QAAM;MAACC,YAAW;MAAmBC,SAAShB;MAAWiB,iBAAiBjB,YAAYE,OAAOD;;;;;AAI5G;;;ADVO,IAAMiB,qBAAqB,CAACC,UAAAA;;;AACjC,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,WACE,gBAAAC,OAAA,cAACC,aAAAA,MACC,gBAAAD,OAAA,cAACE,gBAAAA;MACCC,OAAOP,EAAE,4BAA4B;QAAEQ,IAAIN,KAAKC;MAAG,CAAA;MACnDM,aAAaT,EAAE,0BAA0B;QAAEQ,IAAIN,KAAKC;MAAG,CAAA;OAEvD,gBAAAC,OAAA,cAACM,iBAAoBX,KAAAA,GACrB,gBAAAK,OAAA,cAACO,kBAAAA;MAAiBC,OAAOb,MAAMa;;;;;AAIvC;AAEA,IAAA,6BAAed;",
5
+ "mappings": ";;;;;;;;;;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,aAAaC,sBAAsB;;;;ACH5C,OAAOC,WAAW;AAGlB,SAASC,OAAOC,sBAAsB;AACtC,SAASC,wBAAwB;AAK1B,IAAMC,mBAAmB,CAAC,EAAEC,MAAK,MAAoB;;;AAC1D,UAAM,EAAEC,UAAUC,WAAWC,OAAOC,KAAI,IAAKC,0BAA0BL,KAAAA;AACvE,UAAM,EAAEM,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AAEpC,WACE,sBAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACC,kBAAAA;MAAiBC,OAAOP,EAAE,eAAA;MAAkBQ,aAAaR,EAAE,qBAAA;OAC1D,sBAAA,cAACS,MAAMC,QAAM;MAACC,YAAW;MAAmBC,SAAShB;MAAWiB,iBAAiBjB,YAAYE,OAAOD;;;;;AAI5G;;;ADVO,IAAMiB,qBAAqB,CAACC,UAAAA;;;AACjC,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,WACE,gBAAAC,OAAA,cAACC,aAAAA,MACC,gBAAAD,OAAA,cAACE,gBAAAA;MACCC,OAAOP,EAAE,4BAA4B;QAAEQ,IAAIN,KAAKC;MAAG,CAAA;MACnDM,aAAaT,EAAE,0BAA0B;QAAEQ,IAAIN,KAAKC;MAAG,CAAA;OAEvD,gBAAAC,OAAA,cAACM,iBAAoBX,KAAAA,GACrB,gBAAAK,OAAA,cAACO,kBAAAA;MAAiBC,OAAOb,MAAMa;;;;;AAIvC;AAEA,IAAA,6BAAed;",
6
6
  "names": ["React", "useTranslation", "ControlPage", "ControlSection", "React", "Input", "useTranslation", "ControlItemInput", "TriggersSettings", "space", "triggers", "isRunning", "start", "stop", "useTriggerRuntimeControls", "t", "useTranslation", "meta", "id", "div", "className", "ControlItemInput", "title", "description", "Input", "Switch", "classNames", "checked", "onCheckedChange", "AutomationSettings", "props", "t", "useTranslation", "meta", "id", "React", "ControlPage", "ControlSection", "title", "ns", "description", "AutomationPanel", "TriggersSettings", "space"]
7
7
  }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  FunctionsPanel
3
- } from "./chunk-EAQL33PI.mjs";
3
+ } from "./chunk-FHSN7G4H.mjs";
4
4
  import {
5
5
  meta
6
- } from "./chunk-WWURMV25.mjs";
6
+ } from "./chunk-LZQFZO3B.mjs";
7
7
 
8
8
  // src/components/FunctionsContainer.tsx
9
9
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
@@ -33,4 +33,4 @@ export {
33
33
  FunctionsContainer,
34
34
  FunctionsContainer_default as default
35
35
  };
36
- //# sourceMappingURL=FunctionsContainer-BQ6VBDIG.mjs.map
36
+ //# sourceMappingURL=FunctionsContainer-IZTCGNJZ.mjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  FunctionsPanel,
3
3
  FunctionsPanel_default
4
- } from "./chunk-EAQL33PI.mjs";
5
- import "./chunk-WWURMV25.mjs";
4
+ } from "./chunk-FHSN7G4H.mjs";
5
+ import "./chunk-LZQFZO3B.mjs";
6
6
  export {
7
7
  FunctionsPanel,
8
8
  FunctionsPanel_default as default
9
9
  };
10
- //# sourceMappingURL=FunctionsPanel-QBTOFFNU.mjs.map
10
+ //# sourceMappingURL=FunctionsPanel-HFCK3JRB.mjs.map
@@ -1,20 +1,21 @@
1
1
  import {
2
2
  meta
3
- } from "./chunk-WWURMV25.mjs";
3
+ } from "./chunk-LZQFZO3B.mjs";
4
4
 
5
5
  // src/capabilities/app-graph-builder.ts
6
6
  import { Rx } from "@effect-rx/rx-react";
7
- import { Option, pipe } from "effect";
7
+ import * as Function from "effect/Function";
8
+ import * as Option from "effect/Option";
8
9
  import { Capabilities, contributes } from "@dxos/app-framework";
9
10
  import { Obj } from "@dxos/echo";
10
- import { ScriptType } from "@dxos/functions";
11
+ import { Script } from "@dxos/functions";
11
12
  import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
12
13
  import { createExtension } from "@dxos/plugin-graph";
13
14
  import { meta as spaceMeta } from "@dxos/plugin-space";
14
15
  var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphBuilder, [
15
16
  createExtension({
16
17
  id: `${meta.id}/space-settings-automation`,
17
- connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.type === `${spaceMeta.id}/settings` ? Option.some(node2) : Option.none()), Option.map((node2) => [
18
+ connector: (node) => Rx.make((get) => Function.pipe(get(node), Option.flatMap((node2) => node2.type === `${spaceMeta.id}/settings` ? Option.some(node2) : Option.none()), Option.map((node2) => [
18
19
  {
19
20
  id: `automation-${node2.id}`,
20
21
  type: `${meta.id}/space-settings-automation`,
@@ -33,7 +34,7 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
33
34
  }),
34
35
  createExtension({
35
36
  id: `${meta.id}/space-settings-functions`,
36
- connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.type === `${spaceMeta.id}/settings` ? Option.some(node2) : Option.none()), Option.map((node2) => [
37
+ connector: (node) => Rx.make((get) => Function.pipe(get(node), Option.flatMap((node2) => node2.type === `${spaceMeta.id}/settings` ? Option.some(node2) : Option.none()), Option.map((node2) => [
37
38
  {
38
39
  id: `functions-${node2.id}`,
39
40
  type: `${meta.id}/space-settings-functions`,
@@ -52,7 +53,7 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
52
53
  }),
53
54
  createExtension({
54
55
  id: `${meta.id}/script-companion`,
55
- connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(ScriptType, node2.data) ? Option.some(node2) : Option.none()), Option.map((node2) => [
56
+ connector: (node) => Rx.make((get) => Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(Script.Script, node2.data) ? Option.some(node2) : Option.none()), Option.map((node2) => [
56
57
  {
57
58
  id: [
58
59
  node2.id,
@@ -77,4 +78,4 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
77
78
  export {
78
79
  app_graph_builder_default as default
79
80
  };
80
- //# sourceMappingURL=app-graph-builder-6TP6ZNYG.mjs.map
81
+ //# sourceMappingURL=app-graph-builder-7VKA2GS3.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { Script } from '@dxos/functions';\nimport { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { createExtension } from '@dxos/plugin-graph';\nimport { meta as spaceMeta } from '@dxos/plugin-space';\n\nimport { meta } from '../meta';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/space-settings-automation`,\n connector: (node) =>\n Rx.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => (node.type === `${spaceMeta.id}/settings` ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: `automation-${node.id}`,\n type: `${meta.id}/space-settings-automation`,\n data: `${meta.id}/space-settings-automation`,\n properties: {\n label: ['automation panel label', { ns: meta.id }],\n icon: 'ph--lightning--regular',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${meta.id}/space-settings-functions`,\n connector: (node) =>\n Rx.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => (node.type === `${spaceMeta.id}/settings` ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: `functions-${node.id}`,\n type: `${meta.id}/space-settings-functions`,\n data: `${meta.id}/space-settings-functions`,\n properties: {\n label: ['functions panel label', { ns: meta.id }],\n icon: 'ph--function--regular',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${meta.id}/script-companion`,\n connector: (node) =>\n Rx.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => (Obj.instanceOf(Script.Script, node.data) ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: [node.id, 'automation'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'automation',\n properties: {\n label: ['script automation label', { ns: meta.id }],\n icon: 'ph--lightning--regular',\n disposition: 'hidden',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,UAAU;AACnB,YAAYC,cAAc;AAC1B,YAAYC,YAAY;AAExB,SAASC,cAAkCC,mBAAmB;AAC9D,SAASC,WAAW;AACpB,SAASC,cAAc;AACvB,SAASC,2BAA2BC,4BAA4B;AAChE,SAASC,uBAAuB;AAChC,SAASC,QAAQC,iBAAiB;AAIlC,IAAA,6BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;IACdE,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACEC,cACPD,IAAIH,IAAAA,GACGK,eAAQ,CAACL,UAAUA,MAAKM,SAAS,GAAGC,UAAUV,EAAE,cAAqBW,YAAKR,KAAAA,IAAeS,YAAI,CAAA,GAC7FC,WAAI,CAACV,UAAS;MACnB;QACEH,IAAI,cAAcG,MAAKH,EAAE;QACzBS,MAAM,GAAGR,KAAKD,EAAE;QAChBc,MAAM,GAAGb,KAAKD,EAAE;QAChBe,YAAY;UACVC,OAAO;YAAC;YAA0B;cAAEC,IAAIhB,KAAKD;YAAG;;UAChDkB,MAAM;QACR;MACF;KACD,GACMC,iBAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;EACApB,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;IACdE,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACEC,cACPD,IAAIH,IAAAA,GACGK,eAAQ,CAACL,UAAUA,MAAKM,SAAS,GAAGC,UAAUV,EAAE,cAAqBW,YAAKR,KAAAA,IAAeS,YAAI,CAAA,GAC7FC,WAAI,CAACV,UAAS;MACnB;QACEH,IAAI,aAAaG,MAAKH,EAAE;QACxBS,MAAM,GAAGR,KAAKD,EAAE;QAChBc,MAAM,GAAGb,KAAKD,EAAE;QAChBe,YAAY;UACVC,OAAO;YAAC;YAAyB;cAAEC,IAAIhB,KAAKD;YAAG;;UAC/CkB,MAAM;QACR;MACF;KACD,GACMC,iBAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;EACApB,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;IACdE,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACEC,cACPD,IAAIH,IAAAA,GACGK,eAAQ,CAACL,UAAUiB,IAAIC,WAAWC,OAAOA,QAAQnB,MAAKW,IAAI,IAAWH,YAAKR,KAAAA,IAAeS,YAAI,CAAA,GAC7FC,WAAI,CAACV,UAAS;MACnB;QACEH,IAAI;UAACG,MAAKH;UAAI;UAAcuB,KAAKC,yBAAAA;QACjCf,MAAMgB;QACNX,MAAM;QACNC,YAAY;UACVC,OAAO;YAAC;YAA2B;cAAEC,IAAIhB,KAAKD;YAAG;;UACjDkB,MAAM;UACNQ,aAAa;QACf;MACF;KACD,GACMP,iBAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;CACD;",
6
+ "names": ["Rx", "Function", "Option", "Capabilities", "contributes", "Obj", "Script", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "createExtension", "meta", "spaceMeta", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "connector", "node", "Rx", "make", "get", "pipe", "flatMap", "type", "spaceMeta", "some", "none", "map", "data", "properties", "label", "ns", "icon", "getOrElse", "Obj", "instanceOf", "Script", "join", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "disposition"]
7
+ }
@@ -1,10 +1,19 @@
1
1
  import {
2
2
  AutomationCapabilities
3
- } from "./chunk-ZTXBAXUT.mjs";
3
+ } from "./chunk-GCGHLQM2.mjs";
4
4
 
5
5
  // src/hooks/useComputeRuntimeCallback.ts
6
6
  import { useCallback } from "react";
7
7
  import { useCapability } from "@dxos/app-framework";
8
+
9
+ // src/capabilities/index.ts
10
+ import { lazy } from "@dxos/app-framework";
11
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-7VKA2GS3.mjs"));
12
+ var ComputeRuntime = lazy(() => import("./compute-runtime-PFYRMGN2.mjs"));
13
+ var IntentResolver = lazy(() => import("./intent-resolver-5HR7M7T6.mjs"));
14
+ var ReactSurface = lazy(() => import("./react-surface-WPMY3EX2.mjs"));
15
+
16
+ // src/hooks/useComputeRuntimeCallback.ts
8
17
  var useComputeRuntimeCallback = (space, fn, deps) => {
9
18
  const computeRuntime = useCapability(AutomationCapabilities.ComputeRuntime);
10
19
  const runtime = space !== void 0 ? computeRuntime.getRuntime(space.id) : void 0;
@@ -20,13 +29,13 @@ var useComputeRuntimeCallback = (space, fn, deps) => {
20
29
  };
21
30
 
22
31
  // src/hooks/useTriggerRuntimeControls.ts
23
- import { Effect } from "effect";
32
+ import * as Effect from "effect/Effect";
24
33
  import { Filter } from "@dxos/echo";
25
- import { FunctionTrigger, TriggerDispatcher } from "@dxos/functions";
34
+ import { Trigger, TriggerDispatcher } from "@dxos/functions";
26
35
  import { useQuery } from "@dxos/react-client/echo";
27
36
  import { useAsyncState } from "@dxos/react-ui";
28
37
  var useTriggerRuntimeControls = (space) => {
29
- const triggers = useQuery(space, Filter.type(FunctionTrigger));
38
+ const triggers = useQuery(space, Filter.type(Trigger.Trigger));
30
39
  const [isRunningState, setIsRunningState] = useAsyncState(useComputeRuntimeCallback(space, () => TriggerDispatcher.pipe(Effect.map((t) => t.running))));
31
40
  const start = useComputeRuntimeCallback(space, Effect.fnUntraced(function* () {
32
41
  const dispatcher = yield* TriggerDispatcher;
@@ -48,6 +57,10 @@ var useTriggerRuntimeControls = (space) => {
48
57
 
49
58
  export {
50
59
  useComputeRuntimeCallback,
51
- useTriggerRuntimeControls
60
+ useTriggerRuntimeControls,
61
+ AppGraphBuilder,
62
+ ComputeRuntime,
63
+ IntentResolver,
64
+ ReactSurface
52
65
  };
53
- //# sourceMappingURL=chunk-M2WQCY2T.mjs.map
66
+ //# sourceMappingURL=chunk-CVYJM6OO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useComputeRuntimeCallback.ts", "../../../src/capabilities/index.ts", "../../../src/hooks/useTriggerRuntimeControls.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Effect from 'effect/Effect';\nimport { useCallback } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\nimport type { Space } from '@dxos/react-client/echo';\n\nimport { AutomationCapabilities } from '../capabilities';\n\n/**\n * Create an effectful function that has access to compute services\n */\n// TODO(burdon): Factor out (figure out cross-plugin capabilities dependencies).\nexport const useComputeRuntimeCallback = <T>(\n space: Space | undefined,\n fn: () => Effect.Effect<T, any, AutomationCapabilities.ComputeServices>,\n deps?: React.DependencyList,\n): (() => Promise<T>) => {\n const computeRuntime = useCapability(AutomationCapabilities.ComputeRuntime);\n const runtime = space !== undefined ? computeRuntime.getRuntime(space.id) : undefined;\n\n return useCallback(() => {\n if (!runtime) {\n throw new TypeError('Space not provided to useComputeRuntimeCallback');\n }\n\n return runtime.runPromise(fn());\n }, [runtime, ...(deps ?? [])]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const ComputeRuntime = lazy(() => import('./compute-runtime'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Filter } from '@dxos/echo';\nimport { Trigger, TriggerDispatcher } from '@dxos/functions';\nimport { type Space, useQuery } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-ui';\n\nimport { useComputeRuntimeCallback } from './useComputeRuntimeCallback';\n\ninterface TriggerRuntimeControls {\n triggers: Trigger.Trigger[];\n isRunning: boolean;\n start: () => void;\n stop: () => void;\n}\n\nexport const useTriggerRuntimeControls = (space: Space | undefined): TriggerRuntimeControls => {\n const triggers = useQuery(space, Filter.type(Trigger.Trigger));\n\n const [isRunningState, setIsRunningState] = useAsyncState(\n useComputeRuntimeCallback(space, () => TriggerDispatcher.pipe(Effect.map((t) => t.running))),\n );\n\n const start = useComputeRuntimeCallback(\n space,\n Effect.fnUntraced(function* () {\n const dispatcher = yield* TriggerDispatcher;\n yield* dispatcher.start();\n setIsRunningState(true);\n }),\n );\n\n const stop = useComputeRuntimeCallback(\n space,\n Effect.fnUntraced(function* () {\n const dispatcher = yield* TriggerDispatcher;\n yield* dispatcher.stop();\n setIsRunningState(false);\n }),\n );\n\n return {\n triggers,\n isRunning: isRunningState ?? false,\n start: () => void start(),\n stop: () => void stop(),\n };\n};\n"],
5
+ "mappings": ";;;;;AAKA,SAASA,mBAAmB;AAE5B,SAASC,qBAAqB;;;ACH9B,SAASC,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,iBAAiBF,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMG,eAAeH,KAAK,MAAM,OAAO,8BAAA,CAAA;;;ADOvC,IAAMI,4BAA4B,CACvCC,OACAC,IACAC,SAAAA;AAEA,QAAMC,iBAAiBC,cAAcC,uBAAuBC,cAAc;AAC1E,QAAMC,UAAUP,UAAUQ,SAAYL,eAAeM,WAAWT,MAAMU,EAAE,IAAIF;AAE5E,SAAOG,YAAY,MAAA;AACjB,QAAI,CAACJ,SAAS;AACZ,YAAM,IAAIK,UAAU,iDAAA;IACtB;AAEA,WAAOL,QAAQM,WAAWZ,GAAAA,CAAAA;EAC5B,GAAG;IAACM;OAAaL,QAAQ,CAAA;GAAI;AAC/B;;;AE3BA,YAAYY,YAAY;AAExB,SAASC,cAAc;AACvB,SAASC,SAASC,yBAAyB;AAC3C,SAAqBC,gBAAgB;AACrC,SAASC,qBAAqB;AAWvB,IAAMC,4BAA4B,CAACC,UAAAA;AACxC,QAAMC,WAAWC,SAASF,OAAOG,OAAOC,KAAKC,QAAQA,OAAO,CAAA;AAE5D,QAAM,CAACC,gBAAgBC,iBAAAA,IAAqBC,cAC1CC,0BAA0BT,OAAO,MAAMU,kBAAkBC,KAAYC,WAAI,CAACC,MAAMA,EAAEC,OAAO,CAAA,CAAA,CAAA;AAG3F,QAAMC,QAAQN,0BACZT,OACOgB,kBAAW,aAAA;AAChB,UAAMC,aAAa,OAAOP;AAC1B,WAAOO,WAAWF,MAAK;AACvBR,sBAAkB,IAAA;EACpB,CAAA,CAAA;AAGF,QAAMW,OAAOT,0BACXT,OACOgB,kBAAW,aAAA;AAChB,UAAMC,aAAa,OAAOP;AAC1B,WAAOO,WAAWC,KAAI;AACtBX,sBAAkB,KAAA;EACpB,CAAA,CAAA;AAGF,SAAO;IACLN;IACAkB,WAAWb,kBAAkB;IAC7BS,OAAO,MAAM,KAAKA,MAAAA;IAClBG,MAAM,MAAM,KAAKA,KAAAA;EACnB;AACF;",
6
+ "names": ["useCallback", "useCapability", "lazy", "AppGraphBuilder", "lazy", "ComputeRuntime", "IntentResolver", "ReactSurface", "useComputeRuntimeCallback", "space", "fn", "deps", "computeRuntime", "useCapability", "AutomationCapabilities", "ComputeRuntime", "runtime", "undefined", "getRuntime", "id", "useCallback", "TypeError", "runPromise", "Effect", "Filter", "Trigger", "TriggerDispatcher", "useQuery", "useAsyncState", "useTriggerRuntimeControls", "space", "triggers", "useQuery", "Filter", "type", "Trigger", "isRunningState", "setIsRunningState", "useAsyncState", "useComputeRuntimeCallback", "TriggerDispatcher", "pipe", "map", "t", "running", "start", "fnUntraced", "dispatcher", "stop", "isRunning"]
7
+ }
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  meta
3
- } from "./chunk-WWURMV25.mjs";
3
+ } from "./chunk-LZQFZO3B.mjs";
4
4
 
5
5
  // src/components/FunctionsPanel/FunctionsPanel.tsx
6
6
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
7
- import { Schema } from "effect";
7
+ import * as Schema from "effect/Schema";
8
8
  import React, { useCallback, useMemo } from "react";
9
9
  import { LayoutAction, createIntent, useIntentDispatcher } from "@dxos/app-framework";
10
- import { FunctionType, ScriptType } from "@dxos/functions";
10
+ import { Function, Script } from "@dxos/functions";
11
+ import { SpaceAction } from "@dxos/plugin-space/types";
11
12
  import { Filter, fullyQualifiedId, useQuery } from "@dxos/react-client/echo";
12
- import { Button, useTranslation } from "@dxos/react-ui";
13
+ import { Button, IconButton, useTranslation } from "@dxos/react-ui";
13
14
  import { controlItemClasses } from "@dxos/react-ui-form";
14
15
  import { List } from "@dxos/react-ui-list";
15
16
  import { ghostHover, mx } from "@dxos/react-ui-theme";
@@ -18,8 +19,8 @@ var FunctionsPanel = ({ space }) => {
18
19
  var _effect = _useSignals();
19
20
  try {
20
21
  const { t } = useTranslation(meta.id);
21
- const functions = useQuery(space, Filter.type(FunctionType));
22
- const scripts = useQuery(space, Filter.type(ScriptType));
22
+ const functions = useQuery(space, Filter.type(Function.Function));
23
+ const scripts = useQuery(space, Filter.type(Script.Script));
23
24
  const { dispatchPromise: dispatch } = useIntentDispatcher();
24
25
  const functionToScriptMap = useMemo(() => functions.reduce((map, func) => {
25
26
  const scriptId = func.source?.target?.id;
@@ -54,12 +55,19 @@ var FunctionsPanel = ({ space }) => {
54
55
  functionToScriptMap,
55
56
  dispatch
56
57
  ]);
58
+ const handleDelete = useCallback((func) => dispatch(createIntent(SpaceAction.RemoveObjects, {
59
+ objects: [
60
+ func
61
+ ]
62
+ })), [
63
+ dispatch
64
+ ]);
57
65
  return /* @__PURE__ */ React.createElement("div", {
58
66
  role: "none",
59
67
  className: mx(controlItemClasses)
60
68
  }, functions.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
61
69
  items: functions,
62
- isItem: Schema.is(FunctionType),
70
+ isItem: Schema.is(Function.Function),
63
71
  getId: (func) => func.id
64
72
  }, ({ items }) => /* @__PURE__ */ React.createElement("div", {
65
73
  role: "list",
@@ -76,7 +84,12 @@ var FunctionsPanel = ({ space }) => {
76
84
  className: "text-xs text-description truncate"
77
85
  }, getScriptName(func))), functionToScriptMap[func.id] && /* @__PURE__ */ React.createElement(Button, {
78
86
  onClick: () => handleGoToScript(func)
79
- }, t("go to function source button label")))))), functions.length === 0 && /* @__PURE__ */ React.createElement("div", {
87
+ }, t("go to function source button label")), /* @__PURE__ */ React.createElement(IconButton, {
88
+ iconOnly: true,
89
+ icon: "ph--trash--regular",
90
+ label: t("delete function button label"),
91
+ onClick: () => handleDelete(func)
92
+ }))))), functions.length === 0 && /* @__PURE__ */ React.createElement("div", {
80
93
  className: "text-center plb-4 text-gray-500"
81
94
  }, t("no functions found")));
82
95
  } finally {
@@ -91,4 +104,4 @@ export {
91
104
  FunctionsPanel,
92
105
  FunctionsPanel_default
93
106
  };
94
- //# sourceMappingURL=chunk-EAQL33PI.mjs.map
107
+ //# sourceMappingURL=chunk-FHSN7G4H.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/FunctionsPanel/FunctionsPanel.tsx", "../../../src/components/FunctionsPanel/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Function, Script } from '@dxos/functions';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Filter, type Space, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';\nimport { Button, IconButton, useTranslation } from '@dxos/react-ui';\nimport { controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nconst grid = 'grid grid-cols-[1fr_auto] min-bs-[2.5rem]';\n\nexport type FunctionsPanelProps = {\n space: Space;\n};\n\nexport const FunctionsPanel = ({ space }: FunctionsPanelProps) => {\n const { t } = useTranslation(meta.id);\n const functions = useQuery(space, Filter.type(Function.Function));\n const scripts = useQuery(space, Filter.type(Script.Script));\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const functionToScriptMap = useMemo(\n () =>\n functions.reduce(\n (map, func) => {\n const scriptId = func.source?.target?.id;\n if (scriptId) {\n const script = scripts.find((s) => s.id === scriptId);\n if (script) {\n map[func.id] = script;\n }\n }\n return map;\n },\n {} as Record<string, Script.Script>,\n ),\n [functions, scripts],\n );\n\n const getScriptName = useCallback(\n (func: Function.Function) => {\n const script = functionToScriptMap[func.id];\n return script?.name;\n },\n [functionToScriptMap],\n );\n\n const handleGoToScript = useCallback(\n (func: Function.Function) => {\n const script = functionToScriptMap[func.id];\n if (script) {\n void dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [fullyQualifiedId(script)] }));\n }\n },\n [functionToScriptMap, dispatch],\n );\n\n const handleDelete = useCallback(\n (func: Function.Function) => dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [func] })),\n [dispatch],\n );\n\n return (\n <div role='none' className={mx(controlItemClasses)}>\n {functions.length > 0 && (\n <List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>\n {({ items }) => (\n <div role='list' className='flex flex-col w-full'>\n {items?.map((func) => (\n <List.Item<Function.Function>\n key={func.id}\n item={func}\n classNames={mx(grid, ghostHover, 'items-center', 'pli-2', 'min-bs-[3rem]')}\n >\n <div className='flex flex-col truncate'>\n <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>\n {getScriptName(func) && (\n <div className='text-xs text-description truncate'>{getScriptName(func)}</div>\n )}\n </div>\n {functionToScriptMap[func.id] && (\n <Button onClick={() => handleGoToScript(func)}>{t('go to function source button label')}</Button>\n )}\n <IconButton\n iconOnly\n icon='ph--trash--regular'\n label={t('delete function button label')}\n onClick={() => handleDelete(func)}\n />\n </List.Item>\n ))}\n </div>\n )}\n </List.Root>\n )}\n\n {functions.length === 0 && <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FunctionsPanel } from './FunctionsPanel';\n\nexport * from './FunctionsPanel';\nexport default FunctionsPanel;\n"],
5
+ "mappings": "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",
6
+ "names": ["Schema", "React", "useCallback", "useMemo", "LayoutAction", "createIntent", "useIntentDispatcher", "Function", "Script", "SpaceAction", "Filter", "fullyQualifiedId", "useQuery", "Button", "IconButton", "useTranslation", "controlItemClasses", "List", "ghostHover", "mx", "grid", "FunctionsPanel", "space", "t", "useTranslation", "meta", "id", "functions", "useQuery", "Filter", "type", "Function", "scripts", "Script", "dispatchPromise", "dispatch", "useIntentDispatcher", "functionToScriptMap", "useMemo", "reduce", "map", "func", "scriptId", "source", "target", "script", "find", "s", "getScriptName", "useCallback", "name", "handleGoToScript", "createIntent", "LayoutAction", "Open", "part", "subject", "fullyQualifiedId", "handleDelete", "SpaceAction", "RemoveObjects", "objects", "div", "role", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "Item", "key", "item", "classNames", "ghostHover", "ItemTitle", "Button", "onClick", "IconButton", "iconOnly", "icon", "label", "FunctionsPanel"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  meta
3
- } from "./chunk-WWURMV25.mjs";
3
+ } from "./chunk-LZQFZO3B.mjs";
4
4
 
5
5
  // src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
@@ -12,4 +12,4 @@ var AutomationCapabilities;
12
12
  export {
13
13
  AutomationCapabilities
14
14
  };
15
- //# sourceMappingURL=chunk-ZTXBAXUT.mjs.map
15
+ //# sourceMappingURL=chunk-GCGHLQM2.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/capabilities.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { type AiService, type ToolExecutionService, type ToolResolverService } from '@dxos/ai';\nimport { defineCapability } from '@dxos/app-framework';\nimport type {\n CredentialsService,\n DatabaseService,\n FunctionInvocationService,\n InvocationTracer,\n QueueService,\n TriggerDispatcher,\n TriggerStateStore,\n} from '@dxos/functions';\nimport type { SpaceId } from '@dxos/keys';\n\nimport { meta } from '../meta';\n\nexport namespace AutomationCapabilities {\n /**\n * Service stack for executing agents, functions, and triggers.\n */\n export type ComputeServices =\n | TriggerDispatcher\n | AiService.AiService\n | DatabaseService\n | QueueService\n | CredentialsService\n | FunctionInvocationService\n | InvocationTracer\n | TriggerStateStore\n // TODO(dmaretskyi): Those should be provided at AI-chat call site.\n | ToolResolverService\n | ToolExecutionService;\n\n export type ComputeRuntime = ManagedRuntime.ManagedRuntime<AutomationCapabilities.ComputeServices, never>;\n export interface ComputeRuntimeProvider {\n getRuntime(spaceId: SpaceId): ComputeRuntime;\n }\n\n /**\n * Runtime for executing agents, functions, and triggers.\n */\n export const ComputeRuntime = defineCapability<ComputeRuntimeProvider>(`${meta.id}/capability/compute-runtime`);\n}\n"],
5
+ "mappings": ";;;;;AAOA,SAASA,wBAAwB;UAchBC,yBAAAA;0BAyBFC,iBAAiBC,iBAAyC,GAAGC,KAAKC,EAAE,6BAA6B;AAChH,GA1BiBJ,2BAAAA,yBAAAA,CAAAA,EAAAA;;",
6
+ "names": ["defineCapability", "AutomationCapabilities", "ComputeRuntime", "defineCapability", "meta", "id"]
7
+ }
@@ -1,15 +1,17 @@
1
1
  import {
2
2
  meta
3
- } from "./chunk-WWURMV25.mjs";
3
+ } from "./chunk-LZQFZO3B.mjs";
4
4
 
5
5
  // src/components/TriggerEditor/TriggerEditor.tsx
6
6
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
7
7
  import React3, { useCallback as useCallback3, useMemo as useMemo3 } from "react";
8
8
  import { ComputeGraph } from "@dxos/conductor";
9
9
  import { Type as Type2 } from "@dxos/echo";
10
- import { FunctionTrigger, FunctionType, ScriptType } from "@dxos/functions";
11
- import { Filter, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
12
- import { Form as Form2, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
10
+ import { Function, Script, Trigger as Trigger2 } from "@dxos/functions";
11
+ import { Filter as Filter2, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
12
+ import { Input } from "@dxos/react-ui";
13
+ import { QueryForm } from "@dxos/react-ui-components";
14
+ import { Form as Form2, InputHeader, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
13
15
 
14
16
  // src/components/TriggerEditor/FunctionInputEditor.tsx
15
17
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
@@ -37,7 +39,12 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
37
39
  useOnTransition(
38
40
  // Clear function parameter input when the function changes.
39
41
  selectedFunctionValue,
40
- (prevValue) => prevValue !== void 0 && prevValue !== selectedFunctionValue,
42
+ (prevValue) => {
43
+ if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {
44
+ return false;
45
+ }
46
+ return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();
47
+ },
41
48
  (currValue) => currValue !== void 0,
42
49
  () => onValueChange("object", {})
43
50
  );
@@ -76,7 +83,8 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
76
83
  // src/components/TriggerEditor/SpecSelector.tsx
77
84
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
78
85
  import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
79
- import { TriggerKinds } from "@dxos/functions";
86
+ import { Filter, Query } from "@dxos/echo";
87
+ import { Trigger } from "@dxos/functions";
80
88
  import { useTranslation } from "@dxos/react-ui";
81
89
  import { SelectInput, useInputProps } from "@dxos/react-ui-form";
82
90
  var SpecSelector = (props) => {
@@ -97,12 +105,14 @@ var SpecSelector = (props) => {
97
105
  case "subscription":
98
106
  return {
99
107
  kind: "subscription",
100
- filter: {}
108
+ query: {
109
+ ast: Query.select(Filter.nothing()).ast
110
+ }
101
111
  };
102
112
  case "queue":
103
113
  return {
104
114
  kind: "queue",
105
- queue: ""
115
+ queue: "dxn:"
106
116
  };
107
117
  case "email":
108
118
  return {
@@ -124,7 +134,7 @@ var SpecSelector = (props) => {
124
134
  }, [
125
135
  specProps
126
136
  ]);
127
- const options = useMemo2(() => TriggerKinds.map((kind) => ({
137
+ const options = useMemo2(() => Trigger.Kinds.map((kind) => ({
128
138
  value: kind,
129
139
  label: t(`trigger type ${kind}`)
130
140
  })), [
@@ -141,20 +151,26 @@ var SpecSelector = (props) => {
141
151
  };
142
152
 
143
153
  // src/components/TriggerEditor/TriggerEditor.tsx
144
- var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
154
+ var TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCancel }) => {
145
155
  var _effect = _useSignals3();
146
156
  try {
147
- const handleSave = (values) => {
157
+ const handleSave = ({ id: _, ...values }) => {
148
158
  onSave?.(values);
149
159
  };
150
160
  const handleRefQueryLookup = useRefQueryLookupHandler({
151
161
  space
152
162
  });
153
- const Custom = useCustomInputs(space, handleRefQueryLookup);
163
+ const Custom = useCustomInputs({
164
+ space,
165
+ readonlySpec,
166
+ types,
167
+ tags,
168
+ onQueryRefOptions: handleRefQueryLookup
169
+ });
154
170
  return /* @__PURE__ */ React3.createElement(Form2, {
155
171
  outerSpacing: false,
156
172
  Custom,
157
- schema: FunctionTrigger,
173
+ schema: Trigger2.Trigger,
158
174
  values: trigger,
159
175
  onSave: handleSave,
160
176
  onCancel,
@@ -164,10 +180,10 @@ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
164
180
  _effect.f();
165
181
  }
166
182
  };
167
- var useCustomInputs = (space, onQueryRefOptions) => {
168
- const functions = useQuery(space, Filter.type(FunctionType));
169
- const workflows = useQuery(space, Filter.type(ComputeGraph));
170
- const scripts = useQuery(space, Filter.type(ScriptType));
183
+ var useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }) => {
184
+ const functions = useQuery(space, Filter2.type(Function.Function));
185
+ const workflows = useQuery(space, Filter2.type(ComputeGraph));
186
+ const scripts = useQuery(space, Filter2.type(Script.Script));
171
187
  return useMemo3(() => ({
172
188
  // Function selector.
173
189
  ["function"]: (props) => {
@@ -197,7 +213,27 @@ var useCustomInputs = (space, onQueryRefOptions) => {
197
213
  });
198
214
  },
199
215
  // Spec selector.
200
- ["spec.kind"]: SpecSelector,
216
+ ["spec.kind"]: (props) => /* @__PURE__ */ React3.createElement(SpecSelector, {
217
+ ...props,
218
+ readonly: readonlySpec ? "disabled-input" : false
219
+ }),
220
+ // TODO(wittjosiah): Copied from ViewEditor.
221
+ // Query input editor.
222
+ ["spec.query"]: (props) => {
223
+ const handleChange = useCallback3((query) => props.onValueChange("object", {
224
+ ast: query.ast
225
+ }), [
226
+ props.onValueChange
227
+ ]);
228
+ return /* @__PURE__ */ React3.createElement(Input.Root, null, /* @__PURE__ */ React3.createElement(InputHeader, {
229
+ label: props.label
230
+ }), /* @__PURE__ */ React3.createElement(QueryForm, {
231
+ initialQuery: props.getValue().ast,
232
+ types,
233
+ tags,
234
+ onChange: handleChange
235
+ }));
236
+ },
201
237
  // Function input editor.
202
238
  ["input"]: (props) => /* @__PURE__ */ React3.createElement(FunctionInputEditor, {
203
239
  ...props,
@@ -207,7 +243,8 @@ var useCustomInputs = (space, onQueryRefOptions) => {
207
243
  }), [
208
244
  workflows,
209
245
  scripts,
210
- functions
246
+ functions,
247
+ readonlySpec
211
248
  ]);
212
249
  };
213
250
  var getWorkflowOptions = (graphs) => {
@@ -227,4 +264,4 @@ var getFunctionOptions = (scripts, functions) => {
227
264
  export {
228
265
  TriggerEditor
229
266
  };
230
- //# sourceMappingURL=chunk-IN2YC7NY.mjs.map
267
+ //# sourceMappingURL=chunk-JW7XSPYW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/TriggerEditor/TriggerEditor.tsx", "../../../src/components/TriggerEditor/FunctionInputEditor.tsx", "../../../src/components/TriggerEditor/SpecSelector.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport { type Query, Type } from '@dxos/echo';\nimport { Function, Script, Trigger } from '@dxos/functions';\nimport { Filter, Ref, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Input } from '@dxos/react-ui';\nimport { QueryForm, type QueryFormProps } from '@dxos/react-ui-components';\nimport { type CustomInputMap, Form, InputHeader, SelectInput, useRefQueryLookupHandler } from '@dxos/react-ui-form';\n\nimport { FunctionInputEditor, type FunctionInputEditorProps } from './FunctionInputEditor';\nimport { SpecSelector } from './SpecSelector';\n\nexport type TriggerEditorProps = {\n space: Space;\n trigger: Trigger.Trigger;\n // TODO(wittjosiah): This needs to apply to whole spec but currently only applies to spec.kind & spec.query.\n readonlySpec?: boolean;\n onSave?: (trigger: Omit<Trigger.Trigger, 'id'>) => void;\n onCancel?: () => void;\n} & Pick<QueryFormProps, 'types' | 'tags'>;\n\nexport const TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCancel }: TriggerEditorProps) => {\n const handleSave = ({ id: _, ...values }: Trigger.Trigger) => {\n onSave?.(values);\n };\n\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n const Custom = useCustomInputs({ space, readonlySpec, types, tags, onQueryRefOptions: handleRefQueryLookup });\n\n return (\n <Form\n outerSpacing={false}\n Custom={Custom}\n schema={Trigger.Trigger}\n values={trigger}\n onSave={handleSave}\n onCancel={onCancel}\n onQueryRefOptions={handleRefQueryLookup}\n />\n );\n};\n\ntype UseCustomInputsProps = {\n space: Space;\n readonlySpec?: boolean;\n onQueryRefOptions: FunctionInputEditorProps['onQueryRefOptions'];\n} & Pick<QueryFormProps, 'types' | 'tags'>;\n\nconst useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }: UseCustomInputsProps) => {\n const functions = useQuery(space, Filter.type(Function.Function));\n const workflows = useQuery(space, Filter.type(ComputeGraph));\n const scripts = useQuery(space, Filter.type(Script.Script));\n\n return useMemo(\n (): CustomInputMap => ({\n // Function selector.\n ['function' satisfies keyof Trigger.Trigger]: (props) => {\n const getValue = useCallback(() => {\n const formValue = props.getValue();\n if (Ref.isRef(formValue)) {\n return formValue.dxn.toString() as string;\n }\n return undefined;\n }, [props]);\n\n const handleOnValueChange = useCallback(\n (_type: any, dxnString: string) => {\n const dxn = Type.DXN.parse(dxnString);\n if (dxn) {\n const ref = Ref.fromDXN(dxn);\n props.onValueChange('object', ref);\n }\n },\n [props.onValueChange],\n );\n\n return (\n <SelectInput\n {...props}\n getValue={getValue as any}\n onValueChange={handleOnValueChange}\n options={getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))}\n />\n );\n },\n\n // Spec selector.\n ['spec.kind' as const]: (props) => <SpecSelector {...props} readonly={readonlySpec ? 'disabled-input' : false} />,\n\n // TODO(wittjosiah): Copied from ViewEditor.\n // Query input editor.\n ['spec.query' as const]: (props) => {\n const handleChange = useCallback(\n (query: Query.Any) => props.onValueChange('object', { ast: query.ast }),\n [props.onValueChange],\n );\n\n return (\n <Input.Root>\n <InputHeader label={props.label} />\n <QueryForm initialQuery={(props.getValue() as any).ast} types={types} tags={tags} onChange={handleChange} />\n </Input.Root>\n );\n },\n\n // Function input editor.\n ['input' as const]: (props) => (\n <FunctionInputEditor {...props} functions={functions} onQueryRefOptions={onQueryRefOptions} />\n ),\n }),\n [workflows, scripts, functions, readonlySpec],\n );\n};\n\nconst getWorkflowOptions = (graphs: ComputeGraph[]) => {\n return graphs.map((graph) => ({ label: `compute-${graph.id}`, value: `dxn:echo:@:${graph.id}` }));\n};\n\nconst getFunctionOptions = (scripts: Script.Script[], functions: Function.Function[]) => {\n const getLabel = (fn: Function.Function) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;\n return functions.map((fn) => ({ label: getLabel(fn), value: `dxn:echo:@:${fn.id}` }));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Ref, Type } from '@dxos/echo';\nimport { type JsonPath } from '@dxos/echo/internal';\nimport { type Function } from '@dxos/functions';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { Form, type FormInputStateProps, type QueryRefOptions, useFormValues } from '@dxos/react-ui-form';\n\nexport type FunctionInputEditorProps = {\n functions: Function.Function[];\n onQueryRefOptions: QueryRefOptions;\n} & FormInputStateProps;\n\n/**\n * Editor component for function input parameters.\n */\nexport const FunctionInputEditor = ({\n functions,\n getValue,\n onValueChange,\n onQueryRefOptions,\n}: FunctionInputEditorProps) => {\n const selectedFunctionValue = useFormValues(['function' as JsonPath]);\n const selectedFunctionId = useMemo(() => {\n if (Ref.isRef(selectedFunctionValue)) {\n return selectedFunctionValue.dxn.toString().split('dxn:echo:@:').at(1);\n }\n }, [selectedFunctionValue]);\n\n const selectedFunction = useMemo(\n () => functions.find((fn) => fn.id === selectedFunctionId),\n [functions, selectedFunctionId],\n );\n\n useOnTransition(\n // Clear function parameter input when the function changes.\n selectedFunctionValue,\n (prevValue) => {\n if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {\n return false;\n }\n\n return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();\n },\n (currValue) => currValue !== undefined,\n () => onValueChange('object', {}),\n );\n\n const inputSchema = useMemo(() => selectedFunction?.inputSchema, [selectedFunction]);\n const effectSchema = useMemo(() => (inputSchema ? Type.toEffectSchema(inputSchema) : undefined), [inputSchema]);\n const propertyCount = inputSchema?.properties ? Object.keys(inputSchema.properties).length : 0;\n\n const values = useMemo(() => getValue() ?? {}, [getValue]);\n\n const handleValuesChanged = useCallback(\n (values: any) => {\n onValueChange('object', values);\n },\n [onValueChange],\n );\n\n if (selectedFunction === undefined || effectSchema === undefined || propertyCount === 0) {\n return null;\n }\n\n return (\n <>\n <h3 className='text-md'>Function parameters</h3>\n {/* TODO(ZaymonFC): Try using <FormFields /> internal component for this nesting.\n This would allow errors to flow up to the root context. */}\n <Form\n schema={effectSchema}\n values={values}\n onValuesChanged={handleValuesChanged}\n onQueryRefOptions={onQueryRefOptions}\n outerSpacing={false}\n />\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Filter, Query } from '@dxos/echo';\nimport { Trigger } from '@dxos/functions';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type InputProps, SelectInput, useInputProps } from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\n\nexport type SpecSelectorProps = InputProps;\n\nexport const SpecSelector = (props: SpecSelectorProps) => {\n const { t } = useTranslation(meta.id);\n const specProps = useInputProps(['spec' satisfies keyof Trigger.Trigger]);\n\n const handleTypeChange = useCallback(\n (_type: any, value: string): Trigger.Spec | undefined => {\n const getDefaultTriggerSpec = (kind: string) => {\n switch (kind) {\n case 'timer':\n return { kind: 'timer', cron: '' };\n case 'subscription':\n return {\n kind: 'subscription',\n query: {\n ast: Query.select(Filter.nothing()).ast,\n },\n };\n case 'queue':\n return { kind: 'queue', queue: 'dxn:' };\n case 'email':\n return { kind: 'email' };\n case 'webhook':\n return { kind: 'webhook' };\n default:\n return undefined;\n }\n };\n\n const defaultSpec = getDefaultTriggerSpec(value);\n if (!defaultSpec) {\n return;\n }\n\n // Update the entire spec object, not just the `spec.kind`.\n specProps.onValueChange('object', defaultSpec);\n },\n [specProps],\n );\n\n const options = useMemo(\n () =>\n Trigger.Kinds.map((kind) => ({\n value: kind,\n label: t(`trigger type ${kind}`),\n })),\n [t],\n );\n\n return <SelectInput {...props} options={options} onValueChange={handleTypeChange} />;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useCallback", "useMemo", "ComputeGraph", "Type", "Function", "Script", "Trigger", "Filter", "Ref", "useQuery", "Input", "QueryForm", "Form", "InputHeader", "SelectInput", "useRefQueryLookupHandler", "React", "useCallback", "useMemo", "Ref", "Type", "useOnTransition", "Form", "useFormValues", "FunctionInputEditor", "functions", "getValue", "onValueChange", "onQueryRefOptions", "selectedFunctionValue", "useFormValues", "selectedFunctionId", "useMemo", "Ref", "isRef", "dxn", "toString", "split", "at", "selectedFunction", "find", "fn", "id", "useOnTransition", "prevValue", "currValue", "undefined", "inputSchema", "effectSchema", "Type", "toEffectSchema", "propertyCount", "properties", "Object", "keys", "length", "values", "handleValuesChanged", "useCallback", "h3", "className", "Form", "schema", "onValuesChanged", "outerSpacing", "React", "useCallback", "useMemo", "Filter", "Query", "Trigger", "useTranslation", "SelectInput", "useInputProps", "SpecSelector", "props", "t", "useTranslation", "meta", "id", "specProps", "useInputProps", "handleTypeChange", "useCallback", "_type", "value", "getDefaultTriggerSpec", "kind", "cron", "query", "ast", "Query", "select", "Filter", "nothing", "queue", "undefined", "defaultSpec", "onValueChange", "options", "useMemo", "Trigger", "Kinds", "map", "label", "React", "SelectInput", "TriggerEditor", "space", "trigger", "readonlySpec", "types", "tags", "onSave", "onCancel", "handleSave", "id", "_", "values", "handleRefQueryLookup", "useRefQueryLookupHandler", "Custom", "useCustomInputs", "onQueryRefOptions", "React", "Form", "outerSpacing", "schema", "Trigger", "functions", "useQuery", "Filter", "type", "Function", "workflows", "ComputeGraph", "scripts", "Script", "useMemo", "props", "getValue", "useCallback", "formValue", "Ref", "isRef", "dxn", "toString", "undefined", "handleOnValueChange", "_type", "dxnString", "Type", "DXN", "parse", "ref", "fromDXN", "onValueChange", "SelectInput", "options", "getWorkflowOptions", "concat", "getFunctionOptions", "SpecSelector", "readonly", "handleChange", "query", "ast", "Input", "Root", "InputHeader", "label", "QueryForm", "initialQuery", "onChange", "FunctionInputEditor", "graphs", "map", "graph", "value", "getLabel", "fn", "find", "s", "source", "target", "name"]
7
+ }