@stapel/cdn-react 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 (164) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/MODULE.md +124 -0
  3. package/README.md +103 -0
  4. package/dist/api/cdnApi.d.ts +122 -0
  5. package/dist/api/cdnApi.d.ts.map +1 -0
  6. package/dist/api/cdnApi.js +27 -0
  7. package/dist/api/cdnApi.js.map +1 -0
  8. package/dist/api/generated/schema.d.ts +1050 -0
  9. package/dist/api/generated/schema.d.ts.map +1 -0
  10. package/dist/api/generated/schema.js +2 -0
  11. package/dist/api/generated/schema.js.map +1 -0
  12. package/dist/api/types.d.ts +76 -0
  13. package/dist/api/types.d.ts.map +1 -0
  14. package/dist/api/types.js +2 -0
  15. package/dist/api/types.js.map +1 -0
  16. package/dist/default/ErrorAlert.d.ts +8 -0
  17. package/dist/default/ErrorAlert.d.ts.map +1 -0
  18. package/dist/default/ErrorAlert.js +26 -0
  19. package/dist/default/ErrorAlert.js.map +1 -0
  20. package/dist/default/ImageUploadField.d.ts +12 -0
  21. package/dist/default/ImageUploadField.d.ts.map +1 -0
  22. package/dist/default/ImageUploadField.js +48 -0
  23. package/dist/default/ImageUploadField.js.map +1 -0
  24. package/dist/default/MediaGalleryField.d.ts +14 -0
  25. package/dist/default/MediaGalleryField.d.ts.map +1 -0
  26. package/dist/default/MediaGalleryField.js +65 -0
  27. package/dist/default/MediaGalleryField.js.map +1 -0
  28. package/dist/default/index.d.ts +15 -0
  29. package/dist/default/index.d.ts.map +1 -0
  30. package/dist/default/index.js +13 -0
  31. package/dist/default/index.js.map +1 -0
  32. package/dist/default/phase.d.ts +17 -0
  33. package/dist/default/phase.d.ts.map +1 -0
  34. package/dist/default/phase.js +25 -0
  35. package/dist/default/phase.js.map +1 -0
  36. package/dist/flows/registry.d.ts +28 -0
  37. package/dist/flows/registry.d.ts.map +1 -0
  38. package/dist/flows/registry.js +26 -0
  39. package/dist/flows/registry.js.map +1 -0
  40. package/dist/headless/CdnProvider.d.ts +18 -0
  41. package/dist/headless/CdnProvider.d.ts.map +1 -0
  42. package/dist/headless/CdnProvider.js +14 -0
  43. package/dist/headless/CdnProvider.js.map +1 -0
  44. package/dist/headless/ImageUpload.d.ts +18 -0
  45. package/dist/headless/ImageUpload.d.ts.map +1 -0
  46. package/dist/headless/ImageUpload.js +16 -0
  47. package/dist/headless/ImageUpload.js.map +1 -0
  48. package/dist/headless/MediaUploader.d.ts +31 -0
  49. package/dist/headless/MediaUploader.d.ts.map +1 -0
  50. package/dist/headless/MediaUploader.js +30 -0
  51. package/dist/headless/MediaUploader.js.map +1 -0
  52. package/dist/headless/useUploadImage.d.ts +33 -0
  53. package/dist/headless/useUploadImage.d.ts.map +1 -0
  54. package/dist/headless/useUploadImage.js +118 -0
  55. package/dist/headless/useUploadImage.js.map +1 -0
  56. package/dist/headless/useUploadPreview.d.ts +22 -0
  57. package/dist/headless/useUploadPreview.d.ts.map +1 -0
  58. package/dist/headless/useUploadPreview.js +37 -0
  59. package/dist/headless/useUploadPreview.js.map +1 -0
  60. package/dist/headless/useUploadQueue.d.ts +83 -0
  61. package/dist/headless/useUploadQueue.d.ts.map +1 -0
  62. package/dist/headless/useUploadQueue.js +0 -0
  63. package/dist/headless/useUploadQueue.js.map +1 -0
  64. package/dist/i18n/errorsMap.d.ts +12 -0
  65. package/dist/i18n/errorsMap.d.ts.map +1 -0
  66. package/dist/i18n/errorsMap.js +22 -0
  67. package/dist/i18n/errorsMap.js.map +1 -0
  68. package/dist/i18n/es.d.ts +17 -0
  69. package/dist/i18n/es.d.ts.map +1 -0
  70. package/dist/i18n/es.js +65 -0
  71. package/dist/i18n/es.js.map +1 -0
  72. package/dist/i18n/generated/errors.es.gen.d.ts +16 -0
  73. package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -0
  74. package/dist/i18n/generated/errors.es.gen.js +58 -0
  75. package/dist/i18n/generated/errors.es.gen.js.map +1 -0
  76. package/dist/i18n/generated/errors.gen.d.ts +353 -0
  77. package/dist/i18n/generated/errors.gen.d.ts.map +1 -0
  78. package/dist/i18n/generated/errors.gen.js +180 -0
  79. package/dist/i18n/generated/errors.gen.js.map +1 -0
  80. package/dist/i18n/generated/errors.ru.gen.d.ts +16 -0
  81. package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -0
  82. package/dist/i18n/generated/errors.ru.gen.js +58 -0
  83. package/dist/i18n/generated/errors.ru.gen.js.map +1 -0
  84. package/dist/i18n/keys.d.ts +61 -0
  85. package/dist/i18n/keys.d.ts.map +1 -0
  86. package/dist/i18n/keys.js +110 -0
  87. package/dist/i18n/keys.js.map +1 -0
  88. package/dist/i18n/ru.d.ts +21 -0
  89. package/dist/i18n/ru.d.ts.map +1 -0
  90. package/dist/i18n/ru.js +70 -0
  91. package/dist/i18n/ru.js.map +1 -0
  92. package/dist/index.d.ts +89 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +83 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/model/context.d.ts +11 -0
  97. package/dist/model/context.d.ts.map +1 -0
  98. package/dist/model/context.js +15 -0
  99. package/dist/model/context.js.map +1 -0
  100. package/dist/model/hash.d.ts +36 -0
  101. package/dist/model/hash.d.ts.map +1 -0
  102. package/dist/model/hash.js +59 -0
  103. package/dist/model/hash.js.map +1 -0
  104. package/dist/model/limits.d.ts +86 -0
  105. package/dist/model/limits.d.ts.map +1 -0
  106. package/dist/model/limits.js +163 -0
  107. package/dist/model/limits.js.map +1 -0
  108. package/dist/model/queries.d.ts +29 -0
  109. package/dist/model/queries.d.ts.map +1 -0
  110. package/dist/model/queries.js +32 -0
  111. package/dist/model/queries.js.map +1 -0
  112. package/dist/model/queryKeys.d.ts +18 -0
  113. package/dist/model/queryKeys.d.ts.map +1 -0
  114. package/dist/model/queryKeys.js +18 -0
  115. package/dist/model/queryKeys.js.map +1 -0
  116. package/dist/model/refs.d.ts +54 -0
  117. package/dist/model/refs.d.ts.map +1 -0
  118. package/dist/model/refs.js +82 -0
  119. package/dist/model/refs.js.map +1 -0
  120. package/dist/model/runtime.d.ts +40 -0
  121. package/dist/model/runtime.d.ts.map +1 -0
  122. package/dist/model/runtime.js +23 -0
  123. package/dist/model/runtime.js.map +1 -0
  124. package/dist/model/upload.d.ts +88 -0
  125. package/dist/model/upload.d.ts.map +1 -0
  126. package/dist/model/upload.js +254 -0
  127. package/dist/model/upload.js.map +1 -0
  128. package/llms.txt +83 -0
  129. package/manifest.json +601 -0
  130. package/package.json +120 -0
  131. package/src/analytics/generated/events.json +7 -0
  132. package/src/api/cdnApi.ts +187 -0
  133. package/src/api/generated/schema.ts +1052 -0
  134. package/src/api/types.ts +86 -0
  135. package/src/default/ErrorAlert.tsx +43 -0
  136. package/src/default/ImageUploadField.tsx +131 -0
  137. package/src/default/MediaGalleryField.tsx +233 -0
  138. package/src/default/index.ts +14 -0
  139. package/src/default/phase.ts +34 -0
  140. package/src/flows/registry.ts +38 -0
  141. package/src/headless/CdnProvider.tsx +19 -0
  142. package/src/headless/ImageUpload.tsx +24 -0
  143. package/src/headless/MediaUploader.tsx +43 -0
  144. package/src/headless/useUploadImage.ts +155 -0
  145. package/src/headless/useUploadPreview.ts +48 -0
  146. package/src/headless/useUploadQueue.ts +411 -0
  147. package/src/i18n/errorsMap.ts +33 -0
  148. package/src/i18n/es.ts +81 -0
  149. package/src/i18n/generated/errors.es.gen.ts +64 -0
  150. package/src/i18n/generated/errors.gen.ts +211 -0
  151. package/src/i18n/generated/errors.json +403 -0
  152. package/src/i18n/generated/errors.ru.gen.ts +64 -0
  153. package/src/i18n/keys.ts +131 -0
  154. package/src/i18n/ru.ts +85 -0
  155. package/src/index.ts +154 -0
  156. package/src/model/context.tsx +25 -0
  157. package/src/model/hash.ts +67 -0
  158. package/src/model/limits.ts +207 -0
  159. package/src/model/queries.ts +64 -0
  160. package/src/model/queryKeys.ts +23 -0
  161. package/src/model/refs.ts +95 -0
  162. package/src/model/runtime.ts +52 -0
  163. package/src/model/upload.ts +365 -0
  164. package/tsconfig.json +26 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageUpload.js","sourceRoot":"","sources":["../../src/headless/ImageUpload.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,KAG3B;IACC,MAAM,GAAG,GAAG,cAAc,CACxB,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAC3D,CAAC;IACF,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { ReactNode } from "react";
2
+ import type { CdnRef } from "../api/types.js";
3
+ import type { CdnUploadTarget } from "../model/upload.js";
4
+ import type { UploadQueueBag } from "./useUploadQueue.js";
5
+ /**
6
+ * Headless gallery uploader — a renderless queue of picks, bounded by `max`,
7
+ * whose settled `<type>/<hash>` references are the value a composer stores.
8
+ *
9
+ * ```tsx
10
+ * <MediaUploader max={10} onRefsChange={(refs) => form.setImagesDraft(refs)}>
11
+ * {({ items, canAdd, settled, add, remove, reorder }) => (
12
+ * <YourGrid … />
13
+ * )}
14
+ * </MediaUploader>
15
+ * ```
16
+ *
17
+ * Every decision a skin needs is in the bag and none of them is a boolean that
18
+ * lost its reason: `canAdd` and `settled` are `ActionAvailability`, so a
19
+ * disabled Add button and a disabled Save button can each say why.
20
+ */
21
+ export declare function MediaUploader(props: {
22
+ /** How many references this gallery may hold (listings' composer: 10). */
23
+ max: number;
24
+ target?: CdnUploadTarget;
25
+ /** References the queue starts with — a reopened draft. */
26
+ initialRefs?: readonly CdnRef[];
27
+ concurrency?: number;
28
+ onRefsChange?: (refs: readonly CdnRef[]) => void;
29
+ children: (bag: UploadQueueBag) => ReactNode;
30
+ }): ReactNode;
31
+ //# sourceMappingURL=MediaUploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaUploader.d.ts","sourceRoot":"","sources":["../../src/headless/MediaUploader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS,CAAC;CAC9C,GAAG,SAAS,CAWZ"}
@@ -0,0 +1,30 @@
1
+ import { useUploadQueue } from "./useUploadQueue.js";
2
+ /**
3
+ * Headless gallery uploader — a renderless queue of picks, bounded by `max`,
4
+ * whose settled `<type>/<hash>` references are the value a composer stores.
5
+ *
6
+ * ```tsx
7
+ * <MediaUploader max={10} onRefsChange={(refs) => form.setImagesDraft(refs)}>
8
+ * {({ items, canAdd, settled, add, remove, reorder }) => (
9
+ * <YourGrid … />
10
+ * )}
11
+ * </MediaUploader>
12
+ * ```
13
+ *
14
+ * Every decision a skin needs is in the bag and none of them is a boolean that
15
+ * lost its reason: `canAdd` and `settled` are `ActionAvailability`, so a
16
+ * disabled Add button and a disabled Save button can each say why.
17
+ */
18
+ export function MediaUploader(props) {
19
+ const bag = useUploadQueue({
20
+ max: props.max,
21
+ ...(props.target !== undefined ? { target: props.target } : {}),
22
+ ...(props.initialRefs !== undefined ? { initialRefs: props.initialRefs } : {}),
23
+ ...(props.concurrency !== undefined ? { concurrency: props.concurrency } : {}),
24
+ ...(props.onRefsChange !== undefined
25
+ ? { onRefsChange: props.onRefsChange }
26
+ : {}),
27
+ });
28
+ return props.children(bag);
29
+ }
30
+ //# sourceMappingURL=MediaUploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaUploader.js","sourceRoot":"","sources":["../../src/headless/MediaUploader.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,KAS7B;IACC,MAAM,GAAG,GAAG,cAAc,CAAC;QACzB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;YAClC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { StapelApiError } from "@stapel/core";
2
+ import type { CdnImage, CdnRef } from "../api/types.js";
3
+ import type { CdnUploadTarget, UploadPhase } from "../model/upload.js";
4
+ export interface UploadImageBag {
5
+ /**
6
+ * Upload a pick. Resolves the reference, or `null` when it failed or was
7
+ * canceled — `error` and `phase` say which.
8
+ */
9
+ upload(file: File): Promise<CdnRef | null>;
10
+ /** Abort the upload in flight. */
11
+ cancel(): void;
12
+ /** Forget the pick, its preview and its error. */
13
+ reset(): void;
14
+ /**
15
+ * A local object URL for the file being uploaded — render it the instant the
16
+ * pick happens, long before any server has seen it. Revoked when the pick
17
+ * changes and on unmount, by construction: this is core's
18
+ * `useObjectUrlPreview`, whose whole job is that lifetime.
19
+ */
20
+ readonly previewUrl: string | null;
21
+ readonly phase: UploadPhase;
22
+ readonly isPending: boolean;
23
+ readonly ref: CdnRef | null;
24
+ readonly image: CdnImage | null;
25
+ /** The pre-check hit: nothing was uploaded. */
26
+ readonly deduped: boolean;
27
+ readonly variantsReady: boolean;
28
+ readonly error: StapelApiError | null;
29
+ }
30
+ export declare function useUploadImage(options?: {
31
+ readonly target?: CdnUploadTarget;
32
+ }): UploadImageBag;
33
+ //# sourceMappingURL=useUploadImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadImage.d.ts","sourceRoot":"","sources":["../../src/headless/useUploadImage.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,kCAAkC;IAClC,MAAM,IAAI,IAAI,CAAC;IACf,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,cAAc,CA4GjB"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * One image, one slot — the avatar/cover shape, where a new pick REPLACES the
3
+ * old one rather than joining a queue.
4
+ *
5
+ * This is the hook `profiles-react`'s `useSetAvatar` is meant to be built on:
6
+ * it owns the upload half (validate → hash → pre-check → POST → variants) and
7
+ * hands back the `<type>/<hash>` reference, leaving the "…and store it on the
8
+ * profile" half where it belongs, in the pair that owns the profile.
9
+ */
10
+ import { useCallback, useEffect, useRef, useState } from "react";
11
+ import { toStapelApiError, useObjectUrlPreview } from "@stapel/core";
12
+ import { useCdnRuntime } from "../model/context.js";
13
+ import { isUploadCanceled, runUpload } from "../model/upload.js";
14
+ export function useUploadImage(options) {
15
+ const runtime = useCdnRuntime();
16
+ const target = options?.target ?? { kind: "image" };
17
+ const [file, setFile] = useState(null);
18
+ const [phase, setPhase] = useState("idle");
19
+ const [ref, setRef] = useState(null);
20
+ const [image, setImage] = useState(null);
21
+ const [deduped, setDeduped] = useState(false);
22
+ const [variantsReady, setVariantsReady] = useState(false);
23
+ const [error, setError] = useState(null);
24
+ const previewUrl = useObjectUrlPreview(file);
25
+ const controller = useRef(null);
26
+ const alive = useRef(true);
27
+ useEffect(() => {
28
+ alive.current = true;
29
+ return () => {
30
+ alive.current = false;
31
+ controller.current?.abort();
32
+ };
33
+ }, []);
34
+ const runtimeRef = useRef(runtime);
35
+ runtimeRef.current = runtime;
36
+ const targetRef = useRef(target);
37
+ targetRef.current = target;
38
+ const upload = useCallback(async (picked) => {
39
+ controller.current?.abort();
40
+ const own = new AbortController();
41
+ controller.current = own;
42
+ setFile(picked);
43
+ setRef(null);
44
+ setImage(null);
45
+ setDeduped(false);
46
+ setVariantsReady(false);
47
+ setError(null);
48
+ setPhase("hashing");
49
+ const current = runtimeRef.current;
50
+ try {
51
+ const outcome = await runUpload(current.api, picked, {
52
+ target: targetRef.current,
53
+ limits: current.limits.image,
54
+ signal: own.signal,
55
+ onPhase: (next) => {
56
+ if (!alive.current || own.signal.aborted)
57
+ return;
58
+ if (next === "done" || next === "failed" || next === "canceled")
59
+ return;
60
+ setPhase(next);
61
+ },
62
+ ...(current.variants !== undefined ? { variants: current.variants } : {}),
63
+ });
64
+ if (!alive.current)
65
+ return outcome.ref;
66
+ setRef(outcome.ref);
67
+ setImage(outcome.image);
68
+ setDeduped(outcome.deduped);
69
+ setVariantsReady(outcome.variantsReady);
70
+ setPhase("done");
71
+ return outcome.ref;
72
+ }
73
+ catch (failure) {
74
+ if (!alive.current)
75
+ return null;
76
+ if (isUploadCanceled(failure)) {
77
+ setPhase("canceled");
78
+ return null;
79
+ }
80
+ // `toStapelApiError`, never a cast: a CDN call can fail without a Stapel
81
+ // envelope at all (network fault, an origin that answers HTML), and the
82
+ // cast that silences the compiler leaves `.code` undefined at runtime.
83
+ setError(toStapelApiError(failure));
84
+ setPhase("failed");
85
+ return null;
86
+ }
87
+ }, []);
88
+ const cancel = useCallback(() => {
89
+ controller.current?.abort();
90
+ }, []);
91
+ const reset = useCallback(() => {
92
+ controller.current?.abort();
93
+ setFile(null);
94
+ setPhase("idle");
95
+ setRef(null);
96
+ setImage(null);
97
+ setDeduped(false);
98
+ setVariantsReady(false);
99
+ setError(null);
100
+ }, []);
101
+ return {
102
+ upload,
103
+ cancel,
104
+ reset,
105
+ previewUrl,
106
+ phase,
107
+ isPending: phase === "hashing" ||
108
+ phase === "checking" ||
109
+ phase === "uploading" ||
110
+ phase === "processing",
111
+ ref,
112
+ image,
113
+ deduped,
114
+ variantsReady,
115
+ error,
116
+ };
117
+ }
118
+ //# sourceMappingURL=useUploadImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadImage.js","sourceRoot":"","sources":["../../src/headless/useUploadImage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { CdnImage } from "../api/types.js";
2
+ import type { UploadItem } from "./useUploadQueue.js";
3
+ export interface UploadPreview {
4
+ /** The object URL of the local pick, or `null`. Revoked for you. */
5
+ readonly localUrl: string | null;
6
+ /** A ready CDN thumbnail, or `null` while the ladder is still being made. */
7
+ readonly thumbnailUrl: string | null;
8
+ /** Whatever there is to render right now, preferring the local pick. */
9
+ readonly url: string | null;
10
+ }
11
+ /**
12
+ * The smallest generated variant, read from `variants_meta` rather than from
13
+ * a `variant_<n>_url` field.
14
+ *
15
+ * The flat fields are always POPULATED — they are computed paths, not
16
+ * evidence — so reading one before the background task has run yields a URL
17
+ * that 404s, which renders as a broken image and reads to the person as "my
18
+ * upload was rejected". `variants_meta` lists only what exists.
19
+ */
20
+ export declare function smallestVariantUrl(image: CdnImage | null): string | null;
21
+ export declare function useUploadPreview(item: UploadItem): UploadPreview;
22
+ //# sourceMappingURL=useUploadPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadPreview.d.ts","sourceRoot":"","sources":["../../src/headless/useUploadPreview.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,wEAAwE;IACxE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CASxE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CAIhE"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * What to show for one queue item, at every stage of its life.
3
+ *
4
+ * A tile in an upload grid has three possible sources of pixels and they take
5
+ * turns: the local object URL of the pick (instantly, before any request), the
6
+ * CDN's smallest ready variant (once the ladder exists), and nothing at all
7
+ * (an item restored from a stored reference whose row has not been resolved
8
+ * yet). Every upload control in this fleet has re-derived that sequence by
9
+ * hand; this is it, once.
10
+ */
11
+ import { useObjectUrlPreview } from "@stapel/core";
12
+ /**
13
+ * The smallest generated variant, read from `variants_meta` rather than from
14
+ * a `variant_<n>_url` field.
15
+ *
16
+ * The flat fields are always POPULATED — they are computed paths, not
17
+ * evidence — so reading one before the background task has run yields a URL
18
+ * that 404s, which renders as a broken image and reads to the person as "my
19
+ * upload was rejected". `variants_meta` lists only what exists.
20
+ */
21
+ export function smallestVariantUrl(image) {
22
+ if (image === null)
23
+ return null;
24
+ let best = null;
25
+ for (const variant of image.variants_meta) {
26
+ if (best === null || variant.tier < best.tier) {
27
+ best = { tier: variant.tier, url: variant.url };
28
+ }
29
+ }
30
+ return best?.url ?? null;
31
+ }
32
+ export function useUploadPreview(item) {
33
+ const localUrl = useObjectUrlPreview(item.file);
34
+ const thumbnailUrl = smallestVariantUrl(item.image);
35
+ return { localUrl, thumbnailUrl, url: localUrl ?? thumbnailUrl };
36
+ }
37
+ //# sourceMappingURL=useUploadPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadPreview.js","sourceRoot":"","sources":["../../src/headless/useUploadPreview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAanD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAsB;IACvD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,IAAI,GAAyC,IAAI,CAAC;IACtD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAC1C,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAgB;IAC/C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,IAAI,YAAY,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { StapelApiError } from "@stapel/core";
2
+ import type { ActionAvailability } from "@stapel/core";
3
+ import type { CdnImage, CdnRef } from "../api/types.js";
4
+ import type { CdnIntakeLimits } from "../model/limits.js";
5
+ import type { CdnUploadTarget, DedupSkipReason, UploadPhase } from "../model/upload.js";
6
+ /** One pick in the queue, at whatever step of the flow it has reached. */
7
+ export interface UploadItem {
8
+ readonly id: string;
9
+ /**
10
+ * The picked file, or `null` for an item restored from a reference the
11
+ * caller already had — a reopened draft has references but no bytes.
12
+ */
13
+ readonly file: File | null;
14
+ readonly phase: UploadPhase;
15
+ /** `<type>/<hash>`, as soon as the CDN holds the bytes. */
16
+ readonly ref: CdnRef | null;
17
+ /** The CDN row, when this item's flow produced one. */
18
+ readonly image: CdnImage | null;
19
+ /** The pre-check hit: these bytes were already stored and nothing was sent. */
20
+ readonly deduped: boolean;
21
+ /** Why the pre-check did not run, when it did not. */
22
+ readonly dedupSkipped: DedupSkipReason | undefined;
23
+ /** Whether the variant ladder existed by the time the flow stopped waiting. */
24
+ readonly variantsReady: boolean;
25
+ readonly error: StapelApiError | null;
26
+ }
27
+ export interface UseUploadQueueOptions {
28
+ /**
29
+ * How many references this gallery may hold. The storefront's listing
30
+ * composer passes 10; a single-image field passes 1.
31
+ */
32
+ readonly max: number;
33
+ /** Where the bytes go. Default: `{ kind: "image" }`. */
34
+ readonly target?: CdnUploadTarget;
35
+ /** References this queue starts with — a reopened draft. */
36
+ readonly initialRefs?: readonly CdnRef[];
37
+ /** How many uploads run at once. Default 3. */
38
+ readonly concurrency?: number;
39
+ /** Called whenever `refs` changes, including on reorder and removal. */
40
+ readonly onRefsChange?: (refs: readonly CdnRef[]) => void;
41
+ }
42
+ export interface UploadQueueBag {
43
+ readonly items: readonly UploadItem[];
44
+ /**
45
+ * The settled references in display order — the value a composer stores.
46
+ * Items still uploading or failed contribute nothing, so this list is never
47
+ * a promise about bytes that are not there.
48
+ */
49
+ readonly refs: readonly CdnRef[];
50
+ readonly capacity: {
51
+ readonly max: number;
52
+ readonly used: number;
53
+ readonly remaining: number;
54
+ };
55
+ /** The deployment's ceilings for this intake, plus the `accept` string. */
56
+ readonly accept: {
57
+ readonly attribute: string;
58
+ readonly limits: CdnIntakeLimits;
59
+ };
60
+ /** Available while there is room; blocked WITH the reason when full. */
61
+ readonly canAdd: ActionAvailability;
62
+ /**
63
+ * Available when every item has a reference; blocked while any is in flight
64
+ * and blocked when any failed. This is the composer's submit gate.
65
+ */
66
+ readonly settled: ActionAvailability;
67
+ /**
68
+ * Admit files. Anything over `max` or refused by the client-side mirror is
69
+ * still ADMITTED, as a failed item carrying its refusal — a file that
70
+ * vanishes on drop teaches the person nothing. `remove` is how it leaves.
71
+ */
72
+ add(files: Iterable<File>): void;
73
+ /** Re-run a failed or canceled item's flow from the top. */
74
+ retry(id: string): void;
75
+ /** Abort an in-flight item. It stays in the queue, canceled, retryable. */
76
+ cancel(id: string): void;
77
+ /** Drop an item entirely. */
78
+ remove(id: string): void;
79
+ /** Move an item; this is what makes the gallery order editable. */
80
+ reorder(from: number, to: number): void;
81
+ }
82
+ export declare function useUploadQueue(options: UseUploadQueueOptions): UploadQueueBag;
83
+ //# sourceMappingURL=useUploadQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadQueue.d.ts","sourceRoot":"","sources":["../../src/headless/useUploadQueue.ts"],"names":[],"mappings":"AAuBA,OAAO,EAIL,cAAc,EAEf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,YAAY,EAAE,eAAe,GAAG,SAAS,CAAC;IACnD,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;KAClC,CAAC;IACF,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mEAAmE;IACnE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAiCD,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAiQ7E"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadQueue.js","sourceRoot":"","sources":["../../src/headless/useUploadQueue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Remediation } from "./generated/errors.gen.js";
2
+ export { CDN_ERRORS, CDN_ERROR_CODES, cdnErrorBundleEn, } from "./generated/errors.gen.js";
3
+ export type { CdnErrorCode, CdnErrorSpec, Remediation, } from "./generated/errors.gen.js";
4
+ /**
5
+ * Resolve a backend error code to its remediation hint, or `undefined` for a
6
+ * code this module doesn't know (a cross-cutting `stapel.http.*` fallback, or
7
+ * one of this pair's own client-side rules such as
8
+ * `cdn.upload.blocked.full` — which is not a backend code and deliberately
9
+ * has no entry here).
10
+ */
11
+ export declare function explainCdnError(code: string): Remediation | undefined;
12
+ //# sourceMappingURL=errorsMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorsMap.d.ts","sourceRoot":"","sources":["../../src/i18n/errorsMap.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EACL,UAAU,EACV,eAAe,EACf,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,2BAA2B,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGrE"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The pair's error map (frontend-standard §4 checklist #7): the generated
3
+ * `code → { status, params, remediation, en }` catalog plus a tiny `explain()`
4
+ * lookup. Backs the manifest `errors` block and gives hosts a mechanical UX
5
+ * branch beside `t(code, params)`. The map itself is generated from the
6
+ * backend registry (`pnpm gen:errors`); this file only adds the lookup helper
7
+ * and re-exports the public surface.
8
+ */
9
+ import { CDN_ERRORS } from "./generated/errors.gen.js";
10
+ export { CDN_ERRORS, CDN_ERROR_CODES, cdnErrorBundleEn, } from "./generated/errors.gen.js";
11
+ /**
12
+ * Resolve a backend error code to its remediation hint, or `undefined` for a
13
+ * code this module doesn't know (a cross-cutting `stapel.http.*` fallback, or
14
+ * one of this pair's own client-side rules such as
15
+ * `cdn.upload.blocked.full` — which is not a backend code and deliberately
16
+ * has no entry here).
17
+ */
18
+ export function explainCdnError(code) {
19
+ return CDN_ERRORS[code]
20
+ ?.remediation;
21
+ }
22
+ //# sourceMappingURL=errorsMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorsMap.js","sourceRoot":"","sources":["../../src/i18n/errorsMap.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EACL,UAAU,EACV,eAAe,EACf,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAOnC;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAQ,UAA2D,CAAC,IAAI,CAAC;QACvE,EAAE,WAAW,CAAC;AAClB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { I18nDictionary, I18nEngine } from "@stapel/core";
2
+ export { cdnErrorBundleEs } from "./generated/errors.es.gen.js";
3
+ /**
4
+ * Spanish bundle for cdn-react — the `@stapel/cdn-react/i18n/es` subpath.
5
+ * Same two sources as `./ru`: the generated bundle carries the cross-cutting
6
+ * keys stapel-core localizes, and the 11 keys stapel-cdn owns are authored
7
+ * here until upstream ships `translations/errors.es.json`.
8
+ *
9
+ * The UI copy is translated too, not only the errors. An upload control is
10
+ * where a seller spends the most attention while listing something, and a
11
+ * picker that speaks Spanish while its progress line speaks English is the
12
+ * half-translated surface a person notices first.
13
+ */
14
+ export declare const cdnI18nBundleEs: I18nDictionary;
15
+ /** Register the Spanish bundle into a core i18n engine. */
16
+ export declare function registerCdnI18nEs(engine: I18nEngine, locale?: string): void;
17
+ //# sourceMappingURL=es.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,cA2D7B,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,SAAO,GAAG,IAAI,CAEzE"}
@@ -0,0 +1,65 @@
1
+ import { cdnErrorBundleEs } from "./generated/errors.es.gen.js";
2
+ export { cdnErrorBundleEs } from "./generated/errors.es.gen.js";
3
+ /**
4
+ * Spanish bundle for cdn-react — the `@stapel/cdn-react/i18n/es` subpath.
5
+ * Same two sources as `./ru`: the generated bundle carries the cross-cutting
6
+ * keys stapel-core localizes, and the 11 keys stapel-cdn owns are authored
7
+ * here until upstream ships `translations/errors.es.json`.
8
+ *
9
+ * The UI copy is translated too, not only the errors. An upload control is
10
+ * where a seller spends the most attention while listing something, and a
11
+ * picker that speaks Spanish while its progress line speaks English is the
12
+ * half-translated surface a person notices first.
13
+ */
14
+ export const cdnI18nBundleEs = {
15
+ ...cdnErrorBundleEs,
16
+ // Backend error codes stapel-cdn owns — authored here.
17
+ "error.400.file_hash_required": "Falta el parámetro file_hash",
18
+ "error.400.file_type_not_allowed": "No se permite este tipo de archivo",
19
+ "error.400.invalid_format": "Formato de archivo no admitido",
20
+ "error.400.invalid_hash": "Hash de archivo no válido",
21
+ "error.400.invalid_image_type": "Tipo de imagen desconocido",
22
+ "error.400.missing_fields": "Faltan campos obligatorios",
23
+ "error.400.no_file": "No se ha elegido ningún archivo",
24
+ "error.403.storage_quota_exceeded": "Se ha superado la cuota de almacenamiento",
25
+ "error.404.no_images": "No se han encontrado imágenes procesadas",
26
+ "error.413.file_too_large": "El archivo es demasiado grande",
27
+ "error.503.image_decoder_unavailable": "Este servidor no puede procesar imágenes {extension} ahora mismo",
28
+ // UI copy.
29
+ "cdn.error.unknown": "Algo ha fallado en esta subida",
30
+ "cdn.pick.image": "Elegir una imagen",
31
+ "cdn.pick.images": "Añadir fotos",
32
+ "cdn.pick.replace": "Reemplazar",
33
+ "cdn.pick.hint": "{formats} · hasta {maxMb} MB",
34
+ "cdn.pick.drop_hint": "Arrastra archivos aquí o haz clic para elegirlos",
35
+ "cdn.phase.hashing": "Leyendo el archivo…",
36
+ "cdn.phase.checking": "Comprobando si ya lo tenemos…",
37
+ "cdn.phase.uploading": "Subiendo…",
38
+ "cdn.phase.processing": "Preparando las vistas previas…",
39
+ "cdn.phase.done": "Listo",
40
+ "cdn.phase.canceled": "Cancelado",
41
+ "cdn.phase.failed": "Ha fallado",
42
+ "cdn.phase.queued": "Esperando su turno",
43
+ "cdn.outcome.deduped": "Ya estaba subido: no se ha enviado nada de nuevo",
44
+ "cdn.outcome.variants_pending": "Las vistas previas se están generando; la foto ya está guardada",
45
+ "cdn.outcome.dedup_skipped.no_crypto": "Esta página no puede calcular el hash, así que se ha omitido la comprobación de duplicados",
46
+ "cdn.outcome.dedup_skipped.unauthorized": "La comprobación de duplicados necesita una sesión iniciada; la subida ha continuado",
47
+ "cdn.outcome.dedup_skipped.check_failed": "La comprobación de duplicados no ha respondido; la subida ha continuado",
48
+ "cdn.item.cancel": "Cancelar",
49
+ "cdn.item.retry": "Reintentar",
50
+ "cdn.item.remove": "Quitar",
51
+ "cdn.item.move_earlier": "Mover antes",
52
+ "cdn.item.move_later": "Mover después",
53
+ "cdn.item.cover": "Foto principal",
54
+ "cdn.item.alt": "Foto subida",
55
+ "cdn.gallery.count": "{used} de {max} fotos",
56
+ "cdn.gallery.empty": "Todavía no hay fotos",
57
+ "cdn.upload.blocked.full": "Esta galería admite como máximo {max} fotos",
58
+ "cdn.upload.blocked.pending": "Espera a que terminen las subidas",
59
+ "cdn.upload.blocked.failed": "Quita o reintenta las fotos que han fallado",
60
+ };
61
+ /** Register the Spanish bundle into a core i18n engine. */
62
+ export function registerCdnI18nEs(engine, locale = "es") {
63
+ engine.registerBundle(locale, cdnI18nBundleEs);
64
+ }
65
+ //# sourceMappingURL=es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.js","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,eAAe,GAAmB;IAC7C,GAAG,gBAAgB;IAEnB,uDAAuD;IACvD,8BAA8B,EAAE,8BAA8B;IAC9D,iCAAiC,EAAE,oCAAoC;IACvE,0BAA0B,EAAE,gCAAgC;IAC5D,wBAAwB,EAAE,2BAA2B;IACrD,8BAA8B,EAAE,4BAA4B;IAC5D,0BAA0B,EAAE,4BAA4B;IACxD,mBAAmB,EAAE,iCAAiC;IACtD,kCAAkC,EAAE,2CAA2C;IAC/E,qBAAqB,EAAE,0CAA0C;IACjE,0BAA0B,EAAE,gCAAgC;IAC5D,qCAAqC,EACnC,kEAAkE;IAEpE,WAAW;IACX,mBAAmB,EAAE,gCAAgC;IAErD,gBAAgB,EAAE,mBAAmB;IACrC,iBAAiB,EAAE,cAAc;IACjC,kBAAkB,EAAE,YAAY;IAChC,eAAe,EAAE,8BAA8B;IAC/C,oBAAoB,EAAE,kDAAkD;IAExE,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,+BAA+B;IACrD,qBAAqB,EAAE,WAAW;IAClC,sBAAsB,EAAE,gCAAgC;IACxD,gBAAgB,EAAE,OAAO;IACzB,oBAAoB,EAAE,WAAW;IACjC,kBAAkB,EAAE,YAAY;IAChC,kBAAkB,EAAE,oBAAoB;IAExC,qBAAqB,EAAE,kDAAkD;IACzE,8BAA8B,EAC5B,iEAAiE;IACnE,qCAAqC,EACnC,4FAA4F;IAC9F,wCAAwC,EACtC,qFAAqF;IACvF,wCAAwC,EACtC,yEAAyE;IAE3E,iBAAiB,EAAE,UAAU;IAC7B,gBAAgB,EAAE,YAAY;IAC9B,iBAAiB,EAAE,QAAQ;IAC3B,uBAAuB,EAAE,aAAa;IACtC,qBAAqB,EAAE,eAAe;IACtC,gBAAgB,EAAE,gBAAgB;IAClC,cAAc,EAAE,aAAa;IAE7B,mBAAmB,EAAE,uBAAuB;IAC5C,mBAAmB,EAAE,sBAAsB;IAE3C,yBAAyB,EAAE,6CAA6C;IACxE,4BAA4B,EAAE,mCAAmC;IACjE,2BAA2B,EAAE,6CAA6C;CAC3E,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAAC,MAAkB,EAAE,MAAM,GAAG,IAAI;IACjE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { CdnErrorCode } from "./errors.gen.js";
2
+ /**
3
+ * `es` texts for the backend error codes this catalog carries.
4
+ *
5
+ * PARTIAL, and deliberately typed to say so: 11 key(s) owned by
6
+ * stapel_cdn are absent, because that owner ships no locale catalog
7
+ * (ERRORS_LOCALE_EXEMPT_OWNERS). English for them still comes from the registry
8
+ * artifact via the en bundle; the pair layers its own authored `es`
9
+ * strings over this one until upstream ships translations. `Partial` is what
10
+ * makes the gap visible to TypeScript instead of a silent English fallback.
11
+ *
12
+ * Import from the pair's `./i18n/es` subpath, NOT the main entry, so
13
+ * the locale stays out of hosts that don't ship it.
14
+ */
15
+ export declare const cdnErrorBundleEs: Partial<Record<CdnErrorCode, string>>;
16
+ //# sourceMappingURL=errors.es.gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.es.gen.d.ts","sourceRoot":"","sources":["../../../src/i18n/generated/errors.es.gen.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CA2ClE,CAAC"}