@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.
- package/dist/cjs/components/Banner/Banner.cjs +310 -0
- package/dist/cjs/components/Banner/Banner.cjs.map +1 -0
- package/dist/cjs/components/Icons/OpenIcon.cjs +55 -0
- package/dist/cjs/components/Icons/OpenIcon.cjs.map +1 -0
- package/dist/cjs/components/Icons/PeopleIcon.cjs +62 -0
- package/dist/cjs/components/Icons/PeopleIcon.cjs.map +1 -0
- package/dist/cjs/index.cjs +6 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/components/Banner/Banner.mjs +293 -0
- package/dist/components/Banner/Banner.mjs.map +1 -0
- package/dist/components/Icons/OpenIcon.mjs +38 -0
- package/dist/components/Icons/OpenIcon.mjs.map +1 -0
- package/dist/components/Icons/PeopleIcon.mjs +45 -0
- package/dist/components/Icons/PeopleIcon.mjs.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.mjs +6 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -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;;"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -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;
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -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":";;;;;;;AAuBA,MAAM,qBAAiD,CAAC,aAAa,aAAa,WAAW;AAE7F,SAAS,kBAAkB,SAAoD;AAC7E,SAAQ,mBAAyC,SAAS,OAAO;AACnE;AAEA,MAAM,sBAA6D;AAAA,EACjE,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AACb;AAEA,MAAM,gBAAgB;AAEtB,MAAM,gBAA8D;AAAA,EAClE,WAAW;AAAA,IACT,iBACE;AAAA,EAAA;AAAA,EAEJ,WAAW;AAAA,IACT,iBACE;AAAA,EAAA;AAAA,EAEJ,WAAW;AAAA,IACT,iBACE;AAAA,EAAA;AAEN;AAoCA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AACF,GAGG;AACD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,0BAAO,WAAA,EAAU;AAAA,MACjB,SAAS;AAAA,MACT,cAAY;AAAA,MACZ,WAAU;AAAA,IAAA;AAAA,EAAA;AAGhB;AAEA,SAAS,cAAc,SAAwB,YAAoD;AACjG,MAAI,YAAY,UAAU;AACxB,WAAO;AAAA,EACT;AACA,MAAI,kBAAkB,OAAO,GAAG;AAC9B,WAAO;AAAA,EACT;AACA,MAAI,YAAY,YAAY;AAC1B,WAAO,cAAc;AAAA,EACvB;AACA,SAAO,cAAc;AACvB;AAEA,SAAS,gBAAgB,SAAwB,QAAsB,WAA4B;AACjG,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,aAAa;AAAA,IACzB,YAAY,YACV;AAAA,IACF,YAAY,cACV,WAAW,gBACX;AAAA,IACF,YAAY,cACV,WAAW,cACX;AAAA,IACF,YAAY,cACV,WAAW,aACX;AAAA,IACF,kBAAkB,OAAO,KAAK;AAAA,IAC9B,WAAW,cAAc,YAAY,aAAa;AAAA,IAClD,WAAW,gBAAgB,YAAY,aAAa;AAAA,IACpD;AAAA,EAAA;AAEJ;AAMA,MAAM,gBAAgB,MAAM;AAAA,EAC1B,CAAC,EAAE,WAAW,YAAY,UAAU,GAAG,KAAA,GAAQ,QAC7C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,mBAAiB;AAAA,MACjB,eAAY;AAAA,MACZ;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,IAAA;AAAA,EAAA;AAGP;AACA,cAAc,cAAc;AAO5B,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACjB,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,YAAY,UAAa,YAAY,QAAQ,YAAY,SACxD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,oBAAoB,eAAe;AAAA,QAC5C,SAAS;AAAA,QACT,WAAU;AAAA,QAET,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,UAAU,UAAa,UAAU,QAAQ,UAAU,SAClD,oBAAC,KAAA,EAAE,IAAI,YAAY,WAAU,oDAC1B,UAAA,OACH;AAAA,IAED,gBAAgB,UAAa,gBAAgB,QAAQ,gBAAgB,SACpE,oBAAC,KAAA,EAAE,WAAU,qDAAqD,UAAA,YAAA,CAAY;AAAA,IAE/E;AAAA,EAAA,GACH;AAEJ;AAOA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,aACJ,WAAW,aACP,qDACA;AACN,QAAM,YACJ,WAAW,YACP,gDACA;AAEN,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,UAAU,UAAa,UAAU,QAChC,oBAAC,OAAA,EAAI,WAAW,GAAG,WAAW,WAAW,cAAc,sBAAsB,GAC1E,UAAA,OACH;AAAA,IAEF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,gBAAgB,WAAW,YAAY,uBAAuB;AAAA,QAAA;AAAA,QAG1E,UAAA;AAAA,UAAA,UAAU,UAAa,UAAU,QAAQ,UAAU,SAClD,oBAAC,OAAA,EAAI,IAAI,YAAY,WAAW,YAC7B,UAAA,OACH;AAAA,UAED,gBAAgB,UAAa,gBAAgB,QAAQ,gBAAgB,SACpE,oBAAC,KAAA,EAAE,WAAU,qDAAqD,UAAA,YAAA,CAAY;AAAA,UAE/E;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;AAcA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,QAAM,mBAAmB;AACzB,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,UAAU,UAAa,UAAU,4BAAS,OAAA,EAAI,WAAW,kBAAmB,UAAA,MAAA,CAAM;AAAA,IACnF,qBAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,sCACZ,UAAA;AAAA,QAAA,cAAc,UAAa,cAAc,4BACvC,OAAA,EAAI,WAAU,qCAAqC,UAAA,UAAA,CAAU;AAAA,QAEhE,qBAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,UAAA,UAAU,UAAa,UAAU,QAAQ,UAAU,SAClD,oBAAC,OAAA,EAAI,IAAI,YAAY,WAAU,mDAC5B,UAAA,OACH;AAAA,UAEF,qBAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,YAAA,gBAAgB,UAAa,gBAAgB,QAAQ,gBAAgB,SACpE,oBAAC,KAAA,EAAE,WAAU,mDAAmD,UAAA,YAAA,CAAY;AAAA,YAE7E,kBAAkB,UAAa,kBAAkB,QAAQ,kBAAkB,SAC1E,oBAAC,KAAA,EAAE,WAAU,mDAAmD,UAAA,cAAA,CAAc;AAAA,UAAA,EAAA,CAElF;AAAA,QAAA,GACF;AAAA,QACC,kBAAkB,UAAa,kBAAkB,4BAC/C,OAAA,EAAI,WAAU,sCAAsC,UAAA,cAAA,CAAc;AAAA,QAEpE,cAAc,UAAa,cAAc,4BACvC,OAAA,EAAI,WAAU,qCAAqC,UAAA,UAAA,CAAU;AAAA,MAAA,GAElE;AAAA,MACC,kBAAkB,UAAa,kBAAkB,4BAC/C,OAAA,EAAI,WAAU,wBAAwB,UAAA,cAAA,CAAc;AAAA,IAAA,EAAA,CAEzD;AAAA,EAAA,GACF;AAEJ;AAWA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,mBAAmB;AACzB,QAAM,oBAAoB;AAC1B,QAAM,aACJ,qBAAC,OAAA,EAAI,WAAU,sCACZ,UAAA;AAAA,IAAA,YAAY,UAAa,YAAY,QAAQ,YAAY,SACxD,oBAAC,KAAA,EAAE,WAAU,6DAA6D,UAAA,QAAA,CAAQ;AAAA,IAEnF,UAAU,UAAa,UAAU,QAAQ,UAAU,SAClD,oBAAC,OAAA,EAAI,IAAI,YAAY,WAAW,mBAC7B,UAAA,OACH;AAAA,IAED,gBAAgB,UAAa,gBAAgB,QAAQ,gBAAgB,SACpE,oBAAC,KAAA,EAAE,WAAU,4DAA4D,UAAA,YAAA,CAAY;AAAA,EAAA,GAEzF;AAGF,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,UAAU,UAAa,UAAU,4BAAS,OAAA,EAAI,WAAW,kBAAmB,UAAA,MAAA,CAAM;AAAA,IAClF,WAAW,eACV,qBAAC,OAAA,EAAI,WAAU,uCACZ,UAAA;AAAA,MAAA;AAAA,MACA,kBAAkB,UAAa,kBAAkB,4BAC/C,OAAA,EAAI,WAAU,YAAY,UAAA,cAAA,CAAc;AAAA,IAAA,EAAA,CAE7C,IAEA,qBAAC,OAAA,EAAI,WAAU,sCACZ,UAAA;AAAA,MAAA;AAAA,MACA,kBAAkB,UAAa,kBAAkB,QAAQ,oBAAC,SAAK,UAAA,cAAA,CAAc;AAAA,IAAA,GAChF;AAAA,IAED;AAAA,EAAA,GACH;AAEJ;AAEO,MAAM,SAAS,MAAM;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,SAAS,cAAc,SAAS,UAAU;AAChD,UAAM,cAAc,cAAc,UAAa,YAAY;AAC3D,UAAM,UAAU,MAAM,MAAA;AACtB,UAAM,mBACJ,UAAU,UAAa,UAAU,QAAQ,UAAU,QAAQ,UAAU;AAEvE,UAAM,YAAY,gBAAgB,SAAS,QAAQ,SAAS;AAE5D,QAAI,kBAAkB,OAAO,GAAG;AAC9B,aACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,YAAY;AAAA,UACZ,OAAO,cAAc,OAAO;AAAA,UAC5B,WAAW;AAAA,UACV,GAAG;AAAA,UAEJ,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,iBAAiB;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,YAAY;AAAA,YAAA;AAAA,UAAA;AAAA,QACd;AAAA,MAAA;AAAA,IAGN;AAEA,QAAI,YAAY,YAAY;AAC1B,aACE,oBAAC,iBAAc,KAAU,YAAY,kBAAkB,WAAW,WAAY,GAAG,OAC/E,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QAAA;AAAA,MAAA,GAEhB;AAAA,IAEJ;AAEA,QAAI,YAAY,UAAU;AACxB,aACE,oBAAC,iBAAc,KAAU,YAAY,kBAAkB,WAAW,WAAY,GAAG,OAC/E,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QAAA;AAAA,MAAA,GAEhB;AAAA,IAEJ;AAEA,UAAM,cACJ,eAAe,cAAc,6BAC1B,eAAA,EAAc,WAAsB,cAA4B,IAC/D;AAEN,WACE,oBAAC,eAAA,EAAc,KAAU,YAAY,kBAAkB,WAAW,WAAY,GAAG,OAC/E,UAAA,oBAAC,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MAAA;AAAA,IAAA,GAEJ,EAAA,CACF;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;"}
|
|
@@ -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,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|