@cellarnode/ui 0.17.1 → 0.17.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/chat/global-chat-widget.js +2 -2
  2. package/dist/chat/global-chat-widget.js.map +1 -1
  3. package/dist/chat/global-chat-widget.test.d.ts +2 -0
  4. package/dist/chat/global-chat-widget.test.d.ts.map +1 -0
  5. package/dist/chat/global-chat-widget.test.js +167 -0
  6. package/dist/chat/global-chat-widget.test.js.map +1 -0
  7. package/dist/chat/index.d.ts +0 -1
  8. package/dist/chat/index.d.ts.map +1 -1
  9. package/dist/chat/index.js +0 -1
  10. package/dist/chat/index.js.map +1 -1
  11. package/dist/components/bottle-extract-dialog.test.d.ts +2 -0
  12. package/dist/components/bottle-extract-dialog.test.d.ts.map +1 -0
  13. package/dist/components/bottle-extract-dialog.test.js +99 -0
  14. package/dist/components/bottle-extract-dialog.test.js.map +1 -0
  15. package/dist/components/branch-edit-banner.js +1 -1
  16. package/dist/components/branch-edit-banner.js.map +1 -1
  17. package/dist/components/branch-overview-panel.d.ts.map +1 -1
  18. package/dist/components/branch-overview-panel.js +8 -0
  19. package/dist/components/branch-overview-panel.js.map +1 -1
  20. package/dist/components/branch-overview-panel.stories.d.ts +8 -0
  21. package/dist/components/branch-overview-panel.stories.d.ts.map +1 -1
  22. package/dist/components/branch-overview-panel.stories.js.map +1 -1
  23. package/dist/components/branch-resolution-modal.d.ts.map +1 -1
  24. package/dist/components/branch-resolution-modal.js +9 -0
  25. package/dist/components/branch-resolution-modal.js.map +1 -1
  26. package/dist/components/branch-resolution-modal.stories.d.ts +9 -0
  27. package/dist/components/branch-resolution-modal.stories.d.ts.map +1 -1
  28. package/dist/components/branch-resolution-modal.stories.js.map +1 -1
  29. package/dist/components/branch-resolution-modal.test.js +9 -0
  30. package/dist/components/branch-resolution-modal.test.js.map +1 -1
  31. package/dist/components/card.js +2 -2
  32. package/dist/components/card.js.map +1 -1
  33. package/dist/components/celebration-pulse.d.ts.map +1 -1
  34. package/dist/components/celebration-pulse.js +1 -1
  35. package/dist/components/celebration-pulse.js.map +1 -1
  36. package/dist/components/drawer.js +1 -1
  37. package/dist/components/drawer.js.map +1 -1
  38. package/dist/components/journey-card.js +2 -2
  39. package/dist/components/journey-card.js.map +1 -1
  40. package/dist/components/journey-card.test.d.ts +2 -0
  41. package/dist/components/journey-card.test.d.ts.map +1 -0
  42. package/dist/components/journey-card.test.js +82 -0
  43. package/dist/components/journey-card.test.js.map +1 -0
  44. package/dist/components/kanban-board.stories.d.ts.map +1 -1
  45. package/dist/components/kanban-board.stories.js +13 -3
  46. package/dist/components/kanban-board.stories.js.map +1 -1
  47. package/dist/components/kanban-dnd-board.stories.d.ts.map +1 -1
  48. package/dist/components/kanban-dnd-board.stories.js +7 -4
  49. package/dist/components/kanban-dnd-board.stories.js.map +1 -1
  50. package/dist/components/label.js +1 -1
  51. package/dist/components/label.js.map +1 -1
  52. package/dist/components/offer-card.js +1 -1
  53. package/dist/components/offer-card.js.map +1 -1
  54. package/dist/components/offer-card.test.d.ts +2 -0
  55. package/dist/components/offer-card.test.d.ts.map +1 -0
  56. package/dist/components/offer-card.test.js +73 -0
  57. package/dist/components/offer-card.test.js.map +1 -0
  58. package/dist/components/product-card.js +1 -1
  59. package/dist/components/product-card.js.map +1 -1
  60. package/dist/components/product-card.stories.js +2 -2
  61. package/dist/components/product-card.stories.js.map +1 -1
  62. package/dist/components/reason-pill.js +1 -1
  63. package/dist/components/reason-pill.js.map +1 -1
  64. package/dist/components/score-chip.js +1 -1
  65. package/dist/components/score-chip.js.map +1 -1
  66. package/dist/components/shadcn-dialog.js +1 -1
  67. package/dist/components/shadcn-dialog.js.map +1 -1
  68. package/dist/components/variant-picker-dialog.stories.js +1 -1
  69. package/dist/components/variant-picker-dialog.stories.js.map +1 -1
  70. package/dist/index.d.ts +0 -9
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +0 -6
  73. package/dist/index.js.map +1 -1
  74. package/dist/nav/app-sidebar.js +1 -1
  75. package/dist/nav/app-sidebar.js.map +1 -1
  76. package/dist/offer/index.d.ts +1 -3
  77. package/dist/offer/index.d.ts.map +1 -1
  78. package/dist/offer/index.js +5 -2
  79. package/dist/offer/index.js.map +1 -1
  80. package/dist/offer/negotiation-event-card.stories.d.ts +1 -1
  81. package/dist/offer/negotiation-event-card.stories.d.ts.map +1 -1
  82. package/dist/offer/negotiation-event-card.stories.js +3 -1
  83. package/dist/offer/negotiation-event-card.stories.js.map +1 -1
  84. package/dist/opportunities/opportunities-table.js +1 -1
  85. package/dist/opportunities/opportunities-table.js.map +1 -1
  86. package/dist/opportunities/opportunities-table.test.d.ts +2 -0
  87. package/dist/opportunities/opportunities-table.test.d.ts.map +1 -0
  88. package/dist/opportunities/opportunities-table.test.js +87 -0
  89. package/dist/opportunities/opportunities-table.test.js.map +1 -0
  90. package/dist/skeleton/__tests__/provider.test.js +11 -1
  91. package/dist/skeleton/__tests__/provider.test.js.map +1 -1
  92. package/dist/skeleton/provider.d.ts +11 -1
  93. package/dist/skeleton/provider.d.ts.map +1 -1
  94. package/dist/skeleton/provider.js +2 -2
  95. package/dist/skeleton/provider.js.map +1 -1
  96. package/package.json +1 -1
  97. package/dist/chat/messenger-chat-header.d.ts +0 -14
  98. package/dist/chat/messenger-chat-header.d.ts.map +0 -1
  99. package/dist/chat/messenger-chat-header.js +0 -25
  100. package/dist/chat/messenger-chat-header.js.map +0 -1
  101. package/dist/components/asset-list.d.ts +0 -34
  102. package/dist/components/asset-list.d.ts.map +0 -1
  103. package/dist/components/asset-list.js +0 -34
  104. package/dist/components/asset-list.js.map +0 -1
  105. package/dist/components/asset-list.stories.d.ts +0 -20
  106. package/dist/components/asset-list.stories.d.ts.map +0 -1
  107. package/dist/components/asset-list.stories.js +0 -50
  108. package/dist/components/asset-list.stories.js.map +0 -1
  109. package/dist/components/classification-select.d.ts +0 -24
  110. package/dist/components/classification-select.d.ts.map +0 -1
  111. package/dist/components/classification-select.js +0 -51
  112. package/dist/components/classification-select.js.map +0 -1
  113. package/dist/components/classification-select.stories.d.ts +0 -17
  114. package/dist/components/classification-select.stories.d.ts.map +0 -1
  115. package/dist/components/classification-select.stories.js +0 -100
  116. package/dist/components/classification-select.stories.js.map +0 -1
  117. package/dist/components/completed-offer-card.d.ts +0 -34
  118. package/dist/components/completed-offer-card.d.ts.map +0 -1
  119. package/dist/components/completed-offer-card.js +0 -20
  120. package/dist/components/completed-offer-card.js.map +0 -1
  121. package/dist/components/completed-offer-card.stories.d.ts +0 -17
  122. package/dist/components/completed-offer-card.stories.d.ts.map +0 -1
  123. package/dist/components/completed-offer-card.stories.js +0 -75
  124. package/dist/components/completed-offer-card.stories.js.map +0 -1
  125. package/dist/components/kanban-card.d.ts +0 -8
  126. package/dist/components/kanban-card.d.ts.map +0 -1
  127. package/dist/components/kanban-card.js +0 -13
  128. package/dist/components/kanban-card.js.map +0 -1
  129. package/dist/components/kanban-card.stories.d.ts +0 -16
  130. package/dist/components/kanban-card.stories.d.ts.map +0 -1
  131. package/dist/components/kanban-card.stories.js +0 -30
  132. package/dist/components/kanban-card.stories.js.map +0 -1
  133. package/dist/components/price-comparison.d.ts +0 -13
  134. package/dist/components/price-comparison.d.ts.map +0 -1
  135. package/dist/components/price-comparison.js +0 -60
  136. package/dist/components/price-comparison.js.map +0 -1
  137. package/dist/components/price-comparison.stories.d.ts +0 -11
  138. package/dist/components/price-comparison.stories.d.ts.map +0 -1
  139. package/dist/components/price-comparison.stories.js +0 -56
  140. package/dist/components/price-comparison.stories.js.map +0 -1
  141. package/dist/components/pricing-reference-card.d.ts +0 -13
  142. package/dist/components/pricing-reference-card.d.ts.map +0 -1
  143. package/dist/components/pricing-reference-card.js +0 -38
  144. package/dist/components/pricing-reference-card.js.map +0 -1
  145. package/dist/components/pricing-reference-card.stories.d.ts +0 -11
  146. package/dist/components/pricing-reference-card.stories.d.ts.map +0 -1
  147. package/dist/components/pricing-reference-card.stories.js +0 -54
  148. package/dist/components/pricing-reference-card.stories.js.map +0 -1
  149. package/dist/components/pricing-reference-card.test.d.ts +0 -2
  150. package/dist/components/pricing-reference-card.test.d.ts.map +0 -1
  151. package/dist/components/pricing-reference-card.test.js +0 -31
  152. package/dist/components/pricing-reference-card.test.js.map +0 -1
  153. package/dist/offer/negotiation-event-card.d.ts +0 -9
  154. package/dist/offer/negotiation-event-card.d.ts.map +0 -1
  155. package/dist/offer/negotiation-event-card.js +0 -39
  156. package/dist/offer/negotiation-event-card.js.map +0 -1
  157. package/dist/offer/org-banner.d.ts +0 -11
  158. package/dist/offer/org-banner.d.ts.map +0 -1
  159. package/dist/offer/org-banner.js +0 -19
  160. package/dist/offer/org-banner.js.map +0 -1
  161. package/dist/offer/org-banner.stories.d.ts +0 -18
  162. package/dist/offer/org-banner.stories.d.ts.map +0 -1
  163. package/dist/offer/org-banner.stories.js +0 -51
  164. package/dist/offer/org-banner.stories.js.map +0 -1
@@ -1,100 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from "react";
3
- import { ClassificationSelect } from "./classification-select";
4
- const sampleCategories = [
5
- {
6
- id: "wine",
7
- name: "Wine",
8
- subtypes: [
9
- { id: "red-wine", name: "Red Wine" },
10
- { id: "white-wine", name: "White Wine" },
11
- { id: "rose-wine", name: "Rosé Wine" },
12
- { id: "sparkling-wine", name: "Sparkling Wine" },
13
- { id: "dessert-wine", name: "Dessert Wine" },
14
- ],
15
- },
16
- {
17
- id: "spirits",
18
- name: "Spirits",
19
- subtypes: [
20
- { id: "whisky", name: "Whisky / Whiskey" },
21
- { id: "cognac", name: "Cognac / Brandy" },
22
- { id: "gin", name: "Gin" },
23
- { id: "vodka", name: "Vodka" },
24
- { id: "rum", name: "Rum" },
25
- { id: "tequila", name: "Tequila / Mezcal" },
26
- ],
27
- },
28
- {
29
- id: "beer",
30
- name: "Beer & Cider",
31
- subtypes: [
32
- { id: "lager", name: "Lager" },
33
- { id: "ale", name: "Ale" },
34
- { id: "stout", name: "Stout & Porter" },
35
- { id: "cider", name: "Cider" },
36
- ],
37
- },
38
- {
39
- id: "non-alcoholic",
40
- name: "Non-Alcoholic",
41
- subtypes: [
42
- { id: "na-wine", name: "Non-Alcoholic Wine" },
43
- { id: "na-beer", name: "Non-Alcoholic Beer" },
44
- { id: "na-spirits", name: "Non-Alcoholic Spirits" },
45
- ],
46
- },
47
- ];
48
- const meta = {
49
- title: "Components/ClassificationSelect",
50
- component: ClassificationSelect,
51
- tags: ["autodocs"],
52
- parameters: { layout: "centered" },
53
- };
54
- export default meta;
55
- const stubArgs = {
56
- categories: sampleCategories,
57
- onCategoryChange: () => { },
58
- onSubtypeChange: () => { },
59
- };
60
- function DefaultRender() {
61
- const [category, setCategory] = useState("");
62
- const [subtype, setSubtype] = useState("");
63
- return (_jsxs("div", { className: "w-full max-w-xl", children: [_jsx(ClassificationSelect, { categories: sampleCategories, selectedCategory: category, selectedSubtype: subtype, onCategoryChange: (id) => {
64
- setCategory(id);
65
- setSubtype("");
66
- }, onSubtypeChange: setSubtype }), category && (_jsxs("p", { className: "mt-3 text-xs text-muted-foreground", children: ["Selected: ", _jsx("strong", { children: category }), subtype ? ` / ${subtype}` : ""] }))] }));
67
- }
68
- export const Default = {
69
- args: stubArgs,
70
- render: () => _jsx(DefaultRender, {}),
71
- };
72
- function WithPreselectedRender() {
73
- const [category, setCategory] = useState("wine");
74
- const [subtype, setSubtype] = useState("red-wine");
75
- return (_jsx("div", { className: "w-full max-w-xl", children: _jsx(ClassificationSelect, { categories: sampleCategories, selectedCategory: category, selectedSubtype: subtype, onCategoryChange: (id) => {
76
- setCategory(id);
77
- setSubtype("");
78
- }, onSubtypeChange: setSubtype }) }));
79
- }
80
- export const WithPreselected = {
81
- args: stubArgs,
82
- render: () => _jsx(WithPreselectedRender, {}),
83
- };
84
- export const Loading = {
85
- args: stubArgs,
86
- render: () => (_jsx("div", { className: "w-full max-w-xl", children: _jsx(ClassificationSelect, { categories: [], selectedCategory: "", selectedSubtype: "", onCategoryChange: () => { }, onSubtypeChange: () => { }, isLoading: true }) })),
87
- };
88
- function WithoutOtherRender() {
89
- const [category, setCategory] = useState("");
90
- const [subtype, setSubtype] = useState("");
91
- return (_jsx("div", { className: "w-full max-w-xl", children: _jsx(ClassificationSelect, { categories: sampleCategories, selectedCategory: category, selectedSubtype: subtype, onCategoryChange: (id) => {
92
- setCategory(id);
93
- setSubtype("");
94
- }, onSubtypeChange: setSubtype, allowOther: false, categoryLabel: "Beverage Category", subtypeLabel: "Beverage Subtype" }) }));
95
- }
96
- export const WithoutOther = {
97
- args: stubArgs,
98
- render: () => _jsx(WithoutOtherRender, {}),
99
- };
100
- //# sourceMappingURL=classification-select.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"classification-select.stories.js","sourceRoot":"","sources":["../../src/components/classification-select.stories.tsx"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import type { ReactNode } from "react";
2
- export interface CompletedOfferStat {
3
- label: string;
4
- value: string;
5
- }
6
- export interface CompletedOfferCardProps {
7
- title: string;
8
- subtitle?: string;
9
- sourceIcon?: ReactNode;
10
- winnerName: string;
11
- winnerPrice: string;
12
- /** Winner volume — optional, omitted from layout when undefined. */
13
- winnerVolume?: string;
14
- /** 1–3 stats shown in the bottom row. */
15
- stats: CompletedOfferStat[];
16
- /** Click handler for the "View offer" link. */
17
- onView?: () => void;
18
- /** Click handler for the "Archive" link. */
19
- onArchive?: () => void;
20
- /** Disable the entrance pulse (e.g. when re-rendering an existing card). */
21
- noPulse?: boolean;
22
- className?: string;
23
- }
24
- /**
25
- * Card representing a finalized deal in the producer Completed column.
26
- * Shows: meta row, title, "Finalized" pill badge, winner sub-card with
27
- * trophy icon and final terms, and a stat row.
28
- *
29
- * On first mount, the card emits a brief celebration pulse via
30
- * `CelebrationPulse`. Pass `noPulse` to suppress it (e.g. when an existing
31
- * card is being re-rendered after a state refresh, not a new arrival).
32
- */
33
- export declare function CompletedOfferCard({ title, subtitle, sourceIcon, winnerName, winnerPrice, winnerVolume, stats, onView, onArchive, noPulse, className, }: CompletedOfferCardProps): import("react/jsx-runtime").JSX.Element;
34
- //# sourceMappingURL=completed-offer-card.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completed-offer-card.d.ts","sourceRoot":"","sources":["../../src/components/completed-offer-card.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,KAAK,EACL,MAAM,EACN,SAAS,EACT,OAAe,EACf,SAAS,GACV,EAAE,uBAAuB,2CAgFzB"}
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Archive, ArrowRight, CheckCircle2, Trophy } from "lucide-react";
3
- import { cn } from "../lib/utils";
4
- import { CelebrationPulse } from "./celebration-pulse";
5
- /**
6
- * Card representing a finalized deal in the producer Completed column.
7
- * Shows: meta row, title, "Finalized" pill badge, winner sub-card with
8
- * trophy icon and final terms, and a stat row.
9
- *
10
- * On first mount, the card emits a brief celebration pulse via
11
- * `CelebrationPulse`. Pass `noPulse` to suppress it (e.g. when an existing
12
- * card is being re-rendered after a state refresh, not a new arrival).
13
- */
14
- export function CompletedOfferCard({ title, subtitle, sourceIcon, winnerName, winnerPrice, winnerVolume, stats, onView, onArchive, noPulse = false, className, }) {
15
- const card = (_jsxs("div", { className: cn("flex flex-col gap-3 rounded-lg border border-l-4 border-border border-l-emerald-500 bg-card p-3 shadow-xs", className), children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [(sourceIcon || subtitle) && (_jsxs("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [sourceIcon, subtitle && _jsx("span", { children: subtitle })] })), _jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-[10px] font-semibold text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-300", children: [_jsx(CheckCircle2, { className: "size-3", "aria-hidden": true }), "Finalized"] })] }), _jsx("h4", { className: "text-sm/5 font-semibold text-foreground", children: title }), _jsxs("div", { className: "flex items-center gap-2 rounded-md border border-emerald-200/40 bg-emerald-500/5 p-2 dark:border-emerald-400/20", children: [_jsx(Trophy, { className: "size-4 shrink-0 text-emerald-600 dark:text-emerald-400", "aria-hidden": true }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-xs font-semibold text-foreground", children: winnerName }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [winnerPrice, winnerVolume && _jsxs("span", { children: [" \u00B7 ", winnerVolume] })] })] })] }), stats.length > 0 && (_jsx("div", { className: "flex items-center justify-around border-t border-border pt-2", children: stats.map((stat) => (_jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-sm font-bold text-foreground", children: stat.value }), _jsx("div", { className: "text-[10px] uppercase tracking-wide text-muted-foreground", children: stat.label })] }, stat.label))) })), _jsxs("div", { className: "flex items-center justify-between text-xs", children: [onView && (_jsxs("button", { type: "button", onClick: onView, className: "inline-flex items-center gap-1 font-medium text-primary hover:text-primary/80", children: ["View offer", _jsx(ArrowRight, { className: "size-3", "aria-hidden": true })] })), onArchive && (_jsxs("button", { type: "button", onClick: onArchive, className: "inline-flex items-center gap-1 font-medium text-muted-foreground hover:text-foreground", children: [_jsx(Archive, { className: "size-3", "aria-hidden": true }), "Archive"] }))] })] }));
16
- if (noPulse)
17
- return card;
18
- return _jsx(CelebrationPulse, { children: card });
19
- }
20
- //# sourceMappingURL=completed-offer-card.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completed-offer-card.js","sourceRoot":"","sources":["../../src/components/completed-offer-card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA0BvD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,KAAK,EACL,MAAM,EACN,SAAS,EACT,OAAO,GAAG,KAAK,EACf,SAAS,GACe;IACxB,MAAM,IAAI,GAAG,CACX,eACE,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,SAAS,CACV,aAGD,eAAK,SAAS,EAAC,wCAAwC,aACpD,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,CAC3B,eAAK,SAAS,EAAC,yDAAyD,aACrE,UAAU,EACV,QAAQ,IAAI,yBAAO,QAAQ,GAAQ,IAChC,CACP,EACD,gBAAM,SAAS,EAAC,gKAAgK,aAC9K,KAAC,YAAY,IAAC,SAAS,EAAC,QAAQ,wBAAe,iBAE1C,IACH,EAGN,aAAI,SAAS,EAAC,yCAAyC,YAAE,KAAK,GAAM,EAGpE,eAAK,SAAS,EAAC,iHAAiH,aAC9H,KAAC,MAAM,IAAC,SAAS,EAAC,wDAAwD,wBAAe,EACzF,eAAK,SAAS,EAAC,gBAAgB,aAC7B,YAAG,SAAS,EAAC,gDAAgD,YAAE,UAAU,GAAK,EAC9E,aAAG,SAAS,EAAC,+BAA+B,aACzC,WAAW,EACX,YAAY,IAAI,uCAAU,YAAY,IAAQ,IAC7C,IACA,IACF,EAGL,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,cAAK,SAAS,EAAC,8DAA8D,YAC1E,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,eAAsB,SAAS,EAAC,aAAa,aAC3C,cAAK,SAAS,EAAC,mCAAmC,YAAE,IAAI,CAAC,KAAK,GAAO,EACrE,cAAK,SAAS,EAAC,2DAA2D,YACvE,IAAI,CAAC,KAAK,GACP,KAJE,IAAI,CAAC,KAAK,CAKd,CACP,CAAC,GACE,CACP,EAGD,eAAK,SAAS,EAAC,2CAA2C,aACvD,MAAM,IAAI,CACT,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAC,+EAA+E,2BAGzF,KAAC,UAAU,IAAC,SAAS,EAAC,QAAQ,wBAAe,IACtC,CACV,EACA,SAAS,IAAI,CACZ,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,SAAS,EAClB,SAAS,EAAC,wFAAwF,aAElG,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,wBAAe,eAEnC,CACV,IACG,IACF,CACP,CAAC;IAEF,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,KAAC,gBAAgB,cAAE,IAAI,GAAoB,CAAC;AACrD,CAAC"}
@@ -1,17 +0,0 @@
1
- import type { StoryObj } from "@storybook/react-vite";
2
- import { CompletedOfferCard } from "./completed-offer-card";
3
- declare const meta: {
4
- title: string;
5
- component: typeof CompletedOfferCard;
6
- tags: string[];
7
- parameters: {
8
- layout: string;
9
- };
10
- };
11
- export default meta;
12
- type Story = StoryObj<typeof meta>;
13
- export declare const Default: Story;
14
- export declare const SingleStat: Story;
15
- export declare const NoVolume: Story;
16
- export declare const NoPulse: Story;
17
- //# sourceMappingURL=completed-offer-card.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completed-offer-card.stories.d.ts","sourceRoot":"","sources":["../../src/components/completed-offer-card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,QAAA,MAAM,IAAI;;;;;;;CAKiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAgBrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAYxB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAetB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAiBrB,CAAC"}
@@ -1,75 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Sparkles } from "lucide-react";
3
- import { CompletedOfferCard } from "./completed-offer-card";
4
- const meta = {
5
- title: "Components/CompletedOfferCard",
6
- component: CompletedOfferCard,
7
- tags: ["autodocs"],
8
- parameters: { layout: "padded" },
9
- };
10
- export default meta;
11
- export const Default = {
12
- args: {
13
- title: "Cabernet Sauvignon 2023",
14
- subtitle: "Match · 5 days ago",
15
- sourceIcon: _jsx(Sparkles, { className: "size-3", "aria-hidden": true }),
16
- winnerName: "Berlin Spirits GmbH",
17
- winnerPrice: "€48 / unit",
18
- winnerVolume: "5,000 L",
19
- stats: [
20
- { label: "Offers sent", value: "3" },
21
- { label: "Responded", value: "2" },
22
- { label: "To close", value: "4d" },
23
- ],
24
- onView: () => alert("View offer"),
25
- onArchive: () => alert("Archive"),
26
- },
27
- };
28
- export const SingleStat = {
29
- args: {
30
- title: "Pinot Noir 2022",
31
- subtitle: "Match · 1d ago",
32
- sourceIcon: _jsx(Sparkles, { className: "size-3", "aria-hidden": true }),
33
- winnerName: "Nordic Wine Partners",
34
- winnerPrice: "€42 / unit",
35
- winnerVolume: "2,000 L",
36
- stats: [{ label: "Closed in", value: "6h" }],
37
- onView: () => alert("View offer"),
38
- onArchive: () => alert("Archive"),
39
- },
40
- };
41
- export const NoVolume = {
42
- args: {
43
- title: "Riesling 2021",
44
- subtitle: "Importer-direct · 2d ago",
45
- sourceIcon: _jsx(Sparkles, { className: "size-3", "aria-hidden": true }),
46
- winnerName: "Iberian Imports Co",
47
- winnerPrice: "€35 / unit",
48
- stats: [
49
- { label: "Offers sent", value: "1" },
50
- { label: "Responded", value: "1" },
51
- { label: "To close", value: "18m" },
52
- ],
53
- onView: () => alert("View offer"),
54
- onArchive: () => alert("Archive"),
55
- },
56
- };
57
- export const NoPulse = {
58
- args: {
59
- title: "Gewürztraminer 2023",
60
- subtitle: "Match · 1 week ago",
61
- sourceIcon: _jsx(Sparkles, { className: "size-3", "aria-hidden": true }),
62
- winnerName: "Tokyo Beverage Corp",
63
- winnerPrice: "€55 / unit",
64
- winnerVolume: "1,200 L",
65
- stats: [
66
- { label: "Offers sent", value: "2" },
67
- { label: "Responded", value: "2" },
68
- { label: "To close", value: "1d" },
69
- ],
70
- noPulse: true,
71
- onView: () => alert("View offer"),
72
- onArchive: () => alert("Archive"),
73
- },
74
- };
75
- //# sourceMappingURL=completed-offer-card.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"completed-offer-card.stories.js","sourceRoot":"","sources":["../../src/components/completed-offer-card.stories.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { ReactNode } from "react";
2
- export interface KanbanCardProps {
3
- children: ReactNode;
4
- className?: string;
5
- onClick?: () => void;
6
- }
7
- export declare function KanbanCard({ children, className, onClick }: KanbanCardProps): import("react/jsx-runtime").JSX.Element;
8
- //# sourceMappingURL=kanban-card.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kanban-card.d.ts","sourceRoot":"","sources":["../../src/components/kanban-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,eAAe,2CAwB3E"}
@@ -1,13 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils";
3
- export function KanbanCard({ children, className, onClick }) {
4
- return (_jsx("div", { className: cn("cursor-pointer rounded-lg border border-border bg-background p-3 shadow-xs transition-colors hover:border-border/80 hover:bg-muted/20", className), onClick: onClick, role: onClick ? "button" : undefined, tabIndex: onClick ? 0 : undefined, onKeyDown: onClick
5
- ? (e) => {
6
- if (e.key === "Enter" || e.key === " ") {
7
- e.preventDefault();
8
- onClick();
9
- }
10
- }
11
- : undefined, children: children }));
12
- }
13
- //# sourceMappingURL=kanban-card.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kanban-card.js","sourceRoot":"","sources":["../../src/components/kanban-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAmB;IAC1E,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,uIAAuI,EACvI,SAAS,CACV,EACD,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACpC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACjC,SAAS,EACP,OAAO;YACL,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;gBACJ,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;oBACvC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YACH,CAAC,CAAC,SAAS,YAGd,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { StoryObj } from "@storybook/react-vite";
2
- import { KanbanCard } from "./kanban-card";
3
- declare const meta: {
4
- title: string;
5
- component: typeof KanbanCard;
6
- tags: string[];
7
- parameters: {
8
- layout: string;
9
- };
10
- };
11
- export default meta;
12
- type Story = StoryObj<typeof meta>;
13
- export declare const Default: Story;
14
- export declare const WithRichContent: Story;
15
- export declare const NoClickHandler: Story;
16
- //# sourceMappingURL=kanban-card.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kanban-card.stories.d.ts","sourceRoot":"","sources":["../../src/components/kanban-card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,QAAA,MAAM,IAAI;;;;;;;CAKyB,CAAC;AAEpC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAarB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KA4B7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAS5B,CAAC"}
@@ -1,30 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { KanbanCard } from "./kanban-card";
3
- const meta = {
4
- title: "Components/KanbanCard",
5
- component: KanbanCard,
6
- tags: ["autodocs"],
7
- parameters: { layout: "centered" },
8
- };
9
- export default meta;
10
- export const Default = {
11
- args: {
12
- children: (_jsxs("div", { children: [_jsx("p", { className: "text-sm/5 font-medium text-foreground", children: "Ch\u00E2teau Margaux 2019 \u2014 Import Offer" }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Submitted 2 days ago" })] })),
13
- onClick: () => alert("Card clicked"),
14
- },
15
- decorators: [(Story) => _jsx("div", { className: "w-64", children: _jsx(Story, {}) })],
16
- };
17
- export const WithRichContent = {
18
- args: {
19
- children: (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "inline-flex rounded-sm bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground", children: "Wine" }), _jsx("span", { className: "text-[10px] text-muted-foreground", children: "#42" })] }), _jsx("p", { className: "text-sm/5 font-medium text-foreground", children: "Petrus 2015 \u2014 Procurement Offer" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "size-5 shrink-0 rounded-full bg-emerald-100" }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Cellar Origins Ltd." })] }), _jsxs("div", { className: "flex items-center justify-between pt-1", children: [_jsx("span", { className: "text-xs font-semibold text-foreground", children: "\u20AC 420/case" }), _jsx("span", { className: "inline-flex rounded-sm bg-sky-50 px-1.5 py-0.5 text-[10px] font-medium text-sky-700 ring-1 ring-sky-200", children: "Negotiating" })] })] })),
20
- onClick: () => alert("Card clicked"),
21
- },
22
- decorators: [(Story) => _jsx("div", { className: "w-64", children: _jsx(Story, {}) })],
23
- };
24
- export const NoClickHandler = {
25
- args: {
26
- children: (_jsx("p", { className: "text-sm/5 font-medium text-foreground", children: "Static card \u2014 no click handler" })),
27
- },
28
- decorators: [(Story) => _jsx("div", { className: "w-64", children: _jsx(Story, {}) })],
29
- };
30
- //# sourceMappingURL=kanban-card.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kanban-card.stories.js","sourceRoot":"","sources":["../../src/components/kanban-card.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,uBAAuB;IAC9B,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,OAAO,GAAU;IAC5B,IAAI,EAAE;QACJ,QAAQ,EAAE,CACR,0BACE,YAAG,SAAS,EAAC,uCAAuC,8DAEhD,EACJ,YAAG,SAAS,EAAC,oCAAoC,qCAAyB,IACtE,CACP;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC;KACrC;IACD,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAK,SAAS,EAAC,MAAM,YAAC,KAAC,KAAK,KAAG,GAAM,CAAC;CAC/D,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAU;IACpC,IAAI,EAAE;QACJ,QAAQ,EAAE,CACR,eAAK,SAAS,EAAC,qBAAqB,aAClC,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,6FAA6F,qBAEtG,EACP,eAAM,SAAS,EAAC,mCAAmC,oBAAW,IAC1D,EACN,YAAG,SAAS,EAAC,uCAAuC,qDAEhD,EACJ,eAAK,SAAS,EAAC,yBAAyB,aACtC,cAAK,SAAS,EAAC,6CAA6C,GAAG,EAC/D,eAAM,SAAS,EAAC,+BAA+B,oCAA2B,IACtE,EACN,eAAK,SAAS,EAAC,wCAAwC,aACrD,eAAM,SAAS,EAAC,uCAAuC,gCAAkB,EACzE,eAAM,SAAS,EAAC,yGAAyG,4BAElH,IACH,IACF,CACP;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC;KACrC;IACD,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAK,SAAS,EAAC,MAAM,YAAC,KAAC,KAAK,KAAG,GAAM,CAAC;CAC/D,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAU;IACnC,IAAI,EAAE;QACJ,QAAQ,EAAE,CACR,YAAG,SAAS,EAAC,uCAAuC,oDAEhD,CACL;KACF;IACD,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAK,SAAS,EAAC,MAAM,YAAC,KAAC,KAAK,KAAG,GAAM,CAAC;CAC/D,CAAC"}
@@ -1,13 +0,0 @@
1
- export interface PriceComparisonProps {
2
- targetPrice: number | string | null;
3
- targetLabel?: string;
4
- targetSubLabel?: string;
5
- currency?: string;
6
- offeredPrice: string;
7
- onPriceChange: (value: string) => void;
8
- offeredLabel?: string;
9
- offeredHint?: string;
10
- className?: string;
11
- }
12
- export declare function PriceComparison({ targetPrice, targetLabel, targetSubLabel, currency, offeredPrice, onPriceChange, offeredLabel, offeredHint, className, }: PriceComparisonProps): import("react/jsx-runtime").JSX.Element;
13
- //# sourceMappingURL=price-comparison.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"price-comparison.d.ts","sourceRoot":"","sources":["../../src/components/price-comparison.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8DD,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,WAAoC,EACpC,cAAc,EACd,QAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAmC,EACnC,WAA8C,EAC9C,SAAS,GACV,EAAE,oBAAoB,2CAoEtB"}
@@ -1,60 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import * as React from "react";
3
- import { cn } from "../lib/utils";
4
- function formatPrice(value, currency) {
5
- return `${value.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} ${currency}`;
6
- }
7
- function computeDelta(target, offered, currency) {
8
- if (target === 0)
9
- return null;
10
- const diff = offered - target;
11
- const pct = Math.abs((diff / target) * 100);
12
- const absDiff = Math.abs(diff).toFixed(2);
13
- if (diff === 0) {
14
- return { diff: 0, pct: 0, tone: "emerald", label: "At target price" };
15
- }
16
- if (diff < 0) {
17
- return {
18
- diff,
19
- pct,
20
- tone: "emerald",
21
- label: `▼ ${absDiff} ${currency} below target (${pct.toFixed(0)}%) — Competitive`,
22
- };
23
- }
24
- if (pct > 15) {
25
- return {
26
- diff,
27
- pct,
28
- tone: "red",
29
- label: `▲ ${absDiff} ${currency} above target (${pct.toFixed(0)}%) — Above range`,
30
- };
31
- }
32
- return {
33
- diff,
34
- pct,
35
- tone: "amber",
36
- label: `▲ ${absDiff} ${currency} above target (${pct.toFixed(0)}%)`,
37
- };
38
- }
39
- const deltaClasses = {
40
- emerald: "border-emerald-200 bg-emerald-50/60 text-emerald-700 dark:border-emerald-500/25 dark:bg-emerald-950/30 dark:text-emerald-300",
41
- amber: "border-amber-200 bg-amber-50/60 text-amber-700 dark:border-amber-500/25 dark:bg-amber-950/30 dark:text-amber-300",
42
- red: "border-red-200 bg-red-50/60 text-red-700 dark:border-red-500/25 dark:bg-red-950/30 dark:text-red-300",
43
- };
44
- export function PriceComparison({ targetPrice, targetLabel = "Buyer's Target Price", targetSubLabel, currency = "SEK", offeredPrice, onPriceChange, offeredLabel = "Your Offered Price", offeredHint = "Price you're offering per unit", className, }) {
45
- const parsedTarget = targetPrice !== null ? Number(targetPrice) : null;
46
- const parsedOffered = Number(offeredPrice);
47
- const delta = React.useMemo(() => {
48
- if (parsedTarget === null ||
49
- Number.isNaN(parsedTarget) ||
50
- Number.isNaN(parsedOffered) ||
51
- offeredPrice.trim() === "") {
52
- return null;
53
- }
54
- return computeDelta(parsedTarget, parsedOffered, currency);
55
- }, [parsedTarget, parsedOffered, currency, offeredPrice]);
56
- return (_jsxs("div", { className: cn("grid grid-cols-2 gap-3", className), children: [_jsxs("div", { className: "rounded-xl border border-sky-200/60 bg-sky-50/50 px-4 py-3.5 text-right dark:border-sky-500/15 dark:bg-sky-950/20", children: [_jsx("p", { className: "text-[10px] font-semibold uppercase tracking-[0.08em] text-sky-700 dark:text-sky-300", children: targetLabel }), targetSubLabel && (_jsx("p", { className: "mt-0.5 text-[11px] text-sky-600/70 dark:text-sky-400/60", children: targetSubLabel })), _jsx("p", { className: "mt-1.5 text-2xl font-bold tabular-nums text-sky-800 dark:text-sky-200", children: parsedTarget !== null && !Number.isNaN(parsedTarget)
57
- ? formatPrice(parsedTarget, currency)
58
- : "—" })] }), _jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-[11px] font-semibold text-foreground", children: [offeredLabel, _jsx("span", { className: "ml-0.5 text-red-500", "aria-hidden": "true", children: "*" })] }), _jsx("input", { type: "text", inputMode: "decimal", value: offeredPrice, onChange: (e) => onPriceChange(e.target.value), className: "w-full rounded-lg border border-border bg-background px-3 py-2.5 text-lg font-semibold tabular-nums text-foreground outline-hidden transition-shadow focus:ring-2 focus:ring-ring", "aria-label": offeredLabel }), _jsx("p", { className: "mt-1 text-[10px] text-muted-foreground", children: offeredHint })] }), delta && (_jsx("div", { className: cn("col-span-2 rounded-lg border px-3 py-1.5 text-center text-[11px] font-semibold", deltaClasses[delta.tone]), children: delta.label }))] }));
59
- }
60
- //# sourceMappingURL=price-comparison.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"price-comparison.js","sourceRoot":"","sources":["../../src/components/price-comparison.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { Meta, StoryObj } from "@storybook/react-vite";
2
- import { PriceComparison } from "./price-comparison";
3
- declare const meta: Meta<typeof PriceComparison>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const BelowTarget: Story;
7
- export declare const AboveTarget: Story;
8
- export declare const FarAboveTarget: Story;
9
- export declare const NoTarget: Story;
10
- export declare const AtTarget: Story;
11
- //# sourceMappingURL=price-comparison.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"price-comparison.stories.d.ts","sourceRoot":"","sources":["../../src/components/price-comparison.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAA6B,MAAM,oBAAoB,CAAC;AAahF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAMtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC"}
@@ -1,56 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useState } from "react";
3
- import { PriceComparison } from "./price-comparison";
4
- function PriceComparisonWrapper(args) {
5
- const [price, setPrice] = useState(args.offeredPrice);
6
- return (_jsx(PriceComparison, { ...args, offeredPrice: price, onPriceChange: setPrice }));
7
- }
8
- const meta = {
9
- title: "Components/PriceComparison",
10
- component: PriceComparison,
11
- tags: ["autodocs"],
12
- parameters: { layout: "padded" },
13
- decorators: [(Story) => _jsx("div", { className: "max-w-lg", children: _jsx(Story, {}) })],
14
- };
15
- export default meta;
16
- export const BelowTarget = {
17
- args: {
18
- targetPrice: 89,
19
- offeredPrice: "75",
20
- onPriceChange: () => { },
21
- },
22
- render: (args) => _jsx(PriceComparisonWrapper, { ...args }),
23
- };
24
- export const AboveTarget = {
25
- args: {
26
- targetPrice: 89,
27
- offeredPrice: "95",
28
- onPriceChange: () => { },
29
- },
30
- render: (args) => _jsx(PriceComparisonWrapper, { ...args }),
31
- };
32
- export const FarAboveTarget = {
33
- args: {
34
- targetPrice: 89,
35
- offeredPrice: "120",
36
- onPriceChange: () => { },
37
- },
38
- render: (args) => _jsx(PriceComparisonWrapper, { ...args }),
39
- };
40
- export const NoTarget = {
41
- args: {
42
- targetPrice: null,
43
- offeredPrice: "75",
44
- onPriceChange: () => { },
45
- },
46
- render: (args) => _jsx(PriceComparisonWrapper, { ...args }),
47
- };
48
- export const AtTarget = {
49
- args: {
50
- targetPrice: 89,
51
- offeredPrice: "89",
52
- onPriceChange: () => { },
53
- },
54
- render: (args) => _jsx(PriceComparisonWrapper, { ...args }),
55
- };
56
- //# sourceMappingURL=price-comparison.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"price-comparison.stories.js","sourceRoot":"","sources":["../../src/components/price-comparison.stories.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,eAAe,EAA6B,MAAM,oBAAoB,CAAC;AAEhF,SAAS,sBAAsB,CAAC,IAA0B;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,CACL,KAAC,eAAe,OACV,IAAI,EACR,YAAY,EAAE,KAAK,EACnB,aAAa,EAAE,QAAQ,GACvB,CACH,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAiC;IACzC,KAAK,EAAE,4BAA4B;IACnC,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAK,SAAS,EAAC,UAAU,YAAC,KAAC,KAAK,KAAG,GAAM,CAAC;CACnE,CAAC;AAEF,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,IAAI,EAAE;QACJ,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;KACxB;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,sBAAsB,OAAK,IAAI,GAAI;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,IAAI,EAAE;QACJ,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;KACxB;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,sBAAsB,OAAK,IAAI,GAAI;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAU;IACnC,IAAI,EAAE;QACJ,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;KACxB;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,sBAAsB,OAAK,IAAI,GAAI;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,IAAI,EAAE;QACJ,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;KACxB;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,sBAAsB,OAAK,IAAI,GAAI;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,IAAI,EAAE;QACJ,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;KACxB;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,sBAAsB,OAAK,IAAI,GAAI;CACvD,CAAC"}
@@ -1,13 +0,0 @@
1
- export interface PricingReferenceCardPriceRange {
2
- min?: number;
3
- max?: number;
4
- }
5
- export interface PricingReferenceCardProps {
6
- priceRanges: PricingReferenceCardPriceRange[] | null | undefined;
7
- currency: string | null | undefined;
8
- recommendedOfferPriceMin: number | null | undefined;
9
- recommendedOfferPriceMax: number | null | undefined;
10
- className?: string;
11
- }
12
- export declare function PricingReferenceCard({ priceRanges, currency, recommendedOfferPriceMin, recommendedOfferPriceMax, className, }: PricingReferenceCardProps): import("react/jsx-runtime").JSX.Element | null;
13
- //# sourceMappingURL=pricing-reference-card.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pricing-reference-card.d.ts","sourceRoot":"","sources":["../../src/components/pricing-reference-card.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,8BAA8B,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACjE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,wBAAwB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,wBAAwB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,QAAQ,EACR,wBAAwB,EACxB,wBAAwB,EACxB,SAAS,GACV,EAAE,yBAAyB,kDAuE3B"}
@@ -1,38 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils";
3
- function formatRetailPrice(ranges, currency) {
4
- const numbers = [];
5
- for (const r of ranges) {
6
- if (typeof r.min === "number" && Number.isFinite(r.min))
7
- numbers.push(r.min);
8
- if (typeof r.max === "number" && Number.isFinite(r.max))
9
- numbers.push(r.max);
10
- }
11
- if (numbers.length === 0)
12
- return "—";
13
- const min = Math.min(...numbers);
14
- const max = Math.max(...numbers);
15
- if (min === max)
16
- return `${min} ${currency}`;
17
- return `${min} \u2013 ${max} ${currency}`;
18
- }
19
- function formatRecommendedRange(min, max, currency) {
20
- const flooredMin = Math.floor(min);
21
- const flooredMax = Math.floor(max);
22
- if (flooredMin === flooredMax)
23
- return `${flooredMin} ${currency}`;
24
- return `${flooredMin} \u2013 ${flooredMax} ${currency}`;
25
- }
26
- export function PricingReferenceCard({ priceRanges, currency, recommendedOfferPriceMin, recommendedOfferPriceMax, className, }) {
27
- if (!priceRanges || priceRanges.length === 0 || !currency)
28
- return null;
29
- const retailLabel = formatRetailPrice(priceRanges, currency);
30
- if (retailLabel === "—")
31
- return null;
32
- const hasRecommendation = recommendedOfferPriceMin !== null &&
33
- recommendedOfferPriceMin !== undefined &&
34
- recommendedOfferPriceMax !== null &&
35
- recommendedOfferPriceMax !== undefined;
36
- return (_jsxs("div", { className: cn("rounded-xl border border-emerald-500/25 bg-linear-to-br from-emerald-500/8 to-blue-500/8 p-5", className), "data-testid": "pricing-reference-card", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-4 border-b border-dashed border-slate-400/20 pb-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "text-[11px] uppercase tracking-wider text-slate-400", children: ["Buyer's retail price", " ", _jsx("span", { className: "normal-case tracking-normal text-slate-500", children: "(consumer-facing)" })] }), _jsx("div", { className: "mt-1 text-xs text-slate-300", children: "What the end consumer pays in-store" })] }), _jsx("div", { className: "text-2xl font-semibold text-slate-100", children: retailLabel })] }), hasRecommendation ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-baseline justify-between gap-4 pt-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-1.5 text-[11px] uppercase tracking-wider text-emerald-300", children: [_jsx("span", { className: "inline-block size-3 rounded-full bg-emerald-500" }), "CellarNode recommended offer range"] }), _jsx("div", { className: "mt-1 text-xs text-slate-300", children: "Suggested producer-to-importer price" })] }), _jsx("div", { className: "text-2xl font-semibold text-emerald-300", children: formatRecommendedRange(recommendedOfferPriceMin, recommendedOfferPriceMax, currency) })] }), _jsx("div", { className: "mt-4 rounded-lg border-l-[3px] border-emerald-500 bg-slate-950/40 p-3", children: _jsxs("div", { className: "text-xs/relaxed text-slate-300", children: [_jsx("strong", { className: "text-emerald-300", children: "Why this range?" }), " ", "This leaves room for the importer's margin, distribution fees, and market markup while keeping your offer competitive. Offers within this range are most likely to be accepted."] }) })] })) : null] }));
37
- }
38
- //# sourceMappingURL=pricing-reference-card.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pricing-reference-card.js","sourceRoot":"","sources":["../../src/components/pricing-reference-card.tsx"],"names":[],"mappings":"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"}