alinea 2.0.0-preview.11 → 2.0.0-preview.13

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 (268) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/.mcp/later/dev.json +1 -1
  3. package/dist/.mcp/online/dev.json +1 -1
  4. package/dist/adapter/next/cms.js +16 -8
  5. package/dist/adapter/next/dashboardUrl.d.ts +6 -0
  6. package/dist/adapter/next/dashboardUrl.js +13 -0
  7. package/dist/adapter/next/syncCheck.d.ts +15 -2
  8. package/dist/adapter/next/syncCheck.js +26 -9
  9. package/dist/backend/Handler.js +5 -1
  10. package/dist/backend/api/BlobStore.d.ts +21 -0
  11. package/dist/backend/api/BlobStore.js +63 -0
  12. package/dist/backend/api/CreateBackend.js +10 -8
  13. package/dist/backend/api/DatabaseApi.d.ts +4 -1
  14. package/dist/backend/api/DatabaseApi.js +88 -4
  15. package/dist/backend/api/GithubApi.js +47 -24
  16. package/dist/backend/api/database.js +6 -6
  17. package/dist/bundled.d.ts +687 -248
  18. package/dist/chunks/{bun-sqlite-5SHXN3AT.js → bun-sqlite-RI6BYU5S.js} +3 -3
  19. package/dist/chunks/{chunk-YCQR5GRT.js → chunk-3QFSGTGF.js} +2 -3
  20. package/dist/chunks/{chunk-QJGGYF6E.js → chunk-4ZA6KZHS.js} +5 -5
  21. package/dist/chunks/{chunk-ASYKC6IE.js → chunk-5H4D5JQL.js} +1 -1
  22. package/dist/chunks/{chunk-ETWOY4AL.js → chunk-A2I6MCCS.js} +1 -1
  23. package/dist/chunks/{chunk-W5AXN7GH.js → chunk-CYVOGRSD.js} +1 -2
  24. package/dist/chunks/{chunk-TIJTT5ZI.js → chunk-G43W7AME.js} +1 -0
  25. package/dist/chunks/{chunk-RE523BQ7.js → chunk-HOETF6HN.js} +5829 -5830
  26. package/dist/chunks/{chunk-AIU6CMVT.js → chunk-PTYZMV5G.js} +1 -1
  27. package/dist/chunks/{chunk-JOF663EG.js → chunk-QHHMKJUO.js} +1 -1
  28. package/dist/chunks/{chunk-66YZ47TY.js → chunk-RAR44T5O.js} +1 -1
  29. package/dist/chunks/{chunk-QSN6RH6X.js → chunk-VA6NC3MI.js} +1 -1
  30. package/dist/chunks/{node-sqlite-XVNTNMCY.js → node-sqlite-C7VJ2NSN.js} +3 -3
  31. package/dist/cli/Mcp.js +1 -1
  32. package/dist/cli/Serve.js +1 -1
  33. package/dist/cli/bin.js +2 -3
  34. package/dist/cli/generate/GenerateDashboard.js +17 -5
  35. package/dist/cli/serve/mcp/DevMcp.js +1 -1
  36. package/dist/cli/serve/mcp/McpTools.js +29 -1
  37. package/dist/cli/static/dashboard/entry.js +2 -1
  38. package/dist/cloud/CloudRemote.js +1 -1
  39. package/dist/components/Alert.js +3 -3
  40. package/dist/components/AppShell.js +2 -2
  41. package/dist/components/Badge.d.ts +3 -1
  42. package/dist/components/Badge.js +5 -3
  43. package/dist/components/Breadcrumbs.js +6 -6
  44. package/dist/components/Button.d.ts +6 -1
  45. package/dist/components/Button.js +14 -5
  46. package/dist/components/Calendar.js +20 -20
  47. package/dist/components/Checkbox.js +9 -9
  48. package/dist/components/CheckboxGroup.js +4 -4
  49. package/dist/components/Collapsible.js +3 -3
  50. package/dist/components/ColorSwatch.js +2 -2
  51. package/dist/components/ColorSwatchPicker.js +2 -2
  52. package/dist/components/ComboBox.js +7 -7
  53. package/dist/components/Command.js +10 -9
  54. package/dist/components/ContentCard.d.ts +3 -1
  55. package/dist/components/ContentCard.js +39 -17
  56. package/dist/components/ContentGrid.js +15 -15
  57. package/dist/components/DataList.js +2 -2
  58. package/dist/components/DateField.js +2 -2
  59. package/dist/components/DatePicker.js +2 -2
  60. package/dist/components/DateRangePicker.js +2 -2
  61. package/dist/components/Dialog.js +6 -6
  62. package/dist/components/DropZone.js +4 -4
  63. package/dist/components/DropdownMenu.js +10 -10
  64. package/dist/components/Empty.js +4 -4
  65. package/dist/components/Field.js +8 -8
  66. package/dist/components/List.js +23 -23
  67. package/dist/components/MediaPreview.js +5 -5
  68. package/dist/components/MultipleSelect.js +20 -20
  69. package/dist/components/NavRail.js +4 -4
  70. package/dist/components/NumberField.js +5 -5
  71. package/dist/components/Page.js +5 -5
  72. package/dist/components/Popover.js +2 -2
  73. package/dist/components/PreviewFrame.js +5 -5
  74. package/dist/components/RadioGroup.js +6 -6
  75. package/dist/components/Resizable.js +5 -5
  76. package/dist/components/SearchField.d.ts +6 -1
  77. package/dist/components/SearchField.js +7 -5
  78. package/dist/components/Select.js +14 -14
  79. package/dist/components/Sheet.d.ts +50 -0
  80. package/dist/components/Sheet.js +202 -0
  81. package/dist/components/Sidebar.js +4 -4
  82. package/dist/components/SortableList.d.ts +34 -30
  83. package/dist/components/SortableList.js +162 -265
  84. package/dist/components/Spinner.js +1 -1
  85. package/dist/components/Surface.js +2 -2
  86. package/dist/components/Switch.js +7 -7
  87. package/dist/components/Table.d.ts +3 -1
  88. package/dist/components/Table.js +53 -42
  89. package/dist/components/Tabs.js +5 -5
  90. package/dist/components/TagGroup.js +9 -9
  91. package/dist/components/TextField.js +10 -10
  92. package/dist/components/TimeField.js +8 -8
  93. package/dist/components/Timestamp.js +1 -1
  94. package/dist/components/ToggleGroup.js +2 -2
  95. package/dist/components/Toolbar.js +4 -4
  96. package/dist/components/Tooltip.js +5 -5
  97. package/dist/components/Tree.js +29 -29
  98. package/dist/components/internal/DateControl.js +10 -10
  99. package/dist/components/internal/ListBoxOption.js +13 -13
  100. package/dist/components/internal/Locale.js +2 -2
  101. package/dist/components/internal/PopoverSurface.js +2 -2
  102. package/dist/components/internal/SelectionCheckbox.js +6 -6
  103. package/dist/components/internal/Slot.js +1 -1
  104. package/dist/components/internal/ToggleButton.js +3 -3
  105. package/dist/components/internal/Trigger.js +2 -2
  106. package/dist/components/internal/sortableDrag.d.ts +19 -0
  107. package/dist/components/internal/sortableDrag.js +175 -0
  108. package/dist/components/internal/useDragDrop.js +2 -2
  109. package/dist/components.d.ts +1 -0
  110. package/dist/components.js +1 -0
  111. package/dist/core/Config.d.ts +6 -1
  112. package/dist/core/Document.d.ts +9 -1
  113. package/dist/core/Document.js +31 -6
  114. package/dist/core/Overview.d.ts +2 -4
  115. package/dist/core/TextDoc.d.ts +4 -0
  116. package/dist/core/Validation.d.ts +0 -1
  117. package/dist/core/Validation.js +0 -6
  118. package/dist/core/field/RichTextField.js +23 -4
  119. package/dist/core/media/MediaTypes.js +1 -1
  120. package/dist/core/source/GithubSource.d.ts +4 -0
  121. package/dist/core/source/GithubSource.js +127 -25
  122. package/dist/core/source/GithubUsage.d.ts +21 -0
  123. package/dist/core/source/GithubUsage.js +47 -0
  124. package/dist/dashboard/App.d.ts +2 -2
  125. package/dist/dashboard/App.js +5 -3
  126. package/dist/dashboard/ViewKeys.d.ts +1 -0
  127. package/dist/dashboard/ViewKeys.js +1 -0
  128. package/dist/dashboard/app/ActivityStatus.js +11 -11
  129. package/dist/dashboard/app/AuthView.js +5 -5
  130. package/dist/dashboard/app/BlockSheet.d.ts +50 -0
  131. package/dist/dashboard/app/BlockSheet.js +207 -0
  132. package/dist/dashboard/app/BlockSheetStoryFrame.d.ts +6 -0
  133. package/dist/dashboard/app/BlockSheetStoryFrame.js +29 -0
  134. package/dist/dashboard/app/CompactField.js +15 -15
  135. package/dist/dashboard/app/CroppedImage.js +2 -2
  136. package/dist/dashboard/app/DashboardErrorBoundary.js +3 -3
  137. package/dist/dashboard/app/DashboardLayout.js +3 -1
  138. package/dist/dashboard/app/EntryHeader.js +32 -33
  139. package/dist/dashboard/app/EntryReferences.js +5 -5
  140. package/dist/dashboard/app/EntrySidebar.js +8 -8
  141. package/dist/dashboard/app/EntrySidebarPreview.js +4 -4
  142. package/dist/dashboard/app/EntryStatusIcon.d.ts +23 -0
  143. package/dist/dashboard/app/EntryStatusIcon.js +58 -0
  144. package/dist/dashboard/app/EntryValidationModal.d.ts +6 -5
  145. package/dist/dashboard/app/EntryValidationModal.js +18 -18
  146. package/dist/dashboard/app/Explorer.d.ts +3 -1
  147. package/dist/dashboard/app/Explorer.js +51 -47
  148. package/dist/dashboard/app/ExplorerBatchActions.d.ts +3 -1
  149. package/dist/dashboard/app/ExplorerBatchActions.js +68 -43
  150. package/dist/dashboard/app/ExplorerCards.js +7 -1
  151. package/dist/dashboard/app/ExplorerControls.js +6 -6
  152. package/dist/dashboard/app/ExplorerList.js +5 -5
  153. package/dist/dashboard/app/ExplorerModal.js +1 -1
  154. package/dist/dashboard/app/ExplorerTable.js +14 -11
  155. package/dist/dashboard/app/ImageEditor.js +25 -25
  156. package/dist/dashboard/app/ImagePicker.js +3 -13
  157. package/dist/dashboard/app/LinkPicker.js +29 -27
  158. package/dist/dashboard/app/LocaleMenu.js +7 -7
  159. package/dist/dashboard/app/MediaPreviewCell.js +2 -2
  160. package/dist/dashboard/app/MoveConfirmDialog.d.ts +5 -0
  161. package/dist/dashboard/app/MoveConfirmDialog.js +79 -0
  162. package/dist/dashboard/app/OverviewCell.js +8 -13
  163. package/dist/dashboard/app/ReadOnlyBadge.d.ts +1 -1
  164. package/dist/dashboard/app/RemoveDialog.d.ts +17 -0
  165. package/dist/dashboard/app/{DeleteDialog.js → RemoveDialog.js} +67 -27
  166. package/dist/dashboard/app/RemoveRedirect.d.ts +7 -0
  167. package/dist/dashboard/app/RemoveRedirect.js +123 -0
  168. package/dist/dashboard/app/SearchBar.d.ts +9 -0
  169. package/dist/dashboard/app/SearchBar.js +31 -0
  170. package/dist/dashboard/app/SidebarTree.js +29 -74
  171. package/dist/dashboard/app/WorkspaceMenu.js +8 -8
  172. package/dist/dashboard/app/WorkspaceRoots.js +11 -11
  173. package/dist/dashboard/app/editor/FileEditor.js +16 -16
  174. package/dist/dashboard/app/modals/CreateEntry.js +5 -5
  175. package/dist/dashboard/app/pages/EntryPage.d.ts +2 -1
  176. package/dist/dashboard/app/pages/EntryPage.js +35 -16
  177. package/dist/dashboard/app/pages/SplashPage.js +35 -35
  178. package/dist/dashboard/app/pages/UsersPage.js +14 -14
  179. package/dist/dashboard/app/ui/DashboardModal.js +17 -16
  180. package/dist/dashboard/atoms/dashboard.js +1 -1
  181. package/dist/dashboard/atoms/entry.js +1 -14
  182. package/dist/dashboard/atoms/entryTable.js +1 -0
  183. package/dist/dashboard/atoms/explorer.d.ts +4 -0
  184. package/dist/dashboard/atoms/explorer.js +19 -7
  185. package/dist/dashboard/atoms/graph.js +1 -1
  186. package/dist/dashboard/atoms/link.js +5 -2
  187. package/dist/dashboard/atoms/move.d.ts +5 -0
  188. package/dist/dashboard/atoms/move.js +29 -3
  189. package/dist/dashboard/atoms/moveConfirmation.d.ts +34 -0
  190. package/dist/dashboard/atoms/moveConfirmation.js +95 -0
  191. package/dist/dashboard/atoms/nav.d.ts +9 -5
  192. package/dist/dashboard/atoms/nav.js +120 -45
  193. package/dist/dashboard/atoms/overview.d.ts +6 -5
  194. package/dist/dashboard/atoms/overview.js +2 -16
  195. package/dist/dashboard/atoms/remove.d.ts +112 -0
  196. package/dist/dashboard/atoms/remove.js +268 -0
  197. package/dist/dashboard/atoms/root.d.ts +2 -2
  198. package/dist/dashboard/atoms/root.js +41 -26
  199. package/dist/dashboard/atoms/user.js +1 -1
  200. package/dist/dashboard/atoms/utils.js +1 -1
  201. package/dist/dashboard/boot/Boot.js +25 -17
  202. package/dist/dashboard/boot/BootProd.d.ts +6 -1
  203. package/dist/dashboard/boot/BootProd.js +2 -2
  204. package/dist/dashboard/boot/DashboardWorker.d.ts +1 -0
  205. package/dist/dashboard/boot/DashboardWorker.js +18 -18
  206. package/dist/dashboard/boot/LoadWorker.js +17 -10
  207. package/dist/dashboard/cms/EntryTable.js +6 -3
  208. package/dist/database/BrowserEntryStore.d.ts +17 -29
  209. package/dist/database/BrowserEntryStore.js +116 -144
  210. package/dist/database/DatabaseTables.js +2 -2
  211. package/dist/database/EntryDatabase.js +21 -1
  212. package/dist/database/EntryTransaction.js +0 -35
  213. package/dist/database/EntryUrlAliases.d.ts +4 -0
  214. package/dist/database/EntryUrlAliases.js +16 -10
  215. package/dist/database/driver/RuntimeDatabase.js +3 -3
  216. package/dist/database/driver/WasmDatabase.d.ts +5 -18
  217. package/dist/database/driver/WasmDatabase.js +15 -16
  218. package/dist/database/entry/EntryTable.js +2 -2
  219. package/dist/database/query/EntryQuery.js +1 -1
  220. package/dist/database/query/Relation.js +1 -1
  221. package/dist/database/query/Search.js +2 -2
  222. package/dist/field/check/CheckField.view.js +2 -2
  223. package/dist/field/code/CodeField.view.js +14 -14
  224. package/dist/field/link/EntryLink.d.ts +4 -4
  225. package/dist/field/link/FileLink.d.ts +4 -4
  226. package/dist/field/link/ImageLink.d.ts +4 -4
  227. package/dist/field/link/Link.d.ts +1 -1
  228. package/dist/field/link/LinkField.d.ts +5 -0
  229. package/dist/field/link/LinkField.view.js +246 -372
  230. package/dist/field/link/UrlLink.d.ts +4 -4
  231. package/dist/field/list/ListField.d.ts +2 -0
  232. package/dist/field/list/ListField.view.d.ts +15 -0
  233. package/dist/field/list/ListField.view.js +343 -301
  234. package/dist/field/metadata/MetadataField.d.ts +17 -7
  235. package/dist/field/metadata/MetadataField.js +14 -3
  236. package/dist/field/metadata/MetadataField.view.d.ts +1 -0
  237. package/dist/field/metadata/MetadataField.view.js +27 -23
  238. package/dist/field/richtext/RichTextBlock.d.ts +3 -1
  239. package/dist/field/richtext/RichTextBlock.js +178 -75
  240. package/dist/field/richtext/RichTextBlockHost.js +1 -1
  241. package/dist/field/richtext/RichTextExtensions.js +35 -35
  242. package/dist/field/richtext/RichTextField.view.js +14 -8
  243. package/dist/field/richtext/RichTextInsertMenu.js +43 -27
  244. package/dist/field/views.js +2 -0
  245. package/dist/index.css +490 -309
  246. package/dist/picker/url/UrlPicker.js +1 -0
  247. package/docs/components/badge.md +1 -0
  248. package/docs/components/button.md +1 -0
  249. package/docs/components/content-card.md +1 -0
  250. package/docs/components/search-field.md +1 -0
  251. package/docs/components/sortable-list.md +5 -20
  252. package/docs/components/table.md +1 -0
  253. package/docs/configuration.md +1 -1
  254. package/docs/deploy/self-host.md +1 -1
  255. package/docs/deploy.md +5 -4
  256. package/docs/fields.md +1 -1
  257. package/docs/index.md +1 -1
  258. package/docs/instant-publishing.md +7 -22
  259. package/docs/overviews.md +3 -4
  260. package/docs/upgrading.md +3 -2
  261. package/llms-full.txt +31 -55
  262. package/package.json +2 -3
  263. package/dist/core/db/EntryValidationError.d.ts +0 -13
  264. package/dist/core/db/EntryValidationError.js +0 -23
  265. package/dist/dashboard/app/DeleteDialog.d.ts +0 -11
  266. package/dist/dashboard/atoms/delete.d.ts +0 -68
  267. package/dist/dashboard/atoms/delete.js +0 -143
  268. package/dist/chunks/{chunk-MOWR65LM.js → chunk-PYDOMKJZ.js} +71 -71
@@ -49,24 +49,24 @@ import { WorkspaceAvatarMenu } from "./WorkspaceMenu.js";
49
49
 
50
50
  // src/dashboard/app/WorkspaceRoots.module.css
51
51
  var WorkspaceRoots_default = {
52
+ "WorkspaceRoots-trigger": "alinea-WorkspaceRoots-trigger",
53
+ "WorkspaceRootsTrigger": "alinea-WorkspaceRoots-trigger",
52
54
  "WorkspaceRoots-profile-popover-action-button": "alinea-WorkspaceRoots-profile-popover-action-button",
53
55
  "WorkspaceRootsProfilePopoverActionButton": "alinea-WorkspaceRoots-profile-popover-action-button",
54
- "WorkspaceRoots-profile-popover-user-title": "alinea-WorkspaceRoots-profile-popover-user-title",
55
- "WorkspaceRootsProfilePopoverUserTitle": "alinea-WorkspaceRoots-profile-popover-user-title",
56
- "WorkspaceRoots-profile-popover-surface": "alinea-WorkspaceRoots-profile-popover-surface",
57
- "WorkspaceRootsProfilePopoverSurface": "alinea-WorkspaceRoots-profile-popover-surface",
58
56
  "WorkspaceRoots-profile-popover-user-icon": "alinea-WorkspaceRoots-profile-popover-user-icon",
59
57
  "WorkspaceRootsProfilePopoverUserIcon": "alinea-WorkspaceRoots-profile-popover-user-icon",
60
- "WorkspaceRoots-trigger": "alinea-WorkspaceRoots-trigger",
61
- "WorkspaceRootsTrigger": "alinea-WorkspaceRoots-trigger",
62
- "WorkspaceRoots-profile-popover-action": "alinea-WorkspaceRoots-profile-popover-action",
63
- "WorkspaceRootsProfilePopoverAction": "alinea-WorkspaceRoots-profile-popover-action",
64
- "WorkspaceRoots-profile-popover": "alinea-WorkspaceRoots-profile-popover",
65
- "WorkspaceRootsProfilePopover": "alinea-WorkspaceRoots-profile-popover",
58
+ "WorkspaceRoots-profile-popover-surface": "alinea-WorkspaceRoots-profile-popover-surface",
59
+ "WorkspaceRootsProfilePopoverSurface": "alinea-WorkspaceRoots-profile-popover-surface",
66
60
  "WorkspaceRoots-profile-popover-user": "alinea-WorkspaceRoots-profile-popover-user",
67
61
  "WorkspaceRootsProfilePopoverUser": "alinea-WorkspaceRoots-profile-popover-user",
68
62
  "WorkspaceRoots-profile-popover-item": "alinea-WorkspaceRoots-profile-popover-item",
69
- "WorkspaceRootsProfilePopoverItem": "alinea-WorkspaceRoots-profile-popover-item"
63
+ "WorkspaceRootsProfilePopoverItem": "alinea-WorkspaceRoots-profile-popover-item",
64
+ "WorkspaceRoots-profile-popover": "alinea-WorkspaceRoots-profile-popover",
65
+ "WorkspaceRootsProfilePopover": "alinea-WorkspaceRoots-profile-popover",
66
+ "WorkspaceRoots-profile-popover-user-title": "alinea-WorkspaceRoots-profile-popover-user-title",
67
+ "WorkspaceRootsProfilePopoverUserTitle": "alinea-WorkspaceRoots-profile-popover-user-title",
68
+ "WorkspaceRoots-profile-popover-action": "alinea-WorkspaceRoots-profile-popover-action",
69
+ "WorkspaceRootsProfilePopoverAction": "alinea-WorkspaceRoots-profile-popover-action"
70
70
  };
71
71
 
72
72
  // src/dashboard/app/WorkspaceRoots.tsx
@@ -47,33 +47,33 @@ import { NodeEditor } from "../NodeEditor.js";
47
47
 
48
48
  // src/dashboard/app/editor/FileEditor.module.css
49
49
  var FileEditor_default = {
50
- "FileEditor-focus-header": "alinea-FileEditor-focus-header",
51
- "FileEditorFocusHeader": "alinea-FileEditor-focus-header",
52
- "FileEditor-fields": "alinea-FileEditor-fields",
53
- "FileEditorFields": "alinea-FileEditor-fields",
54
- "FileEditor-content": "alinea-FileEditor-content",
55
- "FileEditorContent": "alinea-FileEditor-content",
56
- "FileEditor-focus-label": "alinea-FileEditor-focus-label",
57
- "FileEditorFocusLabel": "alinea-FileEditor-focus-label",
58
50
  "FileEditor-tabs-header": "alinea-FileEditor-tabs-header",
59
51
  "FileEditorTabsHeader": "alinea-FileEditor-tabs-header",
52
+ "FileEditor-details": "alinea-FileEditor-details",
53
+ "FileEditorDetails": "alinea-FileEditor-details",
54
+ "FileEditor-surface": "alinea-FileEditor-surface",
55
+ "FileEditorSurface": "alinea-FileEditor-surface",
60
56
  "FileEditor-tabs": "alinea-FileEditor-tabs",
61
57
  "FileEditorTabs": "alinea-FileEditor-tabs",
58
+ "FileEditor-focus-header": "alinea-FileEditor-focus-header",
59
+ "FileEditorFocusHeader": "alinea-FileEditor-focus-header",
60
+ "FileEditor": "alinea-FileEditor",
61
+ "FileEditor-focus-label": "alinea-FileEditor-focus-label",
62
+ "FileEditorFocusLabel": "alinea-FileEditor-focus-label",
62
63
  "FileEditor-tabPanel": "alinea-FileEditor-tabPanel",
63
64
  "FileEditorTabPanel": "alinea-FileEditor-tabPanel",
65
+ "FileEditor-focus-value": "alinea-FileEditor-focus-value",
66
+ "FileEditorFocusValue": "alinea-FileEditor-focus-value",
67
+ "FileEditor-content": "alinea-FileEditor-content",
68
+ "FileEditorContent": "alinea-FileEditor-content",
64
69
  "FileEditor-focus": "alinea-FileEditor-focus",
65
70
  "FileEditorFocus": "alinea-FileEditor-focus",
66
71
  "FileEditor-focus-description": "alinea-FileEditor-focus-description",
67
72
  "FileEditorFocusDescription": "alinea-FileEditor-focus-description",
68
- "FileEditor-focus-value": "alinea-FileEditor-focus-value",
69
- "FileEditorFocusValue": "alinea-FileEditor-focus-value",
70
- "FileEditor": "alinea-FileEditor",
71
- "FileEditor-surface": "alinea-FileEditor-surface",
72
- "FileEditorSurface": "alinea-FileEditor-surface",
73
- "FileEditor-details": "alinea-FileEditor-details",
74
- "FileEditorDetails": "alinea-FileEditor-details",
75
73
  "FileEditor-metadata": "alinea-FileEditor-metadata",
76
- "FileEditorMetadata": "alinea-FileEditor-metadata"
74
+ "FileEditorMetadata": "alinea-FileEditor-metadata",
75
+ "FileEditor-fields": "alinea-FileEditor-fields",
76
+ "FileEditorFields": "alinea-FileEditor-fields"
77
77
  };
78
78
 
79
79
  // src/dashboard/app/editor/FileEditor.tsx
@@ -55,14 +55,14 @@ import {
55
55
 
56
56
  // src/dashboard/app/modals/CreateEntry.module.css
57
57
  var CreateEntry_default = {
58
- "CreateEntry-insertOrder-toggle": "alinea-CreateEntry-insertOrder-toggle",
59
- "CreateEntryInsertOrderToggle": "alinea-CreateEntry-insertOrder-toggle",
60
58
  "CreateEntry-parentRow": "alinea-CreateEntry-parentRow",
61
59
  "CreateEntryParentRow": "alinea-CreateEntry-parentRow",
62
- "CreateEntry-insertOrder": "alinea-CreateEntry-insertOrder",
63
- "CreateEntryInsertOrder": "alinea-CreateEntry-insertOrder",
60
+ "CreateEntry-insertOrder-toggle": "alinea-CreateEntry-insertOrder-toggle",
61
+ "CreateEntryInsertOrderToggle": "alinea-CreateEntry-insertOrder-toggle",
64
62
  "CreateEntry-parentField": "alinea-CreateEntry-parentField",
65
- "CreateEntryParentField": "alinea-CreateEntry-parentField"
63
+ "CreateEntryParentField": "alinea-CreateEntry-parentField",
64
+ "CreateEntry-insertOrder": "alinea-CreateEntry-insertOrder",
65
+ "CreateEntryInsertOrder": "alinea-CreateEntry-insertOrder"
66
66
  };
67
67
 
68
68
  // src/dashboard/app/modals/CreateEntry.tsx
@@ -1,5 +1,6 @@
1
1
  import { Page } from 'alinea/dashboard/atoms/nav';
2
- export declare const entryPage: (page: Page, get: import("jotai").Getter) => import("react").ReactNode | Promise<import("react").ReactNode>;
2
+ import { type ReactNode } from 'react';
3
+ export declare const entryPage: (page: Page, get: import("jotai").Getter) => ReactNode | Promise<ReactNode>;
3
4
  export interface NotFoundPanelProps {
4
5
  title: string;
5
6
  message: string;
@@ -65,6 +65,11 @@ import {
65
65
  import { EntryTranslationBanner } from "./../EntryTranslationBanner.js";
66
66
  import { Explorer } from "./../Explorer.js";
67
67
  import { SidebarLayout } from "../SidebarLayout.js";
68
+ import {
69
+ BlockSheetProvider,
70
+ BlockSheetSlot,
71
+ useBlockSheetOpen
72
+ } from "../BlockSheet.js";
68
73
  import {
69
74
  DashboardModal,
70
75
  DashboardModalContent,
@@ -76,19 +81,21 @@ import {
76
81
  var EntryPage_default = {
77
82
  "EntryEditor-body": "alinea-EntryEditor-body",
78
83
  "EntryEditorBody": "alinea-EntryEditor-body",
79
- "EntryEditor-fields": "alinea-EntryEditor-fields",
80
- "EntryEditorFields": "alinea-EntryEditor-fields",
84
+ "MissingEntry-media": "alinea-MissingEntry-media",
85
+ "MissingEntryMedia": "alinea-MissingEntry-media",
86
+ "EntryEditorLayout-sidebar": "alinea-EntryEditorLayout-sidebar",
87
+ "EntryEditorLayoutSidebar": "alinea-EntryEditorLayout-sidebar",
88
+ "EntryEditor-toolbar": "alinea-EntryEditor-toolbar",
89
+ "EntryEditorToolbar": "alinea-EntryEditor-toolbar",
81
90
  "EntryEditorContent-navigationActions": "alinea-EntryEditorContent-navigationActions",
82
91
  "EntryEditorContentNavigationActions": "alinea-EntryEditorContent-navigationActions",
92
+ "EntryEditor-fields": "alinea-EntryEditor-fields",
93
+ "EntryEditorFields": "alinea-EntryEditor-fields",
83
94
  "EntryEditor-banner": "alinea-EntryEditor-banner",
84
95
  "EntryEditorBanner": "alinea-EntryEditor-banner",
85
- "EntryOverview-mobileActions": "alinea-EntryOverview-mobileActions",
86
- "EntryOverviewMobileActions": "alinea-EntryOverview-mobileActions",
87
96
  "MissingEntry": "alinea-MissingEntry",
88
- "MissingEntry-media": "alinea-MissingEntry-media",
89
- "MissingEntryMedia": "alinea-MissingEntry-media",
90
- "EntryEditor-toolbar": "alinea-EntryEditor-toolbar",
91
- "EntryEditorToolbar": "alinea-EntryEditor-toolbar"
97
+ "EntryOverview-mobileActions": "alinea-EntryOverview-mobileActions",
98
+ "EntryOverviewMobileActions": "alinea-EntryOverview-mobileActions"
92
99
  };
93
100
 
94
101
  // src/dashboard/app/pages/EntryPage.tsx
@@ -386,7 +393,7 @@ function EntryEditorContent({
386
393
  children: routeBlock && /* @__PURE__ */ jsxs(DashboardModalDialog, { label: "Confirm navigation", children: [
387
394
  /* @__PURE__ */ jsxs(DashboardModalContent, { children: [
388
395
  "This entry has unsaved changes",
389
- dirtyActions.publish && hasErrors ? ", fix the invalid fields before publishing" : ""
396
+ dirtyActions.publish && hasErrors ? ", and some fields are invalid" : ""
390
397
  ] }),
391
398
  /* @__PURE__ */ jsxs(DashboardModalFooter, { children: [
392
399
  /* @__PURE__ */ jsx(Button, { onClick: discardAndConfirm, variant: "ghost", children: "Discard my changes" }),
@@ -397,8 +404,7 @@ function EntryEditorContent({
397
404
  onClick: publishAndConfirm,
398
405
  color: canSaveDraft ? "secondary" : "primary",
399
406
  icon: IcRoundCheck,
400
- disabled: hasErrors,
401
- children: "Publish"
407
+ children: hasErrors ? "Publish anyway" : "Publish"
402
408
  }
403
409
  ),
404
410
  dirtyActions.saveDraft && /* @__PURE__ */ jsx(
@@ -422,19 +428,32 @@ function EntryEditorContent({
422
428
  localeData,
423
429
  richTextImages,
424
430
  selectedEntry,
425
- children: /* @__PURE__ */ jsx(
426
- SidebarLayout,
431
+ children: /* @__PURE__ */ jsx(BlockSheetProvider, { children: /* @__PURE__ */ jsx(
432
+ EntryEditorLayout,
427
433
  {
428
- side: "right",
429
- visible: Boolean(sidebar && isSidebarOpen),
430
434
  sidebar: sidebar && isSidebarOpen && /* @__PURE__ */ jsx(EntrySidebar, { ...sidebar, onOpenChange: setSidebarOpen }),
431
435
  children: mainEditor
432
436
  }
433
- )
437
+ ) })
434
438
  }
435
439
  )
436
440
  ] });
437
441
  }
442
+ function EntryEditorLayout({ sidebar, children }) {
443
+ const sheetOpen = useBlockSheetOpen();
444
+ return /* @__PURE__ */ jsx(
445
+ SidebarLayout,
446
+ {
447
+ side: "right",
448
+ visible: Boolean(sidebar) || sheetOpen,
449
+ sidebar: /* @__PURE__ */ jsxs("div", { className: styles.EntryEditorLayout.sidebar(), children: [
450
+ sidebar,
451
+ /* @__PURE__ */ jsx(BlockSheetSlot, {})
452
+ ] }),
453
+ children
454
+ }
455
+ );
456
+ }
438
457
  export {
439
458
  NotFoundPanel,
440
459
  entryPage
@@ -44,57 +44,57 @@ import { GlobalSearch, WorkspaceAvatar } from "../WorkspaceMenu.js";
44
44
 
45
45
  // src/dashboard/app/pages/SplashPage.module.css
46
46
  var SplashPage_default = {
47
- "SplashPage-entry-primary": "alinea-SplashPage-entry-primary",
48
- "SplashPageEntryPrimary": "alinea-SplashPage-entry-primary",
49
- "SplashPage-entry-visual": "alinea-SplashPage-entry-visual",
50
- "SplashPageEntryVisual": "alinea-SplashPage-entry-visual",
51
- "SplashPage-card-header-title": "alinea-SplashPage-card-header-title",
52
- "SplashPageCardHeaderTitle": "alinea-SplashPage-card-header-title",
53
- "SplashPage-card-header-label": "alinea-SplashPage-card-header-label",
54
- "SplashPageCardHeaderLabel": "alinea-SplashPage-card-header-label",
55
- "SplashPage-entry-title": "alinea-SplashPage-entry-title",
56
- "SplashPageEntryTitle": "alinea-SplashPage-entry-title",
57
- "SplashPage-grid": "alinea-SplashPage-grid",
58
- "SplashPageGrid": "alinea-SplashPage-grid",
59
47
  "SplashPage-content": "alinea-SplashPage-content",
60
48
  "SplashPageContent": "alinea-SplashPage-content",
49
+ "SplashPage-card-header-content": "alinea-SplashPage-card-header-content",
50
+ "SplashPageCardHeaderContent": "alinea-SplashPage-card-header-content",
51
+ "SplashPage-card-footer": "alinea-SplashPage-card-footer",
52
+ "SplashPageCardFooter": "alinea-SplashPage-card-footer",
53
+ "SplashPage-card-header-label": "alinea-SplashPage-card-header-label",
54
+ "SplashPageCardHeaderLabel": "alinea-SplashPage-card-header-label",
61
55
  "SplashPage-sidebar-content": "alinea-SplashPage-sidebar-content",
62
56
  "SplashPageSidebarContent": "alinea-SplashPage-sidebar-content",
63
- "SplashPage-card": "alinea-SplashPage-card",
64
- "SplashPageCard": "alinea-SplashPage-card",
65
- "SplashPage-card-header": "alinea-SplashPage-card-header",
66
- "SplashPageCardHeader": "alinea-SplashPage-card-header",
67
- "SplashPage-actionIcon": "alinea-SplashPage-actionIcon",
68
- "SplashPageActionIcon": "alinea-SplashPage-actionIcon",
69
57
  "SplashPage-entry": "alinea-SplashPage-entry",
70
58
  "SplashPageEntry": "alinea-SplashPage-entry",
71
- "SplashPage-root": "alinea-SplashPage-root",
72
- "SplashPageRoot": "alinea-SplashPage-root",
59
+ "SplashPage-entry-user": "alinea-SplashPage-entry-user",
60
+ "SplashPageEntryUser": "alinea-SplashPage-entry-user",
61
+ "SplashPage-entry-content": "alinea-SplashPage-entry-content",
62
+ "SplashPageEntryContent": "alinea-SplashPage-entry-content",
63
+ "SplashPage-entry-primary": "alinea-SplashPage-entry-primary",
64
+ "SplashPageEntryPrimary": "alinea-SplashPage-entry-primary",
65
+ "SplashPage-grid": "alinea-SplashPage-grid",
66
+ "SplashPageGrid": "alinea-SplashPage-grid",
67
+ "SplashPage-card-header-button": "alinea-SplashPage-card-header-button",
68
+ "SplashPageCardHeaderButton": "alinea-SplashPage-card-header-button",
69
+ "SplashPage-sidebar": "alinea-SplashPage-sidebar",
70
+ "SplashPageSidebar": "alinea-SplashPage-sidebar",
73
71
  "SplashPage-entry-meta": "alinea-SplashPage-entry-meta",
74
72
  "SplashPageEntryMeta": "alinea-SplashPage-entry-meta",
73
+ "SplashPage-actionIcon": "alinea-SplashPage-actionIcon",
74
+ "SplashPageActionIcon": "alinea-SplashPage-actionIcon",
75
+ "SplashPage-entry-visual": "alinea-SplashPage-entry-visual",
76
+ "SplashPageEntryVisual": "alinea-SplashPage-entry-visual",
77
+ "SplashPage-entries": "alinea-SplashPage-entries",
78
+ "SplashPageEntries": "alinea-SplashPage-entries",
75
79
  "SplashPage-entry-visual-icon": "alinea-SplashPage-entry-visual-icon",
76
80
  "SplashPageEntryVisualIcon": "alinea-SplashPage-entry-visual-icon",
77
- "SplashPage-card-footer": "alinea-SplashPage-card-footer",
78
- "SplashPageCardFooter": "alinea-SplashPage-card-footer",
79
81
  "SplashPage-user": "alinea-SplashPage-user",
80
82
  "SplashPageUser": "alinea-SplashPage-user",
81
83
  "SplashPage-action": "alinea-SplashPage-action",
82
84
  "SplashPageAction": "alinea-SplashPage-action",
83
- "SplashPage-card-header-content": "alinea-SplashPage-card-header-content",
84
- "SplashPageCardHeaderContent": "alinea-SplashPage-card-header-content",
85
- "SplashPage-entries": "alinea-SplashPage-entries",
86
- "SplashPageEntries": "alinea-SplashPage-entries",
87
- "SplashPage-sidebar": "alinea-SplashPage-sidebar",
88
- "SplashPageSidebar": "alinea-SplashPage-sidebar",
89
- "SplashPage-card-header-button": "alinea-SplashPage-card-header-button",
90
- "SplashPageCardHeaderButton": "alinea-SplashPage-card-header-button",
85
+ "SplashPage-card-header-title": "alinea-SplashPage-card-header-title",
86
+ "SplashPageCardHeaderTitle": "alinea-SplashPage-card-header-title",
87
+ "SplashPage-entry-title": "alinea-SplashPage-entry-title",
88
+ "SplashPageEntryTitle": "alinea-SplashPage-entry-title",
89
+ "SplashPage-root": "alinea-SplashPage-root",
90
+ "SplashPageRoot": "alinea-SplashPage-root",
91
91
  "SplashPage-appearance": "alinea-SplashPage-appearance",
92
92
  "SplashPageAppearance": "alinea-SplashPage-appearance",
93
- "SplashPage-entry-content": "alinea-SplashPage-entry-content",
94
- "SplashPageEntryContent": "alinea-SplashPage-entry-content",
95
- "SplashPage-entry-user": "alinea-SplashPage-entry-user",
96
- "SplashPageEntryUser": "alinea-SplashPage-entry-user",
97
- "SplashPage": "alinea-SplashPage"
93
+ "SplashPage-card": "alinea-SplashPage-card",
94
+ "SplashPageCard": "alinea-SplashPage-card",
95
+ "SplashPage": "alinea-SplashPage",
96
+ "SplashPage-card-header": "alinea-SplashPage-card-header",
97
+ "SplashPageCardHeader": "alinea-SplashPage-card-header"
98
98
  };
99
99
 
100
100
  // src/dashboard/app/pages/SplashPage.tsx
@@ -61,25 +61,25 @@ import {
61
61
 
62
62
  // src/dashboard/app/pages/UsersPage.module.css
63
63
  var UsersPage_default = {
64
- "UsersPage-content": "alinea-UsersPage-content",
65
- "UsersPageContent": "alinea-UsersPage-content",
66
- "UsersPage-status": "alinea-UsersPage-status",
67
- "UsersPageStatus": "alinea-UsersPage-status",
64
+ "UsersPage-roles": "alinea-UsersPage-roles",
65
+ "UsersPageRoles": "alinea-UsersPage-roles",
66
+ "UsersPage-identity": "alinea-UsersPage-identity",
67
+ "UsersPageIdentity": "alinea-UsersPage-identity",
68
68
  "UsersPage": "alinea-UsersPage",
69
- "UsersPage-search": "alinea-UsersPage-search",
70
- "UsersPageSearch": "alinea-UsersPage-search",
71
- "UsersPage-form-fields": "alinea-UsersPage-form-fields",
72
- "UsersPageFormFields": "alinea-UsersPage-form-fields",
73
69
  "UsersPage-header": "alinea-UsersPage-header",
74
70
  "UsersPageHeader": "alinea-UsersPage-header",
75
- "UsersPage-roles": "alinea-UsersPage-roles",
76
- "UsersPageRoles": "alinea-UsersPage-roles",
77
- "UsersPage-createButton": "alinea-UsersPage-createButton",
78
- "UsersPageCreateButton": "alinea-UsersPage-createButton",
79
71
  "UsersPage-table": "alinea-UsersPage-table",
80
72
  "UsersPageTable": "alinea-UsersPage-table",
81
- "UsersPage-identity": "alinea-UsersPage-identity",
82
- "UsersPageIdentity": "alinea-UsersPage-identity"
73
+ "UsersPage-search": "alinea-UsersPage-search",
74
+ "UsersPageSearch": "alinea-UsersPage-search",
75
+ "UsersPage-createButton": "alinea-UsersPage-createButton",
76
+ "UsersPageCreateButton": "alinea-UsersPage-createButton",
77
+ "UsersPage-content": "alinea-UsersPage-content",
78
+ "UsersPageContent": "alinea-UsersPage-content",
79
+ "UsersPage-status": "alinea-UsersPage-status",
80
+ "UsersPageStatus": "alinea-UsersPage-status",
81
+ "UsersPage-form-fields": "alinea-UsersPage-form-fields",
82
+ "UsersPageFormFields": "alinea-UsersPage-form-fields"
83
83
  };
84
84
 
85
85
  // src/dashboard/app/pages/UsersPage.tsx
@@ -21,31 +21,32 @@ import {
21
21
  useContext
22
22
  } from "react";
23
23
  import { IcRoundClose } from "../../icons.js";
24
+ import { BlockSheetBoundary } from "../BlockSheet.js";
24
25
 
25
26
  // src/dashboard/app/ui/DashboardModal.module.css
26
27
  var DashboardModal_default = {
27
- "DashboardModalTitle": "alinea-DashboardModalTitle",
28
- "DashboardModalFormFooter": "alinea-DashboardModalFormFooter",
29
- "DashboardModal-enter": "alinea-DashboardModal-enter",
30
- "DashboardModalEnter": "alinea-DashboardModal-enter",
31
- "DashboardModalForm": "alinea-DashboardModalForm",
32
- "DashboardModalDialog-header": "alinea-DashboardModalDialog-header",
33
- "DashboardModalDialogHeader": "alinea-DashboardModalDialog-header",
34
- "DashboardModalFooter": "alinea-DashboardModalFooter",
28
+ "DashboardModalFormBody": "alinea-DashboardModalFormBody",
35
29
  "DashboardModalDialog-loader": "alinea-DashboardModalDialog-loader",
36
30
  "DashboardModalDialogLoader": "alinea-DashboardModalDialog-loader",
37
- "DashboardModalContent": "alinea-DashboardModalContent",
38
- "DashboardModal-surface": "alinea-DashboardModal-surface",
39
- "DashboardModalSurface": "alinea-DashboardModal-surface",
40
- "DashboardModalCloseButton": "alinea-DashboardModalCloseButton",
41
31
  "DashboardModalFormHeader": "alinea-DashboardModalFormHeader",
42
- "DashboardModalDialog": "alinea-DashboardModalDialog",
43
32
  "is-loading": "alinea-is-loading",
44
33
  "isLoading": "alinea-is-loading",
34
+ "DashboardModalCloseButton": "alinea-DashboardModalCloseButton",
35
+ "DashboardModalContent": "alinea-DashboardModalContent",
36
+ "DashboardModalTitle": "alinea-DashboardModalTitle",
37
+ "DashboardModalFormFooter": "alinea-DashboardModalFormFooter",
38
+ "DashboardModalDialog": "alinea-DashboardModalDialog",
39
+ "DashboardModalFooter": "alinea-DashboardModalFooter",
40
+ "DashboardModal": "alinea-DashboardModal",
41
+ "DashboardModalForm": "alinea-DashboardModalForm",
42
+ "DashboardModalDialog-header": "alinea-DashboardModalDialog-header",
43
+ "DashboardModalDialogHeader": "alinea-DashboardModalDialog-header",
44
+ "DashboardModal-enter": "alinea-DashboardModal-enter",
45
+ "DashboardModalEnter": "alinea-DashboardModal-enter",
45
46
  "DashboardModalDialog-controls": "alinea-DashboardModalDialog-controls",
46
47
  "DashboardModalDialogControls": "alinea-DashboardModalDialog-controls",
47
- "DashboardModalFormBody": "alinea-DashboardModalFormBody",
48
- "DashboardModal": "alinea-DashboardModal"
48
+ "DashboardModal-surface": "alinea-DashboardModal-surface",
49
+ "DashboardModalSurface": "alinea-DashboardModal-surface"
49
50
  };
50
51
 
51
52
  // src/dashboard/app/ui/DashboardModal.tsx
@@ -68,7 +69,7 @@ function DashboardModal({
68
69
  showCloseButton: false,
69
70
  "aria-label": ariaLabel,
70
71
  className: styles.DashboardModal(),
71
- children: /* @__PURE__ */ jsx(DashboardModalLabel.Provider, { value: ariaLabel, children: /* @__PURE__ */ jsx(Surface, { className: styles.DashboardModal.surface(), children }) })
72
+ children: /* @__PURE__ */ jsx(DashboardModalLabel.Provider, { value: ariaLabel, children: /* @__PURE__ */ jsx(Surface, { className: styles.DashboardModal.surface(), children: /* @__PURE__ */ jsx(BlockSheetBoundary, { children }) }) })
72
73
  }
73
74
  );
74
75
  if (open === void 0) return content;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  atomWithStorage
3
- } from "../../chunks/chunk-TIJTT5ZI.js";
3
+ } from "../../chunks/chunk-G43W7AME.js";
4
4
  import {
5
5
  atom
6
6
  } from "../../chunks/chunk-CFNRVI3Y.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  unwrap
3
- } from "../../chunks/chunk-TIJTT5ZI.js";
3
+ } from "../../chunks/chunk-G43W7AME.js";
4
4
  import {
5
5
  atom
6
6
  } from "../../chunks/chunk-CFNRVI3Y.js";
@@ -9,7 +9,6 @@ import "../../chunks/chunk-CQ52GEHY.js";
9
9
  // src/dashboard/atoms/entry.ts
10
10
  import { JsonLoader } from "alinea/backend/loader/JsonLoader";
11
11
  import { Config } from "alinea/core/Config";
12
- import { EntryValidationError } from "alinea/core/db/EntryValidationError";
13
12
  import { Entry } from "alinea/core/Entry";
14
13
  import { createRecord, parseRecord } from "alinea/core/EntryRecord";
15
14
  import { Field } from "alinea/core/Field";
@@ -372,16 +371,6 @@ var EntryLocaleAtoms = class {
372
371
  hasErrors = dispense(
373
372
  (node) => atom((get) => get(this.errors(node)).length > 0)
374
373
  );
375
- #assertValid(get, node) {
376
- const errors = get(this.errors(node));
377
- if (errors.length === 0) return;
378
- const title = get(node.value).title;
379
- throw new EntryValidationError({
380
- entryId: this.entry.id,
381
- title: typeof title === "string" ? title : void 0,
382
- errors
383
- });
384
- }
385
374
  saveDraft = atom(null, async (get, set, node) => {
386
375
  const dataState = get(this.entry.data);
387
376
  const { id, type } = dataState;
@@ -422,7 +411,6 @@ var EntryLocaleAtoms = class {
422
411
  const graph = get(graphAtom);
423
412
  const { checkpoint, data } = prepareData(get, node, typeConfig);
424
413
  policy.assert(Permission.Publish, activeEntry);
425
- this.#assertValid(get, node);
426
414
  const saved = await graph.create({
427
415
  type: typeConfig,
428
416
  id,
@@ -460,7 +448,6 @@ var EntryLocaleAtoms = class {
460
448
  const config = get(configAtom);
461
449
  const type = config.schema[dataState.type];
462
450
  assert(type, `Type "${dataState.type}" not found in config`);
463
- if (!config.enableDrafts) this.#assertValid(get, node);
464
451
  const { checkpoint, data } = prepareData(get, node, type);
465
452
  const graph = get(graphAtom);
466
453
  const saved = await graph.create({
@@ -11,6 +11,7 @@ import { policyAtom } from "./user.js";
11
11
  var rowSelect = {
12
12
  id: Entry.id,
13
13
  status: Entry.status,
14
+ main: Entry.main,
14
15
  title: Entry.title,
15
16
  path: Entry.path,
16
17
  url: Entry.url,
@@ -38,6 +38,8 @@ export interface ExplorerOptions {
38
38
  initialSearchScope?: 'workspace' | 'everything';
39
39
  location?: ExplorerLocation;
40
40
  limitLocations?: Array<ExplorerLimitLocation>;
41
+ /** Lists only the media roots, for pickers of files and images */
42
+ media?: boolean;
41
43
  mode?: 'browse' | 'search';
42
44
  nestedNavigation?: boolean;
43
45
  /**
@@ -142,6 +144,8 @@ export interface ExplorerItemData {
142
144
  createdAt?: number | null;
143
145
  id: string;
144
146
  status?: EntryStatus;
147
+ /** The version is the main one, a draft then was never published */
148
+ main?: boolean;
145
149
  title: string;
146
150
  path: string;
147
151
  updatedAt?: number | null;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  unwrap
3
- } from "../../chunks/chunk-TIJTT5ZI.js";
3
+ } from "../../chunks/chunk-G43W7AME.js";
4
4
  import {
5
5
  atom
6
6
  } from "../../chunks/chunk-CFNRVI3Y.js";
@@ -18,6 +18,7 @@ import { chunks } from "alinea/core/util/Arrays";
18
18
  import { parents } from "alinea/query";
19
19
  import { LucideFile } from "../icons.js";
20
20
  import { activityAtom } from "./activity.js";
21
+ import { confirmMoveAtom, draggedEntriesAtom } from "./moveConfirmation.js";
21
22
  import { configAtom, graphAtom } from "./core.js";
22
23
  import { MissingEntryError, treeEntryAtoms } from "./entry.js";
23
24
  import {
@@ -80,7 +81,14 @@ function explorerLocations(config, policy, options) {
80
81
  const configured = options.limitLocations?.length ? options.limitLocations : Object.entries(config.workspaces).flatMap(
81
82
  ([workspace, value]) => Object.keys(getWorkspace(value).roots).map((root) => ({ workspace, root }))
82
83
  );
83
- return configured.filter((location) => policy.check(permission, location));
84
+ return configured.filter(
85
+ (location) => policy.check(permission, location) && (!options.media || isMediaLocation(config, location))
86
+ );
87
+ }
88
+ function isMediaLocation(config, location) {
89
+ const workspace = config.workspaces[location.workspace];
90
+ const root = workspace && getWorkspace(workspace).roots[location.root];
91
+ return Boolean(root && getRoot(root).isMediaRoot);
84
92
  }
85
93
  function explorerThumbnailId(type, data) {
86
94
  return Type.references(type, data).find(
@@ -628,7 +636,8 @@ var ExplorerAtoms = class {
628
636
  );
629
637
  getDragData = atom(
630
638
  null,
631
- (_get, _set, keys) => {
639
+ (_get, set, keys) => {
640
+ set(draggedEntriesAtom, keys);
632
641
  return [...keys].map(dashboardEntryDragItem);
633
642
  }
634
643
  );
@@ -657,10 +666,11 @@ var ExplorerAtoms = class {
657
666
  /** Moves entries into the target entry */
658
667
  moveInto = atom(
659
668
  null,
660
- async (get, _set, ids, target) => {
669
+ async (get, set, ids, target) => {
661
670
  const graph = get(graphAtom);
662
- for (const id of ids) {
663
- if (id === String(target.key)) continue;
671
+ const moving = [...ids].filter((id) => id !== String(target.key));
672
+ if (!await set(confirmMoveAtom, moving, target)) return;
673
+ for (const id of moving) {
664
674
  await graph.move({
665
675
  id,
666
676
  target: String(target.key),
@@ -675,10 +685,11 @@ var ExplorerAtoms = class {
675
685
  */
676
686
  reorder = atom(
677
687
  null,
678
- async (get, _set, ids, target, locale) => {
688
+ async (get, set, ids, target, locale) => {
679
689
  if (target.position === "on") return;
680
690
  const listed = get(this.items(locale)).map((entry) => entry.id);
681
691
  const moving = [...ids].filter((id) => id !== String(target.key)).sort((a, b) => listed.indexOf(a) - listed.indexOf(b));
692
+ if (!await set(confirmMoveAtom, moving, target)) return;
682
693
  await moveEntries(get(graphAtom), moving, target);
683
694
  }
684
695
  );
@@ -936,6 +947,7 @@ var explorerItemSelect = {
936
947
  createdAt: Entry.createdAt,
937
948
  id: Entry.id,
938
949
  status: Entry.status,
950
+ main: Entry.main,
939
951
  title: Entry.title,
940
952
  path: Entry.path,
941
953
  updatedAt: Entry.updatedAt,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  selectAtom
3
- } from "../../chunks/chunk-TIJTT5ZI.js";
3
+ } from "../../chunks/chunk-G43W7AME.js";
4
4
  import {
5
5
  atom
6
6
  } from "../../chunks/chunk-CFNRVI3Y.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  unwrap
3
- } from "../../chunks/chunk-TIJTT5ZI.js";
3
+ } from "../../chunks/chunk-G43W7AME.js";
4
4
  import {
5
5
  atom
6
6
  } from "../../chunks/chunk-CFNRVI3Y.js";
@@ -62,7 +62,10 @@ var linkEntryAtoms = dispense((id, locale) => {
62
62
  };
63
63
  }
64
64
  });
65
- return unwrap(result, () => ({ state: "loading" }));
65
+ return unwrap(
66
+ result,
67
+ (previous) => previous ?? { state: "loading" }
68
+ );
66
69
  });
67
70
  export {
68
71
  linkEntryAtoms
@@ -25,6 +25,11 @@ export interface MoveTargets {
25
25
  * and entries missing a language of the moved entries are not a target
26
26
  */
27
27
  canSelect(item: ExplorerItemData): boolean;
28
+ /**
29
+ * Why the entries can not move into `parent`, or to the top level of the
30
+ * root with null; undefined when they can
31
+ */
32
+ refusal(parent: MoveSubject | null): string | undefined;
28
33
  /** The entries can be moved to the top level of the root */
29
34
  rootAccepts: boolean;
30
35
  }