@dxos/plugin-script 0.7.5-main.9d2a38b → 0.7.5-main.ff8607b

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 (109) hide show
  1. package/dist/lib/browser/{AutomationPanel-OOIRJFPJ.mjs → AutomationPanel-J3SZ5L3Y.mjs} +3 -3
  2. package/dist/lib/browser/{ScriptContainer-T2AOMDT3.mjs → ScriptContainer-4TSLLF4O.mjs} +4 -4
  3. package/dist/lib/browser/{ScriptContainer-T2AOMDT3.mjs.map → ScriptContainer-4TSLLF4O.mjs.map} +1 -1
  4. package/dist/lib/browser/{chunk-SJ4J527G.mjs → chunk-45LXDWNF.mjs} +2 -2
  5. package/dist/lib/browser/{chunk-ZM6T4HPR.mjs → chunk-6MOQ4BP3.mjs} +2 -2
  6. package/dist/lib/browser/chunk-FVVCAWNP.mjs +21 -0
  7. package/dist/lib/browser/chunk-FVVCAWNP.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-XPGBHZ3L.mjs → chunk-N46LE7FS.mjs} +2 -2
  9. package/dist/lib/browser/{chunk-SIOGRRPF.mjs → chunk-UJD45AFL.mjs} +6 -6
  10. package/dist/lib/browser/chunk-UJD45AFL.mjs.map +7 -0
  11. package/dist/lib/browser/{compiler-HT53ILG7.mjs → compiler-K3FNRDDN.mjs} +3 -3
  12. package/dist/lib/browser/index.mjs +12 -12
  13. package/dist/lib/browser/index.mjs.map +3 -3
  14. package/dist/lib/browser/intent-resolver-PPUEEPJJ.mjs +45 -0
  15. package/dist/lib/browser/intent-resolver-PPUEEPJJ.mjs.map +7 -0
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/{react-surface-GAWVYTJ5.mjs → react-surface-4CEIM2FE.mjs} +11 -13
  18. package/dist/lib/browser/react-surface-4CEIM2FE.mjs.map +7 -0
  19. package/dist/lib/browser/{settings-YQQEU3DF.mjs → settings-SZCDKHWO.mjs} +3 -3
  20. package/dist/lib/browser/types.mjs +2 -2
  21. package/dist/lib/node/{AutomationPanel-EPRDDR3A.cjs → AutomationPanel-4M55FURO.cjs} +8 -8
  22. package/dist/lib/node/{ScriptContainer-BV56I4OL.cjs → ScriptContainer-7JNYGHWK.cjs} +16 -16
  23. package/dist/lib/node/{ScriptContainer-BV56I4OL.cjs.map → ScriptContainer-7JNYGHWK.cjs.map} +1 -1
  24. package/dist/lib/node/{chunk-5V3XGLTR.cjs → chunk-2LHV7KAI.cjs} +10 -10
  25. package/dist/lib/node/chunk-2LHV7KAI.cjs.map +7 -0
  26. package/dist/lib/node/{chunk-EFTZN5X7.cjs → chunk-5UH3F7TA.cjs} +8 -5
  27. package/dist/lib/node/chunk-5UH3F7TA.cjs.map +7 -0
  28. package/dist/lib/node/{chunk-A2DI2G4D.cjs → chunk-ALY3N6PW.cjs} +6 -6
  29. package/dist/lib/node/{chunk-6VKZJ4MH.cjs → chunk-DJGLGRQV.cjs} +6 -6
  30. package/dist/lib/node/{chunk-DQRAVZM7.cjs → chunk-IID7WUQS.cjs} +6 -6
  31. package/dist/lib/node/{compiler-457ZR24G.cjs → compiler-P2HQB22H.cjs} +7 -7
  32. package/dist/lib/node/index.cjs +30 -30
  33. package/dist/lib/node/index.cjs.map +3 -3
  34. package/dist/lib/node/{intent-resolver-SUAPE7H3.cjs → intent-resolver-XZC3OXVT.cjs} +30 -27
  35. package/dist/lib/node/intent-resolver-XZC3OXVT.cjs.map +7 -0
  36. package/dist/lib/node/meta.json +1 -1
  37. package/dist/lib/node/{react-surface-OMBMSFZT.cjs → react-surface-I36RLNYL.cjs} +23 -25
  38. package/dist/lib/node/react-surface-I36RLNYL.cjs.map +7 -0
  39. package/dist/lib/node/{settings-NGHDYAVK.cjs → settings-SZFSMSKM.cjs} +9 -9
  40. package/dist/lib/node/types.cjs +4 -4
  41. package/dist/lib/node/types.cjs.map +1 -1
  42. package/dist/lib/node-esm/{AutomationPanel-DMLAGQS5.mjs → AutomationPanel-W6SKG35R.mjs} +3 -3
  43. package/dist/lib/node-esm/{ScriptContainer-3S5VHJVR.mjs → ScriptContainer-BR6YLHCD.mjs} +4 -4
  44. package/dist/lib/node-esm/{ScriptContainer-3S5VHJVR.mjs.map → ScriptContainer-BR6YLHCD.mjs.map} +1 -1
  45. package/dist/lib/node-esm/{chunk-XUWS7OTK.mjs → chunk-CGF7EOGD.mjs} +2 -2
  46. package/dist/lib/node-esm/{chunk-675XSDRN.mjs → chunk-CP5LXTK5.mjs} +2 -2
  47. package/dist/lib/node-esm/{chunk-BHP545D7.mjs → chunk-P2V2Y5LV.mjs} +5 -2
  48. package/dist/lib/node-esm/chunk-P2V2Y5LV.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-JHGOPQVO.mjs → chunk-UNQFIERE.mjs} +2 -2
  50. package/dist/lib/node-esm/{chunk-XPIKUBGS.mjs → chunk-VZ7NFQL3.mjs} +6 -6
  51. package/dist/lib/node-esm/chunk-VZ7NFQL3.mjs.map +7 -0
  52. package/dist/lib/node-esm/{compiler-PEARFTFR.mjs → compiler-PDN46H4Y.mjs} +3 -3
  53. package/dist/lib/node-esm/index.mjs +12 -12
  54. package/dist/lib/node-esm/index.mjs.map +3 -3
  55. package/dist/lib/node-esm/intent-resolver-WUVFJ6AO.mjs +46 -0
  56. package/dist/lib/node-esm/intent-resolver-WUVFJ6AO.mjs.map +7 -0
  57. package/dist/lib/node-esm/meta.json +1 -1
  58. package/dist/lib/node-esm/{react-surface-J7NLV2V4.mjs → react-surface-ET5KDADI.mjs} +11 -13
  59. package/dist/lib/node-esm/react-surface-ET5KDADI.mjs.map +7 -0
  60. package/dist/lib/node-esm/{settings-XGXDY4NI.mjs → settings-GR4O2WHZ.mjs} +3 -3
  61. package/dist/lib/node-esm/types.mjs +2 -2
  62. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/index.d.ts +4 -4
  64. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  65. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  67. package/dist/types/src/meta.d.ts +1 -0
  68. package/dist/types/src/meta.d.ts.map +1 -1
  69. package/package.json +42 -41
  70. package/src/ScriptPlugin.tsx +4 -12
  71. package/src/bundler/bundler.test.ts +2 -1
  72. package/src/capabilities/intent-resolver.ts +25 -22
  73. package/src/capabilities/react-surface.tsx +6 -7
  74. package/src/components/ScriptSettings/ScriptSettings.tsx +3 -3
  75. package/src/components/TypescriptEditor/TypescriptEditor.tsx +1 -1
  76. package/src/meta.ts +3 -1
  77. package/dist/lib/browser/chunk-5BU5ERNU.mjs +0 -18
  78. package/dist/lib/browser/chunk-5BU5ERNU.mjs.map +0 -7
  79. package/dist/lib/browser/chunk-SIOGRRPF.mjs.map +0 -7
  80. package/dist/lib/browser/intent-resolver-YPHT6HDZ.mjs +0 -42
  81. package/dist/lib/browser/intent-resolver-YPHT6HDZ.mjs.map +0 -7
  82. package/dist/lib/browser/react-surface-GAWVYTJ5.mjs.map +0 -7
  83. package/dist/lib/node/chunk-5V3XGLTR.cjs.map +0 -7
  84. package/dist/lib/node/chunk-EFTZN5X7.cjs.map +0 -7
  85. package/dist/lib/node/intent-resolver-SUAPE7H3.cjs.map +0 -7
  86. package/dist/lib/node/react-surface-OMBMSFZT.cjs.map +0 -7
  87. package/dist/lib/node-esm/chunk-BHP545D7.mjs.map +0 -7
  88. package/dist/lib/node-esm/chunk-XPIKUBGS.mjs.map +0 -7
  89. package/dist/lib/node-esm/intent-resolver-SZJXQ3CW.mjs +0 -43
  90. package/dist/lib/node-esm/intent-resolver-SZJXQ3CW.mjs.map +0 -7
  91. package/dist/lib/node-esm/react-surface-J7NLV2V4.mjs.map +0 -7
  92. /package/dist/lib/browser/{AutomationPanel-OOIRJFPJ.mjs.map → AutomationPanel-J3SZ5L3Y.mjs.map} +0 -0
  93. /package/dist/lib/browser/{chunk-SJ4J527G.mjs.map → chunk-45LXDWNF.mjs.map} +0 -0
  94. /package/dist/lib/browser/{chunk-ZM6T4HPR.mjs.map → chunk-6MOQ4BP3.mjs.map} +0 -0
  95. /package/dist/lib/browser/{chunk-XPGBHZ3L.mjs.map → chunk-N46LE7FS.mjs.map} +0 -0
  96. /package/dist/lib/browser/{compiler-HT53ILG7.mjs.map → compiler-K3FNRDDN.mjs.map} +0 -0
  97. /package/dist/lib/browser/{settings-YQQEU3DF.mjs.map → settings-SZCDKHWO.mjs.map} +0 -0
  98. /package/dist/lib/node/{AutomationPanel-EPRDDR3A.cjs.map → AutomationPanel-4M55FURO.cjs.map} +0 -0
  99. /package/dist/lib/node/{chunk-A2DI2G4D.cjs.map → chunk-ALY3N6PW.cjs.map} +0 -0
  100. /package/dist/lib/node/{chunk-6VKZJ4MH.cjs.map → chunk-DJGLGRQV.cjs.map} +0 -0
  101. /package/dist/lib/node/{chunk-DQRAVZM7.cjs.map → chunk-IID7WUQS.cjs.map} +0 -0
  102. /package/dist/lib/node/{compiler-457ZR24G.cjs.map → compiler-P2HQB22H.cjs.map} +0 -0
  103. /package/dist/lib/node/{settings-NGHDYAVK.cjs.map → settings-SZFSMSKM.cjs.map} +0 -0
  104. /package/dist/lib/node-esm/{AutomationPanel-DMLAGQS5.mjs.map → AutomationPanel-W6SKG35R.mjs.map} +0 -0
  105. /package/dist/lib/node-esm/{chunk-XUWS7OTK.mjs.map → chunk-CGF7EOGD.mjs.map} +0 -0
  106. /package/dist/lib/node-esm/{chunk-675XSDRN.mjs.map → chunk-CP5LXTK5.mjs.map} +0 -0
  107. /package/dist/lib/node-esm/{chunk-JHGOPQVO.mjs.map → chunk-UNQFIERE.mjs.map} +0 -0
  108. /package/dist/lib/node-esm/{compiler-PEARFTFR.mjs.map → compiler-PDN46H4Y.mjs.map} +0 -0
  109. /package/dist/lib/node-esm/{settings-XGXDY4NI.mjs.map → settings-GR4O2WHZ.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/ScriptContainer.tsx", "../../../src/components/ScriptToolbar/ScriptToolbar.tsx", "../../../src/components/ScriptToolbar/deploy.ts", "../../../src/components/ScriptToolbar/format.ts", "../../../src/components/ScriptToolbar/templateSelect.ts", "../../../src/components/ScriptToolbar/useToolbarAction.ts", "../../../src/components/ScriptToolbar/view.ts", "../../../src/components/ScriptToolbar/useToolbarState.ts", "../../../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 { DebugPanel } from './DebugPanel';\nimport { ScriptToolbar } from './ScriptToolbar';\nimport { useDeployState } from './ScriptToolbar/deploy';\nimport { useToolbarState } from './ScriptToolbar/useToolbarState';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\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 = ({ role, classNames, script, settings, env }: 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: 'split' });\n useDeployState({ state, script });\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 !== 'debug' && (\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={script.source?.target?.content}\n extensions={extensions}\n className={stackItemContentEditorClassNames(role)}\n inputMode={settings.editorInputMode}\n toolbar\n />\n )}\n\n {state.view !== 'editor' && <DebugPanel functionUrl={state.functionUrl} />}\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 { createDeploy } from './deploy';\nimport { createFormat } from './format';\nimport { createTemplateSelect } from './templateSelect';\nimport { useToolbarAction } from './useToolbarAction';\nimport { type ScriptToolbarState } from './useToolbarState';\nimport { createView } from './view';\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 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n FunctionType,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n incrementSemverPatch,\n type ScriptType,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, create, getMeta, getSpace, makeRef, useQuery } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { type ViewState } from './view';\nimport { Bundler } from '../../bundler';\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type DeployActionProperties = { type: 'deploy' } | { type: 'copy' };\n\nexport type DeployState = ViewState & {\n deploying: boolean;\n deployed: boolean;\n functionUrl: string;\n error: string;\n};\n\nexport const createDeploy = (state: Partial<DeployState>) => {\n const errorItem = createMenuAction('error', {\n label: state.error ?? ['no error label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--warning-circle--regular',\n hidden: !state.error,\n });\n\n const deployAction = createMenuAction<DeployActionProperties>('deploy', {\n type: 'deploy',\n label: [state.deploying ? 'pending label' : 'deploy label', { ns: SCRIPT_PLUGIN }],\n icon: state.deploying ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular',\n disabled: state.deploying,\n classNames: state.deploying ? '[&_svg]:animate-spin' : '',\n });\n\n const copyAction = createMenuAction<DeployActionProperties>('copy', {\n type: 'copy',\n label: ['copy link label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--link--regular',\n disabled: !state.functionUrl,\n });\n\n return {\n nodes: [errorItem, deployAction, copyAction],\n edges: [\n { source: 'root', target: 'error' },\n { source: 'root', target: 'deploy' },\n { source: 'root', target: 'copy' },\n ],\n };\n};\n\nconst useDeployDeps = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const space = getSpace(script);\n const [fn] = useQuery(space, Filter.schema(FunctionType, { source: script }));\n const client = useClient();\n const existingFunctionUrl = useMemo(() => fn && getUserFunctionUrlInMetadata(getMeta(fn)), [fn]);\n return { space, fn, client, existingFunctionUrl };\n};\n\nexport const useDeployState = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, client, existingFunctionUrl } = useDeployDeps({ state, script });\n useEffect(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n state.functionUrl = getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n useEffect(() => {\n state.deployed = Boolean(existingFunctionUrl) && !script.changed;\n }, [script.changed, existingFunctionUrl]);\n};\n\nexport const useDeployHandler = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, fn, client, existingFunctionUrl } = useDeployDeps({ state, script });\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n return useCallback(async () => {\n if (!script.source || !space) {\n return;\n }\n\n state.error = undefined;\n state.deploying = true;\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle(script.source.target!.content);\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { functionId, version, meta } = await uploadWorkerFunction({\n client,\n spaceId: space.id,\n version: fn ? incrementSemverPatch(fn.version) : '0.0.1',\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (functionId === undefined || version === undefined) {\n throw new Error(`Upload didn't return expected data: functionId=${functionId}, version=${version}`);\n }\n\n log.info('function uploaded', { functionId, version });\n if (fn) {\n fn.version = version;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { name: functionId, version, source: makeRef(script) }));\n\n script.changed = false;\n\n if (meta.inputSchema) {\n deployedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n\n setUserFunctionUrlInMetadata(getMeta(deployedFunction), `/${space.id}/${functionId}`);\n\n state.view = 'split';\n } catch (err: any) {\n log.catch(err);\n state.error = t('upload failed label');\n }\n state.deploying = false;\n }, [fn, client, t, existingFunctionUrl, script, script.name, script.source, space?.id ?? null]);\n};\n\nexport const useCopyHandler = ({ state }: { state: Partial<DeployState> }) =>\n useCallback(async () => {\n if (!state.functionUrl) {\n return;\n }\n await navigator.clipboard.writeText(state.functionUrl);\n }, [state.functionUrl]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type FormatActionProperties = { type: 'format' };\n\nexport const createFormat = () => {\n const formatAction = createMenuAction('format', {\n label: ['format label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--magic-wand--regular',\n });\n\n return {\n nodes: [formatAction],\n edges: [{ source: 'root', target: 'format' }],\n };\n};\n\nexport const useFormatHandler = ({ script }: { script: ScriptType }) =>\n useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.target!.content = await format(script.source.target!.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// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions';\nimport { getMeta } from '@dxos/live-object';\nimport { createMenuItemGroup, createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { templates } from '../../templates';\n\nexport type TemplateActionProperties = { type: 'template'; value: string };\n\nconst createTemplateSelectGroup = () => {\n return createMenuItemGroup('template-select', {\n label: ['template select group label', { ns: SCRIPT_PLUGIN }],\n variant: 'dropdownMenu',\n });\n};\n\nconst createTemplateSelectActions = () => {\n return templates.map((template) => {\n return createMenuAction<TemplateActionProperties>(`template--${template.id}`, {\n label: template.name,\n value: template.id,\n type: 'template',\n });\n });\n};\n\nexport const createTemplateSelect = () => {\n const templateSelectGroup = createTemplateSelectGroup();\n const templateSelectActions = createTemplateSelectActions();\n return {\n nodes: [templateSelectGroup, ...templateSelectActions],\n edges: [\n { source: 'root', target: 'template-select' },\n ...templateSelectActions.map((action) => ({ source: 'template-select', target: action.id })),\n ],\n };\n};\n\nexport const useTemplateSelectHandler = ({ script }: { script: ScriptType }) => {\n return useCallback(\n (templateId: string) => {\n const template = templates.find((template) => template.id === templateId);\n if (template) {\n script.name = template.name;\n script.source!.target!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n },\n [script],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { type MenuAction, type MenuActionHandler } from '@dxos/react-ui-menu';\n\nimport { type DeployActionProperties, useDeployHandler, useCopyHandler } from './deploy';\nimport { type FormatActionProperties, useFormatHandler } from './format';\nimport { type TemplateActionProperties, useTemplateSelectHandler } from './templateSelect';\nimport { type ScriptToolbarState } from './useToolbarState';\nimport { type ViewActionProperties } from './view';\n\nexport type ScriptToolbarActionProperties =\n | TemplateActionProperties\n | ViewActionProperties\n | FormatActionProperties\n | DeployActionProperties;\n\nexport type ScriptToolbarAction = MenuAction<ScriptToolbarActionProperties>;\n\nexport const useToolbarAction = (props: { state: ScriptToolbarState; script: ScriptType }) => {\n const handleTemplateSelect = useTemplateSelectHandler(props);\n const handleFormat = useFormatHandler(props);\n const handleDeploy = useDeployHandler(props);\n const handleCopy = useCopyHandler(props);\n return useCallback(\n ((action: ScriptToolbarAction) => {\n switch (action.properties.type) {\n case 'template':\n handleTemplateSelect(action.properties.value);\n break;\n case 'view':\n props.state.view = action.properties.value;\n break;\n case 'format':\n void handleFormat();\n break;\n case 'deploy':\n void handleDeploy();\n break;\n case 'copy':\n void handleCopy();\n break;\n default:\n log.error('Unknown action type', action);\n }\n }) as MenuActionHandler,\n [handleTemplateSelect, handleFormat, handleDeploy, handleCopy],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type ViewType = 'editor' | 'split' | 'debug';\n\nexport type ViewState = { view: ViewType };\n\nexport type ViewActionProperties = { type: 'view'; value: ViewType };\n\nconst views: Record<ViewType, string> = {\n editor: 'ph--code--regular',\n split: 'ph--square-split-vertical--regular',\n debug: 'ph--bug--regular',\n};\n\nconst createViewGroupItem = (state: Partial<ViewState>) => {\n return createMenuItemGroup('view', {\n label: ['view group label', { ns: SCRIPT_PLUGIN }],\n variant: 'dropdownMenu',\n applyActive: true,\n value: state.view,\n });\n};\n\nconst createViewActions = (state: Partial<ViewState>) => {\n return Object.entries(views).map(([viewType, icon]) => {\n return createMenuAction<ViewActionProperties>(`view--${viewType}`, {\n type: 'view',\n value: viewType as ViewType,\n label: [`view ${viewType} label`, { ns: SCRIPT_PLUGIN }],\n icon,\n checked: state.view === viewType,\n });\n });\n};\n\nexport const createView = (state: Partial<ViewState>) => {\n const viewGroupItem = createViewGroupItem(state);\n const viewActions = createViewActions(state);\n return {\n nodes: [viewGroupItem, ...viewActions],\n edges: [\n { source: 'root', target: 'view' },\n ...viewActions.map((action) => ({ source: 'view', target: action.id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { create } from '@dxos/live-object';\n\nimport { type DeployState } from './deploy';\nimport { type ViewState } from './view';\n\nexport type ScriptToolbarState = Partial<DeployState & ViewState>;\n\nexport const useToolbarState = (initialState: ScriptToolbarState = {}) => {\n return useMemo(() => create<ScriptToolbarState>(initialState), []);\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 { nonNullable } 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(nonNullable),\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-base 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"],
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 { DebugPanel } from './DebugPanel';\nimport { ScriptToolbar } from './ScriptToolbar';\nimport { useDeployState } from './ScriptToolbar/deploy';\nimport { useToolbarState } from './ScriptToolbar/useToolbarState';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\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 = ({ role, classNames, script, settings, env }: 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: 'split' });\n useDeployState({ state, script });\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 !== 'debug' && (\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={script.source?.target?.content}\n extensions={extensions}\n className={stackItemContentEditorClassNames(role)}\n inputMode={settings.editorInputMode}\n toolbar\n />\n )}\n\n {state.view !== 'editor' && <DebugPanel functionUrl={state.functionUrl} />}\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 { createDeploy } from './deploy';\nimport { createFormat } from './format';\nimport { createTemplateSelect } from './templateSelect';\nimport { useToolbarAction } from './useToolbarAction';\nimport { type ScriptToolbarState } from './useToolbarState';\nimport { createView } from './view';\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 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n FunctionType,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n incrementSemverPatch,\n type ScriptType,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, create, getMeta, getSpace, makeRef, useQuery } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { type ViewState } from './view';\nimport { Bundler } from '../../bundler';\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type DeployActionProperties = { type: 'deploy' } | { type: 'copy' };\n\nexport type DeployState = ViewState & {\n deploying: boolean;\n deployed: boolean;\n functionUrl: string;\n error: string;\n};\n\nexport const createDeploy = (state: Partial<DeployState>) => {\n const errorItem = createMenuAction('error', {\n label: state.error ?? ['no error label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--warning-circle--regular',\n hidden: !state.error,\n });\n\n const deployAction = createMenuAction<DeployActionProperties>('deploy', {\n type: 'deploy',\n label: [state.deploying ? 'pending label' : 'deploy label', { ns: SCRIPT_PLUGIN }],\n icon: state.deploying ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular',\n disabled: state.deploying,\n classNames: state.deploying ? '[&_svg]:animate-spin' : '',\n });\n\n const copyAction = createMenuAction<DeployActionProperties>('copy', {\n type: 'copy',\n label: ['copy link label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--link--regular',\n disabled: !state.functionUrl,\n });\n\n return {\n nodes: [errorItem, deployAction, copyAction],\n edges: [\n { source: 'root', target: 'error' },\n { source: 'root', target: 'deploy' },\n { source: 'root', target: 'copy' },\n ],\n };\n};\n\nconst useDeployDeps = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const space = getSpace(script);\n const [fn] = useQuery(space, Filter.schema(FunctionType, { source: script }));\n const client = useClient();\n const existingFunctionUrl = useMemo(() => fn && getUserFunctionUrlInMetadata(getMeta(fn)), [fn]);\n return { space, fn, client, existingFunctionUrl };\n};\n\nexport const useDeployState = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, client, existingFunctionUrl } = useDeployDeps({ state, script });\n useEffect(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n state.functionUrl = getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n useEffect(() => {\n state.deployed = Boolean(existingFunctionUrl) && !script.changed;\n }, [script.changed, existingFunctionUrl]);\n};\n\nexport const useDeployHandler = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, fn, client, existingFunctionUrl } = useDeployDeps({ state, script });\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n return useCallback(async () => {\n if (!script.source || !space) {\n return;\n }\n\n state.error = undefined;\n state.deploying = true;\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle(script.source.target!.content);\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { functionId, version, meta } = await uploadWorkerFunction({\n client,\n spaceId: space.id,\n version: fn ? incrementSemverPatch(fn.version) : '0.0.1',\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (functionId === undefined || version === undefined) {\n throw new Error(`Upload didn't return expected data: functionId=${functionId}, version=${version}`);\n }\n\n log.info('function uploaded', { functionId, version });\n if (fn) {\n fn.version = version;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { name: functionId, version, source: makeRef(script) }));\n\n script.changed = false;\n\n if (meta.inputSchema) {\n deployedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n\n setUserFunctionUrlInMetadata(getMeta(deployedFunction), `/${space.id}/${functionId}`);\n\n state.view = 'split';\n } catch (err: any) {\n log.catch(err);\n state.error = t('upload failed label');\n }\n state.deploying = false;\n }, [fn, client, t, existingFunctionUrl, script, script.name, script.source, space?.id ?? null]);\n};\n\nexport const useCopyHandler = ({ state }: { state: Partial<DeployState> }) =>\n useCallback(async () => {\n if (!state.functionUrl) {\n return;\n }\n await navigator.clipboard.writeText(state.functionUrl);\n }, [state.functionUrl]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type FormatActionProperties = { type: 'format' };\n\nexport const createFormat = () => {\n const formatAction = createMenuAction('format', {\n label: ['format label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--magic-wand--regular',\n });\n\n return {\n nodes: [formatAction],\n edges: [{ source: 'root', target: 'format' }],\n };\n};\n\nexport const useFormatHandler = ({ script }: { script: ScriptType }) =>\n useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.target!.content = await format(script.source.target!.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// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions';\nimport { getMeta } from '@dxos/live-object';\nimport { createMenuItemGroup, createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { templates } from '../../templates';\n\nexport type TemplateActionProperties = { type: 'template'; value: string };\n\nconst createTemplateSelectGroup = () => {\n return createMenuItemGroup('template-select', {\n label: ['template select group label', { ns: SCRIPT_PLUGIN }],\n variant: 'dropdownMenu',\n });\n};\n\nconst createTemplateSelectActions = () => {\n return templates.map((template) => {\n return createMenuAction<TemplateActionProperties>(`template--${template.id}`, {\n label: template.name,\n value: template.id,\n type: 'template',\n });\n });\n};\n\nexport const createTemplateSelect = () => {\n const templateSelectGroup = createTemplateSelectGroup();\n const templateSelectActions = createTemplateSelectActions();\n return {\n nodes: [templateSelectGroup, ...templateSelectActions],\n edges: [\n { source: 'root', target: 'template-select' },\n ...templateSelectActions.map((action) => ({ source: 'template-select', target: action.id })),\n ],\n };\n};\n\nexport const useTemplateSelectHandler = ({ script }: { script: ScriptType }) => {\n return useCallback(\n (templateId: string) => {\n const template = templates.find((template) => template.id === templateId);\n if (template) {\n script.name = template.name;\n script.source!.target!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n },\n [script],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { type MenuAction, type MenuActionHandler } from '@dxos/react-ui-menu';\n\nimport { type DeployActionProperties, useDeployHandler, useCopyHandler } from './deploy';\nimport { type FormatActionProperties, useFormatHandler } from './format';\nimport { type TemplateActionProperties, useTemplateSelectHandler } from './templateSelect';\nimport { type ScriptToolbarState } from './useToolbarState';\nimport { type ViewActionProperties } from './view';\n\nexport type ScriptToolbarActionProperties =\n | TemplateActionProperties\n | ViewActionProperties\n | FormatActionProperties\n | DeployActionProperties;\n\nexport type ScriptToolbarAction = MenuAction<ScriptToolbarActionProperties>;\n\nexport const useToolbarAction = (props: { state: ScriptToolbarState; script: ScriptType }) => {\n const handleTemplateSelect = useTemplateSelectHandler(props);\n const handleFormat = useFormatHandler(props);\n const handleDeploy = useDeployHandler(props);\n const handleCopy = useCopyHandler(props);\n return useCallback(\n ((action: ScriptToolbarAction) => {\n switch (action.properties.type) {\n case 'template':\n handleTemplateSelect(action.properties.value);\n break;\n case 'view':\n props.state.view = action.properties.value;\n break;\n case 'format':\n void handleFormat();\n break;\n case 'deploy':\n void handleDeploy();\n break;\n case 'copy':\n void handleCopy();\n break;\n default:\n log.error('Unknown action type', action);\n }\n }) as MenuActionHandler,\n [handleTemplateSelect, handleFormat, handleDeploy, handleCopy],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type ViewType = 'editor' | 'split' | 'debug';\n\nexport type ViewState = { view: ViewType };\n\nexport type ViewActionProperties = { type: 'view'; value: ViewType };\n\nconst views: Record<ViewType, string> = {\n editor: 'ph--code--regular',\n split: 'ph--square-split-vertical--regular',\n debug: 'ph--bug--regular',\n};\n\nconst createViewGroupItem = (state: Partial<ViewState>) => {\n return createMenuItemGroup('view', {\n label: ['view group label', { ns: SCRIPT_PLUGIN }],\n variant: 'dropdownMenu',\n applyActive: true,\n value: state.view,\n });\n};\n\nconst createViewActions = (state: Partial<ViewState>) => {\n return Object.entries(views).map(([viewType, icon]) => {\n return createMenuAction<ViewActionProperties>(`view--${viewType}`, {\n type: 'view',\n value: viewType as ViewType,\n label: [`view ${viewType} label`, { ns: SCRIPT_PLUGIN }],\n icon,\n checked: state.view === viewType,\n });\n });\n};\n\nexport const createView = (state: Partial<ViewState>) => {\n const viewGroupItem = createViewGroupItem(state);\n const viewActions = createViewActions(state);\n return {\n nodes: [viewGroupItem, ...viewActions],\n edges: [\n { source: 'root', target: 'view' },\n ...viewActions.map((action) => ({ source: 'view', target: action.id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { create } from '@dxos/live-object';\n\nimport { type DeployState } from './deploy';\nimport { type ViewState } from './view';\n\nexport type ScriptToolbarState = Partial<DeployState & ViewState>;\n\nexport const useToolbarState = (initialState: ScriptToolbarState = {}) => {\n return useMemo(() => create<ScriptToolbarState>(initialState), []);\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 { nonNullable } 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(nonNullable),\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
5
  "mappings": "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",
6
6
  "names": ["import_react", "import_echo", "import_react_ui_editor", "import_react_ui", "import_react_ui_menu", "import_log", "import_functions", "import_live_object", "createDeploy", "state", "errorItem", "createMenuAction", "label", "error", "ns", "SCRIPT_PLUGIN", "icon", "hidden", "deployAction", "type", "deploying", "disabled", "classNames", "copyAction", "functionUrl", "nodes", "edges", "source", "target", "useDeployDeps", "script", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "client", "useClient", "existingFunctionUrl", "useMemo", "getUserFunctionUrlInMetadata", "getMeta", "useDeployState", "useEffect", "getInvocationUrl", "config", "values", "runtime", "services", "edge", "url", "spaceId", "id", "deployed", "Boolean", "changed", "useDeployHandler", "t", "useTranslation", "useCallback", "undefined", "existingFunctionId", "split", "at", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "content", "functionId", "version", "meta", "uploadWorkerFunction", "incrementSemverPatch", "Error", "log", "info", "deployedFunction", "db", "add", "create", "name", "makeRef", "inputSchema", "verbose", "setUserFunctionUrlInMetadata", "view", "err", "catch", "useCopyHandler", "navigator", "clipboard", "writeText", "createFormat", "formatAction", "useFormatHandler", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "createTemplateSelectGroup", "createMenuItemGroup", "variant", "createTemplateSelectActions", "templates", "map", "template", "value", "createTemplateSelect", "templateSelectGroup", "templateSelectActions", "action", "useTemplateSelectHandler", "templateId", "find", "metaKeys", "keys", "oldPresetIndex", "findIndex", "key", "FUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "useToolbarAction", "props", "handleTemplateSelect", "handleFormat", "handleDeploy", "handleCopy", "properties", "views", "editor", "debug", "createViewGroupItem", "applyActive", "createViewActions", "Object", "entries", "viewType", "checked", "createView", "viewGroupItem", "viewActions", "createToolbar", "templateSelect", "gap", "createGapSeparator", "deploy", "ScriptToolbar", "role", "handleAction", "toolbarCreator", "menu", "useMenuActions", "React", "div", "className", "stackItemContentToolbarClassNames", "ElevationProvider", "elevation", "MenuProvider", "onAction", "attendableId", "fullyQualifiedId", "ToolbarMenu", "useToolbarState", "initialState", "TypescriptEditor", "env", "initialValue", "extensions", "scrollTo", "selection", "toolbar", "inputMode", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "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", "nonNullable", "ref", "data-toolbar", "oneDarkHighlightStyle", "defaultHighlightStyle", "classFromKind", "_kind", "kind", "endsWith", "validTag", "tags", "tag", "style", "document", "createElement", "quickInfo", "displayParts", "part", "span", "appendChild", "innerText", "text", "dom", "ScriptContainer", "settings", "identity", "useIdentity", "listener", "onChange", "createDataExtensions", "createDocAccessor", "StackItem", "Content", "mx", "stackItemContentEditorClassNames", "editorInputMode", "DebugPanel"]
7
7
  }
@@ -26,15 +26,15 @@ 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_5V3XGLTR_exports = {};
30
- __export(chunk_5V3XGLTR_exports, {
29
+ var chunk_2LHV7KAI_exports = {};
30
+ __export(chunk_2LHV7KAI_exports, {
31
31
  AutomationPanel: () => AutomationPanel,
32
32
  ScriptContainer: () => ScriptContainer,
33
33
  ScriptSettings: () => ScriptSettings,
34
34
  ScriptSettingsPanel: () => ScriptSettingsPanel
35
35
  });
36
- module.exports = __toCommonJS(chunk_5V3XGLTR_exports);
37
- var import_chunk_EFTZN5X7 = require("./chunk-EFTZN5X7.cjs");
36
+ module.exports = __toCommonJS(chunk_2LHV7KAI_exports);
37
+ var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
38
38
  var import_react = __toESM(require("react"));
39
39
  var import_react_client = require("@dxos/react-client");
40
40
  var import_react_ui = require("@dxos/react-ui");
@@ -51,7 +51,7 @@ var import_react_ui2 = require("@dxos/react-ui");
51
51
  var import_schema = require("@dxos/schema");
52
52
  var import_react3 = require("react");
53
53
  var ScriptSettings = ({ settings }) => {
54
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_EFTZN5X7.SCRIPT_PLUGIN);
54
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_5UH3F7TA.SCRIPT_PLUGIN);
55
55
  const client = (0, import_react_client.useClient)();
56
56
  const handleAuthenticate = async () => {
57
57
  const { identityKey } = client.halo.identity.get();
@@ -74,7 +74,7 @@ var ScriptSettings = ({ settings }) => {
74
74
  }
75
75
  ]);
76
76
  };
77
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.DeprecatedFormInput, {
77
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.DeprecatedFormContainer, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.DeprecatedFormInput, {
78
78
  label: t("authenticate action label")
79
79
  }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Button, {
80
80
  onClick: handleAuthenticate
@@ -95,7 +95,7 @@ var ScriptSettings = ({ settings }) => {
95
95
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptSettingsPanel.tsx";
96
96
  var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
97
97
  var ScriptSettingsPanel = ({ script }) => {
98
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_EFTZN5X7.SCRIPT_PLUGIN);
98
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_5UH3F7TA.SCRIPT_PLUGIN);
99
99
  const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
100
100
  const client = (0, import_react_client2.useClient)();
101
101
  const space = (0, import_echo.getSpace)(script);
@@ -240,8 +240,8 @@ var ScriptSettingsPanel = ({ script }) => {
240
240
  onClick: handlePublish
241
241
  }, t(publishing ? "publishing label" : "publish label")))));
242
242
  };
243
- var AutomationPanel = (0, import_react3.lazy)(() => import("./AutomationPanel-EPRDDR3A.cjs"));
244
- var ScriptContainer = (0, import_react3.lazy)(() => import("./ScriptContainer-BV56I4OL.cjs"));
243
+ var AutomationPanel = (0, import_react3.lazy)(() => import("./AutomationPanel-4M55FURO.cjs"));
244
+ var ScriptContainer = (0, import_react3.lazy)(() => import("./ScriptContainer-7JNYGHWK.cjs"));
245
245
  // Annotate the CommonJS export names for ESM import in node:
246
246
  0 && (module.exports = {
247
247
  AutomationPanel,
@@ -249,4 +249,4 @@ var ScriptContainer = (0, import_react3.lazy)(() => import("./ScriptContainer-BV
249
249
  ScriptSettings,
250
250
  ScriptSettingsPanel
251
251
  });
252
- //# sourceMappingURL=chunk-5V3XGLTR.cjs.map
252
+ //# sourceMappingURL=chunk-2LHV7KAI.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ScriptSettings/ScriptSettings.tsx", "../../../src/components/ScriptSettingsPanel.tsx", "../../../src/components/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\nimport { useClient } from '@dxos/react-client';\nimport { Button, Select, useTranslation } from '@dxos/react-ui';\nimport { type EditorInputMode, EditorInputModes } from '@dxos/react-ui-editor';\nimport { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\nimport { type ScriptSettingsProps } from '../../types';\n\nexport const ScriptSettings = ({ settings }: { settings: ScriptSettingsProps }) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n\n // TODO(burdon): Check token.\n const handleAuthenticate = async () => {\n const { identityKey } = client.halo.identity.get()!;\n await client.halo.writeCredentials([\n {\n issuer: identityKey,\n issuanceDate: new Date(),\n subject: {\n id: identityKey,\n assertion: {\n '@type': 'dxos.halo.credentials.ServiceAccess',\n serverName: 'hub.dxos.network',\n serverKey: identityKey,\n identityKey,\n capabilities: ['composer:beta'],\n },\n },\n } satisfies Credential,\n ]);\n };\n\n return (\n <DeprecatedFormContainer>\n {/* TODO(wittjosiah): Hide outside of dev environments. */}\n <DeprecatedFormInput label={t('authenticate action label')}>\n <Button onClick={handleAuthenticate}>{t('authenticate button label')}</Button>\n </DeprecatedFormInput>\n\n <DeprecatedFormInput label={t('editor input mode label')}>\n <Select.Root\n value={settings.editorInputMode ?? 'default'}\n onValueChange={(value) => {\n settings.editorInputMode = value as EditorInputMode;\n }}\n >\n <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {EditorInputModes.map((mode) => (\n <Select.Option key={mode} value={mode}>\n {t(`settings editor input mode ${mode} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n </DeprecatedFormContainer>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Octokit } from '@octokit/core';\nimport React, { type ChangeEvent, useCallback, useEffect, useState } from 'react';\n\nimport { createIntent, SettingsAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { FunctionType, type ScriptType, getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Button, Clipboard, Input, Separator, useControlledValue, useTranslation } from '@dxos/react-ui';\nimport { AccessTokenType } from '@dxos/schema';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\n// TODO(wittjosiah): Factor out.\n// From https://stackoverflow.com/a/67243723/2804332\nconst kebabize = (str: string) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\n\nexport type ScriptSettingsPanelProps = {\n script: ScriptType;\n};\n\nexport const ScriptSettingsPanel = ({ script }: ScriptSettingsPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const space = getSpace(script);\n const [fn] = useQuery(space, Filter.schema(FunctionType, { source: script }));\n const [githubToken] = useQuery(space, Filter.schema(AccessTokenType, { source: 'github.com' }));\n const gistKey = getMeta(script).keys.find(({ source }) => source === 'github.com');\n const [gistUrl, setGistUrl] = useState<string | undefined>();\n\n useEffect(() => {\n const token = githubToken?.token;\n const gistId = gistKey?.id;\n if (!token || !gistId) {\n setGistUrl(undefined);\n return;\n }\n\n const timeout = setTimeout(async () => {\n try {\n const octokit = new Octokit({ auth: githubToken.token });\n const response = await octokit.request('GET /gists/{gist_id}', {\n gist_id: gistId,\n });\n setGistUrl(response.data.html_url);\n } catch (err) {\n log.catch(err);\n setGistUrl(undefined);\n }\n });\n\n return () => clearTimeout(timeout);\n }, [githubToken, gistKey]);\n\n const [binding, setBinding] = useControlledValue(fn?.binding ?? '');\n const handleBindingChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n setBinding(event.target.value);\n },\n [setBinding],\n );\n const handleBindingBlur = useCallback(() => {\n fn.binding = binding;\n }, [fn, binding]);\n\n const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n const functionUrl =\n functionPath &&\n getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n\n const handleOpenTokenManager = useCallback(\n () => dispatch(createIntent(SettingsAction.Open, { plugin: 'dxos.org/plugin/token-manager' })),\n [],\n );\n\n const [publishing, setPublishing] = useState(false);\n const handlePublish = useCallback(async () => {\n setPublishing(true);\n const octokit = new Octokit({ auth: githubToken.token });\n const source = await script.source.load();\n const filename = script.name ? kebabize(script.name) : 'composer-script';\n const files = { [`${filename}.ts`]: { content: source.content } };\n\n try {\n // TODO(wittjosiah): Factor out to intent.\n const meta = getMeta(script);\n const githubKey = meta.keys.find(({ source }) => source === 'github.com');\n const gistId = githubKey?.id;\n if (gistId) {\n await octokit.request('PATCH /gists/{gist_id}', {\n gist_id: gistId,\n files,\n });\n } else {\n const response = await octokit.request('POST /gists', {\n public: true,\n files,\n });\n if (response.data.id) {\n meta.keys.push({ source: 'github.com', id: response.data.id });\n }\n }\n } finally {\n setPublishing(false);\n }\n }, [script, githubToken]);\n\n return (\n <>\n {fn && functionUrl && (\n <>\n <Separator />\n <div role='form' className='flex flex-col w-full p-2 gap-4'>\n <h2>{t('remote function settings heading')}</h2>\n <Input.Root>\n <div role='none' className='flex flex-col gap-1'>\n <Input.Label>{t('function url label')}</Input.Label>\n <div role='none' className='flex gap-1'>\n <Input.TextInput\n disabled\n value={functionUrl}\n onChange={(event) => {\n fn.name = event.target.value;\n }}\n />\n <Clipboard.IconButton value={functionUrl} />\n </div>\n </div>\n </Input.Root>\n <Input.Root>\n <div role='none' className='flex flex-col gap-1'>\n <Input.Label>{t('function binding label')}</Input.Label>\n <Input.TextInput\n placeholder={t('function binding placeholder')}\n value={binding}\n onChange={handleBindingChange}\n onBlur={handleBindingBlur}\n />\n </div>\n </Input.Root>\n </div>\n </>\n )}\n <Separator />\n <div className='flex flex-col w-full p-2 gap-4'>\n <div>\n <h2>{t('script publish settings label')}</h2>\n <p className='text-description text-sm'>{t('script publish settings description')}</p>\n </div>\n {!githubToken && (\n <div className='flex flex-col items-center justify-center gap-2'>\n <span>{t('no github token label')}</span>\n <Button onClick={handleOpenTokenManager}>{t('open token manager label')}</Button>\n </div>\n )}\n {githubToken && (\n <div className='flex justify-end gap-2'>\n {gistUrl && <Clipboard.IconButton value={gistUrl} />}\n <Button disabled={publishing} onClick={handlePublish}>\n {t(publishing ? 'publishing label' : 'publish label')}\n </Button>\n </div>\n )}\n </div>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './ScriptSettings';\nexport * from './ScriptSettingsPanel';\n\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const ScriptContainer = lazy(() => import('./ScriptContainer'));\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_react_client", "import_react_ui", "ScriptSettings", "settings", "t", "useTranslation", "SCRIPT_PLUGIN", "client", "useClient", "handleAuthenticate", "identityKey", "halo", "identity", "get", "writeCredentials", "issuer", "issuanceDate", "Date", "subject", "id", "assertion", "serverName", "serverKey", "capabilities", "React", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "Button", "onClick", "Select", "Root", "value", "editorInputMode", "onValueChange", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "EditorInputModes", "map", "mode", "Option", "key", "kebabize", "str", "replace", "$", "ofs", "toLowerCase", "ScriptSettingsPanel", "script", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "githubToken", "AccessTokenType", "gistKey", "getMeta", "keys", "find", "gistUrl", "setGistUrl", "useState", "useEffect", "token", "gistId", "undefined", "timeout", "setTimeout", "octokit", "Octokit", "auth", "response", "request", "gist_id", "data", "html_url", "err", "log", "catch", "clearTimeout", "binding", "setBinding", "useControlledValue", "handleBindingChange", "useCallback", "event", "target", "handleBindingBlur", "functionPath", "getUserFunctionUrlInMetadata", "functionUrl", "getInvocationUrl", "config", "values", "runtime", "services", "edge", "url", "spaceId", "handleOpenTokenManager", "createIntent", "SettingsAction", "Open", "plugin", "publishing", "setPublishing", "handlePublish", "load", "filename", "name", "files", "content", "meta", "githubKey", "public", "push", "Separator", "div", "role", "className", "h2", "Input", "Label", "TextInput", "disabled", "onChange", "Clipboard", "IconButton", "onBlur", "p", "span", "AutomationPanel", "lazy", "ScriptContainer"]
7
+ }
@@ -16,21 +16,24 @@ 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_EFTZN5X7_exports = {};
20
- __export(chunk_EFTZN5X7_exports, {
19
+ var chunk_5UH3F7TA_exports = {};
20
+ __export(chunk_5UH3F7TA_exports, {
21
21
  SCRIPT_PLUGIN: () => SCRIPT_PLUGIN,
22
22
  meta: () => meta
23
23
  });
24
- module.exports = __toCommonJS(chunk_EFTZN5X7_exports);
24
+ module.exports = __toCommonJS(chunk_5UH3F7TA_exports);
25
25
  var SCRIPT_PLUGIN = "dxos.org/plugin/script";
26
26
  var meta = {
27
27
  id: SCRIPT_PLUGIN,
28
28
  name: "Scripts",
29
- description: "Distributed functions.",
29
+ description: "Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API\u2019s or external data inside of Composer.",
30
30
  icon: "ph--code--regular",
31
31
  source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
32
32
  tags: [
33
33
  "experimental"
34
+ ],
35
+ screenshots: [
36
+ "https://dxos.network/plugin-details-scripts-dark.png"
34
37
  ]
35
38
  };
36
39
  // Annotate the CommonJS export names for ESM import in node:
@@ -38,4 +41,4 @@ var meta = {
38
41
  SCRIPT_PLUGIN,
39
42
  meta
40
43
  });
41
- //# sourceMappingURL=chunk-EFTZN5X7.cjs.map
44
+ //# sourceMappingURL=chunk-5UH3F7TA.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 const meta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,gBAAgB;AAEtB,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;",
6
+ "names": ["SCRIPT_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots"]
7
+ }
@@ -16,19 +16,19 @@ 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_A2DI2G4D_exports = {};
20
- __export(chunk_A2DI2G4D_exports, {
19
+ var chunk_ALY3N6PW_exports = {};
20
+ __export(chunk_ALY3N6PW_exports, {
21
21
  ScriptCapabilities: () => ScriptCapabilities
22
22
  });
23
- module.exports = __toCommonJS(chunk_A2DI2G4D_exports);
24
- var import_chunk_EFTZN5X7 = require("./chunk-EFTZN5X7.cjs");
23
+ module.exports = __toCommonJS(chunk_ALY3N6PW_exports);
24
+ var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
25
25
  var import_app_framework = require("@dxos/app-framework");
26
26
  var ScriptCapabilities;
27
27
  (function(ScriptCapabilities2) {
28
- ScriptCapabilities2.Compiler = (0, import_app_framework.defineCapability)(`${import_chunk_EFTZN5X7.SCRIPT_PLUGIN}/capability/compiler`);
28
+ ScriptCapabilities2.Compiler = (0, import_app_framework.defineCapability)(`${import_chunk_5UH3F7TA.SCRIPT_PLUGIN}/capability/compiler`);
29
29
  })(ScriptCapabilities || (ScriptCapabilities = {}));
30
30
  // Annotate the CommonJS export names for ESM import in node:
31
31
  0 && (module.exports = {
32
32
  ScriptCapabilities
33
33
  });
34
- //# sourceMappingURL=chunk-A2DI2G4D.cjs.map
34
+ //# sourceMappingURL=chunk-ALY3N6PW.cjs.map
@@ -16,13 +16,13 @@ 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_6VKZJ4MH_exports = {};
20
- __export(chunk_6VKZJ4MH_exports, {
19
+ var chunk_DJGLGRQV_exports = {};
20
+ __export(chunk_DJGLGRQV_exports, {
21
21
  ScriptAction: () => ScriptAction,
22
22
  ScriptSettingsSchema: () => ScriptSettingsSchema
23
23
  });
24
- module.exports = __toCommonJS(chunk_6VKZJ4MH_exports);
25
- var import_chunk_EFTZN5X7 = require("./chunk-EFTZN5X7.cjs");
24
+ module.exports = __toCommonJS(chunk_DJGLGRQV_exports);
25
+ var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
26
26
  var import_AST = require("@effect/schema/AST");
27
27
  var import_echo = require("@dxos/client/echo");
28
28
  var import_echo_schema = require("@dxos/echo-schema");
@@ -30,7 +30,7 @@ var import_functions = require("@dxos/functions");
30
30
  var import_react_ui_editor = require("@dxos/react-ui-editor");
31
31
  var ScriptAction;
32
32
  (function(ScriptAction2) {
33
- const SCRIPT_ACTION = `${import_chunk_EFTZN5X7.SCRIPT_PLUGIN}/action`;
33
+ const SCRIPT_ACTION = `${import_chunk_5UH3F7TA.SCRIPT_PLUGIN}/action`;
34
34
  ScriptAction2.CreateScriptSchema = import_echo_schema.S.Struct({
35
35
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
36
36
  // TODO(wittjosiah): Placeholder annotation?
@@ -57,4 +57,4 @@ var ScriptSettingsSchema = import_echo_schema.S.mutable(import_echo_schema.S.Str
57
57
  ScriptAction,
58
58
  ScriptSettingsSchema
59
59
  });
60
- //# sourceMappingURL=chunk-6VKZJ4MH.cjs.map
60
+ //# sourceMappingURL=chunk-DJGLGRQV.cjs.map
@@ -26,12 +26,12 @@ 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_DQRAVZM7_exports = {};
30
- __export(chunk_DQRAVZM7_exports, {
29
+ var chunk_IID7WUQS_exports = {};
30
+ __export(chunk_IID7WUQS_exports, {
31
31
  DebugPanel: () => DebugPanel
32
32
  });
33
- module.exports = __toCommonJS(chunk_DQRAVZM7_exports);
34
- var import_chunk_EFTZN5X7 = require("./chunk-EFTZN5X7.cjs");
33
+ module.exports = __toCommonJS(chunk_IID7WUQS_exports);
34
+ var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.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");
@@ -39,7 +39,7 @@ var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highligh
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
41
  var DebugPanel = ({ classNames, functionUrl }) => {
42
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_EFTZN5X7.SCRIPT_PLUGIN);
42
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_5UH3F7TA.SCRIPT_PLUGIN);
43
43
  const inputRef = (0, import_react.useRef)(null);
44
44
  const [input, setInput] = (0, import_react.useState)("");
45
45
  const [result, setResult] = (0, import_react.useState)("");
@@ -266,4 +266,4 @@ var RobotAvatar = () => /* @__PURE__ */ import_react.default.createElement(impor
266
266
  0 && (module.exports = {
267
267
  DebugPanel
268
268
  });
269
- //# sourceMappingURL=chunk-DQRAVZM7.cjs.map
269
+ //# sourceMappingURL=chunk-IID7WUQS.cjs.map
@@ -26,14 +26,14 @@ 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 compiler_457ZR24G_exports = {};
30
- __export(compiler_457ZR24G_exports, {
29
+ var compiler_P2HQB22H_exports = {};
30
+ __export(compiler_P2HQB22H_exports, {
31
31
  default: () => compiler_default
32
32
  });
33
- module.exports = __toCommonJS(compiler_457ZR24G_exports);
33
+ module.exports = __toCommonJS(compiler_P2HQB22H_exports);
34
34
  var import_chunk_T4TXCRN5 = require("./chunk-T4TXCRN5.cjs");
35
- var import_chunk_A2DI2G4D = require("./chunk-A2DI2G4D.cjs");
36
- var import_chunk_EFTZN5X7 = require("./chunk-EFTZN5X7.cjs");
35
+ var import_chunk_ALY3N6PW = require("./chunk-ALY3N6PW.cjs");
36
+ var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
37
37
  var import_esbuild = __toESM(require("esbuild-wasm/esbuild.wasm?url"));
38
38
  var import_app_framework = require("@dxos/app-framework");
39
39
  var import_vfs = require("@typescript/vfs");
@@ -99,6 +99,6 @@ var compiler_default = async () => {
99
99
  await (0, import_chunk_T4TXCRN5.initializeBundler)({
100
100
  wasmUrl: import_esbuild.default
101
101
  });
102
- return (0, import_app_framework.contributes)(import_chunk_A2DI2G4D.ScriptCapabilities.Compiler, compiler);
102
+ return (0, import_app_framework.contributes)(import_chunk_ALY3N6PW.ScriptCapabilities.Compiler, compiler);
103
103
  };
104
- //# sourceMappingURL=compiler-457ZR24G.cjs.map
104
+ //# sourceMappingURL=compiler-P2HQB22H.cjs.map
@@ -28,40 +28,40 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var node_exports = {};
30
30
  __export(node_exports, {
31
- AutomationPanel: () => import_chunk_5V3XGLTR.AutomationPanel,
31
+ AutomationPanel: () => import_chunk_2LHV7KAI.AutomationPanel,
32
32
  Bundler: () => import_chunk_T4TXCRN5.Bundler,
33
- SCRIPT_PLUGIN: () => import_chunk_EFTZN5X7.SCRIPT_PLUGIN,
34
- ScriptCapabilities: () => import_chunk_A2DI2G4D.ScriptCapabilities,
35
- ScriptContainer: () => import_chunk_5V3XGLTR.ScriptContainer,
33
+ SCRIPT_PLUGIN: () => import_chunk_5UH3F7TA.SCRIPT_PLUGIN,
34
+ ScriptCapabilities: () => import_chunk_ALY3N6PW.ScriptCapabilities,
35
+ ScriptContainer: () => import_chunk_2LHV7KAI.ScriptContainer,
36
36
  ScriptPlugin: () => ScriptPlugin,
37
- ScriptSettings: () => import_chunk_5V3XGLTR.ScriptSettings,
38
- ScriptSettingsPanel: () => import_chunk_5V3XGLTR.ScriptSettingsPanel,
37
+ ScriptSettings: () => import_chunk_2LHV7KAI.ScriptSettings,
38
+ ScriptSettingsPanel: () => import_chunk_2LHV7KAI.ScriptSettingsPanel,
39
39
  initializeBundler: () => import_chunk_T4TXCRN5.initializeBundler,
40
- meta: () => import_chunk_EFTZN5X7.meta
40
+ meta: () => import_chunk_5UH3F7TA.meta
41
41
  });
42
42
  module.exports = __toCommonJS(node_exports);
43
43
  var import_chunk_T4TXCRN5 = require("./chunk-T4TXCRN5.cjs");
44
- var import_chunk_5V3XGLTR = require("./chunk-5V3XGLTR.cjs");
45
- var import_chunk_A2DI2G4D = require("./chunk-A2DI2G4D.cjs");
46
- var import_chunk_6VKZJ4MH = require("./chunk-6VKZJ4MH.cjs");
47
- var import_chunk_EFTZN5X7 = require("./chunk-EFTZN5X7.cjs");
44
+ var import_chunk_2LHV7KAI = require("./chunk-2LHV7KAI.cjs");
45
+ var import_chunk_ALY3N6PW = require("./chunk-ALY3N6PW.cjs");
46
+ var import_chunk_DJGLGRQV = require("./chunk-DJGLGRQV.cjs");
47
+ var import_chunk_5UH3F7TA = require("./chunk-5UH3F7TA.cjs");
48
48
  var import_app_framework = require("@dxos/app-framework");
49
49
  var import_app_framework2 = require("@dxos/app-framework");
50
50
  var import_functions = require("@dxos/functions");
51
51
  var import_live_object = require("@dxos/live-object");
52
52
  var import_plugin_client = require("@dxos/plugin-client");
53
53
  var import_functions2 = require("@dxos/functions");
54
- var Compiler = (0, import_app_framework.lazy)(() => import("./compiler-457ZR24G.cjs"));
55
- var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-SUAPE7H3.cjs"));
56
- var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-OMBMSFZT.cjs"));
57
- var ScriptSettings2 = (0, import_app_framework.lazy)(() => import("./settings-NGHDYAVK.cjs"));
54
+ var Compiler = (0, import_app_framework.lazy)(() => import("./compiler-P2HQB22H.cjs"));
55
+ var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-XZC3OXVT.cjs"));
56
+ var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-I36RLNYL.cjs"));
57
+ var ScriptSettings2 = (0, import_app_framework.lazy)(() => import("./settings-SZFSMSKM.cjs"));
58
58
  var translations_default = [
59
59
  {
60
60
  "en-US": {
61
61
  [import_functions2.ScriptType.typename]: {
62
62
  "typename label": "Script"
63
63
  },
64
- [import_chunk_EFTZN5X7.SCRIPT_PLUGIN]: {
64
+ [import_chunk_5UH3F7TA.SCRIPT_PLUGIN]: {
65
65
  "plugin name": "Scripts",
66
66
  "object title placeholder": "New script",
67
67
  "create object label": "Create script",
@@ -101,37 +101,37 @@ var translations_default = [
101
101
  }
102
102
  }
103
103
  ];
104
- var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_EFTZN5X7.meta, [
104
+ var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_5UH3F7TA.meta, [
105
105
  (0, import_app_framework2.defineModule)({
106
- id: `${import_chunk_EFTZN5X7.meta.id}/module/settings`,
106
+ id: `${import_chunk_5UH3F7TA.meta.id}/module/settings`,
107
107
  activatesOn: import_app_framework2.Events.SetupSettings,
108
108
  activate: ScriptSettings2
109
109
  }),
110
110
  (0, import_app_framework2.defineModule)({
111
- id: `${import_chunk_EFTZN5X7.meta.id}/module/compiler`,
111
+ id: `${import_chunk_5UH3F7TA.meta.id}/module/compiler`,
112
112
  activatesOn: import_app_framework2.Events.Startup,
113
113
  activate: Compiler
114
114
  }),
115
115
  (0, import_app_framework2.defineModule)({
116
- id: `${import_chunk_EFTZN5X7.meta.id}/module/translations`,
116
+ id: `${import_chunk_5UH3F7TA.meta.id}/module/translations`,
117
117
  activatesOn: import_app_framework2.Events.SetupTranslations,
118
118
  activate: () => (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Translations, translations_default)
119
119
  }),
120
120
  (0, import_app_framework2.defineModule)({
121
- id: `${import_chunk_EFTZN5X7.meta.id}/module/metadata`,
122
- activatesOn: (0, import_app_framework2.oneOf)(import_app_framework2.Events.Startup, import_app_framework2.Events.SetupAppGraph),
121
+ id: `${import_chunk_5UH3F7TA.meta.id}/module/metadata`,
122
+ activatesOn: import_app_framework2.Events.SetupMetadata,
123
123
  activate: () => (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Metadata, {
124
124
  id: import_functions.ScriptType.typename,
125
125
  metadata: {
126
- creationSchema: import_chunk_6VKZJ4MH.ScriptAction.CreateScriptSchema,
127
- createObject: (props, { space }) => (0, import_app_framework2.createIntent)(import_chunk_6VKZJ4MH.ScriptAction.Create, {
126
+ creationSchema: import_chunk_DJGLGRQV.ScriptAction.CreateScriptSchema,
127
+ createObject: (props, { space }) => (0, import_app_framework2.createIntent)(import_chunk_DJGLGRQV.ScriptAction.Create, {
128
128
  ...props,
129
129
  space
130
130
  }),
131
131
  placeholder: [
132
132
  "object title placeholder",
133
133
  {
134
- ns: import_chunk_EFTZN5X7.SCRIPT_PLUGIN
134
+ ns: import_chunk_5UH3F7TA.SCRIPT_PLUGIN
135
135
  }
136
136
  ],
137
137
  icon: "ph--code--regular",
@@ -143,8 +143,8 @@ var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_EF
143
143
  })
144
144
  }),
145
145
  (0, import_app_framework2.defineModule)({
146
- id: `${import_chunk_EFTZN5X7.meta.id}/module/schema`,
147
- activatesOn: import_plugin_client.ClientEvents.SetupClient,
146
+ id: `${import_chunk_5UH3F7TA.meta.id}/module/schema`,
147
+ activatesOn: import_plugin_client.ClientEvents.SetupSchema,
148
148
  activate: () => [
149
149
  (0, import_app_framework2.contributes)(import_plugin_client.ClientCapabilities.SystemSchema, [
150
150
  import_functions.FunctionType
@@ -155,12 +155,12 @@ var ScriptPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_EF
155
155
  ]
156
156
  }),
157
157
  (0, import_app_framework2.defineModule)({
158
- id: `${import_chunk_EFTZN5X7.meta.id}/module/react-surface`,
159
- activatesOn: import_app_framework2.Events.Startup,
158
+ id: `${import_chunk_5UH3F7TA.meta.id}/module/react-surface`,
159
+ activatesOn: import_app_framework2.Events.SetupSurfaces,
160
160
  activate: ReactSurface
161
161
  }),
162
162
  (0, import_app_framework2.defineModule)({
163
- id: `${import_chunk_EFTZN5X7.meta.id}/module/intent-resolver`,
163
+ id: `${import_chunk_5UH3F7TA.meta.id}/module/intent-resolver`,
164
164
  activatesOn: import_app_framework2.Events.SetupIntents,
165
165
  activate: IntentResolver
166
166
  })