@orangecheck/design 0.18.0 → 0.20.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/chrome.d.mts +1 -1
- package/dist/chrome.d.ts +1 -1
- package/dist/chrome.js +16 -0
- package/dist/chrome.js.map +1 -1
- package/dist/chrome.mjs +16 -0
- package/dist/chrome.mjs.map +1 -1
- package/dist/components.d.mts +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +830 -178
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +780 -143
- package/dist/components.mjs.map +1 -1
- package/dist/composites.d.mts +142 -1
- package/dist/composites.d.ts +142 -1
- package/dist/composites.js +641 -3
- package/dist/composites.js.map +1 -1
- package/dist/composites.mjs +627 -4
- package/dist/composites.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +538 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +522 -13
- package/dist/index.mjs.map +1 -1
- package/dist/primitives.d.mts +24 -4
- package/dist/primitives.d.ts +24 -4
- package/dist/primitives.js +123 -11
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs +121 -13
- package/dist/primitives.mjs.map +1 -1
- package/dist/styles/fonts/hanken-grotesk-latin-ext.woff2 +0 -0
- package/dist/styles/fonts/hanken-grotesk-latin.woff2 +0 -0
- package/dist/styles/fonts.css +29 -0
- package/dist/styles/theme.css +43 -5
- package/dist/styles/themes/ember.css +223 -0
- package/dist/styles/themes.css +1 -0
- package/dist/styles.css +1 -0
- package/dist/tokens.js +6 -0
- package/dist/tokens.js.map +1 -1
- package/dist/tokens.mjs +6 -0
- package/dist/tokens.mjs.map +1 -1
- package/package.json +1 -1
package/dist/composites.js
CHANGED
|
@@ -6,7 +6,21 @@ var clsx = require('clsx');
|
|
|
6
6
|
var tailwindMerge = require('tailwind-merge');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
var Link = require('next/link');
|
|
9
|
-
var
|
|
9
|
+
var React3 = require('react');
|
|
10
|
+
var reactSlot = require('@radix-ui/react-slot');
|
|
11
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
12
|
+
require('@radix-ui/react-label');
|
|
13
|
+
require('@radix-ui/react-checkbox');
|
|
14
|
+
require('@radix-ui/react-radio-group');
|
|
15
|
+
require('@radix-ui/react-switch');
|
|
16
|
+
require('next-themes');
|
|
17
|
+
require('@radix-ui/react-separator');
|
|
18
|
+
require('@radix-ui/react-dialog');
|
|
19
|
+
var AccordionPrimitive = require('@radix-ui/react-accordion');
|
|
20
|
+
require('@radix-ui/react-select');
|
|
21
|
+
require('sonner');
|
|
22
|
+
require('@radix-ui/react-tabs');
|
|
23
|
+
require('qrcode');
|
|
10
24
|
|
|
11
25
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
26
|
|
|
@@ -30,6 +44,8 @@ function _interopNamespace(e) {
|
|
|
30
44
|
|
|
31
45
|
var Popover__namespace = /*#__PURE__*/_interopNamespace(Popover);
|
|
32
46
|
var Link__default = /*#__PURE__*/_interopDefault(Link);
|
|
47
|
+
var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
|
|
48
|
+
var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
|
|
33
49
|
|
|
34
50
|
// src/composites/help-hint.tsx
|
|
35
51
|
function cn(...inputs) {
|
|
@@ -186,7 +202,7 @@ function StatTile({ children, ...item }) {
|
|
|
186
202
|
function StatBlock({ label, value, sub, delta, tone = "default", className }) {
|
|
187
203
|
const toneClass = tone === "success" ? "text-success" : tone === "warning" ? "text-warning" : tone === "destructive" ? "text-destructive" : "text-foreground";
|
|
188
204
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-1", className), children: [
|
|
189
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-mono text-[10px]", children: label }),
|
|
205
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-mono text-muted-foreground text-[10px]", children: label }),
|
|
190
206
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
191
207
|
"span",
|
|
192
208
|
{
|
|
@@ -258,7 +274,7 @@ function DefinitionList({ items, className }) {
|
|
|
258
274
|
"grid gap-x-5 gap-y-2 text-sm sm:grid-cols-[auto_1fr] sm:items-baseline",
|
|
259
275
|
className
|
|
260
276
|
),
|
|
261
|
-
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
277
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(React3.Fragment, { children: [
|
|
262
278
|
/* @__PURE__ */ jsxRuntime.jsx("dt", { className: "label-mono text-muted-foreground text-[10px]", children: item.label }),
|
|
263
279
|
/* @__PURE__ */ jsxRuntime.jsx("dd", { className: "text-foreground font-mono text-xs break-all", children: item.value })
|
|
264
280
|
] }, i))
|
|
@@ -284,15 +300,637 @@ function DataRow({ children, meta, action, as, className }) {
|
|
|
284
300
|
}
|
|
285
301
|
);
|
|
286
302
|
}
|
|
303
|
+
function TwoToneHeading({
|
|
304
|
+
lead,
|
|
305
|
+
muted,
|
|
306
|
+
as,
|
|
307
|
+
tone = "default",
|
|
308
|
+
className
|
|
309
|
+
}) {
|
|
310
|
+
const Tag = as ?? "h2";
|
|
311
|
+
const leadColor = tone === "onBrand" ? "text-primary-foreground" : "text-foreground";
|
|
312
|
+
const mutedColor = tone === "onBrand" ? "text-primary-foreground/60" : "text-foreground/40";
|
|
313
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
314
|
+
Tag,
|
|
315
|
+
{
|
|
316
|
+
className: cn(
|
|
317
|
+
"font-extrabold tracking-[-0.02em] leading-[1.0] text-balance",
|
|
318
|
+
"text-3xl sm:text-4xl md:text-5xl",
|
|
319
|
+
leadColor,
|
|
320
|
+
className
|
|
321
|
+
),
|
|
322
|
+
children: [
|
|
323
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: lead }),
|
|
324
|
+
muted ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: mutedColor, children: [
|
|
325
|
+
" ",
|
|
326
|
+
muted
|
|
327
|
+
] }) : null
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
function MarketingHeading({
|
|
333
|
+
eyebrow,
|
|
334
|
+
lead,
|
|
335
|
+
muted,
|
|
336
|
+
body,
|
|
337
|
+
align = "start",
|
|
338
|
+
tone = "default",
|
|
339
|
+
as,
|
|
340
|
+
className
|
|
341
|
+
}) {
|
|
342
|
+
const centered = align === "center";
|
|
343
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col", centered && "items-center text-center", className), children: [
|
|
344
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
345
|
+
"p",
|
|
346
|
+
{
|
|
347
|
+
className: cn(
|
|
348
|
+
"label-mono mb-3",
|
|
349
|
+
tone === "onBrand" ? "text-primary-foreground/80" : "text-primary"
|
|
350
|
+
),
|
|
351
|
+
children: eyebrow
|
|
352
|
+
}
|
|
353
|
+
),
|
|
354
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
355
|
+
TwoToneHeading,
|
|
356
|
+
{
|
|
357
|
+
lead,
|
|
358
|
+
muted,
|
|
359
|
+
as,
|
|
360
|
+
tone,
|
|
361
|
+
className: cn("max-w-4xl", centered && "mx-auto")
|
|
362
|
+
}
|
|
363
|
+
),
|
|
364
|
+
body && /* @__PURE__ */ jsxRuntime.jsx(
|
|
365
|
+
"p",
|
|
366
|
+
{
|
|
367
|
+
className: cn(
|
|
368
|
+
"mt-4 max-w-2xl text-base sm:text-lg",
|
|
369
|
+
tone === "onBrand" ? "text-primary-foreground/80" : "text-muted-foreground",
|
|
370
|
+
centered && "mx-auto"
|
|
371
|
+
),
|
|
372
|
+
children: body
|
|
373
|
+
}
|
|
374
|
+
)
|
|
375
|
+
] });
|
|
376
|
+
}
|
|
377
|
+
var buttonVariants = classVarianceAuthority.cva(
|
|
378
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
379
|
+
{
|
|
380
|
+
variants: {
|
|
381
|
+
variant: {
|
|
382
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
383
|
+
destructive: "bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white",
|
|
384
|
+
outline: "bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs",
|
|
385
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
386
|
+
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
387
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
388
|
+
// For CTAs placed ON a saturated brand band or a dark section
|
|
389
|
+
// (e.g. a terracotta hero / footer / a forced-dark block) where
|
|
390
|
+
// the surface is dark+light-text in either mode. A neutral white
|
|
391
|
+
// pill + a translucent-white ghost read on any such surface;
|
|
392
|
+
// hardcoded white is deliberate (cf. destructive's text-white).
|
|
393
|
+
onBrand: "bg-white text-neutral-900 shadow-sm hover:bg-white/90",
|
|
394
|
+
onBrandOutline: "border border-white/40 bg-transparent text-white hover:bg-white/10"
|
|
395
|
+
},
|
|
396
|
+
size: {
|
|
397
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
398
|
+
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
|
399
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
400
|
+
icon: "size-9"
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
defaultVariants: {
|
|
404
|
+
variant: "default",
|
|
405
|
+
size: "default"
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
);
|
|
409
|
+
function Button({
|
|
410
|
+
className,
|
|
411
|
+
variant,
|
|
412
|
+
size,
|
|
413
|
+
asChild = false,
|
|
414
|
+
...props
|
|
415
|
+
}) {
|
|
416
|
+
const Comp = asChild ? reactSlot.Slot : "button";
|
|
417
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
418
|
+
Comp,
|
|
419
|
+
{
|
|
420
|
+
"data-slot": "button",
|
|
421
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
422
|
+
...props
|
|
423
|
+
}
|
|
424
|
+
);
|
|
425
|
+
}
|
|
426
|
+
classVarianceAuthority.cva(
|
|
427
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3",
|
|
428
|
+
{
|
|
429
|
+
variants: {
|
|
430
|
+
variant: {
|
|
431
|
+
default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent",
|
|
432
|
+
secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent",
|
|
433
|
+
destructive: "bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90 border-transparent",
|
|
434
|
+
warning: "bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent",
|
|
435
|
+
success: "bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent",
|
|
436
|
+
info: "bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent",
|
|
437
|
+
brand: "bg-brand-soft text-accent-foreground border-transparent",
|
|
438
|
+
neutral: "bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent",
|
|
439
|
+
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
defaultVariants: { variant: "default" }
|
|
443
|
+
}
|
|
444
|
+
);
|
|
445
|
+
function Input({ className, type, ...props }) {
|
|
446
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
447
|
+
"input",
|
|
448
|
+
{
|
|
449
|
+
type,
|
|
450
|
+
"data-slot": "input",
|
|
451
|
+
className: cn(
|
|
452
|
+
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
453
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
454
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
455
|
+
className
|
|
456
|
+
),
|
|
457
|
+
...props
|
|
458
|
+
}
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
classVarianceAuthority.cva(
|
|
462
|
+
"relative grid w-full grid-cols-[0_1fr] items-start gap-x-0 gap-y-0.5 rounded-md border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
|
|
463
|
+
{
|
|
464
|
+
variants: {
|
|
465
|
+
variant: {
|
|
466
|
+
default: "bg-card text-card-foreground",
|
|
467
|
+
destructive: "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90",
|
|
468
|
+
success: "text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90",
|
|
469
|
+
warning: "text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90"
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
defaultVariants: { variant: "default" }
|
|
473
|
+
}
|
|
474
|
+
);
|
|
475
|
+
globalThis.process?.env?.NODE_ENV;
|
|
476
|
+
globalThis.process?.env?.NODE_ENV;
|
|
477
|
+
var Accordion = AccordionPrimitive__namespace.Root;
|
|
478
|
+
var AccordionItem = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Item, { ref, className: cn("border-b", className), ...props }));
|
|
479
|
+
AccordionItem.displayName = "AccordionItem";
|
|
480
|
+
var AccordionTrigger = React3__namespace.forwardRef(({ className, children, icon = "chevron", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
481
|
+
AccordionPrimitive__namespace.Trigger,
|
|
482
|
+
{
|
|
483
|
+
ref,
|
|
484
|
+
className: cn(
|
|
485
|
+
"flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline",
|
|
486
|
+
icon === "chevron" ? "[&[data-state=open]>svg]:rotate-180" : "[&[data-state=open]>svg]:rotate-45",
|
|
487
|
+
className
|
|
488
|
+
),
|
|
489
|
+
...props,
|
|
490
|
+
children: [
|
|
491
|
+
children,
|
|
492
|
+
icon === "chevron" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "text-primary h-5 w-5 shrink-0 transition-transform duration-200" })
|
|
493
|
+
]
|
|
494
|
+
}
|
|
495
|
+
) }));
|
|
496
|
+
AccordionTrigger.displayName = AccordionPrimitive__namespace.Trigger.displayName;
|
|
497
|
+
var AccordionContent = React3__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
498
|
+
AccordionPrimitive__namespace.Content,
|
|
499
|
+
{
|
|
500
|
+
ref,
|
|
501
|
+
className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all",
|
|
502
|
+
...props,
|
|
503
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pt-0 pb-4", className), children })
|
|
504
|
+
}
|
|
505
|
+
));
|
|
506
|
+
AccordionContent.displayName = AccordionPrimitive__namespace.Content.displayName;
|
|
507
|
+
var surfaceVariants = classVarianceAuthority.cva("rounded-xl transition-colors", {
|
|
508
|
+
variants: {
|
|
509
|
+
tone: {
|
|
510
|
+
/* Crisp panel floating on the page — the default soft card. */
|
|
511
|
+
default: "bg-card text-card-foreground",
|
|
512
|
+
/* Warm-gray recessed panel. */
|
|
513
|
+
muted: "bg-muted text-foreground",
|
|
514
|
+
/* Solid brand fill — small terracotta panel; inverts child text. */
|
|
515
|
+
brand: "bg-brand text-brand-foreground",
|
|
516
|
+
/* High-contrast neutral panel (near-black in light, near-white in dark). */
|
|
517
|
+
contrast: "bg-foreground text-background",
|
|
518
|
+
/* Translucent lightened tile for cards sitting ON a brand band. */
|
|
519
|
+
onBrand: "text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]",
|
|
520
|
+
/* Frame only, transparent fill. */
|
|
521
|
+
outline: "bg-transparent text-foreground"
|
|
522
|
+
},
|
|
523
|
+
elevation: {
|
|
524
|
+
none: "shadow-none",
|
|
525
|
+
sm: "shadow-sm",
|
|
526
|
+
md: "shadow-md",
|
|
527
|
+
lg: "shadow-lg",
|
|
528
|
+
xl: "shadow-xl"
|
|
529
|
+
},
|
|
530
|
+
bordered: {
|
|
531
|
+
true: "border",
|
|
532
|
+
false: ""
|
|
533
|
+
},
|
|
534
|
+
pad: {
|
|
535
|
+
none: "p-0",
|
|
536
|
+
sm: "p-4",
|
|
537
|
+
md: "p-5 sm:p-6",
|
|
538
|
+
lg: "p-6 sm:p-8"
|
|
539
|
+
}
|
|
540
|
+
},
|
|
541
|
+
defaultVariants: {
|
|
542
|
+
tone: "default",
|
|
543
|
+
elevation: "sm",
|
|
544
|
+
bordered: true,
|
|
545
|
+
pad: "md"
|
|
546
|
+
}
|
|
547
|
+
});
|
|
548
|
+
function Surface({
|
|
549
|
+
className,
|
|
550
|
+
tone,
|
|
551
|
+
elevation,
|
|
552
|
+
bordered,
|
|
553
|
+
pad,
|
|
554
|
+
...props
|
|
555
|
+
}) {
|
|
556
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
557
|
+
"div",
|
|
558
|
+
{
|
|
559
|
+
"data-slot": "surface",
|
|
560
|
+
className: cn(surfaceVariants({ tone, elevation, bordered, pad }), className),
|
|
561
|
+
...props
|
|
562
|
+
}
|
|
563
|
+
);
|
|
564
|
+
}
|
|
565
|
+
var iconBadgeVariants = classVarianceAuthority.cva(
|
|
566
|
+
"inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none",
|
|
567
|
+
{
|
|
568
|
+
variants: {
|
|
569
|
+
tone: {
|
|
570
|
+
/* The signature peach tile — soft accent fill, terracotta glyph.
|
|
571
|
+
Auto-swaps to warm-dark + light-peach in dark mode via tokens. */
|
|
572
|
+
peach: "bg-accent text-accent-foreground",
|
|
573
|
+
/* Inverted near-black tile, light glyph ("never do" promises). */
|
|
574
|
+
dark: "bg-foreground text-background",
|
|
575
|
+
/* Solid brand tile. */
|
|
576
|
+
brand: "bg-primary text-primary-foreground",
|
|
577
|
+
/* White tile on a brand band, terracotta glyph (numbered steps). */
|
|
578
|
+
onBrand: "bg-brand-foreground text-primary",
|
|
579
|
+
/* Quiet neutral tile. */
|
|
580
|
+
muted: "bg-muted text-foreground",
|
|
581
|
+
/* Crisp white (card-colored) tile with a terracotta glyph and a
|
|
582
|
+
soft lift — the elevated icon chip on muted/colored cards. */
|
|
583
|
+
surface: "bg-card text-primary shadow-sm"
|
|
584
|
+
},
|
|
585
|
+
size: {
|
|
586
|
+
sm: "size-9 text-xs [&_svg]:size-4",
|
|
587
|
+
md: "size-11 text-sm [&_svg]:size-5",
|
|
588
|
+
lg: "size-12 text-base [&_svg]:size-6",
|
|
589
|
+
xl: "size-14 text-lg [&_svg]:size-7"
|
|
590
|
+
}
|
|
591
|
+
},
|
|
592
|
+
defaultVariants: { tone: "peach", size: "md" }
|
|
593
|
+
}
|
|
594
|
+
);
|
|
595
|
+
function IconBadge({ className, tone, size, children, ...props }) {
|
|
596
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
597
|
+
"span",
|
|
598
|
+
{
|
|
599
|
+
"data-slot": "icon-badge",
|
|
600
|
+
className: cn(iconBadgeVariants({ tone, size }), className),
|
|
601
|
+
...props,
|
|
602
|
+
children
|
|
603
|
+
}
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
function FeatureCard({
|
|
607
|
+
icon,
|
|
608
|
+
iconTone = "peach",
|
|
609
|
+
title,
|
|
610
|
+
children,
|
|
611
|
+
orientation = "vertical",
|
|
612
|
+
align = "start",
|
|
613
|
+
tone = "default",
|
|
614
|
+
elevation = "sm",
|
|
615
|
+
className
|
|
616
|
+
}) {
|
|
617
|
+
const horizontal = orientation === "horizontal";
|
|
618
|
+
const centered = !horizontal && align === "center";
|
|
619
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
620
|
+
Surface,
|
|
621
|
+
{
|
|
622
|
+
tone,
|
|
623
|
+
elevation,
|
|
624
|
+
pad: horizontal ? "md" : "lg",
|
|
625
|
+
className: cn(
|
|
626
|
+
"flex h-full",
|
|
627
|
+
horizontal ? "flex-row gap-4" : "flex-col",
|
|
628
|
+
centered && "items-center text-center",
|
|
629
|
+
className
|
|
630
|
+
),
|
|
631
|
+
children: [
|
|
632
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
633
|
+
IconBadge,
|
|
634
|
+
{
|
|
635
|
+
tone: iconTone,
|
|
636
|
+
size: "lg",
|
|
637
|
+
className: cn(horizontal ? "shrink-0" : "mb-4"),
|
|
638
|
+
children: icon
|
|
639
|
+
}
|
|
640
|
+
),
|
|
641
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(horizontal && "min-w-0"), children: [
|
|
642
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold", children: title }),
|
|
643
|
+
children && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mt-1.5 text-sm leading-relaxed", children })
|
|
644
|
+
] })
|
|
645
|
+
]
|
|
646
|
+
}
|
|
647
|
+
);
|
|
648
|
+
}
|
|
649
|
+
var TONE = {
|
|
650
|
+
default: "bg-background text-foreground",
|
|
651
|
+
muted: "bg-muted text-foreground",
|
|
652
|
+
brand: "bg-brand text-brand-foreground",
|
|
653
|
+
// `dark` activates the .dark variant locally so descendant package
|
|
654
|
+
// components render their dark arm even on an otherwise light page.
|
|
655
|
+
dark: "dark bg-background text-foreground"
|
|
656
|
+
};
|
|
657
|
+
var WIDTH = {
|
|
658
|
+
default: "container",
|
|
659
|
+
wide: "mx-auto w-full max-w-screen-2xl px-4 sm:px-6 lg:px-8",
|
|
660
|
+
full: ""
|
|
661
|
+
};
|
|
662
|
+
function Section({
|
|
663
|
+
tone = "default",
|
|
664
|
+
width = "default",
|
|
665
|
+
diagonal,
|
|
666
|
+
id,
|
|
667
|
+
className,
|
|
668
|
+
innerClassName,
|
|
669
|
+
children
|
|
670
|
+
}) {
|
|
671
|
+
const showDiagonal = diagonal ?? tone === "brand";
|
|
672
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
673
|
+
"div",
|
|
674
|
+
{
|
|
675
|
+
id,
|
|
676
|
+
className: cn("w-full", TONE[tone], showDiagonal && "oc-diagonal", className),
|
|
677
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("py-16 sm:py-20 md:py-24", WIDTH[width], innerClassName), children })
|
|
678
|
+
}
|
|
679
|
+
);
|
|
680
|
+
}
|
|
681
|
+
function BrandBand(props) {
|
|
682
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Section, { tone: "brand", ...props });
|
|
683
|
+
}
|
|
684
|
+
function ComparisonTable({ rows, columns, className }) {
|
|
685
|
+
const cols = { feature: "", theirs: "A normal login", ours: "OrangeCheck", ...columns };
|
|
686
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-xl border", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-[32rem]", children: [
|
|
687
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1.4fr_1fr_1fr]", children: [
|
|
688
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "label-mono text-muted-foreground px-4 py-3.5 sm:px-6", children: cols.feature }),
|
|
689
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-3.5 font-semibold text-foreground sm:px-6", children: cols.theirs }),
|
|
690
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-accent/60 border-border/60 border-l px-4 py-3.5 font-semibold text-primary sm:px-6", children: cols.ours })
|
|
691
|
+
] }),
|
|
692
|
+
rows.map((row, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1.4fr_1fr_1fr] border-t", children: [
|
|
693
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-3.5 font-medium text-foreground sm:px-6", children: row.label }),
|
|
694
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-muted-foreground flex items-center gap-2 px-4 py-3.5 sm:px-6", children: [
|
|
695
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "text-muted-foreground/70 size-4" }),
|
|
696
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: row.theirs })
|
|
697
|
+
] }),
|
|
698
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-accent/40 border-border/60 flex items-center gap-2 border-l px-4 py-3.5 text-foreground sm:px-6", children: [
|
|
699
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-4 text-primary" }),
|
|
700
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: row.ours })
|
|
701
|
+
] })
|
|
702
|
+
] }, i))
|
|
703
|
+
] }) }) });
|
|
704
|
+
}
|
|
705
|
+
function NumberedStep({
|
|
706
|
+
n,
|
|
707
|
+
title,
|
|
708
|
+
children,
|
|
709
|
+
tone = "default",
|
|
710
|
+
card = false,
|
|
711
|
+
className
|
|
712
|
+
}) {
|
|
713
|
+
const onBrand = tone === "onBrand";
|
|
714
|
+
const body = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(!card && className), children: [
|
|
715
|
+
/* @__PURE__ */ jsxRuntime.jsx(IconBadge, { tone: onBrand ? "onBrand" : "peach", size: "sm", children: n }),
|
|
716
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-lg font-semibold", children: title }),
|
|
717
|
+
children && /* @__PURE__ */ jsxRuntime.jsx(
|
|
718
|
+
"div",
|
|
719
|
+
{
|
|
720
|
+
className: cn(
|
|
721
|
+
"mt-1.5 text-sm leading-relaxed",
|
|
722
|
+
onBrand ? "text-brand-foreground/80" : "text-muted-foreground"
|
|
723
|
+
),
|
|
724
|
+
children
|
|
725
|
+
}
|
|
726
|
+
)
|
|
727
|
+
] });
|
|
728
|
+
if (!card) return body;
|
|
729
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
730
|
+
Surface,
|
|
731
|
+
{
|
|
732
|
+
tone: onBrand ? "onBrand" : "default",
|
|
733
|
+
elevation: onBrand ? "none" : "sm",
|
|
734
|
+
pad: "md",
|
|
735
|
+
className,
|
|
736
|
+
children: body
|
|
737
|
+
}
|
|
738
|
+
);
|
|
739
|
+
}
|
|
740
|
+
var COLUMNS = {
|
|
741
|
+
2: "md:grid-cols-2",
|
|
742
|
+
3: "md:grid-cols-3",
|
|
743
|
+
4: "md:grid-cols-4"
|
|
744
|
+
};
|
|
745
|
+
function StepList({
|
|
746
|
+
steps,
|
|
747
|
+
variant = "bare",
|
|
748
|
+
tone = "default",
|
|
749
|
+
columns = 3,
|
|
750
|
+
className
|
|
751
|
+
}) {
|
|
752
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid gap-6 sm:grid-cols-2 sm:gap-8", COLUMNS[columns], className), children: steps.map((step, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
753
|
+
NumberedStep,
|
|
754
|
+
{
|
|
755
|
+
n: index + 1,
|
|
756
|
+
title: step.title,
|
|
757
|
+
tone,
|
|
758
|
+
card: variant === "card",
|
|
759
|
+
children: step.children
|
|
760
|
+
},
|
|
761
|
+
index
|
|
762
|
+
)) });
|
|
763
|
+
}
|
|
764
|
+
function Faq({ items, defaultOpen, className }) {
|
|
765
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
766
|
+
Accordion,
|
|
767
|
+
{
|
|
768
|
+
type: "single",
|
|
769
|
+
collapsible: true,
|
|
770
|
+
defaultValue: defaultOpen != null ? String(defaultOpen) : void 0,
|
|
771
|
+
className: cn("w-full", className),
|
|
772
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(AccordionItem, { value: String(i), children: [
|
|
773
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
774
|
+
AccordionTrigger,
|
|
775
|
+
{
|
|
776
|
+
icon: "plusMinus",
|
|
777
|
+
className: "text-foreground text-base font-semibold",
|
|
778
|
+
children: item.q
|
|
779
|
+
}
|
|
780
|
+
),
|
|
781
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: "text-muted-foreground leading-relaxed", children: item.a })
|
|
782
|
+
] }, i))
|
|
783
|
+
}
|
|
784
|
+
);
|
|
785
|
+
}
|
|
786
|
+
function EmailCapture({
|
|
787
|
+
action,
|
|
788
|
+
method,
|
|
789
|
+
onSubmit,
|
|
790
|
+
name = "email",
|
|
791
|
+
placeholder = "you@email.com",
|
|
792
|
+
cta = "Join the waitlist",
|
|
793
|
+
note,
|
|
794
|
+
tone = "default",
|
|
795
|
+
className
|
|
796
|
+
}) {
|
|
797
|
+
const onBrand = tone === "onBrand";
|
|
798
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("form", { action, method, onSubmit, className: cn(className), children: [
|
|
799
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center", children: [
|
|
800
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
801
|
+
Input,
|
|
802
|
+
{
|
|
803
|
+
type: "email",
|
|
804
|
+
name,
|
|
805
|
+
required: true,
|
|
806
|
+
placeholder,
|
|
807
|
+
className: cn(
|
|
808
|
+
"rounded-full text-base md:text-sm",
|
|
809
|
+
onBrand && "[background:color-mix(in_oklch,white_18%,transparent)] placeholder:text-primary-foreground/60 border-transparent text-primary-foreground"
|
|
810
|
+
)
|
|
811
|
+
}
|
|
812
|
+
),
|
|
813
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", variant: onBrand ? "onBrand" : "default", className: "rounded-full", children: cta })
|
|
814
|
+
] }),
|
|
815
|
+
note && /* @__PURE__ */ jsxRuntime.jsx(
|
|
816
|
+
"p",
|
|
817
|
+
{
|
|
818
|
+
className: cn(
|
|
819
|
+
"mt-3 text-sm",
|
|
820
|
+
onBrand ? "text-primary-foreground/70" : "text-muted-foreground"
|
|
821
|
+
),
|
|
822
|
+
children: note
|
|
823
|
+
}
|
|
824
|
+
)
|
|
825
|
+
] });
|
|
826
|
+
}
|
|
827
|
+
function CheckList({
|
|
828
|
+
items,
|
|
829
|
+
orientation = "horizontal",
|
|
830
|
+
tone = "default",
|
|
831
|
+
className
|
|
832
|
+
}) {
|
|
833
|
+
const glyph = tone === "onBrand" ? "text-brand-foreground" : "text-primary";
|
|
834
|
+
const label = tone === "onBrand" ? "text-brand-foreground/90" : "text-foreground";
|
|
835
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
836
|
+
"ul",
|
|
837
|
+
{
|
|
838
|
+
className: cn(
|
|
839
|
+
orientation === "horizontal" ? "flex flex-wrap gap-x-6 gap-y-2 text-sm" : "flex flex-col gap-2 text-sm",
|
|
840
|
+
className
|
|
841
|
+
),
|
|
842
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("inline-flex items-center gap-2", label), children: [
|
|
843
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: cn("size-4 shrink-0", glyph) }),
|
|
844
|
+
item
|
|
845
|
+
] }, i))
|
|
846
|
+
}
|
|
847
|
+
);
|
|
848
|
+
}
|
|
849
|
+
function AccentNote({ lead, children, tone = "default", className }) {
|
|
850
|
+
const onBrand = tone === "onBrand";
|
|
851
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
852
|
+
"div",
|
|
853
|
+
{
|
|
854
|
+
className: cn(
|
|
855
|
+
"border-l-2 pl-4 text-sm leading-relaxed",
|
|
856
|
+
onBrand ? "border-primary-foreground/60 text-primary-foreground/80" : "border-primary text-muted-foreground",
|
|
857
|
+
className
|
|
858
|
+
),
|
|
859
|
+
children: [
|
|
860
|
+
lead && /* @__PURE__ */ jsxRuntime.jsx(
|
|
861
|
+
"strong",
|
|
862
|
+
{
|
|
863
|
+
className: cn(
|
|
864
|
+
"mr-1.5 font-semibold",
|
|
865
|
+
onBrand ? "text-primary-foreground" : "text-foreground"
|
|
866
|
+
),
|
|
867
|
+
children: lead
|
|
868
|
+
}
|
|
869
|
+
),
|
|
870
|
+
children
|
|
871
|
+
]
|
|
872
|
+
}
|
|
873
|
+
);
|
|
874
|
+
}
|
|
875
|
+
function AccentList({ items, className }) {
|
|
876
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col", className), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
877
|
+
"div",
|
|
878
|
+
{
|
|
879
|
+
className: cn("border-l-2 py-2 pl-5", item.active ? "border-primary" : "border-border"),
|
|
880
|
+
children: [
|
|
881
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
882
|
+
"div",
|
|
883
|
+
{
|
|
884
|
+
className: cn(
|
|
885
|
+
"font-semibold",
|
|
886
|
+
item.active ? "text-foreground" : "text-muted-foreground"
|
|
887
|
+
),
|
|
888
|
+
children: item.title
|
|
889
|
+
}
|
|
890
|
+
),
|
|
891
|
+
item.active && item.children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground mt-1 text-sm leading-relaxed", children: item.children })
|
|
892
|
+
]
|
|
893
|
+
},
|
|
894
|
+
i
|
|
895
|
+
)) });
|
|
896
|
+
}
|
|
897
|
+
function VerifiedChip({ icon, iconTone = "peach", label, className }) {
|
|
898
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
899
|
+
Surface,
|
|
900
|
+
{
|
|
901
|
+
elevation: "lg",
|
|
902
|
+
pad: "none",
|
|
903
|
+
className: cn("inline-flex items-center gap-3 rounded-full px-3 py-2", className),
|
|
904
|
+
children: [
|
|
905
|
+
/* @__PURE__ */ jsxRuntime.jsx(IconBadge, { tone: iconTone, size: "sm", children: icon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, {}) }),
|
|
906
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "pr-2 text-sm font-semibold text-foreground", children: label })
|
|
907
|
+
]
|
|
908
|
+
}
|
|
909
|
+
);
|
|
910
|
+
}
|
|
287
911
|
|
|
912
|
+
exports.AccentList = AccentList;
|
|
913
|
+
exports.AccentNote = AccentNote;
|
|
914
|
+
exports.BrandBand = BrandBand;
|
|
288
915
|
exports.Callout = Callout;
|
|
916
|
+
exports.CheckList = CheckList;
|
|
917
|
+
exports.ComparisonTable = ComparisonTable;
|
|
289
918
|
exports.DataRow = DataRow;
|
|
290
919
|
exports.DefinitionList = DefinitionList;
|
|
920
|
+
exports.EmailCapture = EmailCapture;
|
|
291
921
|
exports.EmptyState = EmptyState;
|
|
922
|
+
exports.Faq = Faq;
|
|
923
|
+
exports.FeatureCard = FeatureCard;
|
|
292
924
|
exports.HelpHint = HelpHint;
|
|
925
|
+
exports.MarketingHeading = MarketingHeading;
|
|
926
|
+
exports.NumberedStep = NumberedStep;
|
|
927
|
+
exports.Section = Section;
|
|
293
928
|
exports.SectionHeader = SectionHeader;
|
|
294
929
|
exports.StatCard = StatCard;
|
|
295
930
|
exports.StatGrid = StatGrid;
|
|
296
931
|
exports.StatTile = StatTile;
|
|
932
|
+
exports.StepList = StepList;
|
|
933
|
+
exports.TwoToneHeading = TwoToneHeading;
|
|
934
|
+
exports.VerifiedChip = VerifiedChip;
|
|
297
935
|
//# sourceMappingURL=composites.js.map
|
|
298
936
|
//# sourceMappingURL=composites.js.map
|