@dxos/plugin-registry 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6

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 (136) hide show
  1. package/dist/lib/browser/cli/index.mjs +15 -19
  2. package/dist/lib/browser/cli/index.mjs.map +3 -3
  3. package/dist/lib/browser/index.mjs +50 -41
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/node-esm/cli/index.mjs +15 -18
  7. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  8. package/dist/lib/node-esm/index.mjs +51 -41
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/types/src/RegistryPlugin.d.ts.map +1 -1
  12. package/dist/types/src/capabilities/app-graph-builder.d.ts +6 -0
  13. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  14. package/dist/types/src/capabilities/index.d.ts +5 -3
  15. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  16. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  17. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  18. package/dist/types/src/capabilities/react-surface.d.ts +5 -0
  19. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  20. package/dist/types/src/cli/commands/disable.d.ts +2 -2
  21. package/dist/types/src/cli/commands/enable.d.ts +2 -2
  22. package/dist/types/src/cli/plugin.d.ts.map +1 -1
  23. package/dist/types/src/cli/storage.d.ts +4 -4
  24. package/dist/types/src/cli/storage.d.ts.map +1 -1
  25. package/dist/types/src/components/PluginDetail/PluginDetail.d.ts +15 -0
  26. package/dist/types/src/components/PluginDetail/PluginDetail.d.ts.map +1 -0
  27. package/dist/types/src/components/PluginDetail/PluginDetail.stories.d.ts +43 -0
  28. package/dist/types/src/components/PluginDetail/PluginDetail.stories.d.ts.map +1 -0
  29. package/dist/types/src/components/PluginDetail/index.d.ts +2 -0
  30. package/dist/types/src/components/PluginDetail/index.d.ts.map +1 -0
  31. package/dist/types/src/components/PluginList/PluginItem.d.ts.map +1 -0
  32. package/dist/types/src/components/PluginList/PluginList.d.ts.map +1 -0
  33. package/dist/types/src/components/PluginList/PluginList.stories.d.ts +38 -0
  34. package/dist/types/src/components/PluginList/PluginList.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/PluginList/index.d.ts +2 -0
  36. package/dist/types/src/components/PluginList/index.d.ts.map +1 -0
  37. package/dist/types/src/components/index.d.ts +0 -1
  38. package/dist/types/src/components/index.d.ts.map +1 -1
  39. package/dist/types/src/containers/LoadPluginDialog/LoadPluginDialog.d.ts +4 -0
  40. package/dist/types/src/containers/LoadPluginDialog/LoadPluginDialog.d.ts.map +1 -0
  41. package/dist/types/src/containers/LoadPluginDialog/index.d.ts +3 -0
  42. package/dist/types/src/containers/LoadPluginDialog/index.d.ts.map +1 -0
  43. package/dist/types/src/containers/PluginArticle/PluginArticle.d.ts +7 -0
  44. package/dist/types/src/containers/PluginArticle/PluginArticle.d.ts.map +1 -0
  45. package/dist/types/src/containers/PluginArticle/index.d.ts +3 -0
  46. package/dist/types/src/containers/PluginArticle/index.d.ts.map +1 -0
  47. package/dist/types/src/containers/PluginRegistry/PluginRegistry.d.ts +14 -0
  48. package/dist/types/src/containers/PluginRegistry/PluginRegistry.d.ts.map +1 -0
  49. package/dist/types/src/containers/PluginRegistry/index.d.ts +3 -0
  50. package/dist/types/src/containers/PluginRegistry/index.d.ts.map +1 -0
  51. package/dist/types/src/containers/index.d.ts +6 -0
  52. package/dist/types/src/containers/index.d.ts.map +1 -0
  53. package/dist/types/src/meta.d.ts +5 -1
  54. package/dist/types/src/meta.d.ts.map +1 -1
  55. package/dist/types/src/operations/index.d.ts +3 -0
  56. package/dist/types/src/operations/index.d.ts.map +1 -0
  57. package/dist/types/src/operations/open-plugin-registry.d.ts +5 -0
  58. package/dist/types/src/operations/open-plugin-registry.d.ts.map +1 -0
  59. package/dist/types/src/translations.d.ts +19 -15
  60. package/dist/types/src/translations.d.ts.map +1 -1
  61. package/dist/types/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +41 -31
  63. package/src/RegistryPlugin.tsx +9 -7
  64. package/src/capabilities/app-graph-builder.ts +148 -0
  65. package/src/capabilities/index.ts +9 -3
  66. package/src/capabilities/operation-handler.ts +16 -0
  67. package/src/capabilities/react-surface.tsx +94 -0
  68. package/src/cli/plugin.ts +4 -3
  69. package/src/cli/storage.ts +14 -21
  70. package/src/components/{PluginDetail.stories.tsx → PluginDetail/PluginDetail.stories.tsx} +4 -3
  71. package/src/components/PluginDetail/PluginDetail.tsx +84 -0
  72. package/src/components/PluginDetail/index.ts +5 -0
  73. package/src/components/{PluginItem.tsx → PluginList/PluginItem.tsx} +16 -12
  74. package/src/components/{PluginList.stories.tsx → PluginList/PluginList.stories.tsx} +17 -7
  75. package/src/components/PluginList/index.ts +5 -0
  76. package/src/components/index.ts +0 -1
  77. package/src/containers/LoadPluginDialog/LoadPluginDialog.tsx +84 -0
  78. package/src/containers/LoadPluginDialog/index.ts +7 -0
  79. package/src/containers/PluginArticle/PluginArticle.tsx +28 -0
  80. package/src/containers/PluginArticle/index.ts +7 -0
  81. package/src/containers/PluginRegistry/PluginRegistry.tsx +94 -0
  82. package/src/containers/PluginRegistry/index.ts +7 -0
  83. package/src/containers/index.ts +10 -0
  84. package/src/meta.ts +12 -5
  85. package/src/operations/index.ts +7 -0
  86. package/src/operations/open-plugin-registry.ts +21 -0
  87. package/src/translations.ts +19 -15
  88. package/dist/lib/browser/app-graph-builder-P3ZGGFAR.mjs +0 -166
  89. package/dist/lib/browser/app-graph-builder-P3ZGGFAR.mjs.map +0 -7
  90. package/dist/lib/browser/chunk-VOAOTNGS.mjs +0 -19
  91. package/dist/lib/browser/chunk-VOAOTNGS.mjs.map +0 -7
  92. package/dist/lib/browser/operation-resolver-P5PKLPRT.mjs +0 -24
  93. package/dist/lib/browser/operation-resolver-P5PKLPRT.mjs.map +0 -7
  94. package/dist/lib/browser/react-surface-IIM6T7IA.mjs +0 -337
  95. package/dist/lib/browser/react-surface-IIM6T7IA.mjs.map +0 -7
  96. package/dist/lib/node-esm/app-graph-builder-56JXLOGZ.mjs +0 -167
  97. package/dist/lib/node-esm/app-graph-builder-56JXLOGZ.mjs.map +0 -7
  98. package/dist/lib/node-esm/chunk-SALMIZ2W.mjs +0 -21
  99. package/dist/lib/node-esm/chunk-SALMIZ2W.mjs.map +0 -7
  100. package/dist/lib/node-esm/operation-resolver-3ZB5W3T3.mjs +0 -25
  101. package/dist/lib/node-esm/operation-resolver-3ZB5W3T3.mjs.map +0 -7
  102. package/dist/lib/node-esm/react-surface-F67P7RC3.mjs +0 -338
  103. package/dist/lib/node-esm/react-surface-F67P7RC3.mjs.map +0 -7
  104. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +0 -6
  105. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  106. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  107. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  108. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  109. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  110. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  111. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  112. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  113. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  114. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +0 -5
  115. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  116. package/dist/types/src/components/PluginDetail.d.ts +0 -9
  117. package/dist/types/src/components/PluginDetail.d.ts.map +0 -1
  118. package/dist/types/src/components/PluginDetail.stories.d.ts +0 -32
  119. package/dist/types/src/components/PluginDetail.stories.d.ts.map +0 -1
  120. package/dist/types/src/components/PluginItem.d.ts.map +0 -1
  121. package/dist/types/src/components/PluginList.d.ts.map +0 -1
  122. package/dist/types/src/components/PluginList.stories.d.ts +0 -34
  123. package/dist/types/src/components/PluginList.stories.d.ts.map +0 -1
  124. package/dist/types/src/components/RegistryContainer.d.ts +0 -8
  125. package/dist/types/src/components/RegistryContainer.d.ts.map +0 -1
  126. package/src/capabilities/app-graph-builder/app-graph-builder.ts +0 -136
  127. package/src/capabilities/app-graph-builder/index.ts +0 -7
  128. package/src/capabilities/operation-resolver/index.ts +0 -7
  129. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -23
  130. package/src/capabilities/react-surface/index.ts +0 -7
  131. package/src/capabilities/react-surface/react-surface.tsx +0 -99
  132. package/src/components/PluginDetail.tsx +0 -79
  133. package/src/components/RegistryContainer.tsx +0 -83
  134. /package/dist/types/src/components/{PluginItem.d.ts → PluginList/PluginItem.d.ts} +0 -0
  135. /package/dist/types/src/components/{PluginList.d.ts → PluginList/PluginList.d.ts} +0 -0
  136. /package/src/components/{PluginList.tsx → PluginList/PluginList.tsx} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface/react-surface.tsx", "../../../src/components/PluginDetail.tsx", "../../../src/components/PluginList.tsx", "../../../src/components/PluginItem.tsx", "../../../src/components/RegistryContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Capability, Common, Plugin } from '@dxos/app-framework';\nimport { usePluginManager } from '@dxos/app-framework/react';\nimport { runAndForwardErrors } from '@dxos/effect';\n\nimport { PluginDetail, RegistryContainer } from '../../components';\nimport { REGISTRY_KEY, meta } from '../../meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Common.Capability.ReactSurface, [\n Common.createSurface({\n id: `${meta.id}/all`,\n role: 'article',\n filter: (data): data is any => data.subject === `${REGISTRY_KEY}+all`,\n component: () => {\n const manager = usePluginManager();\n const filtered = useMemo(\n () => manager.getPlugins().filter(({ meta }) => !manager.getCore().includes(meta.id)),\n [],\n );\n\n return <RegistryContainer id={`${REGISTRY_KEY}+all`} plugins={filtered} />;\n },\n }),\n Common.createSurface({\n id: `${meta.id}/installed`,\n role: 'article',\n filter: (data): data is any => data.subject === `${REGISTRY_KEY}+installed`,\n component: () => {\n const manager = usePluginManager();\n const filtered = useMemo(\n () =>\n manager\n .getPlugins()\n .filter(({ meta }) => !manager.getCore().includes(meta.id))\n .filter(({ meta }) => manager.getEnabled().includes(meta.id)),\n [],\n );\n\n return <RegistryContainer id={`${REGISTRY_KEY}+installed`} plugins={filtered} />;\n },\n }),\n Common.createSurface({\n id: `${meta.id}/recommended`,\n role: 'article',\n filter: (data): data is any => data.subject === `${REGISTRY_KEY}+recommended`,\n component: () => {\n const manager = usePluginManager();\n const filtered = useMemo(\n () =>\n manager\n .getPlugins()\n .filter(({ meta }) => !manager.getCore().includes(meta.id))\n .filter(({ meta }) => !meta.tags?.includes('labs')),\n [],\n );\n\n return <RegistryContainer id={`${REGISTRY_KEY}+recommended`} plugins={filtered} />;\n },\n }),\n Common.createSurface({\n id: `${meta.id}/labs`,\n role: 'article',\n filter: (data): data is any => data.subject === `${REGISTRY_KEY}+labs`,\n component: () => {\n const manager = usePluginManager();\n const filtered = useMemo(() => manager.getPlugins().filter(({ meta }) => meta.tags?.includes('labs')), []);\n\n return <RegistryContainer id={`${REGISTRY_KEY}+labs`} plugins={filtered} />;\n },\n }),\n Common.createSurface({\n id: `${meta.id}/plugin-details`,\n role: 'article',\n filter: (data): data is { subject: Plugin.Plugin } => Plugin.isPlugin(data.subject),\n component: ({ data: { subject } }) => {\n const manager = usePluginManager();\n const enabled = manager.getEnabled().includes(subject.meta.id);\n const handleEnableChange = useCallback(\n (enabled: boolean) =>\n enabled\n ? runAndForwardErrors(manager.enable(subject.meta.id))\n : runAndForwardErrors(manager.disable(subject.meta.id)),\n [manager, subject.meta.id],\n );\n\n return <PluginDetail plugin={subject} enabled={enabled} onEnabledChange={handleEnableChange} />;\n },\n }),\n ]),\n ),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { Icon, Input, Link, useTranslation } from '@dxos/react-ui';\nimport { Layout } from '@dxos/react-ui-mosaic';\nimport { getStyles, mx } from '@dxos/ui-theme';\n\nimport { meta } from '../meta';\n\nexport type PluginDetailProps = {\n plugin: Plugin.Plugin;\n enabled?: boolean;\n onEnabledChange?: (enabled: boolean) => void;\n};\n\nexport const PluginDetail = ({ plugin, enabled, onEnabledChange }: PluginDetailProps) => {\n const { t } = useTranslation(meta.id);\n const {\n id,\n name,\n description,\n homePage,\n source,\n screenshots,\n icon = 'ph--circle--regular',\n iconHue = 'neutral',\n } = plugin.meta;\n const styles = getStyles(iconHue);\n\n return (\n <Layout.Container scrollable>\n <div role='none' className='grid grid-cols-[min-content_1fr] gap-4 container-max-width p-4'>\n <div role='none'>\n <Icon classNames={mx('p-1 rounded', styles.bg, styles.icon)} icon={icon} size={14} />\n </div>\n <div role='none' className='flex flex-col gap-6'>\n <div role='none' className='grid grid-cols-[1fr_min-content] gap-x-3 is-full pbs-1'>\n <h2 className='text-xl'>{name}</h2>\n <Input.Root>\n <Input.Switch classNames='self-center' checked={enabled} onCheckedChange={onEnabledChange} />\n </Input.Root>\n <p className='pbs-0.5 text-sm text-description'>{id}</p>\n </div>\n <div role='none'>\n <p className='text-description'>{description}</p>\n </div>\n {screenshots && screenshots.length > 0 && (\n <div role='none' className='flex flex-col gap-2'>\n <h2>Preview</h2>\n <img src={screenshots[0]} alt={name} className='aspect-video object-fit' />\n </div>\n )}\n <div role='none' className='flex flex-col gap-2'>\n <h2>Resources</h2>\n <div className='flex gap-2'>\n {homePage && (\n <Link href={homePage} target='_blank' rel='noreferrer' classNames='text-sm text-description'>\n {t('home page label')}\n <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />\n </Link>\n )}\n\n {source && (\n <Link href={source} target='_blank' rel='noreferrer' classNames='text-sm text-description'>\n {t('source label')}\n <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />\n </Link>\n )}\n </div>\n </div>\n </div>\n </div>\n </Layout.Container>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { List } from '@dxos/react-ui';\n\nimport { PluginItem, type PluginItemProps } from './PluginItem';\n\nexport type PluginListProps = Omit<PluginItemProps, 'plugin'> & {\n plugins?: readonly Plugin.Plugin[];\n};\n\nexport const PluginList = ({ plugins = [], ...props }: PluginListProps) => {\n return (\n <List classNames='grid grid-cols-[repeat(auto-fill,minmax(18rem,1fr))] auto-rows-[max-content] gap-4 p-4'>\n {plugins.map((plugin) => (\n <PluginItem key={plugin.meta.id} plugin={plugin} {...props} />\n ))}\n </List>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type MouseEvent, useCallback } from 'react';\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { type ChromaticPalette, Icon, IconButton, Input, Link, ListItem, Tag, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/ui-theme';\nimport { getStyles } from '@dxos/ui-theme';\n\nimport { meta } from '../meta';\nimport { type RegistryTagType } from '../types';\n\nexport type PluginItemProps = {\n plugin: Plugin.Plugin;\n installed?: readonly string[];\n enabled?: readonly string[];\n onClick?: (id: string) => void;\n onChange?: (id: string, enabled: boolean) => void;\n hasSettings?: (id: string) => boolean;\n onSettings?: (id: string) => void;\n};\n\nexport const PluginItem = ({\n plugin,\n enabled = [],\n onClick,\n onChange,\n hasSettings: hasSettingsProp,\n onSettings,\n}: PluginItemProps) => {\n const { t } = useTranslation(meta.id);\n const { id, name, description, tags, icon = 'ph--circle--regular', iconHue = 'neutral' } = plugin.meta;\n const isEnabled = enabled.includes(id);\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n const descriptionId = `${id}-description`;\n const handleClick = useCallback(() => onClick?.(id), [id, onClick]);\n\n const handleChange = useCallback(\n (event: MouseEvent) => {\n event.stopPropagation();\n onChange?.(id, !isEnabled);\n },\n [id, isEnabled, onChange],\n );\n\n const hasSettings = hasSettingsProp?.(id) ?? false;\n const handleSettings = useCallback(() => onSettings?.(id), [id, onSettings]);\n const styles = getStyles(iconHue);\n const gridCols = 'grid grid-cols-[5rem_1fr]';\n const gridRows = 'grid grid-rows-[40px_1fr_min-content_40px]';\n\n return (\n <ListItem.Root\n key={id}\n labelId={labelId}\n data-testid={`pluginList.${id}`}\n aria-describedby={descriptionId}\n classNames={mx(gridCols, 'bs-[12rem] is-full gap-3 pie-2 border border-separator rounded-md overflow-hidden')}\n >\n <div className={mx(gridRows, 'justify-center rounded-l-md', styles.bg)}>\n <div />\n <Icon classNames={mx('cursor-pointer', styles.icon)} icon={icon} size={14} onClick={handleClick} />\n </div>\n\n <div className={mx(gridRows)}>\n <div className='flex items-center overflow-hidden cursor-pointer' onClick={handleClick}>\n <span className='text-lg truncate'>{name ?? id}</span>\n </div>\n\n <div>\n <p className={mx(descriptionText, 'line-clamp-4 min-is-0')}>{description}</p>\n </div>\n\n <div className='flex -mis-0.5 overflow-x-auto scrollbar-none'>\n {tags?.map((tag) => (\n <Tag key={tag} palette={tagColors[tag as RegistryTagType]} classNames='text-xs uppercase font-thin'>\n {tag}\n </Tag>\n ))}\n </div>\n\n <div className='flex gap-2 items-center text-sm'>\n <IconButton\n aria-describedby={descriptionId}\n classNames='cursor-pointer'\n icon='ph--gear--regular'\n label={t('settings label')}\n iconOnly\n size={4}\n onClick={handleSettings}\n disabled={!hasSettings}\n />\n\n <Link aria-describedby={descriptionId} classNames='text-description cursor-pointer' onClick={handleClick}>\n {t('details label')}\n </Link>\n\n <div className='grow' />\n <div className='pie-1'>\n <Input.Root id={inputId}>\n <Input.Switch classNames='self-center' checked={isEnabled} onClick={handleChange} />\n </Input.Root>\n </div>\n </div>\n </div>\n </ListItem.Root>\n );\n};\n\nconst tagColors: Record<RegistryTagType, ChromaticPalette> = {\n new: 'rose',\n beta: 'teal',\n labs: 'blue',\n popular: 'green',\n featured: 'pink',\n experimental: 'amber',\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Common, type Plugin, SettingsOperation } from '@dxos/app-framework';\nimport { useCapabilities, useOperationInvoker, usePluginManager } from '@dxos/app-framework/react';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/types';\nimport { Layout } from '@dxos/react-ui-mosaic';\n\nimport { PluginList } from './PluginList';\n\nconst sortByPluginMeta = ({ meta: { name: a = '' } }: Plugin.Plugin, { meta: { name: b = '' } }: Plugin.Plugin) =>\n a.localeCompare(b);\n\nexport type RegistryContainerProps = {\n id: string;\n plugins: Plugin.Plugin[];\n};\n\nexport const RegistryContainer = ({ id, plugins: pluginsProp }: RegistryContainerProps) => {\n const manager = usePluginManager();\n const { invoke, invokePromise } = useOperationInvoker();\n const plugins = useMemo(() => pluginsProp.sort(sortByPluginMeta), [pluginsProp]);\n const enabled = useAtomValue(manager.enabled);\n const allSettings = useCapabilities(Common.Capability.Settings);\n\n // TODO(wittjosiah): Factor out to an intent?\n const handleChange = useCallback(\n (id: string, enabled: boolean) =>\n Effect.gen(function* () {\n if (enabled) {\n yield* manager.enable(id);\n } else {\n yield* manager.disable(id);\n }\n\n yield* invoke(ObservabilityOperation.SendEvent, {\n name: 'plugins.toggle',\n properties: {\n plugin: id,\n enabled,\n },\n });\n }).pipe(runAndForwardErrors),\n [invoke, manager],\n );\n\n const handleClick = useCallback(\n (pluginId: string) =>\n invokePromise(Common.LayoutOperation.Open, {\n // TODO(wittjosiah): `/` currently is not supported in ids.\n subject: [pluginId.replaceAll('/', ':')],\n pivotId: id,\n positioning: 'end',\n }),\n [invokePromise, id],\n );\n\n const hasSettings = useCallback((pluginId: string) => allSettings.some((s) => s.prefix === pluginId), [allSettings]);\n\n const handleSettings = useCallback(\n (pluginId: string) => invokePromise(SettingsOperation.Open, { plugin: pluginId }),\n [invokePromise],\n );\n\n return (\n <Layout.Container scrollable>\n <PluginList\n plugins={plugins}\n enabled={enabled}\n onClick={handleClick}\n onChange={handleChange}\n hasSettings={hasSettings}\n onSettings={handleSettings}\n />\n </Layout.Container>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["Effect", "React", "useCallback", "useMemo", "Capability", "Common", "Plugin", "usePluginManager", "runAndForwardErrors", "React", "Icon", "Input", "Link", "useTranslation", "Layout", "getStyles", "mx", "PluginDetail", "plugin", "enabled", "onEnabledChange", "t", "useTranslation", "meta", "id", "name", "description", "homePage", "source", "screenshots", "icon", "iconHue", "styles", "getStyles", "Layout", "Container", "scrollable", "div", "role", "className", "Icon", "classNames", "mx", "bg", "size", "h2", "Input", "Root", "Switch", "checked", "onCheckedChange", "p", "length", "img", "src", "alt", "Link", "href", "target", "rel", "React", "List", "React", "useCallback", "Icon", "IconButton", "Input", "Link", "ListItem", "Tag", "useTranslation", "descriptionText", "mx", "getStyles", "PluginItem", "plugin", "enabled", "onClick", "onChange", "hasSettings", "hasSettingsProp", "onSettings", "t", "useTranslation", "meta", "id", "name", "description", "tags", "icon", "iconHue", "isEnabled", "includes", "inputId", "labelId", "descriptionId", "handleClick", "useCallback", "handleChange", "event", "stopPropagation", "handleSettings", "styles", "getStyles", "gridCols", "gridRows", "React", "ListItem", "Root", "key", "data-testid", "aria-describedby", "classNames", "mx", "div", "className", "bg", "Icon", "size", "span", "p", "descriptionText", "map", "tag", "Tag", "palette", "tagColors", "IconButton", "label", "iconOnly", "disabled", "Link", "Input", "Switch", "checked", "new", "beta", "labs", "popular", "featured", "experimental", "PluginList", "plugins", "props", "React", "List", "classNames", "map", "plugin", "PluginItem", "key", "meta", "id", "useAtomValue", "Effect", "React", "useCallback", "useMemo", "Common", "SettingsOperation", "useCapabilities", "useOperationInvoker", "usePluginManager", "runAndForwardErrors", "ObservabilityOperation", "Layout", "sortByPluginMeta", "meta", "name", "a", "b", "localeCompare", "RegistryContainer", "id", "plugins", "pluginsProp", "manager", "usePluginManager", "invoke", "invokePromise", "useOperationInvoker", "useMemo", "sort", "enabled", "useAtomValue", "allSettings", "useCapabilities", "Common", "Capability", "Settings", "handleChange", "useCallback", "gen", "enable", "disable", "ObservabilityOperation", "SendEvent", "properties", "plugin", "pipe", "runAndForwardErrors", "handleClick", "pluginId", "LayoutOperation", "Open", "subject", "replaceAll", "pivotId", "positioning", "hasSettings", "some", "s", "prefix", "handleSettings", "SettingsOperation", "React", "Layout", "Container", "scrollable", "PluginList", "onClick", "onChange", "onSettings", "Capability", "makeModule", "succeed", "contributes", "Common", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "subject", "REGISTRY_KEY", "component", "manager", "usePluginManager", "filtered", "useMemo", "getPlugins", "getCore", "includes", "React", "RegistryContainer", "plugins", "getEnabled", "tags", "Plugin", "isPlugin", "enabled", "handleEnableChange", "useCallback", "runAndForwardErrors", "enable", "disable", "PluginDetail", "plugin", "onEnabledChange"]
7
- }
@@ -1,6 +0,0 @@
1
- import * as Effect from 'effect/Effect';
2
- import { Capability } from '@dxos/app-framework';
3
- import { GraphBuilder } from '@dxos/plugin-graph';
4
- declare const _default: (props?: void | undefined) => Effect.Effect<Capability.Capability<Capability.InterfaceDef<GraphBuilder.BuilderExtensions>>, never, Capability.Service>;
5
- export default _default;
6
- //# sourceMappingURL=app-graph-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-graph-builder.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAA6B,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAC;;AAI/D,wBA2HE"}
@@ -1,3 +0,0 @@
1
- import { Capability } from '@dxos/app-framework';
2
- export declare const AppGraphBuilder: Capability.LazyCapability<void, Capability.Capability<Capability.InterfaceDef<import("@dxos/app-graph").BuilderExtensions>>, Error>;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/app-graph-builder/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,eAAO,MAAM,eAAe,qIAA0E,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Capability } from '@dxos/app-framework';
2
- export declare const OperationResolver: Capability.LazyCapability<void, Capability.Capability<Capability.InterfaceDef<import("@dxos/app-framework/Common").Capability.OperationResolver[]>>, Error>;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/operation-resolver/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,6JAA6E,CAAC"}
@@ -1,5 +0,0 @@
1
- import * as Effect from 'effect/Effect';
2
- import { Capability, Common } from '@dxos/app-framework';
3
- declare const _default: (props?: void | undefined) => Effect.Effect<Capability.Capability<Capability.InterfaceDef<Common.Capability.OperationResolver[]>>, never, never>;
4
- export default _default;
5
- //# sourceMappingURL=operation-resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/operation-resolver/operation-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAqB,MAAM,qBAAqB,CAAC;;AAK5E,wBAWE"}
@@ -1,3 +0,0 @@
1
- import { Capability } from '@dxos/app-framework';
2
- export declare const ReactSurface: Capability.LazyCapability<void, Capability.Capability<Capability.InterfaceDef<import("@dxos/app-framework/Common").Capability.ReactSurface>>, Error>;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/react-surface/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,eAAO,MAAM,YAAY,sJAAmE,CAAC"}
@@ -1,5 +0,0 @@
1
- import * as Effect from 'effect/Effect';
2
- import { Capability, Common } from '@dxos/app-framework';
3
- declare const _default: (props?: void | undefined) => Effect.Effect<Capability.Capability<Capability.InterfaceDef<Common.Capability.ReactSurface>>, never, never>;
4
- export default _default;
5
- //# sourceMappingURL=react-surface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/react-surface/react-surface.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAU,MAAM,qBAAqB,CAAC;;AAOjE,wBAoFE"}
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { type Plugin } from '@dxos/app-framework';
3
- export type PluginDetailProps = {
4
- plugin: Plugin.Plugin;
5
- enabled?: boolean;
6
- onEnabledChange?: (enabled: boolean) => void;
7
- };
8
- export declare const PluginDetail: ({ plugin, enabled, onEnabledChange }: PluginDetailProps) => React.JSX.Element;
9
- //# sourceMappingURL=PluginDetail.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginDetail.d.ts","sourceRoot":"","sources":["../../../../src/components/PluginDetail.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAOlD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,sCAAsC,iBAAiB,sBA2DnF,CAAC"}
@@ -1,32 +0,0 @@
1
- import { type StoryObj } from '@storybook/react-vite';
2
- declare const meta: {
3
- title: string;
4
- component: ({ plugin, enabled, onEnabledChange }: import("./PluginDetail").PluginDetailProps) => import("react").JSX.Element;
5
- decorators: import("@storybook/react").Decorator[];
6
- parameters: {
7
- translations: [{
8
- readonly 'en-US': {
9
- readonly [meta.id]: {
10
- readonly 'plugin name': "Registry";
11
- readonly 'details label': "Details";
12
- readonly 'home page label': "Website";
13
- readonly 'source label': "Source";
14
- readonly 'plugin registry label': "Plugin Registry";
15
- readonly 'all plugins label': "All";
16
- readonly 'installed plugins label': "Enabled";
17
- readonly 'recommended plugins label': "Recommended";
18
- readonly 'labs plugins label': "Labs";
19
- readonly 'community plugins label': "Community";
20
- readonly 'load by url label': "Load by URL (soon)";
21
- readonly 'coming soon label': "Coming soon!";
22
- readonly 'open plugin registry label': "Open plugin registry";
23
- readonly 'settings label': "Settings";
24
- };
25
- };
26
- }];
27
- };
28
- };
29
- export default meta;
30
- type Story = StoryObj<typeof meta>;
31
- export declare const Default: Story;
32
- //# sourceMappingURL=PluginDetail.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginDetail.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/PluginDetail.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAUjE,QAAA,MAAM,IAAI;;;;;;;yBAPO,CAAO,IAAI,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;CAcK,CAAC;AAEtC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAerB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginItem.d.ts","sourceRoot":"","sources":["../../../../src/components/PluginItem.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQlD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,mFAOxB,eAAe,sBA+EjB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginList.d.ts","sourceRoot":"","sources":["../../../../src/components/PluginList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;IAC9D,OAAO,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,uBAA4B,eAAe,sBAQrE,CAAC"}
@@ -1,34 +0,0 @@
1
- import { type StoryObj } from '@storybook/react-vite';
2
- import React from 'react';
3
- declare const meta: {
4
- title: string;
5
- component: ({ plugins, ...props }: import("./PluginList").PluginListProps) => React.JSX.Element;
6
- render: () => React.JSX.Element;
7
- parameters: {
8
- translations: [{
9
- readonly 'en-US': {
10
- readonly [meta.id]: {
11
- readonly 'plugin name': "Registry";
12
- readonly 'details label': "Details";
13
- readonly 'home page label': "Website";
14
- readonly 'source label': "Source";
15
- readonly 'plugin registry label': "Plugin Registry";
16
- readonly 'all plugins label': "All";
17
- readonly 'installed plugins label': "Enabled";
18
- readonly 'recommended plugins label': "Recommended";
19
- readonly 'labs plugins label': "Labs";
20
- readonly 'community plugins label': "Community";
21
- readonly 'load by url label': "Load by URL (soon)";
22
- readonly 'coming soon label': "Coming soon!";
23
- readonly 'open plugin registry label': "Open plugin registry";
24
- readonly 'settings label': "Settings";
25
- };
26
- };
27
- }];
28
- };
29
- };
30
- export default meta;
31
- type Story = StoryObj<typeof meta>;
32
- export declare const Default: Story;
33
- export declare const FullScreen: Story;
34
- //# sourceMappingURL=PluginList.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginList.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/PluginList.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAiDxC,QAAA,MAAM,IAAI;;;;;;;yBA/CY,CAAO,IAAI,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;CAsDF,CAAC;AAEpC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC"}
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- import { type Plugin } from '@dxos/app-framework';
3
- export type RegistryContainerProps = {
4
- id: string;
5
- plugins: Plugin.Plugin[];
6
- };
7
- export declare const RegistryContainer: ({ id, plugins: pluginsProp }: RegistryContainerProps) => React.JSX.Element;
8
- //# sourceMappingURL=RegistryContainer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RegistryContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/RegistryContainer.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAU,KAAK,MAAM,EAAqB,MAAM,qBAAqB,CAAC;AAW7E,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,8BAA8B,sBAAsB,sBA0DrF,CAAC"}
@@ -1,136 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import * as Effect from 'effect/Effect';
6
-
7
- import { Capability, Common, SettingsOperation } from '@dxos/app-framework';
8
- import { Operation } from '@dxos/operation';
9
- import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
10
-
11
- import { REGISTRY_ID, REGISTRY_KEY, meta } from '../../meta';
12
-
13
- export default Capability.makeModule(
14
- Effect.fnUntraced(function* () {
15
- const capabilities = yield* Capability.Service;
16
-
17
- const extensions = yield* Effect.all([
18
- GraphBuilder.createExtension({
19
- id: meta.id,
20
- match: NodeMatcher.whenRoot,
21
- actions: () =>
22
- Effect.succeed([
23
- {
24
- id: meta.id,
25
- data: () => Operation.invoke(SettingsOperation.OpenPluginRegistry),
26
- properties: {
27
- label: ['open plugin registry label', { ns: meta.id }],
28
- icon: 'ph--squares-four--regular',
29
- disposition: 'menu',
30
- },
31
- },
32
- ]),
33
- }),
34
- GraphBuilder.createExtension({
35
- id: meta.id,
36
- match: NodeMatcher.whenRoot,
37
- connector: () =>
38
- Effect.succeed([
39
- {
40
- id: REGISTRY_ID,
41
- type: meta.id,
42
- properties: {
43
- label: ['plugin registry label', { ns: meta.id }],
44
- icon: 'ph--squares-four--regular',
45
- disposition: 'pin-end',
46
- testId: 'treeView.pluginRegistry',
47
- },
48
- nodes: [
49
- {
50
- id: `${REGISTRY_KEY}+all`,
51
- type: 'category',
52
- data: `${REGISTRY_KEY}+all`,
53
- properties: {
54
- label: ['all plugins label', { ns: meta.id }],
55
- icon: 'ph--squares-four--regular',
56
- key: REGISTRY_KEY,
57
- testId: 'pluginRegistry.all',
58
- },
59
- },
60
- {
61
- id: `${REGISTRY_KEY}+installed`,
62
- type: 'category',
63
- data: `${REGISTRY_KEY}+installed`,
64
- properties: {
65
- label: ['installed plugins label', { ns: meta.id }],
66
- icon: 'ph--check--regular',
67
- key: REGISTRY_KEY,
68
- testId: 'pluginRegistry.installed',
69
- },
70
- },
71
- {
72
- id: `${REGISTRY_KEY}+recommended`,
73
- type: 'category',
74
- data: `${REGISTRY_KEY}+recommended`,
75
- properties: {
76
- label: ['recommended plugins label', { ns: meta.id }],
77
- icon: 'ph--star--regular',
78
- key: REGISTRY_KEY,
79
- testId: 'pluginRegistry.recommended',
80
- },
81
- },
82
- {
83
- id: `${REGISTRY_KEY}+labs`,
84
- type: 'category',
85
- data: `${REGISTRY_KEY}+labs`,
86
- properties: {
87
- label: ['labs plugins label', { ns: meta.id }],
88
- icon: 'ph--flask--regular',
89
- key: REGISTRY_KEY,
90
- testId: 'pluginRegistry.labs',
91
- },
92
- },
93
- ],
94
- },
95
- ]),
96
- }),
97
- GraphBuilder.createExtension({
98
- id: `${meta.id}/actions`,
99
- match: NodeMatcher.whenId(REGISTRY_ID),
100
- actions: () =>
101
- Effect.succeed([
102
- {
103
- id: `${meta.id}/load-by-url`,
104
- data: Effect.fnUntraced(function* () {}),
105
- properties: {
106
- label: ['load by url label', { ns: meta.id }],
107
- icon: 'ph--cloud-arrow-down--regular',
108
- disabled: true,
109
- },
110
- },
111
- ]),
112
- }),
113
- GraphBuilder.createExtension({
114
- id: `${meta.id}/plugins`,
115
- match: NodeMatcher.whenId(REGISTRY_ID),
116
- connector: () => {
117
- const manager = capabilities.get(Common.Capability.PluginManager);
118
- return Effect.succeed(
119
- manager.getPlugins().map((plugin) => ({
120
- id: plugin.meta.id.replaceAll('/', ':'),
121
- type: 'dxos.org/plugin',
122
- data: plugin,
123
- properties: {
124
- label: plugin.meta.name ?? plugin.meta.id,
125
- icon: plugin.meta.icon ?? 'ph--circle--regular',
126
- disposition: 'hidden',
127
- },
128
- })),
129
- );
130
- },
131
- }),
132
- ]);
133
-
134
- return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);
135
- }),
136
- );
@@ -1,7 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Capability } from '@dxos/app-framework';
6
-
7
- export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
@@ -1,7 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Capability } from '@dxos/app-framework';
6
-
7
- export const OperationResolver = Capability.lazy('OperationResolver', () => import('./operation-resolver'));
@@ -1,23 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import * as Effect from 'effect/Effect';
6
-
7
- import { Capability, Common, SettingsOperation } from '@dxos/app-framework';
8
- import { Operation, OperationResolver } from '@dxos/operation';
9
-
10
- import { REGISTRY_ID } from '../../meta';
11
-
12
- export default Capability.makeModule(
13
- Effect.fnUntraced(function* () {
14
- return Capability.contributes(Common.Capability.OperationResolver, [
15
- OperationResolver.make({
16
- operation: SettingsOperation.OpenPluginRegistry,
17
- handler: Effect.fnUntraced(function* () {
18
- yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, { subject: REGISTRY_ID });
19
- }),
20
- }),
21
- ]);
22
- }),
23
- );
@@ -1,7 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Capability } from '@dxos/app-framework';
6
-
7
- export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
@@ -1,99 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import * as Effect from 'effect/Effect';
6
- import React, { useCallback, useMemo } from 'react';
7
-
8
- import { Capability, Common, Plugin } from '@dxos/app-framework';
9
- import { usePluginManager } from '@dxos/app-framework/react';
10
- import { runAndForwardErrors } from '@dxos/effect';
11
-
12
- import { PluginDetail, RegistryContainer } from '../../components';
13
- import { REGISTRY_KEY, meta } from '../../meta';
14
-
15
- export default Capability.makeModule(() =>
16
- Effect.succeed(
17
- Capability.contributes(Common.Capability.ReactSurface, [
18
- Common.createSurface({
19
- id: `${meta.id}/all`,
20
- role: 'article',
21
- filter: (data): data is any => data.subject === `${REGISTRY_KEY}+all`,
22
- component: () => {
23
- const manager = usePluginManager();
24
- const filtered = useMemo(
25
- () => manager.getPlugins().filter(({ meta }) => !manager.getCore().includes(meta.id)),
26
- [],
27
- );
28
-
29
- return <RegistryContainer id={`${REGISTRY_KEY}+all`} plugins={filtered} />;
30
- },
31
- }),
32
- Common.createSurface({
33
- id: `${meta.id}/installed`,
34
- role: 'article',
35
- filter: (data): data is any => data.subject === `${REGISTRY_KEY}+installed`,
36
- component: () => {
37
- const manager = usePluginManager();
38
- const filtered = useMemo(
39
- () =>
40
- manager
41
- .getPlugins()
42
- .filter(({ meta }) => !manager.getCore().includes(meta.id))
43
- .filter(({ meta }) => manager.getEnabled().includes(meta.id)),
44
- [],
45
- );
46
-
47
- return <RegistryContainer id={`${REGISTRY_KEY}+installed`} plugins={filtered} />;
48
- },
49
- }),
50
- Common.createSurface({
51
- id: `${meta.id}/recommended`,
52
- role: 'article',
53
- filter: (data): data is any => data.subject === `${REGISTRY_KEY}+recommended`,
54
- component: () => {
55
- const manager = usePluginManager();
56
- const filtered = useMemo(
57
- () =>
58
- manager
59
- .getPlugins()
60
- .filter(({ meta }) => !manager.getCore().includes(meta.id))
61
- .filter(({ meta }) => !meta.tags?.includes('labs')),
62
- [],
63
- );
64
-
65
- return <RegistryContainer id={`${REGISTRY_KEY}+recommended`} plugins={filtered} />;
66
- },
67
- }),
68
- Common.createSurface({
69
- id: `${meta.id}/labs`,
70
- role: 'article',
71
- filter: (data): data is any => data.subject === `${REGISTRY_KEY}+labs`,
72
- component: () => {
73
- const manager = usePluginManager();
74
- const filtered = useMemo(() => manager.getPlugins().filter(({ meta }) => meta.tags?.includes('labs')), []);
75
-
76
- return <RegistryContainer id={`${REGISTRY_KEY}+labs`} plugins={filtered} />;
77
- },
78
- }),
79
- Common.createSurface({
80
- id: `${meta.id}/plugin-details`,
81
- role: 'article',
82
- filter: (data): data is { subject: Plugin.Plugin } => Plugin.isPlugin(data.subject),
83
- component: ({ data: { subject } }) => {
84
- const manager = usePluginManager();
85
- const enabled = manager.getEnabled().includes(subject.meta.id);
86
- const handleEnableChange = useCallback(
87
- (enabled: boolean) =>
88
- enabled
89
- ? runAndForwardErrors(manager.enable(subject.meta.id))
90
- : runAndForwardErrors(manager.disable(subject.meta.id)),
91
- [manager, subject.meta.id],
92
- );
93
-
94
- return <PluginDetail plugin={subject} enabled={enabled} onEnabledChange={handleEnableChange} />;
95
- },
96
- }),
97
- ]),
98
- ),
99
- );
@@ -1,79 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import React from 'react';
6
-
7
- import { type Plugin } from '@dxos/app-framework';
8
- import { Icon, Input, Link, useTranslation } from '@dxos/react-ui';
9
- import { Layout } from '@dxos/react-ui-mosaic';
10
- import { getStyles, mx } from '@dxos/ui-theme';
11
-
12
- import { meta } from '../meta';
13
-
14
- export type PluginDetailProps = {
15
- plugin: Plugin.Plugin;
16
- enabled?: boolean;
17
- onEnabledChange?: (enabled: boolean) => void;
18
- };
19
-
20
- export const PluginDetail = ({ plugin, enabled, onEnabledChange }: PluginDetailProps) => {
21
- const { t } = useTranslation(meta.id);
22
- const {
23
- id,
24
- name,
25
- description,
26
- homePage,
27
- source,
28
- screenshots,
29
- icon = 'ph--circle--regular',
30
- iconHue = 'neutral',
31
- } = plugin.meta;
32
- const styles = getStyles(iconHue);
33
-
34
- return (
35
- <Layout.Container scrollable>
36
- <div role='none' className='grid grid-cols-[min-content_1fr] gap-4 container-max-width p-4'>
37
- <div role='none'>
38
- <Icon classNames={mx('p-1 rounded', styles.bg, styles.icon)} icon={icon} size={14} />
39
- </div>
40
- <div role='none' className='flex flex-col gap-6'>
41
- <div role='none' className='grid grid-cols-[1fr_min-content] gap-x-3 is-full pbs-1'>
42
- <h2 className='text-xl'>{name}</h2>
43
- <Input.Root>
44
- <Input.Switch classNames='self-center' checked={enabled} onCheckedChange={onEnabledChange} />
45
- </Input.Root>
46
- <p className='pbs-0.5 text-sm text-description'>{id}</p>
47
- </div>
48
- <div role='none'>
49
- <p className='text-description'>{description}</p>
50
- </div>
51
- {screenshots && screenshots.length > 0 && (
52
- <div role='none' className='flex flex-col gap-2'>
53
- <h2>Preview</h2>
54
- <img src={screenshots[0]} alt={name} className='aspect-video object-fit' />
55
- </div>
56
- )}
57
- <div role='none' className='flex flex-col gap-2'>
58
- <h2>Resources</h2>
59
- <div className='flex gap-2'>
60
- {homePage && (
61
- <Link href={homePage} target='_blank' rel='noreferrer' classNames='text-sm text-description'>
62
- {t('home page label')}
63
- <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />
64
- </Link>
65
- )}
66
-
67
- {source && (
68
- <Link href={source} target='_blank' rel='noreferrer' classNames='text-sm text-description'>
69
- {t('source label')}
70
- <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />
71
- </Link>
72
- )}
73
- </div>
74
- </div>
75
- </div>
76
- </div>
77
- </Layout.Container>
78
- );
79
- };