@cellarnode/ui 0.188.0 → 0.190.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 (61) hide show
  1. package/dist/brand/brand-assets-api.d.ts +7 -0
  2. package/dist/brand/brand-assets-api.d.ts.map +1 -1
  3. package/dist/brand/brand-assets-api.js +12 -0
  4. package/dist/brand/brand-assets-api.js.map +1 -1
  5. package/dist/brand/brand-assets-section-copy.d.ts +63 -0
  6. package/dist/brand/brand-assets-section-copy.d.ts.map +1 -0
  7. package/dist/brand/brand-assets-section-copy.js +56 -0
  8. package/dist/brand/brand-assets-section-copy.js.map +1 -0
  9. package/dist/brand/brand-assets-section.d.ts +68 -0
  10. package/dist/brand/brand-assets-section.d.ts.map +1 -0
  11. package/dist/brand/brand-assets-section.js +172 -0
  12. package/dist/brand/brand-assets-section.js.map +1 -0
  13. package/dist/brand/brand-font-family.d.ts +37 -0
  14. package/dist/brand/brand-font-family.d.ts.map +1 -0
  15. package/dist/brand/brand-font-family.js +83 -0
  16. package/dist/brand/brand-font-family.js.map +1 -0
  17. package/dist/brand/brand-font-upload.d.ts +17 -0
  18. package/dist/brand/brand-font-upload.d.ts.map +1 -0
  19. package/dist/brand/brand-font-upload.js +42 -0
  20. package/dist/brand/brand-font-upload.js.map +1 -0
  21. package/dist/brand/brand-generation-client.d.ts +7 -1
  22. package/dist/brand/brand-generation-client.d.ts.map +1 -1
  23. package/dist/brand/brand-generation-client.js +19 -8
  24. package/dist/brand/brand-generation-client.js.map +1 -1
  25. package/dist/brand/brand-generation-start-error.d.ts +24 -0
  26. package/dist/brand/brand-generation-start-error.d.ts.map +1 -0
  27. package/dist/brand/brand-generation-start-error.js +37 -0
  28. package/dist/brand/brand-generation-start-error.js.map +1 -0
  29. package/dist/brand/brand-generation-start.d.ts +27 -1
  30. package/dist/brand/brand-generation-start.d.ts.map +1 -1
  31. package/dist/brand/brand-generation-start.js +53 -6
  32. package/dist/brand/brand-generation-start.js.map +1 -1
  33. package/dist/brand/index.d.ts +7 -0
  34. package/dist/brand/index.d.ts.map +1 -1
  35. package/dist/brand/index.js +8 -0
  36. package/dist/brand/index.js.map +1 -1
  37. package/dist/brand/scan-page-banner.d.ts +21 -0
  38. package/dist/brand/scan-page-banner.d.ts.map +1 -0
  39. package/dist/brand/scan-page-banner.js +48 -0
  40. package/dist/brand/scan-page-banner.js.map +1 -0
  41. package/dist/brand/use-brand-generation.d.ts +5 -0
  42. package/dist/brand/use-brand-generation.d.ts.map +1 -1
  43. package/dist/brand/use-brand-generation.js +16 -2
  44. package/dist/brand/use-brand-generation.js.map +1 -1
  45. package/dist/brand/use-brand-workspace-concurrency.d.ts +0 -1
  46. package/dist/brand/use-brand-workspace-concurrency.d.ts.map +1 -1
  47. package/dist/brand/use-brand-workspace-concurrency.js +4 -8
  48. package/dist/brand/use-brand-workspace-concurrency.js.map +1 -1
  49. package/dist/moderation/focus-upload-control.d.ts +15 -0
  50. package/dist/moderation/focus-upload-control.d.ts.map +1 -0
  51. package/dist/moderation/focus-upload-control.js +21 -0
  52. package/dist/moderation/focus-upload-control.js.map +1 -0
  53. package/dist/moderation/index.d.ts +1 -0
  54. package/dist/moderation/index.d.ts.map +1 -1
  55. package/dist/moderation/index.js +1 -0
  56. package/dist/moderation/index.js.map +1 -1
  57. package/dist/moderation/moderation-scope.d.ts +31 -0
  58. package/dist/moderation/moderation-scope.d.ts.map +1 -0
  59. package/dist/moderation/moderation-scope.js +109 -0
  60. package/dist/moderation/moderation-scope.js.map +1 -0
  61. package/package.json +5 -1
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useRef, useState } from "react";
3
+ import { DEFAULT_BRAND_FONT_UPLOAD_COPY, } from "./brand-assets-section-copy.js";
4
+ const ACCEPTED_MIME_TYPES = [
5
+ ".woff2",
6
+ ".woff",
7
+ ".ttf",
8
+ ".otf",
9
+ "font/woff2",
10
+ "font/woff",
11
+ "font/ttf",
12
+ "font/otf",
13
+ ];
14
+ const MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024;
15
+ /** Brand font slot: pick, replace, remove, and warn when no usable family name resolves. */
16
+ export function BrandFontUpload({ asset, familyName, onUpload, onClear, uploading = false, clearing = false, error = null, copy: copyOverrides, }) {
17
+ const copy = { ...DEFAULT_BRAND_FONT_UPLOAD_COPY, ...copyOverrides };
18
+ const inputRef = useRef(null);
19
+ const errorId = useId();
20
+ const [validationError, setValidationError] = useState(null);
21
+ const shownError = validationError ?? error;
22
+ const busy = uploading || clearing;
23
+ const needsFamilyName = asset && !familyName;
24
+ const handleFile = (file) => {
25
+ if (file.size > MAX_FILE_SIZE_BYTES) {
26
+ setValidationError(copy.tooLarge(Math.round(MAX_FILE_SIZE_BYTES / (1024 * 1024))));
27
+ return;
28
+ }
29
+ setValidationError(null);
30
+ onUpload(file);
31
+ };
32
+ return (_jsxs("section", { className: "flex flex-col gap-3", "data-testid": "brand-font-upload", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-sm font-semibold text-foreground", children: copy.title }), _jsx("p", { className: "max-w-prose text-sm text-muted-foreground", children: copy.subtitle })] }), _jsxs("div", { className: "rounded-xl border border-border/60 bg-card p-4", children: [asset ? (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: asset.fileName }), needsFamilyName && (_jsx("span", { role: "status", "aria-live": "polite", className: "text-xs text-[var(--tone-warning-fg)]", children: copy.needsFamilyName }))] }), _jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-2", children: [_jsx("button", { type: "button", onClick: () => inputRef.current?.click(), disabled: busy, className: "-ml-2 relative before:absolute before:inset-x-0 before:-inset-y-2.5 shrink-0 rounded-lg px-2 py-1 text-xs font-medium focus-visible:outline-hidden focus-visible:ring-3 focus-visible:ring-ring/70 text-primary hover:underline disabled:cursor-not-allowed disabled:opacity-50", children: uploading ? copy.uploading : copy.replace }), _jsx("button", { type: "button", onClick: () => {
33
+ setValidationError(null); // else a rejected oversize pick outlives the asset
34
+ onClear();
35
+ }, disabled: busy, className: "relative before:absolute before:inset-x-0 before:-inset-y-2.5 shrink-0 rounded-lg px-2 py-1 text-xs font-medium focus-visible:outline-hidden focus-visible:ring-3 focus-visible:ring-ring/70 text-[var(--tone-danger-fg)] hover:underline disabled:cursor-not-allowed disabled:opacity-50", children: clearing ? copy.removing : copy.remove })] })] })) : (_jsxs("button", { type: "button", onClick: () => inputRef.current?.click(), "aria-describedby": shownError ? errorId : undefined, "aria-invalid": shownError ? true : undefined, disabled: busy, className: "flex w-full cursor-pointer items-center justify-center rounded-lg border border-dashed border-border/60 px-3 py-6 text-xs text-muted-foreground hover:border-primary hover:text-primary disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx("span", { className: "sr-only", children: copy.inputLabel }), _jsx("span", { "aria-hidden": "true", children: uploading ? copy.uploading : copy.upload })] })), shownError ? (_jsx("p", { role: "alert", id: errorId, className: "mt-2 text-xs font-medium text-[var(--tone-danger-fg)]", children: shownError })) : null, _jsx("input", { ref: inputRef, type: "file", accept: ACCEPTED_MIME_TYPES.join(","), tabIndex: -1, className: "sr-only", "aria-label": copy.inputLabel, disabled: busy, onChange: (event) => {
36
+ const file = event.target.files?.[0];
37
+ if (file)
38
+ handleFile(file);
39
+ event.target.value = "";
40
+ } })] })] }));
41
+ }
42
+ //# sourceMappingURL=brand-font-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-font-upload.js","sourceRoot":"","sources":["../../src/brand/brand-font-upload.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,15 @@
1
1
  import type { BrandGenerationApi } from "./brand-generation-api.js";
2
+ /** The message a failed start carries when the server sent none. */
3
+ export declare const BRAND_GENERATION_START_FALLBACK_MESSAGE = "Failed to start brand generation";
2
4
  /** A non-2xx answer from a generation endpoint. */
3
5
  export declare class BrandGenerationRequestError extends Error {
4
6
  readonly status: number;
5
7
  readonly code: string;
6
- constructor(status: number, code: string, message: string);
8
+ /** The parsed response body (a 409 carries `eligibility` here), when it was JSON. */
9
+ readonly body?: unknown | undefined;
10
+ constructor(status: number, code: string, message: string,
11
+ /** The parsed response body (a 409 carries `eligibility` here), when it was JSON. */
12
+ body?: unknown | undefined);
7
13
  }
8
14
  export interface BrandGenerationClientOptions {
9
15
  /** API origin (e.g. `http://localhost:4000`). */
@@ -1 +1 @@
1
- {"version":3,"file":"brand-generation-client.d.ts","sourceRoot":"","sources":["../../src/brand/brand-generation-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AASjE,mDAAmD;AACnD,qBAAa,2BAA4B,SAAQ,KAAK;IAElD,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB;AAED,MAAM,WAAW,4BAA4B;IAC3C,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvD;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAC1C;AAyBD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,kBAAkB,CA+EpB"}
1
+ {"version":3,"file":"brand-generation-client.d.ts","sourceRoot":"","sources":["../../src/brand/brand-generation-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AASjE,oEAAoE;AACpE,eAAO,MAAM,uCAAuC,qCAAqC,CAAC;AAE1F,mDAAmD;AACnD,qBAAa,2BAA4B,SAAQ,KAAK;IAElD,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,qFAAqF;IACrF,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;gBAJd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;IACf,qFAAqF;IAC5E,IAAI,CAAC,EAAE,OAAO,YAAA;CAK1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvD;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAC1C;AA8BD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,kBAAkB,CA+EpB"}
@@ -1,30 +1,41 @@
1
1
  import { BrandGenerationResponseError, parseActiveEnvelope, parseJob, parseStart, } from "./brand-generation-response.js";
2
+ /** The message a failed start carries when the server sent none. */
3
+ export const BRAND_GENERATION_START_FALLBACK_MESSAGE = "Failed to start brand generation";
2
4
  /** A non-2xx answer from a generation endpoint. */
3
5
  export class BrandGenerationRequestError extends Error {
4
6
  status;
5
7
  code;
6
- constructor(status, code, message) {
8
+ body;
9
+ constructor(status, code, message,
10
+ /** The parsed response body (a 409 carries `eligibility` here), when it was JSON. */
11
+ body) {
7
12
  super(message);
8
13
  this.status = status;
9
14
  this.code = code;
15
+ this.body = body;
10
16
  this.name = "BrandGenerationRequestError";
11
17
  }
12
18
  }
13
19
  function isRecord(value) {
14
20
  return value !== null && typeof value === "object" && !Array.isArray(value);
15
21
  }
22
+ /**
23
+ * The backend answers `{ error: "<text>", code }`; a nested `{ error: { code,
24
+ * message } }` and a bare `{ message }` are accepted too. Precedence for the
25
+ * text: `error` (string), nested `error.message`, `message`, then `fallback`.
26
+ */
16
27
  function errorFields(body, fallback) {
17
28
  if (!isRecord(body))
18
29
  return { code: "UNKNOWN", message: fallback };
19
30
  const nested = isRecord(body.error) ? body.error : body;
20
- return {
21
- code: typeof nested.code === "string" ? nested.code : "UNKNOWN",
22
- message: typeof nested.message === "string"
31
+ const text = typeof body.error === "string"
32
+ ? body.error
33
+ : typeof nested.message === "string"
23
34
  ? nested.message
24
35
  : typeof body.message === "string"
25
36
  ? body.message
26
- : fallback,
27
- };
37
+ : fallback;
38
+ return { code: typeof nested.code === "string" ? nested.code : "UNKNOWN", message: text };
28
39
  }
29
40
  function toWireContext(context) {
30
41
  const { focusUrls, ...rest } = context;
@@ -69,7 +80,7 @@ export function createBrandGenerationClient(options) {
69
80
  }
70
81
  if (!response.ok) {
71
82
  const { code, message } = errorFields(parsed, fallback);
72
- throw new BrandGenerationRequestError(response.status, code, message);
83
+ throw new BrandGenerationRequestError(response.status, code, message, parsed);
73
84
  }
74
85
  return { status: response.status, data: parsed };
75
86
  }
@@ -83,7 +94,7 @@ export function createBrandGenerationClient(options) {
83
94
  const jobPath = (jobId) => `/brand-profiles/generate/${encodeURIComponent(jobId)}`;
84
95
  return {
85
96
  async start(homepageUrl, context) {
86
- const { status, data } = await request("POST", "/brand-profiles/generate/", "Failed to start brand generation", context === undefined ? { homepageUrl } : { homepageUrl, context: toWireContext(context) });
97
+ const { status, data } = await request("POST", "/brand-profiles/generate/", BRAND_GENERATION_START_FALLBACK_MESSAGE, context === undefined ? { homepageUrl } : { homepageUrl, context: toWireContext(context) });
87
98
  const start = parseStart(data);
88
99
  if (start === null)
89
100
  throw new BrandGenerationResponseError(status);
@@ -1 +1 @@
1
- {"version":3,"file":"brand-generation-client.js","sourceRoot":"","sources":["../../src/brand/brand-generation-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand-generation-client.js","sourceRoot":"","sources":["../../src/brand/brand-generation-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export type BrandGenerationStartErrorKind =
2
+ /** The server rejected the URL or input (400 or 422). */
3
+ "validation"
4
+ /** Cooldown, retry limit or an active attempt blocked the start (409). */
5
+ | "not_eligible"
6
+ /** The server failed (5xx or an unreadable answer). */
7
+ | "server"
8
+ /** No answer: offline, DNS, CORS, aborted. */
9
+ | "network"
10
+ /** Anything else (401, 403, 429, ...). */
11
+ | "unknown";
12
+ /** Why a start failed, in the shape `BrandGenerationStart` renders. */
13
+ export interface BrandGenerationStartError {
14
+ readonly kind: BrandGenerationStartErrorKind;
15
+ /** The server's own text, only for `validation`. */
16
+ readonly message: string | null;
17
+ /** The backend's `code`, so a host can branch on it. */
18
+ readonly code: string | null;
19
+ /** ISO time the next start is allowed, when a 409 reports one. */
20
+ readonly nextEligibleAt: string | null;
21
+ }
22
+ /** Classify what `api.start` threw. Duck-typed on `status` so it needs no instanceof. */
23
+ export declare function classifyBrandGenerationStartError(cause: unknown): BrandGenerationStartError;
24
+ //# sourceMappingURL=brand-generation-start-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-generation-start-error.d.ts","sourceRoot":"","sources":["../../src/brand/brand-generation-start-error.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,6BAA6B;AACvC,yDAAyD;AACvD,YAAY;AACd,0EAA0E;GACxE,cAAc;AAChB,uDAAuD;GACrD,QAAQ;AACV,8CAA8C;GAC5C,SAAS;AACX,0CAA0C;GACxC,SAAS,CAAC;AAEd,uEAAuE;AACvE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;IAC7C,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAUD,yFAAyF;AACzF,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,CA6B3F"}
@@ -0,0 +1,37 @@
1
+ import { BRAND_GENERATION_START_FALLBACK_MESSAGE } from "./brand-generation-client.js";
2
+ function readNextEligibleAt(body) {
3
+ if (typeof body !== "object" || body === null)
4
+ return null;
5
+ const eligibility = body.eligibility;
6
+ if (typeof eligibility !== "object" || eligibility === null)
7
+ return null;
8
+ const at = eligibility.nextEligibleAt;
9
+ return typeof at === "string" && at ? at : null;
10
+ }
11
+ /** Classify what `api.start` threw. Duck-typed on `status` so it needs no instanceof. */
12
+ export function classifyBrandGenerationStartError(cause) {
13
+ const fields = (cause ?? {});
14
+ const code = typeof fields.code === "string" && fields.code !== "UNKNOWN" ? fields.code : null;
15
+ if (typeof fields.status !== "number") {
16
+ return { kind: "network", message: null, code, nextEligibleAt: null };
17
+ }
18
+ const { status } = fields;
19
+ if (status === 400 || status === 422) {
20
+ const text = typeof fields.message === "string" ? fields.message.trim() : "";
21
+ // An Elysia schema failure stringifies its JSON into `message`; never show that.
22
+ const readable = text && text !== BRAND_GENERATION_START_FALLBACK_MESSAGE && !/^[[{]/.test(text);
23
+ return { kind: "validation", message: readable ? text : null, code, nextEligibleAt: null };
24
+ }
25
+ if (status === 409) {
26
+ return {
27
+ kind: "not_eligible",
28
+ message: null,
29
+ code,
30
+ nextEligibleAt: readNextEligibleAt(fields.body),
31
+ };
32
+ }
33
+ if (status >= 500)
34
+ return { kind: "server", message: null, code, nextEligibleAt: null };
35
+ return { kind: "unknown", message: null, code, nextEligibleAt: null };
36
+ }
37
+ //# sourceMappingURL=brand-generation-start-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-generation-start-error.js","sourceRoot":"","sources":["../../src/brand/brand-generation-start-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uCAAuC,EAAE,MAAM,2BAA2B,CAAC;AAyBpF,SAAS,kBAAkB,CAAC,IAAa;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,WAAW,GAAI,IAAkC,CAAC,WAAW,CAAC;IACpE,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzE,MAAM,EAAE,GAAI,WAA4C,CAAC,cAAc,CAAC;IACxE,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,iCAAiC,CAAC,KAAc;IAC9D,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,CAK1B,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACxE,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,iFAAiF;QACjF,MAAM,QAAQ,GACZ,IAAI,IAAI,IAAI,KAAK,uCAAuC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC7F,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,IAAI;YACb,IAAI;YACJ,cAAc,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;SAChD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,IAAI,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACxF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AACxE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { BrandGenerationRecoveryCopy } from "./brand-generation-recovery-copy.js";
2
+ import type { BrandGenerationStartError } from "./brand-generation-start-error.js";
2
3
  import type { BrandGenerationEligibility } from "./brand-generation-types.js";
3
4
  import type { BrandPersona } from "./types.js";
4
5
  export interface BrandGenerationStartCopy {
@@ -15,6 +16,18 @@ export interface BrandGenerationStartCopy {
15
16
  * replacement here would leak braces. Receives the already formatted date.
16
17
  */
17
18
  readonly eligibilityUnknownReasonWithDate: (formattedDate: string) => string;
19
+ /** A start failed for a reason this client does not recognise. */
20
+ readonly startFailed: string;
21
+ /** The server rejected the URL and sent no text of its own (its text is shown when it has one). */
22
+ readonly startInvalidUrl: string;
23
+ /** A cooldown, retry limit or active attempt blocked the start (409). */
24
+ readonly startNotEligible: string;
25
+ /** Same, when the server reports when the next start is allowed. Receives the formatted date. */
26
+ readonly startNotEligibleWithDate: (formattedDate: string) => string;
27
+ /** The server failed (5xx). */
28
+ readonly startServerError: string;
29
+ /** No answer from the server: offline or unreachable. */
30
+ readonly startNetworkError: string;
18
31
  }
19
32
  export declare const DEFAULT_BRAND_GENERATION_START_COPY: BrandGenerationStartCopy;
20
33
  export interface BrandGenerationStartProps {
@@ -27,6 +40,19 @@ export interface BrandGenerationStartProps {
27
40
  readonly onStart: (url: string) => void;
28
41
  readonly onCreateManually: () => void;
29
42
  readonly formatDateTime: (iso: string) => string;
43
+ /**
44
+ * Why a start failed (the hook's `startError`). Renders an inline message
45
+ * under the URL field, moves focus back to it, and is referenced by the field
46
+ * through `aria-describedby` so it is read on focus. Cleared on edit or retry.
47
+ */
48
+ readonly startError?: BrandGenerationStartError | null;
49
+ /**
50
+ * Show the generic failure copy without a cause (hosts that only know
51
+ * `error === "start"`). Optional; `startError` takes precedence.
52
+ */
53
+ readonly startFailed?: boolean;
54
+ /** Called when the user edits the URL or retries, so the host can clear its error state. */
55
+ readonly onStartErrorDismiss?: () => void;
30
56
  readonly copy?: Partial<BrandGenerationStartCopy>;
31
57
  readonly recoveryCopy?: BrandGenerationRecoveryCopy;
32
58
  /**
@@ -45,5 +71,5 @@ export interface BrandGenerationStartProps {
45
71
  * disabled and the reason is shown rather than letting a start 409 unexplained.
46
72
  * A blocked state with no known reason still gets a fallback notice.
47
73
  */
48
- export declare function BrandGenerationStart({ persona, eligibility, generationUrl, onGenerationUrlChange, onStart, onCreateManually, formatDateTime, copy, recoveryCopy, idPrefix, }: BrandGenerationStartProps): import("react/jsx-runtime").JSX.Element;
74
+ export declare function BrandGenerationStart({ persona, eligibility, generationUrl, onGenerationUrlChange, onStart, onCreateManually, formatDateTime, startError, startFailed, onStartErrorDismiss, copy, recoveryCopy, idPrefix, }: BrandGenerationStartProps): import("react/jsx-runtime").JSX.Element;
49
75
  //# sourceMappingURL=brand-generation-start.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"brand-generation-start.d.ts","sourceRoot":"","sources":["../../src/brand/brand-generation-start.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,oFAAoF;IACpF,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,gCAAgC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9E;AAED,eAAO,MAAM,mCAAmC,EAAE,wBASjD,CAAC;AAIF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,0BAA0B,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,2BAA2B,CAAC;IACpD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,OAAoB,EACpB,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,QAAQ,GACT,EAAE,yBAAyB,2CAmE3B"}
1
+ {"version":3,"file":"brand-generation-start.d.ts","sourceRoot":"","sources":["../../src/brand/brand-generation-start.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,oFAAoF;IACpF,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,gCAAgC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7E,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,mGAAmG;IACnG,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,yEAAyE;IACzE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,iGAAiG;IACjG,QAAQ,CAAC,wBAAwB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;IACrE,+BAA+B;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,eAAO,MAAM,mCAAmC,EAAE,wBAgBjD,CAAC;AAIF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,0BAA0B,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACvD;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,4FAA4F;IAC5F,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,2BAA2B,CAAC;IACpD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,OAAoB,EACpB,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,UAAiB,EACjB,WAAmB,EACnB,mBAAmB,EACnB,IAAI,EACJ,YAAY,EACZ,QAAQ,GACT,EAAE,yBAAyB,2CA8G3B"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useId } from "react";
2
+ import { useEffect, useId, useRef, useState } from "react";
3
3
  import { Button } from "../components/button.js";
4
+ import { Field, ErrorMessage } from "../components/fieldset.js";
4
5
  import { Input } from "../components/input.js";
5
6
  import { BrandGenerationRecovery } from "./brand-generation-recovery.js";
6
7
  export const DEFAULT_BRAND_GENERATION_START_COPY = {
@@ -11,6 +12,12 @@ export const DEFAULT_BRAND_GENERATION_START_COPY = {
11
12
  createManuallyAction: "Create manually",
12
13
  eligibilityUnknownReason: "Generation is not available right now.",
13
14
  eligibilityUnknownReasonWithDate: (formattedDate) => `Generation is not available right now. Try again after ${formattedDate}.`,
15
+ startFailed: "Could not start generation. Try again.",
16
+ startInvalidUrl: "Check the URL and try again.",
17
+ startNotEligible: "Generation cannot start right now. Try again later.",
18
+ startNotEligibleWithDate: (formattedDate) => `Generation cannot start right now. Try again after ${formattedDate}.`,
19
+ startServerError: "Something went wrong on our side. Try again in a moment.",
20
+ startNetworkError: "Could not reach the server. Check your connection and try again.",
14
21
  };
15
22
  const IMPORTER_PLACEHOLDER = "https://your-company.com";
16
23
  /**
@@ -23,8 +30,24 @@ const IMPORTER_PLACEHOLDER = "https://your-company.com";
23
30
  * disabled and the reason is shown rather than letting a start 409 unexplained.
24
31
  * A blocked state with no known reason still gets a fallback notice.
25
32
  */
26
- export function BrandGenerationStart({ persona = "producer", eligibility, generationUrl, onGenerationUrlChange, onStart, onCreateManually, formatDateTime, copy, recoveryCopy, idPrefix, }) {
33
+ export function BrandGenerationStart({ persona = "producer", eligibility, generationUrl, onGenerationUrlChange, onStart, onCreateManually, formatDateTime, startError = null, startFailed = false, onStartErrorDismiss, copy, recoveryCopy, idPrefix, }) {
27
34
  const generatedId = useId();
35
+ const inputRef = useRef(null);
36
+ // Local too, so the alert clears on edit even for a host that wires no callback.
37
+ const [dismissed, setDismissed] = useState(false);
38
+ const failed = startFailed || startError !== null;
39
+ const showError = failed && !dismissed;
40
+ // A new failure re-arms the alert (adjusting state while rendering, not in an effect).
41
+ const [wasFailed, setWasFailed] = useState(failed);
42
+ if (wasFailed !== failed) {
43
+ setWasFailed(failed);
44
+ if (failed)
45
+ setDismissed(false);
46
+ }
47
+ useEffect(() => {
48
+ if (showError)
49
+ inputRef.current?.focus();
50
+ }, [showError]);
28
51
  const prefix = idPrefix ?? `brand-generation-idle-${generatedId}`;
29
52
  const defaults = persona === "importer"
30
53
  ? { ...DEFAULT_BRAND_GENERATION_START_COPY, urlPlaceholder: IMPORTER_PLACEHOLDER }
@@ -32,6 +55,22 @@ export function BrandGenerationStart({ persona = "producer", eligibility, genera
32
55
  const text = { ...defaults, ...copy };
33
56
  const canStart = eligibility?.canStart !== false;
34
57
  const trimmedUrl = generationUrl.trim();
58
+ const errorText = (() => {
59
+ switch (startError?.kind) {
60
+ case "validation":
61
+ return startError.message ?? text.startInvalidUrl;
62
+ case "not_eligible":
63
+ return startError.nextEligibleAt
64
+ ? text.startNotEligibleWithDate(formatDateTime(startError.nextEligibleAt))
65
+ : text.startNotEligible;
66
+ case "server":
67
+ return text.startServerError;
68
+ case "network":
69
+ return text.startNetworkError;
70
+ default:
71
+ return text.startFailed;
72
+ }
73
+ })();
35
74
  const blockedMessage = eligibility?.nextEligibleAt
36
75
  ? text.eligibilityUnknownReasonWithDate(formatDateTime(eligibility.nextEligibleAt))
37
76
  : text.eligibilityUnknownReason;
@@ -39,10 +78,18 @@ export function BrandGenerationStart({ persona = "producer", eligibility, genera
39
78
  // `BrandGenerationRecovery` renders only for a known `reason`, and
40
79
  // an unrecognised one parses to `null`: without this the form would
41
80
  // be disabled with nothing explaining why.
42
- _jsx("div", { role: "status", "data-testid": "brand-generation-idle-unknown-reason", className: "rounded-2xl border border-border bg-card p-5 text-sm/6 text-muted-foreground", children: blockedMessage })) })) : null, _jsxs("form", { className: "flex w-full max-w-md items-center gap-2", onSubmit: (event) => {
81
+ _jsx("div", { role: "status", "data-testid": "brand-generation-idle-unknown-reason", className: "rounded-2xl border border-border bg-card p-5 text-sm/6 text-muted-foreground", children: blockedMessage })) })) : null, _jsxs("form", { className: "flex w-full max-w-md items-start gap-2", onSubmit: (event) => {
43
82
  event.preventDefault();
44
- if (trimmedUrl && canStart)
45
- onStart(trimmedUrl);
46
- }, children: [_jsx(Input, { "aria-label": text.websiteUrlLabel, type: "url", placeholder: text.urlPlaceholder, value: generationUrl, onChange: (event) => onGenerationUrlChange(event.target.value), className: "flex-1", disabled: !canStart, "aria-describedby": eligibility && !canStart ? `${prefix}-notice` : undefined, required: true }), _jsx(Button, { type: "submit", color: "brand", disabled: !canStart || !trimmedUrl, children: text.generateAction })] }), _jsx("p", { className: "text-xs text-muted-foreground", children: text.orSeparator }), _jsx(Button, { outline: true, onClick: onCreateManually, children: text.createManuallyAction })] }));
83
+ if (!trimmedUrl || !canStart)
84
+ return;
85
+ onStartErrorDismiss?.();
86
+ onStart(trimmedUrl);
87
+ }, children: [_jsxs(Field, { className: "flex-1", children: [_jsx(Input, { ref: inputRef, "aria-label": text.websiteUrlLabel, type: "url", placeholder: text.urlPlaceholder, value: generationUrl, onChange: (event) => {
88
+ if (failed) {
89
+ setDismissed(true);
90
+ onStartErrorDismiss?.();
91
+ }
92
+ onGenerationUrlChange(event.target.value);
93
+ }, disabled: !canStart, invalid: showError, required: true }), showError ? (_jsx(ErrorMessage, { "data-testid": "brand-generation-start-error", children: errorText })) : null] }), _jsx(Button, { type: "submit", color: "brand", disabled: !canStart || !trimmedUrl, children: text.generateAction })] }), _jsx("p", { className: "text-xs text-muted-foreground", children: text.orSeparator }), _jsx(Button, { outline: true, onClick: onCreateManually, children: text.createManuallyAction })] }));
47
94
  }
48
95
  //# sourceMappingURL=brand-generation-start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"brand-generation-start.js","sourceRoot":"","sources":["../../src/brand/brand-generation-start.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand-generation-start.js","sourceRoot":"","sources":["../../src/brand/brand-generation-start.tsx"],"names":[],"mappings":"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"}
@@ -74,4 +74,11 @@ export { BrandGenerationStart, DEFAULT_BRAND_GENERATION_START_COPY, } from "./br
74
74
  export type { BrandGenerationStartCopy, BrandGenerationStartProps } from "./brand-generation-start.js";
75
75
  export { DEFAULT_BRAND_PROFILE_ACCEPTANCE_COPY, useBrandProfileAcceptance, } from "./use-brand-profile-acceptance.js";
76
76
  export type { BrandProfileAcceptanceCopy, BrandWorkspaceNotice, UseBrandProfileAcceptanceOptions, } from "./use-brand-profile-acceptance.js";
77
+ export { readBrandAssetModeration } from "./brand-assets-api.js";
78
+ export * from "./brand-assets-section.js";
79
+ export * from "./brand-assets-section-copy.js";
80
+ export { BrandFontUpload, type BrandFontUploadProps } from "./brand-font-upload.js";
81
+ export { ScanPageBanner, type ScanPageBannerProps } from "./scan-page-banner.js";
82
+ export { isUsableBrandFontFamily, resolveBrandFontFamily, type BrandVisualFontSources, } from "./brand-font-family.js";
83
+ export { classifyBrandGenerationStartError, type BrandGenerationStartError, type BrandGenerationStartErrorKind, } from "./brand-generation-start-error.js";
77
84
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/brand/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/brand/index.ts"],"names":[],"mappings":"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"}
@@ -62,4 +62,12 @@ export { useBrandImageOperationResult } from "./use-brand-image-operation-result
62
62
  export { BrandImageChoosers, DEFAULT_BRAND_IMAGE_CHOOSERS_COPY } from "./brand-image-choosers.js";
63
63
  export { BrandGenerationStart, DEFAULT_BRAND_GENERATION_START_COPY, } from "./brand-generation-start.js";
64
64
  export { DEFAULT_BRAND_PROFILE_ACCEPTANCE_COPY, useBrandProfileAcceptance, } from "./use-brand-profile-acceptance.js";
65
+ // CEL-2127: shared brand assets section (logos, banner, font, moderation notices).
66
+ export { readBrandAssetModeration } from "./brand-assets-api.js";
67
+ export * from "./brand-assets-section.js";
68
+ export * from "./brand-assets-section-copy.js";
69
+ export { BrandFontUpload } from "./brand-font-upload.js";
70
+ export { ScanPageBanner } from "./scan-page-banner.js";
71
+ export { isUsableBrandFontFamily, resolveBrandFontFamily, } from "./brand-font-family.js";
72
+ export { classifyBrandGenerationStartError, } from "./brand-generation-start-error.js";
65
73
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/brand/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/brand/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ScanPageBannerCopy } from "./brand-assets-section-copy.js";
2
+ import type { BrandAsset } from "./types.js";
3
+ export interface ScanPageBannerProps {
4
+ /** The uploaded banner-slot asset, when it has replaced the scrape. */
5
+ asset: BrandAsset | null;
6
+ /** `visual.bannerImage` value: the web scrape's banner, already re-hosted. */
7
+ scrapedUrl: string | null;
8
+ onUpload: (file: File) => void;
9
+ onClear: () => void;
10
+ uploading?: boolean;
11
+ clearing?: boolean;
12
+ /** Server-side failure for this slot, surfaced inline. */
13
+ error?: string | null;
14
+ copy?: Partial<ScanPageBannerCopy>;
15
+ /** Extra origins the preview may load from (non-https dev deployments). https image URLs always pass the shared safety check. */
16
+ allowedImageOrigins?: readonly string[];
17
+ /** Hide the Remove action when the host cannot clear this banner. Default true. */
18
+ canClear?: boolean;
19
+ }
20
+ export declare function ScanPageBanner({ asset, scrapedUrl, onUpload, onClear, uploading, clearing, error, copy: copyOverrides, allowedImageOrigins, canClear, }: ScanPageBannerProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=scan-page-banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-page-banner.d.ts","sourceRoot":"","sources":["../../src/brand/scan-page-banner.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAiB1C,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnC,iIAAiI;IACjI,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAiB,EACjB,QAAgB,EAChB,KAAY,EACZ,IAAI,EAAE,aAAa,EACnB,mBAAmB,EACnB,QAAe,GAChB,EAAE,mBAAmB,2CAmHrB"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useRef, useState } from "react";
3
+ import { DEFAULT_SCAN_PAGE_BANNER_COPY, } from "./brand-assets-section-copy.js";
4
+ import { BrandSafeImage } from "./brand-safe-image.js";
5
+ /**
6
+ * Org-level banner for the scanned e-label landing (CEL-1234).
7
+ *
8
+ * Not `BrandAssetUploader`, because the banner has two sources (an uploaded
9
+ * asset AND the scraped `visual.bannerImage`, which the scan page falls back
10
+ * to), a clear that empties both, and a full-bleed preview. One banner per
11
+ * brand profile, shown on every scan page of the org.
12
+ *
13
+ * SVG is absent from the accepted types for this slot only (CEL-1283): it can
14
+ * carry arbitrary text, so the backend refuses it for the banner.
15
+ */
16
+ const ACCEPTED_MIME_TYPES = ["image/png", "image/jpeg", "image/webp"];
17
+ /** Mirrors the backend's `BRAND_ASSET_MAX_BYTES`. */
18
+ const MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024;
19
+ export function ScanPageBanner({ asset, scrapedUrl, onUpload, onClear, uploading = false, clearing = false, error = null, copy: copyOverrides, allowedImageOrigins, canClear = true, }) {
20
+ const copy = { ...DEFAULT_SCAN_PAGE_BANNER_COPY, ...copyOverrides };
21
+ const inputRef = useRef(null);
22
+ const errorId = useId();
23
+ const [validationError, setValidationError] = useState(null);
24
+ const shownError = validationError ?? error;
25
+ const currentUrl = asset?.fileUrl ?? scrapedUrl;
26
+ const isScraped = !asset && scrapedUrl !== null;
27
+ const busy = uploading || clearing;
28
+ const handleFile = (file) => {
29
+ if (file.size > MAX_FILE_SIZE_BYTES) {
30
+ setValidationError(copy.tooLarge(Math.round(MAX_FILE_SIZE_BYTES / (1024 * 1024))));
31
+ return;
32
+ }
33
+ if (!ACCEPTED_MIME_TYPES.some((accepted) => accepted === file.type)) {
34
+ setValidationError(copy.unsupported(file.type));
35
+ return;
36
+ }
37
+ setValidationError(null);
38
+ onUpload(file);
39
+ };
40
+ return (_jsxs("section", { className: "flex flex-col gap-3", "data-testid": "scan-page-banner", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-sm font-semibold text-foreground", children: copy.title }), _jsx("p", { className: "max-w-prose text-sm text-muted-foreground", children: copy.subtitle })] }), _jsxs("div", { className: "rounded-xl border border-border/60 bg-card p-4", children: [currentUrl ? (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx(BrandSafeImage, { src: currentUrl, alt: copy.previewAlt, allowedOrigins: allowedImageOrigins, className: "h-28 w-full rounded-lg border border-border/60 object-cover", fallback: _jsx("span", { role: "status", className: "flex h-28 w-full items-center justify-center rounded-lg border border-border/60 text-xs text-muted-foreground", children: copy.previewUnavailable }) }), _jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-2", children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-xs text-muted-foreground", children: isScraped ? copy.fromWebsite : (asset?.fileName ?? "") }), _jsx("button", { type: "button", onClick: () => inputRef.current?.click(), disabled: busy, className: "relative before:absolute before:inset-x-0 before:-inset-y-2.5 shrink-0 rounded-lg px-2 py-1 text-xs font-medium focus-visible:outline-hidden focus-visible:ring-3 focus-visible:ring-ring/70 text-primary hover:underline disabled:cursor-not-allowed disabled:opacity-50", children: uploading ? copy.uploading : copy.replace }), canClear ? (_jsx("button", { type: "button", onClick: onClear, disabled: busy, className: "relative before:absolute before:inset-x-0 before:-inset-y-2.5 shrink-0 rounded-lg px-2 py-1 text-xs font-medium focus-visible:outline-hidden focus-visible:ring-3 focus-visible:ring-ring/70 text-[var(--tone-danger-fg)] hover:underline disabled:cursor-not-allowed disabled:opacity-50", children: clearing ? copy.removing : copy.remove })) : null] })] })) : (_jsxs("button", { type: "button", onClick: () => inputRef.current?.click(), "aria-describedby": shownError ? errorId : undefined, "aria-invalid": shownError ? true : undefined, disabled: busy, className: "flex w-full cursor-pointer items-center justify-center rounded-lg border border-dashed border-border/60 px-3 py-6 text-xs text-muted-foreground hover:border-primary hover:text-primary disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx("span", { className: "sr-only", children: copy.inputLabel }), _jsx("span", { "aria-hidden": "true", children: uploading ? copy.uploading : copy.upload })] })), shownError ? (_jsx("p", { role: "alert", id: errorId, className: "mt-2 text-xs font-medium text-[var(--tone-danger-fg)]", children: shownError })) : null, _jsx("input", { ref: inputRef, type: "file", accept: ACCEPTED_MIME_TYPES.join(","), tabIndex: -1, className: "sr-only", "aria-label": copy.inputLabel, disabled: busy, onChange: (event) => {
41
+ const file = event.target.files?.[0];
42
+ if (file)
43
+ handleFile(file);
44
+ // Reset so re-picking the same file still fires `change`.
45
+ event.target.value = "";
46
+ } })] })] }));
47
+ }
48
+ //# sourceMappingURL=scan-page-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-page-banner.js","sourceRoot":"","sources":["../../src/brand/scan-page-banner.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type QueryKey } from "@tanstack/react-query";
2
2
  import type { BrandGenerationApi, BrandGenerationStreamConfig } from "./brand-generation-api.js";
3
3
  import type { BrandGenerationContext, BrandGenerationJob } from "./brand-generation-response.js";
4
+ import { type BrandGenerationStartError } from "./brand-generation-start-error.js";
4
5
  export interface UseBrandGenerationOptions {
5
6
  /** Active org id. Every piece of generation state resets when it changes. */
6
7
  readonly orgId: string;
@@ -23,6 +24,10 @@ export declare function useBrandGeneration({ orgId, api, stream, profileQueryKey
23
24
  isDiscoveringActive: boolean;
24
25
  discoveryError: Error | null;
25
26
  error: "start" | "resume" | "accept" | "cancel" | "prioritize" | null;
27
+ /** Why the last start failed (behind `error === "start"`), else `null`. */
28
+ startError: BrandGenerationStartError | null;
29
+ /** Clears a failed-start error (the start form calls it on edit). */
30
+ clearStartError: () => void;
26
31
  transportDegraded: boolean;
27
32
  eligibility: import("./brand-generation-types.js").BrandGenerationEligibility | null;
28
33
  start: (homepageUrl: string, context?: BrandGenerationContext) => Promise<void>;