alinea 2.0.0-preview.0 → 2.0.0-preview.2

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 (237) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/LICENSES.md +134 -80
  3. package/dist/adapter/next/DevRemote.d.ts +3 -0
  4. package/dist/adapter/next/DevRemote.js +37 -0
  5. package/dist/adapter/next/ForwardCredentials.d.ts +1 -0
  6. package/dist/adapter/next/ForwardCredentials.js +17 -0
  7. package/dist/adapter/next/cms.js +86 -38
  8. package/dist/adapter/next/context.d.ts +1 -1
  9. package/dist/adapter/next/context.js +11 -3
  10. package/dist/adapter/next/handler.d.ts +2 -0
  11. package/dist/adapter/next/handler.js +23 -16
  12. package/dist/adapter/next/with-alinea.js +18 -16
  13. package/dist/backend/Handler.d.ts +14 -13
  14. package/dist/backend/Handler.js +70 -36
  15. package/dist/backend/resolver/ParsePreview.d.ts +8 -4
  16. package/dist/backend/resolver/ParsePreview.js +40 -43
  17. package/dist/backend/router/Router.d.ts +1 -0
  18. package/dist/backend/router/Router.js +21 -15
  19. package/dist/bundled.d.ts +369 -99
  20. package/dist/chunks/chunk-6UT4N4CO.js +919 -0
  21. package/dist/chunks/{chunk-LUBOGJCG.js → chunk-6V4TAD2N.js} +1 -1
  22. package/dist/chunks/{chunk-TL7ZW6BX.js → chunk-A3XXZBOQ.js} +2535 -2999
  23. package/dist/chunks/chunk-AC5ATYI3.js +1434 -0
  24. package/dist/chunks/{chunk-7ORQ7BYK.js → chunk-KMLLLZ6X.js} +202 -269
  25. package/dist/chunks/{chunk-IWN3T3FL.js → chunk-O7XWTMCB.js} +1 -1
  26. package/dist/chunks/{chunk-53DZYORR.js → chunk-PAYSVIYI.js} +76 -176
  27. package/dist/chunks/{chunk-YK3OSMDM.js → chunk-S4AU6SRS.js} +188 -158
  28. package/dist/chunks/{chunk-EQ3TDHYD.js → chunk-UVOEM4AH.js} +6 -3
  29. package/dist/chunks/{chunk-I7X64JTZ.js → chunk-VXZM6V4P.js} +4 -4
  30. package/dist/cli/Generate.js +3 -13
  31. package/dist/cli/Serve.js +7 -3
  32. package/dist/cli/bin.js +8 -5
  33. package/dist/cli/generate/CompileConfig.js +3 -2
  34. package/dist/cli/generate/CopyStaticFiles.js +2 -3
  35. package/dist/cli/generate/DevDB.d.ts +1 -1
  36. package/dist/cli/generate/DevDB.js +3 -5
  37. package/dist/cli/serve/CreateLocalServer.d.ts +1 -1
  38. package/dist/cli/serve/CreateLocalServer.js +3 -2
  39. package/dist/cli/serve/DevServer.d.ts +3 -2
  40. package/dist/cli/serve/DevServer.js +60 -3
  41. package/dist/cli/serve/ServeContext.d.ts +1 -0
  42. package/dist/cli/serve/StartServer.d.ts +1 -0
  43. package/dist/cli/serve/StartServer.js +6 -1
  44. package/dist/cli/util/EnsureLibs.js +2 -2
  45. package/dist/cli/util/EnsureNode.js +2 -2
  46. package/dist/cloud/CloudRemote.d.ts +2 -1
  47. package/dist/cloud/CloudRemote.js +3 -2
  48. package/dist/components/Breadcrumbs.js +8 -8
  49. package/dist/components/Button.js +6 -6
  50. package/dist/components/Calendar.js +11 -11
  51. package/dist/components/Checkbox.js +7 -7
  52. package/dist/components/CheckboxGroup.js +6 -6
  53. package/dist/components/ColorSwatch.js +6 -6
  54. package/dist/components/ColorSwatchPicker.js +6 -6
  55. package/dist/components/ComboBox.js +17 -17
  56. package/dist/components/DateField.js +9 -9
  57. package/dist/components/DatePicker.js +10 -10
  58. package/dist/components/DateRangePicker.js +14 -14
  59. package/dist/components/Dialog.js +6 -6
  60. package/dist/components/Disclosure.js +13 -13
  61. package/dist/components/DropZone.js +6 -6
  62. package/dist/components/Label.js +16 -16
  63. package/dist/components/Link.js +6 -6
  64. package/dist/components/List.js +34 -34
  65. package/dist/components/Menu.js +10 -10
  66. package/dist/components/Modal.js +8 -8
  67. package/dist/components/MultipleSelect.js +33 -33
  68. package/dist/components/NumberField.d.ts +2 -1
  69. package/dist/components/NumberField.js +21 -11
  70. package/dist/components/Popover.js +6 -6
  71. package/dist/components/ProgressCircle.js +10 -10
  72. package/dist/components/RadioGroup.js +6 -6
  73. package/dist/components/SearchField.js +11 -11
  74. package/dist/components/Select.js +13 -13
  75. package/dist/components/Surface.js +3 -3
  76. package/dist/components/Switch.js +6 -6
  77. package/dist/components/Table.js +13 -13
  78. package/dist/components/Tabs.js +8 -8
  79. package/dist/components/TagGroup.js +7 -7
  80. package/dist/components/TextField.js +10 -10
  81. package/dist/components/TimeField.js +6 -6
  82. package/dist/components/Toggle.js +6 -6
  83. package/dist/components/Toolbar.js +7 -7
  84. package/dist/components/Tooltip.js +10 -10
  85. package/dist/components/Tree.js +9 -9
  86. package/dist/core/BlobTransport.d.ts +5 -0
  87. package/dist/core/BlobTransport.js +79 -0
  88. package/dist/core/Client.d.ts +2 -1
  89. package/dist/core/Client.js +17 -12
  90. package/dist/core/Config.d.ts +4 -0
  91. package/dist/core/Config.js +6 -0
  92. package/dist/core/Connection.d.ts +4 -3
  93. package/dist/core/Connection.js +7 -0
  94. package/dist/core/Graph.d.ts +3 -4
  95. package/dist/core/ListRow.d.ts +2 -0
  96. package/dist/core/OrderBy.d.ts +7 -3
  97. package/dist/core/TextDoc.d.ts +11 -0
  98. package/dist/core/Trace.d.ts +8 -0
  99. package/dist/core/Trace.js +32 -0
  100. package/dist/core/Type.d.ts +7 -1
  101. package/dist/core/db/CommitRequest.d.ts +0 -3
  102. package/dist/core/db/CommitRequest.js +0 -9
  103. package/dist/core/db/EntryDB.js +1 -1
  104. package/dist/core/db/EntryIndex.d.ts +12 -2
  105. package/dist/core/db/EntryIndex.js +131 -22
  106. package/dist/core/db/EntryResolver.js +104 -29
  107. package/dist/core/db/EntryTransaction.d.ts +1 -2
  108. package/dist/core/db/EntryTransaction.js +29 -22
  109. package/dist/core/db/LocalDB.d.ts +5 -5
  110. package/dist/core/db/LocalDB.js +27 -12
  111. package/dist/core/field/RichTextField.d.ts +30 -3
  112. package/dist/core/field/RichTextField.js +124 -56
  113. package/dist/core/media/MediaAltField.d.ts +1 -0
  114. package/dist/core/media/MediaAltField.js +9 -1
  115. package/dist/core/media/MediaLocation.d.ts +5 -2
  116. package/dist/core/media/MediaLocation.js +6 -7
  117. package/dist/core/media/MediaTypes.js +11 -0
  118. package/dist/core/source/CombinedSource.d.ts +2 -2
  119. package/dist/core/source/CombinedSource.js +6 -3
  120. package/dist/core/source/FSSource.d.ts +4 -3
  121. package/dist/core/source/FSSource.js +59 -27
  122. package/dist/core/source/GithubSource.d.ts +2 -2
  123. package/dist/core/source/GithubSource.js +21 -9
  124. package/dist/core/source/IndexedDBSource.d.ts +2 -2
  125. package/dist/core/source/IndexedDBSource.js +3 -1
  126. package/dist/core/source/MemorySource.d.ts +2 -2
  127. package/dist/core/source/MemorySource.js +3 -1
  128. package/dist/core/source/OverlaySource.d.ts +12 -0
  129. package/dist/core/source/OverlaySource.js +50 -0
  130. package/dist/core/source/Source.d.ts +5 -2
  131. package/dist/core/source/Source.js +3 -3
  132. package/dist/core/util/Async.d.ts +8 -2
  133. package/dist/core/util/Async.js +67 -0
  134. package/dist/core/util/EntryFilenames.d.ts +2 -2
  135. package/dist/core/util/EntryFilenames.js +3 -3
  136. package/dist/dashboard/App.css +158 -0
  137. package/dist/dashboard/App.js +2 -2
  138. package/dist/dashboard/app/AccessDenied.js +3 -3
  139. package/dist/dashboard/app/ActivityStatus.js +15 -15
  140. package/dist/dashboard/app/AppShell.js +1 -1
  141. package/dist/dashboard/app/AuthView.js +11 -11
  142. package/dist/dashboard/app/CompactField.js +10 -10
  143. package/dist/dashboard/app/DashboardErrorBoundary.js +5 -5
  144. package/dist/dashboard/app/DashboardLayout.js +22 -19
  145. package/dist/dashboard/app/EntryHeader.js +12 -12
  146. package/dist/dashboard/app/EntryReferences.js +9 -9
  147. package/dist/dashboard/app/EntrySidebar.d.ts +1 -1
  148. package/dist/dashboard/app/EntrySidebar.js +17 -16
  149. package/dist/dashboard/app/EntrySidebarPreview.d.ts +1 -1
  150. package/dist/dashboard/app/EntrySidebarPreview.js +19 -14
  151. package/dist/dashboard/app/EntryTranslationBanner.js +7 -7
  152. package/dist/dashboard/app/Explorer.js +51 -43
  153. package/dist/dashboard/app/ExplorerCards.js +34 -34
  154. package/dist/dashboard/app/ExplorerFileCard.js +18 -18
  155. package/dist/dashboard/app/ExplorerList.js +13 -13
  156. package/dist/dashboard/app/ExplorerModal.js +3 -3
  157. package/dist/dashboard/app/ExplorerTable.js +76 -61
  158. package/dist/dashboard/app/ExternalLinkPicker.js +15 -4
  159. package/dist/dashboard/app/LinkPicker.js +8 -8
  160. package/dist/dashboard/app/LocaleMenu.js +12 -12
  161. package/dist/dashboard/app/SidebarLayout.d.ts +8 -0
  162. package/dist/dashboard/app/SidebarLayout.js +1169 -0
  163. package/dist/dashboard/app/SidebarTree.js +46 -46
  164. package/dist/dashboard/app/WorkspaceMenu.js +17 -17
  165. package/dist/dashboard/app/WorkspaceRoots.js +23 -23
  166. package/dist/dashboard/app/editor/FileEditor.d.ts +2 -1
  167. package/dist/dashboard/app/editor/FileEditor.js +41 -32
  168. package/dist/dashboard/app/editor/FilePreview.js +4 -4
  169. package/dist/dashboard/app/editor/MediaAltField.view.d.ts +1 -1
  170. package/dist/dashboard/app/editor/MediaAltField.view.js +6 -9
  171. package/dist/dashboard/app/modals/CreateEntry.js +4 -4
  172. package/dist/dashboard/app/pages/EntryPage.js +57 -31
  173. package/dist/dashboard/app/pages/UsersPage.js +33 -33
  174. package/dist/dashboard/app/ui/DashboardModal.js +23 -23
  175. package/dist/dashboard/app/ui/Rail.js +3 -3
  176. package/dist/dashboard/app/ui/Sidebar.js +2 -2
  177. package/dist/dashboard/atoms/auth.js +2 -0
  178. package/dist/dashboard/atoms/dashboard.d.ts +9 -0
  179. package/dist/dashboard/atoms/dashboard.js +17 -0
  180. package/dist/dashboard/atoms/editor.d.ts +7 -1
  181. package/dist/dashboard/atoms/editor.js +4 -1
  182. package/dist/dashboard/atoms/entry.d.ts +48 -2
  183. package/dist/dashboard/atoms/entry.js +222 -17
  184. package/dist/dashboard/atoms/explorer.js +4 -9
  185. package/dist/dashboard/atoms/preview.d.ts +3 -0
  186. package/dist/dashboard/atoms/preview.js +18 -1
  187. package/dist/dashboard/atoms/root.d.ts +4 -1
  188. package/dist/dashboard/atoms/root.js +96 -157
  189. package/dist/dashboard/hooks.d.ts +4 -2
  190. package/dist/dashboard/hooks.js +9 -5
  191. package/dist/dashboard/icons.d.ts +1 -0
  192. package/dist/dashboard/icons.js +10 -0
  193. package/dist/field/check/CheckField.view.js +2 -2
  194. package/dist/field/code/CodeField.view.js +12 -12
  195. package/dist/field/date/DateField.view.js +12 -2
  196. package/dist/field/link/FileLink.d.ts +2 -2
  197. package/dist/field/link/FileLink.js +5 -3
  198. package/dist/field/link/ImageLink.d.ts +1 -1
  199. package/dist/field/link/ImageLink.js +1 -1
  200. package/dist/field/link/Link.js +2 -2
  201. package/dist/field/link/LinkField.view.js +155 -128
  202. package/dist/field/list/ListField.view.js +22 -33
  203. package/dist/field/metadata/MetadataField.view.js +19 -19
  204. package/dist/field/number/NumberField.d.ts +2 -0
  205. package/dist/field/number/NumberField.view.js +4 -2
  206. package/dist/field/richtext/PickTextLink.d.ts +7 -0
  207. package/dist/field/richtext/PickTextLink.js +104 -2
  208. package/dist/field/richtext/ReferenceLink.d.ts +4 -1
  209. package/dist/field/richtext/ReferenceLink.js +18 -4
  210. package/dist/field/richtext/RichTextDocument.d.ts +7 -2
  211. package/dist/field/richtext/RichTextDocument.js +34 -5
  212. package/dist/field/richtext/RichTextExtensions.d.ts +3 -1
  213. package/dist/field/richtext/RichTextExtensions.js +2704 -7467
  214. package/dist/field/richtext/RichTextField.d.ts +4 -0
  215. package/dist/field/richtext/RichTextField.story.d.ts +4 -0
  216. package/dist/field/richtext/RichTextField.view.js +43 -20
  217. package/dist/field/richtext/RichTextInsertMenu.js +281 -495
  218. package/dist/field/richtext/RichTextToolbar.d.ts +5 -2
  219. package/dist/field/richtext/RichTextToolbar.js +38 -3
  220. package/dist/field/richtext/Toolbar.d.ts +19 -1
  221. package/dist/field/richtext/Toolbar.js +18 -13
  222. package/dist/field/richtext/extensions/Anchor.js +1 -1
  223. package/dist/field/richtext/extensions/Link.js +1 -1
  224. package/dist/field/richtext/extensions/Small.js +1 -1
  225. package/dist/field/select/SelectField.view.js +8 -6
  226. package/dist/index.css +227 -16
  227. package/dist/next.cjs +18 -16
  228. package/dist/next.d.ts +2 -1
  229. package/dist/next.edge.d.ts +2 -1
  230. package/dist/picker/entry/EntryPicker.js +9 -35
  231. package/dist/preview/PreviewPayload.js +35 -250
  232. package/dist/ui/RichText.d.ts +1 -0
  233. package/dist/ui/RichText.js +29 -2
  234. package/package.json +6 -3
  235. package/dist/cli/util/ExternalPlugin.d.ts +0 -2
  236. package/dist/cli/util/ExternalPlugin.js +0 -919
  237. package/dist/chunks/{chunk-JFROOUG6.js → chunk-NIVGVRDS.js} +17 -17
@@ -79,7 +79,7 @@ var IndexedDBSource = class {
79
79
  const current = await this.getTree();
80
80
  return current.sha === sha ? void 0 : current;
81
81
  }
82
- async *getBlobs(shas) {
82
+ async *getBlobs(shas, options = {}) {
83
83
  if (shas.length === 0) return;
84
84
  const db = await this.#connect();
85
85
  const transaction = db.transaction(["blobs"], "readonly");
@@ -98,6 +98,8 @@ var IndexedDBSource = class {
98
98
  ]);
99
99
  const missing = new Set(shas);
100
100
  for (let index = 0; index < keys.length; index++) {
101
+ if (options.signal?.aborted)
102
+ throw options.signal.reason ?? new Error("Blob transfer aborted");
101
103
  const key = keys[index];
102
104
  const value = values[index];
103
105
  if (typeof key === "string" && value !== void 0 && missing.delete(key))
@@ -1,12 +1,12 @@
1
1
  import type { ChangesBatch } from './Change.js';
2
- import type { Source } from './Source.js';
2
+ import type { GetBlobsOptions, Source } from './Source.js';
3
3
  import { ReadonlyTree } from './Tree.js';
4
4
  export declare class MemorySource implements Source {
5
5
  #private;
6
6
  constructor(tree?: ReadonlyTree, blobs?: Map<string, Uint8Array>);
7
7
  getTree(): Promise<ReadonlyTree>;
8
8
  getTreeIfDifferent(sha: string): Promise<ReadonlyTree | undefined>;
9
- getBlobs(shas: Array<string>): AsyncGenerator<[sha: string, blob: Uint8Array]>;
9
+ getBlobs(shas: ReadonlyArray<string>, options?: GetBlobsOptions): AsyncGenerator<[sha: string, blob: Uint8Array]>;
10
10
  addBlob(contents: Uint8Array): Promise<string>;
11
11
  applyChanges(batch: ChangesBatch): Promise<void>;
12
12
  }
@@ -18,8 +18,10 @@ var MemorySource = class {
18
18
  async getTreeIfDifferent(sha) {
19
19
  return this.#tree.sha === sha ? void 0 : this.#tree;
20
20
  }
21
- async *getBlobs(shas) {
21
+ async *getBlobs(shas, options = {}) {
22
22
  for (const sha of shas) {
23
+ if (options.signal?.aborted)
24
+ throw options.signal.reason ?? new Error("Blob transfer aborted");
23
25
  const blob = this.#blobs.get(sha);
24
26
  assert(blob, `Blob not found: ${sha}`);
25
27
  yield [sha, blob];
@@ -0,0 +1,12 @@
1
+ import type { ChangesBatch } from './Change.js';
2
+ import type { GetBlobsOptions, Source } from './Source.js';
3
+ import type { ReadonlyTree } from './Tree.js';
4
+ export declare class OverlaySource implements Source {
5
+ #private;
6
+ constructor(source: Source, tree: ReadonlyTree);
7
+ static create(source: Source): Promise<OverlaySource>;
8
+ getTree(): Promise<ReadonlyTree>;
9
+ getTreeIfDifferent(sha: string): Promise<ReadonlyTree | undefined>;
10
+ getBlobs(shas: ReadonlyArray<string>, options?: GetBlobsOptions): AsyncGenerator<[sha: string, blob: Uint8Array]>;
11
+ applyChanges(batch: ChangesBatch): Promise<void>;
12
+ }
@@ -0,0 +1,50 @@
1
+ import "../../chunks/chunk-CQ52GEHY.js";
2
+
3
+ // src/core/source/OverlaySource.ts
4
+ import { assert } from "../util/Assert.js";
5
+ import { ShaMismatchError } from "./ShaMismatchError.js";
6
+ var OverlaySource = class _OverlaySource {
7
+ #source;
8
+ #tree;
9
+ #blobs = /* @__PURE__ */ new Map();
10
+ constructor(source, tree) {
11
+ this.#source = source;
12
+ this.#tree = tree;
13
+ }
14
+ static async create(source) {
15
+ return new _OverlaySource(source, await source.getTree());
16
+ }
17
+ async getTree() {
18
+ return this.#tree;
19
+ }
20
+ async getTreeIfDifferent(sha) {
21
+ return this.#tree.sha === sha ? void 0 : this.#tree;
22
+ }
23
+ async *getBlobs(shas, options = {}) {
24
+ const fromSource = [];
25
+ for (const sha of shas) {
26
+ if (options.signal?.aborted)
27
+ throw options.signal.reason ?? new Error("Blob transfer aborted");
28
+ const blob = this.#blobs.get(sha);
29
+ if (blob) yield [sha, blob];
30
+ else fromSource.push(sha);
31
+ }
32
+ yield* this.#source.getBlobs(fromSource, options);
33
+ }
34
+ async applyChanges(batch) {
35
+ if (this.#tree.sha !== batch.fromSha)
36
+ throw new ShaMismatchError(batch.fromSha, this.#tree.sha);
37
+ for (const change of batch.changes) {
38
+ if (change.op === "delete") continue;
39
+ assert(change.contents, "Missing contents");
40
+ this.#blobs.set(change.sha, change.contents);
41
+ }
42
+ this.#tree = await this.#tree.withChanges(batch);
43
+ for (const sha of this.#blobs.keys()) {
44
+ if (!this.#tree.hasSha(sha)) this.#blobs.delete(sha);
45
+ }
46
+ }
47
+ };
48
+ export {
49
+ OverlaySource
50
+ };
@@ -1,8 +1,11 @@
1
1
  import type { ChangesBatch } from './Change.js';
2
2
  import type { ReadonlyTree } from './Tree.js';
3
+ export interface GetBlobsOptions {
4
+ signal?: AbortSignal;
5
+ }
3
6
  export interface RemoteSource {
4
7
  getTreeIfDifferent(sha: string): Promise<ReadonlyTree | undefined>;
5
- getBlobs(shas: Array<string>): AsyncGenerator<[sha: string, blob: Uint8Array]>;
8
+ getBlobs(shas: ReadonlyArray<string>, options?: GetBlobsOptions): AsyncIterable<[sha: string, blob: Uint8Array]>;
6
9
  }
7
10
  export interface Source extends RemoteSource {
8
11
  getTree(): Promise<ReadonlyTree>;
@@ -18,7 +21,7 @@ export declare class SourceTransaction {
18
21
  add(path: string, contents: Uint8Array): this;
19
22
  remove(path: string): this;
20
23
  rename(from: string, to: string): this;
21
- compile(): Promise<{
24
+ compile(previous?: ReadonlyTree): Promise<{
22
25
  from: ReadonlyTree;
23
26
  into: ReadonlyTree;
24
27
  changes: (import("./Change.js").DeleteChange | {
@@ -75,11 +75,11 @@ var SourceTransaction = class {
75
75
  });
76
76
  return this;
77
77
  }
78
- async compile() {
78
+ async compile(previous) {
79
79
  const todo = this.#tasks.splice(0);
80
80
  for (const task of todo) await task();
81
- const from = this.#from;
82
- const into = await this.#into.compile();
81
+ const from = previous ?? this.#from;
82
+ const into = await this.#into.compile(previous);
83
83
  const forwards = from.diff(into);
84
84
  const fromSource = Array.from(
85
85
  new Set(
@@ -1,4 +1,10 @@
1
- /** Accumulate all entries of an AsyncGenerator into an array */
2
- export declare function accumulate<T>(gen: AsyncGenerator<T>): Promise<Array<T>>;
1
+ /** Accumulate all entries of an AsyncIterable into an array */
2
+ export declare function accumulate<T>(gen: AsyncIterable<T>): Promise<Array<T>>;
3
3
  export declare function toGenerator<T>(iterable: Iterable<T>): AsyncGenerator<T>;
4
+ export interface MapConcurrentOptions {
5
+ concurrency: number;
6
+ signal?: AbortSignal;
7
+ }
8
+ /** Map concurrently while yielding results as they complete. */
9
+ export declare function mapConcurrent<T, TResult>(iterable: Iterable<T>, mapper: (item: T, signal?: AbortSignal) => Promise<TResult>, options: MapConcurrentOptions): AsyncGenerator<TResult>;
4
10
  export declare function genEffect<T, TReturn>(gen: AsyncIterable<T, TReturn>, effect: (result: T) => void): AsyncIterable<T>;
@@ -9,6 +9,72 @@ async function accumulate(gen) {
9
9
  async function* toGenerator(iterable) {
10
10
  for (const item of iterable) yield item;
11
11
  }
12
+ async function* mapConcurrent(iterable, mapper, options) {
13
+ const { concurrency, signal } = options;
14
+ if (!Number.isInteger(concurrency) || concurrency < 1)
15
+ throw new RangeError("Concurrency must be a positive integer");
16
+ const remaining = iterable[Symbol.iterator]();
17
+ const completed = [];
18
+ let active = 0;
19
+ let stopped = signal?.aborted ?? false;
20
+ let failed = false;
21
+ let failure;
22
+ let wake;
23
+ function resume() {
24
+ const resolve = wake;
25
+ wake = void 0;
26
+ resolve?.();
27
+ }
28
+ function complete(result) {
29
+ active--;
30
+ if (stopped || failed) return;
31
+ completed.push(result);
32
+ resume();
33
+ }
34
+ function fail(error) {
35
+ active--;
36
+ if (stopped || failed) return;
37
+ failed = true;
38
+ failure = error;
39
+ resume();
40
+ }
41
+ function schedule() {
42
+ if (stopped || failed) return;
43
+ const next = remaining.next();
44
+ if (next.done) return;
45
+ active++;
46
+ try {
47
+ void mapper(next.value, signal).then(complete, fail);
48
+ } catch (error) {
49
+ fail(error);
50
+ }
51
+ }
52
+ function abort() {
53
+ stopped = true;
54
+ resume();
55
+ }
56
+ if (!stopped) signal?.addEventListener("abort", abort, { once: true });
57
+ try {
58
+ if (stopped) throw signal?.reason ?? new Error("Operation aborted");
59
+ for (let index = 0; index < concurrency; index++) schedule();
60
+ while (active > 0 || completed.length > 0 || stopped || failed) {
61
+ if (stopped) throw signal?.reason ?? new Error("Operation aborted");
62
+ if (failed) throw failure;
63
+ if (completed.length === 0) {
64
+ await new Promise((resolve) => {
65
+ wake = resolve;
66
+ });
67
+ continue;
68
+ }
69
+ const result = completed.shift();
70
+ schedule();
71
+ yield result;
72
+ }
73
+ } finally {
74
+ stopped = true;
75
+ signal?.removeEventListener("abort", abort);
76
+ }
77
+ }
12
78
  function genEffect(gen, effect) {
13
79
  return {
14
80
  [Symbol.asyncIterator]() {
@@ -37,5 +103,6 @@ function genEffect(gen, effect) {
37
103
  export {
38
104
  accumulate,
39
105
  genEffect,
106
+ mapConcurrent,
40
107
  toGenerator
41
108
  };
@@ -1,6 +1,6 @@
1
1
  import type { Config } from '../Config.js';
2
2
  import { type Entry, type EntryStatus } from '../Entry.js';
3
- import type { EntryUrlMeta, Type } from '../Type.js';
3
+ import type { EntryUrlInput, Type } from '../Type.js';
4
4
  export declare function entryInfo(fileName: string): [name: string, status: EntryStatus];
5
5
  export declare function entryChildrenDir(config: Config, entry: {
6
6
  workspace: string;
@@ -24,7 +24,7 @@ export declare function entryFileName(config: Config, entry: {
24
24
  status: EntryStatus;
25
25
  }, parentPaths: Array<string>): string;
26
26
  export declare function entryFile(config: Config, entry: Entry): string;
27
- export declare function entryUrl(type: Type, meta: EntryUrlMeta): string;
27
+ export declare function entryUrl(type: Type, meta: EntryUrlInput): string;
28
28
  export declare function pathSuffix(path: string, conflictingPaths: Array<string>): number | undefined;
29
29
  export declare function applySuffix(path: string, suffix: number): string;
30
30
  export declare function fileVersions(file: string): string[];
@@ -60,12 +60,12 @@ function entryFile(config, entry) {
60
60
  return join(contentDir, entry.root, filePath);
61
61
  }
62
62
  function entryUrl(type, meta) {
63
- const { entryUrl: entryUrl2 } = getType(type);
64
- if (entryUrl2) return entryUrl2(meta);
65
63
  const segments = meta.locale ? [meta.locale.toLowerCase()] : [];
66
- return `/${segments.concat(
64
+ const defaultUrl = `/${segments.concat(
67
65
  meta.parentPaths.concat(meta.path).filter((segment) => segment !== "index" && segment !== "")
68
66
  ).join("/")}`;
67
+ const { entryUrl: entryUrl2 } = getType(type);
68
+ return entryUrl2 ? entryUrl2({ ...meta, defaultUrl }) : defaultUrl;
69
69
  }
70
70
  function pathSuffix(path, conflictingPaths) {
71
71
  if (conflictingPaths.includes(path)) {
@@ -146,6 +146,164 @@
146
146
  color-scheme: dark;
147
147
  }
148
148
 
149
+ /* node_modules/allotment/dist/style.css */
150
+ :root {
151
+ --separator-border: rgba(128, 128, 128, 0.35);
152
+ --sash-hover-transition-duration: 0.1s;
153
+ }
154
+ .allotment-module_splitView__L-yRc {
155
+ height: 100%;
156
+ overflow: hidden;
157
+ position: relative;
158
+ width: 100%;
159
+ }
160
+ .allotment-module_splitView__L-yRc > .allotment-module_sashContainer__fzwJF {
161
+ height: 100%;
162
+ pointer-events: none;
163
+ position: absolute;
164
+ width: 100%;
165
+ }
166
+ .allotment-module_splitView__L-yRc > .allotment-module_sashContainer__fzwJF > .allotment-module_sash__QA-2t {
167
+ pointer-events: auto;
168
+ }
169
+ .allotment-module_splitView__L-yRc > .allotment-module_splitViewContainer__rQnVa {
170
+ height: 100%;
171
+ position: relative;
172
+ white-space: nowrap;
173
+ width: 100%;
174
+ }
175
+ .allotment-module_splitView__L-yRc > .allotment-module_splitViewContainer__rQnVa > .allotment-module_splitViewView__MGZ6O {
176
+ overflow: hidden;
177
+ position: absolute;
178
+ white-space: initial;
179
+ }
180
+ .allotment-module_splitView__L-yRc.allotment-module_vertical__WSwwa > .allotment-module_splitViewContainer__rQnVa > .allotment-module_splitViewView__MGZ6O {
181
+ width: 100%;
182
+ }
183
+ .allotment-module_splitView__L-yRc.allotment-module_horizontal__7doS8 > .allotment-module_splitViewContainer__rQnVa > .allotment-module_splitViewView__MGZ6O {
184
+ height: 100%;
185
+ }
186
+ .allotment-module_splitView__L-yRc.allotment-module_separatorBorder__x-rDS > .allotment-module_splitViewContainer__rQnVa > .allotment-module_splitViewView__MGZ6O:not(:first-child)::before {
187
+ background-color: var(--separator-border);
188
+ content: " ";
189
+ left: 0;
190
+ pointer-events: none;
191
+ position: absolute;
192
+ top: 0;
193
+ z-index: 5;
194
+ }
195
+ .allotment-module_splitView__L-yRc.allotment-module_separatorBorder__x-rDS.allotment-module_vertical__WSwwa > .allotment-module_splitViewContainer__rQnVa > .allotment-module_splitViewView__MGZ6O:not(:first-child)::before {
196
+ height: 1px;
197
+ width: 100%;
198
+ }
199
+ .allotment-module_splitView__L-yRc.allotment-module_separatorBorder__x-rDS.allotment-module_horizontal__7doS8 > .allotment-module_splitViewContainer__rQnVa > .allotment-module_splitViewView__MGZ6O:not(:first-child)::before {
200
+ height: 100%;
201
+ width: 1px;
202
+ }
203
+ :root {
204
+ --focus-border: #007fd4;
205
+ --sash-size: 8px;
206
+ --sash-hover-size: 4px;
207
+ }
208
+ .sash-module_sash__K-9lB {
209
+ position: absolute;
210
+ z-index: 35;
211
+ touch-action: none;
212
+ pointer-events: auto;
213
+ text-align: initial;
214
+ }
215
+ .sash-module_sash__K-9lB.sash-module_disabled__Hm-wx {
216
+ pointer-events: none;
217
+ }
218
+ .sash-module_sash__K-9lB.sash-module_mac__Jf6OJ.sash-module_vertical__pB-rs {
219
+ cursor: col-resize;
220
+ }
221
+ .sash-module_sash__K-9lB.sash-module_vertical__pB-rs.sash-module_minimum__-UKxp {
222
+ cursor: e-resize;
223
+ }
224
+ .sash-module_sash__K-9lB.sash-module_vertical__pB-rs.sash-module_maximum__TCWxD {
225
+ cursor: w-resize;
226
+ }
227
+ .sash-module_sash__K-9lB.sash-module_mac__Jf6OJ.sash-module_horizontal__kFbiw {
228
+ cursor: row-resize;
229
+ }
230
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw.sash-module_minimum__-UKxp {
231
+ cursor: s-resize;
232
+ }
233
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw.sash-module_maximum__TCWxD {
234
+ cursor: n-resize;
235
+ }
236
+ .sash-module_sash__K-9lB.sash-module_disabled__Hm-wx {
237
+ cursor: default !important;
238
+ pointer-events: none !important;
239
+ }
240
+ .sash-module_sash__K-9lB.sash-module_vertical__pB-rs {
241
+ cursor: ew-resize;
242
+ top: 0;
243
+ width: var(--sash-size);
244
+ height: 100%;
245
+ }
246
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw {
247
+ cursor: ns-resize;
248
+ left: 0;
249
+ width: 100%;
250
+ height: var(--sash-size);
251
+ }
252
+ .sash-module_sash__K-9lB:not(.sash-module_disabled__Hm-wx) > .sash-module_orthogonal-drag-handle__Yii2- {
253
+ content: " ";
254
+ height: calc(var(--sash-size) * 2);
255
+ width: calc(var(--sash-size) * 2);
256
+ z-index: 100;
257
+ display: block;
258
+ cursor: all-scroll;
259
+ position: absolute;
260
+ }
261
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw.sash-module_orthogonal-edge-north__f7Noe:not(.sash-module_disabled__Hm-wx) > .sash-module_orthogonal-drag-handle__Yii2-.sash-module_start__uZEDk,
262
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw.sash-module_orthogonal-edge-south__6ZrFC:not(.sash-module_disabled__Hm-wx) > .sash-module_orthogonal-drag-handle__Yii2-.sash-module_end__0TP-R {
263
+ cursor: nwse-resize;
264
+ }
265
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw.sash-module_orthogonal-edge-north__f7Noe:not(.sash-module_disabled__Hm-wx) > .sash-module_orthogonal-drag-handle__Yii2-.sash-module_end__0TP-R,
266
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw.sash-module_orthogonal-edge-south__6ZrFC:not(.sash-module_disabled__Hm-wx) > .sash-module_orthogonal-drag-handle__Yii2-.sash-module_start__uZEDk {
267
+ cursor: nesw-resize;
268
+ }
269
+ .sash-module_sash__K-9lB.sash-module_vertical__pB-rs > .sash-module_orthogonal-drag-handle__Yii2-.sash-module_start__uZEDk {
270
+ left: calc(var(--sash-size) * -0.5);
271
+ top: calc(var(--sash-size) * -1);
272
+ }
273
+ .sash-module_sash__K-9lB.sash-module_vertical__pB-rs > .sash-module_orthogonal-drag-handle__Yii2-.sash-module_end__0TP-R {
274
+ left: calc(var(--sash-size) * -0.5);
275
+ bottom: calc(var(--sash-size) * -1);
276
+ }
277
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw > .sash-module_orthogonal-drag-handle__Yii2-.sash-module_start__uZEDk {
278
+ top: calc(var(--sash-size) * -0.5);
279
+ left: calc(var(--sash-size) * -1);
280
+ }
281
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw > .sash-module_orthogonal-drag-handle__Yii2-.sash-module_end__0TP-R {
282
+ top: calc(var(--sash-size) * -0.5);
283
+ right: calc(var(--sash-size) * -1);
284
+ }
285
+ .sash-module_sash__K-9lB:before {
286
+ content: "";
287
+ pointer-events: none;
288
+ position: absolute;
289
+ width: 100%;
290
+ height: 100%;
291
+ transition: background-color var(--sash-hover-transition-duration) ease-out;
292
+ background: transparent;
293
+ }
294
+ .sash-module_sash__K-9lB.sash-module_vertical__pB-rs:before {
295
+ width: var(--sash-hover-size);
296
+ left: calc(50% - (var(--sash-hover-size) / 2));
297
+ }
298
+ .sash-module_sash__K-9lB.sash-module_horizontal__kFbiw:before {
299
+ height: var(--sash-hover-size);
300
+ top: calc(50% - (var(--sash-hover-size) / 2));
301
+ }
302
+ .sash-module_sash__K-9lB.sash-module_hover__80W6I:before,
303
+ .sash-module_sash__K-9lB.sash-module_active__bJspD:before {
304
+ background: var(--focus-border);
305
+ }
306
+
149
307
  /* src/dashboard/global.css */
150
308
  html,
151
309
  body,
@@ -24,9 +24,9 @@ import {
24
24
  var App_default = {
25
25
  "AppLoading-progress-fade-in": "alinea-AppLoading-progress-fade-in",
26
26
  "AppLoadingProgressFadeIn": "alinea-AppLoading-progress-fade-in",
27
+ "AppLoading": "alinea-AppLoading",
27
28
  "AppLoading-progress": "alinea-AppLoading-progress",
28
- "AppLoadingProgress": "alinea-AppLoading-progress",
29
- "AppLoading": "alinea-AppLoading"
29
+ "AppLoadingProgress": "alinea-AppLoading-progress"
30
30
  };
31
31
 
32
32
  // src/dashboard/App.tsx
@@ -17,10 +17,10 @@ var AccessDenied_default = {
17
17
  "AccessDenied-message": "alinea-AccessDenied-message",
18
18
  "AccessDeniedMessage": "alinea-AccessDenied-message",
19
19
  "AccessDenied": "alinea-AccessDenied",
20
- "AccessDenied-title": "alinea-AccessDenied-title",
21
- "AccessDeniedTitle": "alinea-AccessDenied-title",
22
20
  "AccessDenied-card": "alinea-AccessDenied-card",
23
- "AccessDeniedCard": "alinea-AccessDenied-card"
21
+ "AccessDeniedCard": "alinea-AccessDenied-card",
22
+ "AccessDenied-title": "alinea-AccessDenied-title",
23
+ "AccessDeniedTitle": "alinea-AccessDenied-title"
24
24
  };
25
25
 
26
26
  // src/dashboard/app/AccessDenied.tsx
@@ -42,27 +42,27 @@ import { IcRoundCheck, IcRoundHistory, IcRoundWarning } from "../icons.js";
42
42
 
43
43
  // src/dashboard/app/ActivityStatus.module.css
44
44
  var ActivityStatus_default = {
45
- "is-syncing": "alinea-is-syncing",
46
- "isSyncing": "alinea-is-syncing",
47
- "ActivityStatus-popover": "alinea-ActivityStatus-popover",
48
- "ActivityStatusPopover": "alinea-ActivityStatus-popover",
49
- "ActivityStatus-popover-header": "alinea-ActivityStatus-popover-header",
50
- "ActivityStatusPopoverHeader": "alinea-ActivityStatus-popover-header",
51
- "ActivityStatus-popover-title": "alinea-ActivityStatus-popover-title",
52
- "ActivityStatusPopoverTitle": "alinea-ActivityStatus-popover-title",
53
- "ActivityStatus-icon": "alinea-ActivityStatus-icon",
54
- "ActivityStatusIcon": "alinea-ActivityStatus-icon",
55
- "ActivityStatus": "alinea-ActivityStatus",
56
45
  "ActivityStatus-popover-actions": "alinea-ActivityStatus-popover-actions",
57
46
  "ActivityStatusPopoverActions": "alinea-ActivityStatus-popover-actions",
58
- "ActivityStatus-popover-list": "alinea-ActivityStatus-popover-list",
59
- "ActivityStatusPopoverList": "alinea-ActivityStatus-popover-list",
60
- "ActivityStatus-label": "alinea-ActivityStatus-label",
61
- "ActivityStatusLabel": "alinea-ActivityStatus-label",
62
47
  "is-failed": "alinea-is-failed",
63
48
  "isFailed": "alinea-is-failed",
49
+ "ActivityStatus-popover-header": "alinea-ActivityStatus-popover-header",
50
+ "ActivityStatusPopoverHeader": "alinea-ActivityStatus-popover-header",
64
51
  "ActivityStatus-popover-surface": "alinea-ActivityStatus-popover-surface",
65
52
  "ActivityStatusPopoverSurface": "alinea-ActivityStatus-popover-surface",
53
+ "ActivityStatus": "alinea-ActivityStatus",
54
+ "ActivityStatus-label": "alinea-ActivityStatus-label",
55
+ "ActivityStatusLabel": "alinea-ActivityStatus-label",
56
+ "ActivityStatus-popover": "alinea-ActivityStatus-popover",
57
+ "ActivityStatusPopover": "alinea-ActivityStatus-popover",
58
+ "is-syncing": "alinea-is-syncing",
59
+ "isSyncing": "alinea-is-syncing",
60
+ "ActivityStatus-popover-title": "alinea-ActivityStatus-popover-title",
61
+ "ActivityStatusPopoverTitle": "alinea-ActivityStatus-popover-title",
62
+ "ActivityStatus-popover-list": "alinea-ActivityStatus-popover-list",
63
+ "ActivityStatusPopoverList": "alinea-ActivityStatus-popover-list",
64
+ "ActivityStatus-icon": "alinea-ActivityStatus-icon",
65
+ "ActivityStatusIcon": "alinea-ActivityStatus-icon",
66
66
  "ActivityStatus-popover-item-error": "alinea-ActivityStatus-popover-item-error",
67
67
  "ActivityStatusPopoverItemError": "alinea-ActivityStatus-popover-item-error"
68
68
  };
@@ -5,8 +5,8 @@ import "../../chunks/chunk-CQ52GEHY.js";
5
5
 
6
6
  // src/dashboard/app/AppShell.module.css
7
7
  var AppShell_default = {
8
- "AppShellInner": "alinea-AppShellInner",
9
8
  "AppShellContent": "alinea-AppShellContent",
9
+ "AppShellInner": "alinea-AppShellInner",
10
10
  "AppShell": "alinea-AppShell"
11
11
  };
12
12
 
@@ -16,25 +16,25 @@ import { IcRoundArrowForward, IcRoundPublish } from "../icons.js";
16
16
 
17
17
  // src/dashboard/app/AuthView.module.css
18
18
  var AuthView_default = {
19
- "AuthView-loader": "alinea-AuthView-loader",
20
- "AuthViewLoader": "alinea-AuthView-loader",
21
19
  "AuthView-panel": "alinea-AuthView-panel",
22
20
  "AuthViewPanel": "alinea-AuthView-panel",
21
+ "AuthView-loader": "alinea-AuthView-loader",
22
+ "AuthViewLoader": "alinea-AuthView-loader",
23
+ "AuthView-surface": "alinea-AuthView-surface",
24
+ "AuthViewSurface": "alinea-AuthView-surface",
23
25
  "AuthView": "alinea-AuthView",
24
- "AuthView-heading": "alinea-AuthView-heading",
25
- "AuthViewHeading": "alinea-AuthView-heading",
26
26
  "AuthView-mark": "alinea-AuthView-mark",
27
27
  "AuthViewMark": "alinea-AuthView-mark",
28
- "AuthView-link": "alinea-AuthView-link",
29
- "AuthViewLink": "alinea-AuthView-link",
30
- "AuthView-actionRow": "alinea-AuthView-actionRow",
31
- "AuthViewActionRow": "alinea-AuthView-actionRow",
28
+ "AuthView-heading": "alinea-AuthView-heading",
29
+ "AuthViewHeading": "alinea-AuthView-heading",
32
30
  "AuthView-text": "alinea-AuthView-text",
33
31
  "AuthViewText": "alinea-AuthView-text",
34
- "AuthView-surface": "alinea-AuthView-surface",
35
- "AuthViewSurface": "alinea-AuthView-surface",
32
+ "AuthView-link": "alinea-AuthView-link",
33
+ "AuthViewLink": "alinea-AuthView-link",
36
34
  "AuthView-title": "alinea-AuthView-title",
37
- "AuthViewTitle": "alinea-AuthView-title"
35
+ "AuthViewTitle": "alinea-AuthView-title",
36
+ "AuthView-actionRow": "alinea-AuthView-actionRow",
37
+ "AuthViewActionRow": "alinea-AuthView-actionRow"
38
38
  };
39
39
 
40
40
  // src/dashboard/app/AuthView.tsx
@@ -21,23 +21,23 @@ import { Badge } from "./Badge.js";
21
21
  var CompactField_default = {
22
22
  "CompactField-record-field": "alinea-CompactField-record-field",
23
23
  "CompactFieldRecordField": "alinea-CompactField-record-field",
24
- "CompactField-items": "alinea-CompactField-items",
25
- "CompactFieldItems": "alinea-CompactField-items",
26
- "CompactField-record-value": "alinea-CompactField-record-value",
27
- "CompactFieldRecordValue": "alinea-CompactField-record-value",
24
+ "CompactField-list-count": "alinea-CompactField-list-count",
25
+ "CompactFieldListCount": "alinea-CompactField-list-count",
28
26
  "CompactField-record": "alinea-CompactField-record",
29
27
  "CompactFieldRecord": "alinea-CompactField-record",
30
28
  "CompactField-json": "alinea-CompactField-json",
31
29
  "CompactFieldJson": "alinea-CompactField-json",
32
- "CompactField-text": "alinea-CompactField-text",
33
- "CompactFieldText": "alinea-CompactField-text",
34
- "CompactField-record-label": "alinea-CompactField-record-label",
35
- "CompactFieldRecordLabel": "alinea-CompactField-record-label",
36
30
  "CompactField-muted": "alinea-CompactField-muted",
37
31
  "CompactFieldMuted": "alinea-CompactField-muted",
32
+ "CompactField-text": "alinea-CompactField-text",
33
+ "CompactFieldText": "alinea-CompactField-text",
34
+ "CompactField-items": "alinea-CompactField-items",
35
+ "CompactFieldItems": "alinea-CompactField-items",
38
36
  "CompactField": "alinea-CompactField",
39
- "CompactField-list-count": "alinea-CompactField-list-count",
40
- "CompactFieldListCount": "alinea-CompactField-list-count"
37
+ "CompactField-record-value": "alinea-CompactField-record-value",
38
+ "CompactFieldRecordValue": "alinea-CompactField-record-value",
39
+ "CompactField-record-label": "alinea-CompactField-record-label",
40
+ "CompactFieldRecordLabel": "alinea-CompactField-record-label"
41
41
  };
42
42
 
43
43
  // src/dashboard/app/CompactField.tsx
@@ -65,15 +65,15 @@ import { IcRoundWarning } from "../icons.js";
65
65
 
66
66
  // src/dashboard/app/DashboardErrorBoundary.module.css
67
67
  var DashboardErrorBoundary_default = {
68
- "DashboardErrorBoundary-heading": "alinea-DashboardErrorBoundary-heading",
69
- "DashboardErrorBoundaryHeading": "alinea-DashboardErrorBoundary-heading",
70
- "DashboardErrorBoundary-message": "alinea-DashboardErrorBoundary-message",
71
- "DashboardErrorBoundaryMessage": "alinea-DashboardErrorBoundary-message",
72
68
  "DashboardErrorBoundary-title": "alinea-DashboardErrorBoundary-title",
73
69
  "DashboardErrorBoundaryTitle": "alinea-DashboardErrorBoundary-title",
74
70
  "DashboardErrorBoundary": "alinea-DashboardErrorBoundary",
75
71
  "DashboardErrorBoundary-card": "alinea-DashboardErrorBoundary-card",
76
- "DashboardErrorBoundaryCard": "alinea-DashboardErrorBoundary-card"
72
+ "DashboardErrorBoundaryCard": "alinea-DashboardErrorBoundary-card",
73
+ "DashboardErrorBoundary-message": "alinea-DashboardErrorBoundary-message",
74
+ "DashboardErrorBoundaryMessage": "alinea-DashboardErrorBoundary-message",
75
+ "DashboardErrorBoundary-heading": "alinea-DashboardErrorBoundary-heading",
76
+ "DashboardErrorBoundaryHeading": "alinea-DashboardErrorBoundary-heading"
77
77
  };
78
78
 
79
79
  // src/dashboard/app/DashboardErrorBoundary.tsx