@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/components.js
CHANGED
|
@@ -6,10 +6,23 @@ var clsx = require('clsx');
|
|
|
6
6
|
var tailwindMerge = require('tailwind-merge');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
var Link6 = require('next/link');
|
|
9
|
-
var
|
|
9
|
+
var React2 = 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
|
+
var nextThemes = 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
|
var router = require('next/router');
|
|
11
25
|
var authClient = require('@orangecheck/auth-client');
|
|
12
|
-
var nextThemes = require('next-themes');
|
|
13
26
|
|
|
14
27
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
28
|
|
|
@@ -33,7 +46,8 @@ function _interopNamespace(e) {
|
|
|
33
46
|
|
|
34
47
|
var Popover__namespace = /*#__PURE__*/_interopNamespace(Popover);
|
|
35
48
|
var Link6__default = /*#__PURE__*/_interopDefault(Link6);
|
|
36
|
-
var
|
|
49
|
+
var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
|
|
50
|
+
var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
|
|
37
51
|
|
|
38
52
|
// src/composites/help-hint.tsx
|
|
39
53
|
function cn(...inputs) {
|
|
@@ -190,7 +204,7 @@ function StatTile({ children, ...item }) {
|
|
|
190
204
|
function StatBlock({ label, value, sub, delta, tone = "default", className }) {
|
|
191
205
|
const toneClass = tone === "success" ? "text-success" : tone === "warning" ? "text-warning" : tone === "destructive" ? "text-destructive" : "text-foreground";
|
|
192
206
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-1", className), children: [
|
|
193
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-mono text-[10px]", children: label }),
|
|
207
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-mono text-muted-foreground text-[10px]", children: label }),
|
|
194
208
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
195
209
|
"span",
|
|
196
210
|
{
|
|
@@ -262,7 +276,7 @@ function DefinitionList({ items, className }) {
|
|
|
262
276
|
"grid gap-x-5 gap-y-2 text-sm sm:grid-cols-[auto_1fr] sm:items-baseline",
|
|
263
277
|
className
|
|
264
278
|
),
|
|
265
|
-
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
279
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(React2.Fragment, { children: [
|
|
266
280
|
/* @__PURE__ */ jsxRuntime.jsx("dt", { className: "label-mono text-muted-foreground text-[10px]", children: item.label }),
|
|
267
281
|
/* @__PURE__ */ jsxRuntime.jsx("dd", { className: "text-foreground font-mono text-xs break-all", children: item.value })
|
|
268
282
|
] }, i))
|
|
@@ -288,6 +302,749 @@ function DataRow({ children, meta, action, as, className }) {
|
|
|
288
302
|
}
|
|
289
303
|
);
|
|
290
304
|
}
|
|
305
|
+
function TwoToneHeading({
|
|
306
|
+
lead,
|
|
307
|
+
muted,
|
|
308
|
+
as,
|
|
309
|
+
tone = "default",
|
|
310
|
+
className
|
|
311
|
+
}) {
|
|
312
|
+
const Tag = as ?? "h2";
|
|
313
|
+
const leadColor = tone === "onBrand" ? "text-primary-foreground" : "text-foreground";
|
|
314
|
+
const mutedColor = tone === "onBrand" ? "text-primary-foreground/60" : "text-foreground/40";
|
|
315
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
316
|
+
Tag,
|
|
317
|
+
{
|
|
318
|
+
className: cn(
|
|
319
|
+
"font-extrabold tracking-[-0.02em] leading-[1.0] text-balance",
|
|
320
|
+
"text-3xl sm:text-4xl md:text-5xl",
|
|
321
|
+
leadColor,
|
|
322
|
+
className
|
|
323
|
+
),
|
|
324
|
+
children: [
|
|
325
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: lead }),
|
|
326
|
+
muted ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: mutedColor, children: [
|
|
327
|
+
" ",
|
|
328
|
+
muted
|
|
329
|
+
] }) : null
|
|
330
|
+
]
|
|
331
|
+
}
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
function MarketingHeading({
|
|
335
|
+
eyebrow,
|
|
336
|
+
lead,
|
|
337
|
+
muted,
|
|
338
|
+
body,
|
|
339
|
+
align = "start",
|
|
340
|
+
tone = "default",
|
|
341
|
+
as,
|
|
342
|
+
className
|
|
343
|
+
}) {
|
|
344
|
+
const centered = align === "center";
|
|
345
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col", centered && "items-center text-center", className), children: [
|
|
346
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
347
|
+
"p",
|
|
348
|
+
{
|
|
349
|
+
className: cn(
|
|
350
|
+
"label-mono mb-3",
|
|
351
|
+
tone === "onBrand" ? "text-primary-foreground/80" : "text-primary"
|
|
352
|
+
),
|
|
353
|
+
children: eyebrow
|
|
354
|
+
}
|
|
355
|
+
),
|
|
356
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
357
|
+
TwoToneHeading,
|
|
358
|
+
{
|
|
359
|
+
lead,
|
|
360
|
+
muted,
|
|
361
|
+
as,
|
|
362
|
+
tone,
|
|
363
|
+
className: cn("max-w-4xl", centered && "mx-auto")
|
|
364
|
+
}
|
|
365
|
+
),
|
|
366
|
+
body && /* @__PURE__ */ jsxRuntime.jsx(
|
|
367
|
+
"p",
|
|
368
|
+
{
|
|
369
|
+
className: cn(
|
|
370
|
+
"mt-4 max-w-2xl text-base sm:text-lg",
|
|
371
|
+
tone === "onBrand" ? "text-primary-foreground/80" : "text-muted-foreground",
|
|
372
|
+
centered && "mx-auto"
|
|
373
|
+
),
|
|
374
|
+
children: body
|
|
375
|
+
}
|
|
376
|
+
)
|
|
377
|
+
] });
|
|
378
|
+
}
|
|
379
|
+
var buttonVariants = classVarianceAuthority.cva(
|
|
380
|
+
"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",
|
|
381
|
+
{
|
|
382
|
+
variants: {
|
|
383
|
+
variant: {
|
|
384
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
385
|
+
destructive: "bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white",
|
|
386
|
+
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",
|
|
387
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
388
|
+
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
389
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
390
|
+
// For CTAs placed ON a saturated brand band or a dark section
|
|
391
|
+
// (e.g. a terracotta hero / footer / a forced-dark block) where
|
|
392
|
+
// the surface is dark+light-text in either mode. A neutral white
|
|
393
|
+
// pill + a translucent-white ghost read on any such surface;
|
|
394
|
+
// hardcoded white is deliberate (cf. destructive's text-white).
|
|
395
|
+
onBrand: "bg-white text-neutral-900 shadow-sm hover:bg-white/90",
|
|
396
|
+
onBrandOutline: "border border-white/40 bg-transparent text-white hover:bg-white/10"
|
|
397
|
+
},
|
|
398
|
+
size: {
|
|
399
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
400
|
+
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
|
401
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
402
|
+
icon: "size-9"
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
defaultVariants: {
|
|
406
|
+
variant: "default",
|
|
407
|
+
size: "default"
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
);
|
|
411
|
+
function Button({
|
|
412
|
+
className,
|
|
413
|
+
variant,
|
|
414
|
+
size,
|
|
415
|
+
asChild = false,
|
|
416
|
+
...props
|
|
417
|
+
}) {
|
|
418
|
+
const Comp = asChild ? reactSlot.Slot : "button";
|
|
419
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
420
|
+
Comp,
|
|
421
|
+
{
|
|
422
|
+
"data-slot": "button",
|
|
423
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
424
|
+
...props
|
|
425
|
+
}
|
|
426
|
+
);
|
|
427
|
+
}
|
|
428
|
+
classVarianceAuthority.cva(
|
|
429
|
+
"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",
|
|
430
|
+
{
|
|
431
|
+
variants: {
|
|
432
|
+
variant: {
|
|
433
|
+
default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent",
|
|
434
|
+
secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent",
|
|
435
|
+
destructive: "bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90 border-transparent",
|
|
436
|
+
warning: "bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent",
|
|
437
|
+
success: "bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent",
|
|
438
|
+
info: "bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent",
|
|
439
|
+
brand: "bg-brand-soft text-accent-foreground border-transparent",
|
|
440
|
+
neutral: "bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent",
|
|
441
|
+
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
defaultVariants: { variant: "default" }
|
|
445
|
+
}
|
|
446
|
+
);
|
|
447
|
+
function Input({ className, type, ...props }) {
|
|
448
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
449
|
+
"input",
|
|
450
|
+
{
|
|
451
|
+
type,
|
|
452
|
+
"data-slot": "input",
|
|
453
|
+
className: cn(
|
|
454
|
+
"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",
|
|
455
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
456
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
457
|
+
className
|
|
458
|
+
),
|
|
459
|
+
...props
|
|
460
|
+
}
|
|
461
|
+
);
|
|
462
|
+
}
|
|
463
|
+
classVarianceAuthority.cva(
|
|
464
|
+
"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",
|
|
465
|
+
{
|
|
466
|
+
variants: {
|
|
467
|
+
variant: {
|
|
468
|
+
default: "bg-card text-card-foreground",
|
|
469
|
+
destructive: "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90",
|
|
470
|
+
success: "text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90",
|
|
471
|
+
warning: "text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90"
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
defaultVariants: { variant: "default" }
|
|
475
|
+
}
|
|
476
|
+
);
|
|
477
|
+
globalThis.process?.env?.NODE_ENV;
|
|
478
|
+
globalThis.process?.env?.NODE_ENV;
|
|
479
|
+
var TOOLTIP_SURFACE_CLASS = "bg-popover text-popover-foreground border-border rounded-md border p-2.5 shadow-md";
|
|
480
|
+
var TOOLTIP_MOTION_CLASS = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 origin-(--radix-popover-content-transform-origin) duration-150 ease-out";
|
|
481
|
+
function compose(theirs, ours) {
|
|
482
|
+
return (e) => {
|
|
483
|
+
theirs?.(e);
|
|
484
|
+
ours(e);
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
var lastInputWasKeyboard = false;
|
|
488
|
+
var modalityInstalled = false;
|
|
489
|
+
function installModalityTracking() {
|
|
490
|
+
if (modalityInstalled || typeof window === "undefined") return;
|
|
491
|
+
modalityInstalled = true;
|
|
492
|
+
window.addEventListener("keydown", () => lastInputWasKeyboard = true, true);
|
|
493
|
+
window.addEventListener("pointerdown", () => lastInputWasKeyboard = false, true);
|
|
494
|
+
}
|
|
495
|
+
function Tooltip({
|
|
496
|
+
content,
|
|
497
|
+
children,
|
|
498
|
+
side = "bottom",
|
|
499
|
+
align = "start",
|
|
500
|
+
sideOffset = 8,
|
|
501
|
+
collisionPadding = 12,
|
|
502
|
+
openDelay = 300,
|
|
503
|
+
closeDelay = 90,
|
|
504
|
+
disabled = false,
|
|
505
|
+
portal = true,
|
|
506
|
+
zIndexClassName = "z-50",
|
|
507
|
+
contentClassName
|
|
508
|
+
}) {
|
|
509
|
+
const [hovering, setHovering] = React2__namespace.useState(false);
|
|
510
|
+
const [focusing, setFocusing] = React2__namespace.useState(false);
|
|
511
|
+
const [isFinePointer, setIsFinePointer] = React2__namespace.useState(false);
|
|
512
|
+
const openTimer = React2__namespace.useRef(null);
|
|
513
|
+
const closeTimer = React2__namespace.useRef(null);
|
|
514
|
+
React2__namespace.useEffect(() => {
|
|
515
|
+
installModalityTracking();
|
|
516
|
+
const mq = window.matchMedia("(hover: hover) and (pointer: fine)");
|
|
517
|
+
const apply = () => setIsFinePointer(mq.matches);
|
|
518
|
+
apply();
|
|
519
|
+
mq.addEventListener("change", apply);
|
|
520
|
+
return () => mq.removeEventListener("change", apply);
|
|
521
|
+
}, []);
|
|
522
|
+
const clearTimers = React2__namespace.useCallback(() => {
|
|
523
|
+
if (openTimer.current) clearTimeout(openTimer.current);
|
|
524
|
+
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
525
|
+
}, []);
|
|
526
|
+
React2__namespace.useEffect(() => clearTimers, [clearTimers]);
|
|
527
|
+
React2__namespace.useEffect(() => {
|
|
528
|
+
if (disabled) {
|
|
529
|
+
clearTimers();
|
|
530
|
+
setHovering(false);
|
|
531
|
+
}
|
|
532
|
+
}, [disabled, clearTimers]);
|
|
533
|
+
const handlePointerEnter = () => {
|
|
534
|
+
if (!isFinePointer) return;
|
|
535
|
+
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
536
|
+
openTimer.current = setTimeout(() => setHovering(true), openDelay);
|
|
537
|
+
};
|
|
538
|
+
const handlePointerLeave = () => {
|
|
539
|
+
if (openTimer.current) clearTimeout(openTimer.current);
|
|
540
|
+
closeTimer.current = setTimeout(() => setHovering(false), closeDelay);
|
|
541
|
+
};
|
|
542
|
+
const handlePointerDown = () => {
|
|
543
|
+
clearTimers();
|
|
544
|
+
setHovering(false);
|
|
545
|
+
setFocusing(false);
|
|
546
|
+
};
|
|
547
|
+
const handleFocus = () => {
|
|
548
|
+
if (lastInputWasKeyboard) {
|
|
549
|
+
clearTimers();
|
|
550
|
+
setFocusing(true);
|
|
551
|
+
}
|
|
552
|
+
};
|
|
553
|
+
const handleBlur = () => {
|
|
554
|
+
clearTimers();
|
|
555
|
+
setFocusing(false);
|
|
556
|
+
};
|
|
557
|
+
const handleKeyDown = (e) => {
|
|
558
|
+
if (e.key === "Escape") {
|
|
559
|
+
clearTimers();
|
|
560
|
+
setHovering(false);
|
|
561
|
+
setFocusing(false);
|
|
562
|
+
}
|
|
563
|
+
};
|
|
564
|
+
const effectiveOpen = !disabled && (isFinePointer && hovering || focusing);
|
|
565
|
+
const extra = {};
|
|
566
|
+
const childProps = children.props;
|
|
567
|
+
extra.onPointerEnter = compose(childProps.onPointerEnter, handlePointerEnter);
|
|
568
|
+
extra.onPointerLeave = compose(childProps.onPointerLeave, handlePointerLeave);
|
|
569
|
+
extra.onPointerDown = compose(childProps.onPointerDown, handlePointerDown);
|
|
570
|
+
extra.onFocus = compose(childProps.onFocus, handleFocus);
|
|
571
|
+
extra.onBlur = compose(childProps.onBlur, handleBlur);
|
|
572
|
+
extra.onKeyDown = compose(childProps.onKeyDown, handleKeyDown);
|
|
573
|
+
const trigger = React2__namespace.cloneElement(children, extra);
|
|
574
|
+
const contentEl = /* @__PURE__ */ jsxRuntime.jsx(
|
|
575
|
+
Popover__namespace.Content,
|
|
576
|
+
{
|
|
577
|
+
side,
|
|
578
|
+
align,
|
|
579
|
+
sideOffset,
|
|
580
|
+
collisionPadding,
|
|
581
|
+
"aria-hidden": true,
|
|
582
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
583
|
+
onCloseAutoFocus: (e) => e.preventDefault(),
|
|
584
|
+
onFocusOutside: (e) => e.preventDefault(),
|
|
585
|
+
className: cn(
|
|
586
|
+
TOOLTIP_SURFACE_CLASS,
|
|
587
|
+
TOOLTIP_MOTION_CLASS,
|
|
588
|
+
"pointer-events-none",
|
|
589
|
+
zIndexClassName,
|
|
590
|
+
contentClassName
|
|
591
|
+
),
|
|
592
|
+
children: content
|
|
593
|
+
}
|
|
594
|
+
);
|
|
595
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
596
|
+
Popover__namespace.Root,
|
|
597
|
+
{
|
|
598
|
+
open: effectiveOpen,
|
|
599
|
+
onOpenChange: (o) => {
|
|
600
|
+
if (!o) {
|
|
601
|
+
clearTimers();
|
|
602
|
+
setHovering(false);
|
|
603
|
+
setFocusing(false);
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
modal: false,
|
|
607
|
+
children: [
|
|
608
|
+
/* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Anchor, { asChild: true, children: trigger }),
|
|
609
|
+
portal ? /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Portal, { children: contentEl }) : contentEl
|
|
610
|
+
]
|
|
611
|
+
}
|
|
612
|
+
);
|
|
613
|
+
}
|
|
614
|
+
var Accordion = AccordionPrimitive__namespace.Root;
|
|
615
|
+
var AccordionItem = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Item, { ref, className: cn("border-b", className), ...props }));
|
|
616
|
+
AccordionItem.displayName = "AccordionItem";
|
|
617
|
+
var AccordionTrigger = React2__namespace.forwardRef(({ className, children, icon = "chevron", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
618
|
+
AccordionPrimitive__namespace.Trigger,
|
|
619
|
+
{
|
|
620
|
+
ref,
|
|
621
|
+
className: cn(
|
|
622
|
+
"flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline",
|
|
623
|
+
icon === "chevron" ? "[&[data-state=open]>svg]:rotate-180" : "[&[data-state=open]>svg]:rotate-45",
|
|
624
|
+
className
|
|
625
|
+
),
|
|
626
|
+
...props,
|
|
627
|
+
children: [
|
|
628
|
+
children,
|
|
629
|
+
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" })
|
|
630
|
+
]
|
|
631
|
+
}
|
|
632
|
+
) }));
|
|
633
|
+
AccordionTrigger.displayName = AccordionPrimitive__namespace.Trigger.displayName;
|
|
634
|
+
var AccordionContent = React2__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
635
|
+
AccordionPrimitive__namespace.Content,
|
|
636
|
+
{
|
|
637
|
+
ref,
|
|
638
|
+
className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all",
|
|
639
|
+
...props,
|
|
640
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pt-0 pb-4", className), children })
|
|
641
|
+
}
|
|
642
|
+
));
|
|
643
|
+
AccordionContent.displayName = AccordionPrimitive__namespace.Content.displayName;
|
|
644
|
+
var surfaceVariants = classVarianceAuthority.cva("rounded-xl transition-colors", {
|
|
645
|
+
variants: {
|
|
646
|
+
tone: {
|
|
647
|
+
/* Crisp panel floating on the page — the default soft card. */
|
|
648
|
+
default: "bg-card text-card-foreground",
|
|
649
|
+
/* Warm-gray recessed panel. */
|
|
650
|
+
muted: "bg-muted text-foreground",
|
|
651
|
+
/* Solid brand fill — small terracotta panel; inverts child text. */
|
|
652
|
+
brand: "bg-brand text-brand-foreground",
|
|
653
|
+
/* High-contrast neutral panel (near-black in light, near-white in dark). */
|
|
654
|
+
contrast: "bg-foreground text-background",
|
|
655
|
+
/* Translucent lightened tile for cards sitting ON a brand band. */
|
|
656
|
+
onBrand: "text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]",
|
|
657
|
+
/* Frame only, transparent fill. */
|
|
658
|
+
outline: "bg-transparent text-foreground"
|
|
659
|
+
},
|
|
660
|
+
elevation: {
|
|
661
|
+
none: "shadow-none",
|
|
662
|
+
sm: "shadow-sm",
|
|
663
|
+
md: "shadow-md",
|
|
664
|
+
lg: "shadow-lg",
|
|
665
|
+
xl: "shadow-xl"
|
|
666
|
+
},
|
|
667
|
+
bordered: {
|
|
668
|
+
true: "border",
|
|
669
|
+
false: ""
|
|
670
|
+
},
|
|
671
|
+
pad: {
|
|
672
|
+
none: "p-0",
|
|
673
|
+
sm: "p-4",
|
|
674
|
+
md: "p-5 sm:p-6",
|
|
675
|
+
lg: "p-6 sm:p-8"
|
|
676
|
+
}
|
|
677
|
+
},
|
|
678
|
+
defaultVariants: {
|
|
679
|
+
tone: "default",
|
|
680
|
+
elevation: "sm",
|
|
681
|
+
bordered: true,
|
|
682
|
+
pad: "md"
|
|
683
|
+
}
|
|
684
|
+
});
|
|
685
|
+
function Surface({
|
|
686
|
+
className,
|
|
687
|
+
tone,
|
|
688
|
+
elevation,
|
|
689
|
+
bordered,
|
|
690
|
+
pad,
|
|
691
|
+
...props
|
|
692
|
+
}) {
|
|
693
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
694
|
+
"div",
|
|
695
|
+
{
|
|
696
|
+
"data-slot": "surface",
|
|
697
|
+
className: cn(surfaceVariants({ tone, elevation, bordered, pad }), className),
|
|
698
|
+
...props
|
|
699
|
+
}
|
|
700
|
+
);
|
|
701
|
+
}
|
|
702
|
+
var iconBadgeVariants = classVarianceAuthority.cva(
|
|
703
|
+
"inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none",
|
|
704
|
+
{
|
|
705
|
+
variants: {
|
|
706
|
+
tone: {
|
|
707
|
+
/* The signature peach tile — soft accent fill, terracotta glyph.
|
|
708
|
+
Auto-swaps to warm-dark + light-peach in dark mode via tokens. */
|
|
709
|
+
peach: "bg-accent text-accent-foreground",
|
|
710
|
+
/* Inverted near-black tile, light glyph ("never do" promises). */
|
|
711
|
+
dark: "bg-foreground text-background",
|
|
712
|
+
/* Solid brand tile. */
|
|
713
|
+
brand: "bg-primary text-primary-foreground",
|
|
714
|
+
/* White tile on a brand band, terracotta glyph (numbered steps). */
|
|
715
|
+
onBrand: "bg-brand-foreground text-primary",
|
|
716
|
+
/* Quiet neutral tile. */
|
|
717
|
+
muted: "bg-muted text-foreground",
|
|
718
|
+
/* Crisp white (card-colored) tile with a terracotta glyph and a
|
|
719
|
+
soft lift — the elevated icon chip on muted/colored cards. */
|
|
720
|
+
surface: "bg-card text-primary shadow-sm"
|
|
721
|
+
},
|
|
722
|
+
size: {
|
|
723
|
+
sm: "size-9 text-xs [&_svg]:size-4",
|
|
724
|
+
md: "size-11 text-sm [&_svg]:size-5",
|
|
725
|
+
lg: "size-12 text-base [&_svg]:size-6",
|
|
726
|
+
xl: "size-14 text-lg [&_svg]:size-7"
|
|
727
|
+
}
|
|
728
|
+
},
|
|
729
|
+
defaultVariants: { tone: "peach", size: "md" }
|
|
730
|
+
}
|
|
731
|
+
);
|
|
732
|
+
function IconBadge({ className, tone, size, children, ...props }) {
|
|
733
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
734
|
+
"span",
|
|
735
|
+
{
|
|
736
|
+
"data-slot": "icon-badge",
|
|
737
|
+
className: cn(iconBadgeVariants({ tone, size }), className),
|
|
738
|
+
...props,
|
|
739
|
+
children
|
|
740
|
+
}
|
|
741
|
+
);
|
|
742
|
+
}
|
|
743
|
+
function FeatureCard({
|
|
744
|
+
icon,
|
|
745
|
+
iconTone = "peach",
|
|
746
|
+
title,
|
|
747
|
+
children,
|
|
748
|
+
orientation = "vertical",
|
|
749
|
+
align = "start",
|
|
750
|
+
tone = "default",
|
|
751
|
+
elevation = "sm",
|
|
752
|
+
className
|
|
753
|
+
}) {
|
|
754
|
+
const horizontal = orientation === "horizontal";
|
|
755
|
+
const centered = !horizontal && align === "center";
|
|
756
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
757
|
+
Surface,
|
|
758
|
+
{
|
|
759
|
+
tone,
|
|
760
|
+
elevation,
|
|
761
|
+
pad: horizontal ? "md" : "lg",
|
|
762
|
+
className: cn(
|
|
763
|
+
"flex h-full",
|
|
764
|
+
horizontal ? "flex-row gap-4" : "flex-col",
|
|
765
|
+
centered && "items-center text-center",
|
|
766
|
+
className
|
|
767
|
+
),
|
|
768
|
+
children: [
|
|
769
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
770
|
+
IconBadge,
|
|
771
|
+
{
|
|
772
|
+
tone: iconTone,
|
|
773
|
+
size: "lg",
|
|
774
|
+
className: cn(horizontal ? "shrink-0" : "mb-4"),
|
|
775
|
+
children: icon
|
|
776
|
+
}
|
|
777
|
+
),
|
|
778
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(horizontal && "min-w-0"), children: [
|
|
779
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold", children: title }),
|
|
780
|
+
children && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mt-1.5 text-sm leading-relaxed", children })
|
|
781
|
+
] })
|
|
782
|
+
]
|
|
783
|
+
}
|
|
784
|
+
);
|
|
785
|
+
}
|
|
786
|
+
var TONE = {
|
|
787
|
+
default: "bg-background text-foreground",
|
|
788
|
+
muted: "bg-muted text-foreground",
|
|
789
|
+
brand: "bg-brand text-brand-foreground",
|
|
790
|
+
// `dark` activates the .dark variant locally so descendant package
|
|
791
|
+
// components render their dark arm even on an otherwise light page.
|
|
792
|
+
dark: "dark bg-background text-foreground"
|
|
793
|
+
};
|
|
794
|
+
var WIDTH = {
|
|
795
|
+
default: "container",
|
|
796
|
+
wide: "mx-auto w-full max-w-screen-2xl px-4 sm:px-6 lg:px-8",
|
|
797
|
+
full: ""
|
|
798
|
+
};
|
|
799
|
+
function Section({
|
|
800
|
+
tone = "default",
|
|
801
|
+
width = "default",
|
|
802
|
+
diagonal,
|
|
803
|
+
id,
|
|
804
|
+
className,
|
|
805
|
+
innerClassName,
|
|
806
|
+
children
|
|
807
|
+
}) {
|
|
808
|
+
const showDiagonal = diagonal ?? tone === "brand";
|
|
809
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
810
|
+
"div",
|
|
811
|
+
{
|
|
812
|
+
id,
|
|
813
|
+
className: cn("w-full", TONE[tone], showDiagonal && "oc-diagonal", className),
|
|
814
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("py-16 sm:py-20 md:py-24", WIDTH[width], innerClassName), children })
|
|
815
|
+
}
|
|
816
|
+
);
|
|
817
|
+
}
|
|
818
|
+
function BrandBand(props) {
|
|
819
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Section, { tone: "brand", ...props });
|
|
820
|
+
}
|
|
821
|
+
function ComparisonTable({ rows, columns, className }) {
|
|
822
|
+
const cols = { feature: "", theirs: "A normal login", ours: "OrangeCheck", ...columns };
|
|
823
|
+
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: [
|
|
824
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1.4fr_1fr_1fr]", children: [
|
|
825
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "label-mono text-muted-foreground px-4 py-3.5 sm:px-6", children: cols.feature }),
|
|
826
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-3.5 font-semibold text-foreground sm:px-6", children: cols.theirs }),
|
|
827
|
+
/* @__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 })
|
|
828
|
+
] }),
|
|
829
|
+
rows.map((row, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1.4fr_1fr_1fr] border-t", children: [
|
|
830
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-3.5 font-medium text-foreground sm:px-6", children: row.label }),
|
|
831
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-muted-foreground flex items-center gap-2 px-4 py-3.5 sm:px-6", children: [
|
|
832
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "text-muted-foreground/70 size-4" }),
|
|
833
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: row.theirs })
|
|
834
|
+
] }),
|
|
835
|
+
/* @__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: [
|
|
836
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-4 text-primary" }),
|
|
837
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: row.ours })
|
|
838
|
+
] })
|
|
839
|
+
] }, i))
|
|
840
|
+
] }) }) });
|
|
841
|
+
}
|
|
842
|
+
function NumberedStep({
|
|
843
|
+
n,
|
|
844
|
+
title,
|
|
845
|
+
children,
|
|
846
|
+
tone = "default",
|
|
847
|
+
card = false,
|
|
848
|
+
className
|
|
849
|
+
}) {
|
|
850
|
+
const onBrand = tone === "onBrand";
|
|
851
|
+
const body = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(!card && className), children: [
|
|
852
|
+
/* @__PURE__ */ jsxRuntime.jsx(IconBadge, { tone: onBrand ? "onBrand" : "peach", size: "sm", children: n }),
|
|
853
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-lg font-semibold", children: title }),
|
|
854
|
+
children && /* @__PURE__ */ jsxRuntime.jsx(
|
|
855
|
+
"div",
|
|
856
|
+
{
|
|
857
|
+
className: cn(
|
|
858
|
+
"mt-1.5 text-sm leading-relaxed",
|
|
859
|
+
onBrand ? "text-brand-foreground/80" : "text-muted-foreground"
|
|
860
|
+
),
|
|
861
|
+
children
|
|
862
|
+
}
|
|
863
|
+
)
|
|
864
|
+
] });
|
|
865
|
+
if (!card) return body;
|
|
866
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
867
|
+
Surface,
|
|
868
|
+
{
|
|
869
|
+
tone: onBrand ? "onBrand" : "default",
|
|
870
|
+
elevation: onBrand ? "none" : "sm",
|
|
871
|
+
pad: "md",
|
|
872
|
+
className,
|
|
873
|
+
children: body
|
|
874
|
+
}
|
|
875
|
+
);
|
|
876
|
+
}
|
|
877
|
+
var COLUMNS = {
|
|
878
|
+
2: "md:grid-cols-2",
|
|
879
|
+
3: "md:grid-cols-3",
|
|
880
|
+
4: "md:grid-cols-4"
|
|
881
|
+
};
|
|
882
|
+
function StepList({
|
|
883
|
+
steps,
|
|
884
|
+
variant = "bare",
|
|
885
|
+
tone = "default",
|
|
886
|
+
columns = 3,
|
|
887
|
+
className
|
|
888
|
+
}) {
|
|
889
|
+
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(
|
|
890
|
+
NumberedStep,
|
|
891
|
+
{
|
|
892
|
+
n: index + 1,
|
|
893
|
+
title: step.title,
|
|
894
|
+
tone,
|
|
895
|
+
card: variant === "card",
|
|
896
|
+
children: step.children
|
|
897
|
+
},
|
|
898
|
+
index
|
|
899
|
+
)) });
|
|
900
|
+
}
|
|
901
|
+
function Faq({ items, defaultOpen, className }) {
|
|
902
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
903
|
+
Accordion,
|
|
904
|
+
{
|
|
905
|
+
type: "single",
|
|
906
|
+
collapsible: true,
|
|
907
|
+
defaultValue: defaultOpen != null ? String(defaultOpen) : void 0,
|
|
908
|
+
className: cn("w-full", className),
|
|
909
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(AccordionItem, { value: String(i), children: [
|
|
910
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
911
|
+
AccordionTrigger,
|
|
912
|
+
{
|
|
913
|
+
icon: "plusMinus",
|
|
914
|
+
className: "text-foreground text-base font-semibold",
|
|
915
|
+
children: item.q
|
|
916
|
+
}
|
|
917
|
+
),
|
|
918
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: "text-muted-foreground leading-relaxed", children: item.a })
|
|
919
|
+
] }, i))
|
|
920
|
+
}
|
|
921
|
+
);
|
|
922
|
+
}
|
|
923
|
+
function EmailCapture({
|
|
924
|
+
action,
|
|
925
|
+
method,
|
|
926
|
+
onSubmit,
|
|
927
|
+
name = "email",
|
|
928
|
+
placeholder = "you@email.com",
|
|
929
|
+
cta = "Join the waitlist",
|
|
930
|
+
note,
|
|
931
|
+
tone = "default",
|
|
932
|
+
className
|
|
933
|
+
}) {
|
|
934
|
+
const onBrand = tone === "onBrand";
|
|
935
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("form", { action, method, onSubmit, className: cn(className), children: [
|
|
936
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center", children: [
|
|
937
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
938
|
+
Input,
|
|
939
|
+
{
|
|
940
|
+
type: "email",
|
|
941
|
+
name,
|
|
942
|
+
required: true,
|
|
943
|
+
placeholder,
|
|
944
|
+
className: cn(
|
|
945
|
+
"rounded-full text-base md:text-sm",
|
|
946
|
+
onBrand && "[background:color-mix(in_oklch,white_18%,transparent)] placeholder:text-primary-foreground/60 border-transparent text-primary-foreground"
|
|
947
|
+
)
|
|
948
|
+
}
|
|
949
|
+
),
|
|
950
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", variant: onBrand ? "onBrand" : "default", className: "rounded-full", children: cta })
|
|
951
|
+
] }),
|
|
952
|
+
note && /* @__PURE__ */ jsxRuntime.jsx(
|
|
953
|
+
"p",
|
|
954
|
+
{
|
|
955
|
+
className: cn(
|
|
956
|
+
"mt-3 text-sm",
|
|
957
|
+
onBrand ? "text-primary-foreground/70" : "text-muted-foreground"
|
|
958
|
+
),
|
|
959
|
+
children: note
|
|
960
|
+
}
|
|
961
|
+
)
|
|
962
|
+
] });
|
|
963
|
+
}
|
|
964
|
+
function CheckList({
|
|
965
|
+
items,
|
|
966
|
+
orientation = "horizontal",
|
|
967
|
+
tone = "default",
|
|
968
|
+
className
|
|
969
|
+
}) {
|
|
970
|
+
const glyph = tone === "onBrand" ? "text-brand-foreground" : "text-primary";
|
|
971
|
+
const label = tone === "onBrand" ? "text-brand-foreground/90" : "text-foreground";
|
|
972
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
973
|
+
"ul",
|
|
974
|
+
{
|
|
975
|
+
className: cn(
|
|
976
|
+
orientation === "horizontal" ? "flex flex-wrap gap-x-6 gap-y-2 text-sm" : "flex flex-col gap-2 text-sm",
|
|
977
|
+
className
|
|
978
|
+
),
|
|
979
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("inline-flex items-center gap-2", label), children: [
|
|
980
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: cn("size-4 shrink-0", glyph) }),
|
|
981
|
+
item
|
|
982
|
+
] }, i))
|
|
983
|
+
}
|
|
984
|
+
);
|
|
985
|
+
}
|
|
986
|
+
function AccentNote({ lead, children, tone = "default", className }) {
|
|
987
|
+
const onBrand = tone === "onBrand";
|
|
988
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
989
|
+
"div",
|
|
990
|
+
{
|
|
991
|
+
className: cn(
|
|
992
|
+
"border-l-2 pl-4 text-sm leading-relaxed",
|
|
993
|
+
onBrand ? "border-primary-foreground/60 text-primary-foreground/80" : "border-primary text-muted-foreground",
|
|
994
|
+
className
|
|
995
|
+
),
|
|
996
|
+
children: [
|
|
997
|
+
lead && /* @__PURE__ */ jsxRuntime.jsx(
|
|
998
|
+
"strong",
|
|
999
|
+
{
|
|
1000
|
+
className: cn(
|
|
1001
|
+
"mr-1.5 font-semibold",
|
|
1002
|
+
onBrand ? "text-primary-foreground" : "text-foreground"
|
|
1003
|
+
),
|
|
1004
|
+
children: lead
|
|
1005
|
+
}
|
|
1006
|
+
),
|
|
1007
|
+
children
|
|
1008
|
+
]
|
|
1009
|
+
}
|
|
1010
|
+
);
|
|
1011
|
+
}
|
|
1012
|
+
function AccentList({ items, className }) {
|
|
1013
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col", className), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1014
|
+
"div",
|
|
1015
|
+
{
|
|
1016
|
+
className: cn("border-l-2 py-2 pl-5", item.active ? "border-primary" : "border-border"),
|
|
1017
|
+
children: [
|
|
1018
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1019
|
+
"div",
|
|
1020
|
+
{
|
|
1021
|
+
className: cn(
|
|
1022
|
+
"font-semibold",
|
|
1023
|
+
item.active ? "text-foreground" : "text-muted-foreground"
|
|
1024
|
+
),
|
|
1025
|
+
children: item.title
|
|
1026
|
+
}
|
|
1027
|
+
),
|
|
1028
|
+
item.active && item.children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground mt-1 text-sm leading-relaxed", children: item.children })
|
|
1029
|
+
]
|
|
1030
|
+
},
|
|
1031
|
+
i
|
|
1032
|
+
)) });
|
|
1033
|
+
}
|
|
1034
|
+
function VerifiedChip({ icon, iconTone = "peach", label, className }) {
|
|
1035
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1036
|
+
Surface,
|
|
1037
|
+
{
|
|
1038
|
+
elevation: "lg",
|
|
1039
|
+
pad: "none",
|
|
1040
|
+
className: cn("inline-flex items-center gap-3 rounded-full px-3 py-2", className),
|
|
1041
|
+
children: [
|
|
1042
|
+
/* @__PURE__ */ jsxRuntime.jsx(IconBadge, { tone: iconTone, size: "sm", children: icon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, {}) }),
|
|
1043
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "pr-2 text-sm font-semibold text-foreground", children: label })
|
|
1044
|
+
]
|
|
1045
|
+
}
|
|
1046
|
+
);
|
|
1047
|
+
}
|
|
291
1048
|
var ENTRIES = [
|
|
292
1049
|
{
|
|
293
1050
|
slug: "home",
|
|
@@ -324,6 +1081,13 @@ var ENTRIES = [
|
|
|
324
1081
|
sub: "message \u2014 encrypted chat",
|
|
325
1082
|
docsHref: "https://docs.ochk.io/chat"
|
|
326
1083
|
},
|
|
1084
|
+
{
|
|
1085
|
+
slug: "cosign",
|
|
1086
|
+
href: "https://cosign.ochk.io",
|
|
1087
|
+
label: "oc\xB7cosign",
|
|
1088
|
+
sub: "cofound \u2014 get behind builders",
|
|
1089
|
+
docsHref: "https://docs.ochk.io/cosign"
|
|
1090
|
+
},
|
|
327
1091
|
{
|
|
328
1092
|
slug: "attest",
|
|
329
1093
|
href: "https://attest.ochk.io",
|
|
@@ -402,9 +1166,9 @@ function EcosystemSwitcher({
|
|
|
402
1166
|
className,
|
|
403
1167
|
showOwnerEntries = false
|
|
404
1168
|
}) {
|
|
405
|
-
const [open, setOpen] =
|
|
406
|
-
const containerRef =
|
|
407
|
-
|
|
1169
|
+
const [open, setOpen] = React2.useState(false);
|
|
1170
|
+
const containerRef = React2.useRef(null);
|
|
1171
|
+
React2.useEffect(() => {
|
|
408
1172
|
if (!open) return;
|
|
409
1173
|
function onDoc(e) {
|
|
410
1174
|
if (!containerRef.current) return;
|
|
@@ -487,141 +1251,6 @@ function EcosystemSwitcher({
|
|
|
487
1251
|
)
|
|
488
1252
|
] });
|
|
489
1253
|
}
|
|
490
|
-
var TOOLTIP_SURFACE_CLASS = "bg-popover text-popover-foreground border-border rounded-md border p-2.5 shadow-md";
|
|
491
|
-
var TOOLTIP_MOTION_CLASS = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 origin-(--radix-popover-content-transform-origin) duration-150 ease-out";
|
|
492
|
-
function compose(theirs, ours) {
|
|
493
|
-
return (e) => {
|
|
494
|
-
theirs?.(e);
|
|
495
|
-
ours(e);
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
var lastInputWasKeyboard = false;
|
|
499
|
-
var modalityInstalled = false;
|
|
500
|
-
function installModalityTracking() {
|
|
501
|
-
if (modalityInstalled || typeof window === "undefined") return;
|
|
502
|
-
modalityInstalled = true;
|
|
503
|
-
window.addEventListener("keydown", () => lastInputWasKeyboard = true, true);
|
|
504
|
-
window.addEventListener("pointerdown", () => lastInputWasKeyboard = false, true);
|
|
505
|
-
}
|
|
506
|
-
function Tooltip({
|
|
507
|
-
content,
|
|
508
|
-
children,
|
|
509
|
-
side = "bottom",
|
|
510
|
-
align = "start",
|
|
511
|
-
sideOffset = 8,
|
|
512
|
-
collisionPadding = 12,
|
|
513
|
-
openDelay = 300,
|
|
514
|
-
closeDelay = 90,
|
|
515
|
-
disabled = false,
|
|
516
|
-
portal = true,
|
|
517
|
-
zIndexClassName = "z-50",
|
|
518
|
-
contentClassName
|
|
519
|
-
}) {
|
|
520
|
-
const [hovering, setHovering] = React__namespace.useState(false);
|
|
521
|
-
const [focusing, setFocusing] = React__namespace.useState(false);
|
|
522
|
-
const [isFinePointer, setIsFinePointer] = React__namespace.useState(false);
|
|
523
|
-
const openTimer = React__namespace.useRef(null);
|
|
524
|
-
const closeTimer = React__namespace.useRef(null);
|
|
525
|
-
React__namespace.useEffect(() => {
|
|
526
|
-
installModalityTracking();
|
|
527
|
-
const mq = window.matchMedia("(hover: hover) and (pointer: fine)");
|
|
528
|
-
const apply = () => setIsFinePointer(mq.matches);
|
|
529
|
-
apply();
|
|
530
|
-
mq.addEventListener("change", apply);
|
|
531
|
-
return () => mq.removeEventListener("change", apply);
|
|
532
|
-
}, []);
|
|
533
|
-
const clearTimers = React__namespace.useCallback(() => {
|
|
534
|
-
if (openTimer.current) clearTimeout(openTimer.current);
|
|
535
|
-
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
536
|
-
}, []);
|
|
537
|
-
React__namespace.useEffect(() => clearTimers, [clearTimers]);
|
|
538
|
-
React__namespace.useEffect(() => {
|
|
539
|
-
if (disabled) {
|
|
540
|
-
clearTimers();
|
|
541
|
-
setHovering(false);
|
|
542
|
-
}
|
|
543
|
-
}, [disabled, clearTimers]);
|
|
544
|
-
const handlePointerEnter = () => {
|
|
545
|
-
if (!isFinePointer) return;
|
|
546
|
-
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
547
|
-
openTimer.current = setTimeout(() => setHovering(true), openDelay);
|
|
548
|
-
};
|
|
549
|
-
const handlePointerLeave = () => {
|
|
550
|
-
if (openTimer.current) clearTimeout(openTimer.current);
|
|
551
|
-
closeTimer.current = setTimeout(() => setHovering(false), closeDelay);
|
|
552
|
-
};
|
|
553
|
-
const handlePointerDown = () => {
|
|
554
|
-
clearTimers();
|
|
555
|
-
setHovering(false);
|
|
556
|
-
setFocusing(false);
|
|
557
|
-
};
|
|
558
|
-
const handleFocus = () => {
|
|
559
|
-
if (lastInputWasKeyboard) {
|
|
560
|
-
clearTimers();
|
|
561
|
-
setFocusing(true);
|
|
562
|
-
}
|
|
563
|
-
};
|
|
564
|
-
const handleBlur = () => {
|
|
565
|
-
clearTimers();
|
|
566
|
-
setFocusing(false);
|
|
567
|
-
};
|
|
568
|
-
const handleKeyDown = (e) => {
|
|
569
|
-
if (e.key === "Escape") {
|
|
570
|
-
clearTimers();
|
|
571
|
-
setHovering(false);
|
|
572
|
-
setFocusing(false);
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
|
-
const effectiveOpen = !disabled && (isFinePointer && hovering || focusing);
|
|
576
|
-
const extra = {};
|
|
577
|
-
const childProps = children.props;
|
|
578
|
-
extra.onPointerEnter = compose(childProps.onPointerEnter, handlePointerEnter);
|
|
579
|
-
extra.onPointerLeave = compose(childProps.onPointerLeave, handlePointerLeave);
|
|
580
|
-
extra.onPointerDown = compose(childProps.onPointerDown, handlePointerDown);
|
|
581
|
-
extra.onFocus = compose(childProps.onFocus, handleFocus);
|
|
582
|
-
extra.onBlur = compose(childProps.onBlur, handleBlur);
|
|
583
|
-
extra.onKeyDown = compose(childProps.onKeyDown, handleKeyDown);
|
|
584
|
-
const trigger = React__namespace.cloneElement(children, extra);
|
|
585
|
-
const contentEl = /* @__PURE__ */ jsxRuntime.jsx(
|
|
586
|
-
Popover__namespace.Content,
|
|
587
|
-
{
|
|
588
|
-
side,
|
|
589
|
-
align,
|
|
590
|
-
sideOffset,
|
|
591
|
-
collisionPadding,
|
|
592
|
-
"aria-hidden": true,
|
|
593
|
-
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
594
|
-
onCloseAutoFocus: (e) => e.preventDefault(),
|
|
595
|
-
onFocusOutside: (e) => e.preventDefault(),
|
|
596
|
-
className: cn(
|
|
597
|
-
TOOLTIP_SURFACE_CLASS,
|
|
598
|
-
TOOLTIP_MOTION_CLASS,
|
|
599
|
-
"pointer-events-none",
|
|
600
|
-
zIndexClassName,
|
|
601
|
-
contentClassName
|
|
602
|
-
),
|
|
603
|
-
children: content
|
|
604
|
-
}
|
|
605
|
-
);
|
|
606
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
607
|
-
Popover__namespace.Root,
|
|
608
|
-
{
|
|
609
|
-
open: effectiveOpen,
|
|
610
|
-
onOpenChange: (o) => {
|
|
611
|
-
if (!o) {
|
|
612
|
-
clearTimers();
|
|
613
|
-
setHovering(false);
|
|
614
|
-
setFocusing(false);
|
|
615
|
-
}
|
|
616
|
-
},
|
|
617
|
-
modal: false,
|
|
618
|
-
children: [
|
|
619
|
-
/* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Anchor, { asChild: true, children: trigger }),
|
|
620
|
-
portal ? /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Portal, { children: contentEl }) : contentEl
|
|
621
|
-
]
|
|
622
|
-
}
|
|
623
|
-
);
|
|
624
|
-
}
|
|
625
1254
|
|
|
626
1255
|
// src/chrome/family-properties.ts
|
|
627
1256
|
var FAMILY_PROPERTIES = [
|
|
@@ -670,6 +1299,15 @@ var FAMILY_PROPERTIES = [
|
|
|
670
1299
|
docsHref: "https://docs.ochk.io/chat",
|
|
671
1300
|
category: "product"
|
|
672
1301
|
},
|
|
1302
|
+
{
|
|
1303
|
+
slug: "cosign",
|
|
1304
|
+
origin: "https://cosign.ochk.io",
|
|
1305
|
+
hostname: "cosign.ochk.io",
|
|
1306
|
+
label: "oc\xB7cosign",
|
|
1307
|
+
sub: "cofound \u2014 get behind builders",
|
|
1308
|
+
docsHref: "https://docs.ochk.io/cosign",
|
|
1309
|
+
category: "product"
|
|
1310
|
+
},
|
|
673
1311
|
{
|
|
674
1312
|
slug: "attest",
|
|
675
1313
|
origin: "https://attest.ochk.io",
|
|
@@ -848,9 +1486,9 @@ function OcLogoDropdown({
|
|
|
848
1486
|
popoverClassName,
|
|
849
1487
|
showOwnerEntries = false
|
|
850
1488
|
}) {
|
|
851
|
-
const [open, setOpen] =
|
|
852
|
-
const containerRef =
|
|
853
|
-
const menuId =
|
|
1489
|
+
const [open, setOpen] = React2.useState(false);
|
|
1490
|
+
const containerRef = React2.useRef(null);
|
|
1491
|
+
const menuId = React2.useId();
|
|
854
1492
|
const router$1 = router.useRouter();
|
|
855
1493
|
const currentCategory = findFamilyProperty(current)?.category ?? "hub";
|
|
856
1494
|
function handleTriggerClick(e) {
|
|
@@ -862,7 +1500,7 @@ function OcLogoDropdown({
|
|
|
862
1500
|
}
|
|
863
1501
|
setOpen((v) => !v);
|
|
864
1502
|
}
|
|
865
|
-
|
|
1503
|
+
React2.useEffect(() => {
|
|
866
1504
|
if (!open) return;
|
|
867
1505
|
function onDoc(e) {
|
|
868
1506
|
if (!containerRef.current) return;
|
|
@@ -1026,9 +1664,9 @@ function OcLogoDropdown({
|
|
|
1026
1664
|
}
|
|
1027
1665
|
);
|
|
1028
1666
|
}
|
|
1029
|
-
var OcSkinContext =
|
|
1667
|
+
var OcSkinContext = React2.createContext(null);
|
|
1030
1668
|
function useOcSkin() {
|
|
1031
|
-
const ctx =
|
|
1669
|
+
const ctx = React2.useContext(OcSkinContext);
|
|
1032
1670
|
if (!ctx) {
|
|
1033
1671
|
throw new Error("useOcSkin must be used within <OcThemeProvider>");
|
|
1034
1672
|
}
|
|
@@ -1042,12 +1680,12 @@ var MODES = [
|
|
|
1042
1680
|
function AppearanceControls({ className }) {
|
|
1043
1681
|
const { skin, setSkin, themes } = useOcSkin();
|
|
1044
1682
|
const { theme, setTheme } = nextThemes.useTheme();
|
|
1045
|
-
const [mounted, setMounted] =
|
|
1046
|
-
|
|
1683
|
+
const [mounted, setMounted] = React2.useState(false);
|
|
1684
|
+
React2.useEffect(() => setMounted(true), []);
|
|
1047
1685
|
const activeMode = mounted ? theme ?? "system" : null;
|
|
1048
1686
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
|
|
1049
1687
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "label-mono text-muted-foreground px-3 pt-3 pb-2", children: "mode" }),
|
|
1050
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1 px-2 pb-2", children: MODES.map(({ id, label, Icon }) => {
|
|
1688
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1 px-2 pb-2", children: MODES.map(({ id, label, Icon: Icon2 }) => {
|
|
1051
1689
|
const active = activeMode === id;
|
|
1052
1690
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1053
1691
|
"button",
|
|
@@ -1061,7 +1699,7 @@ function AppearanceControls({ className }) {
|
|
|
1061
1699
|
active ? "border-primary text-foreground bg-accent" : "border-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground"
|
|
1062
1700
|
),
|
|
1063
1701
|
children: [
|
|
1064
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1702
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon2, { className: "size-4", "aria-hidden": true }),
|
|
1065
1703
|
label
|
|
1066
1704
|
]
|
|
1067
1705
|
},
|
|
@@ -1131,9 +1769,9 @@ async function writeClipboard(text) {
|
|
|
1131
1769
|
}
|
|
1132
1770
|
}
|
|
1133
1771
|
function CopyableDid({ did }) {
|
|
1134
|
-
const [copied, setCopied] =
|
|
1135
|
-
const timerRef =
|
|
1136
|
-
|
|
1772
|
+
const [copied, setCopied] = React2.useState(false);
|
|
1773
|
+
const timerRef = React2.useRef(null);
|
|
1774
|
+
React2.useEffect(
|
|
1137
1775
|
() => () => {
|
|
1138
1776
|
if (timerRef.current) clearTimeout(timerRef.current);
|
|
1139
1777
|
},
|
|
@@ -1179,9 +1817,9 @@ function PromoteRow({
|
|
|
1179
1817
|
disabled,
|
|
1180
1818
|
onPromote
|
|
1181
1819
|
}) {
|
|
1182
|
-
const [copied, setCopied] =
|
|
1183
|
-
const timerRef =
|
|
1184
|
-
|
|
1820
|
+
const [copied, setCopied] = React2.useState(false);
|
|
1821
|
+
const timerRef = React2.useRef(null);
|
|
1822
|
+
React2.useEffect(
|
|
1185
1823
|
() => () => {
|
|
1186
1824
|
if (timerRef.current) clearTimeout(timerRef.current);
|
|
1187
1825
|
},
|
|
@@ -1252,12 +1890,12 @@ function IdentityPromoteSection({
|
|
|
1252
1890
|
open,
|
|
1253
1891
|
setDisplayIdentity
|
|
1254
1892
|
}) {
|
|
1255
|
-
const [identities, setIdentities] =
|
|
1256
|
-
const [loadFailed, setLoadFailed] =
|
|
1257
|
-
const [promoting, setPromoting] =
|
|
1258
|
-
const [promoteErr, setPromoteErr] =
|
|
1259
|
-
const lastFetchKeyRef =
|
|
1260
|
-
|
|
1893
|
+
const [identities, setIdentities] = React2.useState(null);
|
|
1894
|
+
const [loadFailed, setLoadFailed] = React2.useState(false);
|
|
1895
|
+
const [promoting, setPromoting] = React2.useState(null);
|
|
1896
|
+
const [promoteErr, setPromoteErr] = React2.useState(null);
|
|
1897
|
+
const lastFetchKeyRef = React2.useRef(null);
|
|
1898
|
+
React2.useEffect(() => {
|
|
1261
1899
|
if (!open) return;
|
|
1262
1900
|
if (lastFetchKeyRef.current === didOc) return;
|
|
1263
1901
|
lastFetchKeyRef.current = didOc;
|
|
@@ -1348,9 +1986,9 @@ function MobileMenu({
|
|
|
1348
1986
|
primary,
|
|
1349
1987
|
secondary
|
|
1350
1988
|
}) {
|
|
1351
|
-
const [open, setOpen] =
|
|
1352
|
-
const ref =
|
|
1353
|
-
|
|
1989
|
+
const [open, setOpen] = React2.useState(false);
|
|
1990
|
+
const ref = React2.useRef(null);
|
|
1991
|
+
React2.useEffect(() => {
|
|
1354
1992
|
if (!open) return;
|
|
1355
1993
|
const onClick = (e) => {
|
|
1356
1994
|
if (ref.current && !ref.current.contains(e.target)) setOpen(false);
|
|
@@ -1457,15 +2095,15 @@ function OcAccountMenuView({
|
|
|
1457
2095
|
addAccountUrl,
|
|
1458
2096
|
tabPinned
|
|
1459
2097
|
} = session;
|
|
1460
|
-
const [hydrated, setHydrated] =
|
|
1461
|
-
const [open, setOpen] =
|
|
1462
|
-
const wrapRef =
|
|
2098
|
+
const [hydrated, setHydrated] = React2.useState(false);
|
|
2099
|
+
const [open, setOpen] = React2.useState(false);
|
|
2100
|
+
const wrapRef = React2.useRef(null);
|
|
1463
2101
|
const property = findFamilyProperty(current);
|
|
1464
2102
|
const hostname = property?.hostname ?? `${current}.ochk.io`;
|
|
1465
2103
|
const isHome = current === "home";
|
|
1466
2104
|
const familyDashboardEnabled = showFamilyDashboard ?? !isHome;
|
|
1467
|
-
|
|
1468
|
-
|
|
2105
|
+
React2.useEffect(() => setHydrated(true), []);
|
|
2106
|
+
React2.useEffect(() => {
|
|
1469
2107
|
const onWake = () => {
|
|
1470
2108
|
if (document.visibilityState === "visible") void refresh();
|
|
1471
2109
|
};
|
|
@@ -1477,7 +2115,7 @@ function OcAccountMenuView({
|
|
|
1477
2115
|
window.removeEventListener("focus", onFocus);
|
|
1478
2116
|
};
|
|
1479
2117
|
}, [refresh]);
|
|
1480
|
-
|
|
2118
|
+
React2.useEffect(() => {
|
|
1481
2119
|
if (!open) return;
|
|
1482
2120
|
const onClick = (e) => {
|
|
1483
2121
|
if (wrapRef.current && !wrapRef.current.contains(e.target)) setOpen(false);
|
|
@@ -1725,8 +2363,8 @@ function AccountsSection({
|
|
|
1725
2363
|
signOut,
|
|
1726
2364
|
onActionStart
|
|
1727
2365
|
}) {
|
|
1728
|
-
const [switching, setSwitching] =
|
|
1729
|
-
const [err, setErr] =
|
|
2366
|
+
const [switching, setSwitching] = React2.useState(null);
|
|
2367
|
+
const [err, setErr] = React2.useState(null);
|
|
1730
2368
|
if (!addAccountUrl) return null;
|
|
1731
2369
|
const onSwitch = async (didOc) => {
|
|
1732
2370
|
if (!switchAccount || switching) return;
|
|
@@ -1989,8 +2627,8 @@ function OcDashboardShell({
|
|
|
1989
2627
|
children,
|
|
1990
2628
|
className
|
|
1991
2629
|
}) {
|
|
1992
|
-
const [drawerOpen, setDrawerOpen] =
|
|
1993
|
-
|
|
2630
|
+
const [drawerOpen, setDrawerOpen] = React2.useState(false);
|
|
2631
|
+
React2.useEffect(() => {
|
|
1994
2632
|
if (!drawerOpen) return;
|
|
1995
2633
|
function onKey(e) {
|
|
1996
2634
|
if (e.key === "Escape") setDrawerOpen(false);
|
|
@@ -2320,15 +2958,25 @@ function OcAppBar({
|
|
|
2320
2958
|
);
|
|
2321
2959
|
}
|
|
2322
2960
|
|
|
2961
|
+
exports.AccentList = AccentList;
|
|
2962
|
+
exports.AccentNote = AccentNote;
|
|
2323
2963
|
exports.AppShell = AppShell;
|
|
2964
|
+
exports.BrandBand = BrandBand;
|
|
2324
2965
|
exports.Callout = Callout;
|
|
2966
|
+
exports.CheckList = CheckList;
|
|
2967
|
+
exports.ComparisonTable = ComparisonTable;
|
|
2325
2968
|
exports.DataRow = DataRow;
|
|
2326
2969
|
exports.DefinitionList = DefinitionList;
|
|
2327
2970
|
exports.EcosystemSwitcher = EcosystemSwitcher;
|
|
2971
|
+
exports.EmailCapture = EmailCapture;
|
|
2328
2972
|
exports.EmptyState = EmptyState;
|
|
2329
2973
|
exports.FAMILY_PROPERTIES = FAMILY_PROPERTIES;
|
|
2974
|
+
exports.Faq = Faq;
|
|
2975
|
+
exports.FeatureCard = FeatureCard;
|
|
2330
2976
|
exports.HelpHint = HelpHint;
|
|
2331
2977
|
exports.LayoutSubHeader = LayoutSubHeader;
|
|
2978
|
+
exports.MarketingHeading = MarketingHeading;
|
|
2979
|
+
exports.NumberedStep = NumberedStep;
|
|
2332
2980
|
exports.OcAccountMenu = OcAccountMenu;
|
|
2333
2981
|
exports.OcAccountMenuView = OcAccountMenuView;
|
|
2334
2982
|
exports.OcAppBar = OcAppBar;
|
|
@@ -2337,10 +2985,14 @@ exports.OcDashboardShell = OcDashboardShell;
|
|
|
2337
2985
|
exports.OcLogoDropdown = OcLogoDropdown;
|
|
2338
2986
|
exports.OcPrimaryNav = OcPrimaryNav;
|
|
2339
2987
|
exports.SITE_STATE_LABEL = SITE_STATE_LABEL;
|
|
2988
|
+
exports.Section = Section;
|
|
2340
2989
|
exports.SectionHeader = SectionHeader;
|
|
2341
2990
|
exports.StatCard = StatCard;
|
|
2342
2991
|
exports.StatGrid = StatGrid;
|
|
2343
2992
|
exports.StatTile = StatTile;
|
|
2993
|
+
exports.StepList = StepList;
|
|
2994
|
+
exports.TwoToneHeading = TwoToneHeading;
|
|
2995
|
+
exports.VerifiedChip = VerifiedChip;
|
|
2344
2996
|
exports.findFamilyProperty = findFamilyProperty;
|
|
2345
2997
|
//# sourceMappingURL=components.js.map
|
|
2346
2998
|
//# sourceMappingURL=components.js.map
|