{
  "version": 3,
  "sources": ["../../../src/plugin-settings/app-graph-builder.ts"],
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport { createExtension, ROOT_ID } from '@dxos/app-graph';\nimport { type SettingsStore, type SettingsValue } from '@dxos/local-storage';\nimport { isNonNullable } from '@dxos/util';\n\nimport { SETTINGS_ID, SETTINGS_KEY, SETTINGS_PLUGIN, SettingsAction } from './actions';\nimport { Capabilities } from '../common';\nimport { contributes, type PluginMeta, type PluginContext } from '../core';\nimport { createIntent } from '../plugin-intent';\n\nexport default (context: PluginContext) =>\n  contributes(Capabilities.AppGraphBuilder, [\n    createExtension({\n      id: `${SETTINGS_PLUGIN}/action`,\n      actions: (node) =>\n        Rx.make((get) =>\n          pipe(\n            get(node),\n            Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n            Option.map(() => [\n              {\n                id: SETTINGS_PLUGIN,\n                data: async () => {\n                  const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n                  await dispatch(createIntent(SettingsAction.Open));\n                },\n                properties: {\n                  label: ['open settings label', { ns: SETTINGS_PLUGIN }],\n                  icon: 'ph--gear--regular',\n                  disposition: 'menu',\n                  keyBinding: {\n                    macos: 'meta+,',\n                    windows: 'alt+,',\n                  },\n                },\n              },\n            ]),\n            Option.getOrElse(() => []),\n          ),\n        ),\n    }),\n    createExtension({\n      id: `${SETTINGS_PLUGIN}/core`,\n      connector: (node) =>\n        Rx.make((get) =>\n          pipe(\n            get(node),\n            Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n            Option.map(() => [\n              {\n                id: SETTINGS_ID,\n                type: SETTINGS_PLUGIN,\n                properties: {\n                  label: ['app settings label', { ns: SETTINGS_PLUGIN }],\n                  icon: 'ph--gear--regular',\n                  disposition: 'pin-end',\n                  position: 'hoist',\n                  testId: 'treeView.appSettings',\n                },\n              },\n            ]),\n            Option.getOrElse(() => []),\n          ),\n        ),\n    }),\n    createExtension({\n      id: `${SETTINGS_PLUGIN}/core-plugins`,\n      connector: (node) =>\n        Rx.make((get) =>\n          pipe(\n            get(node),\n            Option.flatMap((node) => (node.id !== SETTINGS_ID ? Option.none() : Option.some(node))),\n            Option.map(() => {\n              const manager = get(context.capability(Capabilities.PluginManager));\n              const [settingsStore] = get(context.capabilities(Capabilities.SettingsStore));\n              return [\n                ...manager.plugins\n                  .filter((plugin) => manager.core.includes(plugin.meta.id))\n                  .map((plugin): [PluginMeta, SettingsStore<SettingsValue>] | null => {\n                    const settings = settingsStore?.getStore(plugin.meta.id);\n                    if (!settings) {\n                      return null;\n                    }\n\n                    return [plugin.meta, settings];\n                  })\n                  .filter(isNonNullable)\n                  .map(([meta, settings]) => ({\n                    id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,\n                    type: 'category',\n                    data: settings,\n                    properties: {\n                      label: meta.name ?? meta.id,\n                      icon: meta.icon ?? 'ph--circle--regular',\n                    },\n                  })),\n\n                {\n                  id: `${SETTINGS_KEY}:custom-plugins`,\n                  type: 'category',\n                  properties: {\n                    label: ['custom plugins label', { ns: SETTINGS_PLUGIN }],\n                    icon: 'ph--squares-four--regular',\n                    role: 'branch',\n                    disposition: 'collection',\n                  },\n                },\n              ];\n            }),\n            Option.getOrElse(() => []),\n          ),\n        ),\n    }),\n    createExtension({\n      id: `${SETTINGS_PLUGIN}/custom-plugins`,\n      connector: (node) =>\n        Rx.make((get) =>\n          pipe(\n            get(node),\n            Option.flatMap((node) =>\n              node.id !== `${SETTINGS_KEY}:custom-plugins` ? Option.none() : Option.some(node),\n            ),\n            Option.map(() => {\n              const manager = get(context.capability(Capabilities.PluginManager));\n              const [settingsStore] = get(context.capabilities(Capabilities.SettingsStore));\n              return manager.plugins\n                .filter((plugin) => !manager.core.includes(plugin.meta.id))\n                .map((plugin): [PluginMeta, SettingsStore<SettingsValue>] | null => {\n                  const settings = settingsStore?.getStore(plugin.meta.id);\n                  if (!settings) {\n                    return null;\n                  }\n\n                  return [plugin.meta, settings];\n                })\n                .filter(isNonNullable)\n                .map(([meta, settings]) => ({\n                  id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,\n                  type: 'category',\n                  data: settings,\n                  properties: {\n                    label: meta.name ?? meta.id,\n                    icon: meta.icon ?? 'ph--circle--regular',\n                  },\n                }));\n            }),\n            Option.getOrElse(() => []),\n          ),\n        ),\n    }),\n  ]);\n"],
  "mappings": "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",
  "names": ["Rx", "Option", "pipe", "createExtension", "ROOT_ID", "isNonNullable", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "SETTINGS_PLUGIN", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "createIntent", "SettingsAction", "Open", "properties", "label", "ns", "icon", "disposition", "keyBinding", "macos", "windows", "getOrElse", "connector", "SETTINGS_ID", "type", "position", "testId", "manager", "capability", "PluginManager", "settingsStore", "capabilities", "SettingsStore", "plugins", "filter", "plugin", "core", "includes", "meta", "settings", "getStore", "isNonNullable", "SETTINGS_KEY", "replaceAll", "name", "role"]
}
