@artkit-ai/react 0.0.0-stage → 0.1.0

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 (118) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +145 -2
  3. package/dist/cache.d.ts +35 -0
  4. package/dist/cache.d.ts.map +1 -0
  5. package/dist/cache.js +116 -0
  6. package/dist/cache.js.map +1 -0
  7. package/dist/client.d.ts +79 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +260 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/components/approval.d.ts +34 -0
  12. package/dist/components/approval.d.ts.map +1 -0
  13. package/dist/components/approval.js +80 -0
  14. package/dist/components/approval.js.map +1 -0
  15. package/dist/components/card.d.ts +22 -0
  16. package/dist/components/card.d.ts.map +1 -0
  17. package/dist/components/card.js +16 -0
  18. package/dist/components/card.js.map +1 -0
  19. package/dist/components/editor.d.ts +28 -0
  20. package/dist/components/editor.d.ts.map +1 -0
  21. package/dist/components/editor.js +161 -0
  22. package/dist/components/editor.js.map +1 -0
  23. package/dist/components/icons.d.ts +8 -0
  24. package/dist/components/icons.d.ts.map +1 -0
  25. package/dist/components/icons.js +14 -0
  26. package/dist/components/icons.js.map +1 -0
  27. package/dist/components/panel.d.ts +34 -0
  28. package/dist/components/panel.d.ts.map +1 -0
  29. package/dist/components/panel.js +216 -0
  30. package/dist/components/panel.js.map +1 -0
  31. package/dist/components/shared.d.ts +71 -0
  32. package/dist/components/shared.d.ts.map +1 -0
  33. package/dist/components/shared.js +104 -0
  34. package/dist/components/shared.js.map +1 -0
  35. package/dist/components/version-diff.d.ts +35 -0
  36. package/dist/components/version-diff.d.ts.map +1 -0
  37. package/dist/components/version-diff.js +85 -0
  38. package/dist/components/version-diff.js.map +1 -0
  39. package/dist/components/view.d.ts +40 -0
  40. package/dist/components/view.d.ts.map +1 -0
  41. package/dist/components/view.js +75 -0
  42. package/dist/components/view.js.map +1 -0
  43. package/dist/context.d.ts +59 -0
  44. package/dist/context.d.ts.map +1 -0
  45. package/dist/context.js +13 -0
  46. package/dist/context.js.map +1 -0
  47. package/dist/controls.d.ts +145 -0
  48. package/dist/controls.d.ts.map +1 -0
  49. package/dist/controls.js +188 -0
  50. package/dist/controls.js.map +1 -0
  51. package/dist/download.d.ts +4 -0
  52. package/dist/download.d.ts.map +1 -0
  53. package/dist/download.js +20 -0
  54. package/dist/download.js.map +1 -0
  55. package/dist/editor-session.d.ts +184 -0
  56. package/dist/editor-session.d.ts.map +1 -0
  57. package/dist/editor-session.js +614 -0
  58. package/dist/editor-session.js.map +1 -0
  59. package/dist/hooks.d.ts +85 -0
  60. package/dist/hooks.d.ts.map +1 -0
  61. package/dist/hooks.js +297 -0
  62. package/dist/hooks.js.map +1 -0
  63. package/dist/i18n.d.ts +197 -0
  64. package/dist/i18n.d.ts.map +1 -0
  65. package/dist/i18n.js +207 -0
  66. package/dist/i18n.js.map +1 -0
  67. package/dist/index.d.ts +22 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +22 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/kit-css.d.ts +3 -0
  72. package/dist/kit-css.d.ts.map +1 -0
  73. package/dist/kit-css.js +5 -0
  74. package/dist/kit-css.js.map +1 -0
  75. package/dist/line-diff.d.ts +25 -0
  76. package/dist/line-diff.d.ts.map +1 -0
  77. package/dist/line-diff.js +96 -0
  78. package/dist/line-diff.js.map +1 -0
  79. package/dist/partial-json.d.ts +8 -0
  80. package/dist/partial-json.d.ts.map +1 -0
  81. package/dist/partial-json.js +176 -0
  82. package/dist/partial-json.js.map +1 -0
  83. package/dist/provider.d.ts +42 -0
  84. package/dist/provider.d.ts.map +1 -0
  85. package/dist/provider.js +95 -0
  86. package/dist/provider.js.map +1 -0
  87. package/dist/styles.d.ts +25 -0
  88. package/dist/styles.d.ts.map +1 -0
  89. package/dist/styles.js +203 -0
  90. package/dist/styles.js.map +1 -0
  91. package/dist/toolbar.d.ts +90 -0
  92. package/dist/toolbar.d.ts.map +1 -0
  93. package/dist/toolbar.js +233 -0
  94. package/dist/toolbar.js.map +1 -0
  95. package/package.json +50 -3
  96. package/src/cache.ts +132 -0
  97. package/src/client.ts +390 -0
  98. package/src/components/approval.tsx +219 -0
  99. package/src/components/card.tsx +87 -0
  100. package/src/components/editor.tsx +392 -0
  101. package/src/components/icons.tsx +14 -0
  102. package/src/components/panel.tsx +591 -0
  103. package/src/components/shared.tsx +207 -0
  104. package/src/components/version-diff.tsx +266 -0
  105. package/src/components/view.tsx +199 -0
  106. package/src/context.ts +82 -0
  107. package/src/controls.tsx +587 -0
  108. package/src/download.ts +23 -0
  109. package/src/editor-session.ts +738 -0
  110. package/src/hooks.ts +411 -0
  111. package/src/i18n.ts +217 -0
  112. package/src/index.ts +160 -0
  113. package/src/kit-css.ts +5 -0
  114. package/src/line-diff.ts +111 -0
  115. package/src/partial-json.ts +160 -0
  116. package/src/provider.tsx +176 -0
  117. package/src/styles.ts +222 -0
  118. package/src/toolbar.tsx +536 -0
@@ -0,0 +1,85 @@
1
+ import { type Artifact, ArtifactError, type ChangeSummary, type CommitResult, type VersionEntry } from '@artkit-ai/core';
2
+ import type { ClientExportResult } from './client.js';
3
+ export interface UseArtifactOptions {
4
+ /** A specific (immutable) version; omit for the latest. */
5
+ version?: number;
6
+ /** Already-known artifact (e.g. from a chat message), shown immediately and cached. */
7
+ initial?: Artifact;
8
+ /** Revalidate the latest version on mount (default true). */
9
+ revalidate?: boolean;
10
+ }
11
+ export interface UseArtifactResult {
12
+ artifact: Artifact | undefined;
13
+ error: unknown;
14
+ loading: boolean;
15
+ /** Fetches the latest version again (specific versions never change). */
16
+ refresh(): Promise<Artifact | undefined>;
17
+ }
18
+ /** Loads an artifact through the client with a shared cache (spec §13.2). Pass undefined to skip. */
19
+ export declare function useArtifact(id: string | undefined, options?: UseArtifactOptions): UseArtifactResult;
20
+ /** Latest known version of an artifact in the cache, updated when commits arrive. */
21
+ export declare function useLatestVersion(id: string | undefined): number | undefined;
22
+ export interface UseArtifactHistoryResult {
23
+ entries: VersionEntry[];
24
+ loading: boolean;
25
+ error: unknown;
26
+ hasMore: boolean;
27
+ loadMore(): Promise<void>;
28
+ refresh(): Promise<void>;
29
+ /** Creates a new version with the content of `version` (spec §8.5). */
30
+ restore(version: number, message?: string): Promise<CommitResult>;
31
+ restoring: number | undefined;
32
+ }
33
+ /** Version list with pagination and restore (spec §13.2). Refetches when a newer version is known. */
34
+ export declare function useArtifactHistory(id: string | undefined, options?: {
35
+ pageSize?: number;
36
+ }): UseArtifactHistoryResult;
37
+ export interface ApplyConflict {
38
+ operations: unknown[];
39
+ baseVersion: number;
40
+ currentVersion?: number;
41
+ changes: ChangeSummary[];
42
+ }
43
+ export interface ApplyOptions {
44
+ /** Defaults to the latest cached version (loaded when unknown). */
45
+ baseVersion?: number;
46
+ idempotencyKey?: string;
47
+ message?: string;
48
+ }
49
+ export interface UseApplyOperationsResult {
50
+ apply(operations: unknown[], options?: ApplyOptions): Promise<CommitResult>;
51
+ pending: boolean;
52
+ error: ArtifactError | undefined;
53
+ /** Set on VERSION_CONFLICT: what changed since the base, and the operations that were refused. */
54
+ conflict: ApplyConflict | undefined;
55
+ /** Sends the refused operations again on the latest version. */
56
+ retry(): Promise<CommitResult>;
57
+ reset(): void;
58
+ }
59
+ /** Sends operations with `baseVersion` and surfaces conflicts (spec §13.2). */
60
+ export declare function useApplyOperations(id: string): UseApplyOperationsResult;
61
+ export interface ExportOptions {
62
+ version?: number;
63
+ /** Triggers a browser download (default true). */
64
+ download?: boolean;
65
+ options?: Record<string, unknown>;
66
+ /** `auto` (default) exports in the browser when a browser-capable exporter is loaded. */
67
+ prefer?: 'auto' | 'browser' | 'server';
68
+ signal?: AbortSignal;
69
+ }
70
+ export interface UseArtifactExportResult {
71
+ exportArtifact(format: string, options?: ExportOptions): Promise<ClientExportResult>;
72
+ pending: string | undefined;
73
+ error: ArtifactError | undefined;
74
+ warnings: string[];
75
+ /** Formats available for the artifact's kind (server formats plus browser exporters). */
76
+ formats: string[];
77
+ /** Loads the kind's browser exporters so `formats` includes them. */
78
+ loadFormats(): Promise<void>;
79
+ }
80
+ /**
81
+ * Exports in the browser when a loaded exporter with runtime `any`/`browser` handles the format, else
82
+ * through the client (spec §13.2), and triggers a download.
83
+ */
84
+ export declare function useArtifactExport(id: string, kind?: string): UseArtifactExportResult;
85
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,EAIjB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAsBtD,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,OAAO,IAAI,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CAsCvG;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQ3E;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,uEAAuE;IACvE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAClE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,wBAAwB,CAoE1B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,kGAAkG;IAClG,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,gEAAgE;IAChE,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,wBAAwB,CA0DvE;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrF,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yFAAyF;IACzF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qEAAqE;IACrE,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,uBAAuB,CA6GpF"}
package/dist/hooks.js ADDED
@@ -0,0 +1,297 @@
1
+ import { ArtifactError, isArtifactError, silentLogger, slugify, } from '@artkit-ai/core';
2
+ import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
3
+ import { useArtkit } from './context.js';
4
+ import { triggerDownload } from './download.js';
5
+ const NO_ENTRY = Object.freeze({ loading: false });
6
+ const noop = () => { };
7
+ const noSubscription = () => noop;
8
+ function toArtifactError(error) {
9
+ if (isArtifactError(error))
10
+ return error;
11
+ return new ArtifactError('INTERNAL_ERROR', 'Internal error while processing the request.', {
12
+ cause: error,
13
+ });
14
+ }
15
+ function newKey() {
16
+ const cryptoApi = globalThis.crypto;
17
+ return (cryptoApi?.randomUUID?.() ?? `ak-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`);
18
+ }
19
+ /** Loads an artifact through the client with a shared cache (spec §13.2). Pass undefined to skip. */
20
+ export function useArtifact(id, options = {}) {
21
+ const { cache } = useArtkit();
22
+ const { version, initial, revalidate = true } = options;
23
+ const subscribe = useCallback((listener) => (id ? cache.subscribe(id, listener) : noop), [cache, id]);
24
+ const read = () => (id ? cache.entry(id, version) : NO_ENTRY);
25
+ const entry = useSyncExternalStore(id ? subscribe : noSubscription, read, read);
26
+ useEffect(() => {
27
+ if (initial && initial.id === id)
28
+ cache.put(initial);
29
+ }, [cache, id, initial]);
30
+ useEffect(() => {
31
+ if (!id)
32
+ return;
33
+ cache.load(id, version, version === undefined && revalidate).catch(noop);
34
+ }, [cache, id, version, revalidate]);
35
+ const usableInitial = initial && initial.id === id && (version === undefined || initial.version === version)
36
+ ? initial
37
+ : undefined;
38
+ const artifact = entry.artifact && (!usableInitial || entry.artifact.version >= usableInitial.version)
39
+ ? entry.artifact
40
+ : (usableInitial ?? entry.artifact);
41
+ const refresh = useCallback(async () => {
42
+ if (!id)
43
+ return undefined;
44
+ return cache.load(id, version, true);
45
+ }, [cache, id, version]);
46
+ return {
47
+ artifact,
48
+ error: artifact ? undefined : entry.error,
49
+ loading: !artifact && !entry.error && id !== undefined,
50
+ refresh,
51
+ };
52
+ }
53
+ /** Latest known version of an artifact in the cache, updated when commits arrive. */
54
+ export function useLatestVersion(id) {
55
+ const { cache } = useArtkit();
56
+ const subscribe = useCallback((listener) => (id ? cache.subscribe(id, listener) : noop), [cache, id]);
57
+ const read = () => (id ? cache.latest(id)?.version : undefined);
58
+ return useSyncExternalStore(subscribe, read, read);
59
+ }
60
+ /** Version list with pagination and restore (spec §13.2). Refetches when a newer version is known. */
61
+ export function useArtifactHistory(id, options = {}) {
62
+ const { client, cache } = useArtkit();
63
+ const pageSize = options.pageSize ?? 20;
64
+ const latest = useLatestVersion(id);
65
+ const [entries, setEntries] = useState([]);
66
+ const [cursor, setCursor] = useState(undefined);
67
+ const [loading, setLoading] = useState(Boolean(id));
68
+ const [error, setError] = useState(undefined);
69
+ const [restoring, setRestoring] = useState(undefined);
70
+ const request = useRef(0);
71
+ const refresh = useCallback(async () => {
72
+ if (!id)
73
+ return;
74
+ const ticket = ++request.current;
75
+ setLoading(true);
76
+ try {
77
+ const page = await client.history(id, { limit: pageSize });
78
+ if (ticket !== request.current)
79
+ return;
80
+ setEntries(page.items);
81
+ setCursor(page.nextCursor);
82
+ setError(undefined);
83
+ }
84
+ catch (caught) {
85
+ if (ticket === request.current)
86
+ setError(caught);
87
+ }
88
+ finally {
89
+ if (ticket === request.current)
90
+ setLoading(false);
91
+ }
92
+ }, [client, id, pageSize]);
93
+ // biome-ignore lint/correctness/useExhaustiveDependencies: `latest` is the revalidation trigger.
94
+ useEffect(() => {
95
+ void refresh();
96
+ }, [refresh, latest]);
97
+ const loadMore = useCallback(async () => {
98
+ if (!id || !cursor)
99
+ return;
100
+ const ticket = ++request.current;
101
+ setLoading(true);
102
+ try {
103
+ const page = await client.history(id, { limit: pageSize, cursor });
104
+ if (ticket !== request.current)
105
+ return;
106
+ setEntries((previous) => {
107
+ const seen = new Set(previous.map((entry) => entry.version));
108
+ return [...previous, ...page.items.filter((entry) => !seen.has(entry.version))];
109
+ });
110
+ setCursor(page.nextCursor);
111
+ }
112
+ catch (caught) {
113
+ if (ticket === request.current)
114
+ setError(caught);
115
+ }
116
+ finally {
117
+ if (ticket === request.current)
118
+ setLoading(false);
119
+ }
120
+ }, [client, id, cursor, pageSize]);
121
+ const restore = useCallback(async (version, message) => {
122
+ if (!id)
123
+ throw new ArtifactError('NOT_FOUND', 'No artifact id.');
124
+ setRestoring(version);
125
+ try {
126
+ const result = await client.restore(id, version, message);
127
+ cache.put(result.artifact);
128
+ return result;
129
+ }
130
+ finally {
131
+ setRestoring(undefined);
132
+ }
133
+ }, [client, cache, id]);
134
+ return { entries, loading, error, hasMore: cursor !== undefined, loadMore, refresh, restore, restoring };
135
+ }
136
+ /** Sends operations with `baseVersion` and surfaces conflicts (spec §13.2). */
137
+ export function useApplyOperations(id) {
138
+ const { client, cache } = useArtkit();
139
+ const [state, setState] = useState({
140
+ pending: false,
141
+ });
142
+ const conflictRef = useRef(undefined);
143
+ const apply = useCallback(async (operations, options = {}) => {
144
+ setState({ pending: true });
145
+ let baseVersion = options.baseVersion;
146
+ try {
147
+ baseVersion ??= cache.latest(id)?.version ?? (await cache.load(id)).version;
148
+ const result = await client.apply(id, {
149
+ baseVersion,
150
+ operations,
151
+ idempotencyKey: options.idempotencyKey ?? newKey(),
152
+ ...(options.message ? { message: options.message } : {}),
153
+ });
154
+ cache.put(result.artifact);
155
+ conflictRef.current = undefined;
156
+ setState({ pending: false });
157
+ return result;
158
+ }
159
+ catch (caught) {
160
+ const error = toArtifactError(caught);
161
+ let conflict;
162
+ if (error.code === 'VERSION_CONFLICT') {
163
+ const changes = error.details.changesSinceBase;
164
+ const current = error.details.currentVersion;
165
+ conflict = {
166
+ operations,
167
+ baseVersion: baseVersion ?? 0,
168
+ ...(typeof current === 'number' ? { currentVersion: current } : {}),
169
+ changes: Array.isArray(changes) ? changes : [],
170
+ };
171
+ cache.load(id, undefined, true).catch(noop);
172
+ }
173
+ conflictRef.current = conflict;
174
+ setState({ pending: false, error, ...(conflict ? { conflict } : {}) });
175
+ throw error;
176
+ }
177
+ }, [client, cache, id]);
178
+ const retry = useCallback(async () => {
179
+ const conflict = conflictRef.current;
180
+ if (!conflict)
181
+ throw new ArtifactError('NOT_FOUND', 'There is no conflicting batch to retry.');
182
+ const latest = await cache.load(id, undefined, true);
183
+ return apply(conflict.operations, { baseVersion: latest.version });
184
+ }, [apply, cache, id]);
185
+ const reset = useCallback(() => {
186
+ conflictRef.current = undefined;
187
+ setState({ pending: false });
188
+ }, []);
189
+ return { apply, pending: state.pending, error: state.error, conflict: state.conflict, retry, reset };
190
+ }
191
+ /**
192
+ * Exports in the browser when a loaded exporter with runtime `any`/`browser` handles the format, else
193
+ * through the client (spec §13.2), and triggers a download.
194
+ */
195
+ export function useArtifactExport(id, kind) {
196
+ const ctx = useArtkit();
197
+ const { client, cache, registry } = ctx;
198
+ const [pending, setPending] = useState(undefined);
199
+ const [error, setError] = useState(undefined);
200
+ const [warnings, setWarnings] = useState([]);
201
+ const [loaded, setLoaded] = useState([]);
202
+ const knownKind = kind ?? cache.latest(id)?.kind;
203
+ const browserExporters = useCallback(async (artifactKind) => {
204
+ const fromRegistry = registry.exporters(artifactKind).filter((exporter) => exporter.runtime !== 'node');
205
+ if (!ctx.hasExporters(artifactKind))
206
+ return fromRegistry;
207
+ const lazy = (await ctx.loadExporters(artifactKind)).filter((exporter) => exporter.kind === artifactKind && exporter.runtime !== 'node');
208
+ return [...lazy, ...fromRegistry];
209
+ }, [ctx, registry]);
210
+ const loadFormats = useCallback(async () => {
211
+ if (!knownKind)
212
+ return;
213
+ try {
214
+ setLoaded(await browserExporters(knownKind));
215
+ }
216
+ catch {
217
+ // Without browser exporters the server formats still work.
218
+ }
219
+ }, [browserExporters, knownKind]);
220
+ const formats = useMemo(() => {
221
+ if (!knownKind)
222
+ return [];
223
+ const set = new Set(ctx.exportFormats[knownKind] ?? []);
224
+ for (const exporter of registry.exporters(knownKind))
225
+ if (exporter.runtime !== 'node')
226
+ set.add(exporter.format);
227
+ for (const exporter of loaded)
228
+ set.add(exporter.format);
229
+ return [...set];
230
+ }, [ctx.exportFormats, knownKind, loaded, registry]);
231
+ const exportArtifact = useCallback(async (format, options = {}) => {
232
+ setPending(format);
233
+ setError(undefined);
234
+ setWarnings([]);
235
+ try {
236
+ const artifact = options.version === undefined
237
+ ? (cache.latest(id) ?? (await cache.load(id)))
238
+ : await cache.load(id, options.version);
239
+ let result;
240
+ if (options.prefer !== 'server') {
241
+ const exporter = (await browserExporters(artifact.kind).catch(() => [])).find((candidate) => candidate.format === format);
242
+ if (exporter) {
243
+ const collected = [];
244
+ let bytes;
245
+ try {
246
+ bytes = await exporter.export(artifact.content, {
247
+ title: artifact.title,
248
+ theme: ctx.themeFor(artifact.themeId),
249
+ locale: artifact.locale,
250
+ assets: ctx.assets ?? {
251
+ resolve: (ref) => Promise.reject(new ArtifactError('NOT_FOUND', `Asset not available in the browser: ${ref}.`)),
252
+ },
253
+ logger: silentLogger,
254
+ warn: (message) => collected.push(message),
255
+ ...(options.signal ? { signal: options.signal } : {}),
256
+ ...(options.options ? { options: options.options } : {}),
257
+ });
258
+ }
259
+ catch (cause) {
260
+ throw isArtifactError(cause)
261
+ ? cause
262
+ : new ArtifactError('EXPORT_FAILED', `Failed to export to ${format}.`, { cause });
263
+ }
264
+ result = {
265
+ bytes,
266
+ mimeType: exporter.mimeType,
267
+ filename: `${slugify(artifact.title)}.${exporter.extension}`,
268
+ warnings: collected,
269
+ };
270
+ }
271
+ else if (options.prefer === 'browser') {
272
+ throw new ArtifactError('EXPORT_FAILED', `No browser exporter for format ${format}.`);
273
+ }
274
+ }
275
+ result ??= await client.export(id, {
276
+ format,
277
+ ...(options.version === undefined ? {} : { version: options.version }),
278
+ ...(options.options ? { options: options.options } : {}),
279
+ ...(options.signal ? { signal: options.signal } : {}),
280
+ });
281
+ setWarnings(result.warnings);
282
+ if (options.download !== false)
283
+ triggerDownload(result);
284
+ return result;
285
+ }
286
+ catch (caught) {
287
+ const failure = toArtifactError(caught);
288
+ setError(failure);
289
+ throw failure;
290
+ }
291
+ finally {
292
+ setPending(undefined);
293
+ }
294
+ }, [browserExporters, cache, client, ctx, id]);
295
+ return { exportArtifact, pending, error, warnings, formats, loadFormats };
296
+ }
297
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EAGb,eAAe,EACf,YAAY,EACZ,OAAO,GAER,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAGhG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,QAAQ,GAAe,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAe,CAAC;AAC7E,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;AAElC,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,eAAe,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,IAAI,aAAa,CAAC,gBAAgB,EAAE,8CAA8C,EAAE;QACzF,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC;AAED,SAAS,MAAM;IACb,MAAM,SAAS,GAAI,UAAyD,CAAC,MAAM,CAAC;IACpF,OAAO,CACL,SAAS,EAAE,UAAU,EAAE,EAAE,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CACxG,CAAC;AACJ,CAAC;AAmBD,qGAAqG;AACrG,MAAM,UAAU,WAAW,CAAC,EAAsB,EAAE,OAAO,GAAuB,EAAE;IAClF,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,QAAoB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACrE,CAAC,KAAK,EAAE,EAAE,CAAC,CACZ,CAAC;IACF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEhF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAErC,MAAM,aAAa,GACjB,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC;QACpF,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,QAAQ,GACZ,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;QACnF,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzB,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;QACzC,OAAO,EAAE,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,KAAK,SAAS;QACtD,OAAO;KACR,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,EAAsB;IACrD,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,QAAoB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACrE,CAAC,KAAK,EAAE,EAAE,CAAC,CACZ,CAAC;IACF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAChE,OAAO,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAcD,sGAAsG;AACtG,MAAM,UAAU,kBAAkB,CAChC,EAAsB,EACtB,OAAO,GAA0B,EAAE;IAEnC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAU,SAAS,CAAC,CAAC;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE1B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,MAAM,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3D,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAO;YACvC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3B,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;gBAAS,CAAC;YACT,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO;gBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3B,iGAAiG;IACjG,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,OAAO,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM;YAAE,OAAO;QAC3B,MAAM,MAAM,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAO;YACvC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;gBAAS,CAAC;YACT,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO;gBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,OAAe,EAAE,OAAgB,EAAE,EAAE;QAC1C,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QACjE,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACpB,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC3G,CAAC;AA2BD,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAC;IACtC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAwE;QACxG,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,CAA4B,SAAS,CAAC,CAAC;IAEjE,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,EAAE,UAAqB,EAAE,OAAO,GAAiB,EAAE,EAAE,EAAE;QAC1D,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC;YACH,WAAW,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBACpC,WAAW;gBACX,UAAU;gBACV,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,MAAM,EAAE;gBAClD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzD,CAAC,CAAC;YACH,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3B,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,QAAmC,CAAC;YACxC,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;gBAC7C,QAAQ,GAAG;oBACT,UAAU;oBACV,WAAW,EAAE,WAAW,IAAI,CAAC;oBAC7B,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAA2B,CAAC,CAAC,CAAC,EAAE;iBACpE,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;YACD,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;YAC/B,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACvE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACpB,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC;QAC/F,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;QAChC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACvG,CAAC;AAuBD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAU,EAAE,IAAa;IACzD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IACxC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IACtE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA4B,SAAS,CAAC,CAAC;IACzE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;IAEjD,MAAM,gBAAgB,GAAG,WAAW,CAClC,KAAK,EAAE,YAAoB,EAAkC,EAAE;QAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;QACxG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC;YAAE,OAAO,YAAY,CAAC;QACzD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CACzD,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM,CAC5E,CAAC;QACF,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC;IACpC,CAAC,EACD,CAAC,GAAG,EAAE,QAAQ,CAAC,CAChB,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,CAAC;YACH,SAAS,CAAC,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;YAClD,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM;gBAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5D,KAAK,MAAM,QAAQ,IAAI,MAAM;YAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErD,MAAM,cAAc,GAAG,WAAW,CAChC,KAAK,EAAE,MAAc,EAAE,OAAO,GAAkB,EAAE,EAAE,EAAE;QACpD,UAAU,CAAC,MAAM,CAAC,CAAC;QACnB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,WAAW,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,QAAQ,GACZ,OAAO,CAAC,OAAO,KAAK,SAAS;gBAC3B,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,MAAsC,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAC3E,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAC3C,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,SAAS,GAAa,EAAE,CAAC;oBAC/B,IAAI,KAAiB,CAAC;oBACtB,IAAI,CAAC;wBACH,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;4BAC9C,KAAK,EAAE,QAAQ,CAAC,KAAK;4BACrB,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;4BACrC,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI;gCACpB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACf,OAAO,CAAC,MAAM,CACZ,IAAI,aAAa,CAAC,WAAW,EAAE,uCAAuC,GAAG,GAAG,CAAC,CAC9E;6BACJ;4BACD,MAAM,EAAE,YAAY;4BACpB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;4BAC1C,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACrD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBACzD,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,eAAe,CAAC,KAAK,CAAC;4BAC1B,CAAC,CAAC,KAAK;4BACP,CAAC,CAAC,IAAI,aAAa,CAAC,eAAe,EAAE,uBAAuB,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBACtF,CAAC;oBACD,MAAM,GAAG;wBACP,KAAK;wBACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE;wBAC5D,QAAQ,EAAE,SAAS;qBACpB,CAAC;gBACJ,CAAC;qBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACxC,MAAM,IAAI,aAAa,CAAC,eAAe,EAAE,kCAAkC,MAAM,GAAG,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;YACD,MAAM,KAAK,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;gBACjC,MAAM;gBACN,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtD,CAAC,CAAC;YACH,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK;gBAAE,eAAe,CAAC,MAAM,CAAC,CAAC;YACxD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACxC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,MAAM,OAAO,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EACD,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAC3C,CAAC;IAEF,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC5E,CAAC"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,197 @@
1
+ /** UI strings in pt-BR and en (spec §18.1). Templates use `{name}` placeholders. */
2
+ export declare const uiMessages: {
3
+ en: {
4
+ loading: string;
5
+ generating: string;
6
+ provisional: string;
7
+ noRenderer: string;
8
+ loadFailed: string;
9
+ retry: string;
10
+ close: string;
11
+ open: string;
12
+ openTitle: string;
13
+ version: string;
14
+ versionShort: string;
15
+ latest: string;
16
+ tabView: string;
17
+ tabCode: string;
18
+ tabHistory: string;
19
+ tabsLabel: string;
20
+ copy: string;
21
+ copied: string;
22
+ export: string;
23
+ exportAs: string;
24
+ exporting: string;
25
+ exported: string;
26
+ exportWarnings: string;
27
+ noExportFormats: string;
28
+ status: string;
29
+ status_draft: string;
30
+ status_pending_approval: string;
31
+ status_published: string;
32
+ status_archived: string;
33
+ action_submit: string;
34
+ action_approve: string;
35
+ action_reject: string;
36
+ action_publish: string;
37
+ action_archive: string;
38
+ statusChanged: string;
39
+ rejectReason: string;
40
+ rejectReasonRequired: string;
41
+ confirmReject: string;
42
+ cancel: string;
43
+ approvalTitle: string;
44
+ approvalComparedTo: string;
45
+ approvalFirstVersion: string;
46
+ notPending: string;
47
+ approved: string;
48
+ rejected: string;
49
+ historyEmpty: string;
50
+ loadMore: string;
51
+ restore: string;
52
+ restoreVersion: string;
53
+ restored: string;
54
+ viewVersion: string;
55
+ restoredFrom: string;
56
+ by: string;
57
+ actor_agent: string;
58
+ actor_user: string;
59
+ actor_system: string;
60
+ changes: string;
61
+ noChanges: string;
62
+ change_added: string;
63
+ change_removed: string;
64
+ change_changed: string;
65
+ change_moved: string;
66
+ diffUnified: string;
67
+ diffSplit: string;
68
+ diffViewLabel: string;
69
+ diffBefore: string;
70
+ diffAfter: string;
71
+ lineAdded: string;
72
+ lineRemoved: string;
73
+ undo: string;
74
+ redo: string;
75
+ undone: string;
76
+ redone: string;
77
+ saving: string;
78
+ saved: string;
79
+ savedVersion: string;
80
+ unsaved: string;
81
+ rolledBack: string;
82
+ dismiss: string;
83
+ readOnly: string;
84
+ lockedBy: string;
85
+ lockedUntil: string;
86
+ agentUpdated: string;
87
+ conflictTitle: string;
88
+ conflictBody: string;
89
+ conflictUndoBody: string;
90
+ keepTheirs: string;
91
+ reapplyMine: string;
92
+ editorLabel: string;
93
+ lintWarnings: string;
94
+ };
95
+ 'pt-BR': {
96
+ loading: string;
97
+ generating: string;
98
+ provisional: string;
99
+ noRenderer: string;
100
+ loadFailed: string;
101
+ retry: string;
102
+ close: string;
103
+ open: string;
104
+ openTitle: string;
105
+ version: string;
106
+ versionShort: string;
107
+ latest: string;
108
+ tabView: string;
109
+ tabCode: string;
110
+ tabHistory: string;
111
+ tabsLabel: string;
112
+ copy: string;
113
+ copied: string;
114
+ export: string;
115
+ exportAs: string;
116
+ exporting: string;
117
+ exported: string;
118
+ exportWarnings: string;
119
+ noExportFormats: string;
120
+ status: string;
121
+ status_draft: string;
122
+ status_pending_approval: string;
123
+ status_published: string;
124
+ status_archived: string;
125
+ action_submit: string;
126
+ action_approve: string;
127
+ action_reject: string;
128
+ action_publish: string;
129
+ action_archive: string;
130
+ statusChanged: string;
131
+ rejectReason: string;
132
+ rejectReasonRequired: string;
133
+ confirmReject: string;
134
+ cancel: string;
135
+ approvalTitle: string;
136
+ approvalComparedTo: string;
137
+ approvalFirstVersion: string;
138
+ notPending: string;
139
+ approved: string;
140
+ rejected: string;
141
+ historyEmpty: string;
142
+ loadMore: string;
143
+ restore: string;
144
+ restoreVersion: string;
145
+ restored: string;
146
+ viewVersion: string;
147
+ restoredFrom: string;
148
+ by: string;
149
+ actor_agent: string;
150
+ actor_user: string;
151
+ actor_system: string;
152
+ changes: string;
153
+ noChanges: string;
154
+ change_added: string;
155
+ change_removed: string;
156
+ change_changed: string;
157
+ change_moved: string;
158
+ diffUnified: string;
159
+ diffSplit: string;
160
+ diffViewLabel: string;
161
+ diffBefore: string;
162
+ diffAfter: string;
163
+ lineAdded: string;
164
+ lineRemoved: string;
165
+ undo: string;
166
+ redo: string;
167
+ undone: string;
168
+ redone: string;
169
+ saving: string;
170
+ saved: string;
171
+ savedVersion: string;
172
+ unsaved: string;
173
+ rolledBack: string;
174
+ dismiss: string;
175
+ readOnly: string;
176
+ lockedBy: string;
177
+ lockedUntil: string;
178
+ agentUpdated: string;
179
+ conflictTitle: string;
180
+ conflictBody: string;
181
+ conflictUndoBody: string;
182
+ keepTheirs: string;
183
+ reapplyMine: string;
184
+ editorLabel: string;
185
+ lintWarnings: string;
186
+ };
187
+ };
188
+ export type UiMessageKey = keyof (typeof uiMessages)['en'];
189
+ export type UiMessages = Record<UiMessageKey, string>;
190
+ /** Extra or overriding catalogs, keyed by BCP-47 tag (`es`, `pt-PT`) or language. */
191
+ export type UiMessageOverrides = Record<string, Partial<UiMessages>>;
192
+ export type Translate = (key: UiMessageKey, params?: Record<string, string | number>) => string;
193
+ /**
194
+ * Resolution order: exact override, language override, built-in catalog (pt* → pt-BR, else en), English.
195
+ */
196
+ export declare function createTranslator(locale: string, overrides?: UiMessageOverrides): Translate;
197
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}