alinea 2.0.0-preview.13 → 2.0.0-preview.14

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 (323) 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 +6 -2
  5. package/dist/adapter/next/context.js +1 -4
  6. package/dist/adapter/next/handler.js +12 -1
  7. package/dist/backend/CommitEntries.d.ts +17 -0
  8. package/dist/backend/CommitEntries.js +39 -0
  9. package/dist/backend/Handler.d.ts +9 -0
  10. package/dist/backend/Handler.js +80 -20
  11. package/dist/backend/api/BasicAuth.js +5 -1
  12. package/dist/backend/api/CreateBackend.js +2 -2
  13. package/dist/backend/api/DatabaseApi.js +18 -5
  14. package/dist/backend/api/GithubApi.d.ts +13 -0
  15. package/dist/backend/api/GithubApi.js +170 -30
  16. package/dist/backend/api/database.js +2 -2
  17. package/dist/backend/util/Syncable.d.ts +6 -0
  18. package/dist/backend/util/Syncable.js +3 -1
  19. package/dist/bundled.d.ts +911 -151
  20. package/dist/chunks/{chunk-5H4D5JQL.js → chunk-2PP7WJUJ.js} +1 -11
  21. package/dist/chunks/{chunk-QHHMKJUO.js → chunk-7DDPSWRY.js} +465 -2
  22. package/dist/chunks/{chunk-HOETF6HN.js → chunk-PMGIIYDD.js} +1 -0
  23. package/dist/chunks/{chunk-3QFSGTGF.js → chunk-SCV3TEXM.js} +1 -1
  24. package/dist/chunks/{chunk-UPY2RUZF.js → chunk-TWBREZWC.js} +30 -0
  25. package/dist/cli/Generate.js +20 -7
  26. package/dist/cli/Mcp.js +1 -1
  27. package/dist/cli/Serve.js +1 -1
  28. package/dist/cli/bin.js +1 -1
  29. package/dist/cli/build/BuildEmitter.d.ts +5 -1
  30. package/dist/cli/build/BuildEmitter.js +8 -3
  31. package/dist/cli/generate/CompileConfig.js +10 -6
  32. package/dist/cli/generate/DevDB.d.ts +4 -1
  33. package/dist/cli/generate/DevDB.js +15 -7
  34. package/dist/cli/generate/GenerateDashboard.js +1 -0
  35. package/dist/cli/generate/MediaLocations.d.ts +18 -0
  36. package/dist/cli/generate/MediaLocations.js +69 -0
  37. package/dist/cli/serve/CreateLocalServer.js +1 -0
  38. package/dist/cli/serve/mcp/DevMcp.js +1 -1
  39. package/dist/cloud/CloudRemote.js +21 -7
  40. package/dist/cms.d.ts +4 -2
  41. package/dist/components/Alert.js +2 -2
  42. package/dist/components/AppShell.js +2 -2
  43. package/dist/components/AsyncList.d.ts +52 -0
  44. package/dist/components/AsyncList.js +69 -0
  45. package/dist/components/Breadcrumbs.js +6 -6
  46. package/dist/components/Button.js +4 -4
  47. package/dist/components/Calendar.js +18 -18
  48. package/dist/components/Checkbox.js +10 -10
  49. package/dist/components/CheckboxGroup.js +2 -2
  50. package/dist/components/Collapsible.js +5 -5
  51. package/dist/components/ColorSwatch.js +2 -2
  52. package/dist/components/ColorSwatchPicker.js +4 -4
  53. package/dist/components/ComboBox.d.ts +27 -9
  54. package/dist/components/ComboBox.js +40 -9
  55. package/dist/components/Command.js +13 -13
  56. package/dist/components/ContentCard.js +28 -28
  57. package/dist/components/ContentGrid.js +11 -11
  58. package/dist/components/DataList.js +1 -1
  59. package/dist/components/DateField.d.ts +4 -0
  60. package/dist/components/DateField.js +2 -2
  61. package/dist/components/DatePicker.js +2 -2
  62. package/dist/components/DateRangePicker.js +2 -2
  63. package/dist/components/Dialog.d.ts +14 -3
  64. package/dist/components/Dialog.js +38 -11
  65. package/dist/components/DropZone.js +6 -6
  66. package/dist/components/DropdownMenu.js +8 -8
  67. package/dist/components/Empty.js +4 -4
  68. package/dist/components/Field.d.ts +1 -1
  69. package/dist/components/Field.js +18 -12
  70. package/dist/components/Form.d.ts +23 -0
  71. package/dist/components/Form.js +64 -0
  72. package/dist/components/Link.d.ts +8 -1
  73. package/dist/components/List.js +27 -27
  74. package/dist/components/MediaPreview.js +5 -5
  75. package/dist/components/MultipleSelect.d.ts +13 -8
  76. package/dist/components/MultipleSelect.js +25 -25
  77. package/dist/components/NavRail.js +7 -7
  78. package/dist/components/NumberField.d.ts +5 -1
  79. package/dist/components/NumberField.js +6 -4
  80. package/dist/components/Page.js +6 -6
  81. package/dist/components/Popover.js +2 -2
  82. package/dist/components/PreviewFrame.js +8 -8
  83. package/dist/components/RadioGroup.js +10 -10
  84. package/dist/components/Resizable.js +1 -1
  85. package/dist/components/SearchField.js +8 -8
  86. package/dist/components/Select.d.ts +13 -10
  87. package/dist/components/Select.js +18 -32
  88. package/dist/components/Sheet.js +6 -6
  89. package/dist/components/Sidebar.js +5 -5
  90. package/dist/components/SortableList.js +12 -12
  91. package/dist/components/Spinner.js +4 -4
  92. package/dist/components/Stack.d.ts +20 -0
  93. package/dist/components/Stack.js +45 -0
  94. package/dist/components/Surface.js +1 -1
  95. package/dist/components/Switch.js +5 -5
  96. package/dist/components/Table.d.ts +11 -1
  97. package/dist/components/Table.js +81 -53
  98. package/dist/components/Tabs.js +6 -6
  99. package/dist/components/TagGroup.js +10 -10
  100. package/dist/components/TextField.d.ts +7 -1
  101. package/dist/components/TextField.js +20 -11
  102. package/dist/components/TimeField.d.ts +6 -1
  103. package/dist/components/TimeField.js +51 -26
  104. package/dist/components/Timestamp.js +1 -1
  105. package/dist/components/ToggleGroup.js +2 -2
  106. package/dist/components/Toolbar.js +3 -3
  107. package/dist/components/Tooltip.js +5 -4
  108. package/dist/components/Tree.js +27 -27
  109. package/dist/components/internal/DateControl.js +11 -11
  110. package/dist/components/internal/FormScope.d.ts +2 -0
  111. package/dist/components/internal/FormScope.js +8 -0
  112. package/dist/components/internal/ListBoxGroup.d.ts +12 -0
  113. package/dist/components/internal/ListBoxGroup.js +46 -0
  114. package/dist/components/internal/ListBoxOption.d.ts +2 -2
  115. package/dist/components/internal/ListBoxOption.js +5 -5
  116. package/dist/components/internal/Locale.js +2 -2
  117. package/dist/components/internal/PopoverSurface.js +5 -4
  118. package/dist/components/internal/SelectionCheckbox.js +5 -5
  119. package/dist/components/internal/Slot.js +1 -1
  120. package/dist/components/internal/ToggleButton.js +4 -4
  121. package/dist/components/internal/Trigger.js +2 -2
  122. package/dist/components/internal/useDragDrop.js +2 -2
  123. package/dist/components/types.d.ts +4 -0
  124. package/dist/components.d.ts +3 -0
  125. package/dist/components.js +3 -0
  126. package/dist/core/Client.js +12 -1
  127. package/dist/core/Config.d.ts +6 -0
  128. package/dist/core/Config.js +12 -0
  129. package/dist/core/DashboardEntry.d.ts +19 -0
  130. package/dist/core/DashboardEntry.js +0 -0
  131. package/dist/core/Document.d.ts +2 -2
  132. package/dist/core/Document.js +10 -3
  133. package/dist/core/EntryFields.d.ts +8 -2
  134. package/dist/core/Field.d.ts +5 -0
  135. package/dist/core/Filter.d.ts +19 -2
  136. package/dist/core/Filter.js +5 -0
  137. package/dist/core/Graph.d.ts +10 -2
  138. package/dist/core/Overview.d.ts +74 -5
  139. package/dist/core/Overview.js +1 -0
  140. package/dist/core/Root.js +1 -1
  141. package/dist/core/Scope.d.ts +5 -0
  142. package/dist/core/Scope.js +22 -5
  143. package/dist/core/Type.d.ts +25 -6
  144. package/dist/core/Type.js +25 -7
  145. package/dist/core/db/LocalStore.d.ts +7 -0
  146. package/dist/core/field/CreateField.d.ts +1 -2
  147. package/dist/core/source/Source.d.ts +2 -0
  148. package/dist/core/source/Source.js +11 -0
  149. package/dist/core/util/Async.d.ts +2 -0
  150. package/dist/core/util/Async.js +12 -1
  151. package/dist/core/util/Checks.js +1 -1
  152. package/dist/core/util/Slugs.js +4 -3
  153. package/dist/dashboard/App.css +13 -11
  154. package/dist/dashboard/App.d.ts +1 -0
  155. package/dist/dashboard/App.js +22 -6
  156. package/dist/dashboard/Href.d.ts +37 -0
  157. package/dist/dashboard/Href.js +46 -0
  158. package/dist/dashboard/app/ActivityStatus.js +34 -12
  159. package/dist/dashboard/app/AuthView.js +2 -2
  160. package/dist/dashboard/app/BlockSettings.d.ts +9 -0
  161. package/dist/dashboard/app/BlockSettings.js +16 -0
  162. package/dist/dashboard/app/BlockSheet.js +3 -3
  163. package/dist/dashboard/app/BlockSheetStoryFrame.js +2 -2
  164. package/dist/dashboard/app/CompactField.js +15 -15
  165. package/dist/dashboard/app/CroppedImage.js +2 -2
  166. package/dist/dashboard/app/DashboardLayout.d.ts +1 -1
  167. package/dist/dashboard/app/DashboardLayout.js +12 -0
  168. package/dist/dashboard/app/EntryActions.d.ts +11 -0
  169. package/dist/dashboard/app/EntryActions.js +30 -0
  170. package/dist/dashboard/app/EntryFields.d.ts +15 -2
  171. package/dist/dashboard/app/EntryFields.js +26 -5
  172. package/dist/dashboard/app/EntryHeader.js +17 -7
  173. package/dist/dashboard/app/EntryReferences.js +2 -2
  174. package/dist/dashboard/app/EntrySidebar.js +25 -23
  175. package/dist/dashboard/app/EntrySidebarPreview.js +2 -2
  176. package/dist/dashboard/app/EntryValidationModal.js +3 -3
  177. package/dist/dashboard/app/Explorer.js +84 -45
  178. package/dist/dashboard/app/ExplorerBatchActions.js +4 -4
  179. package/dist/dashboard/app/ExplorerControls.js +5 -5
  180. package/dist/dashboard/app/ExplorerList.js +2 -2
  181. package/dist/dashboard/app/ExplorerModal.js +3 -3
  182. package/dist/dashboard/app/ExplorerOverviewHeader.d.ts +6 -0
  183. package/dist/dashboard/app/ExplorerOverviewHeader.js +28 -0
  184. package/dist/dashboard/app/ExplorerTable.js +7 -7
  185. package/dist/dashboard/app/ExplorerTabs.d.ts +12 -0
  186. package/dist/dashboard/app/ExplorerTabs.js +42 -0
  187. package/dist/dashboard/app/ImageEditor.js +31 -31
  188. package/dist/dashboard/app/LinkPicker.js +3 -3
  189. package/dist/dashboard/app/LocaleMenu.js +9 -9
  190. package/dist/dashboard/app/MediaPreviewCell.js +5 -5
  191. package/dist/dashboard/app/OverviewCell.js +12 -10
  192. package/dist/dashboard/app/RemoveDialog.js +5 -0
  193. package/dist/dashboard/app/SearchBar.js +4 -4
  194. package/dist/dashboard/app/SettingsTab.d.ts +6 -0
  195. package/dist/dashboard/app/SettingsTab.js +27 -0
  196. package/dist/dashboard/app/SidebarTree.js +19 -19
  197. package/dist/dashboard/app/WorkspaceMenu.js +6 -6
  198. package/dist/dashboard/app/WorkspaceRoots.js +102 -98
  199. package/dist/dashboard/app/editor/FileEditor.js +18 -18
  200. package/dist/dashboard/app/pages/EntryPage.js +42 -39
  201. package/dist/dashboard/app/pages/RootPage.js +3 -3
  202. package/dist/dashboard/app/pages/SplashPage.js +94 -79
  203. package/dist/dashboard/app/pages/UsersPage.js +9 -9
  204. package/dist/dashboard/app/ui/DashboardModal.js +14 -14
  205. package/dist/dashboard/atoms/activity.d.ts +1 -0
  206. package/dist/dashboard/atoms/activity.js +8 -5
  207. package/dist/dashboard/atoms/config.d.ts +2 -0
  208. package/dist/dashboard/atoms/dashboard.d.ts +11 -0
  209. package/dist/dashboard/atoms/dashboard.js +8 -0
  210. package/dist/dashboard/atoms/editor.d.ts +7 -1
  211. package/dist/dashboard/atoms/editor.js +14 -2
  212. package/dist/dashboard/atoms/explorer.d.ts +15 -0
  213. package/dist/dashboard/atoms/explorer.js +43 -14
  214. package/dist/dashboard/atoms/graph.d.ts +5 -0
  215. package/dist/dashboard/atoms/graph.js +26 -1
  216. package/dist/dashboard/atoms/nav.d.ts +16 -10
  217. package/dist/dashboard/atoms/nav.js +96 -36
  218. package/dist/dashboard/atoms/overview.d.ts +26 -4
  219. package/dist/dashboard/atoms/overview.js +41 -12
  220. package/dist/dashboard/atoms/root.js +7 -1
  221. package/dist/dashboard/boot/ActivityEvent.d.ts +1 -1
  222. package/dist/dashboard/boot/Boot.js +6 -0
  223. package/dist/dashboard/boot/DashboardWorker.d.ts +6 -0
  224. package/dist/dashboard/boot/DashboardWorker.js +89 -8
  225. package/dist/dashboard/boot/LoadWorker.js +3 -0
  226. package/dist/dashboard/boot/SyncEvent.d.ts +7 -0
  227. package/dist/dashboard/boot/SyncEvent.js +14 -0
  228. package/dist/dashboard/boot/WorkerDB.d.ts +1 -0
  229. package/dist/dashboard/boot/WorkerDB.js +3 -0
  230. package/dist/dashboard/cms/EntryTable.d.ts +4 -3
  231. package/dist/dashboard/cms/EntryTable.js +2 -2
  232. package/dist/dashboard/cms/ViewProps.d.ts +3 -2
  233. package/dist/dashboard/cms/hooks.d.ts +34 -18
  234. package/dist/dashboard/cms/hooks.js +43 -18
  235. package/dist/dashboard/contexts.d.ts +3 -2
  236. package/dist/dashboard/contexts.js +3 -2
  237. package/dist/dashboard/hook/UseEntryEditor.d.ts +1 -1
  238. package/dist/dashboard/hook/UseEntryEditor.js +7 -3
  239. package/dist/dashboard/icons.d.ts +1 -0
  240. package/dist/dashboard/icons.js +15 -0
  241. package/dist/database/BrowserEntryStore.js +35 -13
  242. package/dist/database/DatabaseTables.js +1 -1
  243. package/dist/database/EntryDatabase.d.ts +10 -1
  244. package/dist/database/EntryDatabase.js +31 -10
  245. package/dist/database/EntryStore.js +1 -11
  246. package/dist/database/entry/EntryTable.d.ts +5 -3
  247. package/dist/database/entry/EntryTable.js +25 -8
  248. package/dist/database/query/Condition.d.ts +4 -1
  249. package/dist/database/query/Condition.js +16 -5
  250. package/dist/database/query/EntryQuery.js +59 -7
  251. package/dist/database/query/Relation.d.ts +13 -1
  252. package/dist/database/query/Relation.js +19 -1
  253. package/dist/database/query/Search.d.ts +7 -1
  254. package/dist/database/query/Search.js +54 -9
  255. package/dist/database/sync/EntrySyncer.d.ts +2 -0
  256. package/dist/database/sync/EntrySyncer.js +4 -2
  257. package/dist/database/sync/Ingest.d.ts +2 -1
  258. package/dist/database/sync/Ingest.js +20 -6
  259. package/dist/field/code/CodeField.view.js +12 -12
  260. package/dist/field/link/EntryLink.d.ts +4 -5
  261. package/dist/field/link/FileLink.d.ts +2 -2
  262. package/dist/field/link/ImageLink.d.ts +2 -5
  263. package/dist/field/link/ImageLink.js +0 -1
  264. package/dist/field/link/LinkField.view.js +18 -15
  265. package/dist/field/list/ListField.view.js +50 -35
  266. package/dist/field/metadata/MetadataField.view.js +14 -14
  267. package/dist/field/richtext/RichTextBlock.js +39 -35
  268. package/dist/field/richtext/RichTextExtensions.js +23 -23
  269. package/dist/field/richtext/RichTextField.view.js +6 -6
  270. package/dist/field/richtext/RichTextInsertMenu.js +5 -5
  271. package/dist/field/richtext/RichTextToolbar.js +26 -1
  272. package/dist/field/richtext/Toolbar.d.ts +9 -1
  273. package/dist/field/richtext/Toolbar.js +12 -2
  274. package/dist/field/select/SelectField.view.js +1 -0
  275. package/dist/index.css +174 -23
  276. package/dist/index.d.ts +1 -0
  277. package/dist/index.js +3 -1
  278. package/dist/next.d.ts +2 -0
  279. package/dist/next.edge.d.ts +2 -0
  280. package/dist/picker/entry/EntryPicker.d.ts +3 -1
  281. package/dist/picker/entry/EntryPicker.js +15 -1
  282. package/dist/preview/react.js +3 -0
  283. package/dist/query.d.ts +26 -14
  284. package/dist/query.js +4 -0
  285. package/dist/types.d.ts +8 -5
  286. package/dist/ui/Stack.d.ts +4 -2
  287. package/docs/ai-setup.md +3 -3
  288. package/docs/cli.md +4 -2
  289. package/docs/components/combo-box.md +105 -16
  290. package/docs/components/date-field.md +1 -1
  291. package/docs/components/dialog.md +51 -0
  292. package/docs/components/form.md +67 -0
  293. package/docs/components/link.md +10 -0
  294. package/docs/components/multiple-select.md +9 -17
  295. package/docs/components/number-field.md +5 -1
  296. package/docs/components/select.md +9 -20
  297. package/docs/components/stack.md +42 -0
  298. package/docs/components/table.md +83 -0
  299. package/docs/components/text-field.md +9 -1
  300. package/docs/components/time-field.md +5 -1
  301. package/docs/components.md +39 -1
  302. package/docs/configuration.md +3 -1
  303. package/docs/custom-fields.md +135 -7
  304. package/docs/deploy/self-host.md +2 -0
  305. package/docs/deploy.md +7 -4
  306. package/docs/fields/image.md +0 -1
  307. package/docs/fields/list.md +19 -0
  308. package/docs/fields/object.md +5 -3
  309. package/docs/fields/rich-text.md +31 -0
  310. package/docs/index.md +8 -6
  311. package/docs/instant-publishing.md +23 -2
  312. package/docs/overviews.md +128 -4
  313. package/docs/query/filtering.md +2 -0
  314. package/docs/query/related.md +58 -9
  315. package/docs/query.md +52 -1
  316. package/docs/quickstart.md +5 -5
  317. package/docs/schema/document.md +2 -0
  318. package/docs/schema/type.md +3 -1
  319. package/docs/upgrading.md +100 -19
  320. package/llms-full.txt +1022 -125
  321. package/package.json +1 -1
  322. package/readme.md +2 -2
  323. package/dist/chunks/{chunk-4ZA6KZHS.js → chunk-6FQ5IMNA.js} +3 -3
package/dist/index.css CHANGED
@@ -794,6 +794,9 @@
794
794
  color: var(--alinea-fg-disabled);
795
795
  }
796
796
  }
797
+ .alinea-ComboBoxTrigger-spinner {
798
+ color: var(--alinea-fg-muted);
799
+ }
797
800
  .alinea-ComboBoxTrigger-action {
798
801
  z-index: 0;
799
802
  width: 24px;
@@ -1394,6 +1397,9 @@
1394
1397
  min-height: 0;
1395
1398
  }
1396
1399
  }
1400
+ .alinea-DialogContent-form {
1401
+ display: contents;
1402
+ }
1397
1403
  .alinea-DialogContent-close {
1398
1404
  position: absolute;
1399
1405
  top: 12px;
@@ -1659,6 +1665,11 @@
1659
1665
  rotate: 90deg;
1660
1666
  }
1661
1667
 
1668
+ /* src/components/Form.module.css */
1669
+ .alinea-Form {
1670
+ display: block;
1671
+ }
1672
+
1662
1673
  /* src/components/Heading.module.css */
1663
1674
  .alinea-Heading {
1664
1675
  color: var(--alinea-fg);
@@ -1795,6 +1806,17 @@
1795
1806
  outline: none;
1796
1807
  }
1797
1808
 
1809
+ /* src/components/internal/ListBoxGroup.module.css */
1810
+ .alinea-ListBoxGroup {
1811
+ display: block;
1812
+ }
1813
+ .alinea-ListBoxGroup-label {
1814
+ color: var(--alinea-fg-muted);
1815
+ padding: 4px 6px;
1816
+ font-size: .8rem;
1817
+ font-weight: 500;
1818
+ }
1819
+
1798
1820
  /* src/components/internal/ListBoxOption.module.css */
1799
1821
  .alinea-ListBoxOption {
1800
1822
  border-radius: var(--alinea-radius-sm);
@@ -3349,15 +3371,6 @@
3349
3371
  .alinea-SelectContent-list {
3350
3372
  outline: none;
3351
3373
  }
3352
- .alinea-SelectGroup {
3353
- display: block;
3354
- }
3355
- .alinea-SelectGroup-label {
3356
- color: var(--alinea-fg-muted);
3357
- padding: 4px 6px;
3358
- font-size: .8rem;
3359
- font-weight: 500;
3360
- }
3361
3374
  .alinea-SelectSeparator {
3362
3375
  background: var(--alinea-border);
3363
3376
  border: none;
@@ -3786,12 +3799,57 @@
3786
3799
  animation: 1s cubic-bezier(.4, 0, .2, 1) infinite alinea-Spinner-spin;
3787
3800
  }
3788
3801
  }
3802
+ @media (prefers-reduced-motion: reduce) {
3803
+ .alinea-Spinner-indicator {
3804
+ transition: none;
3805
+ }
3806
+ }
3789
3807
  @keyframes alinea-Spinner-spin {
3790
3808
  to {
3791
3809
  transform: rotate(270deg);
3792
3810
  }
3793
3811
  }
3794
3812
 
3813
+ /* src/components/Stack.module.css */
3814
+ .alinea-Stack {
3815
+ flex-direction: column;
3816
+ min-width: 0;
3817
+ display: flex;
3818
+ &[data-direction=row] {
3819
+ flex-direction: row;
3820
+ }
3821
+ &[data-align=start] {
3822
+ align-items: flex-start;
3823
+ }
3824
+ &[data-align=center] {
3825
+ align-items: center;
3826
+ }
3827
+ &[data-align=end] {
3828
+ align-items: flex-end;
3829
+ }
3830
+ &[data-align=stretch] {
3831
+ align-items: stretch;
3832
+ }
3833
+ &[data-align=baseline] {
3834
+ align-items: baseline;
3835
+ }
3836
+ &[data-justify=start] {
3837
+ justify-content: flex-start;
3838
+ }
3839
+ &[data-justify=center] {
3840
+ justify-content: center;
3841
+ }
3842
+ &[data-justify=end] {
3843
+ justify-content: flex-end;
3844
+ }
3845
+ &[data-justify=between] {
3846
+ justify-content: space-between;
3847
+ }
3848
+ &[data-wrap] {
3849
+ flex-wrap: wrap;
3850
+ }
3851
+ }
3852
+
3795
3853
  /* src/components/Surface.module.css */
3796
3854
  .alinea-Surface {
3797
3855
  background: var(--alinea-bg);
@@ -3966,13 +4024,19 @@
3966
4024
  }
3967
4025
  }
3968
4026
  .alinea-Table-empty {
4027
+ height: 100%;
4028
+ min-height: calc(var(--alinea-table-row-height) * 2);
4029
+ color: var(--alinea-fg-muted);
4030
+ justify-content: center;
4031
+ align-items: center;
4032
+ display: flex;
4033
+ }
4034
+ .alinea-Table-loader {
4035
+ height: var(--alinea-table-row-height);
3969
4036
  color: var(--alinea-fg-muted);
3970
- pointer-events: none;
3971
4037
  justify-content: center;
3972
4038
  align-items: center;
3973
4039
  display: flex;
3974
- position: absolute;
3975
- inset: 0;
3976
4040
  }
3977
4041
  .alinea-Table-dropIndicator {
3978
4042
  pointer-events: none;
@@ -4022,8 +4086,14 @@
4022
4086
  padding-inline-start: calc(34px + var(--alinea-table-indent));
4023
4087
  }
4024
4088
  }
4089
+ .alinea-TableHeader-label {
4090
+ text-overflow: ellipsis;
4091
+ min-width: 0;
4092
+ overflow: hidden;
4093
+ }
4025
4094
  .alinea-TableHeader-sort {
4026
4095
  border-radius: var(--alinea-radius-sm);
4096
+ min-width: 0;
4027
4097
  color: inherit;
4028
4098
  font: inherit;
4029
4099
  cursor: pointer;
@@ -4043,6 +4113,7 @@
4043
4113
  }
4044
4114
  }
4045
4115
  .alinea-TableHeader-sortIcon {
4116
+ flex: none;
4046
4117
  font-size: 14px;
4047
4118
  }
4048
4119
  .alinea-TableRow {
@@ -4603,6 +4674,9 @@
4603
4674
  grid-area: 1 / 1 / 2 / 2;
4604
4675
  overflow: hidden;
4605
4676
  }
4677
+ .alinea-TextFieldGrow &.alinea-is-limited {
4678
+ overflow-y: auto;
4679
+ }
4606
4680
  &.alinea-is-start {
4607
4681
  padding-left: calc(20px + 1em);
4608
4682
  }
@@ -5037,6 +5111,17 @@
5037
5111
  }
5038
5112
  .alinea-AppLoading-progress {
5039
5113
  animation: .25s ease-out both alinea-AppLoading-progress-fade-in;
5114
+ display: flex;
5115
+ position: relative;
5116
+ }
5117
+ .alinea-AppLoading-status {
5118
+ white-space: nowrap;
5119
+ font-variant-numeric: tabular-nums;
5120
+ margin-top: .75rem;
5121
+ position: absolute;
5122
+ top: 100%;
5123
+ left: 50%;
5124
+ transform: translateX(-50%);
5040
5125
  }
5041
5126
  @keyframes alinea-AppLoading-progress-fade-in {
5042
5127
  from {
@@ -5514,6 +5599,9 @@
5514
5599
  }
5515
5600
 
5516
5601
  /* src/dashboard/app/EntryHeader.module.css */
5602
+ .alinea-EntryHeader {
5603
+ min-height: var(--alinea-header-height, 48px);
5604
+ }
5517
5605
  @media (width <= 768px) {
5518
5606
  .alinea-EntryHeader {
5519
5607
  gap: 4px;
@@ -6070,6 +6158,18 @@
6070
6158
  display: flex;
6071
6159
  }
6072
6160
 
6161
+ /* src/dashboard/app/ExplorerOverviewHeader.module.css */
6162
+ .alinea-ExplorerOverviewHeader {
6163
+ border-bottom: 1px solid var(--alinea-border);
6164
+ flex-shrink: 0;
6165
+ padding: 12px 16px;
6166
+ }
6167
+ @media (width <= 768px) {
6168
+ .alinea-ExplorerOverviewHeader {
6169
+ padding: 8px;
6170
+ }
6171
+ }
6172
+
6073
6173
  /* src/dashboard/app/ExplorerTable.module.css */
6074
6174
  .alinea-ExplorerTable-viewport {
6075
6175
  box-sizing: border-box;
@@ -6116,6 +6216,34 @@
6116
6216
  }
6117
6217
  }
6118
6218
 
6219
+ /* src/dashboard/app/ExplorerTabs.module.css */
6220
+ .alinea-ExplorerTabs {
6221
+ flex: 1;
6222
+ min-height: 0;
6223
+ }
6224
+ .alinea-ExplorerTabs-bar {
6225
+ border-bottom: 1px solid var(--alinea-border);
6226
+ background: var(--alinea-bg);
6227
+ flex-shrink: 0;
6228
+ height: 40px;
6229
+ padding: 0 16px;
6230
+ }
6231
+ .alinea-ExplorerTabs-panel {
6232
+ border-radius: 0;
6233
+ flex-direction: column;
6234
+ flex: 1;
6235
+ min-height: 0;
6236
+ display: flex;
6237
+ &:focus-visible {
6238
+ outline-offset: -2px;
6239
+ }
6240
+ }
6241
+ @media (width <= 768px) {
6242
+ .alinea-ExplorerTabs-bar {
6243
+ padding: 0 8px;
6244
+ }
6245
+ }
6246
+
6119
6247
  /* src/dashboard/app/ImageEditor.module.css */
6120
6248
  .alinea-ImageEditor {
6121
6249
  --alinea-image-editor-height: min(56vh, 520px);
@@ -6418,10 +6546,17 @@
6418
6546
  }
6419
6547
  .alinea-OverviewCell-link {
6420
6548
  flex: 0 auto;
6549
+ gap: 0;
6421
6550
  &:not(:last-child):after {
6422
6551
  content: ",";
6423
6552
  }
6424
6553
  }
6554
+ .alinea-OverviewCell-link-text {
6555
+ text-overflow: ellipsis;
6556
+ white-space: nowrap;
6557
+ min-width: 0;
6558
+ overflow: hidden;
6559
+ }
6425
6560
  .alinea-OverviewCell-thumbnail {
6426
6561
  border-radius: var(--alinea-radius-sm);
6427
6562
  background: var(--alinea-bg-muted);
@@ -6438,6 +6573,9 @@
6438
6573
  }
6439
6574
 
6440
6575
  /* src/dashboard/app/pages/EntryPage.module.css */
6576
+ .alinea-EntryEditor {
6577
+ --alinea-header-height: 48px;
6578
+ }
6441
6579
  .alinea-EntryEditor-body {
6442
6580
  background: var(--alinea-bg-muted);
6443
6581
  min-width: 0;
@@ -6452,6 +6590,14 @@
6452
6590
  .alinea-EntryEditor-banner {
6453
6591
  background: var(--alinea-bg-muted);
6454
6592
  }
6593
+ .alinea-EntryEditor-viewBanner {
6594
+ flex-shrink: 0;
6595
+ padding: 16px 16px 0;
6596
+ }
6597
+ .alinea-EntryEditor-view {
6598
+ min-width: 0;
6599
+ min-height: 0;
6600
+ }
6455
6601
  .alinea-EntryEditor-toolbar {
6456
6602
  z-index: 1;
6457
6603
  border-top: 1px solid var(--alinea-border);
@@ -6487,6 +6633,9 @@
6487
6633
  .alinea-EntryEditor-body {
6488
6634
  padding: 8px;
6489
6635
  }
6636
+ .alinea-EntryEditor-viewBanner {
6637
+ padding: 8px 8px 0;
6638
+ }
6490
6639
  .alinea-MissingEntry {
6491
6640
  padding: 12px;
6492
6641
  }
@@ -7521,14 +7670,14 @@
7521
7670
  }
7522
7671
 
7523
7672
  /* src/dashboard/global.css */
7524
- html,
7525
- body,
7526
- #root {
7673
+ :where(html[data-alinea-theme]),
7674
+ :where(html[data-alinea-theme]) body,
7675
+ :where(html[data-alinea-theme]) #root {
7527
7676
  height: 100%;
7528
7677
  margin: 0;
7529
7678
  font-family: var(--alinea-font);
7530
7679
  }
7531
- * {
7680
+ :where([data-alinea-theme], [data-alinea-theme] *) {
7532
7681
  box-sizing: border-box;
7533
7682
  padding: 0;
7534
7683
  margin: 0;
@@ -7540,12 +7689,12 @@ body[data-disable-transition=true] {
7540
7689
  transition: none !important;
7541
7690
  }
7542
7691
  }
7543
- a {
7692
+ :where([data-alinea-theme] a) {
7544
7693
  color: inherit;
7545
7694
  font: inherit;
7546
7695
  text-decoration: none;
7547
7696
  }
7548
- button {
7697
+ :where([data-alinea-theme] button) {
7549
7698
  background: none;
7550
7699
  border: none;
7551
7700
  color: inherit;
@@ -8341,8 +8490,10 @@ button {
8341
8490
  }
8342
8491
 
8343
8492
  /* src/theme.css */
8344
- :root {
8493
+ :root[data-alinea-theme] {
8345
8494
  color-scheme: light dark;
8495
+ }
8496
+ :where([data-alinea-theme]:not([data-alinea-theme] *)) {
8346
8497
  --alinea-gray-0: #ffffff;
8347
8498
  --alinea-gray-50: #f9fafb;
8348
8499
  --alinea-gray-100: #f3f4f7;
@@ -8390,7 +8541,7 @@ button {
8390
8541
  --alinea-green-700: #007a55;
8391
8542
  --alinea-green-800: #006045;
8392
8543
  }
8393
- :root {
8544
+ :where([data-alinea-theme]:not([data-alinea-theme] *)) {
8394
8545
  --alinea-font: "Inter", sans-serif;
8395
8546
  --alinea-mono-font: "JetBrains Mono", monospace;
8396
8547
  --alinea-font-size-base: 0.8125rem;
@@ -8407,8 +8558,8 @@ button {
8407
8558
  --alinea-warning-fg: var(--alinea-gray-900);
8408
8559
  --alinea-success: light-dark(var(--alinea-green-600), var(--alinea-green-500));
8409
8560
  --alinea-ring: var(--alinea-blue-500);
8561
+ --alinea-workspace-color: var(--alinea-primary);
8410
8562
  }
8411
- :root,
8412
8563
  [data-alinea-theme] {
8413
8564
  --alinea-transition: 0.2s ease-out;
8414
8565
  --alinea-radius-sm: calc(var(--alinea-radius) / 2);
@@ -8449,10 +8600,10 @@ button {
8449
8600
  --alinea-shadow-tooltip: 0 8px 20px rgb(0 0 0 / 10%);
8450
8601
  --alinea-shadow-modal: 0 2px 13px rgb(0 0 0 / 11%);
8451
8602
  }
8452
- :root[data-theme=light] {
8603
+ [data-alinea-theme][data-theme=light] {
8453
8604
  color-scheme: light;
8454
8605
  }
8455
- :root[data-theme=dark] {
8606
+ [data-alinea-theme][data-theme=dark] {
8456
8607
  color-scheme: dark;
8457
8608
  }
8458
8609
 
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export * as Config from './config.js';
2
2
  export * as Edit from './edit.js';
3
3
  export * as Field from './field.js';
4
4
  export * as Query from './query.js';
5
+ export { href } from './dashboard/Href.js';
5
6
  export type * from './types.js';
package/dist/index.js CHANGED
@@ -5,9 +5,11 @@ import * as Config from "./config.js";
5
5
  import * as Edit from "./edit.js";
6
6
  import * as Field from "./field.js";
7
7
  import * as Query from "./query.js";
8
+ import { href } from "./dashboard/Href.js";
8
9
  export {
9
10
  Config,
10
11
  Edit,
11
12
  Field,
12
- Query
13
+ Query,
14
+ href
13
15
  };
package/dist/next.d.ts CHANGED
@@ -2,4 +2,6 @@ export type { SyncStatus } from 'alinea/adapter/next/cms';
2
2
  export type { NextHandlerOptions } from 'alinea/adapter/next/handler';
3
3
  export { createCMS, createHandler } from 'alinea/adapter/next/node';
4
4
  export { withAlinea } from 'alinea/adapter/next/with-alinea';
5
+ export type { RemovedEntry } from 'alinea/backend/CommitEntries';
5
6
  export type { AfterCommitContext, BeforeCommitContext } from 'alinea/backend/Handler';
7
+ export type { DashboardEntry } from 'alinea/core/DashboardEntry';
@@ -1,3 +1,5 @@
1
1
  export { createCMS, type SyncStatus } from 'alinea/adapter/next/cms';
2
2
  export { createHandler, type NextHandlerOptions } from 'alinea/adapter/next/handler';
3
+ export type { RemovedEntry } from 'alinea/backend/CommitEntries';
3
4
  export type { AfterCommitContext, BeforeCommitContext } from 'alinea/backend/Handler';
5
+ export type { DashboardEntry } from 'alinea/core/DashboardEntry';
@@ -1,5 +1,5 @@
1
1
  import type { EntryFields } from 'alinea/core/EntryFields';
2
- import type { OpenFilter } from 'alinea/core/Filter';
2
+ import { type OpenFilter } from 'alinea/core/Filter';
3
3
  import type { Graph, Projection } from 'alinea/core/Graph';
4
4
  import type { Label } from 'alinea/core/Label';
5
5
  import type { Picker } from 'alinea/core/Picker';
@@ -52,4 +52,6 @@ export interface EntryPickerOptions<Definition = {}> extends EntryPickerConditio
52
52
  fields?: Definition | Type<Definition>;
53
53
  }
54
54
  export declare function entryPicker<Ref extends EntryReference, Fields>(options: EntryPickerOptions<Fields>): Picker<Ref, EntryPickerOptions<Fields>>;
55
+ /** @internal Throws for conditions an entry picker can't check, eg. relation filters */
56
+ export declare function assertPickerCondition(condition: OpenFilter<EntryFields>): void;
55
57
  export {};
@@ -1,6 +1,7 @@
1
1
  import "../../chunks/chunk-CQ52GEHY.js";
2
2
 
3
3
  // src/picker/entry/EntryPicker.ts
4
+ import { filterChecker } from "alinea/core/Filter";
4
5
  import { Reference } from "alinea/core/Reference";
5
6
  import { Root } from "alinea/core/Root";
6
7
  import { Type, type } from "alinea/core/Type";
@@ -12,6 +13,8 @@ import { selectLocalisedValue } from "alinea/field/localiser";
12
13
  import { EntryReference } from "./EntryReference.js";
13
14
  var unresolvedEntryMarker = /* @__PURE__ */ Symbol("unresolvedEntryMarker");
14
15
  function entryPicker(options) {
16
+ if (options.condition && typeof options.condition !== "function")
17
+ assertPickerCondition(options.condition);
15
18
  const fieldType = Type.isType(options.fields) ? options.fields : options.fields && type("Entry fields", { fields: options.fields });
16
19
  return {
17
20
  fields: fieldType,
@@ -71,7 +74,7 @@ function entryPicker(options) {
71
74
  });
72
75
  const version = typeof rest.hash === "string" ? rest.hash : void 0;
73
76
  const versionedSrc = typeof src === "string" ? MediaLocation.versionedUrl(src, version) : src;
74
- assign(row, rest, { extension, src: versionedSrc, url: versionedSrc });
77
+ assign(row, rest, { extension, src: versionedSrc });
75
78
  if (typeof selectedAlt === "string") row.alt = selectedAlt;
76
79
  }
77
80
  };
@@ -104,7 +107,18 @@ function linkedLocalisation(loader, { workspace, root }) {
104
107
  const rootData = Root.data(rootConfig);
105
108
  return Root.mediaI18n(rootData) ?? rootData.i18n;
106
109
  }
110
+ function assertPickerCondition(condition) {
111
+ try {
112
+ filterChecker(condition);
113
+ } catch (error) {
114
+ throw new Error(
115
+ `Invalid entry picker condition: ${error.message}`,
116
+ { cause: error }
117
+ );
118
+ }
119
+ }
107
120
  export {
121
+ assertPickerCondition,
108
122
  entryPicker,
109
123
  unresolvedEntryMarker
110
124
  };
@@ -7,10 +7,13 @@ function usePreview(options) {
7
7
  const [isPreviewing, setIsPreviewing] = useState(false);
8
8
  const previewRef = useRef(options.preview);
9
9
  previewRef.current = options.preview;
10
+ const applied = useRef();
10
11
  useEffect(() => {
11
12
  return registerPreview(
12
13
  {
13
14
  preview(update) {
15
+ if (update?.payload === applied.current) return Promise.resolve();
16
+ applied.current = update?.payload;
14
17
  return previewRef.current(update);
15
18
  },
16
19
  setIsPreviewing
package/dist/query.d.ts CHANGED
@@ -1,18 +1,20 @@
1
+ import type { Expr } from 'alinea/core/Expr';
1
2
  import type { GraphQuery, IncludeGuard, PickModifiers, QueryModifiers, SelectionGuard, TypeGuard } from 'alinea/core/Graph';
2
- export declare const id: import("./core/Expr").Expr<string>;
3
- export declare const title: import("./core/Expr").Expr<string>;
4
- export declare const type: import("./core/Expr").Expr<string>;
5
- export declare const index: import("./core/Expr").Expr<string>;
6
- export declare const workspace: import("./core/Expr").Expr<string>;
7
- export declare const root: import("./core/Expr").Expr<string>;
8
- export declare const status: import("./core/Expr").Expr<import("alinea/core/Entry").EntryStatus>;
9
- export declare const parentId: import("./core/Expr").Expr<string | null>;
10
- export declare const locale: import("./core/Expr").Expr<string | null>;
11
- export declare const path: import("./core/Expr").Expr<string>;
12
- export declare const url: import("./core/Expr").Expr<string>;
13
- export declare const aliases: import("./core/Expr").Expr<import("alinea/core/Entry").EntryAlias[]>;
14
- export declare const createdAt: import("./core/Expr").Expr<number | null>;
15
- export declare const updatedAt: import("./core/Expr").Expr<number | null>;
3
+ import type { HasField } from 'alinea/core/Internal';
4
+ export declare const id: Expr<string>;
5
+ export declare const title: Expr<string>;
6
+ export declare const type: Expr<string>;
7
+ export declare const index: Expr<string>;
8
+ export declare const workspace: Expr<string>;
9
+ export declare const root: Expr<string>;
10
+ export declare const status: Expr<import("alinea/core/Entry").EntryStatus>;
11
+ export declare const parentId: Expr<string | null>;
12
+ export declare const locale: Expr<string | null>;
13
+ export declare const path: Expr<string>;
14
+ export declare const url: Expr<string>;
15
+ export declare const aliases: Expr<import("alinea/core/Entry").EntryAlias[]>;
16
+ export declare const createdAt: Expr<number | null>;
17
+ export declare const updatedAt: Expr<number | null>;
16
18
  export { snippet } from 'alinea/core/pages/Snippet';
17
19
  /** A relation query, see PickModifiers */
18
20
  type RelationQuery<Edge extends string, Selection, Type, Include, Modifiers> = {
@@ -41,3 +43,13 @@ export declare function siblings<Selection extends SelectionGuard = undefined, T
41
43
  export declare function parent<Selection extends SelectionGuard = undefined, Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined, Modifiers extends QueryModifiers = {}>(query: GraphQuery<Selection, Type, Include> & Modifiers): RelationQuery<'parent', Selection, Type, Include, Modifiers>;
42
44
  export declare function next<Selection extends SelectionGuard = undefined, Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined, Modifiers extends QueryModifiers = {}>(query: GraphQuery<Selection, Type, Include> & Modifiers): RelationQuery<'next', Selection, Type, Include, Modifiers>;
43
45
  export declare function previous<Selection extends SelectionGuard = undefined, Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined, Modifiers extends QueryModifiers = {}>(query: GraphQuery<Selection, Type, Include> & Modifiers): RelationQuery<'previous', Selection, Type, Include, Modifiers>;
46
+ /**
47
+ * The entries that link to the entry, eg. the products of a brand:
48
+ * `Query.referencedBy({type: Product})`. Set `field` to only follow one
49
+ * link field, eg. `{type: Product, field: Product.brand}`.
50
+ */
51
+ export declare function referencedBy<Selection extends SelectionGuard = undefined, Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined, Modifiers extends QueryModifiers = {}>(query: GraphQuery<Selection, Type, Include> & Modifiers & {
52
+ field?: HasField & Expr;
53
+ }): RelationQuery<'referencedBy', Selection, Type, Include, Modifiers> & {
54
+ field?: HasField & Expr;
55
+ };
package/dist/query.js CHANGED
@@ -38,6 +38,9 @@ function next(query) {
38
38
  function previous(query) {
39
39
  return { edge: "previous", ...query };
40
40
  }
41
+ function referencedBy(query) {
42
+ return { edge: "referencedBy", ...query };
43
+ }
41
44
  export {
42
45
  aliases,
43
46
  children,
@@ -51,6 +54,7 @@ export {
51
54
  parents,
52
55
  path,
53
56
  previous,
57
+ referencedBy,
54
58
  root,
55
59
  siblings,
56
60
  snippet,
package/dist/types.d.ts CHANGED
@@ -1,16 +1,19 @@
1
+ export type { DashboardEntry, EntryActionProps } from 'alinea/core/DashboardEntry';
2
+ export type { FieldOptions, WithoutLabel } from 'alinea/core/Field';
1
3
  export type { Filter } from 'alinea/core/Filter';
2
- export type { Graph, GraphQuery } from 'alinea/core/Graph';
4
+ export type { Graph, GraphQuery, QuerySettings } from 'alinea/core/Graph';
3
5
  export type { Infer } from 'alinea/core/Infer';
4
6
  export type { ListRow } from 'alinea/core/ListRow';
5
- export type { OverviewActionProps, OverviewBuiltins, OverviewCellProps, OverviewColumn, OverviewEntry, OverviewFilter, OverviewFilterOption, OverviewFormatContext, OverviewOptions, OverviewSort, OverviewSortBy, OverviewSortDirection, OverviewSortOption } from 'alinea/core/Overview';
7
+ export type { OverviewActionProps, OverviewBuiltins, OverviewCellProps, OverviewColumn, OverviewEntry, OverviewFilter, OverviewFilterContext, OverviewFilterOption, OverviewFilterOptions, OverviewFormatContext, OverviewHeaderProps, OverviewOptions, OverviewSort, OverviewSortBy, OverviewSortDirection, OverviewSortOption, OverviewTab } from 'alinea/core/Overview';
6
8
  export type { Root } from 'alinea/core/Root';
7
9
  export type { Schema } from 'alinea/core/Schema';
8
10
  export type { BlockNode, ElementNode, ImageNode, LinkMark, Mark, TextDoc, TextNode } from 'alinea/core/TextDoc';
9
11
  export type { EntryUrlMeta, Type } from 'alinea/core/Type';
10
12
  export type { Workspace } from 'alinea/core/Workspace';
11
- export type { EntryLink } from 'alinea/field/link/EntryLink';
12
- export type { FileLink } from 'alinea/field/link/FileLink';
13
- export type { ImageLink } from 'alinea/field/link/ImageLink';
13
+ export type { DashboardLocation } from 'alinea/dashboard/Href';
14
+ export type { EntriesOptions, EntryLink, EntryOptions } from 'alinea/field/link/EntryLink';
15
+ export type { FileLink, FileOptions, FilesOptions } from 'alinea/field/link/FileLink';
16
+ export type { ImageLink, ImageOptions, ImagesOptions } from 'alinea/field/link/ImageLink';
14
17
  export type { Link } from 'alinea/field/link/Link';
15
18
  export type { UrlLink } from 'alinea/field/link/UrlLink';
16
19
  export type { EntryReference } from 'alinea/picker/entry/EntryReference';
@@ -12,10 +12,12 @@ export interface StackProps extends PropsWithChildren<Omit<HTMLAttributes<HTMLEl
12
12
  autoWidth?: boolean;
13
13
  }
14
14
  /**
15
- * @deprecated Compatibility component for legacy dashboard extensions.
15
+ * @deprecated Compatibility component for legacy dashboard extensions, use
16
+ * `Stack` from `alinea/components`.
16
17
  */
17
18
  export declare const VStack: import("react").ForwardRefExoticComponent<StackProps & import("react").RefAttributes<HTMLElement>>;
18
19
  /**
19
- * @deprecated Compatibility component for legacy dashboard extensions.
20
+ * @deprecated Compatibility component for legacy dashboard extensions, use
21
+ * `<Stack direction="row">` from `alinea/components`.
20
22
  */
21
23
  export declare const HStack: import("react").ForwardRefExoticComponent<StackProps & import("react").RefAttributes<HTMLElement>>;
package/docs/ai-setup.md CHANGED
@@ -19,15 +19,15 @@ The rest of this page is written for the agent. You are adding Alinea, a git-bas
19
19
  Install the package in the project root.
20
20
 
21
21
  ```shellscript
22
- npm install alinea@preview
22
+ npm install alinea@rc
23
23
  ```
24
24
 
25
- With other package managers: `pnpm add alinea@preview`, `yarn add alinea@preview` or `bun add alinea@preview`.
25
+ With other package managers: `pnpm add alinea@rc`, `yarn add alinea@rc` or `bun add alinea@rc`.
26
26
 
27
27
  ## 3. Run alinea init
28
28
 
29
29
  ```shellscript
30
- npx alinea@preview init
30
+ npx alinea@rc init
31
31
  ```
32
32
 
33
33
  In a Next.js project `alinea init` creates:
package/docs/cli.md CHANGED
@@ -85,9 +85,11 @@ Options
85
85
  --fix Any missing or incorrect properties will be overwritten by their default
86
86
  ```
87
87
 
88
- `--config` and `--dir` work as for `alinea dev`. `--fix` rewrites content files whose data doesn't match the schema, filling missing or invalid properties with their defaults, and exits without running the command after `--`. Commit the result.
88
+ `--config` and `--dir` work as for `alinea dev`. `--fix` rewrites content files whose data doesn't match the schema, filling missing or invalid properties with their defaults, and points media files whose `location` is a url at the file of the same name in the `mediaDir`. It exits without running the command after `--`. Commit the result.
89
89
 
90
- The build stops with an error when the config can't be loaded, when `handlerUrl` is missing or when `baseUrl` has no production URL, see [Configuration](configuration.md).
90
+ The build stops with an error when the config can't be loaded, when `handlerUrl` is missing or when `baseUrl` has no production URL while `handlerUrl` is relative, see [Configuration](configuration.md).
91
+
92
+ `alinea dev` and `alinea build` warn about media files whose `location` is a url, which can't be served (some 1.x saves wrote the upload url there). The warning names the file and, when the `mediaDir` holds a file of the same name, suggests `alinea build --fix` to point the location at it.
91
93
 
92
94
  ## Deploying
93
95