@dxos/plugin-registry 0.8.4-main.72ec0f3 → 0.8.4-main.8360d9e660

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 (158) hide show
  1. package/dist/lib/browser/PluginArticle-N2ITBUGD.mjs +29 -0
  2. package/dist/lib/browser/PluginArticle-N2ITBUGD.mjs.map +7 -0
  3. package/dist/lib/browser/PluginRegistry-DKO4UEYH.mjs +78 -0
  4. package/dist/lib/browser/PluginRegistry-DKO4UEYH.mjs.map +7 -0
  5. package/dist/lib/browser/app-graph-builder-AHS5BI4Y.mjs +167 -0
  6. package/dist/lib/browser/app-graph-builder-AHS5BI4Y.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2YWVCU2W.mjs +191 -0
  8. package/dist/lib/browser/chunk-2YWVCU2W.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-XPEFEID2.mjs → chunk-KMUDYITM.mjs} +4 -2
  10. package/dist/lib/browser/chunk-KMUDYITM.mjs.map +7 -0
  11. package/dist/lib/browser/cli/index.mjs +222 -0
  12. package/dist/lib/browser/cli/index.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +25 -29
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/operation-resolver-PK4B2BZQ.mjs +25 -0
  17. package/dist/lib/browser/operation-resolver-PK4B2BZQ.mjs.map +7 -0
  18. package/dist/lib/browser/react-surface-ZBP7YXKO.mjs +85 -0
  19. package/dist/lib/browser/react-surface-ZBP7YXKO.mjs.map +7 -0
  20. package/dist/lib/node-esm/PluginArticle-3NEYDKN5.mjs +30 -0
  21. package/dist/lib/node-esm/PluginArticle-3NEYDKN5.mjs.map +7 -0
  22. package/dist/lib/node-esm/PluginRegistry-BYKWC732.mjs +79 -0
  23. package/dist/lib/node-esm/PluginRegistry-BYKWC732.mjs.map +7 -0
  24. package/dist/lib/node-esm/app-graph-builder-DBDL5WWF.mjs +168 -0
  25. package/dist/lib/node-esm/app-graph-builder-DBDL5WWF.mjs.map +7 -0
  26. package/dist/lib/node-esm/chunk-BOCFM775.mjs +192 -0
  27. package/dist/lib/node-esm/chunk-BOCFM775.mjs.map +7 -0
  28. package/dist/lib/node-esm/chunk-ENSNUFQK.mjs +23 -0
  29. package/dist/lib/node-esm/chunk-ENSNUFQK.mjs.map +7 -0
  30. package/dist/lib/node-esm/cli/index.mjs +223 -0
  31. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  32. package/dist/lib/node-esm/index.mjs +66 -0
  33. package/dist/lib/node-esm/index.mjs.map +7 -0
  34. package/dist/lib/node-esm/meta.json +1 -0
  35. package/dist/lib/node-esm/operation-resolver-CCHN4NBP.mjs +26 -0
  36. package/dist/lib/node-esm/operation-resolver-CCHN4NBP.mjs.map +7 -0
  37. package/dist/lib/node-esm/react-surface-FJHMLGZF.mjs +86 -0
  38. package/dist/lib/node-esm/react-surface-FJHMLGZF.mjs.map +7 -0
  39. package/dist/types/src/RegistryPlugin.d.ts +2 -1
  40. package/dist/types/src/RegistryPlugin.d.ts.map +1 -1
  41. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  42. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  43. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  44. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  45. package/dist/types/src/capabilities/index.d.ts +3 -3
  46. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  48. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  50. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  51. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  52. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  54. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  55. package/dist/types/src/cli/commands/disable.d.ts +11 -0
  56. package/dist/types/src/cli/commands/disable.d.ts.map +1 -0
  57. package/dist/types/src/cli/commands/enable.d.ts +11 -0
  58. package/dist/types/src/cli/commands/enable.d.ts.map +1 -0
  59. package/dist/types/src/cli/commands/index.d.ts +3 -0
  60. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  61. package/dist/types/src/cli/commands/list.d.ts +7 -0
  62. package/dist/types/src/cli/commands/list.d.ts.map +1 -0
  63. package/dist/types/src/cli/commands/util.d.ts +11 -0
  64. package/dist/types/src/cli/commands/util.d.ts.map +1 -0
  65. package/dist/types/src/cli/index.d.ts +3 -0
  66. package/dist/types/src/cli/index.d.ts.map +1 -0
  67. package/dist/types/src/cli/plugin.d.ts +3 -0
  68. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  69. package/dist/types/src/cli/storage.d.ts +18 -0
  70. package/dist/types/src/cli/storage.d.ts.map +1 -0
  71. package/dist/types/src/components/PluginDetail/PluginDetail.d.ts +9 -0
  72. package/dist/types/src/components/PluginDetail/PluginDetail.d.ts.map +1 -0
  73. package/dist/types/src/components/{PluginDetail.stories.d.ts → PluginDetail/PluginDetail.stories.d.ts} +2 -1
  74. package/dist/types/src/components/PluginDetail/PluginDetail.stories.d.ts.map +1 -0
  75. package/dist/types/src/components/PluginDetail/index.d.ts +2 -0
  76. package/dist/types/src/components/PluginDetail/index.d.ts.map +1 -0
  77. package/dist/types/src/components/{PluginItem.d.ts → PluginList/PluginItem.d.ts} +2 -2
  78. package/dist/types/src/components/PluginList/PluginItem.d.ts.map +1 -0
  79. package/dist/types/src/components/{PluginList.d.ts → PluginList/PluginList.d.ts} +1 -1
  80. package/dist/types/src/components/PluginList/PluginList.d.ts.map +1 -0
  81. package/dist/types/src/components/PluginList/PluginList.stories.d.ts.map +1 -0
  82. package/dist/types/src/components/PluginList/index.d.ts +2 -0
  83. package/dist/types/src/components/PluginList/index.d.ts.map +1 -0
  84. package/dist/types/src/components/index.d.ts +0 -1
  85. package/dist/types/src/components/index.d.ts.map +1 -1
  86. package/dist/types/src/containers/PluginArticle/PluginArticle.d.ts +7 -0
  87. package/dist/types/src/containers/PluginArticle/PluginArticle.d.ts.map +1 -0
  88. package/dist/types/src/containers/PluginArticle/index.d.ts +3 -0
  89. package/dist/types/src/containers/PluginArticle/index.d.ts.map +1 -0
  90. package/dist/types/src/containers/PluginRegistry/PluginRegistry.d.ts +8 -0
  91. package/dist/types/src/containers/PluginRegistry/PluginRegistry.d.ts.map +1 -0
  92. package/dist/types/src/containers/PluginRegistry/index.d.ts +3 -0
  93. package/dist/types/src/containers/PluginRegistry/index.d.ts.map +1 -0
  94. package/dist/types/src/containers/index.d.ts +4 -0
  95. package/dist/types/src/containers/index.d.ts.map +1 -0
  96. package/dist/types/src/meta.d.ts +4 -2
  97. package/dist/types/src/meta.d.ts.map +1 -1
  98. package/dist/types/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +50 -32
  100. package/src/RegistryPlugin.tsx +10 -24
  101. package/src/capabilities/app-graph-builder/app-graph-builder.ts +137 -0
  102. package/src/capabilities/app-graph-builder/index.ts +7 -0
  103. package/src/capabilities/index.ts +3 -5
  104. package/src/capabilities/operation-resolver/index.ts +7 -0
  105. package/src/capabilities/operation-resolver/operation-resolver.ts +24 -0
  106. package/src/capabilities/react-surface/index.ts +7 -0
  107. package/src/capabilities/react-surface/react-surface.tsx +88 -0
  108. package/src/cli/commands/disable.ts +47 -0
  109. package/src/cli/commands/enable.ts +44 -0
  110. package/src/cli/commands/index.ts +14 -0
  111. package/src/cli/commands/list.ts +41 -0
  112. package/src/cli/commands/util.ts +24 -0
  113. package/src/cli/index.ts +6 -0
  114. package/src/cli/plugin.ts +17 -0
  115. package/src/cli/storage.ts +50 -0
  116. package/src/components/PluginDetail/PluginDetail.stories.tsx +44 -0
  117. package/src/components/PluginDetail/PluginDetail.tsx +81 -0
  118. package/src/components/PluginDetail/index.ts +5 -0
  119. package/src/components/{PluginItem.tsx → PluginList/PluginItem.tsx} +18 -14
  120. package/src/components/PluginList/PluginList.stories.tsx +84 -0
  121. package/src/components/{PluginList.tsx → PluginList/PluginList.tsx} +2 -2
  122. package/src/components/PluginList/index.ts +5 -0
  123. package/src/components/index.ts +0 -1
  124. package/src/containers/PluginArticle/PluginArticle.tsx +28 -0
  125. package/src/containers/PluginArticle/index.ts +7 -0
  126. package/src/containers/PluginRegistry/PluginRegistry.tsx +86 -0
  127. package/src/containers/PluginRegistry/index.ts +7 -0
  128. package/src/containers/index.ts +8 -0
  129. package/src/meta.ts +6 -6
  130. package/dist/lib/browser/app-graph-builder-6CNBP3A4.mjs +0 -162
  131. package/dist/lib/browser/app-graph-builder-6CNBP3A4.mjs.map +0 -7
  132. package/dist/lib/browser/chunk-XPEFEID2.mjs.map +0 -7
  133. package/dist/lib/browser/intent-resolver-LKNUYBTN.mjs +0 -23
  134. package/dist/lib/browser/intent-resolver-LKNUYBTN.mjs.map +0 -7
  135. package/dist/lib/browser/react-surface-IGCXOVE2.mjs +0 -359
  136. package/dist/lib/browser/react-surface-IGCXOVE2.mjs.map +0 -7
  137. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  138. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  139. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  140. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  141. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  142. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  143. package/dist/types/src/components/PluginDetail.d.ts +0 -9
  144. package/dist/types/src/components/PluginDetail.d.ts.map +0 -1
  145. package/dist/types/src/components/PluginDetail.stories.d.ts.map +0 -1
  146. package/dist/types/src/components/PluginItem.d.ts.map +0 -1
  147. package/dist/types/src/components/PluginList.d.ts.map +0 -1
  148. package/dist/types/src/components/PluginList.stories.d.ts.map +0 -1
  149. package/dist/types/src/components/RegistryContainer.d.ts +0 -7
  150. package/dist/types/src/components/RegistryContainer.d.ts.map +0 -1
  151. package/src/capabilities/app-graph-builder.ts +0 -156
  152. package/src/capabilities/intent-resolver.ts +0 -27
  153. package/src/capabilities/react-surface.tsx +0 -86
  154. package/src/components/PluginDetail.stories.tsx +0 -45
  155. package/src/components/PluginDetail.tsx +0 -82
  156. package/src/components/PluginList.stories.tsx +0 -80
  157. package/src/components/RegistryContainer.tsx +0 -76
  158. /package/dist/types/src/components/{PluginList.stories.d.ts → PluginList/PluginList.stories.d.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface/react-surface.tsx", "../../../src/containers/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React, { useMemo } from 'react';\n\nimport { Capabilities, Capability, Plugin } from '@dxos/app-framework';\nimport { Surface, usePluginManager } from '@dxos/app-framework/ui';\n\nimport { PluginArticle, PluginRegistry } from '../../containers';\nimport { REGISTRY_KEY, meta } from '../../meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\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 <PluginRegistry id={`${REGISTRY_KEY}>all`} plugins={filtered} />;\n },\n }),\n Surface.create({\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 <PluginRegistry id={`${REGISTRY_KEY}>installed`} plugins={filtered} />;\n },\n }),\n Surface.create({\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 <PluginRegistry id={`${REGISTRY_KEY}>recommended`} plugins={filtered} />;\n },\n }),\n Surface.create({\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 <PluginRegistry id={`${REGISTRY_KEY}>labs`} plugins={filtered} />;\n },\n }),\n Surface.create({\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 return <PluginArticle subject={subject} />;\n },\n }),\n ]),\n ),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const PluginArticle: ComponentType<any> = lazy(() => import('./PluginArticle'));\nexport const PluginRegistry: ComponentType<any> = lazy(() => import('./PluginRegistry'));\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "React", "useMemo", "Capabilities", "Capability", "Plugin", "Surface", "usePluginManager", "lazy", "PluginArticle", "lazy", "PluginRegistry", "Capability", "makeModule", "succeed", "contributes", "Capabilities", "ReactSurface", "Surface", "create", "id", "meta", "role", "filter", "data", "subject", "REGISTRY_KEY", "component", "manager", "usePluginManager", "filtered", "useMemo", "getPlugins", "getCore", "includes", "PluginRegistry", "plugins", "getEnabled", "tags", "Plugin", "isPlugin", "PluginArticle"]
7
+ }
@@ -0,0 +1,30 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ PluginDetail
4
+ } from "./chunk-BOCFM775.mjs";
5
+ import "./chunk-ENSNUFQK.mjs";
6
+
7
+ // src/containers/PluginArticle/PluginArticle.tsx
8
+ import React, { useCallback } from "react";
9
+ import { usePluginManager } from "@dxos/app-framework/ui";
10
+ import { runAndForwardErrors } from "@dxos/effect";
11
+ var PluginArticle = ({ subject: plugin }) => {
12
+ const manager = usePluginManager();
13
+ const enabled = manager.getEnabled().includes(plugin.meta.id);
14
+ const handleEnableChange = useCallback((enabled2) => enabled2 ? runAndForwardErrors(manager.enable(plugin.meta.id)) : runAndForwardErrors(manager.disable(plugin.meta.id)), [
15
+ manager,
16
+ plugin.meta.id
17
+ ]);
18
+ return /* @__PURE__ */ React.createElement(PluginDetail, {
19
+ plugin,
20
+ enabled,
21
+ onEnabledChange: handleEnableChange
22
+ });
23
+ };
24
+
25
+ // src/containers/PluginArticle/index.ts
26
+ var PluginArticle_default = PluginArticle;
27
+ export {
28
+ PluginArticle_default as default
29
+ };
30
+ //# sourceMappingURL=PluginArticle-3NEYDKN5.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/PluginArticle/PluginArticle.tsx", "../../../src/containers/PluginArticle/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { usePluginManager } from '@dxos/app-framework/ui';\nimport { runAndForwardErrors } from '@dxos/effect';\n\nimport { PluginDetail } from '../../components';\n\n// TODO(burdon): Convert to ECHO type.\nexport type PluginArticleProps = { subject: Plugin.Plugin };\n\nexport const PluginArticle = ({ subject: plugin }: PluginArticleProps) => {\n const manager = usePluginManager();\n const enabled = manager.getEnabled().includes(plugin.meta.id);\n const handleEnableChange = useCallback(\n (enabled: boolean) =>\n enabled\n ? runAndForwardErrors(manager.enable(plugin.meta.id))\n : runAndForwardErrors(manager.disable(plugin.meta.id)),\n [manager, plugin.meta.id],\n );\n\n return <PluginDetail plugin={plugin} enabled={enabled} onEnabledChange={handleEnableChange} />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { PluginArticle } from './PluginArticle';\n\nexport default PluginArticle;\n"],
5
+ "mappings": ";;;;;;;AAIA,OAAOA,SAASC,mBAAmB;AAGnC,SAASC,wBAAwB;AACjC,SAASC,2BAA2B;AAO7B,IAAMC,gBAAgB,CAAC,EAAEC,SAASC,OAAM,MAAsB;AACnE,QAAMC,UAAUC,iBAAAA;AAChB,QAAMC,UAAUF,QAAQG,WAAU,EAAGC,SAASL,OAAOM,KAAKC,EAAE;AAC5D,QAAMC,qBAAqBC,YACzB,CAACN,aACCA,WACIO,oBAAoBT,QAAQU,OAAOX,OAAOM,KAAKC,EAAE,CAAA,IACjDG,oBAAoBT,QAAQW,QAAQZ,OAAOM,KAAKC,EAAE,CAAA,GACxD;IAACN;IAASD,OAAOM,KAAKC;GAAG;AAG3B,SAAO,sBAAA,cAACM,cAAAA;IAAab;IAAgBG;IAAkBW,iBAAiBN;;AAC1E;;;ACrBA,IAAA,wBAAeO;",
6
+ "names": ["React", "useCallback", "usePluginManager", "runAndForwardErrors", "PluginArticle", "subject", "plugin", "manager", "usePluginManager", "enabled", "getEnabled", "includes", "meta", "id", "handleEnableChange", "useCallback", "runAndForwardErrors", "enable", "disable", "PluginDetail", "onEnabledChange", "PluginArticle"]
7
+ }
@@ -0,0 +1,79 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ PluginList
4
+ } from "./chunk-BOCFM775.mjs";
5
+ import {
6
+ getPluginPath
7
+ } from "./chunk-ENSNUFQK.mjs";
8
+
9
+ // src/containers/PluginRegistry/PluginRegistry.tsx
10
+ import { useAtomValue } from "@effect-atom/atom-react";
11
+ import * as Effect from "effect/Effect";
12
+ import React, { useCallback, useMemo } from "react";
13
+ import { useCapabilities, useOperationInvoker, usePluginManager } from "@dxos/app-framework/ui";
14
+ import { AppCapabilities, LayoutOperation, SettingsOperation } from "@dxos/app-toolkit";
15
+ import { runAndForwardErrors } from "@dxos/effect";
16
+ import { ObservabilityOperation } from "@dxos/plugin-observability/types";
17
+ import { ScrollArea } from "@dxos/react-ui";
18
+ var sortByPluginMeta = ({ meta: { name: a = "" } }, { meta: { name: b = "" } }) => a.localeCompare(b);
19
+ var PluginRegistry = ({ id, plugins: pluginsProp }) => {
20
+ const manager = usePluginManager();
21
+ const { invoke, invokePromise } = useOperationInvoker();
22
+ const plugins = useMemo(() => pluginsProp.sort(sortByPluginMeta), [
23
+ pluginsProp
24
+ ]);
25
+ const enabled = useAtomValue(manager.enabled);
26
+ const allSettings = useCapabilities(AppCapabilities.Settings);
27
+ const handleChange = useCallback((id2, enabled2) => Effect.gen(function* () {
28
+ if (enabled2) {
29
+ yield* manager.enable(id2);
30
+ } else {
31
+ yield* manager.disable(id2);
32
+ }
33
+ yield* invoke(ObservabilityOperation.SendEvent, {
34
+ name: "plugins.toggle",
35
+ properties: {
36
+ plugin: id2,
37
+ enabled: enabled2
38
+ }
39
+ });
40
+ }).pipe(runAndForwardErrors), [
41
+ invoke,
42
+ manager
43
+ ]);
44
+ const handleClick = useCallback((pluginId) => invokePromise(LayoutOperation.Open, {
45
+ subject: [
46
+ getPluginPath(pluginId)
47
+ ],
48
+ pivotId: id,
49
+ positioning: "end"
50
+ }), [
51
+ invokePromise,
52
+ id
53
+ ]);
54
+ const hasSettings = useCallback((pluginId) => allSettings.some((s) => s.prefix === pluginId), [
55
+ allSettings
56
+ ]);
57
+ const handleSettings = useCallback((pluginId) => invokePromise(SettingsOperation.Open, {
58
+ plugin: pluginId
59
+ }), [
60
+ invokePromise
61
+ ]);
62
+ return /* @__PURE__ */ React.createElement(ScrollArea.Root, {
63
+ orientation: "vertical"
64
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(PluginList, {
65
+ plugins,
66
+ enabled,
67
+ onClick: handleClick,
68
+ onChange: handleChange,
69
+ hasSettings,
70
+ onSettings: handleSettings
71
+ })));
72
+ };
73
+
74
+ // src/containers/PluginRegistry/index.ts
75
+ var PluginRegistry_default = PluginRegistry;
76
+ export {
77
+ PluginRegistry_default as default
78
+ };
79
+ //# sourceMappingURL=PluginRegistry-BYKWC732.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/PluginRegistry/PluginRegistry.tsx", "../../../src/containers/PluginRegistry/index.ts"],
4
+ "sourcesContent": ["//\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 { type Plugin } from '@dxos/app-framework';\nimport { useCapabilities, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';\nimport { AppCapabilities, LayoutOperation, SettingsOperation } from '@dxos/app-toolkit';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/types';\nimport { ScrollArea } from '@dxos/react-ui';\n\nimport { PluginList } from '../../components';\nimport { getPluginPath } from '../../meta';\n\nconst sortByPluginMeta = ({ meta: { name: a = '' } }: Plugin.Plugin, { meta: { name: b = '' } }: Plugin.Plugin) =>\n a.localeCompare(b);\n\nexport type PluginRegistryProps = {\n id: string;\n plugins: Plugin.Plugin[];\n};\n\nexport const PluginRegistry = ({ id, plugins: pluginsProp }: PluginRegistryProps) => {\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(AppCapabilities.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(LayoutOperation.Open, {\n subject: [getPluginPath(pluginId)],\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 <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport>\n <PluginList\n plugins={plugins}\n enabled={enabled}\n onClick={handleClick}\n onChange={handleChange}\n hasSettings={hasSettings}\n onSettings={handleSettings}\n />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { PluginRegistry } from './PluginRegistry';\n\nexport default PluginRegistry;\n"],
5
+ "mappings": ";;;;;;;;;AAIA,SAASA,oBAAoB;AAC7B,YAAYC,YAAY;AACxB,OAAOC,SAASC,aAAaC,eAAe;AAG5C,SAASC,iBAAiBC,qBAAqBC,wBAAwB;AACvE,SAASC,iBAAiBC,iBAAiBC,yBAAyB;AACpE,SAASC,2BAA2B;AACpC,SAASC,8BAA8B;AACvC,SAASC,kBAAkB;AAK3B,IAAMC,mBAAmB,CAAC,EAAEC,MAAM,EAAEC,MAAMC,IAAI,GAAE,EAAE,GAAmB,EAAEF,MAAM,EAAEC,MAAME,IAAI,GAAE,EAAE,MAC3FD,EAAEE,cAAcD,CAAAA;AAOX,IAAME,iBAAiB,CAAC,EAAEC,IAAIC,SAASC,YAAW,MAAuB;AAC9E,QAAMC,UAAUC,iBAAAA;AAChB,QAAM,EAAEC,QAAQC,cAAa,IAAKC,oBAAAA;AAClC,QAAMN,UAAUO,QAAQ,MAAMN,YAAYO,KAAKhB,gBAAAA,GAAmB;IAACS;GAAY;AAC/E,QAAMQ,UAAUC,aAAaR,QAAQO,OAAO;AAC5C,QAAME,cAAcC,gBAAgBC,gBAAgBC,QAAQ;AAG5D,QAAMC,eAAeC,YACnB,CAACjB,KAAYU,aACJQ,WAAI,aAAA;AACT,QAAIR,UAAS;AACX,aAAOP,QAAQgB,OAAOnB,GAAAA;IACxB,OAAO;AACL,aAAOG,QAAQiB,QAAQpB,GAAAA;IACzB;AAEA,WAAOK,OAAOgB,uBAAuBC,WAAW;MAC9C3B,MAAM;MACN4B,YAAY;QACVC,QAAQxB;QACRU,SAAAA;MACF;IACF,CAAA;EACF,CAAA,EAAGe,KAAKC,mBAAAA,GACV;IAACrB;IAAQF;GAAQ;AAGnB,QAAMwB,cAAcV,YAClB,CAACW,aACCtB,cAAcuB,gBAAgBC,MAAM;IAClCC,SAAS;MAACC,cAAcJ,QAAAA;;IACxBK,SAASjC;IACTkC,aAAa;EACf,CAAA,GACF;IAAC5B;IAAeN;GAAG;AAGrB,QAAMmC,cAAclB,YAAY,CAACW,aAAqBhB,YAAYwB,KAAK,CAACC,MAAMA,EAAEC,WAAWV,QAAAA,GAAW;IAAChB;GAAY;AAEnH,QAAM2B,iBAAiBtB,YACrB,CAACW,aAAqBtB,cAAckC,kBAAkBV,MAAM;IAAEN,QAAQI;EAAS,CAAA,GAC/E;IAACtB;GAAc;AAGjB,SACE,sBAAA,cAACmC,WAAWC,MAAI;IAACC,aAAY;KAC3B,sBAAA,cAACF,WAAWG,UAAQ,MAClB,sBAAA,cAACC,YAAAA;IACC5C;IACAS;IACAoC,SAASnB;IACToB,UAAU/B;IACVmB;IACAa,YAAYT;;AAKtB;;;AC/EA,IAAA,yBAAeU;",
6
+ "names": ["useAtomValue", "Effect", "React", "useCallback", "useMemo", "useCapabilities", "useOperationInvoker", "usePluginManager", "AppCapabilities", "LayoutOperation", "SettingsOperation", "runAndForwardErrors", "ObservabilityOperation", "ScrollArea", "sortByPluginMeta", "meta", "name", "a", "b", "localeCompare", "PluginRegistry", "id", "plugins", "pluginsProp", "manager", "usePluginManager", "invoke", "invokePromise", "useOperationInvoker", "useMemo", "sort", "enabled", "useAtomValue", "allSettings", "useCapabilities", "AppCapabilities", "Settings", "handleChange", "useCallback", "gen", "enable", "disable", "ObservabilityOperation", "SendEvent", "properties", "plugin", "pipe", "runAndForwardErrors", "handleClick", "pluginId", "LayoutOperation", "Open", "subject", "getPluginPath", "pivotId", "positioning", "hasSettings", "some", "s", "prefix", "handleSettings", "SettingsOperation", "ScrollArea", "Root", "orientation", "Viewport", "PluginList", "onClick", "onChange", "onSettings", "PluginRegistry"]
7
+ }
@@ -0,0 +1,168 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ REGISTRY_ID,
4
+ REGISTRY_KEY,
5
+ meta
6
+ } from "./chunk-ENSNUFQK.mjs";
7
+
8
+ // src/capabilities/app-graph-builder/app-graph-builder.ts
9
+ import * as Effect from "effect/Effect";
10
+ import { Capabilities, Capability } from "@dxos/app-framework";
11
+ import { AppCapabilities, SettingsOperation } from "@dxos/app-toolkit";
12
+ import { Operation } from "@dxos/operation";
13
+ import { GraphBuilder, NodeMatcher } from "@dxos/plugin-graph";
14
+ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
15
+ const capabilities = yield* Capability.Service;
16
+ const extensions = yield* Effect.all([
17
+ GraphBuilder.createExtension({
18
+ id: meta.id,
19
+ match: NodeMatcher.whenRoot,
20
+ actions: () => Effect.succeed([
21
+ {
22
+ id: meta.id,
23
+ data: () => Operation.invoke(SettingsOperation.OpenPluginRegistry),
24
+ properties: {
25
+ label: [
26
+ "open plugin registry label",
27
+ {
28
+ ns: meta.id
29
+ }
30
+ ],
31
+ icon: "ph--squares-four--regular",
32
+ disposition: "menu"
33
+ }
34
+ }
35
+ ])
36
+ }),
37
+ GraphBuilder.createExtension({
38
+ id: meta.id,
39
+ match: NodeMatcher.whenRoot,
40
+ connector: () => Effect.succeed([
41
+ {
42
+ id: REGISTRY_ID,
43
+ type: meta.id,
44
+ properties: {
45
+ label: [
46
+ "plugin registry label",
47
+ {
48
+ ns: meta.id
49
+ }
50
+ ],
51
+ icon: "ph--squares-four--regular",
52
+ disposition: "pin-end",
53
+ testId: "treeView.pluginRegistry"
54
+ },
55
+ nodes: [
56
+ {
57
+ id: `${REGISTRY_KEY}>all`,
58
+ type: "category",
59
+ data: `${REGISTRY_KEY}>all`,
60
+ properties: {
61
+ label: [
62
+ "all plugins label",
63
+ {
64
+ ns: meta.id
65
+ }
66
+ ],
67
+ icon: "ph--squares-four--regular",
68
+ key: REGISTRY_KEY,
69
+ testId: "pluginRegistry.all"
70
+ }
71
+ },
72
+ {
73
+ id: `${REGISTRY_KEY}>installed`,
74
+ type: "category",
75
+ data: `${REGISTRY_KEY}>installed`,
76
+ properties: {
77
+ label: [
78
+ "installed plugins label",
79
+ {
80
+ ns: meta.id
81
+ }
82
+ ],
83
+ icon: "ph--check--regular",
84
+ key: REGISTRY_KEY,
85
+ testId: "pluginRegistry.installed"
86
+ }
87
+ },
88
+ {
89
+ id: `${REGISTRY_KEY}>recommended`,
90
+ type: "category",
91
+ data: `${REGISTRY_KEY}>recommended`,
92
+ properties: {
93
+ label: [
94
+ "recommended plugins label",
95
+ {
96
+ ns: meta.id
97
+ }
98
+ ],
99
+ icon: "ph--star--regular",
100
+ key: REGISTRY_KEY,
101
+ testId: "pluginRegistry.recommended"
102
+ }
103
+ },
104
+ {
105
+ id: `${REGISTRY_KEY}>labs`,
106
+ type: "category",
107
+ data: `${REGISTRY_KEY}>labs`,
108
+ properties: {
109
+ label: [
110
+ "labs plugins label",
111
+ {
112
+ ns: meta.id
113
+ }
114
+ ],
115
+ icon: "ph--flask--regular",
116
+ key: REGISTRY_KEY,
117
+ testId: "pluginRegistry.labs"
118
+ }
119
+ }
120
+ ]
121
+ }
122
+ ])
123
+ }),
124
+ GraphBuilder.createExtension({
125
+ id: `${meta.id}.actions`,
126
+ match: NodeMatcher.whenId(`root/${REGISTRY_ID}`),
127
+ actions: () => Effect.succeed([
128
+ {
129
+ id: `${meta.id}.load-by-url`,
130
+ data: Effect.fnUntraced(function* () {
131
+ }),
132
+ properties: {
133
+ label: [
134
+ "load by url label",
135
+ {
136
+ ns: meta.id
137
+ }
138
+ ],
139
+ icon: "ph--cloud-arrow-down--regular",
140
+ disabled: true
141
+ }
142
+ }
143
+ ])
144
+ }),
145
+ GraphBuilder.createExtension({
146
+ id: `${meta.id}.plugins`,
147
+ match: NodeMatcher.whenId(`root/${REGISTRY_ID}`),
148
+ connector: () => {
149
+ const manager = capabilities.get(Capabilities.PluginManager);
150
+ return Effect.succeed(manager.getPlugins().map((plugin) => ({
151
+ id: plugin.meta.id,
152
+ type: "org.dxos.plugin",
153
+ data: plugin,
154
+ properties: {
155
+ label: plugin.meta.name ?? plugin.meta.id,
156
+ icon: plugin.meta.icon ?? "ph--circle--regular",
157
+ disposition: "hidden"
158
+ }
159
+ })));
160
+ }
161
+ })
162
+ ]);
163
+ return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
164
+ }));
165
+ export {
166
+ app_graph_builder_default as default
167
+ };
168
+ //# sourceMappingURL=app-graph-builder-DBDL5WWF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities, SettingsOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/operation';\nimport { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\n\nimport { REGISTRY_ID, REGISTRY_KEY, meta } from '../../meta';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n const extensions = yield* Effect.all([\n GraphBuilder.createExtension({\n id: meta.id,\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n {\n id: meta.id,\n data: () => Operation.invoke(SettingsOperation.OpenPluginRegistry),\n properties: {\n label: ['open plugin registry label', { ns: meta.id }],\n icon: 'ph--squares-four--regular',\n disposition: 'menu',\n },\n },\n ]),\n }),\n GraphBuilder.createExtension({\n id: meta.id,\n match: NodeMatcher.whenRoot,\n connector: () =>\n Effect.succeed([\n {\n id: REGISTRY_ID,\n type: meta.id,\n properties: {\n label: ['plugin registry label', { ns: meta.id }],\n icon: 'ph--squares-four--regular',\n disposition: 'pin-end',\n testId: 'treeView.pluginRegistry',\n },\n nodes: [\n {\n id: `${REGISTRY_KEY}>all`,\n type: 'category' as const,\n data: `${REGISTRY_KEY}>all`,\n properties: {\n label: ['all plugins label', { ns: meta.id }],\n icon: 'ph--squares-four--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.all',\n },\n },\n {\n id: `${REGISTRY_KEY}>installed`,\n type: 'category' as const,\n data: `${REGISTRY_KEY}>installed`,\n properties: {\n label: ['installed plugins label', { ns: meta.id }],\n icon: 'ph--check--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.installed',\n },\n },\n {\n id: `${REGISTRY_KEY}>recommended`,\n type: 'category' as const,\n data: `${REGISTRY_KEY}>recommended`,\n properties: {\n label: ['recommended plugins label', { ns: meta.id }],\n icon: 'ph--star--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.recommended',\n },\n },\n {\n id: `${REGISTRY_KEY}>labs`,\n type: 'category' as const,\n data: `${REGISTRY_KEY}>labs`,\n properties: {\n label: ['labs plugins label', { ns: meta.id }],\n icon: 'ph--flask--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.labs',\n },\n },\n ],\n },\n ]),\n }),\n GraphBuilder.createExtension({\n id: `${meta.id}.actions`,\n match: NodeMatcher.whenId(`root/${REGISTRY_ID}`),\n actions: () =>\n Effect.succeed([\n {\n id: `${meta.id}.load-by-url`,\n data: Effect.fnUntraced(function* () {}),\n properties: {\n label: ['load by url label', { ns: meta.id }],\n icon: 'ph--cloud-arrow-down--regular',\n disabled: true,\n },\n },\n ]),\n }),\n GraphBuilder.createExtension({\n id: `${meta.id}.plugins`,\n match: NodeMatcher.whenId(`root/${REGISTRY_ID}`),\n connector: () => {\n const manager = capabilities.get(Capabilities.PluginManager);\n return Effect.succeed(\n manager.getPlugins().map((plugin) => ({\n id: plugin.meta.id,\n type: 'org.dxos.plugin',\n data: plugin,\n properties: {\n label: plugin.meta.name ?? plugin.meta.id,\n icon: plugin.meta.icon ?? 'ph--circle--regular',\n disposition: 'hidden',\n },\n })),\n );\n },\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Capabilities", "Capability", "AppCapabilities", "SettingsOperation", "Operation", "GraphBuilder", "NodeMatcher", "Capability", "makeModule", "fnUntraced", "capabilities", "Service", "extensions", "all", "GraphBuilder", "createExtension", "id", "meta", "match", "NodeMatcher", "whenRoot", "actions", "succeed", "data", "Operation", "invoke", "SettingsOperation", "OpenPluginRegistry", "properties", "label", "ns", "icon", "disposition", "connector", "REGISTRY_ID", "type", "testId", "nodes", "REGISTRY_KEY", "key", "whenId", "disabled", "manager", "get", "Capabilities", "PluginManager", "getPlugins", "map", "plugin", "name", "contributes", "AppCapabilities", "AppGraphBuilder"]
7
+ }
@@ -0,0 +1,192 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ meta
4
+ } from "./chunk-ENSNUFQK.mjs";
5
+
6
+ // src/components/PluginDetail/PluginDetail.tsx
7
+ import React from "react";
8
+ import { Icon, Input, Link, useTranslation } from "@dxos/react-ui";
9
+ import { ScrollArea } from "@dxos/react-ui";
10
+ import { getStyles, mx } from "@dxos/ui-theme";
11
+ var PluginDetail = ({ plugin, enabled, onEnabledChange }) => {
12
+ const { t } = useTranslation(meta.id);
13
+ const { id, name, description, homePage, source, screenshots, icon = "ph--circle--regular", iconHue = "neutral" } = plugin.meta;
14
+ const styles = getStyles(iconHue);
15
+ return /* @__PURE__ */ React.createElement(ScrollArea.Root, {
16
+ orientation: "vertical"
17
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement("div", {
18
+ role: "none",
19
+ className: "dx-document grid grid-cols-[min-content_1fr] gap-4 p-4"
20
+ }, /* @__PURE__ */ React.createElement("div", {
21
+ role: "none"
22
+ }, /* @__PURE__ */ React.createElement(Icon, {
23
+ classNames: mx("p-1 rounded-md", styles.fill, styles.surfaceText),
24
+ icon,
25
+ size: 14
26
+ })), /* @__PURE__ */ React.createElement("div", {
27
+ role: "none",
28
+ className: "flex flex-col gap-6"
29
+ }, /* @__PURE__ */ React.createElement("div", {
30
+ role: "none",
31
+ className: "grid grid-cols-[1fr_min-content] gap-x-3 w-full pt-1"
32
+ }, /* @__PURE__ */ React.createElement("h2", {
33
+ className: "text-xl"
34
+ }, name), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Switch, {
35
+ classNames: "self-center",
36
+ checked: enabled,
37
+ onCheckedChange: onEnabledChange
38
+ })), /* @__PURE__ */ React.createElement("p", {
39
+ className: "pt-0.5 text-sm text-description"
40
+ }, id)), /* @__PURE__ */ React.createElement("div", {
41
+ role: "none"
42
+ }, /* @__PURE__ */ React.createElement("p", {
43
+ className: "text-description"
44
+ }, description)), screenshots && screenshots.length > 0 && /* @__PURE__ */ React.createElement("div", {
45
+ role: "none",
46
+ className: "flex flex-col gap-2"
47
+ }, /* @__PURE__ */ React.createElement("h2", null, "Preview"), /* @__PURE__ */ React.createElement("img", {
48
+ src: screenshots[0],
49
+ alt: name,
50
+ className: "aspect-video object-fit"
51
+ })), /* @__PURE__ */ React.createElement("div", {
52
+ role: "none",
53
+ className: "flex flex-col gap-2"
54
+ }, /* @__PURE__ */ React.createElement("h2", null, "Resources"), /* @__PURE__ */ React.createElement("div", {
55
+ className: "flex gap-2"
56
+ }, homePage && /* @__PURE__ */ React.createElement(Link, {
57
+ href: homePage,
58
+ target: "_blank",
59
+ rel: "noreferrer",
60
+ classNames: "text-sm text-description"
61
+ }, t("home page label"), /* @__PURE__ */ React.createElement(Icon, {
62
+ icon: "ph--arrow-square-out--bold",
63
+ size: 3,
64
+ classNames: "inline-block leading-none mx-1"
65
+ })), source && /* @__PURE__ */ React.createElement(Link, {
66
+ href: source,
67
+ target: "_blank",
68
+ rel: "noreferrer",
69
+ classNames: "text-sm text-description"
70
+ }, t("source label"), /* @__PURE__ */ React.createElement(Icon, {
71
+ icon: "ph--arrow-square-out--bold",
72
+ size: 3,
73
+ classNames: "inline-block leading-none mx-1"
74
+ }))))))));
75
+ };
76
+
77
+ // src/components/PluginList/PluginList.tsx
78
+ import React3 from "react";
79
+ import { List } from "@dxos/react-ui";
80
+
81
+ // src/components/PluginList/PluginItem.tsx
82
+ import React2, { useCallback } from "react";
83
+ import { Icon as Icon2, IconButton, Input as Input2, Link as Link2, ListItem, Tag, useTranslation as useTranslation2 } from "@dxos/react-ui";
84
+ import { mx as mx2 } from "@dxos/ui-theme";
85
+ import { getStyles as getStyles2 } from "@dxos/ui-theme";
86
+ var PluginItem = ({ plugin, enabled = [], onClick, onChange, hasSettings: hasSettingsProp, onSettings }) => {
87
+ const { t } = useTranslation2(meta.id);
88
+ const { id, name, description, tags, icon = "ph--circle--regular", iconHue = "neutral" } = plugin.meta;
89
+ const isEnabled = enabled.includes(id);
90
+ const inputId = `${id}-input`;
91
+ const labelId = `${id}-label`;
92
+ const descriptionId = `${id}-description`;
93
+ const handleClick = useCallback(() => onClick?.(id), [
94
+ id,
95
+ onClick
96
+ ]);
97
+ const handleChange = useCallback((event) => {
98
+ event.stopPropagation();
99
+ onChange?.(id, !isEnabled);
100
+ }, [
101
+ id,
102
+ isEnabled,
103
+ onChange
104
+ ]);
105
+ const hasSettings = hasSettingsProp?.(id) ?? false;
106
+ const handleSettings = useCallback(() => onSettings?.(id), [
107
+ id,
108
+ onSettings
109
+ ]);
110
+ const styles = getStyles2(iconHue);
111
+ const gridCols = "grid grid-cols-[5rem_1fr]";
112
+ const gridRows = "grid grid-rows-[40px_1fr_min-content_40px]";
113
+ return /* @__PURE__ */ React2.createElement(ListItem.Root, {
114
+ key: id,
115
+ labelId,
116
+ "data-testid": `pluginList.${id}`,
117
+ "aria-describedby": descriptionId,
118
+ classNames: mx2(gridCols, "h-[12rem] w-full gap-3 pe-2 bg-modal-surface rounded-md overflow-hidden")
119
+ }, /* @__PURE__ */ React2.createElement("div", {
120
+ className: mx2(gridRows, "justify-center rounded-l-md", styles.surface)
121
+ }, /* @__PURE__ */ React2.createElement(Icon2, {
122
+ classNames: mx2("row-start-2 cursor-pointer", styles.surfaceText),
123
+ icon,
124
+ size: 14,
125
+ onClick: handleClick
126
+ })), /* @__PURE__ */ React2.createElement("div", {
127
+ className: mx2(gridRows)
128
+ }, /* @__PURE__ */ React2.createElement("div", {
129
+ className: "flex items-center overflow-hidden cursor-pointer",
130
+ onClick: handleClick
131
+ }, /* @__PURE__ */ React2.createElement("span", {
132
+ className: "text-lg truncate"
133
+ }, name ?? id)), /* @__PURE__ */ React2.createElement("div", null, /* @__PURE__ */ React2.createElement("p", {
134
+ className: mx2("text-description", "line-clamp-4 min-w-0")
135
+ }, description)), /* @__PURE__ */ React2.createElement("div", {
136
+ className: "flex -ms-0.5 overflow-x-auto scrollbar-none"
137
+ }, tags?.map((tag) => /* @__PURE__ */ React2.createElement(Tag, {
138
+ key: tag,
139
+ palette: tagColors[tag],
140
+ classNames: "text-xs uppercase font-thin"
141
+ }, tag))), /* @__PURE__ */ React2.createElement("div", {
142
+ className: "flex gap-2 items-center text-sm"
143
+ }, /* @__PURE__ */ React2.createElement(IconButton, {
144
+ "aria-describedby": descriptionId,
145
+ classNames: "cursor-pointer",
146
+ icon: "ph--gear--regular",
147
+ label: t("settings label"),
148
+ iconOnly: true,
149
+ size: 4,
150
+ onClick: handleSettings,
151
+ disabled: !hasSettings
152
+ }), /* @__PURE__ */ React2.createElement(Link2, {
153
+ "aria-describedby": descriptionId,
154
+ classNames: "text-description cursor-pointer",
155
+ onClick: handleClick
156
+ }, t("details label")), /* @__PURE__ */ React2.createElement("div", {
157
+ className: "grow"
158
+ }), /* @__PURE__ */ React2.createElement("div", {
159
+ className: "pe-1"
160
+ }, /* @__PURE__ */ React2.createElement(Input2.Root, {
161
+ id: inputId
162
+ }, /* @__PURE__ */ React2.createElement(Input2.Switch, {
163
+ classNames: "self-center",
164
+ checked: isEnabled,
165
+ onClick: handleChange
166
+ }))))));
167
+ };
168
+ var tagColors = {
169
+ new: "rose",
170
+ beta: "teal",
171
+ labs: "blue",
172
+ popular: "green",
173
+ featured: "pink",
174
+ experimental: "amber"
175
+ };
176
+
177
+ // src/components/PluginList/PluginList.tsx
178
+ var PluginList = ({ plugins = [], ...props }) => {
179
+ return /* @__PURE__ */ React3.createElement(List, {
180
+ classNames: "grid grid-cols-[repeat(auto-fill,minmax(18rem,1fr))] auto-rows-[max-content] gap-4 p-4"
181
+ }, plugins.map((plugin) => /* @__PURE__ */ React3.createElement(PluginItem, {
182
+ key: plugin.meta.id,
183
+ plugin,
184
+ ...props
185
+ })));
186
+ };
187
+
188
+ export {
189
+ PluginDetail,
190
+ PluginList
191
+ };
192
+ //# sourceMappingURL=chunk-BOCFM775.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/PluginDetail/PluginDetail.tsx", "../../../src/components/PluginList/PluginList.tsx", "../../../src/components/PluginList/PluginItem.tsx"],
4
+ "sourcesContent": ["//\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 { ScrollArea } from '@dxos/react-ui';\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 <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport>\n <div role='none' className='dx-document grid grid-cols-[min-content_1fr] gap-4 p-4'>\n <div role='none'>\n <Icon classNames={mx('p-1 rounded-md', styles.fill, styles.surfaceText)} 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 w-full pt-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='pt-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 mx-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 mx-1' />\n </Link>\n )}\n </div>\n </div>\n </div>\n </div>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\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 { 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, 'h-[12rem] w-full gap-3 pe-2 bg-modal-surface rounded-md overflow-hidden')}\n >\n <div className={mx(gridRows, 'justify-center rounded-l-md', styles.surface)}>\n <Icon\n classNames={mx('row-start-2 cursor-pointer', styles.surfaceText)}\n icon={icon}\n size={14}\n onClick={handleClick}\n />\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('text-description', 'line-clamp-4 min-w-0')}>{description}</p>\n </div>\n\n <div className='flex -ms-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='pe-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"],
5
+ "mappings": "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",
6
+ "names": ["React", "Icon", "Input", "Link", "useTranslation", "ScrollArea", "getStyles", "mx", "PluginDetail", "plugin", "enabled", "onEnabledChange", "t", "useTranslation", "meta", "id", "name", "description", "homePage", "source", "screenshots", "icon", "iconHue", "styles", "getStyles", "ScrollArea", "Root", "orientation", "Viewport", "div", "role", "className", "Icon", "classNames", "mx", "fill", "surfaceText", "size", "h2", "Input", "Switch", "checked", "onCheckedChange", "p", "length", "img", "src", "alt", "Link", "href", "target", "rel", "React", "List", "React", "useCallback", "Icon", "IconButton", "Input", "Link", "ListItem", "Tag", "useTranslation", "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", "surface", "Icon", "surfaceText", "size", "span", "p", "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"]
7
+ }
@@ -0,0 +1,23 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/meta.ts
4
+ import { trim } from "@dxos/util";
5
+ var REGISTRY_ID = "!dxos:plugin-registry";
6
+ var REGISTRY_KEY = "plugin-registry";
7
+ var getPluginPath = (pluginId) => `root/${REGISTRY_ID}/${pluginId}`;
8
+ var meta = {
9
+ id: "org.dxos.plugin.registry",
10
+ name: "Plugins",
11
+ description: trim`
12
+ Plugin management system for discovering, installing, and configuring workspace extensions.
13
+ Browse available plugins and customize your workspace capabilities.
14
+ `
15
+ };
16
+
17
+ export {
18
+ REGISTRY_ID,
19
+ REGISTRY_KEY,
20
+ getPluginPath,
21
+ meta
22
+ };
23
+ //# sourceMappingURL=chunk-ENSNUFQK.mjs.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 Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const REGISTRY_ID = '!dxos:plugin-registry';\nexport const REGISTRY_KEY = 'plugin-registry';\n\n/** Qualified graph path to a specific plugin node. */\nexport const getPluginPath = (pluginId: string): string => `root/${REGISTRY_ID}/${pluginId}`;\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.registry',\n name: 'Plugins',\n description: trim`\n Plugin management system for discovering, installing, and configuring workspace extensions.\n Browse available plugins and customize your workspace capabilities.\n `,\n};\n"],
5
+ "mappings": ";;;AAKA,SAASA,YAAY;AAEd,IAAMC,cAAc;AACpB,IAAMC,eAAe;AAGrB,IAAMC,gBAAgB,CAACC,aAA6B,QAAQH,WAAAA,IAAeG,QAAAA;AAE3E,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;AAIf;",
6
+ "names": ["trim", "REGISTRY_ID", "REGISTRY_KEY", "getPluginPath", "pluginId", "meta", "id", "name", "description", "trim"]
7
+ }