@opensite/ui 1.6.3 → 1.6.5
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/components.cjs +155 -75
- package/dist/components.js +155 -75
- package/dist/feature-utility-cards-grid.cjs +1 -1
- package/dist/feature-utility-cards-grid.js +1 -1
- package/dist/footer-cta-banner.cjs +155 -75
- package/dist/footer-cta-banner.d.cts +5 -1
- package/dist/footer-cta-banner.d.ts +5 -1
- package/dist/footer-cta-banner.js +155 -75
- package/dist/hero-overlay-cta-grid.cjs +85 -90
- package/dist/hero-overlay-cta-grid.js +85 -90
- package/dist/hero-pattern-badge-logos.cjs +28 -9
- package/dist/hero-pattern-badge-logos.js +28 -9
- package/dist/hero-pattern-logo-tech-stack.cjs +133 -105
- package/dist/hero-pattern-logo-tech-stack.d.cts +1 -4
- package/dist/hero-pattern-logo-tech-stack.d.ts +1 -4
- package/dist/hero-pattern-logo-tech-stack.js +133 -105
- package/dist/index.cjs +155 -75
- package/dist/index.js +155 -75
- package/dist/link-page-newsletter-social.cjs +75 -137
- package/dist/link-page-newsletter-social.d.cts +1 -1
- package/dist/link-page-newsletter-social.d.ts +1 -1
- package/dist/link-page-newsletter-social.js +75 -137
- package/dist/link-tree-block.cjs +31 -32
- package/dist/link-tree-block.d.cts +1 -5
- package/dist/link-tree-block.d.ts +1 -5
- package/dist/link-tree-block.js +31 -32
- package/dist/registry.cjs +465 -317
- package/dist/registry.js +465 -317
- package/package.json +1 -1
package/dist/link-tree-block.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var React6 = require('react');
|
|
5
5
|
var clsx = require('clsx');
|
|
6
6
|
var tailwindMerge = require('tailwind-merge');
|
|
7
7
|
var classVarianceAuthority = require('class-variance-authority');
|
|
@@ -28,7 +28,7 @@ function _interopNamespace(e) {
|
|
|
28
28
|
return Object.freeze(n);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
var
|
|
31
|
+
var React6__namespace = /*#__PURE__*/_interopNamespace(React6);
|
|
32
32
|
|
|
33
33
|
// components/blocks/link-page/link-tree-block.tsx
|
|
34
34
|
function cn(...inputs) {
|
|
@@ -109,7 +109,7 @@ function useNavigation({
|
|
|
109
109
|
href,
|
|
110
110
|
onClick
|
|
111
111
|
} = {}) {
|
|
112
|
-
const linkType =
|
|
112
|
+
const linkType = React6__namespace.useMemo(() => {
|
|
113
113
|
if (!href || href.trim() === "") {
|
|
114
114
|
return onClick ? "none" : "none";
|
|
115
115
|
}
|
|
@@ -130,7 +130,7 @@ function useNavigation({
|
|
|
130
130
|
return "internal";
|
|
131
131
|
}
|
|
132
132
|
}, [href, onClick]);
|
|
133
|
-
const normalizedHref =
|
|
133
|
+
const normalizedHref = React6__namespace.useMemo(() => {
|
|
134
134
|
if (!href || href.trim() === "") {
|
|
135
135
|
return void 0;
|
|
136
136
|
}
|
|
@@ -148,7 +148,7 @@ function useNavigation({
|
|
|
148
148
|
return trimmed;
|
|
149
149
|
}
|
|
150
150
|
}, [href, linkType]);
|
|
151
|
-
const target =
|
|
151
|
+
const target = React6__namespace.useMemo(() => {
|
|
152
152
|
switch (linkType) {
|
|
153
153
|
case "external":
|
|
154
154
|
return "_blank";
|
|
@@ -161,7 +161,7 @@ function useNavigation({
|
|
|
161
161
|
return void 0;
|
|
162
162
|
}
|
|
163
163
|
}, [linkType]);
|
|
164
|
-
const rel =
|
|
164
|
+
const rel = React6__namespace.useMemo(() => {
|
|
165
165
|
if (linkType === "external") {
|
|
166
166
|
return "noopener noreferrer";
|
|
167
167
|
}
|
|
@@ -170,7 +170,7 @@ function useNavigation({
|
|
|
170
170
|
const isExternal = linkType === "external";
|
|
171
171
|
const isInternal = linkType === "internal";
|
|
172
172
|
const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
|
|
173
|
-
const handleClick =
|
|
173
|
+
const handleClick = React6__namespace.useCallback(
|
|
174
174
|
(event) => {
|
|
175
175
|
if (onClick) {
|
|
176
176
|
try {
|
|
@@ -354,7 +354,7 @@ var buttonVariants = classVarianceAuthority.cva(baseStyles, {
|
|
|
354
354
|
size: "default"
|
|
355
355
|
}
|
|
356
356
|
});
|
|
357
|
-
var Pressable =
|
|
357
|
+
var Pressable = React6__namespace.forwardRef(
|
|
358
358
|
({
|
|
359
359
|
children,
|
|
360
360
|
className,
|
|
@@ -460,10 +460,10 @@ function DynamicIcon({
|
|
|
460
460
|
className,
|
|
461
461
|
alt
|
|
462
462
|
}) {
|
|
463
|
-
const [svgContent, setSvgContent] =
|
|
464
|
-
const [isLoading, setIsLoading] =
|
|
465
|
-
const [error, setError] =
|
|
466
|
-
const { url, iconName } =
|
|
463
|
+
const [svgContent, setSvgContent] = React6__namespace.useState(null);
|
|
464
|
+
const [isLoading, setIsLoading] = React6__namespace.useState(true);
|
|
465
|
+
const [error, setError] = React6__namespace.useState(null);
|
|
466
|
+
const { url, iconName } = React6__namespace.useMemo(() => {
|
|
467
467
|
const separator = name.includes("/") ? "/" : ":";
|
|
468
468
|
const [prefix, iconName2] = name.split(separator);
|
|
469
469
|
const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName2}?format=svg&width=${size}&height=${size}&key=au382bi7fsh96w9h9xlrnat2jglx`;
|
|
@@ -472,7 +472,7 @@ function DynamicIcon({
|
|
|
472
472
|
iconName: iconName2
|
|
473
473
|
};
|
|
474
474
|
}, [name, size]);
|
|
475
|
-
|
|
475
|
+
React6__namespace.useEffect(() => {
|
|
476
476
|
let isMounted = true;
|
|
477
477
|
const fetchSvg = async () => {
|
|
478
478
|
const cached = svgCache.get(url);
|
|
@@ -602,7 +602,7 @@ var maxWidthStyles = {
|
|
|
602
602
|
"4xl": "max-w-[1536px]",
|
|
603
603
|
full: "max-w-full"
|
|
604
604
|
};
|
|
605
|
-
var Container =
|
|
605
|
+
var Container = React6__namespace.default.forwardRef(
|
|
606
606
|
({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
|
|
607
607
|
const Component = as;
|
|
608
608
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -907,7 +907,7 @@ var spacingStyles = {
|
|
|
907
907
|
};
|
|
908
908
|
var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
|
|
909
909
|
var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
|
|
910
|
-
var Section =
|
|
910
|
+
var Section = React6__namespace.default.forwardRef(
|
|
911
911
|
({
|
|
912
912
|
id,
|
|
913
913
|
title,
|
|
@@ -987,7 +987,6 @@ function LinkTreeBlock({
|
|
|
987
987
|
footerAction,
|
|
988
988
|
footerSlot,
|
|
989
989
|
className,
|
|
990
|
-
containerClassName,
|
|
991
990
|
contentClassName,
|
|
992
991
|
headerClassName,
|
|
993
992
|
avatarClassName,
|
|
@@ -1014,20 +1013,20 @@ function LinkTreeBlock({
|
|
|
1014
1013
|
socialLinkClassName,
|
|
1015
1014
|
socialIconClassName,
|
|
1016
1015
|
footerClassName,
|
|
1017
|
-
background
|
|
1018
|
-
|
|
1016
|
+
background,
|
|
1017
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
1018
|
+
spacing = "py-12 md:py-32",
|
|
1019
1019
|
pattern,
|
|
1020
1020
|
patternOpacity,
|
|
1021
1021
|
patternClassName,
|
|
1022
1022
|
backgroundPattern,
|
|
1023
|
-
accentColor,
|
|
1024
1023
|
optixFlowConfig
|
|
1025
1024
|
}) {
|
|
1026
1025
|
const resolvedBackground = background;
|
|
1027
1026
|
const resolvedPattern = pattern ?? backgroundPattern;
|
|
1028
|
-
const [lightboxOpen, setLightboxOpen] =
|
|
1029
|
-
const [lightboxIndex, setLightboxIndex] =
|
|
1030
|
-
const lightboxItems =
|
|
1027
|
+
const [lightboxOpen, setLightboxOpen] = React6__namespace.useState(false);
|
|
1028
|
+
const [lightboxIndex, setLightboxIndex] = React6__namespace.useState(0);
|
|
1029
|
+
const lightboxItems = React6__namespace.useMemo(() => {
|
|
1031
1030
|
if (!mediaGallery || mediaGallery.length === 0) return [];
|
|
1032
1031
|
return mediaGallery.slice(0, mediaGalleryLimit).map((item, index) => ({
|
|
1033
1032
|
id: item.id ?? `media-${index}`,
|
|
@@ -1039,11 +1038,11 @@ function LinkTreeBlock({
|
|
|
1039
1038
|
share: true
|
|
1040
1039
|
}));
|
|
1041
1040
|
}, [mediaGallery, mediaGalleryLimit]);
|
|
1042
|
-
const handleMediaClick =
|
|
1041
|
+
const handleMediaClick = React6__namespace.useCallback((index) => {
|
|
1043
1042
|
setLightboxIndex(index);
|
|
1044
1043
|
setLightboxOpen(true);
|
|
1045
1044
|
}, []);
|
|
1046
|
-
const handleLightboxClose =
|
|
1045
|
+
const handleLightboxClose = React6__namespace.useCallback(() => {
|
|
1047
1046
|
setLightboxOpen(false);
|
|
1048
1047
|
}, []);
|
|
1049
1048
|
const resolveImage = (value, fallbackAlt) => {
|
|
@@ -1055,7 +1054,7 @@ function LinkTreeBlock({
|
|
|
1055
1054
|
};
|
|
1056
1055
|
const nameForAlt = typeof brandName === "string" ? brandName : "Brand avatar";
|
|
1057
1056
|
const resolvedAvatar = resolveImage(brandAvatar || brandLogo, nameForAlt) || resolveImage(blockBrandedIconsAndPlaceholders.avatar1, nameForAlt);
|
|
1058
|
-
const renderBrandHeader =
|
|
1057
|
+
const renderBrandHeader = React6__namespace.useMemo(() => {
|
|
1059
1058
|
if (brandSlot) return brandSlot;
|
|
1060
1059
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1061
1060
|
"div",
|
|
@@ -1142,7 +1141,7 @@ function LinkTreeBlock({
|
|
|
1142
1141
|
brandTagline,
|
|
1143
1142
|
taglineClassName
|
|
1144
1143
|
]);
|
|
1145
|
-
const renderLinks =
|
|
1144
|
+
const renderLinks = React6__namespace.useMemo(() => {
|
|
1146
1145
|
if (linksSlot) return linksSlot;
|
|
1147
1146
|
if (!links || links.length === 0) return null;
|
|
1148
1147
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-3", linksClassName), children: links.map((link, index) => {
|
|
@@ -1174,7 +1173,7 @@ function LinkTreeBlock({
|
|
|
1174
1173
|
className: cn(
|
|
1175
1174
|
"group relative flex w-full items-center gap-3 rounded-xl px-4 py-3.5 transition-all duration-200",
|
|
1176
1175
|
"hover:scale-[1.02] active:scale-[0.98]",
|
|
1177
|
-
isFeatured ? "bg-primary text-primary-foreground shadow-lg hover:bg-primary/90" : "border border-border bg-card hover:bg-accent",
|
|
1176
|
+
isFeatured ? "bg-primary text-primary-foreground shadow-lg hover:bg-primary/90" : "border border-border bg-card text-card-foreground hover:bg-accent",
|
|
1178
1177
|
linkClassName,
|
|
1179
1178
|
isFeatured ? featuredLinkClassName : null,
|
|
1180
1179
|
linkItemClassName
|
|
@@ -1191,7 +1190,7 @@ function LinkTreeBlock({
|
|
|
1191
1190
|
className: cn(
|
|
1192
1191
|
"group relative flex w-full items-center gap-3 rounded-xl px-4 py-3.5 transition-all duration-200",
|
|
1193
1192
|
"hover:scale-[1.02] active:scale-[0.98]",
|
|
1194
|
-
isFeatured ? "bg-primary text-primary-foreground shadow-lg hover:bg-primary/90" : "border border-border bg-card hover:bg-accent",
|
|
1193
|
+
isFeatured ? "bg-primary text-primary-foreground shadow-lg hover:bg-primary/90" : "border border-border bg-card text-card-foreground hover:bg-accent",
|
|
1195
1194
|
linkClassName,
|
|
1196
1195
|
isFeatured ? featuredLinkClassName : null,
|
|
1197
1196
|
linkItemClassName
|
|
@@ -1259,7 +1258,7 @@ function LinkTreeBlock({
|
|
|
1259
1258
|
linkBadgeClassName,
|
|
1260
1259
|
linkChevronClassName
|
|
1261
1260
|
]);
|
|
1262
|
-
const renderMediaGallery =
|
|
1261
|
+
const renderMediaGallery = React6__namespace.useMemo(() => {
|
|
1263
1262
|
if (mediaGallerySlot) return mediaGallerySlot;
|
|
1264
1263
|
if (!mediaGallery || mediaGallery.length === 0) return null;
|
|
1265
1264
|
const items = mediaGallery.slice(0, mediaGalleryLimit);
|
|
@@ -1373,7 +1372,7 @@ function LinkTreeBlock({
|
|
|
1373
1372
|
mediaGalleryOverlayClassName,
|
|
1374
1373
|
mediaGalleryPlayIconClassName
|
|
1375
1374
|
]);
|
|
1376
|
-
const renderSocialLinks =
|
|
1375
|
+
const renderSocialLinks = React6__namespace.useMemo(() => {
|
|
1377
1376
|
if (socialLinksSlot) return socialLinksSlot;
|
|
1378
1377
|
if (!socialLinks || socialLinks.length === 0) return null;
|
|
1379
1378
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1419,7 +1418,7 @@ function LinkTreeBlock({
|
|
|
1419
1418
|
socialIconClassName,
|
|
1420
1419
|
socialLinkClassName
|
|
1421
1420
|
]);
|
|
1422
|
-
const renderFooter =
|
|
1421
|
+
const renderFooter = React6__namespace.useMemo(() => {
|
|
1423
1422
|
if (footerSlot) return footerSlot;
|
|
1424
1423
|
if (!footerAction) return null;
|
|
1425
1424
|
const resolvedFooterAction = footerAction;
|
|
@@ -1458,7 +1457,7 @@ function LinkTreeBlock({
|
|
|
1458
1457
|
pattern: resolvedPattern,
|
|
1459
1458
|
patternOpacity,
|
|
1460
1459
|
patternClassName,
|
|
1461
|
-
|
|
1460
|
+
containerClassName,
|
|
1462
1461
|
children: [
|
|
1463
1462
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1464
1463
|
"div",
|
|
@@ -245,10 +245,6 @@ interface LinkTreeBlockProps {
|
|
|
245
245
|
* Background pattern URL (legacy)
|
|
246
246
|
*/
|
|
247
247
|
backgroundPattern?: PatternName | undefined;
|
|
248
|
-
/**
|
|
249
|
-
* Custom accent color CSS value (applied as --accent-color CSS variable)
|
|
250
|
-
*/
|
|
251
|
-
accentColor?: string;
|
|
252
248
|
/**
|
|
253
249
|
* OptixFlow image optimization configuration
|
|
254
250
|
*/
|
|
@@ -290,6 +286,6 @@ interface LinkTreeBlockProps {
|
|
|
290
286
|
* />
|
|
291
287
|
* ```
|
|
292
288
|
*/
|
|
293
|
-
declare function LinkTreeBlock({ brandName, brandTagline, brandLogo, brandAvatar, brandVerified, verifiedIcon, brandSlot, links, linksSlot, socialLinks, socialLinksSlot, mediaGallery, mediaGallerySlot, mediaGalleryTitle, mediaGalleryLimit, footerAction, footerSlot, className,
|
|
289
|
+
declare function LinkTreeBlock({ brandName, brandTagline, brandLogo, brandAvatar, brandVerified, verifiedIcon, brandSlot, links, linksSlot, socialLinks, socialLinksSlot, mediaGallery, mediaGallerySlot, mediaGalleryTitle, mediaGalleryLimit, footerAction, footerSlot, className, contentClassName, headerClassName, avatarClassName, nameClassName, taglineClassName, verifiedBadgeClassName, verifiedIconClassName, linksClassName, linkClassName, featuredLinkClassName, linkIconClassName, linkLabelClassName, linkDescriptionClassName, linkBadgeClassName, linkChevronClassName, mediaGalleryClassName, mediaGalleryTitleClassName, mediaGalleryGridClassName, mediaGalleryItemClassName, mediaGalleryMediaClassName, mediaGalleryOverlayClassName, mediaGalleryPlayIconClassName, socialLinksClassName, socialLinkClassName, socialIconClassName, footerClassName, background, containerClassName, spacing, pattern, patternOpacity, patternClassName, backgroundPattern, optixFlowConfig, }: LinkTreeBlockProps): React.JSX.Element;
|
|
294
290
|
|
|
295
291
|
export { LinkTreeBlock, type LinkTreeBlockProps, type LinkTreeLink, type MediaGalleryItem, type SocialLink };
|
|
@@ -245,10 +245,6 @@ interface LinkTreeBlockProps {
|
|
|
245
245
|
* Background pattern URL (legacy)
|
|
246
246
|
*/
|
|
247
247
|
backgroundPattern?: PatternName | undefined;
|
|
248
|
-
/**
|
|
249
|
-
* Custom accent color CSS value (applied as --accent-color CSS variable)
|
|
250
|
-
*/
|
|
251
|
-
accentColor?: string;
|
|
252
248
|
/**
|
|
253
249
|
* OptixFlow image optimization configuration
|
|
254
250
|
*/
|
|
@@ -290,6 +286,6 @@ interface LinkTreeBlockProps {
|
|
|
290
286
|
* />
|
|
291
287
|
* ```
|
|
292
288
|
*/
|
|
293
|
-
declare function LinkTreeBlock({ brandName, brandTagline, brandLogo, brandAvatar, brandVerified, verifiedIcon, brandSlot, links, linksSlot, socialLinks, socialLinksSlot, mediaGallery, mediaGallerySlot, mediaGalleryTitle, mediaGalleryLimit, footerAction, footerSlot, className,
|
|
289
|
+
declare function LinkTreeBlock({ brandName, brandTagline, brandLogo, brandAvatar, brandVerified, verifiedIcon, brandSlot, links, linksSlot, socialLinks, socialLinksSlot, mediaGallery, mediaGallerySlot, mediaGalleryTitle, mediaGalleryLimit, footerAction, footerSlot, className, contentClassName, headerClassName, avatarClassName, nameClassName, taglineClassName, verifiedBadgeClassName, verifiedIconClassName, linksClassName, linkClassName, featuredLinkClassName, linkIconClassName, linkLabelClassName, linkDescriptionClassName, linkBadgeClassName, linkChevronClassName, mediaGalleryClassName, mediaGalleryTitleClassName, mediaGalleryGridClassName, mediaGalleryItemClassName, mediaGalleryMediaClassName, mediaGalleryOverlayClassName, mediaGalleryPlayIconClassName, socialLinksClassName, socialLinkClassName, socialIconClassName, footerClassName, background, containerClassName, spacing, pattern, patternOpacity, patternClassName, backgroundPattern, optixFlowConfig, }: LinkTreeBlockProps): React.JSX.Element;
|
|
294
290
|
|
|
295
291
|
export { LinkTreeBlock, type LinkTreeBlockProps, type LinkTreeLink, type MediaGalleryItem, type SocialLink };
|
package/dist/link-tree-block.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
2
|
+
import * as React6 from 'react';
|
|
3
|
+
import React6__default from 'react';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
6
|
import { cva } from 'class-variance-authority';
|
|
@@ -88,7 +88,7 @@ function useNavigation({
|
|
|
88
88
|
href,
|
|
89
89
|
onClick
|
|
90
90
|
} = {}) {
|
|
91
|
-
const linkType =
|
|
91
|
+
const linkType = React6.useMemo(() => {
|
|
92
92
|
if (!href || href.trim() === "") {
|
|
93
93
|
return onClick ? "none" : "none";
|
|
94
94
|
}
|
|
@@ -109,7 +109,7 @@ function useNavigation({
|
|
|
109
109
|
return "internal";
|
|
110
110
|
}
|
|
111
111
|
}, [href, onClick]);
|
|
112
|
-
const normalizedHref =
|
|
112
|
+
const normalizedHref = React6.useMemo(() => {
|
|
113
113
|
if (!href || href.trim() === "") {
|
|
114
114
|
return void 0;
|
|
115
115
|
}
|
|
@@ -127,7 +127,7 @@ function useNavigation({
|
|
|
127
127
|
return trimmed;
|
|
128
128
|
}
|
|
129
129
|
}, [href, linkType]);
|
|
130
|
-
const target =
|
|
130
|
+
const target = React6.useMemo(() => {
|
|
131
131
|
switch (linkType) {
|
|
132
132
|
case "external":
|
|
133
133
|
return "_blank";
|
|
@@ -140,7 +140,7 @@ function useNavigation({
|
|
|
140
140
|
return void 0;
|
|
141
141
|
}
|
|
142
142
|
}, [linkType]);
|
|
143
|
-
const rel =
|
|
143
|
+
const rel = React6.useMemo(() => {
|
|
144
144
|
if (linkType === "external") {
|
|
145
145
|
return "noopener noreferrer";
|
|
146
146
|
}
|
|
@@ -149,7 +149,7 @@ function useNavigation({
|
|
|
149
149
|
const isExternal = linkType === "external";
|
|
150
150
|
const isInternal = linkType === "internal";
|
|
151
151
|
const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
|
|
152
|
-
const handleClick =
|
|
152
|
+
const handleClick = React6.useCallback(
|
|
153
153
|
(event) => {
|
|
154
154
|
if (onClick) {
|
|
155
155
|
try {
|
|
@@ -333,7 +333,7 @@ var buttonVariants = cva(baseStyles, {
|
|
|
333
333
|
size: "default"
|
|
334
334
|
}
|
|
335
335
|
});
|
|
336
|
-
var Pressable =
|
|
336
|
+
var Pressable = React6.forwardRef(
|
|
337
337
|
({
|
|
338
338
|
children,
|
|
339
339
|
className,
|
|
@@ -439,10 +439,10 @@ function DynamicIcon({
|
|
|
439
439
|
className,
|
|
440
440
|
alt
|
|
441
441
|
}) {
|
|
442
|
-
const [svgContent, setSvgContent] =
|
|
443
|
-
const [isLoading, setIsLoading] =
|
|
444
|
-
const [error, setError] =
|
|
445
|
-
const { url, iconName } =
|
|
442
|
+
const [svgContent, setSvgContent] = React6.useState(null);
|
|
443
|
+
const [isLoading, setIsLoading] = React6.useState(true);
|
|
444
|
+
const [error, setError] = React6.useState(null);
|
|
445
|
+
const { url, iconName } = React6.useMemo(() => {
|
|
446
446
|
const separator = name.includes("/") ? "/" : ":";
|
|
447
447
|
const [prefix, iconName2] = name.split(separator);
|
|
448
448
|
const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName2}?format=svg&width=${size}&height=${size}&key=au382bi7fsh96w9h9xlrnat2jglx`;
|
|
@@ -451,7 +451,7 @@ function DynamicIcon({
|
|
|
451
451
|
iconName: iconName2
|
|
452
452
|
};
|
|
453
453
|
}, [name, size]);
|
|
454
|
-
|
|
454
|
+
React6.useEffect(() => {
|
|
455
455
|
let isMounted = true;
|
|
456
456
|
const fetchSvg = async () => {
|
|
457
457
|
const cached = svgCache.get(url);
|
|
@@ -581,7 +581,7 @@ var maxWidthStyles = {
|
|
|
581
581
|
"4xl": "max-w-[1536px]",
|
|
582
582
|
full: "max-w-full"
|
|
583
583
|
};
|
|
584
|
-
var Container =
|
|
584
|
+
var Container = React6__default.forwardRef(
|
|
585
585
|
({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
|
|
586
586
|
const Component = as;
|
|
587
587
|
return /* @__PURE__ */ jsx(
|
|
@@ -886,7 +886,7 @@ var spacingStyles = {
|
|
|
886
886
|
};
|
|
887
887
|
var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
|
|
888
888
|
var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
|
|
889
|
-
var Section =
|
|
889
|
+
var Section = React6__default.forwardRef(
|
|
890
890
|
({
|
|
891
891
|
id,
|
|
892
892
|
title,
|
|
@@ -966,7 +966,6 @@ function LinkTreeBlock({
|
|
|
966
966
|
footerAction,
|
|
967
967
|
footerSlot,
|
|
968
968
|
className,
|
|
969
|
-
containerClassName,
|
|
970
969
|
contentClassName,
|
|
971
970
|
headerClassName,
|
|
972
971
|
avatarClassName,
|
|
@@ -993,20 +992,20 @@ function LinkTreeBlock({
|
|
|
993
992
|
socialLinkClassName,
|
|
994
993
|
socialIconClassName,
|
|
995
994
|
footerClassName,
|
|
996
|
-
background
|
|
997
|
-
|
|
995
|
+
background,
|
|
996
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
997
|
+
spacing = "py-12 md:py-32",
|
|
998
998
|
pattern,
|
|
999
999
|
patternOpacity,
|
|
1000
1000
|
patternClassName,
|
|
1001
1001
|
backgroundPattern,
|
|
1002
|
-
accentColor,
|
|
1003
1002
|
optixFlowConfig
|
|
1004
1003
|
}) {
|
|
1005
1004
|
const resolvedBackground = background;
|
|
1006
1005
|
const resolvedPattern = pattern ?? backgroundPattern;
|
|
1007
|
-
const [lightboxOpen, setLightboxOpen] = useState(false);
|
|
1008
|
-
const [lightboxIndex, setLightboxIndex] = useState(0);
|
|
1009
|
-
const lightboxItems = useMemo(() => {
|
|
1006
|
+
const [lightboxOpen, setLightboxOpen] = React6.useState(false);
|
|
1007
|
+
const [lightboxIndex, setLightboxIndex] = React6.useState(0);
|
|
1008
|
+
const lightboxItems = React6.useMemo(() => {
|
|
1010
1009
|
if (!mediaGallery || mediaGallery.length === 0) return [];
|
|
1011
1010
|
return mediaGallery.slice(0, mediaGalleryLimit).map((item, index) => ({
|
|
1012
1011
|
id: item.id ?? `media-${index}`,
|
|
@@ -1018,11 +1017,11 @@ function LinkTreeBlock({
|
|
|
1018
1017
|
share: true
|
|
1019
1018
|
}));
|
|
1020
1019
|
}, [mediaGallery, mediaGalleryLimit]);
|
|
1021
|
-
const handleMediaClick = useCallback((index) => {
|
|
1020
|
+
const handleMediaClick = React6.useCallback((index) => {
|
|
1022
1021
|
setLightboxIndex(index);
|
|
1023
1022
|
setLightboxOpen(true);
|
|
1024
1023
|
}, []);
|
|
1025
|
-
const handleLightboxClose = useCallback(() => {
|
|
1024
|
+
const handleLightboxClose = React6.useCallback(() => {
|
|
1026
1025
|
setLightboxOpen(false);
|
|
1027
1026
|
}, []);
|
|
1028
1027
|
const resolveImage = (value, fallbackAlt) => {
|
|
@@ -1034,7 +1033,7 @@ function LinkTreeBlock({
|
|
|
1034
1033
|
};
|
|
1035
1034
|
const nameForAlt = typeof brandName === "string" ? brandName : "Brand avatar";
|
|
1036
1035
|
const resolvedAvatar = resolveImage(brandAvatar || brandLogo, nameForAlt) || resolveImage(blockBrandedIconsAndPlaceholders.avatar1, nameForAlt);
|
|
1037
|
-
const renderBrandHeader = useMemo(() => {
|
|
1036
|
+
const renderBrandHeader = React6.useMemo(() => {
|
|
1038
1037
|
if (brandSlot) return brandSlot;
|
|
1039
1038
|
return /* @__PURE__ */ jsxs(
|
|
1040
1039
|
"div",
|
|
@@ -1121,7 +1120,7 @@ function LinkTreeBlock({
|
|
|
1121
1120
|
brandTagline,
|
|
1122
1121
|
taglineClassName
|
|
1123
1122
|
]);
|
|
1124
|
-
const renderLinks = useMemo(() => {
|
|
1123
|
+
const renderLinks = React6.useMemo(() => {
|
|
1125
1124
|
if (linksSlot) return linksSlot;
|
|
1126
1125
|
if (!links || links.length === 0) return null;
|
|
1127
1126
|
return /* @__PURE__ */ jsx("div", { className: cn("space-y-3", linksClassName), children: links.map((link, index) => {
|
|
@@ -1153,7 +1152,7 @@ function LinkTreeBlock({
|
|
|
1153
1152
|
className: cn(
|
|
1154
1153
|
"group relative flex w-full items-center gap-3 rounded-xl px-4 py-3.5 transition-all duration-200",
|
|
1155
1154
|
"hover:scale-[1.02] active:scale-[0.98]",
|
|
1156
|
-
isFeatured ? "bg-primary text-primary-foreground shadow-lg hover:bg-primary/90" : "border border-border bg-card hover:bg-accent",
|
|
1155
|
+
isFeatured ? "bg-primary text-primary-foreground shadow-lg hover:bg-primary/90" : "border border-border bg-card text-card-foreground hover:bg-accent",
|
|
1157
1156
|
linkClassName,
|
|
1158
1157
|
isFeatured ? featuredLinkClassName : null,
|
|
1159
1158
|
linkItemClassName
|
|
@@ -1170,7 +1169,7 @@ function LinkTreeBlock({
|
|
|
1170
1169
|
className: cn(
|
|
1171
1170
|
"group relative flex w-full items-center gap-3 rounded-xl px-4 py-3.5 transition-all duration-200",
|
|
1172
1171
|
"hover:scale-[1.02] active:scale-[0.98]",
|
|
1173
|
-
isFeatured ? "bg-primary text-primary-foreground shadow-lg hover:bg-primary/90" : "border border-border bg-card hover:bg-accent",
|
|
1172
|
+
isFeatured ? "bg-primary text-primary-foreground shadow-lg hover:bg-primary/90" : "border border-border bg-card text-card-foreground hover:bg-accent",
|
|
1174
1173
|
linkClassName,
|
|
1175
1174
|
isFeatured ? featuredLinkClassName : null,
|
|
1176
1175
|
linkItemClassName
|
|
@@ -1238,7 +1237,7 @@ function LinkTreeBlock({
|
|
|
1238
1237
|
linkBadgeClassName,
|
|
1239
1238
|
linkChevronClassName
|
|
1240
1239
|
]);
|
|
1241
|
-
const renderMediaGallery = useMemo(() => {
|
|
1240
|
+
const renderMediaGallery = React6.useMemo(() => {
|
|
1242
1241
|
if (mediaGallerySlot) return mediaGallerySlot;
|
|
1243
1242
|
if (!mediaGallery || mediaGallery.length === 0) return null;
|
|
1244
1243
|
const items = mediaGallery.slice(0, mediaGalleryLimit);
|
|
@@ -1352,7 +1351,7 @@ function LinkTreeBlock({
|
|
|
1352
1351
|
mediaGalleryOverlayClassName,
|
|
1353
1352
|
mediaGalleryPlayIconClassName
|
|
1354
1353
|
]);
|
|
1355
|
-
const renderSocialLinks = useMemo(() => {
|
|
1354
|
+
const renderSocialLinks = React6.useMemo(() => {
|
|
1356
1355
|
if (socialLinksSlot) return socialLinksSlot;
|
|
1357
1356
|
if (!socialLinks || socialLinks.length === 0) return null;
|
|
1358
1357
|
return /* @__PURE__ */ jsx(
|
|
@@ -1398,7 +1397,7 @@ function LinkTreeBlock({
|
|
|
1398
1397
|
socialIconClassName,
|
|
1399
1398
|
socialLinkClassName
|
|
1400
1399
|
]);
|
|
1401
|
-
const renderFooter = useMemo(() => {
|
|
1400
|
+
const renderFooter = React6.useMemo(() => {
|
|
1402
1401
|
if (footerSlot) return footerSlot;
|
|
1403
1402
|
if (!footerAction) return null;
|
|
1404
1403
|
const resolvedFooterAction = footerAction;
|
|
@@ -1437,7 +1436,7 @@ function LinkTreeBlock({
|
|
|
1437
1436
|
pattern: resolvedPattern,
|
|
1438
1437
|
patternOpacity,
|
|
1439
1438
|
patternClassName,
|
|
1440
|
-
|
|
1439
|
+
containerClassName,
|
|
1441
1440
|
children: [
|
|
1442
1441
|
/* @__PURE__ */ jsx(
|
|
1443
1442
|
"div",
|