@opensite/ui 3.7.4 → 3.7.6
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/blog-featured-popular.cjs +13 -12
- package/dist/blog-featured-popular.d.cts +1 -1
- package/dist/blog-featured-popular.d.ts +1 -1
- package/dist/blog-featured-popular.js +13 -12
- package/dist/blog-horizontal-cards.cjs +22 -41
- package/dist/blog-horizontal-cards.d.cts +1 -1
- package/dist/blog-horizontal-cards.d.ts +1 -1
- package/dist/blog-horizontal-cards.js +22 -41
- package/dist/blog-related-articles.cjs +8 -7
- package/dist/blog-related-articles.js +8 -7
- package/dist/carousel-icon-tabs.cjs +6 -4
- package/dist/carousel-icon-tabs.d.cts +5 -1
- package/dist/carousel-icon-tabs.d.ts +5 -1
- package/dist/carousel-icon-tabs.js +6 -4
- package/dist/carousel-progress-slider.cjs +3 -2
- package/dist/carousel-progress-slider.js +3 -2
- package/dist/carousel-scale-focus.cjs +1 -1
- package/dist/carousel-scale-focus.js +1 -1
- package/dist/carousel-scrolling-feature-showcase.cjs +4 -2
- package/dist/carousel-scrolling-feature-showcase.js +4 -2
- package/dist/carousel-sidebar-resources.cjs +11 -15
- package/dist/carousel-sidebar-resources.d.cts +5 -1
- package/dist/carousel-sidebar-resources.d.ts +5 -1
- package/dist/carousel-sidebar-resources.js +11 -15
- package/dist/carousel-tabs-content.cjs +1 -1
- package/dist/carousel-tabs-content.js +1 -1
- package/dist/expandable-case-study-cards.cjs +3 -3
- package/dist/expandable-case-study-cards.js +3 -3
- package/dist/feature-animated-carousel.cjs +2 -1
- package/dist/feature-animated-carousel.js +2 -1
- package/dist/feature-bento-image-grid.cjs +8 -9
- package/dist/feature-bento-image-grid.js +8 -9
- package/dist/feature-image-overlay-badge.cjs +3 -40
- package/dist/feature-image-overlay-badge.js +3 -40
- package/dist/feature-integration-cards.cjs +4 -13
- package/dist/feature-integration-cards.js +4 -13
- package/dist/footer-newsletter-contact.cjs +4 -4
- package/dist/footer-newsletter-contact.js +4 -4
- package/dist/hero-adaptable-product-grid.cjs +2 -1
- package/dist/hero-adaptable-product-grid.js +2 -1
- package/dist/hero-ai-powered-carousel.cjs +2 -1
- package/dist/hero-ai-powered-carousel.js +2 -1
- package/dist/hero-architecture-fullscreen.cjs +3 -2
- package/dist/hero-architecture-fullscreen.js +3 -2
- package/dist/hero-badge-image-split.cjs +3 -2
- package/dist/hero-badge-image-split.js +3 -2
- package/dist/hero-badge-shadow-overlay.cjs +2 -1
- package/dist/hero-badge-shadow-overlay.js +2 -1
- package/dist/hero-billing-platform-logos.cjs +12 -8
- package/dist/hero-billing-platform-logos.js +12 -8
- package/dist/hero-business-carousel-dots.cjs +2 -1
- package/dist/hero-business-carousel-dots.js +2 -1
- package/dist/hero-centered-image-grid.cjs +4 -4
- package/dist/hero-centered-image-grid.js +4 -4
- package/dist/hero-conversation-intelligence.cjs +2 -1
- package/dist/hero-conversation-intelligence.js +2 -1
- package/dist/hero-crm-streamlined.cjs +2 -2
- package/dist/hero-crm-streamlined.js +2 -2
- package/dist/hero-design-carousel-portfolio.cjs +2 -1
- package/dist/hero-design-carousel-portfolio.js +2 -1
- package/dist/hero-ecommerce-product-showcase.cjs +8 -4
- package/dist/hero-ecommerce-product-showcase.js +8 -4
- package/dist/hero-event-registration.cjs +2 -1
- package/dist/hero-event-registration.js +2 -1
- package/dist/hero-gradient-avatars-rating.cjs +4 -2
- package/dist/hero-gradient-avatars-rating.js +4 -2
- package/dist/hero-mental-health-team.cjs +13 -18
- package/dist/hero-mental-health-team.js +13 -18
- package/dist/hero-mentorship-video-split.cjs +3 -10
- package/dist/hero-mentorship-video-split.js +3 -10
- package/dist/hero-pattern-logo-tech-stack.cjs +10 -6
- package/dist/hero-pattern-logo-tech-stack.js +10 -6
- package/dist/hero-product-showcase-floating.cjs +4 -2
- package/dist/hero-product-showcase-floating.js +4 -2
- package/dist/hero-saas-dashboard-preview.cjs +2 -1
- package/dist/hero-saas-dashboard-preview.js +2 -1
- package/dist/hero-software-growth-video-dialog.cjs +2 -1
- package/dist/hero-software-growth-video-dialog.js +2 -1
- package/dist/hero-split-icon-cards.cjs +7 -59
- package/dist/hero-split-icon-cards.js +7 -59
- package/dist/hero-task-timer-animated.cjs +155 -86
- package/dist/hero-task-timer-animated.d.cts +19 -18
- package/dist/hero-task-timer-animated.d.ts +19 -18
- package/dist/hero-task-timer-animated.js +156 -68
- package/dist/navbar-animated-preview.cjs +1 -1
- package/dist/navbar-animated-preview.js +1 -1
- package/dist/navbar-enterprise-mega.cjs +9 -3
- package/dist/navbar-enterprise-mega.d.cts +3 -0
- package/dist/navbar-enterprise-mega.d.ts +3 -0
- package/dist/navbar-enterprise-mega.js +9 -3
- package/dist/navbar-image-preview.cjs +10 -2
- package/dist/navbar-image-preview.d.cts +6 -6
- package/dist/navbar-image-preview.d.ts +6 -6
- package/dist/navbar-image-preview.js +10 -2
- package/dist/process-hover-cards.cjs +4 -2
- package/dist/process-hover-cards.js +4 -2
- package/dist/process-icon-timeline.cjs +1 -2
- package/dist/process-icon-timeline.d.cts +0 -4
- package/dist/process-icon-timeline.d.ts +0 -4
- package/dist/process-icon-timeline.js +1 -2
- package/dist/process-scroll-image.cjs +2 -2
- package/dist/process-scroll-image.js +2 -2
- package/dist/process-steps-grid.cjs +7 -5
- package/dist/process-steps-grid.js +7 -5
- package/dist/registry.cjs +405 -325
- package/dist/registry.js +405 -325
- package/dist/testimonials-animated-split.cjs +2 -1
- package/dist/testimonials-animated-split.js +2 -1
- package/dist/testimonials-carousel-image.cjs +4 -2
- package/dist/testimonials-carousel-image.js +4 -2
- package/dist/testimonials-company-logo.cjs +4 -2
- package/dist/testimonials-company-logo.js +4 -2
- package/dist/testimonials-scrolling-columns.cjs +4 -2
- package/dist/testimonials-scrolling-columns.js +4 -2
- package/package.json +1 -1
|
@@ -33,36 +33,6 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
33
33
|
function cn(...inputs) {
|
|
34
34
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
35
35
|
}
|
|
36
|
-
function getTextColor(parentBg, variant = "default", options) {
|
|
37
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
38
|
-
if (isDark) {
|
|
39
|
-
switch (variant) {
|
|
40
|
-
case "default":
|
|
41
|
-
return "text-foreground";
|
|
42
|
-
case "muted":
|
|
43
|
-
return "text-foreground/80";
|
|
44
|
-
case "subtle":
|
|
45
|
-
return "text-foreground/60";
|
|
46
|
-
case "accent":
|
|
47
|
-
return "text-accent-foreground";
|
|
48
|
-
}
|
|
49
|
-
} else {
|
|
50
|
-
switch (variant) {
|
|
51
|
-
case "default":
|
|
52
|
-
return "text-foreground";
|
|
53
|
-
case "muted":
|
|
54
|
-
return "text-muted-foreground";
|
|
55
|
-
case "subtle":
|
|
56
|
-
return "text-muted-foreground/70";
|
|
57
|
-
case "accent":
|
|
58
|
-
return "text-primary";
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
function getAccentColor(parentBg, options) {
|
|
63
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
64
|
-
return isDark ? "text-accent-foreground" : "text-primary";
|
|
65
|
-
}
|
|
66
36
|
var DEFAULT_ICON_API_KEY = "au382bi7fsh96w9h9xlrnat2jglx";
|
|
67
37
|
var DynamicIcon = React__namespace.memo(function DynamicIcon2({
|
|
68
38
|
apiKey,
|
|
@@ -543,30 +513,19 @@ function HeroSplitIconCards({
|
|
|
543
513
|
if (cardsSlot) return cardsSlot;
|
|
544
514
|
if (!cardItems || cardItems.length === 0) return null;
|
|
545
515
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4", children: cardItems.map((item, idx) => {
|
|
546
|
-
const card = /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "h-full border-border/60 px-0 py-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4 p-6", children: [
|
|
516
|
+
const card = /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "h-full border-border/60 px-0 py-0 hover:shadow-xl duration-500 transition-all", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4 p-6", children: [
|
|
547
517
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
548
518
|
"div",
|
|
549
519
|
{
|
|
550
520
|
className: cn(
|
|
551
|
-
"flex h-14 w-14 items-center justify-center rounded-xl"
|
|
552
|
-
`${getAccentColor(background)}/10`,
|
|
553
|
-
getAccentColor(background)
|
|
521
|
+
"flex h-14 w-14 items-center justify-center rounded-xl bg-primary text-primary-foreground"
|
|
554
522
|
),
|
|
555
523
|
children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.icon, size: 24 })
|
|
556
524
|
}
|
|
557
525
|
),
|
|
558
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
559
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-bold
|
|
560
|
-
item.subtitle ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
561
|
-
"p",
|
|
562
|
-
{
|
|
563
|
-
className: cn(
|
|
564
|
-
"mt-2 text-sm",
|
|
565
|
-
getTextColor(background, "muted")
|
|
566
|
-
),
|
|
567
|
-
children: item.subtitle
|
|
568
|
-
}
|
|
569
|
-
) : null
|
|
526
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-card-foreground", children: [
|
|
527
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-bold", children: item.title }),
|
|
528
|
+
item.subtitle ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm opacity-70"), children: item.subtitle }) : null
|
|
570
529
|
] })
|
|
571
530
|
] }) });
|
|
572
531
|
return item.href ? /* @__PURE__ */ jsxRuntime.jsx(pressable.Pressable, { href: item.href, className: "block", children: card }, idx) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: card }, idx);
|
|
@@ -588,8 +547,7 @@ function HeroSplitIconCards({
|
|
|
588
547
|
"p",
|
|
589
548
|
{
|
|
590
549
|
className: cn(
|
|
591
|
-
"text-xs font-semibold uppercase tracking-[0.25em]"
|
|
592
|
-
getAccentColor(background)
|
|
550
|
+
"text-xs font-semibold uppercase tracking-[0.25em]"
|
|
593
551
|
),
|
|
594
552
|
children: eyebrow
|
|
595
553
|
}
|
|
@@ -614,17 +572,7 @@ function HeroSplitIconCards({
|
|
|
614
572
|
children: heading
|
|
615
573
|
}
|
|
616
574
|
)),
|
|
617
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
618
|
-
"p",
|
|
619
|
-
{
|
|
620
|
-
className: cn(
|
|
621
|
-
"text-lg",
|
|
622
|
-
getTextColor(background, "muted"),
|
|
623
|
-
descriptionClassName
|
|
624
|
-
),
|
|
625
|
-
children: description
|
|
626
|
-
}
|
|
627
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
|
|
575
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
|
|
628
576
|
renderActions
|
|
629
577
|
] }) }),
|
|
630
578
|
renderCards
|
|
@@ -12,36 +12,6 @@ import { Img } from '@page-speed/img';
|
|
|
12
12
|
function cn(...inputs) {
|
|
13
13
|
return twMerge(clsx(inputs));
|
|
14
14
|
}
|
|
15
|
-
function getTextColor(parentBg, variant = "default", options) {
|
|
16
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
17
|
-
if (isDark) {
|
|
18
|
-
switch (variant) {
|
|
19
|
-
case "default":
|
|
20
|
-
return "text-foreground";
|
|
21
|
-
case "muted":
|
|
22
|
-
return "text-foreground/80";
|
|
23
|
-
case "subtle":
|
|
24
|
-
return "text-foreground/60";
|
|
25
|
-
case "accent":
|
|
26
|
-
return "text-accent-foreground";
|
|
27
|
-
}
|
|
28
|
-
} else {
|
|
29
|
-
switch (variant) {
|
|
30
|
-
case "default":
|
|
31
|
-
return "text-foreground";
|
|
32
|
-
case "muted":
|
|
33
|
-
return "text-muted-foreground";
|
|
34
|
-
case "subtle":
|
|
35
|
-
return "text-muted-foreground/70";
|
|
36
|
-
case "accent":
|
|
37
|
-
return "text-primary";
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
function getAccentColor(parentBg, options) {
|
|
42
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
43
|
-
return isDark ? "text-accent-foreground" : "text-primary";
|
|
44
|
-
}
|
|
45
15
|
var DEFAULT_ICON_API_KEY = "au382bi7fsh96w9h9xlrnat2jglx";
|
|
46
16
|
var DynamicIcon = React.memo(function DynamicIcon2({
|
|
47
17
|
apiKey,
|
|
@@ -522,30 +492,19 @@ function HeroSplitIconCards({
|
|
|
522
492
|
if (cardsSlot) return cardsSlot;
|
|
523
493
|
if (!cardItems || cardItems.length === 0) return null;
|
|
524
494
|
return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4", children: cardItems.map((item, idx) => {
|
|
525
|
-
const card = /* @__PURE__ */ jsx(Card, { className: "h-full border-border/60 px-0 py-0", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-4 p-6", children: [
|
|
495
|
+
const card = /* @__PURE__ */ jsx(Card, { className: "h-full border-border/60 px-0 py-0 hover:shadow-xl duration-500 transition-all", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-4 p-6", children: [
|
|
526
496
|
/* @__PURE__ */ jsx(
|
|
527
497
|
"div",
|
|
528
498
|
{
|
|
529
499
|
className: cn(
|
|
530
|
-
"flex h-14 w-14 items-center justify-center rounded-xl"
|
|
531
|
-
`${getAccentColor(background)}/10`,
|
|
532
|
-
getAccentColor(background)
|
|
500
|
+
"flex h-14 w-14 items-center justify-center rounded-xl bg-primary text-primary-foreground"
|
|
533
501
|
),
|
|
534
502
|
children: /* @__PURE__ */ jsx(DynamicIcon, { name: item.icon, size: 24 })
|
|
535
503
|
}
|
|
536
504
|
),
|
|
537
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
538
|
-
/* @__PURE__ */ jsx("h3", { className: "text-lg font-bold
|
|
539
|
-
item.subtitle ? /* @__PURE__ */ jsx(
|
|
540
|
-
"p",
|
|
541
|
-
{
|
|
542
|
-
className: cn(
|
|
543
|
-
"mt-2 text-sm",
|
|
544
|
-
getTextColor(background, "muted")
|
|
545
|
-
),
|
|
546
|
-
children: item.subtitle
|
|
547
|
-
}
|
|
548
|
-
) : null
|
|
505
|
+
/* @__PURE__ */ jsxs("div", { className: "text-card-foreground", children: [
|
|
506
|
+
/* @__PURE__ */ jsx("h3", { className: "text-lg font-bold", children: item.title }),
|
|
507
|
+
item.subtitle ? /* @__PURE__ */ jsx("p", { className: cn("text-sm opacity-70"), children: item.subtitle }) : null
|
|
549
508
|
] })
|
|
550
509
|
] }) });
|
|
551
510
|
return item.href ? /* @__PURE__ */ jsx(Pressable, { href: item.href, className: "block", children: card }, idx) : /* @__PURE__ */ jsx("div", { children: card }, idx);
|
|
@@ -567,8 +526,7 @@ function HeroSplitIconCards({
|
|
|
567
526
|
"p",
|
|
568
527
|
{
|
|
569
528
|
className: cn(
|
|
570
|
-
"text-xs font-semibold uppercase tracking-[0.25em]"
|
|
571
|
-
getAccentColor(background)
|
|
529
|
+
"text-xs font-semibold uppercase tracking-[0.25em]"
|
|
572
530
|
),
|
|
573
531
|
children: eyebrow
|
|
574
532
|
}
|
|
@@ -593,17 +551,7 @@ function HeroSplitIconCards({
|
|
|
593
551
|
children: heading
|
|
594
552
|
}
|
|
595
553
|
)),
|
|
596
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsx(
|
|
597
|
-
"p",
|
|
598
|
-
{
|
|
599
|
-
className: cn(
|
|
600
|
-
"text-lg",
|
|
601
|
-
getTextColor(background, "muted"),
|
|
602
|
-
descriptionClassName
|
|
603
|
-
),
|
|
604
|
-
children: description
|
|
605
|
-
}
|
|
606
|
-
) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
|
|
554
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
|
|
607
555
|
renderActions
|
|
608
556
|
] }) }),
|
|
609
557
|
renderCards
|
|
@@ -4,43 +4,18 @@
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var clsx = require('clsx');
|
|
6
6
|
var tailwindMerge = require('tailwind-merge');
|
|
7
|
-
var img = require('@page-speed/img');
|
|
8
|
-
var AspectRatioPrimitive = require('@radix-ui/react-aspect-ratio');
|
|
9
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
10
8
|
var pressable = require('@page-speed/pressable');
|
|
9
|
+
var img = require('@page-speed/img');
|
|
11
10
|
|
|
12
11
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
12
|
|
|
14
|
-
function _interopNamespace(e) {
|
|
15
|
-
if (e && e.__esModule) return e;
|
|
16
|
-
var n = Object.create(null);
|
|
17
|
-
if (e) {
|
|
18
|
-
Object.keys(e).forEach(function (k) {
|
|
19
|
-
if (k !== 'default') {
|
|
20
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
21
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function () { return e[k]; }
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
n.default = e;
|
|
29
|
-
return Object.freeze(n);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
13
|
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
33
|
-
var AspectRatioPrimitive__namespace = /*#__PURE__*/_interopNamespace(AspectRatioPrimitive);
|
|
34
14
|
|
|
35
15
|
// components/blocks/hero/hero-task-timer-animated.tsx
|
|
36
16
|
function cn(...inputs) {
|
|
37
17
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
38
18
|
}
|
|
39
|
-
function AspectRatio({
|
|
40
|
-
...props
|
|
41
|
-
}) {
|
|
42
|
-
return /* @__PURE__ */ jsxRuntime.jsx(AspectRatioPrimitive__namespace.Root, { "data-slot": "aspect-ratio", ...props });
|
|
43
|
-
}
|
|
44
19
|
var maxWidthStyles = {
|
|
45
20
|
sm: "max-w-screen-sm",
|
|
46
21
|
md: "max-w-screen-md",
|
|
@@ -536,69 +511,71 @@ var BrandLogo = ({
|
|
|
536
511
|
}
|
|
537
512
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
|
|
538
513
|
};
|
|
514
|
+
function padTwo(n) {
|
|
515
|
+
return n.toString().padStart(2, "0");
|
|
516
|
+
}
|
|
517
|
+
var RING_RADIUS = 90;
|
|
518
|
+
var RING_CIRCUMFERENCE = 2 * Math.PI * RING_RADIUS;
|
|
539
519
|
function HeroTaskTimerAnimated({
|
|
540
520
|
sectionId = "hero-task-timer-animated",
|
|
541
521
|
heading,
|
|
522
|
+
headingSlot,
|
|
542
523
|
description,
|
|
543
|
-
descriptionClassName,
|
|
544
524
|
actions,
|
|
545
525
|
actionsSlot,
|
|
546
526
|
actionsClassName,
|
|
547
|
-
|
|
548
|
-
|
|
527
|
+
taskItems,
|
|
528
|
+
timerMinutes = 25,
|
|
529
|
+
timerSeconds = 0,
|
|
549
530
|
background,
|
|
550
531
|
pattern,
|
|
551
532
|
patternOpacity,
|
|
552
533
|
className,
|
|
553
|
-
spacing = "
|
|
534
|
+
spacing = "hero",
|
|
554
535
|
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
555
536
|
headerClassName,
|
|
556
537
|
headingClassName,
|
|
557
|
-
|
|
558
|
-
optixFlowConfig,
|
|
538
|
+
descriptionClassName,
|
|
559
539
|
logo,
|
|
560
540
|
logoSlot,
|
|
561
541
|
logoClassName
|
|
562
542
|
}) {
|
|
563
|
-
const
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
543
|
+
const initialTotal = timerMinutes * 60 + timerSeconds;
|
|
544
|
+
const [remaining, setRemaining] = React.useState(initialTotal);
|
|
545
|
+
const [activeTaskIndex, setActiveTaskIndex] = React.useState(0);
|
|
546
|
+
React.useEffect(() => {
|
|
547
|
+
const interval = setInterval(() => {
|
|
548
|
+
setRemaining((prev) => prev <= 0 ? initialTotal : prev - 1);
|
|
549
|
+
}, 1e3);
|
|
550
|
+
return () => clearInterval(interval);
|
|
551
|
+
}, [initialTotal]);
|
|
552
|
+
const cycleTask = React.useCallback(() => {
|
|
553
|
+
if (!taskItems || taskItems.length <= 1) return;
|
|
554
|
+
setActiveTaskIndex((prev) => (prev + 1) % taskItems.length);
|
|
555
|
+
}, [taskItems]);
|
|
556
|
+
React.useEffect(() => {
|
|
557
|
+
if (!taskItems || taskItems.length <= 1) return;
|
|
558
|
+
const interval = setInterval(cycleTask, 3e3);
|
|
559
|
+
return () => clearInterval(interval);
|
|
560
|
+
}, [taskItems, cycleTask]);
|
|
561
|
+
const minutes = Math.floor(remaining / 60);
|
|
562
|
+
const seconds = remaining % 60;
|
|
563
|
+
const progress = initialTotal > 0 ? remaining / initialTotal : 1;
|
|
564
|
+
const strokeDashoffset = RING_CIRCUMFERENCE * (1 - progress);
|
|
565
|
+
const renderHeading = React.useMemo(() => {
|
|
566
|
+
if (headingSlot) return headingSlot;
|
|
567
|
+
if (!heading) return null;
|
|
568
|
+
return typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
569
|
+
"h1",
|
|
568
570
|
{
|
|
569
571
|
className: cn(
|
|
570
|
-
"
|
|
571
|
-
|
|
572
|
+
"max-w-3xl text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
|
|
573
|
+
headingClassName
|
|
572
574
|
),
|
|
573
|
-
children:
|
|
574
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-10 w-full lg:w-[60%]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg shadow-xl", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1.916786227 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
575
|
-
img.Img,
|
|
576
|
-
{
|
|
577
|
-
src: images[0].src,
|
|
578
|
-
alt: images[0].alt,
|
|
579
|
-
className: cn(
|
|
580
|
-
"block size-full object-cover object-center",
|
|
581
|
-
images[0].className
|
|
582
|
-
),
|
|
583
|
-
optixFlowConfig
|
|
584
|
-
}
|
|
585
|
-
) }) }) }),
|
|
586
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-10 w-full lg:w-[40%]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg shadow-xl", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1.916786227 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
587
|
-
img.Img,
|
|
588
|
-
{
|
|
589
|
-
src: images[1].src,
|
|
590
|
-
alt: images[1].alt,
|
|
591
|
-
className: cn(
|
|
592
|
-
"block size-full object-cover object-center",
|
|
593
|
-
images[1].className
|
|
594
|
-
),
|
|
595
|
-
optixFlowConfig
|
|
596
|
-
}
|
|
597
|
-
) }) }) })
|
|
598
|
-
]
|
|
575
|
+
children: heading
|
|
599
576
|
}
|
|
600
|
-
);
|
|
601
|
-
}, [
|
|
577
|
+
) : heading;
|
|
578
|
+
}, [headingSlot, heading, headingClassName]);
|
|
602
579
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
603
580
|
Section,
|
|
604
581
|
{
|
|
@@ -609,48 +586,140 @@ function HeroTaskTimerAnimated({
|
|
|
609
586
|
patternOpacity,
|
|
610
587
|
className,
|
|
611
588
|
containerClassName,
|
|
612
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-
|
|
589
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col items-center gap-10 lg:flex-row lg:items-center lg:gap-16", children: [
|
|
613
590
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
614
591
|
"div",
|
|
615
592
|
{
|
|
616
593
|
className: cn(
|
|
617
|
-
"flex flex-col gap-
|
|
594
|
+
"flex flex-col gap-5 w-full lg:w-1/2 pt-8 lg:pt-0",
|
|
618
595
|
headerClassName
|
|
619
596
|
),
|
|
620
597
|
children: [
|
|
621
598
|
(logo || logoSlot) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(BrandLogo, { logo, logoSlot, size: "lg" }) }),
|
|
622
|
-
|
|
623
|
-
|
|
599
|
+
renderHeading,
|
|
600
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
601
|
+
"p",
|
|
624
602
|
{
|
|
625
603
|
className: cn(
|
|
626
|
-
"max-w-
|
|
627
|
-
|
|
604
|
+
"max-w-xl text-lg text-muted-foreground text-balance",
|
|
605
|
+
descriptionClassName
|
|
628
606
|
),
|
|
629
|
-
children:
|
|
607
|
+
children: description
|
|
630
608
|
}
|
|
631
|
-
) :
|
|
632
|
-
|
|
609
|
+
) : description),
|
|
610
|
+
taskItems && taskItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-col gap-3", children: taskItems.map((task, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
611
|
+
"div",
|
|
633
612
|
{
|
|
634
|
-
className:
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
613
|
+
className: "flex items-center gap-3 transition-all duration-700 ease-in-out",
|
|
614
|
+
style: {
|
|
615
|
+
opacity: index === activeTaskIndex ? 1 : 0.35,
|
|
616
|
+
transform: index === activeTaskIndex ? "translateX(8px)" : "translateX(0)"
|
|
617
|
+
},
|
|
618
|
+
children: [
|
|
619
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
620
|
+
"div",
|
|
621
|
+
{
|
|
622
|
+
className: cn(
|
|
623
|
+
"size-2.5 shrink-0 rounded-full transition-colors duration-700",
|
|
624
|
+
index === activeTaskIndex ? "bg-primary" : "bg-muted-foreground/30"
|
|
625
|
+
)
|
|
626
|
+
}
|
|
627
|
+
),
|
|
628
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
629
|
+
"span",
|
|
630
|
+
{
|
|
631
|
+
className: cn(
|
|
632
|
+
"text-sm font-medium transition-colors duration-700",
|
|
633
|
+
index === activeTaskIndex ? "text-foreground" : "text-muted-foreground/50"
|
|
634
|
+
),
|
|
635
|
+
children: task
|
|
636
|
+
}
|
|
637
|
+
)
|
|
638
|
+
]
|
|
639
|
+
},
|
|
640
|
+
index
|
|
641
|
+
)) }),
|
|
642
642
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
643
643
|
BlockActions,
|
|
644
644
|
{
|
|
645
645
|
actions,
|
|
646
646
|
actionsSlot,
|
|
647
|
-
actionsClassName
|
|
647
|
+
actionsClassName: cn("mt-2", actionsClassName)
|
|
648
648
|
}
|
|
649
649
|
)
|
|
650
650
|
]
|
|
651
651
|
}
|
|
652
652
|
),
|
|
653
|
-
|
|
653
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full items-center justify-center lg:w-1/2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col items-center gap-6", children: [
|
|
654
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
655
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
656
|
+
"svg",
|
|
657
|
+
{
|
|
658
|
+
width: "240",
|
|
659
|
+
height: "240",
|
|
660
|
+
viewBox: "0 0 220 220",
|
|
661
|
+
className: "drop-shadow-lg",
|
|
662
|
+
children: [
|
|
663
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
664
|
+
"circle",
|
|
665
|
+
{
|
|
666
|
+
cx: "110",
|
|
667
|
+
cy: "110",
|
|
668
|
+
r: RING_RADIUS,
|
|
669
|
+
fill: "none",
|
|
670
|
+
stroke: "currentColor",
|
|
671
|
+
strokeWidth: "5",
|
|
672
|
+
className: "text-muted-foreground/15"
|
|
673
|
+
}
|
|
674
|
+
),
|
|
675
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
676
|
+
"circle",
|
|
677
|
+
{
|
|
678
|
+
cx: "110",
|
|
679
|
+
cy: "110",
|
|
680
|
+
r: RING_RADIUS,
|
|
681
|
+
fill: "none",
|
|
682
|
+
stroke: "currentColor",
|
|
683
|
+
strokeWidth: "5",
|
|
684
|
+
strokeLinecap: "round",
|
|
685
|
+
className: "text-primary transition-[stroke-dashoffset] duration-1000 ease-linear",
|
|
686
|
+
strokeDasharray: RING_CIRCUMFERENCE,
|
|
687
|
+
strokeDashoffset,
|
|
688
|
+
transform: "rotate(-90 110 110)"
|
|
689
|
+
}
|
|
690
|
+
)
|
|
691
|
+
]
|
|
692
|
+
}
|
|
693
|
+
),
|
|
694
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-1 font-mono", children: [
|
|
695
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-5xl font-bold tabular-nums tracking-tight md:text-6xl", children: padTwo(minutes) }),
|
|
696
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse text-3xl font-bold text-primary md:text-4xl", children: ":" }),
|
|
697
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-5xl font-bold tabular-nums tracking-tight md:text-6xl", children: padTwo(seconds) })
|
|
698
|
+
] }) })
|
|
699
|
+
] }),
|
|
700
|
+
taskItems && taskItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-8 w-full max-w-[280px] overflow-hidden", children: taskItems.map((task, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
701
|
+
"div",
|
|
702
|
+
{
|
|
703
|
+
className: "absolute inset-0 flex items-center justify-center transition-all duration-700 ease-in-out",
|
|
704
|
+
style: {
|
|
705
|
+
opacity: index === activeTaskIndex ? 1 : 0,
|
|
706
|
+
transform: index === activeTaskIndex ? "translateY(0)" : "translateY(12px)"
|
|
707
|
+
},
|
|
708
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate rounded-full bg-primary/10 px-4 py-1.5 text-sm font-medium text-primary", children: task })
|
|
709
|
+
},
|
|
710
|
+
index
|
|
711
|
+
)) }),
|
|
712
|
+
taskItems && taskItems.length > 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-2", children: taskItems.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
713
|
+
"div",
|
|
714
|
+
{
|
|
715
|
+
className: cn(
|
|
716
|
+
"size-2 rounded-full transition-all duration-500",
|
|
717
|
+
index === activeTaskIndex ? "scale-125 bg-primary" : "bg-muted-foreground/25"
|
|
718
|
+
)
|
|
719
|
+
},
|
|
720
|
+
index
|
|
721
|
+
)) })
|
|
722
|
+
] }) })
|
|
654
723
|
] })
|
|
655
724
|
}
|
|
656
725
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Cgd-IXlI.cjs';
|
|
3
3
|
import { L as LogoConfig } from './types-mWZcgKth.cjs';
|
|
4
|
-
import { A as ActionConfig
|
|
4
|
+
import { A as ActionConfig } from './blocks-DyouPohq.cjs';
|
|
5
5
|
import 'react/jsx-runtime';
|
|
6
6
|
import './dynamic-icon.cjs';
|
|
7
7
|
import '@page-speed/icon';
|
|
@@ -14,6 +14,14 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
14
14
|
* Main heading content
|
|
15
15
|
*/
|
|
16
16
|
heading?: React.ReactNode;
|
|
17
|
+
/**
|
|
18
|
+
* Custom slot for heading (overrides heading prop)
|
|
19
|
+
*/
|
|
20
|
+
headingSlot?: React.ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* Description text below heading
|
|
23
|
+
*/
|
|
24
|
+
description?: React.ReactNode;
|
|
17
25
|
/**
|
|
18
26
|
* Array of action configurations for CTA buttons
|
|
19
27
|
*/
|
|
@@ -27,13 +35,18 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
27
35
|
*/
|
|
28
36
|
actionsClassName?: string;
|
|
29
37
|
/**
|
|
30
|
-
* Array of
|
|
38
|
+
* Array of task labels that cycle through with animation
|
|
39
|
+
*/
|
|
40
|
+
taskItems?: string[];
|
|
41
|
+
/**
|
|
42
|
+
* Starting minutes for the animated countdown display (default: 25 — Pomodoro style)
|
|
31
43
|
*/
|
|
32
|
-
|
|
44
|
+
timerMinutes?: number;
|
|
33
45
|
/**
|
|
34
|
-
*
|
|
46
|
+
* Starting seconds for the animated countdown display (default: 0)
|
|
35
47
|
*/
|
|
36
|
-
|
|
48
|
+
timerSeconds?: number;
|
|
49
|
+
/**
|
|
37
50
|
* Background style for the section
|
|
38
51
|
*/
|
|
39
52
|
background?: SectionBackground;
|
|
@@ -65,18 +78,6 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
65
78
|
* Additional CSS classes for the heading
|
|
66
79
|
*/
|
|
67
80
|
headingClassName?: string;
|
|
68
|
-
/**
|
|
69
|
-
* Additional CSS classes for the images area
|
|
70
|
-
*/
|
|
71
|
-
imagesClassName?: string;
|
|
72
|
-
/**
|
|
73
|
-
* OptixFlow image optimization configuration
|
|
74
|
-
*/
|
|
75
|
-
optixFlowConfig?: OptixFlowConfig;
|
|
76
|
-
/**
|
|
77
|
-
* Description text below heading
|
|
78
|
-
*/
|
|
79
|
-
description?: React.ReactNode;
|
|
80
81
|
/**
|
|
81
82
|
* Additional CSS classes for the description
|
|
82
83
|
*/
|
|
@@ -96,6 +97,6 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
96
97
|
/** Optional Section ID */
|
|
97
98
|
sectionId?: string;
|
|
98
99
|
}
|
|
99
|
-
declare function HeroTaskTimerAnimated({ sectionId, heading,
|
|
100
|
+
declare function HeroTaskTimerAnimated({ sectionId, heading, headingSlot, description, actions, actionsSlot, actionsClassName, taskItems, timerMinutes, timerSeconds, background, pattern, patternOpacity, className, spacing, containerClassName, headerClassName, headingClassName, descriptionClassName, logo, logoSlot, logoClassName, }: HeroTaskTimerAnimatedProps): React.JSX.Element;
|
|
100
101
|
|
|
101
102
|
export { HeroTaskTimerAnimated, type HeroTaskTimerAnimatedProps };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Dud0DKXB.js';
|
|
3
3
|
import { L as LogoConfig } from './types-hJ2R0GoH.js';
|
|
4
|
-
import { A as ActionConfig
|
|
4
|
+
import { A as ActionConfig } from './blocks-DyouPohq.js';
|
|
5
5
|
import 'react/jsx-runtime';
|
|
6
6
|
import './dynamic-icon.js';
|
|
7
7
|
import '@page-speed/icon';
|
|
@@ -14,6 +14,14 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
14
14
|
* Main heading content
|
|
15
15
|
*/
|
|
16
16
|
heading?: React.ReactNode;
|
|
17
|
+
/**
|
|
18
|
+
* Custom slot for heading (overrides heading prop)
|
|
19
|
+
*/
|
|
20
|
+
headingSlot?: React.ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* Description text below heading
|
|
23
|
+
*/
|
|
24
|
+
description?: React.ReactNode;
|
|
17
25
|
/**
|
|
18
26
|
* Array of action configurations for CTA buttons
|
|
19
27
|
*/
|
|
@@ -27,13 +35,18 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
27
35
|
*/
|
|
28
36
|
actionsClassName?: string;
|
|
29
37
|
/**
|
|
30
|
-
* Array of
|
|
38
|
+
* Array of task labels that cycle through with animation
|
|
39
|
+
*/
|
|
40
|
+
taskItems?: string[];
|
|
41
|
+
/**
|
|
42
|
+
* Starting minutes for the animated countdown display (default: 25 — Pomodoro style)
|
|
31
43
|
*/
|
|
32
|
-
|
|
44
|
+
timerMinutes?: number;
|
|
33
45
|
/**
|
|
34
|
-
*
|
|
46
|
+
* Starting seconds for the animated countdown display (default: 0)
|
|
35
47
|
*/
|
|
36
|
-
|
|
48
|
+
timerSeconds?: number;
|
|
49
|
+
/**
|
|
37
50
|
* Background style for the section
|
|
38
51
|
*/
|
|
39
52
|
background?: SectionBackground;
|
|
@@ -65,18 +78,6 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
65
78
|
* Additional CSS classes for the heading
|
|
66
79
|
*/
|
|
67
80
|
headingClassName?: string;
|
|
68
|
-
/**
|
|
69
|
-
* Additional CSS classes for the images area
|
|
70
|
-
*/
|
|
71
|
-
imagesClassName?: string;
|
|
72
|
-
/**
|
|
73
|
-
* OptixFlow image optimization configuration
|
|
74
|
-
*/
|
|
75
|
-
optixFlowConfig?: OptixFlowConfig;
|
|
76
|
-
/**
|
|
77
|
-
* Description text below heading
|
|
78
|
-
*/
|
|
79
|
-
description?: React.ReactNode;
|
|
80
81
|
/**
|
|
81
82
|
* Additional CSS classes for the description
|
|
82
83
|
*/
|
|
@@ -96,6 +97,6 @@ interface HeroTaskTimerAnimatedProps {
|
|
|
96
97
|
/** Optional Section ID */
|
|
97
98
|
sectionId?: string;
|
|
98
99
|
}
|
|
99
|
-
declare function HeroTaskTimerAnimated({ sectionId, heading,
|
|
100
|
+
declare function HeroTaskTimerAnimated({ sectionId, heading, headingSlot, description, actions, actionsSlot, actionsClassName, taskItems, timerMinutes, timerSeconds, background, pattern, patternOpacity, className, spacing, containerClassName, headerClassName, headingClassName, descriptionClassName, logo, logoSlot, logoClassName, }: HeroTaskTimerAnimatedProps): React.JSX.Element;
|
|
100
101
|
|
|
101
102
|
export { HeroTaskTimerAnimated, type HeroTaskTimerAnimatedProps };
|