@cellarnode/ui 0.9.4 → 0.10.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.
Files changed (46) hide show
  1. package/dist/components/avatar-stack.d.ts +19 -0
  2. package/dist/components/avatar-stack.d.ts.map +1 -0
  3. package/dist/components/avatar-stack.js +20 -0
  4. package/dist/components/avatar-stack.js.map +1 -0
  5. package/dist/components/avatar-stack.stories.d.ts +29 -0
  6. package/dist/components/avatar-stack.stories.d.ts.map +1 -0
  7. package/dist/components/avatar-stack.stories.js +48 -0
  8. package/dist/components/avatar-stack.stories.js.map +1 -0
  9. package/dist/components/branch-edit-banner.d.ts +22 -0
  10. package/dist/components/branch-edit-banner.d.ts.map +1 -0
  11. package/dist/components/branch-edit-banner.js +14 -0
  12. package/dist/components/branch-edit-banner.js.map +1 -0
  13. package/dist/components/branch-edit-banner.stories.d.ts +13 -0
  14. package/dist/components/branch-edit-banner.stories.d.ts.map +1 -0
  15. package/dist/components/branch-edit-banner.stories.js +38 -0
  16. package/dist/components/branch-edit-banner.stories.js.map +1 -0
  17. package/dist/components/journey-card.d.ts +40 -0
  18. package/dist/components/journey-card.d.ts.map +1 -0
  19. package/dist/components/journey-card.js +39 -0
  20. package/dist/components/journey-card.js.map +1 -0
  21. package/dist/components/journey-card.stories.d.ts +13 -0
  22. package/dist/components/journey-card.stories.d.ts.map +1 -0
  23. package/dist/components/journey-card.stories.js +97 -0
  24. package/dist/components/journey-card.stories.js.map +1 -0
  25. package/dist/components/offer-card.d.ts +51 -0
  26. package/dist/components/offer-card.d.ts.map +1 -0
  27. package/dist/components/offer-card.js +56 -0
  28. package/dist/components/offer-card.js.map +1 -0
  29. package/dist/components/offer-card.stories.d.ts +11 -0
  30. package/dist/components/offer-card.stories.d.ts.map +1 -0
  31. package/dist/components/offer-card.stories.js +94 -0
  32. package/dist/components/offer-card.stories.js.map +1 -0
  33. package/dist/components/org-avatar.d.ts +19 -0
  34. package/dist/components/org-avatar.d.ts.map +1 -0
  35. package/dist/components/org-avatar.js +69 -0
  36. package/dist/components/org-avatar.js.map +1 -0
  37. package/dist/components/org-avatar.stories.d.ts +29 -0
  38. package/dist/components/org-avatar.stories.d.ts.map +1 -0
  39. package/dist/components/org-avatar.stories.js +45 -0
  40. package/dist/components/org-avatar.stories.js.map +1 -0
  41. package/dist/index.d.ts +5 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +5 -0
  44. package/dist/index.js.map +1 -1
  45. package/package.json +1 -1
  46. package/src/theme/tokens.css +18 -0
@@ -0,0 +1,19 @@
1
+ import { type OrgAvatarSize, type OrgAvatarStatus } from "./org-avatar";
2
+ export interface StackedOrg {
3
+ id: string;
4
+ name: string;
5
+ logoUrl?: string | null;
6
+ status?: OrgAvatarStatus;
7
+ isOwnOrg?: boolean;
8
+ }
9
+ export interface AvatarStackProps {
10
+ orgs: StackedOrg[];
11
+ /** Visible avatars before collapsing to +N. Default: 4 */
12
+ max?: number;
13
+ size?: OrgAvatarSize;
14
+ className?: string;
15
+ /** Layout direction — `row` overlaps left-to-right, `row-reverse` right-to-left */
16
+ direction?: "row" | "row-reverse";
17
+ }
18
+ export declare function AvatarStack({ orgs, max, size, className, direction, }: AvatarStackProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=avatar-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-stack.d.ts","sourceRoot":"","sources":["../../src/components/avatar-stack.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEnF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,SAAS,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC;CACnC;AAMD,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,GAAO,EACP,IAAW,EACX,SAAS,EACT,SAAiB,GAClB,EAAE,gBAAgB,2CAkDlB"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils";
3
+ import { OrgAvatar } from "./org-avatar";
4
+ const OVERLAP_PX = { sm: -6, md: -9, lg: -12 };
5
+ const PLUS_SIZE_PX = { sm: 24, md: 32, lg: 40 };
6
+ const PLUS_FONT_PX = { sm: 9, md: 11, lg: 13 };
7
+ export function AvatarStack({ orgs, max = 4, size = "md", className, direction = "row", }) {
8
+ const visible = orgs.slice(0, max);
9
+ const overflow = orgs.length - visible.length;
10
+ const overlap = OVERLAP_PX[size];
11
+ const items = (_jsxs(_Fragment, { children: [visible.map((org, idx) => (_jsx("span", { className: "relative", style: { marginLeft: idx === 0 ? 0 : overlap, zIndex: visible.length - idx }, children: _jsx(OrgAvatar, { name: org.name, orgId: org.id, logoUrl: org.logoUrl, status: org.status, isOwnOrg: org.isOwnOrg, size: size }) }, org.id))), overflow > 0 && (_jsxs("span", { className: "relative inline-flex shrink-0 items-center justify-center rounded-full border-2 border-[var(--card)] bg-[color-mix(in_oklab,var(--muted-foreground)_10%,var(--card))] font-display font-bold text-[var(--muted-foreground)] shadow-[0_1px_3px_oklch(0_0_0/0.06)]", style: {
12
+ width: PLUS_SIZE_PX[size],
13
+ height: PLUS_SIZE_PX[size],
14
+ fontSize: PLUS_FONT_PX[size],
15
+ marginLeft: overlap,
16
+ zIndex: 0,
17
+ }, title: `${overflow} more`, children: ["+", overflow] }))] }));
18
+ return (_jsx("div", { className: cn("inline-flex p-[2px]", direction === "row-reverse" && "flex-row-reverse", className), role: "list", "aria-label": `${orgs.length} organizations`, children: items }));
19
+ }
20
+ //# sourceMappingURL=avatar-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-stack.js","sourceRoot":"","sources":["../../src/components/avatar-stack.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,SAAS,EAA4C,MAAM,cAAc,CAAC;AAoBnF,MAAM,UAAU,GAAkC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9E,MAAM,YAAY,GAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC/E,MAAM,YAAY,GAAkC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE9E,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,GAAG,GAAG,CAAC,EACP,IAAI,GAAG,IAAI,EACX,SAAS,EACT,SAAS,GAAG,KAAK,GACA;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjC,MAAM,KAAK,GAAG,CACZ,8BACG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CACzB,eAEE,SAAS,EAAC,UAAU,EACpB,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,YAE5E,KAAC,SAAS,IACR,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,KAAK,EAAE,GAAG,CAAC,EAAE,EACb,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,IAAI,EAAE,IAAI,GACV,IAXG,GAAG,CAAC,EAAE,CAYN,CACR,CAAC,EACD,QAAQ,GAAG,CAAC,IAAI,CACf,gBACE,SAAS,EAAC,kQAAkQ,EAC5Q,KAAK,EAAE;oBACL,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;oBACzB,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;oBAC1B,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC;oBAC5B,UAAU,EAAE,OAAO;oBACnB,MAAM,EAAE,CAAC;iBACV,EACD,KAAK,EAAE,GAAG,QAAQ,OAAO,kBAEvB,QAAQ,IACL,CACR,IACA,CACJ,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,KAAK,aAAa,IAAI,kBAAkB,EAAE,SAAS,CAAC,EAClG,IAAI,EAAC,MAAM,gBACC,GAAG,IAAI,CAAC,MAAM,gBAAgB,YAEzC,KAAK,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { StoryObj } from "@storybook/react-vite";
2
+ import { AvatarStack } from "./avatar-stack";
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof AvatarStack;
6
+ tags: string[];
7
+ argTypes: {
8
+ size: {
9
+ control: "radio";
10
+ options: string[];
11
+ };
12
+ max: {
13
+ control: "number";
14
+ };
15
+ direction: {
16
+ control: "radio";
17
+ options: string[];
18
+ };
19
+ };
20
+ };
21
+ export default meta;
22
+ type Story = StoryObj<typeof meta>;
23
+ export declare const Default: Story;
24
+ export declare const WithOverflow: Story;
25
+ export declare const MixedStatuses: Story;
26
+ export declare const WonState: Story;
27
+ export declare const WithOwnOrg: Story;
28
+ export declare const Reversed: Story;
29
+ //# sourceMappingURL=avatar-stack.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-stack.stories.d.ts","sourceRoot":"","sources":["../../src/components/avatar-stack.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAmB,MAAM,gBAAgB,CAAC;AAW9D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;CAS0B,CAAC;AAErC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAA4C,CAAC;AACnE,eAAO,MAAM,YAAY,EAAE,KAAwC,CAAC;AACpE,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AACF,eAAO,MAAM,QAAQ,EAAE,KAQtB,CAAC;AACF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AACF,eAAO,MAAM,QAAQ,EAAE,KAAsE,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { AvatarStack } from "./avatar-stack";
2
+ const demo = [
3
+ { id: "nw", name: "Nordic Wines" },
4
+ { id: "sm", name: "Scandic Markets" },
5
+ { id: "vi", name: "Vinum Imports" },
6
+ { id: "ta", name: "Tenuta Antica" },
7
+ { id: "cs", name: "Cavas del Sur" },
8
+ { id: "mb", name: "Maison Blanc" },
9
+ ];
10
+ const meta = {
11
+ title: "Components/AvatarStack",
12
+ component: AvatarStack,
13
+ tags: ["autodocs"],
14
+ argTypes: {
15
+ size: { control: "radio", options: ["sm", "md", "lg"] },
16
+ max: { control: "number" },
17
+ direction: { control: "radio", options: ["row", "row-reverse"] },
18
+ },
19
+ };
20
+ export default meta;
21
+ export const Default = { args: { orgs: demo.slice(0, 3) } };
22
+ export const WithOverflow = { args: { orgs: demo, max: 3 } };
23
+ export const MixedStatuses = {
24
+ args: {
25
+ orgs: [
26
+ { ...demo[0], status: "responded" },
27
+ { ...demo[1], status: "pending" },
28
+ { ...demo[2], status: "responded" },
29
+ ],
30
+ },
31
+ };
32
+ export const WonState = {
33
+ args: {
34
+ orgs: [
35
+ { ...demo[0], status: "won" },
36
+ { ...demo[1], status: "lost" },
37
+ { ...demo[2], status: "lost" },
38
+ ],
39
+ },
40
+ };
41
+ export const WithOwnOrg = {
42
+ args: {
43
+ orgs: [{ ...demo[0], isOwnOrg: true }],
44
+ size: "lg",
45
+ },
46
+ };
47
+ export const Reversed = { args: { orgs: demo.slice(0, 3), direction: "row-reverse" } };
48
+ //# sourceMappingURL=avatar-stack.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-stack.stories.js","sourceRoot":"","sources":["../../src/components/avatar-stack.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAmB,MAAM,gBAAgB,CAAC;AAE9D,MAAM,IAAI,GAAiB;IACzB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE;IAClC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACrC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE;IACnC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE;IACnC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE;IACnC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE;CACnC,CAAC;AAEF,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,wBAAwB;IAC/B,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;QACvD,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC1B,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;KACjE;CACiC,CAAC;AAErC,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,OAAO,GAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACnE,MAAM,CAAC,MAAM,YAAY,GAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACpE,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,WAAW,EAAE;YACpC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,SAAS,EAAE;YAClC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,WAAW,EAAE;SACrC;KACF;CACF,CAAC;AACF,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,KAAK,EAAE;YAC9B,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/B,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,MAAM,EAAE;SAChC;KACF;CACF,CAAC;AACF,MAAM,CAAC,MAAM,UAAU,GAAU;IAC/B,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,EAAE,IAAI;KACX;CACF,CAAC;AACF,MAAM,CAAC,MAAM,QAAQ,GAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import * as React from "react";
2
+ export interface BranchEditBannerProps {
3
+ /** User-facing product name (e.g. "Chardonnay Reserve 2021") */
4
+ productName: string;
5
+ /** Context the producer is modifying for (e.g. tender name) */
6
+ contextName: string;
7
+ /** True when the branch has changes that can be reverted */
8
+ hasChanges: boolean;
9
+ /** Localized copy — callers are expected to run these through i18n */
10
+ copy?: {
11
+ title?: (args: {
12
+ productName: string;
13
+ contextName: string;
14
+ }) => React.ReactNode;
15
+ reassurance?: string;
16
+ revertLabel?: string;
17
+ };
18
+ onRevert?: () => void;
19
+ className?: string;
20
+ }
21
+ export declare function BranchEditBanner({ productName, contextName, hasChanges, copy, onRevert, className, }: BranchEditBannerProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=branch-edit-banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-edit-banner.d.ts","sourceRoot":"","sources":["../../src/components/branch-edit-banner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,UAAU,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,KAAK,KAAK,CAAC,SAAS,CAAC;QAChF,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,WAAW,EACX,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,SAAS,GACV,EAAE,qBAAqB,2CA6BvB"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Info } from "lucide-react";
3
+ import { cn } from "../lib/utils";
4
+ import { Button } from "./button";
5
+ const DEFAULT_COPY = {
6
+ title: ({ productName, contextName }) => (_jsxs(_Fragment, { children: ["Modifying ", _jsx("strong", { children: productName }), " for ", contextName] })),
7
+ reassurance: "Changes here won't affect your portfolio outside of this offer.",
8
+ revertLabel: "Revert to portfolio version",
9
+ };
10
+ export function BranchEditBanner({ productName, contextName, hasChanges, copy, onRevert, className, }) {
11
+ const merged = { ...DEFAULT_COPY, ...copy };
12
+ return (_jsxs("div", { role: "status", className: cn("flex items-start gap-3 rounded-2xl border px-5 py-4", "bg-[var(--tone-warning-surface)] border-[var(--tone-warning-border)]", "shadow-[0_1px_2px_oklch(0.2_0.005_230/0.04),0_12px_36px_-28px_oklch(0.2_0.005_230/0.10)]", "backdrop-blur-[14px] backdrop-saturate-[120%]", "[&>*]:text-[color-mix(in_oklab,black_56%,var(--accent-secondary)_44%)]", className), children: [_jsx(Info, { className: "mt-0.5 size-5 shrink-0 text-[var(--tone-warning-fg)]", "aria-hidden": "true" }), _jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-display text-sm font-semibold leading-snug tracking-tight", children: merged.title({ productName, contextName }) }), _jsx("p", { className: "mt-1 text-xs leading-relaxed opacity-80", children: merged.reassurance })] }), hasChanges && onRevert && (_jsx(Button, { plain: true, onClick: onRevert, className: "shrink-0 text-xs", children: merged.revertLabel }))] }));
13
+ }
14
+ //# sourceMappingURL=branch-edit-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-edit-banner.js","sourceRoot":"","sources":["../../src/components/branch-edit-banner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAmBlC,MAAM,YAAY,GAAyD;IACzE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CACvC,4CACY,2BAAS,WAAW,GAAU,WAAM,WAAW,IACxD,CACJ;IACD,WAAW,EAAE,iEAAiE;IAC9E,WAAW,EAAE,6BAA6B;CAC3C,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,EAC/B,WAAW,EACX,WAAW,EACX,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,SAAS,GACa;IACtB,MAAM,MAAM,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;IAE5C,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,EAAE,CACX,qDAAqD,EACrD,sEAAsE,EACtE,0FAA0F,EAC1F,+CAA+C,EAC/C,wEAAwE,EACxE,SAAS,CACV,aAED,KAAC,IAAI,IAAC,SAAS,EAAC,sDAAsD,iBAAa,MAAM,GAAG,EAC5F,eAAK,SAAS,EAAC,QAAQ,aACrB,cAAK,SAAS,EAAC,gEAAgE,YAC5E,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,GACvC,EACN,YAAG,SAAS,EAAC,yCAAyC,YAAE,MAAM,CAAC,WAAW,GAAK,IAC3E,EACL,UAAU,IAAI,QAAQ,IAAI,CACzB,KAAC,MAAM,IAAC,KAAK,QAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,kBAAkB,YAC1D,MAAM,CAAC,WAAW,GACZ,CACV,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { StoryObj } from "@storybook/react-vite";
2
+ import { BranchEditBanner } from "./branch-edit-banner";
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof BranchEditBanner;
6
+ tags: string[];
7
+ };
8
+ export default meta;
9
+ type Story = StoryObj<typeof meta>;
10
+ export declare const NoChangesYet: Story;
11
+ export declare const WithChanges: Story;
12
+ export declare const CustomCopy: Story;
13
+ //# sourceMappingURL=branch-edit-banner.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-edit-banner.stories.d.ts","sourceRoot":"","sources":["../../src/components/branch-edit-banner.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,QAAA,MAAM,IAAI;;;;CAI+B,CAAC;AAE1C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAgBxB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BranchEditBanner } from "./branch-edit-banner";
3
+ const meta = {
4
+ title: "Components/BranchEditBanner",
5
+ component: BranchEditBanner,
6
+ tags: ["autodocs"],
7
+ };
8
+ export default meta;
9
+ export const NoChangesYet = {
10
+ args: {
11
+ productName: "Chardonnay Reserve 2021",
12
+ contextName: "Nordic Wines Q2 Organic Whites Tender",
13
+ hasChanges: false,
14
+ onRevert: () => alert("revert"),
15
+ },
16
+ };
17
+ export const WithChanges = {
18
+ args: {
19
+ productName: "Chardonnay Reserve 2021",
20
+ contextName: "Nordic Wines Q2 Organic Whites Tender",
21
+ hasChanges: true,
22
+ onRevert: () => alert("revert"),
23
+ },
24
+ };
25
+ export const CustomCopy = {
26
+ args: {
27
+ productName: "Nebbiolo Vigna Alta",
28
+ contextName: "Sommelier Selection Spring 2026",
29
+ hasChanges: true,
30
+ onRevert: () => { },
31
+ copy: {
32
+ title: ({ productName, contextName }) => (_jsxs(_Fragment, { children: ["Anpasser ", _jsx("strong", { children: productName }), " for ", contextName] })),
33
+ reassurance: "Endringer her påvirker ikke porteføljen din utenfor dette tilbudet.",
34
+ revertLabel: "Tilbakestill til portefølje",
35
+ },
36
+ },
37
+ };
38
+ //# sourceMappingURL=branch-edit-banner.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-edit-banner.stories.js","sourceRoot":"","sources":["../../src/components/branch-edit-banner.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,6BAA6B;IACpC,SAAS,EAAE,gBAAgB;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC;CACqB,CAAC;AAE1C,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,YAAY,GAAU;IACjC,IAAI,EAAE;QACJ,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,uCAAuC;QACpD,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;KAChC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,IAAI,EAAE;QACJ,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,uCAAuC;QACpD,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;KAChC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAU;IAC/B,IAAI,EAAE;QACJ,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,iCAAiC;QAC9C,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,IAAI,EAAE;YACJ,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CACvC,2CACW,2BAAS,WAAW,GAAU,WAAM,WAAW,IACvD,CACJ;YACD,WAAW,EAAE,qEAAqE;YAClF,WAAW,EAAE,6BAA6B;SAC3C;KACF;CACF,CAAC"}
@@ -0,0 +1,40 @@
1
+ import * as React from "react";
2
+ import { type StackedOrg } from "./avatar-stack";
3
+ export type JourneyCardVariant = "default" | "sent" | "won" | "lost";
4
+ export interface JourneyCardProps {
5
+ /** Product image to show top-left. When null and no initials, renders the dashed placeholder. */
6
+ productImage?: {
7
+ url: string;
8
+ altText?: string;
9
+ } | null;
10
+ /** When no product image AND no initials, shows the "+" placeholder (preference match). */
11
+ productInitials?: string;
12
+ /** Primary title (product name or "Choose a product" for preference match) */
13
+ title: React.ReactNode;
14
+ /** Secondary line — tender · context */
15
+ subtitle?: React.ReactNode;
16
+ /** Show amber modification dot next to title */
17
+ modified?: boolean;
18
+ /** Optional match score (0-100) — shows as muted pill on title row */
19
+ matchScore?: number | null;
20
+ /** 0-1 progress value; only renders when defined */
21
+ progress?: number;
22
+ /** Meta value on baseline row — right-aligned (price / counter / timestamp) */
23
+ metaRight?: React.ReactNode;
24
+ /** Color tone of meta-right */
25
+ metaRightTone?: "default" | "success" | "muted";
26
+ /** Stacked importer/participant avatars */
27
+ participants?: StackedOrg[];
28
+ /** Optional won/completed icon shown inline with title (lucide Award passed as ReactNode) */
29
+ titleIcon?: React.ReactNode;
30
+ /** Column state — changes the surface tint */
31
+ variant?: JourneyCardVariant;
32
+ /** Enable entrance animation */
33
+ animate?: boolean;
34
+ /** Disable hover lift (used inside drag overlay) */
35
+ disableHover?: boolean;
36
+ onClick?: () => void;
37
+ className?: string;
38
+ }
39
+ export declare function JourneyCard({ productImage, productInitials, title, subtitle, modified, matchScore, progress, metaRight, metaRightTone, participants, titleIcon, variant, animate, disableHover, onClick, className, }: JourneyCardProps): import("react/jsx-runtime").JSX.Element;
40
+ //# sourceMappingURL=journey-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-card.d.ts","sourceRoot":"","sources":["../../src/components/journey-card.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,iGAAiG;IACjG,YAAY,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxD,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,+BAA+B;IAC/B,aAAa,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,2CAA2C;IAC3C,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,6FAA6F;IAC7F,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,WAAW,CAAC,EAC1B,YAAY,EACZ,eAAe,EACf,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,UAAU,EACV,QAAQ,EACR,SAAS,EACT,aAAyB,EACzB,YAAY,EACZ,SAAS,EACT,OAAmB,EACnB,OAAe,EACf,YAAoB,EACpB,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,2CAoKlB"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { motion } from "motion/react";
3
+ import { cn } from "../lib/utils";
4
+ import { AvatarStack } from "./avatar-stack";
5
+ const VARIANT_BG = {
6
+ default: "bg-[var(--card)]",
7
+ sent: "bg-[color-mix(in_oklab,white_96%,var(--primary)_4%)]",
8
+ won: "bg-[var(--tone-success-surface)] border-[color-mix(in_oklab,white_72%,var(--success)_28%)]",
9
+ lost: "bg-[color-mix(in_oklab,white_97%,var(--foreground)_3%)] opacity-90",
10
+ };
11
+ export function JourneyCard({ productImage, productInitials, title, subtitle, modified = false, matchScore, progress, metaRight, metaRightTone = "default", participants, titleIcon, variant = "default", animate = false, disableHover = false, onClick, className, }) {
12
+ const showInitials = !productImage && !!productInitials;
13
+ const shell = (_jsxs("div", { role: onClick ? "button" : undefined, tabIndex: onClick ? 0 : undefined, onClick: onClick, onKeyDown: (e) => {
14
+ if (onClick && (e.key === "Enter" || e.key === " ")) {
15
+ e.preventDefault();
16
+ onClick();
17
+ }
18
+ }, className: cn("relative rounded-xl border border-[color-mix(in_oklab,var(--border)_60%,transparent)] p-3", "backdrop-blur-[14px] backdrop-saturate-[120%]", "shadow-[0_1px_2px_oklch(0.2_0.005_230/0.04),0_8px_24px_-18px_oklch(0.2_0.005_230/0.08),inset_0_1px_0_oklch(1_0_0/0.35)]", !disableHover &&
19
+ "transition-[transform,border-color,box-shadow] duration-[var(--duration-standard)] ease-[var(--ease-emphasized)] will-change-transform", !disableHover &&
20
+ "hover:-translate-y-1 hover:border-[color-mix(in_oklab,var(--primary)_22%,var(--border))] hover:shadow-[0_8px_20px_-12px_oklch(0.2_0.005_230/0.08),0_20px_50px_-30px_oklch(0.40_0.062_178/0.28),inset_0_1px_0_oklch(1_0_0/0.45)] hover:z-10", VARIANT_BG[variant], onClick && "cursor-pointer", className), children: [_jsxs("div", { className: "flex items-start gap-[10px]", children: [productImage ? (_jsx("img", { src: productImage.url, alt: productImage.altText ?? "", width: 44, height: 44, loading: "lazy", className: "size-11 shrink-0 rounded-lg object-cover shadow-[0_2px_8px_-2px_oklch(0_0_0/0.15),inset_0_1px_0_oklch(1_0_0/0.2)]" })) : showInitials ? (_jsx("div", { className: "flex size-11 shrink-0 items-center justify-center rounded-lg text-sm font-bold tracking-tight text-white shadow-[0_2px_8px_-2px_oklch(0_0_0/0.15),inset_0_1px_0_oklch(1_0_0/0.2)]", style: {
21
+ background: "linear-gradient(135deg, oklch(0.55 0.12 20) 0%, oklch(0.42 0.14 355) 100%)",
22
+ fontFamily: "Sora, sans-serif",
23
+ }, "aria-hidden": "true", children: productInitials })) : (_jsx("div", { className: "flex size-11 shrink-0 items-center justify-center rounded-lg text-lg", style: {
24
+ background: "color-mix(in oklab, white 94%, var(--primary) 6%)",
25
+ border: "1.5px dashed color-mix(in oklab, var(--primary) 30%, white)",
26
+ color: "color-mix(in oklab, var(--primary) 60%, var(--muted-foreground))",
27
+ }, "aria-hidden": "true", children: "+" })), _jsxs("div", { className: "min-w-0 flex-1 pt-0.5", children: [_jsxs("div", { className: "mb-[3px] flex items-center gap-1.5", children: [_jsx("div", { className: "min-w-0 flex-1 truncate font-display text-[13px] font-semibold leading-tight tracking-tight text-foreground", children: title }), modified && (_jsx("span", { title: "Modified for this offer", "aria-label": "Modified for this offer", className: "size-[7px] shrink-0 rounded-full bg-[var(--accent-secondary)] shadow-[0_0_0_3px_color-mix(in_oklab,var(--accent-secondary)_15%,transparent)]" })), titleIcon && (_jsx("span", { className: "shrink-0 text-[var(--accent-secondary)]", children: titleIcon })), typeof matchScore === "number" && (_jsxs("span", { className: cn("shrink-0 rounded-md px-1.5 py-[1px] text-[10px] font-semibold tabular-nums", matchScore >= 80
28
+ ? "bg-[color-mix(in_oklab,var(--primary)_10%,transparent)] text-[color-mix(in_oklab,black_30%,var(--primary)_70%)]"
29
+ : "bg-[color-mix(in_oklab,var(--primary)_6%,transparent)] text-[var(--muted-foreground)]"), children: [matchScore, "%"] }))] }), subtitle && (_jsx("div", { className: "truncate text-[11.5px] leading-snug text-[var(--muted-foreground)]", children: subtitle }))] })] }), typeof progress === "number" && (_jsx("div", { className: "mt-[10px] h-1 overflow-hidden rounded-full bg-[color-mix(in_oklab,var(--primary)_8%,transparent)]", role: "progressbar", "aria-valuenow": Math.round(progress * 100), "aria-valuemin": 0, "aria-valuemax": 100, children: _jsx("div", { className: "h-full transition-[width] duration-[var(--duration-hero)] ease-[var(--ease-emphasized)]", style: {
30
+ width: `${Math.max(0, Math.min(1, progress)) * 100}%`,
31
+ background: "linear-gradient(90deg, var(--primary), color-mix(in oklab, var(--primary) 70%, var(--accent-secondary)))",
32
+ } }) })), ((participants && participants.length > 0) || metaRight) && (_jsx("div", { className: "mx-0 my-[10px] h-px bg-linear-to-r from-transparent via-[color-mix(in_oklab,var(--primary)_15%,transparent)] to-transparent" })), ((participants && participants.length > 0) || metaRight) && (_jsxs("div", { className: "flex items-center justify-between gap-2", children: [participants && participants.length > 0 ? (_jsx(AvatarStack, { orgs: participants, size: "sm" })) : (_jsx("span", {})), metaRight && (_jsx("span", { className: cn("text-right font-display text-xs tabular-nums tracking-tight", metaRightTone === "success" &&
33
+ "font-bold text-[color-mix(in_oklab,black_20%,var(--success)_80%)]", metaRightTone === "muted" && "text-[var(--muted-foreground)]", metaRightTone === "default" && "text-[var(--muted-foreground)]"), children: metaRight }))] }))] }));
34
+ if (animate) {
35
+ return (_jsx(motion.div, { initial: { opacity: 0, y: 12, scale: 0.96 }, animate: { opacity: 1, y: 0, scale: 1 }, transition: { duration: 0.25, ease: [0.16, 1, 0.3, 1] }, children: shell }));
36
+ }
37
+ return shell;
38
+ }
39
+ //# sourceMappingURL=journey-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-card.js","sourceRoot":"","sources":["../../src/components/journey-card.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { type JourneyCardProps } from "./journey-card";
3
+ declare const meta: Meta<JourneyCardProps>;
4
+ export default meta;
5
+ type Story = StoryObj<Meta<JourneyCardProps>>;
6
+ export declare const Selected: Story;
7
+ export declare const PreferenceMatchPlaceholder: Story;
8
+ export declare const Preparing: Story;
9
+ export declare const ReadyToSend: Story;
10
+ export declare const Sent: Story;
11
+ export declare const Won: Story;
12
+ export declare const WithAnimation: Story;
13
+ //# sourceMappingURL=journey-card.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-card.stories.d.ts","sourceRoot":"","sources":["../../src/components/journey-card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAYhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,KAUxC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAWvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAUzB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAclB,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,KAejB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Award } from "lucide-react";
3
+ import { JourneyCard } from "./journey-card";
4
+ const meta = {
5
+ title: "Components/JourneyCard",
6
+ component: JourneyCard,
7
+ tags: ["autodocs"],
8
+ parameters: { layout: "centered" },
9
+ decorators: [
10
+ (Story) => (_jsx("div", { style: { width: 280 }, children: _jsx(Story, {}) })),
11
+ ],
12
+ };
13
+ export default meta;
14
+ export const Selected = {
15
+ args: {
16
+ productInitials: "CR",
17
+ title: "Chardonnay Reserve 2021",
18
+ subtitle: "Nordic Wines · Organic whites",
19
+ matchScore: 92,
20
+ participants: [{ id: "nw", name: "Nordic Wines" }],
21
+ metaRight: "2d ago",
22
+ metaRightTone: "muted",
23
+ },
24
+ };
25
+ export const PreferenceMatchPlaceholder = {
26
+ args: {
27
+ title: (_jsx("span", { className: "font-normal text-[var(--muted-foreground)]", children: "Choose a product" })),
28
+ subtitle: "Scandic Markets · Organic reds · 5k btl",
29
+ participants: [{ id: "sm", name: "Scandic Markets" }],
30
+ metaRight: "5h ago",
31
+ metaRightTone: "muted",
32
+ },
33
+ };
34
+ export const Preparing = {
35
+ args: {
36
+ productInitials: "CR",
37
+ title: "Chardonnay Reserve 2021",
38
+ subtitle: "Nordic Wines · Draft",
39
+ modified: true,
40
+ progress: 0.62,
41
+ metaRight: "8 / 13 fields",
42
+ metaRightTone: "muted",
43
+ participants: [{ id: "nw", name: "Nordic Wines" }],
44
+ },
45
+ };
46
+ export const ReadyToSend = {
47
+ args: {
48
+ productInitials: "CR",
49
+ title: "Chardonnay Reserve 2021",
50
+ subtitle: "Nordic Wines · Complete",
51
+ modified: true,
52
+ metaRight: "€18.50",
53
+ metaRightTone: "success",
54
+ participants: [{ id: "nw", name: "Nordic Wines" }],
55
+ },
56
+ };
57
+ export const Sent = {
58
+ args: {
59
+ productInitials: "CR",
60
+ title: "Chardonnay Reserve 2021",
61
+ subtitle: "Sent to 3 importers",
62
+ modified: true,
63
+ variant: "sent",
64
+ metaRight: "2/3",
65
+ participants: [
66
+ { id: "nw", name: "Nordic Wines", status: "responded" },
67
+ { id: "sm", name: "Scandic Markets", status: "pending" },
68
+ { id: "vi", name: "Vinum Imports", status: "responded" },
69
+ ],
70
+ },
71
+ };
72
+ export const Won = {
73
+ args: {
74
+ productInitials: "CR",
75
+ title: "Chardonnay Reserve 2021",
76
+ subtitle: "Won by Nordic Wines",
77
+ titleIcon: _jsx(Award, { className: "size-[15px]" }),
78
+ variant: "won",
79
+ metaRight: "€19.20",
80
+ metaRightTone: "success",
81
+ participants: [
82
+ { id: "nw", name: "Nordic Wines", status: "won" },
83
+ { id: "sm", name: "Scandic Markets", status: "lost" },
84
+ { id: "vi", name: "Vinum Imports", status: "lost" },
85
+ ],
86
+ },
87
+ };
88
+ export const WithAnimation = {
89
+ args: {
90
+ productInitials: "CR",
91
+ title: "Chardonnay Reserve 2021",
92
+ subtitle: "Nordic Wines",
93
+ animate: true,
94
+ metaRight: "just now",
95
+ },
96
+ };
97
+ //# sourceMappingURL=journey-card.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey-card.stories.js","sourceRoot":"","sources":["../../src/components/journey-card.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAyB,MAAM,gBAAgB,CAAC;AAEpE,MAAM,IAAI,GAA2B;IACnC,KAAK,EAAE,wBAAwB;IAC/B,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;IAClC,UAAU,EAAE;QACV,CAAC,KAAK,EAAE,EAAE,CAAC,CACT,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YACxB,KAAC,KAAK,KAAG,GACL,CACP;KACF;CACF,CAAC;AAEF,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,IAAI,EAAE;QACJ,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,+BAA+B;QACzC,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QAClD,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,OAAO;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAU;IAC/C,IAAI,EAAE;QACJ,KAAK,EAAE,CACL,eAAM,SAAS,EAAC,4CAA4C,iCAAwB,CACrF;QACD,QAAQ,EAAE,yCAAyC;QACnD,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QACrD,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,OAAO;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,IAAI,EAAE;QACJ,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,sBAAsB;QAChC,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,eAAe;QAC1B,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;KACnD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,IAAI,EAAE;QACJ,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,yBAAyB;QACnC,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,SAAS;QACxB,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;KACnD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE;QACJ,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,qBAAqB;QAC/B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE;YACZ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE;YACvD,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE;YACxD,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE;SACzD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAU;IACxB,IAAI,EAAE;QACJ,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,qBAAqB;QAC/B,SAAS,EAAE,KAAC,KAAK,IAAC,SAAS,EAAC,aAAa,GAAG;QAC5C,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,SAAS;QACxB,YAAY,EAAE;YACZ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE;YACjD,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE;YACrD,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE;SACpD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE;QACJ,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,UAAU;KACtB;CACF,CAAC"}
@@ -0,0 +1,51 @@
1
+ import * as React from "react";
2
+ import { type StackedOrg } from "./avatar-stack";
3
+ export type OfferCardStatus = "pending" | "responded" | "won" | "lost";
4
+ export type OfferPriceKind = "offer" | "counter" | "final";
5
+ export interface OfferCardProduct {
6
+ image: {
7
+ url: string;
8
+ altText?: string;
9
+ } | null;
10
+ initials?: string;
11
+ name: string;
12
+ modified?: boolean;
13
+ }
14
+ export interface OfferCardTender {
15
+ title: string;
16
+ href?: string;
17
+ }
18
+ export interface OfferCardPrice {
19
+ amount: number;
20
+ currency: string;
21
+ unit: string;
22
+ kind: OfferPriceKind;
23
+ }
24
+ export interface OfferParty {
25
+ name: string;
26
+ subtitle?: string;
27
+ logoUrl?: string | null;
28
+ orgId?: string;
29
+ isOwnOrg?: boolean;
30
+ }
31
+ export interface OfferCardChip {
32
+ label: string;
33
+ icon?: React.ReactNode;
34
+ tone?: "neutral" | "brand" | "success" | "warning";
35
+ }
36
+ export interface OfferCardProps {
37
+ product: OfferCardProduct;
38
+ tender: OfferCardTender;
39
+ price: OfferCardPrice;
40
+ fromParty: OfferParty;
41
+ toParty: OfferParty & {
42
+ recipients?: StackedOrg[];
43
+ };
44
+ chips?: OfferCardChip[];
45
+ status: OfferCardStatus;
46
+ timestamp: Date | string;
47
+ onClick?: () => void;
48
+ className?: string;
49
+ }
50
+ export declare function OfferCard({ product, tender, price, fromParty, toParty, chips, status, timestamp, onClick, className, }: OfferCardProps): import("react/jsx-runtime").JSX.Element;
51
+ //# sourceMappingURL=offer-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offer-card.d.ts","sourceRoot":"","sources":["../../src/components/offer-card.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG9D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AACvE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,UAAU,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IACpD,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoCD,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,MAAM,EACN,KAAK,EACL,SAAS,EACT,OAAO,EACP,KAAU,EACV,MAAM,EACN,SAAS,EACT,OAAO,EACP,SAAS,GACV,EAAE,cAAc,2CA6LhB"}
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Award } from "lucide-react";
3
+ import { cn } from "../lib/utils";
4
+ import { AvatarStack } from "./avatar-stack";
5
+ import { OrgAvatar } from "./org-avatar";
6
+ const CHIP_TONE = {
7
+ neutral: "bg-[color-mix(in_oklab,var(--muted-foreground)_8%,transparent)] text-[var(--muted-foreground)] border-transparent",
8
+ brand: "bg-[color-mix(in_oklab,var(--primary)_8%,transparent)] text-[color-mix(in_oklab,black_35%,var(--primary)_65%)] border-[color-mix(in_oklab,var(--primary)_14%,transparent)]",
9
+ success: "bg-[color-mix(in_oklab,var(--success)_10%,transparent)] text-[color-mix(in_oklab,black_30%,var(--success)_70%)] border-[color-mix(in_oklab,var(--success)_18%,transparent)]",
10
+ warning: "bg-[color-mix(in_oklab,var(--accent-secondary)_12%,transparent)] text-[color-mix(in_oklab,black_32%,var(--accent-secondary)_68%)] border-[color-mix(in_oklab,var(--accent-secondary)_20%,transparent)]",
11
+ };
12
+ function formatPrice(p) {
13
+ const fmt = new Intl.NumberFormat(undefined, {
14
+ style: "currency",
15
+ currency: p.currency,
16
+ minimumFractionDigits: 2,
17
+ maximumFractionDigits: 2,
18
+ });
19
+ return fmt.format(p.amount);
20
+ }
21
+ function formatRelative(ts) {
22
+ const d = typeof ts === "string" ? new Date(ts) : ts;
23
+ const diffMs = Date.now() - d.getTime();
24
+ const mins = Math.floor(diffMs / 60_000);
25
+ if (mins < 1)
26
+ return "just now";
27
+ if (mins < 60)
28
+ return `${mins}m ago`;
29
+ const hours = Math.floor(mins / 60);
30
+ if (hours < 24)
31
+ return `${hours}h ago`;
32
+ const days = Math.floor(hours / 24);
33
+ if (days < 30)
34
+ return `${days}d ago`;
35
+ return d.toLocaleDateString();
36
+ }
37
+ export function OfferCard({ product, tender, price, fromParty, toParty, chips = [], status, timestamp, onClick, className, }) {
38
+ const isWon = status === "won";
39
+ const arrowColor = isWon
40
+ ? "var(--success)"
41
+ : status === "responded"
42
+ ? "var(--primary)"
43
+ : "color-mix(in oklab, var(--primary) 45%, var(--muted-foreground))";
44
+ return (_jsxs("div", { role: onClick ? "button" : undefined, tabIndex: onClick ? 0 : undefined, onClick: onClick, onKeyDown: (e) => {
45
+ if (onClick && (e.key === "Enter" || e.key === " ")) {
46
+ e.preventDefault();
47
+ onClick();
48
+ }
49
+ }, className: cn("relative rounded-2xl border p-5 transition-[transform,border-color,box-shadow] duration-[var(--duration-standard)] ease-[var(--ease-emphasized)]", "backdrop-blur-[14px] backdrop-saturate-[120%]", isWon
50
+ ? "border-[color-mix(in_oklab,white_72%,var(--success)_28%)] bg-[color-mix(in_oklab,white_94%,var(--success)_6%)]"
51
+ : "border-[color-mix(in_oklab,var(--border)_60%,transparent)] bg-[color-mix(in_oklab,white_97%,var(--primary)_3%)]", "shadow-[0_1px_2px_oklch(0.2_0.005_230/0.04),0_12px_36px_-28px_oklch(0.2_0.005_230/0.14),inset_0_1px_0_oklch(1_0_0/0.45)]", onClick && "cursor-pointer hover:-translate-y-[2px] hover:border-[color-mix(in_oklab,var(--primary)_22%,var(--border))] hover:shadow-[0_8px_20px_-12px_oklch(0.2_0.005_230/0.08),0_28px_70px_-36px_oklch(0.40_0.062_178/0.28),inset_0_1px_0_oklch(1_0_0/0.55)]", className), children: [_jsxs("div", { className: "grid grid-cols-[72px_1fr_auto] items-start gap-4", children: [product.image ? (_jsx("img", { src: product.image.url, alt: product.image.altText ?? "", className: "size-[72px] rounded-[14px] object-cover shadow-[0_2px_8px_-2px_oklch(0_0_0/0.15),inset_0_1px_0_oklch(1_0_0/0.2)]", loading: "lazy" })) : (_jsx("div", { className: "flex size-[72px] items-center justify-center rounded-[14px] text-xl font-bold tracking-tight text-white shadow-[0_2px_8px_-2px_oklch(0_0_0/0.15),inset_0_1px_0_oklch(1_0_0/0.2)]", style: {
52
+ background: "linear-gradient(135deg, oklch(0.55 0.12 20) 0%, oklch(0.42 0.14 355) 100%)",
53
+ fontFamily: "Sora, sans-serif",
54
+ }, "aria-hidden": "true", children: product.initials ?? "•" })), _jsxs("div", { className: "min-w-0 pt-0.5", children: [_jsxs("div", { className: "mb-1 flex items-center gap-2 font-display text-lg font-bold leading-tight tracking-tight text-foreground", children: [_jsx("span", { className: "truncate", children: product.name }), product.modified && (_jsx("span", { title: "Modified for this offer", "aria-label": "Modified for this offer", className: "size-2 shrink-0 rounded-full bg-[var(--accent-secondary)] shadow-[0_0_0_3px_color-mix(in_oklab,var(--accent-secondary)_15%,transparent)]" })), isWon && _jsx(Award, { className: "size-[18px] shrink-0 text-[var(--accent-secondary)]", "aria-label": "Won" })] }), _jsx("div", { className: "text-[13px] leading-snug text-[var(--muted-foreground)]", children: tender.href ? (_jsx("a", { href: tender.href, className: "font-medium text-[color-mix(in_oklab,black_30%,var(--primary)_70%)] no-underline hover:underline", onClick: (e) => e.stopPropagation(), children: tender.title })) : (_jsx("span", { children: tender.title })) })] }), _jsxs("div", { className: "pl-2 text-right", children: [_jsx("div", { className: "font-display text-[22px] font-bold leading-none tracking-tight tabular-nums text-[color-mix(in_oklab,black_25%,var(--success)_75%)]", children: formatPrice(price) }), _jsxs("div", { className: "mt-[3px] text-[11px] text-[var(--muted-foreground)] tabular-nums", children: [price.kind === "final" ? "final · " : price.kind === "counter" ? "counter · " : "", price.unit] })] })] }), _jsx("div", { className: "my-4 h-px bg-linear-to-r from-transparent via-[color-mix(in_oklab,var(--primary)_18%,transparent)] to-transparent" }), _jsxs("div", { className: "grid grid-cols-[1fr_auto_1fr] items-center gap-[14px]", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-[10px]", children: [_jsx(OrgAvatar, { name: fromParty.name, orgId: fromParty.orgId, logoUrl: fromParty.logoUrl, isOwnOrg: fromParty.isOwnOrg, size: "md" }), _jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "mb-[3px] font-display text-[9px] font-bold uppercase tracking-[0.12em] text-[var(--muted-foreground)]", children: "From" }), _jsx("div", { className: "truncate text-[13px] font-semibold text-foreground", children: fromParty.name }), fromParty.subtitle && (_jsx("div", { className: "truncate text-[11px] text-[var(--muted-foreground)]", children: fromParty.subtitle }))] })] }), _jsx("div", { className: "flex size-11 shrink-0 items-center justify-center", children: _jsxs("svg", { viewBox: "0 0 60 22", className: "size-full", fill: "none", stroke: arrowColor, strokeWidth: isWon ? "1.8" : "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("line", { x1: "4", y1: "11", x2: "52", y2: "11", strokeDasharray: isWon ? undefined : "2 3" }), _jsx("polyline", { points: "46,6 54,11 46,16" })] }) }), _jsxs("div", { className: "flex min-w-0 items-center justify-end gap-[10px]", children: [_jsxs("div", { className: "min-w-0 text-right", children: [_jsx("div", { className: "mb-[3px] font-display text-[9px] font-bold uppercase tracking-[0.12em] text-[var(--muted-foreground)]", children: isWon ? "Won by" : toParty.recipients && toParty.recipients.length > 0 ? `To · ${toParty.recipients.length} importers` : "To" }), _jsx("div", { className: "truncate text-[13px] font-semibold text-foreground", children: toParty.name }), toParty.subtitle && (_jsx("div", { className: "truncate text-[11px] text-[var(--muted-foreground)]", children: toParty.subtitle }))] }), toParty.recipients && toParty.recipients.length > 0 ? (_jsx(AvatarStack, { orgs: toParty.recipients, size: "md" })) : (_jsx(OrgAvatar, { name: toParty.name, orgId: toParty.orgId, logoUrl: toParty.logoUrl, isOwnOrg: toParty.isOwnOrg, size: "md" }))] })] }), (chips.length > 0 || timestamp) && (_jsxs("div", { className: "mt-4 flex items-center justify-between gap-3 border-t border-[color-mix(in_oklab,var(--border)_60%,transparent)] pt-[14px]", children: [_jsx("div", { className: "flex flex-wrap gap-1.5", children: chips.map((chip, i) => (_jsxs("span", { className: cn("inline-flex items-center gap-1.5 rounded-[10px] border px-[9px] py-[3px] text-[11px] font-semibold", CHIP_TONE[chip.tone ?? "brand"]), children: [chip.icon && _jsx("span", { className: "inline-flex size-3 items-center justify-center", children: chip.icon }), chip.label] }, i))) }), _jsx("span", { className: "text-[11px] tabular-nums text-[var(--muted-foreground)]", children: formatRelative(timestamp) })] }))] }));
55
+ }
56
+ //# sourceMappingURL=offer-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offer-card.js","sourceRoot":"","sources":["../../src/components/offer-card.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { OfferCard } from "./offer-card";
3
+ declare const meta: Meta<typeof OfferCard>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const ProducerPending: Story;
7
+ export declare const ProducerWon: Story;
8
+ export declare const ImporterReceived: Story;
9
+ export declare const ImporterReplied: Story;
10
+ export declare const SingleRecipient: Story;
11
+ //# sourceMappingURL=offer-card.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offer-card.stories.d.ts","sourceRoot":"","sources":["../../src/components/offer-card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAMhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AASnC,eAAO,MAAM,eAAe,EAAE,KAoB7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAqBzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAQ7B,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Calendar, Package } from "lucide-react";
3
+ import { OfferCard } from "./offer-card";
4
+ const meta = {
5
+ title: "Components/OfferCard",
6
+ component: OfferCard,
7
+ tags: ["autodocs"],
8
+ parameters: { layout: "centered" },
9
+ decorators: [(Story) => _jsx("div", { style: { width: 620 }, children: _jsx(Story, {}) })],
10
+ };
11
+ export default meta;
12
+ const baseProps = {
13
+ product: { image: null, initials: "CR", name: "Chardonnay Reserve 2021" },
14
+ tender: { title: "Nordic Wines Q2 Organic Whites Tender", href: "#" },
15
+ price: { amount: 18.5, currency: "EUR", unit: "per bottle", kind: "offer" },
16
+ timestamp: new Date(Date.now() - 3 * 60 * 60 * 1000),
17
+ };
18
+ export const ProducerPending = {
19
+ args: {
20
+ ...baseProps,
21
+ product: { ...baseProps.product, modified: true },
22
+ status: "pending",
23
+ fromParty: { name: "Vigneti Mario", orgId: "vm", subtitle: "Piedmont, Italy" },
24
+ toParty: {
25
+ name: "Nordic · Scandic · Vinum",
26
+ orgId: "multi",
27
+ recipients: [
28
+ { id: "nw", name: "Nordic Wines", status: "responded" },
29
+ { id: "sm", name: "Scandic Markets", status: "pending" },
30
+ { id: "vi", name: "Vinum Imports", status: "responded" },
31
+ ],
32
+ },
33
+ chips: [
34
+ { label: "5,000 bottles", icon: _jsx(Package, { className: "size-3" }), tone: "neutral" },
35
+ { label: "Replies by Apr 15", icon: _jsx(Calendar, { className: "size-3" }), tone: "brand" },
36
+ ],
37
+ },
38
+ };
39
+ export const ProducerWon = {
40
+ args: {
41
+ ...baseProps,
42
+ product: { ...baseProps.product, modified: true },
43
+ status: "won",
44
+ price: { ...baseProps.price, amount: 19.2, kind: "final" },
45
+ fromParty: { name: "Vigneti Mario", orgId: "vm" },
46
+ toParty: {
47
+ name: "Nordic Wines AS",
48
+ orgId: "nw",
49
+ recipients: [
50
+ { id: "nw", name: "Nordic Wines", status: "won" },
51
+ { id: "sm", name: "Scandic Markets", status: "lost" },
52
+ { id: "vi", name: "Vinum Imports", status: "lost" },
53
+ ],
54
+ },
55
+ chips: [
56
+ { label: "5,000 bottles", icon: _jsx(Package, { className: "size-3" }), tone: "neutral" },
57
+ { label: "Deal closed", tone: "success" },
58
+ ],
59
+ },
60
+ };
61
+ export const ImporterReceived = {
62
+ args: {
63
+ ...baseProps,
64
+ status: "pending",
65
+ fromParty: { name: "Vigneti Mario", orgId: "vm", subtitle: "Piedmont, Italy" },
66
+ toParty: { name: "You · Nordic Wines", orgId: "nw", isOwnOrg: true },
67
+ chips: [
68
+ { label: "5,000 bottles", icon: _jsx(Package, { className: "size-3" }), tone: "neutral" },
69
+ { label: "New", tone: "warning" },
70
+ ],
71
+ },
72
+ };
73
+ export const ImporterReplied = {
74
+ args: {
75
+ ...baseProps,
76
+ status: "responded",
77
+ fromParty: { name: "Tenuta Antica", orgId: "ta", subtitle: "Piedmont, Italy" },
78
+ toParty: { name: "You · Nordic Wines", orgId: "nw", isOwnOrg: true },
79
+ chips: [
80
+ { label: "3,200 bottles", icon: _jsx(Package, { className: "size-3" }), tone: "neutral" },
81
+ { label: "Replied", tone: "brand" },
82
+ ],
83
+ },
84
+ };
85
+ export const SingleRecipient = {
86
+ args: {
87
+ ...baseProps,
88
+ status: "pending",
89
+ fromParty: { name: "Vigneti Mario", orgId: "vm" },
90
+ toParty: { name: "Nordic Wines", orgId: "nw" },
91
+ chips: [{ label: "5,000 bottles", tone: "neutral" }],
92
+ },
93
+ };
94
+ //# sourceMappingURL=offer-card.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offer-card.stories.js","sourceRoot":"","sources":["../../src/components/offer-card.stories.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type OrgAvatarStatus = "pending" | "responded" | "won" | "lost" | "none";
2
+ export type OrgAvatarSize = "sm" | "md" | "lg";
3
+ export interface OrgAvatarProps {
4
+ /** Organization name — used for initials fallback and tooltip */
5
+ name: string;
6
+ /** Organization ID — used to derive a deterministic gradient when no logo is provided */
7
+ orgId?: string;
8
+ /** Logo URL — displayed when provided */
9
+ logoUrl?: string | null;
10
+ /** Is this avatar the viewing org ("You")? Renders in warm amber tone */
11
+ isOwnOrg?: boolean;
12
+ /** Visual status — drives ring color */
13
+ status?: OrgAvatarStatus;
14
+ /** Size token — 24 / 32 / 40 px */
15
+ size?: OrgAvatarSize;
16
+ className?: string;
17
+ }
18
+ export declare function OrgAvatar({ name, orgId, logoUrl, isOwnOrg, status, size, className, }: OrgAvatarProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=org-avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-avatar.d.ts","sourceRoot":"","sources":["../../src/components/org-avatar.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAChF,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,mCAAmC;IACnC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgDD,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAgB,EAChB,MAAe,EACf,IAAW,EACX,SAAS,GACV,EAAE,cAAc,2CAgDhB"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/utils";
4
+ const SIZE_PX = { sm: 24, md: 32, lg: 40 };
5
+ const FONT_PX = { sm: 9, md: 11, lg: 13 };
6
+ /**
7
+ * Deterministic color hash — maps an orgId to one of 6 gradient combos.
8
+ * Stable across renders. Used when no logoUrl is provided.
9
+ */
10
+ function hashToGradient(seed) {
11
+ if (!seed) {
12
+ return {
13
+ from: "color-mix(in oklab, var(--primary) 28%, white)",
14
+ to: "color-mix(in oklab, var(--primary) 50%, white)",
15
+ fg: "color-mix(in oklab, black 38%, var(--primary) 62%)",
16
+ };
17
+ }
18
+ let hash = 0;
19
+ for (let i = 0; i < seed.length; i++) {
20
+ hash = (hash * 31 + seed.charCodeAt(i)) | 0;
21
+ }
22
+ const palette = [
23
+ { from: "oklch(0.62 0.14 210)", to: "oklch(0.48 0.13 240)", fg: "oklch(0.98 0.01 210)" },
24
+ { from: "oklch(0.65 0.13 155)", to: "oklch(0.50 0.12 170)", fg: "oklch(0.98 0.01 155)" },
25
+ { from: "oklch(0.66 0.15 58)", to: "oklch(0.52 0.14 42)", fg: "oklch(0.98 0.01 58)" },
26
+ { from: "oklch(0.60 0.14 340)", to: "oklch(0.45 0.13 320)", fg: "oklch(0.98 0.01 340)" },
27
+ { from: "oklch(0.62 0.11 130)", to: "oklch(0.48 0.10 110)", fg: "oklch(0.98 0.01 130)" },
28
+ { from: "oklch(0.60 0.13 280)", to: "oklch(0.46 0.12 260)", fg: "oklch(0.98 0.01 280)" },
29
+ ];
30
+ return palette[Math.abs(hash) % palette.length];
31
+ }
32
+ function initialsFrom(name) {
33
+ const parts = name.trim().split(/\s+/).filter(Boolean);
34
+ if (parts.length === 0)
35
+ return "?";
36
+ if (parts.length === 1)
37
+ return parts[0].slice(0, 2).toUpperCase();
38
+ return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
39
+ }
40
+ const RING_CLASS = {
41
+ none: "",
42
+ pending: "ring-2 ring-offset-2 ring-offset-[var(--card)] ring-[color-mix(in_oklab,var(--muted-foreground)_45%,white)]",
43
+ responded: "ring-2 ring-offset-2 ring-offset-[var(--card)] ring-[var(--primary)]",
44
+ won: "ring-2 ring-offset-2 ring-offset-[var(--card)] ring-[var(--success)]",
45
+ lost: "opacity-40",
46
+ };
47
+ export function OrgAvatar({ name, orgId, logoUrl, isOwnOrg = false, status = "none", size = "md", className, }) {
48
+ const px = SIZE_PX[size];
49
+ const fontPx = FONT_PX[size];
50
+ const initials = React.useMemo(() => initialsFrom(name), [name]);
51
+ const gradient = React.useMemo(() => hashToGradient(orgId ?? name), [orgId, name]);
52
+ const baseStyle = isOwnOrg
53
+ ? {
54
+ width: px,
55
+ height: px,
56
+ fontSize: fontPx,
57
+ background: "linear-gradient(135deg, color-mix(in oklab, var(--accent-secondary) 30%, white), color-mix(in oklab, var(--accent-secondary) 55%, white))",
58
+ color: "color-mix(in oklab, black 38%, var(--accent-secondary) 62%)",
59
+ }
60
+ : {
61
+ width: px,
62
+ height: px,
63
+ fontSize: fontPx,
64
+ background: `linear-gradient(135deg, ${gradient.from}, ${gradient.to})`,
65
+ color: gradient.fg,
66
+ };
67
+ return (_jsx("span", { role: "img", "aria-label": name, title: name, className: cn("inline-flex shrink-0 items-center justify-center rounded-full font-display font-bold tracking-tight transition-[box-shadow,opacity] duration-[var(--duration-standard)] ease-[var(--ease-emphasized)]", "border-2 border-[var(--card)] shadow-[0_1px_3px_oklch(0_0_0/0.08)]", RING_CLASS[status], className), style: baseStyle, children: logoUrl ? (_jsx("img", { src: logoUrl, alt: name, className: "h-full w-full rounded-full object-cover", loading: "lazy" })) : (initials) }));
68
+ }
69
+ //# sourceMappingURL=org-avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-avatar.js","sourceRoot":"","sources":["../../src/components/org-avatar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { StoryObj } from "@storybook/react-vite";
2
+ import { OrgAvatar } from "./org-avatar";
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof OrgAvatar;
6
+ tags: string[];
7
+ argTypes: {
8
+ size: {
9
+ control: "radio";
10
+ options: string[];
11
+ };
12
+ status: {
13
+ control: "radio";
14
+ options: string[];
15
+ };
16
+ };
17
+ };
18
+ export default meta;
19
+ type Story = StoryObj<typeof meta>;
20
+ export declare const Default: Story;
21
+ export declare const WithLogo: Story;
22
+ export declare const OwnOrg: Story;
23
+ export declare const StatusPending: Story;
24
+ export declare const StatusResponded: Story;
25
+ export declare const StatusWon: Story;
26
+ export declare const StatusLost: Story;
27
+ export declare const AllSizes: Story;
28
+ export declare const ColorHashConsistency: Story;
29
+ //# sourceMappingURL=org-avatar.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-avatar.stories.d.ts","sourceRoot":"","sources":["../../src/components/org-avatar.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;;;;;;;;;;;;;;CAQwB,CAAC;AAEnC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAEpB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AACF,eAAO,MAAM,eAAe,EAAE,KAE7B,CAAC;AACF,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC;AACF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { OrgAvatar } from "./org-avatar";
3
+ const meta = {
4
+ title: "Components/OrgAvatar",
5
+ component: OrgAvatar,
6
+ tags: ["autodocs"],
7
+ argTypes: {
8
+ size: { control: "radio", options: ["sm", "md", "lg"] },
9
+ status: { control: "radio", options: ["none", "pending", "responded", "won", "lost"] },
10
+ },
11
+ };
12
+ export default meta;
13
+ export const Default = {
14
+ args: { name: "Nordic Wines", orgId: "org-1" },
15
+ };
16
+ export const WithLogo = {
17
+ args: {
18
+ name: "Nordic Wines",
19
+ logoUrl: "https://placehold.co/64x64/14b8a6/ffffff?text=NW",
20
+ },
21
+ };
22
+ export const OwnOrg = {
23
+ args: { name: "Vigneti Mario", orgId: "org-own", isOwnOrg: true },
24
+ };
25
+ export const StatusPending = {
26
+ args: { name: "Nordic Wines", orgId: "org-2", status: "pending" },
27
+ };
28
+ export const StatusResponded = {
29
+ args: { name: "Nordic Wines", orgId: "org-2", status: "responded" },
30
+ };
31
+ export const StatusWon = {
32
+ args: { name: "Nordic Wines", orgId: "org-2", status: "won" },
33
+ };
34
+ export const StatusLost = {
35
+ args: { name: "Nordic Wines", orgId: "org-2", status: "lost" },
36
+ };
37
+ export const AllSizes = {
38
+ args: { name: "Nordic Wines", orgId: "s1" },
39
+ render: () => (_jsxs("div", { className: "flex items-end gap-4", children: [_jsx(OrgAvatar, { name: "Nordic Wines", orgId: "s1", size: "sm" }), _jsx(OrgAvatar, { name: "Nordic Wines", orgId: "s1", size: "md" }), _jsx(OrgAvatar, { name: "Nordic Wines", orgId: "s1", size: "lg" })] })),
40
+ };
41
+ export const ColorHashConsistency = {
42
+ args: { name: "Nordic Wines" },
43
+ render: () => (_jsx("div", { className: "flex gap-3", children: ["Nordic Wines", "Scandic Markets", "Vinum Imports", "Tenuta Antica", "Cavas del Sur", "Maison Blanc"].map((name, i) => (_jsx(OrgAvatar, { name: name, orgId: `demo-${i}` }, name))) })),
44
+ };
45
+ //# sourceMappingURL=org-avatar.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-avatar.stories.js","sourceRoot":"","sources":["../../src/components/org-avatar.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,sBAAsB;IAC7B,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;QACvD,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;KACvF;CAC+B,CAAC;AAEnC,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,kDAAkD;KAC5D;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAU;IAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;CAClE,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;CAClE,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAU;IACpC,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;CACpE,CAAC;AACF,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;CAC9D,CAAC;AACF,MAAM,CAAC,MAAM,UAAU,GAAU;IAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;CAC/D,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;IAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,CACZ,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,SAAS,IAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,GAAG,EACtD,KAAC,SAAS,IAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,GAAG,EACtD,KAAC,SAAS,IAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,GAAG,IAClD,CACP;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAU;IACzC,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,CACZ,cAAK,SAAS,EAAC,YAAY,YACxB,CAAC,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,GAAG,CACzG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACX,KAAC,SAAS,IAAY,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,IAApC,IAAI,CAAoC,CACzD,CACF,GACG,CACP;CACF,CAAC"}
package/dist/index.d.ts CHANGED
@@ -92,4 +92,9 @@ export { CelebrationPulse, type CelebrationPulseProps, } from "./components/cele
92
92
  export { useCelebrationPulse } from "./hooks/use-celebration-pulse";
93
93
  export { SentOfferCard, type SentOfferCardProps, } from "./components/sent-offer-card";
94
94
  export { CompletedOfferCard, type CompletedOfferCardProps, type CompletedOfferStat, } from "./components/completed-offer-card";
95
+ export { OrgAvatar, type OrgAvatarProps, type OrgAvatarStatus, type OrgAvatarSize, } from "./components/org-avatar";
96
+ export { AvatarStack, type AvatarStackProps, type StackedOrg, } from "./components/avatar-stack";
97
+ export { BranchEditBanner, type BranchEditBannerProps, } from "./components/branch-edit-banner";
98
+ export { JourneyCard, type JourneyCardProps, type JourneyCardVariant, } from "./components/journey-card";
99
+ export { OfferCard, type OfferCardProps, type OfferCardProduct, type OfferCardTender, type OfferCardPrice, type OfferParty, type OfferCardChip, type OfferCardStatus, type OfferPriceKind, } from "./components/offer-card";
95
100
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -93,4 +93,9 @@ export { CelebrationPulse, } from "./components/celebration-pulse";
93
93
  export { useCelebrationPulse } from "./hooks/use-celebration-pulse";
94
94
  export { SentOfferCard, } from "./components/sent-offer-card";
95
95
  export { CompletedOfferCard, } from "./components/completed-offer-card";
96
+ export { OrgAvatar, } from "./components/org-avatar";
97
+ export { AvatarStack, } from "./components/avatar-stack";
98
+ export { BranchEditBanner, } from "./components/branch-edit-banner";
99
+ export { JourneyCard, } from "./components/journey-card";
100
+ export { OfferCard, } from "./components/offer-card";
96
101
  //# 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cellarnode/ui",
3
- "version": "0.9.4",
3
+ "version": "0.10.1",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "Shared UI components, theme tokens, and chat/offer primitives for CellarNode dashboards.",
@@ -78,6 +78,13 @@
78
78
  --animate-slide-up: slide-up 0.24s ease-out forwards;
79
79
  --animate-chat-pulse: chat-pulse 2s ease-in-out infinite;
80
80
  --animate-notify-bump: notify-bump 0.6s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
81
+
82
+ /* Motion tokens (producer journey overhaul 2026-04) */
83
+ --ease-emphasized: cubic-bezier(0.16, 1, 0.3, 1);
84
+ --duration-micro: 150ms;
85
+ --duration-standard: 250ms;
86
+ --duration-hero: 400ms;
87
+ --duration-celebratory: 600ms;
81
88
  }
82
89
 
83
90
  @keyframes accordion-down {
@@ -508,3 +515,14 @@
508
515
  stroke-dashoffset: -20;
509
516
  }
510
517
  }
518
+
519
+ @media (prefers-reduced-motion: reduce) {
520
+ *,
521
+ *::before,
522
+ *::after {
523
+ animation-duration: 0.01ms !important;
524
+ animation-iteration-count: 1 !important;
525
+ transition-duration: 0.01ms !important;
526
+ scroll-behavior: auto !important;
527
+ }
528
+ }