@dxos/plugin-stack 0.8.4-main.72ec0f3 → 0.8.4-main.765dc60934

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 (120) 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-UIKFKRFJ.mjs → neutral/chunk-3ISQZKGO.mjs} +3 -3
  10. package/dist/lib/neutral/chunk-3ISQZKGO.mjs.map +7 -0
  11. package/dist/lib/{browser/chunk-NHMDZYOB.mjs → neutral/chunk-IPU3C6TT.mjs} +9 -10
  12. package/dist/lib/neutral/chunk-IPU3C6TT.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 -7
  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 -3
  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 -31
  63. package/dist/types/src/translations.d.ts.map +1 -1
  64. package/dist/types/src/types/stack.d.ts +12 -13
  65. package/dist/types/src/types/stack.d.ts.map +1 -1
  66. package/dist/types/src/types/types.d.ts +2 -3
  67. package/dist/types/src/types/types.d.ts.map +1 -1
  68. package/dist/types/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +91 -51
  70. package/src/StackPlugin.ts +14 -45
  71. package/src/capabilities/index.ts +2 -2
  72. package/src/capabilities/react-surface.tsx +20 -21
  73. package/src/components/{StackContext.tsx → StackContext/StackContext.tsx} +3 -1
  74. package/src/components/StackContext/index.ts +5 -0
  75. package/src/components/{StackSection.tsx → StackSection/StackSection.tsx} +27 -24
  76. package/src/components/StackSection/index.ts +5 -0
  77. package/src/components/StackSettings/StackSettings.tsx +28 -0
  78. package/src/components/StackSettings/index.ts +5 -0
  79. package/src/components/index.ts +2 -4
  80. package/src/containers/StackArticle/StackArticle.tsx +169 -0
  81. package/src/containers/StackArticle/index.ts +5 -0
  82. package/src/containers/index.ts +7 -0
  83. package/src/index.ts +1 -1
  84. package/src/meta.ts +4 -4
  85. package/src/plugin.ts +9 -0
  86. package/src/translations.ts +23 -22
  87. package/src/types/stack.ts +11 -7
  88. package/src/types/types.ts +2 -3
  89. package/dist/lib/browser/StackContainer-DD3ZD5OE.mjs +0 -299
  90. package/dist/lib/browser/StackContainer-DD3ZD5OE.mjs.map +0 -7
  91. package/dist/lib/browser/chunk-NHMDZYOB.mjs.map +0 -7
  92. package/dist/lib/browser/chunk-UIKFKRFJ.mjs.map +0 -7
  93. package/dist/lib/browser/index.mjs +0 -99
  94. package/dist/lib/browser/index.mjs.map +0 -7
  95. package/dist/lib/browser/meta.json +0 -1
  96. package/dist/lib/browser/react-surface-HVPK7YZQ.mjs +0 -39
  97. package/dist/lib/browser/react-surface-HVPK7YZQ.mjs.map +0 -7
  98. package/dist/lib/node-esm/StackContainer-JGWPXSUF.mjs +0 -300
  99. package/dist/lib/node-esm/StackContainer-JGWPXSUF.mjs.map +0 -7
  100. package/dist/lib/node-esm/chunk-BGVQYUYP.mjs +0 -23
  101. package/dist/lib/node-esm/chunk-BGVQYUYP.mjs.map +0 -7
  102. package/dist/lib/node-esm/chunk-ZZFA7HIV.mjs +0 -30
  103. package/dist/lib/node-esm/chunk-ZZFA7HIV.mjs.map +0 -7
  104. package/dist/lib/node-esm/index.mjs +0 -100
  105. package/dist/lib/node-esm/index.mjs.map +0 -7
  106. package/dist/lib/node-esm/meta.json +0 -1
  107. package/dist/lib/node-esm/react-surface-HYSD7AC2.mjs +0 -40
  108. package/dist/lib/node-esm/react-surface-HYSD7AC2.mjs.map +0 -7
  109. package/dist/lib/node-esm/types/index.mjs +0 -10
  110. package/dist/types/src/components/CaretDownUp.d.ts.map +0 -1
  111. package/dist/types/src/components/StackContainer.d.ts +0 -9
  112. package/dist/types/src/components/StackContainer.d.ts.map +0 -1
  113. package/dist/types/src/components/StackContext.d.ts.map +0 -1
  114. package/dist/types/src/components/StackSection.d.ts.map +0 -1
  115. package/dist/types/src/components/StackSettings.d.ts.map +0 -1
  116. package/src/components/StackContainer.tsx +0 -172
  117. package/src/components/StackSettings.tsx +0 -30
  118. /package/dist/lib/{browser/types → neutral}/index.mjs.map +0 -0
  119. /package/dist/lib/{node-esm/types/index.mjs.map → neutral/meta.mjs.map} +0 -0
  120. /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.72ec0f3",
3
+ "version": "0.8.4-main.765dc60934",
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
  ".": {
13
54
  "source": "./src/index.ts",
14
55
  "types": "./dist/types/src/index.d.ts",
15
- "browser": "./dist/lib/browser/index.mjs",
16
- "node": "./dist/lib/node-esm/index.mjs"
56
+ "default": "./dist/lib/neutral/index.mjs"
17
57
  },
18
- "./types": {
19
- "source": "./src/types/index.ts",
20
- "types": "./dist/types/src/types/index.d.ts",
21
- "browser": "./dist/lib/browser/types/index.mjs",
22
- "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"
23
67
  }
24
68
  },
25
69
  "types": "dist/types/src/index.d.ts",
26
- "typesVersions": {
27
- "*": {
28
- "types": [
29
- "dist/types/src/types/index.d.ts"
30
- ]
31
- }
32
- },
33
70
  "files": [
34
71
  "dist",
35
72
  "src"
36
73
  ],
37
74
  "dependencies": {
38
- "@fluentui/react-tabster": "^9.24.2",
39
- "@preact-signals/safe-react": "^0.9.0",
40
- "@preact/signals-core": "^1.12.1",
75
+ "@effect-atom/atom-react": "^0.5.0",
76
+ "@fluentui/react-tabster": "9.26.11",
41
77
  "@radix-ui/react-collapsible": "1.1.3",
42
- "effect": "3.18.3",
78
+ "effect": "3.20.0",
43
79
  "node-fetch": "^2.6.0",
44
80
  "react-is": "~19.2.0",
45
- "@dxos/app-framework": "0.8.4-main.72ec0f3",
46
- "@dxos/async": "0.8.4-main.72ec0f3",
47
- "@dxos/invariant": "0.8.4-main.72ec0f3",
48
- "@dxos/echo": "0.8.4-main.72ec0f3",
49
- "@dxos/local-storage": "0.8.4-main.72ec0f3",
50
- "@dxos/plugin-client": "0.8.4-main.72ec0f3",
51
- "@dxos/plugin-deck": "0.8.4-main.72ec0f3",
52
- "@dxos/plugin-space": "0.8.4-main.72ec0f3",
53
- "@dxos/plugin-graph": "0.8.4-main.72ec0f3",
54
- "@dxos/react-client": "0.8.4-main.72ec0f3",
55
- "@dxos/react-ui-attention": "0.8.4-main.72ec0f3",
56
- "@dxos/client": "0.8.4-main.72ec0f3",
57
- "@dxos/react-ui-searchlist": "0.8.4-main.72ec0f3",
58
- "@dxos/schema": "0.8.4-main.72ec0f3",
59
- "@dxos/react-ui-form": "0.8.4-main.72ec0f3",
60
- "@dxos/types": "0.8.4-main.72ec0f3",
61
- "@dxos/util": "0.8.4-main.72ec0f3",
62
- "@dxos/react-ui-stack": "0.8.4-main.72ec0f3"
81
+ "@dxos/app-framework": "0.8.4-main.765dc60934",
82
+ "@dxos/async": "0.8.4-main.765dc60934",
83
+ "@dxos/app-toolkit": "0.8.4-main.765dc60934",
84
+ "@dxos/client": "0.8.4-main.765dc60934",
85
+ "@dxos/echo": "0.8.4-main.765dc60934",
86
+ "@dxos/invariant": "0.8.4-main.765dc60934",
87
+ "@dxos/echo-atom": "0.8.4-main.765dc60934",
88
+ "@dxos/operation": "0.8.4-main.765dc60934",
89
+ "@dxos/plugin-client": "0.8.4-main.765dc60934",
90
+ "@dxos/plugin-deck": "0.8.4-main.765dc60934",
91
+ "@dxos/plugin-graph": "0.8.4-main.765dc60934",
92
+ "@dxos/plugin-space": "0.8.4-main.765dc60934",
93
+ "@dxos/react-client": "0.8.4-main.765dc60934",
94
+ "@dxos/react-ui-attention": "0.8.4-main.765dc60934",
95
+ "@dxos/react-ui-form": "0.8.4-main.765dc60934",
96
+ "@dxos/react-ui-list": "0.8.4-main.765dc60934",
97
+ "@dxos/react-ui-stack": "0.8.4-main.765dc60934",
98
+ "@dxos/schema": "0.8.4-main.765dc60934",
99
+ "@dxos/types": "0.8.4-main.765dc60934",
100
+ "@dxos/util": "0.8.4-main.765dc60934"
63
101
  },
64
102
  "devDependencies": {
65
103
  "@babel/core": "^7.18.13",
66
- "@types/react": "~19.2.2",
67
- "@types/react-dom": "~19.2.2",
68
- "react": "~19.2.0",
69
- "react-dom": "~19.2.0",
70
- "vite": "7.1.9",
71
- "@dxos/react-ui": "0.8.4-main.72ec0f3",
72
- "@dxos/react-ui-theme": "0.8.4-main.72ec0f3",
73
- "@dxos/storybook-utils": "0.8.4-main.72ec0f3"
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.765dc60934",
110
+ "@dxos/storybook-utils": "0.8.4-main.765dc60934",
111
+ "@dxos/react-ui": "0.8.4-main.765dc60934",
112
+ "@dxos/ui-theme": "0.8.4-main.765dc60934"
74
113
  },
75
114
  "peerDependencies": {
76
- "effect": "^3.13.3",
77
- "react": "^19.0.0",
78
- "react-dom": "^19.0.0",
79
- "@dxos/react-ui": "0.8.4-main.72ec0f3",
80
- "@dxos/react-ui-theme": "0.8.4-main.72ec0f3"
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.765dc60934",
120
+ "@dxos/ui-theme": "0.8.4-main.765dc60934"
81
121
  },
82
122
  "publishConfig": {
83
123
  "access": "public"
@@ -2,50 +2,19 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, Events, contributes, defineModule, definePlugin } 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 { SECTION_IDENTIFIER, meta } 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 = definePlugin(meta, () => [
15
- defineModule({
16
- id: `${meta.id}/module/translations`,
17
- activatesOn: Events.SetupTranslations,
18
- activate: () => contributes(Capabilities.Translations, translations),
19
- }),
20
- defineModule({
21
- id: `${meta.id}/module/metadata`,
22
- activatesOn: Events.SetupMetadata,
23
- activate: () => [
24
- contributes(Capabilities.Metadata, {
25
- id: SECTION_IDENTIFIER,
26
- metadata: {
27
- parse: (section: { object: Obj.Any }, type: string) => {
28
- switch (type) {
29
- case 'node':
30
- return { id: section.object.id, label: (section.object as any).title, data: section.object };
31
- case 'object':
32
- return section.object;
33
- case 'view-object':
34
- return section;
35
- }
36
- },
37
- },
38
- }),
39
- ],
40
- }),
41
- defineModule({
42
- id: `${meta.id}/module/schema`,
43
- activatesOn: ClientEvents.SetupSchema,
44
- activate: () => contributes(ClientCapabilities.Schema, [StackViewType]),
45
- }),
46
- defineModule({
47
- id: `${meta.id}/module/react-surface`,
48
- activatesOn: Events.SetupReactSurface,
49
- activate: ReactSurface,
50
- }),
51
- ]);
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,28 +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 { Collection } 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';
10
12
 
11
- import { StackContainer } from '../components';
12
- import { meta } from '../meta';
13
+ import { StackArticle } from '#containers';
13
14
 
14
- export default () =>
15
- contributes(
16
- Capabilities.ReactSurface,
17
- createSurface({
18
- id: `${meta.id}/article`,
19
- role: 'article',
20
- filter: (data): data is { id?: string; subject: Collection.Collection } =>
21
- Obj.instanceOf(Collection.Collection, data.subject),
22
- component: ({ data }) => {
23
- // This allows the id to be overridden by the surface for situations where the id of the collection
24
- // is not the same as the id of what is being represented (e.g., a space with a root collection).
25
- const id = typeof data.id === 'string' ? data.id : undefined;
26
- return <StackContainer id={id ?? Obj.getDXN(data.subject).toString()} collection={data.subject} />;
27
- },
28
- }),
29
- );
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,19 +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/react';
8
+ import { Surface } from '@dxos/app-framework/ui';
9
+ import { AppSurface } from '@dxos/app-toolkit/ui';
9
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 { getSize, mx, textBlockWidth } from '@dxos/react-ui-theme';
13
+ import { getSize, mx } from '@dxos/ui-theme';
13
14
 
14
- import { meta } from '../meta';
15
- import { type StackSectionItem } from '../types';
15
+ import { meta } from '#meta';
16
+ import { type StackSectionItem } from '#types';
16
17
 
18
+ import { useStack } from '../StackContext';
17
19
  import { CaretDownUp } from './CaretDownUp';
18
- import { useStack } from './StackContext';
19
20
 
20
- 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';
21
22
 
22
23
  export type StackSectionProps = StackSectionItem;
23
24
 
@@ -28,15 +29,17 @@ export const StackSection = ({
28
29
  metadata: { icon = 'ph--placeholder--regular' },
29
30
  }: StackSectionProps) => {
30
31
  const { t } = useTranslation(meta.id);
31
- const { onNavigate, onAdd, onCollapse, onDelete } = useStack();
32
+ const { attendableId: parentAttendableId, onNavigate, onAdd, onCollapse, onDelete } = useStack();
32
33
  const [optionsMenuOpen, setOptionsMenuOpen] = useState(false);
33
- const attentionAttrs = useAttentionAttributes(id);
34
+ const attendableId = `${parentAttendableId}/${object.id}`;
35
+ const attentionAttrs = useAttentionAttributes(attendableId);
34
36
  const stackItem = useMemo(() => ({ id }), [id]);
37
+ const data = useMemo(() => ({ attendableId, subject: object }), [object, attendableId]);
35
38
 
36
39
  return (
37
40
  <CollapsiblePrimitive.Root asChild open={!view.collapsed} onOpenChange={(nextOpen) => onCollapse?.(id, !nextOpen)}>
38
41
  <StackItem.Root item={stackItem} role='section' {...attentionAttrs}>
39
- <StackItem.Heading classNames='attention-surface'>
42
+ <StackItem.Heading classNames='dx-attention-surface'>
40
43
  <span className='sr-only'>{view.title}</span>
41
44
  <StackItem.HeadingStickyContent>
42
45
  <DropdownMenu.Root
@@ -47,7 +50,7 @@ export const StackSection = ({
47
50
  >
48
51
  <DropdownMenu.Trigger asChild>
49
52
  <StackItem.SigilButton>
50
- <Icon icon={icon} size={5} classNames='transition-opacity' />
53
+ <Icon icon={icon} classNames='transition-opacity' />
51
54
  </StackItem.SigilButton>
52
55
  </DropdownMenu.Trigger>
53
56
  <DropdownMenu.Portal>
@@ -55,28 +58,28 @@ export const StackSection = ({
55
58
  <DropdownMenu.Viewport>
56
59
  {view.collapsed ? (
57
60
  <DropdownMenu.Item onClick={() => onNavigate(id)} data-testid='section.navigate-to'>
58
- <Icon icon='ph--arrow-right--regular' size={5} />
59
- <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>
60
63
  </DropdownMenu.Item>
61
64
  ) : (
62
65
  <CollapsiblePrimitive.Trigger asChild>
63
66
  <DropdownMenu.Item>
64
67
  <CaretDownUp className={getSize(5)} />
65
- <span className='mis-2 grow'>{t('collapse label')}</span>
68
+ <span className='ms-2 grow'>{t('collapse.label')}</span>
66
69
  </DropdownMenu.Item>
67
70
  </CollapsiblePrimitive.Trigger>
68
71
  )}
69
72
  <DropdownMenu.Item onClick={() => onAdd(id, 'before')} data-testid='section.add-before'>
70
- <Icon icon='ph--arrow-line-up--regular' size={5} />
71
- <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>
72
75
  </DropdownMenu.Item>
73
76
  <DropdownMenu.Item onClick={() => onAdd(id, 'after')} data-testid='section.add-after'>
74
- <Icon icon='ph--arrow-line-down--regular' size={5} />
75
- <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>
76
79
  </DropdownMenu.Item>
77
80
  <DropdownMenu.Item onClick={() => onDelete(id)} data-testid='section.remove'>
78
- <Icon icon='ph--trash--regular' size={5} />
79
- <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>
80
83
  </DropdownMenu.Item>
81
84
  </DropdownMenu.Viewport>
82
85
  <DropdownMenu.Arrow />
@@ -88,7 +91,7 @@ export const StackSection = ({
88
91
  <IconButton
89
92
  iconOnly
90
93
  variant='ghost'
91
- label={t('expand label')}
94
+ label={t('expand.label')}
92
95
  icon='ph--caret-up-down--regular'
93
96
  classNames={sectionActionDimensions}
94
97
  />
@@ -98,7 +101,7 @@ export const StackSection = ({
98
101
  iconOnly
99
102
  variant='ghost'
100
103
  onClick={() => onNavigate(id)}
101
- label={t('navigate to section label')}
104
+ label={t('navigate-to-section.label')}
102
105
  icon='ph--arrow-right--regular'
103
106
  data-testid='section.navigate-to'
104
107
  classNames={sectionActionDimensions}
@@ -107,11 +110,11 @@ export const StackSection = ({
107
110
  </StackItem.HeadingStickyContent>
108
111
  </StackItem.Heading>
109
112
  <CollapsiblePrimitive.Content>
110
- <Surface role='section' data={{ subject: object }} limit={1} placeholder={<></>} />
113
+ <Surface.Surface type={AppSurface.Section} data={data} limit={1} placeholder={<></>} />
111
114
  </CollapsiblePrimitive.Content>
112
115
  {view.collapsed && (
113
- <StackItem.Content classNames='attention-surface'>
114
- <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>
115
118
  </StackItem.Content>
116
119
  )}
117
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 StackContainer = lazy(() => import('./StackContainer'));
8
-
5
+ export * from './StackContext';
6
+ export * from './StackSection';
9
7
  export * from './StackSettings';