@cellarnode/ui 0.15.1 → 0.16.3
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/components/confirmation/beverage-comparison-modal.d.ts +66 -0
- package/dist/components/confirmation/beverage-comparison-modal.d.ts.map +1 -0
- package/dist/components/confirmation/beverage-comparison-modal.js +64 -0
- package/dist/components/confirmation/beverage-comparison-modal.js.map +1 -0
- package/dist/components/confirmation/beverage-comparison-modal.stories.d.ts +32 -0
- package/dist/components/confirmation/beverage-comparison-modal.stories.d.ts.map +1 -0
- package/dist/components/confirmation/beverage-comparison-modal.stories.js +160 -0
- package/dist/components/confirmation/beverage-comparison-modal.stories.js.map +1 -0
- package/dist/components/confirmation/confirmation-card.d.ts +77 -0
- package/dist/components/confirmation/confirmation-card.d.ts.map +1 -0
- package/dist/components/confirmation/confirmation-card.js +78 -0
- package/dist/components/confirmation/confirmation-card.js.map +1 -0
- package/dist/components/confirmation/confirmation-card.stories.d.ts +32 -0
- package/dist/components/confirmation/confirmation-card.stories.d.ts.map +1 -0
- package/dist/components/confirmation/confirmation-card.stories.js +138 -0
- package/dist/components/confirmation/confirmation-card.stories.js.map +1 -0
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.d.ts +51 -0
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.d.ts.map +1 -0
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.js +59 -0
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.js.map +1 -0
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.stories.d.ts +29 -0
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.stories.d.ts.map +1 -0
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.stories.js +99 -0
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.stories.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** Beverage shape used for side-by-side comparison. Only producer-vocabulary fields. */
|
|
2
|
+
export interface ComparisonBeverage {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
producer?: string | null;
|
|
6
|
+
category?: string | null;
|
|
7
|
+
region?: string | null;
|
|
8
|
+
country?: string | null;
|
|
9
|
+
}
|
|
10
|
+
/** Variant shape — subset of fields producers care about in the side panel. */
|
|
11
|
+
export interface ComparisonVariant {
|
|
12
|
+
id: string;
|
|
13
|
+
vintage?: string | number | null;
|
|
14
|
+
packaging?: string | null;
|
|
15
|
+
volume?: string | number | null;
|
|
16
|
+
abv?: string | number | null;
|
|
17
|
+
certifications?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface ComparisonLLMVerdict {
|
|
20
|
+
/** 0–1 confidence score; displayed as a percentage. */
|
|
21
|
+
confidence: number;
|
|
22
|
+
/** Short plain-English explanation (≤200 chars ideal). */
|
|
23
|
+
explanation: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A blocking field — used to highlight rows in amber when the merge is
|
|
27
|
+
* blocked on a field-level incompatibility (409 `field_incompatibility`).
|
|
28
|
+
*
|
|
29
|
+
* `path` is a dotted locator; the modal matches it against well-known field
|
|
30
|
+
* keys on each side (`name`, `producer`, `category`, `region`, `country`).
|
|
31
|
+
*/
|
|
32
|
+
export interface ComparisonBlockingField {
|
|
33
|
+
path: string;
|
|
34
|
+
valueA?: unknown;
|
|
35
|
+
valueB?: unknown;
|
|
36
|
+
}
|
|
37
|
+
export interface BeverageComparisonModalProps {
|
|
38
|
+
open: boolean;
|
|
39
|
+
beverageA: ComparisonBeverage;
|
|
40
|
+
variantsA: ComparisonVariant[];
|
|
41
|
+
beverageB: ComparisonBeverage;
|
|
42
|
+
variantsB: ComparisonVariant[];
|
|
43
|
+
llmVerdict: ComparisonLLMVerdict;
|
|
44
|
+
/** When present, specified field rows are tinted amber. */
|
|
45
|
+
blockingFields?: ComparisonBlockingField[];
|
|
46
|
+
onKeepDetailsFromA: () => void;
|
|
47
|
+
onKeepDetailsFromB: () => void;
|
|
48
|
+
onDismiss: () => void;
|
|
49
|
+
/** Fired on Escape or backdrop click. */
|
|
50
|
+
onClose: () => void;
|
|
51
|
+
loading?: boolean;
|
|
52
|
+
t: (key: string, opts?: Record<string, unknown>) => string;
|
|
53
|
+
className?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Side-by-side producer-facing comparison modal.
|
|
57
|
+
*
|
|
58
|
+
* Spec (SP2 §3):
|
|
59
|
+
* - Radix Dialog, Escape → `onClose`.
|
|
60
|
+
* - Producer vocabulary — "Keep details from {{name}}", NEVER "Merge A → B".
|
|
61
|
+
* - `blockingFields` rows render in amber to support 409 conflict resolution.
|
|
62
|
+
* - LLM verdict panel reads: "AI is {{confidence}}% sure these are the same,
|
|
63
|
+
* because {{short-explanation}}".
|
|
64
|
+
*/
|
|
65
|
+
export declare function BeverageComparisonModal(props: BeverageComparisonModalProps): import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
//# sourceMappingURL=beverage-comparison-modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beverage-comparison-modal.d.ts","sourceRoot":"","sources":["../../../src/components/confirmation/beverage-comparison-modal.tsx"],"names":[],"mappings":"AAIA,wFAAwF;AACxF,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,kBAAkB,CAAC;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,UAAU,EAAE,oBAAoB,CAAC;IACjC,2DAA2D;IAC3D,cAAc,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC3C,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,2CAiN1E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as Dialog from "@radix-ui/react-dialog";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
|
+
const COMPARABLE_KEYS = ["name", "producer", "category", "region", "country"];
|
|
6
|
+
/**
|
|
7
|
+
* Side-by-side producer-facing comparison modal.
|
|
8
|
+
*
|
|
9
|
+
* Spec (SP2 §3):
|
|
10
|
+
* - Radix Dialog, Escape → `onClose`.
|
|
11
|
+
* - Producer vocabulary — "Keep details from {{name}}", NEVER "Merge A → B".
|
|
12
|
+
* - `blockingFields` rows render in amber to support 409 conflict resolution.
|
|
13
|
+
* - LLM verdict panel reads: "AI is {{confidence}}% sure these are the same,
|
|
14
|
+
* because {{short-explanation}}".
|
|
15
|
+
*/
|
|
16
|
+
export function BeverageComparisonModal(props) {
|
|
17
|
+
const { open, beverageA, variantsA, beverageB, variantsB, llmVerdict, blockingFields = [], onKeepDetailsFromA, onKeepDetailsFromB, onDismiss, onClose, loading = false, t, className, } = props;
|
|
18
|
+
const titleId = React.useId();
|
|
19
|
+
const blockingKeys = React.useMemo(() => {
|
|
20
|
+
const set = new Set();
|
|
21
|
+
for (const bf of blockingFields) {
|
|
22
|
+
// Accept both `producer` and `beverage.producer` shapes defensively.
|
|
23
|
+
const [firstSegment, secondSegment] = bf.path.split(".");
|
|
24
|
+
const key = secondSegment ?? firstSegment ?? "";
|
|
25
|
+
if (COMPARABLE_KEYS.includes(key)) {
|
|
26
|
+
set.add(key);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return set;
|
|
30
|
+
}, [blockingFields]);
|
|
31
|
+
const confidencePct = Math.round(llmVerdict.confidence * 100);
|
|
32
|
+
const rowLabel = (key) => {
|
|
33
|
+
switch (key) {
|
|
34
|
+
case "name":
|
|
35
|
+
return t("comparison.field.name");
|
|
36
|
+
case "producer":
|
|
37
|
+
return t("comparison.field.producer");
|
|
38
|
+
case "category":
|
|
39
|
+
return t("comparison.field.category");
|
|
40
|
+
case "region":
|
|
41
|
+
return t("comparison.field.region");
|
|
42
|
+
case "country":
|
|
43
|
+
return t("comparison.field.country");
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
return (_jsx(Dialog.Root, { open: open, onOpenChange: (nextOpen) => {
|
|
47
|
+
if (!nextOpen && !loading)
|
|
48
|
+
onClose();
|
|
49
|
+
}, children: _jsxs(Dialog.Portal, { children: [_jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-foreground/20 backdrop-blur-xs" }), _jsxs(Dialog.Content, { "aria-labelledby": titleId, className: cn("fixed left-1/2 top-1/2 z-50 max-h-[90vh] w-[calc(100%-2rem)] max-w-3xl -translate-x-1/2 -translate-y-1/2 overflow-y-auto", "rounded-2xl border border-border bg-card p-6 text-card-foreground shadow-xl", className), children: [_jsx(Dialog.Title, { id: titleId, className: "text-base/6 font-semibold text-foreground", children: t("comparison.title") }), _jsxs("section", { "aria-label": t("comparison.verdict.aria_label"), className: cn("mt-4 rounded-lg border p-4 text-sm", confidencePct >= 80
|
|
50
|
+
? "border-emerald-300 bg-emerald-50 text-emerald-950 dark:border-emerald-800 dark:bg-emerald-950/40 dark:text-emerald-100"
|
|
51
|
+
: confidencePct >= 50
|
|
52
|
+
? "border-amber-300 bg-amber-50 text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100"
|
|
53
|
+
: "border-border bg-muted/30 text-foreground"), children: [_jsx("p", { className: "font-medium", children: t("comparison.verdict.headline", { confidence: confidencePct }) }), _jsx("p", { className: "mt-1 text-sm opacity-90", children: llmVerdict.explanation })] }), _jsx("div", { className: "mt-4 overflow-hidden rounded-lg border border-border", children: _jsxs("table", { className: "w-full border-collapse text-sm", children: [_jsx("thead", { className: "bg-muted/40 text-left text-xs uppercase tracking-wide text-muted-foreground", children: _jsxs("tr", { children: [_jsx("th", { scope: "col", className: "px-3 py-2 font-medium", children: t("comparison.header.field") }), _jsx("th", { scope: "col", className: "px-3 py-2 font-medium text-foreground", children: beverageA.name }), _jsx("th", { scope: "col", className: "px-3 py-2 font-medium text-foreground", children: beverageB.name })] }) }), _jsx("tbody", { children: COMPARABLE_KEYS.map((key) => {
|
|
54
|
+
const isBlocking = blockingKeys.has(key);
|
|
55
|
+
const aValue = beverageA[key] ?? "—";
|
|
56
|
+
const bValue = beverageB[key] ?? "—";
|
|
57
|
+
return (_jsxs("tr", { className: cn("border-t border-border", isBlocking &&
|
|
58
|
+
"bg-amber-50 dark:bg-amber-950/30"), children: [_jsxs("th", { scope: "row", className: "px-3 py-2 text-left text-xs font-medium text-muted-foreground", children: [rowLabel(key), isBlocking && (_jsx("span", { className: "ml-2 text-amber-800 dark:text-amber-300", children: t("comparison.blocking_marker") }))] }), _jsx("td", { className: "px-3 py-2 text-foreground", children: String(aValue) }), _jsx("td", { className: "px-3 py-2 text-foreground", children: String(bValue) })] }, key));
|
|
59
|
+
}) })] }) }), _jsxs("div", { className: "mt-4 grid gap-4 md:grid-cols-2", children: [_jsx(VariantsList, { title: t("comparison.variants.title", { name: beverageA.name }), variants: variantsA, t: t }), _jsx(VariantsList, { title: t("comparison.variants.title", { name: beverageB.name }), variants: variantsB, t: t })] }), _jsxs("div", { className: "mt-6 flex flex-wrap justify-end gap-2", children: [_jsx("button", { type: "button", disabled: loading, onClick: onDismiss, className: cn("rounded-md px-4 py-2 text-sm font-medium text-muted-foreground", "hover:bg-muted/50 hover:text-foreground", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", "disabled:cursor-not-allowed disabled:opacity-60"), children: t("comparison.action.dismiss") }), _jsx("button", { type: "button", disabled: loading, onClick: onKeepDetailsFromB, className: cn("rounded-md border border-border bg-background px-4 py-2 text-sm font-semibold text-foreground", "hover:bg-muted/50", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", "disabled:cursor-not-allowed disabled:opacity-60"), children: t("comparison.action.keep_from", { name: beverageB.name }) }), _jsx("button", { type: "button", disabled: loading, onClick: onKeepDetailsFromA, className: cn("rounded-md bg-primary px-4 py-2 text-sm font-semibold text-primary-foreground", "hover:bg-primary/90", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", "disabled:cursor-not-allowed disabled:opacity-60"), children: t("comparison.action.keep_from", { name: beverageA.name }) })] }), _jsx(Dialog.Close, { "aria-label": t("comparison.action.close"), className: cn("absolute right-4 top-4 text-muted-foreground hover:text-foreground", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50"), children: "\u00D7" })] })] }) }));
|
|
60
|
+
}
|
|
61
|
+
function VariantsList({ title, variants, t, }) {
|
|
62
|
+
return (_jsxs("div", { className: "rounded-lg border border-border bg-background/30 p-3", children: [_jsx("h4", { className: "text-sm font-semibold text-foreground", children: title }), variants.length === 0 ? (_jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: t("comparison.variants.empty") })) : (_jsx("ul", { className: "mt-2 flex flex-col gap-2", children: variants.map((v) => (_jsxs("li", { className: "rounded border border-border/60 bg-card p-2 text-xs text-foreground", children: [_jsxs("div", { className: "flex flex-wrap gap-x-3 gap-y-1", children: [v.vintage != null && (_jsxs("span", { children: [_jsxs("span", { className: "text-muted-foreground", children: [t("comparison.variants.vintage"), ":"] }), " ", String(v.vintage)] })), v.packaging && (_jsxs("span", { children: [_jsxs("span", { className: "text-muted-foreground", children: [t("comparison.variants.packaging"), ":"] }), " ", v.packaging] })), v.volume != null && (_jsxs("span", { children: [_jsxs("span", { className: "text-muted-foreground", children: [t("comparison.variants.volume"), ":"] }), " ", String(v.volume)] })), v.abv != null && (_jsxs("span", { children: [_jsxs("span", { className: "text-muted-foreground", children: [t("comparison.variants.abv"), ":"] }), " ", String(v.abv)] }))] }), v.certifications && v.certifications.length > 0 && (_jsx("div", { className: "mt-1 flex flex-wrap gap-1", children: v.certifications.map((c) => (_jsx("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] text-muted-foreground", children: c }, c))) }))] }, v.id))) }))] }));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=beverage-comparison-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beverage-comparison-modal.js","sourceRoot":"","sources":["../../../src/components/confirmation/beverage-comparison-modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { BeverageComparisonModal } from "./beverage-comparison-modal";
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof BeverageComparisonModal;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
a11y: {
|
|
9
|
+
test: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
argTypes: {
|
|
13
|
+
onKeepDetailsFromA: {
|
|
14
|
+
action: string;
|
|
15
|
+
};
|
|
16
|
+
onKeepDetailsFromB: {
|
|
17
|
+
action: string;
|
|
18
|
+
};
|
|
19
|
+
onDismiss: {
|
|
20
|
+
action: string;
|
|
21
|
+
};
|
|
22
|
+
onClose: {
|
|
23
|
+
action: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export default meta;
|
|
28
|
+
type Story = StoryObj<typeof meta>;
|
|
29
|
+
export declare const CleanCompare: Story;
|
|
30
|
+
export declare const WithBlockingFields: Story;
|
|
31
|
+
export declare const LowConfidenceVerdict: Story;
|
|
32
|
+
//# sourceMappingURL=beverage-comparison-modal.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beverage-comparison-modal.stories.d.ts","sourceRoot":"","sources":["../../../src/components/confirmation/beverage-comparison-modal.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAyFtE,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;CAWsC,CAAC;AAEjD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,YAAY,EAAE,KAkB1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAqBhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAyBlC,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { BeverageComparisonModal } from "./beverage-comparison-modal";
|
|
2
|
+
const noop = () => { };
|
|
3
|
+
const t = (key, opts) => {
|
|
4
|
+
switch (key) {
|
|
5
|
+
case "comparison.title":
|
|
6
|
+
return "Side-by-side comparison";
|
|
7
|
+
case "comparison.verdict.aria_label":
|
|
8
|
+
return "AI verdict";
|
|
9
|
+
case "comparison.verdict.headline":
|
|
10
|
+
return `AI is ${opts?.confidence}% sure these are the same, because`;
|
|
11
|
+
case "comparison.header.field":
|
|
12
|
+
return "Field";
|
|
13
|
+
case "comparison.field.name":
|
|
14
|
+
return "Name";
|
|
15
|
+
case "comparison.field.producer":
|
|
16
|
+
return "Producer";
|
|
17
|
+
case "comparison.field.category":
|
|
18
|
+
return "Category";
|
|
19
|
+
case "comparison.field.region":
|
|
20
|
+
return "Region";
|
|
21
|
+
case "comparison.field.country":
|
|
22
|
+
return "Country";
|
|
23
|
+
case "comparison.blocking_marker":
|
|
24
|
+
return "(blocking)";
|
|
25
|
+
case "comparison.variants.title":
|
|
26
|
+
return `${opts?.name} — variants`;
|
|
27
|
+
case "comparison.variants.empty":
|
|
28
|
+
return "No variants listed.";
|
|
29
|
+
case "comparison.variants.vintage":
|
|
30
|
+
return "Vintage";
|
|
31
|
+
case "comparison.variants.packaging":
|
|
32
|
+
return "Packaging";
|
|
33
|
+
case "comparison.variants.volume":
|
|
34
|
+
return "Volume";
|
|
35
|
+
case "comparison.variants.abv":
|
|
36
|
+
return "ABV";
|
|
37
|
+
case "comparison.action.keep_from":
|
|
38
|
+
return `Keep details from ${opts?.name}`;
|
|
39
|
+
case "comparison.action.dismiss":
|
|
40
|
+
return "Keep separate";
|
|
41
|
+
case "comparison.action.close":
|
|
42
|
+
return "Close";
|
|
43
|
+
default:
|
|
44
|
+
return key;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const beverageA = {
|
|
48
|
+
id: "bev-a",
|
|
49
|
+
name: "Château Margaux 2018",
|
|
50
|
+
producer: "Château Margaux",
|
|
51
|
+
category: "Wine",
|
|
52
|
+
region: "Margaux",
|
|
53
|
+
country: "France",
|
|
54
|
+
};
|
|
55
|
+
const beverageB = {
|
|
56
|
+
id: "bev-b",
|
|
57
|
+
name: "Chateau Margaux 2018",
|
|
58
|
+
producer: "Chateau Margaux",
|
|
59
|
+
category: "Wine",
|
|
60
|
+
region: "Margaux",
|
|
61
|
+
country: "France",
|
|
62
|
+
};
|
|
63
|
+
const variantsA = [
|
|
64
|
+
{
|
|
65
|
+
id: "v-a1",
|
|
66
|
+
vintage: 2018,
|
|
67
|
+
packaging: "Bottle",
|
|
68
|
+
volume: "750ml",
|
|
69
|
+
abv: "13.5%",
|
|
70
|
+
certifications: ["Organic"],
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
const variantsB = [
|
|
74
|
+
{
|
|
75
|
+
id: "v-b1",
|
|
76
|
+
vintage: 2018,
|
|
77
|
+
packaging: "Bottle",
|
|
78
|
+
volume: "750ml",
|
|
79
|
+
abv: "13.5%",
|
|
80
|
+
certifications: [],
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
const meta = {
|
|
84
|
+
title: "Confirmation/BeverageComparisonModal",
|
|
85
|
+
component: BeverageComparisonModal,
|
|
86
|
+
tags: ["autodocs"],
|
|
87
|
+
parameters: { a11y: { test: "error" } },
|
|
88
|
+
argTypes: {
|
|
89
|
+
onKeepDetailsFromA: { action: "keep-from-a" },
|
|
90
|
+
onKeepDetailsFromB: { action: "keep-from-b" },
|
|
91
|
+
onDismiss: { action: "dismiss" },
|
|
92
|
+
onClose: { action: "close" },
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
export default meta;
|
|
96
|
+
export const CleanCompare = {
|
|
97
|
+
args: {
|
|
98
|
+
open: true,
|
|
99
|
+
beverageA,
|
|
100
|
+
variantsA,
|
|
101
|
+
beverageB,
|
|
102
|
+
variantsB,
|
|
103
|
+
llmVerdict: {
|
|
104
|
+
confidence: 0.92,
|
|
105
|
+
explanation: "Both records share identical producer, vintage, and region; only the spelling of 'Château' differs.",
|
|
106
|
+
},
|
|
107
|
+
onKeepDetailsFromA: noop,
|
|
108
|
+
onKeepDetailsFromB: noop,
|
|
109
|
+
onDismiss: noop,
|
|
110
|
+
onClose: noop,
|
|
111
|
+
t,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
export const WithBlockingFields = {
|
|
115
|
+
args: {
|
|
116
|
+
open: true,
|
|
117
|
+
beverageA,
|
|
118
|
+
variantsA,
|
|
119
|
+
beverageB: { ...beverageB, region: "Médoc", country: "France" },
|
|
120
|
+
variantsB,
|
|
121
|
+
llmVerdict: {
|
|
122
|
+
confidence: 0.62,
|
|
123
|
+
explanation: "Similar names and producer, but region metadata conflicts between Margaux and Médoc.",
|
|
124
|
+
},
|
|
125
|
+
blockingFields: [
|
|
126
|
+
{ path: "region", valueA: "Margaux", valueB: "Médoc" },
|
|
127
|
+
],
|
|
128
|
+
onKeepDetailsFromA: noop,
|
|
129
|
+
onKeepDetailsFromB: noop,
|
|
130
|
+
onDismiss: noop,
|
|
131
|
+
onClose: noop,
|
|
132
|
+
t,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
export const LowConfidenceVerdict = {
|
|
136
|
+
args: {
|
|
137
|
+
open: true,
|
|
138
|
+
beverageA,
|
|
139
|
+
variantsA,
|
|
140
|
+
beverageB: {
|
|
141
|
+
id: "bev-x",
|
|
142
|
+
name: "Château Palmer 2018",
|
|
143
|
+
producer: "Château Palmer",
|
|
144
|
+
category: "Wine",
|
|
145
|
+
region: "Margaux",
|
|
146
|
+
country: "France",
|
|
147
|
+
},
|
|
148
|
+
variantsB,
|
|
149
|
+
llmVerdict: {
|
|
150
|
+
confidence: 0.35,
|
|
151
|
+
explanation: "Shared region and vintage, but the producers and names differ substantially.",
|
|
152
|
+
},
|
|
153
|
+
onKeepDetailsFromA: noop,
|
|
154
|
+
onKeepDetailsFromB: noop,
|
|
155
|
+
onDismiss: noop,
|
|
156
|
+
onClose: noop,
|
|
157
|
+
t,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=beverage-comparison-modal.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beverage-comparison-modal.stories.js","sourceRoot":"","sources":["../../../src/components/confirmation/beverage-comparison-modal.stories.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Beverage summary used inside a ConfirmationCard pair. Only the fields
|
|
4
|
+
* needed for the producer-facing copy are required.
|
|
5
|
+
*/
|
|
6
|
+
export interface ConfirmationCardBeverage {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
/** Vintage label shown in the vintage-variants headline variant. */
|
|
10
|
+
vintage?: string | null;
|
|
11
|
+
/** Field count used for the inline hint and fallback direction decision. */
|
|
12
|
+
fieldCount?: number | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The pair produced by the potential-duplicates detection pipeline. Carries
|
|
16
|
+
* the two beverage summaries plus the LLM's suggested merge direction.
|
|
17
|
+
*
|
|
18
|
+
* `llmMergeDirection` is one of:
|
|
19
|
+
* - `"a_to_b"` — LLM suggests keeping details from `a` (i.e. `a` absorbs `b`).
|
|
20
|
+
* - `"b_to_a"` — LLM suggests keeping details from `b`.
|
|
21
|
+
* - `null` — no LLM recommendation; UI falls back to the beverage with
|
|
22
|
+
* the higher `fieldCount`.
|
|
23
|
+
*/
|
|
24
|
+
export interface ConfirmationCardPair {
|
|
25
|
+
id: string;
|
|
26
|
+
a: ConfirmationCardBeverage;
|
|
27
|
+
b: ConfirmationCardBeverage;
|
|
28
|
+
/** Optional shared "base" name used when the two differ only by vintage. */
|
|
29
|
+
baseName?: string | null;
|
|
30
|
+
llmMergeDirection: "a_to_b" | "b_to_a" | null;
|
|
31
|
+
}
|
|
32
|
+
export interface ConfirmationCardProps {
|
|
33
|
+
pair: ConfirmationCardPair;
|
|
34
|
+
/**
|
|
35
|
+
* Initial `keepDetailsFromId`. When omitted, the card computes a default
|
|
36
|
+
* from `llmMergeDirection`; when that is null, it falls back to whichever
|
|
37
|
+
* beverage has the higher `fieldCount`.
|
|
38
|
+
*/
|
|
39
|
+
defaultKeepDetailsFromId?: string;
|
|
40
|
+
/** Producer clicked "Yes · keep details from …". */
|
|
41
|
+
onConfirm: (input: {
|
|
42
|
+
pairId: string;
|
|
43
|
+
keepDetailsFromId: string;
|
|
44
|
+
}) => void;
|
|
45
|
+
/** Producer clicked "No, keep separate". */
|
|
46
|
+
onDismiss: (pairId: string) => void;
|
|
47
|
+
/** Producer clicked "Show comparison". */
|
|
48
|
+
onShowComparison: (pairId: string) => void;
|
|
49
|
+
/** When true: mutation in flight — buttons/dropdown disabled, label swaps. */
|
|
50
|
+
loading?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Optional inline error shown below the actions (e.g. the 409
|
|
53
|
+
* "Can't auto-confirm — some fields don't line up" case). The caller is
|
|
54
|
+
* responsible for composing the localised copy.
|
|
55
|
+
*/
|
|
56
|
+
inlineError?: React.ReactNode;
|
|
57
|
+
/** i18n lookup — producer-dashboard passes react-i18next's `t`. */
|
|
58
|
+
t: (key: string, opts?: Record<string, unknown>) => string;
|
|
59
|
+
className?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Producer-facing "Looks like the same product" card. Presented in
|
|
63
|
+
* `/imports/confirmations` and inline on `JobDetailPage`. Wraps the vocabulary
|
|
64
|
+
* contract from SP2 spec §3 — callers only pass a `t` lookup and the
|
|
65
|
+
* structured pair; copy is resolved via the provided i18n function.
|
|
66
|
+
*
|
|
67
|
+
* Accessibility contract (from SP2 spec §3):
|
|
68
|
+
* - Focus starts on the primary "Confirm" button on mount.
|
|
69
|
+
* - Tab order: Confirm → direction dropdown → Dismiss → Show comparison.
|
|
70
|
+
* - `Enter` on a focused button triggers that action.
|
|
71
|
+
* - `Escape` blurs out of the card (never dismisses — producer action only).
|
|
72
|
+
* - Direction changes announce via an `aria-live="polite"` region.
|
|
73
|
+
* - Loading disables all interactive elements; Confirm label swaps to
|
|
74
|
+
* `confirmation.card.confirm_loading` ("Joining records…").
|
|
75
|
+
*/
|
|
76
|
+
export declare function ConfirmationCard(props: ConfirmationCardProps): import("react/jsx-runtime").JSX.Element;
|
|
77
|
+
//# sourceMappingURL=confirmation-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmation-card.d.ts","sourceRoot":"","sources":["../../../src/components/confirmation/confirmation-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,wBAAwB,CAAC;IAC5B,CAAC,EAAE,wBAAwB,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,oBAAoB,CAAC;IAC3B;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oDAAoD;IACpD,SAAS,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1E,4CAA4C;IAC5C,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,0CAA0C;IAC1C,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,mEAAmE;IACnE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAuL5D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
|
+
function pickDefaultKeepFromId(pair) {
|
|
5
|
+
if (pair.llmMergeDirection === "a_to_b")
|
|
6
|
+
return pair.a.id;
|
|
7
|
+
if (pair.llmMergeDirection === "b_to_a")
|
|
8
|
+
return pair.b.id;
|
|
9
|
+
const aCount = pair.a.fieldCount ?? 0;
|
|
10
|
+
const bCount = pair.b.fieldCount ?? 0;
|
|
11
|
+
return aCount >= bCount ? pair.a.id : pair.b.id;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Producer-facing "Looks like the same product" card. Presented in
|
|
15
|
+
* `/imports/confirmations` and inline on `JobDetailPage`. Wraps the vocabulary
|
|
16
|
+
* contract from SP2 spec §3 — callers only pass a `t` lookup and the
|
|
17
|
+
* structured pair; copy is resolved via the provided i18n function.
|
|
18
|
+
*
|
|
19
|
+
* Accessibility contract (from SP2 spec §3):
|
|
20
|
+
* - Focus starts on the primary "Confirm" button on mount.
|
|
21
|
+
* - Tab order: Confirm → direction dropdown → Dismiss → Show comparison.
|
|
22
|
+
* - `Enter` on a focused button triggers that action.
|
|
23
|
+
* - `Escape` blurs out of the card (never dismisses — producer action only).
|
|
24
|
+
* - Direction changes announce via an `aria-live="polite"` region.
|
|
25
|
+
* - Loading disables all interactive elements; Confirm label swaps to
|
|
26
|
+
* `confirmation.card.confirm_loading` ("Joining records…").
|
|
27
|
+
*/
|
|
28
|
+
export function ConfirmationCard(props) {
|
|
29
|
+
const { pair, defaultKeepDetailsFromId, onConfirm, onDismiss, onShowComparison, loading = false, inlineError, t, className, } = props;
|
|
30
|
+
const [keepFromId, setKeepFromId] = React.useState(() => defaultKeepDetailsFromId ?? pickDefaultKeepFromId(pair));
|
|
31
|
+
const confirmButtonRef = React.useRef(null);
|
|
32
|
+
const headlineId = React.useId();
|
|
33
|
+
const helperId = React.useId();
|
|
34
|
+
const liveRegionId = React.useId();
|
|
35
|
+
// Focus primary action on mount.
|
|
36
|
+
React.useEffect(() => {
|
|
37
|
+
confirmButtonRef.current?.focus();
|
|
38
|
+
}, []);
|
|
39
|
+
const isVintageVariant = Boolean(pair.baseName &&
|
|
40
|
+
pair.a.vintage &&
|
|
41
|
+
pair.b.vintage &&
|
|
42
|
+
pair.a.vintage !== pair.b.vintage);
|
|
43
|
+
const headline = isVintageVariant
|
|
44
|
+
? t("confirmation.card.headline_vintages", {
|
|
45
|
+
name_base: pair.baseName,
|
|
46
|
+
vintage_a: pair.a.vintage,
|
|
47
|
+
vintage_b: pair.b.vintage,
|
|
48
|
+
})
|
|
49
|
+
: t("confirmation.card.headline_same_vintage", {
|
|
50
|
+
name_a: pair.a.name,
|
|
51
|
+
name_b: pair.b.name,
|
|
52
|
+
});
|
|
53
|
+
const keptBeverage = keepFromId === pair.a.id ? pair.a : pair.b;
|
|
54
|
+
const fieldCountHint = t("confirmation.card.field_count_hint", {
|
|
55
|
+
name_a: pair.a.name,
|
|
56
|
+
count_a: pair.a.fieldCount ?? 0,
|
|
57
|
+
name_b: pair.b.name,
|
|
58
|
+
count_b: pair.b.fieldCount ?? 0,
|
|
59
|
+
});
|
|
60
|
+
const liveAnnouncement = t("confirmation.card.direction_announce", {
|
|
61
|
+
name: keptBeverage.name,
|
|
62
|
+
});
|
|
63
|
+
const handleKeyDown = (e) => {
|
|
64
|
+
if (e.key === "Escape") {
|
|
65
|
+
// Escape blurs out of the card (never dismisses).
|
|
66
|
+
if (document.activeElement instanceof HTMLElement) {
|
|
67
|
+
document.activeElement.blur();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const handleDropdownChange = (next) => {
|
|
72
|
+
setKeepFromId(next);
|
|
73
|
+
};
|
|
74
|
+
return (_jsxs("section", { role: "group", "aria-labelledby": headlineId, "aria-describedby": helperId, onKeyDown: handleKeyDown, className: cn("rounded-xl border border-border bg-card p-5 text-card-foreground shadow-sm", "focus-within:border-primary/40", className), children: [_jsx("h3", { id: headlineId, className: "text-base/6 font-semibold text-foreground", children: headline }), _jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: t("confirmation.card.subhead") }), _jsx("div", { id: liveRegionId, "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: liveAnnouncement }), _jsx("p", { id: helperId, className: "mt-3 text-xs text-muted-foreground", children: fieldCountHint }), _jsxs("div", { className: "mt-4 flex flex-wrap items-center gap-3", children: [_jsx("button", { ref: confirmButtonRef, type: "button", disabled: loading, onClick: () => onConfirm({ pairId: pair.id, keepDetailsFromId: keepFromId }), className: cn("inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-semibold text-primary-foreground", "hover:bg-primary/90", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-card", "disabled:cursor-not-allowed disabled:opacity-60"), children: loading
|
|
75
|
+
? t("confirmation.card.confirm_loading")
|
|
76
|
+
: t("confirmation.card.confirm_prefix", { name: keptBeverage.name }) }), _jsxs("label", { className: "flex items-center gap-2 text-sm text-foreground", children: [_jsx("span", { className: "sr-only", children: t("confirmation.card.direction_label") }), _jsxs("select", { "aria-describedby": helperId, disabled: loading, value: keepFromId, onChange: (e) => handleDropdownChange(e.target.value), className: cn("rounded-md border border-border bg-background px-2 py-1.5 text-sm text-foreground", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", "disabled:cursor-not-allowed disabled:opacity-60"), children: [_jsx("option", { value: pair.a.id, children: pair.a.name }), _jsx("option", { value: pair.b.id, children: pair.b.name })] })] }), _jsx("button", { type: "button", disabled: loading, onClick: () => onDismiss(pair.id), className: cn("rounded-lg border border-border bg-background px-4 py-2 text-sm font-semibold text-foreground", "hover:bg-muted/50", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-card", "disabled:cursor-not-allowed disabled:opacity-60"), children: t("confirmation.card.dismiss") }), _jsx("button", { type: "button", disabled: loading, onClick: () => onShowComparison(pair.id), className: cn("rounded-md px-3 py-2 text-sm font-medium text-primary underline-offset-4 hover:underline", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-card", "disabled:cursor-not-allowed disabled:opacity-60"), children: t("confirmation.card.show_comparison") })] }), inlineError && (_jsx("div", { role: "alert", className: cn("mt-4 rounded-lg border border-amber-300 bg-amber-50 p-3 text-sm text-amber-950", "dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100"), children: inlineError }))] }));
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=confirmation-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmation-card.js","sourceRoot":"","sources":["../../../src/components/confirmation/confirmation-card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { ConfirmationCard } from "./confirmation-card";
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof ConfirmationCard;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
a11y: {
|
|
9
|
+
test: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
argTypes: {
|
|
13
|
+
onConfirm: {
|
|
14
|
+
action: string;
|
|
15
|
+
};
|
|
16
|
+
onDismiss: {
|
|
17
|
+
action: string;
|
|
18
|
+
};
|
|
19
|
+
onShowComparison: {
|
|
20
|
+
action: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export default meta;
|
|
25
|
+
type Story = StoryObj<typeof meta>;
|
|
26
|
+
export declare const SameVintageMatch: Story;
|
|
27
|
+
export declare const VintageVariants: Story;
|
|
28
|
+
export declare const LLMDefaultDirection: Story;
|
|
29
|
+
export declare const NullLLMFallbackByFieldCount: Story;
|
|
30
|
+
export declare const Loading: Story;
|
|
31
|
+
export declare const InlineConflictError: Story;
|
|
32
|
+
//# sourceMappingURL=confirmation-card.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmation-card.stories.d.ts","sourceRoot":"","sources":["../../../src/components/confirmation/confirmation-card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAoCvD,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;CAU+B,CAAC;AAE1C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,gBAAgB,EAAE,KAc9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAc7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KAcjC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,KAczC,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAerB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { ConfirmationCard } from "./confirmation-card";
|
|
2
|
+
const noop = () => { };
|
|
3
|
+
/**
|
|
4
|
+
* Minimal i18n shim that mirrors the producer-dashboard keys used by the
|
|
5
|
+
* component. In real usage react-i18next's `t` fills the placeholders from
|
|
6
|
+
* `public/locales/en/imports.json`.
|
|
7
|
+
*/
|
|
8
|
+
const t = (key, opts) => {
|
|
9
|
+
switch (key) {
|
|
10
|
+
case "confirmation.card.headline_same_vintage":
|
|
11
|
+
return `We found a near-match: ${opts?.name_a} and ${opts?.name_b}.`;
|
|
12
|
+
case "confirmation.card.headline_vintages":
|
|
13
|
+
return `We found ${opts?.name_base} in two vintages — ${opts?.vintage_a} and ${opts?.vintage_b}.`;
|
|
14
|
+
case "confirmation.card.subhead":
|
|
15
|
+
return "Are they the same product?";
|
|
16
|
+
case "confirmation.card.field_count_hint":
|
|
17
|
+
return `${opts?.name_a} has ${opts?.count_a} fields · ${opts?.name_b} has ${opts?.count_b} fields`;
|
|
18
|
+
case "confirmation.card.direction_announce":
|
|
19
|
+
return `Keep details from ${opts?.name}`;
|
|
20
|
+
case "confirmation.card.direction_label":
|
|
21
|
+
return "Keep details from";
|
|
22
|
+
case "confirmation.card.confirm_prefix":
|
|
23
|
+
return `Yes · keep details from ${opts?.name}`;
|
|
24
|
+
case "confirmation.card.confirm_loading":
|
|
25
|
+
return "Joining records…";
|
|
26
|
+
case "confirmation.card.dismiss":
|
|
27
|
+
return "No, keep separate";
|
|
28
|
+
case "confirmation.card.show_comparison":
|
|
29
|
+
return "Show comparison";
|
|
30
|
+
default:
|
|
31
|
+
return key;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const meta = {
|
|
35
|
+
title: "Confirmation/ConfirmationCard",
|
|
36
|
+
component: ConfirmationCard,
|
|
37
|
+
tags: ["autodocs"],
|
|
38
|
+
parameters: { a11y: { test: "error" } },
|
|
39
|
+
argTypes: {
|
|
40
|
+
onConfirm: { action: "confirm" },
|
|
41
|
+
onDismiss: { action: "dismiss" },
|
|
42
|
+
onShowComparison: { action: "show-comparison" },
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export default meta;
|
|
46
|
+
export const SameVintageMatch = {
|
|
47
|
+
args: {
|
|
48
|
+
pair: {
|
|
49
|
+
id: "pair-1",
|
|
50
|
+
a: { id: "bev-a", name: "Château Margaux 2018", fieldCount: 12 },
|
|
51
|
+
b: { id: "bev-b", name: "Chateau Margaux 2018", fieldCount: 8 },
|
|
52
|
+
baseName: null,
|
|
53
|
+
llmMergeDirection: "a_to_b",
|
|
54
|
+
},
|
|
55
|
+
onConfirm: noop,
|
|
56
|
+
onDismiss: noop,
|
|
57
|
+
onShowComparison: noop,
|
|
58
|
+
t,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
export const VintageVariants = {
|
|
62
|
+
args: {
|
|
63
|
+
pair: {
|
|
64
|
+
id: "pair-2",
|
|
65
|
+
a: { id: "bev-a", name: "Opus One 2018", vintage: "2018", fieldCount: 10 },
|
|
66
|
+
b: { id: "bev-b", name: "Opus One 2019", vintage: "2019", fieldCount: 10 },
|
|
67
|
+
baseName: "Opus One",
|
|
68
|
+
llmMergeDirection: "a_to_b",
|
|
69
|
+
},
|
|
70
|
+
onConfirm: noop,
|
|
71
|
+
onDismiss: noop,
|
|
72
|
+
onShowComparison: noop,
|
|
73
|
+
t,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
export const LLMDefaultDirection = {
|
|
77
|
+
args: {
|
|
78
|
+
pair: {
|
|
79
|
+
id: "pair-3",
|
|
80
|
+
a: { id: "bev-a", name: "Penfolds Grange 2017", fieldCount: 6 },
|
|
81
|
+
b: { id: "bev-b", name: "Penfolds Grange 2017 Bin 95", fieldCount: 14 },
|
|
82
|
+
baseName: null,
|
|
83
|
+
llmMergeDirection: "b_to_a",
|
|
84
|
+
},
|
|
85
|
+
onConfirm: noop,
|
|
86
|
+
onDismiss: noop,
|
|
87
|
+
onShowComparison: noop,
|
|
88
|
+
t,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
export const NullLLMFallbackByFieldCount = {
|
|
92
|
+
args: {
|
|
93
|
+
pair: {
|
|
94
|
+
id: "pair-4",
|
|
95
|
+
a: { id: "bev-a", name: "Cloudy Bay Sauvignon Blanc", fieldCount: 14 },
|
|
96
|
+
b: { id: "bev-b", name: "Cloudy Bay Sauv Blanc", fieldCount: 4 },
|
|
97
|
+
baseName: null,
|
|
98
|
+
llmMergeDirection: null,
|
|
99
|
+
},
|
|
100
|
+
onConfirm: noop,
|
|
101
|
+
onDismiss: noop,
|
|
102
|
+
onShowComparison: noop,
|
|
103
|
+
t,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
export const Loading = {
|
|
107
|
+
args: {
|
|
108
|
+
pair: {
|
|
109
|
+
id: "pair-5",
|
|
110
|
+
a: { id: "bev-a", name: "Sassicaia 2016", fieldCount: 12 },
|
|
111
|
+
b: { id: "bev-b", name: "Sassicaia '16", fieldCount: 7 },
|
|
112
|
+
baseName: null,
|
|
113
|
+
llmMergeDirection: "a_to_b",
|
|
114
|
+
},
|
|
115
|
+
loading: true,
|
|
116
|
+
onConfirm: noop,
|
|
117
|
+
onDismiss: noop,
|
|
118
|
+
onShowComparison: noop,
|
|
119
|
+
t,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
export const InlineConflictError = {
|
|
123
|
+
args: {
|
|
124
|
+
pair: {
|
|
125
|
+
id: "pair-6",
|
|
126
|
+
a: { id: "bev-a", name: "Krug Grande Cuvée", fieldCount: 11 },
|
|
127
|
+
b: { id: "bev-b", name: "Krug Grande Cuvee 170th", fieldCount: 11 },
|
|
128
|
+
baseName: null,
|
|
129
|
+
llmMergeDirection: "a_to_b",
|
|
130
|
+
},
|
|
131
|
+
inlineError: "Can't auto-confirm — some fields don't line up. Show comparison to resolve by hand.",
|
|
132
|
+
onConfirm: noop,
|
|
133
|
+
onDismiss: noop,
|
|
134
|
+
onShowComparison: noop,
|
|
135
|
+
t,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=confirmation-card.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmation-card.stories.js","sourceRoot":"","sources":["../../../src/components/confirmation/confirmation-card.stories.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface PortfolioCounter {
|
|
2
|
+
portfolioId: string;
|
|
3
|
+
portfolioName: string;
|
|
4
|
+
count: number;
|
|
5
|
+
}
|
|
6
|
+
export interface CrossPortfolioOverlap {
|
|
7
|
+
overlapPct: number;
|
|
8
|
+
totalProducts: number;
|
|
9
|
+
nonTargetMatchedProductCount: number;
|
|
10
|
+
}
|
|
11
|
+
export interface PortfolioRef {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CrossPortfolioNudgeSheetProps {
|
|
16
|
+
/** Visibility — controlled by the caller. */
|
|
17
|
+
open: boolean;
|
|
18
|
+
/** Detected overlap metrics. */
|
|
19
|
+
overlap: CrossPortfolioOverlap;
|
|
20
|
+
/** Sorted desc by `count`. When `length > 1` the sheet exposes an expandable list. */
|
|
21
|
+
countersByPortfolio: PortfolioCounter[];
|
|
22
|
+
/** The portfolio the producer picked during upload. */
|
|
23
|
+
targetPortfolio: PortfolioRef;
|
|
24
|
+
/** The portfolio with the highest overlap; may be null when countersByPortfolio is empty. */
|
|
25
|
+
suggestedPortfolio: PortfolioRef | null;
|
|
26
|
+
/** Producer clicked "Continue to {{target}}". */
|
|
27
|
+
onProceed: () => void;
|
|
28
|
+
/** Producer clicked "Switch to {{suggested}}". */
|
|
29
|
+
onSwitchTarget: () => void;
|
|
30
|
+
/** Producer cancelled (Escape, backdrop-click-to-cancel, or explicit button). */
|
|
31
|
+
onCancel: () => void;
|
|
32
|
+
/** Disables all buttons while a resume-nudge mutation is in flight. */
|
|
33
|
+
loading?: boolean;
|
|
34
|
+
/** i18n lookup — producer-dashboard passes react-i18next's `t`. */
|
|
35
|
+
t: (key: string, opts?: Record<string, unknown>) => string;
|
|
36
|
+
className?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Cross-portfolio nudge modal shown after the classify phase of the beverage
|
|
40
|
+
* extraction workflow when ≥70% of detected products already live in another
|
|
41
|
+
* portfolio.
|
|
42
|
+
*
|
|
43
|
+
* Spec (SP2 §3):
|
|
44
|
+
* - Radix Dialog with `role="dialog"` + `aria-modal="true"` + focus trap
|
|
45
|
+
* - Focus starts on "Continue to {{target}}" (safe default — preserves producer intent)
|
|
46
|
+
* - Escape → `onCancel`
|
|
47
|
+
* - When `countersByPortfolio.length > 1` the sheet includes an expandable
|
|
48
|
+
* "View all portfolios" list.
|
|
49
|
+
*/
|
|
50
|
+
export declare function CrossPortfolioNudgeSheet(props: CrossPortfolioNudgeSheetProps): import("react/jsx-runtime").JSX.Element;
|
|
51
|
+
//# sourceMappingURL=cross-portfolio-nudge-sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-portfolio-nudge-sheet.d.ts","sourceRoot":"","sources":["../../../src/components/confirmation/cross-portfolio-nudge-sheet.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,6BAA6B;IAC5C,6CAA6C;IAC7C,IAAI,EAAE,OAAO,CAAC;IACd,gCAAgC;IAChC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,sFAAsF;IACtF,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IACxC,uDAAuD;IACvD,eAAe,EAAE,YAAY,CAAC;IAC9B,6FAA6F;IAC7F,kBAAkB,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,iDAAiD;IACjD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,kDAAkD;IAClD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,2CA4K5E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as Dialog from "@radix-ui/react-dialog";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
|
+
/**
|
|
6
|
+
* Cross-portfolio nudge modal shown after the classify phase of the beverage
|
|
7
|
+
* extraction workflow when ≥70% of detected products already live in another
|
|
8
|
+
* portfolio.
|
|
9
|
+
*
|
|
10
|
+
* Spec (SP2 §3):
|
|
11
|
+
* - Radix Dialog with `role="dialog"` + `aria-modal="true"` + focus trap
|
|
12
|
+
* - Focus starts on "Continue to {{target}}" (safe default — preserves producer intent)
|
|
13
|
+
* - Escape → `onCancel`
|
|
14
|
+
* - When `countersByPortfolio.length > 1` the sheet includes an expandable
|
|
15
|
+
* "View all portfolios" list.
|
|
16
|
+
*/
|
|
17
|
+
export function CrossPortfolioNudgeSheet(props) {
|
|
18
|
+
const { open, overlap, countersByPortfolio, targetPortfolio, suggestedPortfolio, onProceed, onSwitchTarget, onCancel, loading = false, t, className, } = props;
|
|
19
|
+
const titleId = React.useId();
|
|
20
|
+
const descriptionId = React.useId();
|
|
21
|
+
const proceedButtonRef = React.useRef(null);
|
|
22
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
23
|
+
const hasMultiple = countersByPortfolio.length > 1;
|
|
24
|
+
const topSuggested = suggestedPortfolio ?? countersByPortfolio[0]
|
|
25
|
+
? {
|
|
26
|
+
id: suggestedPortfolio?.id ?? countersByPortfolio[0].portfolioId,
|
|
27
|
+
name: suggestedPortfolio?.name ?? countersByPortfolio[0].portfolioName,
|
|
28
|
+
}
|
|
29
|
+
: null;
|
|
30
|
+
const suggestedCount = countersByPortfolio.find((c) => c.portfolioId === topSuggested?.id)?.count ??
|
|
31
|
+
countersByPortfolio[0]?.count ??
|
|
32
|
+
0;
|
|
33
|
+
const headline = hasMultiple
|
|
34
|
+
? t("confirmation.nudge.headline_multi", {
|
|
35
|
+
nonTargetMatched: overlap.nonTargetMatchedProductCount,
|
|
36
|
+
total: overlap.totalProducts,
|
|
37
|
+
suggestedPortfolioName: topSuggested?.name ?? "",
|
|
38
|
+
suggestedCount,
|
|
39
|
+
})
|
|
40
|
+
: t("confirmation.nudge.headline_single", {
|
|
41
|
+
nonTargetMatched: overlap.nonTargetMatchedProductCount,
|
|
42
|
+
total: overlap.totalProducts,
|
|
43
|
+
suggestedPortfolioName: topSuggested?.name ?? "",
|
|
44
|
+
});
|
|
45
|
+
return (_jsx(Dialog.Root, { open: open, onOpenChange: (nextOpen) => {
|
|
46
|
+
if (!nextOpen && !loading)
|
|
47
|
+
onCancel();
|
|
48
|
+
}, children: _jsxs(Dialog.Portal, { children: [_jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-foreground/20 backdrop-blur-xs" }), _jsxs(Dialog.Content, { "aria-labelledby": titleId, "aria-describedby": descriptionId, onOpenAutoFocus: (e) => {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
proceedButtonRef.current?.focus();
|
|
51
|
+
}, className: cn("fixed left-1/2 top-1/2 z-50 w-[calc(100%-2rem)] max-w-xl -translate-x-1/2 -translate-y-1/2", "rounded-2xl border border-border bg-card p-6 text-card-foreground shadow-xl", className), children: [_jsx(Dialog.Title, { id: titleId, className: "text-base/6 font-semibold text-foreground", children: t("confirmation.nudge.title") }), _jsx(Dialog.Description, { id: descriptionId, className: "mt-2 text-sm text-muted-foreground", children: headline }), hasMultiple && (_jsxs("div", { className: "mt-4 rounded-lg border border-border bg-background/50", children: [_jsxs("button", { type: "button", "aria-expanded": expanded, onClick: () => setExpanded((prev) => !prev), className: cn("flex w-full items-center justify-between px-4 py-3 text-sm font-medium text-foreground", "hover:bg-muted/40", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50"), children: [_jsx("span", { children: t("confirmation.nudge.view_all_portfolios") }), _jsx("span", { "aria-hidden": true, className: "text-muted-foreground", children: expanded ? "−" : "+" })] }), expanded && (_jsx("ul", { className: "divide-y divide-border border-t border-border", children: countersByPortfolio.map((counter) => (_jsxs("li", { className: "flex items-center justify-between px-4 py-2 text-sm", children: [_jsx("span", { className: "text-foreground", children: counter.portfolioName }), _jsx("span", { className: "text-muted-foreground", children: t("confirmation.nudge.counter", { count: counter.count }) })] }, counter.portfolioId))) }))] })), _jsxs("div", { className: "mt-6 flex flex-wrap justify-end gap-2", children: [_jsx("button", { type: "button", disabled: loading, onClick: onCancel, className: cn("rounded-md px-4 py-2 text-sm font-medium text-muted-foreground", "hover:bg-muted/50 hover:text-foreground", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", "disabled:cursor-not-allowed disabled:opacity-60"), children: t("confirmation.nudge.cancel") }), topSuggested && (_jsx("button", { type: "button", disabled: loading || !topSuggested, onClick: onSwitchTarget, className: cn("rounded-md border border-border bg-background px-4 py-2 text-sm font-semibold text-foreground", "hover:bg-muted/50", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", "disabled:cursor-not-allowed disabled:opacity-60"), children: t("confirmation.nudge.switch_target", {
|
|
52
|
+
suggestedPortfolioName: topSuggested.name,
|
|
53
|
+
}) })), _jsx("button", { ref: proceedButtonRef, type: "button", disabled: loading, onClick: onProceed, className: cn("rounded-md bg-primary px-4 py-2 text-sm font-semibold text-primary-foreground", "hover:bg-primary/90", "focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", "disabled:cursor-not-allowed disabled:opacity-60"), children: loading
|
|
54
|
+
? t("confirmation.nudge.proceed_loading")
|
|
55
|
+
: t("confirmation.nudge.proceed", {
|
|
56
|
+
targetPortfolioName: targetPortfolio.name,
|
|
57
|
+
}) })] })] })] }) }));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=cross-portfolio-nudge-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-portfolio-nudge-sheet.js","sourceRoot":"","sources":["../../../src/components/confirmation/cross-portfolio-nudge-sheet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { CrossPortfolioNudgeSheet } from "./cross-portfolio-nudge-sheet";
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof CrossPortfolioNudgeSheet;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
a11y: {
|
|
9
|
+
test: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
argTypes: {
|
|
13
|
+
onProceed: {
|
|
14
|
+
action: string;
|
|
15
|
+
};
|
|
16
|
+
onSwitchTarget: {
|
|
17
|
+
action: string;
|
|
18
|
+
};
|
|
19
|
+
onCancel: {
|
|
20
|
+
action: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export default meta;
|
|
25
|
+
type Story = StoryObj<typeof meta>;
|
|
26
|
+
export declare const SingleSuggested: Story;
|
|
27
|
+
export declare const MultiPortfolio: Story;
|
|
28
|
+
export declare const LoadingAfterAction: Story;
|
|
29
|
+
//# sourceMappingURL=cross-portfolio-nudge-sheet.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-portfolio-nudge-sheet.stories.d.ts","sourceRoot":"","sources":["../../../src/components/confirmation/cross-portfolio-nudge-sheet.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AA6BzE,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;CAUuC,CAAC;AAElD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,KAkB7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAoB5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAmBhC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { CrossPortfolioNudgeSheet } from "./cross-portfolio-nudge-sheet";
|
|
2
|
+
const noop = () => { };
|
|
3
|
+
const t = (key, opts) => {
|
|
4
|
+
switch (key) {
|
|
5
|
+
case "confirmation.nudge.title":
|
|
6
|
+
return "Heads up";
|
|
7
|
+
case "confirmation.nudge.headline_single":
|
|
8
|
+
return `${opts?.nonTargetMatched} of the ${opts?.total} products you uploaded already live in ${opts?.suggestedPortfolioName}.`;
|
|
9
|
+
case "confirmation.nudge.headline_multi":
|
|
10
|
+
return `${opts?.nonTargetMatched} of the ${opts?.total} products you uploaded already live in other portfolios — mostly ${opts?.suggestedPortfolioName} (${opts?.suggestedCount}).`;
|
|
11
|
+
case "confirmation.nudge.view_all_portfolios":
|
|
12
|
+
return "View all portfolios";
|
|
13
|
+
case "confirmation.nudge.counter":
|
|
14
|
+
return `${opts?.count} products`;
|
|
15
|
+
case "confirmation.nudge.proceed":
|
|
16
|
+
return `Continue to ${opts?.targetPortfolioName}`;
|
|
17
|
+
case "confirmation.nudge.proceed_loading":
|
|
18
|
+
return "Continuing…";
|
|
19
|
+
case "confirmation.nudge.switch_target":
|
|
20
|
+
return `Switch to ${opts?.suggestedPortfolioName}`;
|
|
21
|
+
case "confirmation.nudge.cancel":
|
|
22
|
+
return "Cancel";
|
|
23
|
+
default:
|
|
24
|
+
return key;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const meta = {
|
|
28
|
+
title: "Confirmation/CrossPortfolioNudgeSheet",
|
|
29
|
+
component: CrossPortfolioNudgeSheet,
|
|
30
|
+
tags: ["autodocs"],
|
|
31
|
+
parameters: { a11y: { test: "error" } },
|
|
32
|
+
argTypes: {
|
|
33
|
+
onProceed: { action: "proceed" },
|
|
34
|
+
onSwitchTarget: { action: "switch-target" },
|
|
35
|
+
onCancel: { action: "cancel" },
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export default meta;
|
|
39
|
+
export const SingleSuggested = {
|
|
40
|
+
args: {
|
|
41
|
+
open: true,
|
|
42
|
+
overlap: {
|
|
43
|
+
overlapPct: 0.8,
|
|
44
|
+
totalProducts: 10,
|
|
45
|
+
nonTargetMatchedProductCount: 8,
|
|
46
|
+
},
|
|
47
|
+
countersByPortfolio: [
|
|
48
|
+
{ portfolioId: "p-master", portfolioName: "Master Catalog", count: 8 },
|
|
49
|
+
],
|
|
50
|
+
targetPortfolio: { id: "p-2024", name: "2024 Summer Collection" },
|
|
51
|
+
suggestedPortfolio: { id: "p-master", name: "Master Catalog" },
|
|
52
|
+
onProceed: noop,
|
|
53
|
+
onSwitchTarget: noop,
|
|
54
|
+
onCancel: noop,
|
|
55
|
+
t,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
export const MultiPortfolio = {
|
|
59
|
+
args: {
|
|
60
|
+
open: true,
|
|
61
|
+
overlap: {
|
|
62
|
+
overlapPct: 0.75,
|
|
63
|
+
totalProducts: 12,
|
|
64
|
+
nonTargetMatchedProductCount: 9,
|
|
65
|
+
},
|
|
66
|
+
countersByPortfolio: [
|
|
67
|
+
{ portfolioId: "p-master", portfolioName: "Master Catalog", count: 5 },
|
|
68
|
+
{ portfolioId: "p-2023", portfolioName: "2023 Collection", count: 3 },
|
|
69
|
+
{ portfolioId: "p-sparkling", portfolioName: "Sparkling Only", count: 1 },
|
|
70
|
+
],
|
|
71
|
+
targetPortfolio: { id: "p-2024", name: "2024 Summer Collection" },
|
|
72
|
+
suggestedPortfolio: { id: "p-master", name: "Master Catalog" },
|
|
73
|
+
onProceed: noop,
|
|
74
|
+
onSwitchTarget: noop,
|
|
75
|
+
onCancel: noop,
|
|
76
|
+
t,
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
export const LoadingAfterAction = {
|
|
80
|
+
args: {
|
|
81
|
+
open: true,
|
|
82
|
+
overlap: {
|
|
83
|
+
overlapPct: 0.8,
|
|
84
|
+
totalProducts: 10,
|
|
85
|
+
nonTargetMatchedProductCount: 8,
|
|
86
|
+
},
|
|
87
|
+
countersByPortfolio: [
|
|
88
|
+
{ portfolioId: "p-master", portfolioName: "Master Catalog", count: 8 },
|
|
89
|
+
],
|
|
90
|
+
targetPortfolio: { id: "p-2024", name: "2024 Summer Collection" },
|
|
91
|
+
suggestedPortfolio: { id: "p-master", name: "Master Catalog" },
|
|
92
|
+
loading: true,
|
|
93
|
+
onProceed: noop,
|
|
94
|
+
onSwitchTarget: noop,
|
|
95
|
+
onCancel: noop,
|
|
96
|
+
t,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=cross-portfolio-nudge-sheet.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-portfolio-nudge-sheet.stories.js","sourceRoot":"","sources":["../../../src/components/confirmation/cross-portfolio-nudge-sheet.stories.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -109,4 +109,7 @@ export { BottleExtractionInlineProgress, type BottleExtractionInlineProgressProp
|
|
|
109
109
|
export { PreflightVerdictSheet, type PreflightVerdictSheetProps, type PreflightVerdictColor, } from "./components/preflight-verdict-sheet";
|
|
110
110
|
export { ExtractionPhaseStepper, type ExtractionPhaseStepperProps, type StepperStep, } from "./components/extraction-phase-stepper";
|
|
111
111
|
export { FlaggedFieldEditor, type FlaggedFieldEditorProps, type FlaggedFieldKind, type FlaggedFieldEditorOption, } from "./components/flagged-field-editor";
|
|
112
|
+
export * from "./components/confirmation/confirmation-card";
|
|
113
|
+
export * from "./components/confirmation/cross-portfolio-nudge-sheet";
|
|
114
|
+
export * from "./components/confirmation/beverage-comparison-modal";
|
|
112
115
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EACL,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AAGpC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,YAAY,IAAI,oBAAoB,EACpC,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,IAAI,qBAAqB,EACtC,mBAAmB,EACnB,gBAAgB,IAAI,wBAAwB,GAC7C,MAAM,uBAAuB,CAAC;AAG/B,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,KAAK,EACL,KAAK,IAAI,aAAa,EACtB,WAAW,EACX,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO5E,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,0BAA0B,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AAGpC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErF,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EAAE,YAAY,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,4BAA4B,EAC5B,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,YAAY,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpG,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,YAAY,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEpG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGrF,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,GAC1B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,YAAY,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEvG,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEzF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,YAAY,EACV,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,YAAY,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAElG,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAClH,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEhG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAI9F,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAIrI,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,8BAA8B,EAC9B,KAAK,mCAAmC,GACzC,MAAM,gDAAgD,CAAC;AAIxD,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,GAC3B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,WAAW,GACjB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,GAC9B,MAAM,mCAAmC,CAAC;AAG3C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -113,4 +113,8 @@ export { BottleExtractionInlineProgress, } from "./components/bottle-extraction-
|
|
|
113
113
|
export { PreflightVerdictSheet, } from "./components/preflight-verdict-sheet";
|
|
114
114
|
export { ExtractionPhaseStepper, } from "./components/extraction-phase-stepper";
|
|
115
115
|
export { FlaggedFieldEditor, } from "./components/flagged-field-editor";
|
|
116
|
+
// ─── Confirmation/nudge components (new in v0.16.x, SP2) ───────────────
|
|
117
|
+
export * from "./components/confirmation/confirmation-card";
|
|
118
|
+
export * from "./components/confirmation/cross-portfolio-nudge-sheet";
|
|
119
|
+
export * from "./components/confirmation/beverage-comparison-modal";
|
|
116
120
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|