@almadar/ui 2.22.2 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/avl/index.cjs +699 -343
  2. package/dist/avl/index.d.cts +47 -10
  3. package/dist/avl/index.d.ts +2 -0
  4. package/dist/avl/index.js +696 -345
  5. package/dist/components/atoms/PatternTile.d.ts +41 -0
  6. package/dist/components/atoms/avl/AvlEffect.d.ts +2 -0
  7. package/dist/components/atoms/avl/AvlState.d.ts +5 -0
  8. package/dist/components/atoms/avl/index.d.ts +2 -0
  9. package/dist/components/atoms/avl/types.d.ts +34 -0
  10. package/dist/components/atoms/index.d.ts +1 -0
  11. package/dist/components/index.cjs +2136 -1124
  12. package/dist/components/index.js +1272 -264
  13. package/dist/components/molecules/EdgeDecoration.d.ts +35 -0
  14. package/dist/components/molecules/GeometricPattern.d.ts +33 -0
  15. package/dist/components/molecules/avl/AvlSwimLane.d.ts +10 -0
  16. package/dist/components/molecules/avl/AvlTransitionLane.d.ts +18 -0
  17. package/dist/components/molecules/avl/index.d.ts +2 -0
  18. package/dist/components/molecules/index.d.ts +2 -0
  19. package/dist/components/organisms/avl/AvlTraitScene.d.ts +3 -3
  20. package/dist/components/organisms/avl/AvlTransitionScene.d.ts +3 -6
  21. package/dist/docs/index.cjs +3 -3
  22. package/dist/docs/index.js +3 -3
  23. package/dist/illustrations/index.cjs +65 -12
  24. package/dist/illustrations/index.d.cts +7 -0
  25. package/dist/illustrations/index.js +65 -12
  26. package/dist/marketing/index.cjs +1035 -23
  27. package/dist/marketing/index.d.cts +112 -1
  28. package/dist/marketing/index.d.ts +6 -0
  29. package/dist/marketing/index.js +1034 -26
  30. package/dist/providers/index.cjs +125 -125
  31. package/dist/providers/index.js +37 -37
  32. package/dist/runtime/enrichFromResponse.d.ts +1 -1
  33. package/dist/runtime/index.cjs +1006 -998
  34. package/dist/runtime/index.js +247 -239
  35. package/package.json +1 -1
  36. package/themes/almadar-website.css +36 -34
@@ -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, f, n = "";
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] && (f = r(e[t])) && (n && (n += " "), n += f);
37
- } else for (f in e) e[f] && (n && (n += " "), n += f);
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, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += 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-[var(--color-secondary)] text-[var(--color-secondary-foreground)]",
3051
- "border-[length:var(--border-width-thin)] border-[var(--color-border)]",
3052
- "hover:bg-[var(--color-secondary-hover)]",
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: [
@@ -3505,7 +3505,7 @@ var ContentSection = React5__default.default.forwardRef(
3505
3505
  paddingClasses[padding],
3506
3506
  className
3507
3507
  ),
3508
- children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children })
3508
+ children
3509
3509
  }
3510
3510
  );
3511
3511
  }
@@ -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 max-w-3xl min-h-[400px]"
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-6xl", responsive: true, children: [
3694
+ const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xl", align: "center", className: "w-full", 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-6xl", children: [
3697
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full", 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-3xl mx-auto",
3755
+ className: "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-primary)]"
3814
+ className: "text-[var(--color-accent,#06b6d4)]"
3815
3815
  }
3816
3816
  );
3817
3817
  }
@@ -4039,7 +4039,7 @@ var SplitSection = ({
4039
4039
  className
4040
4040
  ),
4041
4041
  padding: "lg",
4042
- children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
4042
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn("w-full flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
4043
4043
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
4044
4044
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
4045
4045
  ] })
@@ -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
- maxWidthMap[maxWidth],
4478
- "mx-auto",
4472
+ "w-full",
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-6xl mx-auto", children: [
4500
+ children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "w-full 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-background)]",
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;