alinea 2.0.0-preview.7 → 2.0.0-preview.9

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 (301) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/LICENSES.md +103 -103
  3. package/dist/adapter/next/cms.d.ts +18 -4
  4. package/dist/adapter/next/cms.js +141 -36
  5. package/dist/adapter/next/handler.d.ts +5 -1
  6. package/dist/adapter/next/handler.js +77 -17
  7. package/dist/adapter/next/node.d.ts +5 -0
  8. package/dist/adapter/next/node.js +16 -0
  9. package/dist/adapter/next/previews.d.ts +4 -1
  10. package/dist/adapter/next/previews.js +13 -1
  11. package/dist/adapter/next/renderStats.d.ts +45 -0
  12. package/dist/adapter/next/renderStats.js +142 -0
  13. package/dist/adapter/next/syncCheck.d.ts +8 -2
  14. package/dist/adapter/next/syncCheck.js +5 -11
  15. package/dist/adapter/next/with-alinea.js +6 -20
  16. package/dist/backend/HandleAction.d.ts +1 -1
  17. package/dist/backend/HandleAction.js +1 -1
  18. package/dist/backend/Handler.d.ts +2 -2
  19. package/dist/backend/Handler.js +45 -47
  20. package/dist/backend/api/CreateBackend.js +15 -3
  21. package/dist/backend/api/DatabaseApi.js +22 -135
  22. package/dist/backend/api/ProxyMedia.d.ts +2 -3
  23. package/dist/backend/api/ProxyMedia.js +7 -22
  24. package/dist/backend/api/database.js +15 -3
  25. package/dist/backend/resolver/ParsePreview.d.ts +2 -2
  26. package/dist/backend/router/NodeHandler.js +2 -0
  27. package/dist/backend/store/GeneratedDatabase.d.ts +8 -0
  28. package/dist/backend/store/GeneratedDatabase.js +33 -0
  29. package/dist/backend/store/GeneratedDatabaseNode.d.ts +4 -0
  30. package/dist/backend/store/GeneratedDatabaseNode.js +35 -0
  31. package/dist/backend/util/ORM.js +4 -2
  32. package/dist/bundled.d.ts +1565 -468
  33. package/dist/chunks/bun-sqlite-5SHXN3AT.js +18 -0
  34. package/dist/chunks/chunk-2BJ2IFQM.js +1085 -0
  35. package/dist/chunks/chunk-2PIFHEYR.js +364 -0
  36. package/dist/chunks/chunk-66YZ47TY.js +94 -0
  37. package/dist/chunks/chunk-76VMZTLN.js +55 -0
  38. package/dist/chunks/chunk-AIU6CMVT.js +495 -0
  39. package/dist/chunks/chunk-ASYKC6IE.js +103 -0
  40. package/dist/chunks/chunk-ATF42T2B.js +35 -0
  41. package/dist/chunks/{chunk-6P4UVRPH.js → chunk-DWR5A5KL.js} +6 -1
  42. package/dist/chunks/{chunk-NWQXN4SB.js → chunk-ETBQTP2S.js} +40 -29
  43. package/dist/chunks/chunk-ETWOY4AL.js +100 -0
  44. package/dist/chunks/chunk-K62JP6HR.js +22 -0
  45. package/dist/chunks/chunk-MOWR65LM.js +610 -0
  46. package/dist/chunks/chunk-N47Y62CI.js +396 -0
  47. package/dist/chunks/chunk-QBPYWU6C.js +24 -0
  48. package/dist/chunks/{chunk-X47OVDF3.js → chunk-QJGGYF6E.js} +356 -1000
  49. package/dist/chunks/chunk-QSN6RH6X.js +94 -0
  50. package/dist/chunks/{chunk-I4GC3E65.js → chunk-UPY2RUZF.js} +0 -1
  51. package/dist/chunks/chunk-XCZXR3C2.js +112 -0
  52. package/dist/chunks/chunk-XTWYBWP2.js +81 -0
  53. package/dist/chunks/node-sqlite-XVNTNMCY.js +18 -0
  54. package/dist/cli/Generate.js +74 -64
  55. package/dist/cli/Serve.js +1 -1
  56. package/dist/cli/bin.js +6 -1
  57. package/dist/cli/generate/CopyStaticFiles.js +17 -14
  58. package/dist/cli/generate/DevDB.d.ts +22 -5
  59. package/dist/cli/generate/DevDB.js +138 -24
  60. package/dist/cli/serve/CreateLocalServer.js +22 -4
  61. package/dist/cli/serve/DevServer.d.ts +2 -0
  62. package/dist/cli/serve/DevServer.js +7 -2
  63. package/dist/cli/serve/LiveReload.d.ts +1 -1
  64. package/dist/cli/serve/LiveReload.js +3 -0
  65. package/dist/cloud/CloudRemote.js +2 -1
  66. package/dist/components/Breadcrumbs.js +2 -2
  67. package/dist/components/Calendar.js +7 -7
  68. package/dist/components/Checkbox.js +1 -1
  69. package/dist/components/ColorSwatchPicker.js +2 -2
  70. package/dist/components/ComboBox.js +14 -14
  71. package/dist/components/DateField.js +1 -1
  72. package/dist/components/DatePicker.js +6 -6
  73. package/dist/components/DateRangePicker.js +4 -4
  74. package/dist/components/Disclosure.js +8 -8
  75. package/dist/components/Label.js +6 -6
  76. package/dist/components/List.js +33 -33
  77. package/dist/components/Menu.js +2 -2
  78. package/dist/components/Modal.js +2 -2
  79. package/dist/components/MultipleSelect.js +23 -23
  80. package/dist/components/NumberField.js +6 -6
  81. package/dist/components/ProgressCircle.js +3 -3
  82. package/dist/components/SearchField.js +8 -8
  83. package/dist/components/Select.js +8 -8
  84. package/dist/components/Surface.js +3 -3
  85. package/dist/components/Switch.js +2 -2
  86. package/dist/components/Table.js +7 -7
  87. package/dist/components/Tabs.js +2 -2
  88. package/dist/components/TagGroup.js +2 -2
  89. package/dist/components/TextField.js +2 -2
  90. package/dist/components/TimeField.js +3 -3
  91. package/dist/components/Toolbar.js +2 -2
  92. package/dist/components/Tooltip.js +4 -4
  93. package/dist/components/Tree.d.ts +2 -1
  94. package/dist/components/Tree.js +6 -6
  95. package/dist/core/Client.d.ts +1 -4
  96. package/dist/core/Client.js +5 -7
  97. package/dist/core/Connection.d.ts +4 -1
  98. package/dist/core/Connection.js +3 -1
  99. package/dist/core/Document.js +15 -3
  100. package/dist/core/Entry.d.ts +3 -0
  101. package/dist/core/Entry.js +4 -0
  102. package/dist/core/EntrySeed.d.ts +19 -0
  103. package/dist/core/EntrySeed.js +136 -0
  104. package/dist/core/Field.d.ts +7 -0
  105. package/dist/core/Field.js +4 -0
  106. package/dist/core/Filter.d.ts +40 -2
  107. package/dist/core/Filter.js +145 -0
  108. package/dist/core/Graph.d.ts +9 -0
  109. package/dist/core/ListRow.d.ts +1 -0
  110. package/dist/core/ListRow.js +1 -0
  111. package/dist/core/Reference.d.ts +1 -0
  112. package/dist/core/Root.js +1 -1
  113. package/dist/core/Scope.d.ts +2 -0
  114. package/dist/core/Scope.js +16 -1
  115. package/dist/core/Type.d.ts +2 -1
  116. package/dist/core/Type.js +13 -1
  117. package/dist/core/db/EntryAliases.js +1 -11
  118. package/dist/core/db/EntryReference.d.ts +0 -6
  119. package/dist/core/db/IndexEvent.d.ts +2 -1
  120. package/dist/core/db/IndexEvent.js +11 -3
  121. package/dist/core/db/LinkResolver.d.ts +6 -6
  122. package/dist/core/db/LinkResolver.js +0 -52
  123. package/dist/core/db/LocalStore.d.ts +27 -0
  124. package/dist/core/field/ListField.js +19 -0
  125. package/dist/core/field/RecordField.js +8 -0
  126. package/dist/core/field/RichTextField.js +42 -0
  127. package/dist/core/field/UnionField.js +8 -0
  128. package/dist/core/source/FSSource.d.ts +14 -2
  129. package/dist/core/source/FSSource.js +58 -13
  130. package/dist/core/source/GitUtils.d.ts +4 -0
  131. package/dist/core/source/GitUtils.js +9 -10
  132. package/dist/core/source/GithubSource.js +60 -21
  133. package/dist/core/source/IndexedDBSource.d.ts +2 -1
  134. package/dist/core/source/IndexedDBSource.js +67 -53
  135. package/dist/core/source/MemorySource.js +5 -3
  136. package/dist/core/source/OverlaySource.d.ts +5 -2
  137. package/dist/core/source/OverlaySource.js +31 -3
  138. package/dist/core/source/Source.d.ts +3 -0
  139. package/dist/core/source/Source.js +15 -2
  140. package/dist/core/source/Tree.d.ts +10 -7
  141. package/dist/core/source/Tree.js +118 -70
  142. package/dist/core/source/Utils.js +6 -3
  143. package/dist/core/util/Arrays.d.ts +1 -0
  144. package/dist/core/util/Arrays.js +10 -0
  145. package/dist/core/util/Async.d.ts +7 -0
  146. package/dist/core/util/Async.js +15 -0
  147. package/dist/core/util/Checks.js +1 -1
  148. package/dist/core/util/EntryFilenames.d.ts +22 -1
  149. package/dist/core/util/EntryFilenames.js +56 -2
  150. package/dist/core/util/IndexedDB.d.ts +4 -0
  151. package/dist/core/util/IndexedDB.js +20 -0
  152. package/dist/core/util/Paths.js +5 -1
  153. package/dist/dashboard/App.js +3 -3
  154. package/dist/dashboard/ViewKeys.d.ts +1 -0
  155. package/dist/dashboard/ViewKeys.js +1 -0
  156. package/dist/dashboard/app/AccessDenied.js +2 -2
  157. package/dist/dashboard/app/ActivityStatus.js +14 -14
  158. package/dist/dashboard/app/AppShell.js +2 -2
  159. package/dist/dashboard/app/AuthView.js +12 -12
  160. package/dist/dashboard/app/CompactField.js +11 -11
  161. package/dist/dashboard/app/DashboardErrorBoundary.js +6 -6
  162. package/dist/dashboard/app/DashboardLayout.js +3 -3
  163. package/dist/dashboard/app/EntryHeader.js +8 -8
  164. package/dist/dashboard/app/EntryReferences.js +8 -8
  165. package/dist/dashboard/app/EntrySidebar.js +15 -15
  166. package/dist/dashboard/app/EntrySidebarPreview.js +7 -7
  167. package/dist/dashboard/app/EntryTranslationBanner.js +5 -5
  168. package/dist/dashboard/app/Explorer.js +39 -39
  169. package/dist/dashboard/app/ExplorerCards.js +31 -31
  170. package/dist/dashboard/app/ExplorerFileCard.js +19 -19
  171. package/dist/dashboard/app/ExplorerList.js +10 -10
  172. package/dist/dashboard/app/ExplorerModal.js +5 -5
  173. package/dist/dashboard/app/ExplorerTable.js +47 -47
  174. package/dist/dashboard/app/LinkPicker.js +5 -5
  175. package/dist/dashboard/app/LocaleMenu.js +4 -4
  176. package/dist/dashboard/app/SidebarTree.js +76 -40
  177. package/dist/dashboard/app/WorkspaceMenu.js +9 -9
  178. package/dist/dashboard/app/WorkspaceRoots.js +22 -22
  179. package/dist/dashboard/app/editor/FileEditor.js +28 -28
  180. package/dist/dashboard/app/editor/FilePreview.js +6 -6
  181. package/dist/dashboard/app/modals/CreateEntry.js +3 -3
  182. package/dist/dashboard/app/pages/EntryPage.js +18 -18
  183. package/dist/dashboard/app/pages/RootPage.js +3 -3
  184. package/dist/dashboard/app/pages/SplashPage.js +45 -45
  185. package/dist/dashboard/app/pages/UsersPage.js +34 -34
  186. package/dist/dashboard/app/ui/DashboardModal.js +18 -18
  187. package/dist/dashboard/app/ui/Rail.js +5 -5
  188. package/dist/dashboard/app/ui/Sidebar.js +2 -2
  189. package/dist/dashboard/atoms/config.d.ts +4 -4
  190. package/dist/dashboard/atoms/entry.d.ts +8 -9
  191. package/dist/dashboard/atoms/entry.js +34 -4
  192. package/dist/dashboard/atoms/explorer.d.ts +2 -0
  193. package/dist/dashboard/atoms/explorer.js +7 -2
  194. package/dist/dashboard/boot/Boot.js +2 -3
  195. package/dist/dashboard/boot/DashboardWorker.d.ts +3 -3
  196. package/dist/dashboard/boot/DashboardWorker.js +82 -27
  197. package/dist/dashboard/boot/LoadWorker.js +2 -3
  198. package/dist/dashboard/boot/WorkerDB.d.ts +2 -2
  199. package/dist/dashboard/icons.d.ts +2 -0
  200. package/dist/dashboard/icons.js +40 -0
  201. package/dist/dashboard/plugins/alineaFixturePlugin.js +14 -3
  202. package/dist/database/BrowserEntryStore.d.ts +42 -0
  203. package/dist/database/BrowserEntryStore.js +182 -0
  204. package/dist/database/DatabaseSource.d.ts +13 -0
  205. package/dist/database/DatabaseSource.js +25 -0
  206. package/dist/database/DatabaseTables.d.ts +38 -0
  207. package/dist/database/DatabaseTables.js +53 -0
  208. package/dist/database/EntryDatabase.d.ts +97 -0
  209. package/dist/database/EntryDatabase.js +528 -0
  210. package/dist/database/EntryStore.d.ts +58 -0
  211. package/dist/database/EntryStore.js +230 -0
  212. package/dist/database/EntryTransaction.d.ts +33 -0
  213. package/dist/database/EntryTransaction.js +907 -0
  214. package/dist/database/EntryUrlAliases.d.ts +2 -0
  215. package/dist/database/EntryUrlAliases.js +69 -0
  216. package/dist/database/LocalDB.d.ts +39 -0
  217. package/dist/database/LocalDB.js +79 -0
  218. package/dist/database/Version.d.ts +9 -0
  219. package/dist/database/Version.js +13 -0
  220. package/dist/database/driver/DatabaseHandle.d.ts +17 -0
  221. package/dist/database/driver/DatabaseHandle.js +0 -0
  222. package/dist/database/driver/OverlayExtension.browser.d.ts +2 -0
  223. package/dist/database/driver/OverlayExtension.browser.js +9 -0
  224. package/dist/database/driver/OverlayExtension.d.ts +1 -0
  225. package/dist/database/driver/OverlayExtension.js +7 -0
  226. package/dist/database/driver/RuntimeDatabase.d.ts +13 -0
  227. package/dist/database/driver/RuntimeDatabase.js +77 -0
  228. package/dist/database/driver/WasmDatabase.d.ts +29 -0
  229. package/dist/database/driver/WasmDatabase.js +46 -0
  230. package/dist/database/entry/EntryData.d.ts +13 -0
  231. package/dist/database/entry/EntryData.js +51 -0
  232. package/dist/database/entry/EntryTable.d.ts +189 -0
  233. package/dist/database/entry/EntryTable.js +186 -0
  234. package/dist/database/query/Condition.d.ts +8 -0
  235. package/dist/database/query/Condition.js +117 -0
  236. package/dist/database/query/EntryQuery.d.ts +44 -0
  237. package/dist/database/query/EntryQuery.js +412 -0
  238. package/dist/database/query/EntryReferences.d.ts +5 -0
  239. package/dist/database/query/EntryReferences.js +70 -0
  240. package/dist/database/query/Relation.d.ts +11 -0
  241. package/dist/database/query/Relation.js +113 -0
  242. package/dist/database/query/ResolveQuery.d.ts +12 -0
  243. package/dist/database/query/ResolveQuery.js +189 -0
  244. package/dist/database/query/Search.d.ts +38 -0
  245. package/dist/database/query/Search.js +149 -0
  246. package/dist/database/sync/Derive.d.ts +8 -0
  247. package/dist/database/sync/Derive.js +270 -0
  248. package/dist/database/sync/EntryParser.d.ts +8 -0
  249. package/dist/database/sync/EntryParser.js +90 -0
  250. package/dist/database/sync/EntrySyncer.d.ts +25 -0
  251. package/dist/database/sync/EntrySyncer.js +89 -0
  252. package/dist/database/sync/Ingest.d.ts +21 -0
  253. package/dist/database/sync/Ingest.js +145 -0
  254. package/dist/database/sync/SyncQueries.d.ts +160 -0
  255. package/dist/database/sync/SyncQueries.js +216 -0
  256. package/dist/field/check/CheckField.view.js +2 -2
  257. package/dist/field/code/CodeField.view.js +10 -10
  258. package/dist/field/link/LinkField.js +23 -0
  259. package/dist/field/link/LinkField.view.js +42 -41
  260. package/dist/field/list/ListField.view.js +172 -150
  261. package/dist/field/metadata/MetadataField.d.ts +28 -3
  262. package/dist/field/metadata/MetadataField.js +44 -7
  263. package/dist/field/metadata/MetadataField.view.d.ts +5 -0
  264. package/dist/field/metadata/MetadataField.view.js +31 -16
  265. package/dist/field/richtext/RichTextDocument.js +4 -3
  266. package/dist/field/richtext/RichTextExtensions.d.ts +1 -1
  267. package/dist/field/richtext/RichTextExtensions.js +33 -29
  268. package/dist/field/richtext/RichTextField.view.js +17 -8
  269. package/dist/field/richtext/RichTextInsertMenu.js +2 -2
  270. package/dist/field/views.js +2 -0
  271. package/dist/next.cjs +6 -20
  272. package/dist/next.d.ts +4 -3
  273. package/dist/next.edge.d.ts +1 -1
  274. package/dist/next.js +1 -2
  275. package/dist/picker/entry/EntryPicker.js +2 -1
  276. package/dist/picker/url/UrlPicker.js +1 -0
  277. package/dist/preview/widget.d.ts +45 -0
  278. package/dist/preview/widget.js +96 -1
  279. package/dist/query.d.ts +28 -0
  280. package/package.json +6 -1
  281. package/dist/adapter/next/DevRemote.d.ts +0 -3
  282. package/dist/adapter/next/DevRemote.js +0 -45
  283. package/dist/backend/store/GeneratedSource.d.ts +0 -2
  284. package/dist/backend/store/GeneratedSource.js +0 -21
  285. package/dist/chunks/chunk-G6E35DMJ.js +0 -1997
  286. package/dist/core/db/EntryDB.d.ts +0 -19
  287. package/dist/core/db/EntryDB.js +0 -48
  288. package/dist/core/db/EntryIndex.d.ts +0 -143
  289. package/dist/core/db/EntryIndex.js +0 -2773
  290. package/dist/core/db/EntryReferenceIndex.d.ts +0 -21
  291. package/dist/core/db/EntryReferenceIndex.js +0 -131
  292. package/dist/core/db/EntryResolver.d.ts +0 -56
  293. package/dist/core/db/EntryResolver.js +0 -699
  294. package/dist/core/db/EntryTarget.d.ts +0 -5
  295. package/dist/core/db/EntryTransaction.d.ts +0 -31
  296. package/dist/core/db/EntryTransaction.js +0 -956
  297. package/dist/core/db/LocalDB.d.ts +0 -42
  298. package/dist/core/db/LocalDB.js +0 -127
  299. package/dist/core/db/TestDB.d.ts +0 -19
  300. package/dist/core/db/TestDB.js +0 -50
  301. /package/dist/core/db/{EntryTarget.js → LocalStore.js} +0 -0
@@ -0,0 +1,216 @@
1
+ import {
2
+ count,
3
+ max,
4
+ min
5
+ } from "../../chunks/chunk-QBPYWU6C.js";
6
+ import {
7
+ Builder
8
+ } from "../../chunks/chunk-2BJ2IFQM.js";
9
+ import {
10
+ and,
11
+ eq,
12
+ gt,
13
+ inArray,
14
+ lt,
15
+ ne,
16
+ or,
17
+ when
18
+ } from "../../chunks/chunk-XCZXR3C2.js";
19
+ import "../../chunks/chunk-2PIFHEYR.js";
20
+ import "../../chunks/chunk-K62JP6HR.js";
21
+ import "../../chunks/chunk-ATF42T2B.js";
22
+ import {
23
+ sql
24
+ } from "../../chunks/chunk-ETBQTP2S.js";
25
+ import "../../chunks/chunk-CQ52GEHY.js";
26
+
27
+ // src/database/sync/SyncQueries.ts
28
+ import { DatabaseStateTable } from "../DatabaseTables.js";
29
+ import { entryDataText } from "../entry/EntryData.js";
30
+ import {
31
+ EntryIndexColumns,
32
+ EntryIndexTable,
33
+ EntryReferenceTable
34
+ } from "../entry/EntryTable.js";
35
+ import { EntrySearchTable } from "../query/Search.js";
36
+ var sqliteBatchSize = 5e3;
37
+ var builder = new Builder();
38
+ var ids = sql.placeholder("ids");
39
+ var versionIds = sql.placeholder("versionIds");
40
+ var filePaths = sql.placeholder("filePaths");
41
+ var dirs = sql.placeholder("dirs");
42
+ var dir = sql.placeholder("dir");
43
+ var from = sql.placeholder("from");
44
+ var to = sql.placeholder("to");
45
+ var revision = sql.placeholder("revision");
46
+ var treeSnapshot = sql.placeholder("tree");
47
+ var targets = sql.placeholder("targets");
48
+ function inJson(column, values) {
49
+ return sql`${column} in (select value from json_each(${values}))`;
50
+ }
51
+ function versionFields(entries) {
52
+ return {
53
+ versionId: entries.versionId,
54
+ id: entries.id,
55
+ locale: entries.locale,
56
+ versionStatus: entries.versionStatus,
57
+ type: entries.type,
58
+ index: entries.index,
59
+ workspace: entries.workspace,
60
+ root: entries.root,
61
+ path: entries.path,
62
+ filePath: entries.filePath,
63
+ level: entries.level,
64
+ parentDir: entries.parentDir,
65
+ childrenDir: entries.childrenDir,
66
+ childrenSha: entries.childrenSha,
67
+ parentId: entries.parentId,
68
+ parents: entries.parents,
69
+ status: entries.status,
70
+ active: entries.active,
71
+ main: entries.main,
72
+ visible: entries.visible,
73
+ url: entries.url
74
+ };
75
+ }
76
+ function insertEntryQuery(entries, jsonb) {
77
+ const { rowid: _, ...columns } = EntryIndexColumns;
78
+ const values = Object.fromEntries(
79
+ Object.keys(columns).map((name) => [name, sql.placeholder(name)])
80
+ );
81
+ if (jsonb) values.data = sql`jsonb(${values.data})`;
82
+ return builder.insert(entries).values(values);
83
+ }
84
+ function insertEntryValues(row) {
85
+ return {
86
+ ...row,
87
+ parents: JSON.stringify(row.parents),
88
+ active: Number(row.active),
89
+ main: Number(row.main),
90
+ visible: Number(row.visible)
91
+ };
92
+ }
93
+ function prepareSyncQueries(db, jsonb) {
94
+ const entries = EntryIndexTable;
95
+ const state = DatabaseStateTable;
96
+ const search = EntrySearchTable;
97
+ const references = EntryReferenceTable;
98
+ const storedVersion = or(
99
+ inJson(entries.filePath, filePaths),
100
+ inJson(entries.versionId, versionIds)
101
+ );
102
+ const activeCount = count(
103
+ when([eq(entries.active, true), sql.value(1)], null)
104
+ );
105
+ const mainCount = count(when([eq(entries.main, true), sql.value(1)], null));
106
+ const parentKey = sql`coalesce(${entries.parentId}, '')`;
107
+ const statements = {
108
+ revision: builder.select({ revision: state.revision }).from(state).where(eq(state.id, 1)).$first().prepare(void 0, db),
109
+ tree: builder.select({ tree: state.tree }).from(state).where(eq(state.id, 1)).$first().prepare(void 0, db),
110
+ setRevision: builder.update(state).set({ revision, tree: sql`${treeSnapshot}` }).where(eq(state.id, 1)).prepare(void 0, db),
111
+ entryCount: builder.select({ value: count() }).from(entries).where(sql.value(true)).$first().prepare(void 0, db),
112
+ insertEntry: insertEntryQuery(entries, jsonb).prepare(void 0, db),
113
+ /** Index the entry row inserted last, under its rowid. */
114
+ insertSearch: builder.insert(search).values({
115
+ rowid: sql`last_insert_rowid()`,
116
+ title: sql.placeholder("title"),
117
+ body: sql.placeholder("body")
118
+ }).prepare(void 0, db),
119
+ /** Record the entry ids a version references, under its rowid. */
120
+ insertReferences: builder.insert(references).select(
121
+ builder.select({
122
+ targetId: sql`value`,
123
+ source: builder.select(entries.rowid).from(entries).where(
124
+ eq(entries.versionId, sql.placeholder("versionId"))
125
+ )
126
+ }).from(sql`json_each(${targets})`)
127
+ ).prepare(void 0, db),
128
+ /** Versions stored at these file paths or under these version ids. */
129
+ storedFiles: builder.select({
130
+ id: entries.id,
131
+ filePath: entries.filePath,
132
+ childrenDir: entries.childrenDir,
133
+ childrenSha: entries.childrenSha
134
+ }).from(entries).where(storedVersion).prepare(void 0, db),
135
+ /** Delete the versions stored at these file paths or version ids. */
136
+ deleteFiles: builder.delete(entries).where(storedVersion).prepare(void 0, db),
137
+ /** Delete the search rows of those versions, before the versions. */
138
+ deleteSearch: builder.delete(search).where(
139
+ inArray(
140
+ search.rowid,
141
+ builder.select(entries.rowid).from(entries).where(storedVersion)
142
+ )
143
+ ).prepare(void 0, db),
144
+ /** Delete the reference rows of those versions, before the versions. */
145
+ deleteReferences: builder.delete(references).where(
146
+ inArray(
147
+ references.source,
148
+ builder.select(entries.rowid).from(entries).where(storedVersion)
149
+ )
150
+ ).prepare(void 0, db),
151
+ directories: builder.select({
152
+ id: entries.id,
153
+ childrenDir: entries.childrenDir,
154
+ childrenSha: entries.childrenSha
155
+ }).from(entries).where(inJson(entries.childrenDir, dirs)).prepare(void 0, db),
156
+ updateChildrenSha: builder.update(entries).set({ childrenSha: sql.placeholder("sha") }).where(eq(entries.childrenDir, dir)).prepare(void 0, db),
157
+ /** Every version of these entries. */
158
+ versionsOf: builder.select(versionFields(entries)).from(entries).where(inJson(entries.id, ids)).prepare(void 0, db),
159
+ /** Every version stored below one directory. */
160
+ versionsBelow: builder.select(versionFields(entries)).from(entries).where(and(gt(entries.filePath, from), lt(entries.filePath, to))).prepare(void 0, db),
161
+ /** The entry owning each directory: children stored there have it as parent. */
162
+ owners: builder.select({ childrenDir: entries.childrenDir, id: entries.id }).from(entries).where(inJson(entries.childrenDir, dirs)).groupBy(entries.childrenDir).prepare(void 0, db),
163
+ statusesOf: builder.select({ id: entries.id, locale: entries.locale, status: entries.status }).from(entries).where(inJson(entries.id, ids)).prepare(void 0, db),
164
+ dataOf: builder.select({ versionId: entries.versionId, data: entryDataText(entries) }).from(entries).where(inJson(entries.versionId, versionIds)).prepare(void 0, db),
165
+ updateVersion: builder.update(entries).set({
166
+ parentId: sql.placeholder("parentId"),
167
+ parents: sql.placeholder("parents"),
168
+ status: sql.placeholder("status"),
169
+ active: sql.placeholder("active"),
170
+ main: sql.placeholder("main"),
171
+ visible: sql.placeholder("visible"),
172
+ url: sql.placeholder("url")
173
+ }).where(eq(entries.versionId, sql.placeholder("versionId"))).prepare(void 0, db),
174
+ /** An entry whose versions disagree on what all of them must share. */
175
+ mismatchedEntry: builder.select({ id: entries.id }).from(entries).where(inJson(entries.id, ids)).groupBy(entries.id).having(
176
+ or(
177
+ ne(min(entries.type), max(entries.type)),
178
+ ne(min(entries.index), max(entries.index)),
179
+ ne(min(entries.root), max(entries.root)),
180
+ ne(min(entries.workspace), max(entries.workspace)),
181
+ ne(min(parentKey), max(parentKey))
182
+ )
183
+ ).$first().prepare(void 0, db),
184
+ /** A language whose versions disagree on their location. */
185
+ mismatchedLanguage: builder.select({ id: entries.id, locale: entries.locale }).from(entries).where(inJson(entries.id, ids)).groupBy(entries.id, entries.locale).having(
186
+ or(
187
+ ne(min(entries.path), max(entries.path)),
188
+ ne(min(entries.parentDir), max(entries.parentDir)),
189
+ ne(min(entries.childrenDir), max(entries.childrenDir))
190
+ )
191
+ ).$first().prepare(void 0, db),
192
+ /** A language without exactly one active and one main version. */
193
+ invalidStatus: builder.select({ id: entries.id, locale: entries.locale }).from(entries).where(inJson(entries.id, ids)).groupBy(entries.id, entries.locale).having(or(ne(activeCount, 1), ne(mainCount, 1))).$first().prepare(void 0, db),
194
+ /** A version listed among its own parents. */
195
+ cyclicVersion: builder.select({ filePath: entries.filePath }).from(entries).where(
196
+ and(
197
+ inJson(entries.id, ids),
198
+ sql`exists (
199
+ select 1 from json_each(${entries.parents}) parent
200
+ where parent.value = ${entries.id}
201
+ )`
202
+ )
203
+ ).$first().prepare(void 0, db)
204
+ };
205
+ return {
206
+ ...statements,
207
+ free() {
208
+ for (const statement of Object.values(statements)) statement.free();
209
+ }
210
+ };
211
+ }
212
+ export {
213
+ insertEntryValues,
214
+ prepareSyncQueries,
215
+ sqliteBatchSize
216
+ };
@@ -9,9 +9,9 @@ import { useField, useFieldError, useFieldOptions } from "alinea/dashboard/hooks
9
9
 
10
10
  // src/field/check/CheckField.module.css
11
11
  var CheckField_default = {
12
+ "checkline": "alinea-checkline",
12
13
  "checkline-required": "alinea-checkline-required",
13
- "checklineRequired": "alinea-checkline-required",
14
- "checkline": "alinea-checkline"
14
+ "checklineRequired": "alinea-checkline-required"
15
15
  };
16
16
 
17
17
  // src/field/check/CheckField.view.tsx
@@ -66,25 +66,25 @@ import { Fragment, useId } from "react";
66
66
  var CodeField_default = {
67
67
  "CodeEditorInput-comment": "alinea-CodeEditorInput-comment",
68
68
  "CodeEditorInputComment": "alinea-CodeEditorInput-comment",
69
- "CodeEditorInput-punctuation": "alinea-CodeEditorInput-punctuation",
70
- "CodeEditorInputPunctuation": "alinea-CodeEditorInput-punctuation",
69
+ "CodeEditorInput-number": "alinea-CodeEditorInput-number",
70
+ "CodeEditorInputNumber": "alinea-CodeEditorInput-number",
71
71
  "CodeEditorInput-regex": "alinea-CodeEditorInput-regex",
72
72
  "CodeEditorInputRegex": "alinea-CodeEditorInput-regex",
73
- "CodeEditorInput-editor": "alinea-CodeEditorInput-editor",
74
- "CodeEditorInputEditor": "alinea-CodeEditorInput-editor",
73
+ "CodeEditorInput-punctuation": "alinea-CodeEditorInput-punctuation",
74
+ "CodeEditorInputPunctuation": "alinea-CodeEditorInput-punctuation",
75
75
  "CodeEditorInput-keyword": "alinea-CodeEditorInput-keyword",
76
76
  "CodeEditorInputKeyword": "alinea-CodeEditorInput-keyword",
77
- "CodeEditorInput-pre": "alinea-CodeEditorInput-pre",
78
- "CodeEditorInputPre": "alinea-CodeEditorInput-pre",
79
- "CodeEditorInput-number": "alinea-CodeEditorInput-number",
80
- "CodeEditorInputNumber": "alinea-CodeEditorInput-number",
81
77
  "CodeEditorInput-identifier": "alinea-CodeEditorInput-identifier",
82
78
  "CodeEditorInputIdentifier": "alinea-CodeEditorInput-identifier",
79
+ "CodeEditorInput-editor": "alinea-CodeEditorInput-editor",
80
+ "CodeEditorInputEditor": "alinea-CodeEditorInput-editor",
81
+ "CodeEditorInput-string": "alinea-CodeEditorInput-string",
82
+ "CodeEditorInputString": "alinea-CodeEditorInput-string",
83
83
  "CodeEditorInput": "alinea-CodeEditorInput",
84
84
  "CodeEditorInput-textarea": "alinea-CodeEditorInput-textarea",
85
85
  "CodeEditorInputTextarea": "alinea-CodeEditorInput-textarea",
86
- "CodeEditorInput-string": "alinea-CodeEditorInput-string",
87
- "CodeEditorInputString": "alinea-CodeEditorInput-string"
86
+ "CodeEditorInput-pre": "alinea-CodeEditorInput-pre",
87
+ "CodeEditorInputPre": "alinea-CodeEditorInput-pre"
88
88
  };
89
89
 
90
90
  // src/field/code/CodeField.view.tsx
@@ -11,6 +11,7 @@ import { ListRow } from "alinea/core/ListRow";
11
11
  import { entries, fromEntries } from "alinea/core/util/Objects";
12
12
  import { viewKeys } from "alinea/dashboard/ViewKeys";
13
13
  import { unresolvedEntryMarker } from "alinea/picker/entry/EntryPicker";
14
+ import { EntryReference } from "alinea/picker/entry/EntryReference";
14
15
  var LinkField = class extends UnionField {
15
16
  first(query) {
16
17
  return { edge: "entrySingle", first: true, field: this, ...query };
@@ -43,6 +44,9 @@ function createLink(label, options) {
43
44
  }
44
45
  ];
45
46
  },
47
+ localizeLinks(value, context) {
48
+ return localizeEntryLink(value, context);
49
+ },
46
50
  view: viewKeys.SingleLinkInput
47
51
  });
48
52
  }
@@ -98,6 +102,17 @@ function createLinks(label, options) {
98
102
  }
99
103
  return result;
100
104
  },
105
+ localizeLinks(rows, context) {
106
+ if (!Array.isArray(rows)) return rows;
107
+ let next = rows;
108
+ rows.forEach((row, index) => {
109
+ const localized = localizeEntryLink(row, context);
110
+ if (localized === row) return;
111
+ if (next === rows) next = [...rows];
112
+ next[index] = localized;
113
+ });
114
+ return next;
115
+ },
101
116
  view: viewKeys.MultipleLinksInput
102
117
  });
103
118
  }
@@ -106,6 +121,14 @@ function entryIdOf(value) {
106
121
  const entry = value._entry;
107
122
  return typeof entry === "string" ? entry : void 0;
108
123
  }
124
+ function localizeEntryLink(value, context) {
125
+ if (!value || value[Reference.type] !== "entry") return value;
126
+ const entryId = entryIdOf(value);
127
+ if (!entryId || !context.entryIds.has(entryId)) return value;
128
+ if (value[EntryReference.locale] === context.locale)
129
+ return value;
130
+ return { ...value, [EntryReference.locale]: context.locale };
131
+ }
109
132
  function entryLinkType(type) {
110
133
  return type === "entry" || type === "image" || type === "file" ? type : void 0;
111
134
  }
@@ -89,56 +89,56 @@ import { Fragment, useMemo, useRef, useState } from "react";
89
89
 
90
90
  // src/field/link/LinkField.module.css
91
91
  var LinkField_default = {
92
- "LinkFieldView-labelText": "alinea-LinkFieldView-labelText",
93
- "LinkFieldViewLabelText": "alinea-LinkFieldView-labelText",
94
- "LinkFieldView-skeleton-pulse": "alinea-LinkFieldView-skeleton-pulse",
95
- "LinkFieldViewSkeletonPulse": "alinea-LinkFieldView-skeleton-pulse",
92
+ "is-loading": "alinea-is-loading",
93
+ "isLoading": "alinea-is-loading",
94
+ "LinkFieldView-create": "alinea-LinkFieldView-create",
95
+ "LinkFieldViewCreate": "alinea-LinkFieldView-create",
96
+ "LinkFieldView-label": "alinea-LinkFieldView-label",
97
+ "LinkFieldViewLabel": "alinea-LinkFieldView-label",
98
+ "LinkFieldView-image": "alinea-LinkFieldView-image",
99
+ "LinkFieldViewImage": "alinea-LinkFieldView-image",
100
+ "LinkFieldView-anchorOption-label": "alinea-LinkFieldView-anchorOption-label",
101
+ "LinkFieldViewAnchorOptionLabel": "alinea-LinkFieldView-anchorOption-label",
96
102
  "LinkFieldView-title": "alinea-LinkFieldView-title",
97
103
  "LinkFieldViewTitle": "alinea-LinkFieldView-title",
104
+ "LinkFieldView-anchorOption-location": "alinea-LinkFieldView-anchorOption-location",
105
+ "LinkFieldViewAnchorOptionLocation": "alinea-LinkFieldView-anchorOption-location",
106
+ "LinkFieldView-metaLabel": "alinea-LinkFieldView-metaLabel",
107
+ "LinkFieldViewMetaLabel": "alinea-LinkFieldView-metaLabel",
98
108
  "LinkFieldView-imagePlaceholder": "alinea-LinkFieldView-imagePlaceholder",
99
109
  "LinkFieldViewImagePlaceholder": "alinea-LinkFieldView-imagePlaceholder",
100
- "LinkFieldView-anchorOption-label": "alinea-LinkFieldView-anchorOption-label",
101
- "LinkFieldViewAnchorOptionLabel": "alinea-LinkFieldView-anchorOption-label",
110
+ "LinkFieldView-skeleton-pulse": "alinea-LinkFieldView-skeleton-pulse",
111
+ "LinkFieldViewSkeletonPulse": "alinea-LinkFieldView-skeleton-pulse",
102
112
  "LinkFieldView-previewImage": "alinea-LinkFieldView-previewImage",
103
113
  "LinkFieldViewPreviewImage": "alinea-LinkFieldView-previewImage",
104
- "LinkFieldView-metaLabel": "alinea-LinkFieldView-metaLabel",
105
- "LinkFieldViewMetaLabel": "alinea-LinkFieldView-metaLabel",
106
- "LinkFieldView-anchorOption": "alinea-LinkFieldView-anchorOption",
107
- "LinkFieldViewAnchorOption": "alinea-LinkFieldView-anchorOption",
108
- "LinkFieldView-icon": "alinea-LinkFieldView-icon",
109
- "LinkFieldViewIcon": "alinea-LinkFieldView-icon",
110
- "LinkFieldView-createButton": "alinea-LinkFieldView-createButton",
111
- "LinkFieldViewCreateButton": "alinea-LinkFieldView-createButton",
112
114
  "is-wide": "alinea-is-wide",
113
115
  "isWide": "alinea-is-wide",
114
- "LinkFieldView-rowAction": "alinea-LinkFieldView-rowAction",
115
- "LinkFieldViewRowAction": "alinea-LinkFieldView-rowAction",
116
- "LinkFieldView-skeleton": "alinea-LinkFieldView-skeleton",
117
- "LinkFieldViewSkeleton": "alinea-LinkFieldView-skeleton",
118
- "LinkFieldView-rowDropTarget": "alinea-LinkFieldView-rowDropTarget",
119
- "LinkFieldViewRowDropTarget": "alinea-LinkFieldView-rowDropTarget",
120
- "LinkFieldView-previewImagePlaceholder": "alinea-LinkFieldView-previewImagePlaceholder",
121
- "LinkFieldViewPreviewImagePlaceholder": "alinea-LinkFieldView-previewImagePlaceholder",
122
- "LinkFieldView-dropIndicator": "alinea-LinkFieldView-dropIndicator",
123
- "LinkFieldViewDropIndicator": "alinea-LinkFieldView-dropIndicator",
124
- "LinkFieldView-image": "alinea-LinkFieldView-image",
125
- "LinkFieldViewImage": "alinea-LinkFieldView-image",
126
- "LinkFieldView-type": "alinea-LinkFieldView-type",
127
- "LinkFieldViewType": "alinea-LinkFieldView-type",
116
+ "LinkFieldView-createButton": "alinea-LinkFieldView-createButton",
117
+ "LinkFieldViewCreateButton": "alinea-LinkFieldView-createButton",
128
118
  "is-missing": "alinea-is-missing",
129
119
  "isMissing": "alinea-is-missing",
130
120
  "LinkFieldView-inputHeader": "alinea-LinkFieldView-inputHeader",
131
121
  "LinkFieldViewInputHeader": "alinea-LinkFieldView-inputHeader",
132
- "LinkFieldView-anchorOption-location": "alinea-LinkFieldView-anchorOption-location",
133
- "LinkFieldViewAnchorOptionLocation": "alinea-LinkFieldView-anchorOption-location",
134
- "is-loading": "alinea-is-loading",
135
- "isLoading": "alinea-is-loading",
136
- "LinkFieldView-label": "alinea-LinkFieldView-label",
137
- "LinkFieldViewLabel": "alinea-LinkFieldView-label",
122
+ "LinkFieldView-labelText": "alinea-LinkFieldView-labelText",
123
+ "LinkFieldViewLabelText": "alinea-LinkFieldView-labelText",
124
+ "LinkFieldView-type": "alinea-LinkFieldView-type",
125
+ "LinkFieldViewType": "alinea-LinkFieldView-type",
138
126
  "LinkFieldView-meta": "alinea-LinkFieldView-meta",
139
127
  "LinkFieldViewMeta": "alinea-LinkFieldView-meta",
140
- "LinkFieldView-create": "alinea-LinkFieldView-create",
141
- "LinkFieldViewCreate": "alinea-LinkFieldView-create"
128
+ "LinkFieldView-rowDropTarget": "alinea-LinkFieldView-rowDropTarget",
129
+ "LinkFieldViewRowDropTarget": "alinea-LinkFieldView-rowDropTarget",
130
+ "LinkFieldView-previewImagePlaceholder": "alinea-LinkFieldView-previewImagePlaceholder",
131
+ "LinkFieldViewPreviewImagePlaceholder": "alinea-LinkFieldView-previewImagePlaceholder",
132
+ "LinkFieldView-anchorOption": "alinea-LinkFieldView-anchorOption",
133
+ "LinkFieldViewAnchorOption": "alinea-LinkFieldView-anchorOption",
134
+ "LinkFieldView-dropIndicator": "alinea-LinkFieldView-dropIndicator",
135
+ "LinkFieldViewDropIndicator": "alinea-LinkFieldView-dropIndicator",
136
+ "LinkFieldView-rowAction": "alinea-LinkFieldView-rowAction",
137
+ "LinkFieldViewRowAction": "alinea-LinkFieldView-rowAction",
138
+ "LinkFieldView-skeleton": "alinea-LinkFieldView-skeleton",
139
+ "LinkFieldViewSkeleton": "alinea-LinkFieldView-skeleton",
140
+ "LinkFieldView-icon": "alinea-LinkFieldView-icon",
141
+ "LinkFieldViewIcon": "alinea-LinkFieldView-icon"
142
142
  };
143
143
 
144
144
  // src/field/link/LinkField.view.tsx
@@ -221,7 +221,9 @@ function EntryRow({
221
221
  );
222
222
  }
223
223
  function useLinkEntryState(entryId, locale) {
224
- return useAtomValueRaw(linkEntryAtoms(entryId, locale));
224
+ const scope = useOptionalEntryAtoms();
225
+ const linkLocale = locale ?? scope?.localeData.requestedLocale ?? void 0;
226
+ return useAtomValueRaw(linkEntryAtoms(entryId, linkLocale));
225
227
  }
226
228
  function MissingEntryRow({
227
229
  entryId,
@@ -407,7 +409,6 @@ function LinkPickerAction({
407
409
  const location = childLocation ?? resolved.location ?? fallbackLocation;
408
410
  const condition = resolved.condition;
409
411
  const handlesMultiple = Boolean(onPickMany && picker.handlesMultiple);
410
- const selectsMultiple = handlesMultiple && !allowDuplicates;
411
412
  const pickerProps = {
412
413
  condition,
413
414
  enableNavigation: options.enableNavigation,
@@ -428,9 +429,9 @@ function LinkPickerAction({
428
429
  limitLocations: options.limitLocations,
429
430
  nestedNavigation: !pickingChildren,
430
431
  pickChildren: pickingChildren,
431
- preselect: selectsMultiple,
432
- selectionMode: selectsMultiple ? "multiple" : "single",
433
- selectionBehavior: selectsMultiple ? "toggle" : "replace",
432
+ preselect: handlesMultiple && !allowDuplicates,
433
+ selectionMode: handlesMultiple ? "multiple" : "single",
434
+ selectionBehavior: handlesMultiple ? "toggle" : "replace",
434
435
  initialSelection: initialSelection(value, selection),
435
436
  onConfirm(entryIds, locale) {
436
437
  const existing = allowDuplicates ? [] : selection;