@dxos/plugin-stack 0.8.4-main.84f28bd → 0.8.4-main.8baae0fced

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 (123) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/StackArticle-3FE52PUH.mjs +126 -0
  4. package/dist/lib/neutral/StackArticle-3FE52PUH.mjs.map +7 -0
  5. package/dist/lib/neutral/StackPlugin.mjs +22 -0
  6. package/dist/lib/neutral/StackPlugin.mjs.map +7 -0
  7. package/dist/lib/neutral/capabilities/index.mjs +7 -0
  8. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  9. package/dist/lib/{browser/chunk-VDSBIEAC.mjs → neutral/chunk-IPU3C6TT.mjs} +10 -11
  10. package/dist/lib/neutral/chunk-IPU3C6TT.mjs.map +7 -0
  11. package/dist/lib/{node-esm/chunk-UN5PA7TK.mjs → neutral/chunk-LAZU5N5N.mjs} +9 -8
  12. package/dist/lib/neutral/chunk-LAZU5N5N.mjs.map +7 -0
  13. package/dist/lib/neutral/components/index.mjs +182 -0
  14. package/dist/lib/neutral/components/index.mjs.map +7 -0
  15. package/dist/lib/neutral/containers/index.mjs +7 -0
  16. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  17. package/dist/lib/neutral/index.mjs +15 -0
  18. package/dist/lib/neutral/meta.json +1 -0
  19. package/dist/lib/neutral/meta.mjs +9 -0
  20. package/dist/lib/neutral/plugin.mjs +11 -0
  21. package/dist/lib/neutral/plugin.mjs.map +7 -0
  22. package/dist/lib/neutral/react-surface-MD3CVY2N.mjs +23 -0
  23. package/dist/lib/neutral/react-surface-MD3CVY2N.mjs.map +7 -0
  24. package/dist/lib/neutral/translations.mjs +37 -0
  25. package/dist/lib/neutral/translations.mjs.map +7 -0
  26. package/dist/lib/{browser → neutral}/types/index.mjs +1 -1
  27. package/dist/lib/neutral/types/index.mjs.map +7 -0
  28. package/dist/types/src/StackPlugin.d.ts +3 -1
  29. package/dist/types/src/StackPlugin.d.ts.map +1 -1
  30. package/dist/types/src/capabilities/index.d.ts +2 -1
  31. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  32. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  33. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  34. package/dist/types/src/components/{StackContext.d.ts → StackContext/StackContext.d.ts} +2 -1
  35. package/dist/types/src/components/StackContext/StackContext.d.ts.map +1 -0
  36. package/dist/types/src/components/StackContext/index.d.ts +2 -0
  37. package/dist/types/src/components/StackContext/index.d.ts.map +1 -0
  38. package/dist/types/src/components/{CaretDownUp.d.ts → StackSection/CaretDownUp.d.ts} +1 -1
  39. package/dist/types/src/components/StackSection/CaretDownUp.d.ts.map +1 -0
  40. package/dist/types/src/components/{StackSection.d.ts → StackSection/StackSection.d.ts} +1 -1
  41. package/dist/types/src/components/StackSection/StackSection.d.ts.map +1 -0
  42. package/dist/types/src/components/StackSection/index.d.ts +2 -0
  43. package/dist/types/src/components/StackSection/index.d.ts.map +1 -0
  44. package/dist/types/src/components/{StackSettings.d.ts → StackSettings/StackSettings.d.ts} +1 -1
  45. package/dist/types/src/components/StackSettings/StackSettings.d.ts.map +1 -0
  46. package/dist/types/src/components/StackSettings/index.d.ts +2 -0
  47. package/dist/types/src/components/StackSettings/index.d.ts.map +1 -0
  48. package/dist/types/src/components/index.d.ts +2 -4
  49. package/dist/types/src/components/index.d.ts.map +1 -1
  50. package/dist/types/src/containers/StackArticle/StackArticle.d.ts +7 -0
  51. package/dist/types/src/containers/StackArticle/StackArticle.d.ts.map +1 -0
  52. package/dist/types/src/containers/StackArticle/index.d.ts +2 -0
  53. package/dist/types/src/containers/StackArticle/index.d.ts.map +1 -0
  54. package/dist/types/src/containers/index.d.ts +3 -0
  55. package/dist/types/src/containers/index.d.ts.map +1 -0
  56. package/dist/types/src/index.d.ts +1 -1
  57. package/dist/types/src/index.d.ts.map +1 -1
  58. package/dist/types/src/meta.d.ts +3 -4
  59. package/dist/types/src/meta.d.ts.map +1 -1
  60. package/dist/types/src/plugin.d.ts +3 -0
  61. package/dist/types/src/plugin.d.ts.map +1 -0
  62. package/dist/types/src/translations.d.ts +31 -30
  63. package/dist/types/src/translations.d.ts.map +1 -1
  64. package/dist/types/src/types/index.d.ts +1 -1
  65. package/dist/types/src/types/index.d.ts.map +1 -1
  66. package/dist/types/src/types/stack.d.ts +13 -14
  67. package/dist/types/src/types/stack.d.ts.map +1 -1
  68. package/dist/types/src/types/types.d.ts +7 -6
  69. package/dist/types/src/types/types.d.ts.map +1 -1
  70. package/dist/types/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +93 -53
  72. package/src/StackPlugin.ts +14 -46
  73. package/src/capabilities/index.ts +2 -2
  74. package/src/capabilities/react-surface.tsx +20 -26
  75. package/src/components/{StackContext.tsx → StackContext/StackContext.tsx} +3 -1
  76. package/src/components/StackContext/index.ts +5 -0
  77. package/src/components/{StackSection.tsx → StackSection/StackSection.tsx} +30 -26
  78. package/src/components/StackSection/index.ts +5 -0
  79. package/src/components/StackSettings/StackSettings.tsx +28 -0
  80. package/src/components/StackSettings/index.ts +5 -0
  81. package/src/components/index.ts +2 -4
  82. package/src/containers/StackArticle/StackArticle.tsx +169 -0
  83. package/src/containers/StackArticle/index.ts +5 -0
  84. package/src/containers/index.ts +7 -0
  85. package/src/index.ts +1 -1
  86. package/src/meta.ts +10 -6
  87. package/src/plugin.ts +9 -0
  88. package/src/translations.ts +23 -21
  89. package/src/types/index.ts +1 -1
  90. package/src/types/stack.ts +12 -8
  91. package/src/types/types.ts +4 -6
  92. package/dist/lib/browser/StackMain-6EC3A3IC.mjs +0 -298
  93. package/dist/lib/browser/StackMain-6EC3A3IC.mjs.map +0 -7
  94. package/dist/lib/browser/chunk-FVB7LGW7.mjs +0 -19
  95. package/dist/lib/browser/chunk-FVB7LGW7.mjs.map +0 -7
  96. package/dist/lib/browser/chunk-VDSBIEAC.mjs.map +0 -7
  97. package/dist/lib/browser/index.mjs +0 -100
  98. package/dist/lib/browser/index.mjs.map +0 -7
  99. package/dist/lib/browser/meta.json +0 -1
  100. package/dist/lib/browser/react-surface-KLOW5O2E.mjs +0 -46
  101. package/dist/lib/browser/react-surface-KLOW5O2E.mjs.map +0 -7
  102. package/dist/lib/node-esm/StackMain-G55P33OY.mjs +0 -299
  103. package/dist/lib/node-esm/StackMain-G55P33OY.mjs.map +0 -7
  104. package/dist/lib/node-esm/chunk-GOXSWCA4.mjs +0 -30
  105. package/dist/lib/node-esm/chunk-GOXSWCA4.mjs.map +0 -7
  106. package/dist/lib/node-esm/chunk-UN5PA7TK.mjs.map +0 -7
  107. package/dist/lib/node-esm/index.mjs +0 -101
  108. package/dist/lib/node-esm/index.mjs.map +0 -7
  109. package/dist/lib/node-esm/meta.json +0 -1
  110. package/dist/lib/node-esm/react-surface-H33L4IMD.mjs +0 -47
  111. package/dist/lib/node-esm/react-surface-H33L4IMD.mjs.map +0 -7
  112. package/dist/lib/node-esm/types/index.mjs +0 -10
  113. package/dist/types/src/components/CaretDownUp.d.ts.map +0 -1
  114. package/dist/types/src/components/StackContext.d.ts.map +0 -1
  115. package/dist/types/src/components/StackMain.d.ts +0 -9
  116. package/dist/types/src/components/StackMain.d.ts.map +0 -1
  117. package/dist/types/src/components/StackSection.d.ts.map +0 -1
  118. package/dist/types/src/components/StackSettings.d.ts.map +0 -1
  119. package/src/components/StackMain.tsx +0 -160
  120. package/src/components/StackSettings.tsx +0 -23
  121. /package/dist/lib/{browser/types → neutral}/index.mjs.map +0 -0
  122. /package/dist/lib/{node-esm/types/index.mjs.map → neutral/meta.mjs.map} +0 -0
  123. /package/src/components/{CaretDownUp.tsx → StackSection/CaretDownUp.tsx} +0 -0
package/package.json CHANGED
@@ -1,83 +1,123 @@
1
1
  {
2
2
  "name": "@dxos/plugin-stack",
3
- "version": "0.8.4-main.84f28bd",
3
+ "version": "0.8.4-main.8baae0fced",
4
4
  "description": "DXOS Surface plugin for Stack entities",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
- "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
11
+ "license": "FSL-1.1-Apache-2.0",
8
12
  "author": "DXOS.org",
9
13
  "sideEffects": true,
10
14
  "type": "module",
15
+ "imports": {
16
+ "#capabilities": {
17
+ "source": "./src/capabilities/index.ts",
18
+ "types": "./dist/types/src/capabilities/index.d.ts",
19
+ "default": "./dist/lib/neutral/capabilities/index.mjs"
20
+ },
21
+ "#components": {
22
+ "source": "./src/components/index.ts",
23
+ "types": "./dist/types/src/components/index.d.ts",
24
+ "default": "./dist/lib/neutral/components/index.mjs"
25
+ },
26
+ "#containers": {
27
+ "source": "./src/containers/index.ts",
28
+ "types": "./dist/types/src/containers/index.d.ts",
29
+ "default": "./dist/lib/neutral/containers/index.mjs"
30
+ },
31
+ "#meta": {
32
+ "source": "./src/meta.ts",
33
+ "types": "./dist/types/src/meta.d.ts",
34
+ "default": "./dist/lib/neutral/meta.mjs"
35
+ },
36
+ "#plugin": {
37
+ "source": "./src/StackPlugin.ts",
38
+ "types": "./dist/types/src/StackPlugin.d.ts",
39
+ "default": "./dist/lib/neutral/StackPlugin.mjs"
40
+ },
41
+ "#translations": {
42
+ "source": "./src/translations.ts",
43
+ "types": "./dist/types/src/translations.d.ts",
44
+ "default": "./dist/lib/neutral/translations.mjs"
45
+ },
46
+ "#types": {
47
+ "source": "./src/types/index.ts",
48
+ "types": "./dist/types/src/types/index.d.ts",
49
+ "default": "./dist/lib/neutral/types/index.mjs"
50
+ }
51
+ },
11
52
  "exports": {
12
53
  ".": {
54
+ "source": "./src/index.ts",
13
55
  "types": "./dist/types/src/index.d.ts",
14
- "browser": "./dist/lib/browser/index.mjs",
15
- "node": "./dist/lib/node-esm/index.mjs"
56
+ "default": "./dist/lib/neutral/index.mjs"
16
57
  },
17
- "./types": {
18
- "types": "./dist/types/src/types/index.d.ts",
19
- "browser": "./dist/lib/browser/types/index.mjs",
20
- "node": "./dist/lib/node-esm/types/index.mjs"
58
+ "./plugin": {
59
+ "source": "./src/plugin.ts",
60
+ "types": "./dist/types/src/plugin.d.ts",
61
+ "default": "./dist/lib/neutral/plugin.mjs"
62
+ },
63
+ "./translations": {
64
+ "source": "./src/translations.ts",
65
+ "types": "./dist/types/src/translations.d.ts",
66
+ "default": "./dist/lib/neutral/translations.mjs"
21
67
  }
22
68
  },
23
69
  "types": "dist/types/src/index.d.ts",
24
- "typesVersions": {
25
- "*": {
26
- "types": [
27
- "dist/types/src/types/index.d.ts"
28
- ]
29
- }
30
- },
31
70
  "files": [
32
71
  "dist",
33
72
  "src"
34
73
  ],
35
74
  "dependencies": {
36
- "@fluentui/react-tabster": "^9.24.2",
37
- "@preact-signals/safe-react": "^0.9.0",
38
- "@preact/signals-core": "^1.9.0",
75
+ "@effect-atom/atom-react": "^0.5.0",
76
+ "@fluentui/react-tabster": "9.26.11",
39
77
  "@radix-ui/react-collapsible": "1.1.3",
40
- "effect": "3.16.13",
78
+ "effect": "3.20.0",
41
79
  "node-fetch": "^2.6.0",
42
- "react-is": "~18.2.0",
43
- "@dxos/app-framework": "0.8.4-main.84f28bd",
44
- "@dxos/async": "0.8.4-main.84f28bd",
45
- "@dxos/client": "0.8.4-main.84f28bd",
46
- "@dxos/echo": "0.8.4-main.84f28bd",
47
- "@dxos/echo-schema": "0.8.4-main.84f28bd",
48
- "@dxos/invariant": "0.8.4-main.84f28bd",
49
- "@dxos/local-storage": "0.8.4-main.84f28bd",
50
- "@dxos/plugin-client": "0.8.4-main.84f28bd",
51
- "@dxos/plugin-deck": "0.8.4-main.84f28bd",
52
- "@dxos/plugin-graph": "0.8.4-main.84f28bd",
53
- "@dxos/plugin-space": "0.8.4-main.84f28bd",
54
- "@dxos/react-client": "0.8.4-main.84f28bd",
55
- "@dxos/react-ui-attention": "0.8.4-main.84f28bd",
56
- "@dxos/react-ui-form": "0.8.4-main.84f28bd",
57
- "@dxos/react-ui-stack": "0.8.4-main.84f28bd",
58
- "@dxos/react-ui-searchlist": "0.8.4-main.84f28bd",
59
- "@dxos/schema": "0.8.4-main.84f28bd",
60
- "@dxos/util": "0.8.4-main.84f28bd"
80
+ "react-is": "~19.2.0",
81
+ "@dxos/app-toolkit": "0.8.4-main.8baae0fced",
82
+ "@dxos/app-framework": "0.8.4-main.8baae0fced",
83
+ "@dxos/client": "0.8.4-main.8baae0fced",
84
+ "@dxos/echo-atom": "0.8.4-main.8baae0fced",
85
+ "@dxos/async": "0.8.4-main.8baae0fced",
86
+ "@dxos/invariant": "0.8.4-main.8baae0fced",
87
+ "@dxos/operation": "0.8.4-main.8baae0fced",
88
+ "@dxos/plugin-client": "0.8.4-main.8baae0fced",
89
+ "@dxos/echo": "0.8.4-main.8baae0fced",
90
+ "@dxos/plugin-deck": "0.8.4-main.8baae0fced",
91
+ "@dxos/plugin-graph": "0.8.4-main.8baae0fced",
92
+ "@dxos/plugin-space": "0.8.4-main.8baae0fced",
93
+ "@dxos/react-client": "0.8.4-main.8baae0fced",
94
+ "@dxos/react-ui-attention": "0.8.4-main.8baae0fced",
95
+ "@dxos/react-ui-list": "0.8.4-main.8baae0fced",
96
+ "@dxos/react-ui-form": "0.8.4-main.8baae0fced",
97
+ "@dxos/react-ui-stack": "0.8.4-main.8baae0fced",
98
+ "@dxos/schema": "0.8.4-main.8baae0fced",
99
+ "@dxos/types": "0.8.4-main.8baae0fced",
100
+ "@dxos/util": "0.8.4-main.8baae0fced"
61
101
  },
62
102
  "devDependencies": {
63
103
  "@babel/core": "^7.18.13",
64
- "@phosphor-icons/react": "^2.1.5",
65
- "@types/react": "~18.2.0",
66
- "@types/react-dom": "~18.2.0",
67
- "react": "~18.2.0",
68
- "react-dom": "~18.2.0",
69
- "vite": "5.4.7",
70
- "@dxos/react-ui": "0.8.4-main.84f28bd",
71
- "@dxos/react-ui-theme": "0.8.4-main.84f28bd",
72
- "@dxos/storybook-utils": "0.8.4-main.84f28bd"
104
+ "@types/react": "~19.2.7",
105
+ "@types/react-dom": "~19.2.3",
106
+ "react": "~19.2.3",
107
+ "react-dom": "~19.2.3",
108
+ "vite": "^8.0.13",
109
+ "@dxos/plugin-testing": "0.8.4-main.8baae0fced",
110
+ "@dxos/react-ui": "0.8.4-main.8baae0fced",
111
+ "@dxos/ui-theme": "0.8.4-main.8baae0fced",
112
+ "@dxos/storybook-utils": "0.8.4-main.8baae0fced"
73
113
  },
74
114
  "peerDependencies": {
75
- "@phosphor-icons/react": "^2.1.5",
76
- "effect": "^3.13.3",
77
- "react": "~18.2.0",
78
- "react-dom": "~18.2.0",
79
- "@dxos/react-ui": "0.8.4-main.84f28bd",
80
- "@dxos/react-ui-theme": "0.8.4-main.84f28bd"
115
+ "@effect-atom/atom-react": "^0.5.0",
116
+ "effect": "3.20.0",
117
+ "react": "~19.2.3",
118
+ "react-dom": "~19.2.3",
119
+ "@dxos/react-ui": "0.8.4-main.8baae0fced",
120
+ "@dxos/ui-theme": "0.8.4-main.8baae0fced"
81
121
  },
82
122
  "publishConfig": {
83
123
  "access": "public"
@@ -2,51 +2,19 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, defineModule, definePlugin, Events } from '@dxos/app-framework';
6
- import { type Obj } from '@dxos/echo';
7
- import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { AppPlugin } from '@dxos/app-toolkit';
8
7
 
9
- import { ReactSurface } from './capabilities';
10
- import { meta, SECTION_IDENTIFIER } from './meta';
11
- import { translations } from './translations';
12
- import { StackViewType } from './types';
8
+ import { ReactSurface } from '#capabilities';
9
+ import { meta } from '#meta';
10
+ import { translations } from '#translations';
11
+ import { StackViewType } from '#types';
13
12
 
14
- export const StackPlugin = () =>
15
- definePlugin(meta, [
16
- defineModule({
17
- id: `${meta.id}/module/translations`,
18
- activatesOn: Events.SetupTranslations,
19
- activate: () => contributes(Capabilities.Translations, translations),
20
- }),
21
- defineModule({
22
- id: `${meta.id}/module/metadata`,
23
- activatesOn: Events.SetupMetadata,
24
- activate: () => [
25
- contributes(Capabilities.Metadata, {
26
- id: SECTION_IDENTIFIER,
27
- metadata: {
28
- parse: (section: { object: Obj.Any }, type: string) => {
29
- switch (type) {
30
- case 'node':
31
- return { id: section.object.id, label: (section.object as any).title, data: section.object };
32
- case 'object':
33
- return section.object;
34
- case 'view-object':
35
- return section;
36
- }
37
- },
38
- },
39
- }),
40
- ],
41
- }),
42
- defineModule({
43
- id: `${meta.id}/module/schema`,
44
- activatesOn: ClientEvents.SetupSchema,
45
- activate: () => contributes(ClientCapabilities.Schema, [StackViewType]),
46
- }),
47
- defineModule({
48
- id: `${meta.id}/module/react-surface`,
49
- activatesOn: Events.SetupReactSurface,
50
- activate: ReactSurface,
51
- }),
52
- ]);
13
+ export const StackPlugin = Plugin.define(meta).pipe(
14
+ AppPlugin.addSchemaModule({ schema: [StackViewType] }),
15
+ AppPlugin.addSurfaceModule({ activate: ReactSurface }),
16
+ AppPlugin.addTranslationsModule({ translations }),
17
+ Plugin.make,
18
+ );
19
+
20
+ export default StackPlugin;
@@ -2,6 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from '@dxos/app-framework';
5
+ import { Capability } from '@dxos/app-framework';
6
6
 
7
- export const ReactSurface = lazy(() => import('./react-surface'));
7
+ export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
@@ -2,33 +2,27 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import * as Effect from 'effect/Effect';
5
6
  import React from 'react';
6
7
 
7
- import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
8
- import { Obj } from '@dxos/echo';
9
- import { fullyQualifiedId } from '@dxos/react-client/echo';
10
- import { DataType } from '@dxos/schema';
8
+ import { Capabilities, Capability } from '@dxos/app-framework';
9
+ import { Surface } from '@dxos/app-framework/ui';
10
+ import { AppSurface } from '@dxos/app-toolkit/ui';
11
+ import { Collection } from '@dxos/echo';
11
12
 
12
- import { StackMain } from '../components';
13
- import { STACK_PLUGIN } from '../meta';
13
+ import { StackArticle } from '#containers';
14
14
 
15
- export default () =>
16
- contributes(
17
- Capabilities.ReactSurface,
18
- createSurface({
19
- id: `${STACK_PLUGIN}/article`,
20
- role: 'article',
21
- filter: (data): data is { id?: string; subject: DataType.Collection } =>
22
- Obj.instanceOf(DataType.Collection, data.subject),
23
- component: ({ data }) => {
24
- // This allows the id to be overridden by the surface for situations where the id of the collection
25
- // is not the same as the id of what is being represented (e.g., a space with a root collection).
26
- const id = typeof data.id === 'string' ? data.id : undefined;
27
- return (
28
- <div role='none' className='overflow-auto' style={{ contain: 'layout' }}>
29
- <StackMain id={id ?? fullyQualifiedId(data.subject)} collection={data.subject} />
30
- </div>
31
- );
32
- },
33
- }),
34
- );
15
+ export default Capability.makeModule(() =>
16
+ Effect.succeed(
17
+ Capability.contributes(
18
+ Capabilities.ReactSurface,
19
+ Surface.create({
20
+ id: 'article',
21
+ filter: AppSurface.object(AppSurface.Article, Collection.Collection),
22
+ component: ({ role, data }) => {
23
+ return <StackArticle attendableId={data.attendableId} role={role} subject={data.subject} />;
24
+ },
25
+ }),
26
+ ),
27
+ ),
28
+ );
@@ -4,9 +4,10 @@
4
4
 
5
5
  import { createContext, useContext } from 'react';
6
6
 
7
- import { type AddSectionPosition } from '../types';
7
+ import { type AddSectionPosition } from '#types';
8
8
 
9
9
  export type StackContextValue = {
10
+ attendableId: string;
10
11
  onCollapse: (id: string, collapsed: boolean) => void;
11
12
  onNavigate: (id: string) => Promise<void>;
12
13
  onDelete: (id: string) => Promise<void>;
@@ -14,6 +15,7 @@ export type StackContextValue = {
14
15
  };
15
16
 
16
17
  export const StackContext = createContext<StackContextValue>({
18
+ attendableId: '',
17
19
  onCollapse: () => {},
18
20
  onNavigate: async () => {},
19
21
  onDelete: async () => {},
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './StackContext';
@@ -5,18 +5,20 @@
5
5
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
6
6
  import React, { useMemo, useState } from 'react';
7
7
 
8
- import { Surface } from '@dxos/app-framework';
9
- import { DropdownMenu, Icon, useTranslation, IconButton } from '@dxos/react-ui';
8
+ import { Surface } from '@dxos/app-framework/ui';
9
+ import { AppSurface } from '@dxos/app-toolkit/ui';
10
+ import { DropdownMenu, Icon, IconButton, useTranslation } from '@dxos/react-ui';
10
11
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
11
12
  import { StackItem } from '@dxos/react-ui-stack';
12
- import { mx, getSize, textBlockWidth } from '@dxos/react-ui-theme';
13
+ import { getSize, mx } from '@dxos/ui-theme';
13
14
 
15
+ import { meta } from '#meta';
16
+ import { type StackSectionItem } from '#types';
17
+
18
+ import { useStack } from '../StackContext';
14
19
  import { CaretDownUp } from './CaretDownUp';
15
- import { useStack } from './StackContext';
16
- import { STACK_PLUGIN } from '../meta';
17
- import { type StackSectionItem } from '../types';
18
20
 
19
- const sectionActionDimensions = 'p-1 mlb-1 shrink-0 min-bs-0 is-[--rail-action] bs-min';
21
+ const sectionActionDimensions = 'p-1 my-1 shrink-0 min-h-0 w-(--dx-rail-action) h-min';
20
22
 
21
23
  export type StackSectionProps = StackSectionItem;
22
24
 
@@ -26,16 +28,18 @@ export const StackSection = ({
26
28
  object,
27
29
  metadata: { icon = 'ph--placeholder--regular' },
28
30
  }: StackSectionProps) => {
29
- const { t } = useTranslation(STACK_PLUGIN);
30
- const { onNavigate, onAdd, onCollapse, onDelete } = useStack();
31
+ const { t } = useTranslation(meta.id);
32
+ const { attendableId: parentAttendableId, onNavigate, onAdd, onCollapse, onDelete } = useStack();
31
33
  const [optionsMenuOpen, setOptionsMenuOpen] = useState(false);
32
- const attentionAttrs = useAttentionAttributes(id);
34
+ const attendableId = `${parentAttendableId}/${object.id}`;
35
+ const attentionAttrs = useAttentionAttributes(attendableId);
33
36
  const stackItem = useMemo(() => ({ id }), [id]);
37
+ const data = useMemo(() => ({ attendableId, subject: object }), [object, attendableId]);
34
38
 
35
39
  return (
36
40
  <CollapsiblePrimitive.Root asChild open={!view.collapsed} onOpenChange={(nextOpen) => onCollapse?.(id, !nextOpen)}>
37
41
  <StackItem.Root item={stackItem} role='section' {...attentionAttrs}>
38
- <StackItem.Heading classNames='attention-surface'>
42
+ <StackItem.Heading classNames='dx-attention-surface'>
39
43
  <span className='sr-only'>{view.title}</span>
40
44
  <StackItem.HeadingStickyContent>
41
45
  <DropdownMenu.Root
@@ -46,7 +50,7 @@ export const StackSection = ({
46
50
  >
47
51
  <DropdownMenu.Trigger asChild>
48
52
  <StackItem.SigilButton>
49
- <Icon icon={icon} size={5} classNames='transition-opacity' />
53
+ <Icon icon={icon} classNames='transition-opacity' />
50
54
  </StackItem.SigilButton>
51
55
  </DropdownMenu.Trigger>
52
56
  <DropdownMenu.Portal>
@@ -54,28 +58,28 @@ export const StackSection = ({
54
58
  <DropdownMenu.Viewport>
55
59
  {view.collapsed ? (
56
60
  <DropdownMenu.Item onClick={() => onNavigate(id)} data-testid='section.navigate-to'>
57
- <Icon icon='ph--arrow-right--regular' size={5} />
58
- <span className='mis-2 grow'>{t('navigate to section label')}</span>
61
+ <Icon icon='ph--arrow-right--regular' />
62
+ <span className='ms-2 grow'>{t('navigate-to-section.label')}</span>
59
63
  </DropdownMenu.Item>
60
64
  ) : (
61
65
  <CollapsiblePrimitive.Trigger asChild>
62
66
  <DropdownMenu.Item>
63
67
  <CaretDownUp className={getSize(5)} />
64
- <span className='mis-2 grow'>{t('collapse label')}</span>
68
+ <span className='ms-2 grow'>{t('collapse.label')}</span>
65
69
  </DropdownMenu.Item>
66
70
  </CollapsiblePrimitive.Trigger>
67
71
  )}
68
72
  <DropdownMenu.Item onClick={() => onAdd(id, 'before')} data-testid='section.add-before'>
69
- <Icon icon='ph--arrow-line-up--regular' size={5} />
70
- <span className='mis-2 grow'>{t('add section before label')}</span>
73
+ <Icon icon='ph--arrow-line-up--regular' />
74
+ <span className='ms-2 grow'>{t('add-section-before.label')}</span>
71
75
  </DropdownMenu.Item>
72
76
  <DropdownMenu.Item onClick={() => onAdd(id, 'after')} data-testid='section.add-after'>
73
- <Icon icon='ph--arrow-line-down--regular' size={5} />
74
- <span className='mis-2 grow'>{t('add section after label')}</span>
77
+ <Icon icon='ph--arrow-line-down--regular' />
78
+ <span className='ms-2 grow'>{t('add-section-after.label')}</span>
75
79
  </DropdownMenu.Item>
76
80
  <DropdownMenu.Item onClick={() => onDelete(id)} data-testid='section.remove'>
77
- <Icon icon='ph--trash--regular' size={5} />
78
- <span className='mis-2 grow'>{t('remove section label')}</span>
81
+ <Icon icon='ph--trash--regular' />
82
+ <span className='ms-2 grow'>{t('remove-section.label')}</span>
79
83
  </DropdownMenu.Item>
80
84
  </DropdownMenu.Viewport>
81
85
  <DropdownMenu.Arrow />
@@ -87,7 +91,7 @@ export const StackSection = ({
87
91
  <IconButton
88
92
  iconOnly
89
93
  variant='ghost'
90
- label={t('expand label')}
94
+ label={t('expand.label')}
91
95
  icon='ph--caret-up-down--regular'
92
96
  classNames={sectionActionDimensions}
93
97
  />
@@ -97,7 +101,7 @@ export const StackSection = ({
97
101
  iconOnly
98
102
  variant='ghost'
99
103
  onClick={() => onNavigate(id)}
100
- label={t('navigate to section label')}
104
+ label={t('navigate-to-section.label')}
101
105
  icon='ph--arrow-right--regular'
102
106
  data-testid='section.navigate-to'
103
107
  classNames={sectionActionDimensions}
@@ -106,11 +110,11 @@ export const StackSection = ({
106
110
  </StackItem.HeadingStickyContent>
107
111
  </StackItem.Heading>
108
112
  <CollapsiblePrimitive.Content>
109
- <Surface role='section' data={{ subject: object }} limit={1} placeholder={<></>} />
113
+ <Surface.Surface type={AppSurface.Section} data={data} limit={1} placeholder={<></>} />
110
114
  </CollapsiblePrimitive.Content>
111
115
  {view.collapsed && (
112
- <StackItem.Content classNames='attention-surface'>
113
- <h2 className={mx('flex items-center p-4 font-medium', textBlockWidth)}>{view.title}</h2>
116
+ <StackItem.Content classNames='dx-attention-surface'>
117
+ <h2 className={mx('flex items-center p-4 font-medium')}>{view.title}</h2>
114
118
  </StackItem.Content>
115
119
  )}
116
120
  </StackItem.Root>
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './StackSection';
@@ -0,0 +1,28 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Input, useTranslation } from '@dxos/react-ui';
8
+ import { Settings as SettingsForm } from '@dxos/react-ui-form';
9
+
10
+ import { meta } from '#meta';
11
+ import { type StackSettingsProps } from '#types';
12
+
13
+ export const StackSettings = ({ settings }: { settings: StackSettingsProps }) => {
14
+ const { t } = useTranslation(meta.id);
15
+
16
+ return (
17
+ <SettingsForm.Viewport>
18
+ <SettingsForm.Section title={t('settings.title', { ns: meta.id })}>
19
+ <SettingsForm.Item title={t('settings.separation.label')} description={t('settings.separation.description')}>
20
+ <Input.Switch
21
+ checked={settings.separation}
22
+ onCheckedChange={(checked) => (settings.separation = !!checked)}
23
+ />
24
+ </SettingsForm.Item>
25
+ </SettingsForm.Section>
26
+ </SettingsForm.Viewport>
27
+ );
28
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export * from './StackSettings';
@@ -2,8 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from 'react';
6
-
7
- export const StackMain = lazy(() => import('./StackMain'));
8
-
5
+ export * from './StackContext';
6
+ export * from './StackSection';
9
7
  export * from './StackSettings';