@dxos/plugin-automation 0.8.4-main.406dc2a → 0.8.4-main.548089c

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 (157) hide show
  1. package/dist/lib/browser/AutomationPanel-W6K45EP4.mjs +11 -0
  2. package/dist/lib/browser/{AutomationSettings-3EYSPFKB.mjs → AutomationSettings-YGXYZZEU.mjs} +6 -7
  3. package/dist/lib/{node-esm/AutomationSettings-WKSMWITV.mjs.map → browser/AutomationSettings-YGXYZZEU.mjs.map} +1 -1
  4. package/dist/lib/browser/FunctionsContainer-JIFRD7DW.mjs +151 -0
  5. package/dist/lib/browser/FunctionsContainer-JIFRD7DW.mjs.map +7 -0
  6. package/dist/lib/browser/{FunctionsPanel-NRIKAPQV.mjs → FunctionsPanel-CRW6SJUN.mjs} +3 -3
  7. package/dist/lib/browser/{app-graph-builder-DV5HMFX4.mjs → app-graph-builder-W7LLC6XW.mjs} +7 -7
  8. package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-VL3KSDVL.mjs → chunk-DLZNSNOV.mjs} +18 -17
  10. package/dist/lib/browser/chunk-DLZNSNOV.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-DK7BLEKU.mjs → chunk-HUHVG4BU.mjs} +5 -5
  12. package/dist/lib/browser/{chunk-SUKAEYF3.mjs → chunk-JW7XSPYW.mjs} +8 -8
  13. package/dist/lib/browser/chunk-JW7XSPYW.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-LZQFZO3B.mjs +17 -0
  15. package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-MVPRI3DB.mjs → chunk-RYEK6OMM.mjs} +20 -6
  17. package/dist/lib/browser/chunk-RYEK6OMM.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-DLLE4FKP.mjs → chunk-TWWFNOIR.mjs} +27 -12
  19. package/dist/lib/browser/chunk-TWWFNOIR.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-5ARH77PV.mjs → chunk-XAKZ4ANY.mjs} +2 -2
  21. package/dist/lib/browser/chunk-XAKZ4ANY.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-VGBZKM3O.mjs → chunk-YBPJCY3F.mjs} +2 -2
  23. package/dist/lib/browser/compute-runtime-EIQTHJFZ.mjs +113 -0
  24. package/dist/lib/browser/compute-runtime-EIQTHJFZ.mjs.map +7 -0
  25. package/dist/lib/browser/hooks/index.mjs +3 -4
  26. package/dist/lib/browser/index.mjs +17 -10
  27. package/dist/lib/browser/index.mjs.map +3 -3
  28. package/dist/lib/browser/{intent-resolver-D2OHKQRR.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-G7CG7BML.mjs → react-surface-LXPASRXE.mjs} +6 -5
  32. package/dist/lib/browser/react-surface-LXPASRXE.mjs.map +7 -0
  33. package/dist/lib/browser/types/index.mjs +2 -2
  34. package/dist/lib/node-esm/{AutomationPanel-EETYIR35.mjs → AutomationPanel-NI6EHUWH.mjs} +4 -4
  35. package/dist/lib/node-esm/{AutomationSettings-WKSMWITV.mjs → AutomationSettings-3BAIEDRA.mjs} +6 -7
  36. package/dist/lib/node-esm/FunctionsContainer-MK76KBEW.mjs +152 -0
  37. package/dist/lib/node-esm/FunctionsContainer-MK76KBEW.mjs.map +7 -0
  38. package/dist/lib/node-esm/{FunctionsPanel-SAMRTELO.mjs → FunctionsPanel-RVVCS6VH.mjs} +3 -3
  39. package/dist/lib/node-esm/{app-graph-builder-TR2WXPX2.mjs → app-graph-builder-SLQOO7GH.mjs} +7 -7
  40. package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs.map +7 -0
  41. package/dist/lib/node-esm/{chunk-5MQJPJR2.mjs → chunk-CEVIVRTY.mjs} +6 -2
  42. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-B7N3H45O.mjs → chunk-CPJ33QGN.mjs} +5 -5
  44. package/dist/lib/node-esm/{chunk-CJUI6AKX.mjs → chunk-ECJKIUBO.mjs} +2 -2
  45. package/dist/lib/node-esm/{chunk-WHCSOUNN.mjs → chunk-KB7NFEYY.mjs} +2 -2
  46. package/dist/lib/node-esm/chunk-KB7NFEYY.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-QCA543ZR.mjs → chunk-LMTQG3PX.mjs} +20 -6
  48. package/dist/lib/node-esm/chunk-LMTQG3PX.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-AKHETVIQ.mjs → chunk-O4KCL7XS.mjs} +18 -17
  50. package/dist/lib/node-esm/chunk-O4KCL7XS.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-YQXW3JXD.mjs → chunk-RVK52XGK.mjs} +27 -12
  52. package/dist/lib/node-esm/chunk-RVK52XGK.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-J3XEBEIE.mjs → chunk-W76WUTZY.mjs} +8 -8
  54. package/dist/lib/node-esm/chunk-W76WUTZY.mjs.map +7 -0
  55. package/dist/lib/node-esm/compute-runtime-URROOC34.mjs +114 -0
  56. package/dist/lib/node-esm/compute-runtime-URROOC34.mjs.map +7 -0
  57. package/dist/lib/node-esm/hooks/index.mjs +3 -4
  58. package/dist/lib/node-esm/index.mjs +17 -10
  59. package/dist/lib/node-esm/index.mjs.map +3 -3
  60. package/dist/lib/node-esm/{intent-resolver-2LGBVXT5.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-OMZSBDHS.mjs → react-surface-AFCHOTCJ.mjs} +6 -5
  64. package/dist/lib/node-esm/react-surface-AFCHOTCJ.mjs.map +7 -0
  65. package/dist/lib/node-esm/types/index.mjs +2 -2
  66. package/dist/types/src/capabilities/capabilities.d.ts +2 -1
  67. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  70. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +2 -2
  71. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  72. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +3 -0
  73. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/FunctionsContainer.d.ts.map +1 -1
  75. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  76. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts +8 -0
  77. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -0
  78. package/dist/types/src/components/FunctionsRegistry/index.d.ts +2 -0
  79. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -0
  80. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +2 -2
  81. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  82. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +3 -3
  83. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  84. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +3 -1
  85. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  86. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -1
  87. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +2 -2
  88. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
  89. package/dist/types/src/index.d.ts +1 -0
  90. package/dist/types/src/index.d.ts.map +1 -1
  91. package/dist/types/src/meta.d.ts.map +1 -1
  92. package/dist/types/src/translations.d.ts +3 -0
  93. package/dist/types/src/translations.d.ts.map +1 -1
  94. package/dist/types/tsconfig.tsbuildinfo +1 -1
  95. package/package.json +36 -34
  96. package/src/AutomationPlugin.tsx +2 -2
  97. package/src/capabilities/app-graph-builder.ts +6 -6
  98. package/src/capabilities/capabilities.ts +2 -9
  99. package/src/capabilities/compute-runtime.ts +22 -33
  100. package/src/capabilities/intent-resolver.ts +5 -5
  101. package/src/capabilities/react-surface.tsx +2 -1
  102. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +3 -4
  103. package/src/components/AutomationPanel/AutomationPanel.tsx +31 -30
  104. package/src/components/FunctionsContainer.tsx +7 -0
  105. package/src/components/FunctionsPanel/FunctionsPanel.tsx +32 -13
  106. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +135 -0
  107. package/src/components/FunctionsRegistry/index.ts +5 -0
  108. package/src/components/TriggerEditor/FunctionInputEditor.tsx +2 -2
  109. package/src/components/TriggerEditor/SpecSelector.tsx +4 -4
  110. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +14 -13
  111. package/src/components/TriggerEditor/TriggerEditor.tsx +10 -10
  112. package/src/hooks/useComputeRuntimeCallback.ts +3 -1
  113. package/src/hooks/useTriggerRuntimeControls.ts +4 -3
  114. package/src/index.ts +1 -0
  115. package/src/meta.ts +5 -2
  116. package/src/translations.ts +3 -0
  117. package/dist/lib/browser/AutomationPanel-3PHA5FTJ.mjs +0 -11
  118. package/dist/lib/browser/FunctionsContainer-HHBMPUOD.mjs +0 -36
  119. package/dist/lib/browser/FunctionsContainer-HHBMPUOD.mjs.map +0 -7
  120. package/dist/lib/browser/app-graph-builder-DV5HMFX4.mjs.map +0 -7
  121. package/dist/lib/browser/chunk-5ARH77PV.mjs.map +0 -7
  122. package/dist/lib/browser/chunk-6TUZQIEN.mjs +0 -14
  123. package/dist/lib/browser/chunk-6TUZQIEN.mjs.map +0 -7
  124. package/dist/lib/browser/chunk-DLLE4FKP.mjs.map +0 -7
  125. package/dist/lib/browser/chunk-MVPRI3DB.mjs.map +0 -7
  126. package/dist/lib/browser/chunk-SUKAEYF3.mjs.map +0 -7
  127. package/dist/lib/browser/chunk-VL3KSDVL.mjs.map +0 -7
  128. package/dist/lib/browser/chunk-WWURMV25.mjs +0 -13
  129. package/dist/lib/browser/chunk-WWURMV25.mjs.map +0 -7
  130. package/dist/lib/browser/compute-runtime-YJREH6WP.mjs +0 -160
  131. package/dist/lib/browser/compute-runtime-YJREH6WP.mjs.map +0 -7
  132. package/dist/lib/browser/intent-resolver-D2OHKQRR.mjs.map +0 -7
  133. package/dist/lib/browser/react-surface-G7CG7BML.mjs.map +0 -7
  134. package/dist/lib/node-esm/FunctionsContainer-ZKVOBUHV.mjs +0 -37
  135. package/dist/lib/node-esm/FunctionsContainer-ZKVOBUHV.mjs.map +0 -7
  136. package/dist/lib/node-esm/app-graph-builder-TR2WXPX2.mjs.map +0 -7
  137. package/dist/lib/node-esm/chunk-2EWXIFEK.mjs +0 -16
  138. package/dist/lib/node-esm/chunk-2EWXIFEK.mjs.map +0 -7
  139. package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +0 -7
  140. package/dist/lib/node-esm/chunk-AKHETVIQ.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-J3XEBEIE.mjs.map +0 -7
  142. package/dist/lib/node-esm/chunk-QCA543ZR.mjs.map +0 -7
  143. package/dist/lib/node-esm/chunk-WHCSOUNN.mjs.map +0 -7
  144. package/dist/lib/node-esm/chunk-YQXW3JXD.mjs.map +0 -7
  145. package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs +0 -161
  146. package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs.map +0 -7
  147. package/dist/lib/node-esm/intent-resolver-2LGBVXT5.mjs.map +0 -7
  148. package/dist/lib/node-esm/react-surface-OMZSBDHS.mjs.map +0 -7
  149. /package/dist/lib/browser/{AutomationPanel-3PHA5FTJ.mjs.map → AutomationPanel-W6K45EP4.mjs.map} +0 -0
  150. /package/dist/lib/browser/{FunctionsPanel-NRIKAPQV.mjs.map → FunctionsPanel-CRW6SJUN.mjs.map} +0 -0
  151. /package/dist/lib/browser/{chunk-DK7BLEKU.mjs.map → chunk-HUHVG4BU.mjs.map} +0 -0
  152. /package/dist/lib/browser/{chunk-VGBZKM3O.mjs.map → chunk-YBPJCY3F.mjs.map} +0 -0
  153. /package/dist/lib/node-esm/{AutomationPanel-EETYIR35.mjs.map → AutomationPanel-NI6EHUWH.mjs.map} +0 -0
  154. /package/dist/lib/{browser/AutomationSettings-3EYSPFKB.mjs.map → node-esm/AutomationSettings-3BAIEDRA.mjs.map} +0 -0
  155. /package/dist/lib/node-esm/{FunctionsPanel-SAMRTELO.mjs.map → FunctionsPanel-RVVCS6VH.mjs.map} +0 -0
  156. /package/dist/lib/node-esm/{chunk-B7N3H45O.mjs.map → chunk-CPJ33QGN.mjs.map} +0 -0
  157. /package/dist/lib/node-esm/{chunk-CJUI6AKX.mjs.map → chunk-ECJKIUBO.mjs.map} +0 -0
@@ -0,0 +1,11 @@
1
+ import {
2
+ AutomationPanel,
3
+ AutomationPanel_default
4
+ } from "./chunk-DLZNSNOV.mjs";
5
+ import "./chunk-JW7XSPYW.mjs";
6
+ import "./chunk-LZQFZO3B.mjs";
7
+ export {
8
+ AutomationPanel,
9
+ AutomationPanel_default as default
10
+ };
11
+ //# sourceMappingURL=AutomationPanel-W6K45EP4.mjs.map
@@ -1,15 +1,14 @@
1
1
  import {
2
2
  useTriggerRuntimeControls
3
- } from "./chunk-MVPRI3DB.mjs";
4
- import "./chunk-6TUZQIEN.mjs";
5
- import "./chunk-5ARH77PV.mjs";
3
+ } from "./chunk-RYEK6OMM.mjs";
4
+ import "./chunk-XAKZ4ANY.mjs";
6
5
  import {
7
6
  AutomationPanel
8
- } from "./chunk-VL3KSDVL.mjs";
9
- import "./chunk-SUKAEYF3.mjs";
7
+ } from "./chunk-DLZNSNOV.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-3EYSPFKB.mjs.map
68
+ //# sourceMappingURL=AutomationSettings-YGXYZZEU.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
  }
@@ -0,0 +1,151 @@
1
+ import {
2
+ FunctionsPanel
3
+ } from "./chunk-TWWFNOIR.mjs";
4
+ import {
5
+ meta
6
+ } from "./chunk-LZQFZO3B.mjs";
7
+
8
+ // src/components/FunctionsContainer.tsx
9
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
10
+ import React2 from "react";
11
+ import { useTranslation as useTranslation2 } from "@dxos/react-ui";
12
+ import { ControlPage, ControlSection } from "@dxos/react-ui-form";
13
+
14
+ // src/components/FunctionsRegistry/FunctionsRegistry.tsx
15
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
16
+ import * as Array from "effect/Array";
17
+ import * as EffectFunction from "effect/Function";
18
+ import * as Order from "effect/Order";
19
+ import * as Schema from "effect/Schema";
20
+ import { useState } from "react";
21
+ import React, { useCallback } from "react";
22
+ import { Obj } from "@dxos/echo";
23
+ import { Function } from "@dxos/functions";
24
+ import { getDeployedFunctions } from "@dxos/functions-runtime/edge";
25
+ import { useClient } from "@dxos/react-client";
26
+ import { Filter, Query, useQuery } from "@dxos/react-client/echo";
27
+ import { useAsyncEffect } from "@dxos/react-ui";
28
+ import { IconButton, useTranslation } from "@dxos/react-ui";
29
+ import { controlItemClasses } from "@dxos/react-ui-form";
30
+ import { List } from "@dxos/react-ui-list";
31
+ import { ghostHover, mx } from "@dxos/react-ui-theme";
32
+ var grid = "grid grid-cols-[1fr_1fr_auto] min-bs-[2.5rem]";
33
+ var FunctionsRegistry = ({ space }) => {
34
+ var _effect = _useSignals();
35
+ try {
36
+ const client = useClient();
37
+ const [loading, setLoading] = useState(true);
38
+ const [functions, setFunctions] = useState([]);
39
+ const { t } = useTranslation(meta.id);
40
+ const dbFunctions = useQuery(space, Filter.type(Function.Function));
41
+ const state = (func) => {
42
+ const dbFunction = dbFunctions.find((f) => f.key === func.key);
43
+ if (!dbFunction) {
44
+ return "import";
45
+ }
46
+ if (dbFunction.version === func.version && dbFunction.updated === func.updated) {
47
+ return "none";
48
+ }
49
+ return "update";
50
+ };
51
+ useAsyncEffect(async () => {
52
+ setLoading(true);
53
+ const functions2 = await getDeployedFunctions(client);
54
+ setFunctions(functions2);
55
+ setLoading(false);
56
+ }, []);
57
+ const dedupedFunctions = EffectFunction.pipe(functions, Array.filter((_) => _.key !== void 0), Array.sort(Order.reverse(Order.mapInput(Order.string, (_) => _.updated ?? ""))), Array.dedupeWith((self, that) => self.key === that.key), Array.sort(Order.mapInput(Order.string, (_) => _.key ?? "")));
58
+ const hanleImportOrUpdate = useCallback(async (func) => {
59
+ const { objects: [existingFunc] } = await space.db.query(Query.type(Function.Function, {
60
+ key: func.key
61
+ })).run();
62
+ if (!existingFunc) {
63
+ space.db.add(func);
64
+ return;
65
+ }
66
+ existingFunc.version = func.version;
67
+ existingFunc.updated = func.updated;
68
+ existingFunc.name = func.name;
69
+ existingFunc.description = func.description;
70
+ existingFunc.inputSchema = JSON.parse(JSON.stringify(func.inputSchema));
71
+ existingFunc.outputSchema = JSON.parse(JSON.stringify(func.outputSchema));
72
+ Obj.getMeta(existingFunc).keys = JSON.parse(JSON.stringify(Obj.getMeta(func).keys));
73
+ }, [
74
+ space
75
+ ]);
76
+ return /* @__PURE__ */ React.createElement("div", {
77
+ role: "none",
78
+ className: mx(controlItemClasses)
79
+ }, dedupedFunctions.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
80
+ items: dedupedFunctions,
81
+ isItem: Schema.is(Function.Function),
82
+ getId: (func) => func.id
83
+ }, ({ items }) => /* @__PURE__ */ React.createElement("div", {
84
+ role: "list",
85
+ className: "flex flex-col w-full"
86
+ }, items?.map((func) => /* @__PURE__ */ React.createElement(List.Item, {
87
+ key: func.id,
88
+ item: func,
89
+ classNames: mx(grid, ghostHover, "items-center", "pli-2", "min-bs-[3rem]")
90
+ }, /* @__PURE__ */ React.createElement("div", {
91
+ className: "flex flex-col truncate"
92
+ }, /* @__PURE__ */ React.createElement(List.ItemTitle, {
93
+ classNames: "truncate"
94
+ }, func.name), /* @__PURE__ */ React.createElement("div", {
95
+ className: "text-xs text-description truncate"
96
+ }, func.key)), /* @__PURE__ */ React.createElement("div", {
97
+ className: "flex flex-col truncate"
98
+ }, /* @__PURE__ */ React.createElement("div", {
99
+ className: "text-xs text-description truncate"
100
+ }, func.version), /* @__PURE__ */ React.createElement("div", {
101
+ className: "text-xs text-description truncate"
102
+ }, func.updated ? `Uploaded ${new Date(func.updated).toLocaleString()}` : "")), /* @__PURE__ */ React.createElement(IconButton, {
103
+ iconOnly: true,
104
+ icon: state(func) === "update" ? "ph--arrows-clockwise--regular" : "ph--download--regular",
105
+ label: state(func) === "update" ? t("update function button label") : t("import function button label"),
106
+ disabled: state(func) === "none",
107
+ onClick: () => hanleImportOrUpdate(func)
108
+ }))))), dedupedFunctions.length === 0 && !loading && /* @__PURE__ */ React.createElement("div", {
109
+ className: "text-center plb-4 text-gray-500"
110
+ }, t("no functions found")), loading && /* @__PURE__ */ React.createElement("div", {
111
+ className: "text-center plb-4 text-gray-500"
112
+ }, t("loading functions")));
113
+ } finally {
114
+ _effect.f();
115
+ }
116
+ };
117
+
118
+ // src/components/FunctionsContainer.tsx
119
+ var FunctionsContainer = ({ space }) => {
120
+ var _effect = _useSignals2();
121
+ try {
122
+ const { t } = useTranslation2(meta.id);
123
+ return /* @__PURE__ */ React2.createElement(ControlPage, null, /* @__PURE__ */ React2.createElement(ControlSection, {
124
+ title: t("functions verbose label", {
125
+ ns: meta.id
126
+ }),
127
+ description: t("functions description", {
128
+ ns: meta.id
129
+ })
130
+ }, /* @__PURE__ */ React2.createElement(FunctionsPanel, {
131
+ space
132
+ })), /* @__PURE__ */ React2.createElement(ControlSection, {
133
+ title: t("functions registry verbose label", {
134
+ ns: meta.id
135
+ }),
136
+ description: t("functions registry description", {
137
+ ns: meta.id
138
+ })
139
+ }, /* @__PURE__ */ React2.createElement(FunctionsRegistry, {
140
+ space
141
+ })));
142
+ } finally {
143
+ _effect.f();
144
+ }
145
+ };
146
+ var FunctionsContainer_default = FunctionsContainer;
147
+ export {
148
+ FunctionsContainer,
149
+ FunctionsContainer_default as default
150
+ };
151
+ //# sourceMappingURL=FunctionsContainer-JIFRD7DW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/FunctionsContainer.tsx", "../../../src/components/FunctionsRegistry/FunctionsRegistry.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { ControlPage, ControlSection } from '@dxos/react-ui-form';\n\nimport { meta } from '../meta';\n\nimport { FunctionsPanel } from './FunctionsPanel';\nimport { FunctionsRegistry } from './FunctionsRegistry';\n\nexport const FunctionsContainer = ({ space }: { space: Space }) => {\n const { t } = useTranslation(meta.id);\n return (\n <ControlPage>\n <ControlSection\n title={t('functions verbose label', { ns: meta.id })}\n description={t('functions description', { ns: meta.id })}\n >\n <FunctionsPanel space={space} />\n </ControlSection>\n <ControlSection\n title={t('functions registry verbose label', { ns: meta.id })}\n description={t('functions registry description', { ns: meta.id })}\n >\n <FunctionsRegistry space={space} />\n </ControlSection>\n </ControlPage>\n );\n};\n\nexport default FunctionsContainer;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as EffectFunction from 'effect/Function';\nimport * as Order from 'effect/Order';\nimport * as Schema from 'effect/Schema';\nimport { useState } from 'react';\nimport React, { useCallback } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { Function } from '@dxos/functions';\nimport { getDeployedFunctions } from '@dxos/functions-runtime/edge';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, Query, type Space, useQuery } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\nimport { 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_1fr_auto] min-bs-[2.5rem]';\n\ntype FunctionsRegistryProps = {\n space: Space;\n};\n\nexport const FunctionsRegistry = ({ space }: FunctionsRegistryProps) => {\n const client = useClient();\n const [loading, setLoading] = useState(true);\n const [functions, setFunctions] = useState<Function.Function[]>([]);\n const { t } = useTranslation(meta.id);\n\n const dbFunctions = useQuery(space, Filter.type(Function.Function));\n\n const state = (func: Function.Function) => {\n const dbFunction = dbFunctions.find((f) => f.key === func.key);\n if (!dbFunction) {\n return 'import';\n }\n if (dbFunction.version === func.version && dbFunction.updated === func.updated) {\n return 'none';\n }\n return 'update';\n };\n\n useAsyncEffect(async () => {\n setLoading(true);\n const functions = await getDeployedFunctions(client);\n setFunctions(functions);\n setLoading(false);\n }, []);\n\n const dedupedFunctions = EffectFunction.pipe(\n functions,\n Array.filter((_) => _.key !== undefined),\n Array.sort(Order.reverse(Order.mapInput(Order.string, (_: Function.Function) => _.updated ?? ''))),\n Array.dedupeWith((self, that) => self.key === that.key),\n Array.sort(Order.mapInput(Order.string, (_: Function.Function) => _.key ?? '')),\n );\n\n const hanleImportOrUpdate = useCallback(\n async (func: Function.Function) => {\n const {\n objects: [existingFunc],\n } = await space.db.query(Query.type(Function.Function, { key: func.key })).run();\n if (!existingFunc) {\n space.db.add(func);\n return;\n }\n existingFunc.version = func.version;\n existingFunc.updated = func.updated;\n existingFunc.name = func.name;\n existingFunc.description = func.description;\n // TODO(dmaretskyi): A workaround for an ECHO bug.\n existingFunc.inputSchema = JSON.parse(JSON.stringify(func.inputSchema));\n existingFunc.outputSchema = JSON.parse(JSON.stringify(func.outputSchema));\n Obj.getMeta(existingFunc).keys = JSON.parse(JSON.stringify(Obj.getMeta(func).keys));\n },\n [space],\n );\n\n return (\n <div role='none' className={mx(controlItemClasses)}>\n {dedupedFunctions.length > 0 && (\n <List.Root<Function.Function>\n items={dedupedFunctions}\n isItem={Schema.is(Function.Function)}\n getId={(func) => func.id}\n >\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 <div className='text-xs text-description truncate'>{func.key}</div>\n </div>\n <div className='flex flex-col truncate'>\n <div className='text-xs text-description truncate'>{func.version}</div>\n <div className='text-xs text-description truncate'>\n {func.updated ? `Uploaded ${new Date(func.updated).toLocaleString()}` : ''}\n </div>\n </div>\n\n <IconButton\n iconOnly\n icon={state(func) === 'update' ? 'ph--arrows-clockwise--regular' : 'ph--download--regular'}\n label={\n state(func) === 'update' ? t('update function button label') : t('import function button label')\n }\n disabled={state(func) === 'none'}\n onClick={() => hanleImportOrUpdate(func)}\n />\n </List.Item>\n ))}\n </div>\n )}\n </List.Root>\n )}\n\n {dedupedFunctions.length === 0 && !loading && (\n <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>\n )}\n {loading && <div className='text-center plb-4 text-gray-500'>{t('loading functions')}</div>}\n </div>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useTranslation", "ControlPage", "ControlSection", "Array", "EffectFunction", "Order", "Schema", "useState", "React", "useCallback", "Obj", "Function", "getDeployedFunctions", "useClient", "Filter", "Query", "useQuery", "useAsyncEffect", "IconButton", "useTranslation", "controlItemClasses", "List", "ghostHover", "mx", "grid", "FunctionsRegistry", "space", "client", "useClient", "loading", "setLoading", "useState", "functions", "setFunctions", "t", "useTranslation", "meta", "id", "dbFunctions", "useQuery", "Filter", "type", "Function", "state", "func", "dbFunction", "find", "f", "key", "version", "updated", "useAsyncEffect", "getDeployedFunctions", "dedupedFunctions", "pipe", "filter", "_", "undefined", "sort", "reverse", "mapInput", "string", "dedupeWith", "self", "that", "hanleImportOrUpdate", "useCallback", "objects", "existingFunc", "db", "query", "Query", "run", "add", "name", "description", "inputSchema", "JSON", "parse", "stringify", "outputSchema", "Obj", "getMeta", "keys", "div", "role", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "map", "Item", "item", "classNames", "ghostHover", "ItemTitle", "Date", "toLocaleString", "IconButton", "iconOnly", "icon", "label", "disabled", "onClick", "FunctionsContainer", "space", "t", "useTranslation", "meta", "id", "React", "ControlPage", "ControlSection", "title", "ns", "description", "FunctionsPanel", "FunctionsRegistry"]
7
+ }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  FunctionsPanel,
3
3
  FunctionsPanel_default
4
- } from "./chunk-DLLE4FKP.mjs";
5
- import "./chunk-WWURMV25.mjs";
4
+ } from "./chunk-TWWFNOIR.mjs";
5
+ import "./chunk-LZQFZO3B.mjs";
6
6
  export {
7
7
  FunctionsPanel,
8
8
  FunctionsPanel_default as default
9
9
  };
10
- //# sourceMappingURL=FunctionsPanel-NRIKAPQV.mjs.map
10
+ //# sourceMappingURL=FunctionsPanel-CRW6SJUN.mjs.map
@@ -1,21 +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
- import { Rx } from "@effect-rx/rx-react";
6
+ import { Atom } from "@effect-atom/atom-react";
7
7
  import * as Function from "effect/Function";
8
8
  import * as Option from "effect/Option";
9
9
  import { Capabilities, contributes } from "@dxos/app-framework";
10
10
  import { Obj } from "@dxos/echo";
11
- import { ScriptType } from "@dxos/functions";
11
+ import { Script } from "@dxos/functions";
12
12
  import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
13
13
  import { createExtension } from "@dxos/plugin-graph";
14
14
  import { meta as spaceMeta } from "@dxos/plugin-space";
15
15
  var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphBuilder, [
16
16
  createExtension({
17
17
  id: `${meta.id}/space-settings-automation`,
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
+ connector: (node) => Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => node2.type === `${spaceMeta.id}/settings` ? Option.some(node2) : Option.none()), Option.map((node2) => [
19
19
  {
20
20
  id: `automation-${node2.id}`,
21
21
  type: `${meta.id}/space-settings-automation`,
@@ -34,7 +34,7 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
34
34
  }),
35
35
  createExtension({
36
36
  id: `${meta.id}/space-settings-functions`,
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
+ connector: (node) => Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => node2.type === `${spaceMeta.id}/settings` ? Option.some(node2) : Option.none()), Option.map((node2) => [
38
38
  {
39
39
  id: `functions-${node2.id}`,
40
40
  type: `${meta.id}/space-settings-functions`,
@@ -53,7 +53,7 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
53
53
  }),
54
54
  createExtension({
55
55
  id: `${meta.id}/script-companion`,
56
- connector: (node) => Rx.make((get) => Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(ScriptType, node2.data) ? Option.some(node2) : Option.none()), Option.map((node2) => [
56
+ connector: (node) => Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(Script.Script, node2.data) ? Option.some(node2) : Option.none()), Option.map((node2) => [
57
57
  {
58
58
  id: [
59
59
  node2.id,
@@ -78,4 +78,4 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
78
78
  export {
79
79
  app_graph_builder_default as default
80
80
  };
81
- //# sourceMappingURL=app-graph-builder-DV5HMFX4.mjs.map
81
+ //# sourceMappingURL=app-graph-builder-W7LLC6XW.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 { Atom } from '@effect-atom/atom-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 Atom.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 Atom.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 Atom.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,YAAY;AACrB,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,KAAKC,KAAK,CAACC,QACAC,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,KAAKC,KAAK,CAACC,QACAC,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,KAAKC,KAAK,CAACC,QACAC,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": ["Atom", "Function", "Option", "Capabilities", "contributes", "Obj", "Script", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "createExtension", "meta", "spaceMeta", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "connector", "node", "Atom", "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,19 +1,19 @@
1
1
  import {
2
2
  TriggerEditor
3
- } from "./chunk-SUKAEYF3.mjs";
3
+ } from "./chunk-JW7XSPYW.mjs";
4
4
  import {
5
5
  meta
6
- } from "./chunk-WWURMV25.mjs";
6
+ } from "./chunk-LZQFZO3B.mjs";
7
7
 
8
8
  // src/components/AutomationPanel/AutomationPanel.tsx
9
9
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
10
10
  import * as Array from "effect/Array";
11
- import * as Function from "effect/Function";
11
+ import * as EFn from "effect/Function";
12
12
  import * as Match from "effect/Match";
13
13
  import * as Schema from "effect/Schema";
14
14
  import React, { useMemo, useState } from "react";
15
15
  import { Filter, Obj, Tag } from "@dxos/echo";
16
- import { FunctionTrigger, FunctionType, ScriptType } from "@dxos/functions";
16
+ import { Function, Script, Trigger } from "@dxos/functions";
17
17
  import { useTypeOptions } from "@dxos/plugin-space";
18
18
  import { useClient } from "@dxos/react-client";
19
19
  import { getSpace, useQuery } from "@dxos/react-client/echo";
@@ -21,15 +21,16 @@ import { Clipboard, IconButton, Input, Separator, useTranslation } from "@dxos/r
21
21
  import { ControlItem, controlItemClasses } from "@dxos/react-ui-form";
22
22
  import { List } from "@dxos/react-ui-list";
23
23
  import { ghostHover, mx } from "@dxos/react-ui-theme";
24
- import { DataType } from "@dxos/schema";
24
+ import { View } from "@dxos/schema";
25
+ import { Project } from "@dxos/types";
25
26
  var grid = "grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]";
26
27
  var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) => {
27
28
  var _effect = _useSignals();
28
29
  try {
29
30
  const { t } = useTranslation(meta.id);
30
31
  const client = useClient();
31
- const functions = useQuery(space, Filter.type(FunctionType));
32
- const triggers = useQuery(space, Filter.type(FunctionTrigger));
32
+ const functions = useQuery(space, Filter.type(Function.Function));
33
+ const triggers = useQuery(space, Filter.type(Trigger.Trigger));
33
34
  const filteredTriggers = useMemo(() => {
34
35
  return object ? triggers.filter(triggerMatch(object)) : triggers;
35
36
  }, [
@@ -52,7 +53,7 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
52
53
  setSelected(trigger2);
53
54
  };
54
55
  const handleAdd = () => {
55
- setTrigger(Obj.make(FunctionTrigger, {}));
56
+ setTrigger(Trigger.make({}));
56
57
  setSelected(void 0);
57
58
  };
58
59
  const handleDelete = (trigger2) => {
@@ -64,7 +65,7 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
64
65
  if (selected) {
65
66
  Object.assign(selected, trigger2);
66
67
  } else {
67
- space.db.add(Obj.make(FunctionTrigger, trigger2));
68
+ space.db.add(Trigger.make(trigger2));
68
69
  }
69
70
  setTrigger(void 0);
70
71
  setSelected(void 0);
@@ -91,24 +92,24 @@ var AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }) =>
91
92
  className: mx(controlItemClasses, classNames)
92
93
  }, filteredTriggers.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
93
94
  items: filteredTriggers,
94
- isItem: Schema.is(FunctionTrigger),
95
+ isItem: Schema.is(Trigger.Trigger),
95
96
  getId: (field) => field.id
96
97
  }, ({ items: filteredTriggers2 }) => /* @__PURE__ */ React.createElement("div", {
97
98
  role: "list",
98
- className: "flex flex-col w-full"
99
+ className: "flex flex-col is-full"
99
100
  }, filteredTriggers2?.map((trigger2) => {
100
101
  const copyAction = getCopyAction(client, trigger2);
101
102
  return /* @__PURE__ */ React.createElement(List.Item, {
102
103
  key: trigger2.id,
103
104
  item: trigger2,
104
- classNames: mx(grid, ghostHover, "items-center", "px-2")
105
+ classNames: mx(grid, ghostHover, "items-center", "pli-2")
105
106
  }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Switch, {
106
107
  checked: trigger2.enabled,
107
108
  onCheckedChange: (checked) => trigger2.enabled = checked
108
109
  })), /* @__PURE__ */ React.createElement("div", {
109
110
  className: "flex"
110
111
  }, /* @__PURE__ */ React.createElement(List.ItemTitle, {
111
- classNames: "px-1 cursor-pointer w-0 shrink truncate",
112
+ classNames: "pli-1 cursor-pointer w-0 shrink truncate",
112
113
  onClick: () => handleSelect(trigger2)
113
114
  }, getFunctionName(functions, trigger2) ?? "\u2205"), copyAction && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
114
115
  label: t(copyAction.translationKey),
@@ -156,13 +157,13 @@ var getFunctionName = (functions, trigger) => {
156
157
  };
157
158
  var scriptMatch = (script) => (trigger) => {
158
159
  const fn = trigger.function?.target;
159
- if (!Obj.instanceOf(FunctionType, fn)) {
160
+ if (!Obj.instanceOf(Function.Function, fn)) {
160
161
  return false;
161
162
  }
162
163
  return fn.source?.target === script;
163
164
  };
164
165
  var projectMatch = (project) => {
165
- const viewQueries = Function.pipe(project.collections, Array.map((collection) => collection.target), Array.filter(Schema.is(DataType.View)), Array.map((view) => Obj.getSnapshot(view).query.ast), Array.map((ast) => JSON.stringify(ast)));
166
+ const viewQueries = EFn.pipe(project.collections, Array.map((collection) => collection.target), Array.filter(Schema.is(View.View)), Array.map((view) => Obj.getSnapshot(view).query.ast), Array.map((ast) => JSON.stringify(ast)));
166
167
  return (trigger) => {
167
168
  const spec = Obj.getSnapshot(trigger).spec;
168
169
  if (spec?.kind !== "subscription") {
@@ -171,7 +172,7 @@ var projectMatch = (project) => {
171
172
  return viewQueries.some((query) => JSON.stringify(spec.query) === query);
172
173
  };
173
174
  };
174
- var triggerMatch = Match.type().pipe(Match.withReturnType(), Match.when((obj) => Obj.instanceOf(ScriptType, obj), (obj) => scriptMatch(obj)), Match.when((obj) => Obj.instanceOf(DataType.Project, obj), (obj) => projectMatch(obj)), Match.orElse((_obj) => () => true));
175
+ var triggerMatch = Match.type().pipe(Match.withReturnType(), Match.when((obj) => Obj.instanceOf(Script.Script, obj), (obj) => scriptMatch(obj)), Match.when((obj) => Obj.instanceOf(Project.Project, obj), (obj) => projectMatch(obj)), Match.orElse((_obj) => () => true));
175
176
 
176
177
  // src/components/AutomationPanel/index.ts
177
178
  var AutomationPanel_default = AutomationPanel;
@@ -180,4 +181,4 @@ export {
180
181
  AutomationPanel,
181
182
  AutomationPanel_default
182
183
  };
183
- //# sourceMappingURL=chunk-VL3KSDVL.mjs.map
184
+ //# sourceMappingURL=chunk-DLZNSNOV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AutomationPanel/AutomationPanel.tsx", "../../../src/components/AutomationPanel/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as EFn from 'effect/Function';\nimport * as Match from 'effect/Match';\nimport * as Schema from 'effect/Schema';\nimport React, { useMemo, useState } from 'react';\n\nimport { Filter, Obj, Tag } from '@dxos/echo';\nimport { Function, Script, Trigger } from '@dxos/functions';\nimport { useTypeOptions } from '@dxos/plugin-space';\nimport { type Client, useClient } from '@dxos/react-client';\nimport { type Space, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Clipboard, IconButton, Input, Separator, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { ControlItem, controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\nimport { View } from '@dxos/schema';\nimport { Project } from '@dxos/types';\n\nimport { meta } from '../../meta';\nimport { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';\n\nconst grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';\n\nexport type AutomationPanelProps = ThemedClassName<{\n space: Space;\n object?: Obj.Any;\n initialTrigger?: Trigger.Trigger;\n onDone?: () => void;\n}>;\n\n// TODO(burdon): Factor out common layout with ViewEditor.\nexport const AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }: AutomationPanelProps) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const functions = useQuery(space, Filter.type(Function.Function));\n const triggers = useQuery(space, Filter.type(Trigger.Trigger));\n const filteredTriggers = useMemo(() => {\n return object ? triggers.filter(triggerMatch(object)) : triggers;\n }, [object, triggers]);\n const tags = useQuery(space, Filter.type(Tag.Tag));\n const types = useTypeOptions({ space, annotation: ['dynamic', 'limited-static', 'object-form'] });\n\n const [trigger, setTrigger] = useState<Trigger.Trigger | undefined>(initialTrigger);\n const [selected, setSelected] = useState<Trigger.Trigger>();\n\n const handleSelect = (trigger: Trigger.Trigger) => {\n setTrigger(trigger);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(Trigger.make({}));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: Trigger.Trigger) => {\n space.db.remove(trigger);\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleSave: TriggerEditorProps['onSave'] = (trigger) => {\n if (selected) {\n Object.assign(selected, trigger);\n } else {\n space.db.add(Trigger.make(trigger));\n }\n\n setTrigger(undefined);\n setSelected(undefined);\n onDone?.();\n };\n\n const handleCancel: TriggerEditorProps['onCancel'] = () => {\n setTrigger(undefined);\n onDone?.();\n };\n\n if (trigger) {\n return (\n <ControlItem title={t('trigger editor title')}>\n <TriggerEditor\n space={space}\n trigger={trigger}\n readonlySpec={Boolean(object)}\n tags={tags}\n types={types}\n onSave={handleSave}\n onCancel={handleCancel}\n />\n </ControlItem>\n );\n }\n\n return (\n <div className={mx(controlItemClasses, classNames)}>\n {filteredTriggers.length > 0 && (\n <List.Root<Trigger.Trigger>\n items={filteredTriggers}\n isItem={Schema.is(Trigger.Trigger)}\n getId={(field) => field.id}\n >\n {({ items: filteredTriggers }) => (\n <div role='list' className='flex flex-col is-full'>\n {filteredTriggers?.map((trigger) => {\n const copyAction = getCopyAction(client, trigger);\n return (\n <List.Item<Trigger.Trigger>\n key={trigger.id}\n item={trigger}\n classNames={mx(grid, ghostHover, 'items-center', 'pli-2')}\n >\n <Input.Root>\n <Input.Switch\n checked={trigger.enabled}\n onCheckedChange={(checked) => (trigger.enabled = checked)}\n />\n </Input.Root>\n\n <div className={'flex'}>\n <List.ItemTitle\n classNames='pli-1 cursor-pointer w-0 shrink truncate'\n onClick={() => handleSelect(trigger)}\n >\n {getFunctionName(functions, trigger) ?? '∅'}\n </List.ItemTitle>\n\n {/* TODO: a better way to expose copy action */}\n {copyAction && (\n <Clipboard.IconButton\n label={t(copyAction.translationKey)}\n value={copyAction.contentProvider()}\n />\n )}\n </div>\n\n <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />\n </List.Item>\n );\n })}\n </div>\n )}\n </List.Root>\n )}\n {filteredTriggers.length > 0 && <Separator classNames='mlb-4' />}\n <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />\n </div>\n );\n};\n\nconst getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {\n if (trigger?.spec?.kind === 'email') {\n return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };\n }\n\n if (trigger?.spec?.kind === 'webhook') {\n return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };\n }\n\n return undefined;\n};\n\nconst getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {\n const spaceId = getSpace(trigger)!.id;\n const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);\n const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');\n edgeUrl.protocol = isSecure ? 'https' : 'http';\n return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();\n};\n\nconst getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigger) => {\n // TODO(wittjosiah): Truncation should be done in the UI.\n // Warning that the List component is currently a can of worms.\n const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;\n const functionObject = functions.find((fn) => fn === trigger.function?.target);\n return functionObject?.name ?? shortId;\n};\n\nconst scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {\n const fn = trigger.function?.target;\n if (!Obj.instanceOf(Function.Function, fn)) {\n return false;\n }\n\n return fn.source?.target === script;\n};\n\nconst projectMatch = (project: Project.Project) => {\n const viewQueries = EFn.pipe(\n project.collections,\n Array.map((collection) => collection.target),\n Array.filter(Schema.is(View.View)),\n Array.map((view) => Obj.getSnapshot(view).query.ast),\n Array.map((ast) => JSON.stringify(ast)),\n );\n\n return (trigger: Trigger.Trigger) => {\n const spec = Obj.getSnapshot(trigger).spec;\n if (spec?.kind !== 'subscription') {\n return false;\n }\n\n // TODO(wittjosiah): Implement better way of comparing query ASTs.\n return viewQueries.some((query) => JSON.stringify(spec.query) === query);\n };\n};\n\nconst triggerMatch = Match.type<Obj.Any>().pipe(\n Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),\n Match.when(\n (obj) => Obj.instanceOf(Script.Script, obj),\n (obj) => scriptMatch(obj),\n ),\n Match.when(\n (obj) => Obj.instanceOf(Project.Project, obj),\n (obj) => projectMatch(obj),\n ),\n Match.orElse((_obj) => () => true),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { AutomationPanel } from './AutomationPanel';\n\nexport * from './AutomationPanel';\n\nexport default AutomationPanel;\n"],
5
+ "mappings": "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",
6
+ "names": ["Array", "EFn", "Match", "Schema", "React", "useMemo", "useState", "Filter", "Obj", "Tag", "Function", "Script", "Trigger", "useTypeOptions", "useClient", "getSpace", "useQuery", "Clipboard", "IconButton", "Input", "Separator", "useTranslation", "ControlItem", "controlItemClasses", "List", "ghostHover", "mx", "View", "Project", "grid", "AutomationPanel", "classNames", "space", "object", "initialTrigger", "onDone", "t", "useTranslation", "meta", "id", "client", "useClient", "functions", "useQuery", "Filter", "type", "Function", "triggers", "Trigger", "filteredTriggers", "useMemo", "filter", "triggerMatch", "tags", "Tag", "types", "useTypeOptions", "annotation", "trigger", "setTrigger", "useState", "selected", "setSelected", "handleSelect", "handleAdd", "make", "undefined", "handleDelete", "db", "remove", "handleSave", "Object", "assign", "add", "handleCancel", "ControlItem", "title", "TriggerEditor", "readonlySpec", "Boolean", "onSave", "onCancel", "div", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "field", "role", "map", "copyAction", "getCopyAction", "Item", "key", "item", "ghostHover", "Input", "Switch", "checked", "enabled", "onCheckedChange", "ItemTitle", "onClick", "getFunctionName", "Clipboard", "IconButton", "label", "translationKey", "value", "contentProvider", "ItemDeleteButton", "Separator", "icon", "spec", "kind", "getSpace", "getWebhookUrl", "spaceId", "edgeUrl", "URL", "config", "values", "runtime", "services", "edge", "url", "isSecure", "protocol", "startsWith", "toString", "shortId", "function", "dxn", "slice", "functionObject", "find", "fn", "target", "name", "scriptMatch", "script", "Obj", "instanceOf", "source", "projectMatch", "project", "viewQueries", "pipe", "collections", "collection", "View", "view", "getSnapshot", "query", "ast", "JSON", "stringify", "some", "withReturnType", "when", "obj", "Script", "Project", "orElse", "_obj", "AutomationPanel"]
7
+ }
@@ -1,9 +1,9 @@
1
1
  // src/components/index.ts
2
2
  import { lazy } from "react";
3
- var AutomationPanel = lazy(() => import("./AutomationPanel-3PHA5FTJ.mjs"));
4
- var AutomationSettings = lazy(() => import("./AutomationSettings-3EYSPFKB.mjs"));
5
- var FunctionsContainer = lazy(() => import("./FunctionsContainer-HHBMPUOD.mjs"));
6
- var FunctionsPanel = lazy(() => import("./FunctionsPanel-NRIKAPQV.mjs"));
3
+ var AutomationPanel = lazy(() => import("./AutomationPanel-W6K45EP4.mjs"));
4
+ var AutomationSettings = lazy(() => import("./AutomationSettings-YGXYZZEU.mjs"));
5
+ var FunctionsContainer = lazy(() => import("./FunctionsContainer-JIFRD7DW.mjs"));
6
+ var FunctionsPanel = lazy(() => import("./FunctionsPanel-CRW6SJUN.mjs"));
7
7
 
8
8
  export {
9
9
  AutomationPanel,
@@ -11,4 +11,4 @@ export {
11
11
  FunctionsContainer,
12
12
  FunctionsPanel
13
13
  };
14
- //# sourceMappingURL=chunk-DK7BLEKU.mjs.map
14
+ //# sourceMappingURL=chunk-HUHVG4BU.mjs.map
@@ -1,13 +1,13 @@
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";
10
+ import { Function, Script, Trigger as Trigger2 } from "@dxos/functions";
11
11
  import { Filter as Filter2, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
12
12
  import { Input } from "@dxos/react-ui";
13
13
  import { QueryForm } from "@dxos/react-ui-components";
@@ -84,7 +84,7 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
84
84
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
85
85
  import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
86
86
  import { Filter, Query } from "@dxos/echo";
87
- import { TriggerKinds } from "@dxos/functions";
87
+ import { Trigger } from "@dxos/functions";
88
88
  import { useTranslation } from "@dxos/react-ui";
89
89
  import { SelectInput, useInputProps } from "@dxos/react-ui-form";
90
90
  var SpecSelector = (props) => {
@@ -134,7 +134,7 @@ var SpecSelector = (props) => {
134
134
  }, [
135
135
  specProps
136
136
  ]);
137
- const options = useMemo2(() => TriggerKinds.map((kind) => ({
137
+ const options = useMemo2(() => Trigger.Kinds.map((kind) => ({
138
138
  value: kind,
139
139
  label: t(`trigger type ${kind}`)
140
140
  })), [
@@ -170,7 +170,7 @@ var TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCanc
170
170
  return /* @__PURE__ */ React3.createElement(Form2, {
171
171
  outerSpacing: false,
172
172
  Custom,
173
- schema: FunctionTrigger,
173
+ schema: Trigger2.Trigger,
174
174
  values: trigger,
175
175
  onSave: handleSave,
176
176
  onCancel,
@@ -181,9 +181,9 @@ var TriggerEditor = ({ space, trigger, readonlySpec, types, tags, onSave, onCanc
181
181
  }
182
182
  };
183
183
  var useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }) => {
184
- const functions = useQuery(space, Filter2.type(FunctionType));
184
+ const functions = useQuery(space, Filter2.type(Function.Function));
185
185
  const workflows = useQuery(space, Filter2.type(ComputeGraph));
186
- const scripts = useQuery(space, Filter2.type(ScriptType));
186
+ const scripts = useQuery(space, Filter2.type(Script.Script));
187
187
  return useMemo3(() => ({
188
188
  // Function selector.
189
189
  ["function"]: (props) => {
@@ -264,4 +264,4 @@ var getFunctionOptions = (scripts, functions) => {
264
264
  export {
265
265
  TriggerEditor
266
266
  };
267
- //# sourceMappingURL=chunk-SUKAEYF3.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
+ }