alinea 2.0.0-preview.2 → 2.0.0-preview.4

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 (178) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/LICENSES.md +157 -103
  3. package/dist/adapter/next/DevRemote.js +10 -2
  4. package/dist/adapter/next/previews.js +4 -1
  5. package/dist/adapter/next/previews.spec.d.ts +1 -0
  6. package/dist/backend/Handler.js +14 -7
  7. package/dist/backend/api/BasicAuth.d.ts +1 -1
  8. package/dist/backend/api/BasicAuth.js +14 -14
  9. package/dist/backend/api/OAuth2.d.ts +3 -3
  10. package/dist/backend/api/OAuth2.js +7 -4
  11. package/dist/bundled.d.ts +159 -42
  12. package/dist/chunks/{chunk-Y7XOMJOC.js → chunk-CFNRVI3Y.js} +220 -247
  13. package/dist/chunks/chunk-D6UJHBJJ.js +183 -0
  14. package/dist/chunks/chunk-TIJTT5ZI.js +228 -0
  15. package/dist/chunks/{chunk-UVOEM4AH.js → chunk-XMOVGDFI.js} +1 -1
  16. package/dist/cli/Serve.js +1 -1
  17. package/dist/cli/bin.js +1 -1
  18. package/dist/cli/serve/LocalAuth.js +1 -1
  19. package/dist/cloud/AuthResult.d.ts +2 -0
  20. package/dist/cloud/CloudHandshake.d.ts +7 -0
  21. package/dist/cloud/CloudHandshake.js +64 -0
  22. package/dist/cloud/CloudRemote.d.ts +4 -1
  23. package/dist/cloud/CloudRemote.js +21 -3
  24. package/dist/components/Breadcrumbs.js +2 -2
  25. package/dist/components/Calendar.js +6 -6
  26. package/dist/components/Checkbox.js +3 -3
  27. package/dist/components/ComboBox.js +11 -11
  28. package/dist/components/DateField.js +3 -3
  29. package/dist/components/DatePicker.js +4 -4
  30. package/dist/components/DateRangePicker.js +6 -6
  31. package/dist/components/Disclosure.js +8 -8
  32. package/dist/components/Label.js +5 -5
  33. package/dist/components/List.js +34 -34
  34. package/dist/components/Menu.js +4 -4
  35. package/dist/components/Modal.js +3 -3
  36. package/dist/components/MultipleSelect.js +25 -25
  37. package/dist/components/NumberField.js +6 -6
  38. package/dist/components/ProgressCircle.js +2 -2
  39. package/dist/components/RadioGroup.js +2 -2
  40. package/dist/components/SearchField.js +3 -3
  41. package/dist/components/Select.js +7 -7
  42. package/dist/components/Surface.js +2 -2
  43. package/dist/components/Table.js +7 -7
  44. package/dist/components/Tabs.js +4 -4
  45. package/dist/components/TagGroup.js +2 -2
  46. package/dist/components/TextField.js +6 -6
  47. package/dist/components/TimeField.js +2 -2
  48. package/dist/components/Toggle.d.ts +1 -1
  49. package/dist/components/Toggle.js +2 -2
  50. package/dist/components/Toolbar.js +2 -2
  51. package/dist/components/Tooltip.js +3 -3
  52. package/dist/components/Tree.d.ts +4 -2
  53. package/dist/components/Tree.js +18 -4
  54. package/dist/core/Connection.d.ts +7 -4
  55. package/dist/core/Entry.d.ts +6 -0
  56. package/dist/core/Entry.js +10 -0
  57. package/dist/core/Graph.d.ts +1 -1
  58. package/dist/core/Id.d.ts +1 -0
  59. package/dist/core/Id.js +8 -0
  60. package/dist/core/Infer.d.ts +8 -1
  61. package/dist/core/db/EntryAliases.js +1 -4
  62. package/dist/core/db/EntryResolver.js +6 -6
  63. package/dist/core/db/EntryTransaction.js +1 -0
  64. package/dist/core/db/Operation.d.ts +2 -2
  65. package/dist/core/db/Operation.js +15 -4
  66. package/dist/dashboard/App.js +37 -17
  67. package/dist/dashboard/StoryProvider.js +2 -2
  68. package/dist/dashboard/app/AccessDenied.d.ts +16 -1
  69. package/dist/dashboard/app/AccessDenied.js +21 -12
  70. package/dist/dashboard/app/ActivityStatus.js +19 -19
  71. package/dist/dashboard/app/AppearanceToggle.d.ts +1 -0
  72. package/dist/dashboard/app/AppearanceToggle.js +43 -0
  73. package/dist/dashboard/app/AuthView.d.ts +1 -1
  74. package/dist/dashboard/app/AuthView.js +16 -18
  75. package/dist/dashboard/app/Badge.js +2 -2
  76. package/dist/dashboard/app/CompactField.js +17 -17
  77. package/dist/dashboard/app/DashboardErrorBoundary.js +22 -10
  78. package/dist/dashboard/app/DashboardLayout.js +15 -8
  79. package/dist/dashboard/app/DashboardMeta.d.ts +2 -1
  80. package/dist/dashboard/app/DashboardMeta.js +20 -5
  81. package/dist/dashboard/app/EntryFields.js +6 -6
  82. package/dist/dashboard/app/EntryHeader.js +25 -25
  83. package/dist/dashboard/app/EntryReferences.js +16 -16
  84. package/dist/dashboard/app/EntrySidebar.js +26 -26
  85. package/dist/dashboard/app/EntrySidebarPreview.js +61 -34
  86. package/dist/dashboard/app/EntrySidebarPreview.story.d.ts +6 -1
  87. package/dist/dashboard/app/EntryTranslationBanner.js +8 -8
  88. package/dist/dashboard/app/Explorer.d.ts +2 -1
  89. package/dist/dashboard/app/Explorer.js +79 -67
  90. package/dist/dashboard/app/ExplorerCards.js +62 -66
  91. package/dist/dashboard/app/ExplorerFileCard.js +20 -20
  92. package/dist/dashboard/app/ExplorerList.js +22 -22
  93. package/dist/dashboard/app/ExplorerModal.js +3 -3
  94. package/dist/dashboard/app/ExplorerPickerContent.js +2 -2
  95. package/dist/dashboard/app/ExplorerTable.js +68 -68
  96. package/dist/dashboard/app/ImagePicker.js +7 -7
  97. package/dist/dashboard/app/LinkPicker.js +44 -24
  98. package/dist/dashboard/app/LocaleMenu.js +5 -7
  99. package/dist/dashboard/app/SidebarLayout.js +7 -7
  100. package/dist/dashboard/app/SidebarTree.js +66 -74
  101. package/dist/dashboard/app/WorkspaceMenu.d.ts +10 -3
  102. package/dist/dashboard/app/WorkspaceMenu.js +85 -64
  103. package/dist/dashboard/app/WorkspaceMenu.stories.d.ts +2 -0
  104. package/dist/dashboard/app/WorkspaceRoots.d.ts +3 -1
  105. package/dist/dashboard/app/WorkspaceRoots.js +82 -107
  106. package/dist/dashboard/app/editor/FileEditor.js +31 -31
  107. package/dist/dashboard/app/editor/FilePreview.js +4 -4
  108. package/dist/dashboard/app/editor/MediaAltField.view.js +4 -4
  109. package/dist/dashboard/app/modals/CreateEntry.js +14 -14
  110. package/dist/dashboard/app/pages/EntryPage.js +28 -30
  111. package/dist/dashboard/app/pages/RootPage.js +4 -4
  112. package/dist/dashboard/app/pages/SplashPage.d.ts +3 -0
  113. package/dist/dashboard/app/pages/SplashPage.js +414 -0
  114. package/dist/dashboard/app/pages/UsersPage.js +35 -35
  115. package/dist/dashboard/app/ui/DashboardModal.js +19 -19
  116. package/dist/dashboard/app/ui/Rail.js +3 -3
  117. package/dist/dashboard/atoms/ReactiveNode.js +1 -1
  118. package/dist/dashboard/atoms/activity.js +2 -3
  119. package/dist/dashboard/atoms/auth.d.ts +2 -0
  120. package/dist/dashboard/atoms/auth.js +6 -2
  121. package/dist/dashboard/atoms/config.js +1 -1
  122. package/dist/dashboard/atoms/core.js +2 -2
  123. package/dist/dashboard/atoms/create.js +1 -1
  124. package/dist/dashboard/atoms/dashboard.js +2 -2
  125. package/dist/dashboard/atoms/editor.js +1 -1
  126. package/dist/dashboard/atoms/entry.js +2 -2
  127. package/dist/dashboard/atoms/explorer.d.ts +1 -3
  128. package/dist/dashboard/atoms/explorer.js +7 -9
  129. package/dist/dashboard/atoms/graph.d.ts +1 -0
  130. package/dist/dashboard/atoms/graph.js +7 -2
  131. package/dist/dashboard/atoms/link.js +2 -2
  132. package/dist/dashboard/atoms/nav.d.ts +4 -3
  133. package/dist/dashboard/atoms/nav.js +10 -5
  134. package/dist/dashboard/atoms/preview.js +1 -1
  135. package/dist/dashboard/atoms/root.js +2 -2
  136. package/dist/dashboard/atoms/upload.js +1 -1
  137. package/dist/dashboard/atoms/user.d.ts +1 -1
  138. package/dist/dashboard/atoms/user.js +8 -6
  139. package/dist/dashboard/atoms/utils.js +2 -2
  140. package/dist/dashboard/boot/Boot.js +2 -4
  141. package/dist/dashboard/boot/DashboardWorker.js +34 -29
  142. package/dist/dashboard/editor/UseField.js +6 -6
  143. package/dist/dashboard/fixture/cms.d.ts +12 -0
  144. package/dist/dashboard/fixture/cms.js +53 -2
  145. package/dist/dashboard/hook/UseGraph.js +4 -4
  146. package/dist/dashboard/hook/UseRoot.js +4 -4
  147. package/dist/dashboard/hooks.js +16 -16
  148. package/dist/field/check/CheckField.view.js +2 -2
  149. package/dist/field/code/CodeField.view.js +15 -15
  150. package/dist/field/link/EntryLink.d.ts +1 -1
  151. package/dist/field/link/EntryLink.js +1 -0
  152. package/dist/field/link/Link.js +1 -0
  153. package/dist/field/link/LinkField.d.ts +5 -0
  154. package/dist/field/link/LinkField.view.js +81 -64
  155. package/dist/field/list/ListField.view.js +26 -26
  156. package/dist/field/localiser/LocalisedField.view.js +76 -5
  157. package/dist/field/metadata/MetadataField.d.ts +2 -0
  158. package/dist/field/metadata/MetadataField.js +2 -1
  159. package/dist/field/metadata/MetadataField.view.js +20 -20
  160. package/dist/field/richtext/PickTextLink.js +6 -6
  161. package/dist/field/richtext/RichTextBlock.js +6 -6
  162. package/dist/field/richtext/RichTextBlocks.js +1 -1
  163. package/dist/field/richtext/RichTextExtensions.js +23 -23
  164. package/dist/field/richtext/RichTextField.view.js +9 -9
  165. package/dist/field/richtext/RichTextState.js +1 -1
  166. package/dist/field/text/TextField.view.js +2 -2
  167. package/dist/index.css +436 -28
  168. package/dist/preview/PreviewMessage.d.ts +3 -0
  169. package/dist/preview/PreviewMessage.js +1 -0
  170. package/dist/preview/RegisterPreview.d.ts +1 -1
  171. package/dist/preview/RegisterPreview.js +28 -10
  172. package/dist/preview/react.d.ts +5 -1
  173. package/dist/preview/react.js +12 -9
  174. package/dist/preview/widget.js +6 -12
  175. package/dist/query.d.ts +7 -7
  176. package/package.json +1 -1
  177. package/dist/chunks/chunk-STAJCW4Z.js +0 -322
  178. package/dist/chunks/chunk-U4VOHNR2.js +0 -210
@@ -1,8 +1,8 @@
1
1
  import {
2
- useAtomValue,
2
+ useAtomValueRaw,
3
3
  useSetAtom
4
- } from "../../chunks/chunk-U4VOHNR2.js";
5
- import "../../chunks/chunk-Y7XOMJOC.js";
4
+ } from "../../chunks/chunk-D6UJHBJJ.js";
5
+ import "../../chunks/chunk-CFNRVI3Y.js";
6
6
  import {
7
7
  $7705c033048f6da7$export$353f5b6fc5456de1
8
8
  } from "../../chunks/chunk-VXZM6V4P.js";
@@ -47,22 +47,24 @@ import {
47
47
 
48
48
  // src/dashboard/app/WorkspaceMenu.module.css
49
49
  var WorkspaceMenu_default = {
50
+ "WorkspaceMenu-trigger-text": "alinea-WorkspaceMenu-trigger-text",
51
+ "WorkspaceMenuTriggerText": "alinea-WorkspaceMenu-trigger-text",
52
+ "WorkspaceMenu-avatarTrigger": "alinea-WorkspaceMenu-avatarTrigger",
53
+ "WorkspaceMenuAvatarTrigger": "alinea-WorkspaceMenu-avatarTrigger",
50
54
  "WorkspaceMenu-trigger": "alinea-WorkspaceMenu-trigger",
51
55
  "WorkspaceMenuTrigger": "alinea-WorkspaceMenu-trigger",
52
56
  "WorkspaceMenu-search": "alinea-WorkspaceMenu-search",
53
57
  "WorkspaceMenuSearch": "alinea-WorkspaceMenu-search",
54
- "WorkspaceMenu-avatarTrigger": "alinea-WorkspaceMenu-avatarTrigger",
55
- "WorkspaceMenuAvatarTrigger": "alinea-WorkspaceMenu-avatarTrigger",
56
- "WorkspaceMenu-avatar": "alinea-WorkspaceMenu-avatar",
57
- "WorkspaceMenuAvatar": "alinea-WorkspaceMenu-avatar",
58
58
  "WorkspaceMenu-menuItemIcon": "alinea-WorkspaceMenu-menuItemIcon",
59
59
  "WorkspaceMenuMenuItemIcon": "alinea-WorkspaceMenu-menuItemIcon",
60
60
  "WorkspaceMenu-avatar-logo": "alinea-WorkspaceMenu-avatar-logo",
61
61
  "WorkspaceMenuAvatarLogo": "alinea-WorkspaceMenu-avatar-logo",
62
+ "WorkspaceMenu-avatar": "alinea-WorkspaceMenu-avatar",
63
+ "WorkspaceMenuAvatar": "alinea-WorkspaceMenu-avatar",
62
64
  "WorkspaceMenu-parent": "alinea-WorkspaceMenu-parent",
63
65
  "WorkspaceMenuParent": "alinea-WorkspaceMenu-parent",
64
- "WorkspaceMenu-trigger-text": "alinea-WorkspaceMenu-trigger-text",
65
- "WorkspaceMenuTriggerText": "alinea-WorkspaceMenu-trigger-text"
66
+ "WorkspaceMenu-avatar-large": "alinea-WorkspaceMenu-avatar-large",
67
+ "WorkspaceMenuAvatarLarge": "alinea-WorkspaceMenu-avatar-large"
66
68
  };
67
69
 
68
70
  // src/dashboard/app/WorkspaceMenu.tsx
@@ -90,7 +92,7 @@ function WorkspaceSelectorMenu({
90
92
  popoverProps
91
93
  }) {
92
94
  const setRoute = useSetAtom(routeAtom);
93
- const workspaces = useAtomValue(workspacesAtom);
95
+ const workspaces = useAtomValueRaw(workspacesAtom);
94
96
  if (workspaces.length <= 1 && !includeUsersLink) return label;
95
97
  return /* @__PURE__ */ jsxs(
96
98
  Menu,
@@ -125,35 +127,46 @@ function WorkspaceSelectorMenu({
125
127
  }
126
128
  );
127
129
  }
128
- function WorkspaceAvatarMenu({ page }) {
129
- const workspace = useAtomValue(workspaceAtom(page.workspace));
130
+ function WorkspaceAvatarMenu({ page, root }) {
131
+ const workspace = useAtomValueRaw(workspaceAtom(page.workspace));
132
+ const workspaces = useAtomValueRaw(workspacesAtom);
133
+ const setRoute = useSetAtom(routeAtom);
134
+ const setExplorerLocale = useSetAtom(root.explorer.selectedLocale);
135
+ const avatar = /* @__PURE__ */ jsx(
136
+ WorkspaceAvatar,
137
+ {
138
+ color: workspace.color,
139
+ icon: workspace.icon,
140
+ size: "small"
141
+ }
142
+ );
143
+ if (workspaces.length <= 1) {
144
+ return /* @__PURE__ */ jsx(
145
+ "div",
146
+ {
147
+ className: styles.WorkspaceMenu.avatarTrigger(),
148
+ "aria-label": workspace.label,
149
+ children: avatar
150
+ }
151
+ );
152
+ }
153
+ function showWorkspaces() {
154
+ setExplorerLocale(page.locale);
155
+ setRoute({ page: "splash" });
156
+ }
130
157
  return /* @__PURE__ */ jsx(
131
- WorkspaceSelectorMenu,
158
+ Button,
132
159
  {
133
- page,
134
- ariaLabel: "Workspace",
135
- popoverProps: { placement: "right top", offset: 16 },
136
- label: /* @__PURE__ */ jsx(
137
- Button,
138
- {
139
- size: "icon-nav",
140
- appearance: "plain",
141
- className: styles.WorkspaceMenu.avatarTrigger(),
142
- "aria-label": workspace.label,
143
- children: /* @__PURE__ */ jsx(
144
- WorkspaceAvatar,
145
- {
146
- color: workspace.color,
147
- icon: workspace.icon,
148
- size: "small"
149
- }
150
- )
151
- }
152
- )
160
+ size: "icon-nav",
161
+ appearance: "plain",
162
+ className: styles.WorkspaceMenu.avatarTrigger(),
163
+ "aria-label": "Back to workspaces",
164
+ onPress: showWorkspaces,
165
+ children: avatar
153
166
  }
154
167
  );
155
168
  }
156
- function SearchPopup({ root }) {
169
+ function SearchPopup({ initialSearchScope, root }) {
157
170
  const modal = useDashboardModal();
158
171
  const setRoute = useSetAtom(routeAtom);
159
172
  const [explorer] = useState(
@@ -164,7 +177,7 @@ function SearchPopup({ root }) {
164
177
  autoSelectFirstItem: true,
165
178
  breadcrumbs: true,
166
179
  enableNavigation: true,
167
- hideResultsUntilSearch: true,
180
+ initialSearchScope,
168
181
  mode: "search",
169
182
  rootData: root.data,
170
183
  searchDepth: "all",
@@ -181,7 +194,7 @@ function SearchPopup({ root }) {
181
194
  }
182
195
  )
183
196
  );
184
- const explorerPage = useAtomValue(explorer.page);
197
+ const explorerPage = useAtomValueRaw(explorer.page);
185
198
  if (!explorerPage)
186
199
  return /* @__PURE__ */ jsx(
187
200
  DashboardModalDialog,
@@ -204,13 +217,36 @@ function SearchPopup({ root }) {
204
217
  /* @__PURE__ */ jsx(ExplorerBody, { explorer, page: explorerPage })
205
218
  ] }) }) });
206
219
  }
220
+ function GlobalSearch({
221
+ children,
222
+ initialSearchScope,
223
+ root
224
+ }) {
225
+ return /* @__PURE__ */ jsxs(DialogTrigger, { children: [
226
+ children,
227
+ /* @__PURE__ */ jsx(DashboardModal, { size: "explorer", children: /* @__PURE__ */ jsx(
228
+ Suspense,
229
+ {
230
+ fallback: /* @__PURE__ */ jsx(
231
+ DashboardModalDialog,
232
+ {
233
+ "aria-label": "Search entries",
234
+ variant: "explorer",
235
+ isLoading: true
236
+ }
237
+ ),
238
+ children: /* @__PURE__ */ jsx(SearchPopup, { initialSearchScope, root })
239
+ }
240
+ ) })
241
+ ] });
242
+ }
207
243
  function WorkspaceMenu({
208
244
  canManageMembers,
209
245
  page,
210
246
  root,
211
247
  workspace
212
248
  }) {
213
- const workspaces = useAtomValue(workspacesAtom);
249
+ const workspaces = useAtomValueRaw(workspacesAtom);
214
250
  const menu = workspaces.length > 1 ? /* @__PURE__ */ jsx(
215
251
  WorkspaceSelectorMenu,
216
252
  {
@@ -225,39 +261,24 @@ function WorkspaceMenu({
225
261
  ) : /* @__PURE__ */ jsx("div", { className: styles.WorkspaceMenu.trigger(), children: /* @__PURE__ */ jsx("span", { className: styles.WorkspaceMenu.trigger.text(), children: workspace.label }) });
226
262
  return /* @__PURE__ */ jsxs("div", { className: styles.WorkspaceMenu.parent(), children: [
227
263
  menu,
228
- /* @__PURE__ */ jsxs(DialogTrigger, { children: [
229
- /* @__PURE__ */ jsx(
230
- Button,
231
- {
232
- size: "icon",
233
- appearance: "plain",
234
- className: styles.WorkspaceMenu.search(),
235
- "aria-label": "Search entries",
236
- children: /* @__PURE__ */ jsx(IconComp, { icon: IcRoundSearch, "data-slot": "icon" })
237
- }
238
- ),
239
- /* @__PURE__ */ jsx(DashboardModal, { size: "explorer", children: /* @__PURE__ */ jsx(
240
- Suspense,
241
- {
242
- fallback: /* @__PURE__ */ jsx(
243
- DashboardModalDialog,
244
- {
245
- "aria-label": "Search entries",
246
- variant: "explorer",
247
- isLoading: true
248
- }
249
- ),
250
- children: /* @__PURE__ */ jsx(SearchPopup, { root })
251
- }
252
- ) })
253
- ] })
264
+ /* @__PURE__ */ jsx(GlobalSearch, { root, children: /* @__PURE__ */ jsx(
265
+ Button,
266
+ {
267
+ size: "icon",
268
+ appearance: "plain",
269
+ className: styles.WorkspaceMenu.search(),
270
+ "aria-label": "Search entries",
271
+ children: /* @__PURE__ */ jsx(IconComp, { icon: IcRoundSearch, "data-slot": "icon" })
272
+ }
273
+ ) })
254
274
  ] });
255
275
  }
256
276
  function WorkspaceItem({ workspace }) {
257
- const data = useAtomValue(workspaceAtom(workspace));
277
+ const data = useAtomValueRaw(workspaceAtom(workspace));
258
278
  return /* @__PURE__ */ jsx(MenuItem, { id: workspace, textValue: data.label, children: data.label }, workspace);
259
279
  }
260
280
  export {
281
+ GlobalSearch,
261
282
  WorkspaceAvatar,
262
283
  WorkspaceAvatarMenu,
263
284
  WorkspaceMenu
@@ -1,4 +1,6 @@
1
1
  export declare function GlobalSearchStory(): import("react").JSX.Element;
2
+ export declare function SingleWorkspaceAvatarStory(): import("react").JSX.Element;
3
+ export declare function LocalizedGlobalSearchStory(): import("react").JSX.Element;
2
4
  declare const _default: {
3
5
  title: string;
4
6
  };
@@ -1,6 +1,8 @@
1
1
  import type { Page } from 'alinea/dashboard/atoms/nav';
2
+ import { type RootAtoms } from 'alinea/dashboard/atoms/root';
2
3
  export interface WorkspaceRootsProps {
3
4
  canManageMembers: boolean;
4
5
  page: Page;
6
+ root: RootAtoms;
5
7
  }
6
- export declare function WorkspaceRoots({ canManageMembers, page }: WorkspaceRootsProps): import("react").JSX.Element;
8
+ export declare function WorkspaceRoots({ canManageMembers, page, root: currentRoot }: WorkspaceRootsProps): import("react").JSX.Element;
@@ -1,9 +1,8 @@
1
1
  import {
2
- useAtom,
3
- useAtomValue,
2
+ useAtomValueRaw,
4
3
  useSetAtom
5
- } from "../../chunks/chunk-U4VOHNR2.js";
6
- import "../../chunks/chunk-Y7XOMJOC.js";
4
+ } from "../../chunks/chunk-D6UJHBJJ.js";
5
+ import "../../chunks/chunk-CFNRVI3Y.js";
7
6
  import {
8
7
  dist_default
9
8
  } from "../../chunks/chunk-I4OYYAX5.js";
@@ -20,11 +19,7 @@ import {
20
19
  Tooltip
21
20
  } from "alinea/components";
22
21
  import { rootAtoms } from "alinea/dashboard/atoms/root";
23
- import {
24
- canLogoutAtom,
25
- logoutAtom,
26
- themeAtom
27
- } from "alinea/dashboard/atoms/dashboard";
22
+ import { canLogoutAtom, logoutAtom } from "alinea/dashboard/atoms/dashboard";
28
23
  import { configAtom, localAtom } from "alinea/dashboard/atoms/core";
29
24
  import { routeAtom } from "alinea/dashboard/atoms/nav";
30
25
  import { workspaceAtom } from "alinea/dashboard/atoms/config";
@@ -34,67 +29,68 @@ import { useUser } from "alinea/dashboard/hooks";
34
29
  import {
35
30
  IcBaselineAccountCircle,
36
31
  IcOutlineSettings,
37
- IcRoundBrightness2,
38
- IcRoundDesktopWindows,
39
32
  IcRoundLogout,
40
- IcRoundMoreHoriz,
41
- IcRoundUnfoldMore,
42
- IcRoundWbSunny
33
+ IcRoundUnfoldMore
43
34
  } from "../icons.js";
44
35
  import { ActivityStatus } from "./ActivityStatus.js";
36
+ import { AppearanceToggle } from "./AppearanceToggle.js";
45
37
  import { WorkspaceAvatarMenu } from "./WorkspaceMenu.js";
46
38
 
47
39
  // src/dashboard/app/WorkspaceRoots.module.css
48
40
  var WorkspaceRoots_default = {
49
- "WorkspaceRoots-profile": "alinea-WorkspaceRoots-profile",
50
- "WorkspaceRootsProfile": "alinea-WorkspaceRoots-profile",
51
- "WorkspaceRoots-profile-popover-user-title": "alinea-WorkspaceRoots-profile-popover-user-title",
52
- "WorkspaceRootsProfilePopoverUserTitle": "alinea-WorkspaceRoots-profile-popover-user-title",
53
41
  "WorkspaceRoots-profile-popover-item-label": "alinea-WorkspaceRoots-profile-popover-item-label",
54
42
  "WorkspaceRootsProfilePopoverItemLabel": "alinea-WorkspaceRoots-profile-popover-item-label",
55
- "WorkspaceRoots-profile-popover-user-icon": "alinea-WorkspaceRoots-profile-popover-user-icon",
56
- "WorkspaceRootsProfilePopoverUserIcon": "alinea-WorkspaceRoots-profile-popover-user-icon",
57
- "WorkspaceRoots": "alinea-WorkspaceRoots",
58
- "WorkspaceRoots-profile-popover-user": "alinea-WorkspaceRoots-profile-popover-user",
59
- "WorkspaceRootsProfilePopoverUser": "alinea-WorkspaceRoots-profile-popover-user",
60
43
  "WorkspaceRoots-profile-popover-action-label": "alinea-WorkspaceRoots-profile-popover-action-label",
61
44
  "WorkspaceRootsProfilePopoverActionLabel": "alinea-WorkspaceRoots-profile-popover-action-label",
62
- "WorkspaceRoots-profile-popover-action-button": "alinea-WorkspaceRoots-profile-popover-action-button",
63
- "WorkspaceRootsProfilePopoverActionButton": "alinea-WorkspaceRoots-profile-popover-action-button",
64
- "WorkspaceRoots-profile-popover-surface": "alinea-WorkspaceRoots-profile-popover-surface",
65
- "WorkspaceRootsProfilePopoverSurface": "alinea-WorkspaceRoots-profile-popover-surface",
45
+ "WorkspaceRoots-trigger-text": "alinea-WorkspaceRoots-trigger-text",
46
+ "WorkspaceRootsTriggerText": "alinea-WorkspaceRoots-trigger-text",
66
47
  "WorkspaceRoots-workspace": "alinea-WorkspaceRoots-workspace",
67
48
  "WorkspaceRootsWorkspace": "alinea-WorkspaceRoots-workspace",
68
- "WorkspaceRoots-profile-popover": "alinea-WorkspaceRoots-profile-popover",
69
- "WorkspaceRootsProfilePopover": "alinea-WorkspaceRoots-profile-popover",
49
+ "WorkspaceRoots": "alinea-WorkspaceRoots",
50
+ "WorkspaceRoots-roots": "alinea-WorkspaceRoots-roots",
51
+ "WorkspaceRootsRoots": "alinea-WorkspaceRoots-roots",
70
52
  "WorkspaceRoots-footer": "alinea-WorkspaceRoots-footer",
71
53
  "WorkspaceRootsFooter": "alinea-WorkspaceRoots-footer",
72
- "WorkspaceRoots-profile-popover-themeOptions": "alinea-WorkspaceRoots-profile-popover-themeOptions",
73
- "WorkspaceRootsProfilePopoverThemeOptions": "alinea-WorkspaceRoots-profile-popover-themeOptions",
74
- "WorkspaceRoots-trigger-text": "alinea-WorkspaceRoots-trigger-text",
75
- "WorkspaceRootsTriggerText": "alinea-WorkspaceRoots-trigger-text",
76
- "WorkspaceRoots-profile-popover-action": "alinea-WorkspaceRoots-profile-popover-action",
77
- "WorkspaceRootsProfilePopoverAction": "alinea-WorkspaceRoots-profile-popover-action",
78
54
  "WorkspaceRoots-profile-popover-item": "alinea-WorkspaceRoots-profile-popover-item",
79
55
  "WorkspaceRootsProfilePopoverItem": "alinea-WorkspaceRoots-profile-popover-item",
56
+ "WorkspaceRoots-profile-popover": "alinea-WorkspaceRoots-profile-popover",
57
+ "WorkspaceRootsProfilePopover": "alinea-WorkspaceRoots-profile-popover",
80
58
  "WorkspaceRoots-rootButton": "alinea-WorkspaceRoots-rootButton",
81
59
  "WorkspaceRootsRootButton": "alinea-WorkspaceRoots-rootButton",
60
+ "WorkspaceRoots-profile-popover-user": "alinea-WorkspaceRoots-profile-popover-user",
61
+ "WorkspaceRootsProfilePopoverUser": "alinea-WorkspaceRoots-profile-popover-user",
62
+ "WorkspaceRoots-profile-popover-action-button": "alinea-WorkspaceRoots-profile-popover-action-button",
63
+ "WorkspaceRootsProfilePopoverActionButton": "alinea-WorkspaceRoots-profile-popover-action-button",
82
64
  "WorkspaceRoots-trigger": "alinea-WorkspaceRoots-trigger",
83
65
  "WorkspaceRootsTrigger": "alinea-WorkspaceRoots-trigger",
84
- "WorkspaceRoots-roots": "alinea-WorkspaceRoots-roots",
85
- "WorkspaceRootsRoots": "alinea-WorkspaceRoots-roots"
66
+ "WorkspaceRoots-profile-popover-user-icon": "alinea-WorkspaceRoots-profile-popover-user-icon",
67
+ "WorkspaceRootsProfilePopoverUserIcon": "alinea-WorkspaceRoots-profile-popover-user-icon",
68
+ "WorkspaceRoots-profile-popover-user-title": "alinea-WorkspaceRoots-profile-popover-user-title",
69
+ "WorkspaceRootsProfilePopoverUserTitle": "alinea-WorkspaceRoots-profile-popover-user-title",
70
+ "WorkspaceRoots-profile-popover-surface": "alinea-WorkspaceRoots-profile-popover-surface",
71
+ "WorkspaceRootsProfilePopoverSurface": "alinea-WorkspaceRoots-profile-popover-surface",
72
+ "WorkspaceRoots-profile-popover-action-icon": "alinea-WorkspaceRoots-profile-popover-action-icon",
73
+ "WorkspaceRootsProfilePopoverActionIcon": "alinea-WorkspaceRoots-profile-popover-action-icon",
74
+ "WorkspaceRoots-profile": "alinea-WorkspaceRoots-profile",
75
+ "WorkspaceRootsProfile": "alinea-WorkspaceRoots-profile",
76
+ "WorkspaceRoots-profile-popover-action": "alinea-WorkspaceRoots-profile-popover-action",
77
+ "WorkspaceRootsProfilePopoverAction": "alinea-WorkspaceRoots-profile-popover-action"
86
78
  };
87
79
 
88
80
  // src/dashboard/app/WorkspaceRoots.tsx
89
81
  import { jsx, jsxs } from "react/jsx-runtime";
90
82
  var styles = dist_default(WorkspaceRoots_default);
91
- function WorkspaceRoots({ canManageMembers, page }) {
92
- const policy = useAtomValue(policyAtom);
83
+ function WorkspaceRoots({
84
+ canManageMembers,
85
+ page,
86
+ root: currentRoot
87
+ }) {
88
+ const policy = useAtomValueRaw(policyAtom);
93
89
  const workspace = page.workspace;
94
- const settings = useAtomValue(workspaceAtom(workspace));
90
+ const settings = useAtomValueRaw(workspaceAtom(workspace));
95
91
  const roots = Object.keys(settings.roots).filter((key) => policy.canRead({ workspace, root: key })).map((key) => rootAtoms(workspace, key));
96
92
  return /* @__PURE__ */ jsxs("aside", { className: styles.WorkspaceRoots(), "aria-label": "Workspace roots", children: [
97
- /* @__PURE__ */ jsx("div", { className: styles.WorkspaceRoots.workspace(), children: /* @__PURE__ */ jsx(WorkspaceAvatarMenu, { page }) }),
93
+ /* @__PURE__ */ jsx("div", { className: styles.WorkspaceRoots.workspace(), children: /* @__PURE__ */ jsx(WorkspaceAvatarMenu, { page, root: currentRoot }) }),
98
94
  /* @__PURE__ */ jsx("nav", { className: styles.WorkspaceRoots.roots(), children: roots.map((root) => /* @__PURE__ */ jsx(WorkspaceRootButton, { page, root }, root.key)) }),
99
95
  /* @__PURE__ */ jsxs("div", { className: styles.WorkspaceRoots.footer(), children: [
100
96
  /* @__PURE__ */ jsx(ActivityStatus, { mobilePlacement: "bottom right", openOnFail: true }),
@@ -103,8 +99,8 @@ function WorkspaceRoots({ canManageMembers, page }) {
103
99
  ] });
104
100
  }
105
101
  function WorkspaceRootButton({ page, root }) {
106
- const icon = useAtomValue(root.icon);
107
- const label = useAtomValue(root.label);
102
+ const icon = useAtomValueRaw(root.icon);
103
+ const label = useAtomValueRaw(root.label);
108
104
  const setRoute = useSetAtom(routeAtom);
109
105
  const selected = page.root === root.key;
110
106
  return /* @__PURE__ */ jsx(Tooltip, { placement: "right", delay: 100, tooltip: label, children: /* @__PURE__ */ jsx(
@@ -127,10 +123,9 @@ function WorkspaceProfileMenu({
127
123
  page
128
124
  }) {
129
125
  const user = useUser();
130
- const config = useAtomValue(configAtom);
131
- const isLocal = useAtomValue(localAtom);
132
- const canLogout = useAtomValue(canLogoutAtom);
133
- const [theme, setTheme] = useAtom(themeAtom);
126
+ const config = useAtomValueRaw(configAtom);
127
+ const isLocal = useAtomValueRaw(localAtom);
128
+ const canLogout = useAtomValueRaw(canLogoutAtom);
134
129
  const setUserRoles = useSetAtom(setUserRolesAtom);
135
130
  const setRoute = useSetAtom(routeAtom);
136
131
  const logout = useSetAtom(logoutAtom);
@@ -162,56 +157,49 @@ function WorkspaceProfileMenu({
162
157
  style: { padding: "0", boxShadow: "0 8px 20px rgba(0, 0, 0, 0.12)" },
163
158
  children: /* @__PURE__ */ jsxs("ul", { className: styles.WorkspaceRoots.profile.popover(), children: [
164
159
  /* @__PURE__ */ jsxs("li", { className: styles.WorkspaceRoots.profile.popover.user(), children: [
165
- /* @__PURE__ */ jsx("span", { className: styles.WorkspaceRoots.profile.popover.user.icon(), children: /* @__PURE__ */ jsx(IcBaselineAccountCircle, {}) }),
160
+ /* @__PURE__ */ jsx(
161
+ Icon,
162
+ {
163
+ icon: IcBaselineAccountCircle,
164
+ className: styles.WorkspaceRoots.profile.popover.user.icon()
165
+ }
166
+ ),
166
167
  /* @__PURE__ */ jsx(
167
168
  "span",
168
169
  {
169
170
  className: styles.WorkspaceRoots.profile.popover.user.title(),
170
171
  children: userName
171
172
  }
172
- ),
173
- /* @__PURE__ */ jsx(IcRoundMoreHoriz, {})
173
+ )
174
174
  ] }),
175
+ canManageMembers && /* @__PURE__ */ jsx("li", { className: styles.WorkspaceRoots.profile.popover.action(), children: /* @__PURE__ */ jsxs(
176
+ Button,
177
+ {
178
+ appearance: "plain",
179
+ "aria-label": "Manage users",
180
+ className: styles.WorkspaceRoots.profile.popover.action.button(),
181
+ onPress: () => setRoute({ page: "users" }),
182
+ children: [
183
+ /* @__PURE__ */ jsx(
184
+ Icon,
185
+ {
186
+ icon: IcOutlineSettings,
187
+ className: styles.WorkspaceRoots.profile.popover.action.icon()
188
+ }
189
+ ),
190
+ /* @__PURE__ */ jsx(
191
+ "span",
192
+ {
193
+ className: styles.WorkspaceRoots.profile.popover.action.label(),
194
+ children: "Manage users"
195
+ }
196
+ )
197
+ ]
198
+ }
199
+ ) }),
175
200
  /* @__PURE__ */ jsxs("li", { className: styles.WorkspaceRoots.profile.popover.item(), children: [
176
- /* @__PURE__ */ jsx("p", { className: styles.WorkspaceRoots.profile.popover.item.label(), children: "Theme" }),
177
- /* @__PURE__ */ jsxs(
178
- "div",
179
- {
180
- className: styles.WorkspaceRoots.profile.popover.themeOptions(),
181
- children: [
182
- /* @__PURE__ */ jsx(
183
- Button,
184
- {
185
- size: "icon",
186
- appearance: theme === "system" ? "active" : "outline",
187
- icon: IcRoundDesktopWindows,
188
- "aria-label": "Use system theme",
189
- onPress: () => setTheme("system")
190
- }
191
- ),
192
- /* @__PURE__ */ jsx(
193
- Button,
194
- {
195
- size: "icon",
196
- appearance: theme === "light" ? "active" : "outline",
197
- icon: IcRoundWbSunny,
198
- "aria-label": "Use light theme",
199
- onPress: () => setTheme("light")
200
- }
201
- ),
202
- /* @__PURE__ */ jsx(
203
- Button,
204
- {
205
- size: "icon",
206
- appearance: theme === "dark" ? "active" : "outline",
207
- icon: IcRoundBrightness2,
208
- "aria-label": "Use dark theme",
209
- onPress: () => setTheme("dark")
210
- }
211
- )
212
- ]
213
- }
214
- )
201
+ /* @__PURE__ */ jsx("p", { className: styles.WorkspaceRoots.profile.popover.item.label(), children: "Appearance" }),
202
+ /* @__PURE__ */ jsx(AppearanceToggle, {})
215
203
  ] }),
216
204
  isLocal && roleEntries.length > 0 && /* @__PURE__ */ jsxs("li", { className: styles.WorkspaceRoots.profile.popover.item(), children: [
217
205
  /* @__PURE__ */ jsx("p", { className: styles.WorkspaceRoots.profile.popover.item.label(), children: "Role" }),
@@ -245,31 +233,18 @@ function WorkspaceProfileMenu({
245
233
  className: styles.WorkspaceRoots.profile.popover.action.button(),
246
234
  onPress: logout,
247
235
  children: [
248
- /* @__PURE__ */ jsx(Icon, { icon: IcRoundLogout }),
249
236
  /* @__PURE__ */ jsx(
250
- "span",
237
+ Icon,
251
238
  {
252
- className: styles.WorkspaceRoots.profile.popover.action.label(),
253
- children: "Logout"
239
+ icon: IcRoundLogout,
240
+ className: styles.WorkspaceRoots.profile.popover.action.icon()
254
241
  }
255
- )
256
- ]
257
- }
258
- ) }),
259
- canManageMembers && /* @__PURE__ */ jsx("li", { className: styles.WorkspaceRoots.profile.popover.action(), children: /* @__PURE__ */ jsxs(
260
- Button,
261
- {
262
- appearance: "plain",
263
- "aria-label": "Manage users",
264
- className: styles.WorkspaceRoots.profile.popover.action.button(),
265
- onPress: () => setRoute({ page: "users" }),
266
- children: [
267
- /* @__PURE__ */ jsx(Icon, { icon: IcOutlineSettings }),
242
+ ),
268
243
  /* @__PURE__ */ jsx(
269
244
  "span",
270
245
  {
271
246
  className: styles.WorkspaceRoots.profile.popover.action.label(),
272
- children: "Manage users"
247
+ children: "Logout"
273
248
  }
274
249
  )
275
250
  ]
@@ -1,7 +1,7 @@
1
1
  import {
2
- useAtomValue
3
- } from "../../../chunks/chunk-U4VOHNR2.js";
4
- import "../../../chunks/chunk-Y7XOMJOC.js";
2
+ useAtomValueRaw
3
+ } from "../../../chunks/chunk-D6UJHBJJ.js";
4
+ import "../../../chunks/chunk-CFNRVI3Y.js";
5
5
  import {
6
6
  thumbHashToDataURL
7
7
  } from "../../../chunks/chunk-GWZU2AWQ.js";
@@ -28,45 +28,45 @@ import { NodeEditor } from "../EntryFields.js";
28
28
 
29
29
  // src/dashboard/app/editor/FileEditor.module.css
30
30
  var FileEditor_default = {
31
- "FileEditor-focus-header": "alinea-FileEditor-focus-header",
32
- "FileEditorFocusHeader": "alinea-FileEditor-focus-header",
33
- "is-full": "alinea-is-full",
34
- "isFull": "alinea-is-full",
35
- "FileEditor-metadata-value": "alinea-FileEditor-metadata-value",
36
- "FileEditorMetadataValue": "alinea-FileEditor-metadata-value",
37
- "FileEditor-metadata-term": "alinea-FileEditor-metadata-term",
38
- "FileEditorMetadataTerm": "alinea-FileEditor-metadata-term",
39
- "FileEditor-tabs": "alinea-FileEditor-tabs",
40
- "FileEditorTabs": "alinea-FileEditor-tabs",
41
- "FileEditor-metadata-item": "alinea-FileEditor-metadata-item",
42
- "FileEditorMetadataItem": "alinea-FileEditor-metadata-item",
43
31
  "is-link": "alinea-is-link",
44
32
  "isLink": "alinea-is-link",
45
33
  "FileEditor-metadataPanel": "alinea-FileEditor-metadataPanel",
46
34
  "FileEditorMetadataPanel": "alinea-FileEditor-metadataPanel",
35
+ "FileEditor-metadata": "alinea-FileEditor-metadata",
36
+ "FileEditorMetadata": "alinea-FileEditor-metadata",
37
+ "FileEditor-metadata-term": "alinea-FileEditor-metadata-term",
38
+ "FileEditorMetadataTerm": "alinea-FileEditor-metadata-term",
39
+ "FileEditor": "alinea-FileEditor",
40
+ "FileEditor-content": "alinea-FileEditor-content",
41
+ "FileEditorContent": "alinea-FileEditor-content",
47
42
  "FileEditor-focus-label": "alinea-FileEditor-focus-label",
48
43
  "FileEditorFocusLabel": "alinea-FileEditor-focus-label",
49
- "FileEditor-surface": "alinea-FileEditor-surface",
50
- "FileEditorSurface": "alinea-FileEditor-surface",
51
- "FileEditor-tabPanel": "alinea-FileEditor-tabPanel",
52
- "FileEditorTabPanel": "alinea-FileEditor-tabPanel",
44
+ "FileEditor-focus-value": "alinea-FileEditor-focus-value",
45
+ "FileEditorFocusValue": "alinea-FileEditor-focus-value",
46
+ "is-full": "alinea-is-full",
47
+ "isFull": "alinea-is-full",
53
48
  "FileEditor-focus": "alinea-FileEditor-focus",
54
49
  "FileEditorFocus": "alinea-FileEditor-focus",
50
+ "FileEditor-focus-description": "alinea-FileEditor-focus-description",
51
+ "FileEditorFocusDescription": "alinea-FileEditor-focus-description",
52
+ "FileEditor-tabPanel": "alinea-FileEditor-tabPanel",
53
+ "FileEditorTabPanel": "alinea-FileEditor-tabPanel",
54
+ "FileEditor-metadata-value": "alinea-FileEditor-metadata-value",
55
+ "FileEditorMetadataValue": "alinea-FileEditor-metadata-value",
55
56
  "FileEditor-tabs-header": "alinea-FileEditor-tabs-header",
56
57
  "FileEditorTabsHeader": "alinea-FileEditor-tabs-header",
57
- "FileEditor-content": "alinea-FileEditor-content",
58
- "FileEditorContent": "alinea-FileEditor-content",
59
- "FileEditor-metadata": "alinea-FileEditor-metadata",
60
- "FileEditorMetadata": "alinea-FileEditor-metadata",
61
- "FileEditor": "alinea-FileEditor",
58
+ "FileEditor-surface": "alinea-FileEditor-surface",
59
+ "FileEditorSurface": "alinea-FileEditor-surface",
60
+ "FileEditor-focus-header": "alinea-FileEditor-focus-header",
61
+ "FileEditorFocusHeader": "alinea-FileEditor-focus-header",
62
+ "is-image": "alinea-is-image",
63
+ "isImage": "alinea-is-image",
62
64
  "FileEditor-metadata-grid": "alinea-FileEditor-metadata-grid",
63
65
  "FileEditorMetadataGrid": "alinea-FileEditor-metadata-grid",
64
- "FileEditor-focus-description": "alinea-FileEditor-focus-description",
65
- "FileEditorFocusDescription": "alinea-FileEditor-focus-description",
66
- "FileEditor-focus-value": "alinea-FileEditor-focus-value",
67
- "FileEditorFocusValue": "alinea-FileEditor-focus-value",
68
- "is-image": "alinea-is-image",
69
- "isImage": "alinea-is-image"
66
+ "FileEditor-tabs": "alinea-FileEditor-tabs",
67
+ "FileEditorTabs": "alinea-FileEditor-tabs",
68
+ "FileEditor-metadata-item": "alinea-FileEditor-metadata-item",
69
+ "FileEditorMetadataItem": "alinea-FileEditor-metadata-item"
70
70
  };
71
71
 
72
72
  // src/dashboard/app/editor/FileEditor.tsx
@@ -82,7 +82,7 @@ var metadataFields = type("Metadata", {
82
82
  }
83
83
  });
84
84
  function FileEditor({ entry, parentPaths }) {
85
- const config = useAtomValue(configAtom);
85
+ const config = useAtomValueRaw(configAtom);
86
86
  const location = useFieldValue(MediaFile.location);
87
87
  const path = useFieldValue(MediaFile.path);
88
88
  const extension = useFieldValue(MediaFile.extension);
@@ -10,16 +10,16 @@ import { useEffect, useRef, useState } from "react";
10
10
 
11
11
  // src/dashboard/app/editor/FilePreview.module.css
12
12
  var FilePreview_default = {
13
- "FilePreview-interactive": "alinea-FilePreview-interactive",
14
- "FilePreviewInteractive": "alinea-FilePreview-interactive",
15
13
  "FilePreview-image": "alinea-FilePreview-image",
16
14
  "FilePreviewImage": "alinea-FilePreview-image",
15
+ "FilePreview-interactive": "alinea-FilePreview-interactive",
16
+ "FilePreviewInteractive": "alinea-FilePreview-interactive",
17
+ "FilePreview-focus-inner": "alinea-FilePreview-focus-inner",
18
+ "FilePreviewFocusInner": "alinea-FilePreview-focus-inner",
17
19
  "FilePreview-focus-dot": "alinea-FilePreview-focus-dot",
18
20
  "FilePreviewFocusDot": "alinea-FilePreview-focus-dot",
19
21
  "FilePreview-focus": "alinea-FilePreview-focus",
20
22
  "FilePreviewFocus": "alinea-FilePreview-focus",
21
- "FilePreview-focus-inner": "alinea-FilePreview-focus-inner",
22
- "FilePreviewFocusInner": "alinea-FilePreview-focus-inner",
23
23
  "FilePreview": "alinea-FilePreview"
24
24
  };
25
25