@dxos/plugin-script 0.6.14-main.f49f251 → 0.6.14-staging.77003c1

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 (72) hide show
  1. package/dist/lib/browser/{AutomationPanel-MDPZ5WAC.mjs → AutomationPanel-XLL2ZXGS.mjs} +4 -4
  2. package/dist/lib/browser/{ScriptContainer-B3CPWXRE.mjs → ScriptContainer-YXH4MFEO.mjs} +8 -16
  3. package/dist/lib/browser/{ScriptContainer-B3CPWXRE.mjs.map → ScriptContainer-YXH4MFEO.mjs.map} +3 -3
  4. package/dist/lib/browser/{chunk-SGQHRB4P.mjs → chunk-C7VBULMK.mjs} +4 -3
  5. package/dist/lib/browser/{chunk-SGQHRB4P.mjs.map → chunk-C7VBULMK.mjs.map} +3 -3
  6. package/dist/lib/browser/{chunk-G66MXS4T.mjs → chunk-NCZUJKJE.mjs} +6 -18
  7. package/dist/lib/browser/chunk-NCZUJKJE.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-KXVQPS4Y.mjs → chunk-USXWNH3S.mjs} +2 -2
  9. package/dist/lib/browser/index.mjs +105 -12
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/meta.mjs +1 -1
  13. package/dist/lib/browser/types/index.mjs +2 -2
  14. package/dist/lib/node/{AutomationPanel-SANUE5X4.cjs → AutomationPanel-OSPAFWZU.cjs} +12 -12
  15. package/dist/lib/node/{ScriptContainer-BV7HMUY5.cjs → ScriptContainer-FWHFEIHK.cjs} +16 -24
  16. package/dist/lib/node/{ScriptContainer-BV7HMUY5.cjs.map → ScriptContainer-FWHFEIHK.cjs.map} +3 -3
  17. package/dist/lib/node/{chunk-EJC55SDD.cjs → chunk-6LYX73ZT.cjs} +7 -6
  18. package/dist/lib/node/chunk-6LYX73ZT.cjs.map +7 -0
  19. package/dist/lib/node/{chunk-JWKMTYYH.cjs → chunk-BJ4WIWCP.cjs} +9 -21
  20. package/dist/lib/node/chunk-BJ4WIWCP.cjs.map +7 -0
  21. package/dist/lib/node/{chunk-25PQE7FL.cjs → chunk-CPNHUAFN.cjs} +6 -6
  22. package/dist/lib/node/index.cjs +117 -28
  23. package/dist/lib/node/index.cjs.map +4 -4
  24. package/dist/lib/node/meta.cjs +3 -3
  25. package/dist/lib/node/meta.cjs.map +1 -1
  26. package/dist/lib/node/meta.json +1 -1
  27. package/dist/lib/node/types/index.cjs +5 -5
  28. package/dist/lib/node/types/index.cjs.map +1 -1
  29. package/dist/lib/node-esm/{AutomationPanel-H2IKE53E.mjs → AutomationPanel-KJNL6ARP.mjs} +4 -4
  30. package/dist/lib/node-esm/{ScriptContainer-HSIOGVP3.mjs → ScriptContainer-6U5WJFRB.mjs} +8 -16
  31. package/dist/lib/node-esm/{ScriptContainer-HSIOGVP3.mjs.map → ScriptContainer-6U5WJFRB.mjs.map} +3 -3
  32. package/dist/lib/node-esm/{chunk-7EDYDVQH.mjs → chunk-2NPZGQGA.mjs} +2 -2
  33. package/dist/lib/node-esm/{chunk-3QHVR4VV.mjs → chunk-DXWSRDEN.mjs} +6 -18
  34. package/dist/lib/node-esm/chunk-DXWSRDEN.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-GO7HYFM5.mjs → chunk-SLTZMY34.mjs} +4 -3
  36. package/dist/lib/node-esm/{chunk-GO7HYFM5.mjs.map → chunk-SLTZMY34.mjs.map} +3 -3
  37. package/dist/lib/node-esm/index.mjs +105 -12
  38. package/dist/lib/node-esm/index.mjs.map +4 -4
  39. package/dist/lib/node-esm/meta.json +1 -1
  40. package/dist/lib/node-esm/meta.mjs +1 -1
  41. package/dist/lib/node-esm/types/index.mjs +2 -2
  42. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  43. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +1 -4
  44. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
  45. package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
  46. package/dist/types/src/components/ScriptSettingsPanel.d.ts +7 -0
  47. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -0
  48. package/dist/types/src/components/index.d.ts +1 -0
  49. package/dist/types/src/components/index.d.ts.map +1 -1
  50. package/dist/types/src/meta.d.ts +2 -1
  51. package/dist/types/src/meta.d.ts.map +1 -1
  52. package/dist/types/src/translations.d.ts +5 -0
  53. package/dist/types/src/translations.d.ts.map +1 -1
  54. package/package.json +36 -36
  55. package/src/ScriptPlugin.tsx +10 -2
  56. package/src/components/DebugPanel/DebugPanel.tsx +2 -29
  57. package/src/components/ScriptEditor.tsx +1 -15
  58. package/src/components/ScriptSettings/ScriptSettings.tsx +3 -3
  59. package/src/components/ScriptSettingsPanel.tsx +105 -0
  60. package/src/components/index.ts +1 -0
  61. package/src/meta.ts +2 -1
  62. package/src/translations.ts +5 -0
  63. package/dist/lib/browser/chunk-G66MXS4T.mjs.map +0 -7
  64. package/dist/lib/node/chunk-EJC55SDD.cjs.map +0 -7
  65. package/dist/lib/node/chunk-JWKMTYYH.cjs.map +0 -7
  66. package/dist/lib/node-esm/chunk-3QHVR4VV.mjs.map +0 -7
  67. /package/dist/lib/browser/{AutomationPanel-MDPZ5WAC.mjs.map → AutomationPanel-XLL2ZXGS.mjs.map} +0 -0
  68. /package/dist/lib/browser/{chunk-KXVQPS4Y.mjs.map → chunk-USXWNH3S.mjs.map} +0 -0
  69. /package/dist/lib/node/{AutomationPanel-SANUE5X4.cjs.map → AutomationPanel-OSPAFWZU.cjs.map} +0 -0
  70. /package/dist/lib/node/{chunk-25PQE7FL.cjs.map → chunk-CPNHUAFN.cjs.map} +0 -0
  71. /package/dist/lib/node-esm/{AutomationPanel-H2IKE53E.mjs.map → AutomationPanel-KJNL6ARP.mjs.map} +0 -0
  72. /package/dist/lib/node-esm/{chunk-7EDYDVQH.mjs.map → chunk-2NPZGQGA.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/ScriptContainer.tsx", "../../../src/components/ScriptEditor.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/TypescriptEditor/TypescriptEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ScriptEditor, type ScriptEditorProps } from './ScriptEditor';\n\nconst ScriptContainer = ({ script, ...props }: ScriptEditorProps) => {\n const attendableAttrs = useAttendableAttributes(fullyQualifiedId(script));\n return (\n <div role='none' className={mx('flex row-span-2 w-full overflow-hidden attention-surface')} {...attendableAttrs}>\n <ScriptEditor {...props} script={script} />\n </div>\n );\n};\n\nexport default ScriptContainer;\n", "//\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, type ThemedClassName } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DebugPanel } from './DebugPanel';\nimport { type TemplateSelectProps, Toolbar, type ViewType } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n USERFUNCTIONS_PRESET_META_KEY,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { templates } from '../templates';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = ThemedClassName<{\n script: ScriptType;\n}> &\n Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ classNames, script, env }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n // TODO(dmaretskyi): Parametric query.\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 [view, setView] = useState<ViewType>('editor');\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 handleTemplateChange: TemplateSelectProps['onTemplateSelect'] = (id) => {\n const template = templates.find((template) => template.id === id);\n if (template) {\n script.name = template.name;\n script.source!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === USERFUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: USERFUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n };\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({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\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\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n script.changed = false;\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n setView('split');\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 return getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n return (\n <div role='none' className={mx('flex flex-col w-full overflow-hidden divide-y divide-separator', classNames)}>\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n view={view}\n templates={templates}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onViewChange={setView}\n onTemplateSelect={handleTemplateChange}\n />\n\n {view !== 'preview' && (\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden ch-focus-ring-inset-over-all'\n />\n )}\n\n {view !== 'editor' && (\n <DebugPanel\n functionUrl={functionUrl}\n showBindingConfig\n binding={fn?.binding}\n onBindingChange={handleBindingChange}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport {\n ElevationProvider,\n Icon,\n Select,\n type ThemedClassName,\n ToggleGroup,\n ToggleGroupItem,\n type ToolbarButtonProps,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type Template } from '../../templates';\n\nexport type ToolbarProps = ThemedClassName<\n {\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n } & TemplateSelectProps &\n ViewSelectorProps\n>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n view,\n templates,\n onDeploy,\n onFormat,\n onViewChange,\n onTemplateSelect,\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 if (!pending) {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n }\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {templates && <TemplateSelect templates={templates} onTemplateSelect={onTemplateSelect} />}\n {onFormat && <ToolbarIconButton icon='ph--magic-wand--regular' text={t('format label')} onClick={onFormat} />}\n\n <div role='separator' className='grow' />\n\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Icon icon='ph--warning-circle--regular' size={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 ) : null}\n\n {functionUrl && deployed && (\n <ToolbarIconButton icon='ph--link--regular' text={t('copy link label')} onClick={handleCopyLink} />\n )}\n\n {onDeploy && (\n <ToolbarIconButton\n icon={pending ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular'}\n classNames={[pending && 'animate-spin']}\n text={pending ? t('pending label') : t('deploy label')}\n onClick={handleDeploy}\n />\n )}\n\n <ViewSelector view={view} onViewChange={onViewChange} />\n </NaturalToolbar.Root>\n </ElevationProvider>\n );\n};\n\nconst ToolbarIconButton = ({\n icon,\n text,\n classNames,\n disabled,\n onClick,\n}: { icon: string; text: string } & Pick<ToolbarButtonProps, 'classNames' | 'disabled' | 'onClick'>) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' disabled={disabled} onClick={onClick}>\n <Icon icon={icon} size={4} classNames={classNames} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {text}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport type ViewType = 'editor' | 'split' | 'preview';\n\nexport type TemplateSelectProps = {\n templates?: Template[];\n onTemplateSelect?: (id: string) => void;\n};\n\nexport const TemplateSelect = ({ templates = [], onTemplateSelect }: TemplateSelectProps) => {\n return (\n <Select.Root value={''} onValueChange={onTemplateSelect}>\n <Select.TriggerButton />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value={''}>Template</Select.Option>\n {templates.map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n};\n\nexport type ViewSelectorProps = {\n view?: ViewType;\n onViewChange?: (view: ViewType) => void;\n};\n\nexport const ViewSelector = ({ view, onViewChange }: ViewSelectorProps) => {\n return (\n <ToggleGroup type='single' value={view} onValueChange={(value) => onViewChange?.(value as ViewType)}>\n <ToggleGroupItem value='editor' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--code--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='split' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--square-split-vertical--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='preview' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--eye--regular' size={4} />\n </ToggleGroupItem>\n </ToggleGroup>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n editorGutter,\n editorMonospace,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { nonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n env?: VirtualTypeScriptEnvironment;\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}: 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 editorGutter,\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 ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],\n InputModeExtensions.vscode,\n ],\n ].filter(nonNullable),\n selection,\n scrollTo,\n }),\n [id, initialValue, extensions, themeMode, selection, scrollTo],\n );\n\n return <div ref={parentRef} className={className} {...focusAttributes} />;\n};\n\nexport default TypescriptEditor;\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "import_echo", "import_react_ui_theme", "import_react_ui", "import_react_ui_editor", "Toolbar", "classNames", "deployed", "error", "functionUrl", "view", "templates", "onDeploy", "onFormat", "onViewChange", "onTemplateSelect", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "React", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "style", "contain", "TemplateSelect", "ToolbarIconButton", "icon", "text", "onClick", "div", "role", "className", "Tooltip", "Trigger", "Icon", "size", "Portal", "Content", "Arrow", "ViewSelector", "disabled", "asChild", "Button", "variant", "Select", "value", "onValueChange", "TriggerButton", "Viewport", "Option", "map", "id", "name", "key", "ToggleGroup", "type", "ToggleGroupItem", "TypescriptEditor", "env", "initialValue", "extensions", "scrollTo", "selection", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "editorFullWidth", "editorGutter", "editorMonospace", "javascript", "typescript", "autocomplete", "override", "tsAutocomplete", "tsFacet", "of", "path", "tsSync", "tsLinter", "tsHover", "InputModeExtensions", "vscode", "filter", "nonNullable", "ref", "ScriptEditor", "script", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "useMemo", "listener", "onChange", "changed", "createDataExtensions", "createDocAccessor", "setView", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "setError", "handleBindingChange", "useCallback", "binding", "handleFormat", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "handleTemplateChange", "template", "find", "metaKeys", "keys", "oldPresetIndex", "findIndex", "USERFUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "undefined", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "result", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "getInvocationUrl", "values", "runtime", "services", "edge", "url", "spaceId", "mx", "Boolean", "DebugPanel", "showBindingConfig", "onBindingChange", "ScriptContainer", "props", "attendableAttrs", "useAttendableAttributes", "fullyQualifiedId"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ScriptEditor, type ScriptEditorProps } from './ScriptEditor';\n\nconst ScriptContainer = ({ script, ...props }: ScriptEditorProps) => {\n const attendableAttrs = useAttendableAttributes(fullyQualifiedId(script));\n return (\n <div role='none' className={mx('flex row-span-2 w-full overflow-hidden attention-surface')} {...attendableAttrs}>\n <ScriptEditor {...props} script={script} />\n </div>\n );\n};\n\nexport default ScriptContainer;\n", "//\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, type ThemedClassName } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DebugPanel } from './DebugPanel';\nimport { type TemplateSelectProps, Toolbar, type ViewType } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n USERFUNCTIONS_PRESET_META_KEY,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { templates } from '../templates';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = ThemedClassName<{\n script: ScriptType;\n}> &\n Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ classNames, script, env }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n // TODO(dmaretskyi): Parametric query.\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 [view, setView] = useState<ViewType>('editor');\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 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 handleTemplateChange: TemplateSelectProps['onTemplateSelect'] = (id) => {\n const template = templates.find((template) => template.id === id);\n if (template) {\n script.name = template.name;\n script.source!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === USERFUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: USERFUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n };\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({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\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\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n script.changed = false;\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n setView('split');\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 return getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n return (\n <div role='none' className={mx('flex flex-col w-full overflow-hidden divide-y divide-separator', classNames)}>\n <Toolbar\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n functionUrl={functionUrl}\n error={error}\n view={view}\n templates={templates}\n onDeploy={handleDeploy}\n onFormat={handleFormat}\n onViewChange={setView}\n onTemplateSelect={handleTemplateChange}\n />\n\n {view !== 'preview' && (\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden ch-focus-ring-inset-over-all'\n />\n )}\n\n {view !== 'editor' && <DebugPanel functionUrl={functionUrl} />}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport {\n ElevationProvider,\n Icon,\n Select,\n type ThemedClassName,\n ToggleGroup,\n ToggleGroupItem,\n type ToolbarButtonProps,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type Template } from '../../templates';\n\nexport type ToolbarProps = ThemedClassName<\n {\n deployed?: boolean;\n error?: string;\n functionUrl?: string;\n onDeploy?: () => Promise<void>;\n onFormat?: () => Promise<void>;\n } & TemplateSelectProps &\n ViewSelectorProps\n>;\n\nexport const Toolbar = ({\n classNames,\n deployed,\n error,\n functionUrl,\n view,\n templates,\n onDeploy,\n onFormat,\n onViewChange,\n onTemplateSelect,\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 if (!pending) {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n }\n };\n\n // TODO(burdon): Factor out common toolbar components with sheet/editor?\n return (\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['p-1', classNames]} style={{ contain: 'layout' }}>\n {templates && <TemplateSelect templates={templates} onTemplateSelect={onTemplateSelect} />}\n {onFormat && <ToolbarIconButton icon='ph--magic-wand--regular' text={t('format label')} onClick={onFormat} />}\n\n <div role='separator' className='grow' />\n\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Icon icon='ph--warning-circle--regular' size={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 ) : null}\n\n {functionUrl && deployed && (\n <ToolbarIconButton icon='ph--link--regular' text={t('copy link label')} onClick={handleCopyLink} />\n )}\n\n {onDeploy && (\n <ToolbarIconButton\n icon={pending ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular'}\n classNames={[pending && 'animate-spin']}\n text={pending ? t('pending label') : t('deploy label')}\n onClick={handleDeploy}\n />\n )}\n\n <ViewSelector view={view} onViewChange={onViewChange} />\n </NaturalToolbar.Root>\n </ElevationProvider>\n );\n};\n\nconst ToolbarIconButton = ({\n icon,\n text,\n classNames,\n disabled,\n onClick,\n}: { icon: string; text: string } & Pick<ToolbarButtonProps, 'classNames' | 'disabled' | 'onClick'>) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' disabled={disabled} onClick={onClick}>\n <Icon icon={icon} size={4} classNames={classNames} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {text}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport type ViewType = 'editor' | 'split' | 'preview';\n\nexport type TemplateSelectProps = {\n templates?: Template[];\n onTemplateSelect?: (id: string) => void;\n};\n\nexport const TemplateSelect = ({ templates = [], onTemplateSelect }: TemplateSelectProps) => {\n return (\n <Select.Root value={''} onValueChange={onTemplateSelect}>\n <Select.TriggerButton />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value={''}>Template</Select.Option>\n {templates.map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n};\n\nexport type ViewSelectorProps = {\n view?: ViewType;\n onViewChange?: (view: ViewType) => void;\n};\n\nexport const ViewSelector = ({ view, onViewChange }: ViewSelectorProps) => {\n return (\n <ToggleGroup type='single' value={view} onValueChange={(value) => onViewChange?.(value as ViewType)}>\n <ToggleGroupItem value='editor' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--code--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='split' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--square-split-vertical--regular' size={4} />\n </ToggleGroupItem>\n <ToggleGroupItem value='preview' classNames='bg-transparent text-subdued'>\n <Icon icon='ph--eye--regular' size={4} />\n </ToggleGroupItem>\n </ToggleGroup>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n editorGutter,\n editorMonospace,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { nonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n env?: VirtualTypeScriptEnvironment;\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}: 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 editorGutter,\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 ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],\n InputModeExtensions.vscode,\n ],\n ].filter(nonNullable),\n selection,\n scrollTo,\n }),\n [id, initialValue, extensions, themeMode, selection, scrollTo],\n );\n\n return <div ref={parentRef} className={className} {...focusAttributes} />;\n};\n\nexport default TypescriptEditor;\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_echo", "import_react_ui_theme", "import_react_ui", "import_react_ui_editor", "Toolbar", "classNames", "deployed", "error", "functionUrl", "view", "templates", "onDeploy", "onFormat", "onViewChange", "onTemplateSelect", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "React", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "style", "contain", "TemplateSelect", "ToolbarIconButton", "icon", "text", "onClick", "div", "role", "className", "Tooltip", "Trigger", "Icon", "size", "Portal", "Content", "Arrow", "ViewSelector", "disabled", "asChild", "Button", "variant", "Select", "value", "onValueChange", "TriggerButton", "Viewport", "Option", "map", "id", "name", "key", "ToggleGroup", "type", "ToggleGroupItem", "TypescriptEditor", "env", "initialValue", "extensions", "scrollTo", "selection", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "editorFullWidth", "editorGutter", "editorMonospace", "javascript", "typescript", "autocomplete", "override", "tsAutocomplete", "tsFacet", "of", "path", "tsSync", "tsLinter", "tsHover", "InputModeExtensions", "vscode", "filter", "nonNullable", "ref", "ScriptEditor", "script", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "useMemo", "listener", "onChange", "changed", "createDataExtensions", "createDocAccessor", "setView", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "setError", "handleFormat", "useCallback", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "handleTemplateChange", "template", "find", "metaKeys", "keys", "oldPresetIndex", "findIndex", "USERFUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "undefined", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "result", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "getInvocationUrl", "values", "runtime", "services", "edge", "url", "spaceId", "mx", "Boolean", "DebugPanel", "ScriptContainer", "props", "attendableAttrs", "useAttendableAttributes", "fullyQualifiedId"]
7
7
  }
@@ -16,25 +16,26 @@ 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 chunk_EJC55SDD_exports = {};
20
- __export(chunk_EJC55SDD_exports, {
19
+ var chunk_6LYX73ZT_exports = {};
20
+ __export(chunk_6LYX73ZT_exports, {
21
21
  SCRIPT_PLUGIN: () => SCRIPT_PLUGIN,
22
22
  meta_default: () => meta_default
23
23
  });
24
- module.exports = __toCommonJS(chunk_EJC55SDD_exports);
24
+ module.exports = __toCommonJS(chunk_6LYX73ZT_exports);
25
25
  var SCRIPT_PLUGIN = "dxos.org/plugin/script";
26
26
  var meta_default = {
27
27
  id: SCRIPT_PLUGIN,
28
28
  name: "Scripts",
29
29
  description: "Distributed functions.",
30
+ icon: "ph--code--regular",
31
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
30
32
  tags: [
31
33
  "experimental"
32
- ],
33
- icon: "ph--code--regular"
34
+ ]
34
35
  };
35
36
  // Annotate the CommonJS export names for ESM import in node:
36
37
  0 && (module.exports = {
37
38
  SCRIPT_PLUGIN,
38
39
  meta_default
39
40
  });
40
- //# sourceMappingURL=chunk-EJC55SDD.cjs.map
41
+ //# sourceMappingURL=chunk-6LYX73ZT.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport default {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description: 'Distributed functions.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer',\n tags: ['experimental'],\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,gBAAgB;AAE7B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;AACT;",
6
+ "names": ["SCRIPT_PLUGIN", "id", "name", "description", "icon", "source", "tags"]
7
+ }
@@ -26,25 +26,20 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_JWKMTYYH_exports = {};
30
- __export(chunk_JWKMTYYH_exports, {
29
+ var chunk_BJ4WIWCP_exports = {};
30
+ __export(chunk_BJ4WIWCP_exports, {
31
31
  DebugPanel: () => DebugPanel
32
32
  });
33
- module.exports = __toCommonJS(chunk_JWKMTYYH_exports);
34
- var import_chunk_EJC55SDD = require("./chunk-EJC55SDD.cjs");
33
+ module.exports = __toCommonJS(chunk_BJ4WIWCP_exports);
34
+ var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
35
35
  var import_react = __toESM(require("react"));
36
36
  var import_log = require("@dxos/log");
37
37
  var import_react_ui = require("@dxos/react-ui");
38
38
  var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
39
39
  var import_react_ui_theme = require("@dxos/react-ui-theme");
40
40
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx";
41
- var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange, showBindingConfig = false }) => {
42
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_EJC55SDD.SCRIPT_PLUGIN);
43
- const bindingInputRef = (0, import_react.useRef)(null);
44
- const [binding, setBinding] = (0, import_react_ui.useControlledValue)(_binding ?? "");
45
- const handleBlur = () => {
46
- onBindingChange?.(binding);
47
- };
41
+ var DebugPanel = ({ classNames, functionUrl }) => {
42
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
48
43
  const inputRef = (0, import_react.useRef)(null);
49
44
  const [input, setInput] = (0, import_react.useState)("");
50
45
  const [result, setResult] = (0, import_react.useState)("");
@@ -159,7 +154,7 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
159
154
  if (err.name !== "AbortError") {
160
155
  import_log.log.catch(err, void 0, {
161
156
  F: __dxlog_file,
162
- L: 161,
157
+ L: 146,
163
158
  S: void 0,
164
159
  C: (f, a) => f(...a)
165
160
  });
@@ -173,7 +168,7 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
173
168
  });
174
169
  import_log.log.catch(err, void 0, {
175
170
  F: __dxlog_file,
176
- L: 168,
171
+ L: 153,
177
172
  S: void 0,
178
173
  C: (f, a) => f(...a)
179
174
  });
@@ -200,13 +195,6 @@ var DebugPanel = ({ classNames, functionUrl, binding: _binding, onBindingChange,
200
195
  value: input,
201
196
  onChange: (ev) => setInput(ev.target.value),
202
197
  onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
203
- })), showBindingConfig && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
204
- ref: bindingInputRef,
205
- classNames: "!w-[10rem]",
206
- placeholder: t("binding placeholder"),
207
- value: binding,
208
- onChange: (ev) => setBinding(ev.target.value.toUpperCase()),
209
- onBlur: handleBlur
210
198
  })), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
211
199
  onClick: () => handleRequest(input)
212
200
  }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
@@ -274,4 +262,4 @@ var RobotAvatar = () => /* @__PURE__ */ import_react.default.createElement(impor
274
262
  0 && (module.exports = {
275
263
  DebugPanel
276
264
  });
277
- //# sourceMappingURL=chunk-JWKMTYYH.cjs.map
265
+ //# sourceMappingURL=chunk-BJ4WIWCP.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DebugPanel/DebugPanel.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { Avatar, Icon, Input, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\ntype State = 'pending' | 'responding';\n\n/**\n * Request or response.\n */\ntype Message = { type: 'request' | 'response'; text?: string; data?: any; error?: Error };\n\nexport type DebugPanelProps = ThemedClassName<{\n functionUrl?: string;\n}>;\n\nexport const DebugPanel = ({ classNames, functionUrl }: DebugPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [input, setInput] = useState('');\n const [result, setResult] = useState('');\n const [state, setState] = useState<State | null>(null);\n\n // TODO(burdon): Persistent history -- at least for session (non-space ECHO data?)\n const [history, setHistory] = useState<Message[]>([]);\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 const handleClear = () => {\n handleStop();\n setInput('');\n setResult('');\n setHistory([]);\n inputRef.current?.focus();\n };\n\n const handleResponse = ({ text, data, error }: { text?: string; data?: any; error?: Error } = {}) => {\n controller.current = undefined;\n setHistory((history) => [...history, { type: 'response', text, data, error } satisfies Message]);\n setResult('');\n setState(null);\n handleScroll();\n };\n\n const handleRequest = async (input: string) => {\n // Returns a promise that resolves when a value has been received.\n try {\n setState('pending');\n\n let data = null;\n // Detect JSON input.\n if (input.charAt(0) === '{') {\n try {\n const validJsonString = input.replace(/'/g, '\"').replace(/([{,]\\s*)([a-zA-Z0-9_]+)(\\s*:)/g, '$1\"$2\"$3');\n data = JSON.parse(validJsonString);\n input = JSON.stringify(data, null, 2);\n } catch (err) {\n inputRef.current?.focus();\n return;\n }\n }\n\n setInput('');\n setResult('');\n setHistory((history) => [...history, { type: 'request', text: input }]);\n setTimeout(() => {\n handleScroll();\n });\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 headers: {\n 'Content-Type': data ? 'application/json' : 'text/plain',\n },\n });\n\n // Check for error.\n if (!response.ok) {\n const text = await response.text();\n handleResponse({ error: new Error(text || response.statusText || String(response.status)) });\n return;\n }\n\n // Check for JSON.\n const contentType = response.headers.get('content-type');\n if (contentType === 'application/json') {\n const data = await response.json();\n handleResponse({ data });\n return;\n }\n\n // Text (including streaming).\n setState('responding');\n let text = '';\n const reader = response.body!.getReader();\n const pump = async ({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> => {\n text = text + new TextDecoder().decode(value);\n if (!controller.current || done) {\n handleResponse({ text });\n return;\n }\n\n setResult(text);\n setTimeout(() => {\n handleScroll();\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: any) {\n if (err !== 'stop') {\n const error = err instanceof Error ? err : new Error(err);\n handleResponse({ error });\n log.catch(err);\n } else {\n handleResponse();\n }\n }\n };\n\n return (\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-2 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' && handleRequest(input)}\n />\n </Input.Root>\n <Toolbar.Button onClick={() => handleRequest(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 );\n};\n\n// TODO(burdon): Replace with thread?\n// TODO(burdon): Button to delete individual messages.\n// TODO(burdon): Button to edit/re-run question.\nconst MessageThread = ({ state, result, history }: { state: State | null; result: string; history: Message[] }) => {\n return (\n <>\n {history.map((message, i) => (\n <div key={i} className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>{message.type === 'response' && <RobotAvatar />}</div>\n <div className='overflow-auto'>\n <MessageItem message={message} />\n </div>\n </div>\n ))}\n {result?.length > 0 && (\n <div className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin' />) || (\n <Icon icon='ph--robot--regular' size={6} classNames='animate-[pulse_1s_ease-in-out_infinite]' />\n )}\n </div>\n <div className='overflow-auto'>\n <MessageItem message={{ type: 'response', text: result }} />\n </div>\n </div>\n )}\n </>\n );\n};\n\nconst MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message }>) => {\n const { type, text, data, error } = message;\n const wrapper = 'p-1 px-2 rounded-lg bg-hoverSurface overflow-auto';\n return (\n <div className={mx('flex', type === 'request' ? 'ml-[1rem] justify-end' : 'mr-[1rem]', classNames)}>\n {error && <div className={mx(wrapper, 'whitespace-pre text-error')}>{String(error)}</div>}\n\n {text !== undefined && (\n <div className={mx(wrapper, type === 'request' && 'bg-primary-400 dark:bg-primary-600')}>\n {text || '\\u00D8'}\n </div>\n )}\n\n {data && (\n <SyntaxHighlighter language='json' className={mx(wrapper, 'px-8 py-2 text-xs')}>\n {JSON.stringify(data, null, 2)}\n </SyntaxHighlighter>\n )}\n </div>\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"],
5
+ "mappings": "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",
6
+ "names": ["DebugPanel", "classNames", "functionUrl", "t", "useTranslation", "SCRIPT_PLUGIN", "inputRef", "useRef", "input", "setInput", "useState", "result", "setResult", "state", "setState", "history", "setHistory", "scrollerRef", "handleScroll", "current", "scrollTop", "scrollHeight", "controller", "useEffect", "handleStop", "abort", "undefined", "handleClear", "focus", "handleResponse", "text", "data", "error", "type", "handleRequest", "charAt", "validJsonString", "replace", "JSON", "parse", "stringify", "err", "setTimeout", "AbortController", "response", "fetch", "signal", "method", "body", "headers", "ok", "Error", "statusText", "String", "status", "contentType", "get", "json", "reader", "getReader", "pump", "done", "value", "TextDecoder", "decode", "read", "then", "catch", "name", "log", "React", "div", "className", "mx", "ref", "MessageThread", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "Button", "onClick", "Icon", "icon", "size", "map", "message", "i", "RobotAvatar", "MessageItem", "length", "wrapper", "SyntaxHighlighter", "language", "Avatar", "variant", "Frame"]
7
+ }
@@ -16,14 +16,14 @@ 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 chunk_25PQE7FL_exports = {};
20
- __export(chunk_25PQE7FL_exports, {
19
+ var chunk_CPNHUAFN_exports = {};
20
+ __export(chunk_CPNHUAFN_exports, {
21
21
  FunctionType: () => FunctionType,
22
22
  ScriptAction: () => ScriptAction,
23
23
  ScriptType: () => ScriptType
24
24
  });
25
- module.exports = __toCommonJS(chunk_25PQE7FL_exports);
26
- var import_chunk_EJC55SDD = require("./chunk-EJC55SDD.cjs");
25
+ module.exports = __toCommonJS(chunk_CPNHUAFN_exports);
26
+ var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
27
27
  var import_echo_schema = require("@dxos/echo-schema");
28
28
  var import_types = require("@dxos/plugin-markdown/types");
29
29
  var ScriptType = class extends (0, import_echo_schema.TypedObject)({
@@ -54,7 +54,7 @@ var FunctionType = class extends (0, import_echo_schema.TypedObject)({
54
54
  };
55
55
  var ScriptAction;
56
56
  (function(ScriptAction2) {
57
- ScriptAction2[ScriptAction2["CREATE"] = `${import_chunk_EJC55SDD.SCRIPT_PLUGIN}/create`] = "CREATE";
57
+ ScriptAction2[ScriptAction2["CREATE"] = `${import_chunk_6LYX73ZT.SCRIPT_PLUGIN}/create`] = "CREATE";
58
58
  })(ScriptAction || (ScriptAction = {}));
59
59
  // Annotate the CommonJS export names for ESM import in node:
60
60
  0 && (module.exports = {
@@ -62,4 +62,4 @@ var ScriptAction;
62
62
  ScriptAction,
63
63
  ScriptType
64
64
  });
65
- //# sourceMappingURL=chunk-25PQE7FL.cjs.map
65
+ //# sourceMappingURL=chunk-CPNHUAFN.cjs.map
@@ -31,19 +31,21 @@ __export(node_exports, {
31
31
  AutomationPanel: () => AutomationPanel,
32
32
  Bundler: () => import_chunk_ACLCRWDB.Bundler,
33
33
  Compiler: () => Compiler,
34
- FunctionType: () => import_chunk_25PQE7FL.FunctionType,
35
- ScriptAction: () => import_chunk_25PQE7FL.ScriptAction,
34
+ FunctionType: () => import_chunk_CPNHUAFN.FunctionType,
35
+ ScriptAction: () => import_chunk_CPNHUAFN.ScriptAction,
36
36
  ScriptContainer: () => ScriptContainer,
37
37
  ScriptPlugin: () => ScriptPlugin,
38
38
  ScriptSettings: () => ScriptSettings,
39
- ScriptType: () => import_chunk_25PQE7FL.ScriptType,
39
+ ScriptSettingsPanel: () => ScriptSettingsPanel,
40
+ ScriptType: () => import_chunk_CPNHUAFN.ScriptType,
40
41
  default: () => src_default,
41
42
  initializeBundler: () => import_chunk_ACLCRWDB.initializeBundler
42
43
  });
43
44
  module.exports = __toCommonJS(node_exports);
44
45
  var import_chunk_ACLCRWDB = require("./chunk-ACLCRWDB.cjs");
45
- var import_chunk_25PQE7FL = require("./chunk-25PQE7FL.cjs");
46
- var import_chunk_EJC55SDD = require("./chunk-EJC55SDD.cjs");
46
+ var import_chunk_FY5KKL5N = require("./chunk-FY5KKL5N.cjs");
47
+ var import_chunk_CPNHUAFN = require("./chunk-CPNHUAFN.cjs");
48
+ var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
47
49
  var import_esbuild = __toESM(require("esbuild-wasm/esbuild.wasm?url"));
48
50
  var import_react = __toESM(require("react"));
49
51
  var import_app_framework = require("@dxos/app-framework");
@@ -61,6 +63,10 @@ var import_react3 = __toESM(require("react"));
61
63
  var import_react_client = require("@dxos/react-client");
62
64
  var import_react_ui = require("@dxos/react-ui");
63
65
  var import_react_ui_data = require("@dxos/react-ui-data");
66
+ var import_react4 = __toESM(require("react"));
67
+ var import_react_client2 = require("@dxos/react-client");
68
+ var import_echo2 = require("@dxos/react-client/echo");
69
+ var import_react_ui2 = require("@dxos/react-ui");
64
70
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/compiler/compiler.ts";
65
71
  var defaultOptions = {
66
72
  lib: [
@@ -110,7 +116,7 @@ var Compiler = class {
110
116
  }
111
117
  };
112
118
  var ScriptSettings = ({ settings }) => {
113
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_EJC55SDD.SCRIPT_PLUGIN);
119
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
114
120
  const client = (0, import_react_client.useClient)();
115
121
  const handleAuthenticate = async () => {
116
122
  const { identityKey } = client.halo.identity.get();
@@ -133,18 +139,86 @@ var ScriptSettings = ({ settings }) => {
133
139
  }
134
140
  ]);
135
141
  };
136
- return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_data.FormInput, {
142
+ return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_data.DeprecatedFormInput, {
137
143
  label: t("authenticate action label")
138
144
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Button, {
139
145
  onClick: handleAuthenticate
140
146
  }, t("authenticate button label"))));
141
147
  };
142
- var AutomationPanel = (0, import_react2.lazy)(() => import("./AutomationPanel-SANUE5X4.cjs"));
143
- var ScriptContainer = (0, import_react2.lazy)(() => import("./ScriptContainer-BV7HMUY5.cjs"));
148
+ var ScriptSettingsPanel = ({ script }) => {
149
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
150
+ const client = (0, import_react_client2.useClient)();
151
+ const space = (0, import_echo2.getSpace)(script);
152
+ const [fn] = (0, import_echo2.useQuery)(space, import_echo2.Filter.schema(import_chunk_CPNHUAFN.FunctionType, (fn2) => fn2.source === script));
153
+ const handleNameChange = (0, import_react4.useCallback)((event) => {
154
+ script.name = event.target.value;
155
+ }, [
156
+ script
157
+ ]);
158
+ const [binding, setBinding] = (0, import_react_ui2.useControlledValue)(fn?.binding ?? "");
159
+ const handleBindingChange = (0, import_react4.useCallback)((event) => {
160
+ setBinding(event.target.value);
161
+ }, [
162
+ setBinding
163
+ ]);
164
+ const handleBindingBlur = (0, import_react4.useCallback)(() => {
165
+ fn.binding = binding;
166
+ }, [
167
+ fn,
168
+ binding
169
+ ]);
170
+ const functionPath = fn && (0, import_chunk_FY5KKL5N.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
171
+ const functionUrl = functionPath && (0, import_chunk_FY5KKL5N.getInvocationUrl)(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
172
+ spaceId: space?.id
173
+ });
174
+ const handleCopy = (0, import_react4.useCallback)(() => functionUrl && navigator.clipboard.writeText(functionUrl), [
175
+ functionUrl
176
+ ]);
177
+ return /* @__PURE__ */ import_react4.default.createElement("div", {
178
+ role: "form",
179
+ className: "flex flex-col w-full p-2 gap-4"
180
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react4.default.createElement("div", {
181
+ role: "none",
182
+ className: "flex flex-col gap-1"
183
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, t("name label")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextInput, {
184
+ placeholder: t("object title placeholder"),
185
+ value: script.name ?? "",
186
+ onChange: handleNameChange
187
+ }))), fn && /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement("hr", {
188
+ className: "border-separator"
189
+ }), /* @__PURE__ */ import_react4.default.createElement("h2", null, t("remote function settings heading")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react4.default.createElement("div", {
190
+ role: "none",
191
+ className: "flex flex-col gap-1"
192
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, t("function url label")), /* @__PURE__ */ import_react4.default.createElement("div", {
193
+ role: "none",
194
+ className: "flex gap-1"
195
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextInput, {
196
+ disabled: true,
197
+ value: functionUrl,
198
+ onChange: (event) => {
199
+ fn.name = event.target.value;
200
+ }
201
+ }), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Button, {
202
+ onClick: handleCopy
203
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Icon, {
204
+ icon: "ph--copy--regular",
205
+ size: 4
206
+ }))))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react4.default.createElement("div", {
207
+ role: "none",
208
+ className: "flex flex-col gap-1"
209
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, t("function binding label")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextInput, {
210
+ placeholder: t("function binding placeholder"),
211
+ value: binding,
212
+ onChange: handleBindingChange,
213
+ onBlur: handleBindingBlur
214
+ })))));
215
+ };
216
+ var AutomationPanel = (0, import_react2.lazy)(() => import("./AutomationPanel-OSPAFWZU.cjs"));
217
+ var ScriptContainer = (0, import_react2.lazy)(() => import("./ScriptContainer-FWHFEIHK.cjs"));
144
218
  var translations_default = [
145
219
  {
146
220
  "en-US": {
147
- [import_chunk_EJC55SDD.SCRIPT_PLUGIN]: {
221
+ [import_chunk_6LYX73ZT.SCRIPT_PLUGIN]: {
148
222
  "plugin name": "Scripts",
149
223
  "object title placeholder": "New script",
150
224
  "create object label": "Create script",
@@ -158,7 +232,12 @@ var translations_default = [
158
232
  "format label": "Format",
159
233
  "toggle details label": "Toggle details panel",
160
234
  "authenticate action label": "Authenticate functions service",
161
- "authenticate button label": "Authenticate"
235
+ "authenticate button label": "Authenticate",
236
+ "name label": "Name",
237
+ "remote function settings heading": "Remote Function",
238
+ "function url label": "Invocation URL",
239
+ "function binding label": "Function binding",
240
+ "function binding placeholder": "BINDING"
162
241
  }
163
242
  }
164
243
  }
@@ -166,7 +245,7 @@ var translations_default = [
166
245
  var ScriptPlugin = () => {
167
246
  const compiler = new Compiler();
168
247
  return {
169
- meta: import_chunk_EJC55SDD.meta_default,
248
+ meta: import_chunk_6LYX73ZT.meta_default,
170
249
  initialize: async () => {
171
250
  await compiler.initialize();
172
251
  compiler.setFile("/src/typings.d.ts", "declare module 'https://*';");
@@ -183,11 +262,11 @@ var ScriptPlugin = () => {
183
262
  settings: {},
184
263
  metadata: {
185
264
  records: {
186
- [import_chunk_25PQE7FL.ScriptType.typename]: {
265
+ [import_chunk_CPNHUAFN.ScriptType.typename]: {
187
266
  placeholder: [
188
267
  "object title placeholder",
189
268
  {
190
- ns: import_chunk_EJC55SDD.SCRIPT_PLUGIN
269
+ ns: import_chunk_6LYX73ZT.SCRIPT_PLUGIN
191
270
  }
192
271
  ],
193
272
  icon: "ph--code--regular",
@@ -201,8 +280,8 @@ var ScriptPlugin = () => {
201
280
  translations: translations_default,
202
281
  echo: {
203
282
  schema: [
204
- import_chunk_25PQE7FL.ScriptType,
205
- import_chunk_25PQE7FL.FunctionType
283
+ import_chunk_CPNHUAFN.ScriptType,
284
+ import_chunk_CPNHUAFN.FunctionType
206
285
  ]
207
286
  },
208
287
  space: {
@@ -210,10 +289,10 @@ var ScriptPlugin = () => {
210
289
  label: [
211
290
  "create object label",
212
291
  {
213
- ns: import_chunk_EJC55SDD.SCRIPT_PLUGIN
292
+ ns: import_chunk_6LYX73ZT.SCRIPT_PLUGIN
214
293
  }
215
294
  ],
216
- action: import_chunk_25PQE7FL.ScriptAction.CREATE
295
+ action: import_chunk_CPNHUAFN.ScriptAction.CREATE
217
296
  }
218
297
  },
219
298
  graph: {
@@ -224,7 +303,7 @@ var ScriptPlugin = () => {
224
303
  return [];
225
304
  }
226
305
  return (0, import_plugin_graph.createExtension)({
227
- id: import_chunk_25PQE7FL.ScriptAction.CREATE,
306
+ id: import_chunk_CPNHUAFN.ScriptAction.CREATE,
228
307
  filter: (node) => (0, import_plugin_graph.isActionGroup)(node) && node.id.startsWith(import_plugin_space.SpaceAction.ADD_OBJECT),
229
308
  actions: ({ node }) => {
230
309
  const id = node.id.split("/").at(-1);
@@ -237,12 +316,12 @@ var ScriptPlugin = () => {
237
316
  }
238
317
  return [
239
318
  {
240
- id: `${import_chunk_EJC55SDD.SCRIPT_PLUGIN}/create/${node.id}`,
319
+ id: `${import_chunk_6LYX73ZT.SCRIPT_PLUGIN}/create/${node.id}`,
241
320
  data: async () => {
242
321
  await dispatch([
243
322
  {
244
- plugin: import_chunk_EJC55SDD.SCRIPT_PLUGIN,
245
- action: import_chunk_25PQE7FL.ScriptAction.CREATE
323
+ plugin: import_chunk_6LYX73ZT.SCRIPT_PLUGIN,
324
+ action: import_chunk_CPNHUAFN.ScriptAction.CREATE
246
325
  },
247
326
  {
248
327
  action: import_plugin_space.SpaceAction.ADD_OBJECT,
@@ -259,7 +338,7 @@ var ScriptPlugin = () => {
259
338
  label: [
260
339
  "create object label",
261
340
  {
262
- ns: import_chunk_EJC55SDD.SCRIPT_PLUGIN
341
+ ns: import_chunk_6LYX73ZT.SCRIPT_PLUGIN
263
342
  }
264
343
  ],
265
344
  icon: "ph--code--regular",
@@ -275,12 +354,12 @@ var ScriptPlugin = () => {
275
354
  component: ({ data, role }) => {
276
355
  switch (role) {
277
356
  case "settings": {
278
- return data.plugin === import_chunk_EJC55SDD.meta_default.id ? /* @__PURE__ */ import_react.default.createElement(ScriptSettings, {
357
+ return data.plugin === import_chunk_6LYX73ZT.meta_default.id ? /* @__PURE__ */ import_react.default.createElement(ScriptSettings, {
279
358
  settings: {}
280
359
  }) : null;
281
360
  }
282
361
  case "article": {
283
- if (data.object instanceof import_chunk_25PQE7FL.ScriptType) {
362
+ if (data.object instanceof import_chunk_CPNHUAFN.ScriptType) {
284
363
  return /* @__PURE__ */ import_react.default.createElement(ScriptContainer, {
285
364
  script: data.object,
286
365
  env: compiler.environment
@@ -289,7 +368,7 @@ var ScriptPlugin = () => {
289
368
  break;
290
369
  }
291
370
  case "complementary--automation": {
292
- if (data.object instanceof import_chunk_25PQE7FL.ScriptType) {
371
+ if (data.subject instanceof import_chunk_CPNHUAFN.ScriptType) {
293
372
  return {
294
373
  node: /* @__PURE__ */ import_react.default.createElement(AutomationPanel, {
295
374
  subject: data.subject
@@ -297,6 +376,15 @@ var ScriptPlugin = () => {
297
376
  disposition: "hoist"
298
377
  };
299
378
  }
379
+ break;
380
+ }
381
+ case "complementary--settings": {
382
+ if (data.subject instanceof import_chunk_CPNHUAFN.ScriptType) {
383
+ return /* @__PURE__ */ import_react.default.createElement(ScriptSettingsPanel, {
384
+ script: data.subject
385
+ });
386
+ }
387
+ break;
300
388
  }
301
389
  }
302
390
  return null;
@@ -305,9 +393,9 @@ var ScriptPlugin = () => {
305
393
  intent: {
306
394
  resolver: (intent) => {
307
395
  switch (intent.action) {
308
- case import_chunk_25PQE7FL.ScriptAction.CREATE: {
396
+ case import_chunk_CPNHUAFN.ScriptAction.CREATE: {
309
397
  return {
310
- data: (0, import_echo_schema.create)(import_chunk_25PQE7FL.ScriptType, {
398
+ data: (0, import_echo_schema.create)(import_chunk_CPNHUAFN.ScriptType, {
311
399
  source: (0, import_echo_schema.create)(import_types.TextType, {
312
400
  content: import_chunk_ACLCRWDB.templates[0].source
313
401
  })
@@ -331,6 +419,7 @@ var src_default = ScriptPlugin;
331
419
  ScriptContainer,
332
420
  ScriptPlugin,
333
421
  ScriptSettings,
422
+ ScriptSettingsPanel,
334
423
  ScriptType,
335
424
  initializeBundler
336
425
  });