@dxos/plugin-script 0.7.5-staging.e6154f3 → 0.8.1-main.303c73a

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 (123) hide show
  1. package/dist/lib/browser/{ScriptContainer-3RFMYKTV.mjs → ScriptContainer-QGF55ZZJ.mjs} +12 -10
  2. package/dist/lib/browser/ScriptContainer-QGF55ZZJ.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-N46LE7FS.mjs → chunk-2H6QBQ5Q.mjs} +2 -2
  4. package/dist/lib/browser/{chunk-N46LE7FS.mjs.map → chunk-2H6QBQ5Q.mjs.map} +1 -1
  5. package/dist/lib/browser/chunk-35UHX7XH.mjs +467 -0
  6. package/dist/lib/browser/chunk-35UHX7XH.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-PZPYF7M4.mjs → chunk-LYOFJ3FM.mjs} +3 -3
  8. package/dist/lib/browser/chunk-LYOFJ3FM.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-G2FYNDU4.mjs → chunk-THELDT6E.mjs} +74 -7
  10. package/dist/lib/browser/chunk-THELDT6E.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +11 -10
  12. package/dist/lib/browser/index.mjs.map +2 -2
  13. package/dist/lib/browser/{intent-resolver-D6FPY5ZA.mjs → intent-resolver-NWAKTBZC.mjs} +3 -3
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/{react-surface-G4C2PZ2K.mjs → react-surface-6CYOO66B.mjs} +5 -7
  16. package/dist/lib/browser/{react-surface-G4C2PZ2K.mjs.map → react-surface-6CYOO66B.mjs.map} +1 -1
  17. package/dist/lib/browser/{settings-SZCDKHWO.mjs → settings-LRHZSUEJ.mjs} +2 -2
  18. package/dist/lib/browser/types.mjs +1 -1
  19. package/dist/lib/node/{ScriptContainer-G6FZU4AM.cjs → ScriptContainer-XSYHQ4MZ.cjs} +21 -18
  20. package/dist/lib/node/ScriptContainer-XSYHQ4MZ.cjs.map +7 -0
  21. package/dist/lib/node/{chunk-DJGLGRQV.cjs → chunk-3ICET6JB.cjs} +6 -6
  22. package/dist/lib/node/chunk-3ICET6JB.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-XKYJYY3T.cjs → chunk-DA6RBNFV.cjs} +77 -11
  24. package/dist/lib/node/chunk-DA6RBNFV.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-ITAJ3WRW.cjs → chunk-QYIAUPWY.cjs} +6 -6
  26. package/dist/lib/node/chunk-QYIAUPWY.cjs.map +7 -0
  27. package/dist/lib/node/chunk-RGHRAT2U.cjs +493 -0
  28. package/dist/lib/node/chunk-RGHRAT2U.cjs.map +7 -0
  29. package/dist/lib/node/index.cjs +16 -15
  30. package/dist/lib/node/index.cjs.map +2 -2
  31. package/dist/lib/node/{intent-resolver-NYJFPD5B.cjs → intent-resolver-WZVIHKA7.cjs} +8 -8
  32. package/dist/lib/node/meta.json +1 -1
  33. package/dist/lib/node/{react-surface-EGSE3FMN.cjs → react-surface-I7V6DSYF.cjs} +13 -14
  34. package/dist/lib/node/{react-surface-EGSE3FMN.cjs.map → react-surface-I7V6DSYF.cjs.map} +1 -1
  35. package/dist/lib/node/{settings-SZFSMSKM.cjs → settings-TR2CA4IH.cjs} +7 -7
  36. package/dist/lib/node/types.cjs +3 -3
  37. package/dist/lib/node/types.cjs.map +1 -1
  38. package/dist/lib/node-esm/{ScriptContainer-7FTCFIF3.mjs → ScriptContainer-5OTO5SJM.mjs} +12 -10
  39. package/dist/lib/node-esm/ScriptContainer-5OTO5SJM.mjs.map +7 -0
  40. package/dist/lib/node-esm/{chunk-YIWRJ25J.mjs → chunk-2D6G2Y2O.mjs} +3 -3
  41. package/dist/lib/node-esm/chunk-2D6G2Y2O.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-NRICF4KE.mjs → chunk-34AL6Y3D.mjs} +74 -7
  43. package/dist/lib/node-esm/chunk-34AL6Y3D.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-UNQFIERE.mjs → chunk-N52CCVF5.mjs} +2 -2
  45. package/dist/lib/node-esm/{chunk-UNQFIERE.mjs.map → chunk-N52CCVF5.mjs.map} +1 -1
  46. package/dist/lib/node-esm/chunk-YSOCSUGC.mjs +468 -0
  47. package/dist/lib/node-esm/chunk-YSOCSUGC.mjs.map +7 -0
  48. package/dist/lib/node-esm/index.mjs +11 -10
  49. package/dist/lib/node-esm/index.mjs.map +2 -2
  50. package/dist/lib/node-esm/{intent-resolver-KLBHSMW4.mjs → intent-resolver-E4EOZUBH.mjs} +3 -3
  51. package/dist/lib/node-esm/meta.json +1 -1
  52. package/dist/lib/node-esm/{react-surface-7YSGHZQM.mjs → react-surface-FQ4K7UST.mjs} +5 -7
  53. package/dist/lib/node-esm/{react-surface-7YSGHZQM.mjs.map → react-surface-FQ4K7UST.mjs.map} +1 -1
  54. package/dist/lib/node-esm/{settings-GR4O2WHZ.mjs → settings-Q6B4K7LO.mjs} +2 -2
  55. package/dist/lib/node-esm/types.mjs +1 -1
  56. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +2 -1
  57. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
  58. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +2 -1
  59. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  60. package/dist/types/src/components/LogsPanel/LogsPanel.d.ts +8 -0
  61. package/dist/types/src/components/LogsPanel/LogsPanel.d.ts.map +1 -0
  62. package/dist/types/src/components/LogsPanel/index.d.ts +2 -0
  63. package/dist/types/src/components/LogsPanel/index.d.ts.map +1 -0
  64. package/dist/types/src/components/ScriptContainer.d.ts +2 -1
  65. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  66. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts +2 -1
  67. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -1
  68. package/dist/types/src/components/ScriptSettingsPanel.d.ts +2 -1
  69. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -1
  70. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +2 -1
  71. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  72. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +2 -1
  73. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  74. package/dist/types/src/components/index.d.ts +2 -1
  75. package/dist/types/src/components/index.d.ts.map +1 -1
  76. package/dist/types/src/hooks/deploy.d.ts +23 -0
  77. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  78. package/dist/types/src/hooks/view.d.ts +1 -1
  79. package/dist/types/src/hooks/view.d.ts.map +1 -1
  80. package/dist/types/src/templates/index.d.ts.map +1 -1
  81. package/dist/types/src/translations.d.ts +3 -3
  82. package/dist/types/src/translations.d.ts.map +1 -1
  83. package/package.json +47 -43
  84. package/src/components/LogsPanel/LogsPanel.tsx +111 -0
  85. package/src/components/LogsPanel/index.ts +5 -0
  86. package/src/components/ScriptContainer.tsx +8 -4
  87. package/src/components/index.ts +1 -0
  88. package/src/hooks/deploy.ts +3 -3
  89. package/src/hooks/view.ts +2 -5
  90. package/src/templates/discord.ts +3 -3
  91. package/src/templates/forex-effect.ts +2 -2
  92. package/src/templates/index.ts +0 -7
  93. package/src/translations.ts +1 -3
  94. package/src/types.ts +1 -1
  95. package/src/vite-env.d.ts +20 -0
  96. package/dist/lib/browser/ScriptContainer-3RFMYKTV.mjs.map +0 -7
  97. package/dist/lib/browser/chunk-5SXOHNAK.mjs +0 -240
  98. package/dist/lib/browser/chunk-5SXOHNAK.mjs.map +0 -7
  99. package/dist/lib/browser/chunk-G2FYNDU4.mjs.map +0 -7
  100. package/dist/lib/browser/chunk-PZPYF7M4.mjs.map +0 -7
  101. package/dist/lib/browser/chunk-VTWBVFBK.mjs +0 -234
  102. package/dist/lib/browser/chunk-VTWBVFBK.mjs.map +0 -7
  103. package/dist/lib/node/ScriptContainer-G6FZU4AM.cjs.map +0 -7
  104. package/dist/lib/node/chunk-DJGLGRQV.cjs.map +0 -7
  105. package/dist/lib/node/chunk-ITAJ3WRW.cjs.map +0 -7
  106. package/dist/lib/node/chunk-K3ZZWVXS.cjs +0 -269
  107. package/dist/lib/node/chunk-K3ZZWVXS.cjs.map +0 -7
  108. package/dist/lib/node/chunk-TOXBGIEI.cjs +0 -261
  109. package/dist/lib/node/chunk-TOXBGIEI.cjs.map +0 -7
  110. package/dist/lib/node/chunk-XKYJYY3T.cjs.map +0 -7
  111. package/dist/lib/node-esm/ScriptContainer-7FTCFIF3.mjs.map +0 -7
  112. package/dist/lib/node-esm/chunk-2AFXX34U.mjs +0 -241
  113. package/dist/lib/node-esm/chunk-2AFXX34U.mjs.map +0 -7
  114. package/dist/lib/node-esm/chunk-NRICF4KE.mjs.map +0 -7
  115. package/dist/lib/node-esm/chunk-S64WSJQK.mjs +0 -235
  116. package/dist/lib/node-esm/chunk-S64WSJQK.mjs.map +0 -7
  117. package/dist/lib/node-esm/chunk-YIWRJ25J.mjs.map +0 -7
  118. /package/dist/lib/browser/{intent-resolver-D6FPY5ZA.mjs.map → intent-resolver-NWAKTBZC.mjs.map} +0 -0
  119. /package/dist/lib/browser/{settings-SZCDKHWO.mjs.map → settings-LRHZSUEJ.mjs.map} +0 -0
  120. /package/dist/lib/node/{intent-resolver-NYJFPD5B.cjs.map → intent-resolver-WZVIHKA7.cjs.map} +0 -0
  121. /package/dist/lib/node/{settings-SZFSMSKM.cjs.map → settings-TR2CA4IH.cjs.map} +0 -0
  122. /package/dist/lib/node-esm/{intent-resolver-KLBHSMW4.mjs.map → intent-resolver-E4EOZUBH.mjs.map} +0 -0
  123. /package/dist/lib/node-esm/{settings-GR4O2WHZ.mjs.map → settings-Q6B4K7LO.mjs.map} +0 -0
@@ -1,4 +1,5 @@
1
1
  import {
2
+ LogsPanel,
2
3
  createDeploy,
3
4
  createFormat,
4
5
  createTemplateSelect,
@@ -6,11 +7,8 @@ import {
6
7
  useDeployState,
7
8
  useToolbarAction,
8
9
  useToolbarState
9
- } from "./chunk-G2FYNDU4.mjs";
10
- import {
11
- DebugPanel
12
- } from "./chunk-5SXOHNAK.mjs";
13
- import "./chunk-PZPYF7M4.mjs";
10
+ } from "./chunk-THELDT6E.mjs";
11
+ import "./chunk-LYOFJ3FM.mjs";
14
12
  import "./chunk-FVVCAWNP.mjs";
15
13
 
16
14
  // packages/plugins/experimental/plugin-script/src/components/ScriptContainer.tsx
@@ -229,6 +227,9 @@ var ScriptContainer = ({ role, classNames, script, settings = {
229
227
  state,
230
228
  script
231
229
  });
230
+ if (!space) {
231
+ return null;
232
+ }
232
233
  return /* @__PURE__ */ React3.createElement(StackItem.Content, {
233
234
  toolbar: true
234
235
  }, /* @__PURE__ */ React3.createElement(ScriptToolbar, {
@@ -238,16 +239,17 @@ var ScriptContainer = ({ role, classNames, script, settings = {
238
239
  }), /* @__PURE__ */ React3.createElement("div", {
239
240
  role: "none",
240
241
  className: mx("flex flex-col w-full overflow-hidden divide-y divide-separator", classNames)
241
- }, state.view !== "debug" && /* @__PURE__ */ React3.createElement(TypescriptEditor, {
242
+ }, state.view !== "logs" && /* @__PURE__ */ React3.createElement(TypescriptEditor, {
242
243
  id: script.id,
243
244
  env,
244
245
  initialValue: script.source?.target?.content,
245
246
  extensions,
246
- className: stackItemContentEditorClassNames(role),
247
+ className: mx(stackItemContentEditorClassNames(role), "grow"),
247
248
  inputMode: settings.editorInputMode,
248
249
  toolbar: true
249
- }), state.view !== "editor" && /* @__PURE__ */ React3.createElement(DebugPanel, {
250
- functionUrl: state.functionUrl
250
+ }), state.view !== "editor" && /* @__PURE__ */ React3.createElement(LogsPanel, {
251
+ script,
252
+ classNames: "grow"
251
253
  })));
252
254
  };
253
255
  var ScriptContainer_default = ScriptContainer;
@@ -255,4 +257,4 @@ export {
255
257
  ScriptContainer,
256
258
  ScriptContainer_default as default
257
259
  };
258
- //# sourceMappingURL=ScriptContainer-3RFMYKTV.mjs.map
260
+ //# sourceMappingURL=ScriptContainer-QGF55ZZJ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ScriptContainer.tsx", "../../../src/components/ScriptToolbar/ScriptToolbar.tsx", "../../../src/components/TypescriptEditor/TypescriptEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type ScriptType } from '@dxos/functions';\nimport { createDocAccessor, getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { createDataExtensions, listener, stackItemContentEditorClassNames } from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { LogsPanel } from './LogsPanel';\nimport { ScriptToolbar } from './ScriptToolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { useDeployState, useToolbarState } from '../hooks';\nimport { type ScriptSettingsProps } from '../types';\n\nexport type ScriptEditorProps = ThemedClassName<{\n script: ScriptType;\n settings?: ScriptSettingsProps;\n role?: string;\n}> &\n Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptContainer = ({\n role,\n classNames,\n script,\n settings = { editorInputMode: 'vscode' },\n env,\n}: ScriptEditorProps) => {\n const identity = useIdentity();\n const space = getSpace(script);\n\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source.target && script.source.target.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source.target && createDocAccessor(script.source.target, ['content']),\n space,\n identity,\n }),\n ],\n [script, script.source.target, space, identity],\n );\n\n const state = useToolbarState({ view: 'editor' });\n useDeployState({ state, script });\n\n if (!space) {\n return null;\n }\n\n return (\n <StackItem.Content toolbar>\n <ScriptToolbar state={state} role={role} script={script} />\n <div role='none' className={mx('flex flex-col w-full overflow-hidden divide-y divide-separator', classNames)}>\n {state.view !== 'logs' && (\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={script.source?.target?.content}\n extensions={extensions}\n className={mx(stackItemContentEditorClassNames(role), 'grow')}\n inputMode={settings.editorInputMode}\n toolbar\n />\n )}\n\n {state.view !== 'editor' && <LogsPanel script={script} classNames='grow' />}\n </div>\n </StackItem.Content>\n );\n};\n\nexport default ScriptContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { ElevationProvider, type ThemedClassName } from '@dxos/react-ui';\nimport { stackItemContentToolbarClassNames } from '@dxos/react-ui-editor';\nimport { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';\n\nimport {\n type ScriptToolbarState,\n createDeploy,\n createFormat,\n createTemplateSelect,\n createView,\n useToolbarAction,\n} from '../../hooks';\n\nexport type ScriptToolbarProps = ThemedClassName<{\n role?: string;\n script: ScriptType;\n state: ScriptToolbarState;\n}>;\n\nconst createToolbar = (state: ScriptToolbarState) => {\n const templateSelect = createTemplateSelect();\n const format = createFormat();\n const gap = createGapSeparator();\n const deploy = createDeploy(state);\n const view = createView(state);\n return {\n nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes, ...view.nodes],\n edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges, ...view.edges],\n };\n};\n\nexport const ScriptToolbar = ({ script, role, state, classNames }: ScriptToolbarProps) => {\n const handleAction = useToolbarAction({ state, script });\n const toolbarCreator = useCallback(() => createToolbar(state), [state]);\n const menu = useMenuActions(toolbarCreator);\n return (\n <div role='none' className={stackItemContentToolbarClassNames(role)}>\n <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>\n <MenuProvider {...menu} onAction={handleAction} attendableId={fullyQualifiedId(script)}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n </ElevationProvider>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { defaultHighlightStyle } from '@codemirror/language';\nimport { Prec } from '@codemirror/state';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport { keymap } from '@codemirror/view';\nimport { tags } from '@lezer/highlight';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { continueKeymap } from '@valtown/codemirror-continue';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover, type HoverInfo } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { type ThemeMode, useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n type EditorInputMode,\n editorMonospace,\n EditorView,\n folding,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { isNonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n inputMode?: EditorInputMode;\n env?: VirtualTypeScriptEnvironment;\n toolbar?: boolean;\n} & Pick<UseTextEditorProps, 'className' | 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n env,\n className,\n initialValue,\n extensions,\n scrollTo,\n selection,\n toolbar,\n inputMode = 'vscode',\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n createBasicExtensions({\n highlightActiveLine: true,\n indentWithTab: true,\n lineNumbers: true,\n lineWrapping: false,\n scrollPastEnd: true,\n }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n slots: {\n content: { className: editorFullWidth },\n },\n }),\n // NOTE: Not using default editor gutter because folding for code works best right beside text.\n EditorView.theme({\n '.cm-gutters': {\n // Match margin from content.\n marginTop: '16px',\n },\n }),\n InputModeExtensions[inputMode],\n folding(),\n // Continues block comments when you hit Enter.\n Prec.high(keymap.of(continueKeymap)),\n // TODO(burdon): Factor out.\n [\n editorMonospace,\n javascript({ typescript: true }),\n // https://github.com/val-town/codemirror-ts\n autocomplete({ override: env ? [tsAutocomplete()] : [] }),\n env\n ? [\n tsFacet.of({ env, path: `/src/${id}.ts` }),\n tsSync(),\n tsLinter(),\n tsHover({ renderTooltip: createTooltipRenderer(themeMode) }),\n ]\n : [],\n ],\n ].filter(isNonNullable),\n selection,\n scrollTo,\n }),\n [id, extensions, themeMode, inputMode, selection, scrollTo],\n );\n\n return (\n <div ref={parentRef} data-toolbar={toolbar ? 'enabled' : 'disabled'} className={className} {...focusAttributes} />\n );\n};\n\nconst createTooltipRenderer = (themeMode: ThemeMode) => {\n const theme = themeMode === 'dark' ? oneDarkHighlightStyle : defaultHighlightStyle;\n\n const classFromKind = (_kind: string) => {\n // E.g., localName, methodName, parameterName, etc.\n const kind = _kind.endsWith('Name') ? 'name' : _kind;\n const validTag = kind in tags;\n if (!validTag) {\n return '';\n }\n\n const tag = tags[kind as keyof typeof tags];\n if (typeof tag === 'function') {\n return '';\n }\n\n return theme.style([tag]) ?? '';\n };\n\n return (info: HoverInfo) => {\n const div = document.createElement('div');\n div.className = 'p-1 rounded border border-separator bg-baseSurface xs:max-w-80 max-w-lg';\n\n if (info.quickInfo?.displayParts) {\n for (const part of info.quickInfo.displayParts) {\n const span = div.appendChild(document.createElement('span'));\n span.className = classFromKind(part.kind);\n span.innerText = part.text;\n }\n }\n\n return { dom: div };\n };\n};\n\nexport default TypescriptEditor;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useMemo", "createDocAccessor", "getSpace", "useIdentity", "createDataExtensions", "listener", "stackItemContentEditorClassNames", "StackItem", "mx", "React", "useCallback", "fullyQualifiedId", "ElevationProvider", "stackItemContentToolbarClassNames", "createGapSeparator", "MenuProvider", "ToolbarMenu", "useMenuActions", "createToolbar", "state", "templateSelect", "createTemplateSelect", "format", "createFormat", "gap", "createGapSeparator", "deploy", "createDeploy", "view", "createView", "nodes", "edges", "ScriptToolbar", "script", "role", "classNames", "handleAction", "useToolbarAction", "toolbarCreator", "useCallback", "menu", "useMenuActions", "div", "className", "stackItemContentToolbarClassNames", "ElevationProvider", "elevation", "MenuProvider", "onAction", "attendableId", "fullyQualifiedId", "ToolbarMenu", "javascript", "defaultHighlightStyle", "Prec", "oneDarkHighlightStyle", "keymap", "tags", "continueKeymap", "tsSync", "tsFacet", "tsLinter", "tsAutocomplete", "tsHover", "React", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "editorFullWidth", "editorMonospace", "EditorView", "folding", "InputModeExtensions", "useTextEditor", "isNonNullable", "TypescriptEditor", "id", "env", "className", "initialValue", "extensions", "scrollTo", "selection", "toolbar", "inputMode", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "editorFullWidth", "EditorView", "theme", "marginTop", "InputModeExtensions", "folding", "Prec", "high", "keymap", "of", "continueKeymap", "editorMonospace", "javascript", "typescript", "autocomplete", "override", "tsAutocomplete", "tsFacet", "path", "tsSync", "tsLinter", "tsHover", "renderTooltip", "createTooltipRenderer", "filter", "isNonNullable", "React", "div", "ref", "data-toolbar", "oneDarkHighlightStyle", "defaultHighlightStyle", "classFromKind", "_kind", "kind", "endsWith", "validTag", "tags", "tag", "style", "info", "document", "createElement", "quickInfo", "displayParts", "part", "span", "appendChild", "innerText", "text", "dom", "ScriptContainer", "role", "classNames", "script", "settings", "editorInputMode", "env", "identity", "useIdentity", "space", "getSpace", "extensions", "useMemo", "listener", "onChange", "text", "source", "target", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "state", "useToolbarState", "view", "useDeployState", "React", "StackItem", "Content", "toolbar", "ScriptToolbar", "div", "className", "mx", "TypescriptEditor", "initialValue", "stackItemContentEditorClassNames", "inputMode", "LogsPanel"]
7
+ }
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-FVVCAWNP.mjs";
4
4
 
5
5
  // packages/plugins/experimental/plugin-script/src/types.ts
6
- import { TitleAnnotationId } from "@effect/schema/AST";
6
+ import { TitleAnnotationId } from "effect/SchemaAST";
7
7
  import { SpaceSchema } from "@dxos/client/echo";
8
8
  import { S } from "@dxos/echo-schema";
9
9
  import { ScriptType } from "@dxos/functions";
@@ -37,4 +37,4 @@ export {
37
37
  ScriptAction,
38
38
  ScriptSettingsSchema
39
39
  };
40
- //# sourceMappingURL=chunk-N46LE7FS.mjs.map
40
+ //# sourceMappingURL=chunk-2H6QBQ5Q.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { TitleAnnotationId } from '@effect/schema/AST';\n\nimport { SpaceSchema } from '@dxos/client/echo';\nimport { S } from '@dxos/echo-schema';\nimport { ScriptType } from '@dxos/functions';\nimport { EditorInputMode } from '@dxos/react-ui-editor';\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport namespace ScriptAction {\n const SCRIPT_ACTION = `${SCRIPT_PLUGIN}/action`;\n\n export const CreateScriptSchema = S.Struct({\n name: S.optional(S.String),\n // TODO(wittjosiah): Placeholder annotation?\n gistUrl: S.optional(S.String.annotations({ [TitleAnnotationId]: 'Import from Gist (url)' })),\n });\n\n export type CreateScriptProps = S.Schema.Type<typeof CreateScriptSchema>;\n\n export class Create extends S.TaggedClass<Create>()(`${SCRIPT_ACTION}/create`, {\n input: S.extend(CreateScriptSchema, S.Struct({ space: SpaceSchema })),\n output: S.Struct({\n object: ScriptType,\n }),\n }) {}\n}\n\nexport const ScriptSettingsSchema = S.mutable(\n S.Struct({\n editorInputMode: EditorInputMode,\n }),\n);\n\nexport type ScriptSettingsProps = S.Schema.Type<typeof ScriptSettingsSchema>;\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { TitleAnnotationId } from 'effect/SchemaAST';\n\nimport { SpaceSchema } from '@dxos/client/echo';\nimport { S } from '@dxos/echo-schema';\nimport { ScriptType } from '@dxos/functions';\nimport { EditorInputMode } from '@dxos/react-ui-editor';\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport namespace ScriptAction {\n const SCRIPT_ACTION = `${SCRIPT_PLUGIN}/action`;\n\n export const CreateScriptSchema = S.Struct({\n name: S.optional(S.String),\n // TODO(wittjosiah): Placeholder annotation?\n gistUrl: S.optional(S.String.annotations({ [TitleAnnotationId]: 'Import from Gist (url)' })),\n });\n\n export type CreateScriptProps = S.Schema.Type<typeof CreateScriptSchema>;\n\n export class Create extends S.TaggedClass<Create>()(`${SCRIPT_ACTION}/create`, {\n input: S.extend(CreateScriptSchema, S.Struct({ space: SpaceSchema })),\n output: S.Struct({\n object: ScriptType,\n }),\n }) {}\n}\n\nexport const ScriptSettingsSchema = S.mutable(\n S.Struct({\n editorInputMode: EditorInputMode,\n }),\n);\n\nexport type ScriptSettingsProps = S.Schema.Type<typeof ScriptSettingsSchema>;\n"],
5
5
  "mappings": ";;;;;AAIA,SAASA,yBAAyB;AAElC,SAASC,mBAAmB;AAC5B,SAASC,SAAS;AAClB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;;UAIfC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;gBAEZC,qBAAqBC,EAAEC,OAAO;IACzCC,MAAMF,EAAEG,SAASH,EAAEI,MAAM;;IAEzBC,SAASL,EAAEG,SAASH,EAAEI,OAAOE,YAAY;MAAE,CAACC,iBAAAA,GAAoB;IAAyB,CAAA,CAAA;EAC3F,CAAA;EAIO,MAAMC,eAAeR,EAAES,YAAW,EAAW,GAAGZ,aAAAA,WAAwB;IAC7Ea,OAAOV,EAAEW,OAAMf,cAACG,oBAAoBC,EAAEC,OAAO;MAAEW,OAAOC;IAAY,CAAA,CAAA;IAClEC,QAAQd,EAAEC,OAAO;MACfc,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBALSR,SAAAA;AAMf,GAjBiBZ,iBAAAA,eAAAA,CAAAA,EAAAA;AAmBV,IAAMqB,uBAAuBjB,EAAEkB,QACpClB,EAAEC,OAAO;EACPkB,iBAAiBC;AACnB,CAAA,CAAA;",
6
6
  "names": ["TitleAnnotationId", "SpaceSchema", "S", "ScriptType", "EditorInputMode", "ScriptAction", "SCRIPT_ACTION", "SCRIPT_PLUGIN", "CreateScriptSchema", "S", "Struct", "name", "optional", "String", "gistUrl", "annotations", "TitleAnnotationId", "Create", "TaggedClass", "input", "extend", "space", "SpaceSchema", "output", "object", "ScriptType", "ScriptSettingsSchema", "mutable", "editorInputMode", "EditorInputMode"]
7
7
  }
@@ -0,0 +1,467 @@
1
+ import {
2
+ SCRIPT_PLUGIN
3
+ } from "./chunk-FVVCAWNP.mjs";
4
+
5
+ // packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx
6
+ import React, { forwardRef, useEffect, useRef, useState } from "react";
7
+ import { log } from "@dxos/log";
8
+ import { Avatar, Icon, Input, Toolbar, useTranslation } from "@dxos/react-ui";
9
+ import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
10
+ import { errorText, mx } from "@dxos/react-ui-theme";
11
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx";
12
+ var DebugPanel = ({ classNames, functionUrl }) => {
13
+ const { t } = useTranslation(SCRIPT_PLUGIN);
14
+ const inputRef = useRef(null);
15
+ const [input, setInput] = useState("");
16
+ const [result, setResult] = useState("");
17
+ const [state, setState] = useState(null);
18
+ const [history, setHistory] = useState([]);
19
+ const scrollerRef = useRef(null);
20
+ const handleScroll = () => {
21
+ if (scrollerRef.current) {
22
+ scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;
23
+ }
24
+ };
25
+ const controller = useRef();
26
+ useEffect(() => {
27
+ return () => {
28
+ handleStop();
29
+ };
30
+ }, []);
31
+ const handleStop = () => {
32
+ controller.current?.abort("stop");
33
+ controller.current = void 0;
34
+ };
35
+ const handleClear = () => {
36
+ handleStop();
37
+ setInput("");
38
+ setResult("");
39
+ setHistory([]);
40
+ inputRef.current?.focus();
41
+ };
42
+ const handleResponse = ({ text, data, error } = {}) => {
43
+ controller.current = void 0;
44
+ setHistory((history2) => [
45
+ ...history2,
46
+ {
47
+ type: "response",
48
+ text,
49
+ data,
50
+ error
51
+ }
52
+ ]);
53
+ setResult("");
54
+ setState(null);
55
+ handleScroll();
56
+ };
57
+ const handleRequest = async (input2) => {
58
+ try {
59
+ setState("pending");
60
+ let data = null;
61
+ if (input2.charAt(0) === "{") {
62
+ try {
63
+ const validJsonString = input2.replace(/'/g, '"').replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3');
64
+ data = JSON.parse(validJsonString);
65
+ input2 = JSON.stringify(data, null, 2);
66
+ } catch (err) {
67
+ inputRef.current?.focus();
68
+ return;
69
+ }
70
+ }
71
+ setInput("");
72
+ setResult("");
73
+ setHistory((history2) => [
74
+ ...history2,
75
+ {
76
+ type: "request",
77
+ text: input2
78
+ }
79
+ ]);
80
+ setTimeout(() => {
81
+ handleScroll();
82
+ });
83
+ controller.current = new AbortController();
84
+ const response = await fetch(functionUrl, {
85
+ signal: controller.current.signal,
86
+ method: "POST",
87
+ body: input2,
88
+ headers: {
89
+ "Content-Type": data ? "application/json" : "text/plain"
90
+ }
91
+ });
92
+ if (!response.ok) {
93
+ const text2 = await response.text();
94
+ handleResponse({
95
+ error: new Error(text2 || response.statusText || String(response.status))
96
+ });
97
+ return;
98
+ }
99
+ const contentType = response.headers.get("content-type");
100
+ if (contentType === "application/json") {
101
+ const data2 = await response.json();
102
+ handleResponse({
103
+ data: data2
104
+ });
105
+ return;
106
+ }
107
+ setState("responding");
108
+ let text = "";
109
+ const reader = response.body.getReader();
110
+ const pump = async ({ done, value }) => {
111
+ text = text + new TextDecoder().decode(value);
112
+ if (!controller.current || done) {
113
+ handleResponse({
114
+ text
115
+ });
116
+ return;
117
+ }
118
+ setResult(text);
119
+ setTimeout(() => {
120
+ handleScroll();
121
+ });
122
+ return reader.read().then(pump);
123
+ };
124
+ void reader.read().then(pump).catch((err) => {
125
+ if (err.name !== "AbortError") {
126
+ log.catch(err, void 0, {
127
+ F: __dxlog_file,
128
+ L: 146,
129
+ S: void 0,
130
+ C: (f, a) => f(...a)
131
+ });
132
+ }
133
+ });
134
+ } catch (err) {
135
+ if (err !== "stop") {
136
+ const error = err instanceof Error ? err : new Error(err);
137
+ handleResponse({
138
+ error
139
+ });
140
+ log.catch(err, void 0, {
141
+ F: __dxlog_file,
142
+ L: 153,
143
+ S: void 0,
144
+ C: (f, a) => f(...a)
145
+ });
146
+ } else {
147
+ handleResponse();
148
+ }
149
+ }
150
+ };
151
+ return /* @__PURE__ */ React.createElement("div", {
152
+ className: mx("flex flex-col h-full overflow-hidden", classNames)
153
+ }, /* @__PURE__ */ React.createElement(MessageThread, {
154
+ ref: scrollerRef,
155
+ state,
156
+ result,
157
+ history
158
+ }), /* @__PURE__ */ React.createElement(Toolbar.Root, {
159
+ classNames: "p-1"
160
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
161
+ ref: inputRef,
162
+ autoFocus: true,
163
+ placeholder: t("function request placeholder"),
164
+ value: input,
165
+ onChange: (ev) => setInput(ev.target.value),
166
+ onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
167
+ })), /* @__PURE__ */ React.createElement(Toolbar.Button, {
168
+ onClick: () => handleRequest(input)
169
+ }, /* @__PURE__ */ React.createElement(Icon, {
170
+ icon: "ph--play--regular",
171
+ size: 4
172
+ })), /* @__PURE__ */ React.createElement(Toolbar.Button, {
173
+ onClick: () => state ? handleStop() : handleClear()
174
+ }, /* @__PURE__ */ React.createElement(Icon, {
175
+ icon: state ? "ph--stop--regular" : "ph--trash--regular",
176
+ size: 4
177
+ }))));
178
+ };
179
+ var MessageThread = /* @__PURE__ */ forwardRef(({ state, history, result }, forwardedRef) => {
180
+ if (!history.length && !result.length) {
181
+ return null;
182
+ }
183
+ return /* @__PURE__ */ React.createElement("div", {
184
+ ref: forwardedRef,
185
+ className: "flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto"
186
+ }, history.map((message, i) => /* @__PURE__ */ React.createElement("div", {
187
+ key: i,
188
+ className: "grid grid-cols-[2rem_1fr_2rem]"
189
+ }, /* @__PURE__ */ React.createElement("div", {
190
+ className: "p-1"
191
+ }, message.type === "response" && /* @__PURE__ */ React.createElement(RobotAvatar, null)), /* @__PURE__ */ React.createElement("div", {
192
+ className: "overflow-auto"
193
+ }, /* @__PURE__ */ React.createElement(MessageItem, {
194
+ message
195
+ })))), result?.length > 0 && /* @__PURE__ */ React.createElement("div", {
196
+ className: "grid grid-cols-[2rem_1fr_2rem]"
197
+ }, /* @__PURE__ */ React.createElement("div", {
198
+ className: "p-1"
199
+ }, state === "pending" && /* @__PURE__ */ React.createElement(Icon, {
200
+ icon: "ph--spinner--regular",
201
+ size: 6,
202
+ classNames: "animate-spin"
203
+ }) || /* @__PURE__ */ React.createElement(Icon, {
204
+ icon: "ph--robot--regular",
205
+ size: 6,
206
+ classNames: "animate-[pulse_1s_ease-in-out_infinite]"
207
+ })), /* @__PURE__ */ React.createElement("div", {
208
+ className: "overflow-auto"
209
+ }, /* @__PURE__ */ React.createElement(MessageItem, {
210
+ message: {
211
+ type: "response",
212
+ text: result
213
+ }
214
+ }))));
215
+ });
216
+ var MessageItem = ({ classNames, message }) => {
217
+ const { type, text, data, error } = message;
218
+ const wrapper = "p-1 px-2 rounded-lg bg-hoverSurface overflow-auto";
219
+ return /* @__PURE__ */ React.createElement("div", {
220
+ className: mx("flex", type === "request" ? "ml-[1rem] justify-end" : "mr-[1rem]", classNames)
221
+ }, error && /* @__PURE__ */ React.createElement("div", {
222
+ className: mx(wrapper, "whitespace-pre", errorText)
223
+ }, String(error)), text !== void 0 && /* @__PURE__ */ React.createElement("div", {
224
+ className: mx(wrapper, type === "request" && "bg-primary-400 dark:bg-primary-600")
225
+ }, text || "\xD8"), data && /* @__PURE__ */ React.createElement(SyntaxHighlighter, {
226
+ language: "json",
227
+ className: mx(wrapper, "px-8 py-2 text-xs")
228
+ }, JSON.stringify(data, null, 2)));
229
+ };
230
+ var RobotAvatar = () => /* @__PURE__ */ React.createElement(Avatar.Root, {
231
+ size: 6,
232
+ variant: "circle"
233
+ }, /* @__PURE__ */ React.createElement(Avatar.Frame, null, /* @__PURE__ */ React.createElement(Avatar.Icon, {
234
+ icon: "ph--robot--regular"
235
+ })));
236
+
237
+ // packages/plugins/experimental/plugin-script/src/components/ScriptSettings/ScriptSettings.tsx
238
+ import React2 from "react";
239
+ import { useClient } from "@dxos/react-client";
240
+ import { Button, Select, useTranslation as useTranslation2 } from "@dxos/react-ui";
241
+ import { EditorInputModes } from "@dxos/react-ui-editor";
242
+ import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
243
+ var ScriptSettings = ({ settings }) => {
244
+ const { t } = useTranslation2(SCRIPT_PLUGIN);
245
+ const client = useClient();
246
+ const handleAuthenticate = async () => {
247
+ const { identityKey } = client.halo.identity.get();
248
+ await client.halo.writeCredentials([
249
+ {
250
+ issuer: identityKey,
251
+ issuanceDate: /* @__PURE__ */ new Date(),
252
+ subject: {
253
+ id: identityKey,
254
+ assertion: {
255
+ "@type": "dxos.halo.credentials.ServiceAccess",
256
+ serverName: "hub.dxos.network",
257
+ serverKey: identityKey,
258
+ identityKey,
259
+ capabilities: [
260
+ "composer:beta"
261
+ ]
262
+ }
263
+ }
264
+ }
265
+ ]);
266
+ };
267
+ return /* @__PURE__ */ React2.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
268
+ label: t("authenticate action label")
269
+ }, /* @__PURE__ */ React2.createElement(Button, {
270
+ onClick: handleAuthenticate
271
+ }, t("authenticate button label"))), /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
272
+ label: t("editor input mode label")
273
+ }, /* @__PURE__ */ React2.createElement(Select.Root, {
274
+ value: settings.editorInputMode ?? "default",
275
+ onValueChange: (value) => {
276
+ settings.editorInputMode = value;
277
+ }
278
+ }, /* @__PURE__ */ React2.createElement(Select.TriggerButton, {
279
+ placeholder: t("select editor input mode placeholder")
280
+ }), /* @__PURE__ */ React2.createElement(Select.Portal, null, /* @__PURE__ */ React2.createElement(Select.Content, null, /* @__PURE__ */ React2.createElement(Select.Viewport, null, EditorInputModes.map((mode) => /* @__PURE__ */ React2.createElement(Select.Option, {
281
+ key: mode,
282
+ value: mode
283
+ }, t(`settings editor input mode ${mode} label`)))))))));
284
+ };
285
+
286
+ // packages/plugins/experimental/plugin-script/src/components/ScriptSettingsPanel.tsx
287
+ import { Octokit } from "@octokit/core";
288
+ import React3, { useCallback, useEffect as useEffect2, useState as useState2 } from "react";
289
+ import { createIntent, SettingsAction, useIntentDispatcher } from "@dxos/app-framework";
290
+ import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
291
+ import { log as log2 } from "@dxos/log";
292
+ import { useClient as useClient2 } from "@dxos/react-client";
293
+ import { Filter, getMeta, getSpace, useQuery } from "@dxos/react-client/echo";
294
+ import { Button as Button2, Clipboard, Input as Input2, Separator, useControlledState, useTranslation as useTranslation3 } from "@dxos/react-ui";
295
+ import { AccessTokenType } from "@dxos/schema";
296
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptSettingsPanel.tsx";
297
+ var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
298
+ var ScriptSettingsPanel = ({ script }) => {
299
+ const { t } = useTranslation3(SCRIPT_PLUGIN);
300
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
301
+ const client = useClient2();
302
+ const space = getSpace(script);
303
+ const [fn] = useQuery(space, Filter.schema(FunctionType, {
304
+ source: script
305
+ }));
306
+ const [githubToken] = useQuery(space, Filter.schema(AccessTokenType, {
307
+ source: "github.com"
308
+ }));
309
+ const gistKey = getMeta(script).keys.find(({ source }) => source === "github.com");
310
+ const [gistUrl, setGistUrl] = useState2();
311
+ useEffect2(() => {
312
+ const token = githubToken?.token;
313
+ const gistId = gistKey?.id;
314
+ if (!token || !gistId) {
315
+ setGistUrl(void 0);
316
+ return;
317
+ }
318
+ const timeout = setTimeout(async () => {
319
+ try {
320
+ const octokit = new Octokit({
321
+ auth: githubToken.token
322
+ });
323
+ const response = await octokit.request("GET /gists/{gist_id}", {
324
+ gist_id: gistId
325
+ });
326
+ setGistUrl(response.data.html_url);
327
+ } catch (err) {
328
+ log2.catch(err, void 0, {
329
+ F: __dxlog_file2,
330
+ L: 52,
331
+ S: void 0,
332
+ C: (f, a) => f(...a)
333
+ });
334
+ setGistUrl(void 0);
335
+ }
336
+ });
337
+ return () => clearTimeout(timeout);
338
+ }, [
339
+ githubToken,
340
+ gistKey
341
+ ]);
342
+ const [binding, setBinding] = useControlledState(fn?.binding ?? "");
343
+ const handleBindingChange = useCallback((event) => {
344
+ setBinding(event.target.value);
345
+ }, [
346
+ setBinding
347
+ ]);
348
+ const handleBindingBlur = useCallback(() => {
349
+ fn.binding = binding;
350
+ }, [
351
+ fn,
352
+ binding
353
+ ]);
354
+ const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));
355
+ const functionUrl = functionPath && getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
356
+ spaceId: space?.id
357
+ });
358
+ const handleOpenTokenManager = useCallback(() => dispatch(createIntent(SettingsAction.Open, {
359
+ plugin: "dxos.org/plugin/token-manager"
360
+ })), []);
361
+ const [publishing, setPublishing] = useState2(false);
362
+ const handlePublish = useCallback(async () => {
363
+ setPublishing(true);
364
+ const octokit = new Octokit({
365
+ auth: githubToken.token
366
+ });
367
+ const source = await script.source.load();
368
+ const filename = script.name ? kebabize(script.name) : "composer-script";
369
+ const files = {
370
+ [`${filename}.ts`]: {
371
+ content: source.content
372
+ }
373
+ };
374
+ try {
375
+ const meta = getMeta(script);
376
+ const githubKey = meta.keys.find(({ source: source2 }) => source2 === "github.com");
377
+ const gistId = githubKey?.id;
378
+ if (gistId) {
379
+ await octokit.request("PATCH /gists/{gist_id}", {
380
+ gist_id: gistId,
381
+ files
382
+ });
383
+ } else {
384
+ const response = await octokit.request("POST /gists", {
385
+ public: true,
386
+ files
387
+ });
388
+ if (response.data.id) {
389
+ meta.keys.push({
390
+ source: "github.com",
391
+ id: response.data.id
392
+ });
393
+ }
394
+ }
395
+ } finally {
396
+ setPublishing(false);
397
+ }
398
+ }, [
399
+ script,
400
+ githubToken
401
+ ]);
402
+ return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement("div", {
403
+ role: "form",
404
+ className: "flex flex-col w-full p-2 gap-4"
405
+ }, /* @__PURE__ */ React3.createElement(Input2.Root, null, /* @__PURE__ */ React3.createElement("div", {
406
+ role: "none",
407
+ className: "flex flex-col gap-1"
408
+ }, /* @__PURE__ */ React3.createElement(Input2.Label, null, t("description label")), /* @__PURE__ */ React3.createElement(Input2.TextInput, {
409
+ placeholder: t("description placeholder"),
410
+ value: script.description ?? "",
411
+ onChange: (event) => {
412
+ script.description = event.target.value;
413
+ }
414
+ })))), fn && functionUrl && /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(Separator, null), /* @__PURE__ */ React3.createElement("div", {
415
+ role: "form",
416
+ className: "flex flex-col w-full p-2 gap-4"
417
+ }, /* @__PURE__ */ React3.createElement("h2", null, t("remote function settings heading")), /* @__PURE__ */ React3.createElement(Input2.Root, null, /* @__PURE__ */ React3.createElement("div", {
418
+ role: "none",
419
+ className: "flex flex-col gap-1"
420
+ }, /* @__PURE__ */ React3.createElement(Input2.Label, null, t("function url label")), /* @__PURE__ */ React3.createElement("div", {
421
+ role: "none",
422
+ className: "flex gap-1"
423
+ }, /* @__PURE__ */ React3.createElement(Input2.TextInput, {
424
+ disabled: true,
425
+ value: functionUrl,
426
+ onChange: (event) => {
427
+ fn.name = event.target.value;
428
+ }
429
+ }), /* @__PURE__ */ React3.createElement(Clipboard.IconButton, {
430
+ value: functionUrl
431
+ })))), /* @__PURE__ */ React3.createElement(Input2.Root, null, /* @__PURE__ */ React3.createElement("div", {
432
+ role: "none",
433
+ className: "flex flex-col gap-1"
434
+ }, /* @__PURE__ */ React3.createElement(Input2.Label, null, t("function binding label")), /* @__PURE__ */ React3.createElement(Input2.TextInput, {
435
+ placeholder: t("function binding placeholder"),
436
+ value: binding,
437
+ onChange: handleBindingChange,
438
+ onBlur: handleBindingBlur
439
+ }))))), /* @__PURE__ */ React3.createElement(Separator, null), /* @__PURE__ */ React3.createElement("div", {
440
+ className: "flex flex-col w-full p-2 gap-4"
441
+ }, /* @__PURE__ */ React3.createElement("div", null, /* @__PURE__ */ React3.createElement("h2", null, t("script publish settings label")), /* @__PURE__ */ React3.createElement("p", {
442
+ className: "text-description text-sm"
443
+ }, t("script publish settings description"))), !githubToken && /* @__PURE__ */ React3.createElement("div", {
444
+ className: "flex flex-col items-center justify-center gap-2"
445
+ }, /* @__PURE__ */ React3.createElement("span", null, t("no github token label")), /* @__PURE__ */ React3.createElement(Button2, {
446
+ onClick: handleOpenTokenManager
447
+ }, t("open token manager label"))), githubToken && /* @__PURE__ */ React3.createElement("div", {
448
+ className: "flex justify-end gap-2"
449
+ }, gistUrl && /* @__PURE__ */ React3.createElement(Clipboard.IconButton, {
450
+ value: gistUrl
451
+ }), /* @__PURE__ */ React3.createElement(Button2, {
452
+ disabled: publishing,
453
+ onClick: handlePublish
454
+ }, t(publishing ? "publishing label" : "publish label")))));
455
+ };
456
+
457
+ // packages/plugins/experimental/plugin-script/src/components/index.ts
458
+ import { lazy } from "react";
459
+ var ScriptContainer = lazy(() => import("./ScriptContainer-QGF55ZZJ.mjs"));
460
+
461
+ export {
462
+ DebugPanel,
463
+ ScriptSettings,
464
+ ScriptSettingsPanel,
465
+ ScriptContainer
466
+ };
467
+ //# sourceMappingURL=chunk-35UHX7XH.mjs.map