@cellarnode/ui 0.9.5 → 0.10.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 (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 +47 -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 +14 -0
  22. package/dist/components/journey-card.stories.d.ts.map +1 -0
  23. package/dist/components/journey-card.stories.js +116 -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,47 @@
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
+ /**
31
+ * Optional actions slot (typically a DropdownMenu trigger / kebab button).
32
+ * Positioned top-right of the card, fades in on hover / focus-within so it
33
+ * stays out of the way at rest. Clicks inside this slot do NOT propagate to
34
+ * the card's onClick.
35
+ */
36
+ actionsSlot?: React.ReactNode;
37
+ /** Column state — changes the surface tint */
38
+ variant?: JourneyCardVariant;
39
+ /** Enable entrance animation */
40
+ animate?: boolean;
41
+ /** Disable hover lift (used inside drag overlay) */
42
+ disableHover?: boolean;
43
+ onClick?: () => void;
44
+ className?: string;
45
+ }
46
+ export declare function JourneyCard({ productImage, productInitials, title, subtitle, modified, matchScore, progress, metaRight, metaRightTone, participants, titleIcon, actionsSlot, variant, animate, disableHover, onClick, className, }: JourneyCardProps): import("react/jsx-runtime").JSX.Element;
47
+ //# 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;;;;;OAKG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,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,WAAW,EACX,OAAmB,EACnB,OAAe,EACf,YAAoB,EACpB,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,2CAiLlB"}
@@ -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, actionsSlot, 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("group 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: [actionsSlot && (_jsx("div", { className: cn("absolute right-2 top-2 z-20", "opacity-0 transition-opacity duration-[var(--duration-standard)] ease-[var(--ease-emphasized)]", "group-hover:opacity-100 group-focus-within:opacity-100 data-[state=open]:opacity-100"), onClick: (e) => e.stopPropagation(), onKeyDown: (e) => e.stopPropagation(), children: actionsSlot })), _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, color-mix(in oklab, var(--primary) 60%, white) 0%, color-mix(in oklab, var(--accent-secondary) 60%, white) 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,14 @@
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
+ export declare const WithActionsSlot: Story;
14
+ //# 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;AAEF,eAAO,MAAM,eAAe,EAAE,KA2B7B,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Award, MoreHorizontal } 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
+ export const WithActionsSlot = {
98
+ args: {
99
+ productInitials: "CR",
100
+ title: "Chardonnay Reserve 2021",
101
+ subtitle: "Won by Nordic Wines",
102
+ titleIcon: _jsx(Award, { className: "size-[15px]" }),
103
+ variant: "won",
104
+ metaRight: "€19.20",
105
+ metaRightTone: "success",
106
+ actionsSlot: (_jsx("button", { type: "button", "aria-label": "More actions", className: "inline-flex size-7 items-center justify-center rounded-md border border-[color-mix(in_oklab,var(--border)_60%,transparent)] bg-[var(--card)] text-[var(--muted-foreground)] shadow-[0_1px_3px_oklch(0_0_0/0.08)] hover:text-[var(--foreground)]", children: _jsx(MoreHorizontal, { className: "size-4" }) })),
107
+ },
108
+ parameters: {
109
+ docs: {
110
+ description: {
111
+ story: "The actionsSlot renders top-right, fades in on hover / focus-within, and stops click propagation so it never triggers the card's onClick. Wire a DropdownMenu trigger here (Archive, Remove, Mark ready, etc). Compatible with Radix DropdownMenu + data-[state=open] auto-pinning.",
112
+ },
113
+ },
114
+ },
115
+ };
116
+ //# 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":"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"}
@@ -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, color-mix(in oklab, var(--primary) 60%, white) 0%, color-mix(in oklab, var(--accent-secondary) 60%, white) 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.5",
3
+ "version": "0.10.3",
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
+ }