@cellarnode/ui 0.13.0 → 0.14.1
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/bottle-extract-dialog.d.ts +25 -0
- package/dist/components/bottle-extract-dialog.d.ts.map +1 -0
- package/dist/components/bottle-extract-dialog.js +87 -0
- package/dist/components/bottle-extract-dialog.js.map +1 -0
- package/dist/components/bottle-extract-dialog.stories.d.ts +17 -0
- package/dist/components/bottle-extract-dialog.stories.d.ts.map +1 -0
- package/dist/components/bottle-extract-dialog.stories.js +54 -0
- package/dist/components/bottle-extract-dialog.stories.js.map +1 -0
- package/dist/components/bottle-extraction-inline-progress.d.ts +14 -0
- package/dist/components/bottle-extraction-inline-progress.d.ts.map +1 -0
- package/dist/components/bottle-extraction-inline-progress.js +28 -0
- package/dist/components/bottle-extraction-inline-progress.js.map +1 -0
- package/dist/components/bottle-extraction-inline-progress.stories.d.ts +17 -0
- package/dist/components/bottle-extraction-inline-progress.stories.d.ts.map +1 -0
- package/dist/components/bottle-extraction-inline-progress.stories.js +35 -0
- package/dist/components/bottle-extraction-inline-progress.stories.js.map +1 -0
- package/dist/components/picker-empty-guidance.js +1 -1
- package/dist/components/picker-empty-guidance.js.map +1 -1
- package/dist/components/reason-pill.d.ts.map +1 -1
- package/dist/components/reason-pill.js +5 -2
- package/dist/components/reason-pill.js.map +1 -1
- package/dist/components/score-chip.js +1 -1
- package/dist/components/score-chip.js.map +1 -1
- package/dist/components/variant-picker-dialog.d.ts +30 -2
- package/dist/components/variant-picker-dialog.d.ts.map +1 -1
- package/dist/components/variant-picker-dialog.js +31 -18
- package/dist/components/variant-picker-dialog.js.map +1 -1
- package/dist/components/variant-picker-dialog.test.d.ts +2 -0
- package/dist/components/variant-picker-dialog.test.d.ts.map +1 -0
- package/dist/components/variant-picker-dialog.test.js +140 -0
- package/dist/components/variant-picker-dialog.test.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type BottleExtractDialogContext = {
|
|
2
|
+
kind: "beverage_gallery";
|
|
3
|
+
beverageId: string;
|
|
4
|
+
beverageName: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: "variant_carousel";
|
|
7
|
+
beverageId: string;
|
|
8
|
+
variantId: string;
|
|
9
|
+
variantName: string;
|
|
10
|
+
beverageName: string;
|
|
11
|
+
};
|
|
12
|
+
export interface BottleExtractDialogProps {
|
|
13
|
+
open: boolean;
|
|
14
|
+
context: BottleExtractDialogContext;
|
|
15
|
+
onClose: () => void;
|
|
16
|
+
onSubmit: (input: {
|
|
17
|
+
file: File;
|
|
18
|
+
aiExtract: boolean;
|
|
19
|
+
makePrimary: boolean;
|
|
20
|
+
}) => Promise<void>;
|
|
21
|
+
/** i18n lookup — producer-dashboard passes react-i18next's `t` */
|
|
22
|
+
t: (key: string, opts?: Record<string, unknown>) => string;
|
|
23
|
+
}
|
|
24
|
+
export declare function BottleExtractDialog({ open, context, onClose, onSubmit, t, }: BottleExtractDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=bottle-extract-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottle-extract-dialog.d.ts","sourceRoot":"","sources":["../../src/components/bottle-extract-dialog.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,0BAA0B,GAClC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACtE;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,0BAA0B,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7F,kEAAkE;IAClE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAC5D;AAOD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,CAAC,GACF,EAAE,wBAAwB,2CAkK1B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
export function BottleExtractDialog({ open, context, onClose, onSubmit, t, }) {
|
|
6
|
+
const [file, setFile] = React.useState(null);
|
|
7
|
+
const [mode, setMode] = React.useState("extract");
|
|
8
|
+
const [makePrimary, setMakePrimary] = React.useState(false);
|
|
9
|
+
const [state, setState] = React.useState({ kind: "idle" });
|
|
10
|
+
const fileInputRef = React.useRef(null);
|
|
11
|
+
const targetName = context.kind === "beverage_gallery" ? context.beverageName : context.variantName;
|
|
12
|
+
const titleId = React.useId();
|
|
13
|
+
const validate = (f) => {
|
|
14
|
+
if (f.name.toLowerCase().endsWith(".heic") ||
|
|
15
|
+
f.type === "image/heic" ||
|
|
16
|
+
f.type === "image/heif") {
|
|
17
|
+
return t("dialog.heic_error");
|
|
18
|
+
}
|
|
19
|
+
if (f.type === "image/webp")
|
|
20
|
+
return t("dialog.webp_error");
|
|
21
|
+
if (!["image/jpeg", "image/png"].includes(f.type)) {
|
|
22
|
+
return t("dialog.heic_error");
|
|
23
|
+
}
|
|
24
|
+
if (f.size > 10 * 1024 * 1024)
|
|
25
|
+
return "File is larger than 10MB.";
|
|
26
|
+
return null;
|
|
27
|
+
};
|
|
28
|
+
const handleFileChange = (files) => {
|
|
29
|
+
if (!files || files.length === 0)
|
|
30
|
+
return;
|
|
31
|
+
const first = files[0];
|
|
32
|
+
if (!first)
|
|
33
|
+
return;
|
|
34
|
+
const err = validate(first);
|
|
35
|
+
if (err) {
|
|
36
|
+
setState({ kind: "error", message: err });
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setFile(first);
|
|
40
|
+
setState({ kind: "idle" });
|
|
41
|
+
};
|
|
42
|
+
const handleSubmit = async (e) => {
|
|
43
|
+
e.preventDefault();
|
|
44
|
+
if (!file) {
|
|
45
|
+
setState({ kind: "error", message: "Please choose a file first." });
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
setState({ kind: "submitting" });
|
|
49
|
+
try {
|
|
50
|
+
await onSubmit({
|
|
51
|
+
file,
|
|
52
|
+
aiExtract: mode === "extract",
|
|
53
|
+
makePrimary: mode === "extract" && makePrimary,
|
|
54
|
+
});
|
|
55
|
+
setFile(null);
|
|
56
|
+
setMakePrimary(false);
|
|
57
|
+
setMode("extract");
|
|
58
|
+
setState({ kind: "idle" });
|
|
59
|
+
onClose();
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
setState({ kind: "error", message: err.message });
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
return (_jsx(Dialog.Root, { open: open, onOpenChange: (nextOpen) => !nextOpen && onClose(), 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 w-[calc(100%-2rem)] max-w-lg -translate-x-1/2 -translate-y-1/2", "rounded-2xl border border-border bg-card p-6 shadow-xl"), children: [_jsx(Dialog.Title, { id: titleId, className: "text-base/6 font-semibold text-foreground", children: t("dialog.title") }), _jsxs("form", { onSubmit: handleSubmit, className: "mt-4 flex flex-col gap-4", children: [_jsx(DropZone, { ref: fileInputRef, file: file, onFileChange: handleFileChange, t: t }), _jsxs("fieldset", { className: "flex flex-col gap-2", children: [_jsx("legend", { className: "sr-only", children: "Upload mode" }), _jsxs("label", { className: "flex cursor-pointer items-start gap-3", children: [_jsx("input", { type: "radio", name: "mode", value: "as_is", checked: mode === "as_is", onChange: () => setMode("as_is"), className: "mt-1" }), _jsxs("span", { children: [_jsx("span", { className: "font-medium text-foreground", children: t("dialog.mode_as_is") }), _jsx("span", { className: "block text-sm text-muted-foreground", children: t("dialog.mode_as_is_help", { name: targetName }) })] })] }), _jsxs("label", { className: "flex cursor-pointer items-start gap-3", children: [_jsx("input", { type: "radio", name: "mode", value: "extract", checked: mode === "extract", onChange: () => setMode("extract"), className: "mt-1" }), _jsxs("span", { children: [_jsx("span", { className: "font-medium text-foreground", children: t("dialog.mode_extract") }), _jsx("span", { className: "block text-sm text-muted-foreground", children: t("dialog.mode_extract_help", { name: targetName }) })] })] })] }), mode === "extract" && (_jsxs("label", { className: "flex cursor-pointer items-center gap-2 text-foreground", children: [_jsx("input", { type: "checkbox", checked: makePrimary, onChange: (e) => setMakePrimary(e.target.checked) }), _jsx("span", { children: t("dialog.make_primary") })] })), state.kind === "error" && (_jsx("div", { role: "alert", className: "rounded-lg border border-red-300 bg-red-50 p-2 text-sm text-red-900 dark:border-red-800 dark:bg-red-950 dark:text-red-100", children: state.message })), _jsx("div", { "aria-live": "polite", className: "sr-only", children: state.kind === "submitting" ? t("dialog.uploading") : "" }), _jsxs("div", { className: "mt-2 flex justify-end gap-2", children: [_jsx("button", { type: "button", onClick: onClose, className: "rounded-md px-4 py-2 text-foreground hover:bg-muted/50 focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", children: t("dialog.cancel") }), _jsx("button", { type: "submit", disabled: !file || state.kind === "submitting", className: "rounded-md bg-emerald-600 px-4 py-2 text-white hover:bg-emerald-700 focus:outline-hidden focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-50", children: state.kind === "submitting" ? t("dialog.uploading") : t("dialog.submit") })] })] }), _jsx(Dialog.Close, { className: "absolute right-4 top-4 text-muted-foreground hover:text-foreground focus:outline-hidden focus-visible:ring-2 focus-visible:ring-primary/50", "aria-label": "Close", children: "\u00D7" })] })] }) }));
|
|
66
|
+
}
|
|
67
|
+
const DropZone = React.forwardRef(({ file, onFileChange, t }, ref) => {
|
|
68
|
+
const [hover, setHover] = React.useState(false);
|
|
69
|
+
const labelId = React.useId();
|
|
70
|
+
return (_jsxs("div", { role: "button", tabIndex: 0, "aria-labelledby": labelId, onClick: () => ref.current?.click(), onKeyDown: (e) => {
|
|
71
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
72
|
+
e.preventDefault();
|
|
73
|
+
ref.current?.click();
|
|
74
|
+
}
|
|
75
|
+
}, onDragOver: (e) => {
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
setHover(true);
|
|
78
|
+
}, onDragLeave: () => setHover(false), onDrop: (e) => {
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
setHover(false);
|
|
81
|
+
onFileChange(e.dataTransfer.files);
|
|
82
|
+
}, className: cn("cursor-pointer rounded-lg border-2 border-dashed p-6 text-center focus:outline-hidden focus-visible:ring-2 focus-visible:ring-emerald-500", hover
|
|
83
|
+
? "border-emerald-500 bg-emerald-50 dark:bg-emerald-950/30"
|
|
84
|
+
: "border-border bg-muted/20"), children: [_jsx("input", { ref: ref, type: "file", accept: "image/jpeg,image/png", className: "hidden", onChange: (e) => onFileChange(e.target.files) }), _jsx("p", { id: labelId, className: "text-sm text-foreground", children: file ? file.name : t("dialog.drop_zone") })] }));
|
|
85
|
+
});
|
|
86
|
+
DropZone.displayName = "DropZone";
|
|
87
|
+
//# sourceMappingURL=bottle-extract-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottle-extract-dialog.js","sourceRoot":"","sources":["../../src/components/bottle-extract-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { BottleExtractDialog } from "./bottle-extract-dialog";
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof BottleExtractDialog;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
a11y: {
|
|
9
|
+
test: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export default meta;
|
|
14
|
+
type Story = StoryObj<typeof meta>;
|
|
15
|
+
export declare const BeverageGallery: Story;
|
|
16
|
+
export declare const VariantCarousel: Story;
|
|
17
|
+
//# sourceMappingURL=bottle-extract-dialog.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottle-extract-dialog.stories.d.ts","sourceRoot":"","sources":["../../src/components/bottle-extract-dialog.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAsB9D,QAAA,MAAM,IAAI;;;;;;;;;CAKkC,CAAC;AAE7C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAc7B,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { BottleExtractDialog } from "./bottle-extract-dialog";
|
|
2
|
+
const t = (key, opts) => {
|
|
3
|
+
const strings = {
|
|
4
|
+
"dialog.title": "Add bottle photo",
|
|
5
|
+
"dialog.drop_zone": "Drop an image here, or click to browse (JPEG or PNG, up to 10MB)",
|
|
6
|
+
"dialog.mode_as_is": "Upload as-is",
|
|
7
|
+
"dialog.mode_as_is_help": `Add this photo to ${opts?.name}'s gallery without AI processing.`,
|
|
8
|
+
"dialog.mode_extract": "Upload + AI extract bottle",
|
|
9
|
+
"dialog.mode_extract_help": `We'll send this image to our bottle-extraction AI to isolate the bottle. Takes ~10 seconds. Result will be added to ${opts?.name}'s gallery.`,
|
|
10
|
+
"dialog.make_primary": "Make the cutout the primary photo",
|
|
11
|
+
"dialog.submit": "Upload",
|
|
12
|
+
"dialog.cancel": "Cancel",
|
|
13
|
+
"dialog.uploading": "Uploading…",
|
|
14
|
+
"dialog.heic_error": "HEIC isn't supported yet. Please convert to JPEG.",
|
|
15
|
+
"dialog.webp_error": "WebP isn't supported yet. Please convert to JPEG or PNG.",
|
|
16
|
+
};
|
|
17
|
+
return strings[key] ?? key;
|
|
18
|
+
};
|
|
19
|
+
const meta = {
|
|
20
|
+
title: "Extraction/BottleExtractDialog",
|
|
21
|
+
component: BottleExtractDialog,
|
|
22
|
+
tags: ["autodocs"],
|
|
23
|
+
parameters: { a11y: { test: "error" } },
|
|
24
|
+
};
|
|
25
|
+
export default meta;
|
|
26
|
+
export const BeverageGallery = {
|
|
27
|
+
args: {
|
|
28
|
+
open: true,
|
|
29
|
+
context: {
|
|
30
|
+
kind: "beverage_gallery",
|
|
31
|
+
beverageId: "b1",
|
|
32
|
+
beverageName: "Tenuta Sample Reserve",
|
|
33
|
+
},
|
|
34
|
+
onClose: () => { },
|
|
35
|
+
onSubmit: async () => new Promise((resolve) => setTimeout(resolve, 600)),
|
|
36
|
+
t,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
export const VariantCarousel = {
|
|
40
|
+
args: {
|
|
41
|
+
open: true,
|
|
42
|
+
context: {
|
|
43
|
+
kind: "variant_carousel",
|
|
44
|
+
beverageId: "b1",
|
|
45
|
+
variantId: "v1",
|
|
46
|
+
variantName: "Tenuta Sample Reserve 2021",
|
|
47
|
+
beverageName: "Tenuta Sample Reserve",
|
|
48
|
+
},
|
|
49
|
+
onClose: () => { },
|
|
50
|
+
onSubmit: async () => new Promise((resolve) => setTimeout(resolve, 600)),
|
|
51
|
+
t,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=bottle-extract-dialog.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottle-extract-dialog.stories.js","sourceRoot":"","sources":["../../src/components/bottle-extract-dialog.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE;IACxD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,kBAAkB,EAChB,kEAAkE;QACpE,mBAAmB,EAAE,cAAc;QACnC,wBAAwB,EAAE,qBAAqB,IAAI,EAAE,IAAI,mCAAmC;QAC5F,qBAAqB,EAAE,4BAA4B;QACnD,0BAA0B,EAAE,uHAAuH,IAAI,EAAE,IAAI,aAAa;QAC1K,qBAAqB,EAAE,mCAAmC;QAC1D,eAAe,EAAE,QAAQ;QACzB,eAAe,EAAE,QAAQ;QACzB,kBAAkB,EAAE,YAAY;QAChC,mBAAmB,EAAE,mDAAmD;QACxE,mBAAmB,EACjB,0DAA0D;KAC7D,CAAC;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,gCAAgC;IACvC,SAAS,EAAE,mBAAmB;IAC9B,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;CACG,CAAC;AAE7C,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,eAAe,GAAU;IACpC,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,IAAI,EAAE,kBAAkB;YACxB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,uBAAuB;SACtC;QACD,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxE,CAAC;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAU;IACpC,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,IAAI,EAAE,kBAAkB;YACxB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,4BAA4B;YACzC,YAAY,EAAE,uBAAuB;SACtC;QACD,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxE,CAAC;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface BottleExtractionInlineProgressProps {
|
|
2
|
+
jobId: string;
|
|
3
|
+
progress: {
|
|
4
|
+
processed: number;
|
|
5
|
+
total: number;
|
|
6
|
+
currentProductIndex?: number;
|
|
7
|
+
message?: string;
|
|
8
|
+
} | null;
|
|
9
|
+
status: "pending" | "processing" | "completed" | "failed" | "abandoned" | "awaiting_producer";
|
|
10
|
+
onCancel?: () => void;
|
|
11
|
+
t: (key: string, opts?: Record<string, unknown>) => string;
|
|
12
|
+
}
|
|
13
|
+
export declare function BottleExtractionInlineProgress(props: BottleExtractionInlineProgressProps): import("react/jsx-runtime").JSX.Element | null;
|
|
14
|
+
//# sourceMappingURL=bottle-extraction-inline-progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottle-extraction-inline-progress.d.ts","sourceRoot":"","sources":["../../src/components/bottle-extraction-inline-progress.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,mCAAmC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,mBAAmB,CAAC;IAC9F,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAC5D;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,mCAAmC,kDAmDxF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
export function BottleExtractionInlineProgress(props) {
|
|
4
|
+
const { progress, status, onCancel, t } = props;
|
|
5
|
+
const [startedAt] = React.useState(() => Date.now());
|
|
6
|
+
const [now, setNow] = React.useState(() => Date.now());
|
|
7
|
+
React.useEffect(() => {
|
|
8
|
+
if (status === "completed" || status === "failed" || status === "abandoned")
|
|
9
|
+
return;
|
|
10
|
+
const tick = setInterval(() => setNow(Date.now()), 1000);
|
|
11
|
+
return () => clearInterval(tick);
|
|
12
|
+
}, [status]);
|
|
13
|
+
const elapsedSeconds = Math.round((now - startedAt) / 1000);
|
|
14
|
+
const coldStartHint = elapsedSeconds >= 60 ? "slow_60s" : elapsedSeconds >= 20 ? "slow_20s" : null;
|
|
15
|
+
if (status === "completed")
|
|
16
|
+
return null;
|
|
17
|
+
const label = progress && progress.total > 1
|
|
18
|
+
? t("progress.running_with_counts", {
|
|
19
|
+
processed: progress.processed,
|
|
20
|
+
total: progress.total,
|
|
21
|
+
})
|
|
22
|
+
: t("progress.running");
|
|
23
|
+
return (_jsxs("div", { role: "status", "aria-live": "polite", className: "flex items-center gap-3 rounded-lg border border-emerald-200 bg-emerald-50 p-3 dark:border-emerald-800 dark:bg-emerald-950/30", children: [_jsx(Spinner, {}), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: label }), coldStartHint && (_jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: t(`progress.${coldStartHint}`) }))] }), elapsedSeconds >= 60 && onCancel && (_jsx("button", { type: "button", onClick: onCancel, className: "rounded-md text-sm text-red-600 hover:underline focus:outline-hidden focus-visible:ring-2 focus-visible:ring-red-500", children: t("progress.cancel") }))] }));
|
|
24
|
+
}
|
|
25
|
+
function Spinner() {
|
|
26
|
+
return (_jsx("span", { "aria-hidden": "true", className: "inline-block size-4 animate-spin rounded-full border-2 border-emerald-600 border-t-transparent" }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=bottle-extraction-inline-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottle-extraction-inline-progress.js","sourceRoot":"","sources":["../../src/components/bottle-extraction-inline-progress.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,MAAM,UAAU,8BAA8B,CAAC,KAA0C;IACvF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;IAChD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW;YAAE,OAAO;QACpF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,MAAM,aAAa,GACjB,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAE/E,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,KAAK,GACT,QAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC;QAC5B,CAAC,CAAC,CAAC,CAAC,8BAA8B,EAAE;YAChC,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAE5B,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,eACH,QAAQ,EAClB,SAAS,EAAC,+HAA+H,aAEzI,KAAC,OAAO,KAAG,EACX,eAAK,SAAS,EAAC,QAAQ,aACrB,YAAG,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAK,EAC7D,aAAa,IAAI,CAChB,YAAG,SAAS,EAAC,oCAAoC,YAC9C,CAAC,CAAC,YAAY,aAAa,EAAE,CAAC,GAC7B,CACL,IACG,EACL,cAAc,IAAI,EAAE,IAAI,QAAQ,IAAI,CACnC,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,sHAAsH,YAE/H,CAAC,CAAC,iBAAiB,CAAC,GACd,CACV,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,OAAO;IACd,OAAO,CACL,8BACc,MAAM,EAClB,SAAS,EAAC,gGAAgG,GAC1G,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { BottleExtractionInlineProgress } from "./bottle-extraction-inline-progress";
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof BottleExtractionInlineProgress;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
a11y: {
|
|
9
|
+
test: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export default meta;
|
|
14
|
+
type Story = StoryObj<typeof meta>;
|
|
15
|
+
export declare const SingleRunning: Story;
|
|
16
|
+
export declare const CatalogMidway: Story;
|
|
17
|
+
//# sourceMappingURL=bottle-extraction-inline-progress.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottle-extraction-inline-progress.stories.d.ts","sourceRoot":"","sources":["../../src/components/bottle-extraction-inline-progress.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAerF,QAAA,MAAM,IAAI;;;;;;;;;CAK6C,CAAC;AAExD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BottleExtractionInlineProgress } from "./bottle-extraction-inline-progress";
|
|
2
|
+
const t = (key, opts) => {
|
|
3
|
+
const strings = {
|
|
4
|
+
"progress.running": "Extracting bottle photo…",
|
|
5
|
+
"progress.running_with_counts": `Extracting bottle photo… (${opts?.processed} of ${opts?.total} processed)`,
|
|
6
|
+
"progress.slow_20s": "This is taking a moment longer than usual — we're warming up the AI service.",
|
|
7
|
+
"progress.slow_60s": "Still working — bottle extraction can take 1–2 minutes on first run.",
|
|
8
|
+
"progress.cancel": "Cancel",
|
|
9
|
+
};
|
|
10
|
+
return strings[key] ?? key;
|
|
11
|
+
};
|
|
12
|
+
const meta = {
|
|
13
|
+
title: "Extraction/BottleExtractionInlineProgress",
|
|
14
|
+
component: BottleExtractionInlineProgress,
|
|
15
|
+
tags: ["autodocs"],
|
|
16
|
+
parameters: { a11y: { test: "error" } },
|
|
17
|
+
};
|
|
18
|
+
export default meta;
|
|
19
|
+
export const SingleRunning = {
|
|
20
|
+
args: {
|
|
21
|
+
jobId: "j1",
|
|
22
|
+
status: "processing",
|
|
23
|
+
progress: { processed: 0, total: 1 },
|
|
24
|
+
t,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
export const CatalogMidway = {
|
|
28
|
+
args: {
|
|
29
|
+
jobId: "j2",
|
|
30
|
+
status: "processing",
|
|
31
|
+
progress: { processed: 4, total: 12 },
|
|
32
|
+
t,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=bottle-extraction-inline-progress.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottle-extraction-inline-progress.stories.js","sourceRoot":"","sources":["../../src/components/bottle-extraction-inline-progress.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE;IACxD,MAAM,OAAO,GAA2B;QACtC,kBAAkB,EAAE,0BAA0B;QAC9C,8BAA8B,EAAE,6BAA6B,IAAI,EAAE,SAAS,OAAO,IAAI,EAAE,KAAK,aAAa;QAC3G,mBAAmB,EACjB,8EAA8E;QAChF,mBAAmB,EACjB,sEAAsE;QACxE,iBAAiB,EAAE,QAAQ;KAC5B,CAAC;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,2CAA2C;IAClD,SAAS,EAAE,8BAA8B;IACzC,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;CACc,CAAC;AAExD,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE;QACJ,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QACpC,CAAC;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE;QACJ,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACrC,CAAC;KACF;CACF,CAAC"}
|
|
@@ -9,6 +9,6 @@ import { cn } from "../lib/utils";
|
|
|
9
9
|
export function PickerEmptyGuidance({ categoryLabel, createLabel, skipLabel = "Draft manually", body, onCreate, onSkip, className, }) {
|
|
10
10
|
const message = body
|
|
11
11
|
?? `Your portfolio has no ${categoryLabel}. To respond to this opportunity you can either add a matching product or draft the offer manually.`;
|
|
12
|
-
return (_jsxs("div", { className: cn("flex flex-col gap-2", className), children: [_jsx("div", { className: "rounded-lg border border-dashed border-warning/60 bg-warning/10 px-3 py-2.5 text-[11px]
|
|
12
|
+
return (_jsxs("div", { className: cn("flex flex-col gap-2", className), children: [_jsx("div", { className: "rounded-lg border border-dashed border-warning/60 bg-warning/10 px-3 py-2.5 text-[11px]/5 text-warning-foreground", children: message }), _jsxs("div", { className: "flex flex-col gap-2 sm:flex-row", children: [_jsxs("button", { type: "button", onClick: onCreate, className: "inline-flex flex-1 items-center justify-center gap-2 rounded-lg bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground transition-[filter] hover:brightness-110 focus:outline-none focus:ring-2 focus:ring-primary/40", children: [_jsx(Plus, { className: "size-3.5", "aria-hidden": true }), createLabel] }), _jsxs("button", { type: "button", onClick: onSkip, className: "inline-flex flex-1 items-center justify-center gap-2 rounded-lg border border-border bg-background px-4 py-2.5 text-sm font-semibold text-muted-foreground transition-colors hover:text-foreground focus:outline-none focus:ring-2 focus:ring-primary/40", children: [_jsx(ArrowRight, { className: "size-3.5", "aria-hidden": true }), skipLabel] })] })] }));
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=picker-empty-guidance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-empty-guidance.js","sourceRoot":"","sources":["../../src/components/picker-empty-guidance.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAgBlC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,aAAa,EACb,WAAW,EACX,SAAS,GAAG,gBAAgB,EAC5B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,GACgB;IACzB,MAAM,OAAO,GAAG,IAAI;WACf,yBAAyB,aAAa,qGAAqG,CAAC;IAEjJ,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aAClD,cAAK,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"picker-empty-guidance.js","sourceRoot":"","sources":["../../src/components/picker-empty-guidance.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAgBlC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,aAAa,EACb,WAAW,EACX,SAAS,GAAG,gBAAgB,EAC5B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,GACgB;IACzB,MAAM,OAAO,GAAG,IAAI;WACf,yBAAyB,aAAa,qGAAqG,CAAC;IAEjJ,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aAClD,cAAK,SAAS,EAAC,mHAAmH,YAC/H,OAAO,GACJ,EACN,eAAK,SAAS,EAAC,iCAAiC,aAC9C,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,qOAAqO,aAE/O,KAAC,IAAI,IAAC,SAAS,EAAC,UAAU,wBAAe,EACxC,WAAW,IACL,EACT,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAC,0PAA0P,aAEpQ,KAAC,UAAU,IAAC,SAAS,EAAC,UAAU,wBAAe,EAC9C,SAAS,IACH,IACL,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reason-pill.d.ts","sourceRoot":"","sources":["../../src/components/reason-pill.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEvF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"reason-pill.d.ts","sourceRoot":"","sources":["../../src/components/reason-pill.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEvF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,2CAqB7E"}
|
|
@@ -3,7 +3,7 @@ import { Check, X } from "lucide-react";
|
|
|
3
3
|
import { cn } from "../lib/utils";
|
|
4
4
|
const kindClasses = {
|
|
5
5
|
ok: "bg-primary/15 text-primary",
|
|
6
|
-
warn: "bg-
|
|
6
|
+
warn: "bg-amber-500/20 text-amber-900 dark:bg-amber-400/15 dark:text-amber-300",
|
|
7
7
|
// strike-through + muted so "miss" reads as a negative at a glance
|
|
8
8
|
miss: "bg-muted text-muted-foreground line-through",
|
|
9
9
|
};
|
|
@@ -15,6 +15,9 @@ const kindClasses = {
|
|
|
15
15
|
* has no almost-equal icon). `miss` → X icon + struck-through muted tint.
|
|
16
16
|
*/
|
|
17
17
|
export function ReasonPill({ kind, signal, label, className }) {
|
|
18
|
-
|
|
18
|
+
const ariaLabel = kind === "miss" ? `${signal} mismatch: ${label}` :
|
|
19
|
+
kind === "warn" ? `${signal} partial match: ${label}` :
|
|
20
|
+
`${signal} match: ${label}`;
|
|
21
|
+
return (_jsxs("span", { className: cn("inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-semibold leading-none", kindClasses[kind], className), "aria-label": ariaLabel, children: [kind === "ok" && _jsx(Check, { className: "size-2.5", "aria-hidden": true }), kind === "miss" && _jsx(X, { className: "size-2.5", "aria-hidden": true }), kind === "warn" && _jsx("span", { "aria-hidden": true, children: "\u2248" }), _jsx("span", { "aria-hidden": true, children: label })] }));
|
|
19
22
|
}
|
|
20
23
|
//# sourceMappingURL=reason-pill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reason-pill.js","sourceRoot":"","sources":["../../src/components/reason-pill.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAYlC,MAAM,WAAW,GAAmC;IAClD,EAAE,EAAE,4BAA4B;IAChC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"reason-pill.js","sourceRoot":"","sources":["../../src/components/reason-pill.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAYlC,MAAM,WAAW,GAAmC;IAClD,EAAE,EAAE,4BAA4B;IAChC,IAAI,EAAE,yEAAyE;IAC/E,mEAAmE;IACnE,IAAI,EAAE,6CAA6C;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAmB;IAC5E,MAAM,SAAS,GACb,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,cAAc,KAAK,EAAE,CAAC,CAAC;QAClD,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,mBAAmB,KAAK,EAAE,CAAC,CAAC;YACvD,GAAG,MAAM,WAAW,KAAK,EAAE,CAAC;IAE9B,OAAO,CACL,gBACE,SAAS,EAAE,EAAE,CACX,kGAAkG,EAClG,WAAW,CAAC,IAAI,CAAC,EACjB,SAAS,CACV,gBACW,SAAS,aAEpB,IAAI,KAAK,IAAI,IAAI,KAAC,KAAK,IAAC,SAAS,EAAC,UAAU,wBAAe,EAC3D,IAAI,KAAK,MAAM,IAAI,KAAC,CAAC,IAAC,SAAS,EAAC,UAAU,wBAAe,EACzD,IAAI,KAAK,MAAM,IAAI,yDAA0B,EAC9C,8CAAmB,KAAK,GAAQ,IAC3B,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -9,7 +9,7 @@ function deriveBand(score) {
|
|
|
9
9
|
}
|
|
10
10
|
const bandClasses = {
|
|
11
11
|
top: "bg-primary text-primary-foreground",
|
|
12
|
-
good: "bg-
|
|
12
|
+
good: "bg-amber-500/20 text-amber-900 dark:bg-amber-400/20 dark:text-amber-200",
|
|
13
13
|
weak: "bg-muted text-muted-foreground",
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score-chip.js","sourceRoot":"","sources":["../../src/components/score-chip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAYlC,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,WAAW,GAA8B;IAC7C,GAAG,EAAE,oCAAoC;IACzC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"score-chip.js","sourceRoot":"","sources":["../../src/components/score-chip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAYlC,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,WAAW,GAA8B;IAC7C,GAAG,EAAE,oCAAoC;IACzC,IAAI,EAAE,yEAAyE;IAC/E,IAAI,EAAE,gCAAgC;CACvC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAkB;IAClE,MAAM,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,2HAA2H,EAC3H,WAAW,CAAC,CAAC,CAAC,EACd,SAAS,CACV,gBACW,eAAe,OAAO,SAAS,YAE1C,OAAO,GACH,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -6,7 +6,7 @@ export interface ScoredVariantDisplay {
|
|
|
6
6
|
id: string;
|
|
7
7
|
beverageId: string;
|
|
8
8
|
beverageName: string;
|
|
9
|
-
vintage?: number |
|
|
9
|
+
vintage?: number | null;
|
|
10
10
|
packaging?: string | null;
|
|
11
11
|
containerVolume?: string | number | null;
|
|
12
12
|
category?: string | null;
|
|
@@ -30,6 +30,25 @@ export interface VariantPickerEmptyGuidance {
|
|
|
30
30
|
categoryLabel: string;
|
|
31
31
|
createLabel: string;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Copy/i18n overrides for the VariantPickerDialog. Pass a partial object via
|
|
35
|
+
* the `copy` prop; missing keys fall back to defaults. Host apps typically
|
|
36
|
+
* feed translated strings from their i18n layer.
|
|
37
|
+
*/
|
|
38
|
+
export interface VariantPickerDialogCopy {
|
|
39
|
+
title: string;
|
|
40
|
+
description: string;
|
|
41
|
+
searchPlaceholder: string;
|
|
42
|
+
goodFitsLabel: (count: number) => string;
|
|
43
|
+
otherProductsLabel: string;
|
|
44
|
+
crossCategoryLabel: string;
|
|
45
|
+
loadingLabel: string;
|
|
46
|
+
selectButton: string;
|
|
47
|
+
skipButton: string;
|
|
48
|
+
cancelButton: string;
|
|
49
|
+
closestFitTag: string;
|
|
50
|
+
differentCategoryTag: string;
|
|
51
|
+
}
|
|
33
52
|
export interface VariantPickerDialogProps {
|
|
34
53
|
open: boolean;
|
|
35
54
|
onClose: () => void;
|
|
@@ -48,8 +67,17 @@ export interface VariantPickerDialogProps {
|
|
|
48
67
|
emptyGuidance?: VariantPickerEmptyGuidance;
|
|
49
68
|
/** Pre-select a variant on mount (used for the add-product round-trip). */
|
|
50
69
|
initialSelectedId?: string | null;
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated Prefer `copy.title`. If provided, takes priority over `copy.title` for
|
|
72
|
+
* backward compatibility.
|
|
73
|
+
*/
|
|
51
74
|
title?: string;
|
|
75
|
+
/**
|
|
76
|
+
* @deprecated Prefer `copy.description`. If provided, takes priority over `copy.description`.
|
|
77
|
+
*/
|
|
52
78
|
description?: string;
|
|
79
|
+
/** Copy overrides for i18n. Missing keys fall back to English defaults. */
|
|
80
|
+
copy?: Partial<VariantPickerDialogCopy>;
|
|
53
81
|
}
|
|
54
|
-
export declare function VariantPickerDialog(props: VariantPickerDialogProps): import("react/jsx-runtime").JSX.Element
|
|
82
|
+
export declare function VariantPickerDialog(props: VariantPickerDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
55
83
|
//# sourceMappingURL=variant-picker-dialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variant-picker-dialog.d.ts","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"variant-picker-dialog.d.ts","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import * as Dialog from "@radix-ui/react-dialog";
|
|
2
3
|
import * as React from "react";
|
|
3
4
|
import { ChevronRight, Search } from "lucide-react";
|
|
4
5
|
import { cn } from "../lib/utils";
|
|
@@ -6,17 +7,37 @@ import { OpportunityBrief } from "./opportunity-brief";
|
|
|
6
7
|
import { PickerEmptyGuidance } from "./picker-empty-guidance";
|
|
7
8
|
import { ReasonPill } from "./reason-pill";
|
|
8
9
|
import { ScoreChip } from "./score-chip";
|
|
10
|
+
const DEFAULT_COPY = {
|
|
11
|
+
title: "Pick a product for this tender",
|
|
12
|
+
description: "Ranked by how well each fits the opportunity",
|
|
13
|
+
searchPlaceholder: "Search your portfolio...",
|
|
14
|
+
goodFitsLabel: (n) => `Good fits · ${n}`,
|
|
15
|
+
otherProductsLabel: "Other portfolio products",
|
|
16
|
+
crossCategoryLabel: "Cross-category",
|
|
17
|
+
loadingLabel: "Ranking your portfolio…",
|
|
18
|
+
selectButton: "Select & pre-fill",
|
|
19
|
+
skipButton: "Skip — empty draft",
|
|
20
|
+
cancelButton: "Cancel",
|
|
21
|
+
closestFitTag: "· closest fit",
|
|
22
|
+
differentCategoryTag: "· different category",
|
|
23
|
+
};
|
|
9
24
|
// ---------------------------------------------------------------------------
|
|
10
25
|
// Component
|
|
11
26
|
// ---------------------------------------------------------------------------
|
|
12
27
|
export function VariantPickerDialog(props) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
28
|
+
// Radix manages mount/unmount via `open`; we still gate the inner content so
|
|
29
|
+
// its local state resets on each open.
|
|
30
|
+
return (_jsx(Dialog.Root, { open: props.open, onOpenChange: (next) => {
|
|
31
|
+
if (!next)
|
|
32
|
+
props.onClose();
|
|
33
|
+
}, children: props.open ? _jsx(VariantPickerContent, { ...props }) : null }));
|
|
18
34
|
}
|
|
19
|
-
function VariantPickerContent({ onClose, onSelect, onCreateNew, onSkip, goodFits, crossCategory, opportunityContext, searchValue, onSearchChange, isLoading, emptyGuidance, initialSelectedId, title
|
|
35
|
+
function VariantPickerContent({ onClose, onSelect, onCreateNew, onSkip, goodFits, crossCategory, opportunityContext, searchValue, onSearchChange, isLoading, emptyGuidance, initialSelectedId, title, description, copy, }) {
|
|
36
|
+
// Merge copy overrides with defaults. Legacy `title`/`description` props
|
|
37
|
+
// take priority for backward compatibility with existing call sites.
|
|
38
|
+
const c = { ...DEFAULT_COPY, ...copy };
|
|
39
|
+
const resolvedTitle = title ?? c.title;
|
|
40
|
+
const resolvedDescription = description ?? c.description;
|
|
20
41
|
const [selectedId, setSelectedId] = React.useState(initialSelectedId ?? null);
|
|
21
42
|
// Cross-category starts expanded when there are no good fits, so producers
|
|
22
43
|
// see their portfolio without extra clicks in the empty case.
|
|
@@ -31,14 +52,6 @@ function VariantPickerContent({ onClose, onSelect, onCreateNew, onSkip, goodFits
|
|
|
31
52
|
setSelectedId(initialSelectedId);
|
|
32
53
|
}
|
|
33
54
|
}
|
|
34
|
-
const handleBackdrop = (e) => {
|
|
35
|
-
if (e.target === e.currentTarget)
|
|
36
|
-
onClose();
|
|
37
|
-
};
|
|
38
|
-
const handleKey = (e) => {
|
|
39
|
-
if (e.key === "Escape")
|
|
40
|
-
onClose();
|
|
41
|
-
};
|
|
42
55
|
const confirm = () => {
|
|
43
56
|
if (selectedId) {
|
|
44
57
|
onSelect(selectedId);
|
|
@@ -47,7 +60,7 @@ function VariantPickerContent({ onClose, onSelect, onCreateNew, onSkip, goodFits
|
|
|
47
60
|
};
|
|
48
61
|
const skip = () => (onSkip ? onSkip() : onClose());
|
|
49
62
|
const showEmptyGuidance = goodFits.length === 0 && emptyGuidance != null && onCreateNew != null;
|
|
50
|
-
return (_jsxs(
|
|
63
|
+
return (_jsxs(Dialog.Portal, { children: [_jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-foreground/20 backdrop-blur-xs" }), _jsxs(Dialog.Content, { className: cn("glass-panel fixed left-1/2 top-1/2 z-50 flex max-h-[min(36rem,85dvh)] w-[calc(100%-2rem)] max-w-lg -translate-x-1/2 -translate-y-1/2 flex-col", "rounded-2xl border border-border bg-card p-0 shadow-xl"), children: [_jsxs("div", { className: "shrink-0 px-5 pt-5 pb-3", children: [_jsx(Dialog.Title, { className: "text-base/6 font-semibold text-foreground", children: resolvedTitle }), _jsx(Dialog.Description, { className: "mt-1 text-sm/5 text-muted-foreground", children: resolvedDescription })] }), _jsx("div", { className: "px-3", children: _jsx(OpportunityBrief, { name: opportunityContext.name, buyerName: opportunityContext.buyerName ?? null, chips: opportunityContext.chips }) }), _jsx("div", { className: "px-3 pt-2", children: _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground", "aria-hidden": true }), _jsx("input", { type: "text", value: searchValue, onChange: (e) => onSearchChange(e.target.value), placeholder: c.searchPlaceholder, autoFocus: true, className: "w-full rounded-xl border border-border bg-muted/30 py-2 pl-9 pr-3 text-sm/5 text-foreground placeholder:text-muted-foreground/60 outline-none transition-colors focus:border-primary/40 focus:ring-2 focus:ring-primary/20" })] }) }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-3 pt-3 pb-1", children: isLoading ? (_jsx("div", { className: "flex flex-col items-center justify-center py-12", children: _jsx("p", { className: "text-sm/5 text-muted-foreground", children: c.loadingLabel }) })) : (_jsxs(_Fragment, { children: [_jsx(SectionLabel, { label: c.goodFitsLabel(goodFits.length), emphasis: goodFits.length > 0 }), showEmptyGuidance ? (_jsx(PickerEmptyGuidance, { categoryLabel: emptyGuidance.categoryLabel, createLabel: emptyGuidance.createLabel, onCreate: onCreateNew, onSkip: skip, className: "mt-2" })) : (_jsx("div", { className: "mt-2 flex flex-col gap-1.5", children: goodFits.map((v, i) => (_jsx(VariantRow, { variant: v, isSelected: v.id === selectedId, isTop: i === 0, onSelect: () => setSelectedId(v.id), closestFitTag: c.closestFitTag, differentCategoryTag: c.differentCategoryTag }, v.id))) })), crossCategory.length > 0 && (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => setShowCross((s) => !s), className: "mt-3 flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-[11px] font-semibold text-muted-foreground transition-colors hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-card", children: [_jsx(ChevronRight, { className: cn("size-3 transition-transform", showCross && "rotate-90"), "aria-hidden": true }), goodFits.length === 0 ? c.crossCategoryLabel : c.otherProductsLabel, _jsxs("span", { className: "ml-1", children: ["(", crossCategory.length, ")"] })] }), showCross && (_jsx("div", { className: "mt-1.5 flex flex-col gap-1.5 rounded-xl bg-muted/20 p-1.5", children: crossCategory.map((v) => (_jsx(VariantRow, { variant: v, isSelected: v.id === selectedId, isCrossCategory: true, onSelect: () => setSelectedId(v.id), closestFitTag: c.closestFitTag, differentCategoryTag: c.differentCategoryTag }, v.id))) }))] }))] })) }), _jsx("div", { className: "shrink-0 border-t border-border px-5 py-3", children: _jsxs("div", { className: "flex items-center justify-end gap-2.5", children: [showEmptyGuidance ? (_jsx("button", { type: "button", onClick: onClose, className: "rounded-xl px-4 py-2 text-sm/5 font-medium text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-card", children: c.cancelButton })) : (_jsx("button", { type: "button", onClick: skip, className: "rounded-xl px-4 py-2 text-sm/5 font-medium text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-card", children: c.skipButton })), _jsx("button", { type: "button", onClick: confirm, disabled: !selectedId, className: cn("rounded-xl bg-primary px-4 py-2 text-sm/5 font-medium text-primary-foreground transition-[filter] focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-card", selectedId ? "hover:brightness-110" : "cursor-not-allowed opacity-50"), children: c.selectButton })] }) })] })] }));
|
|
51
64
|
}
|
|
52
65
|
// ---------------------------------------------------------------------------
|
|
53
66
|
// Helpers
|
|
@@ -55,7 +68,7 @@ function VariantPickerContent({ onClose, onSelect, onCreateNew, onSkip, goodFits
|
|
|
55
68
|
function SectionLabel({ label, emphasis }) {
|
|
56
69
|
return (_jsx("p", { className: cn("text-[10px] font-bold uppercase tracking-[0.06em]", emphasis ? "text-primary" : "text-muted-foreground"), children: label }));
|
|
57
70
|
}
|
|
58
|
-
function VariantRow({ variant, isSelected, isTop, isCrossCategory, onSelect, }) {
|
|
71
|
+
function VariantRow({ variant, isSelected, isTop, isCrossCategory, onSelect, closestFitTag, differentCategoryTag, }) {
|
|
59
72
|
const meta = [
|
|
60
73
|
variant.countryOfOrigin,
|
|
61
74
|
variant.containerVolume ? `${variant.containerVolume}` : null,
|
|
@@ -64,12 +77,12 @@ function VariantRow({ variant, isSelected, isTop, isCrossCategory, onSelect, })
|
|
|
64
77
|
]
|
|
65
78
|
.filter(Boolean)
|
|
66
79
|
.join(" · ");
|
|
67
|
-
return (_jsxs("button", { type: "button", onClick: onSelect, className: cn("flex w-full items-center gap-2.5 rounded-xl border px-3 py-2.5 text-left transition-colors", isSelected
|
|
80
|
+
return (_jsxs("button", { type: "button", onClick: onSelect, "aria-pressed": isSelected, className: cn("flex w-full items-center gap-2.5 rounded-xl border px-3 py-2.5 text-left transition-colors", "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-card", isSelected
|
|
68
81
|
? "border-primary bg-primary/5"
|
|
69
82
|
: isTop
|
|
70
83
|
? "border-primary/60 shadow-[0_0_0_2px] shadow-primary/10 hover:bg-muted/30"
|
|
71
84
|
: "border-border hover:bg-muted/30"), children: [_jsx("span", { className: cn("size-3.5 shrink-0 rounded-full border-2 transition-colors", isSelected
|
|
72
85
|
? "border-primary bg-primary shadow-[inset_0_0_0_2.5px] shadow-background"
|
|
73
|
-
: "border-muted-foreground/40"), "aria-hidden": true }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("p", { className: "truncate text-[12px] font-semibold text-foreground", children: [variant.beverageName, isTop && !isCrossCategory && (_jsx("span", { className: "ml-1.5 text-[10px] font-medium text-primary", children:
|
|
86
|
+
: "border-muted-foreground/40"), "aria-hidden": true }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("p", { className: "truncate text-[12px] font-semibold text-foreground", children: [variant.beverageName, isTop && !isCrossCategory && (_jsx("span", { className: "ml-1.5 text-[10px] font-medium text-primary", children: closestFitTag })), isCrossCategory && (_jsx("span", { className: "ml-1.5 text-[10px] font-medium text-warning-foreground", children: differentCategoryTag }))] }), meta && _jsx("p", { className: "text-[10px] text-muted-foreground", children: meta }), variant.reasons.length > 0 && (_jsx("div", { className: "mt-1 flex flex-wrap gap-1", children: variant.reasons.map((r) => (_jsx(ReasonPill, { kind: r.kind, signal: r.signal, label: r.label }, `${r.kind}-${r.signal}-${r.label}`))) }))] }), _jsx(ScoreChip, { score: variant.score, band: variant.band })] }));
|
|
74
87
|
}
|
|
75
88
|
//# sourceMappingURL=variant-picker-dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variant-picker-dialog.js","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAA6B,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAA8C,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,SAAS,EAAkB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"variant-picker-dialog.js","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-picker-dialog.test.d.ts","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { describe, it, expect, vi } from "vitest";
|
|
3
|
+
import { render, screen, fireEvent } from "@testing-library/react";
|
|
4
|
+
import { VariantPickerDialog } from "./variant-picker-dialog";
|
|
5
|
+
const goodFits = [
|
|
6
|
+
{
|
|
7
|
+
id: "v1",
|
|
8
|
+
beverageId: "b1",
|
|
9
|
+
beverageName: "Solera Brandy",
|
|
10
|
+
score: 92,
|
|
11
|
+
band: "top",
|
|
12
|
+
reasons: [{ kind: "ok", signal: "subtype", label: "Brandy" }],
|
|
13
|
+
countryOfOrigin: "Spain",
|
|
14
|
+
region: null,
|
|
15
|
+
vintage: 2019,
|
|
16
|
+
packaging: "750ml bottle",
|
|
17
|
+
containerVolume: "750ml",
|
|
18
|
+
category: "spirits",
|
|
19
|
+
subtype: "brandy",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "v2",
|
|
23
|
+
beverageId: "b2",
|
|
24
|
+
beverageName: "Aguardiente",
|
|
25
|
+
score: 65,
|
|
26
|
+
band: "good",
|
|
27
|
+
reasons: [{ kind: "warn", signal: "subtype", label: "Aguardiente" }],
|
|
28
|
+
countryOfOrigin: "Portugal",
|
|
29
|
+
region: null,
|
|
30
|
+
vintage: 2021,
|
|
31
|
+
packaging: "750ml bottle",
|
|
32
|
+
containerVolume: "750ml",
|
|
33
|
+
category: "spirits",
|
|
34
|
+
subtype: "aguardiente",
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
const crossCategory = [
|
|
38
|
+
{
|
|
39
|
+
id: "v3",
|
|
40
|
+
beverageId: "b3",
|
|
41
|
+
beverageName: "Riesling 2022",
|
|
42
|
+
score: 22,
|
|
43
|
+
band: "weak",
|
|
44
|
+
reasons: [{ kind: "miss", signal: "subtype", label: "White wine" }],
|
|
45
|
+
countryOfOrigin: "Germany",
|
|
46
|
+
region: null,
|
|
47
|
+
vintage: 2022,
|
|
48
|
+
packaging: "375ml bottle",
|
|
49
|
+
containerVolume: "375ml",
|
|
50
|
+
category: "wine",
|
|
51
|
+
subtype: "white-wine",
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
const baseProps = {
|
|
55
|
+
open: true,
|
|
56
|
+
onClose: vi.fn(),
|
|
57
|
+
onSelect: vi.fn(),
|
|
58
|
+
onSkip: vi.fn(),
|
|
59
|
+
searchValue: "",
|
|
60
|
+
onSearchChange: vi.fn(),
|
|
61
|
+
opportunityContext: {
|
|
62
|
+
name: "brandy spirits · Spain Selection",
|
|
63
|
+
buyerName: "Systembolaget",
|
|
64
|
+
chips: [{ label: "Spirits" }, { label: "Brandy" }],
|
|
65
|
+
},
|
|
66
|
+
goodFits,
|
|
67
|
+
crossCategory,
|
|
68
|
+
};
|
|
69
|
+
describe("VariantPickerDialog", () => {
|
|
70
|
+
it("renders nothing when open=false", () => {
|
|
71
|
+
const { container } = render(_jsx(VariantPickerDialog, { ...baseProps, open: false }));
|
|
72
|
+
// Radix Dialog.Root still renders the root element but portal content is absent
|
|
73
|
+
expect(screen.queryByText(/Solera Brandy/)).not.toBeInTheDocument();
|
|
74
|
+
expect(screen.queryByText(/Pick a product/i)).not.toBeInTheDocument();
|
|
75
|
+
});
|
|
76
|
+
it("renders the opportunity brief and good fits when open", () => {
|
|
77
|
+
render(_jsx(VariantPickerDialog, { ...baseProps }));
|
|
78
|
+
expect(screen.getByText(/brandy spirits/)).toBeInTheDocument();
|
|
79
|
+
expect(screen.getByText(/Solera Brandy/)).toBeInTheDocument();
|
|
80
|
+
// "Aguardiente" appears in both the beverage name and the reason pill label;
|
|
81
|
+
// use getAllByText and assert at least one match is present.
|
|
82
|
+
expect(screen.getAllByText(/Aguardiente/)[0]).toBeInTheDocument();
|
|
83
|
+
});
|
|
84
|
+
it("disables 'Select & pre-fill' until a row is selected", () => {
|
|
85
|
+
render(_jsx(VariantPickerDialog, { ...baseProps }));
|
|
86
|
+
const selectBtn = screen.getByRole("button", { name: /select.*pre-fill/i });
|
|
87
|
+
expect(selectBtn).toBeDisabled();
|
|
88
|
+
});
|
|
89
|
+
it("enables 'Select & pre-fill' after clicking a variant row, and onSelect fires with that variantId on confirm", () => {
|
|
90
|
+
const onSelect = vi.fn();
|
|
91
|
+
const onClose = vi.fn();
|
|
92
|
+
render(_jsx(VariantPickerDialog, { ...baseProps, onSelect: onSelect, onClose: onClose }));
|
|
93
|
+
// Click the row button (aria-pressed=false) that contains "Solera Brandy"
|
|
94
|
+
const rows = screen.getAllByRole("button", { name: /Solera Brandy/i });
|
|
95
|
+
fireEvent.click(rows[0]);
|
|
96
|
+
const selectBtn = screen.getByRole("button", { name: /select.*pre-fill/i });
|
|
97
|
+
expect(selectBtn).not.toBeDisabled();
|
|
98
|
+
fireEvent.click(selectBtn);
|
|
99
|
+
expect(onSelect).toHaveBeenCalledWith("v1");
|
|
100
|
+
expect(onClose).toHaveBeenCalled();
|
|
101
|
+
});
|
|
102
|
+
it("'Skip — empty draft' calls onSkip", () => {
|
|
103
|
+
const onSkip = vi.fn();
|
|
104
|
+
render(_jsx(VariantPickerDialog, { ...baseProps, onSkip: onSkip }));
|
|
105
|
+
fireEvent.click(screen.getByRole("button", { name: /skip/i }));
|
|
106
|
+
expect(onSkip).toHaveBeenCalled();
|
|
107
|
+
});
|
|
108
|
+
it("renders empty-state guidance when goodFits is empty AND emptyGuidance + onCreateNew provided", () => {
|
|
109
|
+
const onCreateNew = vi.fn();
|
|
110
|
+
render(_jsx(VariantPickerDialog, { ...baseProps, goodFits: [], onCreateNew: onCreateNew, emptyGuidance: { categoryLabel: "Spirits · Brandy", createLabel: "Create a new brandy product" } }));
|
|
111
|
+
expect(screen.getByText(/Your portfolio has no Spirits · Brandy/i)).toBeInTheDocument();
|
|
112
|
+
expect(screen.getByRole("button", { name: /create a new brandy/i })).toBeInTheDocument();
|
|
113
|
+
fireEvent.click(screen.getByRole("button", { name: /create a new brandy/i }));
|
|
114
|
+
expect(onCreateNew).toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
it("footer 'Cancel' calls onClose (NOT onSkip) in empty-state mode", () => {
|
|
117
|
+
const onClose = vi.fn();
|
|
118
|
+
const onSkip = vi.fn();
|
|
119
|
+
render(_jsx(VariantPickerDialog, { ...baseProps, goodFits: [], onClose: onClose, onSkip: onSkip, onCreateNew: vi.fn(), emptyGuidance: { categoryLabel: "Spirits · Brandy", createLabel: "Create a new brandy product" } }));
|
|
120
|
+
fireEvent.click(screen.getByRole("button", { name: /^cancel$/i }));
|
|
121
|
+
expect(onClose).toHaveBeenCalled();
|
|
122
|
+
expect(onSkip).not.toHaveBeenCalled();
|
|
123
|
+
});
|
|
124
|
+
it("renders cross-category section with toggle", () => {
|
|
125
|
+
render(_jsx(VariantPickerDialog, { ...baseProps }));
|
|
126
|
+
expect(screen.getByText(/other portfolio products/i)).toBeInTheDocument();
|
|
127
|
+
});
|
|
128
|
+
it("calls onSearchChange when typing in the search input", () => {
|
|
129
|
+
const onSearchChange = vi.fn();
|
|
130
|
+
render(_jsx(VariantPickerDialog, { ...baseProps, onSearchChange: onSearchChange }));
|
|
131
|
+
const input = screen.getByPlaceholderText(/search your portfolio/i);
|
|
132
|
+
fireEvent.change(input, { target: { value: "reserva" } });
|
|
133
|
+
expect(onSearchChange).toHaveBeenCalledWith("reserva");
|
|
134
|
+
});
|
|
135
|
+
it("respects copy prop for i18n customization", () => {
|
|
136
|
+
render(_jsx(VariantPickerDialog, { ...baseProps, copy: { selectButton: "Använd produkt" } }));
|
|
137
|
+
expect(screen.getByRole("button", { name: /använd produkt/i })).toBeInTheDocument();
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=variant-picker-dialog.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-picker-dialog.test.js","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.test.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -69,7 +69,7 @@ export { ScoreChip, type ScoreChipProps, type ScoreBand } from "./components/sco
|
|
|
69
69
|
export { ReasonPill, type ReasonPillProps, type ReasonPillKind, type ReasonPillSignal, } from "./components/reason-pill";
|
|
70
70
|
export { OpportunityBrief, type OpportunityBriefProps, type OpportunityBriefChip, } from "./components/opportunity-brief";
|
|
71
71
|
export { PickerEmptyGuidance, type PickerEmptyGuidanceProps, } from "./components/picker-empty-guidance";
|
|
72
|
-
export { VariantPickerDialog, type VariantPickerDialogProps, type VariantPickerOpportunityContext, type VariantPickerEmptyGuidance, type ScoredVariantDisplay, } from "./components/variant-picker-dialog";
|
|
72
|
+
export { VariantPickerDialog, type VariantPickerDialogProps, type VariantPickerDialogCopy, type VariantPickerOpportunityContext, type VariantPickerEmptyGuidance, type ScoredVariantDisplay, } from "./components/variant-picker-dialog";
|
|
73
73
|
export { CertificationUploadCard } from "./components/certification-upload-card";
|
|
74
74
|
export type { CertificationUploadCardProps, CertStatus } from "./components/certification-upload-card";
|
|
75
75
|
export { AttachmentRow } from "./components/attachment-row";
|
|
@@ -104,4 +104,6 @@ export { OfferCard, type OfferCardProps, type OfferCardProduct, type OfferCardTe
|
|
|
104
104
|
export { CardActionsTrigger, type CardActionsTriggerProps, } from "./components/card-actions-trigger";
|
|
105
105
|
export { PriceRangeBar, type PriceRangeBarProps, type PriceRange } from "./components/price-range-bar";
|
|
106
106
|
export { PricingGuidancePanel, type PricingGuidancePanelProps, type PricePositionStatus } from "./components/pricing-guidance-panel";
|
|
107
|
+
export { BottleExtractDialog, type BottleExtractDialogProps, type BottleExtractDialogContext, } from "./components/bottle-extract-dialog";
|
|
108
|
+
export { BottleExtractionInlineProgress, type BottleExtractionInlineProgressProps, } from "./components/bottle-extraction-inline-progress";
|
|
107
109
|
//# 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":"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"}
|
package/dist/index.js
CHANGED
|
@@ -106,4 +106,7 @@ export { OfferCard, } from "./components/offer-card";
|
|
|
106
106
|
export { CardActionsTrigger, } from "./components/card-actions-trigger";
|
|
107
107
|
export { PriceRangeBar } from "./components/price-range-bar";
|
|
108
108
|
export { PricingGuidancePanel } from "./components/pricing-guidance-panel";
|
|
109
|
+
// ─── Bottle-extraction components (new in v0.14.x) ──────────────────────
|
|
110
|
+
export { BottleExtractDialog, } from "./components/bottle-extract-dialog";
|
|
111
|
+
export { BottleExtractionInlineProgress, } from "./components/bottle-extraction-inline-progress";
|
|
109
112
|
//# 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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"}
|