@cellarnode/ui 0.2.0 → 0.2.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.
@@ -0,0 +1,23 @@
1
+ export interface BeverageDetailsProps {
2
+ beverageType?: string | null;
3
+ producerName?: string | null;
4
+ countryOfOrigin?: string | null;
5
+ region?: string | null;
6
+ vintage?: string | number | null;
7
+ abv?: string | number | null;
8
+ containerVolume?: string | number | null;
9
+ productionVolume?: string | number | null;
10
+ residualSugar?: string | number | null;
11
+ totalAcidity?: string | number | null;
12
+ pH?: string | number | null;
13
+ packaging?: string | null;
14
+ closure?: string | null;
15
+ priceRange?: {
16
+ min?: number;
17
+ max?: number;
18
+ } | null;
19
+ currency?: string | null;
20
+ className?: string;
21
+ }
22
+ export declare function BeverageDetails(props: BeverageDetailsProps): import("react/jsx-runtime").JSX.Element | null;
23
+ //# sourceMappingURL=beverage-details.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beverage-details.d.ts","sourceRoot":"","sources":["../../src/offer/beverage-details.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,kDAoC1D"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils";
3
+ function formatPriceRange(range, currency) {
4
+ if (!range)
5
+ return null;
6
+ const { min, max } = range;
7
+ if (min == null && max == null)
8
+ return null;
9
+ const cur = currency ?? "";
10
+ if (min != null && max != null)
11
+ return `${cur} ${min} – ${max}`.trim();
12
+ if (min != null)
13
+ return `${cur} ${min}+`.trim();
14
+ return `up to ${cur} ${max}`.trim();
15
+ }
16
+ export function BeverageDetails(props) {
17
+ const fields = [];
18
+ const push = (label, value) => {
19
+ if (value != null && String(value).trim() !== "") {
20
+ fields.push({ label, value: String(value) });
21
+ }
22
+ };
23
+ push("Beverage Type", props.beverageType);
24
+ push("Producer", props.producerName);
25
+ push("Country of Origin", props.countryOfOrigin);
26
+ push("Region", props.region);
27
+ push("Vintage", props.vintage);
28
+ push("ABV", props.abv != null ? `${props.abv}%` : null);
29
+ push("Container Volume", props.containerVolume);
30
+ push("Production Volume", props.productionVolume);
31
+ push("Residual Sugar", props.residualSugar);
32
+ push("Total Acidity", props.totalAcidity);
33
+ push("pH", props.pH);
34
+ push("Packaging", props.packaging);
35
+ push("Closure", props.closure);
36
+ push("Price Range", formatPriceRange(props.priceRange, props.currency));
37
+ if (fields.length === 0)
38
+ return null;
39
+ return (_jsx("div", { className: cn("grid grid-cols-2 gap-x-4 gap-y-3 sm:grid-cols-3", props.className), children: fields.map((field) => (_jsxs("div", { className: "grid gap-0.5", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: field.label }), _jsx("span", { className: "text-sm font-medium text-foreground", children: field.value })] }, field.label))) }));
40
+ }
41
+ //# sourceMappingURL=beverage-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beverage-details.js","sourceRoot":"","sources":["../../src/offer/beverage-details.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface CompositionListProps {
2
+ composition?: {
3
+ name: string;
4
+ percentage?: number | null;
5
+ }[] | null;
6
+ className?: string;
7
+ }
8
+ export declare function CompositionList({ composition, className }: CompositionListProps): import("react/jsx-runtime").JSX.Element | null;
9
+ //# sourceMappingURL=composition-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition-list.d.ts","sourceRoot":"","sources":["../../src/offer/composition-list.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,oBAAoB,kDAe/E"}
@@ -0,0 +1,9 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Badge } from "../components/badge";
3
+ import { cn } from "../lib/utils";
4
+ export function CompositionList({ composition, className }) {
5
+ if (!composition || composition.length === 0)
6
+ return null;
7
+ return (_jsx("div", { className: cn("flex flex-wrap gap-2", className), children: composition.map((entry) => (_jsxs(Badge, { color: "zinc", children: [entry.name, entry.percentage != null && (_jsxs("span", { className: "ml-0.5 opacity-70", children: [entry.percentage, "%"] }))] }, entry.name))) }));
8
+ }
9
+ //# sourceMappingURL=composition-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition-list.js","sourceRoot":"","sources":["../../src/offer/composition-list.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAOlC,MAAM,UAAU,eAAe,CAAC,EAAE,WAAW,EAAE,SAAS,EAAwB;IAC9E,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1D,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,YAClD,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1B,MAAC,KAAK,IAAkB,KAAK,EAAC,MAAM,aACjC,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,CAC3B,gBAAM,SAAS,EAAC,mBAAmB,aAAE,KAAK,CAAC,UAAU,SAAS,CAC/D,KAJS,KAAK,CAAC,IAAI,CAKd,CACT,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -8,4 +8,16 @@ export type { ConfirmActionDialogProps } from "./confirm-action-dialog";
8
8
  export { AttachmentsFolder } from "./attachments-folder";
9
9
  export type { AttachmentsFolderProps } from "./attachments-folder";
10
10
  export type { OfferResponseThread, OfferResponseInput, TranslationFn, AttachmentMetadata, OfferActionType, } from "./types";
11
+ export { BeverageDetails } from "./beverage-details";
12
+ export type { BeverageDetailsProps } from "./beverage-details";
13
+ export { SensoryProfile } from "./sensory-profile";
14
+ export type { SensoryProfileProps } from "./sensory-profile";
15
+ export { CompositionList } from "./composition-list";
16
+ export type { CompositionListProps } from "./composition-list";
17
+ export { ReviewsSummary } from "./reviews-summary";
18
+ export type { ReviewsSummaryProps } from "./reviews-summary";
19
+ export { OpportunityRequirements } from "./opportunity-requirements";
20
+ export type { OpportunityRequirementsProps } from "./opportunity-requirements";
21
+ export { OrgBanner } from "./org-banner";
22
+ export type { OrgBannerProps } from "./org-banner";
11
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/offer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/offer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,YAAY,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -3,4 +3,10 @@ export { NegotiationEventCard } from "./negotiation-event-card";
3
3
  export { InlineCounterForm } from "./inline-counter-form";
4
4
  export { ConfirmActionDialog } from "./confirm-action-dialog";
5
5
  export { AttachmentsFolder } from "./attachments-folder";
6
+ export { BeverageDetails } from "./beverage-details";
7
+ export { SensoryProfile } from "./sensory-profile";
8
+ export { CompositionList } from "./composition-list";
9
+ export { ReviewsSummary } from "./reviews-summary";
10
+ export { OpportunityRequirements } from "./opportunity-requirements";
11
+ export { OrgBanner } from "./org-banner";
6
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/offer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/offer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AASzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,31 @@
1
+ export interface OpportunityRequirementsProps {
2
+ marketIdentifier?: string | null;
3
+ beverageType?: string | null;
4
+ countryOfOrigin?: string | null;
5
+ packagingType?: string | null;
6
+ closure?: string | null;
7
+ currency?: string | null;
8
+ submissionDeadline?: string | null;
9
+ sampleDeadline?: string | null;
10
+ alcoholContent?: {
11
+ min?: number;
12
+ max?: number;
13
+ } | null;
14
+ residualSugarMin?: number | null;
15
+ residualSugarMax?: number | null;
16
+ volumeOptions?: number[] | null;
17
+ grapeBlend?: {
18
+ grape: string;
19
+ amount?: string;
20
+ }[] | null;
21
+ vintages?: number[] | null;
22
+ certifications?: {
23
+ organic?: boolean;
24
+ fairtrade?: boolean;
25
+ sustainable?: boolean;
26
+ } | null;
27
+ styleTasteProfile?: string | null;
28
+ className?: string;
29
+ }
30
+ export declare function OpportunityRequirements(props: OpportunityRequirementsProps): import("react/jsx-runtime").JSX.Element | null;
31
+ //# sourceMappingURL=opportunity-requirements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opportunity-requirements.d.ts","sourceRoot":"","sources":["../../src/offer/opportunity-requirements.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,GAAG,IAAI,CAAC;IACT,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+BD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,kDAwE1E"}
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Badge } from "../components/badge";
3
+ import { cn } from "../lib/utils";
4
+ function formatRange(label, min, max, suffix) {
5
+ if (min == null && max == null)
6
+ return null;
7
+ const s = suffix ? ` ${suffix}` : "";
8
+ if (min != null && max != null)
9
+ return `${min}${s} – ${max}${s}`;
10
+ if (min != null)
11
+ return `${min}${s}+`;
12
+ return `up to ${max}${s}`;
13
+ }
14
+ function buildCertsList(certs) {
15
+ if (!certs)
16
+ return null;
17
+ const active = [];
18
+ if (certs.organic)
19
+ active.push("Organic");
20
+ if (certs.fairtrade)
21
+ active.push("Fairtrade");
22
+ if (certs.sustainable)
23
+ active.push("Sustainable");
24
+ return active.length > 0 ? active.join(", ") : null;
25
+ }
26
+ export function OpportunityRequirements(props) {
27
+ const fields = [];
28
+ const push = (label, value) => {
29
+ if (value != null && String(value).trim() !== "") {
30
+ fields.push({ label, value: String(value) });
31
+ }
32
+ };
33
+ push("Market", props.marketIdentifier);
34
+ push("Beverage Type", props.beverageType);
35
+ push("Country of Origin", props.countryOfOrigin);
36
+ push("Packaging", props.packagingType);
37
+ push("Closure", props.closure);
38
+ push("Currency", props.currency);
39
+ push("Submission Deadline", props.submissionDeadline);
40
+ push("Sample Deadline", props.sampleDeadline);
41
+ push("Alcohol Content", formatRange("ABV", props.alcoholContent?.min, props.alcoholContent?.max, "%"));
42
+ push("Residual Sugar", formatRange("RS", props.residualSugarMin, props.residualSugarMax, "g/L"));
43
+ push("Volume Options", props.volumeOptions && props.volumeOptions.length > 0
44
+ ? props.volumeOptions.join(", ")
45
+ : null);
46
+ push("Vintages", props.vintages && props.vintages.length > 0 ? props.vintages.join(", ") : null);
47
+ push("Certifications", buildCertsList(props.certifications));
48
+ push("Style / Taste Profile", props.styleTasteProfile);
49
+ const hasGrapeBlend = props.grapeBlend && props.grapeBlend.length > 0;
50
+ if (fields.length === 0 && !hasGrapeBlend)
51
+ return null;
52
+ return (_jsxs("div", { className: cn("grid gap-4", props.className), children: [fields.length > 0 && (_jsx("div", { className: "grid grid-cols-2 gap-x-4 gap-y-3 sm:grid-cols-3", children: fields.map((field) => (_jsxs("div", { className: "grid gap-0.5", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: field.label }), _jsx("span", { className: "text-sm font-medium text-foreground", children: field.value })] }, field.label))) })), hasGrapeBlend && (_jsxs("div", { className: "grid gap-1.5", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: "Grape Blend" }), _jsx("div", { className: "flex flex-wrap gap-2", children: props.grapeBlend.map((entry) => (_jsxs(Badge, { color: "zinc", children: [entry.grape, entry.amount && (_jsx("span", { className: "ml-0.5 opacity-70", children: entry.amount }))] }, entry.grape))) })] }))] }));
53
+ }
54
+ //# sourceMappingURL=opportunity-requirements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opportunity-requirements.js","sourceRoot":"","sources":["../../src/offer/opportunity-requirements.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface OrgBannerProps {
2
+ name: string;
3
+ country?: string | null;
4
+ region?: string | null;
5
+ verified?: boolean;
6
+ profilePictureUrl?: string | null;
7
+ description?: string | null;
8
+ className?: string;
9
+ }
10
+ export declare function OrgBanner({ name, country, region, verified, profilePictureUrl, description, className, }: OrgBannerProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=org-banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-banner.d.ts","sourceRoot":"","sources":["../../src/offer/org-banner.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,SAAS,GACV,EAAE,cAAc,2CAqChB"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Badge } from "../components/badge";
3
+ import { cn } from "../lib/utils";
4
+ function getInitials(name) {
5
+ return name
6
+ .split(/\s+/)
7
+ .slice(0, 2)
8
+ .map((w) => w.charAt(0).toUpperCase())
9
+ .join("");
10
+ }
11
+ function buildLocation(country, region) {
12
+ const parts = [region, country].filter(Boolean);
13
+ return parts.length > 0 ? parts.join(", ") : null;
14
+ }
15
+ export function OrgBanner({ name, country, region, verified, profilePictureUrl, description, className, }) {
16
+ const location = buildLocation(country, region);
17
+ return (_jsxs("div", { className: cn("flex items-start gap-4", className), children: [profilePictureUrl ? (_jsx("img", { src: profilePictureUrl, alt: name, className: "size-12 shrink-0 rounded-full object-cover" })) : (_jsx("div", { className: "flex size-12 shrink-0 items-center justify-center rounded-full bg-muted text-sm font-semibold text-muted-foreground", children: getInitials(name) })), _jsxs("div", { className: "grid min-w-0 gap-0.5", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "truncate text-sm font-semibold text-foreground", children: name }), verified && (_jsx(Badge, { color: "emerald", children: "Verified" }))] }), location && (_jsx("span", { className: "text-xs text-muted-foreground", children: location })), description && (_jsx("p", { className: "mt-1 text-sm/6 text-muted-foreground", children: description }))] })] }));
18
+ }
19
+ //# sourceMappingURL=org-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-banner.js","sourceRoot":"","sources":["../../src/offer/org-banner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAYlC,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI;SACR,KAAK,CAAC,KAAK,CAAC;SACZ,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACrC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CACpB,OAAuB,EACvB,MAAsB;IAEtB,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,SAAS,GACM;IACf,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEhD,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,aAEpD,iBAAiB,CAAC,CAAC,CAAC,CACnB,cACE,GAAG,EAAE,iBAAiB,EACtB,GAAG,EAAE,IAAI,EACT,SAAS,EAAC,4CAA4C,GACtD,CACH,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,qHAAqH,YACjI,WAAW,CAAC,IAAI,CAAC,GACd,CACP,EAGD,eAAK,SAAS,EAAC,sBAAsB,aACnC,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,gDAAgD,YAAE,IAAI,GAAQ,EAC7E,QAAQ,IAAI,CACX,KAAC,KAAK,IAAC,KAAK,EAAC,SAAS,yBAAiB,CACxC,IACG,EAEL,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,+BAA+B,YAAE,QAAQ,GAAQ,CAClE,EAEA,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,CACtE,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface ReviewsSummaryProps {
2
+ averageScore?: number | null;
3
+ individualScores?: {
4
+ source: string;
5
+ score: number;
6
+ }[] | null;
7
+ professionalSummary?: string | null;
8
+ awards?: {
9
+ id: string;
10
+ name: string;
11
+ }[] | null;
12
+ citations?: {
13
+ url: string;
14
+ title?: string;
15
+ }[] | null;
16
+ className?: string;
17
+ }
18
+ export declare function ReviewsSummary(props: ReviewsSummaryProps): import("react/jsx-runtime").JSX.Element | null;
19
+ //# sourceMappingURL=reviews-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviews-summary.d.ts","sourceRoot":"","sources":["../../src/offer/reviews-summary.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IAC/C,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDAwExD"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Badge } from "../components/badge";
3
+ import { cn } from "../lib/utils";
4
+ function isEmpty(props) {
5
+ return (props.averageScore == null &&
6
+ (!props.individualScores || props.individualScores.length === 0) &&
7
+ !props.professionalSummary &&
8
+ (!props.awards || props.awards.length === 0) &&
9
+ (!props.citations || props.citations.length === 0));
10
+ }
11
+ export function ReviewsSummary(props) {
12
+ if (isEmpty(props))
13
+ return null;
14
+ const { averageScore, individualScores, professionalSummary, awards, citations, className, } = props;
15
+ return (_jsxs("div", { className: cn("grid gap-4", className), children: [averageScore != null && (_jsxs("div", { className: "flex items-baseline gap-2", children: [_jsx("span", { className: "text-2xl font-bold text-foreground", children: averageScore }), _jsx("span", { className: "text-sm text-muted-foreground", children: "/ 100" })] })), individualScores && individualScores.length > 0 && (_jsx("div", { className: "grid gap-1.5", children: individualScores.map((entry) => (_jsxs("div", { className: "flex items-center justify-between gap-4 text-sm", children: [_jsx("span", { className: "text-muted-foreground", children: entry.source }), _jsx("span", { className: "font-medium text-foreground", children: entry.score })] }, entry.source))) })), professionalSummary && (_jsx("p", { className: "text-sm/6 text-foreground", children: professionalSummary })), awards && awards.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2", children: awards.map((award) => (_jsx(Badge, { color: "amber", children: award.name }, award.id))) })), citations && citations.length > 0 && (_jsx("ul", { className: "grid gap-1", children: citations.map((citation) => (_jsx("li", { children: _jsx("a", { href: citation.url, target: "_blank", rel: "noopener noreferrer", className: "text-sm text-primary underline-offset-2 hover:underline", children: citation.title || citation.url }) }, citation.url))) }))] }));
16
+ }
17
+ //# sourceMappingURL=reviews-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviews-summary.js","sourceRoot":"","sources":["../../src/offer/reviews-summary.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,SAAS,OAAO,CAAC,KAA0B;IACzC,OAAO,CACL,KAAK,CAAC,YAAY,IAAI,IAAI;QAC1B,CAAC,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC;QAChE,CAAC,KAAK,CAAC,mBAAmB;QAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,EACJ,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,SAAS,GACV,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,aAExC,YAAY,IAAI,IAAI,IAAI,CACvB,eAAK,SAAS,EAAC,2BAA2B,aACxC,eAAM,SAAS,EAAC,oCAAoC,YAAE,YAAY,GAAQ,EAC1E,eAAM,SAAS,EAAC,+BAA+B,sBAAa,IACxD,CACP,EAGA,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAClD,cAAK,SAAS,EAAC,cAAc,YAC1B,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC/B,eAEE,SAAS,EAAC,iDAAiD,aAE3D,eAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,CAAC,MAAM,GAAQ,EAC7D,eAAM,SAAS,EAAC,6BAA6B,YAAE,KAAK,CAAC,KAAK,GAAQ,KAJ7D,KAAK,CAAC,MAAM,CAKb,CACP,CAAC,GACE,CACP,EAGA,mBAAmB,IAAI,CACtB,YAAG,SAAS,EAAC,2BAA2B,YAAE,mBAAmB,GAAK,CACnE,EAGA,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAC9B,cAAK,SAAS,EAAC,sBAAsB,YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,KAAC,KAAK,IAAgB,KAAK,EAAC,OAAO,YAChC,KAAK,CAAC,IAAI,IADD,KAAK,CAAC,EAAE,CAEZ,CACT,CAAC,GACE,CACP,EAGA,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CACpC,aAAI,SAAS,EAAC,YAAY,YACvB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,uBACE,YACE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAClB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,yDAAyD,YAElE,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,GAC7B,IARG,QAAQ,CAAC,GAAG,CAShB,CACN,CAAC,GACC,CACN,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface SensoryProfileProps {
2
+ /** Stages keyed by stage name, each containing field key/value pairs. */
3
+ sensoryDetails?: Record<string, Record<string, string | null> | null> | null;
4
+ /** Optional label overrides per stage key. */
5
+ stageLabels?: Record<string, string>;
6
+ /** Optional label overrides per field, keyed by stage then field. */
7
+ fieldLabels?: Record<string, Record<string, string>>;
8
+ className?: string;
9
+ }
10
+ export declare function SensoryProfile({ sensoryDetails, stageLabels, fieldLabels, className, }: SensoryProfileProps): import("react/jsx-runtime").JSX.Element | null;
11
+ //# sourceMappingURL=sensory-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensory-profile.d.ts","sourceRoot":"","sources":["../../src/offer/sensory-profile.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7E,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,GACV,EAAE,mBAAmB,kDAsCrB"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils";
3
+ function capitalize(s) {
4
+ return s.charAt(0).toUpperCase() + s.slice(1).replace(/[_-]/g, " ");
5
+ }
6
+ function hasValues(fields) {
7
+ if (!fields)
8
+ return false;
9
+ return Object.values(fields).some((v) => v != null && v.trim() !== "");
10
+ }
11
+ export function SensoryProfile({ sensoryDetails, stageLabels, fieldLabels, className, }) {
12
+ if (!sensoryDetails)
13
+ return null;
14
+ const stages = Object.entries(sensoryDetails).filter(([, fields]) => hasValues(fields));
15
+ if (stages.length === 0)
16
+ return null;
17
+ return (_jsx("div", { className: cn("grid gap-5", className), children: stages.map(([stageKey, fields]) => {
18
+ if (!fields)
19
+ return null;
20
+ const stageLabel = stageLabels?.[stageKey] ?? capitalize(stageKey);
21
+ const stageFieldLabels = fieldLabels?.[stageKey];
22
+ const entries = Object.entries(fields).filter(([, v]) => v != null && v.trim() !== "");
23
+ if (entries.length === 0)
24
+ return null;
25
+ return (_jsxs("div", { className: "grid gap-2", children: [_jsx("h4", { className: "text-sm font-semibold text-foreground", children: stageLabel }), _jsx("div", { className: "grid grid-cols-2 gap-x-4 gap-y-2 sm:grid-cols-3", children: entries.map(([fieldKey, value]) => (_jsxs("div", { className: "grid gap-0.5", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: stageFieldLabels?.[fieldKey] ?? capitalize(fieldKey) }), _jsx("span", { className: "text-sm text-foreground", children: value })] }, fieldKey))) })] }, stageKey));
26
+ }) }));
27
+ }
28
+ //# sourceMappingURL=sensory-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensory-profile.js","sourceRoot":"","sources":["../../src/offer/sensory-profile.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAYlC,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,SAAS,CAAC,MAAwD;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,GACW;IACpB,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAExF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,YACxC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnE,MAAM,gBAAgB,GAAG,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC;YAEjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CACxC,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEtC,OAAO,CACL,eAAoB,SAAS,EAAC,YAAY,aACxC,aAAI,SAAS,EAAC,uCAAuC,YAAE,UAAU,GAAM,EACvE,cAAK,SAAS,EAAC,iDAAiD,YAC7D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAClC,eAAoB,SAAS,EAAC,cAAc,aAC1C,eAAM,SAAS,EAAC,+BAA+B,YAC5C,gBAAgB,EAAE,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAChD,EACP,eAAM,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAQ,KAJhD,QAAQ,CAKZ,CACP,CAAC,GACE,KAXE,QAAQ,CAYZ,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cellarnode/ui",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "Shared UI components, theme tokens, and chat/offer primitives for CellarNode dashboards.",