@almadar/ui 2.23.0 → 2.24.1
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/atoms/PatternTile.d.ts +41 -0
- package/dist/components/atoms/index.d.ts +1 -0
- package/dist/components/index.cjs +2134 -1122
- package/dist/components/index.js +1270 -262
- package/dist/components/molecules/EdgeDecoration.d.ts +35 -0
- package/dist/components/molecules/GeometricPattern.d.ts +33 -0
- package/dist/components/molecules/index.d.ts +2 -0
- package/dist/docs/index.cjs +3 -3
- package/dist/docs/index.js +3 -3
- package/dist/marketing/index.cjs +1033 -21
- package/dist/marketing/index.d.cts +112 -1
- package/dist/marketing/index.d.ts +6 -0
- package/dist/marketing/index.js +1032 -24
- package/dist/providers/index.cjs +124 -124
- package/dist/providers/index.js +36 -36
- package/dist/runtime/enrichFromResponse.d.ts +1 -1
- package/dist/runtime/index.cjs +1005 -997
- package/dist/runtime/index.js +246 -238
- package/package.json +1 -1
- package/themes/almadar-website.css +36 -34
package/dist/marketing/index.cjs
CHANGED
|
@@ -29,16 +29,16 @@ var LucideIcons__namespace = /*#__PURE__*/_interopNamespace(LucideIcons);
|
|
|
29
29
|
|
|
30
30
|
// node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
|
|
31
31
|
function r(e) {
|
|
32
|
-
var t,
|
|
32
|
+
var t, f3, n = "";
|
|
33
33
|
if ("string" == typeof e || "number" == typeof e) n += e;
|
|
34
34
|
else if ("object" == typeof e) if (Array.isArray(e)) {
|
|
35
35
|
var o = e.length;
|
|
36
|
-
for (t = 0; t < o; t++) e[t] && (
|
|
37
|
-
} else for (
|
|
36
|
+
for (t = 0; t < o; t++) e[t] && (f3 = r(e[t])) && (n && (n += " "), n += f3);
|
|
37
|
+
} else for (f3 in e) e[f3] && (n && (n += " "), n += f3);
|
|
38
38
|
return n;
|
|
39
39
|
}
|
|
40
40
|
function clsx() {
|
|
41
|
-
for (var e, t,
|
|
41
|
+
for (var e, t, f3 = 0, n = "", o = arguments.length; f3 < o; f3++) (e = arguments[f3]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
42
42
|
return n;
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -3047,9 +3047,9 @@ var variantStyles2 = {
|
|
|
3047
3047
|
"active:scale-[var(--active-scale)] active:shadow-[var(--shadow-active)]"
|
|
3048
3048
|
].join(" "),
|
|
3049
3049
|
secondary: [
|
|
3050
|
-
"bg-
|
|
3051
|
-
"border-[length:var(--border-width
|
|
3052
|
-
"hover:bg-[var(--color-
|
|
3050
|
+
"bg-transparent text-[var(--color-accent)]",
|
|
3051
|
+
"border-[length:var(--border-width)] border-[var(--color-accent)]",
|
|
3052
|
+
"hover:bg-[var(--color-accent)] hover:text-white",
|
|
3053
3053
|
"active:scale-[var(--active-scale)]"
|
|
3054
3054
|
].join(" "),
|
|
3055
3055
|
ghost: [
|
|
@@ -3687,14 +3687,14 @@ var HeroSection = ({
|
|
|
3687
3687
|
src: image.src,
|
|
3688
3688
|
alt: image.alt,
|
|
3689
3689
|
className: cn(
|
|
3690
|
-
imagePosition === "right" ? "flex-1 min-h-[300px]" : "w-full
|
|
3690
|
+
imagePosition === "right" ? "flex-1 min-h-[300px]" : "w-full min-h-[400px]"
|
|
3691
3691
|
)
|
|
3692
3692
|
}
|
|
3693
3693
|
);
|
|
3694
|
-
const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xl", align: "center", className: "w-full max-w-
|
|
3694
|
+
const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xl", align: "center", className: "w-full max-w-7xl", responsive: true, children: [
|
|
3695
3695
|
textContent,
|
|
3696
3696
|
imageNode
|
|
3697
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full max-w-
|
|
3697
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full max-w-7xl", children: [
|
|
3698
3698
|
textContent,
|
|
3699
3699
|
image && imagePosition === "below" && imageNode
|
|
3700
3700
|
] });
|
|
@@ -3752,7 +3752,7 @@ var CTABanner = ({
|
|
|
3752
3752
|
{
|
|
3753
3753
|
gap: "lg",
|
|
3754
3754
|
align: align === "center" ? "center" : "start",
|
|
3755
|
-
className: "max-w-
|
|
3755
|
+
className: "max-w-7xl mx-auto",
|
|
3756
3756
|
children: [
|
|
3757
3757
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h2", align, children: title }),
|
|
3758
3758
|
subtitle && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", color: "muted", align, children: subtitle }),
|
|
@@ -3811,7 +3811,7 @@ var FeatureCard = ({
|
|
|
3811
3811
|
{
|
|
3812
3812
|
name: icon,
|
|
3813
3813
|
size: iconSizeMap[size],
|
|
3814
|
-
className: "text-[var(--color-
|
|
3814
|
+
className: "text-[var(--color-accent,#06b6d4)]"
|
|
3815
3815
|
}
|
|
3816
3816
|
);
|
|
3817
3817
|
}
|
|
@@ -4459,11 +4459,6 @@ var CaseStudyCard = ({
|
|
|
4459
4459
|
] }) });
|
|
4460
4460
|
};
|
|
4461
4461
|
CaseStudyCard.displayName = "CaseStudyCard";
|
|
4462
|
-
var maxWidthMap = {
|
|
4463
|
-
sm: "max-w-2xl",
|
|
4464
|
-
md: "max-w-3xl",
|
|
4465
|
-
lg: "max-w-4xl"
|
|
4466
|
-
};
|
|
4467
4462
|
var ArticleSection = ({
|
|
4468
4463
|
title,
|
|
4469
4464
|
children,
|
|
@@ -4474,8 +4469,7 @@ var ArticleSection = ({
|
|
|
4474
4469
|
Box,
|
|
4475
4470
|
{
|
|
4476
4471
|
className: cn(
|
|
4477
|
-
|
|
4478
|
-
"mx-auto",
|
|
4472
|
+
"max-w-7xl mx-auto",
|
|
4479
4473
|
className
|
|
4480
4474
|
),
|
|
4481
4475
|
padding: "md",
|
|
@@ -4503,7 +4497,7 @@ var MarketingFooter = ({
|
|
|
4503
4497
|
"pt-12 pb-8 px-4",
|
|
4504
4498
|
className
|
|
4505
4499
|
),
|
|
4506
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "max-w-
|
|
4500
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "max-w-7xl mx-auto", children: [
|
|
4507
4501
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "lg", align: "start", className: "flex-wrap w-full justify-between", children: [
|
|
4508
4502
|
logo && /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "sm", className: "min-w-[140px] mb-4", children: logo.href ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: logo.href, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo.src, alt: logo.alt, className: "h-8 w-auto" }) }) : /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo.src, alt: logo.alt, className: "h-8 w-auto" }) }),
|
|
4509
4503
|
columns.map((col) => /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", className: "min-w-[140px] mb-4", children: [
|
|
@@ -4522,7 +4516,7 @@ var MarketingFooter = ({
|
|
|
4522
4516
|
className: cn(
|
|
4523
4517
|
"text-sm no-underline",
|
|
4524
4518
|
"text-[var(--color-background)]/60",
|
|
4525
|
-
"hover:text-[var(--color-
|
|
4519
|
+
"hover:text-[var(--color-accent)]",
|
|
4526
4520
|
"transition-colors duration-150"
|
|
4527
4521
|
),
|
|
4528
4522
|
target: item.href.startsWith("http") ? "_blank" : void 0,
|
|
@@ -4662,6 +4656,1020 @@ var AnimatedCounter = ({
|
|
|
4662
4656
|
] });
|
|
4663
4657
|
};
|
|
4664
4658
|
AnimatedCounter.displayName = "AnimatedCounter";
|
|
4659
|
+
var PI = Math.PI;
|
|
4660
|
+
function lineIntersection(x1, y1, x2, y2, x3, y3, x4, y4) {
|
|
4661
|
+
const denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
|
|
4662
|
+
if (Math.abs(denom) < 1e-10) return [(x1 + x3) / 2, (y1 + y3) / 2];
|
|
4663
|
+
const t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denom;
|
|
4664
|
+
return [x1 + t * (x2 - x1), y1 + t * (y2 - y1)];
|
|
4665
|
+
}
|
|
4666
|
+
function f(n) {
|
|
4667
|
+
return n.toFixed(3);
|
|
4668
|
+
}
|
|
4669
|
+
function picStar(cx, cy, R, n, theta, extent) {
|
|
4670
|
+
const verts = [];
|
|
4671
|
+
for (let k = 0; k < n; k++) {
|
|
4672
|
+
const angle = PI / n + k * (2 * PI) / n;
|
|
4673
|
+
verts.push([cx + R * Math.cos(angle), cy + R * Math.sin(angle)]);
|
|
4674
|
+
}
|
|
4675
|
+
const mids = [];
|
|
4676
|
+
for (let k = 0; k < n; k++) {
|
|
4677
|
+
const next = (k + 1) % n;
|
|
4678
|
+
mids.push([(verts[k][0] + verts[next][0]) / 2, (verts[k][1] + verts[next][1]) / 2]);
|
|
4679
|
+
}
|
|
4680
|
+
const innerPts = [];
|
|
4681
|
+
for (let k = 0; k < n; k++) {
|
|
4682
|
+
const next = (k + 1) % n;
|
|
4683
|
+
const M1 = mids[k];
|
|
4684
|
+
const M2 = mids[next];
|
|
4685
|
+
const edx1 = verts[(k + 1) % n][0] - verts[k][0];
|
|
4686
|
+
const edy1 = verts[(k + 1) % n][1] - verts[k][1];
|
|
4687
|
+
const elen1 = Math.sqrt(edx1 * edx1 + edy1 * edy1);
|
|
4688
|
+
const tx1 = edx1 / elen1;
|
|
4689
|
+
const ty1 = edy1 / elen1;
|
|
4690
|
+
const r1x = tx1 * Math.cos(theta) + ty1 * Math.sin(theta);
|
|
4691
|
+
const r1y = -tx1 * Math.sin(theta) + ty1 * Math.cos(theta);
|
|
4692
|
+
const edx2 = verts[(next + 1) % n][0] - verts[next][0];
|
|
4693
|
+
const edy2 = verts[(next + 1) % n][1] - verts[next][1];
|
|
4694
|
+
const elen2 = Math.sqrt(edx2 * edx2 + edy2 * edy2);
|
|
4695
|
+
const tx2 = edx2 / elen2;
|
|
4696
|
+
const ty2 = edy2 / elen2;
|
|
4697
|
+
const bTheta = PI - theta;
|
|
4698
|
+
const r2x = tx2 * Math.cos(bTheta) + ty2 * Math.sin(bTheta);
|
|
4699
|
+
const r2y = -tx2 * Math.sin(bTheta) + ty2 * Math.cos(bTheta);
|
|
4700
|
+
const P = lineIntersection(
|
|
4701
|
+
M1[0],
|
|
4702
|
+
M1[1],
|
|
4703
|
+
M1[0] + r1x * extent,
|
|
4704
|
+
M1[1] + r1y * extent,
|
|
4705
|
+
M2[0],
|
|
4706
|
+
M2[1],
|
|
4707
|
+
M2[0] + r2x * extent,
|
|
4708
|
+
M2[1] + r2y * extent
|
|
4709
|
+
);
|
|
4710
|
+
innerPts.push(P);
|
|
4711
|
+
}
|
|
4712
|
+
const starPath = mids.map((m, k) => {
|
|
4713
|
+
const inner = innerPts[k];
|
|
4714
|
+
const nextMid = mids[(k + 1) % n];
|
|
4715
|
+
return `M ${f(m[0])},${f(m[1])} L ${f(inner[0])},${f(inner[1])} L ${f(nextMid[0])},${f(nextMid[1])}`;
|
|
4716
|
+
}).join(" ");
|
|
4717
|
+
return { starPath, mids, verts };
|
|
4718
|
+
}
|
|
4719
|
+
function Star8({ size, color, strokeWidth }) {
|
|
4720
|
+
const s = size;
|
|
4721
|
+
const cx = s / 2;
|
|
4722
|
+
const cy = s / 2;
|
|
4723
|
+
const a = s / (1 + Math.SQRT2);
|
|
4724
|
+
const R = a / (2 * Math.sin(PI / 8));
|
|
4725
|
+
const theta = 67.5 * PI / 180;
|
|
4726
|
+
const { starPath, mids } = picStar(cx, cy, R, 8, theta, s);
|
|
4727
|
+
const corners = [[0, 0], [s, 0], [s, s], [0, s]];
|
|
4728
|
+
const crossPaths = [];
|
|
4729
|
+
for (const [cornX, cornY] of corners) {
|
|
4730
|
+
const dists = mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
|
|
4731
|
+
dists.sort((a2, b) => a2.d - b.d);
|
|
4732
|
+
const m1 = mids[dists[0].i];
|
|
4733
|
+
const m2 = mids[dists[1].i];
|
|
4734
|
+
crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
|
|
4735
|
+
}
|
|
4736
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
|
|
4737
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: starPath }),
|
|
4738
|
+
crossPaths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i))
|
|
4739
|
+
] });
|
|
4740
|
+
}
|
|
4741
|
+
function Star6({ size, color, strokeWidth }) {
|
|
4742
|
+
const w = size;
|
|
4743
|
+
const h = size * (2 / Math.sqrt(3));
|
|
4744
|
+
const cx = w / 2;
|
|
4745
|
+
const cy = h / 2;
|
|
4746
|
+
const a = w / Math.sqrt(3);
|
|
4747
|
+
const R = a;
|
|
4748
|
+
const theta = 60 * PI / 180;
|
|
4749
|
+
const { starPath, mids, verts } = picStar(cx, cy, R, 6, theta, w);
|
|
4750
|
+
const triPaths = [];
|
|
4751
|
+
for (let k = 0; k < 6; k++) {
|
|
4752
|
+
const v = verts[k];
|
|
4753
|
+
const m1 = mids[(k + 5) % 6];
|
|
4754
|
+
const m2 = mids[k];
|
|
4755
|
+
triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
|
|
4756
|
+
}
|
|
4757
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
|
|
4758
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: starPath }),
|
|
4759
|
+
triPaths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i))
|
|
4760
|
+
] });
|
|
4761
|
+
}
|
|
4762
|
+
function Khatam({ size, color, strokeWidth }) {
|
|
4763
|
+
const s = size;
|
|
4764
|
+
const cx = s / 2;
|
|
4765
|
+
const cy = s / 2;
|
|
4766
|
+
const a = s / (1 + Math.SQRT2);
|
|
4767
|
+
const R = a / (2 * Math.sin(PI / 8));
|
|
4768
|
+
const theta = 72 * PI / 180;
|
|
4769
|
+
const { starPath, mids } = picStar(cx, cy, R, 8, theta, s);
|
|
4770
|
+
const corners = [[0, 0], [s, 0], [s, s], [0, s]];
|
|
4771
|
+
const crossPaths = [];
|
|
4772
|
+
for (const [cornX, cornY] of corners) {
|
|
4773
|
+
const dists = mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
|
|
4774
|
+
dists.sort((a2, b) => a2.d - b.d);
|
|
4775
|
+
const m1 = mids[dists[0].i];
|
|
4776
|
+
const m2 = mids[dists[1].i];
|
|
4777
|
+
crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
|
|
4778
|
+
}
|
|
4779
|
+
const orbitR = R * 0.35;
|
|
4780
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
|
|
4781
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: starPath }),
|
|
4782
|
+
crossPaths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)),
|
|
4783
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r: orbitR, opacity: "0.4" })
|
|
4784
|
+
] });
|
|
4785
|
+
}
|
|
4786
|
+
function RosetteDouble({ size, color, strokeWidth }) {
|
|
4787
|
+
const s = size;
|
|
4788
|
+
const cx = s / 2;
|
|
4789
|
+
const cy = s / 2;
|
|
4790
|
+
const a = s / (1 + Math.SQRT2);
|
|
4791
|
+
const Router = a / (2 * Math.sin(PI / 8));
|
|
4792
|
+
const Rinner = Router * 0.45;
|
|
4793
|
+
const outer = picStar(cx, cy, Router, 8, 72 * PI / 180, s);
|
|
4794
|
+
const inner = picStar(cx, cy, Rinner, 8, 68 * PI / 180, s);
|
|
4795
|
+
const corners = [[0, 0], [s, 0], [s, s], [0, s]];
|
|
4796
|
+
const crossPaths = [];
|
|
4797
|
+
for (const [cornX, cornY] of corners) {
|
|
4798
|
+
const dists = outer.mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
|
|
4799
|
+
dists.sort((a2, b) => a2.d - b.d);
|
|
4800
|
+
const m1 = outer.mids[dists[0].i];
|
|
4801
|
+
const m2 = outer.mids[dists[1].i];
|
|
4802
|
+
crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
|
|
4803
|
+
}
|
|
4804
|
+
const connectors = [];
|
|
4805
|
+
for (let k = 0; k < 8; k++) {
|
|
4806
|
+
const om = outer.mids[k];
|
|
4807
|
+
const im = inner.mids[k];
|
|
4808
|
+
connectors.push(`M ${f(im[0])},${f(im[1])} L ${f(om[0])},${f(om[1])}`);
|
|
4809
|
+
}
|
|
4810
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
|
|
4811
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: outer.starPath }),
|
|
4812
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: inner.starPath, opacity: "0.7" }),
|
|
4813
|
+
crossPaths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, `c${i}`)),
|
|
4814
|
+
connectors.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d, opacity: "0.4" }, `n${i}`))
|
|
4815
|
+
] });
|
|
4816
|
+
}
|
|
4817
|
+
function RosetteFilled({ size, color, strokeWidth }) {
|
|
4818
|
+
const s = size;
|
|
4819
|
+
const cx = s / 2;
|
|
4820
|
+
const cy = s / 2;
|
|
4821
|
+
const a = s / (1 + Math.SQRT2);
|
|
4822
|
+
const Router = a / (2 * Math.sin(PI / 8));
|
|
4823
|
+
const theta = 72 * PI / 180;
|
|
4824
|
+
const outer = picStar(cx, cy, Router, 8, theta, s);
|
|
4825
|
+
const Rinner = Router * 0.35;
|
|
4826
|
+
const inner6 = picStar(cx, cy, Rinner, 6, 60 * PI / 180, s);
|
|
4827
|
+
const corners = [[0, 0], [s, 0], [s, s], [0, s]];
|
|
4828
|
+
const crossPaths = [];
|
|
4829
|
+
for (const [cornX, cornY] of corners) {
|
|
4830
|
+
const dists = outer.mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
|
|
4831
|
+
dists.sort((a2, b) => a2.d - b.d);
|
|
4832
|
+
const m1 = outer.mids[dists[0].i];
|
|
4833
|
+
const m2 = outer.mids[dists[1].i];
|
|
4834
|
+
crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
|
|
4835
|
+
}
|
|
4836
|
+
const triPaths = [];
|
|
4837
|
+
for (let k = 0; k < 6; k++) {
|
|
4838
|
+
const v = inner6.verts[k];
|
|
4839
|
+
const m1 = inner6.mids[(k + 5) % 6];
|
|
4840
|
+
const m2 = inner6.mids[k];
|
|
4841
|
+
triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
|
|
4842
|
+
}
|
|
4843
|
+
const orbitR = Router * 0.35;
|
|
4844
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
|
|
4845
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: outer.starPath }),
|
|
4846
|
+
crossPaths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, `c${i}`)),
|
|
4847
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r: orbitR, opacity: "0.3" }),
|
|
4848
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: inner6.starPath, opacity: "0.6" }),
|
|
4849
|
+
triPaths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d, opacity: "0.5" }, `t${i}`))
|
|
4850
|
+
] });
|
|
4851
|
+
}
|
|
4852
|
+
function Star10({ size, color, strokeWidth }) {
|
|
4853
|
+
const s = size;
|
|
4854
|
+
const cx = s / 2;
|
|
4855
|
+
const cy = s / 2;
|
|
4856
|
+
const R = s * 0.42;
|
|
4857
|
+
const theta = 72 * PI / 180;
|
|
4858
|
+
const { starPath, mids, verts } = picStar(cx, cy, R, 10, theta, s);
|
|
4859
|
+
const edgePaths = [];
|
|
4860
|
+
for (let k = 0; k < 10; k++) {
|
|
4861
|
+
const v = verts[k];
|
|
4862
|
+
const m1 = mids[(k + 9) % 10];
|
|
4863
|
+
const m2 = mids[k];
|
|
4864
|
+
edgePaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
|
|
4865
|
+
}
|
|
4866
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
|
|
4867
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: starPath }),
|
|
4868
|
+
edgePaths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i))
|
|
4869
|
+
] });
|
|
4870
|
+
}
|
|
4871
|
+
function Star12({ size, color, strokeWidth }) {
|
|
4872
|
+
const s = size;
|
|
4873
|
+
const cx = s / 2;
|
|
4874
|
+
const cy = s / 2;
|
|
4875
|
+
const R = s * 0.44;
|
|
4876
|
+
const theta = 75 * PI / 180;
|
|
4877
|
+
const { starPath, mids, verts } = picStar(cx, cy, R, 12, theta, s);
|
|
4878
|
+
const triPaths = [];
|
|
4879
|
+
for (let k = 0; k < 12; k++) {
|
|
4880
|
+
const v = verts[k];
|
|
4881
|
+
const m1 = mids[(k + 11) % 12];
|
|
4882
|
+
const m2 = mids[k];
|
|
4883
|
+
triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
|
|
4884
|
+
}
|
|
4885
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
|
|
4886
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: starPath }),
|
|
4887
|
+
triPaths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i))
|
|
4888
|
+
] });
|
|
4889
|
+
}
|
|
4890
|
+
function Seigaiha({ size, color, strokeWidth }) {
|
|
4891
|
+
const s = size;
|
|
4892
|
+
const r2 = s / 2;
|
|
4893
|
+
const paths = [];
|
|
4894
|
+
const centers = [
|
|
4895
|
+
[s / 2, s * 0.6],
|
|
4896
|
+
[0, s * 0.1],
|
|
4897
|
+
[s, s * 0.1]
|
|
4898
|
+
];
|
|
4899
|
+
for (const [cx, cy] of centers) {
|
|
4900
|
+
for (let ring = 1; ring <= 3; ring++) {
|
|
4901
|
+
const cr = r2 * (ring / 3);
|
|
4902
|
+
paths.push(
|
|
4903
|
+
`M ${f(cx - cr)},${f(cy)} A ${f(cr)} ${f(cr)} 0 0 1 ${f(cx + cr)},${f(cy)}`
|
|
4904
|
+
);
|
|
4905
|
+
}
|
|
4906
|
+
}
|
|
4907
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
4908
|
+
}
|
|
4909
|
+
function GreekKey({ size, color, strokeWidth }) {
|
|
4910
|
+
const s = size;
|
|
4911
|
+
const u = s / 4;
|
|
4912
|
+
const paths = [
|
|
4913
|
+
// Outer frame
|
|
4914
|
+
`M 0,0 L ${f(s)},0`,
|
|
4915
|
+
`M 0,${f(s)} L ${f(s)},${f(s)}`,
|
|
4916
|
+
// Spiral from left
|
|
4917
|
+
`M 0,${f(u)} L ${f(3 * u)},${f(u)} L ${f(3 * u)},${f(3 * u)} L ${f(u)},${f(3 * u)} L ${f(u)},${f(2 * u)} L ${f(2 * u)},${f(2 * u)}`,
|
|
4918
|
+
// Spiral from right (mirrored, offset)
|
|
4919
|
+
`M ${f(s)},${f(3 * u)} L ${f(s - 3 * u)},${f(3 * u)} L ${f(s - 3 * u)},${f(u)} L ${f(s - u)},${f(u)} L ${f(s - u)},${f(2 * u)} L ${f(s - 2 * u)},${f(2 * u)}`,
|
|
4920
|
+
// Vertical connectors at edges
|
|
4921
|
+
`M 0,0 L 0,${f(u)}`,
|
|
4922
|
+
`M ${f(s)},0 L ${f(s)},${f(u)}`,
|
|
4923
|
+
`M 0,${f(3 * u)} L 0,${f(s)}`,
|
|
4924
|
+
`M ${f(s)},${f(3 * u)} L ${f(s)},${f(s)}`
|
|
4925
|
+
];
|
|
4926
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
4927
|
+
}
|
|
4928
|
+
function CelticKnot({ size, color, strokeWidth }) {
|
|
4929
|
+
const s = size;
|
|
4930
|
+
const q = s / 4;
|
|
4931
|
+
const r2 = q * 0.9;
|
|
4932
|
+
const paths = [
|
|
4933
|
+
// Band 1: diagonal with curves at crossings
|
|
4934
|
+
`M 0,0 Q ${f(q)},${f(q)} ${f(2 * q)},${f(2 * q)}`,
|
|
4935
|
+
`M ${f(2 * q)},${f(2 * q)} Q ${f(3 * q)},${f(3 * q)} ${f(s)},${f(s)}`,
|
|
4936
|
+
// Band 2: other diagonal
|
|
4937
|
+
`M ${f(s)},0 Q ${f(3 * q)},${f(q)} ${f(2 * q)},${f(2 * q)}`,
|
|
4938
|
+
`M ${f(2 * q)},${f(2 * q)} Q ${f(q)},${f(3 * q)} 0,${f(s)}`,
|
|
4939
|
+
// Outer loops that connect bands at tile edges for continuous weave
|
|
4940
|
+
`M 0,0 Q ${f(-q * 0.3)},${f(2 * q)} 0,${f(s)}`,
|
|
4941
|
+
`M ${f(s)},0 Q ${f(s + q * 0.3)},${f(2 * q)} ${f(s)},${f(s)}`,
|
|
4942
|
+
`M 0,0 Q ${f(2 * q)},${f(-q * 0.3)} ${f(s)},0`,
|
|
4943
|
+
`M 0,${f(s)} Q ${f(2 * q)},${f(s + q * 0.3)} ${f(s)},${f(s)}`,
|
|
4944
|
+
// Inner circle at crossing
|
|
4945
|
+
`M ${f(2 * q + r2 * 0.3)},${f(2 * q)} A ${f(r2 * 0.3)} ${f(r2 * 0.3)} 0 1 1 ${f(2 * q + r2 * 0.3)},${f(2 * q + 1e-3)}`
|
|
4946
|
+
];
|
|
4947
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
4948
|
+
}
|
|
4949
|
+
function Kolam({ size, color, strokeWidth }) {
|
|
4950
|
+
const s = size;
|
|
4951
|
+
const u = s / 4;
|
|
4952
|
+
const dotR = s * 0.015;
|
|
4953
|
+
const dots = [];
|
|
4954
|
+
for (let row = 1; row <= 3; row++) {
|
|
4955
|
+
for (let col = 1; col <= 3; col++) {
|
|
4956
|
+
dots.push([col * u, row * u]);
|
|
4957
|
+
}
|
|
4958
|
+
}
|
|
4959
|
+
const curves = [];
|
|
4960
|
+
for (let row = 1; row <= 3; row++) {
|
|
4961
|
+
const y = row * u;
|
|
4962
|
+
for (let col = 1; col < 3; col++) {
|
|
4963
|
+
const x1 = col * u;
|
|
4964
|
+
const x2 = (col + 1) * u;
|
|
4965
|
+
const mx = (x1 + x2) / 2;
|
|
4966
|
+
const bulge = u * 0.4;
|
|
4967
|
+
curves.push(`M ${f(x1)},${f(y)} C ${f(mx)},${f(y - bulge)} ${f(mx)},${f(y - bulge)} ${f(x2)},${f(y)}`);
|
|
4968
|
+
curves.push(`M ${f(x1)},${f(y)} C ${f(mx)},${f(y + bulge)} ${f(mx)},${f(y + bulge)} ${f(x2)},${f(y)}`);
|
|
4969
|
+
}
|
|
4970
|
+
}
|
|
4971
|
+
for (let col = 1; col <= 3; col++) {
|
|
4972
|
+
const x = col * u;
|
|
4973
|
+
for (let row = 1; row < 3; row++) {
|
|
4974
|
+
const y1 = row * u;
|
|
4975
|
+
const y2 = (row + 1) * u;
|
|
4976
|
+
const my = (y1 + y2) / 2;
|
|
4977
|
+
const bulge = u * 0.4;
|
|
4978
|
+
curves.push(`M ${f(x)},${f(y1)} C ${f(x - bulge)},${f(my)} ${f(x - bulge)},${f(my)} ${f(x)},${f(y2)}`);
|
|
4979
|
+
curves.push(`M ${f(x)},${f(y1)} C ${f(x + bulge)},${f(my)} ${f(x + bulge)},${f(my)} ${f(x)},${f(y2)}`);
|
|
4980
|
+
}
|
|
4981
|
+
}
|
|
4982
|
+
for (let k = 1; k <= 3; k++) {
|
|
4983
|
+
curves.push(`M ${f(k * u)},${f(u)} C ${f(k * u)},${f(u * 0.5)} ${f(k * u)},${f(u * 0.5)} ${f(k * u)},0`);
|
|
4984
|
+
curves.push(`M ${f(k * u)},${f(3 * u)} C ${f(k * u)},${f(3.5 * u)} ${f(k * u)},${f(3.5 * u)} ${f(k * u)},${f(s)}`);
|
|
4985
|
+
curves.push(`M ${f(u)},${f(k * u)} C ${f(u * 0.5)},${f(k * u)} ${f(u * 0.5)},${f(k * u)} 0,${f(k * u)}`);
|
|
4986
|
+
curves.push(`M ${f(3 * u)},${f(k * u)} C ${f(3.5 * u)},${f(k * u)} ${f(3.5 * u)},${f(k * u)} ${f(s)},${f(k * u)}`);
|
|
4987
|
+
}
|
|
4988
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
|
|
4989
|
+
curves.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, `c${i}`)),
|
|
4990
|
+
dots.map(([x, y], i) => /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x, cy: y, r: dotR, fill: color, opacity: "0.5" }, `d${i}`))
|
|
4991
|
+
] });
|
|
4992
|
+
}
|
|
4993
|
+
function Arch({ size, color, strokeWidth }) {
|
|
4994
|
+
const w = size;
|
|
4995
|
+
const h = size * 1.5;
|
|
4996
|
+
const cx = w / 2;
|
|
4997
|
+
const paths = [];
|
|
4998
|
+
for (let ring = 0; ring < 4; ring++) {
|
|
4999
|
+
const scale = 1 - ring * 0.2;
|
|
5000
|
+
const archW = w * 0.48 * scale;
|
|
5001
|
+
const archH = h * 0.7 * scale;
|
|
5002
|
+
const baseY = h * 0.85;
|
|
5003
|
+
const tipY = baseY - archH;
|
|
5004
|
+
const lx = cx - archW;
|
|
5005
|
+
const rx = cx + archW;
|
|
5006
|
+
const offset = archW * 0.3;
|
|
5007
|
+
const lcx = lx + offset;
|
|
5008
|
+
const rdx = cx - lcx;
|
|
5009
|
+
const rdy = baseY - tipY;
|
|
5010
|
+
const radius = Math.sqrt(rdx * rdx + rdy * rdy);
|
|
5011
|
+
paths.push(
|
|
5012
|
+
`M ${f(lx)},${f(baseY)} A ${f(radius)} ${f(radius)} 0 0 1 ${f(cx)},${f(tipY)} A ${f(radius)} ${f(radius)} 0 0 1 ${f(rx)},${f(baseY)}`
|
|
5013
|
+
);
|
|
5014
|
+
if (ring === 0) {
|
|
5015
|
+
paths.push(`M ${f(lx)},${f(baseY)} L ${f(rx)},${f(baseY)}`);
|
|
5016
|
+
}
|
|
5017
|
+
}
|
|
5018
|
+
const innerScale = 1 - 3 * 0.2;
|
|
5019
|
+
const keyR = w * 0.48 * innerScale * 0.35;
|
|
5020
|
+
const keyY = h * 0.85 - h * 0.7 * innerScale * 0.4;
|
|
5021
|
+
paths.push(
|
|
5022
|
+
`M ${f(cx + keyR)},${f(keyY)} A ${f(keyR)} ${f(keyR)} 0 1 1 ${f(cx + keyR)},${f(keyY + 1e-3)}`
|
|
5023
|
+
);
|
|
5024
|
+
const spR = w * 0.15;
|
|
5025
|
+
paths.push(`M 0,0 A ${f(spR)} ${f(spR)} 0 0 0 ${f(spR)},${f(spR)}`);
|
|
5026
|
+
paths.push(`M ${f(w)},0 A ${f(spR)} ${f(spR)} 0 0 1 ${f(w - spR)},${f(spR)}`);
|
|
5027
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
5028
|
+
}
|
|
5029
|
+
function ArabesqueVine({ size, color, strokeWidth }) {
|
|
5030
|
+
const w = size;
|
|
5031
|
+
const h = size * 1.2;
|
|
5032
|
+
const cx = w / 2;
|
|
5033
|
+
const paths = [];
|
|
5034
|
+
const amp = w * 0.3;
|
|
5035
|
+
const segments = 3;
|
|
5036
|
+
const segH = h / segments;
|
|
5037
|
+
for (let i = 0; i < segments; i++) {
|
|
5038
|
+
const y0 = i * segH;
|
|
5039
|
+
const y1 = y0 + segH;
|
|
5040
|
+
const dir = i % 2 === 0 ? 1 : -1;
|
|
5041
|
+
paths.push(
|
|
5042
|
+
`M ${f(cx)},${f(y0)} C ${f(cx + amp * dir)},${f(y0 + segH * 0.33)} ${f(cx - amp * dir)},${f(y0 + segH * 0.66)} ${f(cx)},${f(y1)}`
|
|
5043
|
+
);
|
|
5044
|
+
const branchY = y0 + segH * 0.5;
|
|
5045
|
+
const branchX = cx + amp * dir * 0.15;
|
|
5046
|
+
const tendrilLen = w * 0.25;
|
|
5047
|
+
const tlx = branchX - tendrilLen;
|
|
5048
|
+
const tly = branchY - tendrilLen * 0.4;
|
|
5049
|
+
paths.push(
|
|
5050
|
+
`M ${f(branchX)},${f(branchY)} C ${f(branchX - tendrilLen * 0.5)},${f(branchY - tendrilLen * 0.8)} ${f(tlx - tendrilLen * 0.2)},${f(tly + tendrilLen * 0.3)} ${f(tlx)},${f(tly)}`
|
|
5051
|
+
);
|
|
5052
|
+
paths.push(
|
|
5053
|
+
`M ${f(tlx)},${f(tly)} C ${f(tlx + tendrilLen * 0.3)},${f(tly + tendrilLen * 0.5)} ${f(branchX - tendrilLen * 0.2)},${f(branchY + tendrilLen * 0.3)} ${f(branchX)},${f(branchY)}`
|
|
5054
|
+
);
|
|
5055
|
+
const trx = branchX + tendrilLen;
|
|
5056
|
+
const try_ = branchY + tendrilLen * 0.4;
|
|
5057
|
+
paths.push(
|
|
5058
|
+
`M ${f(branchX)},${f(branchY)} C ${f(branchX + tendrilLen * 0.5)},${f(branchY + tendrilLen * 0.8)} ${f(trx + tendrilLen * 0.2)},${f(try_ - tendrilLen * 0.3)} ${f(trx)},${f(try_)}`
|
|
5059
|
+
);
|
|
5060
|
+
paths.push(
|
|
5061
|
+
`M ${f(trx)},${f(try_)} C ${f(trx - tendrilLen * 0.3)},${f(try_ - tendrilLen * 0.5)} ${f(branchX + tendrilLen * 0.2)},${f(branchY - tendrilLen * 0.3)} ${f(branchX)},${f(branchY)}`
|
|
5062
|
+
);
|
|
5063
|
+
const spiralR = tendrilLen * 0.15;
|
|
5064
|
+
paths.push(
|
|
5065
|
+
`M ${f(tlx)},${f(tly)} A ${f(spiralR)} ${f(spiralR)} 0 1 0 ${f(tlx + spiralR * 2)},${f(tly)}`
|
|
5066
|
+
);
|
|
5067
|
+
paths.push(
|
|
5068
|
+
`M ${f(trx)},${f(try_)} A ${f(spiralR)} ${f(spiralR)} 0 1 1 ${f(trx - spiralR * 2)},${f(try_)}`
|
|
5069
|
+
);
|
|
5070
|
+
}
|
|
5071
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
5072
|
+
}
|
|
5073
|
+
function ArabesqueNet({ size, color, strokeWidth }) {
|
|
5074
|
+
const s = size;
|
|
5075
|
+
const cells = 4;
|
|
5076
|
+
const cellW = s / cells;
|
|
5077
|
+
const cellH = s / cells;
|
|
5078
|
+
const paths = [];
|
|
5079
|
+
for (let row = 0; row < cells; row++) {
|
|
5080
|
+
for (let col = 0; col < cells; col++) {
|
|
5081
|
+
const cx = col * cellW + cellW / 2;
|
|
5082
|
+
const cy = row * cellH + cellH / 2;
|
|
5083
|
+
const hw = cellW * 0.5;
|
|
5084
|
+
const hh = cellH * 0.5;
|
|
5085
|
+
const bulge = cellW * 0.25;
|
|
5086
|
+
paths.push(
|
|
5087
|
+
`M ${f(cx)},${f(cy - hh)} Q ${f(cx + bulge)},${f(cy - bulge)} ${f(cx + hw)},${f(cy)}`
|
|
5088
|
+
);
|
|
5089
|
+
paths.push(
|
|
5090
|
+
`M ${f(cx + hw)},${f(cy)} Q ${f(cx + bulge)},${f(cy + bulge)} ${f(cx)},${f(cy + hh)}`
|
|
5091
|
+
);
|
|
5092
|
+
paths.push(
|
|
5093
|
+
`M ${f(cx)},${f(cy + hh)} Q ${f(cx - bulge)},${f(cy + bulge)} ${f(cx - hw)},${f(cy)}`
|
|
5094
|
+
);
|
|
5095
|
+
paths.push(
|
|
5096
|
+
`M ${f(cx - hw)},${f(cy)} Q ${f(cx - bulge)},${f(cy - bulge)} ${f(cx)},${f(cy - hh)}`
|
|
5097
|
+
);
|
|
5098
|
+
}
|
|
5099
|
+
}
|
|
5100
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
5101
|
+
}
|
|
5102
|
+
var VARIANT_MAP = {
|
|
5103
|
+
"star8": Star8,
|
|
5104
|
+
"star6": Star6,
|
|
5105
|
+
"khatam": Khatam,
|
|
5106
|
+
"star10": Star10,
|
|
5107
|
+
"star12": Star12,
|
|
5108
|
+
"rosette-double": RosetteDouble,
|
|
5109
|
+
"rosette-filled": RosetteFilled,
|
|
5110
|
+
"seigaiha": Seigaiha,
|
|
5111
|
+
"greek-key": GreekKey,
|
|
5112
|
+
"celtic-knot": CelticKnot,
|
|
5113
|
+
"kolam": Kolam,
|
|
5114
|
+
"arch": Arch,
|
|
5115
|
+
"arabesque-vine": ArabesqueVine,
|
|
5116
|
+
"arabesque-net": ArabesqueNet
|
|
5117
|
+
};
|
|
5118
|
+
var PatternTile = ({
|
|
5119
|
+
variant = "star8",
|
|
5120
|
+
size = 60,
|
|
5121
|
+
color = "var(--color-primary)",
|
|
5122
|
+
strokeWidth = 0.5,
|
|
5123
|
+
className
|
|
5124
|
+
}) => {
|
|
5125
|
+
const Variant = VARIANT_MAP[variant];
|
|
5126
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { className, children: /* @__PURE__ */ jsxRuntime.jsx(Variant, { size, color, strokeWidth }) });
|
|
5127
|
+
};
|
|
5128
|
+
PatternTile.displayName = "PatternTile";
|
|
5129
|
+
function getTileDimensions(variant, size) {
|
|
5130
|
+
if (variant === "star6") {
|
|
5131
|
+
return { width: size, height: size * (2 / Math.sqrt(3)) };
|
|
5132
|
+
}
|
|
5133
|
+
if (variant === "arch") {
|
|
5134
|
+
return { width: size, height: size * 1.5 };
|
|
5135
|
+
}
|
|
5136
|
+
if (variant === "arabesque-vine") {
|
|
5137
|
+
return { width: size, height: size * 1.2 };
|
|
5138
|
+
}
|
|
5139
|
+
return { width: size, height: size };
|
|
5140
|
+
}
|
|
5141
|
+
function PatternDefs({
|
|
5142
|
+
patternId,
|
|
5143
|
+
variant,
|
|
5144
|
+
size,
|
|
5145
|
+
color,
|
|
5146
|
+
strokeWidth
|
|
5147
|
+
}) {
|
|
5148
|
+
const dims = getTileDimensions(variant, size);
|
|
5149
|
+
return /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5150
|
+
"pattern",
|
|
5151
|
+
{
|
|
5152
|
+
id: patternId,
|
|
5153
|
+
x: "0",
|
|
5154
|
+
y: "0",
|
|
5155
|
+
width: dims.width,
|
|
5156
|
+
height: dims.height,
|
|
5157
|
+
patternUnits: "userSpaceOnUse",
|
|
5158
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5159
|
+
PatternTile,
|
|
5160
|
+
{
|
|
5161
|
+
variant,
|
|
5162
|
+
size,
|
|
5163
|
+
color,
|
|
5164
|
+
strokeWidth
|
|
5165
|
+
}
|
|
5166
|
+
)
|
|
5167
|
+
}
|
|
5168
|
+
) });
|
|
5169
|
+
}
|
|
5170
|
+
function BackgroundMode({
|
|
5171
|
+
patternId,
|
|
5172
|
+
variant,
|
|
5173
|
+
size,
|
|
5174
|
+
color,
|
|
5175
|
+
strokeWidth,
|
|
5176
|
+
opacity,
|
|
5177
|
+
className
|
|
5178
|
+
}) {
|
|
5179
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5180
|
+
"svg",
|
|
5181
|
+
{
|
|
5182
|
+
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
5183
|
+
preserveAspectRatio: "none",
|
|
5184
|
+
"aria-hidden": "true",
|
|
5185
|
+
children: [
|
|
5186
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5187
|
+
PatternDefs,
|
|
5188
|
+
{
|
|
5189
|
+
patternId,
|
|
5190
|
+
variant,
|
|
5191
|
+
size,
|
|
5192
|
+
color,
|
|
5193
|
+
strokeWidth
|
|
5194
|
+
}
|
|
5195
|
+
),
|
|
5196
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5197
|
+
"rect",
|
|
5198
|
+
{
|
|
5199
|
+
width: "100%",
|
|
5200
|
+
height: "100%",
|
|
5201
|
+
fill: `url(#${patternId})`,
|
|
5202
|
+
opacity
|
|
5203
|
+
}
|
|
5204
|
+
)
|
|
5205
|
+
]
|
|
5206
|
+
}
|
|
5207
|
+
);
|
|
5208
|
+
}
|
|
5209
|
+
function SideMode({
|
|
5210
|
+
patternId,
|
|
5211
|
+
variant,
|
|
5212
|
+
size,
|
|
5213
|
+
color,
|
|
5214
|
+
strokeWidth,
|
|
5215
|
+
opacity,
|
|
5216
|
+
side,
|
|
5217
|
+
className
|
|
5218
|
+
}) {
|
|
5219
|
+
const maskId = `${patternId}-mask`;
|
|
5220
|
+
const gradientId = `${patternId}-grad`;
|
|
5221
|
+
const x1 = side === "left" ? "0%" : "100%";
|
|
5222
|
+
const x2 = side === "left" ? "60%" : "40%";
|
|
5223
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5224
|
+
"svg",
|
|
5225
|
+
{
|
|
5226
|
+
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
5227
|
+
preserveAspectRatio: "none",
|
|
5228
|
+
"aria-hidden": "true",
|
|
5229
|
+
children: [
|
|
5230
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5231
|
+
PatternDefs,
|
|
5232
|
+
{
|
|
5233
|
+
patternId,
|
|
5234
|
+
variant,
|
|
5235
|
+
size,
|
|
5236
|
+
color,
|
|
5237
|
+
strokeWidth
|
|
5238
|
+
}
|
|
5239
|
+
),
|
|
5240
|
+
/* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
|
|
5241
|
+
/* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: gradientId, x1, y1: "0%", x2, y2: "0%", children: [
|
|
5242
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
|
|
5243
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })
|
|
5244
|
+
] }),
|
|
5245
|
+
/* @__PURE__ */ jsxRuntime.jsx("mask", { id: maskId, children: /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
5246
|
+
] }),
|
|
5247
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5248
|
+
"rect",
|
|
5249
|
+
{
|
|
5250
|
+
width: "100%",
|
|
5251
|
+
height: "100%",
|
|
5252
|
+
fill: `url(#${patternId})`,
|
|
5253
|
+
mask: `url(#${maskId})`,
|
|
5254
|
+
opacity
|
|
5255
|
+
}
|
|
5256
|
+
)
|
|
5257
|
+
]
|
|
5258
|
+
}
|
|
5259
|
+
);
|
|
5260
|
+
}
|
|
5261
|
+
function DualMode({
|
|
5262
|
+
patternId,
|
|
5263
|
+
variant,
|
|
5264
|
+
size,
|
|
5265
|
+
color,
|
|
5266
|
+
strokeWidth,
|
|
5267
|
+
opacity,
|
|
5268
|
+
className
|
|
5269
|
+
}) {
|
|
5270
|
+
const maskId = `${patternId}-dmask`;
|
|
5271
|
+
const gradientId = `${patternId}-dgrad`;
|
|
5272
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5273
|
+
"svg",
|
|
5274
|
+
{
|
|
5275
|
+
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
5276
|
+
preserveAspectRatio: "none",
|
|
5277
|
+
"aria-hidden": "true",
|
|
5278
|
+
children: [
|
|
5279
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5280
|
+
PatternDefs,
|
|
5281
|
+
{
|
|
5282
|
+
patternId,
|
|
5283
|
+
variant,
|
|
5284
|
+
size,
|
|
5285
|
+
color,
|
|
5286
|
+
strokeWidth
|
|
5287
|
+
}
|
|
5288
|
+
),
|
|
5289
|
+
/* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
|
|
5290
|
+
/* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
5291
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
|
|
5292
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "35%", stopColor: "white", stopOpacity: "0" }),
|
|
5293
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "65%", stopColor: "white", stopOpacity: "0" }),
|
|
5294
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
|
|
5295
|
+
] }),
|
|
5296
|
+
/* @__PURE__ */ jsxRuntime.jsx("mask", { id: maskId, children: /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
5297
|
+
] }),
|
|
5298
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5299
|
+
"rect",
|
|
5300
|
+
{
|
|
5301
|
+
width: "100%",
|
|
5302
|
+
height: "100%",
|
|
5303
|
+
fill: `url(#${patternId})`,
|
|
5304
|
+
mask: `url(#${maskId})`,
|
|
5305
|
+
opacity
|
|
5306
|
+
}
|
|
5307
|
+
)
|
|
5308
|
+
]
|
|
5309
|
+
}
|
|
5310
|
+
);
|
|
5311
|
+
}
|
|
5312
|
+
function AroundMode({
|
|
5313
|
+
patternId,
|
|
5314
|
+
variant,
|
|
5315
|
+
size,
|
|
5316
|
+
color,
|
|
5317
|
+
strokeWidth,
|
|
5318
|
+
opacity,
|
|
5319
|
+
className
|
|
5320
|
+
}) {
|
|
5321
|
+
const maskId = `${patternId}-amask`;
|
|
5322
|
+
const gradientId = `${patternId}-agrad`;
|
|
5323
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5324
|
+
"svg",
|
|
5325
|
+
{
|
|
5326
|
+
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
5327
|
+
preserveAspectRatio: "none",
|
|
5328
|
+
"aria-hidden": "true",
|
|
5329
|
+
children: [
|
|
5330
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5331
|
+
PatternDefs,
|
|
5332
|
+
{
|
|
5333
|
+
patternId,
|
|
5334
|
+
variant,
|
|
5335
|
+
size,
|
|
5336
|
+
color,
|
|
5337
|
+
strokeWidth
|
|
5338
|
+
}
|
|
5339
|
+
),
|
|
5340
|
+
/* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
|
|
5341
|
+
/* @__PURE__ */ jsxRuntime.jsxs("radialGradient", { id: gradientId, cx: "50%", cy: "50%", r: "50%", children: [
|
|
5342
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0" }),
|
|
5343
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "55%", stopColor: "white", stopOpacity: "0" }),
|
|
5344
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "85%", stopColor: "white", stopOpacity: "1" }),
|
|
5345
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
|
|
5346
|
+
] }),
|
|
5347
|
+
/* @__PURE__ */ jsxRuntime.jsx("mask", { id: maskId, children: /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
5348
|
+
] }),
|
|
5349
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5350
|
+
"rect",
|
|
5351
|
+
{
|
|
5352
|
+
width: "100%",
|
|
5353
|
+
height: "100%",
|
|
5354
|
+
fill: `url(#${patternId})`,
|
|
5355
|
+
mask: `url(#${maskId})`,
|
|
5356
|
+
opacity
|
|
5357
|
+
}
|
|
5358
|
+
)
|
|
5359
|
+
]
|
|
5360
|
+
}
|
|
5361
|
+
);
|
|
5362
|
+
}
|
|
5363
|
+
function FrameStrip({
|
|
5364
|
+
patternId,
|
|
5365
|
+
variant,
|
|
5366
|
+
size,
|
|
5367
|
+
color,
|
|
5368
|
+
strokeWidth,
|
|
5369
|
+
opacity,
|
|
5370
|
+
height
|
|
5371
|
+
}) {
|
|
5372
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5373
|
+
"svg",
|
|
5374
|
+
{
|
|
5375
|
+
className: "w-full pointer-events-none",
|
|
5376
|
+
style: { height },
|
|
5377
|
+
preserveAspectRatio: "none",
|
|
5378
|
+
"aria-hidden": "true",
|
|
5379
|
+
children: [
|
|
5380
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5381
|
+
PatternDefs,
|
|
5382
|
+
{
|
|
5383
|
+
patternId,
|
|
5384
|
+
variant,
|
|
5385
|
+
size,
|
|
5386
|
+
color,
|
|
5387
|
+
strokeWidth
|
|
5388
|
+
}
|
|
5389
|
+
),
|
|
5390
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5391
|
+
"rect",
|
|
5392
|
+
{
|
|
5393
|
+
width: "100%",
|
|
5394
|
+
height: "100%",
|
|
5395
|
+
fill: `url(#${patternId})`,
|
|
5396
|
+
opacity
|
|
5397
|
+
}
|
|
5398
|
+
)
|
|
5399
|
+
]
|
|
5400
|
+
}
|
|
5401
|
+
);
|
|
5402
|
+
}
|
|
5403
|
+
var GeometricPattern = ({
|
|
5404
|
+
variant = "star8",
|
|
5405
|
+
mode = "background",
|
|
5406
|
+
opacity = 0.06,
|
|
5407
|
+
color = "var(--color-primary)",
|
|
5408
|
+
scale = 1,
|
|
5409
|
+
strokeWidth = 0.5,
|
|
5410
|
+
children,
|
|
5411
|
+
className
|
|
5412
|
+
}) => {
|
|
5413
|
+
const reactId = React5.useId();
|
|
5414
|
+
const patternId = `gp${reactId.replace(/:/g, "")}`;
|
|
5415
|
+
const size = 60 * scale;
|
|
5416
|
+
const stripHeight = 40 * scale;
|
|
5417
|
+
if (mode === "frame") {
|
|
5418
|
+
const topId = `${patternId}-top`;
|
|
5419
|
+
const botId = `${patternId}-bot`;
|
|
5420
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn("relative", className), children: [
|
|
5421
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5422
|
+
FrameStrip,
|
|
5423
|
+
{
|
|
5424
|
+
patternId: topId,
|
|
5425
|
+
variant,
|
|
5426
|
+
size,
|
|
5427
|
+
color,
|
|
5428
|
+
strokeWidth,
|
|
5429
|
+
opacity,
|
|
5430
|
+
height: stripHeight
|
|
5431
|
+
}
|
|
5432
|
+
),
|
|
5433
|
+
children,
|
|
5434
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5435
|
+
FrameStrip,
|
|
5436
|
+
{
|
|
5437
|
+
patternId: botId,
|
|
5438
|
+
variant,
|
|
5439
|
+
size,
|
|
5440
|
+
color,
|
|
5441
|
+
strokeWidth,
|
|
5442
|
+
opacity,
|
|
5443
|
+
height: stripHeight
|
|
5444
|
+
}
|
|
5445
|
+
)
|
|
5446
|
+
] });
|
|
5447
|
+
}
|
|
5448
|
+
if (mode === "around") {
|
|
5449
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5450
|
+
AroundMode,
|
|
5451
|
+
{
|
|
5452
|
+
patternId,
|
|
5453
|
+
variant,
|
|
5454
|
+
size,
|
|
5455
|
+
color,
|
|
5456
|
+
strokeWidth,
|
|
5457
|
+
opacity,
|
|
5458
|
+
className
|
|
5459
|
+
}
|
|
5460
|
+
);
|
|
5461
|
+
}
|
|
5462
|
+
if (mode === "dual") {
|
|
5463
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5464
|
+
DualMode,
|
|
5465
|
+
{
|
|
5466
|
+
patternId,
|
|
5467
|
+
variant,
|
|
5468
|
+
size,
|
|
5469
|
+
color,
|
|
5470
|
+
strokeWidth,
|
|
5471
|
+
opacity,
|
|
5472
|
+
className
|
|
5473
|
+
}
|
|
5474
|
+
);
|
|
5475
|
+
}
|
|
5476
|
+
if (mode === "left" || mode === "right") {
|
|
5477
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5478
|
+
SideMode,
|
|
5479
|
+
{
|
|
5480
|
+
patternId,
|
|
5481
|
+
variant,
|
|
5482
|
+
size,
|
|
5483
|
+
color,
|
|
5484
|
+
strokeWidth,
|
|
5485
|
+
opacity,
|
|
5486
|
+
side: mode,
|
|
5487
|
+
className
|
|
5488
|
+
}
|
|
5489
|
+
);
|
|
5490
|
+
}
|
|
5491
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5492
|
+
BackgroundMode,
|
|
5493
|
+
{
|
|
5494
|
+
patternId,
|
|
5495
|
+
variant,
|
|
5496
|
+
size,
|
|
5497
|
+
color,
|
|
5498
|
+
strokeWidth,
|
|
5499
|
+
opacity,
|
|
5500
|
+
className
|
|
5501
|
+
}
|
|
5502
|
+
);
|
|
5503
|
+
};
|
|
5504
|
+
GeometricPattern.displayName = "GeometricPattern";
|
|
5505
|
+
function ArchSVG({
|
|
5506
|
+
facing,
|
|
5507
|
+
w,
|
|
5508
|
+
h,
|
|
5509
|
+
color,
|
|
5510
|
+
strokeWidth
|
|
5511
|
+
}) {
|
|
5512
|
+
const paths = [];
|
|
5513
|
+
const archCount = 3;
|
|
5514
|
+
const archH = h / archCount;
|
|
5515
|
+
const rings = 5;
|
|
5516
|
+
for (let a = 0; a < archCount; a++) {
|
|
5517
|
+
const baseY = a * archH + archH;
|
|
5518
|
+
const topY = a * archH + archH * 0.05;
|
|
5519
|
+
for (let r2 = 0; r2 < rings; r2++) {
|
|
5520
|
+
const scale = 1 - r2 * 0.17;
|
|
5521
|
+
const archW = w * 0.95 * scale;
|
|
5522
|
+
const aTopY = topY + (1 - scale) * (baseY - topY) * 0.5;
|
|
5523
|
+
const aBaseY = baseY - (1 - scale) * archH * 0.05;
|
|
5524
|
+
const edgeX2 = facing === "right" ? w : 0;
|
|
5525
|
+
const innerX2 = facing === "right" ? w - archW : archW;
|
|
5526
|
+
const midY = (aTopY + aBaseY) / 2;
|
|
5527
|
+
const radius = Math.sqrt(archW * archW + (aBaseY - midY) * (aBaseY - midY));
|
|
5528
|
+
if (facing === "right") {
|
|
5529
|
+
paths.push(
|
|
5530
|
+
`M ${f2(edgeX2)},${f2(aBaseY)} A ${f2(radius)} ${f2(radius)} 0 0 0 ${f2(innerX2)},${f2(aTopY + (aBaseY - aTopY) * 0.5)} A ${f2(radius)} ${f2(radius)} 0 0 0 ${f2(edgeX2)},${f2(aTopY)}`
|
|
5531
|
+
);
|
|
5532
|
+
} else {
|
|
5533
|
+
paths.push(
|
|
5534
|
+
`M ${f2(edgeX2)},${f2(aBaseY)} A ${f2(radius)} ${f2(radius)} 0 0 1 ${f2(innerX2)},${f2(aTopY + (aBaseY - aTopY) * 0.5)} A ${f2(radius)} ${f2(radius)} 0 0 1 ${f2(edgeX2)},${f2(aTopY)}`
|
|
5535
|
+
);
|
|
5536
|
+
}
|
|
5537
|
+
}
|
|
5538
|
+
const edgeX = facing === "right" ? w : 0;
|
|
5539
|
+
const innerX = facing === "right" ? w * 0.05 : w * 0.95;
|
|
5540
|
+
paths.push(`M ${f2(edgeX)},${f2(baseY)} L ${f2(innerX)},${f2(baseY)}`);
|
|
5541
|
+
}
|
|
5542
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
5543
|
+
}
|
|
5544
|
+
function VineSVG({
|
|
5545
|
+
facing,
|
|
5546
|
+
w,
|
|
5547
|
+
h,
|
|
5548
|
+
color,
|
|
5549
|
+
strokeWidth
|
|
5550
|
+
}) {
|
|
5551
|
+
const paths = [];
|
|
5552
|
+
const dir = facing === "right" ? -1 : 1;
|
|
5553
|
+
const edgeX = facing === "right" ? w * 0.85 : w * 0.15;
|
|
5554
|
+
const segments = 5;
|
|
5555
|
+
const segH = h / segments;
|
|
5556
|
+
for (let i = 0; i < segments; i++) {
|
|
5557
|
+
const y0 = i * segH;
|
|
5558
|
+
const y1 = y0 + segH;
|
|
5559
|
+
const sway = w * 0.12 * (i % 2 === 0 ? 1 : -1);
|
|
5560
|
+
paths.push(
|
|
5561
|
+
`M ${f2(edgeX + sway)},${f2(y0)} C ${f2(edgeX - sway)},${f2(y0 + segH * 0.33)} ${f2(edgeX + sway)},${f2(y0 + segH * 0.66)} ${f2(edgeX - sway)},${f2(y1)}`
|
|
5562
|
+
);
|
|
5563
|
+
const branchY = y0 + segH * 0.35;
|
|
5564
|
+
const branchX = edgeX;
|
|
5565
|
+
const leafW = w * 0.55;
|
|
5566
|
+
const leafH = segH * 0.35;
|
|
5567
|
+
const leafTipX = branchX + dir * leafW;
|
|
5568
|
+
const leafTipY = branchY - leafH * 0.2;
|
|
5569
|
+
paths.push(
|
|
5570
|
+
`M ${f2(branchX)},${f2(branchY)} C ${f2(branchX + dir * leafW * 0.3)},${f2(branchY - leafH)} ${f2(leafTipX - dir * leafW * 0.1)},${f2(leafTipY - leafH * 0.3)} ${f2(leafTipX)},${f2(leafTipY)}`
|
|
5571
|
+
);
|
|
5572
|
+
paths.push(
|
|
5573
|
+
`M ${f2(leafTipX)},${f2(leafTipY)} C ${f2(leafTipX - dir * leafW * 0.2)},${f2(leafTipY + leafH * 0.6)} ${f2(branchX + dir * leafW * 0.15)},${f2(branchY + leafH * 0.4)} ${f2(branchX)},${f2(branchY + leafH * 0.1)}`
|
|
5574
|
+
);
|
|
5575
|
+
const tendrilY = y0 + segH * 0.7;
|
|
5576
|
+
const tendrilW = w * 0.35;
|
|
5577
|
+
const tendrilTipX = edgeX + dir * tendrilW;
|
|
5578
|
+
paths.push(
|
|
5579
|
+
`M ${f2(edgeX)},${f2(tendrilY)} Q ${f2(edgeX + dir * tendrilW * 0.6)},${f2(tendrilY - segH * 0.12)} ${f2(tendrilTipX)},${f2(tendrilY + segH * 0.05)}`
|
|
5580
|
+
);
|
|
5581
|
+
const spR = leafW * 0.08;
|
|
5582
|
+
paths.push(
|
|
5583
|
+
`M ${f2(leafTipX)},${f2(leafTipY)} A ${f2(spR)} ${f2(spR)} 0 1 ${facing === "right" ? 0 : 1} ${f2(leafTipX + dir * spR * 0.5)},${f2(leafTipY + spR)}`
|
|
5584
|
+
);
|
|
5585
|
+
}
|
|
5586
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
5587
|
+
}
|
|
5588
|
+
function LatticeSVG({
|
|
5589
|
+
facing,
|
|
5590
|
+
w,
|
|
5591
|
+
h,
|
|
5592
|
+
color,
|
|
5593
|
+
strokeWidth
|
|
5594
|
+
}) {
|
|
5595
|
+
const paths = [];
|
|
5596
|
+
const cols = 5;
|
|
5597
|
+
const rows = Math.ceil(h / (w / cols));
|
|
5598
|
+
const cellW = w / cols;
|
|
5599
|
+
const cellH = cellW;
|
|
5600
|
+
const bulge = cellW * 0.3;
|
|
5601
|
+
for (let row = 0; row < rows; row++) {
|
|
5602
|
+
for (let col = 0; col < cols; col++) {
|
|
5603
|
+
const cx = col * cellW + cellW / 2;
|
|
5604
|
+
const cy = row * cellH + cellH / 2;
|
|
5605
|
+
const hw = cellW * 0.5;
|
|
5606
|
+
const hh = cellH * 0.5;
|
|
5607
|
+
paths.push(
|
|
5608
|
+
`M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx + bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
|
|
5609
|
+
);
|
|
5610
|
+
paths.push(
|
|
5611
|
+
`M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx - bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
|
|
5612
|
+
);
|
|
5613
|
+
paths.push(
|
|
5614
|
+
`M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy - bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
|
|
5615
|
+
);
|
|
5616
|
+
paths.push(
|
|
5617
|
+
`M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy + bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
|
|
5618
|
+
);
|
|
5619
|
+
}
|
|
5620
|
+
}
|
|
5621
|
+
return /* @__PURE__ */ jsxRuntime.jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsxRuntime.jsx("path", { d }, i)) });
|
|
5622
|
+
}
|
|
5623
|
+
function f2(n) {
|
|
5624
|
+
return n.toFixed(2);
|
|
5625
|
+
}
|
|
5626
|
+
var VARIANT_MAP2 = {
|
|
5627
|
+
arch: ArchSVG,
|
|
5628
|
+
vine: VineSVG,
|
|
5629
|
+
lattice: LatticeSVG
|
|
5630
|
+
};
|
|
5631
|
+
var EdgeDecoration = ({
|
|
5632
|
+
variant = "arch",
|
|
5633
|
+
side = "both",
|
|
5634
|
+
opacity = 0.15,
|
|
5635
|
+
color = "var(--color-primary)",
|
|
5636
|
+
strokeWidth = 0.5,
|
|
5637
|
+
width = 15,
|
|
5638
|
+
className
|
|
5639
|
+
}) => {
|
|
5640
|
+
const id = React5.useId();
|
|
5641
|
+
const Variant = VARIANT_MAP2[variant];
|
|
5642
|
+
const sides = side === "both" ? ["left", "right"] : [side];
|
|
5643
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: sides.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5644
|
+
"svg",
|
|
5645
|
+
{
|
|
5646
|
+
className: cn(
|
|
5647
|
+
"absolute top-0 h-full pointer-events-none",
|
|
5648
|
+
s === "left" ? "left-0" : "right-0",
|
|
5649
|
+
className
|
|
5650
|
+
),
|
|
5651
|
+
style: {
|
|
5652
|
+
width: `${width}%`,
|
|
5653
|
+
opacity
|
|
5654
|
+
},
|
|
5655
|
+
viewBox: `0 0 200 ${200 * 3}`,
|
|
5656
|
+
preserveAspectRatio: "none",
|
|
5657
|
+
"aria-hidden": "true",
|
|
5658
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5659
|
+
Variant,
|
|
5660
|
+
{
|
|
5661
|
+
facing: s,
|
|
5662
|
+
w: 200,
|
|
5663
|
+
h: 600,
|
|
5664
|
+
color,
|
|
5665
|
+
strokeWidth
|
|
5666
|
+
}
|
|
5667
|
+
)
|
|
5668
|
+
},
|
|
5669
|
+
`${id}-${s}`
|
|
5670
|
+
)) });
|
|
5671
|
+
};
|
|
5672
|
+
EdgeDecoration.displayName = "EdgeDecoration";
|
|
4665
5673
|
|
|
4666
5674
|
exports.AnimatedCounter = AnimatedCounter;
|
|
4667
5675
|
exports.ArticleSection = ArticleSection;
|
|
@@ -4675,14 +5683,17 @@ exports.Center = Center;
|
|
|
4675
5683
|
exports.CommunityLinks = CommunityLinks;
|
|
4676
5684
|
exports.ContentSection = ContentSection;
|
|
4677
5685
|
exports.Divider = Divider;
|
|
5686
|
+
exports.EdgeDecoration = EdgeDecoration;
|
|
4678
5687
|
exports.FeatureCard = FeatureCard;
|
|
4679
5688
|
exports.FeatureGrid = FeatureGrid;
|
|
5689
|
+
exports.GeometricPattern = GeometricPattern;
|
|
4680
5690
|
exports.GradientDivider = GradientDivider;
|
|
4681
5691
|
exports.HStack = HStack;
|
|
4682
5692
|
exports.HeroSection = HeroSection;
|
|
4683
5693
|
exports.Icon = Icon;
|
|
4684
5694
|
exports.InstallBox = InstallBox;
|
|
4685
5695
|
exports.MarketingFooter = MarketingFooter;
|
|
5696
|
+
exports.PatternTile = PatternTile;
|
|
4686
5697
|
exports.PricingCard = PricingCard;
|
|
4687
5698
|
exports.PricingGrid = PricingGrid;
|
|
4688
5699
|
exports.PullQuote = PullQuote;
|
|
@@ -4697,3 +5708,4 @@ exports.TagCloud = TagCloud;
|
|
|
4697
5708
|
exports.TeamCard = TeamCard;
|
|
4698
5709
|
exports.Typography = Typography;
|
|
4699
5710
|
exports.VStack = VStack;
|
|
5711
|
+
exports.getTileDimensions = getTileDimensions;
|