alinea 2.0.0-preview.4 → 2.0.0-preview.5
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.
- package/dist/.init/content/pages/welcome.json +1 -1
- package/dist/.init/src/cms.ts +1 -4
- package/dist/LICENSES.md +107 -107
- package/dist/adapter/next/cms.js +5 -1
- package/dist/adapter/next/handler.js +35 -6
- package/dist/adapter/next/previews.js +7 -1
- package/dist/adapter/next/syncCheck.d.ts +12 -0
- package/dist/adapter/next/syncCheck.js +59 -0
- package/dist/adapter/next/with-alinea.d.ts +0 -8
- package/dist/adapter/next/with-alinea.js +43 -19
- package/dist/adapter/vite/plugin.js +9 -4
- package/dist/backend/Handler.js +106 -0
- package/dist/backend/api/ProxyMedia.d.ts +3 -0
- package/dist/backend/api/ProxyMedia.js +39 -0
- package/dist/backend/api/S3Uploads.d.ts +1 -1
- package/dist/backend/router/Router.js +2 -0
- package/dist/backend/util/Syncable.js +1 -1
- package/dist/bundled.d.ts +164 -70
- package/dist/chunks/{chunk-XMOVGDFI.js → chunk-A6M3PNJT.js} +1 -1
- package/dist/cli/Generate.js +1 -3
- package/dist/cli/Serve.js +3 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/generate/GenerateDashboard.js +1 -0
- package/dist/cli/serve/CreateLocalServer.d.ts +1 -1
- package/dist/cli/serve/CreateLocalServer.js +42 -34
- package/dist/cli/static/init/cms.js +1 -4
- package/dist/cli/util/ContentType.d.ts +1 -0
- package/dist/cli/util/ContentType.js +36 -0
- package/dist/cloud/CloudHandshake.d.ts +6 -0
- package/dist/cloud/CloudHandshake.js +67 -10
- package/dist/cloud/CloudRemote.js +24 -11
- package/dist/components/Calendar.js +4 -4
- package/dist/components/Checkbox.js +3 -3
- package/dist/components/ColorSwatchPicker.js +2 -2
- package/dist/components/ComboBox.js +9 -9
- package/dist/components/DateField.js +4 -4
- package/dist/components/DatePicker.js +3 -3
- package/dist/components/DateRangePicker.js +8 -8
- package/dist/components/Disclosure.js +7 -7
- package/dist/components/Label.js +4 -4
- package/dist/components/List.d.ts +1 -1
- package/dist/components/List.js +35 -34
- package/dist/components/Menu.js +4 -4
- package/dist/components/Modal.js +2 -2
- package/dist/components/MultipleSelect.js +23 -23
- package/dist/components/NumberField.js +6 -6
- package/dist/components/ProgressCircle.js +1 -1
- package/dist/components/SearchField.js +7 -7
- package/dist/components/Select.js +9 -9
- package/dist/components/Surface.js +2 -2
- package/dist/components/Table.js +7 -7
- package/dist/components/Tabs.js +2 -2
- package/dist/components/TagGroup.js +2 -2
- package/dist/components/TextField.js +6 -6
- package/dist/components/TimeField.js +3 -3
- package/dist/components/Toggle.js +2 -2
- package/dist/components/Toolbar.js +2 -2
- package/dist/components/Tooltip.js +2 -2
- package/dist/components/Tree.js +6 -6
- package/dist/core/Config.d.ts +10 -3
- package/dist/core/Config.js +16 -1
- package/dist/core/Graph.d.ts +2 -2
- package/dist/core/Role.js +16 -14
- package/dist/core/TextDoc.d.ts +2 -0
- package/dist/core/TextDoc.js +1 -0
- package/dist/core/Workspace.d.ts +6 -5
- package/dist/core/db/EntryIndex.d.ts +3 -0
- package/dist/core/db/EntryIndex.js +62 -0
- package/dist/core/db/EntryTransaction.js +33 -12
- package/dist/core/db/EntryUrlConflictError.js +1 -1
- package/dist/core/db/LinkResolver.d.ts +8 -2
- package/dist/core/db/LinkResolver.js +27 -5
- package/dist/core/field/RichTextField.js +16 -10
- package/dist/core/media/MediaLocation.d.ts +9 -15
- package/dist/core/media/MediaLocation.js +29 -19
- package/dist/core/media/MediaTypes.js +1 -2
- package/dist/dashboard/App.js +1 -1
- package/dist/dashboard/app/AccessDenied.js +2 -2
- package/dist/dashboard/app/ActivityStatus.js +14 -13
- package/dist/dashboard/app/AppShell.js +1 -1
- package/dist/dashboard/app/AuthView.js +9 -9
- package/dist/dashboard/app/Badge.js +2 -2
- package/dist/dashboard/app/CompactField.js +13 -13
- package/dist/dashboard/app/DashboardErrorBoundary.js +4 -4
- package/dist/dashboard/app/EntryFields.d.ts +3 -1
- package/dist/dashboard/app/EntryFields.js +11 -8
- package/dist/dashboard/app/EntryHeader.js +117 -85
- package/dist/dashboard/app/EntryHeaderActions.d.ts +21 -4
- package/dist/dashboard/app/EntryHeaderActions.js +48 -27
- package/dist/dashboard/app/EntryReferences.js +9 -9
- package/dist/dashboard/app/EntrySidebar.js +12 -12
- package/dist/dashboard/app/EntrySidebarPreview.js +11 -11
- package/dist/dashboard/app/EntryTranslationBanner.d.ts +3 -1
- package/dist/dashboard/app/EntryTranslationBanner.js +24 -21
- package/dist/dashboard/app/Explorer.d.ts +4 -2
- package/dist/dashboard/app/Explorer.js +50 -46
- package/dist/dashboard/app/ExplorerCards.js +28 -28
- package/dist/dashboard/app/ExplorerFileCard.js +19 -19
- package/dist/dashboard/app/ExplorerList.js +12 -13
- package/dist/dashboard/app/ExplorerModal.js +5 -5
- package/dist/dashboard/app/ExplorerTable.js +46 -46
- package/dist/dashboard/app/LinkPicker.js +5 -5
- package/dist/dashboard/app/LocaleMenu.d.ts +7 -0
- package/dist/dashboard/app/LocaleMenu.js +26 -10
- package/dist/dashboard/app/ReadOnlyBadge.d.ts +4 -0
- package/dist/dashboard/app/ReadOnlyBadge.js +33 -0
- package/dist/dashboard/app/SidebarTree.d.ts +3 -6
- package/dist/dashboard/app/SidebarTree.js +54 -49
- package/dist/dashboard/app/WorkspaceMenu.js +12 -12
- package/dist/dashboard/app/WorkspaceRoots.js +24 -24
- package/dist/dashboard/app/editor/FileEditor.d.ts +2 -3
- package/dist/dashboard/app/editor/FileEditor.js +31 -34
- package/dist/dashboard/app/editor/FilePreview.js +6 -6
- package/dist/dashboard/app/modals/CreateEntry.js +5 -5
- package/dist/dashboard/app/pages/EntryPage.js +73 -30
- package/dist/dashboard/app/pages/SplashPage.js +47 -47
- package/dist/dashboard/app/pages/UsersPage.js +34 -34
- package/dist/dashboard/app/ui/DashboardModal.js +18 -18
- package/dist/dashboard/app/ui/Rail.js +3 -3
- package/dist/dashboard/app/ui/Sidebar.js +2 -2
- package/dist/dashboard/atoms/activity.d.ts +0 -1
- package/dist/dashboard/atoms/activity.js +1 -2
- package/dist/dashboard/atoms/editor.d.ts +2 -1
- package/dist/dashboard/atoms/editor.js +4 -2
- package/dist/dashboard/atoms/entry.d.ts +2 -0
- package/dist/dashboard/atoms/entry.js +32 -14
- package/dist/dashboard/atoms/explorer.d.ts +4 -3
- package/dist/dashboard/atoms/explorer.js +61 -22
- package/dist/dashboard/atoms/link.d.ts +1 -1
- package/dist/dashboard/atoms/link.js +39 -55
- package/dist/dashboard/atoms/root.d.ts +7 -2
- package/dist/dashboard/atoms/root.js +51 -16
- package/dist/dashboard/atoms/upload.d.ts +1 -0
- package/dist/dashboard/atoms/upload.js +2 -1
- package/dist/dashboard/boot/DashboardWorker.js +1 -0
- package/dist/dashboard/fixture/cms.js +1 -4
- package/dist/dashboard/hook/UseSaveShortcut.d.ts +1 -0
- package/dist/dashboard/hook/UseSaveShortcut.js +24 -0
- package/dist/dashboard/hooks.d.ts +1 -1
- package/dist/dashboard/hooks.js +12 -3
- package/dist/field/code/CodeField.view.js +9 -9
- package/dist/field/link/ImageLink.js +1 -3
- package/dist/field/link/LinkField.view.js +84 -58
- package/dist/field/list/ListField.view.js +13 -13
- package/dist/field/metadata/MetadataField.d.ts +3 -3
- package/dist/field/metadata/MetadataField.view.js +24 -17
- package/dist/field/object/ObjectField.view.js +11 -4
- package/dist/field/richtext/PickTextLink.js +5 -2
- package/dist/field/richtext/ReferenceLink.d.ts +2 -0
- package/dist/field/richtext/ReferenceLink.js +5 -0
- package/dist/field/richtext/RichTextBlock.js +2 -2
- package/dist/field/richtext/RichTextExtensions.js +22 -22
- package/dist/field/richtext/RichTextField.view.js +4 -4
- package/dist/field/richtext/extensions/Link.d.ts +1 -0
- package/dist/field/richtext/extensions/Link.js +1 -0
- package/dist/field/time/TimeField.d.ts +0 -2
- package/dist/field/time/TimeField.view.js +1 -1
- package/dist/index.css +44 -38
- package/dist/next.cjs +96 -19
- package/dist/picker/entry/EntryPicker.js +10 -12
- package/dist/picker/entry/EntryReference.d.ts +2 -0
- package/dist/picker/entry/EntryReference.js +1 -0
- package/dist/types.d.ts +0 -1
- package/package.json +1 -1
package/dist/bundled.d.ts
CHANGED
|
@@ -133,17 +133,26 @@ declare module 'alinea/adapter/next/previews.spec' {
|
|
|
133
133
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
declare module 'alinea/adapter/next/syncCheck' {
|
|
137
|
+
|
|
138
|
+
import type { Client } from 'alinea/core/Client';
|
|
139
|
+
import type { LocalDB } from 'alinea/core/db/LocalDB';
|
|
140
|
+
export const CONTENT_SHA_TAG = "alinea-content-sha";
|
|
141
|
+
export function revalidateContentSha(): Promise<void>;
|
|
142
|
+
/**
|
|
143
|
+
* Sync the isolate-local db only when it is behind the shared content sha.
|
|
144
|
+
* Returns true when the freshness question is settled here (synced, forced,
|
|
145
|
+
* or explicitly disabled) and the caller can skip its throttled sync.
|
|
146
|
+
* Returns false when the sha could not be determined, so the caller falls
|
|
147
|
+
* back to its existing throttle behavior.
|
|
148
|
+
*/
|
|
149
|
+
export function syncIfStale(db: LocalDB, client: Client, syncInterval?: number): Promise<boolean>;
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
136
153
|
declare module 'alinea/adapter/next/with-alinea' {
|
|
137
154
|
|
|
138
155
|
import type { NextConfig } from 'next/dist/types.js';
|
|
139
|
-
export interface WithAlineaOptions {
|
|
140
|
-
/**
|
|
141
|
-
* Base path where the dashboard is mounted.
|
|
142
|
-
*
|
|
143
|
-
* @default '/admin'
|
|
144
|
-
*/
|
|
145
|
-
adminPath?: string;
|
|
146
|
-
}
|
|
147
156
|
export function createCMS(): void;
|
|
148
157
|
export function withAlinea(config?: NextConfig): NextConfig;
|
|
149
158
|
|
|
@@ -345,6 +354,14 @@ declare module 'alinea/backend/api/OAuth2' {
|
|
|
345
354
|
|
|
346
355
|
}
|
|
347
356
|
|
|
357
|
+
declare module 'alinea/backend/api/ProxyMedia' {
|
|
358
|
+
|
|
359
|
+
import { type Request, Response } from '@alinea/iso';
|
|
360
|
+
export function proxyMediaUrl(request: Request, source: URL, isAllowed?: (url: URL) => boolean): Promise<Response>;
|
|
361
|
+
export function isRedirectStatus(status: number): boolean;
|
|
362
|
+
|
|
363
|
+
}
|
|
364
|
+
|
|
348
365
|
declare module 'alinea/backend/api/S3Uploads' {
|
|
349
366
|
|
|
350
367
|
import type { UploadMetadata, UploadResponse, UploadsApi } from 'alinea/core/Connection';
|
|
@@ -362,7 +379,7 @@ declare module 'alinea/backend/api/S3Uploads' {
|
|
|
362
379
|
previewExpiresIn?: number;
|
|
363
380
|
}
|
|
364
381
|
interface S3PresignOptions {
|
|
365
|
-
method: 'GET' | 'PUT';
|
|
382
|
+
method: 'GET' | 'HEAD' | 'PUT';
|
|
366
383
|
url: URL;
|
|
367
384
|
region: string;
|
|
368
385
|
accessKeyId: string;
|
|
@@ -957,7 +974,7 @@ declare module 'alinea/cli/serve/CreateLocalServer' {
|
|
|
957
974
|
import type { Handler } from 'alinea/backend/Handler';
|
|
958
975
|
import type { CMS } from 'alinea/core/CMS';
|
|
959
976
|
import type { User } from 'alinea/core/User';
|
|
960
|
-
import {
|
|
977
|
+
import { Request, Response } from '@alinea/iso';
|
|
961
978
|
import type { ServeContext } from 'alinea/cli/serve/ServeContext';
|
|
962
979
|
export function createLocalServer({ cmd, configLocation, rootDir, staticDir, alineaDev, buildOptions, production, liveReload, buildId, apiKey }: ServeContext, cms: CMS, handleApi: Handler, user: User): {
|
|
963
980
|
close(): void;
|
|
@@ -1100,6 +1117,12 @@ declare module 'alinea/cli/util/CommitSha' {
|
|
|
1100
1117
|
|
|
1101
1118
|
}
|
|
1102
1119
|
|
|
1120
|
+
declare module 'alinea/cli/util/ContentType' {
|
|
1121
|
+
|
|
1122
|
+
export function contentType(extension: string): string;
|
|
1123
|
+
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1103
1126
|
declare module 'alinea/cli/util/Dirname' {
|
|
1104
1127
|
|
|
1105
1128
|
export function dirname(url?: string): string;
|
|
@@ -1279,6 +1302,12 @@ declare module 'alinea/cloud/CloudHandshake' {
|
|
|
1279
1302
|
handshakeId: string;
|
|
1280
1303
|
origin: string;
|
|
1281
1304
|
}
|
|
1305
|
+
export class CloudHandshakeError extends Error {
|
|
1306
|
+
name: string;
|
|
1307
|
+
}
|
|
1308
|
+
export class CloudHandshakeServiceError extends Error {
|
|
1309
|
+
name: string;
|
|
1310
|
+
}
|
|
1282
1311
|
export function verifyCloudHandshake(token: string, options: VerifyCloudHandshakeOptions): Promise<void>;
|
|
1283
1312
|
export {};
|
|
1284
1313
|
|
|
@@ -1648,7 +1677,7 @@ declare module 'alinea/components/List' {
|
|
|
1648
1677
|
description?: ReactNode;
|
|
1649
1678
|
inline?: boolean;
|
|
1650
1679
|
}
|
|
1651
|
-
export function ListLabel({ children, expanded, hasRows, shared, showFold, className, description, inline, ...props }: ListLabelProps): import("react").JSX.Element;
|
|
1680
|
+
export function ListLabel({ children, expanded, hasRows, shared, showFold, className, description, inline, ...props }: ListLabelProps): import("react").JSX.Element | null;
|
|
1652
1681
|
export interface ListErrorProps extends ComponentPropsWithoutRef<'div'> {
|
|
1653
1682
|
}
|
|
1654
1683
|
export function ListError({ className, ...props }: ListErrorProps): import("react").JSX.Element;
|
|
@@ -2172,7 +2201,7 @@ declare module 'alinea/core/Config' {
|
|
|
2172
2201
|
preview?: Preview;
|
|
2173
2202
|
/** Every edit will pass through a draft status before being published */
|
|
2174
2203
|
enableDrafts?: boolean;
|
|
2175
|
-
/**
|
|
2204
|
+
/** Fallback interval in seconds for polling content updates (freshness is primarily sha-driven) */
|
|
2176
2205
|
syncInterval?: number;
|
|
2177
2206
|
/** Maximum file upload size in bytes */
|
|
2178
2207
|
maxUploadSize?: number;
|
|
@@ -2183,9 +2212,14 @@ declare module 'alinea/core/Config' {
|
|
|
2183
2212
|
};
|
|
2184
2213
|
/** The url of the handler endpoint */
|
|
2185
2214
|
handlerUrl?: string;
|
|
2186
|
-
/** The
|
|
2215
|
+
/** The public path where Alinea is mounted, defaults to /admin */
|
|
2216
|
+
adminPath?: string;
|
|
2217
|
+
/** The folder where public assets are stored, defaults to /public. */
|
|
2187
2218
|
publicDir?: string;
|
|
2188
|
-
/**
|
|
2219
|
+
/**
|
|
2220
|
+
* Filename of the generated dashboard, defaults to admin.html.
|
|
2221
|
+
* @deprecated Use adminPath instead.
|
|
2222
|
+
*/
|
|
2189
2223
|
dashboardFile?: string;
|
|
2190
2224
|
/** Optional application-owned instrumentation for Alinea operations. */
|
|
2191
2225
|
tracer?: Tracer;
|
|
@@ -2195,6 +2229,8 @@ declare module 'alinea/core/Config' {
|
|
|
2195
2229
|
function baseUrl(config: Config, env?: string): string | undefined;
|
|
2196
2230
|
function handlerUrl(config: Config): string;
|
|
2197
2231
|
function adminPath(config: Config): string;
|
|
2232
|
+
function filePathname(config: Config, file: string): string;
|
|
2233
|
+
function dashboardFile(config: Config): string;
|
|
2198
2234
|
function mainWorkspace(config: Config): WorkspaceInternal;
|
|
2199
2235
|
function type(config: Config, name: string): Type | undefined;
|
|
2200
2236
|
function rootContains(config: Config, root: Root, childType: Type): boolean;
|
|
@@ -2487,6 +2523,8 @@ declare module 'alinea/core/db/EntryIndex' {
|
|
|
2487
2523
|
constructor(config: Config, versionData: Map<string, EntryVersionData>, seeds: Map<string, Seed>);
|
|
2488
2524
|
byId(id: string): EntryNode | undefined;
|
|
2489
2525
|
candidateNodes(query: EntryNodeQuery): Array<EntryNode> | undefined;
|
|
2526
|
+
byUrl(url: string): Iterable<Entry>;
|
|
2527
|
+
byAlias(alias: string): Iterable<Entry>;
|
|
2490
2528
|
get config(): Config;
|
|
2491
2529
|
byDir(dir: string): EntryNode | undefined;
|
|
2492
2530
|
entryByFilePath(filePath: string): Entry | undefined;
|
|
@@ -2504,6 +2542,7 @@ declare module 'alinea/core/db/EntryIndex' {
|
|
|
2504
2542
|
filter(filter: EntryCondition): Iterable<Entry>;
|
|
2505
2543
|
findFirst<T extends Record<string, unknown>>(filter: (entry: Entry) => boolean): Entry<T> | undefined;
|
|
2506
2544
|
findMany(filter: (entry: Entry) => boolean): Iterable<Entry>;
|
|
2545
|
+
findByUrl(url: string, filter: (entry: Entry) => boolean): Entry | undefined;
|
|
2507
2546
|
referencesTo(query: EntryReferenceQuery): Promise<EntryReferenceResult>;
|
|
2508
2547
|
referencesFrom(sourceId: string): Promise<import("alinea/core/db/EntryReference").EntryReference[]>;
|
|
2509
2548
|
get references(): Promise<EntryReferenceIndex>;
|
|
@@ -2754,13 +2793,19 @@ declare module 'alinea/core/db/LinkResolver' {
|
|
|
2754
2793
|
|
|
2755
2794
|
import type { InferProjection, Projection } from 'alinea/core/Graph';
|
|
2756
2795
|
import type { EntryResolver, ResolveContext } from 'alinea/core/db/EntryResolver';
|
|
2796
|
+
export interface LinkTarget {
|
|
2797
|
+
entryId: string;
|
|
2798
|
+
locale?: string;
|
|
2799
|
+
}
|
|
2757
2800
|
export class LinkResolver {
|
|
2758
2801
|
resolver: EntryResolver;
|
|
2759
2802
|
private ctx;
|
|
2760
2803
|
locale: string | null;
|
|
2761
2804
|
constructor(resolver: EntryResolver, ctx: ResolveContext, locale: string | null);
|
|
2762
|
-
|
|
2763
|
-
|
|
2805
|
+
resolveLinks<P extends Projection>(projection: P, entryIds: ReadonlyArray<string>, locale?: string | null | undefined): Promise<Array<InferProjection<P>>>;
|
|
2806
|
+
resolveTargets<P extends Projection & {
|
|
2807
|
+
id: unknown;
|
|
2808
|
+
}>(projection: P, targets: ReadonlyArray<LinkTarget>): Promise<Array<InferProjection<P> | undefined>>;
|
|
2764
2809
|
}
|
|
2765
2810
|
|
|
2766
2811
|
}
|
|
@@ -3719,9 +3764,9 @@ declare module 'alinea/core/Graph' {
|
|
|
3719
3764
|
filter?: Filter<EntryFields>;
|
|
3720
3765
|
/** Filter by search terms */
|
|
3721
3766
|
search?: string | Array<string>;
|
|
3722
|
-
/**
|
|
3767
|
+
/** Fallback interval in seconds for polling content updates (freshness is primarily sha-driven) */
|
|
3723
3768
|
syncInterval?: number;
|
|
3724
|
-
/** Disable
|
|
3769
|
+
/** Disable syncing content updates */
|
|
3725
3770
|
disableSync?: boolean;
|
|
3726
3771
|
/** Skip the first N results */
|
|
3727
3772
|
skip?: number;
|
|
@@ -3977,35 +4022,25 @@ declare module 'alinea/core/media/MediaAltField' {
|
|
|
3977
4022
|
|
|
3978
4023
|
declare module 'alinea/core/media/MediaLocation' {
|
|
3979
4024
|
|
|
3980
|
-
import
|
|
4025
|
+
import { Config } from 'alinea/core/Config';
|
|
3981
4026
|
export const MEDIA_LOCATION = "@alinea.location";
|
|
3982
|
-
export interface
|
|
4027
|
+
export interface MediaPublicUrlMeta {
|
|
3983
4028
|
/** The media entry path without its extension. */
|
|
3984
4029
|
path: string;
|
|
3985
4030
|
/** The paths of parent media directories. */
|
|
3986
4031
|
parentPaths: Array<string>;
|
|
3987
4032
|
/** The file extension, including its leading dot. */
|
|
3988
4033
|
extension: string;
|
|
3989
|
-
/** The
|
|
3990
|
-
location: string;
|
|
4034
|
+
/** The workspace holding the media entry. */
|
|
3991
4035
|
workspace: string;
|
|
3992
|
-
root: string;
|
|
3993
|
-
}
|
|
3994
|
-
export interface MediaUrlResolver {
|
|
3995
|
-
(meta: MediaUrlMeta): string;
|
|
3996
|
-
}
|
|
3997
|
-
export interface MediaPublicUrlMeta extends Omit<MediaUrlMeta, 'parentPaths'> {
|
|
3998
|
-
/** @deprecated Pass parentPaths directly when available. */
|
|
3999
|
-
entryUrl?: string;
|
|
4000
|
-
parentPaths?: Array<string>;
|
|
4001
4036
|
}
|
|
4002
4037
|
export interface MediaEntryUrlMeta {
|
|
4003
4038
|
defaultUrl: string;
|
|
4004
4039
|
parentPaths: Array<string>;
|
|
4005
4040
|
path: string;
|
|
4006
|
-
workspace: string;
|
|
4007
|
-
root: string;
|
|
4008
4041
|
data: Record<string, unknown>;
|
|
4042
|
+
/** The workspace holding the media entry. */
|
|
4043
|
+
workspace: string;
|
|
4009
4044
|
}
|
|
4010
4045
|
/** Maps media entry locations between storage and public URLs. */
|
|
4011
4046
|
export namespace MediaLocation {
|
|
@@ -4015,8 +4050,12 @@ declare module 'alinea/core/media/MediaLocation' {
|
|
|
4015
4050
|
function storagePath(config: Config, workspace: string, location: string): string;
|
|
4016
4051
|
/** Remove the workspace storage directory from a prepared upload location. */
|
|
4017
4052
|
function entryLocation(config: Config, workspace: string, location: string): string;
|
|
4053
|
+
/** Resolve the deployed public location of a stored media file. */
|
|
4054
|
+
function sourceUrl(config: Config, workspace: string, location: string): string | undefined;
|
|
4018
4055
|
/** Resolve the public URL used to serve a media entry. */
|
|
4019
4056
|
function publicUrl(config: Config, meta: MediaPublicUrlMeta): string;
|
|
4057
|
+
/** Add an immutable media version without changing its canonical path. */
|
|
4058
|
+
function versionedUrl(url: string, version: string | undefined): string;
|
|
4020
4059
|
/** Resolve a media entry URL, falling back to its regular entry URL. */
|
|
4021
4060
|
function entryUrl(config: Config, meta: MediaEntryUrlMeta): string;
|
|
4022
4061
|
}
|
|
@@ -5024,6 +5063,7 @@ declare module 'alinea/core/TextDoc' {
|
|
|
5024
5063
|
_id: string;
|
|
5025
5064
|
_link: 'entry' | 'file' | 'url';
|
|
5026
5065
|
_entry?: string;
|
|
5066
|
+
_locale?: string;
|
|
5027
5067
|
_anchor?: string;
|
|
5028
5068
|
_suffix?: string;
|
|
5029
5069
|
}
|
|
@@ -5031,6 +5071,7 @@ declare module 'alinea/core/TextDoc' {
|
|
|
5031
5071
|
const id = "_id";
|
|
5032
5072
|
const link = "_link";
|
|
5033
5073
|
const entry = "_entry";
|
|
5074
|
+
const locale = "_locale";
|
|
5034
5075
|
const anchor = "_anchor";
|
|
5035
5076
|
const suffix = "_suffix";
|
|
5036
5077
|
}
|
|
@@ -5857,23 +5898,23 @@ declare module 'alinea/core/Workspace' {
|
|
|
5857
5898
|
|
|
5858
5899
|
import type { Preview } from 'alinea/core/Preview';
|
|
5859
5900
|
import type { ComponentType } from 'react';
|
|
5860
|
-
import type { MediaUrlResolver } from 'alinea/core/media/MediaLocation';
|
|
5861
5901
|
import { type HasWorkspace } from 'alinea/core/Internal';
|
|
5862
5902
|
import { Root } from 'alinea/core/Root';
|
|
5863
5903
|
import type { Schema } from 'alinea/core/Schema';
|
|
5864
5904
|
export interface WorkspaceMeta {
|
|
5865
5905
|
/** A directory which contains the json entry files */
|
|
5866
5906
|
source: string;
|
|
5867
|
-
/**
|
|
5907
|
+
/**
|
|
5908
|
+
* The directory where media files are placed
|
|
5909
|
+
*/
|
|
5868
5910
|
mediaDir?: string;
|
|
5869
|
-
/**
|
|
5870
|
-
mediaUrl?: string
|
|
5911
|
+
/** The public URL prefix used when querying media files */
|
|
5912
|
+
mediaUrl?: string;
|
|
5871
5913
|
/** The main theme color used in the dashboard */
|
|
5872
5914
|
color?: string;
|
|
5873
5915
|
icon?: ComponentType;
|
|
5874
5916
|
preview?: Preview;
|
|
5875
5917
|
}
|
|
5876
|
-
export type { MediaUrlMeta, MediaUrlResolver } from 'alinea/core/media/MediaLocation';
|
|
5877
5918
|
type Roots = Record<string, Root>;
|
|
5878
5919
|
export interface RootsDefinition {
|
|
5879
5920
|
[key: string]: Root;
|
|
@@ -5901,6 +5942,7 @@ declare module 'alinea/core/Workspace' {
|
|
|
5901
5942
|
export function workspace<Roots extends RootsDefinition>(
|
|
5902
5943
|
/** The name of the workspace */
|
|
5903
5944
|
label: string, config: WorkspaceConfig<Roots>): Workspace<Roots>;
|
|
5945
|
+
export {};
|
|
5904
5946
|
|
|
5905
5947
|
}
|
|
5906
5948
|
|
|
@@ -6086,12 +6128,11 @@ declare module 'alinea/dashboard/app/DashboardMeta' {
|
|
|
6086
6128
|
|
|
6087
6129
|
declare module 'alinea/dashboard/app/editor/FileEditor' {
|
|
6088
6130
|
|
|
6089
|
-
import type { Entry } from 'alinea/core/Entry';
|
|
6090
6131
|
export interface FileEditorProps {
|
|
6091
|
-
entry: Pick<Entry, 'root' | 'url' | 'workspace'>;
|
|
6092
6132
|
parentPaths: Array<string>;
|
|
6133
|
+
workspace: string;
|
|
6093
6134
|
}
|
|
6094
|
-
export function FileEditor({
|
|
6135
|
+
export function FileEditor({ parentPaths, workspace }: FileEditorProps): import("react").JSX.Element;
|
|
6095
6136
|
|
|
6096
6137
|
}
|
|
6097
6138
|
|
|
@@ -6142,9 +6183,10 @@ declare module 'alinea/dashboard/app/EntryFields' {
|
|
|
6142
6183
|
import type { EditorNode } from 'alinea/dashboard/atoms/editor';
|
|
6143
6184
|
interface NodeEditorProps extends PropsWithChildren {
|
|
6144
6185
|
node: EditorNode;
|
|
6186
|
+
readOnly?: boolean;
|
|
6145
6187
|
type: Type;
|
|
6146
6188
|
}
|
|
6147
|
-
export function NodeEditor({ children, node, type }: NodeEditorProps): import("react").JSX.Element;
|
|
6189
|
+
export function NodeEditor({ children, node, readOnly, type }: NodeEditorProps): import("react").JSX.Element;
|
|
6148
6190
|
export function FieldsEditor(): import("react").JSX.Element[];
|
|
6149
6191
|
export function EntryFields(): import("react").JSX.Element[];
|
|
6150
6192
|
export interface EditFieldsProps {
|
|
@@ -6155,6 +6197,7 @@ declare module 'alinea/dashboard/app/EntryFields' {
|
|
|
6155
6197
|
field: Field;
|
|
6156
6198
|
}
|
|
6157
6199
|
export const EditField: import("react").MemoExoticComponent<({ field }: EditFieldProps) => import("react").JSX.Element | null>;
|
|
6200
|
+
export function fieldWidth(width?: number): string;
|
|
6158
6201
|
export {};
|
|
6159
6202
|
|
|
6160
6203
|
}
|
|
@@ -6182,8 +6225,6 @@ declare module 'alinea/dashboard/app/EntryHeader' {
|
|
|
6182
6225
|
declare module 'alinea/dashboard/app/EntryHeaderActions' {
|
|
6183
6226
|
|
|
6184
6227
|
import type { EntryStatus } from 'alinea/core/Entry';
|
|
6185
|
-
export type EntryHeaderActionId = 'remove-draft' | 'replace' | 'unpublish' | 'archive' | 'publish' | 'delete';
|
|
6186
|
-
export type EntryHeaderPrimaryActionId = 'create-draft' | 'save-translation' | 'discard-changes' | 'publish-edits' | 'save-draft' | 'publish-draft';
|
|
6187
6228
|
interface EntryHeaderAccess {
|
|
6188
6229
|
archive: boolean;
|
|
6189
6230
|
delete: boolean;
|
|
@@ -6215,8 +6256,27 @@ declare module 'alinea/dashboard/app/EntryHeaderActions' {
|
|
|
6215
6256
|
parentNeedsTranslation: boolean;
|
|
6216
6257
|
untranslated: boolean;
|
|
6217
6258
|
}
|
|
6218
|
-
export
|
|
6219
|
-
|
|
6259
|
+
export interface EntryDirtyActions {
|
|
6260
|
+
publish: boolean;
|
|
6261
|
+
saveDraft: boolean;
|
|
6262
|
+
}
|
|
6263
|
+
export interface EntryHeaderPrimaryActions {
|
|
6264
|
+
createDraft: boolean;
|
|
6265
|
+
dirty: EntryDirtyActions | undefined;
|
|
6266
|
+
publishDraft: boolean;
|
|
6267
|
+
saveTranslation: boolean;
|
|
6268
|
+
}
|
|
6269
|
+
export interface EntryHeaderActions {
|
|
6270
|
+
archive: boolean;
|
|
6271
|
+
delete: boolean;
|
|
6272
|
+
publish: boolean;
|
|
6273
|
+
removeDraft: boolean;
|
|
6274
|
+
replace: boolean;
|
|
6275
|
+
unpublish: boolean;
|
|
6276
|
+
}
|
|
6277
|
+
export function entryDirtyActions(canPublish: boolean, canSaveDraft: boolean): EntryDirtyActions;
|
|
6278
|
+
export function entryHeaderPrimaryActions({ access, activeStatus, canPublishParents, canSaveDraft, isDirty, isRevision, parentNeedsTranslation, untranslated }: EntryHeaderPrimaryActionState): EntryHeaderPrimaryActions;
|
|
6279
|
+
export function entryHeaderActions({ access, activeStatus, canDelete, canPublishParents, draftsEnabled, isDirty, isMediaFile, isMediaLibrary, isParentUnpublished, isRevision, isUnpublished, untranslated }: EntryHeaderActionState): EntryHeaderActions;
|
|
6220
6280
|
export {};
|
|
6221
6281
|
|
|
6222
6282
|
}
|
|
@@ -6308,12 +6368,14 @@ declare module 'alinea/dashboard/app/EntrySidebarToggle' {
|
|
|
6308
6368
|
declare module 'alinea/dashboard/app/EntryTranslationBanner' {
|
|
6309
6369
|
|
|
6310
6370
|
export interface EntryTranslationBannerProps {
|
|
6371
|
+
copyFromSource: boolean;
|
|
6311
6372
|
parentNeedsTranslation: boolean;
|
|
6312
6373
|
sourceLocale: string | null;
|
|
6313
6374
|
sourceLocales: ReadonlyArray<string>;
|
|
6375
|
+
onCopyFromSourceChange: (copyFromSource: boolean) => void;
|
|
6314
6376
|
onSourceLocaleChange: (locale: string) => void;
|
|
6315
6377
|
}
|
|
6316
|
-
export const EntryTranslationBanner: import("react").MemoExoticComponent<({ parentNeedsTranslation, sourceLocale, sourceLocales, onSourceLocaleChange }: EntryTranslationBannerProps) => import("react").JSX.Element>;
|
|
6378
|
+
export const EntryTranslationBanner: import("react").MemoExoticComponent<({ copyFromSource, parentNeedsTranslation, sourceLocale, sourceLocales, onCopyFromSourceChange, onSourceLocaleChange }: EntryTranslationBannerProps) => import("react").JSX.Element>;
|
|
6317
6379
|
|
|
6318
6380
|
}
|
|
6319
6381
|
|
|
@@ -6327,6 +6389,7 @@ declare module 'alinea/dashboard/app/Explorer' {
|
|
|
6327
6389
|
explorer: DashboardExplorer;
|
|
6328
6390
|
headerEntry?: ExplorerHeaderEntry;
|
|
6329
6391
|
page: ExplorerReadyPage;
|
|
6392
|
+
readOnly?: boolean;
|
|
6330
6393
|
titleControls?: ReactNode;
|
|
6331
6394
|
}
|
|
6332
6395
|
export interface ExplorerHeaderEntry {
|
|
@@ -6342,6 +6405,7 @@ declare module 'alinea/dashboard/app/Explorer' {
|
|
|
6342
6405
|
headerEntry?: ExplorerHeaderEntry;
|
|
6343
6406
|
navigate?: boolean;
|
|
6344
6407
|
page: ExplorerReadyPage;
|
|
6408
|
+
readOnly?: boolean;
|
|
6345
6409
|
titleControls?: ReactNode;
|
|
6346
6410
|
}
|
|
6347
6411
|
export interface ExplorerBodyProps {
|
|
@@ -6357,9 +6421,9 @@ declare module 'alinea/dashboard/app/Explorer' {
|
|
|
6357
6421
|
page: ExplorerReadyPage;
|
|
6358
6422
|
}
|
|
6359
6423
|
export function ExplorerSearch({ autoFocus, explorer, onEntryAction, page }: ExplorerSearchProps): import("react").JSX.Element;
|
|
6360
|
-
export function ExplorerHeader({ canBrowse, autoFocusSearch, controls, explorer, headerEntry, navigate, page, titleControls }: ExplorerHeaderProps): import("react").JSX.Element;
|
|
6424
|
+
export function ExplorerHeader({ canBrowse, autoFocusSearch, controls, explorer, headerEntry, navigate, page, readOnly, titleControls }: ExplorerHeaderProps): import("react").JSX.Element;
|
|
6361
6425
|
export function ExplorerBody({ compactTable, explorer, onSelectionChange, page }: ExplorerBodyProps): import("react").JSX.Element;
|
|
6362
|
-
export function Explorer({ controls, explorer, headerEntry, page: loadedPage, titleControls }: ExplorerProps): import("react").JSX.Element;
|
|
6426
|
+
export function Explorer({ controls, explorer, headerEntry, page: loadedPage, readOnly, titleControls }: ExplorerProps): import("react").JSX.Element;
|
|
6363
6427
|
export {};
|
|
6364
6428
|
|
|
6365
6429
|
}
|
|
@@ -6518,7 +6582,14 @@ declare module 'alinea/dashboard/app/LocaleMenu' {
|
|
|
6518
6582
|
locale: string | null;
|
|
6519
6583
|
onLocaleChange(locale: string): void;
|
|
6520
6584
|
}
|
|
6585
|
+
export interface LocaleMenuSelectProps {
|
|
6586
|
+
ariaLabel?: string;
|
|
6587
|
+
locale: string | null;
|
|
6588
|
+
locales: ReadonlyArray<string>;
|
|
6589
|
+
onLocaleChange(locale: string): void;
|
|
6590
|
+
}
|
|
6521
6591
|
export function LocaleMenu({ root, locale, onLocaleChange }: LocaleMenuProps): import("react").JSX.Element | null;
|
|
6592
|
+
export function LocaleMenuSelect({ ariaLabel, locale, locales, onLocaleChange }: LocaleMenuSelectProps): import("react").JSX.Element | null;
|
|
6522
6593
|
export {};
|
|
6523
6594
|
|
|
6524
6595
|
}
|
|
@@ -6592,6 +6663,15 @@ declare module 'alinea/dashboard/app/pages/UsersPage' {
|
|
|
6592
6663
|
|
|
6593
6664
|
}
|
|
6594
6665
|
|
|
6666
|
+
declare module 'alinea/dashboard/app/ReadOnlyBadge' {
|
|
6667
|
+
|
|
6668
|
+
import type { ComponentPropsWithoutRef } from 'react';
|
|
6669
|
+
export interface ReadOnlyBadgeProps extends ComponentPropsWithoutRef<'span'> {
|
|
6670
|
+
}
|
|
6671
|
+
export function ReadOnlyBadge(props: ReadOnlyBadgeProps): import("react").JSX.Element;
|
|
6672
|
+
|
|
6673
|
+
}
|
|
6674
|
+
|
|
6595
6675
|
declare module 'alinea/dashboard/app/SidebarLayout' {
|
|
6596
6676
|
|
|
6597
6677
|
import { type ReactNode } from 'react';
|
|
@@ -6609,7 +6689,7 @@ declare module 'alinea/dashboard/app/SidebarTree' {
|
|
|
6609
6689
|
|
|
6610
6690
|
import { type Page } from 'alinea/dashboard/atoms/nav';
|
|
6611
6691
|
import type { RootAtoms, RootTreeItem, RootTreeNode, TreeAtoms } from 'alinea/dashboard/atoms/root';
|
|
6612
|
-
import { type
|
|
6692
|
+
import { type WritableAtom } from 'jotai';
|
|
6613
6693
|
import { type ReactNode } from 'react';
|
|
6614
6694
|
import { type Selection } from 'react-aria-components';
|
|
6615
6695
|
export interface SidebarTreeProps {
|
|
@@ -6628,16 +6708,13 @@ declare module 'alinea/dashboard/app/SidebarTree' {
|
|
|
6628
6708
|
}
|
|
6629
6709
|
interface SidebarTreeItemProps {
|
|
6630
6710
|
children?: ReactNode;
|
|
6711
|
+
data: RootTreeItem;
|
|
6631
6712
|
entryLink?: (entry: RootTreeItem) => SidebarTreeLink;
|
|
6632
6713
|
item: RootTreeNode;
|
|
6633
6714
|
locale: string | null;
|
|
6634
6715
|
selectedItem?: RootTreeItem;
|
|
6635
|
-
tree: SidebarTreeItemSource;
|
|
6636
6716
|
}
|
|
6637
|
-
|
|
6638
|
-
item(id: string): Atom<RootTreeItem>;
|
|
6639
|
-
}
|
|
6640
|
-
export const SidebarTreeItem: import("react").MemoExoticComponent<({ children, entryLink, item, locale, selectedItem, tree }: SidebarTreeItemProps) => import("react").JSX.Element>;
|
|
6717
|
+
export const SidebarTreeItem: import("react").MemoExoticComponent<({ children, data, entryLink, item, locale, selectedItem }: SidebarTreeItemProps) => import("react").JSX.Element>;
|
|
6641
6718
|
interface SidebarTreeLink {
|
|
6642
6719
|
href: string;
|
|
6643
6720
|
}
|
|
@@ -6828,7 +6905,6 @@ declare module 'alinea/dashboard/atoms/activity' {
|
|
|
6828
6905
|
isFetchingUpdates: boolean;
|
|
6829
6906
|
isMutating: boolean;
|
|
6830
6907
|
hasFailed: boolean;
|
|
6831
|
-
hasFailedMutations: boolean;
|
|
6832
6908
|
hasBlocked: boolean;
|
|
6833
6909
|
canRetry: boolean;
|
|
6834
6910
|
canDiscard: boolean;
|
|
@@ -7069,9 +7145,10 @@ declare module 'alinea/dashboard/atoms/editor' {
|
|
|
7069
7145
|
policy?: Policy | undefined;
|
|
7070
7146
|
resolvedImages: ReadonlyMap<string, ResolvedEditorImage>;
|
|
7071
7147
|
anchors: Atom<Array<EntryAnchorTarget>>;
|
|
7148
|
+
readonly readOnly: boolean;
|
|
7072
7149
|
value: Atom<object>;
|
|
7073
7150
|
sections: Array<EntryEditorSection>;
|
|
7074
|
-
constructor(type: Type, node: EditorNode, parent?: EntryEditor | undefined, resource?: Resource | undefined, policy?: Policy | undefined, resolvedImages?: ReadonlyMap<string, ResolvedEditorImage
|
|
7151
|
+
constructor(type: Type, node: EditorNode, parent?: EntryEditor | undefined, resource?: Resource | undefined, policy?: Policy | undefined, resolvedImages?: ReadonlyMap<string, ResolvedEditorImage>, readOnly?: boolean);
|
|
7075
7152
|
field: (key: string) => EntryEditorField | undefined;
|
|
7076
7153
|
get(field: Field): EntryEditorField | undefined;
|
|
7077
7154
|
}
|
|
@@ -7166,6 +7243,7 @@ declare module 'alinea/dashboard/atoms/entry' {
|
|
|
7166
7243
|
init: ReactiveNode<object> | undefined;
|
|
7167
7244
|
};
|
|
7168
7245
|
untranslated: Atom<boolean>;
|
|
7246
|
+
copyTranslationSource: import("jotai").WritableAtom<boolean, [next: boolean], void>;
|
|
7169
7247
|
translationSourceLocale: import("jotai").WritableAtom<string, [next: string], void>;
|
|
7170
7248
|
parentNeedsTranslation: Atom<Promise<boolean>>;
|
|
7171
7249
|
selectedVersion: import("jotai").PrimitiveAtom<SelectedVersion | null> & {
|
|
@@ -7173,6 +7251,7 @@ declare module 'alinea/dashboard/atoms/entry' {
|
|
|
7173
7251
|
};
|
|
7174
7252
|
versions: Atom<Map<EntryStatus, Entry<Record<string, unknown>>>>;
|
|
7175
7253
|
availableStatuses: Atom<EntryStatus[]>;
|
|
7254
|
+
preferredEntry: Atom<Entry<Record<string, unknown>>>;
|
|
7176
7255
|
selectedEntry: Atom<Promise<Entry<Record<string, unknown>>>>;
|
|
7177
7256
|
historyReady: Atom<Promise<import("alinea/core/Connection").Revision[]>>;
|
|
7178
7257
|
history: Atom<import("alinea/core/Connection").Revision[]>;
|
|
@@ -7438,7 +7517,7 @@ declare module 'alinea/dashboard/atoms/explorer' {
|
|
|
7438
7517
|
initialSelection?: Array<string>;
|
|
7439
7518
|
searchDepth?: 'current' | 'all';
|
|
7440
7519
|
onAction?: (entry: ExplorerEntry) => void;
|
|
7441
|
-
onConfirm?: (selection: Array<string
|
|
7520
|
+
onConfirm?: (selection: Array<string>, locale: string | null) => void;
|
|
7442
7521
|
preselect?: boolean;
|
|
7443
7522
|
}
|
|
7444
7523
|
export interface ExplorerTreeItem {
|
|
@@ -7450,6 +7529,7 @@ declare module 'alinea/dashboard/atoms/explorer' {
|
|
|
7450
7529
|
}
|
|
7451
7530
|
export type ExplorerResultMode = 'browse' | 'matches';
|
|
7452
7531
|
export interface ExplorerReadyPage {
|
|
7532
|
+
canUpload: boolean;
|
|
7453
7533
|
isMedia: boolean;
|
|
7454
7534
|
items: Array<ExplorerEntry>;
|
|
7455
7535
|
locale: string | null;
|
|
@@ -7604,7 +7684,7 @@ declare module 'alinea/dashboard/atoms/explorer' {
|
|
|
7604
7684
|
get limitLocations(): ExplorerLimitLocation[] | undefined;
|
|
7605
7685
|
canUpload: Atom<boolean>;
|
|
7606
7686
|
uploadsInCurrentFolder: Atom<import("alinea/dashboard/boot/ActivityEvent").Activity[]>;
|
|
7607
|
-
upload: WritableAtom<null, [files: ArrayLike<File> | Iterable<File>], void
|
|
7687
|
+
upload: WritableAtom<null, [files: ArrayLike<File> | Iterable<File>], Promise<void>> & {
|
|
7608
7688
|
init: null;
|
|
7609
7689
|
};
|
|
7610
7690
|
getItems: WritableAtom<null, [keys: Set<Key>], DragItem[]> & {
|
|
@@ -7622,7 +7702,7 @@ declare module 'alinea/dashboard/atoms/explorer' {
|
|
|
7622
7702
|
openLocation: WritableAtom<null, [entry: ExplorerEntry], void> & {
|
|
7623
7703
|
init: null;
|
|
7624
7704
|
};
|
|
7625
|
-
onConfirm: WritableAtom<null, [], void> & {
|
|
7705
|
+
onConfirm: WritableAtom<null, [locale?: string | null | undefined], void> & {
|
|
7626
7706
|
init: null;
|
|
7627
7707
|
};
|
|
7628
7708
|
isExpanded: (entry: ExplorerEntry) => Atom<boolean>;
|
|
@@ -7674,7 +7754,7 @@ declare module 'alinea/dashboard/atoms/link' {
|
|
|
7674
7754
|
state: 'hasError';
|
|
7675
7755
|
error: Error;
|
|
7676
7756
|
};
|
|
7677
|
-
export const linkEntryAtoms: (id: string) => import("jotai").Atom<LinkEntryState>;
|
|
7757
|
+
export const linkEntryAtoms: (id: string, locale?: string | undefined) => import("jotai").Atom<LinkEntryState>;
|
|
7678
7758
|
|
|
7679
7759
|
}
|
|
7680
7760
|
|
|
@@ -7798,7 +7878,7 @@ declare module 'alinea/dashboard/atoms/root' {
|
|
|
7798
7878
|
import { type Atom, type PrimitiveAtom } from 'jotai';
|
|
7799
7879
|
import type { ComponentType } from 'react';
|
|
7800
7880
|
import type { DroppableCollectionInsertDropEvent, DroppableCollectionOnItemDropEvent, DroppableCollectionReorderEvent, Key } from 'react-aria-components';
|
|
7801
|
-
import {
|
|
7881
|
+
import { IcOutlineDescription } from 'alinea/dashboard/icons';
|
|
7802
7882
|
import { type TreeEntryAtoms } from 'alinea/dashboard/atoms/entry';
|
|
7803
7883
|
export interface RootViewProps {
|
|
7804
7884
|
root: RootData;
|
|
@@ -7824,6 +7904,10 @@ declare module 'alinea/dashboard/atoms/root' {
|
|
|
7824
7904
|
items: Array<RootTreeNode>;
|
|
7825
7905
|
selectedKeys: Set<string>;
|
|
7826
7906
|
}
|
|
7907
|
+
export interface TreeView {
|
|
7908
|
+
entries: Map<string, RootTreeItem>;
|
|
7909
|
+
snapshot: TreeSnapshot;
|
|
7910
|
+
}
|
|
7827
7911
|
interface TreeCollapseState {
|
|
7828
7912
|
selectedId: string | undefined;
|
|
7829
7913
|
keys: Set<string>;
|
|
@@ -7837,6 +7921,7 @@ declare module 'alinea/dashboard/atoms/root' {
|
|
|
7837
7921
|
expandedKeys: PrimitiveAtom<Set<string>>;
|
|
7838
7922
|
collapsedKeys: PrimitiveAtom<TreeCollapseState>;
|
|
7839
7923
|
constructor(root: RootAtoms, locale: string | null, selectedKeys: Atom<Set<Key>>, viewState?: TreeViewState);
|
|
7924
|
+
view: Atom<TreeView>;
|
|
7840
7925
|
snapshot: Atom<TreeSnapshot>;
|
|
7841
7926
|
items: Atom<RootTreeItem[]>;
|
|
7842
7927
|
children: (id: string) => Atom<Promise<TreeEntryAtoms[]>>;
|
|
@@ -7860,7 +7945,7 @@ declare module 'alinea/dashboard/atoms/root' {
|
|
|
7860
7945
|
treeEntries: (locale: string | null) => Atom<Promise<TreeEntryAtoms[]>>;
|
|
7861
7946
|
children: (parentId: string | null) => ExplorerAtoms;
|
|
7862
7947
|
label: Atom<string>;
|
|
7863
|
-
icon: Atom<typeof
|
|
7948
|
+
icon: Atom<typeof IcOutlineDescription | ComponentType>;
|
|
7864
7949
|
i18n: Atom<RootI18n | undefined>;
|
|
7865
7950
|
isMedia: Atom<boolean>;
|
|
7866
7951
|
canCreate: Atom<boolean>;
|
|
@@ -7892,6 +7977,7 @@ declare module 'alinea/dashboard/atoms/upload' {
|
|
|
7892
7977
|
workspace: string;
|
|
7893
7978
|
root: string;
|
|
7894
7979
|
parentId?: string;
|
|
7980
|
+
parents?: Array<string>;
|
|
7895
7981
|
}
|
|
7896
7982
|
export const uploadFilesAtom: import("jotai").WritableAtom<null, [request: UploadFilesRequest], Promise<void>> & {
|
|
7897
7983
|
init: null;
|
|
@@ -8314,6 +8400,12 @@ declare module 'alinea/dashboard/hook/UseRoot' {
|
|
|
8314
8400
|
|
|
8315
8401
|
}
|
|
8316
8402
|
|
|
8403
|
+
declare module 'alinea/dashboard/hook/UseSaveShortcut' {
|
|
8404
|
+
|
|
8405
|
+
export function useSaveShortcut(action: (() => void) | undefined, disabled: boolean): void;
|
|
8406
|
+
|
|
8407
|
+
}
|
|
8408
|
+
|
|
8317
8409
|
declare module 'alinea/dashboard/hook/UseWorkspace' {
|
|
8318
8410
|
|
|
8319
8411
|
import type { WorkspaceInternal } from 'alinea/core/Workspace';
|
|
@@ -8429,7 +8521,7 @@ declare module 'alinea/dashboard/hooks' {
|
|
|
8429
8521
|
/**
|
|
8430
8522
|
* Creates an editor for a nested reactive node.
|
|
8431
8523
|
*/
|
|
8432
|
-
export function useNodeEditor(node: EditorNode, type: Type): EntryEditor;
|
|
8524
|
+
export function useNodeEditor(node: EditorNode, type: Type, readOnly?: boolean): EntryEditor;
|
|
8433
8525
|
/**
|
|
8434
8526
|
* Returns the reactive node backing a field in the active editor.
|
|
8435
8527
|
*/
|
|
@@ -9555,10 +9647,10 @@ declare module 'alinea/field/metadata/MetadataField' {
|
|
|
9555
9647
|
updatedAt: number | null;
|
|
9556
9648
|
updatedBy: MetadataAuditUser;
|
|
9557
9649
|
}
|
|
9558
|
-
export
|
|
9559
|
-
label: string;
|
|
9650
|
+
export interface MetadataOptions extends FieldOptions<Metadata> {
|
|
9560
9651
|
fields: Type<MetadataFields>;
|
|
9561
|
-
}
|
|
9652
|
+
}
|
|
9653
|
+
export class MetadataField extends RecordField<Metadata, MetadataOptions> {
|
|
9562
9654
|
}
|
|
9563
9655
|
export interface MetadataField extends MetadataFields {
|
|
9564
9656
|
}
|
|
@@ -9767,6 +9859,7 @@ declare module 'alinea/field/richtext/extensions/Link' {
|
|
|
9767
9859
|
interface LinkAttributes {
|
|
9768
9860
|
'data-id'?: string;
|
|
9769
9861
|
'data-entry'?: string;
|
|
9862
|
+
'data-locale'?: string;
|
|
9770
9863
|
'data-anchor'?: string;
|
|
9771
9864
|
'data-link'?: string;
|
|
9772
9865
|
'data-suffix'?: string;
|
|
@@ -9880,9 +9973,11 @@ declare module 'alinea/field/richtext/ReferenceLink' {
|
|
|
9880
9973
|
interface Anchor extends HTMLProps<HTMLAnchorElement> {
|
|
9881
9974
|
_id?: string;
|
|
9882
9975
|
_entry?: string;
|
|
9976
|
+
_locale?: string;
|
|
9883
9977
|
_link?: 'entry' | 'file' | 'image' | 'url';
|
|
9884
9978
|
'data-id'?: string;
|
|
9885
9979
|
'data-entry'?: string;
|
|
9980
|
+
'data-locale'?: string;
|
|
9886
9981
|
'data-anchor'?: string;
|
|
9887
9982
|
'data-link'?: 'entry' | 'file' | 'image' | 'url';
|
|
9888
9983
|
'data-suffix'?: string;
|
|
@@ -10586,8 +10681,6 @@ declare module 'alinea/field/time/TimeField' {
|
|
|
10586
10681
|
minValue?: string;
|
|
10587
10682
|
/** A maximum value */
|
|
10588
10683
|
maxValue?: string;
|
|
10589
|
-
/** Specifies the legal time intervals */
|
|
10590
|
-
step?: number;
|
|
10591
10684
|
}
|
|
10592
10685
|
/** Internal representation of a date field */
|
|
10593
10686
|
export class TimeField extends ScalarField<string, TimeOptions> {
|
|
@@ -10736,11 +10829,13 @@ declare module 'alinea/picker/entry/EntryReference' {
|
|
|
10736
10829
|
export interface EntryReference extends Reference {
|
|
10737
10830
|
_type: 'entry' | 'image' | 'file';
|
|
10738
10831
|
_entry: string;
|
|
10832
|
+
_locale?: string;
|
|
10739
10833
|
_anchor?: string;
|
|
10740
10834
|
_suffix?: string;
|
|
10741
10835
|
}
|
|
10742
10836
|
export namespace EntryReference {
|
|
10743
10837
|
const entry = "_entry";
|
|
10838
|
+
const locale = "_locale";
|
|
10744
10839
|
const anchor = "_anchor";
|
|
10745
10840
|
const suffix = "_suffix";
|
|
10746
10841
|
function isEntryReference(value: any): value is EntryReference;
|
|
@@ -11152,7 +11247,6 @@ declare module 'alinea/types' {
|
|
|
11152
11247
|
export type { Schema } from 'alinea/core/Schema';
|
|
11153
11248
|
export type { TextDoc } from 'alinea/core/TextDoc';
|
|
11154
11249
|
export type { Type } from 'alinea/core/Type';
|
|
11155
|
-
export type { MediaUrlMeta, MediaUrlResolver } from 'alinea/core/media/MediaLocation';
|
|
11156
11250
|
export type { Workspace } from 'alinea/core/Workspace';
|
|
11157
11251
|
export type { EntryLink } from 'alinea/field/link/EntryLink';
|
|
11158
11252
|
export type { FileLink } from 'alinea/field/link/FileLink';
|