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

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 (169) hide show
  1. package/dist/lib/browser/PluginArticle-XBWRL2VJ.mjs +29 -0
  2. package/dist/lib/browser/PluginArticle-XBWRL2VJ.mjs.map +7 -0
  3. package/dist/lib/browser/PluginRegistry-YU7M4VWL.mjs +82 -0
  4. package/dist/lib/browser/PluginRegistry-YU7M4VWL.mjs.map +7 -0
  5. package/dist/lib/browser/app-graph-builder-M6TK7ZTK.mjs +168 -0
  6. package/dist/lib/browser/app-graph-builder-M6TK7ZTK.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-FGKYAUX2.mjs +25 -0
  8. package/dist/lib/browser/chunk-FGKYAUX2.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-Y5BNERPC.mjs +193 -0
  10. package/dist/lib/browser/chunk-Y5BNERPC.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 +29 -31
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/open-plugin-registry-Z3I6SBRQ.mjs +18 -0
  17. package/dist/lib/browser/open-plugin-registry-Z3I6SBRQ.mjs.map +7 -0
  18. package/dist/lib/browser/operation-handler-BLH2Y76R.mjs +16 -0
  19. package/dist/lib/browser/operation-handler-BLH2Y76R.mjs.map +7 -0
  20. package/dist/lib/browser/react-surface-6NL2F2O3.mjs +85 -0
  21. package/dist/lib/browser/react-surface-6NL2F2O3.mjs.map +7 -0
  22. package/dist/lib/node-esm/PluginArticle-FIVZRB45.mjs +30 -0
  23. package/dist/lib/node-esm/PluginArticle-FIVZRB45.mjs.map +7 -0
  24. package/dist/lib/node-esm/PluginRegistry-RHD6ZITD.mjs +83 -0
  25. package/dist/lib/node-esm/PluginRegistry-RHD6ZITD.mjs.map +7 -0
  26. package/dist/lib/node-esm/app-graph-builder-FSZAEWLX.mjs +169 -0
  27. package/dist/lib/node-esm/app-graph-builder-FSZAEWLX.mjs.map +7 -0
  28. package/dist/lib/node-esm/chunk-44X3W2YY.mjs +27 -0
  29. package/dist/lib/node-esm/chunk-44X3W2YY.mjs.map +7 -0
  30. package/dist/lib/node-esm/chunk-576PZRDS.mjs +194 -0
  31. package/dist/lib/node-esm/chunk-576PZRDS.mjs.map +7 -0
  32. package/dist/lib/node-esm/cli/index.mjs +223 -0
  33. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  34. package/dist/lib/node-esm/index.mjs +68 -0
  35. package/dist/lib/node-esm/index.mjs.map +7 -0
  36. package/dist/lib/node-esm/meta.json +1 -0
  37. package/dist/lib/node-esm/open-plugin-registry-4ZDMAWN2.mjs +19 -0
  38. package/dist/lib/node-esm/open-plugin-registry-4ZDMAWN2.mjs.map +7 -0
  39. package/dist/lib/node-esm/operation-handler-FQX7TJYA.mjs +18 -0
  40. package/dist/lib/node-esm/operation-handler-FQX7TJYA.mjs.map +7 -0
  41. package/dist/lib/node-esm/react-surface-FUOA7DZ3.mjs +86 -0
  42. package/dist/lib/node-esm/react-surface-FUOA7DZ3.mjs.map +7 -0
  43. package/dist/types/src/RegistryPlugin.d.ts +2 -1
  44. package/dist/types/src/RegistryPlugin.d.ts.map +1 -1
  45. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  46. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  47. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  48. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/index.d.ts +3 -3
  50. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/operation-handler/index.d.ts +4 -0
  52. package/dist/types/src/capabilities/operation-handler/index.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts +6 -0
  54. package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  56. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  57. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  58. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  59. package/dist/types/src/cli/commands/disable.d.ts +11 -0
  60. package/dist/types/src/cli/commands/disable.d.ts.map +1 -0
  61. package/dist/types/src/cli/commands/enable.d.ts +11 -0
  62. package/dist/types/src/cli/commands/enable.d.ts.map +1 -0
  63. package/dist/types/src/cli/commands/index.d.ts +3 -0
  64. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  65. package/dist/types/src/cli/commands/list.d.ts +7 -0
  66. package/dist/types/src/cli/commands/list.d.ts.map +1 -0
  67. package/dist/types/src/cli/commands/util.d.ts +11 -0
  68. package/dist/types/src/cli/commands/util.d.ts.map +1 -0
  69. package/dist/types/src/cli/index.d.ts +3 -0
  70. package/dist/types/src/cli/index.d.ts.map +1 -0
  71. package/dist/types/src/cli/plugin.d.ts +3 -0
  72. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  73. package/dist/types/src/cli/storage.d.ts +18 -0
  74. package/dist/types/src/cli/storage.d.ts.map +1 -0
  75. package/dist/types/src/components/PluginDetail/PluginDetail.d.ts +15 -0
  76. package/dist/types/src/components/PluginDetail/PluginDetail.d.ts.map +1 -0
  77. package/dist/types/src/components/{PluginDetail.stories.d.ts → PluginDetail/PluginDetail.stories.d.ts} +8 -1
  78. package/dist/types/src/components/PluginDetail/PluginDetail.stories.d.ts.map +1 -0
  79. package/dist/types/src/components/PluginDetail/index.d.ts +2 -0
  80. package/dist/types/src/components/PluginDetail/index.d.ts.map +1 -0
  81. package/dist/types/src/components/{PluginItem.d.ts → PluginList/PluginItem.d.ts} +2 -2
  82. package/dist/types/src/components/PluginList/PluginItem.d.ts.map +1 -0
  83. package/dist/types/src/components/{PluginList.d.ts → PluginList/PluginList.d.ts} +1 -1
  84. package/dist/types/src/components/PluginList/PluginList.d.ts.map +1 -0
  85. package/dist/types/src/components/PluginList/PluginList.stories.d.ts.map +1 -0
  86. package/dist/types/src/components/PluginList/index.d.ts +2 -0
  87. package/dist/types/src/components/PluginList/index.d.ts.map +1 -0
  88. package/dist/types/src/components/index.d.ts +0 -1
  89. package/dist/types/src/components/index.d.ts.map +1 -1
  90. package/dist/types/src/containers/PluginArticle/PluginArticle.d.ts +7 -0
  91. package/dist/types/src/containers/PluginArticle/PluginArticle.d.ts.map +1 -0
  92. package/dist/types/src/containers/PluginArticle/index.d.ts +3 -0
  93. package/dist/types/src/containers/PluginArticle/index.d.ts.map +1 -0
  94. package/dist/types/src/containers/PluginRegistry/PluginRegistry.d.ts +14 -0
  95. package/dist/types/src/containers/PluginRegistry/PluginRegistry.d.ts.map +1 -0
  96. package/dist/types/src/containers/PluginRegistry/index.d.ts +3 -0
  97. package/dist/types/src/containers/PluginRegistry/index.d.ts.map +1 -0
  98. package/dist/types/src/containers/index.d.ts +4 -0
  99. package/dist/types/src/containers/index.d.ts.map +1 -0
  100. package/dist/types/src/meta.d.ts +7 -3
  101. package/dist/types/src/meta.d.ts.map +1 -1
  102. package/dist/types/src/operations/index.d.ts +3 -0
  103. package/dist/types/src/operations/index.d.ts.map +1 -0
  104. package/dist/types/src/operations/open-plugin-registry.d.ts +5 -0
  105. package/dist/types/src/operations/open-plugin-registry.d.ts.map +1 -0
  106. package/dist/types/tsconfig.tsbuildinfo +1 -1
  107. package/package.json +50 -32
  108. package/src/RegistryPlugin.tsx +10 -24
  109. package/src/capabilities/app-graph-builder/app-graph-builder.ts +137 -0
  110. package/src/capabilities/app-graph-builder/index.ts +7 -0
  111. package/src/capabilities/index.ts +3 -5
  112. package/src/capabilities/operation-handler/index.ts +11 -0
  113. package/src/capabilities/operation-handler/operation-handler.ts +16 -0
  114. package/src/capabilities/react-surface/index.ts +7 -0
  115. package/src/capabilities/react-surface/react-surface.tsx +88 -0
  116. package/src/cli/commands/disable.ts +47 -0
  117. package/src/cli/commands/enable.ts +44 -0
  118. package/src/cli/commands/index.ts +14 -0
  119. package/src/cli/commands/list.ts +41 -0
  120. package/src/cli/commands/util.ts +24 -0
  121. package/src/cli/index.ts +6 -0
  122. package/src/cli/plugin.ts +17 -0
  123. package/src/cli/storage.ts +50 -0
  124. package/src/components/PluginDetail/PluginDetail.stories.tsx +44 -0
  125. package/src/components/PluginDetail/PluginDetail.tsx +84 -0
  126. package/src/components/PluginDetail/index.ts +5 -0
  127. package/src/components/{PluginItem.tsx → PluginList/PluginItem.tsx} +18 -14
  128. package/src/components/PluginList/PluginList.stories.tsx +87 -0
  129. package/src/components/{PluginList.tsx → PluginList/PluginList.tsx} +2 -2
  130. package/src/components/PluginList/index.ts +5 -0
  131. package/src/components/index.ts +0 -1
  132. package/src/containers/PluginArticle/PluginArticle.tsx +28 -0
  133. package/src/containers/PluginArticle/index.ts +7 -0
  134. package/src/containers/PluginRegistry/PluginRegistry.tsx +94 -0
  135. package/src/containers/PluginRegistry/index.ts +7 -0
  136. package/src/containers/index.ts +8 -0
  137. package/src/meta.ts +14 -7
  138. package/src/operations/index.ts +7 -0
  139. package/src/operations/open-plugin-registry.ts +21 -0
  140. package/dist/lib/browser/app-graph-builder-6CNBP3A4.mjs +0 -162
  141. package/dist/lib/browser/app-graph-builder-6CNBP3A4.mjs.map +0 -7
  142. package/dist/lib/browser/chunk-XPEFEID2.mjs +0 -19
  143. package/dist/lib/browser/chunk-XPEFEID2.mjs.map +0 -7
  144. package/dist/lib/browser/intent-resolver-LKNUYBTN.mjs +0 -23
  145. package/dist/lib/browser/intent-resolver-LKNUYBTN.mjs.map +0 -7
  146. package/dist/lib/browser/react-surface-IGCXOVE2.mjs +0 -359
  147. package/dist/lib/browser/react-surface-IGCXOVE2.mjs.map +0 -7
  148. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  149. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  150. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  151. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  152. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  153. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  154. package/dist/types/src/components/PluginDetail.d.ts +0 -9
  155. package/dist/types/src/components/PluginDetail.d.ts.map +0 -1
  156. package/dist/types/src/components/PluginDetail.stories.d.ts.map +0 -1
  157. package/dist/types/src/components/PluginItem.d.ts.map +0 -1
  158. package/dist/types/src/components/PluginList.d.ts.map +0 -1
  159. package/dist/types/src/components/PluginList.stories.d.ts.map +0 -1
  160. package/dist/types/src/components/RegistryContainer.d.ts +0 -7
  161. package/dist/types/src/components/RegistryContainer.d.ts.map +0 -1
  162. package/src/capabilities/app-graph-builder.ts +0 -156
  163. package/src/capabilities/intent-resolver.ts +0 -27
  164. package/src/capabilities/react-surface.tsx +0 -86
  165. package/src/components/PluginDetail.stories.tsx +0 -45
  166. package/src/components/PluginDetail.tsx +0 -82
  167. package/src/components/PluginList.stories.tsx +0 -80
  168. package/src/components/RegistryContainer.tsx +0 -76
  169. /package/dist/types/src/components/{PluginList.stories.d.ts → PluginList/PluginList.stories.d.ts} +0 -0
@@ -0,0 +1,29 @@
1
+ import {
2
+ PluginDetail
3
+ } from "./chunk-Y5BNERPC.mjs";
4
+ import "./chunk-FGKYAUX2.mjs";
5
+
6
+ // src/containers/PluginArticle/PluginArticle.tsx
7
+ import React, { useCallback } from "react";
8
+ import { usePluginManager } from "@dxos/app-framework/ui";
9
+ import { runAndForwardErrors } from "@dxos/effect";
10
+ var PluginArticle = ({ subject: plugin }) => {
11
+ const manager = usePluginManager();
12
+ const enabled = manager.getEnabled().includes(plugin.meta.id);
13
+ const handleEnableChange = useCallback((enabled2) => enabled2 ? runAndForwardErrors(manager.enable(plugin.meta.id)) : runAndForwardErrors(manager.disable(plugin.meta.id)), [
14
+ manager,
15
+ plugin.meta.id
16
+ ]);
17
+ return /* @__PURE__ */ React.createElement(PluginDetail, {
18
+ plugin,
19
+ enabled,
20
+ onEnabledChange: handleEnableChange
21
+ });
22
+ };
23
+
24
+ // src/containers/PluginArticle/index.ts
25
+ var PluginArticle_default = PluginArticle;
26
+ export {
27
+ PluginArticle_default as default
28
+ };
29
+ //# sourceMappingURL=PluginArticle-XBWRL2VJ.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,82 @@
1
+ import {
2
+ PluginList
3
+ } from "./chunk-Y5BNERPC.mjs";
4
+ import {
5
+ getPluginPath
6
+ } from "./chunk-FGKYAUX2.mjs";
7
+
8
+ // src/containers/PluginRegistry/PluginRegistry.tsx
9
+ import { useAtomValue } from "@effect-atom/atom-react";
10
+ import * as Effect from "effect/Effect";
11
+ import React, { useCallback, useMemo } from "react";
12
+ import { useCapabilities, useOperationInvoker, usePluginManager } from "@dxos/app-framework/ui";
13
+ import { AppCapabilities, LayoutOperation, SettingsOperation } from "@dxos/app-toolkit";
14
+ import { runAndForwardErrors } from "@dxos/effect";
15
+ import { ObservabilityOperation } from "@dxos/plugin-observability/operations";
16
+ import { ScrollArea } from "@dxos/react-ui";
17
+ import { composable, composableProps } from "@dxos/ui-theme";
18
+ var sortByPluginMeta = ({ meta: { name: a = "" } }, { meta: { name: b = "" } }) => a.localeCompare(b);
19
+ var PluginRegistry = composable(({ id, plugins: pluginsProp, ...props }, forwardedRef) => {
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
+ ...composableProps(props),
64
+ orientation: "vertical",
65
+ ref: forwardedRef
66
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(PluginList, {
67
+ plugins,
68
+ enabled,
69
+ onClick: handleClick,
70
+ onChange: handleChange,
71
+ hasSettings,
72
+ onSettings: handleSettings
73
+ })));
74
+ });
75
+ PluginRegistry.displayName = "PluginRegistry";
76
+
77
+ // src/containers/PluginRegistry/index.ts
78
+ var PluginRegistry_default = PluginRegistry;
79
+ export {
80
+ PluginRegistry_default as default
81
+ };
82
+ //# sourceMappingURL=PluginRegistry-YU7M4VWL.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/operations';\nimport { ScrollArea } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/ui-theme';\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 = composable<HTMLDivElement, PluginRegistryProps>(\n ({ id, plugins: pluginsProp, ...props }, forwardedRef) => {\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(\n (pluginId: string) => allSettings.some((s) => s.prefix === pluginId),\n [allSettings],\n );\n\n const handleSettings = useCallback(\n (pluginId: string) => invokePromise(SettingsOperation.Open, { plugin: pluginId }),\n [invokePromise],\n );\n\n return (\n <ScrollArea.Root {...composableProps(props)} orientation='vertical' ref={forwardedRef}>\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\nPluginRegistry.displayName = 'PluginRegistry';\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;AAC3B,SAASC,YAAYC,uBAAuB;AAK5C,IAAMC,mBAAmB,CAAC,EAAEC,MAAM,EAAEC,MAAMC,IAAI,GAAE,EAAE,GAAmB,EAAEF,MAAM,EAAEC,MAAME,IAAI,GAAE,EAAE,MAC3FD,EAAEE,cAAcD,CAAAA;AAOX,IAAME,iBAAiBC,WAC5B,CAAC,EAAEC,IAAIC,SAASC,aAAa,GAAGC,MAAAA,GAASC,iBAAAA;AACvC,QAAMC,UAAUC,iBAAAA;AAChB,QAAM,EAAEC,QAAQC,cAAa,IAAKC,oBAAAA;AAClC,QAAMR,UAAUS,QAAQ,MAAMR,YAAYS,KAAKnB,gBAAAA,GAAmB;IAACU;GAAY;AAC/E,QAAMU,UAAUC,aAAaR,QAAQO,OAAO;AAC5C,QAAME,cAAcC,gBAAgBC,gBAAgBC,QAAQ;AAG5D,QAAMC,eAAeC,YACnB,CAACnB,KAAYY,aACJQ,WAAI,aAAA;AACT,QAAIR,UAAS;AACX,aAAOP,QAAQgB,OAAOrB,GAAAA;IACxB,OAAO;AACL,aAAOK,QAAQiB,QAAQtB,GAAAA;IACzB;AAEA,WAAOO,OAAOgB,uBAAuBC,WAAW;MAC9C9B,MAAM;MACN+B,YAAY;QACVC,QAAQ1B;QACRY,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,SAASnC;IACToC,aAAa;EACf,CAAA,GACF;IAAC5B;IAAeR;GAAG;AAGrB,QAAMqC,cAAclB,YAClB,CAACW,aAAqBhB,YAAYwB,KAAK,CAACC,MAAMA,EAAEC,WAAWV,QAAAA,GAC3D;IAAChB;GAAY;AAGf,QAAM2B,iBAAiBtB,YACrB,CAACW,aAAqBtB,cAAckC,kBAAkBV,MAAM;IAAEN,QAAQI;EAAS,CAAA,GAC/E;IAACtB;GAAc;AAGjB,SACE,sBAAA,cAACmC,WAAWC,MAAI;IAAE,GAAGC,gBAAgB1C,KAAAA;IAAQ2C,aAAY;IAAWC,KAAK3C;KACvE,sBAAA,cAACuC,WAAWK,UAAQ,MAClB,sBAAA,cAACC,YAAAA;IACChD;IACAW;IACAsC,SAASrB;IACTsB,UAAUjC;IACVmB;IACAe,YAAYX;;AAKtB,CAAA;AAGF3C,eAAeuD,cAAc;;;ACvF7B,IAAA,yBAAeC;",
6
+ "names": ["useAtomValue", "Effect", "React", "useCallback", "useMemo", "useCapabilities", "useOperationInvoker", "usePluginManager", "AppCapabilities", "LayoutOperation", "SettingsOperation", "runAndForwardErrors", "ObservabilityOperation", "ScrollArea", "composable", "composableProps", "sortByPluginMeta", "meta", "name", "a", "b", "localeCompare", "PluginRegistry", "composable", "id", "plugins", "pluginsProp", "props", "forwardedRef", "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", "composableProps", "orientation", "ref", "Viewport", "PluginList", "onClick", "onChange", "onSettings", "displayName", "PluginRegistry"]
7
+ }
@@ -0,0 +1,168 @@
1
+ import {
2
+ REGISTRY_ID,
3
+ REGISTRY_KEY,
4
+ meta,
5
+ registryCategoryId
6
+ } from "./chunk-FGKYAUX2.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: registryCategoryId("all"),
58
+ type: "category",
59
+ data: registryCategoryId("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: registryCategoryId("installed"),
74
+ type: "category",
75
+ data: registryCategoryId("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: registryCategoryId("recommended"),
90
+ type: "category",
91
+ data: registryCategoryId("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: registryCategoryId("labs"),
106
+ type: "category",
107
+ data: registryCategoryId("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-M6TK7ZTK.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, registryCategoryId, 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: registryCategoryId('all'),\n type: 'category' as const,\n data: registryCategoryId('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: registryCategoryId('installed'),\n type: 'category' as const,\n data: registryCategoryId('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: registryCategoryId('recommended'),\n type: 'category' as const,\n data: registryCategoryId('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: registryCategoryId('labs'),\n type: 'category' as const,\n data: registryCategoryId('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", "registryCategoryId", "key", "REGISTRY_KEY", "whenId", "disabled", "manager", "get", "Capabilities", "PluginManager", "getPlugins", "map", "plugin", "name", "contributes", "AppCapabilities", "AppGraphBuilder"]
7
+ }
@@ -0,0 +1,25 @@
1
+ // src/meta.ts
2
+ import { pinnedWorkspaceId } from "@dxos/app-toolkit";
3
+ import { trim } from "@dxos/util";
4
+ var REGISTRY_ID = pinnedWorkspaceId("dxos:plugin-registry");
5
+ var REGISTRY_KEY = "plugin-registry";
6
+ var CATEGORY_SEPARATOR = ">";
7
+ var registryCategoryId = (category) => `${REGISTRY_KEY}${CATEGORY_SEPARATOR}${category}`;
8
+ var getPluginPath = (pluginId) => `root/${REGISTRY_ID}/${pluginId}`;
9
+ var meta = {
10
+ id: "org.dxos.plugin.registry",
11
+ name: "Plugins",
12
+ description: trim`
13
+ Plugin management system for discovering, installing, and configuring workspace extensions.
14
+ Browse available plugins and customize your workspace capabilities.
15
+ `
16
+ };
17
+
18
+ export {
19
+ REGISTRY_ID,
20
+ REGISTRY_KEY,
21
+ registryCategoryId,
22
+ getPluginPath,
23
+ meta
24
+ };
25
+ //# sourceMappingURL=chunk-FGKYAUX2.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 { pinnedWorkspaceId } from '@dxos/app-toolkit';\nimport { trim } from '@dxos/util';\n\nexport const REGISTRY_ID = pinnedWorkspaceId('dxos:plugin-registry');\nexport const REGISTRY_KEY = 'plugin-registry';\n\n// TODO(wittjosiah): Should this be a special separator or use the standard path separator?\nconst CATEGORY_SEPARATOR = '>';\n\n/** Build a registry category node ID. */\nexport const registryCategoryId = (category: string): string => `${REGISTRY_KEY}${CATEGORY_SEPARATOR}${category}`;\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,yBAAyB;AAClC,SAASC,YAAY;AAEd,IAAMC,cAAcC,kBAAkB,sBAAA;AACtC,IAAMC,eAAe;AAG5B,IAAMC,qBAAqB;AAGpB,IAAMC,qBAAqB,CAACC,aAA6B,GAAGH,YAAAA,GAAeC,kBAAAA,GAAqBE,QAAAA;AAGhG,IAAMC,gBAAgB,CAACC,aAA6B,QAAQP,WAAAA,IAAeO,QAAAA;AAE3E,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;AAIf;",
6
+ "names": ["pinnedWorkspaceId", "trim", "REGISTRY_ID", "pinnedWorkspaceId", "REGISTRY_KEY", "CATEGORY_SEPARATOR", "registryCategoryId", "category", "getPluginPath", "pluginId", "meta", "id", "name", "description", "trim"]
7
+ }
@@ -0,0 +1,193 @@
1
+ import {
2
+ meta
3
+ } from "./chunk-FGKYAUX2.mjs";
4
+
5
+ // src/components/PluginDetail/PluginDetail.tsx
6
+ import React from "react";
7
+ import { Icon, Input, Link, ScrollArea, useTranslation } from "@dxos/react-ui";
8
+ import { composable, composableProps, getStyles, mx } from "@dxos/ui-theme";
9
+ var PluginDetail = composable(({ plugin, enabled, onEnabledChange, ...props }, forwardedRef) => {
10
+ const { t } = useTranslation(meta.id);
11
+ const { id, name, description, homePage, source, screenshots, icon = "ph--circle--regular", iconHue = "neutral" } = plugin.meta;
12
+ const styles = getStyles(iconHue);
13
+ return /* @__PURE__ */ React.createElement(ScrollArea.Root, {
14
+ ...composableProps(props),
15
+ orientation: "vertical",
16
+ ref: forwardedRef
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
+ PluginDetail.displayName = "PluginDetail";
77
+
78
+ // src/components/PluginList/PluginList.tsx
79
+ import React3 from "react";
80
+ import { List } from "@dxos/react-ui";
81
+
82
+ // src/components/PluginList/PluginItem.tsx
83
+ import React2, { useCallback } from "react";
84
+ import { Icon as Icon2, IconButton, Input as Input2, Link as Link2, ListItem, Tag, useTranslation as useTranslation2 } from "@dxos/react-ui";
85
+ import { mx as mx2 } from "@dxos/ui-theme";
86
+ import { getStyles as getStyles2 } from "@dxos/ui-theme";
87
+ var PluginItem = ({ plugin, enabled = [], onClick, onChange, hasSettings: hasSettingsProp, onSettings }) => {
88
+ const { t } = useTranslation2(meta.id);
89
+ const { id, name, description, tags, icon = "ph--circle--regular", iconHue = "neutral" } = plugin.meta;
90
+ const isEnabled = enabled.includes(id);
91
+ const inputId = `${id}-input`;
92
+ const labelId = `${id}-label`;
93
+ const descriptionId = `${id}-description`;
94
+ const handleClick = useCallback(() => onClick?.(id), [
95
+ id,
96
+ onClick
97
+ ]);
98
+ const handleChange = useCallback((event) => {
99
+ event.stopPropagation();
100
+ onChange?.(id, !isEnabled);
101
+ }, [
102
+ id,
103
+ isEnabled,
104
+ onChange
105
+ ]);
106
+ const hasSettings = hasSettingsProp?.(id) ?? false;
107
+ const handleSettings = useCallback(() => onSettings?.(id), [
108
+ id,
109
+ onSettings
110
+ ]);
111
+ const styles = getStyles2(iconHue);
112
+ const gridCols = "grid grid-cols-[5rem_1fr]";
113
+ const gridRows = "grid grid-rows-[40px_1fr_min-content_40px]";
114
+ return /* @__PURE__ */ React2.createElement(ListItem.Root, {
115
+ key: id,
116
+ labelId,
117
+ "data-testid": `pluginList.${id}`,
118
+ "aria-describedby": descriptionId,
119
+ classNames: mx2(gridCols, "h-[14rem] w-full gap-3 pe-2 bg-modal-surface rounded-md overflow-hidden")
120
+ }, /* @__PURE__ */ React2.createElement("div", {
121
+ className: mx2(gridRows, "justify-center rounded-l-md", styles.surface)
122
+ }, /* @__PURE__ */ React2.createElement(Icon2, {
123
+ classNames: mx2("row-start-2 cursor-pointer", styles.surfaceText),
124
+ icon,
125
+ size: 14,
126
+ onClick: handleClick
127
+ })), /* @__PURE__ */ React2.createElement("div", {
128
+ className: mx2(gridRows)
129
+ }, /* @__PURE__ */ React2.createElement("div", {
130
+ className: "flex items-center overflow-hidden cursor-pointer",
131
+ onClick: handleClick
132
+ }, /* @__PURE__ */ React2.createElement("span", {
133
+ className: "text-lg truncate"
134
+ }, name ?? id)), /* @__PURE__ */ React2.createElement("div", null, /* @__PURE__ */ React2.createElement("p", {
135
+ className: mx2("text-description", "line-clamp-4 min-w-0")
136
+ }, description)), /* @__PURE__ */ React2.createElement("div", {
137
+ className: "flex -ms-0.5 overflow-x-auto scrollbar-none"
138
+ }, tags?.map((tag) => /* @__PURE__ */ React2.createElement(Tag, {
139
+ key: tag,
140
+ palette: tagColors[tag],
141
+ classNames: "text-xs uppercase font-thin"
142
+ }, tag))), /* @__PURE__ */ React2.createElement("div", {
143
+ className: "flex gap-2 items-center text-sm"
144
+ }, /* @__PURE__ */ React2.createElement(IconButton, {
145
+ "aria-describedby": descriptionId,
146
+ classNames: "cursor-pointer",
147
+ icon: "ph--gear--regular",
148
+ label: t("settings label"),
149
+ iconOnly: true,
150
+ size: 4,
151
+ onClick: handleSettings,
152
+ disabled: !hasSettings
153
+ }), /* @__PURE__ */ React2.createElement(Link2, {
154
+ "aria-describedby": descriptionId,
155
+ classNames: "text-description cursor-pointer",
156
+ onClick: handleClick
157
+ }, t("details label")), /* @__PURE__ */ React2.createElement("div", {
158
+ className: "grow"
159
+ }), /* @__PURE__ */ React2.createElement("div", {
160
+ className: "pe-1"
161
+ }, /* @__PURE__ */ React2.createElement(Input2.Root, {
162
+ id: inputId
163
+ }, /* @__PURE__ */ React2.createElement(Input2.Switch, {
164
+ classNames: "self-center",
165
+ checked: isEnabled,
166
+ onClick: handleChange
167
+ }))))));
168
+ };
169
+ var tagColors = {
170
+ new: "rose",
171
+ beta: "teal",
172
+ labs: "blue",
173
+ popular: "green",
174
+ featured: "pink",
175
+ experimental: "amber"
176
+ };
177
+
178
+ // src/components/PluginList/PluginList.tsx
179
+ var PluginList = ({ plugins = [], ...props }) => {
180
+ return /* @__PURE__ */ React3.createElement(List, {
181
+ classNames: "grid grid-cols-[repeat(auto-fill,minmax(18rem,1fr))] auto-rows-[max-content] gap-4 p-4"
182
+ }, plugins.map((plugin) => /* @__PURE__ */ React3.createElement(PluginItem, {
183
+ key: plugin.meta.id,
184
+ plugin,
185
+ ...props
186
+ })));
187
+ };
188
+
189
+ export {
190
+ PluginDetail,
191
+ PluginList
192
+ };
193
+ //# sourceMappingURL=chunk-Y5BNERPC.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, ScrollArea, useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps, 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 = composable<HTMLDivElement, PluginDetailProps>(\n ({ plugin, enabled, onEnabledChange, ...props }, forwardedRef) => {\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 {...composableProps(props)} orientation='vertical' ref={forwardedRef}>\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\nPluginDetail.displayName = 'PluginDetail';\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-[14rem] 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", "ScrollArea", "useTranslation", "composable", "composableProps", "getStyles", "mx", "PluginDetail", "composable", "plugin", "enabled", "onEnabledChange", "props", "forwardedRef", "t", "useTranslation", "meta", "id", "name", "description", "homePage", "source", "screenshots", "icon", "iconHue", "styles", "getStyles", "ScrollArea", "Root", "composableProps", "orientation", "ref", "Viewport", "div", "role", "className", "Icon", "classNames", "mx", "fill", "surfaceText", "size", "h2", "Input", "Switch", "checked", "onCheckedChange", "p", "length", "img", "src", "alt", "Link", "href", "target", "rel", "displayName", "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
+ }