@opensite/ui 3.2.6 → 3.2.8
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/about-developer-story.cjs +7 -1
- package/dist/about-developer-story.js +7 -1
- package/dist/badge.d.cts +1 -1
- package/dist/badge.d.ts +1 -1
- package/dist/hero-overlay-cta-grid.cjs +82 -19
- package/dist/hero-overlay-cta-grid.d.cts +8 -13
- package/dist/hero-overlay-cta-grid.d.ts +8 -13
- package/dist/hero-overlay-cta-grid.js +83 -20
- package/dist/process-expandable-timeline.cjs +1 -2
- package/dist/process-expandable-timeline.js +1 -2
- package/dist/process-icon-timeline.cjs +9 -99
- package/dist/process-icon-timeline.d.cts +3 -3
- package/dist/process-icon-timeline.d.ts +3 -3
- package/dist/process-icon-timeline.js +9 -99
- package/dist/process-mission-principles.cjs +5 -67
- package/dist/process-mission-principles.d.cts +3 -3
- package/dist/process-mission-principles.d.ts +3 -3
- package/dist/process-mission-principles.js +5 -67
- package/dist/process-numbered-services.cjs +23 -117
- package/dist/process-numbered-services.d.cts +3 -3
- package/dist/process-numbered-services.d.ts +3 -3
- package/dist/process-numbered-services.js +23 -117
- package/dist/process-scroll-image.cjs +20 -85
- package/dist/process-scroll-image.d.cts +3 -11
- package/dist/process-scroll-image.d.ts +3 -11
- package/dist/process-scroll-image.js +18 -83
- package/dist/process-steps-grid.cjs +31 -99
- package/dist/process-steps-grid.d.cts +3 -3
- package/dist/process-steps-grid.d.ts +3 -3
- package/dist/process-steps-grid.js +31 -99
- package/dist/process-sticky-steps.cjs +90 -76
- package/dist/process-sticky-steps.d.cts +9 -1
- package/dist/process-sticky-steps.d.ts +9 -1
- package/dist/process-sticky-steps.js +90 -76
- package/dist/registry.cjs +128 -182
- package/dist/registry.js +128 -182
- package/package.json +1 -1
|
@@ -643,7 +643,13 @@ function AboutDeveloperStory({
|
|
|
643
643
|
containerClassName,
|
|
644
644
|
children: [
|
|
645
645
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto flex max-w-4xl flex-col items-center gap-8 text-center", children: [
|
|
646
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
646
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
647
|
+
ContentGroup,
|
|
648
|
+
{
|
|
649
|
+
items: contentItems,
|
|
650
|
+
className: "flex flex-col justify-center items-center gap-6"
|
|
651
|
+
}
|
|
652
|
+
),
|
|
647
653
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
648
654
|
BlockActions,
|
|
649
655
|
{
|
|
@@ -622,7 +622,13 @@ function AboutDeveloperStory({
|
|
|
622
622
|
containerClassName,
|
|
623
623
|
children: [
|
|
624
624
|
/* @__PURE__ */ jsxs("div", { className: "mx-auto flex max-w-4xl flex-col items-center gap-8 text-center", children: [
|
|
625
|
-
/* @__PURE__ */ jsx(
|
|
625
|
+
/* @__PURE__ */ jsx(
|
|
626
|
+
ContentGroup,
|
|
627
|
+
{
|
|
628
|
+
items: contentItems,
|
|
629
|
+
className: "flex flex-col justify-center items-center gap-6"
|
|
630
|
+
}
|
|
631
|
+
),
|
|
626
632
|
/* @__PURE__ */ jsx(
|
|
627
633
|
BlockActions,
|
|
628
634
|
{
|
package/dist/badge.d.cts
CHANGED
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
7
|
+
variant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
|
|
10
10
|
asChild?: boolean;
|
package/dist/badge.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
7
|
+
variant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
|
|
10
10
|
asChild?: boolean;
|
|
@@ -418,6 +418,70 @@ var Section = React__namespace.default.forwardRef(
|
|
|
418
418
|
}
|
|
419
419
|
);
|
|
420
420
|
Section.displayName = "Section";
|
|
421
|
+
var MOBILE_CLASSES = {
|
|
422
|
+
"fit-left": "items-start md:items-center",
|
|
423
|
+
"fit-center": "items-center",
|
|
424
|
+
"fit-right": "items-end md:items-center",
|
|
425
|
+
"full-left": "items-stretch md:items-center",
|
|
426
|
+
"full-center": "items-stretch md:items-center",
|
|
427
|
+
"full-right": "items-stretch md:items-center"
|
|
428
|
+
};
|
|
429
|
+
function BlockActions({
|
|
430
|
+
mobileConfig,
|
|
431
|
+
actionsClassName,
|
|
432
|
+
verticalSpacing = "mt-4 md:mt-8",
|
|
433
|
+
actions,
|
|
434
|
+
actionsSlot
|
|
435
|
+
}) {
|
|
436
|
+
const width = mobileConfig?.width ?? "full";
|
|
437
|
+
const position = mobileConfig?.position ?? "center";
|
|
438
|
+
const mobileLayoutClass = MOBILE_CLASSES[`${width}-${position}`];
|
|
439
|
+
if (actionsSlot) {
|
|
440
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: actionsSlot });
|
|
441
|
+
} else if (actions && actions?.length > 0) {
|
|
442
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
443
|
+
"div",
|
|
444
|
+
{
|
|
445
|
+
className: cn(
|
|
446
|
+
"flex flex-col md:flex-row flex-wrap gap-4",
|
|
447
|
+
mobileLayoutClass,
|
|
448
|
+
actionsClassName,
|
|
449
|
+
verticalSpacing
|
|
450
|
+
),
|
|
451
|
+
children: actions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsx(ActionComponent, { action }, index))
|
|
452
|
+
}
|
|
453
|
+
);
|
|
454
|
+
} else {
|
|
455
|
+
return null;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
function ActionComponent({ action }) {
|
|
459
|
+
const {
|
|
460
|
+
label,
|
|
461
|
+
icon,
|
|
462
|
+
iconAfter,
|
|
463
|
+
children,
|
|
464
|
+
href,
|
|
465
|
+
onClick,
|
|
466
|
+
className: actionClassName,
|
|
467
|
+
...pressableProps
|
|
468
|
+
} = action;
|
|
469
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
470
|
+
pressable.Pressable,
|
|
471
|
+
{
|
|
472
|
+
href,
|
|
473
|
+
onClick,
|
|
474
|
+
asButton: action.asButton ?? true,
|
|
475
|
+
className: actionClassName,
|
|
476
|
+
...pressableProps,
|
|
477
|
+
children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
478
|
+
icon,
|
|
479
|
+
label,
|
|
480
|
+
iconAfter
|
|
481
|
+
] })
|
|
482
|
+
}
|
|
483
|
+
);
|
|
484
|
+
}
|
|
421
485
|
function HeroOverlayCtaGrid({
|
|
422
486
|
sectionId = "hero-overlay-cta-grid",
|
|
423
487
|
badgeText,
|
|
@@ -425,9 +489,9 @@ function HeroOverlayCtaGrid({
|
|
|
425
489
|
badgeSlot,
|
|
426
490
|
heading,
|
|
427
491
|
description,
|
|
428
|
-
|
|
429
|
-
secondaryCta,
|
|
492
|
+
actions,
|
|
430
493
|
actionsSlot,
|
|
494
|
+
actionsClassName,
|
|
431
495
|
cards,
|
|
432
496
|
cardsSlot,
|
|
433
497
|
backgroundImage,
|
|
@@ -452,24 +516,16 @@ function HeroOverlayCtaGrid({
|
|
|
452
516
|
badgeText
|
|
453
517
|
] });
|
|
454
518
|
}, [badgeSlot, badgeText, badgeIcon]);
|
|
455
|
-
const renderActions = React.useMemo(() => {
|
|
456
|
-
if (actionsSlot) return actionsSlot;
|
|
457
|
-
if (!primaryCta && !secondaryCta) return null;
|
|
458
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 flex flex-col items-center justify-center gap-4 sm:flex-row", children: [
|
|
459
|
-
primaryCta && /* @__PURE__ */ jsxRuntime.jsx(pressable.Pressable, { href: primaryCta.href, size: "lg", variant: "default", children: primaryCta.label }),
|
|
460
|
-
secondaryCta && /* @__PURE__ */ jsxRuntime.jsx(pressable.Pressable, { href: secondaryCta.href, size: "lg", variant: "secondary", children: secondaryCta.label })
|
|
461
|
-
] });
|
|
462
|
-
}, [actionsSlot, primaryCta, secondaryCta]);
|
|
463
519
|
const renderCards = React.useMemo(() => {
|
|
464
520
|
if (cardsSlot) return cardsSlot;
|
|
465
521
|
if (!cards || cards.length === 0) return null;
|
|
466
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto w-full max-w-6xl overflow-hidden rounded-3xl border border-border bg-
|
|
522
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto w-full max-w-6xl overflow-hidden rounded-3xl border border-border bg-card shadow-2xl px-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 divide-y divide-border md:grid-cols-3 md:divide-x md:divide-y-0", children: cards.map((card) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
467
523
|
pressable.Pressable,
|
|
468
524
|
{
|
|
469
525
|
href: card.href,
|
|
470
526
|
className: "group flex items-center gap-4 px-6 py-6 transition-colors",
|
|
471
527
|
children: [
|
|
472
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
528
|
+
card.icon ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
473
529
|
"div",
|
|
474
530
|
{
|
|
475
531
|
className: cn(
|
|
@@ -477,19 +533,19 @@ function HeroOverlayCtaGrid({
|
|
|
477
533
|
),
|
|
478
534
|
children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: card.icon, size: 22 })
|
|
479
535
|
}
|
|
480
|
-
),
|
|
536
|
+
) : null,
|
|
481
537
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
482
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-semibold ", children: card.label }),
|
|
483
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-
|
|
538
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-semibold text-card-foreground", children: card.label }),
|
|
539
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-card-foreground"), children: card.subtitle })
|
|
484
540
|
] }),
|
|
485
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
541
|
+
card.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
486
542
|
DynamicIcon,
|
|
487
543
|
{
|
|
488
544
|
name: "lucide/arrow-right",
|
|
489
545
|
size: 18,
|
|
490
|
-
className: cn("ml-auto flex-none text-
|
|
546
|
+
className: cn("ml-auto flex-none text-card-foreground")
|
|
491
547
|
}
|
|
492
|
-
)
|
|
548
|
+
) : null
|
|
493
549
|
]
|
|
494
550
|
},
|
|
495
551
|
card.label
|
|
@@ -574,7 +630,14 @@ function HeroOverlayCtaGrid({
|
|
|
574
630
|
children: description
|
|
575
631
|
}
|
|
576
632
|
)),
|
|
577
|
-
|
|
633
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
634
|
+
BlockActions,
|
|
635
|
+
{
|
|
636
|
+
actions,
|
|
637
|
+
actionsSlot,
|
|
638
|
+
actionsClassName
|
|
639
|
+
}
|
|
640
|
+
)
|
|
578
641
|
]
|
|
579
642
|
}
|
|
580
643
|
),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-B4p2JldF.cjs';
|
|
3
|
+
import { ActionConfig } from '@page-speed/maps/components/geo-map';
|
|
3
4
|
import './blocks-DCvdF54D.cjs';
|
|
4
5
|
import 'class-variance-authority';
|
|
5
6
|
import '@page-speed/pressable';
|
|
@@ -46,23 +47,17 @@ interface HeroOverlayCtaGridProps {
|
|
|
46
47
|
*/
|
|
47
48
|
description?: React.ReactNode;
|
|
48
49
|
/**
|
|
49
|
-
*
|
|
50
|
+
* Array of action configurations
|
|
50
51
|
*/
|
|
51
|
-
|
|
52
|
-
label: string;
|
|
53
|
-
href: string;
|
|
54
|
-
};
|
|
52
|
+
actions?: ActionConfig[];
|
|
55
53
|
/**
|
|
56
|
-
*
|
|
54
|
+
* Custom slot for rendering actions (overrides actions array)
|
|
57
55
|
*/
|
|
58
|
-
|
|
59
|
-
label: string;
|
|
60
|
-
href: string;
|
|
61
|
-
};
|
|
56
|
+
actionsSlot?: React.ReactNode;
|
|
62
57
|
/**
|
|
63
|
-
*
|
|
58
|
+
* Additional CSS classes for the actions container
|
|
64
59
|
*/
|
|
65
|
-
|
|
60
|
+
actionsClassName?: string;
|
|
66
61
|
/**
|
|
67
62
|
* CTA cards displayed beneath the hero copy
|
|
68
63
|
*/
|
|
@@ -134,6 +129,6 @@ interface HeroOverlayCtaGridProps {
|
|
|
134
129
|
* and a supporting grid of icon cards. Ideal for service-focused landing pages that
|
|
135
130
|
* need a strong hero statement plus quick navigation to top offerings.
|
|
136
131
|
*/
|
|
137
|
-
declare function HeroOverlayCtaGrid({ sectionId, badgeText, badgeIcon, badgeSlot, heading, description,
|
|
132
|
+
declare function HeroOverlayCtaGrid({ sectionId, badgeText, badgeIcon, badgeSlot, heading, description, actions, actionsSlot, actionsClassName, cards, cardsSlot, backgroundImage, backgroundAlt, backgroundSlot, background, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, optixFlowConfig, }: HeroOverlayCtaGridProps): React.JSX.Element;
|
|
138
133
|
|
|
139
134
|
export { HeroOverlayCtaGrid, type HeroOverlayCtaGridProps };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives--8cXayNa.js';
|
|
3
|
+
import { ActionConfig } from '@page-speed/maps/components/geo-map';
|
|
3
4
|
import './blocks-DCvdF54D.js';
|
|
4
5
|
import 'class-variance-authority';
|
|
5
6
|
import '@page-speed/pressable';
|
|
@@ -46,23 +47,17 @@ interface HeroOverlayCtaGridProps {
|
|
|
46
47
|
*/
|
|
47
48
|
description?: React.ReactNode;
|
|
48
49
|
/**
|
|
49
|
-
*
|
|
50
|
+
* Array of action configurations
|
|
50
51
|
*/
|
|
51
|
-
|
|
52
|
-
label: string;
|
|
53
|
-
href: string;
|
|
54
|
-
};
|
|
52
|
+
actions?: ActionConfig[];
|
|
55
53
|
/**
|
|
56
|
-
*
|
|
54
|
+
* Custom slot for rendering actions (overrides actions array)
|
|
57
55
|
*/
|
|
58
|
-
|
|
59
|
-
label: string;
|
|
60
|
-
href: string;
|
|
61
|
-
};
|
|
56
|
+
actionsSlot?: React.ReactNode;
|
|
62
57
|
/**
|
|
63
|
-
*
|
|
58
|
+
* Additional CSS classes for the actions container
|
|
64
59
|
*/
|
|
65
|
-
|
|
60
|
+
actionsClassName?: string;
|
|
66
61
|
/**
|
|
67
62
|
* CTA cards displayed beneath the hero copy
|
|
68
63
|
*/
|
|
@@ -134,6 +129,6 @@ interface HeroOverlayCtaGridProps {
|
|
|
134
129
|
* and a supporting grid of icon cards. Ideal for service-focused landing pages that
|
|
135
130
|
* need a strong hero statement plus quick navigation to top offerings.
|
|
136
131
|
*/
|
|
137
|
-
declare function HeroOverlayCtaGrid({ sectionId, badgeText, badgeIcon, badgeSlot, heading, description,
|
|
132
|
+
declare function HeroOverlayCtaGrid({ sectionId, badgeText, badgeIcon, badgeSlot, heading, description, actions, actionsSlot, actionsClassName, cards, cardsSlot, backgroundImage, backgroundAlt, backgroundSlot, background, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, optixFlowConfig, }: HeroOverlayCtaGridProps): React.JSX.Element;
|
|
138
133
|
|
|
139
134
|
export { HeroOverlayCtaGrid, type HeroOverlayCtaGridProps };
|
|
@@ -6,7 +6,7 @@ import { clsx } from 'clsx';
|
|
|
6
6
|
import { twMerge } from 'tailwind-merge';
|
|
7
7
|
import { Img } from '@page-speed/img';
|
|
8
8
|
import { Icon } from '@page-speed/icon';
|
|
9
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
9
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
10
10
|
import { Pressable } from '@page-speed/pressable';
|
|
11
11
|
|
|
12
12
|
// components/blocks/hero/hero-overlay-cta-grid.tsx
|
|
@@ -397,6 +397,70 @@ var Section = React__default.forwardRef(
|
|
|
397
397
|
}
|
|
398
398
|
);
|
|
399
399
|
Section.displayName = "Section";
|
|
400
|
+
var MOBILE_CLASSES = {
|
|
401
|
+
"fit-left": "items-start md:items-center",
|
|
402
|
+
"fit-center": "items-center",
|
|
403
|
+
"fit-right": "items-end md:items-center",
|
|
404
|
+
"full-left": "items-stretch md:items-center",
|
|
405
|
+
"full-center": "items-stretch md:items-center",
|
|
406
|
+
"full-right": "items-stretch md:items-center"
|
|
407
|
+
};
|
|
408
|
+
function BlockActions({
|
|
409
|
+
mobileConfig,
|
|
410
|
+
actionsClassName,
|
|
411
|
+
verticalSpacing = "mt-4 md:mt-8",
|
|
412
|
+
actions,
|
|
413
|
+
actionsSlot
|
|
414
|
+
}) {
|
|
415
|
+
const width = mobileConfig?.width ?? "full";
|
|
416
|
+
const position = mobileConfig?.position ?? "center";
|
|
417
|
+
const mobileLayoutClass = MOBILE_CLASSES[`${width}-${position}`];
|
|
418
|
+
if (actionsSlot) {
|
|
419
|
+
return /* @__PURE__ */ jsx("div", { children: actionsSlot });
|
|
420
|
+
} else if (actions && actions?.length > 0) {
|
|
421
|
+
return /* @__PURE__ */ jsx(
|
|
422
|
+
"div",
|
|
423
|
+
{
|
|
424
|
+
className: cn(
|
|
425
|
+
"flex flex-col md:flex-row flex-wrap gap-4",
|
|
426
|
+
mobileLayoutClass,
|
|
427
|
+
actionsClassName,
|
|
428
|
+
verticalSpacing
|
|
429
|
+
),
|
|
430
|
+
children: actions.map((action, index) => /* @__PURE__ */ jsx(ActionComponent, { action }, index))
|
|
431
|
+
}
|
|
432
|
+
);
|
|
433
|
+
} else {
|
|
434
|
+
return null;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
function ActionComponent({ action }) {
|
|
438
|
+
const {
|
|
439
|
+
label,
|
|
440
|
+
icon,
|
|
441
|
+
iconAfter,
|
|
442
|
+
children,
|
|
443
|
+
href,
|
|
444
|
+
onClick,
|
|
445
|
+
className: actionClassName,
|
|
446
|
+
...pressableProps
|
|
447
|
+
} = action;
|
|
448
|
+
return /* @__PURE__ */ jsx(
|
|
449
|
+
Pressable,
|
|
450
|
+
{
|
|
451
|
+
href,
|
|
452
|
+
onClick,
|
|
453
|
+
asButton: action.asButton ?? true,
|
|
454
|
+
className: actionClassName,
|
|
455
|
+
...pressableProps,
|
|
456
|
+
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
457
|
+
icon,
|
|
458
|
+
label,
|
|
459
|
+
iconAfter
|
|
460
|
+
] })
|
|
461
|
+
}
|
|
462
|
+
);
|
|
463
|
+
}
|
|
400
464
|
function HeroOverlayCtaGrid({
|
|
401
465
|
sectionId = "hero-overlay-cta-grid",
|
|
402
466
|
badgeText,
|
|
@@ -404,9 +468,9 @@ function HeroOverlayCtaGrid({
|
|
|
404
468
|
badgeSlot,
|
|
405
469
|
heading,
|
|
406
470
|
description,
|
|
407
|
-
|
|
408
|
-
secondaryCta,
|
|
471
|
+
actions,
|
|
409
472
|
actionsSlot,
|
|
473
|
+
actionsClassName,
|
|
410
474
|
cards,
|
|
411
475
|
cardsSlot,
|
|
412
476
|
backgroundImage,
|
|
@@ -431,24 +495,16 @@ function HeroOverlayCtaGrid({
|
|
|
431
495
|
badgeText
|
|
432
496
|
] });
|
|
433
497
|
}, [badgeSlot, badgeText, badgeIcon]);
|
|
434
|
-
const renderActions = useMemo(() => {
|
|
435
|
-
if (actionsSlot) return actionsSlot;
|
|
436
|
-
if (!primaryCta && !secondaryCta) return null;
|
|
437
|
-
return /* @__PURE__ */ jsxs("div", { className: "mt-8 flex flex-col items-center justify-center gap-4 sm:flex-row", children: [
|
|
438
|
-
primaryCta && /* @__PURE__ */ jsx(Pressable, { href: primaryCta.href, size: "lg", variant: "default", children: primaryCta.label }),
|
|
439
|
-
secondaryCta && /* @__PURE__ */ jsx(Pressable, { href: secondaryCta.href, size: "lg", variant: "secondary", children: secondaryCta.label })
|
|
440
|
-
] });
|
|
441
|
-
}, [actionsSlot, primaryCta, secondaryCta]);
|
|
442
498
|
const renderCards = useMemo(() => {
|
|
443
499
|
if (cardsSlot) return cardsSlot;
|
|
444
500
|
if (!cards || cards.length === 0) return null;
|
|
445
|
-
return /* @__PURE__ */ jsx("div", { className: "mx-auto w-full max-w-6xl overflow-hidden rounded-3xl border border-border bg-
|
|
501
|
+
return /* @__PURE__ */ jsx("div", { className: "mx-auto w-full max-w-6xl overflow-hidden rounded-3xl border border-border bg-card shadow-2xl px-0", children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 divide-y divide-border md:grid-cols-3 md:divide-x md:divide-y-0", children: cards.map((card) => /* @__PURE__ */ jsxs(
|
|
446
502
|
Pressable,
|
|
447
503
|
{
|
|
448
504
|
href: card.href,
|
|
449
505
|
className: "group flex items-center gap-4 px-6 py-6 transition-colors",
|
|
450
506
|
children: [
|
|
451
|
-
/* @__PURE__ */ jsx(
|
|
507
|
+
card.icon ? /* @__PURE__ */ jsx(
|
|
452
508
|
"div",
|
|
453
509
|
{
|
|
454
510
|
className: cn(
|
|
@@ -456,19 +512,19 @@ function HeroOverlayCtaGrid({
|
|
|
456
512
|
),
|
|
457
513
|
children: /* @__PURE__ */ jsx(DynamicIcon, { name: card.icon, size: 22 })
|
|
458
514
|
}
|
|
459
|
-
),
|
|
515
|
+
) : null,
|
|
460
516
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
461
|
-
/* @__PURE__ */ jsx("p", { className: "text-base font-semibold ", children: card.label }),
|
|
462
|
-
/* @__PURE__ */ jsx("p", { className: cn("text-sm text-
|
|
517
|
+
/* @__PURE__ */ jsx("p", { className: "text-base font-semibold text-card-foreground", children: card.label }),
|
|
518
|
+
/* @__PURE__ */ jsx("p", { className: cn("text-sm text-card-foreground"), children: card.subtitle })
|
|
463
519
|
] }),
|
|
464
|
-
/* @__PURE__ */ jsx(
|
|
520
|
+
card.href ? /* @__PURE__ */ jsx(
|
|
465
521
|
DynamicIcon,
|
|
466
522
|
{
|
|
467
523
|
name: "lucide/arrow-right",
|
|
468
524
|
size: 18,
|
|
469
|
-
className: cn("ml-auto flex-none text-
|
|
525
|
+
className: cn("ml-auto flex-none text-card-foreground")
|
|
470
526
|
}
|
|
471
|
-
)
|
|
527
|
+
) : null
|
|
472
528
|
]
|
|
473
529
|
},
|
|
474
530
|
card.label
|
|
@@ -553,7 +609,14 @@ function HeroOverlayCtaGrid({
|
|
|
553
609
|
children: description
|
|
554
610
|
}
|
|
555
611
|
)),
|
|
556
|
-
|
|
612
|
+
/* @__PURE__ */ jsx(
|
|
613
|
+
BlockActions,
|
|
614
|
+
{
|
|
615
|
+
actions,
|
|
616
|
+
actionsSlot,
|
|
617
|
+
actionsClassName
|
|
618
|
+
}
|
|
619
|
+
)
|
|
557
620
|
]
|
|
558
621
|
}
|
|
559
622
|
),
|
|
@@ -487,7 +487,7 @@ function ProcessExpandableTimeline({
|
|
|
487
487
|
onClick: () => toggleExpand(index),
|
|
488
488
|
className: cn(
|
|
489
489
|
"group relative flex w-full items-start gap-6 border-b p-6 text-left transition-colors",
|
|
490
|
-
|
|
490
|
+
"hover:bg-card hover:text-card-foreground",
|
|
491
491
|
expandedIndex === index ? "bg-card text-card-foreground" : "",
|
|
492
492
|
stepItemClassName
|
|
493
493
|
),
|
|
@@ -604,7 +604,6 @@ function ProcessExpandableTimeline({
|
|
|
604
604
|
{
|
|
605
605
|
className: cn(
|
|
606
606
|
"absolute left-6 top-0 bottom-0 w-px",
|
|
607
|
-
"border-2 border-dashed",
|
|
608
607
|
timelineLineClassName
|
|
609
608
|
)
|
|
610
609
|
}
|
|
@@ -466,7 +466,7 @@ function ProcessExpandableTimeline({
|
|
|
466
466
|
onClick: () => toggleExpand(index),
|
|
467
467
|
className: cn(
|
|
468
468
|
"group relative flex w-full items-start gap-6 border-b p-6 text-left transition-colors",
|
|
469
|
-
|
|
469
|
+
"hover:bg-card hover:text-card-foreground",
|
|
470
470
|
expandedIndex === index ? "bg-card text-card-foreground" : "",
|
|
471
471
|
stepItemClassName
|
|
472
472
|
),
|
|
@@ -583,7 +583,6 @@ function ProcessExpandableTimeline({
|
|
|
583
583
|
{
|
|
584
584
|
className: cn(
|
|
585
585
|
"absolute left-6 top-0 bottom-0 w-px",
|
|
586
|
-
"border-2 border-dashed",
|
|
587
586
|
timelineLineClassName
|
|
588
587
|
)
|
|
589
588
|
}
|
|
@@ -31,84 +31,6 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
31
31
|
function cn(...inputs) {
|
|
32
32
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
33
33
|
}
|
|
34
|
-
function getNestedCardBg(parentBg, variant = "muted", options) {
|
|
35
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
36
|
-
if (isDark) {
|
|
37
|
-
switch (variant) {
|
|
38
|
-
case "muted":
|
|
39
|
-
return "bg-background";
|
|
40
|
-
case "card":
|
|
41
|
-
return "bg-card";
|
|
42
|
-
case "accent":
|
|
43
|
-
return "bg-accent";
|
|
44
|
-
case "subtle":
|
|
45
|
-
return "bg-background/50";
|
|
46
|
-
}
|
|
47
|
-
} else {
|
|
48
|
-
switch (variant) {
|
|
49
|
-
case "muted":
|
|
50
|
-
return "bg-muted";
|
|
51
|
-
case "card":
|
|
52
|
-
return "bg-card";
|
|
53
|
-
case "accent":
|
|
54
|
-
return "bg-accent";
|
|
55
|
-
case "subtle":
|
|
56
|
-
return "bg-muted/50";
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function getNestedCardTextColor(parentBg, options) {
|
|
61
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
62
|
-
return isDark ? "text-foreground" : "";
|
|
63
|
-
}
|
|
64
|
-
function getTextColor(parentBg, variant = "default", options) {
|
|
65
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
66
|
-
if (isDark) {
|
|
67
|
-
switch (variant) {
|
|
68
|
-
case "default":
|
|
69
|
-
return "text-foreground";
|
|
70
|
-
case "muted":
|
|
71
|
-
return "text-foreground/80";
|
|
72
|
-
case "subtle":
|
|
73
|
-
return "text-foreground/60";
|
|
74
|
-
case "accent":
|
|
75
|
-
return "text-accent-foreground";
|
|
76
|
-
}
|
|
77
|
-
} else {
|
|
78
|
-
switch (variant) {
|
|
79
|
-
case "default":
|
|
80
|
-
return "text-foreground";
|
|
81
|
-
case "muted":
|
|
82
|
-
return "text-muted-foreground";
|
|
83
|
-
case "subtle":
|
|
84
|
-
return "text-muted-foreground/70";
|
|
85
|
-
case "accent":
|
|
86
|
-
return "text-primary";
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
function getBorderColor(parentBg, variant = "default", options) {
|
|
91
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
92
|
-
if (isDark) {
|
|
93
|
-
switch (variant) {
|
|
94
|
-
case "default":
|
|
95
|
-
return "border-foreground/20";
|
|
96
|
-
case "muted":
|
|
97
|
-
return "border-foreground/10";
|
|
98
|
-
case "accent":
|
|
99
|
-
return "border-accent-foreground";
|
|
100
|
-
}
|
|
101
|
-
} else {
|
|
102
|
-
switch (variant) {
|
|
103
|
-
case "default":
|
|
104
|
-
return "border-border";
|
|
105
|
-
case "muted":
|
|
106
|
-
return "border-muted";
|
|
107
|
-
case "accent":
|
|
108
|
-
return "border-primary";
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
34
|
var DEFAULT_ICON_API_KEY = "au382bi7fsh96w9h9xlrnat2jglx";
|
|
113
35
|
var DynamicIcon = React__namespace.memo(function DynamicIcon2({
|
|
114
36
|
apiKey,
|
|
@@ -512,10 +434,9 @@ function ProcessIconTimeline({
|
|
|
512
434
|
spacing,
|
|
513
435
|
pattern,
|
|
514
436
|
patternOpacity,
|
|
515
|
-
|
|
516
|
-
title
|
|
437
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8"
|
|
517
438
|
}) {
|
|
518
|
-
const resolvedHeading =
|
|
439
|
+
const resolvedHeading = heading;
|
|
519
440
|
const renderSteps = React.useMemo(() => {
|
|
520
441
|
if (stepsSlot) return stepsSlot;
|
|
521
442
|
if (!steps?.length) return null;
|
|
@@ -551,14 +472,13 @@ function ProcessIconTimeline({
|
|
|
551
472
|
{
|
|
552
473
|
className: cn(
|
|
553
474
|
"rounded-lg border p-6 shadow-sm",
|
|
554
|
-
|
|
555
|
-
getNestedCardTextColor(background),
|
|
475
|
+
"bg-card text-card-foreground",
|
|
556
476
|
index % 2 === 0 ? "lg:mr-12" : "lg:ml-12",
|
|
557
477
|
stepCardClassName
|
|
558
478
|
),
|
|
559
479
|
children: [
|
|
560
480
|
step.title && (typeof step.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-xl font-semibold tracking-tight", children: step.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 text-xl font-semibold tracking-tight", children: step.title })),
|
|
561
|
-
step.description && (typeof step.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-4"
|
|
481
|
+
step.description && (typeof step.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-4"), children: step.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4"), children: step.description })),
|
|
562
482
|
step.highlights?.length ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
563
483
|
"div",
|
|
564
484
|
{
|
|
@@ -571,8 +491,7 @@ function ProcessIconTimeline({
|
|
|
571
491
|
{
|
|
572
492
|
className: cn(
|
|
573
493
|
"rounded-full px-3 py-1 text-xs font-medium",
|
|
574
|
-
|
|
575
|
-
getNestedCardTextColor(background)
|
|
494
|
+
"bg-primary text-primary-foreground"
|
|
576
495
|
),
|
|
577
496
|
children: highlight
|
|
578
497
|
},
|
|
@@ -600,6 +519,7 @@ function ProcessIconTimeline({
|
|
|
600
519
|
className,
|
|
601
520
|
pattern,
|
|
602
521
|
patternOpacity,
|
|
522
|
+
containerClassName,
|
|
603
523
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: contentClassName, children: [
|
|
604
524
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-16 max-w-2xl", headerClassName), children: [
|
|
605
525
|
resolvedHeading && (typeof resolvedHeading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -611,18 +531,8 @@ function ProcessIconTimeline({
|
|
|
611
531
|
),
|
|
612
532
|
children: resolvedHeading
|
|
613
533
|
}
|
|
614
|
-
) :
|
|
615
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
616
|
-
"p",
|
|
617
|
-
{
|
|
618
|
-
className: cn(
|
|
619
|
-
"text-lg",
|
|
620
|
-
getTextColor(background, "muted"),
|
|
621
|
-
descriptionClassName
|
|
622
|
-
),
|
|
623
|
-
children: description
|
|
624
|
-
}
|
|
625
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
|
|
534
|
+
) : resolvedHeading),
|
|
535
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg", descriptionClassName), children: description }) : description)
|
|
626
536
|
] }),
|
|
627
537
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", timelineClassName), children: [
|
|
628
538
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -630,7 +540,7 @@ function ProcessIconTimeline({
|
|
|
630
540
|
{
|
|
631
541
|
className: cn(
|
|
632
542
|
"absolute left-6 top-0 bottom-0 w-px lg:left-1/2 lg:-translate-x-1/2",
|
|
633
|
-
|
|
543
|
+
"border-border border",
|
|
634
544
|
timelineLineClassName
|
|
635
545
|
)
|
|
636
546
|
}
|
|
@@ -113,15 +113,15 @@ interface ProcessIconTimelineProps {
|
|
|
113
113
|
*/
|
|
114
114
|
optixFlowConfig?: OptixFlowConfig;
|
|
115
115
|
/**
|
|
116
|
-
*
|
|
116
|
+
* Additional CSS classes for the container
|
|
117
117
|
*/
|
|
118
|
-
|
|
118
|
+
containerClassName?: string;
|
|
119
119
|
/** Optional Section ID */
|
|
120
120
|
sectionId?: string;
|
|
121
121
|
}
|
|
122
122
|
/**
|
|
123
123
|
* ProcessIconTimeline - A process section with icon-based timeline steps.
|
|
124
124
|
*/
|
|
125
|
-
declare function ProcessIconTimeline({ sectionId, heading, description, steps, stepsSlot, className, contentClassName, headerClassName, headingClassName, descriptionClassName, timelineClassName, timelineLineClassName, stepCardClassName, stepBadgeClassName, background, spacing, pattern, patternOpacity,
|
|
125
|
+
declare function ProcessIconTimeline({ sectionId, heading, description, steps, stepsSlot, className, contentClassName, headerClassName, headingClassName, descriptionClassName, timelineClassName, timelineLineClassName, stepCardClassName, stepBadgeClassName, background, spacing, pattern, patternOpacity, containerClassName, }: ProcessIconTimelineProps): React.JSX.Element;
|
|
126
126
|
|
|
127
127
|
export { ProcessIconTimeline, type ProcessIconTimelineProps };
|