@dxos/plugin-settings 0.6.9 → 0.6.10-main.48c066e

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.
@@ -68,7 +68,7 @@ var SettingsDialog = ({ selected, onSelected }) => {
68
68
  classNames: "flex-1 min-bs-0"
69
69
  }, /* @__PURE__ */ React.createElement("div", {
70
70
  role: "none",
71
- className: "overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r separator-separator"
71
+ className: "overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator"
72
72
  }, /* @__PURE__ */ React.createElement(Tabs.Tablist, {
73
73
  classNames: "max-bs-none overflow-y-visible"
74
74
  }, /* @__PURE__ */ React.createElement(PluginList, {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/SettingsPlugin.tsx", "../../../src/components/SettingsDialog.tsx", "../../../src/components/SettingsValue.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gear, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n type IntentResolverProvides,\n type PluginDefinition,\n type SurfaceProvides,\n parseIntentPlugin,\n resolvePlugin,\n LayoutAction,\n SettingsAction,\n type GraphBuilderProvides,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\n\nimport { SettingsDialog } from './components';\nimport meta, { SETTINGS_PLUGIN } from './meta';\nimport translations from './translations';\n\nconst DEFAULT_PLUGIN = 'dxos.org/plugin/registry';\n\nexport type SettingsPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n TranslationsProvides;\n\ntype SettingsSettingsProps = {\n selected: string;\n};\n\n/**\n * Plugin for aggregating and rendering plugin settings.\n */\nexport const SettingsPlugin = (): PluginDefinition<SettingsPluginProvides> => {\n const settings = new LocalStorageStore<SettingsSettingsProps>(SETTINGS_PLUGIN, { selected: DEFAULT_PLUGIN });\n\n return {\n meta,\n ready: async () => {\n settings.prop({ key: 'selected', type: LocalStorageStore.string() });\n },\n provides: {\n surface: {\n component: ({ data }) => {\n switch (data.component) {\n case `${SETTINGS_PLUGIN}/Settings`:\n return (\n <SettingsDialog\n selected={settings.values.selected}\n onSelected={(selected) => (settings.values.selected = selected)}\n />\n );\n\n default:\n return null;\n }\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case SettingsAction.OPEN: {\n if (intent.data?.plugin) {\n settings.values.selected = intent.data?.plugin;\n }\n\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${SETTINGS_PLUGIN}/Settings`,\n dialogBlockAlign: 'start',\n },\n },\n ],\n ],\n };\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return createExtension({\n id: SETTINGS_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: SETTINGS_PLUGIN,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n plugin: SETTINGS_PLUGIN,\n action: SettingsAction.OPEN,\n });\n },\n properties: {\n label: ['open settings label', { ns: SETTINGS_PLUGIN }],\n icon: (props: IconProps) => <Gear {...props} />,\n iconSymbol: 'ph--gear--regular',\n keyBinding: {\n macos: 'meta+,',\n windows: 'alt+,',\n },\n },\n },\n ],\n });\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { type Plugin, Surface, usePlugins } from '@dxos/app-framework';\nimport { Button, Dialog, useTranslation } from '@dxos/react-ui';\nimport { Tabs, type TabsActivePart } from '@dxos/react-ui-tabs';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { SETTINGS_PLUGIN } from '../meta';\n\nexport const SettingsDialog = ({\n selected,\n onSelected,\n}: {\n selected: string;\n onSelected: (plugin: string) => void;\n}) => {\n const { t } = useTranslation(SETTINGS_PLUGIN);\n const { plugins, enabled } = usePlugins();\n\n // TODO(burdon): Factor out common defs?\n const core = [\n 'dxos.org/plugin/layout',\n 'dxos.org/plugin/deck',\n 'dxos.org/plugin/files',\n 'dxos.org/plugin/space',\n 'dxos.org/plugin/stack',\n 'dxos.org/plugin/observability',\n 'dxos.org/plugin/registry',\n ];\n\n const corePlugins = core.map((id) => plugins.find((plugin) => plugin.meta.id === id)?.meta).filter(nonNullable);\n\n const filteredPlugins = enabled\n .filter((id) => !core.includes(id))\n .map((id) => plugins.find((plugin) => plugin.meta.id === id))\n .filter((plugin) => (plugin?.provides as any)?.settings)\n .map((plugin) => plugin!.meta)\n .sort(({ name: a }, { name: b }) => a?.localeCompare(b ?? '') ?? 0);\n\n const [tabsActivePart, setTabsActivePart] = useState<TabsActivePart>('list');\n\n return (\n <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title\n onClick={() => setTabsActivePart('list')}\n aria-description={t('click to return to tablist description')}\n classNames='flex cursor-pointer items-center group/title'\n >\n <svg className={mx('@md:hidden', getSize(4), tabsActivePart === 'list' && 'invisible')}>\n <use href='/icons.svg#ph--caret-left--regular' />\n </svg>\n <span\n className={\n tabsActivePart !== 'list'\n ? 'group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1'\n : ''\n }\n >\n {t('settings dialog title')}\n </span>\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost' autoFocus>\n <svg className={mx(getSize(3))}>\n <use href={'/icons.svg#ph--x--regular'} />\n </svg>\n </Button>\n </Dialog.Close>\n </div>\n\n <Tabs.Root\n orientation='vertical'\n value={selected}\n onValueChange={(nextSelected) => onSelected(nextSelected)}\n activePart={tabsActivePart}\n onActivePartChange={setTabsActivePart}\n classNames='flex flex-col flex-1 mbs-2'\n >\n <Tabs.Viewport classNames='flex-1 min-bs-0'>\n <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r separator-separator'>\n <Tabs.Tablist classNames='max-bs-none overflow-y-visible'>\n <PluginList title='Options' plugins={corePlugins} />\n {filteredPlugins.length > 0 && <PluginList title='Plugins' plugins={filteredPlugins} gap />}\n </Tabs.Tablist>\n </div>\n\n {corePlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n {filteredPlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n </Tabs.Viewport>\n </Tabs.Root>\n </Dialog.Content>\n );\n};\n\nconst PluginList = ({ title, plugins, gap }: { title: string; plugins: Plugin['meta'][]; gap?: boolean }) => {\n return (\n <>\n <Tabs.TabGroupHeading classNames={gap ? 'mbs-4' : 'mbs-4 @md:mbs-2'}>{title}</Tabs.TabGroupHeading>\n {plugins.map((plugin) => (\n <Tabs.Tab key={plugin.id} value={plugin.id}>\n {plugin.name}\n </Tabs.Tab>\n ))}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren } from 'react';\n\nimport { Input } from '@dxos/react-ui';\n\ntype SettingValueProps = {\n label: string;\n description?: JSX.Element;\n secondary?: JSX.Element;\n};\n\nexport const SettingsValue = ({ label, description, secondary, children }: PropsWithChildren<SettingValueProps>) => {\n const primary = (\n <div role='none' className='flex w-full gap-4 py-1'>\n <Input.Root>\n <div role='none' className='flex flex-col w-full'>\n {/* TODO(burdon): Consistent height for controls (e.g., Select, Textbox, and Checkbox are all different). */}\n <Input.Label classNames='flex min-h-[40px] items-center'>{label}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation classNames='mbs-0.5'>\n <Input.Description>{description}</Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n\n <div role='none'>\n <div role='none' className='flex min-h-[40px] items-center'>\n {children}\n </div>\n </div>\n </Input.Root>\n </div>\n );\n\n if (secondary) {\n // console.log(secondary);\n return (\n <div role='none' className='flex flex-col w-full'>\n {primary}\n {secondary}\n </div>\n );\n }\n\n return primary;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SETTINGS_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SETTINGS_PLUGIN]: {\n 'open settings label': 'Show settings',\n 'settings dialog title': 'Settings',\n 'back label': 'Back',\n 'click to return to tablist description': 'Click the title to return to the settings menu',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SettingsPlugin } from './SettingsPlugin';\n\nexport default SettingsPlugin;\n\nexport * from './SettingsPlugin';\n\n// TODO(wittjosiah): Remove.\n// Settings should be exposed from plugins as state and intents rather than components.\nexport * from './components';\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gear, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n type IntentResolverProvides,\n type PluginDefinition,\n type SurfaceProvides,\n parseIntentPlugin,\n resolvePlugin,\n LayoutAction,\n SettingsAction,\n type GraphBuilderProvides,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\n\nimport { SettingsDialog } from './components';\nimport meta, { SETTINGS_PLUGIN } from './meta';\nimport translations from './translations';\n\nconst DEFAULT_PLUGIN = 'dxos.org/plugin/registry';\n\nexport type SettingsPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n TranslationsProvides;\n\ntype SettingsSettingsProps = {\n selected: string;\n};\n\n/**\n * Plugin for aggregating and rendering plugin settings.\n */\nexport const SettingsPlugin = (): PluginDefinition<SettingsPluginProvides> => {\n const settings = new LocalStorageStore<SettingsSettingsProps>(SETTINGS_PLUGIN, { selected: DEFAULT_PLUGIN });\n\n return {\n meta,\n ready: async () => {\n settings.prop({ key: 'selected', type: LocalStorageStore.string() });\n },\n provides: {\n surface: {\n component: ({ data }) => {\n switch (data.component) {\n case `${SETTINGS_PLUGIN}/Settings`:\n return (\n <SettingsDialog\n selected={settings.values.selected}\n onSelected={(selected) => (settings.values.selected = selected)}\n />\n );\n\n default:\n return null;\n }\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case SettingsAction.OPEN: {\n if (intent.data?.plugin) {\n settings.values.selected = intent.data?.plugin;\n }\n\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${SETTINGS_PLUGIN}/Settings`,\n dialogBlockAlign: 'start',\n },\n },\n ],\n ],\n };\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return createExtension({\n id: SETTINGS_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: SETTINGS_PLUGIN,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n plugin: SETTINGS_PLUGIN,\n action: SettingsAction.OPEN,\n });\n },\n properties: {\n label: ['open settings label', { ns: SETTINGS_PLUGIN }],\n icon: (props: IconProps) => <Gear {...props} />,\n iconSymbol: 'ph--gear--regular',\n keyBinding: {\n macos: 'meta+,',\n windows: 'alt+,',\n },\n },\n },\n ],\n });\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { type Plugin, Surface, usePlugins } from '@dxos/app-framework';\nimport { Button, Dialog, useTranslation } from '@dxos/react-ui';\nimport { Tabs, type TabsActivePart } from '@dxos/react-ui-tabs';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { SETTINGS_PLUGIN } from '../meta';\n\nexport const SettingsDialog = ({\n selected,\n onSelected,\n}: {\n selected: string;\n onSelected: (plugin: string) => void;\n}) => {\n const { t } = useTranslation(SETTINGS_PLUGIN);\n const { plugins, enabled } = usePlugins();\n\n // TODO(burdon): Factor out common defs?\n const core = [\n 'dxos.org/plugin/layout',\n 'dxos.org/plugin/deck',\n 'dxos.org/plugin/files',\n 'dxos.org/plugin/space',\n 'dxos.org/plugin/stack',\n 'dxos.org/plugin/observability',\n 'dxos.org/plugin/registry',\n ];\n\n const corePlugins = core.map((id) => plugins.find((plugin) => plugin.meta.id === id)?.meta).filter(nonNullable);\n\n const filteredPlugins = enabled\n .filter((id) => !core.includes(id))\n .map((id) => plugins.find((plugin) => plugin.meta.id === id))\n .filter((plugin) => (plugin?.provides as any)?.settings)\n .map((plugin) => plugin!.meta)\n .sort(({ name: a }, { name: b }) => a?.localeCompare(b ?? '') ?? 0);\n\n const [tabsActivePart, setTabsActivePart] = useState<TabsActivePart>('list');\n\n return (\n <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title\n onClick={() => setTabsActivePart('list')}\n aria-description={t('click to return to tablist description')}\n classNames='flex cursor-pointer items-center group/title'\n >\n <svg className={mx('@md:hidden', getSize(4), tabsActivePart === 'list' && 'invisible')}>\n <use href='/icons.svg#ph--caret-left--regular' />\n </svg>\n <span\n className={\n tabsActivePart !== 'list'\n ? 'group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1'\n : ''\n }\n >\n {t('settings dialog title')}\n </span>\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost' autoFocus>\n <svg className={mx(getSize(3))}>\n <use href={'/icons.svg#ph--x--regular'} />\n </svg>\n </Button>\n </Dialog.Close>\n </div>\n\n <Tabs.Root\n orientation='vertical'\n value={selected}\n onValueChange={(nextSelected) => onSelected(nextSelected)}\n activePart={tabsActivePart}\n onActivePartChange={setTabsActivePart}\n classNames='flex flex-col flex-1 mbs-2'\n >\n <Tabs.Viewport classNames='flex-1 min-bs-0'>\n <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator'>\n <Tabs.Tablist classNames='max-bs-none overflow-y-visible'>\n <PluginList title='Options' plugins={corePlugins} />\n {filteredPlugins.length > 0 && <PluginList title='Plugins' plugins={filteredPlugins} gap />}\n </Tabs.Tablist>\n </div>\n\n {corePlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n {filteredPlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n </Tabs.Viewport>\n </Tabs.Root>\n </Dialog.Content>\n );\n};\n\nconst PluginList = ({ title, plugins, gap }: { title: string; plugins: Plugin['meta'][]; gap?: boolean }) => {\n return (\n <>\n <Tabs.TabGroupHeading classNames={gap ? 'mbs-4' : 'mbs-4 @md:mbs-2'}>{title}</Tabs.TabGroupHeading>\n {plugins.map((plugin) => (\n <Tabs.Tab key={plugin.id} value={plugin.id}>\n {plugin.name}\n </Tabs.Tab>\n ))}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren } from 'react';\n\nimport { Input } from '@dxos/react-ui';\n\ntype SettingValueProps = {\n label: string;\n description?: JSX.Element;\n secondary?: JSX.Element;\n};\n\nexport const SettingsValue = ({ label, description, secondary, children }: PropsWithChildren<SettingValueProps>) => {\n const primary = (\n <div role='none' className='flex w-full gap-4 py-1'>\n <Input.Root>\n <div role='none' className='flex flex-col w-full'>\n {/* TODO(burdon): Consistent height for controls (e.g., Select, Textbox, and Checkbox are all different). */}\n <Input.Label classNames='flex min-h-[40px] items-center'>{label}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation classNames='mbs-0.5'>\n <Input.Description>{description}</Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n\n <div role='none'>\n <div role='none' className='flex min-h-[40px] items-center'>\n {children}\n </div>\n </div>\n </Input.Root>\n </div>\n );\n\n if (secondary) {\n // console.log(secondary);\n return (\n <div role='none' className='flex flex-col w-full'>\n {primary}\n {secondary}\n </div>\n );\n }\n\n return primary;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SETTINGS_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SETTINGS_PLUGIN]: {\n 'open settings label': 'Show settings',\n 'settings dialog title': 'Settings',\n 'back label': 'Back',\n 'click to return to tablist description': 'Click the title to return to the settings menu',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SettingsPlugin } from './SettingsPlugin';\n\nexport default SettingsPlugin;\n\nexport * from './SettingsPlugin';\n\n// TODO(wittjosiah): Remove.\n// Settings should be exposed from plugins as state and intents rather than components.\nexport * from './components';\n"],
5
5
  "mappings": "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",
6
6
  "names": ["Gear", "React", "parseIntentPlugin", "resolvePlugin", "LayoutAction", "SettingsAction", "LocalStorageStore", "createExtension", "React", "useState", "Surface", "usePlugins", "Button", "Dialog", "useTranslation", "Tabs", "getSize", "mx", "nonNullable", "SettingsDialog", "selected", "onSelected", "t", "useTranslation", "SETTINGS_PLUGIN", "plugins", "enabled", "usePlugins", "core", "corePlugins", "map", "id", "find", "plugin", "meta", "filter", "nonNullable", "filteredPlugins", "includes", "provides", "settings", "sort", "name", "a", "b", "localeCompare", "tabsActivePart", "setTabsActivePart", "useState", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "onClick", "aria-description", "svg", "mx", "getSize", "use", "href", "span", "Close", "asChild", "Button", "density", "variant", "autoFocus", "Tabs", "Root", "orientation", "value", "onValueChange", "nextSelected", "activePart", "onActivePartChange", "Viewport", "Tablist", "PluginList", "title", "length", "gap", "Tabpanel", "key", "Surface", "data", "TabGroupHeading", "Tab", "React", "Input", "SettingsValue", "label", "description", "secondary", "children", "primary", "React", "div", "role", "className", "Input", "Root", "Label", "classNames", "DescriptionAndValidation", "Description", "SETTINGS_PLUGIN", "DEFAULT_PLUGIN", "SettingsPlugin", "settings", "LocalStorageStore", "SETTINGS_PLUGIN", "selected", "meta", "ready", "prop", "key", "type", "string", "provides", "surface", "component", "data", "React", "SettingsDialog", "values", "onSelected", "intent", "resolver", "action", "SettingsAction", "OPEN", "plugin", "intents", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "graph", "builder", "plugins", "intentPlugin", "resolvePlugin", "parseIntentPlugin", "createExtension", "id", "filter", "node", "actions", "dispatch", "properties", "label", "ns", "icon", "props", "Gear", "iconSymbol", "keyBinding", "macos", "windows", "translations", "SettingsPlugin"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/plugin-settings/src/meta.ts":{"bytes":778,"imports":[],"format":"esm"},"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx":{"bytes":15578,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tabs","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-settings/src/components/SettingsValue.tsx":{"bytes":4471,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-settings/src/components/index.ts":{"bytes":634,"imports":[{"path":"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx","kind":"import-statement","original":"./SettingsDialog"},{"path":"packages/plugins/plugin-settings/src/components/SettingsValue.tsx","kind":"import-statement","original":"./SettingsValue"}],"format":"esm"},"packages/plugins/plugin-settings/src/translations.ts":{"bytes":1571,"imports":[{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-settings/src/SettingsPlugin.tsx":{"bytes":12747,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-settings/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-settings/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-settings/src/index.ts":{"bytes":1216,"imports":[{"path":"packages/plugins/plugin-settings/src/SettingsPlugin.tsx","kind":"import-statement","original":"./SettingsPlugin"},{"path":"packages/plugins/plugin-settings/src/SettingsPlugin.tsx","kind":"import-statement","original":"./SettingsPlugin"},{"path":"packages/plugins/plugin-settings/src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-settings/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17139},"packages/plugins/plugin-settings/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-settings/dist/lib/browser/chunk-JKQMH66V.mjs","kind":"import-statement"},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tabs","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"exports":["SettingsDialog","SettingsPlugin","SettingsValue","default"],"entryPoint":"packages/plugins/plugin-settings/src/index.ts","inputs":{"packages/plugins/plugin-settings/src/SettingsPlugin.tsx":{"bytesInOutput":2968},"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx":{"bytesInOutput":4408},"packages/plugins/plugin-settings/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-settings/src/components/SettingsValue.tsx":{"bytesInOutput":1125},"packages/plugins/plugin-settings/src/translations.ts":{"bytesInOutput":318},"packages/plugins/plugin-settings/src/index.ts":{"bytesInOutput":34}},"bytes":9420},"packages/plugins/plugin-settings/dist/lib/browser/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-settings/dist/lib/browser/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-settings/dist/lib/browser/chunk-JKQMH66V.mjs","kind":"import-statement"}],"exports":["SETTINGS_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-settings/src/meta.ts","inputs":{},"bytes":165},"packages/plugins/plugin-settings/dist/lib/browser/chunk-JKQMH66V.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":338},"packages/plugins/plugin-settings/dist/lib/browser/chunk-JKQMH66V.mjs":{"imports":[],"exports":["SETTINGS_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-settings/src/meta.ts":{"bytesInOutput":96}},"bytes":235}}}
1
+ {"inputs":{"packages/plugins/plugin-settings/src/meta.ts":{"bytes":778,"imports":[],"format":"esm"},"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx":{"bytes":15571,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tabs","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-settings/src/components/SettingsValue.tsx":{"bytes":4471,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-settings/src/components/index.ts":{"bytes":634,"imports":[{"path":"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx","kind":"import-statement","original":"./SettingsDialog"},{"path":"packages/plugins/plugin-settings/src/components/SettingsValue.tsx","kind":"import-statement","original":"./SettingsValue"}],"format":"esm"},"packages/plugins/plugin-settings/src/translations.ts":{"bytes":1571,"imports":[{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-settings/src/SettingsPlugin.tsx":{"bytes":12747,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-settings/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-settings/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-settings/src/index.ts":{"bytes":1216,"imports":[{"path":"packages/plugins/plugin-settings/src/SettingsPlugin.tsx","kind":"import-statement","original":"./SettingsPlugin"},{"path":"packages/plugins/plugin-settings/src/SettingsPlugin.tsx","kind":"import-statement","original":"./SettingsPlugin"},{"path":"packages/plugins/plugin-settings/src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-settings/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17136},"packages/plugins/plugin-settings/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-settings/dist/lib/browser/chunk-JKQMH66V.mjs","kind":"import-statement"},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tabs","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"exports":["SettingsDialog","SettingsPlugin","SettingsValue","default"],"entryPoint":"packages/plugins/plugin-settings/src/index.ts","inputs":{"packages/plugins/plugin-settings/src/SettingsPlugin.tsx":{"bytesInOutput":2968},"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx":{"bytesInOutput":4405},"packages/plugins/plugin-settings/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-settings/src/components/SettingsValue.tsx":{"bytesInOutput":1125},"packages/plugins/plugin-settings/src/translations.ts":{"bytesInOutput":318},"packages/plugins/plugin-settings/src/index.ts":{"bytesInOutput":34}},"bytes":9417},"packages/plugins/plugin-settings/dist/lib/browser/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-settings/dist/lib/browser/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-settings/dist/lib/browser/chunk-JKQMH66V.mjs","kind":"import-statement"}],"exports":["SETTINGS_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-settings/src/meta.ts","inputs":{},"bytes":165},"packages/plugins/plugin-settings/dist/lib/browser/chunk-JKQMH66V.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":338},"packages/plugins/plugin-settings/dist/lib/browser/chunk-JKQMH66V.mjs":{"imports":[],"exports":["SETTINGS_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-settings/src/meta.ts":{"bytesInOutput":96}},"bytes":235}}}
@@ -99,7 +99,7 @@ var SettingsDialog = ({ selected, onSelected }) => {
99
99
  classNames: "flex-1 min-bs-0"
100
100
  }, /* @__PURE__ */ import_react3.default.createElement("div", {
101
101
  role: "none",
102
- className: "overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r separator-separator"
102
+ className: "overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator"
103
103
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_tabs.Tabs.Tablist, {
104
104
  classNames: "max-bs-none overflow-y-visible"
105
105
  }, /* @__PURE__ */ import_react3.default.createElement(PluginList, {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/SettingsPlugin.tsx", "../../../src/components/SettingsDialog.tsx", "../../../src/components/SettingsValue.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gear, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n type IntentResolverProvides,\n type PluginDefinition,\n type SurfaceProvides,\n parseIntentPlugin,\n resolvePlugin,\n LayoutAction,\n SettingsAction,\n type GraphBuilderProvides,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\n\nimport { SettingsDialog } from './components';\nimport meta, { SETTINGS_PLUGIN } from './meta';\nimport translations from './translations';\n\nconst DEFAULT_PLUGIN = 'dxos.org/plugin/registry';\n\nexport type SettingsPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n TranslationsProvides;\n\ntype SettingsSettingsProps = {\n selected: string;\n};\n\n/**\n * Plugin for aggregating and rendering plugin settings.\n */\nexport const SettingsPlugin = (): PluginDefinition<SettingsPluginProvides> => {\n const settings = new LocalStorageStore<SettingsSettingsProps>(SETTINGS_PLUGIN, { selected: DEFAULT_PLUGIN });\n\n return {\n meta,\n ready: async () => {\n settings.prop({ key: 'selected', type: LocalStorageStore.string() });\n },\n provides: {\n surface: {\n component: ({ data }) => {\n switch (data.component) {\n case `${SETTINGS_PLUGIN}/Settings`:\n return (\n <SettingsDialog\n selected={settings.values.selected}\n onSelected={(selected) => (settings.values.selected = selected)}\n />\n );\n\n default:\n return null;\n }\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case SettingsAction.OPEN: {\n if (intent.data?.plugin) {\n settings.values.selected = intent.data?.plugin;\n }\n\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${SETTINGS_PLUGIN}/Settings`,\n dialogBlockAlign: 'start',\n },\n },\n ],\n ],\n };\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return createExtension({\n id: SETTINGS_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: SETTINGS_PLUGIN,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n plugin: SETTINGS_PLUGIN,\n action: SettingsAction.OPEN,\n });\n },\n properties: {\n label: ['open settings label', { ns: SETTINGS_PLUGIN }],\n icon: (props: IconProps) => <Gear {...props} />,\n iconSymbol: 'ph--gear--regular',\n keyBinding: {\n macos: 'meta+,',\n windows: 'alt+,',\n },\n },\n },\n ],\n });\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { type Plugin, Surface, usePlugins } from '@dxos/app-framework';\nimport { Button, Dialog, useTranslation } from '@dxos/react-ui';\nimport { Tabs, type TabsActivePart } from '@dxos/react-ui-tabs';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { SETTINGS_PLUGIN } from '../meta';\n\nexport const SettingsDialog = ({\n selected,\n onSelected,\n}: {\n selected: string;\n onSelected: (plugin: string) => void;\n}) => {\n const { t } = useTranslation(SETTINGS_PLUGIN);\n const { plugins, enabled } = usePlugins();\n\n // TODO(burdon): Factor out common defs?\n const core = [\n 'dxos.org/plugin/layout',\n 'dxos.org/plugin/deck',\n 'dxos.org/plugin/files',\n 'dxos.org/plugin/space',\n 'dxos.org/plugin/stack',\n 'dxos.org/plugin/observability',\n 'dxos.org/plugin/registry',\n ];\n\n const corePlugins = core.map((id) => plugins.find((plugin) => plugin.meta.id === id)?.meta).filter(nonNullable);\n\n const filteredPlugins = enabled\n .filter((id) => !core.includes(id))\n .map((id) => plugins.find((plugin) => plugin.meta.id === id))\n .filter((plugin) => (plugin?.provides as any)?.settings)\n .map((plugin) => plugin!.meta)\n .sort(({ name: a }, { name: b }) => a?.localeCompare(b ?? '') ?? 0);\n\n const [tabsActivePart, setTabsActivePart] = useState<TabsActivePart>('list');\n\n return (\n <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title\n onClick={() => setTabsActivePart('list')}\n aria-description={t('click to return to tablist description')}\n classNames='flex cursor-pointer items-center group/title'\n >\n <svg className={mx('@md:hidden', getSize(4), tabsActivePart === 'list' && 'invisible')}>\n <use href='/icons.svg#ph--caret-left--regular' />\n </svg>\n <span\n className={\n tabsActivePart !== 'list'\n ? 'group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1'\n : ''\n }\n >\n {t('settings dialog title')}\n </span>\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost' autoFocus>\n <svg className={mx(getSize(3))}>\n <use href={'/icons.svg#ph--x--regular'} />\n </svg>\n </Button>\n </Dialog.Close>\n </div>\n\n <Tabs.Root\n orientation='vertical'\n value={selected}\n onValueChange={(nextSelected) => onSelected(nextSelected)}\n activePart={tabsActivePart}\n onActivePartChange={setTabsActivePart}\n classNames='flex flex-col flex-1 mbs-2'\n >\n <Tabs.Viewport classNames='flex-1 min-bs-0'>\n <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r separator-separator'>\n <Tabs.Tablist classNames='max-bs-none overflow-y-visible'>\n <PluginList title='Options' plugins={corePlugins} />\n {filteredPlugins.length > 0 && <PluginList title='Plugins' plugins={filteredPlugins} gap />}\n </Tabs.Tablist>\n </div>\n\n {corePlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n {filteredPlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n </Tabs.Viewport>\n </Tabs.Root>\n </Dialog.Content>\n );\n};\n\nconst PluginList = ({ title, plugins, gap }: { title: string; plugins: Plugin['meta'][]; gap?: boolean }) => {\n return (\n <>\n <Tabs.TabGroupHeading classNames={gap ? 'mbs-4' : 'mbs-4 @md:mbs-2'}>{title}</Tabs.TabGroupHeading>\n {plugins.map((plugin) => (\n <Tabs.Tab key={plugin.id} value={plugin.id}>\n {plugin.name}\n </Tabs.Tab>\n ))}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren } from 'react';\n\nimport { Input } from '@dxos/react-ui';\n\ntype SettingValueProps = {\n label: string;\n description?: JSX.Element;\n secondary?: JSX.Element;\n};\n\nexport const SettingsValue = ({ label, description, secondary, children }: PropsWithChildren<SettingValueProps>) => {\n const primary = (\n <div role='none' className='flex w-full gap-4 py-1'>\n <Input.Root>\n <div role='none' className='flex flex-col w-full'>\n {/* TODO(burdon): Consistent height for controls (e.g., Select, Textbox, and Checkbox are all different). */}\n <Input.Label classNames='flex min-h-[40px] items-center'>{label}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation classNames='mbs-0.5'>\n <Input.Description>{description}</Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n\n <div role='none'>\n <div role='none' className='flex min-h-[40px] items-center'>\n {children}\n </div>\n </div>\n </Input.Root>\n </div>\n );\n\n if (secondary) {\n // console.log(secondary);\n return (\n <div role='none' className='flex flex-col w-full'>\n {primary}\n {secondary}\n </div>\n );\n }\n\n return primary;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SETTINGS_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SETTINGS_PLUGIN]: {\n 'open settings label': 'Show settings',\n 'settings dialog title': 'Settings',\n 'back label': 'Back',\n 'click to return to tablist description': 'Click the title to return to the settings menu',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SettingsPlugin } from './SettingsPlugin';\n\nexport default SettingsPlugin;\n\nexport * from './SettingsPlugin';\n\n// TODO(wittjosiah): Remove.\n// Settings should be exposed from plugins as state and intents rather than components.\nexport * from './components';\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gear, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n type IntentResolverProvides,\n type PluginDefinition,\n type SurfaceProvides,\n parseIntentPlugin,\n resolvePlugin,\n LayoutAction,\n SettingsAction,\n type GraphBuilderProvides,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\n\nimport { SettingsDialog } from './components';\nimport meta, { SETTINGS_PLUGIN } from './meta';\nimport translations from './translations';\n\nconst DEFAULT_PLUGIN = 'dxos.org/plugin/registry';\n\nexport type SettingsPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n TranslationsProvides;\n\ntype SettingsSettingsProps = {\n selected: string;\n};\n\n/**\n * Plugin for aggregating and rendering plugin settings.\n */\nexport const SettingsPlugin = (): PluginDefinition<SettingsPluginProvides> => {\n const settings = new LocalStorageStore<SettingsSettingsProps>(SETTINGS_PLUGIN, { selected: DEFAULT_PLUGIN });\n\n return {\n meta,\n ready: async () => {\n settings.prop({ key: 'selected', type: LocalStorageStore.string() });\n },\n provides: {\n surface: {\n component: ({ data }) => {\n switch (data.component) {\n case `${SETTINGS_PLUGIN}/Settings`:\n return (\n <SettingsDialog\n selected={settings.values.selected}\n onSelected={(selected) => (settings.values.selected = selected)}\n />\n );\n\n default:\n return null;\n }\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case SettingsAction.OPEN: {\n if (intent.data?.plugin) {\n settings.values.selected = intent.data?.plugin;\n }\n\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${SETTINGS_PLUGIN}/Settings`,\n dialogBlockAlign: 'start',\n },\n },\n ],\n ],\n };\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return createExtension({\n id: SETTINGS_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: SETTINGS_PLUGIN,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n plugin: SETTINGS_PLUGIN,\n action: SettingsAction.OPEN,\n });\n },\n properties: {\n label: ['open settings label', { ns: SETTINGS_PLUGIN }],\n icon: (props: IconProps) => <Gear {...props} />,\n iconSymbol: 'ph--gear--regular',\n keyBinding: {\n macos: 'meta+,',\n windows: 'alt+,',\n },\n },\n },\n ],\n });\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { type Plugin, Surface, usePlugins } from '@dxos/app-framework';\nimport { Button, Dialog, useTranslation } from '@dxos/react-ui';\nimport { Tabs, type TabsActivePart } from '@dxos/react-ui-tabs';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { SETTINGS_PLUGIN } from '../meta';\n\nexport const SettingsDialog = ({\n selected,\n onSelected,\n}: {\n selected: string;\n onSelected: (plugin: string) => void;\n}) => {\n const { t } = useTranslation(SETTINGS_PLUGIN);\n const { plugins, enabled } = usePlugins();\n\n // TODO(burdon): Factor out common defs?\n const core = [\n 'dxos.org/plugin/layout',\n 'dxos.org/plugin/deck',\n 'dxos.org/plugin/files',\n 'dxos.org/plugin/space',\n 'dxos.org/plugin/stack',\n 'dxos.org/plugin/observability',\n 'dxos.org/plugin/registry',\n ];\n\n const corePlugins = core.map((id) => plugins.find((plugin) => plugin.meta.id === id)?.meta).filter(nonNullable);\n\n const filteredPlugins = enabled\n .filter((id) => !core.includes(id))\n .map((id) => plugins.find((plugin) => plugin.meta.id === id))\n .filter((plugin) => (plugin?.provides as any)?.settings)\n .map((plugin) => plugin!.meta)\n .sort(({ name: a }, { name: b }) => a?.localeCompare(b ?? '') ?? 0);\n\n const [tabsActivePart, setTabsActivePart] = useState<TabsActivePart>('list');\n\n return (\n <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title\n onClick={() => setTabsActivePart('list')}\n aria-description={t('click to return to tablist description')}\n classNames='flex cursor-pointer items-center group/title'\n >\n <svg className={mx('@md:hidden', getSize(4), tabsActivePart === 'list' && 'invisible')}>\n <use href='/icons.svg#ph--caret-left--regular' />\n </svg>\n <span\n className={\n tabsActivePart !== 'list'\n ? 'group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1'\n : ''\n }\n >\n {t('settings dialog title')}\n </span>\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost' autoFocus>\n <svg className={mx(getSize(3))}>\n <use href={'/icons.svg#ph--x--regular'} />\n </svg>\n </Button>\n </Dialog.Close>\n </div>\n\n <Tabs.Root\n orientation='vertical'\n value={selected}\n onValueChange={(nextSelected) => onSelected(nextSelected)}\n activePart={tabsActivePart}\n onActivePartChange={setTabsActivePart}\n classNames='flex flex-col flex-1 mbs-2'\n >\n <Tabs.Viewport classNames='flex-1 min-bs-0'>\n <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator'>\n <Tabs.Tablist classNames='max-bs-none overflow-y-visible'>\n <PluginList title='Options' plugins={corePlugins} />\n {filteredPlugins.length > 0 && <PluginList title='Plugins' plugins={filteredPlugins} gap />}\n </Tabs.Tablist>\n </div>\n\n {corePlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n {filteredPlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n </Tabs.Viewport>\n </Tabs.Root>\n </Dialog.Content>\n );\n};\n\nconst PluginList = ({ title, plugins, gap }: { title: string; plugins: Plugin['meta'][]; gap?: boolean }) => {\n return (\n <>\n <Tabs.TabGroupHeading classNames={gap ? 'mbs-4' : 'mbs-4 @md:mbs-2'}>{title}</Tabs.TabGroupHeading>\n {plugins.map((plugin) => (\n <Tabs.Tab key={plugin.id} value={plugin.id}>\n {plugin.name}\n </Tabs.Tab>\n ))}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren } from 'react';\n\nimport { Input } from '@dxos/react-ui';\n\ntype SettingValueProps = {\n label: string;\n description?: JSX.Element;\n secondary?: JSX.Element;\n};\n\nexport const SettingsValue = ({ label, description, secondary, children }: PropsWithChildren<SettingValueProps>) => {\n const primary = (\n <div role='none' className='flex w-full gap-4 py-1'>\n <Input.Root>\n <div role='none' className='flex flex-col w-full'>\n {/* TODO(burdon): Consistent height for controls (e.g., Select, Textbox, and Checkbox are all different). */}\n <Input.Label classNames='flex min-h-[40px] items-center'>{label}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation classNames='mbs-0.5'>\n <Input.Description>{description}</Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n\n <div role='none'>\n <div role='none' className='flex min-h-[40px] items-center'>\n {children}\n </div>\n </div>\n </Input.Root>\n </div>\n );\n\n if (secondary) {\n // console.log(secondary);\n return (\n <div role='none' className='flex flex-col w-full'>\n {primary}\n {secondary}\n </div>\n );\n }\n\n return primary;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SETTINGS_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SETTINGS_PLUGIN]: {\n 'open settings label': 'Show settings',\n 'settings dialog title': 'Settings',\n 'back label': 'Back',\n 'click to return to tablist description': 'Click the title to return to the settings menu',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SettingsPlugin } from './SettingsPlugin';\n\nexport default SettingsPlugin;\n\nexport * from './SettingsPlugin';\n\n// TODO(wittjosiah): Remove.\n// Settings should be exposed from plugins as state and intents rather than components.\nexport * from './components';\n"],
5
5
  "mappings": "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",
6
6
  "names": ["import_react", "import_app_framework", "import_react_ui", "SettingsDialog", "selected", "onSelected", "t", "useTranslation", "SETTINGS_PLUGIN", "plugins", "enabled", "usePlugins", "core", "corePlugins", "map", "id", "find", "plugin", "meta", "filter", "nonNullable", "filteredPlugins", "includes", "provides", "settings", "sort", "name", "a", "b", "localeCompare", "tabsActivePart", "setTabsActivePart", "useState", "React", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "onClick", "aria-description", "svg", "mx", "getSize", "use", "href", "span", "Close", "asChild", "Button", "density", "variant", "autoFocus", "Tabs", "Root", "orientation", "value", "onValueChange", "nextSelected", "activePart", "onActivePartChange", "Viewport", "Tablist", "PluginList", "title", "length", "gap", "Tabpanel", "key", "Surface", "data", "TabGroupHeading", "Tab", "SettingsValue", "label", "description", "secondary", "children", "primary", "Input", "Label", "DescriptionAndValidation", "Description", "DEFAULT_PLUGIN", "SettingsPlugin", "LocalStorageStore", "ready", "prop", "type", "string", "surface", "component", "values", "intent", "resolver", "action", "SettingsAction", "OPEN", "intents", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "graph", "builder", "intentPlugin", "resolvePlugin", "parseIntentPlugin", "createExtension", "node", "actions", "dispatch", "properties", "ns", "icon", "props", "Gear", "iconSymbol", "keyBinding", "macos", "windows", "translations"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/plugin-settings/src/meta.ts":{"bytes":778,"imports":[],"format":"esm"},"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx":{"bytes":15578,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tabs","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-settings/src/components/SettingsValue.tsx":{"bytes":4471,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-settings/src/components/index.ts":{"bytes":634,"imports":[{"path":"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx","kind":"import-statement","original":"./SettingsDialog"},{"path":"packages/plugins/plugin-settings/src/components/SettingsValue.tsx","kind":"import-statement","original":"./SettingsValue"}],"format":"esm"},"packages/plugins/plugin-settings/src/translations.ts":{"bytes":1571,"imports":[{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-settings/src/SettingsPlugin.tsx":{"bytes":12747,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-settings/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-settings/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-settings/src/index.ts":{"bytes":1216,"imports":[{"path":"packages/plugins/plugin-settings/src/SettingsPlugin.tsx","kind":"import-statement","original":"./SettingsPlugin"},{"path":"packages/plugins/plugin-settings/src/SettingsPlugin.tsx","kind":"import-statement","original":"./SettingsPlugin"},{"path":"packages/plugins/plugin-settings/src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-settings/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17139},"packages/plugins/plugin-settings/dist/lib/node/index.cjs":{"imports":[{"path":"packages/plugins/plugin-settings/dist/lib/node/chunk-LZVHLML4.cjs","kind":"import-statement"},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tabs","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"exports":["SettingsDialog","SettingsPlugin","SettingsValue","default"],"entryPoint":"packages/plugins/plugin-settings/src/index.ts","inputs":{"packages/plugins/plugin-settings/src/SettingsPlugin.tsx":{"bytesInOutput":2968},"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx":{"bytesInOutput":4408},"packages/plugins/plugin-settings/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-settings/src/components/SettingsValue.tsx":{"bytesInOutput":1125},"packages/plugins/plugin-settings/src/translations.ts":{"bytesInOutput":318},"packages/plugins/plugin-settings/src/index.ts":{"bytesInOutput":34}},"bytes":9420},"packages/plugins/plugin-settings/dist/lib/node/meta.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-settings/dist/lib/node/meta.cjs":{"imports":[{"path":"packages/plugins/plugin-settings/dist/lib/node/chunk-LZVHLML4.cjs","kind":"import-statement"}],"exports":["SETTINGS_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-settings/src/meta.ts","inputs":{},"bytes":165},"packages/plugins/plugin-settings/dist/lib/node/chunk-LZVHLML4.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":338},"packages/plugins/plugin-settings/dist/lib/node/chunk-LZVHLML4.cjs":{"imports":[],"exports":["SETTINGS_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-settings/src/meta.ts":{"bytesInOutput":96}},"bytes":235}}}
1
+ {"inputs":{"packages/plugins/plugin-settings/src/meta.ts":{"bytes":778,"imports":[],"format":"esm"},"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx":{"bytes":15571,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tabs","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-settings/src/components/SettingsValue.tsx":{"bytes":4471,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-settings/src/components/index.ts":{"bytes":634,"imports":[{"path":"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx","kind":"import-statement","original":"./SettingsDialog"},{"path":"packages/plugins/plugin-settings/src/components/SettingsValue.tsx","kind":"import-statement","original":"./SettingsValue"}],"format":"esm"},"packages/plugins/plugin-settings/src/translations.ts":{"bytes":1571,"imports":[{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-settings/src/SettingsPlugin.tsx":{"bytes":12747,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-settings/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-settings/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-settings/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-settings/src/index.ts":{"bytes":1216,"imports":[{"path":"packages/plugins/plugin-settings/src/SettingsPlugin.tsx","kind":"import-statement","original":"./SettingsPlugin"},{"path":"packages/plugins/plugin-settings/src/SettingsPlugin.tsx","kind":"import-statement","original":"./SettingsPlugin"},{"path":"packages/plugins/plugin-settings/src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-settings/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17136},"packages/plugins/plugin-settings/dist/lib/node/index.cjs":{"imports":[{"path":"packages/plugins/plugin-settings/dist/lib/node/chunk-LZVHLML4.cjs","kind":"import-statement"},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tabs","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"exports":["SettingsDialog","SettingsPlugin","SettingsValue","default"],"entryPoint":"packages/plugins/plugin-settings/src/index.ts","inputs":{"packages/plugins/plugin-settings/src/SettingsPlugin.tsx":{"bytesInOutput":2968},"packages/plugins/plugin-settings/src/components/SettingsDialog.tsx":{"bytesInOutput":4405},"packages/plugins/plugin-settings/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-settings/src/components/SettingsValue.tsx":{"bytesInOutput":1125},"packages/plugins/plugin-settings/src/translations.ts":{"bytesInOutput":318},"packages/plugins/plugin-settings/src/index.ts":{"bytesInOutput":34}},"bytes":9417},"packages/plugins/plugin-settings/dist/lib/node/meta.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-settings/dist/lib/node/meta.cjs":{"imports":[{"path":"packages/plugins/plugin-settings/dist/lib/node/chunk-LZVHLML4.cjs","kind":"import-statement"}],"exports":["SETTINGS_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-settings/src/meta.ts","inputs":{},"bytes":165},"packages/plugins/plugin-settings/dist/lib/node/chunk-LZVHLML4.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":338},"packages/plugins/plugin-settings/dist/lib/node/chunk-LZVHLML4.cjs":{"imports":[],"exports":["SETTINGS_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-settings/src/meta.ts":{"bytesInOutput":96}},"bytes":235}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-settings",
3
- "version": "0.6.9",
3
+ "version": "0.6.10-main.48c066e",
4
4
  "description": "DXOS app plugin for aggregating and rendering plugin settings.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -35,26 +35,26 @@
35
35
  "src"
36
36
  ],
37
37
  "dependencies": {
38
- "@dxos/app-framework": "0.6.9",
39
- "@dxos/plugin-graph": "0.6.9",
40
- "@dxos/local-storage": "0.6.9",
41
- "@dxos/react-ui-tabs": "0.6.9",
42
- "@dxos/util": "0.6.9"
38
+ "@dxos/app-framework": "0.6.10-main.48c066e",
39
+ "@dxos/local-storage": "0.6.10-main.48c066e",
40
+ "@dxos/react-ui-tabs": "0.6.10-main.48c066e",
41
+ "@dxos/plugin-graph": "0.6.10-main.48c066e",
42
+ "@dxos/util": "0.6.10-main.48c066e"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@phosphor-icons/react": "^2.1.5",
46
46
  "@types/react": "~18.2.0",
47
47
  "react": "~18.2.0",
48
48
  "vite": "^5.3.4",
49
- "@dxos/react-ui-theme": "0.6.9",
50
- "@dxos/react-ui": "0.6.9",
51
- "@dxos/storybook-utils": "0.6.9"
49
+ "@dxos/storybook-utils": "0.6.10-main.48c066e",
50
+ "@dxos/react-ui": "0.6.10-main.48c066e",
51
+ "@dxos/react-ui-theme": "0.6.10-main.48c066e"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "@phosphor-icons/react": "^2.1.5",
55
55
  "react": "~18.2.0",
56
- "@dxos/react-ui": "0.6.9",
57
- "@dxos/react-ui-theme": "0.6.9"
56
+ "@dxos/react-ui": "0.6.10-main.48c066e",
57
+ "@dxos/react-ui-theme": "0.6.10-main.48c066e"
58
58
  },
59
59
  "publishConfig": {
60
60
  "access": "public"
@@ -83,7 +83,7 @@ export const SettingsDialog = ({
83
83
  classNames='flex flex-col flex-1 mbs-2'
84
84
  >
85
85
  <Tabs.Viewport classNames='flex-1 min-bs-0'>
86
- <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r separator-separator'>
86
+ <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator'>
87
87
  <Tabs.Tablist classNames='max-bs-none overflow-y-visible'>
88
88
  <PluginList title='Options' plugins={corePlugins} />
89
89
  {filteredPlugins.length > 0 && <PluginList title='Plugins' plugins={filteredPlugins} gap />}