@fanvue/ui 2.1.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,310 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const jsxRuntime = require("react/jsx-runtime");
5
+ const React = require("react");
6
+ const cn = require("../../utils/cn.cjs");
7
+ const Badge = require("../Badge/Badge.cjs");
8
+ const IconButton = require("../IconButton/IconButton.cjs");
9
+ const CrossIcon = require("../Icons/CrossIcon.cjs");
10
+ function _interopNamespaceDefault(e) {
11
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
12
+ if (e) {
13
+ for (const k in e) {
14
+ if (k !== "default") {
15
+ const d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: () => e[k]
19
+ });
20
+ }
21
+ }
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+ const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
27
+ const APP_STORE_VARIANTS = ["appStore1", "appStore2", "appStore3"];
28
+ function isAppStoreVariant(variant) {
29
+ return APP_STORE_VARIANTS.includes(variant);
30
+ }
31
+ const GUIDE_BADGE_VARIANT = {
32
+ appStore1: "dark",
33
+ appStore2: "default",
34
+ appStore3: "default"
35
+ };
36
+ const BANNER_SHADOW = "shadow-sm";
37
+ const guideGradient = {
38
+ appStore1: {
39
+ backgroundImage: "linear-gradient(125.54deg, var(--color-brand-primary-muted) 0%, var(--color-neutral-alphas-50) 100%)"
40
+ },
41
+ appStore2: {
42
+ backgroundImage: "linear-gradient(125.54deg, var(--color-brand-secondary-muted) 0%, var(--color-brand-secondary-muted) 100%)"
43
+ },
44
+ appStore3: {
45
+ backgroundImage: "linear-gradient(125.54deg, var(--color-brand-secondary-muted) 0%, color-mix(in srgb, var(--color-info-surface) 80%, transparent) 100%)"
46
+ }
47
+ };
48
+ function BannerDismiss({
49
+ onDismiss,
50
+ dismissLabel
51
+ }) {
52
+ return /* @__PURE__ */ jsxRuntime.jsx(
53
+ IconButton.IconButton,
54
+ {
55
+ variant: "contrast",
56
+ size: "24",
57
+ icon: /* @__PURE__ */ jsxRuntime.jsx(CrossIcon.CrossIcon, {}),
58
+ onClick: onDismiss,
59
+ "aria-label": dismissLabel,
60
+ className: "hover:bg-white/10 active:bg-white/15"
61
+ }
62
+ );
63
+ }
64
+ function resolveLayout(variant, layoutProp) {
65
+ if (variant === "Subtle") {
66
+ return "horizontal";
67
+ }
68
+ if (isAppStoreVariant(variant)) {
69
+ return "vertical";
70
+ }
71
+ if (variant === "whatsNew") {
72
+ return layoutProp ?? "horizontal";
73
+ }
74
+ return layoutProp ?? "vertical";
75
+ }
76
+ function bannerRootClass(variant, layout, className) {
77
+ return cn.cn(
78
+ "flex rounded-md",
79
+ BANNER_SHADOW,
80
+ variant === "Default" && "gap-3 bg-surface-primary-inverted p-4 text-content-primary-inverted",
81
+ variant === "Subtle" && "w-full max-w-[600px] items-start gap-3 border border-border-primary bg-surface-secondary p-4 text-content-primary",
82
+ variant === "whatsNew" && layout === "horizontal" && "w-full max-w-[446px] items-center gap-4 bg-surface-purple-muted p-4 text-content-primary",
83
+ variant === "whatsNew" && layout === "vertical" && "w-full max-w-[220px] flex-col items-stretch gap-4 border border-border-primary bg-surface-secondary p-4 text-content-primary",
84
+ variant === "whatsNew" && layout === "compact" && "w-full max-w-[446px] items-start gap-4 bg-surface-purple-muted p-4 text-content-primary",
85
+ isAppStoreVariant(variant) && "w-full max-w-[280px] flex-col gap-4 p-6",
86
+ layout === "vertical" && variant === "Default" && "max-w-[360px]",
87
+ layout === "horizontal" && variant === "Default" && "w-full max-w-[600px] items-start",
88
+ className
89
+ );
90
+ }
91
+ const BannerSection = React__namespace.forwardRef(
92
+ ({ className, labelledBy, children, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
93
+ "section",
94
+ {
95
+ ref,
96
+ "aria-labelledby": labelledBy,
97
+ "data-testid": "banner",
98
+ className,
99
+ ...rest,
100
+ children
101
+ }
102
+ )
103
+ );
104
+ BannerSection.displayName = "BannerSection";
105
+ function BannerGuideBody({
106
+ appStoreVariant,
107
+ eyebrow,
108
+ title,
109
+ description,
110
+ textAction,
111
+ labelledBy
112
+ }) {
113
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
114
+ eyebrow !== void 0 && eyebrow !== null && eyebrow !== false && /* @__PURE__ */ jsxRuntime.jsx(
115
+ Badge.Badge,
116
+ {
117
+ variant: GUIDE_BADGE_VARIANT[appStoreVariant],
118
+ leftDot: false,
119
+ className: "typography-semibold-badge self-start",
120
+ children: eyebrow
121
+ }
122
+ ),
123
+ title !== void 0 && title !== null && title !== false && /* @__PURE__ */ jsxRuntime.jsx("p", { id: labelledBy, className: "typography-semibold-body-lg text-content-primary", children: title }),
124
+ description !== void 0 && description !== null && description !== false && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "typography-regular-body-md text-content-secondary", children: description }),
125
+ textAction
126
+ ] });
127
+ }
128
+ function BannerFeatureBody({
129
+ layout,
130
+ media,
131
+ title,
132
+ description,
133
+ textAction,
134
+ labelledBy
135
+ }) {
136
+ const titleClass = layout === "vertical" ? "typography-semibold-body-lg text-content-primary" : "typography-semibold-body-lg text-[18px] leading-6 text-content-primary";
137
+ const mediaWrap = layout === "compact" ? "size-20 shrink-0 overflow-hidden rounded-sm" : "size-[132px] shrink-0 overflow-hidden rounded-sm";
138
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
139
+ media !== void 0 && media !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn.cn(mediaWrap, layout === "vertical" && "w-full [&>*]:mx-auto"), children: media }),
140
+ /* @__PURE__ */ jsxRuntime.jsxs(
141
+ "div",
142
+ {
143
+ className: cn.cn(
144
+ "flex min-w-0 flex-col gap-2",
145
+ layout === "horizontal" || layout === "compact" ? "flex-1 justify-end" : "w-full"
146
+ ),
147
+ children: [
148
+ title !== void 0 && title !== null && title !== false && /* @__PURE__ */ jsxRuntime.jsx("div", { id: labelledBy, className: titleClass, children: title }),
149
+ description !== void 0 && description !== null && description !== false && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "typography-regular-body-md text-content-secondary", children: description }),
150
+ textAction
151
+ ]
152
+ }
153
+ )
154
+ ] });
155
+ }
156
+ function BannerSubtleBody({
157
+ media,
158
+ leadBadge,
159
+ title,
160
+ description,
161
+ secondaryLine,
162
+ stackedAction,
163
+ statusRow,
164
+ primaryAction,
165
+ labelledBy
166
+ }) {
167
+ const mediaSizeDefault = "size-12 shrink-0 overflow-hidden rounded-xl";
168
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
169
+ media !== void 0 && media !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: mediaSizeDefault, children: media }),
170
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-end gap-3", children: [
171
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-4", children: [
172
+ leadBadge !== void 0 && leadBadge !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-2", children: leadBadge }),
173
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
174
+ title !== void 0 && title !== null && title !== false && /* @__PURE__ */ jsxRuntime.jsx("div", { id: labelledBy, className: "typography-bold-heading-xs text-content-primary", children: title }),
175
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
176
+ description !== void 0 && description !== null && description !== false && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "typography-regular-body-md text-content-primary", children: description }),
177
+ secondaryLine !== void 0 && secondaryLine !== null && secondaryLine !== false && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "typography-regular-body-sm text-content-primary", children: secondaryLine })
178
+ ] })
179
+ ] }),
180
+ stackedAction !== void 0 && stackedAction !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-end self-start", children: stackedAction }),
181
+ statusRow !== void 0 && statusRow !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-2", children: statusRow })
182
+ ] }),
183
+ primaryAction !== void 0 && primaryAction !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 self-center", children: primaryAction })
184
+ ] })
185
+ ] });
186
+ }
187
+ function BannerInverseBody({
188
+ layout,
189
+ media,
190
+ eyebrow,
191
+ title,
192
+ description,
193
+ primaryAction,
194
+ labelledBy,
195
+ dismissSlot
196
+ }) {
197
+ const mediaSizeDefault = "size-12 shrink-0 overflow-hidden rounded-xl";
198
+ const titleClassInverse = "typography-bold-heading-xs text-content-primary-inverted";
199
+ const textColumn = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
200
+ eyebrow !== void 0 && eyebrow !== null && eyebrow !== false && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "typography-semibold-body-sm text-content-primary-inverted", children: eyebrow }),
201
+ title !== void 0 && title !== null && title !== false && /* @__PURE__ */ jsxRuntime.jsx("div", { id: labelledBy, className: titleClassInverse, children: title }),
202
+ description !== void 0 && description !== null && description !== false && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "typography-regular-body-md text-content-primary-inverted", children: description })
203
+ ] });
204
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
205
+ media !== void 0 && media !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: mediaSizeDefault, children: media }),
206
+ layout === "horizontal" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-end gap-3", children: [
207
+ textColumn,
208
+ primaryAction !== void 0 && primaryAction !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: primaryAction })
209
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-3", children: [
210
+ textColumn,
211
+ primaryAction !== void 0 && primaryAction !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { children: primaryAction })
212
+ ] }),
213
+ dismissSlot
214
+ ] });
215
+ }
216
+ const Banner = React__namespace.forwardRef(
217
+ ({
218
+ className,
219
+ variant,
220
+ layout: layoutProp,
221
+ media,
222
+ eyebrow,
223
+ leadBadge,
224
+ title,
225
+ description,
226
+ secondaryLine,
227
+ stackedAction,
228
+ statusRow,
229
+ primaryAction,
230
+ textAction,
231
+ onDismiss,
232
+ dismissLabel = "Dismiss banner",
233
+ ...props
234
+ }, ref) => {
235
+ const layout = resolveLayout(variant, layoutProp);
236
+ const showDismiss = onDismiss !== void 0 && variant === "Default";
237
+ const titleId = React__namespace.useId();
238
+ const regionLabelledBy = title !== void 0 && title !== null && title !== false ? titleId : void 0;
239
+ const rootClass = bannerRootClass(variant, layout, className);
240
+ if (isAppStoreVariant(variant)) {
241
+ return /* @__PURE__ */ jsxRuntime.jsx(
242
+ BannerSection,
243
+ {
244
+ ref,
245
+ labelledBy: regionLabelledBy,
246
+ style: guideGradient[variant],
247
+ className: rootClass,
248
+ ...props,
249
+ children: /* @__PURE__ */ jsxRuntime.jsx(
250
+ BannerGuideBody,
251
+ {
252
+ appStoreVariant: variant,
253
+ eyebrow,
254
+ title,
255
+ description,
256
+ textAction,
257
+ labelledBy: regionLabelledBy
258
+ }
259
+ )
260
+ }
261
+ );
262
+ }
263
+ if (variant === "whatsNew") {
264
+ return /* @__PURE__ */ jsxRuntime.jsx(BannerSection, { ref, labelledBy: regionLabelledBy, className: rootClass, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(
265
+ BannerFeatureBody,
266
+ {
267
+ layout,
268
+ media,
269
+ title,
270
+ description,
271
+ textAction,
272
+ labelledBy: regionLabelledBy
273
+ }
274
+ ) });
275
+ }
276
+ if (variant === "Subtle") {
277
+ return /* @__PURE__ */ jsxRuntime.jsx(BannerSection, { ref, labelledBy: regionLabelledBy, className: rootClass, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(
278
+ BannerSubtleBody,
279
+ {
280
+ media,
281
+ leadBadge,
282
+ title,
283
+ description,
284
+ secondaryLine,
285
+ stackedAction,
286
+ statusRow,
287
+ primaryAction,
288
+ labelledBy: regionLabelledBy
289
+ }
290
+ ) });
291
+ }
292
+ const dismissSlot = showDismiss && onDismiss !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(BannerDismiss, { onDismiss, dismissLabel }) : null;
293
+ return /* @__PURE__ */ jsxRuntime.jsx(BannerSection, { ref, labelledBy: regionLabelledBy, className: rootClass, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full items-start gap-3", children: /* @__PURE__ */ jsxRuntime.jsx(
294
+ BannerInverseBody,
295
+ {
296
+ layout,
297
+ media,
298
+ eyebrow,
299
+ title,
300
+ description,
301
+ primaryAction,
302
+ labelledBy: regionLabelledBy,
303
+ dismissSlot
304
+ }
305
+ ) }) });
306
+ }
307
+ );
308
+ Banner.displayName = "Banner";
309
+ exports.Banner = Banner;
310
+ //# sourceMappingURL=Banner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Banner.cjs","sources":["../../../../src/components/Banner/Banner.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Badge, type BadgeVariant } from \"../Badge/Badge\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport { CrossIcon } from \"../Icons/CrossIcon\";\n\n/**\n * Matches the Fanvue Library Banner Figma component property `Type`\n * (`Default`, `Subtle`, `whatsNew`, `appStore1`, `appStore2`, `appStore3`).\n */\nexport type BannerVariant =\n | \"Default\"\n | \"Subtle\"\n | \"whatsNew\"\n | \"appStore1\"\n | \"appStore2\"\n | \"appStore3\";\n\n/** Layout (`Vertical` / `Horizontal` / `HorizontalSmall` in Figma). Ignored for `Subtle` and app store types. */\nexport type BannerLayout = \"vertical\" | \"horizontal\" | \"compact\";\n\ntype AppStoreVariant = \"appStore1\" | \"appStore2\" | \"appStore3\";\n\nconst APP_STORE_VARIANTS: readonly AppStoreVariant[] = [\"appStore1\", \"appStore2\", \"appStore3\"];\n\nfunction isAppStoreVariant(variant: BannerVariant): variant is AppStoreVariant {\n return (APP_STORE_VARIANTS as readonly string[]).includes(variant);\n}\n\nconst GUIDE_BADGE_VARIANT: Record<AppStoreVariant, BadgeVariant> = {\n appStore1: \"dark\",\n appStore2: \"default\",\n appStore3: \"default\",\n};\n\nconst BANNER_SHADOW = \"shadow-sm\";\n\nconst guideGradient: Record<AppStoreVariant, React.CSSProperties> = {\n appStore1: {\n backgroundImage:\n \"linear-gradient(125.54deg, var(--color-brand-primary-muted) 0%, var(--color-neutral-alphas-50) 100%)\",\n },\n appStore2: {\n backgroundImage:\n \"linear-gradient(125.54deg, var(--color-brand-secondary-muted) 0%, var(--color-brand-secondary-muted) 100%)\",\n },\n appStore3: {\n backgroundImage:\n \"linear-gradient(125.54deg, var(--color-brand-secondary-muted) 0%, color-mix(in srgb, var(--color-info-surface) 80%, transparent) 100%)\",\n },\n};\n\nexport interface BannerProps extends Omit<React.HTMLAttributes<HTMLElement>, \"title\"> {\n /** Figma `Type` — selects structure, surfaces, and app store gradient. */\n variant: BannerVariant;\n /**\n * Figma `Orientation`. Ignored when `variant` is `Subtle` (horizontal) or an app store type (vertical).\n * @default `\"vertical\"` for `Default`, `\"horizontal\"` for `whatsNew`\n */\n layout?: BannerLayout;\n /** Leading visual (image, illustration, or composite). */\n media?: React.ReactNode;\n /** Small uppercase label (e.g. HOW TO). */\n eyebrow?: React.ReactNode;\n /** Top badge row (e.g. NEW pill) — mainly for `Subtle`. */\n leadBadge?: React.ReactNode;\n /** Main heading. */\n title?: React.ReactNode;\n /** Primary body copy. */\n description?: React.ReactNode;\n /** Extra line under description (`Subtle`). */\n secondaryLine?: React.ReactNode;\n /** Left-stacked pill action (`Subtle`). */\n stackedAction?: React.ReactNode;\n /** Row under stacked action (`Subtle`). */\n statusRow?: React.ReactNode;\n /** Primary button (e.g. Learn more). */\n primaryAction?: React.ReactNode;\n /** Text-style CTA (`whatsNew` / app store). */\n textAction?: React.ReactNode;\n /** When set, shows a dismiss control (`Default` only). */\n onDismiss?: () => void;\n /** Accessible label for dismiss. @default \"Dismiss banner\" */\n dismissLabel?: string;\n}\n\nfunction BannerDismiss({\n onDismiss,\n dismissLabel,\n}: {\n onDismiss: () => void;\n dismissLabel: string;\n}) {\n return (\n <IconButton\n variant=\"contrast\"\n size=\"24\"\n icon={<CrossIcon />}\n onClick={onDismiss}\n aria-label={dismissLabel}\n className=\"hover:bg-white/10 active:bg-white/15\"\n />\n );\n}\n\nfunction resolveLayout(variant: BannerVariant, layoutProp: BannerLayout | undefined): BannerLayout {\n if (variant === \"Subtle\") {\n return \"horizontal\";\n }\n if (isAppStoreVariant(variant)) {\n return \"vertical\";\n }\n if (variant === \"whatsNew\") {\n return layoutProp ?? \"horizontal\";\n }\n return layoutProp ?? \"vertical\";\n}\n\nfunction bannerRootClass(variant: BannerVariant, layout: BannerLayout, className?: string): string {\n return cn(\n \"flex rounded-md\",\n BANNER_SHADOW,\n variant === \"Default\" && \"gap-3 bg-surface-primary-inverted p-4 text-content-primary-inverted\",\n variant === \"Subtle\" &&\n \"w-full max-w-[600px] items-start gap-3 border border-border-primary bg-surface-secondary p-4 text-content-primary\",\n variant === \"whatsNew\" &&\n layout === \"horizontal\" &&\n \"w-full max-w-[446px] items-center gap-4 bg-surface-purple-muted p-4 text-content-primary\",\n variant === \"whatsNew\" &&\n layout === \"vertical\" &&\n \"w-full max-w-[220px] flex-col items-stretch gap-4 border border-border-primary bg-surface-secondary p-4 text-content-primary\",\n variant === \"whatsNew\" &&\n layout === \"compact\" &&\n \"w-full max-w-[446px] items-start gap-4 bg-surface-purple-muted p-4 text-content-primary\",\n isAppStoreVariant(variant) && \"w-full max-w-[280px] flex-col gap-4 p-6\",\n layout === \"vertical\" && variant === \"Default\" && \"max-w-[360px]\",\n layout === \"horizontal\" && variant === \"Default\" && \"w-full max-w-[600px] items-start\",\n className,\n );\n}\n\ntype BannerSectionProps = React.ComponentPropsWithoutRef<\"section\"> & {\n labelledBy?: string;\n};\n\nconst BannerSection = React.forwardRef<HTMLElement, BannerSectionProps>(\n ({ className, labelledBy, children, ...rest }, ref) => (\n <section\n ref={ref}\n aria-labelledby={labelledBy}\n data-testid=\"banner\"\n className={className}\n {...rest}\n >\n {children}\n </section>\n ),\n);\nBannerSection.displayName = \"BannerSection\";\n\ntype GuideBodyProps = Pick<BannerProps, \"eyebrow\" | \"title\" | \"description\" | \"textAction\"> & {\n appStoreVariant: AppStoreVariant;\n labelledBy?: string;\n};\n\nfunction BannerGuideBody({\n appStoreVariant,\n eyebrow,\n title,\n description,\n textAction,\n labelledBy,\n}: GuideBodyProps) {\n return (\n <>\n {eyebrow !== undefined && eyebrow !== null && eyebrow !== false && (\n <Badge\n variant={GUIDE_BADGE_VARIANT[appStoreVariant]}\n leftDot={false}\n className=\"typography-semibold-badge self-start\"\n >\n {eyebrow}\n </Badge>\n )}\n {title !== undefined && title !== null && title !== false && (\n <p id={labelledBy} className=\"typography-semibold-body-lg text-content-primary\">\n {title}\n </p>\n )}\n {description !== undefined && description !== null && description !== false && (\n <p className=\"typography-regular-body-md text-content-secondary\">{description}</p>\n )}\n {textAction}\n </>\n );\n}\n\ntype FeatureBodyProps = Pick<BannerProps, \"title\" | \"description\" | \"textAction\" | \"media\"> & {\n layout: BannerLayout;\n labelledBy?: string;\n};\n\nfunction BannerFeatureBody({\n layout,\n media,\n title,\n description,\n textAction,\n labelledBy,\n}: FeatureBodyProps) {\n const titleClass =\n layout === \"vertical\"\n ? \"typography-semibold-body-lg text-content-primary\"\n : \"typography-semibold-body-lg text-[18px] leading-6 text-content-primary\";\n const mediaWrap =\n layout === \"compact\"\n ? \"size-20 shrink-0 overflow-hidden rounded-sm\"\n : \"size-[132px] shrink-0 overflow-hidden rounded-sm\";\n\n return (\n <>\n {media !== undefined && media !== null && (\n <div className={cn(mediaWrap, layout === \"vertical\" && \"w-full [&>*]:mx-auto\")}>\n {media}\n </div>\n )}\n <div\n className={cn(\n \"flex min-w-0 flex-col gap-2\",\n layout === \"horizontal\" || layout === \"compact\" ? \"flex-1 justify-end\" : \"w-full\",\n )}\n >\n {title !== undefined && title !== null && title !== false && (\n <div id={labelledBy} className={titleClass}>\n {title}\n </div>\n )}\n {description !== undefined && description !== null && description !== false && (\n <p className=\"typography-regular-body-md text-content-secondary\">{description}</p>\n )}\n {textAction}\n </div>\n </>\n );\n}\n\ntype SubtleBodyProps = Pick<\n BannerProps,\n | \"media\"\n | \"leadBadge\"\n | \"title\"\n | \"description\"\n | \"secondaryLine\"\n | \"stackedAction\"\n | \"statusRow\"\n | \"primaryAction\"\n> & { labelledBy?: string };\n\nfunction BannerSubtleBody({\n media,\n leadBadge,\n title,\n description,\n secondaryLine,\n stackedAction,\n statusRow,\n primaryAction,\n labelledBy,\n}: SubtleBodyProps) {\n const mediaSizeDefault = \"size-12 shrink-0 overflow-hidden rounded-xl\";\n return (\n <>\n {media !== undefined && media !== null && <div className={mediaSizeDefault}>{media}</div>}\n <div className=\"flex min-w-0 flex-1 items-end gap-3\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-4\">\n {leadBadge !== undefined && leadBadge !== null && (\n <div className=\"flex flex-wrap items-center gap-2\">{leadBadge}</div>\n )}\n <div className=\"flex flex-col gap-1\">\n {title !== undefined && title !== null && title !== false && (\n <div id={labelledBy} className=\"typography-bold-heading-xs text-content-primary\">\n {title}\n </div>\n )}\n <div className=\"flex flex-col gap-2\">\n {description !== undefined && description !== null && description !== false && (\n <p className=\"typography-regular-body-md text-content-primary\">{description}</p>\n )}\n {secondaryLine !== undefined && secondaryLine !== null && secondaryLine !== false && (\n <p className=\"typography-regular-body-sm text-content-primary\">{secondaryLine}</p>\n )}\n </div>\n </div>\n {stackedAction !== undefined && stackedAction !== null && (\n <div className=\"flex flex-col items-end self-start\">{stackedAction}</div>\n )}\n {statusRow !== undefined && statusRow !== null && (\n <div className=\"flex flex-wrap items-center gap-2\">{statusRow}</div>\n )}\n </div>\n {primaryAction !== undefined && primaryAction !== null && (\n <div className=\"shrink-0 self-center\">{primaryAction}</div>\n )}\n </div>\n </>\n );\n}\n\ntype InverseBodyProps = Pick<\n BannerProps,\n \"media\" | \"eyebrow\" | \"title\" | \"description\" | \"primaryAction\"\n> & {\n layout: BannerLayout;\n labelledBy?: string;\n dismissSlot: React.ReactNode;\n};\n\nfunction BannerInverseBody({\n layout,\n media,\n eyebrow,\n title,\n description,\n primaryAction,\n labelledBy,\n dismissSlot,\n}: InverseBodyProps) {\n const mediaSizeDefault = \"size-12 shrink-0 overflow-hidden rounded-xl\";\n const titleClassInverse = \"typography-bold-heading-xs text-content-primary-inverted\";\n const textColumn = (\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n {eyebrow !== undefined && eyebrow !== null && eyebrow !== false && (\n <p className=\"typography-semibold-body-sm text-content-primary-inverted\">{eyebrow}</p>\n )}\n {title !== undefined && title !== null && title !== false && (\n <div id={labelledBy} className={titleClassInverse}>\n {title}\n </div>\n )}\n {description !== undefined && description !== null && description !== false && (\n <p className=\"typography-regular-body-md text-content-primary-inverted\">{description}</p>\n )}\n </div>\n );\n\n return (\n <>\n {media !== undefined && media !== null && <div className={mediaSizeDefault}>{media}</div>}\n {layout === \"horizontal\" ? (\n <div className=\"flex min-w-0 flex-1 items-end gap-3\">\n {textColumn}\n {primaryAction !== undefined && primaryAction !== null && (\n <div className=\"shrink-0\">{primaryAction}</div>\n )}\n </div>\n ) : (\n <div className=\"flex min-w-0 flex-1 flex-col gap-3\">\n {textColumn}\n {primaryAction !== undefined && primaryAction !== null && <div>{primaryAction}</div>}\n </div>\n )}\n {dismissSlot}\n </>\n );\n}\n\nexport const Banner = React.forwardRef<HTMLElement, BannerProps>(\n (\n {\n className,\n variant,\n layout: layoutProp,\n media,\n eyebrow,\n leadBadge,\n title,\n description,\n secondaryLine,\n stackedAction,\n statusRow,\n primaryAction,\n textAction,\n onDismiss,\n dismissLabel = \"Dismiss banner\",\n ...props\n },\n ref,\n ) => {\n const layout = resolveLayout(variant, layoutProp);\n const showDismiss = onDismiss !== undefined && variant === \"Default\";\n const titleId = React.useId();\n const regionLabelledBy =\n title !== undefined && title !== null && title !== false ? titleId : undefined;\n\n const rootClass = bannerRootClass(variant, layout, className);\n\n if (isAppStoreVariant(variant)) {\n return (\n <BannerSection\n ref={ref}\n labelledBy={regionLabelledBy}\n style={guideGradient[variant]}\n className={rootClass}\n {...props}\n >\n <BannerGuideBody\n appStoreVariant={variant}\n eyebrow={eyebrow}\n title={title}\n description={description}\n textAction={textAction}\n labelledBy={regionLabelledBy}\n />\n </BannerSection>\n );\n }\n\n if (variant === \"whatsNew\") {\n return (\n <BannerSection ref={ref} labelledBy={regionLabelledBy} className={rootClass} {...props}>\n <BannerFeatureBody\n layout={layout}\n media={media}\n title={title}\n description={description}\n textAction={textAction}\n labelledBy={regionLabelledBy}\n />\n </BannerSection>\n );\n }\n\n if (variant === \"Subtle\") {\n return (\n <BannerSection ref={ref} labelledBy={regionLabelledBy} className={rootClass} {...props}>\n <BannerSubtleBody\n media={media}\n leadBadge={leadBadge}\n title={title}\n description={description}\n secondaryLine={secondaryLine}\n stackedAction={stackedAction}\n statusRow={statusRow}\n primaryAction={primaryAction}\n labelledBy={regionLabelledBy}\n />\n </BannerSection>\n );\n }\n\n const dismissSlot =\n showDismiss && onDismiss !== undefined ? (\n <BannerDismiss onDismiss={onDismiss} dismissLabel={dismissLabel} />\n ) : null;\n\n return (\n <BannerSection ref={ref} labelledBy={regionLabelledBy} className={rootClass} {...props}>\n <div className=\"flex w-full items-start gap-3\">\n <BannerInverseBody\n layout={layout}\n media={media}\n eyebrow={eyebrow}\n title={title}\n description={description}\n primaryAction={primaryAction}\n labelledBy={regionLabelledBy}\n dismissSlot={dismissSlot}\n />\n </div>\n </BannerSection>\n );\n },\n);\n\nBanner.displayName = \"Banner\";\n"],"names":["jsx","IconButton","CrossIcon","cn","React","jsxs","Fragment","Badge"],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const jsxRuntime = require("react/jsx-runtime");
5
+ const React = require("react");
6
+ const cn = require("../../utils/cn.cjs");
7
+ function _interopNamespaceDefault(e) {
8
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
9
+ if (e) {
10
+ for (const k in e) {
11
+ if (k !== "default") {
12
+ const d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: () => e[k]
16
+ });
17
+ }
18
+ }
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+ const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
24
+ const OpenIcon = React__namespace.forwardRef(
25
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
26
+ "svg",
27
+ {
28
+ ref,
29
+ viewBox: "0 0 20 20",
30
+ fill: "none",
31
+ "aria-hidden": "true",
32
+ className: cn.cn("size-5", className),
33
+ ...props,
34
+ children: [
35
+ /* @__PURE__ */ jsxRuntime.jsx(
36
+ "path",
37
+ {
38
+ fill: "currentColor",
39
+ d: "M17.1111 9.11111C16.8754 9.11111 16.6493 9.20476 16.4826 9.37146C16.3159 9.53816 16.2222 9.76425 16.2222 10V15.3333C16.2222 15.5691 16.1286 15.7952 15.9619 15.9619C15.7952 16.1286 15.5691 16.2222 15.3333 16.2222H4.66667C4.43092 16.2222 4.20483 16.1286 4.03813 15.9619C3.87143 15.7952 3.77778 15.5691 3.77778 15.3333V4.66667C3.77778 4.43092 3.87143 4.20483 4.03813 4.03813C4.20483 3.87143 4.43092 3.77778 4.66667 3.77778H10C10.2357 3.77778 10.4618 3.68413 10.6285 3.51743C10.7952 3.35073 10.8889 3.12464 10.8889 2.88889C10.8889 2.65314 10.7952 2.42705 10.6285 2.26035C10.4618 2.09365 10.2357 2 10 2H4.66667C3.95942 2 3.28115 2.28095 2.78105 2.78105C2.28095 3.28115 2 3.95942 2 4.66667V15.3333C2 16.0406 2.28095 16.7189 2.78105 17.219C3.28115 17.719 3.95942 18 4.66667 18H15.3333C16.0406 18 16.7189 17.719 17.219 17.219C17.719 16.7189 18 16.0406 18 15.3333V10C18 9.76425 17.9064 9.53816 17.7397 9.37146C17.573 9.20476 17.3469 9.11111 17.1111 9.11111Z"
40
+ }
41
+ ),
42
+ /* @__PURE__ */ jsxRuntime.jsx(
43
+ "path",
44
+ {
45
+ fill: "currentColor",
46
+ d: "M13.5555 3.77778H14.9599L9.36882 9.36C9.28551 9.44263 9.21938 9.54095 9.17425 9.64926C9.12912 9.75758 9.10589 9.87377 9.10589 9.99111C9.10589 10.1085 9.12912 10.2246 9.17425 10.333C9.21938 10.4413 9.28551 10.5396 9.36882 10.6222C9.45145 10.7055 9.54977 10.7717 9.65808 10.8168C9.7664 10.8619 9.88259 10.8852 9.99993 10.8852C10.1173 10.8852 10.2335 10.8619 10.3418 10.8168C10.4501 10.7717 10.5484 10.7055 10.631 10.6222L16.2222 5.04V6.44444C16.2222 6.68019 16.3158 6.90628 16.4825 7.07298C16.6492 7.23968 16.8753 7.33333 17.111 7.33333C17.3468 7.33333 17.5729 7.23968 17.7396 7.07298C17.9063 6.90628 17.9999 6.68019 17.9999 6.44444V2.88889C17.9999 2.65314 17.9063 2.42705 17.7396 2.26035C17.5729 2.09365 17.3468 2 17.111 2H13.5555C13.3197 2 13.0936 2.09365 12.9269 2.26035C12.7602 2.42705 12.6666 2.65314 12.6666 2.88889C12.6666 3.12464 12.7602 3.35073 12.9269 3.51743C13.0936 3.68413 13.3197 3.77778 13.5555 3.77778Z"
47
+ }
48
+ )
49
+ ]
50
+ }
51
+ )
52
+ );
53
+ OpenIcon.displayName = "OpenIcon";
54
+ exports.OpenIcon = OpenIcon;
55
+ //# sourceMappingURL=OpenIcon.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenIcon.cjs","sources":["../../../../src/components/Icons/OpenIcon.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport type { IconProps } from \"./types\";\n\n/** Open in new / external link (20 × 20). */\nexport const OpenIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n className={cn(\"size-5\", className)}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M17.1111 9.11111C16.8754 9.11111 16.6493 9.20476 16.4826 9.37146C16.3159 9.53816 16.2222 9.76425 16.2222 10V15.3333C16.2222 15.5691 16.1286 15.7952 15.9619 15.9619C15.7952 16.1286 15.5691 16.2222 15.3333 16.2222H4.66667C4.43092 16.2222 4.20483 16.1286 4.03813 15.9619C3.87143 15.7952 3.77778 15.5691 3.77778 15.3333V4.66667C3.77778 4.43092 3.87143 4.20483 4.03813 4.03813C4.20483 3.87143 4.43092 3.77778 4.66667 3.77778H10C10.2357 3.77778 10.4618 3.68413 10.6285 3.51743C10.7952 3.35073 10.8889 3.12464 10.8889 2.88889C10.8889 2.65314 10.7952 2.42705 10.6285 2.26035C10.4618 2.09365 10.2357 2 10 2H4.66667C3.95942 2 3.28115 2.28095 2.78105 2.78105C2.28095 3.28115 2 3.95942 2 4.66667V15.3333C2 16.0406 2.28095 16.7189 2.78105 17.219C3.28115 17.719 3.95942 18 4.66667 18H15.3333C16.0406 18 16.7189 17.719 17.219 17.219C17.719 16.7189 18 16.0406 18 15.3333V10C18 9.76425 17.9064 9.53816 17.7397 9.37146C17.573 9.20476 17.3469 9.11111 17.1111 9.11111Z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M13.5555 3.77778H14.9599L9.36882 9.36C9.28551 9.44263 9.21938 9.54095 9.17425 9.64926C9.12912 9.75758 9.10589 9.87377 9.10589 9.99111C9.10589 10.1085 9.12912 10.2246 9.17425 10.333C9.21938 10.4413 9.28551 10.5396 9.36882 10.6222C9.45145 10.7055 9.54977 10.7717 9.65808 10.8168C9.7664 10.8619 9.88259 10.8852 9.99993 10.8852C10.1173 10.8852 10.2335 10.8619 10.3418 10.8168C10.4501 10.7717 10.5484 10.7055 10.631 10.6222L16.2222 5.04V6.44444C16.2222 6.68019 16.3158 6.90628 16.4825 7.07298C16.6492 7.23968 16.8753 7.33333 17.111 7.33333C17.3468 7.33333 17.5729 7.23968 17.7396 7.07298C17.9063 6.90628 17.9999 6.68019 17.9999 6.44444V2.88889C17.9999 2.65314 17.9063 2.42705 17.7396 2.26035C17.5729 2.09365 17.3468 2 17.111 2H13.5555C13.3197 2 13.0936 2.09365 12.9269 2.26035C12.7602 2.42705 12.6666 2.65314 12.6666 2.88889C12.6666 3.12464 12.7602 3.35073 12.9269 3.51743C13.0936 3.68413 13.3197 3.77778 13.5555 3.77778Z\"\n />\n </svg>\n ),\n);\n\nOpenIcon.displayName = \"OpenIcon\";\n"],"names":["React","jsxs","cn","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKO,MAAM,WAAWA,iBAAM;AAAA,EAC5B,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QACxBC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAWC,GAAAA,GAAG,UAAU,SAAS;AAAA,MAChC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAAC,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAS,cAAc;;"}
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const jsxRuntime = require("react/jsx-runtime");
5
+ const React = require("react");
6
+ const cn = require("../../utils/cn.cjs");
7
+ function _interopNamespaceDefault(e) {
8
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
9
+ if (e) {
10
+ for (const k in e) {
11
+ if (k !== "default") {
12
+ const d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: () => e[k]
16
+ });
17
+ }
18
+ }
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+ const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
24
+ const PeopleIcon = React__namespace.forwardRef(
25
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
26
+ "svg",
27
+ {
28
+ ref,
29
+ viewBox: "0 0 20 20",
30
+ fill: "none",
31
+ "aria-hidden": "true",
32
+ className: cn.cn("size-5", className),
33
+ ...props,
34
+ children: [
35
+ /* @__PURE__ */ jsxRuntime.jsx(
36
+ "path",
37
+ {
38
+ fill: "currentColor",
39
+ d: "M7.82051 9.46722C8.47833 9.46722 9.12138 9.27758 9.66833 8.92226C10.2153 8.56695 10.6416 8.06193 10.8933 7.47106C11.1451 6.8802 11.2109 6.23003 11.0826 5.60277C10.9543 4.97551 10.6375 4.39933 10.1723 3.9471C9.70719 3.49488 9.11456 3.1869 8.46938 3.06213C7.8242 2.93736 7.15545 3.0014 6.5477 3.24615C5.93995 3.49089 5.4205 3.90535 5.05504 4.43711C4.68957 4.96888 4.49451 5.59406 4.49451 6.23361C4.49451 7.09122 4.84492 7.9137 5.46867 8.52012C6.09242 9.12654 6.9384 9.46722 7.82051 9.46722ZM7.82051 4.61681C8.14942 4.61681 8.47094 4.71163 8.74442 4.88929C9.0179 5.06694 9.23105 5.31945 9.35692 5.61489C9.48279 5.91032 9.51572 6.23541 9.45155 6.54904C9.38739 6.86266 9.229 7.15075 8.99643 7.37687C8.76385 7.60298 8.46753 7.75697 8.14494 7.81935C7.82235 7.88174 7.48798 7.84972 7.1841 7.72735C6.88023 7.60497 6.62051 7.39774 6.43777 7.13186C6.25504 6.86598 6.15751 6.55339 6.15751 6.23361C6.15751 5.80481 6.33272 5.39357 6.64459 5.09036C6.95646 4.78715 7.37945 4.61681 7.82051 4.61681Z"
40
+ }
41
+ ),
42
+ /* @__PURE__ */ jsxRuntime.jsx(
43
+ "path",
44
+ {
45
+ fill: "currentColor",
46
+ d: "M14.4725 11.0841C14.9659 11.0841 15.4482 10.9418 15.8584 10.6753C16.2686 10.4088 16.5883 10.0301 16.7771 9.58693C16.9659 9.14378 17.0153 8.65615 16.9191 8.18571C16.8228 7.71527 16.5853 7.28313 16.2364 6.94396C15.8875 6.60479 15.4431 6.37381 14.9592 6.28024C14.4753 6.18666 13.9737 6.23469 13.5179 6.41824C13.0621 6.6018 12.6725 6.91265 12.3984 7.31147C12.1243 7.71029 11.978 8.17918 11.978 8.65884C11.978 9.30205 12.2408 9.91891 12.7086 10.3737C13.1765 10.8285 13.8109 11.0841 14.4725 11.0841ZM14.4725 7.85044C14.637 7.85044 14.7977 7.89785 14.9345 7.98668C15.0712 8.07551 15.1778 8.20177 15.2407 8.34948C15.3037 8.4972 15.3201 8.65974 15.2881 8.81656C15.256 8.97337 15.1768 9.11741 15.0605 9.23047C14.9442 9.34353 14.796 9.42052 14.6347 9.45171C14.4735 9.48291 14.3063 9.4669 14.1543 9.40571C14.0024 9.34452 13.8725 9.24091 13.7812 9.10797C13.6898 8.97503 13.641 8.81873 13.641 8.65884C13.641 8.44444 13.7286 8.23882 13.8846 8.08722C14.0405 7.93561 14.252 7.85044 14.4725 7.85044Z"
47
+ }
48
+ ),
49
+ /* @__PURE__ */ jsxRuntime.jsx(
50
+ "path",
51
+ {
52
+ fill: "currentColor",
53
+ d: "M14.4725 11.8924C13.5511 11.8934 12.6561 12.192 11.9281 12.7413C11.1137 11.9526 10.0772 11.416 8.94953 11.1992C7.82182 10.9824 6.65334 11.0951 5.59144 11.5231C4.52953 11.9511 3.62177 12.6753 2.98262 13.6042C2.34347 14.5331 2.00156 15.6253 2 16.7429C2 16.9573 2.0876 17.1629 2.24354 17.3145C2.39948 17.4661 2.61097 17.5513 2.8315 17.5513C3.05203 17.5513 3.26352 17.4661 3.41946 17.3145C3.5754 17.1629 3.663 16.9573 3.663 16.7429C3.663 15.6709 4.10102 14.6428 4.8807 13.8847C5.66039 13.1267 6.71786 12.7009 7.8205 12.7009C8.92314 12.7009 9.98061 13.1267 10.7603 13.8847C11.54 14.6428 11.978 15.6709 11.978 16.7429C11.978 16.9573 12.0656 17.1629 12.2215 17.3145C12.3775 17.4661 12.589 17.5513 12.8095 17.5513C13.03 17.5513 13.2415 17.4661 13.3975 17.3145C13.5534 17.1629 13.641 16.9573 13.641 16.7429C13.643 15.7958 13.3969 14.8638 12.9259 14.0347C13.2934 13.7524 13.7352 13.5764 14.2007 13.5268C14.6663 13.4772 15.1368 13.556 15.5584 13.7542C15.98 13.9524 16.3358 14.262 16.5849 14.6476C16.834 15.0332 16.9664 15.4791 16.967 15.9345C16.967 16.1489 17.0546 16.3545 17.2105 16.5061C17.3665 16.6577 17.578 16.7429 17.7985 16.7429C18.019 16.7429 18.2305 16.6577 18.3865 16.5061C18.5424 16.3545 18.63 16.1489 18.63 15.9345C18.63 14.8625 18.192 13.8344 17.4123 13.0763C16.6326 12.3183 15.5751 11.8924 14.4725 11.8924Z"
54
+ }
55
+ )
56
+ ]
57
+ }
58
+ )
59
+ );
60
+ PeopleIcon.displayName = "PeopleIcon";
61
+ exports.PeopleIcon = PeopleIcon;
62
+ //# sourceMappingURL=PeopleIcon.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeopleIcon.cjs","sources":["../../../../src/components/Icons/PeopleIcon.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport type { IconProps } from \"./types\";\n\n/** Two-person silhouette (20 × 20). */\nexport const PeopleIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n className={cn(\"size-5\", className)}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M7.82051 9.46722C8.47833 9.46722 9.12138 9.27758 9.66833 8.92226C10.2153 8.56695 10.6416 8.06193 10.8933 7.47106C11.1451 6.8802 11.2109 6.23003 11.0826 5.60277C10.9543 4.97551 10.6375 4.39933 10.1723 3.9471C9.70719 3.49488 9.11456 3.1869 8.46938 3.06213C7.8242 2.93736 7.15545 3.0014 6.5477 3.24615C5.93995 3.49089 5.4205 3.90535 5.05504 4.43711C4.68957 4.96888 4.49451 5.59406 4.49451 6.23361C4.49451 7.09122 4.84492 7.9137 5.46867 8.52012C6.09242 9.12654 6.9384 9.46722 7.82051 9.46722ZM7.82051 4.61681C8.14942 4.61681 8.47094 4.71163 8.74442 4.88929C9.0179 5.06694 9.23105 5.31945 9.35692 5.61489C9.48279 5.91032 9.51572 6.23541 9.45155 6.54904C9.38739 6.86266 9.229 7.15075 8.99643 7.37687C8.76385 7.60298 8.46753 7.75697 8.14494 7.81935C7.82235 7.88174 7.48798 7.84972 7.1841 7.72735C6.88023 7.60497 6.62051 7.39774 6.43777 7.13186C6.25504 6.86598 6.15751 6.55339 6.15751 6.23361C6.15751 5.80481 6.33272 5.39357 6.64459 5.09036C6.95646 4.78715 7.37945 4.61681 7.82051 4.61681Z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M14.4725 11.0841C14.9659 11.0841 15.4482 10.9418 15.8584 10.6753C16.2686 10.4088 16.5883 10.0301 16.7771 9.58693C16.9659 9.14378 17.0153 8.65615 16.9191 8.18571C16.8228 7.71527 16.5853 7.28313 16.2364 6.94396C15.8875 6.60479 15.4431 6.37381 14.9592 6.28024C14.4753 6.18666 13.9737 6.23469 13.5179 6.41824C13.0621 6.6018 12.6725 6.91265 12.3984 7.31147C12.1243 7.71029 11.978 8.17918 11.978 8.65884C11.978 9.30205 12.2408 9.91891 12.7086 10.3737C13.1765 10.8285 13.8109 11.0841 14.4725 11.0841ZM14.4725 7.85044C14.637 7.85044 14.7977 7.89785 14.9345 7.98668C15.0712 8.07551 15.1778 8.20177 15.2407 8.34948C15.3037 8.4972 15.3201 8.65974 15.2881 8.81656C15.256 8.97337 15.1768 9.11741 15.0605 9.23047C14.9442 9.34353 14.796 9.42052 14.6347 9.45171C14.4735 9.48291 14.3063 9.4669 14.1543 9.40571C14.0024 9.34452 13.8725 9.24091 13.7812 9.10797C13.6898 8.97503 13.641 8.81873 13.641 8.65884C13.641 8.44444 13.7286 8.23882 13.8846 8.08722C14.0405 7.93561 14.252 7.85044 14.4725 7.85044Z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M14.4725 11.8924C13.5511 11.8934 12.6561 12.192 11.9281 12.7413C11.1137 11.9526 10.0772 11.416 8.94953 11.1992C7.82182 10.9824 6.65334 11.0951 5.59144 11.5231C4.52953 11.9511 3.62177 12.6753 2.98262 13.6042C2.34347 14.5331 2.00156 15.6253 2 16.7429C2 16.9573 2.0876 17.1629 2.24354 17.3145C2.39948 17.4661 2.61097 17.5513 2.8315 17.5513C3.05203 17.5513 3.26352 17.4661 3.41946 17.3145C3.5754 17.1629 3.663 16.9573 3.663 16.7429C3.663 15.6709 4.10102 14.6428 4.8807 13.8847C5.66039 13.1267 6.71786 12.7009 7.8205 12.7009C8.92314 12.7009 9.98061 13.1267 10.7603 13.8847C11.54 14.6428 11.978 15.6709 11.978 16.7429C11.978 16.9573 12.0656 17.1629 12.2215 17.3145C12.3775 17.4661 12.589 17.5513 12.8095 17.5513C13.03 17.5513 13.2415 17.4661 13.3975 17.3145C13.5534 17.1629 13.641 16.9573 13.641 16.7429C13.643 15.7958 13.3969 14.8638 12.9259 14.0347C13.2934 13.7524 13.7352 13.5764 14.2007 13.5268C14.6663 13.4772 15.1368 13.556 15.5584 13.7542C15.98 13.9524 16.3358 14.262 16.5849 14.6476C16.834 15.0332 16.9664 15.4791 16.967 15.9345C16.967 16.1489 17.0546 16.3545 17.2105 16.5061C17.3665 16.6577 17.578 16.7429 17.7985 16.7429C18.019 16.7429 18.2305 16.6577 18.3865 16.5061C18.5424 16.3545 18.63 16.1489 18.63 15.9345C18.63 14.8625 18.192 13.8344 17.4123 13.0763C16.6326 12.3183 15.5751 11.8924 14.4725 11.8924Z\"\n />\n </svg>\n ),\n);\n\nPeopleIcon.displayName = \"PeopleIcon\";\n"],"names":["React","jsxs","cn","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKO,MAAM,aAAaA,iBAAM;AAAA,EAC9B,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QACxBC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAWC,GAAAA,GAAG,UAAU,SAAS;AAAA,MAChC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAAC,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,WAAW,cAAc;;"}
@@ -11,6 +11,7 @@ const useAudioRecorder = require("./components/AudioUpload/useAudioRecorder.cjs"
11
11
  const Autocomplete = require("./components/Autocomplete/Autocomplete.cjs");
12
12
  const Avatar = require("./components/Avatar/Avatar.cjs");
13
13
  const Badge = require("./components/Badge/Badge.cjs");
14
+ const Banner = require("./components/Banner/Banner.cjs");
14
15
  const BottomNavigation = require("./components/BottomNavigation/BottomNavigation.cjs");
15
16
  const BottomNavigationAction = require("./components/BottomNavigation/BottomNavigationAction.cjs");
16
17
  const Breadcrumb = require("./components/Breadcrumb/Breadcrumb.cjs");
@@ -100,7 +101,9 @@ const MoonIcon = require("./components/Icons/MoonIcon.cjs");
100
101
  const MoreIcon = require("./components/Icons/MoreIcon.cjs");
101
102
  const MoreVerticalIcon = require("./components/Icons/MoreVerticalIcon.cjs");
102
103
  const NewMessageIcon = require("./components/Icons/NewMessageIcon.cjs");
104
+ const OpenIcon = require("./components/Icons/OpenIcon.cjs");
103
105
  const PauseIcon = require("./components/Icons/PauseIcon.cjs");
106
+ const PeopleIcon = require("./components/Icons/PeopleIcon.cjs");
104
107
  const PhoneIcon = require("./components/Icons/PhoneIcon.cjs");
105
108
  const PhoneOffIcon = require("./components/Icons/PhoneOffIcon.cjs");
106
109
  const PinIcon = require("./components/Icons/PinIcon.cjs");
@@ -187,6 +190,7 @@ exports.AvatarFallback = Avatar.AvatarFallback;
187
190
  exports.AvatarImage = Avatar.AvatarImage;
188
191
  exports.AvatarRoot = Avatar.AvatarRoot;
189
192
  exports.Badge = Badge.Badge;
193
+ exports.Banner = Banner.Banner;
190
194
  exports.BottomNavigation = BottomNavigation.BottomNavigation;
191
195
  exports.BottomNavigationAction = BottomNavigationAction.BottomNavigationAction;
192
196
  exports.Breadcrumb = Breadcrumb.Breadcrumb;
@@ -309,7 +313,9 @@ exports.MoonIcon = MoonIcon.MoonIcon;
309
313
  exports.MoreIcon = MoreIcon.MoreIcon;
310
314
  exports.MoreVerticalIcon = MoreVerticalIcon.MoreVerticalIcon;
311
315
  exports.NewMessageIcon = NewMessageIcon.NewMessageIcon;
316
+ exports.OpenIcon = OpenIcon.OpenIcon;
312
317
  exports.PauseIcon = PauseIcon.PauseIcon;
318
+ exports.PeopleIcon = PeopleIcon.PeopleIcon;
313
319
  exports.PhoneIcon = PhoneIcon.PhoneIcon;
314
320
  exports.PhoneOffIcon = PhoneOffIcon.PhoneOffIcon;
315
321
  exports.PinIcon = PinIcon.PinIcon;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,293 @@
1
+ "use client";
2
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../../utils/cn.mjs";
5
+ import { Badge } from "../Badge/Badge.mjs";
6
+ import { IconButton } from "../IconButton/IconButton.mjs";
7
+ import { CrossIcon } from "../Icons/CrossIcon.mjs";
8
+ const APP_STORE_VARIANTS = ["appStore1", "appStore2", "appStore3"];
9
+ function isAppStoreVariant(variant) {
10
+ return APP_STORE_VARIANTS.includes(variant);
11
+ }
12
+ const GUIDE_BADGE_VARIANT = {
13
+ appStore1: "dark",
14
+ appStore2: "default",
15
+ appStore3: "default"
16
+ };
17
+ const BANNER_SHADOW = "shadow-sm";
18
+ const guideGradient = {
19
+ appStore1: {
20
+ backgroundImage: "linear-gradient(125.54deg, var(--color-brand-primary-muted) 0%, var(--color-neutral-alphas-50) 100%)"
21
+ },
22
+ appStore2: {
23
+ backgroundImage: "linear-gradient(125.54deg, var(--color-brand-secondary-muted) 0%, var(--color-brand-secondary-muted) 100%)"
24
+ },
25
+ appStore3: {
26
+ backgroundImage: "linear-gradient(125.54deg, var(--color-brand-secondary-muted) 0%, color-mix(in srgb, var(--color-info-surface) 80%, transparent) 100%)"
27
+ }
28
+ };
29
+ function BannerDismiss({
30
+ onDismiss,
31
+ dismissLabel
32
+ }) {
33
+ return /* @__PURE__ */ jsx(
34
+ IconButton,
35
+ {
36
+ variant: "contrast",
37
+ size: "24",
38
+ icon: /* @__PURE__ */ jsx(CrossIcon, {}),
39
+ onClick: onDismiss,
40
+ "aria-label": dismissLabel,
41
+ className: "hover:bg-white/10 active:bg-white/15"
42
+ }
43
+ );
44
+ }
45
+ function resolveLayout(variant, layoutProp) {
46
+ if (variant === "Subtle") {
47
+ return "horizontal";
48
+ }
49
+ if (isAppStoreVariant(variant)) {
50
+ return "vertical";
51
+ }
52
+ if (variant === "whatsNew") {
53
+ return layoutProp ?? "horizontal";
54
+ }
55
+ return layoutProp ?? "vertical";
56
+ }
57
+ function bannerRootClass(variant, layout, className) {
58
+ return cn(
59
+ "flex rounded-md",
60
+ BANNER_SHADOW,
61
+ variant === "Default" && "gap-3 bg-surface-primary-inverted p-4 text-content-primary-inverted",
62
+ variant === "Subtle" && "w-full max-w-[600px] items-start gap-3 border border-border-primary bg-surface-secondary p-4 text-content-primary",
63
+ variant === "whatsNew" && layout === "horizontal" && "w-full max-w-[446px] items-center gap-4 bg-surface-purple-muted p-4 text-content-primary",
64
+ variant === "whatsNew" && layout === "vertical" && "w-full max-w-[220px] flex-col items-stretch gap-4 border border-border-primary bg-surface-secondary p-4 text-content-primary",
65
+ variant === "whatsNew" && layout === "compact" && "w-full max-w-[446px] items-start gap-4 bg-surface-purple-muted p-4 text-content-primary",
66
+ isAppStoreVariant(variant) && "w-full max-w-[280px] flex-col gap-4 p-6",
67
+ layout === "vertical" && variant === "Default" && "max-w-[360px]",
68
+ layout === "horizontal" && variant === "Default" && "w-full max-w-[600px] items-start",
69
+ className
70
+ );
71
+ }
72
+ const BannerSection = React.forwardRef(
73
+ ({ className, labelledBy, children, ...rest }, ref) => /* @__PURE__ */ jsx(
74
+ "section",
75
+ {
76
+ ref,
77
+ "aria-labelledby": labelledBy,
78
+ "data-testid": "banner",
79
+ className,
80
+ ...rest,
81
+ children
82
+ }
83
+ )
84
+ );
85
+ BannerSection.displayName = "BannerSection";
86
+ function BannerGuideBody({
87
+ appStoreVariant,
88
+ eyebrow,
89
+ title,
90
+ description,
91
+ textAction,
92
+ labelledBy
93
+ }) {
94
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
95
+ eyebrow !== void 0 && eyebrow !== null && eyebrow !== false && /* @__PURE__ */ jsx(
96
+ Badge,
97
+ {
98
+ variant: GUIDE_BADGE_VARIANT[appStoreVariant],
99
+ leftDot: false,
100
+ className: "typography-semibold-badge self-start",
101
+ children: eyebrow
102
+ }
103
+ ),
104
+ title !== void 0 && title !== null && title !== false && /* @__PURE__ */ jsx("p", { id: labelledBy, className: "typography-semibold-body-lg text-content-primary", children: title }),
105
+ description !== void 0 && description !== null && description !== false && /* @__PURE__ */ jsx("p", { className: "typography-regular-body-md text-content-secondary", children: description }),
106
+ textAction
107
+ ] });
108
+ }
109
+ function BannerFeatureBody({
110
+ layout,
111
+ media,
112
+ title,
113
+ description,
114
+ textAction,
115
+ labelledBy
116
+ }) {
117
+ const titleClass = layout === "vertical" ? "typography-semibold-body-lg text-content-primary" : "typography-semibold-body-lg text-[18px] leading-6 text-content-primary";
118
+ const mediaWrap = layout === "compact" ? "size-20 shrink-0 overflow-hidden rounded-sm" : "size-[132px] shrink-0 overflow-hidden rounded-sm";
119
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
120
+ media !== void 0 && media !== null && /* @__PURE__ */ jsx("div", { className: cn(mediaWrap, layout === "vertical" && "w-full [&>*]:mx-auto"), children: media }),
121
+ /* @__PURE__ */ jsxs(
122
+ "div",
123
+ {
124
+ className: cn(
125
+ "flex min-w-0 flex-col gap-2",
126
+ layout === "horizontal" || layout === "compact" ? "flex-1 justify-end" : "w-full"
127
+ ),
128
+ children: [
129
+ title !== void 0 && title !== null && title !== false && /* @__PURE__ */ jsx("div", { id: labelledBy, className: titleClass, children: title }),
130
+ description !== void 0 && description !== null && description !== false && /* @__PURE__ */ jsx("p", { className: "typography-regular-body-md text-content-secondary", children: description }),
131
+ textAction
132
+ ]
133
+ }
134
+ )
135
+ ] });
136
+ }
137
+ function BannerSubtleBody({
138
+ media,
139
+ leadBadge,
140
+ title,
141
+ description,
142
+ secondaryLine,
143
+ stackedAction,
144
+ statusRow,
145
+ primaryAction,
146
+ labelledBy
147
+ }) {
148
+ const mediaSizeDefault = "size-12 shrink-0 overflow-hidden rounded-xl";
149
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
150
+ media !== void 0 && media !== null && /* @__PURE__ */ jsx("div", { className: mediaSizeDefault, children: media }),
151
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-end gap-3", children: [
152
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-4", children: [
153
+ leadBadge !== void 0 && leadBadge !== null && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-2", children: leadBadge }),
154
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
155
+ title !== void 0 && title !== null && title !== false && /* @__PURE__ */ jsx("div", { id: labelledBy, className: "typography-bold-heading-xs text-content-primary", children: title }),
156
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
157
+ description !== void 0 && description !== null && description !== false && /* @__PURE__ */ jsx("p", { className: "typography-regular-body-md text-content-primary", children: description }),
158
+ secondaryLine !== void 0 && secondaryLine !== null && secondaryLine !== false && /* @__PURE__ */ jsx("p", { className: "typography-regular-body-sm text-content-primary", children: secondaryLine })
159
+ ] })
160
+ ] }),
161
+ stackedAction !== void 0 && stackedAction !== null && /* @__PURE__ */ jsx("div", { className: "flex flex-col items-end self-start", children: stackedAction }),
162
+ statusRow !== void 0 && statusRow !== null && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-2", children: statusRow })
163
+ ] }),
164
+ primaryAction !== void 0 && primaryAction !== null && /* @__PURE__ */ jsx("div", { className: "shrink-0 self-center", children: primaryAction })
165
+ ] })
166
+ ] });
167
+ }
168
+ function BannerInverseBody({
169
+ layout,
170
+ media,
171
+ eyebrow,
172
+ title,
173
+ description,
174
+ primaryAction,
175
+ labelledBy,
176
+ dismissSlot
177
+ }) {
178
+ const mediaSizeDefault = "size-12 shrink-0 overflow-hidden rounded-xl";
179
+ const titleClassInverse = "typography-bold-heading-xs text-content-primary-inverted";
180
+ const textColumn = /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
181
+ eyebrow !== void 0 && eyebrow !== null && eyebrow !== false && /* @__PURE__ */ jsx("p", { className: "typography-semibold-body-sm text-content-primary-inverted", children: eyebrow }),
182
+ title !== void 0 && title !== null && title !== false && /* @__PURE__ */ jsx("div", { id: labelledBy, className: titleClassInverse, children: title }),
183
+ description !== void 0 && description !== null && description !== false && /* @__PURE__ */ jsx("p", { className: "typography-regular-body-md text-content-primary-inverted", children: description })
184
+ ] });
185
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
186
+ media !== void 0 && media !== null && /* @__PURE__ */ jsx("div", { className: mediaSizeDefault, children: media }),
187
+ layout === "horizontal" ? /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-end gap-3", children: [
188
+ textColumn,
189
+ primaryAction !== void 0 && primaryAction !== null && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: primaryAction })
190
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-3", children: [
191
+ textColumn,
192
+ primaryAction !== void 0 && primaryAction !== null && /* @__PURE__ */ jsx("div", { children: primaryAction })
193
+ ] }),
194
+ dismissSlot
195
+ ] });
196
+ }
197
+ const Banner = React.forwardRef(
198
+ ({
199
+ className,
200
+ variant,
201
+ layout: layoutProp,
202
+ media,
203
+ eyebrow,
204
+ leadBadge,
205
+ title,
206
+ description,
207
+ secondaryLine,
208
+ stackedAction,
209
+ statusRow,
210
+ primaryAction,
211
+ textAction,
212
+ onDismiss,
213
+ dismissLabel = "Dismiss banner",
214
+ ...props
215
+ }, ref) => {
216
+ const layout = resolveLayout(variant, layoutProp);
217
+ const showDismiss = onDismiss !== void 0 && variant === "Default";
218
+ const titleId = React.useId();
219
+ const regionLabelledBy = title !== void 0 && title !== null && title !== false ? titleId : void 0;
220
+ const rootClass = bannerRootClass(variant, layout, className);
221
+ if (isAppStoreVariant(variant)) {
222
+ return /* @__PURE__ */ jsx(
223
+ BannerSection,
224
+ {
225
+ ref,
226
+ labelledBy: regionLabelledBy,
227
+ style: guideGradient[variant],
228
+ className: rootClass,
229
+ ...props,
230
+ children: /* @__PURE__ */ jsx(
231
+ BannerGuideBody,
232
+ {
233
+ appStoreVariant: variant,
234
+ eyebrow,
235
+ title,
236
+ description,
237
+ textAction,
238
+ labelledBy: regionLabelledBy
239
+ }
240
+ )
241
+ }
242
+ );
243
+ }
244
+ if (variant === "whatsNew") {
245
+ return /* @__PURE__ */ jsx(BannerSection, { ref, labelledBy: regionLabelledBy, className: rootClass, ...props, children: /* @__PURE__ */ jsx(
246
+ BannerFeatureBody,
247
+ {
248
+ layout,
249
+ media,
250
+ title,
251
+ description,
252
+ textAction,
253
+ labelledBy: regionLabelledBy
254
+ }
255
+ ) });
256
+ }
257
+ if (variant === "Subtle") {
258
+ return /* @__PURE__ */ jsx(BannerSection, { ref, labelledBy: regionLabelledBy, className: rootClass, ...props, children: /* @__PURE__ */ jsx(
259
+ BannerSubtleBody,
260
+ {
261
+ media,
262
+ leadBadge,
263
+ title,
264
+ description,
265
+ secondaryLine,
266
+ stackedAction,
267
+ statusRow,
268
+ primaryAction,
269
+ labelledBy: regionLabelledBy
270
+ }
271
+ ) });
272
+ }
273
+ const dismissSlot = showDismiss && onDismiss !== void 0 ? /* @__PURE__ */ jsx(BannerDismiss, { onDismiss, dismissLabel }) : null;
274
+ return /* @__PURE__ */ jsx(BannerSection, { ref, labelledBy: regionLabelledBy, className: rootClass, ...props, children: /* @__PURE__ */ jsx("div", { className: "flex w-full items-start gap-3", children: /* @__PURE__ */ jsx(
275
+ BannerInverseBody,
276
+ {
277
+ layout,
278
+ media,
279
+ eyebrow,
280
+ title,
281
+ description,
282
+ primaryAction,
283
+ labelledBy: regionLabelledBy,
284
+ dismissSlot
285
+ }
286
+ ) }) });
287
+ }
288
+ );
289
+ Banner.displayName = "Banner";
290
+ export {
291
+ Banner
292
+ };
293
+ //# sourceMappingURL=Banner.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Banner.mjs","sources":["../../../src/components/Banner/Banner.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Badge, type BadgeVariant } from \"../Badge/Badge\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport { CrossIcon } from \"../Icons/CrossIcon\";\n\n/**\n * Matches the Fanvue Library Banner Figma component property `Type`\n * (`Default`, `Subtle`, `whatsNew`, `appStore1`, `appStore2`, `appStore3`).\n */\nexport type BannerVariant =\n | \"Default\"\n | \"Subtle\"\n | \"whatsNew\"\n | \"appStore1\"\n | \"appStore2\"\n | \"appStore3\";\n\n/** Layout (`Vertical` / `Horizontal` / `HorizontalSmall` in Figma). Ignored for `Subtle` and app store types. */\nexport type BannerLayout = \"vertical\" | \"horizontal\" | \"compact\";\n\ntype AppStoreVariant = \"appStore1\" | \"appStore2\" | \"appStore3\";\n\nconst APP_STORE_VARIANTS: readonly AppStoreVariant[] = [\"appStore1\", \"appStore2\", \"appStore3\"];\n\nfunction isAppStoreVariant(variant: BannerVariant): variant is AppStoreVariant {\n return (APP_STORE_VARIANTS as readonly string[]).includes(variant);\n}\n\nconst GUIDE_BADGE_VARIANT: Record<AppStoreVariant, BadgeVariant> = {\n appStore1: \"dark\",\n appStore2: \"default\",\n appStore3: \"default\",\n};\n\nconst BANNER_SHADOW = \"shadow-sm\";\n\nconst guideGradient: Record<AppStoreVariant, React.CSSProperties> = {\n appStore1: {\n backgroundImage:\n \"linear-gradient(125.54deg, var(--color-brand-primary-muted) 0%, var(--color-neutral-alphas-50) 100%)\",\n },\n appStore2: {\n backgroundImage:\n \"linear-gradient(125.54deg, var(--color-brand-secondary-muted) 0%, var(--color-brand-secondary-muted) 100%)\",\n },\n appStore3: {\n backgroundImage:\n \"linear-gradient(125.54deg, var(--color-brand-secondary-muted) 0%, color-mix(in srgb, var(--color-info-surface) 80%, transparent) 100%)\",\n },\n};\n\nexport interface BannerProps extends Omit<React.HTMLAttributes<HTMLElement>, \"title\"> {\n /** Figma `Type` — selects structure, surfaces, and app store gradient. */\n variant: BannerVariant;\n /**\n * Figma `Orientation`. Ignored when `variant` is `Subtle` (horizontal) or an app store type (vertical).\n * @default `\"vertical\"` for `Default`, `\"horizontal\"` for `whatsNew`\n */\n layout?: BannerLayout;\n /** Leading visual (image, illustration, or composite). */\n media?: React.ReactNode;\n /** Small uppercase label (e.g. HOW TO). */\n eyebrow?: React.ReactNode;\n /** Top badge row (e.g. NEW pill) — mainly for `Subtle`. */\n leadBadge?: React.ReactNode;\n /** Main heading. */\n title?: React.ReactNode;\n /** Primary body copy. */\n description?: React.ReactNode;\n /** Extra line under description (`Subtle`). */\n secondaryLine?: React.ReactNode;\n /** Left-stacked pill action (`Subtle`). */\n stackedAction?: React.ReactNode;\n /** Row under stacked action (`Subtle`). */\n statusRow?: React.ReactNode;\n /** Primary button (e.g. Learn more). */\n primaryAction?: React.ReactNode;\n /** Text-style CTA (`whatsNew` / app store). */\n textAction?: React.ReactNode;\n /** When set, shows a dismiss control (`Default` only). */\n onDismiss?: () => void;\n /** Accessible label for dismiss. @default \"Dismiss banner\" */\n dismissLabel?: string;\n}\n\nfunction BannerDismiss({\n onDismiss,\n dismissLabel,\n}: {\n onDismiss: () => void;\n dismissLabel: string;\n}) {\n return (\n <IconButton\n variant=\"contrast\"\n size=\"24\"\n icon={<CrossIcon />}\n onClick={onDismiss}\n aria-label={dismissLabel}\n className=\"hover:bg-white/10 active:bg-white/15\"\n />\n );\n}\n\nfunction resolveLayout(variant: BannerVariant, layoutProp: BannerLayout | undefined): BannerLayout {\n if (variant === \"Subtle\") {\n return \"horizontal\";\n }\n if (isAppStoreVariant(variant)) {\n return \"vertical\";\n }\n if (variant === \"whatsNew\") {\n return layoutProp ?? \"horizontal\";\n }\n return layoutProp ?? \"vertical\";\n}\n\nfunction bannerRootClass(variant: BannerVariant, layout: BannerLayout, className?: string): string {\n return cn(\n \"flex rounded-md\",\n BANNER_SHADOW,\n variant === \"Default\" && \"gap-3 bg-surface-primary-inverted p-4 text-content-primary-inverted\",\n variant === \"Subtle\" &&\n \"w-full max-w-[600px] items-start gap-3 border border-border-primary bg-surface-secondary p-4 text-content-primary\",\n variant === \"whatsNew\" &&\n layout === \"horizontal\" &&\n \"w-full max-w-[446px] items-center gap-4 bg-surface-purple-muted p-4 text-content-primary\",\n variant === \"whatsNew\" &&\n layout === \"vertical\" &&\n \"w-full max-w-[220px] flex-col items-stretch gap-4 border border-border-primary bg-surface-secondary p-4 text-content-primary\",\n variant === \"whatsNew\" &&\n layout === \"compact\" &&\n \"w-full max-w-[446px] items-start gap-4 bg-surface-purple-muted p-4 text-content-primary\",\n isAppStoreVariant(variant) && \"w-full max-w-[280px] flex-col gap-4 p-6\",\n layout === \"vertical\" && variant === \"Default\" && \"max-w-[360px]\",\n layout === \"horizontal\" && variant === \"Default\" && \"w-full max-w-[600px] items-start\",\n className,\n );\n}\n\ntype BannerSectionProps = React.ComponentPropsWithoutRef<\"section\"> & {\n labelledBy?: string;\n};\n\nconst BannerSection = React.forwardRef<HTMLElement, BannerSectionProps>(\n ({ className, labelledBy, children, ...rest }, ref) => (\n <section\n ref={ref}\n aria-labelledby={labelledBy}\n data-testid=\"banner\"\n className={className}\n {...rest}\n >\n {children}\n </section>\n ),\n);\nBannerSection.displayName = \"BannerSection\";\n\ntype GuideBodyProps = Pick<BannerProps, \"eyebrow\" | \"title\" | \"description\" | \"textAction\"> & {\n appStoreVariant: AppStoreVariant;\n labelledBy?: string;\n};\n\nfunction BannerGuideBody({\n appStoreVariant,\n eyebrow,\n title,\n description,\n textAction,\n labelledBy,\n}: GuideBodyProps) {\n return (\n <>\n {eyebrow !== undefined && eyebrow !== null && eyebrow !== false && (\n <Badge\n variant={GUIDE_BADGE_VARIANT[appStoreVariant]}\n leftDot={false}\n className=\"typography-semibold-badge self-start\"\n >\n {eyebrow}\n </Badge>\n )}\n {title !== undefined && title !== null && title !== false && (\n <p id={labelledBy} className=\"typography-semibold-body-lg text-content-primary\">\n {title}\n </p>\n )}\n {description !== undefined && description !== null && description !== false && (\n <p className=\"typography-regular-body-md text-content-secondary\">{description}</p>\n )}\n {textAction}\n </>\n );\n}\n\ntype FeatureBodyProps = Pick<BannerProps, \"title\" | \"description\" | \"textAction\" | \"media\"> & {\n layout: BannerLayout;\n labelledBy?: string;\n};\n\nfunction BannerFeatureBody({\n layout,\n media,\n title,\n description,\n textAction,\n labelledBy,\n}: FeatureBodyProps) {\n const titleClass =\n layout === \"vertical\"\n ? \"typography-semibold-body-lg text-content-primary\"\n : \"typography-semibold-body-lg text-[18px] leading-6 text-content-primary\";\n const mediaWrap =\n layout === \"compact\"\n ? \"size-20 shrink-0 overflow-hidden rounded-sm\"\n : \"size-[132px] shrink-0 overflow-hidden rounded-sm\";\n\n return (\n <>\n {media !== undefined && media !== null && (\n <div className={cn(mediaWrap, layout === \"vertical\" && \"w-full [&>*]:mx-auto\")}>\n {media}\n </div>\n )}\n <div\n className={cn(\n \"flex min-w-0 flex-col gap-2\",\n layout === \"horizontal\" || layout === \"compact\" ? \"flex-1 justify-end\" : \"w-full\",\n )}\n >\n {title !== undefined && title !== null && title !== false && (\n <div id={labelledBy} className={titleClass}>\n {title}\n </div>\n )}\n {description !== undefined && description !== null && description !== false && (\n <p className=\"typography-regular-body-md text-content-secondary\">{description}</p>\n )}\n {textAction}\n </div>\n </>\n );\n}\n\ntype SubtleBodyProps = Pick<\n BannerProps,\n | \"media\"\n | \"leadBadge\"\n | \"title\"\n | \"description\"\n | \"secondaryLine\"\n | \"stackedAction\"\n | \"statusRow\"\n | \"primaryAction\"\n> & { labelledBy?: string };\n\nfunction BannerSubtleBody({\n media,\n leadBadge,\n title,\n description,\n secondaryLine,\n stackedAction,\n statusRow,\n primaryAction,\n labelledBy,\n}: SubtleBodyProps) {\n const mediaSizeDefault = \"size-12 shrink-0 overflow-hidden rounded-xl\";\n return (\n <>\n {media !== undefined && media !== null && <div className={mediaSizeDefault}>{media}</div>}\n <div className=\"flex min-w-0 flex-1 items-end gap-3\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-4\">\n {leadBadge !== undefined && leadBadge !== null && (\n <div className=\"flex flex-wrap items-center gap-2\">{leadBadge}</div>\n )}\n <div className=\"flex flex-col gap-1\">\n {title !== undefined && title !== null && title !== false && (\n <div id={labelledBy} className=\"typography-bold-heading-xs text-content-primary\">\n {title}\n </div>\n )}\n <div className=\"flex flex-col gap-2\">\n {description !== undefined && description !== null && description !== false && (\n <p className=\"typography-regular-body-md text-content-primary\">{description}</p>\n )}\n {secondaryLine !== undefined && secondaryLine !== null && secondaryLine !== false && (\n <p className=\"typography-regular-body-sm text-content-primary\">{secondaryLine}</p>\n )}\n </div>\n </div>\n {stackedAction !== undefined && stackedAction !== null && (\n <div className=\"flex flex-col items-end self-start\">{stackedAction}</div>\n )}\n {statusRow !== undefined && statusRow !== null && (\n <div className=\"flex flex-wrap items-center gap-2\">{statusRow}</div>\n )}\n </div>\n {primaryAction !== undefined && primaryAction !== null && (\n <div className=\"shrink-0 self-center\">{primaryAction}</div>\n )}\n </div>\n </>\n );\n}\n\ntype InverseBodyProps = Pick<\n BannerProps,\n \"media\" | \"eyebrow\" | \"title\" | \"description\" | \"primaryAction\"\n> & {\n layout: BannerLayout;\n labelledBy?: string;\n dismissSlot: React.ReactNode;\n};\n\nfunction BannerInverseBody({\n layout,\n media,\n eyebrow,\n title,\n description,\n primaryAction,\n labelledBy,\n dismissSlot,\n}: InverseBodyProps) {\n const mediaSizeDefault = \"size-12 shrink-0 overflow-hidden rounded-xl\";\n const titleClassInverse = \"typography-bold-heading-xs text-content-primary-inverted\";\n const textColumn = (\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n {eyebrow !== undefined && eyebrow !== null && eyebrow !== false && (\n <p className=\"typography-semibold-body-sm text-content-primary-inverted\">{eyebrow}</p>\n )}\n {title !== undefined && title !== null && title !== false && (\n <div id={labelledBy} className={titleClassInverse}>\n {title}\n </div>\n )}\n {description !== undefined && description !== null && description !== false && (\n <p className=\"typography-regular-body-md text-content-primary-inverted\">{description}</p>\n )}\n </div>\n );\n\n return (\n <>\n {media !== undefined && media !== null && <div className={mediaSizeDefault}>{media}</div>}\n {layout === \"horizontal\" ? (\n <div className=\"flex min-w-0 flex-1 items-end gap-3\">\n {textColumn}\n {primaryAction !== undefined && primaryAction !== null && (\n <div className=\"shrink-0\">{primaryAction}</div>\n )}\n </div>\n ) : (\n <div className=\"flex min-w-0 flex-1 flex-col gap-3\">\n {textColumn}\n {primaryAction !== undefined && primaryAction !== null && <div>{primaryAction}</div>}\n </div>\n )}\n {dismissSlot}\n </>\n );\n}\n\nexport const Banner = React.forwardRef<HTMLElement, BannerProps>(\n (\n {\n className,\n variant,\n layout: layoutProp,\n media,\n eyebrow,\n leadBadge,\n title,\n description,\n secondaryLine,\n stackedAction,\n statusRow,\n primaryAction,\n textAction,\n onDismiss,\n dismissLabel = \"Dismiss banner\",\n ...props\n },\n ref,\n ) => {\n const layout = resolveLayout(variant, layoutProp);\n const showDismiss = onDismiss !== undefined && variant === \"Default\";\n const titleId = React.useId();\n const regionLabelledBy =\n title !== undefined && title !== null && title !== false ? titleId : undefined;\n\n const rootClass = bannerRootClass(variant, layout, className);\n\n if (isAppStoreVariant(variant)) {\n return (\n <BannerSection\n ref={ref}\n labelledBy={regionLabelledBy}\n style={guideGradient[variant]}\n className={rootClass}\n {...props}\n >\n <BannerGuideBody\n appStoreVariant={variant}\n eyebrow={eyebrow}\n title={title}\n description={description}\n textAction={textAction}\n labelledBy={regionLabelledBy}\n />\n </BannerSection>\n );\n }\n\n if (variant === \"whatsNew\") {\n return (\n <BannerSection ref={ref} labelledBy={regionLabelledBy} className={rootClass} {...props}>\n <BannerFeatureBody\n layout={layout}\n media={media}\n title={title}\n description={description}\n textAction={textAction}\n labelledBy={regionLabelledBy}\n />\n </BannerSection>\n );\n }\n\n if (variant === \"Subtle\") {\n return (\n <BannerSection ref={ref} labelledBy={regionLabelledBy} className={rootClass} {...props}>\n <BannerSubtleBody\n media={media}\n leadBadge={leadBadge}\n title={title}\n description={description}\n secondaryLine={secondaryLine}\n stackedAction={stackedAction}\n statusRow={statusRow}\n primaryAction={primaryAction}\n labelledBy={regionLabelledBy}\n />\n </BannerSection>\n );\n }\n\n const dismissSlot =\n showDismiss && onDismiss !== undefined ? (\n <BannerDismiss onDismiss={onDismiss} dismissLabel={dismissLabel} />\n ) : null;\n\n return (\n <BannerSection ref={ref} labelledBy={regionLabelledBy} className={rootClass} {...props}>\n <div className=\"flex w-full items-start gap-3\">\n <BannerInverseBody\n layout={layout}\n media={media}\n eyebrow={eyebrow}\n title={title}\n description={description}\n primaryAction={primaryAction}\n labelledBy={regionLabelledBy}\n dismissSlot={dismissSlot}\n />\n </div>\n </BannerSection>\n );\n },\n);\n\nBanner.displayName = \"Banner\";\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../../utils/cn.mjs";
5
+ const OpenIcon = React.forwardRef(
6
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
7
+ "svg",
8
+ {
9
+ ref,
10
+ viewBox: "0 0 20 20",
11
+ fill: "none",
12
+ "aria-hidden": "true",
13
+ className: cn("size-5", className),
14
+ ...props,
15
+ children: [
16
+ /* @__PURE__ */ jsx(
17
+ "path",
18
+ {
19
+ fill: "currentColor",
20
+ d: "M17.1111 9.11111C16.8754 9.11111 16.6493 9.20476 16.4826 9.37146C16.3159 9.53816 16.2222 9.76425 16.2222 10V15.3333C16.2222 15.5691 16.1286 15.7952 15.9619 15.9619C15.7952 16.1286 15.5691 16.2222 15.3333 16.2222H4.66667C4.43092 16.2222 4.20483 16.1286 4.03813 15.9619C3.87143 15.7952 3.77778 15.5691 3.77778 15.3333V4.66667C3.77778 4.43092 3.87143 4.20483 4.03813 4.03813C4.20483 3.87143 4.43092 3.77778 4.66667 3.77778H10C10.2357 3.77778 10.4618 3.68413 10.6285 3.51743C10.7952 3.35073 10.8889 3.12464 10.8889 2.88889C10.8889 2.65314 10.7952 2.42705 10.6285 2.26035C10.4618 2.09365 10.2357 2 10 2H4.66667C3.95942 2 3.28115 2.28095 2.78105 2.78105C2.28095 3.28115 2 3.95942 2 4.66667V15.3333C2 16.0406 2.28095 16.7189 2.78105 17.219C3.28115 17.719 3.95942 18 4.66667 18H15.3333C16.0406 18 16.7189 17.719 17.219 17.219C17.719 16.7189 18 16.0406 18 15.3333V10C18 9.76425 17.9064 9.53816 17.7397 9.37146C17.573 9.20476 17.3469 9.11111 17.1111 9.11111Z"
21
+ }
22
+ ),
23
+ /* @__PURE__ */ jsx(
24
+ "path",
25
+ {
26
+ fill: "currentColor",
27
+ d: "M13.5555 3.77778H14.9599L9.36882 9.36C9.28551 9.44263 9.21938 9.54095 9.17425 9.64926C9.12912 9.75758 9.10589 9.87377 9.10589 9.99111C9.10589 10.1085 9.12912 10.2246 9.17425 10.333C9.21938 10.4413 9.28551 10.5396 9.36882 10.6222C9.45145 10.7055 9.54977 10.7717 9.65808 10.8168C9.7664 10.8619 9.88259 10.8852 9.99993 10.8852C10.1173 10.8852 10.2335 10.8619 10.3418 10.8168C10.4501 10.7717 10.5484 10.7055 10.631 10.6222L16.2222 5.04V6.44444C16.2222 6.68019 16.3158 6.90628 16.4825 7.07298C16.6492 7.23968 16.8753 7.33333 17.111 7.33333C17.3468 7.33333 17.5729 7.23968 17.7396 7.07298C17.9063 6.90628 17.9999 6.68019 17.9999 6.44444V2.88889C17.9999 2.65314 17.9063 2.42705 17.7396 2.26035C17.5729 2.09365 17.3468 2 17.111 2H13.5555C13.3197 2 13.0936 2.09365 12.9269 2.26035C12.7602 2.42705 12.6666 2.65314 12.6666 2.88889C12.6666 3.12464 12.7602 3.35073 12.9269 3.51743C13.0936 3.68413 13.3197 3.77778 13.5555 3.77778Z"
28
+ }
29
+ )
30
+ ]
31
+ }
32
+ )
33
+ );
34
+ OpenIcon.displayName = "OpenIcon";
35
+ export {
36
+ OpenIcon
37
+ };
38
+ //# sourceMappingURL=OpenIcon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenIcon.mjs","sources":["../../../src/components/Icons/OpenIcon.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport type { IconProps } from \"./types\";\n\n/** Open in new / external link (20 × 20). */\nexport const OpenIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n className={cn(\"size-5\", className)}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M17.1111 9.11111C16.8754 9.11111 16.6493 9.20476 16.4826 9.37146C16.3159 9.53816 16.2222 9.76425 16.2222 10V15.3333C16.2222 15.5691 16.1286 15.7952 15.9619 15.9619C15.7952 16.1286 15.5691 16.2222 15.3333 16.2222H4.66667C4.43092 16.2222 4.20483 16.1286 4.03813 15.9619C3.87143 15.7952 3.77778 15.5691 3.77778 15.3333V4.66667C3.77778 4.43092 3.87143 4.20483 4.03813 4.03813C4.20483 3.87143 4.43092 3.77778 4.66667 3.77778H10C10.2357 3.77778 10.4618 3.68413 10.6285 3.51743C10.7952 3.35073 10.8889 3.12464 10.8889 2.88889C10.8889 2.65314 10.7952 2.42705 10.6285 2.26035C10.4618 2.09365 10.2357 2 10 2H4.66667C3.95942 2 3.28115 2.28095 2.78105 2.78105C2.28095 3.28115 2 3.95942 2 4.66667V15.3333C2 16.0406 2.28095 16.7189 2.78105 17.219C3.28115 17.719 3.95942 18 4.66667 18H15.3333C16.0406 18 16.7189 17.719 17.219 17.219C17.719 16.7189 18 16.0406 18 15.3333V10C18 9.76425 17.9064 9.53816 17.7397 9.37146C17.573 9.20476 17.3469 9.11111 17.1111 9.11111Z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M13.5555 3.77778H14.9599L9.36882 9.36C9.28551 9.44263 9.21938 9.54095 9.17425 9.64926C9.12912 9.75758 9.10589 9.87377 9.10589 9.99111C9.10589 10.1085 9.12912 10.2246 9.17425 10.333C9.21938 10.4413 9.28551 10.5396 9.36882 10.6222C9.45145 10.7055 9.54977 10.7717 9.65808 10.8168C9.7664 10.8619 9.88259 10.8852 9.99993 10.8852C10.1173 10.8852 10.2335 10.8619 10.3418 10.8168C10.4501 10.7717 10.5484 10.7055 10.631 10.6222L16.2222 5.04V6.44444C16.2222 6.68019 16.3158 6.90628 16.4825 7.07298C16.6492 7.23968 16.8753 7.33333 17.111 7.33333C17.3468 7.33333 17.5729 7.23968 17.7396 7.07298C17.9063 6.90628 17.9999 6.68019 17.9999 6.44444V2.88889C17.9999 2.65314 17.9063 2.42705 17.7396 2.26035C17.5729 2.09365 17.3468 2 17.111 2H13.5555C13.3197 2 13.0936 2.09365 12.9269 2.26035C12.7602 2.42705 12.6666 2.65314 12.6666 2.88889C12.6666 3.12464 12.7602 3.35073 12.9269 3.51743C13.0936 3.68413 13.3197 3.77778 13.5555 3.77778Z\"\n />\n </svg>\n ),\n);\n\nOpenIcon.displayName = \"OpenIcon\";\n"],"names":[],"mappings":";;;;AAKO,MAAM,WAAW,MAAM;AAAA,EAC5B,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QACxB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAW,GAAG,UAAU,SAAS;AAAA,MAChC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAS,cAAc;"}
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../../utils/cn.mjs";
5
+ const PeopleIcon = React.forwardRef(
6
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
7
+ "svg",
8
+ {
9
+ ref,
10
+ viewBox: "0 0 20 20",
11
+ fill: "none",
12
+ "aria-hidden": "true",
13
+ className: cn("size-5", className),
14
+ ...props,
15
+ children: [
16
+ /* @__PURE__ */ jsx(
17
+ "path",
18
+ {
19
+ fill: "currentColor",
20
+ d: "M7.82051 9.46722C8.47833 9.46722 9.12138 9.27758 9.66833 8.92226C10.2153 8.56695 10.6416 8.06193 10.8933 7.47106C11.1451 6.8802 11.2109 6.23003 11.0826 5.60277C10.9543 4.97551 10.6375 4.39933 10.1723 3.9471C9.70719 3.49488 9.11456 3.1869 8.46938 3.06213C7.8242 2.93736 7.15545 3.0014 6.5477 3.24615C5.93995 3.49089 5.4205 3.90535 5.05504 4.43711C4.68957 4.96888 4.49451 5.59406 4.49451 6.23361C4.49451 7.09122 4.84492 7.9137 5.46867 8.52012C6.09242 9.12654 6.9384 9.46722 7.82051 9.46722ZM7.82051 4.61681C8.14942 4.61681 8.47094 4.71163 8.74442 4.88929C9.0179 5.06694 9.23105 5.31945 9.35692 5.61489C9.48279 5.91032 9.51572 6.23541 9.45155 6.54904C9.38739 6.86266 9.229 7.15075 8.99643 7.37687C8.76385 7.60298 8.46753 7.75697 8.14494 7.81935C7.82235 7.88174 7.48798 7.84972 7.1841 7.72735C6.88023 7.60497 6.62051 7.39774 6.43777 7.13186C6.25504 6.86598 6.15751 6.55339 6.15751 6.23361C6.15751 5.80481 6.33272 5.39357 6.64459 5.09036C6.95646 4.78715 7.37945 4.61681 7.82051 4.61681Z"
21
+ }
22
+ ),
23
+ /* @__PURE__ */ jsx(
24
+ "path",
25
+ {
26
+ fill: "currentColor",
27
+ d: "M14.4725 11.0841C14.9659 11.0841 15.4482 10.9418 15.8584 10.6753C16.2686 10.4088 16.5883 10.0301 16.7771 9.58693C16.9659 9.14378 17.0153 8.65615 16.9191 8.18571C16.8228 7.71527 16.5853 7.28313 16.2364 6.94396C15.8875 6.60479 15.4431 6.37381 14.9592 6.28024C14.4753 6.18666 13.9737 6.23469 13.5179 6.41824C13.0621 6.6018 12.6725 6.91265 12.3984 7.31147C12.1243 7.71029 11.978 8.17918 11.978 8.65884C11.978 9.30205 12.2408 9.91891 12.7086 10.3737C13.1765 10.8285 13.8109 11.0841 14.4725 11.0841ZM14.4725 7.85044C14.637 7.85044 14.7977 7.89785 14.9345 7.98668C15.0712 8.07551 15.1778 8.20177 15.2407 8.34948C15.3037 8.4972 15.3201 8.65974 15.2881 8.81656C15.256 8.97337 15.1768 9.11741 15.0605 9.23047C14.9442 9.34353 14.796 9.42052 14.6347 9.45171C14.4735 9.48291 14.3063 9.4669 14.1543 9.40571C14.0024 9.34452 13.8725 9.24091 13.7812 9.10797C13.6898 8.97503 13.641 8.81873 13.641 8.65884C13.641 8.44444 13.7286 8.23882 13.8846 8.08722C14.0405 7.93561 14.252 7.85044 14.4725 7.85044Z"
28
+ }
29
+ ),
30
+ /* @__PURE__ */ jsx(
31
+ "path",
32
+ {
33
+ fill: "currentColor",
34
+ d: "M14.4725 11.8924C13.5511 11.8934 12.6561 12.192 11.9281 12.7413C11.1137 11.9526 10.0772 11.416 8.94953 11.1992C7.82182 10.9824 6.65334 11.0951 5.59144 11.5231C4.52953 11.9511 3.62177 12.6753 2.98262 13.6042C2.34347 14.5331 2.00156 15.6253 2 16.7429C2 16.9573 2.0876 17.1629 2.24354 17.3145C2.39948 17.4661 2.61097 17.5513 2.8315 17.5513C3.05203 17.5513 3.26352 17.4661 3.41946 17.3145C3.5754 17.1629 3.663 16.9573 3.663 16.7429C3.663 15.6709 4.10102 14.6428 4.8807 13.8847C5.66039 13.1267 6.71786 12.7009 7.8205 12.7009C8.92314 12.7009 9.98061 13.1267 10.7603 13.8847C11.54 14.6428 11.978 15.6709 11.978 16.7429C11.978 16.9573 12.0656 17.1629 12.2215 17.3145C12.3775 17.4661 12.589 17.5513 12.8095 17.5513C13.03 17.5513 13.2415 17.4661 13.3975 17.3145C13.5534 17.1629 13.641 16.9573 13.641 16.7429C13.643 15.7958 13.3969 14.8638 12.9259 14.0347C13.2934 13.7524 13.7352 13.5764 14.2007 13.5268C14.6663 13.4772 15.1368 13.556 15.5584 13.7542C15.98 13.9524 16.3358 14.262 16.5849 14.6476C16.834 15.0332 16.9664 15.4791 16.967 15.9345C16.967 16.1489 17.0546 16.3545 17.2105 16.5061C17.3665 16.6577 17.578 16.7429 17.7985 16.7429C18.019 16.7429 18.2305 16.6577 18.3865 16.5061C18.5424 16.3545 18.63 16.1489 18.63 15.9345C18.63 14.8625 18.192 13.8344 17.4123 13.0763C16.6326 12.3183 15.5751 11.8924 14.4725 11.8924Z"
35
+ }
36
+ )
37
+ ]
38
+ }
39
+ )
40
+ );
41
+ PeopleIcon.displayName = "PeopleIcon";
42
+ export {
43
+ PeopleIcon
44
+ };
45
+ //# sourceMappingURL=PeopleIcon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeopleIcon.mjs","sources":["../../../src/components/Icons/PeopleIcon.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport type { IconProps } from \"./types\";\n\n/** Two-person silhouette (20 × 20). */\nexport const PeopleIcon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n className={cn(\"size-5\", className)}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M7.82051 9.46722C8.47833 9.46722 9.12138 9.27758 9.66833 8.92226C10.2153 8.56695 10.6416 8.06193 10.8933 7.47106C11.1451 6.8802 11.2109 6.23003 11.0826 5.60277C10.9543 4.97551 10.6375 4.39933 10.1723 3.9471C9.70719 3.49488 9.11456 3.1869 8.46938 3.06213C7.8242 2.93736 7.15545 3.0014 6.5477 3.24615C5.93995 3.49089 5.4205 3.90535 5.05504 4.43711C4.68957 4.96888 4.49451 5.59406 4.49451 6.23361C4.49451 7.09122 4.84492 7.9137 5.46867 8.52012C6.09242 9.12654 6.9384 9.46722 7.82051 9.46722ZM7.82051 4.61681C8.14942 4.61681 8.47094 4.71163 8.74442 4.88929C9.0179 5.06694 9.23105 5.31945 9.35692 5.61489C9.48279 5.91032 9.51572 6.23541 9.45155 6.54904C9.38739 6.86266 9.229 7.15075 8.99643 7.37687C8.76385 7.60298 8.46753 7.75697 8.14494 7.81935C7.82235 7.88174 7.48798 7.84972 7.1841 7.72735C6.88023 7.60497 6.62051 7.39774 6.43777 7.13186C6.25504 6.86598 6.15751 6.55339 6.15751 6.23361C6.15751 5.80481 6.33272 5.39357 6.64459 5.09036C6.95646 4.78715 7.37945 4.61681 7.82051 4.61681Z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M14.4725 11.0841C14.9659 11.0841 15.4482 10.9418 15.8584 10.6753C16.2686 10.4088 16.5883 10.0301 16.7771 9.58693C16.9659 9.14378 17.0153 8.65615 16.9191 8.18571C16.8228 7.71527 16.5853 7.28313 16.2364 6.94396C15.8875 6.60479 15.4431 6.37381 14.9592 6.28024C14.4753 6.18666 13.9737 6.23469 13.5179 6.41824C13.0621 6.6018 12.6725 6.91265 12.3984 7.31147C12.1243 7.71029 11.978 8.17918 11.978 8.65884C11.978 9.30205 12.2408 9.91891 12.7086 10.3737C13.1765 10.8285 13.8109 11.0841 14.4725 11.0841ZM14.4725 7.85044C14.637 7.85044 14.7977 7.89785 14.9345 7.98668C15.0712 8.07551 15.1778 8.20177 15.2407 8.34948C15.3037 8.4972 15.3201 8.65974 15.2881 8.81656C15.256 8.97337 15.1768 9.11741 15.0605 9.23047C14.9442 9.34353 14.796 9.42052 14.6347 9.45171C14.4735 9.48291 14.3063 9.4669 14.1543 9.40571C14.0024 9.34452 13.8725 9.24091 13.7812 9.10797C13.6898 8.97503 13.641 8.81873 13.641 8.65884C13.641 8.44444 13.7286 8.23882 13.8846 8.08722C14.0405 7.93561 14.252 7.85044 14.4725 7.85044Z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M14.4725 11.8924C13.5511 11.8934 12.6561 12.192 11.9281 12.7413C11.1137 11.9526 10.0772 11.416 8.94953 11.1992C7.82182 10.9824 6.65334 11.0951 5.59144 11.5231C4.52953 11.9511 3.62177 12.6753 2.98262 13.6042C2.34347 14.5331 2.00156 15.6253 2 16.7429C2 16.9573 2.0876 17.1629 2.24354 17.3145C2.39948 17.4661 2.61097 17.5513 2.8315 17.5513C3.05203 17.5513 3.26352 17.4661 3.41946 17.3145C3.5754 17.1629 3.663 16.9573 3.663 16.7429C3.663 15.6709 4.10102 14.6428 4.8807 13.8847C5.66039 13.1267 6.71786 12.7009 7.8205 12.7009C8.92314 12.7009 9.98061 13.1267 10.7603 13.8847C11.54 14.6428 11.978 15.6709 11.978 16.7429C11.978 16.9573 12.0656 17.1629 12.2215 17.3145C12.3775 17.4661 12.589 17.5513 12.8095 17.5513C13.03 17.5513 13.2415 17.4661 13.3975 17.3145C13.5534 17.1629 13.641 16.9573 13.641 16.7429C13.643 15.7958 13.3969 14.8638 12.9259 14.0347C13.2934 13.7524 13.7352 13.5764 14.2007 13.5268C14.6663 13.4772 15.1368 13.556 15.5584 13.7542C15.98 13.9524 16.3358 14.262 16.5849 14.6476C16.834 15.0332 16.9664 15.4791 16.967 15.9345C16.967 16.1489 17.0546 16.3545 17.2105 16.5061C17.3665 16.6577 17.578 16.7429 17.7985 16.7429C18.019 16.7429 18.2305 16.6577 18.3865 16.5061C18.5424 16.3545 18.63 16.1489 18.63 15.9345C18.63 14.8625 18.192 13.8344 17.4123 13.0763C16.6326 12.3183 15.5751 11.8924 14.4725 11.8924Z\"\n />\n </svg>\n ),\n);\n\nPeopleIcon.displayName = \"PeopleIcon\";\n"],"names":[],"mappings":";;;;AAKO,MAAM,aAAa,MAAM;AAAA,EAC9B,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QACxB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAW,GAAG,UAAU,SAAS;AAAA,MAChC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,WAAW,cAAc;"}
package/dist/index.d.ts CHANGED
@@ -371,6 +371,51 @@ export declare const BankIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttr
371
371
  className?: string;
372
372
  } & React_2.RefAttributes<SVGSVGElement>>;
373
373
 
374
+ export declare const Banner: React_2.ForwardRefExoticComponent<BannerProps & React_2.RefAttributes<HTMLElement>>;
375
+
376
+ /** Layout (`Vertical` / `Horizontal` / `HorizontalSmall` in Figma). Ignored for `Subtle` and app store types. */
377
+ export declare type BannerLayout = "vertical" | "horizontal" | "compact";
378
+
379
+ export declare interface BannerProps extends Omit<React_2.HTMLAttributes<HTMLElement>, "title"> {
380
+ /** Figma `Type` — selects structure, surfaces, and app store gradient. */
381
+ variant: BannerVariant;
382
+ /**
383
+ * Figma `Orientation`. Ignored when `variant` is `Subtle` (horizontal) or an app store type (vertical).
384
+ * @default `"vertical"` for `Default`, `"horizontal"` for `whatsNew`
385
+ */
386
+ layout?: BannerLayout;
387
+ /** Leading visual (image, illustration, or composite). */
388
+ media?: React_2.ReactNode;
389
+ /** Small uppercase label (e.g. HOW TO). */
390
+ eyebrow?: React_2.ReactNode;
391
+ /** Top badge row (e.g. NEW pill) — mainly for `Subtle`. */
392
+ leadBadge?: React_2.ReactNode;
393
+ /** Main heading. */
394
+ title?: React_2.ReactNode;
395
+ /** Primary body copy. */
396
+ description?: React_2.ReactNode;
397
+ /** Extra line under description (`Subtle`). */
398
+ secondaryLine?: React_2.ReactNode;
399
+ /** Left-stacked pill action (`Subtle`). */
400
+ stackedAction?: React_2.ReactNode;
401
+ /** Row under stacked action (`Subtle`). */
402
+ statusRow?: React_2.ReactNode;
403
+ /** Primary button (e.g. Learn more). */
404
+ primaryAction?: React_2.ReactNode;
405
+ /** Text-style CTA (`whatsNew` / app store). */
406
+ textAction?: React_2.ReactNode;
407
+ /** When set, shows a dismiss control (`Default` only). */
408
+ onDismiss?: () => void;
409
+ /** Accessible label for dismiss. @default "Dismiss banner" */
410
+ dismissLabel?: string;
411
+ }
412
+
413
+ /**
414
+ * Matches the Fanvue Library Banner Figma component property `Type`
415
+ * (`Default`, `Subtle`, `whatsNew`, `appStore1`, `appStore2`, `appStore3`).
416
+ */
417
+ export declare type BannerVariant = "Default" | "Subtle" | "whatsNew" | "appStore1" | "appStore2" | "appStore3";
418
+
374
419
  export declare const BellIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttributes<SVGSVGElement> & {
375
420
  className?: string;
376
421
  } & React_2.RefAttributes<SVGSVGElement>>;
@@ -1591,6 +1636,11 @@ export declare interface OnlineBlinkingIconProps extends React_2.HTMLAttributes<
1591
1636
 
1592
1637
  export declare type OnlineBlinkingIconSize = "sm" | "md";
1593
1638
 
1639
+ /** Open in new / external link (20 × 20). */
1640
+ export declare const OpenIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttributes<SVGSVGElement> & {
1641
+ className?: string;
1642
+ } & React_2.RefAttributes<SVGSVGElement>>;
1643
+
1594
1644
  /**
1595
1645
  * Page navigation control with previous/next buttons and numbered page
1596
1646
  * indicators. Supports a numbered-buttons layout (`"default"`) and a compact
@@ -1638,6 +1688,11 @@ export declare const PauseIcon: React_2.ForwardRefExoticComponent<React_2.SVGAtt
1638
1688
  className?: string;
1639
1689
  } & React_2.RefAttributes<SVGSVGElement>>;
1640
1690
 
1691
+ /** Two-person silhouette (20 × 20). */
1692
+ export declare const PeopleIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttributes<SVGSVGElement> & {
1693
+ className?: string;
1694
+ } & React_2.RefAttributes<SVGSVGElement>>;
1695
+
1641
1696
  export declare const PhoneIcon: React_2.ForwardRefExoticComponent<React_2.SVGAttributes<SVGSVGElement> & {
1642
1697
  className?: string;
1643
1698
  } & React_2.RefAttributes<SVGSVGElement>>;
package/dist/index.mjs CHANGED
@@ -9,6 +9,7 @@ import { useAudioRecorder } from "./components/AudioUpload/useAudioRecorder.mjs"
9
9
  import { Autocomplete } from "./components/Autocomplete/Autocomplete.mjs";
10
10
  import { Avatar, AvatarFallback, AvatarImage, AvatarRoot } from "./components/Avatar/Avatar.mjs";
11
11
  import { Badge } from "./components/Badge/Badge.mjs";
12
+ import { Banner } from "./components/Banner/Banner.mjs";
12
13
  import { BottomNavigation } from "./components/BottomNavigation/BottomNavigation.mjs";
13
14
  import { BottomNavigationAction } from "./components/BottomNavigation/BottomNavigationAction.mjs";
14
15
  import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "./components/Breadcrumb/Breadcrumb.mjs";
@@ -98,7 +99,9 @@ import { MoonIcon } from "./components/Icons/MoonIcon.mjs";
98
99
  import { MoreIcon } from "./components/Icons/MoreIcon.mjs";
99
100
  import { MoreVerticalIcon } from "./components/Icons/MoreVerticalIcon.mjs";
100
101
  import { NewMessageIcon } from "./components/Icons/NewMessageIcon.mjs";
102
+ import { OpenIcon } from "./components/Icons/OpenIcon.mjs";
101
103
  import { PauseIcon } from "./components/Icons/PauseIcon.mjs";
104
+ import { PeopleIcon } from "./components/Icons/PeopleIcon.mjs";
102
105
  import { PhoneIcon } from "./components/Icons/PhoneIcon.mjs";
103
106
  import { PhoneOffIcon } from "./components/Icons/PhoneOffIcon.mjs";
104
107
  import { PinIcon } from "./components/Icons/PinIcon.mjs";
@@ -194,6 +197,7 @@ export {
194
197
  AvatarRoot,
195
198
  Badge,
196
199
  BankIcon,
200
+ Banner,
197
201
  BellIcon,
198
202
  BellOffIcon,
199
203
  BoltIcon,
@@ -314,9 +318,11 @@ export {
314
318
  MoreVerticalIcon,
315
319
  NewMessageIcon,
316
320
  OnlineBlinkingIcon,
321
+ OpenIcon,
317
322
  Pagination,
318
323
  PasswordField,
319
324
  PauseIcon,
325
+ PeopleIcon,
320
326
  PhoneIcon,
321
327
  PhoneOffIcon,
322
328
  Pill,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fanvue/ui",
3
- "version": "2.1.3",
3
+ "version": "2.2.0",
4
4
  "description": "React component library built with Tailwind CSS for Fanvue ecosystem",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org",