@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.
- package/dist/brand/brand-assets-api.d.ts +7 -0
- package/dist/brand/brand-assets-api.d.ts.map +1 -1
- package/dist/brand/brand-assets-api.js +12 -0
- package/dist/brand/brand-assets-api.js.map +1 -1
- package/dist/brand/brand-assets-section-copy.d.ts +63 -0
- package/dist/brand/brand-assets-section-copy.d.ts.map +1 -0
- package/dist/brand/brand-assets-section-copy.js +56 -0
- package/dist/brand/brand-assets-section-copy.js.map +1 -0
- package/dist/brand/brand-assets-section.d.ts +68 -0
- package/dist/brand/brand-assets-section.d.ts.map +1 -0
- package/dist/brand/brand-assets-section.js +172 -0
- package/dist/brand/brand-assets-section.js.map +1 -0
- package/dist/brand/brand-font-family.d.ts +37 -0
- package/dist/brand/brand-font-family.d.ts.map +1 -0
- package/dist/brand/brand-font-family.js +83 -0
- package/dist/brand/brand-font-family.js.map +1 -0
- package/dist/brand/brand-font-upload.d.ts +17 -0
- package/dist/brand/brand-font-upload.d.ts.map +1 -0
- package/dist/brand/brand-font-upload.js +42 -0
- package/dist/brand/brand-font-upload.js.map +1 -0
- package/dist/brand/brand-generation-client.d.ts +7 -1
- package/dist/brand/brand-generation-client.d.ts.map +1 -1
- package/dist/brand/brand-generation-client.js +19 -8
- package/dist/brand/brand-generation-client.js.map +1 -1
- package/dist/brand/brand-generation-start-error.d.ts +24 -0
- package/dist/brand/brand-generation-start-error.d.ts.map +1 -0
- package/dist/brand/brand-generation-start-error.js +37 -0
- package/dist/brand/brand-generation-start-error.js.map +1 -0
- package/dist/brand/brand-generation-start.d.ts +27 -1
- package/dist/brand/brand-generation-start.d.ts.map +1 -1
- package/dist/brand/brand-generation-start.js +53 -6
- package/dist/brand/brand-generation-start.js.map +1 -1
- package/dist/brand/index.d.ts +7 -0
- package/dist/brand/index.d.ts.map +1 -1
- package/dist/brand/index.js +8 -0
- package/dist/brand/index.js.map +1 -1
- package/dist/brand/scan-page-banner.d.ts +21 -0
- package/dist/brand/scan-page-banner.d.ts.map +1 -0
- package/dist/brand/scan-page-banner.js +48 -0
- package/dist/brand/scan-page-banner.js.map +1 -0
- package/dist/brand/use-brand-generation.d.ts +5 -0
- package/dist/brand/use-brand-generation.d.ts.map +1 -1
- package/dist/brand/use-brand-generation.js +16 -2
- package/dist/brand/use-brand-generation.js.map +1 -1
- package/dist/brand/use-brand-workspace-concurrency.d.ts +0 -1
- package/dist/brand/use-brand-workspace-concurrency.d.ts.map +1 -1
- package/dist/brand/use-brand-workspace-concurrency.js +4 -8
- package/dist/brand/use-brand-workspace-concurrency.js.map +1 -1
- package/dist/moderation/focus-upload-control.d.ts +15 -0
- package/dist/moderation/focus-upload-control.d.ts.map +1 -0
- package/dist/moderation/focus-upload-control.js +21 -0
- package/dist/moderation/focus-upload-control.js.map +1 -0
- package/dist/moderation/index.d.ts +1 -0
- package/dist/moderation/index.d.ts.map +1 -1
- package/dist/moderation/index.js +1 -0
- package/dist/moderation/index.js.map +1 -1
- package/dist/moderation/moderation-scope.d.ts +31 -0
- package/dist/moderation/moderation-scope.d.ts.map +1 -0
- package/dist/moderation/moderation-scope.js +109 -0
- package/dist/moderation/moderation-scope.js.map +1 -0
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-brand-generation.d.ts","sourceRoot":"","sources":["../../src/brand/use-brand-generation.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAM9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"use-brand-generation.d.ts","sourceRoot":"","sources":["../../src/brand/use-brand-generation.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAM9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,gCAAgC,CAAC;AASxC,MAAM,WAAW,yBAAyB;IACxC,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;CACpC;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE7E,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,GAAG,EACH,MAAM,EACN,eAAe,GAChB,EAAE,yBAAyB;;;;;;IAmNxB,2EAA2E;;IAE3E,qEAAqE;;;;yBAxIrC,MAAM,YAAY,sBAAsB;oBAoHnD,MAAM;;yBA1EK,MAAM;;;EAsHzC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useCallback, useRef } from "react";
|
|
2
2
|
import { useQueryClient } from "@tanstack/react-query";
|
|
3
3
|
import { brandGenerationKeys, isTerminalStatus, } from "./brand-generation-keys.js";
|
|
4
|
+
import { classifyBrandGenerationStartError, } from "./brand-generation-start-error.js";
|
|
4
5
|
import { resumeBrandGeneration } from "./resume-brand-generation.js";
|
|
5
6
|
import { useBrandGenerationDiscovery } from "./use-brand-generation-discovery.js";
|
|
6
7
|
import { useBrandGenerationTransport, } from "./use-brand-generation-transport.js";
|
|
@@ -22,13 +23,15 @@ export function useBrandGeneration({ orgId, api, stream, profileQueryKey, }) {
|
|
|
22
23
|
const [dismissedTerminalJobId, setDismissedTerminalJobId] = useOrgScopedState(orgId, null);
|
|
23
24
|
const [isGenerating, setIsGenerating] = useOrgScopedState(orgId, false);
|
|
24
25
|
const [error, setError] = useOrgScopedState(orgId, null);
|
|
26
|
+
const [startError, setStartError] = useOrgScopedState(orgId, null);
|
|
25
27
|
const [transportDegraded, setTransportDegraded] = useOrgScopedState(orgId, false);
|
|
26
28
|
const clearGenerationState = useCallback(() => {
|
|
27
29
|
setJob(null);
|
|
28
30
|
setIsGenerating(false);
|
|
29
31
|
setError(null);
|
|
32
|
+
setStartError(null);
|
|
30
33
|
setTransportDegraded(false);
|
|
31
|
-
}, [setError, setIsGenerating, setJob, setTransportDegraded]);
|
|
34
|
+
}, [setError, setIsGenerating, setJob, setStartError, setTransportDegraded]);
|
|
32
35
|
const markTransportDegraded = useCallback(() => {
|
|
33
36
|
if (orgEpochRef.current === orgEpoch)
|
|
34
37
|
setTransportDegraded(true);
|
|
@@ -72,6 +75,7 @@ export function useBrandGeneration({ orgId, api, stream, profileQueryKey, }) {
|
|
|
72
75
|
const actionEpoch = orgEpoch;
|
|
73
76
|
try {
|
|
74
77
|
setError(null);
|
|
78
|
+
setStartError(null);
|
|
75
79
|
setTransportDegraded(false);
|
|
76
80
|
setDismissedTerminalJobId(null);
|
|
77
81
|
setIsGenerating(true);
|
|
@@ -89,10 +93,11 @@ export function useBrandGeneration({ orgId, api, stream, profileQueryKey, }) {
|
|
|
89
93
|
});
|
|
90
94
|
connectSSE(res.jobId);
|
|
91
95
|
}
|
|
92
|
-
catch {
|
|
96
|
+
catch (cause) {
|
|
93
97
|
if (orgEpochRef.current !== actionEpoch)
|
|
94
98
|
return;
|
|
95
99
|
setIsGenerating(false);
|
|
100
|
+
setStartError(classifyBrandGenerationStartError(cause));
|
|
96
101
|
setError("start");
|
|
97
102
|
}
|
|
98
103
|
};
|
|
@@ -204,6 +209,15 @@ export function useBrandGeneration({ orgId, api, stream, profileQueryKey, }) {
|
|
|
204
209
|
isDiscoveringActive,
|
|
205
210
|
discoveryError,
|
|
206
211
|
error,
|
|
212
|
+
/** Why the last start failed (behind `error === "start"`), else `null`. */
|
|
213
|
+
startError,
|
|
214
|
+
/** Clears a failed-start error (the start form calls it on edit). */
|
|
215
|
+
clearStartError: () => {
|
|
216
|
+
if (error !== "start")
|
|
217
|
+
return;
|
|
218
|
+
setError(null);
|
|
219
|
+
setStartError(null);
|
|
220
|
+
},
|
|
207
221
|
transportDegraded,
|
|
208
222
|
// CEL-1682 (contracts §2): prefers the tracked job's own eligibility
|
|
209
223
|
// (populated by GET /:jobId via `resume`, and by GET /active when a job
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-brand-generation.js","sourceRoot":"","sources":["../../src/brand/use-brand-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,cAAc,EAAiB,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,2BAA2B,GAE5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAoB3D,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,GAAG,EACH,MAAM,EACN,eAAe,GACW;IAC1B,4FAA4F;IAC5F,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC9C,aAAa,CAAC,OAAO,GAAG,eAAe,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACvC,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC;QACjC,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;IACrC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,EACJ,WAAW,EACX,SAAS,EACT,aAAa,EACb,WAAW,EACX,WAAW,EAAE,oBAAoB,EACjC,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,GACf,GAAG,2BAA2B,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,iBAAiB,CAA4B,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3F,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,iBAAiB,CAC3E,KAAK,EACL,IAAI,CACL,CAAC;IACF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,iBAAiB,CAAkC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1F,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClF,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-brand-generation.js","sourceRoot":"","sources":["../../src/brand/use-brand-generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,6 @@ import type { BrandProfileConflict } from "./brand-profile-form.js";
|
|
|
26
26
|
export interface BrandWorkspaceSnapshot {
|
|
27
27
|
readonly id?: string | null;
|
|
28
28
|
readonly revision?: number | null;
|
|
29
|
-
readonly version?: number | null;
|
|
30
29
|
readonly updatedAt?: string | null;
|
|
31
30
|
readonly status?: string | null;
|
|
32
31
|
readonly profileData?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-brand-workspace-concurrency.d.ts","sourceRoot":"","sources":["../../src/brand/use-brand-workspace-concurrency.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIjE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"use-brand-workspace-concurrency.d.ts","sourceRoot":"","sources":["../../src/brand/use-brand-workspace-concurrency.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,20 +26,16 @@ export function classifyBrandProfileApiError(error) {
|
|
|
26
26
|
/**
|
|
27
27
|
* The fields whose movement means "the server changed".
|
|
28
28
|
*
|
|
29
|
-
* `version` is
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* what the form is showing, so it must raise the notice. It cannot cause a
|
|
34
|
-
* false positive for our own write: that is matched on `revision` before this
|
|
35
|
-
* key is consulted, and both move together on a normal save.
|
|
29
|
+
* `version` is deliberately NOT part of the key. The backend's `version` is a
|
|
30
|
+
* constant `"1"` that nothing ever bumps, so it can never signal a change;
|
|
31
|
+
* `revision` is the row's compare-and-swap counter and is what moves on every
|
|
32
|
+
* write (including a regeneration or backfill).
|
|
36
33
|
*/
|
|
37
34
|
function snapshotKey(orgId, profile) {
|
|
38
35
|
return JSON.stringify({
|
|
39
36
|
orgId,
|
|
40
37
|
id: profile?.id ?? null,
|
|
41
38
|
revision: profile?.revision ?? null,
|
|
42
|
-
version: profile?.version ?? null,
|
|
43
39
|
updatedAt: profile?.updatedAt ?? null,
|
|
44
40
|
status: profile?.status ?? null,
|
|
45
41
|
profileData: profile?.profileData ?? null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-brand-workspace-concurrency.js","sourceRoot":"","sources":["../../src/brand/use-brand-workspace-concurrency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-brand-workspace-concurrency.js","sourceRoot":"","sources":["../../src/brand/use-brand-workspace-concurrency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CEL-1320 — the "re-upload" half of an actionable rejection.
|
|
3
|
+
*
|
|
4
|
+
* A rejection panel that names the problem and then leaves the producer to
|
|
5
|
+
* hunt for the control is only half a fix (spec §7: rejection must be
|
|
6
|
+
* ACTIONABLE). Where the upload control already sits next to the panel, the
|
|
7
|
+
* deep link is a scroll plus a focus rather than a route change: the producer
|
|
8
|
+
* ends up on the button with the keyboard already there.
|
|
9
|
+
*
|
|
10
|
+
* `preventScroll` on the focus call is deliberate. `scrollIntoView` has just
|
|
11
|
+
* placed the section where we want it; letting focus scroll again fights that
|
|
12
|
+
* and lands the viewport somewhere neither call intended.
|
|
13
|
+
*/
|
|
14
|
+
export declare function focusUploadControl(container: HTMLElement | null): void;
|
|
15
|
+
//# sourceMappingURL=focus-upload-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-upload-control.d.ts","sourceRoot":"","sources":["../../src/moderation/focus-upload-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAOtE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CEL-1320 — the "re-upload" half of an actionable rejection.
|
|
3
|
+
*
|
|
4
|
+
* A rejection panel that names the problem and then leaves the producer to
|
|
5
|
+
* hunt for the control is only half a fix (spec §7: rejection must be
|
|
6
|
+
* ACTIONABLE). Where the upload control already sits next to the panel, the
|
|
7
|
+
* deep link is a scroll plus a focus rather than a route change: the producer
|
|
8
|
+
* ends up on the button with the keyboard already there.
|
|
9
|
+
*
|
|
10
|
+
* `preventScroll` on the focus call is deliberate. `scrollIntoView` has just
|
|
11
|
+
* placed the section where we want it; letting focus scroll again fights that
|
|
12
|
+
* and lands the viewport somewhere neither call intended.
|
|
13
|
+
*/
|
|
14
|
+
export function focusUploadControl(container) {
|
|
15
|
+
if (!container)
|
|
16
|
+
return;
|
|
17
|
+
container.scrollIntoView({ behavior: "smooth", block: "center" });
|
|
18
|
+
const control = container.querySelector('button:not([disabled]), [role="button"]:not([aria-disabled="true"])');
|
|
19
|
+
control?.focus({ preventScroll: true });
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=focus-upload-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-upload-control.js","sourceRoot":"","sources":["../../src/moderation/focus-upload-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA6B;IAC9D,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,SAAS,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CACrC,qEAAqE,CACtE,CAAC;IACF,OAAO,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -7,4 +7,5 @@ export { MODERATION_VERDICT_EVENT_NAME, ModerationVerdictEventSchema, moderation
|
|
|
7
7
|
export { GIVE_UP_AFTER_MS, SLOW_AFTER_MS, ModerationVerdictProvider, useModerationCheckControls, useModerationRecorder, useModerationSubjectState, type ModerationCheckControls, type ModerationSubjectState, } from "./moderation-store.js";
|
|
8
8
|
export { DEFAULT_POLL_INITIAL_DELAY_MS, DEFAULT_POLL_MAX_ATTEMPTS, DEFAULT_POLL_MAX_DELAY_MS, pollDurableVerdict, type DurablePollOptions, } from "./moderation-durable-read.js";
|
|
9
9
|
export { useModerationOperation, type ModerationOperationState, type ModerationPersistedOutcome, type ModerationPersistedRead, type UseModerationOperationOptions, } from "./moderation-operation.js";
|
|
10
|
+
export { focusUploadControl } from "./focus-upload-control.js";
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/moderation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,GACnC,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/moderation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,GACnC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/moderation/index.js
CHANGED
|
@@ -7,4 +7,5 @@ export { MODERATION_VERDICT_EVENT_NAME, ModerationVerdictEventSchema, moderation
|
|
|
7
7
|
export { GIVE_UP_AFTER_MS, SLOW_AFTER_MS, ModerationVerdictProvider, useModerationCheckControls, useModerationRecorder, useModerationSubjectState, } from "./moderation-store.js";
|
|
8
8
|
export { DEFAULT_POLL_INITIAL_DELAY_MS, DEFAULT_POLL_MAX_ATTEMPTS, DEFAULT_POLL_MAX_DELAY_MS, pollDurableVerdict, } from "./moderation-durable-read.js";
|
|
9
9
|
export { useModerationOperation, } from "./moderation-operation.js";
|
|
10
|
+
export { focusUploadControl } from "./focus-upload-control.js";
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/moderation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACd,eAAe,GAKhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,GAG1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,GAEnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,GAKvB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/moderation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACd,eAAe,GAKhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,GAG1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,GAEnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,GAKvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CEL-2127: the app-shell moderation scope, lifted from producer's
|
|
3
|
+
* `ModerationScope` + `ModerationVerdictBridge` so producer and importer stop
|
|
4
|
+
* duplicating it.
|
|
5
|
+
*
|
|
6
|
+
* Two layers: `<ModerationVerdictProvider>` is the read model every surface
|
|
7
|
+
* rendering a moderation chip needs; the bridge is the single subscriber for
|
|
8
|
+
* `moderation.verdict` events of ONE org, and renders nothing without an org
|
|
9
|
+
* or an Ably client (`useChannel` throws without one, and apps mount the shell
|
|
10
|
+
* before auth resolves). A 5-minute `rewind` on the `<ChannelProvider>` buys
|
|
11
|
+
* back verdicts that landed between an upload and a remount; it is a backfill,
|
|
12
|
+
* not a cold-load recovery mechanism (surfaces fall back to the durable read).
|
|
13
|
+
*
|
|
14
|
+
* ONE subscription per org, however many scopes mount (two scopes with their
|
|
15
|
+
* own stores would otherwise each open the same channel): scopes register
|
|
16
|
+
* their recorder in a module-level registry, the first registered scope owns
|
|
17
|
+
* the channel, and each verdict is fanned out to every registered recorder.
|
|
18
|
+
* Ownership passes to the next scope when the owner unmounts (the rewind window
|
|
19
|
+
* backfills what landed in between).
|
|
20
|
+
*
|
|
21
|
+
* Separate entry (`@cellarnode/ui/moderation/scope`) so the plain moderation
|
|
22
|
+
* barrel stays free of the `ably` import.
|
|
23
|
+
*/
|
|
24
|
+
import { type ReactElement, type ReactNode } from "react";
|
|
25
|
+
export interface ModerationScopeProps {
|
|
26
|
+
/** The org whose verdict channel to subscribe to. Null/empty: provider only, no subscription. */
|
|
27
|
+
readonly orgId: string | null | undefined;
|
|
28
|
+
readonly children: ReactNode;
|
|
29
|
+
}
|
|
30
|
+
export declare function ModerationScope({ orgId, children }: ModerationScopeProps): ReactElement;
|
|
31
|
+
//# sourceMappingURL=moderation-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moderation-scope.d.ts","sourceRoot":"","sources":["../../src/moderation/moderation-scope.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,MAAM,WAAW,oBAAoB;IACnC,iGAAiG;IACjG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,oBAAoB,GAAG,YAAY,CAOvF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* CEL-2127: the app-shell moderation scope, lifted from producer's
|
|
4
|
+
* `ModerationScope` + `ModerationVerdictBridge` so producer and importer stop
|
|
5
|
+
* duplicating it.
|
|
6
|
+
*
|
|
7
|
+
* Two layers: `<ModerationVerdictProvider>` is the read model every surface
|
|
8
|
+
* rendering a moderation chip needs; the bridge is the single subscriber for
|
|
9
|
+
* `moderation.verdict` events of ONE org, and renders nothing without an org
|
|
10
|
+
* or an Ably client (`useChannel` throws without one, and apps mount the shell
|
|
11
|
+
* before auth resolves). A 5-minute `rewind` on the `<ChannelProvider>` buys
|
|
12
|
+
* back verdicts that landed between an upload and a remount; it is a backfill,
|
|
13
|
+
* not a cold-load recovery mechanism (surfaces fall back to the durable read).
|
|
14
|
+
*
|
|
15
|
+
* ONE subscription per org, however many scopes mount (two scopes with their
|
|
16
|
+
* own stores would otherwise each open the same channel): scopes register
|
|
17
|
+
* their recorder in a module-level registry, the first registered scope owns
|
|
18
|
+
* the channel, and each verdict is fanned out to every registered recorder.
|
|
19
|
+
* Ownership passes to the next scope when the owner unmounts (the rewind window
|
|
20
|
+
* backfills what landed in between).
|
|
21
|
+
*
|
|
22
|
+
* Separate entry (`@cellarnode/ui/moderation/scope`) so the plain moderation
|
|
23
|
+
* barrel stays free of the `ably` import.
|
|
24
|
+
*/
|
|
25
|
+
import { use, useCallback, useEffect, useId, useSyncExternalStore, } from "react";
|
|
26
|
+
import { AblyContext, ChannelProvider } from "ably/react";
|
|
27
|
+
import { useAblyChannel } from "../realtime/use-ably-channel.js";
|
|
28
|
+
import { MODERATION_VERDICT_EVENT_NAME, ModerationVerdictEventSchema, moderationChannelName, } from "./moderation-event.js";
|
|
29
|
+
import { ModerationVerdictProvider, useModerationRecorder } from "./moderation-store.js";
|
|
30
|
+
const REWIND_WINDOW = "5m";
|
|
31
|
+
export function ModerationScope({ orgId, children }) {
|
|
32
|
+
return (_jsxs(ModerationVerdictProvider, { children: [_jsx(ModerationVerdictBridge, { orgId: orgId }), children] }));
|
|
33
|
+
}
|
|
34
|
+
const registry = new Map();
|
|
35
|
+
const registryListeners = new Set();
|
|
36
|
+
function subscribeRegistry(listener) {
|
|
37
|
+
registryListeners.add(listener);
|
|
38
|
+
return () => registryListeners.delete(listener);
|
|
39
|
+
}
|
|
40
|
+
function emitRegistryChange() {
|
|
41
|
+
for (const listener of registryListeners)
|
|
42
|
+
listener();
|
|
43
|
+
}
|
|
44
|
+
function registerRecorder(orgId, registration) {
|
|
45
|
+
registry.set(orgId, [...(registry.get(orgId) ?? []), registration]);
|
|
46
|
+
emitRegistryChange();
|
|
47
|
+
return () => {
|
|
48
|
+
const remaining = (registry.get(orgId) ?? []).filter((entry) => entry !== registration);
|
|
49
|
+
if (remaining.length > 0)
|
|
50
|
+
registry.set(orgId, remaining);
|
|
51
|
+
else
|
|
52
|
+
registry.delete(orgId);
|
|
53
|
+
emitRegistryChange();
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function ownerToken(orgId) {
|
|
57
|
+
return orgId ? (registry.get(orgId)?.[0]?.token ?? null) : null;
|
|
58
|
+
}
|
|
59
|
+
function ModerationVerdictBridge({ orgId, }) {
|
|
60
|
+
const ctx = use(AblyContext);
|
|
61
|
+
const record = useModerationRecorder();
|
|
62
|
+
const token = useId();
|
|
63
|
+
const hasAblyClient = Boolean(ctx?.default?.client);
|
|
64
|
+
// Both gates are load-bearing: ChannelProvider needs a non-empty name, useChannel a client.
|
|
65
|
+
const eligible = Boolean(orgId) && hasAblyClient && record !== null;
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (!eligible || !orgId || !record)
|
|
68
|
+
return;
|
|
69
|
+
return registerRecorder(orgId, { token, record });
|
|
70
|
+
}, [eligible, orgId, record, token]);
|
|
71
|
+
const owner = useSyncExternalStore(subscribeRegistry, () => ownerToken(orgId), () => null);
|
|
72
|
+
if (!eligible || !orgId || owner !== token)
|
|
73
|
+
return null;
|
|
74
|
+
return (_jsx(ChannelProvider
|
|
75
|
+
// Fresh mount on org rotation; without the key the channel-name change
|
|
76
|
+
// mutates the provider's internal map in place and accumulates stale entries.
|
|
77
|
+
, { channelName: moderationChannelName(orgId), options: { params: { rewind: REWIND_WINDOW } }, children: _jsx(ModerationVerdictHookMount, { orgId: orgId }) }, orgId));
|
|
78
|
+
}
|
|
79
|
+
function ModerationVerdictHookMount({ orgId }) {
|
|
80
|
+
const onMessage = useCallback(
|
|
81
|
+
// `data` is optional on Ably's `Message`; a name-filtered subscribe still
|
|
82
|
+
// has to survive a message that carries none.
|
|
83
|
+
(msg) => {
|
|
84
|
+
const parsed = ModerationVerdictEventSchema.safeParse(msg.data);
|
|
85
|
+
if (!parsed.success) {
|
|
86
|
+
console.error("[moderation-verdict] dropped malformed verdict event", {
|
|
87
|
+
issues: parsed.error.issues,
|
|
88
|
+
});
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Defense in depth: the channel name is the tenant boundary, this second
|
|
92
|
+
// check keeps a misconfigured capability from showing another org's verdict.
|
|
93
|
+
if (parsed.data.orgId !== orgId) {
|
|
94
|
+
console.warn("[moderation-verdict] dropped cross-org verdict", {
|
|
95
|
+
eventOrg: parsed.data.orgId,
|
|
96
|
+
currentOrgId: orgId,
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
for (const entry of registry.get(orgId) ?? [])
|
|
101
|
+
entry.record(parsed.data);
|
|
102
|
+
}, [orgId]);
|
|
103
|
+
useAblyChannel(moderationChannelName(orgId), {
|
|
104
|
+
event: MODERATION_VERDICT_EVENT_NAME,
|
|
105
|
+
subscribe: onMessage,
|
|
106
|
+
});
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=moderation-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moderation-scope.js","sourceRoot":"","sources":["../../src/moderation/moderation-scope.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cellarnode/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.190.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"packageManager": "pnpm@10.28.2+sha512.41872f037ad22f7348e3b1debbaf7e867cfd448f2726d9cf74c08f19507c31d2c8e7a11525b983febc2df640b5438dee6023ebb1f84ed43cc2d654d2bc326264",
|
|
@@ -143,6 +143,10 @@
|
|
|
143
143
|
"types": "./dist/moderation/notice.d.ts",
|
|
144
144
|
"default": "./dist/moderation/notice.js"
|
|
145
145
|
},
|
|
146
|
+
"./moderation/scope": {
|
|
147
|
+
"types": "./dist/moderation/moderation-scope.d.ts",
|
|
148
|
+
"default": "./dist/moderation/moderation-scope.js"
|
|
149
|
+
},
|
|
146
150
|
"./realtime/organisation-events": {
|
|
147
151
|
"types": "./dist/realtime/organisation-events/index.d.ts",
|
|
148
152
|
"default": "./dist/realtime/organisation-events/index.js"
|