@dxos/plugin-script 0.6.9-staging.8e43e2a → 0.6.10-main.3cfcc89

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 (102) hide show
  1. package/README.md +45 -0
  2. package/dist/lib/browser/ScriptEditor-WNCGR5OU.mjs +452 -0
  3. package/dist/lib/browser/ScriptEditor-WNCGR5OU.mjs.map +7 -0
  4. package/dist/lib/browser/{TypescriptEditor-PIRIDDUS.mjs → TypescriptEditor-XTGRVCMY.mjs} +2 -2
  5. package/dist/lib/browser/{chunk-SK3L274X.mjs → chunk-DL5XQRQM.mjs} +13 -7
  6. package/dist/lib/browser/{chunk-SK3L274X.mjs.map → chunk-DL5XQRQM.mjs.map} +3 -3
  7. package/dist/lib/browser/{chunk-D4O723CR.mjs → chunk-DX5CSOBP.mjs} +22 -5
  8. package/dist/lib/browser/chunk-DX5CSOBP.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-RHEZ5LUU.mjs +229 -0
  10. package/dist/lib/browser/chunk-RHEZ5LUU.mjs.map +7 -0
  11. package/dist/lib/browser/edge/index.mjs +1 -1
  12. package/dist/lib/browser/index.mjs +88 -195
  13. package/dist/lib/browser/index.mjs.map +4 -4
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/node/ScriptEditor-RR7AVOQL.cjs +465 -0
  16. package/dist/lib/node/ScriptEditor-RR7AVOQL.cjs.map +7 -0
  17. package/dist/lib/node/{TypescriptEditor-OTWJUIWB.cjs → TypescriptEditor-CRONCQSI.cjs} +7 -7
  18. package/dist/lib/node/{TypescriptEditor-OTWJUIWB.cjs.map → TypescriptEditor-CRONCQSI.cjs.map} +2 -2
  19. package/dist/lib/node/chunk-4GTXIELQ.cjs +252 -0
  20. package/dist/lib/node/chunk-4GTXIELQ.cjs.map +7 -0
  21. package/dist/lib/node/{chunk-X6A3D4PD.cjs → chunk-PFH3ROEH.cjs} +16 -10
  22. package/dist/lib/node/{chunk-X6A3D4PD.cjs.map → chunk-PFH3ROEH.cjs.map} +3 -3
  23. package/dist/lib/node/{chunk-ITLHJMWP.cjs → chunk-RXI576K3.cjs} +24 -7
  24. package/dist/lib/node/chunk-RXI576K3.cjs.map +7 -0
  25. package/dist/lib/node/edge/index.cjs +8 -8
  26. package/dist/lib/node/edge/index.cjs.map +1 -1
  27. package/dist/lib/node/index.cjs +85 -194
  28. package/dist/lib/node/index.cjs.map +4 -4
  29. package/dist/lib/node/meta.json +1 -1
  30. package/dist/types/src/ScriptPlugin.d.ts +1 -4
  31. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  32. package/dist/types/src/bundler/bundler.d.ts +39 -0
  33. package/dist/types/src/bundler/bundler.d.ts.map +1 -0
  34. package/dist/types/src/bundler/bundler.test.d.ts +2 -0
  35. package/dist/types/src/bundler/bundler.test.d.ts.map +1 -0
  36. package/dist/types/src/bundler/index.d.ts +2 -0
  37. package/dist/types/src/bundler/index.d.ts.map +1 -0
  38. package/dist/types/src/compiler/compiler.browser.test.d.ts +2 -0
  39. package/dist/types/src/compiler/compiler.browser.test.d.ts.map +1 -0
  40. package/dist/types/src/compiler/compiler.d.ts +9 -34
  41. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  42. package/dist/types/src/components/DetailsPanel.d.ts +9 -0
  43. package/dist/types/src/components/DetailsPanel.d.ts.map +1 -0
  44. package/dist/types/src/components/ScriptBlock/FrameContainer/FrameContainer.d.ts +2 -2
  45. package/dist/types/src/components/ScriptBlock/FrameContainer/FrameContainer.d.ts.map +1 -1
  46. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts.map +1 -1
  47. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts +1 -1
  48. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +1 -1
  49. package/dist/types/src/components/ScriptBlock/Splitter/Splitter.stories.d.ts +1 -1
  50. package/dist/types/src/components/ScriptBlock/Splitter/Splitter.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/ScriptEditor.d.ts +3 -2
  52. package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
  53. package/dist/types/src/components/Toolbar.d.ts +9 -7
  54. package/dist/types/src/components/Toolbar.d.ts.map +1 -1
  55. package/dist/types/src/components/Toolbar.stories.d.ts +2 -2
  56. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  57. package/dist/types/src/components/TypescriptEditor.d.ts +3 -1
  58. package/dist/types/src/components/TypescriptEditor.d.ts.map +1 -1
  59. package/dist/types/src/components/TypescriptEditor.stories.d.ts +2 -2
  60. package/dist/types/src/components/TypescriptEditor.stories.d.ts.map +1 -1
  61. package/dist/types/src/components/index.d.ts +2 -2
  62. package/dist/types/src/components/index.d.ts.map +1 -1
  63. package/dist/types/src/data/templates.md.d.ts +3 -0
  64. package/dist/types/src/data/templates.md.d.ts.map +1 -0
  65. package/dist/types/src/edge/functions.d.ts.map +1 -1
  66. package/dist/types/src/index.d.ts +1 -0
  67. package/dist/types/src/index.d.ts.map +1 -1
  68. package/dist/types/src/translations.d.ts +3 -2
  69. package/dist/types/src/translations.d.ts.map +1 -1
  70. package/dist/types/src/types/script.d.ts +4 -4
  71. package/package.json +38 -33
  72. package/src/ScriptPlugin.tsx +29 -10
  73. package/src/bundler/bundler.test.ts +44 -0
  74. package/src/bundler/bundler.ts +246 -0
  75. package/src/bundler/index.ts +5 -0
  76. package/src/compiler/compiler.browser.test.ts +18 -0
  77. package/src/compiler/compiler.ts +31 -190
  78. package/src/compiler/index.ts +1 -1
  79. package/src/components/DetailsPanel.tsx +218 -0
  80. package/src/components/ScriptBlock/FrameContainer/FrameContainer.tsx +2 -2
  81. package/src/components/ScriptBlock/ScriptBlock.stories.tsx +1 -1
  82. package/src/components/ScriptBlock/ScriptBlock.tsx +10 -7
  83. package/src/components/ScriptBlock/Splitter/Splitter.stories.tsx +1 -1
  84. package/src/components/ScriptEditor.tsx +71 -13
  85. package/src/components/Toolbar.stories.tsx +1 -1
  86. package/src/components/Toolbar.tsx +69 -91
  87. package/src/components/TypescriptEditor.stories.tsx +1 -1
  88. package/src/components/TypescriptEditor.tsx +18 -4
  89. package/src/data/templates.md.ts +44 -0
  90. package/src/edge/functions.ts +9 -2
  91. package/src/index.ts +1 -0
  92. package/src/translations.ts +4 -3
  93. package/dist/lib/browser/ScriptEditor-7XICKICQ.mjs +0 -241
  94. package/dist/lib/browser/ScriptEditor-7XICKICQ.mjs.map +0 -7
  95. package/dist/lib/browser/chunk-D4O723CR.mjs.map +0 -7
  96. package/dist/lib/node/ScriptEditor-M7KZ2CRS.cjs +0 -258
  97. package/dist/lib/node/ScriptEditor-M7KZ2CRS.cjs.map +0 -7
  98. package/dist/lib/node/chunk-ITLHJMWP.cjs.map +0 -7
  99. package/dist/types/src/compiler/compiler.test.d.ts +0 -2
  100. package/dist/types/src/compiler/compiler.test.d.ts.map +0 -1
  101. package/src/compiler/compiler.test.ts +0 -17
  102. /package/dist/lib/browser/{TypescriptEditor-PIRIDDUS.mjs.map → TypescriptEditor-XTGRVCMY.mjs.map} +0 -0
@@ -0,0 +1,465 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var ScriptEditor_RR7AVOQL_exports = {};
30
+ __export(ScriptEditor_RR7AVOQL_exports, {
31
+ ScriptEditor: () => ScriptEditor,
32
+ default: () => ScriptEditor_default
33
+ });
34
+ module.exports = __toCommonJS(ScriptEditor_RR7AVOQL_exports);
35
+ var import_chunk_PFH3ROEH = require("./chunk-PFH3ROEH.cjs");
36
+ var import_chunk_4GTXIELQ = require("./chunk-4GTXIELQ.cjs");
37
+ var import_chunk_VW2POILW = require("./chunk-VW2POILW.cjs");
38
+ var import_chunk_4VMNBXWU = require("./chunk-4VMNBXWU.cjs");
39
+ var import_chunk_RXI576K3 = require("./chunk-RXI576K3.cjs");
40
+ var import_prettier = require("prettier");
41
+ var import_estree = __toESM(require("prettier/plugins/estree"));
42
+ var import_typescript = __toESM(require("prettier/plugins/typescript"));
43
+ var import_react = __toESM(require("react"));
44
+ var import_log = require("@dxos/log");
45
+ var import_react_client = require("@dxos/react-client");
46
+ var import_echo = require("@dxos/react-client/echo");
47
+ var import_halo = require("@dxos/react-client/halo");
48
+ var import_react_ui = require("@dxos/react-ui");
49
+ var import_react_ui_editor = require("@dxos/react-ui-editor");
50
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
51
+ var import_react2 = __toESM(require("react"));
52
+ var import_log2 = require("@dxos/log");
53
+ var import_react_ui2 = require("@dxos/react-ui");
54
+ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
55
+ var import_react3 = require("@phosphor-icons/react");
56
+ var import_react4 = __toESM(require("react"));
57
+ var import_react_ui3 = require("@dxos/react-ui");
58
+ var import_react_ui_theme3 = require("@dxos/react-ui-theme");
59
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DetailsPanel.tsx";
60
+ var DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }) => {
61
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_4VMNBXWU.SCRIPT_PLUGIN);
62
+ const bindingInputRef = (0, import_react2.useRef)(null);
63
+ const [binding, setBinding] = (0, import_react_ui2.useControlledValue)(_binding ?? "");
64
+ const handleBlur = () => {
65
+ onBindingChange?.(binding);
66
+ };
67
+ const inputRef = (0, import_react2.useRef)(null);
68
+ const [input, setInput] = (0, import_react2.useState)("");
69
+ const [result, setResult] = (0, import_react2.useState)("");
70
+ const resultRef = (0, import_react_ui2.useDynamicRef)(result);
71
+ const [state, setState] = (0, import_react2.useState)(null);
72
+ const [history, setHistory] = (0, import_react2.useState)([]);
73
+ const scrollerRef = (0, import_react2.useRef)(null);
74
+ const handleScroll = () => {
75
+ if (scrollerRef.current) {
76
+ scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;
77
+ }
78
+ };
79
+ const controller = (0, import_react2.useRef)();
80
+ (0, import_react2.useEffect)(() => {
81
+ return () => {
82
+ handleStop();
83
+ };
84
+ }, []);
85
+ const handleStop = () => {
86
+ controller.current?.abort("stop");
87
+ controller.current = void 0;
88
+ };
89
+ const handleClear = () => {
90
+ handleStop();
91
+ setInput("");
92
+ setResult("");
93
+ setHistory([]);
94
+ inputRef.current?.focus();
95
+ };
96
+ const handleDone = () => {
97
+ controller.current = void 0;
98
+ setHistory((history2) => [
99
+ ...history2,
100
+ {
101
+ type: "response",
102
+ text: resultRef.current
103
+ }
104
+ ]);
105
+ setResult("");
106
+ setState(null);
107
+ handleScroll();
108
+ };
109
+ const handleRun = async (input2) => {
110
+ if (input2.trim().length === 0) {
111
+ inputRef.current?.focus();
112
+ return;
113
+ }
114
+ setHistory((history2) => [
115
+ ...history2,
116
+ {
117
+ type: "request",
118
+ text: input2
119
+ }
120
+ ]);
121
+ setInput("");
122
+ setResult("");
123
+ try {
124
+ setState("pending");
125
+ controller.current = new AbortController();
126
+ const response = await fetch(functionUrl, {
127
+ signal: controller.current.signal,
128
+ method: "POST",
129
+ body: input2
130
+ });
131
+ if (!response.ok) {
132
+ setState(null);
133
+ return;
134
+ }
135
+ setState("responding");
136
+ const reader = response.body.getReader();
137
+ const pump = async ({ done, value }) => {
138
+ setResult((result2) => result2 + new TextDecoder().decode(value));
139
+ handleScroll();
140
+ if (!controller.current || done) {
141
+ handleDone();
142
+ return;
143
+ }
144
+ return reader.read().then(pump);
145
+ };
146
+ void reader.read().then(pump).catch((err) => {
147
+ if (err.name !== "AbortError") {
148
+ import_log2.log.catch(err, void 0, {
149
+ F: __dxlog_file,
150
+ L: 133,
151
+ S: void 0,
152
+ C: (f, a) => f(...a)
153
+ });
154
+ }
155
+ });
156
+ } catch (err) {
157
+ setState(null);
158
+ if (err !== "stop") {
159
+ import_log2.log.catch(err, void 0, {
160
+ F: __dxlog_file,
161
+ L: 139,
162
+ S: void 0,
163
+ C: (f, a) => f(...a)
164
+ });
165
+ }
166
+ }
167
+ };
168
+ return /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.DensityProvider, {
169
+ density: "fine"
170
+ }, /* @__PURE__ */ import_react2.default.createElement("div", {
171
+ className: (0, import_react_ui_theme2.mx)("flex flex-col h-full overflow-hidden", classNames)
172
+ }, /* @__PURE__ */ import_react2.default.createElement("div", {
173
+ ref: scrollerRef,
174
+ className: "flex flex-col gap-6 h-full p-4 overflow-x-hidden overflow-y-auto"
175
+ }, /* @__PURE__ */ import_react2.default.createElement(MessageThread, {
176
+ state,
177
+ result,
178
+ history
179
+ })), /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Toolbar.Root, {
180
+ classNames: "p-2"
181
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.TextInput, {
182
+ ref: inputRef,
183
+ autoFocus: true,
184
+ placeholder: t("function request placeholder"),
185
+ value: input,
186
+ onChange: (ev) => setInput(ev.target.value),
187
+ onKeyDown: (ev) => ev.key === "Enter" && handleRun(input)
188
+ })), /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.TextInput, {
189
+ ref: bindingInputRef,
190
+ classNames: "!w-[10rem]",
191
+ placeholder: t("binding placeholder"),
192
+ value: binding,
193
+ onChange: (ev) => setBinding(ev.target.value.toUpperCase()),
194
+ onBlur: handleBlur
195
+ })), /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Toolbar.Button, {
196
+ onClick: () => handleRun(input)
197
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Icon, {
198
+ icon: "ph--play--regular",
199
+ size: 4
200
+ })), /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Toolbar.Button, {
201
+ onClick: () => state ? handleStop() : handleClear()
202
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Icon, {
203
+ icon: state ? "ph--stop--regular" : "ph--trash--regular",
204
+ size: 4
205
+ })))));
206
+ };
207
+ var RobotAvatar = () => /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Avatar.Root, {
208
+ size: 6,
209
+ variant: "circle"
210
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Avatar.Frame, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Avatar.Icon, {
211
+ icon: "ph--robot--regular"
212
+ })));
213
+ var MessageThread = ({ state, result, history }) => {
214
+ return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, history.map(({ type, text }, i) => /* @__PURE__ */ import_react2.default.createElement("div", {
215
+ key: i,
216
+ className: "grid grid-cols-[3rem_1fr]"
217
+ }, /* @__PURE__ */ import_react2.default.createElement("div", null, type === "response" && /* @__PURE__ */ import_react2.default.createElement(RobotAvatar, null)), /* @__PURE__ */ import_react2.default.createElement("div", {
218
+ className: (0, import_react_ui_theme2.mx)("flex", type === "request" && "justify-end")
219
+ }, /* @__PURE__ */ import_react2.default.createElement("span", {
220
+ className: (0, import_react_ui_theme2.mx)(type === "request" && "p-1 px-2 rounded-lg bg-hoverSurface")
221
+ }, text)))), /* @__PURE__ */ import_react2.default.createElement("div", {
222
+ className: "grid grid-cols-[3rem_1fr]"
223
+ }, /* @__PURE__ */ import_react2.default.createElement("div", null, state === "pending" && /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Icon, {
224
+ icon: "ph--spinner--regular",
225
+ size: 6,
226
+ classNames: "animate-spin-slow"
227
+ }) || result.length > 0 && /* @__PURE__ */ import_react2.default.createElement(RobotAvatar, null)), /* @__PURE__ */ import_react2.default.createElement("div", null, /* @__PURE__ */ import_react2.default.createElement("span", null, result))));
228
+ };
229
+ var Toolbar2 = ({ classNames, deployed, error, functionUrl, showPanel, onDeploy, onFormat, onTogglePanel }) => {
230
+ const { t } = (0, import_react_ui3.useTranslation)(import_chunk_4VMNBXWU.SCRIPT_PLUGIN);
231
+ const [pending, setPending] = (0, import_react4.useState)(false);
232
+ const handleCopyLink = async () => {
233
+ if (!functionUrl) {
234
+ return;
235
+ }
236
+ await navigator.clipboard.writeText(functionUrl);
237
+ };
238
+ const handleDeploy = async () => {
239
+ setPending(true);
240
+ await onDeploy?.();
241
+ setPending(false);
242
+ };
243
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.DensityProvider, {
244
+ density: "fine"
245
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.ElevationProvider, {
246
+ elevation: "chrome"
247
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Root, {
248
+ classNames: [
249
+ "p-1",
250
+ classNames
251
+ ],
252
+ style: {
253
+ contain: "layout"
254
+ }
255
+ }, onFormat && /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, {
256
+ asChild: true
257
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Button, {
258
+ variant: "ghost",
259
+ onClick: onFormat
260
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react3.MagicWand, {
261
+ className: (0, import_react_ui_theme3.getSize)(4)
262
+ }))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Arrow, null), t("format label")))), /* @__PURE__ */ import_react4.default.createElement("div", {
263
+ role: "separator",
264
+ className: "grow"
265
+ }), functionUrl && /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, {
266
+ asChild: true
267
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Button, {
268
+ variant: "ghost",
269
+ onClick: handleCopyLink
270
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react3.Link, {
271
+ className: (0, import_react_ui_theme3.getSize)(4)
272
+ }))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Arrow, null), t("copy link label")))), error ? /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, null, /* @__PURE__ */ import_react4.default.createElement(import_react3.WarningCircle, {
273
+ className: (0, import_react_ui_theme3.getSize)(4)
274
+ })), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Arrow, null), error))) : deployed ? /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, null, /* @__PURE__ */ import_react4.default.createElement(import_react3.Checks, {
275
+ className: (0, import_react_ui_theme3.getSize)(4)
276
+ })), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Arrow, null), t("deployed label")))) : null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, {
277
+ asChild: true
278
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Button, {
279
+ variant: "ghost",
280
+ onClick: handleDeploy,
281
+ disabled: pending
282
+ }, pending ? /* @__PURE__ */ import_react4.default.createElement(import_react3.CircleNotch, {
283
+ className: (0, import_react_ui_theme3.mx)("spinner", (0, import_react_ui_theme3.getSize)(4))
284
+ }) : /* @__PURE__ */ import_react4.default.createElement(import_react3.UploadSimple, {
285
+ className: (0, import_react_ui_theme3.getSize)(4)
286
+ }))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Arrow, null), pending ? t("pending label") : t("deploy label")))), onTogglePanel && /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Trigger, {
287
+ asChild: true
288
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Button, {
289
+ variant: "ghost",
290
+ onClick: onTogglePanel
291
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
292
+ icon: showPanel ? "ph--caret-up--regular" : "ph--caret-down--regular",
293
+ size: 4
294
+ }))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Tooltip.Arrow, null), t("toggle details label")))))));
295
+ };
296
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx";
297
+ var ScriptEditor = ({ env, script, role }) => {
298
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_4VMNBXWU.SCRIPT_PLUGIN);
299
+ const client = (0, import_react_client.useClient)();
300
+ const identity = (0, import_halo.useIdentity)();
301
+ const space = (0, import_echo.getSpace)(script);
302
+ const [fn] = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_chunk_VW2POILW.FunctionType, (fn2) => fn2.source === script));
303
+ const extensions = (0, import_react.useMemo)(() => [
304
+ (0, import_react_ui_editor.listener)({
305
+ onChange: (text) => {
306
+ if (script.source && script.source?.content !== text) {
307
+ script.changed = true;
308
+ }
309
+ }
310
+ }),
311
+ (0, import_react_ui_editor.createDataExtensions)({
312
+ id: script.id,
313
+ text: script.source && (0, import_echo.createDocAccessor)(script.source, [
314
+ "content"
315
+ ]),
316
+ space,
317
+ identity
318
+ })
319
+ ], [
320
+ script,
321
+ script.source,
322
+ space,
323
+ identity
324
+ ]);
325
+ const [showPanel, setShowPanel] = (0, import_react.useState)(false);
326
+ const initialValue = (0, import_react.useMemo)(() => script.source?.content, [
327
+ script.source
328
+ ]);
329
+ const existingFunctionUrl = fn && (0, import_chunk_PFH3ROEH.getUserFunctionUrlInMetadata)((0, import_echo.getMeta)(fn));
330
+ const [error, setError] = (0, import_react.useState)();
331
+ const handleBindingChange = (0, import_react.useCallback)((binding) => {
332
+ fn.binding = binding;
333
+ }, [
334
+ fn
335
+ ]);
336
+ const handleFormat = (0, import_react.useCallback)(async () => {
337
+ if (!script.source) {
338
+ return;
339
+ }
340
+ try {
341
+ script.source.content = await (0, import_prettier.format)(script.source.content, {
342
+ parser: "typescript",
343
+ plugins: [
344
+ import_estree.default,
345
+ import_typescript.default
346
+ ],
347
+ semi: true,
348
+ singleQuote: true
349
+ });
350
+ } catch (err) {
351
+ import_log.log.catch(err, void 0, {
352
+ F: __dxlog_file2,
353
+ L: 92,
354
+ S: void 0,
355
+ C: (f, a) => f(...a)
356
+ });
357
+ }
358
+ }, [
359
+ script.source
360
+ ]);
361
+ const handleDeploy = (0, import_react.useCallback)(async () => {
362
+ if (!script.source || !identity || !space) {
363
+ return;
364
+ }
365
+ setError(void 0);
366
+ try {
367
+ const existingFunctionId = existingFunctionUrl?.split("/").at(-1);
368
+ const ownerDid = existingFunctionUrl?.split("/").at(-2) ?? (0, import_chunk_PFH3ROEH.publicKeyToDid)(identity.identityKey);
369
+ const bundler = new import_chunk_4GTXIELQ.Bundler({
370
+ platform: "browser",
371
+ sandboxedModules: [],
372
+ remoteModules: {}
373
+ });
374
+ const buildResult = await bundler.bundle(script.source.content);
375
+ if (buildResult.error || !buildResult.bundle) {
376
+ throw buildResult.error;
377
+ }
378
+ const { result, functionId, functionVersionNumber, errorMessage } = await (0, import_chunk_PFH3ROEH.uploadWorkerFunction)({
379
+ clientConfig: client.config,
380
+ halo: client.halo,
381
+ ownerDid,
382
+ functionId: existingFunctionId,
383
+ source: buildResult.bundle
384
+ });
385
+ if (result !== "success" || functionId === void 0 || functionVersionNumber === void 0) {
386
+ throw new Error(errorMessage);
387
+ }
388
+ import_log.log.info("function uploaded", {
389
+ functionId,
390
+ functionVersionNumber
391
+ }, {
392
+ F: __dxlog_file2,
393
+ L: 127,
394
+ S: void 0,
395
+ C: (f, a) => f(...a)
396
+ });
397
+ if (fn) {
398
+ fn.version = functionVersionNumber;
399
+ }
400
+ const deployedFunction = fn ?? space.db.add((0, import_echo.create)(import_chunk_VW2POILW.FunctionType, {
401
+ version: functionVersionNumber,
402
+ source: script
403
+ }));
404
+ const meta = (0, import_echo.getMeta)(deployedFunction);
405
+ (0, import_chunk_PFH3ROEH.setUserFunctionUrlInMetadata)(meta, `/${ownerDid}/${functionId}`);
406
+ script.changed = false;
407
+ } catch (err) {
408
+ import_log.log.catch(err, void 0, {
409
+ F: __dxlog_file2,
410
+ L: 137,
411
+ S: void 0,
412
+ C: (f, a) => f(...a)
413
+ });
414
+ setError(t("upload failed label"));
415
+ }
416
+ }, [
417
+ fn,
418
+ existingFunctionUrl,
419
+ script,
420
+ script.name,
421
+ script.source
422
+ ]);
423
+ const functionUrl = (0, import_react.useMemo)(() => {
424
+ if (!existingFunctionUrl) {
425
+ return;
426
+ }
427
+ const baseUrl = new URL("functions/", client.config.values.runtime?.services?.edge?.url);
428
+ const relativeUrl = existingFunctionUrl.replace(/^\//, "");
429
+ const url = new URL(`./${relativeUrl}`, baseUrl.toString());
430
+ space && url.searchParams.set("spaceId", space.id);
431
+ url.protocol = "https";
432
+ return url.toString();
433
+ }, [
434
+ existingFunctionUrl,
435
+ space
436
+ ]);
437
+ return /* @__PURE__ */ import_react.default.createElement("div", {
438
+ role: "none",
439
+ className: (0, import_react_ui_theme.mx)(role === "article" && "row-span-2", "flex flex-col is-full bs-full overflow-hidden")
440
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_RXI576K3.TypescriptEditor, {
441
+ id: script.id,
442
+ env,
443
+ initialValue,
444
+ extensions,
445
+ className: "flex is-full bs-full overflow-hidden border-b border-separator"
446
+ }), /* @__PURE__ */ import_react.default.createElement(Toolbar2, {
447
+ deployed: Boolean(existingFunctionUrl) && !script.changed,
448
+ functionUrl,
449
+ error,
450
+ showPanel,
451
+ onDeploy: handleDeploy,
452
+ onFormat: handleFormat,
453
+ onTogglePanel: async () => setShowPanel((showDetails) => !showDetails)
454
+ }), showPanel && /* @__PURE__ */ import_react.default.createElement(DetailsPanel, {
455
+ functionUrl,
456
+ binding: fn?.binding,
457
+ onBindingChange: handleBindingChange
458
+ }));
459
+ };
460
+ var ScriptEditor_default = ScriptEditor;
461
+ // Annotate the CommonJS export names for ESM import in node:
462
+ 0 && (module.exports = {
463
+ ScriptEditor
464
+ });
465
+ //# sourceMappingURL=ScriptEditor-RR7AVOQL.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ScriptEditor.tsx", "../../../src/components/DetailsPanel.tsx", "../../../src/components/Toolbar.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DetailsPanel } from './DetailsPanel';\nimport { Toolbar } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = {\n script: ScriptType;\n role?: string;\n} & Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ env, script, role }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n const [fn] = useQuery(\n space,\n Filter.schema(FunctionType, (fn) => fn.source === script),\n );\n\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source && script.source?.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source && createDocAccessor(script.source, ['content']),\n space,\n identity,\n }),\n ],\n [script, script.source, space, identity],\n );\n\n const [showPanel, setShowPanel] = useState(false);\n const initialValue = useMemo(() => script.source?.content, [script.source]);\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n const [error, setError] = useState<string>();\n\n const handleBindingChange = useCallback(\n (binding: string) => {\n fn.binding = binding;\n },\n [fn],\n );\n\n const handleFormat = useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.content = await format(script.source.content, {\n parser: 'typescript',\n plugins: [prettierPluginEstree, prettierPluginTypescript],\n semi: true,\n singleQuote: true,\n });\n } catch (err: any) {\n // TODO(wittjosiah): Show error in UI.\n log.catch(err);\n }\n }, [script.source]);\n\n const handleDeploy = useCallback(async () => {\n if (!script.source || !identity || !space) {\n return;\n }\n\n setError(undefined);\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n const ownerDid = (existingFunctionUrl?.split('/').at(-2) as DID) ?? publicKeyToDid(identity.identityKey);\n\n const bundler = new Bundler({\n platform: 'browser',\n sandboxedModules: [],\n remoteModules: {},\n });\n const buildResult = await bundler.bundle(script.source.content);\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { result, functionId, functionVersionNumber, errorMessage } = await uploadWorkerFunction({\n clientConfig: client.config,\n halo: client.halo,\n ownerDid,\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (result !== 'success' || functionId === undefined || functionVersionNumber === undefined) {\n throw new Error(errorMessage);\n }\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n script.changed = false;\n } catch (err: any) {\n log.catch(err);\n setError(t('upload failed label'));\n }\n }, [fn, existingFunctionUrl, script, script.name, script.source]);\n\n const functionUrl = useMemo(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n const baseUrl = new URL('functions/', client.config.values.runtime?.services?.edge?.url);\n\n // Leading slashes cause the URL to be treated as an absolute path.\n const relativeUrl = existingFunctionUrl.replace(/^\\//, '');\n const url = new URL(`./${relativeUrl}`, baseUrl.toString());\n space && url.searchParams.set('spaceId', space.id);\n url.protocol = 'https';\n return url.toString();\n }, [existingFunctionUrl, space]);\n\n return (\n <div\n role='none'\n className={mx(role === 'article' && 'row-span-2', 'flex flex-col is-full bs-full overflow-hidden')}\n >\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden border-b border-separator'\n />\n\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n showPanel={showPanel}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onTogglePanel={async () => setShowPanel((showDetails) => !showDetails)}\n />\n\n {showPanel && (\n <DetailsPanel functionUrl={functionUrl} binding={fn?.binding} onBindingChange={handleBindingChange} />\n )}\n </div>\n );\n};\n\nexport default ScriptEditor;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport {\n Avatar,\n DensityProvider,\n Icon,\n Input,\n type ThemedClassName,\n Toolbar,\n useControlledValue,\n useDynamicRef,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\ntype State = 'pending' | 'responding';\n\ntype Item = { type: 'request' | 'response'; text: string };\n\nexport type DetailsPanelProps = ThemedClassName<{\n functionUrl?: string;\n binding?: string;\n onBindingChange?: (binding: string) => void;\n}>;\n\nexport const DetailsPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange }: DetailsPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n const bindingInputRef = useRef<HTMLInputElement>(null);\n const [binding, setBinding] = useControlledValue(_binding ?? '');\n const handleBlur = () => {\n onBindingChange?.(binding);\n };\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [input, setInput] = useState('');\n const [result, setResult] = useState('');\n const resultRef = useDynamicRef(result);\n const [state, setState] = useState<State | null>(null);\n\n // TODO(burdon): Persistent history (non-space ECHO data?)\n const [history, setHistory] = useState<Item[]>([]);\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n const handleScroll = () => {\n if (scrollerRef.current) {\n scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;\n }\n };\n\n const controller = useRef<AbortController>();\n useEffect(() => {\n return () => {\n handleStop();\n };\n }, []);\n\n const handleStop = () => {\n controller.current?.abort('stop');\n controller.current = undefined;\n };\n\n // TODO(burdon): Halt streaming request?\n const handleClear = () => {\n handleStop();\n setInput('');\n setResult('');\n setHistory([]);\n inputRef.current?.focus();\n };\n\n const handleDone = () => {\n controller.current = undefined;\n setHistory((history) => [...history, { type: 'response', text: resultRef.current }]);\n setResult('');\n setState(null);\n handleScroll();\n };\n\n const handleRun = async (input: string) => {\n if (input.trim().length === 0) {\n inputRef.current?.focus();\n return;\n }\n\n setHistory((history) => [...history, { type: 'request', text: input }]);\n setInput('');\n setResult('');\n\n // Returns a promise that resolves when a value has been received.\n try {\n setState('pending');\n\n // Throws DOMException when aborted.\n controller.current = new AbortController();\n const response = await fetch(functionUrl!, {\n signal: controller.current.signal,\n method: 'POST',\n body: input,\n });\n\n // TODO(burdon): Error handling.\n if (!response.ok) {\n setState(null);\n return;\n }\n\n setState('responding');\n const reader = response.body!.getReader();\n const pump = async ({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> => {\n setResult((result) => result + new TextDecoder().decode(value));\n handleScroll();\n if (!controller.current || done) {\n handleDone();\n return;\n }\n\n return reader.read().then(pump);\n };\n\n void reader\n .read()\n .then(pump)\n .catch((err) => {\n if (err.name !== 'AbortError') {\n log.catch(err);\n }\n });\n } catch (err) {\n setState(null);\n if (err !== 'stop') {\n log.catch(err);\n }\n }\n };\n\n return (\n <DensityProvider density='fine'>\n <div className={mx('flex flex-col h-full overflow-hidden', classNames)}>\n {/* TODO(burdon): Replace with Thread? */}\n <div ref={scrollerRef} className='flex flex-col gap-6 h-full p-4 overflow-x-hidden overflow-y-auto'>\n <MessageThread state={state} result={result} history={history} />\n </div>\n\n <Toolbar.Root classNames='p-2'>\n <Input.Root>\n <Input.TextInput\n ref={inputRef}\n autoFocus\n placeholder={t('function request placeholder')}\n value={input}\n onChange={(ev) => setInput(ev.target.value)}\n onKeyDown={(ev) => ev.key === 'Enter' && handleRun(input)}\n />\n </Input.Root>\n <Input.Root>\n <Input.TextInput\n ref={bindingInputRef}\n classNames='!w-[10rem]'\n placeholder={t('binding placeholder')}\n value={binding}\n onChange={(ev) => setBinding(ev.target.value.toUpperCase())}\n onBlur={handleBlur}\n />\n </Input.Root>\n <Toolbar.Button onClick={() => handleRun(input)}>\n <Icon icon='ph--play--regular' size={4} />\n </Toolbar.Button>\n <Toolbar.Button onClick={() => (state ? handleStop() : handleClear())}>\n <Icon icon={state ? 'ph--stop--regular' : 'ph--trash--regular'} size={4} />\n </Toolbar.Button>\n </Toolbar.Root>\n </div>\n </DensityProvider>\n );\n};\n\nconst RobotAvatar = () => (\n <Avatar.Root size={6} variant='circle'>\n <Avatar.Frame>\n <Avatar.Icon icon='ph--robot--regular' />\n </Avatar.Frame>\n </Avatar.Root>\n);\n\n// TODO(burdon): Replace with thread.\n// TODO(burdon): Delete individual messages.\n// TODO(burdon): Re-run question.\nconst MessageThread = ({ state, result, history }: { state: State | null; result: string; history: Item[] }) => {\n return (\n <>\n {history.map(({ type, text }, i) => (\n <div key={i} className='grid grid-cols-[3rem_1fr]'>\n <div>{type === 'response' && <RobotAvatar />}</div>\n <div className={mx('flex', type === 'request' && 'justify-end')}>\n <span className={mx(type === 'request' && 'p-1 px-2 rounded-lg bg-hoverSurface')}>{text}</span>\n </div>\n </div>\n ))}\n <div className='grid grid-cols-[3rem_1fr]'>\n <div>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin-slow' />) ||\n (result.length > 0 && <RobotAvatar />)}\n </div>\n <div>\n <span>{result}</span>\n </div>\n </div>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Checks, CircleNotch, Link, MagicWand, UploadSimple, WarningCircle } from '@phosphor-icons/react';\nimport React, { useState } from 'react';\n\nimport {\n DensityProvider,\n ElevationProvider,\n Icon,\n type ThemedClassName,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type ToolbarProps = ThemedClassName<{\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n showPanel?: boolean;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n onTogglePanel?: () => Promise<void>;\n}>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n showPanel,\n onDeploy,\n onFormat,\n onTogglePanel,\n}: ToolbarProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const [pending, setPending] = useState(false);\n\n const handleCopyLink = async () => {\n if (!functionUrl) {\n return;\n }\n\n await navigator.clipboard.writeText(functionUrl);\n };\n\n const handleDeploy = async () => {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <DensityProvider density='fine'>\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {onFormat && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onFormat}>\n <MagicWand className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('format label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n\n <div role='separator' className='grow' />\n\n {functionUrl && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleCopyLink}>\n <Link className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('copy link label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n\n {/* TODO(wittjosiah): Better treatment for status indicators in toolbar? */}\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <WarningCircle className={getSize(4)} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {error}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : deployed ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Checks className={getSize(4)} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('deployed label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : null}\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleDeploy} disabled={pending}>\n {pending ? (\n <CircleNotch className={mx('spinner', getSize(4))} />\n ) : (\n <UploadSimple className={getSize(4)} />\n )}\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {pending ? t('pending label') : t('deploy label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {onTogglePanel && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onTogglePanel}>\n <Icon icon={showPanel ? 'ph--caret-up--regular' : 'ph--caret-down--regular'} size={4} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('toggle details label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </NaturalToolbar.Root>\n </ElevationProvider>\n </DensityProvider>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_log", "import_react_ui", "import_react_ui_theme", "DetailsPanel", "classNames", "functionUrl", "binding", "_binding", "onBindingChange", "t", "useTranslation", "SCRIPT_PLUGIN", "bindingInputRef", "useRef", "setBinding", "useControlledValue", "handleBlur", "inputRef", "input", "setInput", "useState", "result", "setResult", "resultRef", "useDynamicRef", "state", "setState", "history", "setHistory", "scrollerRef", "handleScroll", "current", "scrollTop", "scrollHeight", "controller", "useEffect", "handleStop", "abort", "undefined", "handleClear", "focus", "handleDone", "type", "text", "handleRun", "trim", "length", "AbortController", "response", "fetch", "signal", "method", "body", "ok", "reader", "getReader", "pump", "done", "value", "TextDecoder", "decode", "read", "then", "catch", "err", "name", "log", "React", "DensityProvider", "density", "div", "className", "mx", "ref", "MessageThread", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "toUpperCase", "onBlur", "Button", "onClick", "Icon", "icon", "size", "RobotAvatar", "Avatar", "variant", "Frame", "map", "i", "span", "deployed", "error", "showPanel", "onDeploy", "onFormat", "onTogglePanel", "pending", "setPending", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "ElevationProvider", "elevation", "NaturalToolbar", "style", "contain", "Tooltip", "Trigger", "asChild", "MagicWand", "getSize", "Portal", "Content", "Arrow", "role", "Link", "WarningCircle", "Checks", "disabled", "CircleNotch", "UploadSimple", "ScriptEditor", "env", "script", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "extensions", "useMemo", "listener", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "setShowPanel", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "setError", "handleBindingChange", "useCallback", "handleFormat", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "baseUrl", "URL", "values", "runtime", "services", "edge", "url", "relativeUrl", "replace", "toString", "searchParams", "set", "protocol", "TypescriptEditor", "Boolean", "showDetails"]
7
+ }
@@ -16,15 +16,15 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var TypescriptEditor_OTWJUIWB_exports = {};
20
- __export(TypescriptEditor_OTWJUIWB_exports, {
21
- TypescriptEditor: () => import_chunk_ITLHJMWP.TypescriptEditor,
22
- default: () => import_chunk_ITLHJMWP.TypescriptEditor_default
19
+ var TypescriptEditor_CRONCQSI_exports = {};
20
+ __export(TypescriptEditor_CRONCQSI_exports, {
21
+ TypescriptEditor: () => import_chunk_RXI576K3.TypescriptEditor,
22
+ default: () => import_chunk_RXI576K3.TypescriptEditor_default
23
23
  });
24
- module.exports = __toCommonJS(TypescriptEditor_OTWJUIWB_exports);
25
- var import_chunk_ITLHJMWP = require("./chunk-ITLHJMWP.cjs");
24
+ module.exports = __toCommonJS(TypescriptEditor_CRONCQSI_exports);
25
+ var import_chunk_RXI576K3 = require("./chunk-RXI576K3.cjs");
26
26
  // Annotate the CommonJS export names for ESM import in node:
27
27
  0 && (module.exports = {
28
28
  TypescriptEditor
29
29
  });
30
- //# sourceMappingURL=TypescriptEditor-OTWJUIWB.cjs.map
30
+ //# sourceMappingURL=TypescriptEditor-CRONCQSI.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["TypescriptEditor-OTWJUIWB.cjs"],
4
- "sourcesContent": ["import {\n TypescriptEditor,\n TypescriptEditor_default\n} from \"./chunk-ITLHJMWP.cjs\";\nexport {\n TypescriptEditor,\n TypescriptEditor_default as default\n};\n//# sourceMappingURL=TypescriptEditor-OTWJUIWB.cjs.map\n"],
3
+ "sources": ["TypescriptEditor-CRONCQSI.cjs"],
4
+ "sourcesContent": ["import {\n TypescriptEditor,\n TypescriptEditor_default\n} from \"./chunk-RXI576K3.cjs\";\nexport {\n TypescriptEditor,\n TypescriptEditor_default as default\n};\n//# sourceMappingURL=TypescriptEditor-CRONCQSI.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAGO;",
6
6
  "names": []
7
7
  }