@dxos/plugin-simple-layout 0.9.1-main.c7dcc2e112 → 0.10.0

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 (45) hide show
  1. package/dist/lib/neutral/capabilities/index.mjs +1 -1
  2. package/dist/lib/neutral/components/index.mjs +9 -8
  3. package/dist/lib/neutral/components/index.mjs.map +3 -3
  4. package/dist/lib/neutral/hooks/index.mjs +4 -4
  5. package/dist/lib/neutral/hooks/index.mjs.map +3 -3
  6. package/dist/lib/neutral/meta.json +1 -1
  7. package/dist/lib/neutral/{react-surface-GV3O3I25.mjs → react-surface-UBGUUGUS.mjs} +3 -2
  8. package/dist/lib/neutral/react-surface-UBGUUGUS.mjs.map +7 -0
  9. package/dist/lib/neutral/translations.mjs +0 -1
  10. package/dist/lib/neutral/translations.mjs.map +2 -2
  11. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -2
  12. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  13. package/dist/types/src/capabilities/react-root.d.ts +1 -5
  14. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  15. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  16. package/dist/types/src/capabilities/spotlight-dismiss.d.ts +1 -1
  17. package/dist/types/src/capabilities/state.d.ts +1 -11
  18. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  19. package/dist/types/src/capabilities/url-handler.d.ts +1 -1
  20. package/dist/types/src/components/ContentError.stories.d.ts +0 -1
  21. package/dist/types/src/components/ContentError.stories.d.ts.map +1 -1
  22. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts +1 -1
  23. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts.map +1 -1
  24. package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts +3 -4
  25. package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts.map +1 -1
  26. package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts +0 -1
  27. package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts +0 -1
  29. package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts.map +1 -1
  30. package/dist/types/src/meta.d.ts +4 -0
  31. package/dist/types/src/meta.d.ts.map +1 -1
  32. package/dist/types/src/translations.d.ts +0 -1
  33. package/dist/types/src/translations.d.ts.map +1 -1
  34. package/dist/types/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +35 -35
  36. package/src/capabilities/react-surface.tsx +2 -1
  37. package/src/components/Home/Home.tsx +2 -2
  38. package/src/components/MobileLayout/MobileLayout.stories.tsx +12 -12
  39. package/src/components/MobileLayout/MobileLayout.tsx +1 -1
  40. package/src/components/SimpleLayout/AppBar.stories.tsx +3 -3
  41. package/src/components/SimpleLayout/SimpleLayout.tsx +6 -6
  42. package/src/hooks/actions.ts +2 -2
  43. package/src/hooks/useCompanions.ts +2 -2
  44. package/src/translations.ts +0 -1
  45. package/dist/lib/neutral/react-surface-GV3O3I25.mjs.map +0 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-simple-layout",
3
- "version": "0.9.1-main.c7dcc2e112",
3
+ "version": "0.10.0",
4
4
  "description": "Simple layout plugin for minimal UI contexts like popover windows.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -81,46 +81,46 @@
81
81
  "@effect-atom/atom-react": "^0.5.0",
82
82
  "@radix-ui/react-context": "1.1.1",
83
83
  "@tauri-apps/plugin-deep-link": "^2.4.9",
84
- "@dxos/async": "0.9.1-main.c7dcc2e112",
85
- "@dxos/app-framework": "0.9.1-main.c7dcc2e112",
86
- "@dxos/app-toolkit": "0.9.1-main.c7dcc2e112",
87
- "@dxos/context": "0.9.1-main.c7dcc2e112",
88
- "@dxos/compute": "0.9.1-main.c7dcc2e112",
89
- "@dxos/echo": "0.9.1-main.c7dcc2e112",
90
- "@dxos/effect": "0.9.1-main.c7dcc2e112",
91
- "@dxos/log": "0.9.1-main.c7dcc2e112",
92
- "@dxos/keys": "0.9.1-main.c7dcc2e112",
93
- "@dxos/plugin-graph": "0.9.1-main.c7dcc2e112",
94
- "@dxos/react-ui-menu": "0.9.1-main.c7dcc2e112",
95
- "@dxos/react-ui-attention": "0.9.1-main.c7dcc2e112",
96
- "@dxos/plugin-client": "0.9.1-main.c7dcc2e112",
97
- "@dxos/react-ui-mosaic": "0.9.1-main.c7dcc2e112",
98
- "@dxos/react-ui-search": "0.9.1-main.c7dcc2e112",
99
- "@dxos/util": "0.9.1-main.c7dcc2e112"
84
+ "@dxos/app-framework": "0.10.0",
85
+ "@dxos/async": "0.10.0",
86
+ "@dxos/app-toolkit": "0.10.0",
87
+ "@dxos/echo": "0.10.0",
88
+ "@dxos/effect": "0.10.0",
89
+ "@dxos/keys": "0.10.0",
90
+ "@dxos/log": "0.10.0",
91
+ "@dxos/plugin-graph": "0.10.0",
92
+ "@dxos/plugin-client": "0.10.0",
93
+ "@dxos/react-ui-attention": "0.10.0",
94
+ "@dxos/react-ui-menu": "0.10.0",
95
+ "@dxos/react-ui-mosaic": "0.10.0",
96
+ "@dxos/react-ui-search": "0.10.0",
97
+ "@dxos/util": "0.10.0",
98
+ "@dxos/context": "0.10.0",
99
+ "@dxos/compute": "0.10.0"
100
100
  },
101
101
  "devDependencies": {
102
- "@types/react": "~19.2.7",
102
+ "@types/react": "~19.2.17",
103
103
  "@types/react-dom": "~19.2.3",
104
- "effect": "3.21.3",
105
- "react": "~19.2.3",
106
- "react-dom": "~19.2.3",
104
+ "effect": "3.21.4",
105
+ "react": "~19.2.7",
106
+ "react-dom": "~19.2.7",
107
107
  "vite": "^8.0.16",
108
- "@dxos/app-graph": "0.9.1-main.c7dcc2e112",
109
- "@dxos/plugin-preview": "0.9.1-main.c7dcc2e112",
110
- "@dxos/plugin-search": "0.9.1-main.c7dcc2e112",
111
- "@dxos/plugin-space": "0.9.1-main.c7dcc2e112",
112
- "@dxos/react-ui": "0.9.1-main.c7dcc2e112",
113
- "@dxos/plugin-testing": "0.9.1-main.c7dcc2e112",
114
- "@dxos/schema": "0.9.1-main.c7dcc2e112",
115
- "@dxos/storybook-utils": "0.9.1-main.c7dcc2e112",
116
- "@dxos/ui-theme": "0.9.1-main.c7dcc2e112"
108
+ "@dxos/app-graph": "0.10.0",
109
+ "@dxos/plugin-preview": "0.10.0",
110
+ "@dxos/plugin-search": "0.10.0",
111
+ "@dxos/plugin-space": "0.10.0",
112
+ "@dxos/plugin-testing": "0.10.0",
113
+ "@dxos/react-ui": "0.10.0",
114
+ "@dxos/schema": "0.10.0",
115
+ "@dxos/storybook-utils": "0.10.0",
116
+ "@dxos/ui-theme": "0.10.0"
117
117
  },
118
118
  "peerDependencies": {
119
- "effect": "3.21.3",
120
- "react": "~19.2.3",
121
- "react-dom": "~19.2.3",
122
- "@dxos/ui-theme": "0.9.1-main.c7dcc2e112",
123
- "@dxos/react-ui": "0.9.1-main.c7dcc2e112"
119
+ "effect": "3.21.4",
120
+ "react": "~19.2.7",
121
+ "react-dom": "~19.2.7",
122
+ "@dxos/react-ui": "0.10.0",
123
+ "@dxos/ui-theme": "0.10.0"
124
124
  },
125
125
  "publishConfig": {
126
126
  "access": "public"
@@ -10,6 +10,7 @@ import { Surface } from '@dxos/app-framework/ui';
10
10
  import { NotFound } from '@dxos/app-toolkit';
11
11
  import { AppSurface, NotFoundArticle } from '@dxos/app-toolkit/ui';
12
12
  import { Node } from '@dxos/plugin-graph';
13
+ import { Position } from '@dxos/util';
13
14
 
14
15
  import { Home, NavBranch } from '#components';
15
16
 
@@ -30,7 +31,7 @@ export default Capability.makeModule(() =>
30
31
  }),
31
32
  Surface.create({
32
33
  id: 'navBranch',
33
- position: 'last',
34
+ position: Position.last,
34
35
  filter: Surface.makeFilter(
35
36
  AppSurface.Article,
36
37
  (data) => ALLOWED_DISPOSITIONS.includes(data.properties?.disposition) || data.properties?.role === 'branch',
@@ -13,7 +13,7 @@ import { Card } from '@dxos/react-ui';
13
13
  import { Mosaic, type MosaicStackTileComponent } from '@dxos/react-ui-mosaic';
14
14
  import { SearchPanel, useSearchListItem, useSearchListResults } from '@dxos/react-ui-search';
15
15
  import { mx } from '@dxos/ui-theme';
16
- import { byPosition, getHostPlatform, isTauri } from '@dxos/util';
16
+ import { Position, getHostPlatform, isTauri } from '@dxos/util';
17
17
 
18
18
  import { meta } from '#meta';
19
19
 
@@ -133,6 +133,6 @@ const useItemsByDisposition = (disposition: string, sort = false) => {
133
133
  const connections = useConnections(graph, Node.RootId, 'child');
134
134
  return useMemo(() => {
135
135
  const filtered = connections.filter((node) => filterItems(node, disposition));
136
- return sort ? filtered.toSorted((a, b) => byPosition(a.properties, b.properties)) : filtered;
136
+ return sort ? filtered.toSorted((a, b) => Position.compare(a.properties, b.properties)) : filtered;
137
137
  }, [connections, disposition, sort]);
138
138
  };
@@ -65,7 +65,7 @@ const StoryPanel = ({ children, label }: PropsWithChildren<{ label: string }>) =
65
65
  </Toolbar.Root>
66
66
  </Panel.Toolbar>
67
67
  <Panel.Content asChild>
68
- <Column.Root gutter='xs' classNames='py-form-chrome'>
68
+ <Column.Root gutter='sm' classNames='py-form-chrome'>
69
69
  <Column.Center>
70
70
  <Flex column>
71
71
  <Input.Root>
@@ -80,33 +80,33 @@ const StoryPanel = ({ children, label }: PropsWithChildren<{ label: string }>) =
80
80
  };
81
81
 
82
82
  const DefaultStory = () => {
83
- const [splitterMode, setSplitterMode] = useState<SplitterMode>('top');
83
+ const [splitterMode, setSplitterMode] = useState<SplitterMode>('start');
84
84
  const [keyboardOpen, setKeyboardOpen] = useState(false);
85
85
 
86
86
  useEffect(() => {
87
- setSplitterMode(splitterMode === 'split' ? 'bottom' : splitterMode);
87
+ setSplitterMode((current) => (current === 'split' ? 'end' : current));
88
88
  }, [keyboardOpen]);
89
89
 
90
90
  return (
91
91
  <WithKeyboard>
92
92
  <MobileLayout.Root onKeyboardOpenChange={setKeyboardOpen}>
93
- <MobileLayout.Panel safe={{ top: true, bottom: splitterMode === 'top' }}>
94
- <Splitter.Root mode={splitterMode} ratio={0.5}>
95
- <Splitter.Panel position='top'>
93
+ <MobileLayout.Panel safe={{ top: true, bottom: splitterMode === 'start' }}>
94
+ <Splitter.Root orientation='vertical' mode={splitterMode} size={24}>
95
+ <Splitter.Panel position='start'>
96
96
  <StoryPanel label='Main'>
97
- {splitterMode === 'top' && (
97
+ {splitterMode === 'start' && (
98
98
  <Toolbar.IconButton icon='ph--plus--regular' label='Open' onClick={() => setSplitterMode('split')} />
99
99
  )}
100
100
  </StoryPanel>
101
101
  </Splitter.Panel>
102
- <Splitter.Panel position='bottom'>
102
+ <Splitter.Panel position='end'>
103
103
  <StoryPanel label='Drawer'>
104
104
  <Toolbar.IconButton
105
- icon={splitterMode === 'bottom' ? 'ph--arrow-down--regular' : 'ph--arrow-up--regular'}
106
- label={splitterMode === 'bottom' ? 'Collapse' : 'Expand'}
107
- onClick={() => setSplitterMode((splitterMode) => (splitterMode === 'split' ? 'bottom' : 'split'))}
105
+ icon={splitterMode === 'end' ? 'ph--arrow-down--regular' : 'ph--arrow-up--regular'}
106
+ label={splitterMode === 'end' ? 'Collapse' : 'Expand'}
107
+ onClick={() => setSplitterMode((splitterMode) => (splitterMode === 'split' ? 'end' : 'split'))}
108
108
  />
109
- <Toolbar.IconButton icon='ph--x--regular' label='Close' onClick={() => setSplitterMode('top')} />
109
+ <Toolbar.IconButton icon='ph--x--regular' label='Close' onClick={() => setSplitterMode('start')} />
110
110
  </StoryPanel>
111
111
  </Splitter.Panel>
112
112
  </Splitter.Root>
@@ -120,7 +120,7 @@ export const MobileLayout = {
120
120
 
121
121
  export { useMobileLayout };
122
122
 
123
- export type { MobileLayoutRootProps, MobileLayoutPanelProps };
123
+ export type { MobileLayoutPanelProps, MobileLayoutRootProps };
124
124
 
125
125
  /**
126
126
  * Prevents iOS (WKWebView) from shifting the layout when the keyboard appears.
@@ -39,11 +39,11 @@ const buildDefaultActions = (): ActionGraphProps => {
39
39
  return result;
40
40
  };
41
41
 
42
- type DefaultStoryProps = Omit<AppBarProps, 'actions'> & {
42
+ type StoryArgs = Omit<AppBarProps, 'actions'> & {
43
43
  actions: ActionGraphProps;
44
44
  };
45
45
 
46
- const DefaultStory = ({ actions: actionsProp, ...props }: DefaultStoryProps) => {
46
+ const DefaultStory = ({ actions: actionsProp, ...props }: StoryArgs) => {
47
47
  const actions = useMemo(() => Atom.make(actionsProp).pipe(Atom.keepAlive), [actionsProp]);
48
48
  return (
49
49
  <MobileLayout.Root>
@@ -71,7 +71,7 @@ const meta = {
71
71
 
72
72
  export default meta;
73
73
 
74
- type Story = StoryObj<DefaultStoryProps>;
74
+ type Story = StoryObj<StoryArgs>;
75
75
 
76
76
  export const Default: Story = {
77
77
  tags: ['test'],
@@ -19,14 +19,14 @@ import { Main } from './Main';
19
19
  export const SimpleLayout = () => {
20
20
  const { state } = useSimpleLayoutState();
21
21
  const [keyboardOpen, setKeyboardOpen] = useState(false);
22
- const [splitterMode, setSplitterMode] = useState<SplitterMode>('top');
22
+ const [splitterMode, setSplitterMode] = useState<SplitterMode>('start');
23
23
 
24
24
  const drawerRef = useRef<HTMLDivElement>(null);
25
25
 
26
26
  // Restore Splitter mode when keyboard closes.
27
27
  useLayoutEffect(() => {
28
28
  if (!keyboardOpen) {
29
- setSplitterMode(state.drawerState === 'closed' ? 'top' : state.drawerState === 'open' ? 'split' : 'bottom');
29
+ setSplitterMode(state.drawerState === 'closed' ? 'start' : state.drawerState === 'open' ? 'split' : 'end');
30
30
  }
31
31
  }, [state.drawerState, keyboardOpen]);
32
32
 
@@ -38,12 +38,12 @@ export const SimpleLayout = () => {
38
38
  classNames='dx-container grid relative bg-toolbar-surface'
39
39
  onKeyboardOpenChange={(nextKeyboardOpen) => setKeyboardOpen(nextKeyboardOpen)}
40
40
  >
41
- <MobileLayout.Panel safe={{ top: true, bottom: splitterMode === 'top' }}>
42
- <Splitter.Root mode={splitterMode} ratio={0.55}>
43
- <Splitter.Panel position='top'>
41
+ <MobileLayout.Panel safe={{ top: true, bottom: splitterMode === 'start' }}>
42
+ <Splitter.Root orientation='vertical' mode={splitterMode} size={24}>
43
+ <Splitter.Panel position='start'>
44
44
  <Main />
45
45
  </Splitter.Panel>
46
- <Splitter.Panel position='bottom' ref={drawerRef}>
46
+ <Splitter.Panel position='end' ref={drawerRef}>
47
47
  <Drawer />
48
48
  </Splitter.Panel>
49
49
  </Splitter.Root>
@@ -9,7 +9,7 @@ import { type AppCapabilities } from '@dxos/app-toolkit';
9
9
  import { Node } from '@dxos/plugin-graph';
10
10
  import { getLinkedVariant } from '@dxos/react-ui-attention';
11
11
  import { type ActionGraphProps } from '@dxos/react-ui-menu';
12
- import { byPosition } from '@dxos/util';
12
+ import { Position } from '@dxos/util';
13
13
 
14
14
  import { SimpleLayoutCapabilities } from '#types';
15
15
 
@@ -48,7 +48,7 @@ export const createCompanionActions = (
48
48
  const activeConnections = activeId ? get(graph.connections(activeId, 'child')) : [];
49
49
  const companions = activeConnections
50
50
  .filter((node: Node.Node) => node.type === PLANK_COMPANION_TYPE)
51
- .toSorted((a: Node.Node, b: Node.Node) => byPosition(a.properties, b.properties));
51
+ .toSorted((a: Node.Node, b: Node.Node) => Position.compare(a.properties, b.properties));
52
52
 
53
53
  const nodes: ActionGraphProps['nodes'] = [];
54
54
  const edges: ActionGraphProps['edges'] = [];
@@ -6,7 +6,7 @@ import { useMemo } from 'react';
6
6
 
7
7
  import { useAppGraph } from '@dxos/app-toolkit/ui';
8
8
  import { useConnections } from '@dxos/plugin-graph';
9
- import { byPosition } from '@dxos/util';
9
+ import { Position } from '@dxos/util';
10
10
 
11
11
  import { PLANK_COMPANION_TYPE } from './actions';
12
12
 
@@ -18,5 +18,5 @@ export const useCompanions = (nodeId?: string) => {
18
18
  const { graph } = useAppGraph();
19
19
  const nodes = useConnections(graph, nodeId, 'child');
20
20
  const companions = nodes.filter((node) => node.type === PLANK_COMPANION_TYPE);
21
- return useMemo(() => companions.toSorted((a, b) => byPosition(a.properties, b.properties)), [companions]);
21
+ return useMemo(() => companions.toSorted((a, b) => Position.compare(a.properties, b.properties)), [companions]);
22
22
  };
@@ -13,7 +13,6 @@ export const translations = [
13
13
  'en-US': {
14
14
  [meta.profile.key]: {
15
15
  'plugin.name': 'Simple layout',
16
- 'settings.title': 'Simple layout settings',
17
16
  'workspaces.heading': 'Workspaces',
18
17
  'settings.heading': 'Settings',
19
18
  'back.label': 'Back',
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { NotFound } from '@dxos/app-toolkit';\nimport { AppSurface, NotFoundArticle } from '@dxos/app-toolkit/ui';\nimport { Node } from '@dxos/plugin-graph';\n\nimport { Home, NavBranch } from '#components';\n\nconst ALLOWED_DISPOSITIONS = ['workspace', 'user-account', 'pin-end'];\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: 'home',\n filter: Surface.makeFilter(AppSurface.Article, (data) => data.attendableId === Node.RootId),\n component: () => <Home />,\n }),\n Surface.create({\n id: 'notFound',\n filter: Surface.makeFilter(AppSurface.Article, (data) => data.attendableId === NotFound.NOT_FOUND_PATH),\n component: () => <NotFoundArticle />,\n }),\n Surface.create({\n id: 'navBranch',\n position: 'last',\n filter: Surface.makeFilter(\n AppSurface.Article,\n (data) => ALLOWED_DISPOSITIONS.includes(data.properties?.disposition) || data.properties?.role === 'branch',\n ),\n component: ({ data }) => <NavBranch id={data.attendableId} />,\n }),\n ]),\n ),\n);\n"],
5
- "mappings": ";;;AAIA,YAAYA,YAAY;AACxB,OAAOC,WAAW;AAElB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,eAAe;AACxB,SAASC,gBAAgB;AACzB,SAASC,YAAYC,uBAAuB;AAC5C,SAASC,YAAY;AAErB,SAASC,MAAMC,iBAAiB;AAEhC,IAAMC,uBAAuB;EAAC;EAAa;EAAgB;;AAE3D,IAAA,wBAAeR,WAAWS,WAAW,MAC5BC,eACLV,WAAWW,YAAYZ,aAAaa,cAAc;EAChDX,QAAQY,OAAO;IACbC,IAAI;IACJC,QAAQd,QAAQe,WAAWb,WAAWc,SAAS,CAACC,SAASA,KAAKC,iBAAiBd,KAAKe,MAAM;IAC1FC,WAAW,MAAM,sBAAA,cAACf,MAAAA,IAAAA;EACpB,CAAA;EACAL,QAAQY,OAAO;IACbC,IAAI;IACJC,QAAQd,QAAQe,WAAWb,WAAWc,SAAS,CAACC,SAASA,KAAKC,iBAAiBjB,SAASoB,cAAc;IACtGD,WAAW,MAAM,sBAAA,cAACjB,iBAAAA,IAAAA;EACpB,CAAA;EACAH,QAAQY,OAAO;IACbC,IAAI;IACJS,UAAU;IACVR,QAAQd,QAAQe,WACdb,WAAWc,SACX,CAACC,SAASV,qBAAqBgB,SAASN,KAAKO,YAAYC,WAAAA,KAAgBR,KAAKO,YAAYE,SAAS,QAAA;IAErGN,WAAW,CAAC,EAAEH,KAAI,MAAO,sBAAA,cAACX,WAAAA;MAAUO,IAAII,KAAKC;;EAC/C,CAAA;CACD,CAAA,CAAA;",
6
- "names": ["Effect", "React", "Capabilities", "Capability", "Surface", "NotFound", "AppSurface", "NotFoundArticle", "Node", "Home", "NavBranch", "ALLOWED_DISPOSITIONS", "makeModule", "succeed", "contributes", "ReactSurface", "create", "id", "filter", "makeFilter", "Article", "data", "attendableId", "RootId", "component", "NOT_FOUND_PATH", "position", "includes", "properties", "disposition", "role"]
7
- }