@cellarnode/ui 0.12.14 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/__storybook__/mock-data.d.ts.map +1 -1
  2. package/dist/__storybook__/mock-data.js +0 -1
  3. package/dist/__storybook__/mock-data.js.map +1 -1
  4. package/dist/chat/delivery-indicator.d.ts +13 -3
  5. package/dist/chat/delivery-indicator.d.ts.map +1 -1
  6. package/dist/chat/delivery-indicator.js +13 -5
  7. package/dist/chat/delivery-indicator.js.map +1 -1
  8. package/dist/chat/global-chat-widget.stories.d.ts.map +1 -1
  9. package/dist/chat/global-chat-widget.stories.js +0 -1
  10. package/dist/chat/global-chat-widget.stories.js.map +1 -1
  11. package/dist/chat/types.d.ts +0 -2
  12. package/dist/chat/types.d.ts.map +1 -1
  13. package/dist/chat/unified-timeline.stories.d.ts.map +1 -1
  14. package/dist/chat/unified-timeline.stories.js +0 -2
  15. package/dist/chat/unified-timeline.stories.js.map +1 -1
  16. package/dist/chat/use-chat.d.ts.map +1 -1
  17. package/dist/chat/use-chat.js +0 -1
  18. package/dist/chat/use-chat.js.map +1 -1
  19. package/dist/components/opportunity-brief.d.ts +23 -0
  20. package/dist/components/opportunity-brief.d.ts.map +1 -0
  21. package/dist/components/opportunity-brief.js +13 -0
  22. package/dist/components/opportunity-brief.js.map +1 -0
  23. package/dist/components/opportunity-brief.stories.d.ts +17 -0
  24. package/dist/components/opportunity-brief.stories.d.ts.map +1 -0
  25. package/dist/components/opportunity-brief.stories.js +38 -0
  26. package/dist/components/opportunity-brief.stories.js.map +1 -0
  27. package/dist/components/picker-empty-guidance.d.ts +20 -0
  28. package/dist/components/picker-empty-guidance.d.ts.map +1 -0
  29. package/dist/components/picker-empty-guidance.js +14 -0
  30. package/dist/components/picker-empty-guidance.js.map +1 -0
  31. package/dist/components/picker-empty-guidance.stories.d.ts +20 -0
  32. package/dist/components/picker-empty-guidance.stories.d.ts.map +1 -0
  33. package/dist/components/picker-empty-guidance.stories.js +33 -0
  34. package/dist/components/picker-empty-guidance.stories.js.map +1 -0
  35. package/dist/components/reason-pill.d.ts +17 -0
  36. package/dist/components/reason-pill.d.ts.map +1 -0
  37. package/dist/components/reason-pill.js +20 -0
  38. package/dist/components/reason-pill.js.map +1 -0
  39. package/dist/components/reason-pill.stories.d.ts +18 -0
  40. package/dist/components/reason-pill.stories.d.ts.map +1 -0
  41. package/dist/components/reason-pill.stories.js +18 -0
  42. package/dist/components/reason-pill.stories.js.map +1 -0
  43. package/dist/components/score-chip.d.ts +16 -0
  44. package/dist/components/score-chip.d.ts.map +1 -0
  45. package/dist/components/score-chip.js +26 -0
  46. package/dist/components/score-chip.js.map +1 -0
  47. package/dist/components/score-chip.stories.d.ts +18 -0
  48. package/dist/components/score-chip.stories.d.ts.map +1 -0
  49. package/dist/components/score-chip.stories.js +18 -0
  50. package/dist/components/score-chip.stories.js.map +1 -0
  51. package/dist/components/variant-picker-dialog.d.ts +38 -32
  52. package/dist/components/variant-picker-dialog.d.ts.map +1 -1
  53. package/dist/components/variant-picker-dialog.js +54 -76
  54. package/dist/components/variant-picker-dialog.js.map +1 -1
  55. package/dist/components/variant-picker-dialog.stories.d.ts +3 -3
  56. package/dist/components/variant-picker-dialog.stories.d.ts.map +1 -1
  57. package/dist/components/variant-picker-dialog.stories.js +133 -92
  58. package/dist/components/variant-picker-dialog.stories.js.map +1 -1
  59. package/dist/index.d.ts +5 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +6 -1
  62. package/dist/index.js.map +1 -1
  63. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ReasonPill } from "./reason-pill";
3
+ const meta = {
4
+ title: "Picker/ReasonPill",
5
+ component: ReasonPill,
6
+ tags: ["autodocs"],
7
+ parameters: { layout: "centered" },
8
+ };
9
+ export default meta;
10
+ export const OkSubtype = { args: { kind: "ok", signal: "subtype", label: "Brandy" } };
11
+ export const OkCountry = { args: { kind: "ok", signal: "country", label: "Spain" } };
12
+ export const WarnAlias = { args: { kind: "warn", signal: "subtype", label: "Aguardiente" } };
13
+ export const MissCountry = { args: { kind: "miss", signal: "country", label: "Spain" } };
14
+ export const Row = {
15
+ args: { kind: "ok", signal: "subtype", label: "Brandy" },
16
+ render: () => (_jsxs("div", { className: "flex flex-wrap gap-1.5 p-4", children: [_jsx(ReasonPill, { kind: "ok", signal: "subtype", label: "Brandy" }), _jsx(ReasonPill, { kind: "ok", signal: "country", label: "Spain" }), _jsx(ReasonPill, { kind: "warn", signal: "subtype", label: "Aguardiente" }), _jsx(ReasonPill, { kind: "ok", signal: "region", label: "Rioja" }), _jsx(ReasonPill, { kind: "miss", signal: "capacity", label: "low capacity" }), _jsx(ReasonPill, { kind: "miss", signal: "price", label: "below price band" })] })),
17
+ };
18
+ //# sourceMappingURL=reason-pill.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reason-pill.stories.js","sourceRoot":"","sources":["../../src/components/reason-pill.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,mBAAmB;IAC1B,SAAS,EAAE,UAAU;IACrB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;CACD,CAAC;AAEpC,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,SAAS,GAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;AAC7F,MAAM,CAAC,MAAM,SAAS,GAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC5F,MAAM,CAAC,MAAM,SAAS,GAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC;AACpG,MAAM,CAAC,MAAM,WAAW,GAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAEhG,MAAM,CAAC,MAAM,GAAG,GAAU;IACxB,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;IACxD,MAAM,EAAE,GAAG,EAAE,CAAC,CACZ,eAAK,SAAS,EAAC,4BAA4B,aACzC,KAAC,UAAU,IAAC,IAAI,EAAC,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,KAAK,EAAC,QAAQ,GAAG,EACxD,KAAC,UAAU,IAAC,IAAI,EAAC,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,KAAK,EAAC,OAAO,GAAG,EACvD,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,KAAK,EAAC,aAAa,GAAG,EAC/D,KAAC,UAAU,IAAC,IAAI,EAAC,IAAI,EAAC,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAC,OAAO,GAAG,EACtD,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,UAAU,EAAC,KAAK,EAAC,cAAc,GAAG,EACjE,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,KAAK,EAAC,kBAAkB,GAAG,IAC9D,CACP;CACF,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type ScoreBand = "top" | "good" | "weak";
2
+ export interface ScoreChipProps {
3
+ /** 0–100 score. Rounded for display. */
4
+ score: number;
5
+ /** Explicit band override. When omitted, derived from the score. */
6
+ band?: ScoreBand;
7
+ className?: string;
8
+ }
9
+ /**
10
+ * Compact 0–100 match-score pill, band-colored by quality.
11
+ *
12
+ * Reused by the producer journey picker and the importer AI-matches view
13
+ * — anywhere we need to surface a numeric "fit" score next to a row.
14
+ */
15
+ export declare function ScoreChip({ score, band, className }: ScoreChipProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=score-chip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-chip.d.ts","sourceRoot":"","sources":["../../src/components/score-chip.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,cAAc,2CAenE"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils";
3
+ function deriveBand(score) {
4
+ if (score >= 80)
5
+ return "top";
6
+ if (score >= 50)
7
+ return "good";
8
+ return "weak";
9
+ }
10
+ const bandClasses = {
11
+ top: "bg-primary text-primary-foreground",
12
+ good: "bg-warning text-warning-foreground",
13
+ weak: "bg-muted text-muted-foreground",
14
+ };
15
+ /**
16
+ * Compact 0–100 match-score pill, band-colored by quality.
17
+ *
18
+ * Reused by the producer journey picker and the importer AI-matches view
19
+ * — anywhere we need to surface a numeric "fit" score next to a row.
20
+ */
21
+ export function ScoreChip({ score, band, className }) {
22
+ const b = band ?? deriveBand(score);
23
+ const display = Math.max(0, Math.min(100, Math.round(score)));
24
+ return (_jsx("span", { className: cn("inline-flex shrink-0 items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-bold leading-none tabular-nums", bandClasses[b], className), "aria-label": `Match score ${display} of 100`, children: display }));
25
+ }
26
+ //# sourceMappingURL=score-chip.js.map
@@ -0,0 +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,oCAAoC;IAC1C,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"}
@@ -0,0 +1,18 @@
1
+ import type { StoryObj } from "@storybook/react-vite";
2
+ import { ScoreChip } from "./score-chip";
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof ScoreChip;
6
+ tags: string[];
7
+ parameters: {
8
+ layout: string;
9
+ };
10
+ };
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+ export declare const Top: Story;
14
+ export declare const Good: Story;
15
+ export declare const Weak: Story;
16
+ export declare const ExplicitBand: Story;
17
+ export declare const Range: Story;
18
+ //# sourceMappingURL=score-chip.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-chip.stories.d.ts","sourceRoot":"","sources":["../../src/components/score-chip.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,QAAA,MAAM,IAAI;;;;;;;CAKwB,CAAC;AAEnC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,GAAG,EAAE,KAA+B,CAAC;AAClD,eAAO,MAAM,IAAI,EAAE,KAA+B,CAAC;AACnD,eAAO,MAAM,IAAI,EAAE,KAA+B,CAAC;AACnD,eAAO,MAAM,YAAY,EAAE,KAA4C,CAAC;AAExE,eAAO,MAAM,KAAK,EAAE,KAYnB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ScoreChip } from "./score-chip";
3
+ const meta = {
4
+ title: "Picker/ScoreChip",
5
+ component: ScoreChip,
6
+ tags: ["autodocs"],
7
+ parameters: { layout: "centered" },
8
+ };
9
+ export default meta;
10
+ export const Top = { args: { score: 92 } };
11
+ export const Good = { args: { score: 68 } };
12
+ export const Weak = { args: { score: 22 } };
13
+ export const ExplicitBand = { args: { score: 50, band: "top" } };
14
+ export const Range = {
15
+ args: { score: 0 },
16
+ render: () => (_jsx("div", { className: "flex items-center gap-2 p-4", children: [100, 92, 80, 79, 60, 50, 49, 22, 0].map((s) => (_jsxs("div", { className: "flex flex-col items-center gap-1", children: [_jsx(ScoreChip, { score: s }), _jsx("span", { className: "text-[10px] text-muted-foreground", children: s })] }, s))) })),
17
+ };
18
+ //# sourceMappingURL=score-chip.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-chip.stories.js","sourceRoot":"","sources":["../../src/components/score-chip.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;CACF,CAAC;AAEnC,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,GAAG,GAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;AAClD,MAAM,CAAC,MAAM,IAAI,GAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;AACnD,MAAM,CAAC,MAAM,IAAI,GAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AAExE,MAAM,CAAC,MAAM,KAAK,GAAU;IAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;IAClB,MAAM,EAAE,GAAG,EAAE,CAAC,CACZ,cAAK,SAAS,EAAC,6BAA6B,YACzC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC/C,eAAa,SAAS,EAAC,kCAAkC,aACvD,KAAC,SAAS,IAAC,KAAK,EAAE,CAAC,GAAI,EACvB,eAAM,SAAS,EAAC,mCAAmC,YAAE,CAAC,GAAQ,KAFtD,CAAC,CAGL,CACP,CAAC,GACE,CACP;CACF,CAAC"}
@@ -1,49 +1,55 @@
1
- import * as React from "react";
2
- export interface VariantPickerItem {
1
+ import { type OpportunityBriefChip } from "./opportunity-brief";
2
+ import { type ReasonPillKind, type ReasonPillSignal } from "./reason-pill";
3
+ import { type ScoreBand } from "./score-chip";
4
+ /** A pre-ranked variant row. Host builds this from server response. */
5
+ export interface ScoredVariantDisplay {
3
6
  id: string;
4
- name: string;
5
- vintage?: string | number | null;
7
+ beverageId: string;
8
+ beverageName: string;
9
+ vintage?: number | string | null;
10
+ packaging?: string | null;
11
+ containerVolume?: string | number | null;
6
12
  category?: string | null;
7
13
  subtype?: string | null;
8
- beverageName?: string | null;
14
+ countryOfOrigin?: string | null;
15
+ region?: string | null;
16
+ score: number;
17
+ band: ScoreBand;
18
+ reasons: {
19
+ kind: ReasonPillKind;
20
+ signal: ReasonPillSignal;
21
+ label: string;
22
+ }[];
9
23
  }
10
- /** Opportunity context shown as a banner inside the picker. */
11
24
  export interface VariantPickerOpportunityContext {
12
25
  name: string;
13
- buyer?: string;
14
- category?: string;
15
- deadline?: string;
16
- volume?: string;
26
+ buyerName?: string | null;
27
+ chips: OpportunityBriefChip[];
28
+ }
29
+ export interface VariantPickerEmptyGuidance {
30
+ categoryLabel: string;
31
+ createLabel: string;
17
32
  }
18
33
  export interface VariantPickerDialogProps {
19
- /** Whether the dialog is open. */
20
34
  open: boolean;
21
- /** Called when the dialog should close. */
22
35
  onClose: () => void;
23
- /** Called when the user confirms a variant selection. */
24
- onSelect: (variant: VariantPickerItem) => void;
25
- /** Called when the user clicks "Skip — empty draft". Falls back to onClose if not provided. */
36
+ onSelect: (variantId: string) => void;
37
+ /** When provided + goodFits empty, renders PickerEmptyGuidance with this callback on the primary CTA. */
38
+ onCreateNew?: () => void;
39
+ /** Skip to empty draft. Defaults to onClose when omitted. */
26
40
  onSkip?: () => void;
27
- /** List of variants to choose from. */
28
- variants: VariantPickerItem[];
29
- /** Show a loading spinner instead of the list. */
30
- isLoading?: boolean;
31
- /** Current search input value (controlled). */
41
+ goodFits: ScoredVariantDisplay[];
42
+ crossCategory: ScoredVariantDisplay[];
43
+ opportunityContext: VariantPickerOpportunityContext;
32
44
  searchValue: string;
33
- /** Called when the search input changes. */
34
45
  onSearchChange: (value: string) => void;
35
- /** Dialog heading. @default "Select a product" */
46
+ isLoading?: boolean;
47
+ /** When provided AND goodFits.length === 0 AND onCreateNew is set, renders the empty-state CTAs. */
48
+ emptyGuidance?: VariantPickerEmptyGuidance;
49
+ /** Pre-select a variant on mount (used for the add-product round-trip). */
50
+ initialSelectedId?: string | null;
36
51
  title?: string;
37
- /** Descriptive text below the heading. */
38
52
  description?: string;
39
- /** Optional custom renderer for each variant row. */
40
- renderVariant?: (variant: VariantPickerItem, isSelected: boolean) => React.ReactNode;
41
- /** Pre-filter: show matching variants first (same category). */
42
- filterCategory?: string | null;
43
- /** Pre-filter: show matching variants first (same subtype). */
44
- filterSubtype?: string | null;
45
- /** Opportunity context banner shown at the top of the dialog. */
46
- opportunityContext?: VariantPickerOpportunityContext | null;
47
53
  }
48
- export declare function VariantPickerDialog({ open, onClose, onSelect, onSkip, variants, isLoading, searchValue, onSearchChange, title, description, renderVariant, filterCategory, filterSubtype, opportunityContext, }: VariantPickerDialogProps): import("react/jsx-runtime").JSX.Element | null;
54
+ export declare function VariantPickerDialog(props: VariantPickerDialogProps): import("react/jsx-runtime").JSX.Element | null;
49
55
  //# 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":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,+DAA+D;AAC/D,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,kCAAkC;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,2CAA2C;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yDAAyD;IACzD,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,uCAAuC;IACvC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC;IACrF,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;CAC7D;AAwDD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAiB,EACjB,WAAW,EACX,cAAc,EACd,KAA0B,EAC1B,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,kBAAkB,GACnB,EAAE,wBAAwB,kDAsB1B"}
1
+ {"version":3,"file":"variant-picker-dialog.d.ts","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAElF,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAMzD,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9E;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,yGAAyG;IACzG,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,kBAAkB,EAAE,+BAA+B,CAAC;IAEpD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,oGAAoG;IACpG,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAE3C,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,kDAKlE"}
@@ -1,97 +1,75 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
+ import { ChevronRight, Search } from "lucide-react";
3
4
  import { cn } from "../lib/utils";
4
- // ---------------------------------------------------------------------------
5
- // Inline SVGs (no external icon dep required)
6
- // ---------------------------------------------------------------------------
7
- function SearchIcon(props) {
8
- return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, stroke: "currentColor", "aria-hidden": "true", ...props, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" }) }));
9
- }
10
- function SpinnerIcon(props) {
11
- return (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "aria-hidden": "true", ...props, children: [_jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), _jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })] }));
12
- }
5
+ import { OpportunityBrief } from "./opportunity-brief";
6
+ import { PickerEmptyGuidance } from "./picker-empty-guidance";
7
+ import { ReasonPill } from "./reason-pill";
8
+ import { ScoreChip } from "./score-chip";
13
9
  // ---------------------------------------------------------------------------
14
10
  // Component
15
11
  // ---------------------------------------------------------------------------
16
- export function VariantPickerDialog({ open, onClose, onSelect, onSkip, variants, isLoading = false, searchValue, onSearchChange, title = "Select a product", description, renderVariant, filterCategory, filterSubtype, opportunityContext, }) {
17
- if (!open)
12
+ export function VariantPickerDialog(props) {
13
+ if (!props.open)
18
14
  return null;
19
- // VariantPickerContent unmounts when open becomes false, so its state
20
- // (selectedId, showOtherProducts) resets automatically on each open.
21
- return (_jsx(VariantPickerContent, { variants: variants, onSelect: onSelect, onClose: onClose, onSkip: onSkip, searchValue: searchValue, onSearchChange: onSearchChange, isLoading: isLoading, title: title, description: description, renderVariant: renderVariant, filterCategory: filterCategory, filterSubtype: filterSubtype, opportunityContext: opportunityContext }));
15
+ // VariantPickerContent unmounts when open becomes false, so its internal
16
+ // state resets naturally on each open.
17
+ return _jsx(VariantPickerContent, { ...props });
22
18
  }
23
- function VariantPickerContent({ variants, onSelect, onClose, onSkip, searchValue, onSearchChange, isLoading, title, description, renderVariant, filterCategory, filterSubtype, opportunityContext, }) {
24
- const [selectedId, setSelectedId] = React.useState(null);
25
- const [showOtherProducts, setShowOtherProducts] = React.useState(false);
26
- // Split variants into matching/other groups when filterCategory is set
27
- const hasFilter = !!filterCategory;
28
- const matchingVariants = hasFilter
29
- ? variants.filter((v) => {
30
- const catMatch = v.category?.toLowerCase() === filterCategory?.toLowerCase();
31
- if (!filterSubtype)
32
- return catMatch;
33
- return catMatch && v.subtype?.toLowerCase() === filterSubtype?.toLowerCase();
34
- })
35
- : variants;
36
- const otherVariants = hasFilter
37
- ? variants.filter((v) => !matchingVariants.includes(v))
38
- : [];
39
- const selectedVariant = variants.find((v) => v.id === selectedId) ?? null;
40
- const handleSelect = () => {
41
- if (selectedVariant) {
42
- onSelect(selectedVariant);
43
- onClose();
19
+ function VariantPickerContent({ onClose, onSelect, onCreateNew, onSkip, goodFits, crossCategory, opportunityContext, searchValue, onSearchChange, isLoading, emptyGuidance, initialSelectedId, title = "Pick a product for this tender", description = "Ranked by how well each fits the opportunity", }) {
20
+ const [selectedId, setSelectedId] = React.useState(initialSelectedId ?? null);
21
+ // Cross-category starts expanded when there are no good fits, so producers
22
+ // see their portfolio without extra clicks in the empty case.
23
+ const [showCross, setShowCross] = React.useState(goodFits.length === 0);
24
+ // Round-trip auto-select: producer returned from add-product → updates
25
+ // initialSelectedId. Re-sync during render (not in an effect) per React's
26
+ // "storing information from previous renders" pattern.
27
+ const [prevInitialSelectedId, setPrevInitialSelectedId] = React.useState(initialSelectedId);
28
+ if (initialSelectedId !== prevInitialSelectedId) {
29
+ setPrevInitialSelectedId(initialSelectedId);
30
+ if (initialSelectedId) {
31
+ setSelectedId(initialSelectedId);
44
32
  }
45
- };
46
- const handleSkip = () => {
47
- if (onSkip) {
48
- onSkip();
49
- }
50
- else {
33
+ }
34
+ const handleBackdrop = (e) => {
35
+ if (e.target === e.currentTarget)
51
36
  onClose();
52
- }
53
37
  };
54
- const handleBackdropClick = (e) => {
55
- if (e.target === e.currentTarget) {
38
+ const handleKey = (e) => {
39
+ if (e.key === "Escape")
56
40
  onClose();
57
- }
58
41
  };
59
- const handleKeyDown = (e) => {
60
- if (e.key === "Escape") {
42
+ const confirm = () => {
43
+ if (selectedId) {
44
+ onSelect(selectedId);
61
45
  onClose();
62
46
  }
63
47
  };
64
- return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", onKeyDown: handleKeyDown, children: [_jsx("div", { className: "absolute inset-0 bg-foreground/20 backdrop-blur-xs", onClick: handleBackdropClick, "aria-hidden": "true" }), _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": title, className: cn("glass-panel relative z-10 flex max-h-[min(32rem,80dvh)] w-full max-w-md flex-col", "rounded-2xl border border-primary/6 p-0", "animate-fade-in"), children: [_jsxs("div", { className: "shrink-0 px-5 pt-5 pb-3", children: [_jsx("h2", { className: "text-base/6 font-semibold text-foreground", children: title }), description && (_jsx("p", { className: "mt-1 text-sm/5 text-muted-foreground", children: description })), _jsxs("div", { className: "relative mt-3", children: [_jsx(SearchIcon, { className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }), _jsx("input", { type: "text", value: searchValue, onChange: (e) => onSearchChange(e.target.value), placeholder: "Search variants...", autoFocus: true, className: cn("w-full rounded-xl border border-primary/6 bg-muted/30 py-2 pl-9 pr-3", "text-sm/5 text-foreground placeholder:text-muted-foreground/60", "outline-hidden focus:border-primary/20 focus:ring-1 focus:ring-primary/20", "transition-colors") })] })] }), opportunityContext && (_jsxs("div", { className: "mx-3 mb-2 rounded-xl border border-primary/10 bg-primary/4 px-4 py-3", children: [_jsx("p", { className: "text-xs font-medium uppercase tracking-wider text-primary/70", children: "Opportunity" }), _jsx("p", { className: "mt-0.5 text-sm/5 font-medium text-foreground", children: opportunityContext.name }), _jsxs("div", { className: "mt-1.5 flex flex-wrap gap-x-4 gap-y-0.5 text-xs text-muted-foreground", children: [opportunityContext.buyer && _jsxs("span", { children: ["Buyer: ", opportunityContext.buyer] }), opportunityContext.category && _jsxs("span", { children: ["Category: ", opportunityContext.category] }), opportunityContext.volume && _jsxs("span", { children: ["Volume: ", opportunityContext.volume] }), opportunityContext.deadline && _jsxs("span", { children: ["Deadline: ", opportunityContext.deadline] })] })] })), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-3 pb-1", children: isLoading ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-12", children: [_jsx(SpinnerIcon, { className: "size-6 animate-spin text-primary" }), _jsx("p", { className: "mt-3 text-sm/5 text-muted-foreground", children: "Loading variants..." })] })) : variants.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [_jsx("p", { className: "text-sm/5 font-medium text-foreground", children: "No variants found" }), _jsx("p", { className: "mt-1 text-xs/4 text-muted-foreground", children: searchValue
65
- ? "Try a different search term"
66
- : "No beverage variants are available yet" })] })) : (_jsxs("div", { className: "flex flex-col gap-1.5", children: [matchingVariants.map((variant) => {
67
- const isSelected = variant.id === selectedId;
68
- return (_jsx("button", { type: "button", onClick: () => setSelectedId(variant.id), className: cn("w-full rounded-xl border px-3.5 py-2.5 text-left transition-colors", isSelected
69
- ? "border-primary/20 bg-primary/5"
70
- : "border-transparent hover:bg-muted/40"), children: renderVariant ? (renderVariant(variant, isSelected)) : (_jsx(DefaultVariantRow, { variant: variant, isSelected: isSelected })) }, variant.id));
71
- }), hasFilter && otherVariants.length > 0 && (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => setShowOtherProducts((prev) => !prev), className: "mt-2 flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-xs font-medium text-muted-foreground transition-colors hover:text-foreground", children: [_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2, stroke: "currentColor", className: cn("size-3 transition-transform", showOtherProducts && "rotate-90"), children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "m8.25 4.5 7.5 7.5-7.5 7.5" }) }), "Other products (", otherVariants.length, ")"] }), showOtherProducts &&
72
- otherVariants.map((variant) => {
73
- const isSelected = variant.id === selectedId;
74
- return (_jsx("button", { type: "button", onClick: () => setSelectedId(variant.id), className: cn("w-full rounded-xl border px-3.5 py-2.5 text-left transition-colors", isSelected
75
- ? "border-primary/20 bg-primary/5"
76
- : "border-transparent hover:bg-muted/40"), children: renderVariant ? (renderVariant(variant, isSelected)) : (_jsx(DefaultVariantRow, { variant: variant, isSelected: isSelected })) }, variant.id));
77
- })] }))] })) }), _jsx("div", { className: "shrink-0 border-t border-primary/6 px-5 py-3", children: _jsxs("div", { className: "flex items-center justify-end gap-2.5", children: [_jsx("button", { type: "button", onClick: handleSkip, className: cn("rounded-xl px-4 py-2 text-sm/5 font-medium text-muted-foreground", "transition-colors hover:bg-muted/40 hover:text-foreground"), children: "Skip \u2014 empty draft" }), _jsx("button", { type: "button", onClick: handleSelect, disabled: !selectedVariant, className: cn("rounded-xl px-4 py-2 text-sm/5 font-medium text-primary-foreground", "bg-[var(--color-brand-primary,oklch(0.35_0.062_178))]", "transition-colors", selectedVariant
78
- ? "hover:brightness-110"
79
- : "cursor-not-allowed opacity-50"), children: "Select & pre-fill" })] }) })] })] }));
48
+ const skip = () => (onSkip ? onSkip() : onClose());
49
+ const showEmptyGuidance = goodFits.length === 0 && emptyGuidance != null && onCreateNew != null;
50
+ return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", onKeyDown: handleKey, children: [_jsx("div", { className: "absolute inset-0 bg-foreground/20 backdrop-blur-xs", onClick: handleBackdrop, "aria-hidden": true }), _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": title, className: cn("glass-panel relative z-10 flex max-h-[min(36rem,85dvh)] w-full max-w-lg 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("h2", { className: "text-base/6 font-semibold text-foreground", children: title }), _jsx("p", { className: "mt-1 text-sm/5 text-muted-foreground", children: description })] }), _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: "Search your portfolio...", 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: "Ranking your portfolio\u2026" }) })) : (_jsxs(_Fragment, { children: [_jsx(SectionLabel, { label: `Good fits · ${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) }, 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", children: [_jsx(ChevronRight, { className: cn("size-3 transition-transform", showCross && "rotate-90"), "aria-hidden": true }), goodFits.length === 0 ? "Cross-category" : "Other portfolio products", _jsxs("span", { className: "ml-1", children: ["(", crossCategory.length, ")"] })] }), showCross && (_jsx("div", { className: "mt-1.5 flex flex-col gap-1.5 opacity-90", children: crossCategory.map((v) => (_jsx(VariantRow, { variant: v, isSelected: v.id === selectedId, isCrossCategory: true, onSelect: () => setSelectedId(v.id) }, 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: [_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", children: showEmptyGuidance ? "Cancel" : "Skip — empty draft" }), _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]", selectedId ? "hover:brightness-110" : "cursor-not-allowed opacity-50"), children: "Select & pre-fill" })] }) })] })] }));
80
51
  }
81
52
  // ---------------------------------------------------------------------------
82
- // Default variant row renderer
53
+ // Helpers
83
54
  // ---------------------------------------------------------------------------
84
- function DefaultVariantRow({ variant, isSelected, }) {
85
- const displayName = variant.beverageName
86
- ? `${variant.beverageName} — ${variant.name}`
87
- : variant.name;
88
- const pills = [];
89
- if (variant.category)
90
- pills.push(variant.category);
91
- if (variant.subtype)
92
- pills.push(variant.subtype);
93
- return (_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("span", { className: cn("mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border-2 transition-colors", isSelected
94
- ? "border-primary bg-primary"
95
- : "border-muted-foreground/30"), children: isSelected && _jsx("span", { className: "size-1.5 rounded-full bg-primary-foreground" }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("p", { className: "truncate text-sm/5 font-medium text-foreground", children: [displayName, variant.vintage != null && (_jsx("span", { className: "ml-1.5 text-muted-foreground", children: variant.vintage }))] }), pills.length > 0 && (_jsx("div", { className: "mt-1 flex flex-wrap gap-1", children: pills.map((pill) => (_jsx("span", { className: "rounded-full bg-muted/50 px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: pill }, pill))) }))] })] }));
55
+ function SectionLabel({ label, emphasis }) {
56
+ return (_jsx("p", { className: cn("text-[10px] font-bold uppercase tracking-[0.06em]", emphasis ? "text-primary" : "text-muted-foreground"), children: label }));
57
+ }
58
+ function VariantRow({ variant, isSelected, isTop, isCrossCategory, onSelect, }) {
59
+ const meta = [
60
+ variant.countryOfOrigin,
61
+ variant.containerVolume ? `${variant.containerVolume}` : null,
62
+ variant.vintage != null ? `${variant.vintage}` : null,
63
+ variant.packaging,
64
+ ]
65
+ .filter(Boolean)
66
+ .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
68
+ ? "border-primary bg-primary/5"
69
+ : isTop
70
+ ? "border-primary/60 shadow-[0_0_0_2px] shadow-primary/10 hover:bg-muted/30"
71
+ : "border-border hover:bg-muted/30"), children: [_jsx("span", { className: cn("size-3.5 shrink-0 rounded-full border-2 transition-colors", isSelected
72
+ ? "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: "\u00B7 closest fit" })), isCrossCategory && (_jsx("span", { className: "ml-1.5 text-[10px] font-medium text-warning-foreground", children: "\u00B7 different category" }))] }), 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 })] }));
96
74
  }
97
75
  //# 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":"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"}
1
+ {"version":3,"file":"variant-picker-dialog.js","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.tsx"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@ declare const meta: {
10
10
  };
11
11
  export default meta;
12
12
  type Story = StoryObj<typeof meta>;
13
- export declare const Default: Story;
13
+ export declare const WithMatches: Story;
14
+ export declare const NoMatches: Story;
14
15
  export declare const Loading: Story;
15
- export declare const Empty: Story;
16
- export declare const CustomTitle: Story;
16
+ export declare const NoMatchesNoCross: Story;
17
17
  //# sourceMappingURL=variant-picker-dialog.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"variant-picker-dialog.stories.d.ts","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAA0B,MAAM,yBAAyB,CAAC;AA6CtF,QAAA,MAAM,IAAI;;;;;;;CAKkC,CAAC;AAE7C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA6CnC,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAsBF,eAAO,MAAM,OAAO,EAAE,KAWrB,CAAC;AAsBF,eAAO,MAAM,KAAK,EAAE,KAUnB,CAAC;AAsBF,eAAO,MAAM,WAAW,EAAE,KAYzB,CAAC"}
1
+ {"version":3,"file":"variant-picker-dialog.stories.d.ts","sourceRoot":"","sources":["../../src/components/variant-picker-dialog.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,mBAAmB,EAGpB,MAAM,yBAAyB,CAAC;AAEjC,QAAA,MAAM,IAAI;;;;;;;CAKkC,CAAC;AAE7C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAqFnC,eAAO,MAAM,WAAW,EAAE,KAsBzB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KA2BvB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAcrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAsB9B,CAAC"}