@opencosmos/ui 1.3.1 → 1.3.2

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 (46) hide show
  1. package/.claude/CLAUDE.md +47 -47
  2. package/LICENSE +21 -0
  3. package/README.md +21 -21
  4. package/dist/{hooks-CKW8vE9H.d.ts → hooks-CFPKFXhH.d.ts} +1 -1
  5. package/dist/{hooks-1b8WaQf1.d.mts → hooks-CeAuZ0i5.d.mts} +1 -1
  6. package/dist/hooks.d.mts +1 -1
  7. package/dist/hooks.d.ts +1 -1
  8. package/dist/hooks.js.map +1 -1
  9. package/dist/hooks.mjs.map +1 -1
  10. package/dist/index.d.mts +78 -11
  11. package/dist/index.d.ts +78 -11
  12. package/dist/index.js +585 -342
  13. package/dist/index.js.map +1 -1
  14. package/dist/index.mjs +548 -312
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/{providers-CXPDMsl7.d.mts → providers-CzKisd2T.d.mts} +1 -1
  17. package/dist/{providers-Dn_Msjvz.d.ts → providers-D39-kwai.d.ts} +1 -1
  18. package/dist/providers.d.mts +1 -1
  19. package/dist/providers.d.ts +1 -1
  20. package/dist/providers.js.map +1 -1
  21. package/dist/providers.mjs.map +1 -1
  22. package/dist/tokens.js.map +1 -1
  23. package/dist/{utils-Cs04sxth.d.mts → utils-CkatYLG4.d.mts} +1 -1
  24. package/dist/{utils-CIIM7dAC.d.ts → utils-Y1Zi7biA.d.ts} +1 -1
  25. package/dist/utils.d.mts +1 -1
  26. package/dist/utils.d.ts +1 -1
  27. package/dist/utils.js.map +1 -1
  28. package/dist/utils.mjs.map +1 -1
  29. package/package.json +256 -256
  30. package/src/component-registry.ts +4 -4
  31. package/src/components/data-display/CollapsibleCodeBlock.tsx +1 -1
  32. package/src/components/data-display/OpenCosmosIcon.tsx +39 -0
  33. package/src/components/data-display/index.ts +1 -0
  34. package/src/components/layout/AppSidebar.tsx +277 -0
  35. package/src/components/layout/CustomizerPanel.tsx +2 -2
  36. package/src/components/layout/index.ts +1 -0
  37. package/src/hooks/useTheme.ts +1 -1
  38. package/src/hooks.ts +1 -1
  39. package/src/index.ts +6 -4
  40. package/src/lib/store/customizer.ts +1 -1
  41. package/src/lib/store/theme.ts +1 -1
  42. package/src/lib/syntax-parser/index.ts +1 -1
  43. package/src/providers/ThemeProvider.tsx +2 -2
  44. package/src/providers.ts +1 -1
  45. package/src/tokens.ts +3 -3
  46. package/src/utils.ts +1 -1
package/dist/index.mjs CHANGED
@@ -8267,6 +8267,34 @@ var GitHubIcon = ({
8267
8267
  );
8268
8268
  };
8269
8269
 
8270
+ // src/components/data-display/OpenCosmosIcon.tsx
8271
+ import { jsx as jsx68, jsxs as jsxs40 } from "react/jsx-runtime";
8272
+ var OpenCosmosIcon = ({
8273
+ ref,
8274
+ size = 20,
8275
+ className = ""
8276
+ }) => /* @__PURE__ */ jsxs40(
8277
+ "svg",
8278
+ {
8279
+ ref,
8280
+ xmlns: "http://www.w3.org/2000/svg",
8281
+ width: size,
8282
+ height: size,
8283
+ viewBox: "0 0 24 24",
8284
+ fill: "none",
8285
+ stroke: "currentColor",
8286
+ strokeLinecap: "round",
8287
+ strokeLinejoin: "round",
8288
+ className,
8289
+ "aria-hidden": "true",
8290
+ children: [
8291
+ /* @__PURE__ */ jsx68("circle", { cx: "12", cy: "12", r: "9.5", strokeWidth: "1.5" }),
8292
+ /* @__PURE__ */ jsx68("ellipse", { cx: "12", cy: "12", rx: "9.5", ry: "3.2", strokeWidth: "1.25", transform: "rotate(-35 12 12)" }),
8293
+ /* @__PURE__ */ jsx68("circle", { cx: "12", cy: "12", r: "1.75", fill: "currentColor", stroke: "none" })
8294
+ ]
8295
+ }
8296
+ );
8297
+
8270
8298
  // src/components/data-display/Heading.tsx
8271
8299
  import React16 from "react";
8272
8300
  var Heading = ({
@@ -8374,7 +8402,7 @@ var Text = ({
8374
8402
 
8375
8403
  // src/components/data-display/VariableWeightText.tsx
8376
8404
  import { motion as motion2 } from "framer-motion";
8377
- import { jsx as jsx68 } from "react/jsx-runtime";
8405
+ import { jsx as jsx69 } from "react/jsx-runtime";
8378
8406
  var VariableWeightText = ({
8379
8407
  children,
8380
8408
  minWeight = 200,
@@ -8390,7 +8418,7 @@ var VariableWeightText = ({
8390
8418
  const effectiveIntensity = intensity ?? motionIntensity;
8391
8419
  const scaledDuration = effectiveIntensity > 0 ? duration * (5 / effectiveIntensity) : duration;
8392
8420
  if (effectiveIntensity === 0) {
8393
- return /* @__PURE__ */ jsx68(
8421
+ return /* @__PURE__ */ jsx69(
8394
8422
  "div",
8395
8423
  {
8396
8424
  className,
@@ -8409,7 +8437,7 @@ var VariableWeightText = ({
8409
8437
  }
8410
8438
  );
8411
8439
  }
8412
- return /* @__PURE__ */ jsx68(
8440
+ return /* @__PURE__ */ jsx69(
8413
8441
  motion2.div,
8414
8442
  {
8415
8443
  initial: {
@@ -8446,7 +8474,7 @@ var VariableWeightText = ({
8446
8474
  // src/components/data-display/Typewriter.tsx
8447
8475
  import { motion as motion3 } from "framer-motion";
8448
8476
  import { useEffect as useEffect8, useState as useState13 } from "react";
8449
- import { jsx as jsx69, jsxs as jsxs40 } from "react/jsx-runtime";
8477
+ import { jsx as jsx70, jsxs as jsxs41 } from "react/jsx-runtime";
8450
8478
  function Typewriter({
8451
8479
  text,
8452
8480
  speed = 0.05,
@@ -8509,9 +8537,9 @@ function Typewriter({
8509
8537
  clearTimeout(timeoutId);
8510
8538
  };
8511
8539
  }, [text, speed, delay, loop, loopDelay, shouldAnimate, scale]);
8512
- return /* @__PURE__ */ jsxs40(Component, { className: cn("inline", className), children: [
8513
- /* @__PURE__ */ jsx69("span", { children: displayedText }),
8514
- showCursor && /* @__PURE__ */ jsx69(
8540
+ return /* @__PURE__ */ jsxs41(Component, { className: cn("inline", className), children: [
8541
+ /* @__PURE__ */ jsx70("span", { children: displayedText }),
8542
+ showCursor && /* @__PURE__ */ jsx70(
8515
8543
  motion3.span,
8516
8544
  {
8517
8545
  initial: { opacity: 0 },
@@ -8526,7 +8554,7 @@ function Typewriter({
8526
8554
 
8527
8555
  // src/components/data-display/StatCard.tsx
8528
8556
  import { cva as cva12 } from "class-variance-authority";
8529
- import { jsx as jsx70, jsxs as jsxs41 } from "react/jsx-runtime";
8557
+ import { jsx as jsx71, jsxs as jsxs42 } from "react/jsx-runtime";
8530
8558
  var statCardVariants = cva12(
8531
8559
  "rounded-2xl border bg-surface text-foreground shadow-xs p-6",
8532
8560
  {
@@ -8575,7 +8603,7 @@ var statCardChangeVariants = cva12(
8575
8603
  }
8576
8604
  }
8577
8605
  );
8578
- var TrendUpIcon = () => /* @__PURE__ */ jsxs41(
8606
+ var TrendUpIcon = () => /* @__PURE__ */ jsxs42(
8579
8607
  "svg",
8580
8608
  {
8581
8609
  xmlns: "http://www.w3.org/2000/svg",
@@ -8589,12 +8617,12 @@ var TrendUpIcon = () => /* @__PURE__ */ jsxs41(
8589
8617
  strokeLinejoin: "round",
8590
8618
  "aria-hidden": "true",
8591
8619
  children: [
8592
- /* @__PURE__ */ jsx70("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }),
8593
- /* @__PURE__ */ jsx70("polyline", { points: "16 7 22 7 22 13" })
8620
+ /* @__PURE__ */ jsx71("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }),
8621
+ /* @__PURE__ */ jsx71("polyline", { points: "16 7 22 7 22 13" })
8594
8622
  ]
8595
8623
  }
8596
8624
  );
8597
- var TrendDownIcon = () => /* @__PURE__ */ jsxs41(
8625
+ var TrendDownIcon = () => /* @__PURE__ */ jsxs42(
8598
8626
  "svg",
8599
8627
  {
8600
8628
  xmlns: "http://www.w3.org/2000/svg",
@@ -8608,12 +8636,12 @@ var TrendDownIcon = () => /* @__PURE__ */ jsxs41(
8608
8636
  strokeLinejoin: "round",
8609
8637
  "aria-hidden": "true",
8610
8638
  children: [
8611
- /* @__PURE__ */ jsx70("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }),
8612
- /* @__PURE__ */ jsx70("polyline", { points: "16 17 22 17 22 11" })
8639
+ /* @__PURE__ */ jsx71("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }),
8640
+ /* @__PURE__ */ jsx71("polyline", { points: "16 17 22 17 22 11" })
8613
8641
  ]
8614
8642
  }
8615
8643
  );
8616
- var MinusIcon = () => /* @__PURE__ */ jsx70(
8644
+ var MinusIcon = () => /* @__PURE__ */ jsx71(
8617
8645
  "svg",
8618
8646
  {
8619
8647
  xmlns: "http://www.w3.org/2000/svg",
@@ -8626,7 +8654,7 @@ var MinusIcon = () => /* @__PURE__ */ jsx70(
8626
8654
  strokeLinecap: "round",
8627
8655
  strokeLinejoin: "round",
8628
8656
  "aria-hidden": "true",
8629
- children: /* @__PURE__ */ jsx70("line", { x1: "5", y1: "12", x2: "19", y2: "12" })
8657
+ children: /* @__PURE__ */ jsx71("line", { x1: "5", y1: "12", x2: "19", y2: "12" })
8630
8658
  }
8631
8659
  );
8632
8660
  function StatCard({
@@ -8642,31 +8670,31 @@ function StatCard({
8642
8670
  ...props
8643
8671
  }) {
8644
8672
  const resolvedTrend = trend ?? (change !== void 0 ? change > 0 ? "up" : change < 0 ? "down" : "flat" : void 0);
8645
- return /* @__PURE__ */ jsx70(
8673
+ return /* @__PURE__ */ jsx71(
8646
8674
  "div",
8647
8675
  {
8648
8676
  "data-slot": "stat-card",
8649
8677
  role: "article",
8650
8678
  className: cn(statCardVariants({ variant, size }), className),
8651
8679
  ...props,
8652
- children: /* @__PURE__ */ jsxs41("dl", { className: "space-y-1", children: [
8653
- /* @__PURE__ */ jsxs41("div", { className: "flex items-center justify-between", children: [
8654
- /* @__PURE__ */ jsx70("dt", { className: "text-sm font-medium text-foreground-secondary", children: label }),
8655
- icon && /* @__PURE__ */ jsx70("div", { className: "text-foreground-secondary", "aria-hidden": "true", children: icon })
8680
+ children: /* @__PURE__ */ jsxs42("dl", { className: "space-y-1", children: [
8681
+ /* @__PURE__ */ jsxs42("div", { className: "flex items-center justify-between", children: [
8682
+ /* @__PURE__ */ jsx71("dt", { className: "text-sm font-medium text-foreground-secondary", children: label }),
8683
+ icon && /* @__PURE__ */ jsx71("div", { className: "text-foreground-secondary", "aria-hidden": "true", children: icon })
8656
8684
  ] }),
8657
- /* @__PURE__ */ jsx70("dd", { className: cn(statCardValueVariants({ size })), children: value }),
8658
- (change !== void 0 || description) && /* @__PURE__ */ jsxs41("dd", { className: "flex items-center gap-2 pt-1", children: [
8659
- change !== void 0 && resolvedTrend && /* @__PURE__ */ jsxs41("span", { className: cn(statCardChangeVariants({ trend: resolvedTrend })), children: [
8660
- resolvedTrend === "up" && /* @__PURE__ */ jsx70(TrendUpIcon, {}),
8661
- resolvedTrend === "down" && /* @__PURE__ */ jsx70(TrendDownIcon, {}),
8662
- resolvedTrend === "flat" && /* @__PURE__ */ jsx70(MinusIcon, {}),
8663
- /* @__PURE__ */ jsxs41("span", { children: [
8685
+ /* @__PURE__ */ jsx71("dd", { className: cn(statCardValueVariants({ size })), children: value }),
8686
+ (change !== void 0 || description) && /* @__PURE__ */ jsxs42("dd", { className: "flex items-center gap-2 pt-1", children: [
8687
+ change !== void 0 && resolvedTrend && /* @__PURE__ */ jsxs42("span", { className: cn(statCardChangeVariants({ trend: resolvedTrend })), children: [
8688
+ resolvedTrend === "up" && /* @__PURE__ */ jsx71(TrendUpIcon, {}),
8689
+ resolvedTrend === "down" && /* @__PURE__ */ jsx71(TrendDownIcon, {}),
8690
+ resolvedTrend === "flat" && /* @__PURE__ */ jsx71(MinusIcon, {}),
8691
+ /* @__PURE__ */ jsxs42("span", { children: [
8664
8692
  change > 0 ? "+" : "",
8665
8693
  change,
8666
8694
  "%"
8667
8695
  ] })
8668
8696
  ] }),
8669
- description && /* @__PURE__ */ jsx70("span", { className: "text-sm text-foreground-secondary", children: description })
8697
+ description && /* @__PURE__ */ jsx71("span", { className: "text-sm text-foreground-secondary", children: description })
8670
8698
  ] })
8671
8699
  ] })
8672
8700
  }
@@ -8676,7 +8704,7 @@ function StatCardGroup({
8676
8704
  className,
8677
8705
  ...props
8678
8706
  }) {
8679
- return /* @__PURE__ */ jsx70(
8707
+ return /* @__PURE__ */ jsx71(
8680
8708
  "div",
8681
8709
  {
8682
8710
  "data-slot": "stat-card-group",
@@ -8688,7 +8716,7 @@ function StatCardGroup({
8688
8716
 
8689
8717
  // src/components/data-display/Timeline.tsx
8690
8718
  import { cva as cva13 } from "class-variance-authority";
8691
- import { jsx as jsx71, jsxs as jsxs42 } from "react/jsx-runtime";
8719
+ import { jsx as jsx72, jsxs as jsxs43 } from "react/jsx-runtime";
8692
8720
  var timelineVariants = cva13("relative", {
8693
8721
  variants: {
8694
8722
  orientation: {
@@ -8722,7 +8750,7 @@ var timelineItemStatusVariants = cva13(
8722
8750
  }
8723
8751
  }
8724
8752
  );
8725
- var CheckIcon3 = () => /* @__PURE__ */ jsx71(
8753
+ var CheckIcon3 = () => /* @__PURE__ */ jsx72(
8726
8754
  "svg",
8727
8755
  {
8728
8756
  xmlns: "http://www.w3.org/2000/svg",
@@ -8735,10 +8763,10 @@ var CheckIcon3 = () => /* @__PURE__ */ jsx71(
8735
8763
  strokeLinecap: "round",
8736
8764
  strokeLinejoin: "round",
8737
8765
  "aria-hidden": "true",
8738
- children: /* @__PURE__ */ jsx71("polyline", { points: "20 6 9 17 4 12" })
8766
+ children: /* @__PURE__ */ jsx72("polyline", { points: "20 6 9 17 4 12" })
8739
8767
  }
8740
8768
  );
8741
- var XIcon4 = () => /* @__PURE__ */ jsxs42(
8769
+ var XIcon4 = () => /* @__PURE__ */ jsxs43(
8742
8770
  "svg",
8743
8771
  {
8744
8772
  xmlns: "http://www.w3.org/2000/svg",
@@ -8752,12 +8780,12 @@ var XIcon4 = () => /* @__PURE__ */ jsxs42(
8752
8780
  strokeLinejoin: "round",
8753
8781
  "aria-hidden": "true",
8754
8782
  children: [
8755
- /* @__PURE__ */ jsx71("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
8756
- /* @__PURE__ */ jsx71("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
8783
+ /* @__PURE__ */ jsx72("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
8784
+ /* @__PURE__ */ jsx72("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
8757
8785
  ]
8758
8786
  }
8759
8787
  );
8760
- var CircleIcon = () => /* @__PURE__ */ jsx71(
8788
+ var CircleIcon = () => /* @__PURE__ */ jsx72(
8761
8789
  "svg",
8762
8790
  {
8763
8791
  xmlns: "http://www.w3.org/2000/svg",
@@ -8766,7 +8794,7 @@ var CircleIcon = () => /* @__PURE__ */ jsx71(
8766
8794
  viewBox: "0 0 24 24",
8767
8795
  fill: "currentColor",
8768
8796
  "aria-hidden": "true",
8769
- children: /* @__PURE__ */ jsx71("circle", { cx: "12", cy: "12", r: "6" })
8797
+ children: /* @__PURE__ */ jsx72("circle", { cx: "12", cy: "12", r: "6" })
8770
8798
  }
8771
8799
  );
8772
8800
  function Timeline({
@@ -8775,7 +8803,7 @@ function Timeline({
8775
8803
  children,
8776
8804
  ...props
8777
8805
  }) {
8778
- return /* @__PURE__ */ jsx71(
8806
+ return /* @__PURE__ */ jsx72(
8779
8807
  "ol",
8780
8808
  {
8781
8809
  "data-slot": "timeline",
@@ -8799,16 +8827,16 @@ function TimelineItem({
8799
8827
  const defaultIcon = (() => {
8800
8828
  switch (status) {
8801
8829
  case "completed":
8802
- return /* @__PURE__ */ jsx71(CheckIcon3, {});
8830
+ return /* @__PURE__ */ jsx72(CheckIcon3, {});
8803
8831
  case "error":
8804
- return /* @__PURE__ */ jsx71(XIcon4, {});
8832
+ return /* @__PURE__ */ jsx72(XIcon4, {});
8805
8833
  case "active":
8806
- return /* @__PURE__ */ jsx71(CircleIcon, {});
8834
+ return /* @__PURE__ */ jsx72(CircleIcon, {});
8807
8835
  default:
8808
- return /* @__PURE__ */ jsx71(CircleIcon, {});
8836
+ return /* @__PURE__ */ jsx72(CircleIcon, {});
8809
8837
  }
8810
8838
  })();
8811
- return /* @__PURE__ */ jsxs42(
8839
+ return /* @__PURE__ */ jsxs43(
8812
8840
  "li",
8813
8841
  {
8814
8842
  "data-slot": "timeline-item",
@@ -8816,8 +8844,8 @@ function TimelineItem({
8816
8844
  "aria-current": status === "active" ? "step" : void 0,
8817
8845
  ...props,
8818
8846
  children: [
8819
- /* @__PURE__ */ jsxs42("div", { className: "flex flex-col items-center", children: [
8820
- /* @__PURE__ */ jsx71(
8847
+ /* @__PURE__ */ jsxs43("div", { className: "flex flex-col items-center", children: [
8848
+ /* @__PURE__ */ jsx72(
8821
8849
  "div",
8822
8850
  {
8823
8851
  "data-slot": "timeline-icon",
@@ -8826,7 +8854,7 @@ function TimelineItem({
8826
8854
  children: icon ?? defaultIcon
8827
8855
  }
8828
8856
  ),
8829
- !isLast && /* @__PURE__ */ jsx71(
8857
+ !isLast && /* @__PURE__ */ jsx72(
8830
8858
  "div",
8831
8859
  {
8832
8860
  "data-slot": "timeline-connector",
@@ -8837,12 +8865,12 @@ function TimelineItem({
8837
8865
  }
8838
8866
  )
8839
8867
  ] }),
8840
- /* @__PURE__ */ jsxs42("div", { className: cn("pb-6", isLast && "pb-0"), children: [
8841
- /* @__PURE__ */ jsxs42("div", { className: "flex items-center gap-2", children: [
8842
- /* @__PURE__ */ jsx71("p", { className: "font-medium text-foreground leading-none", children: title }),
8843
- timestamp && /* @__PURE__ */ jsx71("time", { className: "text-xs text-foreground-secondary", children: timestamp })
8868
+ /* @__PURE__ */ jsxs43("div", { className: cn("pb-6", isLast && "pb-0"), children: [
8869
+ /* @__PURE__ */ jsxs43("div", { className: "flex items-center gap-2", children: [
8870
+ /* @__PURE__ */ jsx72("p", { className: "font-medium text-foreground leading-none", children: title }),
8871
+ timestamp && /* @__PURE__ */ jsx72("time", { className: "text-xs text-foreground-secondary", children: timestamp })
8844
8872
  ] }),
8845
- description && /* @__PURE__ */ jsx71("p", { className: "mt-1 text-sm text-foreground-secondary", children: description })
8873
+ description && /* @__PURE__ */ jsx72("p", { className: "mt-1 text-sm text-foreground-secondary", children: description })
8846
8874
  ] })
8847
8875
  ]
8848
8876
  }
@@ -8852,7 +8880,7 @@ function TimelineItem({
8852
8880
  // src/components/data-display/TreeView.tsx
8853
8881
  import * as React18 from "react";
8854
8882
  import { cva as cva14 } from "class-variance-authority";
8855
- import { jsx as jsx72, jsxs as jsxs43 } from "react/jsx-runtime";
8883
+ import { jsx as jsx73, jsxs as jsxs44 } from "react/jsx-runtime";
8856
8884
  var treeNodeVariants = cva14(
8857
8885
  "flex items-center gap-2 py-1 px-2 rounded-md text-sm cursor-pointer select-none transition-colors",
8858
8886
  {
@@ -8868,7 +8896,7 @@ var treeNodeVariants = cva14(
8868
8896
  }
8869
8897
  }
8870
8898
  );
8871
- var ChevronIcon = ({ expanded }) => /* @__PURE__ */ jsx72(
8899
+ var ChevronIcon = ({ expanded }) => /* @__PURE__ */ jsx73(
8872
8900
  "svg",
8873
8901
  {
8874
8902
  xmlns: "http://www.w3.org/2000/svg",
@@ -8885,7 +8913,7 @@ var ChevronIcon = ({ expanded }) => /* @__PURE__ */ jsx72(
8885
8913
  "shrink-0 transition-transform",
8886
8914
  expanded ? "rotate-90" : "rotate-0"
8887
8915
  ),
8888
- children: /* @__PURE__ */ jsx72("polyline", { points: "9 18 15 12 9 6" })
8916
+ children: /* @__PURE__ */ jsx73("polyline", { points: "9 18 15 12 9 6" })
8889
8917
  }
8890
8918
  );
8891
8919
  var TreeViewContext = React18.createContext({
@@ -8937,14 +8965,14 @@ function TreeView({
8937
8965
  },
8938
8966
  [controlledSelected, onSelectChange]
8939
8967
  );
8940
- return /* @__PURE__ */ jsx72(TreeViewContext.Provider, { value: { expanded, selected, toggleExpand, selectNode }, children: /* @__PURE__ */ jsx72(
8968
+ return /* @__PURE__ */ jsx73(TreeViewContext.Provider, { value: { expanded, selected, toggleExpand, selectNode }, children: /* @__PURE__ */ jsx73(
8941
8969
  "div",
8942
8970
  {
8943
8971
  "data-slot": "tree-view",
8944
8972
  role: "tree",
8945
8973
  className: cn("space-y-0.5", className),
8946
8974
  ...props,
8947
- children: nodes.map((node) => /* @__PURE__ */ jsx72(TreeViewNodeComponent, { node, level: 1 }, node.id))
8975
+ children: nodes.map((node) => /* @__PURE__ */ jsx73(TreeViewNodeComponent, { node, level: 1 }, node.id))
8948
8976
  }
8949
8977
  ) });
8950
8978
  }
@@ -8983,8 +9011,8 @@ function TreeViewNodeComponent({ node, level }) {
8983
9011
  break;
8984
9012
  }
8985
9013
  };
8986
- return /* @__PURE__ */ jsxs43("div", { "data-slot": "tree-view-node", role: "treeitem", "aria-expanded": hasChildren ? isExpanded : void 0, "aria-level": level, "aria-selected": isSelected, children: [
8987
- /* @__PURE__ */ jsxs43(
9014
+ return /* @__PURE__ */ jsxs44("div", { "data-slot": "tree-view-node", role: "treeitem", "aria-expanded": hasChildren ? isExpanded : void 0, "aria-level": level, "aria-selected": isSelected, children: [
9015
+ /* @__PURE__ */ jsxs44(
8988
9016
  "div",
8989
9017
  {
8990
9018
  className: cn(treeNodeVariants({ state })),
@@ -8993,18 +9021,18 @@ function TreeViewNodeComponent({ node, level }) {
8993
9021
  onKeyDown: handleKeyDown,
8994
9022
  tabIndex: node.disabled ? -1 : 0,
8995
9023
  children: [
8996
- hasChildren ? /* @__PURE__ */ jsx72(ChevronIcon, { expanded: isExpanded }) : /* @__PURE__ */ jsx72("span", { className: "w-3.5 shrink-0", "aria-hidden": "true" }),
8997
- node.icon && /* @__PURE__ */ jsx72("span", { className: "shrink-0 text-foreground-secondary", "aria-hidden": "true", children: node.icon }),
8998
- /* @__PURE__ */ jsx72("span", { className: "truncate", children: node.label })
9024
+ hasChildren ? /* @__PURE__ */ jsx73(ChevronIcon, { expanded: isExpanded }) : /* @__PURE__ */ jsx73("span", { className: "w-3.5 shrink-0", "aria-hidden": "true" }),
9025
+ node.icon && /* @__PURE__ */ jsx73("span", { className: "shrink-0 text-foreground-secondary", "aria-hidden": "true", children: node.icon }),
9026
+ /* @__PURE__ */ jsx73("span", { className: "truncate", children: node.label })
8999
9027
  ]
9000
9028
  }
9001
9029
  ),
9002
- hasChildren && isExpanded && /* @__PURE__ */ jsx72("div", { role: "group", children: node.children.map((child) => /* @__PURE__ */ jsx72(TreeViewNodeComponent, { node: child, level: level + 1 }, child.id)) })
9030
+ hasChildren && isExpanded && /* @__PURE__ */ jsx73("div", { role: "group", children: node.children.map((child) => /* @__PURE__ */ jsx73(TreeViewNodeComponent, { node: child, level: level + 1 }, child.id)) })
9003
9031
  ] });
9004
9032
  }
9005
9033
 
9006
9034
  // src/components/blocks/social/OpenGraphCard.tsx
9007
- import { jsx as jsx73, jsxs as jsxs44 } from "react/jsx-runtime";
9035
+ import { jsx as jsx74, jsxs as jsxs45 } from "react/jsx-runtime";
9008
9036
  function buildGradientCSS(config) {
9009
9037
  const { type, angle = 135, position = "circle at 50% 50%", colors, stops } = config;
9010
9038
  const colorStops = colors.map((color, index) => {
@@ -9072,7 +9100,7 @@ function OpenGraphCard({
9072
9100
  const activeStyle = backgroundStyles[variant] || backgroundStyles.sage;
9073
9101
  const firstColor = gradient?.colors[0] || primaryColor || "#0a0a0a";
9074
9102
  const isLight = variant === "secondary" || isLightColor(firstColor);
9075
- return /* @__PURE__ */ jsxs44(
9103
+ return /* @__PURE__ */ jsxs45(
9076
9104
  "div",
9077
9105
  {
9078
9106
  className: cn(className),
@@ -9093,7 +9121,7 @@ function OpenGraphCard({
9093
9121
  },
9094
9122
  ...props,
9095
9123
  children: [
9096
- !isLight && /* @__PURE__ */ jsx73(
9124
+ !isLight && /* @__PURE__ */ jsx74(
9097
9125
  "div",
9098
9126
  {
9099
9127
  style: {
@@ -9109,7 +9137,7 @@ function OpenGraphCard({
9109
9137
  }
9110
9138
  }
9111
9139
  ),
9112
- /* @__PURE__ */ jsxs44(
9140
+ /* @__PURE__ */ jsxs45(
9113
9141
  "div",
9114
9142
  {
9115
9143
  style: {
@@ -9123,7 +9151,7 @@ function OpenGraphCard({
9123
9151
  textAlign: "center"
9124
9152
  },
9125
9153
  children: [
9126
- icon !== null && (icon !== void 0 ? /* @__PURE__ */ jsx73(
9154
+ icon !== null && (icon !== void 0 ? /* @__PURE__ */ jsx74(
9127
9155
  "div",
9128
9156
  {
9129
9157
  style: {
@@ -9134,7 +9162,7 @@ function OpenGraphCard({
9134
9162
  },
9135
9163
  children: icon
9136
9164
  }
9137
- ) : /* @__PURE__ */ jsx73(
9165
+ ) : /* @__PURE__ */ jsx74(
9138
9166
  "div",
9139
9167
  {
9140
9168
  style: {
@@ -9148,10 +9176,10 @@ function OpenGraphCard({
9148
9176
  boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
9149
9177
  marginBottom: "16px"
9150
9178
  },
9151
- children: /* @__PURE__ */ jsx73("div", { style: { width: "24px", height: "24px", borderRadius: "50%", background: isLight ? "white" : activeStyle.accentColor } })
9179
+ children: /* @__PURE__ */ jsx74("div", { style: { width: "24px", height: "24px", borderRadius: "50%", background: isLight ? "white" : activeStyle.accentColor } })
9152
9180
  }
9153
9181
  )),
9154
- /* @__PURE__ */ jsx73(
9182
+ /* @__PURE__ */ jsx74(
9155
9183
  "h1",
9156
9184
  {
9157
9185
  style: {
@@ -9165,7 +9193,7 @@ function OpenGraphCard({
9165
9193
  children: title
9166
9194
  }
9167
9195
  ),
9168
- description && /* @__PURE__ */ jsx73(
9196
+ description && /* @__PURE__ */ jsx74(
9169
9197
  "p",
9170
9198
  {
9171
9199
  style: {
@@ -9191,13 +9219,13 @@ function OpenGraphCard({
9191
9219
  // src/components/layout/Accordion.tsx
9192
9220
  import * as AccordionPrimitive from "@radix-ui/react-accordion";
9193
9221
  import { ChevronDown as ChevronDown3 } from "lucide-react";
9194
- import { jsx as jsx74, jsxs as jsxs45 } from "react/jsx-runtime";
9222
+ import { jsx as jsx75, jsxs as jsxs46 } from "react/jsx-runtime";
9195
9223
  var Accordion = AccordionPrimitive.Root;
9196
9224
  var AccordionItem = ({
9197
9225
  ref,
9198
9226
  className,
9199
9227
  ...props
9200
- }) => /* @__PURE__ */ jsx74(
9228
+ }) => /* @__PURE__ */ jsx75(
9201
9229
  AccordionPrimitive.Item,
9202
9230
  {
9203
9231
  ref,
@@ -9210,7 +9238,7 @@ var AccordionTrigger = ({
9210
9238
  className,
9211
9239
  children,
9212
9240
  ...props
9213
- }) => /* @__PURE__ */ jsx74(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs45(
9241
+ }) => /* @__PURE__ */ jsx75(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs46(
9214
9242
  AccordionPrimitive.Trigger,
9215
9243
  {
9216
9244
  ref,
@@ -9221,7 +9249,7 @@ var AccordionTrigger = ({
9221
9249
  ...props,
9222
9250
  children: [
9223
9251
  children,
9224
- /* @__PURE__ */ jsx74(ChevronDown3, { className: "pointer-events-none h-4 w-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200" })
9252
+ /* @__PURE__ */ jsx75(ChevronDown3, { className: "pointer-events-none h-4 w-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200" })
9225
9253
  ]
9226
9254
  }
9227
9255
  ) });
@@ -9230,13 +9258,13 @@ var AccordionContent = ({
9230
9258
  className,
9231
9259
  children,
9232
9260
  ...props
9233
- }) => /* @__PURE__ */ jsx74(
9261
+ }) => /* @__PURE__ */ jsx75(
9234
9262
  AccordionPrimitive.Content,
9235
9263
  {
9236
9264
  ref,
9237
9265
  className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
9238
9266
  ...props,
9239
- children: /* @__PURE__ */ jsx74("div", { className: cn("pb-4 pt-0", className), children })
9267
+ children: /* @__PURE__ */ jsx75("div", { className: cn("pb-4 pt-0", className), children })
9240
9268
  }
9241
9269
  );
9242
9270
 
@@ -9248,7 +9276,7 @@ var AspectRatio = AspectRatioPrimitive.Root;
9248
9276
  import * as React19 from "react";
9249
9277
  import useEmblaCarousel from "embla-carousel-react";
9250
9278
  import { ArrowLeft, ArrowRight } from "lucide-react";
9251
- import { jsx as jsx75, jsxs as jsxs46 } from "react/jsx-runtime";
9279
+ import { jsx as jsx76, jsxs as jsxs47 } from "react/jsx-runtime";
9252
9280
  var CarouselContext = React19.createContext(null);
9253
9281
  function useCarousel() {
9254
9282
  const context = React19.useContext(CarouselContext);
@@ -9318,7 +9346,7 @@ var Carousel = ({
9318
9346
  api?.off("select", onSelect);
9319
9347
  };
9320
9348
  }, [api, onSelect]);
9321
- return /* @__PURE__ */ jsx75(
9349
+ return /* @__PURE__ */ jsx76(
9322
9350
  CarouselContext.Provider,
9323
9351
  {
9324
9352
  value: {
@@ -9331,7 +9359,7 @@ var Carousel = ({
9331
9359
  canScrollPrev,
9332
9360
  canScrollNext
9333
9361
  },
9334
- children: /* @__PURE__ */ jsx75(
9362
+ children: /* @__PURE__ */ jsx76(
9335
9363
  "div",
9336
9364
  {
9337
9365
  ref,
@@ -9352,7 +9380,7 @@ var CarouselContent = ({
9352
9380
  ...props
9353
9381
  }) => {
9354
9382
  const { carouselRef, orientation } = useCarousel();
9355
- return /* @__PURE__ */ jsx75("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx75(
9383
+ return /* @__PURE__ */ jsx76("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx76(
9356
9384
  "div",
9357
9385
  {
9358
9386
  ref,
@@ -9371,7 +9399,7 @@ var CarouselItem = ({
9371
9399
  ...props
9372
9400
  }) => {
9373
9401
  const { orientation } = useCarousel();
9374
- return /* @__PURE__ */ jsx75(
9402
+ return /* @__PURE__ */ jsx76(
9375
9403
  "div",
9376
9404
  {
9377
9405
  ref,
@@ -9394,7 +9422,7 @@ var CarouselPrevious = ({
9394
9422
  ...props
9395
9423
  }) => {
9396
9424
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
9397
- return /* @__PURE__ */ jsxs46(
9425
+ return /* @__PURE__ */ jsxs47(
9398
9426
  Button,
9399
9427
  {
9400
9428
  ref,
@@ -9409,8 +9437,8 @@ var CarouselPrevious = ({
9409
9437
  onClick: scrollPrev,
9410
9438
  ...props,
9411
9439
  children: [
9412
- /* @__PURE__ */ jsx75(ArrowLeft, { className: "h-4 w-4" }),
9413
- /* @__PURE__ */ jsx75("span", { className: "sr-only", children: "Previous slide" })
9440
+ /* @__PURE__ */ jsx76(ArrowLeft, { className: "h-4 w-4" }),
9441
+ /* @__PURE__ */ jsx76("span", { className: "sr-only", children: "Previous slide" })
9414
9442
  ]
9415
9443
  }
9416
9444
  );
@@ -9423,7 +9451,7 @@ var CarouselNext = ({
9423
9451
  ...props
9424
9452
  }) => {
9425
9453
  const { orientation, scrollNext, canScrollNext } = useCarousel();
9426
- return /* @__PURE__ */ jsxs46(
9454
+ return /* @__PURE__ */ jsxs47(
9427
9455
  Button,
9428
9456
  {
9429
9457
  ref,
@@ -9438,8 +9466,8 @@ var CarouselNext = ({
9438
9466
  onClick: scrollNext,
9439
9467
  ...props,
9440
9468
  children: [
9441
- /* @__PURE__ */ jsx75(ArrowRight, { className: "h-4 w-4" }),
9442
- /* @__PURE__ */ jsx75("span", { className: "sr-only", children: "Next slide" })
9469
+ /* @__PURE__ */ jsx76(ArrowRight, { className: "h-4 w-4" }),
9470
+ /* @__PURE__ */ jsx76("span", { className: "sr-only", children: "Next slide" })
9443
9471
  ]
9444
9472
  }
9445
9473
  );
@@ -9447,7 +9475,7 @@ var CarouselNext = ({
9447
9475
 
9448
9476
  // src/components/layout/Collapsible.tsx
9449
9477
  import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
9450
- import { jsx as jsx76 } from "react/jsx-runtime";
9478
+ import { jsx as jsx77 } from "react/jsx-runtime";
9451
9479
  var Collapsible = CollapsiblePrimitive.Root;
9452
9480
  var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
9453
9481
  var CollapsibleContent2 = ({
@@ -9455,7 +9483,7 @@ var CollapsibleContent2 = ({
9455
9483
  className,
9456
9484
  children,
9457
9485
  ...props
9458
- }) => /* @__PURE__ */ jsx76(
9486
+ }) => /* @__PURE__ */ jsx77(
9459
9487
  CollapsiblePrimitive.CollapsibleContent,
9460
9488
  {
9461
9489
  ref,
@@ -9500,12 +9528,12 @@ var Container = ({
9500
9528
  // src/components/layout/CustomizerPanel.tsx
9501
9529
  import React21 from "react";
9502
9530
  import { SlidersHorizontal, Sun, Moon, SunMoon, Building2, Leaf, Zap, Rocket, X as X3, Palette } from "lucide-react";
9503
- import { jsx as jsx77, jsxs as jsxs47 } from "react/jsx-runtime";
9531
+ import { jsx as jsx78, jsxs as jsxs48 } from "react/jsx-runtime";
9504
9532
  var allThemeOptions = [
9505
- { id: "studio", label: "Studio", icon: /* @__PURE__ */ jsx77(Building2, { className: "w-4 h-4" }) },
9506
- { id: "terra", label: "Terra", icon: /* @__PURE__ */ jsx77(Leaf, { className: "w-4 h-4" }) },
9507
- { id: "volt", label: "Volt", icon: /* @__PURE__ */ jsx77(Zap, { className: "w-4 h-4" }) },
9508
- { id: "speedboat", label: "Speedboat", icon: /* @__PURE__ */ jsx77(Rocket, { className: "w-4 h-4" }) }
9533
+ { id: "studio", label: "Studio", icon: /* @__PURE__ */ jsx78(Building2, { className: "w-4 h-4" }) },
9534
+ { id: "terra", label: "Terra", icon: /* @__PURE__ */ jsx78(Leaf, { className: "w-4 h-4" }) },
9535
+ { id: "volt", label: "Volt", icon: /* @__PURE__ */ jsx78(Zap, { className: "w-4 h-4" }) },
9536
+ { id: "speedboat", label: "Speedboat", icon: /* @__PURE__ */ jsx78(Rocket, { className: "w-4 h-4" }) }
9509
9537
  ];
9510
9538
  var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) => {
9511
9539
  const [mounted, setMounted] = React21.useState(false);
@@ -9584,7 +9612,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9584
9612
  }, [isOpen]);
9585
9613
  if (!mounted) return null;
9586
9614
  if (!isOpen) {
9587
- return /* @__PURE__ */ jsxs47(
9615
+ return /* @__PURE__ */ jsxs48(
9588
9616
  "button",
9589
9617
  {
9590
9618
  onClick: () => setIsOpen(true),
@@ -9592,13 +9620,13 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9592
9620
  className: "fixed bottom-4 right-4 bg-background text-foreground px-4 py-2 rounded-full shadow-lg border border-[var(--color-glass-border)] font-medium hover:opacity-80 transition-all z-50 flex items-center gap-2",
9593
9621
  style: { backdropFilter: "var(--effect-blur-sm)" },
9594
9622
  children: [
9595
- mode === "lightweight" ? /* @__PURE__ */ jsx77(SunMoon, { className: "w-5 h-5" }) : /* @__PURE__ */ jsx77(SlidersHorizontal, { className: "w-5 h-5" }),
9623
+ mode === "lightweight" ? /* @__PURE__ */ jsx78(SunMoon, { className: "w-5 h-5" }) : /* @__PURE__ */ jsx78(SlidersHorizontal, { className: "w-5 h-5" }),
9596
9624
  mode === "lightweight" ? "Theme" : "Customizer"
9597
9625
  ]
9598
9626
  }
9599
9627
  );
9600
9628
  }
9601
- return /* @__PURE__ */ jsxs47(
9629
+ return /* @__PURE__ */ jsxs48(
9602
9630
  "div",
9603
9631
  {
9604
9632
  ref: panelRef,
@@ -9617,25 +9645,25 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9617
9645
  backgroundColor: "var(--color-glass)"
9618
9646
  },
9619
9647
  children: [
9620
- /* @__PURE__ */ jsxs47("div", { className: "flex justify-between items-center mb-6", children: [
9621
- /* @__PURE__ */ jsx77("h3", { className: "font-bold text-lg", children: mode === "lightweight" ? "Theme Settings" : "Experience Customizer" }),
9622
- /* @__PURE__ */ jsx77(
9648
+ /* @__PURE__ */ jsxs48("div", { className: "flex justify-between items-center mb-6", children: [
9649
+ /* @__PURE__ */ jsx78("h3", { className: "font-bold text-lg", children: mode === "lightweight" ? "Theme Settings" : "Experience Customizer" }),
9650
+ /* @__PURE__ */ jsx78(
9623
9651
  "button",
9624
9652
  {
9625
9653
  onClick: () => setIsOpen(false),
9626
9654
  "aria-label": "Close customizer",
9627
9655
  className: "text-foreground opacity-60 hover:opacity-100 transition-opacity p-1",
9628
- children: /* @__PURE__ */ jsx77(X3, { className: "w-5 h-5", "aria-hidden": "true" })
9656
+ children: /* @__PURE__ */ jsx78(X3, { className: "w-5 h-5", "aria-hidden": "true" })
9629
9657
  }
9630
9658
  )
9631
9659
  ] }),
9632
- /* @__PURE__ */ jsxs47("div", { className: "space-y-6", children: [
9633
- mode === "full" && showMotionIntensity && /* @__PURE__ */ jsxs47("div", { children: [
9634
- /* @__PURE__ */ jsxs47("div", { className: "flex justify-between mb-2", children: [
9635
- /* @__PURE__ */ jsx77("label", { className: "text-sm font-medium opacity-80", children: "Motion Intensity" }),
9636
- /* @__PURE__ */ jsx77("span", { className: "text-sm opacity-60", children: motion6 })
9660
+ /* @__PURE__ */ jsxs48("div", { className: "space-y-6", children: [
9661
+ mode === "full" && showMotionIntensity && /* @__PURE__ */ jsxs48("div", { children: [
9662
+ /* @__PURE__ */ jsxs48("div", { className: "flex justify-between mb-2", children: [
9663
+ /* @__PURE__ */ jsx78("label", { className: "text-sm font-medium opacity-80", children: "Motion Intensity" }),
9664
+ /* @__PURE__ */ jsx78("span", { className: "text-sm opacity-60", children: motion6 })
9637
9665
  ] }),
9638
- /* @__PURE__ */ jsx77(
9666
+ /* @__PURE__ */ jsx78(
9639
9667
  "input",
9640
9668
  {
9641
9669
  type: "range",
@@ -9651,9 +9679,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9651
9679
  }
9652
9680
  )
9653
9681
  ] }),
9654
- mode === "full" && showThemeSelector && /* @__PURE__ */ jsxs47("div", { children: [
9655
- /* @__PURE__ */ jsx77("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Theme" }),
9656
- /* @__PURE__ */ jsx77("div", { className: `grid gap-2 mb-3 ${visibleThemes.length <= 3 ? "grid-cols-3" : "grid-cols-4"}`, children: visibleThemes.map((t) => /* @__PURE__ */ jsxs47(
9682
+ mode === "full" && showThemeSelector && /* @__PURE__ */ jsxs48("div", { children: [
9683
+ /* @__PURE__ */ jsx78("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Theme" }),
9684
+ /* @__PURE__ */ jsx78("div", { className: `grid gap-2 mb-3 ${visibleThemes.length <= 3 ? "grid-cols-3" : "grid-cols-4"}`, children: visibleThemes.map((t) => /* @__PURE__ */ jsxs48(
9657
9685
  "button",
9658
9686
  {
9659
9687
  onClick: () => setTheme(t.id),
@@ -9668,31 +9696,31 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9668
9696
  borderColor: "var(--color-primary)"
9669
9697
  } : {},
9670
9698
  children: [
9671
- /* @__PURE__ */ jsx77("span", { className: "text-base", children: t.icon }),
9672
- /* @__PURE__ */ jsx77("span", { children: t.label })
9699
+ /* @__PURE__ */ jsx78("span", { className: "text-base", children: t.icon }),
9700
+ /* @__PURE__ */ jsx78("span", { children: t.label })
9673
9701
  ]
9674
9702
  },
9675
9703
  t.id
9676
9704
  )) }),
9677
- /* @__PURE__ */ jsxs47("div", { className: "text-xs opacity-60 space-y-1", children: [
9678
- /* @__PURE__ */ jsxs47("div", { children: [
9679
- /* @__PURE__ */ jsx77("span", { className: "font-heading", children: "Heading:" }),
9705
+ /* @__PURE__ */ jsxs48("div", { className: "text-xs opacity-60 space-y-1", children: [
9706
+ /* @__PURE__ */ jsxs48("div", { children: [
9707
+ /* @__PURE__ */ jsx78("span", { className: "font-heading", children: "Heading:" }),
9680
9708
  " ",
9681
9709
  theme === "studio" ? "Outfit" : theme === "terra" ? "Lora" : theme === "speedboat" ? "Montserrat" : "Space Grotesk"
9682
9710
  ] }),
9683
- /* @__PURE__ */ jsxs47("div", { children: [
9684
- /* @__PURE__ */ jsx77("span", { className: "font-body", children: "Body:" }),
9711
+ /* @__PURE__ */ jsxs48("div", { children: [
9712
+ /* @__PURE__ */ jsx78("span", { className: "font-body", children: "Body:" }),
9685
9713
  " ",
9686
9714
  theme === "studio" ? "Manrope" : theme === "terra" ? "Instrument Sans" : theme === "speedboat" ? "Roboto" : "Space Grotesk"
9687
9715
  ] })
9688
9716
  ] })
9689
9717
  ] }),
9690
- /* @__PURE__ */ jsxs47("div", { children: [
9691
- /* @__PURE__ */ jsx77("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Mode" }),
9692
- /* @__PURE__ */ jsx77("div", { className: "grid grid-cols-2 gap-2", children: [
9693
- { id: "light", label: "Light", icon: /* @__PURE__ */ jsx77(Sun, { className: "w-4 h-4" }) },
9694
- { id: "dark", label: "Dark", icon: /* @__PURE__ */ jsx77(Moon, { className: "w-4 h-4" }) }
9695
- ].map((m) => /* @__PURE__ */ jsxs47(
9718
+ /* @__PURE__ */ jsxs48("div", { children: [
9719
+ /* @__PURE__ */ jsx78("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Mode" }),
9720
+ /* @__PURE__ */ jsx78("div", { className: "grid grid-cols-2 gap-2", children: [
9721
+ { id: "light", label: "Light", icon: /* @__PURE__ */ jsx78(Sun, { className: "w-4 h-4" }) },
9722
+ { id: "dark", label: "Dark", icon: /* @__PURE__ */ jsx78(Moon, { className: "w-4 h-4" }) }
9723
+ ].map((m) => /* @__PURE__ */ jsxs48(
9696
9724
  "button",
9697
9725
  {
9698
9726
  onClick: () => setMode(m.id),
@@ -9707,21 +9735,21 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9707
9735
  borderColor: "var(--color-primary)"
9708
9736
  } : {},
9709
9737
  children: [
9710
- /* @__PURE__ */ jsx77("span", { children: m.icon }),
9711
- /* @__PURE__ */ jsx77("span", { children: m.label })
9738
+ /* @__PURE__ */ jsx78("span", { children: m.icon }),
9739
+ /* @__PURE__ */ jsx78("span", { children: m.label })
9712
9740
  ]
9713
9741
  },
9714
9742
  m.id
9715
9743
  )) })
9716
9744
  ] }),
9717
- mode === "full" && /* @__PURE__ */ jsxs47("div", { className: "pt-4 border-t border-[var(--color-border)]", children: [
9718
- /* @__PURE__ */ jsxs47("div", { className: "flex items-center justify-between mb-4", children: [
9719
- /* @__PURE__ */ jsxs47("div", { className: "flex items-center gap-2", children: [
9720
- /* @__PURE__ */ jsx77(Palette, { className: "w-4 h-4 opacity-80" }),
9721
- /* @__PURE__ */ jsx77("label", { className: "text-sm font-medium opacity-80", children: "Color Customization" })
9745
+ mode === "full" && /* @__PURE__ */ jsxs48("div", { className: "pt-4 border-t border-[var(--color-border)]", children: [
9746
+ /* @__PURE__ */ jsxs48("div", { className: "flex items-center justify-between mb-4", children: [
9747
+ /* @__PURE__ */ jsxs48("div", { className: "flex items-center gap-2", children: [
9748
+ /* @__PURE__ */ jsx78(Palette, { className: "w-4 h-4 opacity-80" }),
9749
+ /* @__PURE__ */ jsx78("label", { className: "text-sm font-medium opacity-80", children: "Color Customization" })
9722
9750
  ] }),
9723
- /* @__PURE__ */ jsxs47("div", { className: "flex gap-1 bg-[var(--color-surface)] rounded-md p-0.5", children: [
9724
- /* @__PURE__ */ jsx77(
9751
+ /* @__PURE__ */ jsxs48("div", { className: "flex gap-1 bg-[var(--color-surface)] rounded-md p-0.5", children: [
9752
+ /* @__PURE__ */ jsx78(
9725
9753
  "button",
9726
9754
  {
9727
9755
  onClick: () => setCustomizationMode("simple"),
@@ -9733,7 +9761,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9733
9761
  children: "Simple"
9734
9762
  }
9735
9763
  ),
9736
- /* @__PURE__ */ jsx77(
9764
+ /* @__PURE__ */ jsx78(
9737
9765
  "button",
9738
9766
  {
9739
9767
  onClick: () => setCustomizationMode("advanced"),
@@ -9747,10 +9775,10 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9747
9775
  )
9748
9776
  ] })
9749
9777
  ] }),
9750
- /* @__PURE__ */ jsxs47("div", { className: "space-y-4", children: [
9751
- /* @__PURE__ */ jsxs47("div", { children: [
9752
- /* @__PURE__ */ jsx77("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Primary Color" }),
9753
- /* @__PURE__ */ jsx77(
9778
+ /* @__PURE__ */ jsxs48("div", { className: "space-y-4", children: [
9779
+ /* @__PURE__ */ jsxs48("div", { children: [
9780
+ /* @__PURE__ */ jsx78("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Primary Color" }),
9781
+ /* @__PURE__ */ jsx78(
9754
9782
  ColorPicker,
9755
9783
  {
9756
9784
  value: tempPrimaryColor,
@@ -9758,9 +9786,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9758
9786
  }
9759
9787
  )
9760
9788
  ] }),
9761
- customizationMode === "advanced" && /* @__PURE__ */ jsxs47("div", { children: [
9762
- /* @__PURE__ */ jsx77("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Secondary Color" }),
9763
- /* @__PURE__ */ jsx77(
9789
+ customizationMode === "advanced" && /* @__PURE__ */ jsxs48("div", { children: [
9790
+ /* @__PURE__ */ jsx78("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Secondary Color" }),
9791
+ /* @__PURE__ */ jsx78(
9764
9792
  ColorPicker,
9765
9793
  {
9766
9794
  value: tempSecondaryColor,
@@ -9768,9 +9796,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9768
9796
  }
9769
9797
  )
9770
9798
  ] }),
9771
- customizationMode === "advanced" && /* @__PURE__ */ jsxs47("div", { children: [
9772
- /* @__PURE__ */ jsx77("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Accent Color" }),
9773
- /* @__PURE__ */ jsx77(
9799
+ customizationMode === "advanced" && /* @__PURE__ */ jsxs48("div", { children: [
9800
+ /* @__PURE__ */ jsx78("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Accent Color" }),
9801
+ /* @__PURE__ */ jsx78(
9774
9802
  ColorPicker,
9775
9803
  {
9776
9804
  value: tempAccentColor,
@@ -9779,8 +9807,8 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9779
9807
  )
9780
9808
  ] })
9781
9809
  ] }),
9782
- /* @__PURE__ */ jsxs47("div", { className: "flex gap-2 mt-4", children: [
9783
- /* @__PURE__ */ jsx77(
9810
+ /* @__PURE__ */ jsxs48("div", { className: "flex gap-2 mt-4", children: [
9811
+ /* @__PURE__ */ jsx78(
9784
9812
  Button,
9785
9813
  {
9786
9814
  onClick: handleApplyColor,
@@ -9790,7 +9818,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9790
9818
  children: "Apply Colors"
9791
9819
  }
9792
9820
  ),
9793
- currentPalette && /* @__PURE__ */ jsx77(
9821
+ currentPalette && /* @__PURE__ */ jsx78(
9794
9822
  Button,
9795
9823
  {
9796
9824
  onClick: handleResetColors,
@@ -9800,7 +9828,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9800
9828
  }
9801
9829
  )
9802
9830
  ] }),
9803
- currentPalette && /* @__PURE__ */ jsxs47("p", { className: "text-xs opacity-60 mt-2", children: [
9831
+ currentPalette && /* @__PURE__ */ jsxs48("p", { className: "text-xs opacity-60 mt-2", children: [
9804
9832
  "Custom colors active for ",
9805
9833
  theme,
9806
9834
  " ",
@@ -9817,7 +9845,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
9817
9845
  // src/components/layout/DatePicker.tsx
9818
9846
  import { format } from "date-fns";
9819
9847
  import { Calendar as CalendarIcon } from "lucide-react";
9820
- import { jsx as jsx78, jsxs as jsxs48 } from "react/jsx-runtime";
9848
+ import { jsx as jsx79, jsxs as jsxs49 } from "react/jsx-runtime";
9821
9849
  function DatePicker({
9822
9850
  date,
9823
9851
  onDateChange,
@@ -9825,8 +9853,8 @@ function DatePicker({
9825
9853
  className,
9826
9854
  disabled = false
9827
9855
  }) {
9828
- return /* @__PURE__ */ jsxs48(Popover, { children: [
9829
- /* @__PURE__ */ jsx78(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs48(
9856
+ return /* @__PURE__ */ jsxs49(Popover, { children: [
9857
+ /* @__PURE__ */ jsx79(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs49(
9830
9858
  Button,
9831
9859
  {
9832
9860
  variant: "outline",
@@ -9837,12 +9865,12 @@ function DatePicker({
9837
9865
  ),
9838
9866
  disabled,
9839
9867
  children: [
9840
- /* @__PURE__ */ jsx78(CalendarIcon, { className: "mr-2 h-4 w-4" }),
9841
- date ? format(date, "PPP") : /* @__PURE__ */ jsx78("span", { children: placeholder })
9868
+ /* @__PURE__ */ jsx79(CalendarIcon, { className: "mr-2 h-4 w-4" }),
9869
+ date ? format(date, "PPP") : /* @__PURE__ */ jsx79("span", { children: placeholder })
9842
9870
  ]
9843
9871
  }
9844
9872
  ) }),
9845
- /* @__PURE__ */ jsx78(PopoverContent, { className: "w-auto p-0", children: /* @__PURE__ */ jsx78(
9873
+ /* @__PURE__ */ jsx79(PopoverContent, { className: "w-auto p-0", children: /* @__PURE__ */ jsx79(
9846
9874
  Calendar,
9847
9875
  {
9848
9876
  mode: "single",
@@ -9855,7 +9883,7 @@ function DatePicker({
9855
9883
  }
9856
9884
 
9857
9885
  // src/components/layout/Footer/Footer.tsx
9858
- import { jsx as jsx79, jsxs as jsxs49 } from "react/jsx-runtime";
9886
+ import { jsx as jsx80, jsxs as jsxs50 } from "react/jsx-runtime";
9859
9887
  var Footer = ({
9860
9888
  ref,
9861
9889
  logo,
@@ -9865,7 +9893,7 @@ var Footer = ({
9865
9893
  className = ""
9866
9894
  }) => {
9867
9895
  const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
9868
- return /* @__PURE__ */ jsxs49(
9896
+ return /* @__PURE__ */ jsxs50(
9869
9897
  "footer",
9870
9898
  {
9871
9899
  ref,
@@ -9875,11 +9903,11 @@ var Footer = ({
9875
9903
  ${className}
9876
9904
  `,
9877
9905
  children: [
9878
- /* @__PURE__ */ jsx79("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 sm:py-20 lg:py-24", children: /* @__PURE__ */ jsxs49("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-12 lg:gap-8", children: [
9879
- /* @__PURE__ */ jsx79("div", { className: "lg:col-span-4", children: logo && /* @__PURE__ */ jsx79("div", { className: "mb-6 text-2xl font-bold text-[var(--color-text-primary)]", children: logo }) }),
9880
- sections.map((section, index) => /* @__PURE__ */ jsxs49("div", { className: "lg:col-span-2", children: [
9881
- /* @__PURE__ */ jsx79("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: section.title }),
9882
- /* @__PURE__ */ jsx79("ul", { className: "space-y-3", children: section.links.map((link) => /* @__PURE__ */ jsx79("li", { children: /* @__PURE__ */ jsx79(
9906
+ /* @__PURE__ */ jsx80("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 sm:py-20 lg:py-24", children: /* @__PURE__ */ jsxs50("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-12 lg:gap-8", children: [
9907
+ /* @__PURE__ */ jsx80("div", { className: "lg:col-span-4", children: logo && /* @__PURE__ */ jsx80("div", { className: "mb-6 text-2xl font-bold text-[var(--color-text-primary)]", children: logo }) }),
9908
+ sections.map((section, index) => /* @__PURE__ */ jsxs50("div", { className: "lg:col-span-2", children: [
9909
+ /* @__PURE__ */ jsx80("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: section.title }),
9910
+ /* @__PURE__ */ jsx80("ul", { className: "space-y-3", children: section.links.map((link) => /* @__PURE__ */ jsx80("li", { children: /* @__PURE__ */ jsx80(
9883
9911
  "a",
9884
9912
  {
9885
9913
  href: link.href,
@@ -9890,10 +9918,10 @@ var Footer = ({
9890
9918
  }
9891
9919
  ) }, link.label)) })
9892
9920
  ] }, section.title)),
9893
- socialLinks && /* @__PURE__ */ jsxs49("div", { className: "lg:col-span-2", children: [
9894
- /* @__PURE__ */ jsx79("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: "Connect" }),
9895
- /* @__PURE__ */ jsxs49("ul", { className: "space-y-3", children: [
9896
- socialLinks.github && /* @__PURE__ */ jsx79("li", { children: /* @__PURE__ */ jsxs49(
9921
+ socialLinks && /* @__PURE__ */ jsxs50("div", { className: "lg:col-span-2", children: [
9922
+ /* @__PURE__ */ jsx80("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: "Connect" }),
9923
+ /* @__PURE__ */ jsxs50("ul", { className: "space-y-3", children: [
9924
+ socialLinks.github && /* @__PURE__ */ jsx80("li", { children: /* @__PURE__ */ jsxs50(
9897
9925
  "a",
9898
9926
  {
9899
9927
  href: socialLinks.github,
@@ -9901,12 +9929,12 @@ var Footer = ({
9901
9929
  rel: "noopener noreferrer",
9902
9930
  className: "text-[var(--color-text-secondary)] hover:text-[var(--color-primary)] transition-colors duration-200 text-sm flex items-center gap-2",
9903
9931
  children: [
9904
- /* @__PURE__ */ jsx79(GitHubIcon, { size: 16 }),
9932
+ /* @__PURE__ */ jsx80(GitHubIcon, { size: 16 }),
9905
9933
  "GitHub"
9906
9934
  ]
9907
9935
  }
9908
9936
  ) }),
9909
- socialLinks.linkedin && /* @__PURE__ */ jsx79("li", { children: /* @__PURE__ */ jsx79(
9937
+ socialLinks.linkedin && /* @__PURE__ */ jsx80("li", { children: /* @__PURE__ */ jsx80(
9910
9938
  "a",
9911
9939
  {
9912
9940
  href: socialLinks.linkedin,
@@ -9916,7 +9944,7 @@ var Footer = ({
9916
9944
  children: "LinkedIn"
9917
9945
  }
9918
9946
  ) }),
9919
- socialLinks.email && /* @__PURE__ */ jsx79("li", { children: /* @__PURE__ */ jsx79(
9947
+ socialLinks.email && /* @__PURE__ */ jsx80("li", { children: /* @__PURE__ */ jsx80(
9920
9948
  "a",
9921
9949
  {
9922
9950
  href: `mailto:${socialLinks.email}`,
@@ -9927,14 +9955,14 @@ var Footer = ({
9927
9955
  ] })
9928
9956
  ] })
9929
9957
  ] }) }),
9930
- /* @__PURE__ */ jsx79("div", { className: "border-t border-[var(--color-border)]", children: /* @__PURE__ */ jsx79("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6", children: /* @__PURE__ */ jsx79("p", { className: "text-sm text-[var(--color-text-secondary)] text-center", children: copyright || `\xA9 ${currentYear} All rights reserved.` }) }) })
9958
+ /* @__PURE__ */ jsx80("div", { className: "border-t border-[var(--color-border)]", children: /* @__PURE__ */ jsx80("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6", children: /* @__PURE__ */ jsx80("p", { className: "text-sm text-[var(--color-text-secondary)] text-center", children: copyright || `\xA9 ${currentYear} All rights reserved.` }) }) })
9931
9959
  ]
9932
9960
  }
9933
9961
  );
9934
9962
  };
9935
9963
 
9936
9964
  // src/components/layout/Grid.tsx
9937
- import { jsx as jsx80 } from "react/jsx-runtime";
9965
+ import { jsx as jsx81 } from "react/jsx-runtime";
9938
9966
  var mapResponsive = (prop, prefix, mapFunc) => {
9939
9967
  if (typeof prop === "number") {
9940
9968
  return mapFunc(prop);
@@ -9976,7 +10004,7 @@ var Grid = ({
9976
10004
  const getGapClass = (n) => `gap-${n}`;
9977
10005
  const colClasses = mapResponsive(columns, "grid-cols", getColClass);
9978
10006
  const gapClasses = mapResponsive(gap, "gap", getGapClass);
9979
- return /* @__PURE__ */ jsx80(
10007
+ return /* @__PURE__ */ jsx81(
9980
10008
  Component,
9981
10009
  {
9982
10010
  ref,
@@ -10031,13 +10059,13 @@ var GridItem = ({
10031
10059
  colStart ? mapResponsive(colStart, "col-start", getColStartClass) : "",
10032
10060
  className
10033
10061
  ].filter(Boolean).join(" ");
10034
- return /* @__PURE__ */ jsx80(Component, { ref, className: classes, ...props, children });
10062
+ return /* @__PURE__ */ jsx81(Component, { ref, className: classes, ...props, children });
10035
10063
  };
10036
10064
 
10037
10065
  // src/components/layout/Header/Header.tsx
10038
10066
  import { useState as useState16, useEffect as useEffect10 } from "react";
10039
10067
  import { Menu as Menu2, X as X4, ChevronDown as ChevronDown4 } from "lucide-react";
10040
- import { Fragment as Fragment3, jsx as jsx81, jsxs as jsxs50 } from "react/jsx-runtime";
10068
+ import { Fragment as Fragment3, jsx as jsx82, jsxs as jsxs51 } from "react/jsx-runtime";
10041
10069
  var Header2 = ({
10042
10070
  ref,
10043
10071
  logo,
@@ -10092,16 +10120,16 @@ var Header2 = ({
10092
10120
  return "absolute left-1/2 -translate-x-1/2";
10093
10121
  }
10094
10122
  };
10095
- return /* @__PURE__ */ jsxs50(Fragment3, { children: [
10096
- /* @__PURE__ */ jsx81(
10123
+ return /* @__PURE__ */ jsxs51(Fragment3, { children: [
10124
+ /* @__PURE__ */ jsx82(
10097
10125
  "header",
10098
10126
  {
10099
10127
  ref,
10100
10128
  className: `${baseStyles} ${positionStyles} ${transitionStyles} ${backgroundStyles} ${className}`,
10101
10129
  style: { transitionDuration },
10102
- children: /* @__PURE__ */ jsx81("div", { className: `${maxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: /* @__PURE__ */ jsxs50("div", { className: "flex items-center justify-between h-16 lg:h-20 relative", children: [
10103
- logo && /* @__PURE__ */ jsx81("div", { className: "flex-shrink-0 z-10", children: logo }),
10104
- navLinks.length > 0 && /* @__PURE__ */ jsx81(
10130
+ children: /* @__PURE__ */ jsx82("div", { className: `${maxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: /* @__PURE__ */ jsxs51("div", { className: "flex items-center justify-between h-16 lg:h-20 relative", children: [
10131
+ logo && /* @__PURE__ */ jsx82("div", { className: "flex-shrink-0 z-10", children: logo }),
10132
+ navLinks.length > 0 && /* @__PURE__ */ jsx82(
10105
10133
  "nav",
10106
10134
  {
10107
10135
  className: `hidden lg:flex items-center gap-8 ${getNavClasses()}`,
@@ -10110,14 +10138,14 @@ var Header2 = ({
10110
10138
  const hasDropdown = link.children && link.children.length > 0;
10111
10139
  const isOpen = openDropdown === link.label;
10112
10140
  if (hasDropdown) {
10113
- return /* @__PURE__ */ jsxs50(
10141
+ return /* @__PURE__ */ jsxs51(
10114
10142
  "div",
10115
10143
  {
10116
10144
  className: "relative group",
10117
10145
  onMouseEnter: () => setOpenDropdown(link.label),
10118
10146
  onMouseLeave: () => setOpenDropdown(null),
10119
10147
  children: [
10120
- /* @__PURE__ */ jsxs50(
10148
+ /* @__PURE__ */ jsxs51(
10121
10149
  "button",
10122
10150
  {
10123
10151
  className: `
@@ -10138,18 +10166,18 @@ var Header2 = ({
10138
10166
  "aria-haspopup": "true",
10139
10167
  children: [
10140
10168
  link.label,
10141
- /* @__PURE__ */ jsx81(ChevronDown4, { className: `w-3 h-3 ${shouldAnimate ? "transition-transform" : ""} ${isOpen ? "rotate-180" : ""}`, style: { transitionDuration } })
10169
+ /* @__PURE__ */ jsx82(ChevronDown4, { className: `w-3 h-3 ${shouldAnimate ? "transition-transform" : ""} ${isOpen ? "rotate-180" : ""}`, style: { transitionDuration } })
10142
10170
  ]
10143
10171
  }
10144
10172
  ),
10145
- isOpen && /* @__PURE__ */ jsx81("div", { className: "absolute top-full left-1/2 -translate-x-1/2 w-[200px] h-2" }),
10146
- isOpen && /* @__PURE__ */ jsx81("div", { className: `
10173
+ isOpen && /* @__PURE__ */ jsx82("div", { className: "absolute top-full left-1/2 -translate-x-1/2 w-[200px] h-2" }),
10174
+ isOpen && /* @__PURE__ */ jsx82("div", { className: `
10147
10175
  absolute top-full left-1/2 -translate-x-1/2 mt-2 min-w-[200px] z-50
10148
10176
  bg-[var(--color-surface)] border border-[var(--color-border)]
10149
10177
  rounded-lg shadow-xl py-1 p-1
10150
10178
  backdrop-blur-3xl bg-[var(--color-surface)]/95
10151
10179
  ${shouldAnimate ? "animate-fade-in" : ""}
10152
- `, style: { animationDuration: `${0.2 * motionFactor}s` }, children: link.children?.map((child) => /* @__PURE__ */ jsx81(
10180
+ `, style: { animationDuration: `${0.2 * motionFactor}s` }, children: link.children?.map((child) => /* @__PURE__ */ jsx82(
10153
10181
  NavLink,
10154
10182
  {
10155
10183
  href: child.href,
@@ -10165,7 +10193,7 @@ var Header2 = ({
10165
10193
  link.label
10166
10194
  );
10167
10195
  }
10168
- return /* @__PURE__ */ jsx81(
10196
+ return /* @__PURE__ */ jsx82(
10169
10197
  NavLink,
10170
10198
  {
10171
10199
  href: link.href,
@@ -10180,8 +10208,8 @@ var Header2 = ({
10180
10208
  })
10181
10209
  }
10182
10210
  ),
10183
- actions && /* @__PURE__ */ jsx81("div", { className: "hidden lg:flex items-center gap-4 z-10", children: actions }),
10184
- /* @__PURE__ */ jsx81(
10211
+ actions && /* @__PURE__ */ jsx82("div", { className: "hidden lg:flex items-center gap-4 z-10", children: actions }),
10212
+ /* @__PURE__ */ jsx82(
10185
10213
  "button",
10186
10214
  {
10187
10215
  onClick: () => setIsMenuOpen(!isMenuOpen),
@@ -10200,13 +10228,13 @@ var Header2 = ({
10200
10228
  style: { transitionDuration },
10201
10229
  "aria-label": isMenuOpen ? "Close menu" : "Open menu",
10202
10230
  "aria-expanded": isMenuOpen,
10203
- children: isMenuOpen ? /* @__PURE__ */ jsx81(X4, { className: "w-6 h-6" }) : /* @__PURE__ */ jsx81(Menu2, { className: "w-6 h-6" })
10231
+ children: isMenuOpen ? /* @__PURE__ */ jsx82(X4, { className: "w-6 h-6" }) : /* @__PURE__ */ jsx82(Menu2, { className: "w-6 h-6" })
10204
10232
  }
10205
10233
  )
10206
10234
  ] }) })
10207
10235
  }
10208
10236
  ),
10209
- /* @__PURE__ */ jsx81(
10237
+ /* @__PURE__ */ jsx82(
10210
10238
  "div",
10211
10239
  {
10212
10240
  className: `
@@ -10216,13 +10244,13 @@ var Header2 = ({
10216
10244
  `,
10217
10245
  style: { transitionDuration },
10218
10246
  "aria-hidden": !isMenuOpen,
10219
- children: /* @__PURE__ */ jsx81("div", { className: "absolute inset-0 bg-[var(--color-background)]", children: /* @__PURE__ */ jsxs50("div", { className: "flex flex-col items-center justify-center h-full gap-8 px-4", children: [
10247
+ children: /* @__PURE__ */ jsx82("div", { className: "absolute inset-0 bg-[var(--color-background)]", children: /* @__PURE__ */ jsxs51("div", { className: "flex flex-col items-center justify-center h-full gap-8 px-4", children: [
10220
10248
  navLinks.map((link, index) => {
10221
10249
  const hasDropdown = link.children && link.children.length > 0;
10222
10250
  const isExpanded = expandedMobileSection === link.label;
10223
10251
  if (hasDropdown) {
10224
- return /* @__PURE__ */ jsxs50("div", { className: "w-full max-w-xs", children: [
10225
- /* @__PURE__ */ jsx81(
10252
+ return /* @__PURE__ */ jsxs51("div", { className: "w-full max-w-xs", children: [
10253
+ /* @__PURE__ */ jsx82(
10226
10254
  "button",
10227
10255
  {
10228
10256
  onClick: () => setExpandedMobileSection(isExpanded ? null : link.label),
@@ -10246,7 +10274,7 @@ var Header2 = ({
10246
10274
  children: link.label
10247
10275
  }
10248
10276
  ),
10249
- isExpanded && /* @__PURE__ */ jsx81("div", { className: "flex flex-col gap-3 mt-4", children: link.children?.map((child) => /* @__PURE__ */ jsx81(
10277
+ isExpanded && /* @__PURE__ */ jsx82("div", { className: "flex flex-col gap-3 mt-4", children: link.children?.map((child) => /* @__PURE__ */ jsx82(
10250
10278
  "a",
10251
10279
  {
10252
10280
  href: child.href,
@@ -10269,7 +10297,7 @@ var Header2 = ({
10269
10297
  )) })
10270
10298
  ] }, link.label);
10271
10299
  }
10272
- return /* @__PURE__ */ jsx81(
10300
+ return /* @__PURE__ */ jsx82(
10273
10301
  "a",
10274
10302
  {
10275
10303
  href: link.href,
@@ -10296,7 +10324,7 @@ var Header2 = ({
10296
10324
  link.label
10297
10325
  );
10298
10326
  }),
10299
- actions && /* @__PURE__ */ jsx81(
10327
+ actions && /* @__PURE__ */ jsx82(
10300
10328
  "div",
10301
10329
  {
10302
10330
  className: "flex flex-col gap-4 mt-8 w-full max-w-xs",
@@ -10310,7 +10338,7 @@ var Header2 = ({
10310
10338
  ] }) })
10311
10339
  }
10312
10340
  ),
10313
- shouldAnimate && /* @__PURE__ */ jsx81("style", { children: `
10341
+ shouldAnimate && /* @__PURE__ */ jsx82("style", { children: `
10314
10342
  @keyframes fadeInUp {
10315
10343
  from {
10316
10344
  opacity: 0;
@@ -10326,7 +10354,7 @@ var Header2 = ({
10326
10354
  };
10327
10355
 
10328
10356
  // src/components/layout/PageLayout.tsx
10329
- import { jsx as jsx82, jsxs as jsxs51 } from "react/jsx-runtime";
10357
+ import { jsx as jsx83, jsxs as jsxs52 } from "react/jsx-runtime";
10330
10358
  function PageLayout({
10331
10359
  header,
10332
10360
  stickyHeader = false,
@@ -10349,9 +10377,9 @@ function PageLayout({
10349
10377
  const titleAreaBottomSpacing = swissGridSpacing && showBreadcrumbsBelowTitle ? "pb-3" : swissGridSpacing ? "pb-12 lg:pb-16" : "pb-8";
10350
10378
  const titleBottomMargin = swissGridSpacing ? "mb-4" : "mb-3";
10351
10379
  const breadcrumbsAreaSpacing = swissGridSpacing ? "pt-4 pb-8" : "pt-3 pb-6";
10352
- return /* @__PURE__ */ jsxs51("div", { className: "min-h-screen flex flex-col w-full min-w-0", children: [
10380
+ return /* @__PURE__ */ jsxs52("div", { className: "min-h-screen flex flex-col w-full min-w-0", children: [
10353
10381
  header,
10354
- breadcrumbs && showBreadcrumbsAtTop && /* @__PURE__ */ jsx82(
10382
+ breadcrumbs && showBreadcrumbsAtTop && /* @__PURE__ */ jsx83(
10355
10383
  "div",
10356
10384
  {
10357
10385
  className: `
@@ -10362,23 +10390,23 @@ function PageLayout({
10362
10390
  ${stickyHeaderSpacing}
10363
10391
  `,
10364
10392
  style: { zIndex: 45 },
10365
- children: /* @__PURE__ */ jsx82("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-3`, children: breadcrumbs })
10393
+ children: /* @__PURE__ */ jsx83("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-3`, children: breadcrumbs })
10366
10394
  }
10367
10395
  ),
10368
- (title || subtitle) && /* @__PURE__ */ jsx82("div", { className: `${titleAreaTopSpacing} ${titleAreaBottomSpacing} ${!showBreadcrumbsAtTop ? stickyHeaderSpacing : ""} bg-[var(--color-background)]`, children: /* @__PURE__ */ jsxs51("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: [
10369
- title && /* @__PURE__ */ jsx82("div", { className: titleBottomMargin, children: title }),
10370
- subtitle && /* @__PURE__ */ jsx82("div", { children: subtitle })
10396
+ (title || subtitle) && /* @__PURE__ */ jsx83("div", { className: `${titleAreaTopSpacing} ${titleAreaBottomSpacing} ${!showBreadcrumbsAtTop ? stickyHeaderSpacing : ""} bg-[var(--color-background)]`, children: /* @__PURE__ */ jsxs52("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: [
10397
+ title && /* @__PURE__ */ jsx83("div", { className: titleBottomMargin, children: title }),
10398
+ subtitle && /* @__PURE__ */ jsx83("div", { children: subtitle })
10371
10399
  ] }) }),
10372
- breadcrumbs && showBreadcrumbsBelowTitle && /* @__PURE__ */ jsx82("div", { className: `${breadcrumbsAreaSpacing} bg-[var(--color-background)]`, children: /* @__PURE__ */ jsx82("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: breadcrumbs }) }),
10400
+ breadcrumbs && showBreadcrumbsBelowTitle && /* @__PURE__ */ jsx83("div", { className: `${breadcrumbsAreaSpacing} bg-[var(--color-background)]`, children: /* @__PURE__ */ jsx83("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: breadcrumbs }) }),
10373
10401
  secondaryNav,
10374
10402
  tertiaryNav,
10375
- /* @__PURE__ */ jsx82("main", { className: `flex-1 ${className}`, children: /* @__PURE__ */ jsx82("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-12`, children }) }),
10403
+ /* @__PURE__ */ jsx83("main", { className: `flex-1 ${className}`, children: /* @__PURE__ */ jsx83("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-12`, children }) }),
10376
10404
  footer
10377
10405
  ] });
10378
10406
  }
10379
10407
 
10380
10408
  // src/components/layout/PageTemplate.tsx
10381
- import { Fragment as Fragment4, jsx as jsx83, jsxs as jsxs52 } from "react/jsx-runtime";
10409
+ import { Fragment as Fragment4, jsx as jsx84, jsxs as jsxs53 } from "react/jsx-runtime";
10382
10410
  function PageTemplate({
10383
10411
  header,
10384
10412
  title,
@@ -10398,11 +10426,11 @@ function PageTemplate({
10398
10426
  narrow: "max-w-4xl"
10399
10427
  // 896px - for reading-focused pages
10400
10428
  }[variant];
10401
- return /* @__PURE__ */ jsxs52(Fragment4, { children: [
10402
- /* @__PURE__ */ jsx83(
10429
+ return /* @__PURE__ */ jsxs53(Fragment4, { children: [
10430
+ /* @__PURE__ */ jsx84(
10403
10431
  PageLayout,
10404
10432
  {
10405
- header: /* @__PURE__ */ jsx83(
10433
+ header: /* @__PURE__ */ jsx84(
10406
10434
  Header2,
10407
10435
  {
10408
10436
  logo: header.logo,
@@ -10414,10 +10442,10 @@ function PageTemplate({
10414
10442
  ),
10415
10443
  stickyHeader: header.sticky ?? true,
10416
10444
  breadcrumbsPosition: "below-title",
10417
- breadcrumbs: /* @__PURE__ */ jsx83(Breadcrumbs, { items: breadcrumbs, variant: "subtle" }),
10418
- title: /* @__PURE__ */ jsx83(Heading, { level: 1, children: title }),
10419
- subtitle: subtitle ? /* @__PURE__ */ jsx83(Text, { size: "lg", variant: "secondary", children: subtitle }) : void 0,
10420
- secondaryNav: secondaryNav ? /* @__PURE__ */ jsx83(
10445
+ breadcrumbs: /* @__PURE__ */ jsx84(Breadcrumbs, { items: breadcrumbs, variant: "subtle" }),
10446
+ title: /* @__PURE__ */ jsx84(Heading, { level: 1, children: title }),
10447
+ subtitle: subtitle ? /* @__PURE__ */ jsx84(Text, { size: "lg", variant: "secondary", children: subtitle }) : void 0,
10448
+ secondaryNav: secondaryNav ? /* @__PURE__ */ jsx84(
10421
10449
  SecondaryNav,
10422
10450
  {
10423
10451
  items: secondaryNav.items,
@@ -10432,19 +10460,19 @@ function PageTemplate({
10432
10460
  children
10433
10461
  }
10434
10462
  ),
10435
- showCustomizer && /* @__PURE__ */ jsx83(CustomizerPanel, {})
10463
+ showCustomizer && /* @__PURE__ */ jsx84(CustomizerPanel, {})
10436
10464
  ] });
10437
10465
  }
10438
10466
 
10439
10467
  // src/components/layout/Resizable.tsx
10440
10468
  import { GripVertical as GripVertical2 } from "lucide-react";
10441
10469
  import { Group as PanelGroup, Panel, Separator as PanelResizeHandle } from "react-resizable-panels";
10442
- import { jsx as jsx84 } from "react/jsx-runtime";
10470
+ import { jsx as jsx85 } from "react/jsx-runtime";
10443
10471
  var ResizablePanelGroup = ({
10444
10472
  className,
10445
10473
  ...props
10446
10474
  }) => {
10447
- return /* @__PURE__ */ jsx84(
10475
+ return /* @__PURE__ */ jsx85(
10448
10476
  PanelGroup,
10449
10477
  {
10450
10478
  className: cn(
@@ -10461,7 +10489,7 @@ var ResizableHandle = ({
10461
10489
  className,
10462
10490
  ...props
10463
10491
  }) => {
10464
- return /* @__PURE__ */ jsx84(
10492
+ return /* @__PURE__ */ jsx85(
10465
10493
  PanelResizeHandle,
10466
10494
  {
10467
10495
  className: cn(
@@ -10469,29 +10497,29 @@ var ResizableHandle = ({
10469
10497
  className
10470
10498
  ),
10471
10499
  ...props,
10472
- children: withHandle && /* @__PURE__ */ jsx84("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border", children: /* @__PURE__ */ jsx84(GripVertical2, { className: "h-2.5 w-2.5" }) })
10500
+ children: withHandle && /* @__PURE__ */ jsx85("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border", children: /* @__PURE__ */ jsx85(GripVertical2, { className: "h-2.5 w-2.5" }) })
10473
10501
  }
10474
10502
  );
10475
10503
  };
10476
10504
 
10477
10505
  // src/components/layout/ScrollArea.tsx
10478
10506
  import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
10479
- import { jsx as jsx85, jsxs as jsxs53 } from "react/jsx-runtime";
10507
+ import { jsx as jsx86, jsxs as jsxs54 } from "react/jsx-runtime";
10480
10508
  var ScrollArea = ({
10481
10509
  ref,
10482
10510
  className,
10483
10511
  children,
10484
10512
  ...props
10485
- }) => /* @__PURE__ */ jsxs53(
10513
+ }) => /* @__PURE__ */ jsxs54(
10486
10514
  ScrollAreaPrimitive.Root,
10487
10515
  {
10488
10516
  ref,
10489
10517
  className: cn("relative overflow-hidden", className),
10490
10518
  ...props,
10491
10519
  children: [
10492
- /* @__PURE__ */ jsx85(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
10493
- /* @__PURE__ */ jsx85(ScrollBar, {}),
10494
- /* @__PURE__ */ jsx85(ScrollAreaPrimitive.Corner, {})
10520
+ /* @__PURE__ */ jsx86(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
10521
+ /* @__PURE__ */ jsx86(ScrollBar, {}),
10522
+ /* @__PURE__ */ jsx86(ScrollAreaPrimitive.Corner, {})
10495
10523
  ]
10496
10524
  }
10497
10525
  );
@@ -10500,7 +10528,7 @@ var ScrollBar = ({
10500
10528
  className,
10501
10529
  orientation = "vertical",
10502
10530
  ...props
10503
- }) => /* @__PURE__ */ jsx85(
10531
+ }) => /* @__PURE__ */ jsx86(
10504
10532
  ScrollAreaPrimitive.Scrollbar,
10505
10533
  {
10506
10534
  ref,
@@ -10512,20 +10540,20 @@ var ScrollBar = ({
10512
10540
  className
10513
10541
  ),
10514
10542
  ...props,
10515
- children: /* @__PURE__ */ jsx85(ScrollAreaPrimitive.Thumb, { className: "relative flex-1 rounded-full bg-border" })
10543
+ children: /* @__PURE__ */ jsx86(ScrollAreaPrimitive.Thumb, { className: "relative flex-1 rounded-full bg-border" })
10516
10544
  }
10517
10545
  );
10518
10546
 
10519
10547
  // src/components/layout/Separator.tsx
10520
10548
  import * as SeparatorPrimitive from "@radix-ui/react-separator";
10521
- import { jsx as jsx86 } from "react/jsx-runtime";
10549
+ import { jsx as jsx87 } from "react/jsx-runtime";
10522
10550
  var Separator4 = ({
10523
10551
  ref,
10524
10552
  className,
10525
10553
  orientation = "horizontal",
10526
10554
  decorative = true,
10527
10555
  ...props
10528
- }) => /* @__PURE__ */ jsx86(
10556
+ }) => /* @__PURE__ */ jsx87(
10529
10557
  SeparatorPrimitive.Root,
10530
10558
  {
10531
10559
  ref,
@@ -10542,14 +10570,14 @@ var Separator4 = ({
10542
10570
 
10543
10571
  // src/components/layout/Sidebar.tsx
10544
10572
  import { Slot as Slot3 } from "@radix-ui/react-slot";
10545
- import { jsx as jsx87, jsxs as jsxs54 } from "react/jsx-runtime";
10573
+ import { jsx as jsx88, jsxs as jsxs55 } from "react/jsx-runtime";
10546
10574
  var Sidebar = ({
10547
10575
  ref,
10548
10576
  className,
10549
10577
  children,
10550
10578
  isOpen = true,
10551
10579
  ...props
10552
- }) => /* @__PURE__ */ jsx87(
10580
+ }) => /* @__PURE__ */ jsx88(
10553
10581
  "aside",
10554
10582
  {
10555
10583
  ref,
@@ -10559,7 +10587,7 @@ var Sidebar = ({
10559
10587
  className
10560
10588
  ),
10561
10589
  ...props,
10562
- children: /* @__PURE__ */ jsx87("div", { className: "flex flex-col h-full", children })
10590
+ children: /* @__PURE__ */ jsx88("div", { className: "flex flex-col h-full", children })
10563
10591
  }
10564
10592
  );
10565
10593
  var SidebarOverlay = ({
@@ -10570,7 +10598,7 @@ var SidebarOverlay = ({
10570
10598
  ...props
10571
10599
  }) => {
10572
10600
  if (!isOpen) return null;
10573
- return /* @__PURE__ */ jsx87(
10601
+ return /* @__PURE__ */ jsx88(
10574
10602
  "div",
10575
10603
  {
10576
10604
  ref,
@@ -10587,7 +10615,7 @@ var SidebarHeader = ({
10587
10615
  ref,
10588
10616
  className,
10589
10617
  ...props
10590
- }) => /* @__PURE__ */ jsx87(
10618
+ }) => /* @__PURE__ */ jsx88(
10591
10619
  "div",
10592
10620
  {
10593
10621
  ref,
@@ -10599,7 +10627,7 @@ var SidebarContent = ({
10599
10627
  ref,
10600
10628
  className,
10601
10629
  ...props
10602
- }) => /* @__PURE__ */ jsx87(
10630
+ }) => /* @__PURE__ */ jsx88(
10603
10631
  "div",
10604
10632
  {
10605
10633
  ref,
@@ -10611,7 +10639,7 @@ var SidebarFooter = ({
10611
10639
  ref,
10612
10640
  className,
10613
10641
  ...props
10614
- }) => /* @__PURE__ */ jsx87(
10642
+ }) => /* @__PURE__ */ jsx88(
10615
10643
  "div",
10616
10644
  {
10617
10645
  ref,
@@ -10633,7 +10661,7 @@ var SidebarItem = ({
10633
10661
  ...props
10634
10662
  }) => {
10635
10663
  const Comp = asChild ? Slot3 : "button";
10636
- return /* @__PURE__ */ jsxs54(
10664
+ return /* @__PURE__ */ jsxs55(
10637
10665
  Comp,
10638
10666
  {
10639
10667
  ref,
@@ -10646,7 +10674,7 @@ var SidebarItem = ({
10646
10674
  style: { paddingLeft: `${12 + depth * 16}px` },
10647
10675
  ...props,
10648
10676
  children: [
10649
- hasChildren && /* @__PURE__ */ jsx87(
10677
+ hasChildren && /* @__PURE__ */ jsx88(
10650
10678
  "svg",
10651
10679
  {
10652
10680
  className: cn(
@@ -10656,7 +10684,7 @@ var SidebarItem = ({
10656
10684
  fill: "none",
10657
10685
  stroke: "currentColor",
10658
10686
  viewBox: "0 0 24 24",
10659
- children: /* @__PURE__ */ jsx87(
10687
+ children: /* @__PURE__ */ jsx88(
10660
10688
  "path",
10661
10689
  {
10662
10690
  strokeLinecap: "round",
@@ -10667,16 +10695,210 @@ var SidebarItem = ({
10667
10695
  )
10668
10696
  }
10669
10697
  ),
10670
- !hasChildren && depth > 0 && /* @__PURE__ */ jsx87("span", { className: "w-4 flex-shrink-0" }),
10671
- showIcon && icon && /* @__PURE__ */ jsx87("span", { className: "flex-shrink-0", children: icon }),
10672
- /* @__PURE__ */ jsx87("span", { className: "flex-1 text-left truncate", children })
10698
+ !hasChildren && depth > 0 && /* @__PURE__ */ jsx88("span", { className: "w-4 flex-shrink-0" }),
10699
+ showIcon && icon && /* @__PURE__ */ jsx88("span", { className: "flex-shrink-0", children: icon }),
10700
+ /* @__PURE__ */ jsx88("span", { className: "flex-1 text-left truncate", children })
10673
10701
  ]
10674
10702
  }
10675
10703
  );
10676
10704
  };
10677
10705
 
10706
+ // src/components/layout/AppSidebar.tsx
10707
+ import { createContext as createContext8, useContext as useContext9, useState as useState17, useEffect as useEffect11 } from "react";
10708
+ import { PanelLeftClose } from "lucide-react";
10709
+ import { jsx as jsx89, jsxs as jsxs56 } from "react/jsx-runtime";
10710
+ var STORAGE_KEY = "appsidebar:state";
10711
+ var APP_SIDEBAR_WIDTH = 280;
10712
+ var APP_SIDEBAR_WIDTH_COLLAPSED = 60;
10713
+ var AppSidebarContext = createContext8(null);
10714
+ var DEFAULT_CONTEXT = {
10715
+ isOpen: true,
10716
+ toggle: () => {
10717
+ },
10718
+ open: () => {
10719
+ },
10720
+ close: () => {
10721
+ }
10722
+ };
10723
+ function useAppSidebar() {
10724
+ return useContext9(AppSidebarContext) ?? DEFAULT_CONTEXT;
10725
+ }
10726
+ function AppSidebarProvider({ children, defaultOpen = true }) {
10727
+ const [isOpen, setIsOpen] = useState17(defaultOpen);
10728
+ useEffect11(() => {
10729
+ const stored = localStorage.getItem(STORAGE_KEY);
10730
+ if (stored !== null) setIsOpen(stored === "true");
10731
+ }, []);
10732
+ const persist3 = (value) => localStorage.setItem(STORAGE_KEY, String(value));
10733
+ const toggle = () => setIsOpen((prev) => {
10734
+ const next = !prev;
10735
+ persist3(next);
10736
+ return next;
10737
+ });
10738
+ const open = () => {
10739
+ setIsOpen(true);
10740
+ persist3(true);
10741
+ };
10742
+ const close = () => {
10743
+ setIsOpen(false);
10744
+ persist3(false);
10745
+ };
10746
+ return /* @__PURE__ */ jsx89(AppSidebarContext.Provider, { value: { isOpen, toggle, open, close }, children });
10747
+ }
10748
+ function AppSidebarInset({
10749
+ children,
10750
+ className
10751
+ }) {
10752
+ const { isOpen } = useAppSidebar();
10753
+ const { shouldAnimate, scale } = useMotionPreference();
10754
+ const duration = shouldAnimate ? Math.round(300 * (5 / Math.max(scale, 0.1))) : 0;
10755
+ return /* @__PURE__ */ jsx89(
10756
+ "div",
10757
+ {
10758
+ className: cn("min-h-screen", className),
10759
+ style: {
10760
+ marginLeft: isOpen ? APP_SIDEBAR_WIDTH : APP_SIDEBAR_WIDTH_COLLAPSED,
10761
+ transition: shouldAnimate ? `margin-left ${duration}ms ease-out` : "none"
10762
+ },
10763
+ children
10764
+ }
10765
+ );
10766
+ }
10767
+ function AppSidebar({
10768
+ logo,
10769
+ title,
10770
+ items = [],
10771
+ children,
10772
+ footer,
10773
+ className
10774
+ }) {
10775
+ const { isOpen, toggle } = useAppSidebar();
10776
+ const { shouldAnimate, scale } = useMotionPreference();
10777
+ const duration = shouldAnimate ? Math.round(300 * (5 / Math.max(scale, 0.1))) : 0;
10778
+ return /* @__PURE__ */ jsxs56(
10779
+ "aside",
10780
+ {
10781
+ className: cn(
10782
+ "fixed left-0 top-0 bottom-0 z-40 flex flex-col",
10783
+ "bg-background border-r border-foreground/8 overflow-hidden",
10784
+ className
10785
+ ),
10786
+ style: {
10787
+ width: isOpen ? APP_SIDEBAR_WIDTH : APP_SIDEBAR_WIDTH_COLLAPSED,
10788
+ transition: shouldAnimate ? `width ${duration}ms ease-out` : "none"
10789
+ },
10790
+ children: [
10791
+ /* @__PURE__ */ jsxs56("div", { className: "flex items-center h-16 px-[10px] shrink-0", children: [
10792
+ /* @__PURE__ */ jsxs56(
10793
+ "button",
10794
+ {
10795
+ onClick: toggle,
10796
+ className: cn(
10797
+ "flex items-center gap-2.5 flex-1 min-w-0",
10798
+ "rounded-lg p-1.5",
10799
+ "hover:bg-foreground/5 transition-colors duration-150",
10800
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]"
10801
+ ),
10802
+ "aria-label": isOpen ? title ?? "OpenCosmos" : "Expand sidebar",
10803
+ children: [
10804
+ /* @__PURE__ */ jsx89("span", { className: "w-8 h-8 shrink-0 flex items-center justify-center", children: logo }),
10805
+ /* @__PURE__ */ jsx89(
10806
+ "span",
10807
+ {
10808
+ className: "font-semibold text-sm text-foreground whitespace-nowrap",
10809
+ style: {
10810
+ opacity: isOpen ? 1 : 0,
10811
+ width: isOpen ? "auto" : 0,
10812
+ overflow: "hidden",
10813
+ pointerEvents: isOpen ? "auto" : "none",
10814
+ transition: shouldAnimate ? `opacity ${Math.round(duration * 0.6)}ms ease-out` : "none"
10815
+ },
10816
+ children: title
10817
+ }
10818
+ )
10819
+ ]
10820
+ }
10821
+ ),
10822
+ /* @__PURE__ */ jsx89(
10823
+ "button",
10824
+ {
10825
+ onClick: toggle,
10826
+ tabIndex: isOpen ? 0 : -1,
10827
+ className: cn(
10828
+ "shrink-0 w-8 h-8 flex items-center justify-center rounded-lg",
10829
+ "text-foreground/35 hover:text-foreground/65 hover:bg-foreground/5",
10830
+ "transition-colors duration-150",
10831
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]"
10832
+ ),
10833
+ style: {
10834
+ opacity: isOpen ? 1 : 0,
10835
+ pointerEvents: isOpen ? "auto" : "none",
10836
+ transition: shouldAnimate ? `opacity ${Math.round(duration * 0.5)}ms ease-out` : "none"
10837
+ },
10838
+ "aria-label": "Collapse sidebar",
10839
+ children: /* @__PURE__ */ jsx89(PanelLeftClose, { className: "w-4 h-4" })
10840
+ }
10841
+ )
10842
+ ] }),
10843
+ items.length > 0 && /* @__PURE__ */ jsx89("nav", { className: "px-2 py-2 space-y-0.5 shrink-0", "aria-label": "Main navigation", children: items.map((item) => /* @__PURE__ */ jsxs56(
10844
+ "a",
10845
+ {
10846
+ href: item.href,
10847
+ target: item.external ? "_blank" : void 0,
10848
+ rel: item.external ? "noopener noreferrer" : void 0,
10849
+ title: !isOpen ? item.label : void 0,
10850
+ "aria-label": !isOpen ? item.label : void 0,
10851
+ className: cn(
10852
+ "flex items-center rounded-lg transition-colors duration-150",
10853
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]",
10854
+ isOpen ? "gap-3 px-3 py-2.5" : "justify-center w-9 h-9 mx-auto",
10855
+ item.active ? "bg-foreground/8 text-foreground font-medium" : "text-[var(--color-text-secondary)] hover:bg-foreground/5 hover:text-[var(--color-text-primary)]"
10856
+ ),
10857
+ children: [
10858
+ /* @__PURE__ */ jsx89("span", { className: "shrink-0 flex items-center justify-center w-4 h-4", children: item.icon }),
10859
+ /* @__PURE__ */ jsx89(
10860
+ "span",
10861
+ {
10862
+ className: "text-sm whitespace-nowrap",
10863
+ style: {
10864
+ opacity: isOpen ? 1 : 0,
10865
+ width: isOpen ? "auto" : 0,
10866
+ overflow: "hidden",
10867
+ pointerEvents: isOpen ? "auto" : "none",
10868
+ transition: shouldAnimate ? `opacity ${Math.round(duration * 0.55)}ms ease-out` : "none"
10869
+ },
10870
+ children: item.label
10871
+ }
10872
+ )
10873
+ ]
10874
+ },
10875
+ item.label
10876
+ )) }),
10877
+ /* @__PURE__ */ jsx89(
10878
+ "div",
10879
+ {
10880
+ className: "flex-1 overflow-y-auto overflow-x-hidden min-h-0",
10881
+ style: { opacity: isOpen ? 1 : 0, pointerEvents: isOpen ? "auto" : "none" },
10882
+ children
10883
+ }
10884
+ ),
10885
+ footer && /* @__PURE__ */ jsx89(
10886
+ "div",
10887
+ {
10888
+ className: cn(
10889
+ "shrink-0 border-t border-foreground/8",
10890
+ isOpen ? "p-3" : "px-2 py-3 flex justify-center"
10891
+ ),
10892
+ children: footer
10893
+ }
10894
+ )
10895
+ ]
10896
+ }
10897
+ );
10898
+ }
10899
+
10678
10900
  // src/components/layout/Stack.tsx
10679
- import { jsx as jsx88 } from "react/jsx-runtime";
10901
+ import { jsx as jsx90 } from "react/jsx-runtime";
10680
10902
  var Stack = ({
10681
10903
  ref,
10682
10904
  children,
@@ -10712,7 +10934,7 @@ var Stack = ({
10712
10934
  evenly: "justify-evenly"
10713
10935
  }
10714
10936
  };
10715
- return /* @__PURE__ */ jsx88(
10937
+ return /* @__PURE__ */ jsx90(
10716
10938
  Component,
10717
10939
  {
10718
10940
  ref,
@@ -10724,7 +10946,7 @@ var Stack = ({
10724
10946
  };
10725
10947
 
10726
10948
  // src/components/layout/GlassSurface.tsx
10727
- import { jsx as jsx89 } from "react/jsx-runtime";
10949
+ import { jsx as jsx91 } from "react/jsx-runtime";
10728
10950
  var TINT_COLORS = {
10729
10951
  0: "255, 255, 255",
10730
10952
  1: "227, 227, 227",
@@ -10765,7 +10987,7 @@ function GlassSurface({
10765
10987
  } : void 0,
10766
10988
  ...style
10767
10989
  };
10768
- return /* @__PURE__ */ jsx89("div", { ref, className: classes, style: inlineStyles, children });
10990
+ return /* @__PURE__ */ jsx91("div", { ref, className: classes, style: inlineStyles, children });
10769
10991
  }
10770
10992
 
10771
10993
  // src/lib/webgl/Renderer.ts
@@ -10954,8 +11176,8 @@ var Color = class {
10954
11176
  };
10955
11177
 
10956
11178
  // src/components/backgrounds/WarpBackground.tsx
10957
- import { useEffect as useEffect11, useRef as useRef4 } from "react";
10958
- import { jsx as jsx90 } from "react/jsx-runtime";
11179
+ import { useEffect as useEffect12, useRef as useRef4 } from "react";
11180
+ import { jsx as jsx92 } from "react/jsx-runtime";
10959
11181
  var vertexShader = `
10960
11182
  attribute vec2 uv;
10961
11183
  attribute vec2 position;
@@ -11147,7 +11369,7 @@ function WarpBackground({
11147
11369
  const smoothMousePos = useRef4({ x: 0.5, y: 0.5 });
11148
11370
  const targetMouseActive = useRef4(0);
11149
11371
  const smoothMouseActive = useRef4(0);
11150
- useEffect11(() => {
11372
+ useEffect12(() => {
11151
11373
  if (!ctnDom.current) return;
11152
11374
  const ctn = ctnDom.current;
11153
11375
  const renderer = new Renderer({
@@ -11268,12 +11490,12 @@ function WarpBackground({
11268
11490
  autoCenterRepulsion,
11269
11491
  transparent
11270
11492
  ]);
11271
- return /* @__PURE__ */ jsx90("div", { ref: ctnDom, className: `w-full h-full relative ${className}`, ...rest });
11493
+ return /* @__PURE__ */ jsx92("div", { ref: ctnDom, className: `w-full h-full relative ${className}`, ...rest });
11272
11494
  }
11273
11495
 
11274
11496
  // src/components/backgrounds/FaultyTerminal.tsx
11275
- import { useEffect as useEffect12, useRef as useRef5, useMemo as useMemo3, useCallback as useCallback7 } from "react";
11276
- import { jsx as jsx91 } from "react/jsx-runtime";
11497
+ import { useEffect as useEffect13, useRef as useRef5, useMemo as useMemo3, useCallback as useCallback7 } from "react";
11498
+ import { jsx as jsx93 } from "react/jsx-runtime";
11277
11499
  var vertexShader2 = `
11278
11500
  attribute vec2 position;
11279
11501
  attribute vec2 uv;
@@ -11528,7 +11750,7 @@ function FaultyTerminal({
11528
11750
  const y = 1 - (e.clientY - rect.top) / rect.height;
11529
11751
  mouseRef.current = { x, y };
11530
11752
  }, []);
11531
- useEffect12(() => {
11753
+ useEffect13(() => {
11532
11754
  const ctn = containerRef.current;
11533
11755
  if (!ctn) return;
11534
11756
  const renderer = new Renderer({ dpr });
@@ -11644,13 +11866,13 @@ function FaultyTerminal({
11644
11866
  brightness,
11645
11867
  handleMouseMove
11646
11868
  ]);
11647
- return /* @__PURE__ */ jsx91("div", { ref: containerRef, className: `w-full h-full relative overflow-hidden ${className}`, style, ...rest });
11869
+ return /* @__PURE__ */ jsx93("div", { ref: containerRef, className: `w-full h-full relative overflow-hidden ${className}`, style, ...rest });
11648
11870
  }
11649
11871
 
11650
11872
  // src/components/motion/AnimatedBeam.tsx
11651
11873
  import { motion as motion4 } from "framer-motion";
11652
11874
  import { useId as useId2 } from "react";
11653
- import { jsx as jsx92, jsxs as jsxs55 } from "react/jsx-runtime";
11875
+ import { jsx as jsx94, jsxs as jsxs57 } from "react/jsx-runtime";
11654
11876
  var AnimatedBeam = ({
11655
11877
  className,
11656
11878
  containerRef,
@@ -11686,7 +11908,7 @@ var AnimatedBeam = ({
11686
11908
  const controlY = y1;
11687
11909
  const controlX = x2;
11688
11910
  const path = `M ${x1},${y1} C ${x1 + curvature},${y1} ${x2 - curvature},${y2} ${x2},${y2}`;
11689
- return /* @__PURE__ */ jsxs55(
11911
+ return /* @__PURE__ */ jsxs57(
11690
11912
  "svg",
11691
11913
  {
11692
11914
  fill: "none",
@@ -11695,16 +11917,16 @@ var AnimatedBeam = ({
11695
11917
  xmlns: "http://www.w3.org/2000/svg",
11696
11918
  className: cn("pointer-events-none absolute inset-0 transform-gpu overflow-visible", className),
11697
11919
  children: [
11698
- /* @__PURE__ */ jsxs55("defs", { children: [
11699
- /* @__PURE__ */ jsxs55("linearGradient", { id: gradientId, gradientUnits: "userSpaceOnUse", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
11700
- /* @__PURE__ */ jsx92("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
11701
- /* @__PURE__ */ jsx92("stop", { stopColor: gradientStartColor }),
11702
- /* @__PURE__ */ jsx92("stop", { offset: "32.5%", stopColor: gradientStopColor }),
11703
- /* @__PURE__ */ jsx92("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
11920
+ /* @__PURE__ */ jsxs57("defs", { children: [
11921
+ /* @__PURE__ */ jsxs57("linearGradient", { id: gradientId, gradientUnits: "userSpaceOnUse", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
11922
+ /* @__PURE__ */ jsx94("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
11923
+ /* @__PURE__ */ jsx94("stop", { stopColor: gradientStartColor }),
11924
+ /* @__PURE__ */ jsx94("stop", { offset: "32.5%", stopColor: gradientStopColor }),
11925
+ /* @__PURE__ */ jsx94("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
11704
11926
  ] }),
11705
- /* @__PURE__ */ jsx92("marker", { id: `arrow-${id}`, markerWidth: "5", markerHeight: "5", refX: "2.5", refY: "2.5", orient: "auto", markerUnits: "strokeWidth", children: /* @__PURE__ */ jsx92("circle", { cx: "2.5", cy: "2.5", r: "2.5", fill: gradientStopColor }) })
11927
+ /* @__PURE__ */ jsx94("marker", { id: `arrow-${id}`, markerWidth: "5", markerHeight: "5", refX: "2.5", refY: "2.5", orient: "auto", markerUnits: "strokeWidth", children: /* @__PURE__ */ jsx94("circle", { cx: "2.5", cy: "2.5", r: "2.5", fill: gradientStopColor }) })
11706
11928
  ] }),
11707
- /* @__PURE__ */ jsx92(
11929
+ /* @__PURE__ */ jsx94(
11708
11930
  "path",
11709
11931
  {
11710
11932
  d: path,
@@ -11714,7 +11936,7 @@ var AnimatedBeam = ({
11714
11936
  strokeLinecap: "round"
11715
11937
  }
11716
11938
  ),
11717
- shouldAnimate && /* @__PURE__ */ jsx92(
11939
+ shouldAnimate && /* @__PURE__ */ jsx94(
11718
11940
  "path",
11719
11941
  {
11720
11942
  d: path,
@@ -11722,7 +11944,7 @@ var AnimatedBeam = ({
11722
11944
  strokeWidth: pathWidth,
11723
11945
  strokeLinecap: "round",
11724
11946
  fill: "none",
11725
- children: /* @__PURE__ */ jsx92(
11947
+ children: /* @__PURE__ */ jsx94(
11726
11948
  "animate",
11727
11949
  {
11728
11950
  attributeName: "stroke-dasharray",
@@ -11733,7 +11955,7 @@ var AnimatedBeam = ({
11733
11955
  )
11734
11956
  }
11735
11957
  ),
11736
- shouldAnimate && /* @__PURE__ */ jsx92(
11958
+ shouldAnimate && /* @__PURE__ */ jsx94(
11737
11959
  motion4.circle,
11738
11960
  {
11739
11961
  r: pathWidth * 1.5,
@@ -11750,7 +11972,7 @@ var AnimatedBeam = ({
11750
11972
  style: { offsetPath: `path('${path}')` }
11751
11973
  }
11752
11974
  ),
11753
- shouldAnimate && /* @__PURE__ */ jsx92(
11975
+ shouldAnimate && /* @__PURE__ */ jsx94(
11754
11976
  motion4.circle,
11755
11977
  {
11756
11978
  r: pathWidth,
@@ -11773,8 +11995,8 @@ var AnimatedBeam = ({
11773
11995
  };
11774
11996
 
11775
11997
  // src/components/backgrounds/OrbBackground.tsx
11776
- import { useEffect as useEffect13, useRef as useRef6 } from "react";
11777
- import { jsx as jsx93 } from "react/jsx-runtime";
11998
+ import { useEffect as useEffect14, useRef as useRef6 } from "react";
11999
+ import { jsx as jsx95 } from "react/jsx-runtime";
11778
12000
  function hexToRgb4(hex) {
11779
12001
  const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
11780
12002
  if (!result) return [0, 0, 0];
@@ -11985,7 +12207,7 @@ function OrbBackground({
11985
12207
  }
11986
12208
  `
11987
12209
  );
11988
- useEffect13(() => {
12210
+ useEffect14(() => {
11989
12211
  const container = ctnDom.current;
11990
12212
  if (!container) return;
11991
12213
  const bgColor = backgroundColor || getCSSVariable2("--color-background", "#000000");
@@ -12088,13 +12310,13 @@ function OrbBackground({
12088
12310
  gl.getExtension("WEBGL_lose_context")?.loseContext();
12089
12311
  };
12090
12312
  }, [hue, hoverIntensity, rotateOnHover, forceHoverState, backgroundColor]);
12091
- return /* @__PURE__ */ jsx93("div", { ref: ctnDom, className: cn("w-full h-full pointer-events-auto", className) });
12313
+ return /* @__PURE__ */ jsx95("div", { ref: ctnDom, className: cn("w-full h-full pointer-events-auto", className) });
12092
12314
  }
12093
12315
 
12094
12316
  // src/components/blocks/Hero.tsx
12095
12317
  import { ArrowRight as ArrowRight2 } from "lucide-react";
12096
12318
  import { motion as motion5 } from "framer-motion";
12097
- import { jsx as jsx94, jsxs as jsxs56 } from "react/jsx-runtime";
12319
+ import { jsx as jsx96, jsxs as jsxs58 } from "react/jsx-runtime";
12098
12320
  function HeroBlock({
12099
12321
  className,
12100
12322
  badge,
@@ -12132,12 +12354,12 @@ function HeroBlock({
12132
12354
  } : { duration: 0 }
12133
12355
  }
12134
12356
  };
12135
- return /* @__PURE__ */ jsxs56("div", { className: cn("relative min-h-[80vh] flex flex-col items-center justify-center overflow-hidden w-full", className), children: [
12136
- background && /* @__PURE__ */ jsxs56("div", { className: "absolute inset-0 z-0 select-none pointer-events-none", children: [
12137
- /* @__PURE__ */ jsx94("div", { className: "absolute inset-0", children: background }),
12138
- /* @__PURE__ */ jsx94("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent via-transparent to-[var(--color-background)] z-10" })
12357
+ return /* @__PURE__ */ jsxs58("div", { className: cn("relative min-h-[80vh] flex flex-col items-center justify-center overflow-hidden w-full", className), children: [
12358
+ background && /* @__PURE__ */ jsxs58("div", { className: "absolute inset-0 z-0 select-none pointer-events-none", children: [
12359
+ /* @__PURE__ */ jsx96("div", { className: "absolute inset-0", children: background }),
12360
+ /* @__PURE__ */ jsx96("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent via-transparent to-[var(--color-background)] z-10" })
12139
12361
  ] }),
12140
- /* @__PURE__ */ jsxs56(
12362
+ /* @__PURE__ */ jsxs58(
12141
12363
  motion5.div,
12142
12364
  {
12143
12365
  className: "relative z-20 container max-w-4xl px-4 text-center space-y-8",
@@ -12146,8 +12368,8 @@ function HeroBlock({
12146
12368
  whileInView: "visible",
12147
12369
  viewport: { once: true },
12148
12370
  children: [
12149
- badge && /* @__PURE__ */ jsx94(motion5.div, { variants: itemVariants, className: "flex justify-center", children: /* @__PURE__ */ jsx94(Badge, { variant: "outline", className: "backdrop-blur-md bg-[var(--color-surface)]/30 border-[var(--color-border)] px-4 py-1.5", children: badge }) }),
12150
- /* @__PURE__ */ jsx94(
12371
+ badge && /* @__PURE__ */ jsx96(motion5.div, { variants: itemVariants, className: "flex justify-center", children: /* @__PURE__ */ jsx96(Badge, { variant: "outline", className: "backdrop-blur-md bg-[var(--color-surface)]/30 border-[var(--color-border)] px-4 py-1.5", children: badge }) }),
12372
+ /* @__PURE__ */ jsx96(
12151
12373
  motion5.h1,
12152
12374
  {
12153
12375
  variants: itemVariants,
@@ -12155,14 +12377,14 @@ function HeroBlock({
12155
12377
  children: headline
12156
12378
  }
12157
12379
  ),
12158
- /* @__PURE__ */ jsx94(motion5.div, { variants: itemVariants, children: /* @__PURE__ */ jsx94(Text, { variant: "secondary", className: "text-xl md:text-2xl max-w-2xl mx-auto", children: description }) }),
12159
- children && /* @__PURE__ */ jsx94(motion5.div, { variants: itemVariants, className: "flex justify-center", children }),
12160
- /* @__PURE__ */ jsxs56(motion5.div, { variants: itemVariants, className: "flex flex-col sm:flex-row gap-4 justify-center items-center pt-4", children: [
12161
- primaryCta && /* @__PURE__ */ jsxs56(Button, { size: "lg", variant: primaryCta.variant || "default", onClick: primaryCta.onClick, children: [
12380
+ /* @__PURE__ */ jsx96(motion5.div, { variants: itemVariants, children: /* @__PURE__ */ jsx96(Text, { variant: "secondary", className: "text-xl md:text-2xl max-w-2xl mx-auto", children: description }) }),
12381
+ children && /* @__PURE__ */ jsx96(motion5.div, { variants: itemVariants, className: "flex justify-center", children }),
12382
+ /* @__PURE__ */ jsxs58(motion5.div, { variants: itemVariants, className: "flex flex-col sm:flex-row gap-4 justify-center items-center pt-4", children: [
12383
+ primaryCta && /* @__PURE__ */ jsxs58(Button, { size: "lg", variant: primaryCta.variant || "default", onClick: primaryCta.onClick, children: [
12162
12384
  primaryCta.label,
12163
- /* @__PURE__ */ jsx94(ArrowRight2, { className: "w-4 h-4 ml-2" })
12385
+ /* @__PURE__ */ jsx96(ArrowRight2, { className: "w-4 h-4 ml-2" })
12164
12386
  ] }),
12165
- secondaryCta && /* @__PURE__ */ jsx94(Button, { size: "lg", variant: "outline", className: "bg-[var(--color-surface)]/50 backdrop-blur-md", onClick: secondaryCta.onClick, children: secondaryCta.label })
12387
+ secondaryCta && /* @__PURE__ */ jsx96(Button, { size: "lg", variant: "outline", className: "bg-[var(--color-surface)]/50 backdrop-blur-md", onClick: secondaryCta.onClick, children: secondaryCta.label })
12166
12388
  ] })
12167
12389
  ]
12168
12390
  }
@@ -12171,8 +12393,8 @@ function HeroBlock({
12171
12393
  }
12172
12394
 
12173
12395
  // src/components/cursor/SplashCursor.tsx
12174
- import { useEffect as useEffect14, useRef as useRef7 } from "react";
12175
- import { jsx as jsx95 } from "react/jsx-runtime";
12396
+ import { useEffect as useEffect15, useRef as useRef7 } from "react";
12397
+ import { jsx as jsx97 } from "react/jsx-runtime";
12176
12398
  function pointerPrototype() {
12177
12399
  return {
12178
12400
  id: -1,
@@ -12206,7 +12428,7 @@ function SplashCursor({
12206
12428
  style
12207
12429
  }) {
12208
12430
  const canvasRef = useRef7(null);
12209
- useEffect14(() => {
12431
+ useEffect15(() => {
12210
12432
  const canvas = canvasRef.current;
12211
12433
  if (!canvas) return;
12212
12434
  const pointers = [pointerPrototype()];
@@ -13252,7 +13474,7 @@ function SplashCursor({
13252
13474
  BACK_COLOR,
13253
13475
  TRANSPARENT
13254
13476
  ]);
13255
- return /* @__PURE__ */ jsx95(
13477
+ return /* @__PURE__ */ jsx97(
13256
13478
  "div",
13257
13479
  {
13258
13480
  style: {
@@ -13266,7 +13488,7 @@ function SplashCursor({
13266
13488
  ...style
13267
13489
  },
13268
13490
  className,
13269
- children: /* @__PURE__ */ jsx95(
13491
+ children: /* @__PURE__ */ jsx97(
13270
13492
  "canvas",
13271
13493
  {
13272
13494
  ref: canvasRef,
@@ -13283,8 +13505,8 @@ function SplashCursor({
13283
13505
  }
13284
13506
 
13285
13507
  // src/components/cursor/TargetCursor.tsx
13286
- import { useEffect as useEffect15, useRef as useRef8, useState as useState17 } from "react";
13287
- import { Fragment as Fragment5, jsx as jsx96, jsxs as jsxs57 } from "react/jsx-runtime";
13508
+ import { useEffect as useEffect16, useRef as useRef8, useState as useState18 } from "react";
13509
+ import { Fragment as Fragment5, jsx as jsx98, jsxs as jsxs59 } from "react/jsx-runtime";
13288
13510
  function TargetCursor({
13289
13511
  color = "255, 255, 255",
13290
13512
  outerSize = 40,
@@ -13303,10 +13525,10 @@ function TargetCursor({
13303
13525
  const endY = useRef8(0);
13304
13526
  const _x = useRef8(0);
13305
13527
  const _y = useRef8(0);
13306
- const [isActive, setIsActive] = useState17(false);
13307
- const [isActiveClickable, setIsActiveClickable] = useState17(false);
13308
- const [isVisible, setIsVisible] = useState17(false);
13309
- useEffect15(() => {
13528
+ const [isActive, setIsActive] = useState18(false);
13529
+ const [isActiveClickable, setIsActiveClickable] = useState18(false);
13530
+ const [isVisible, setIsVisible] = useState18(false);
13531
+ useEffect16(() => {
13310
13532
  const onMouseMove = (e) => {
13311
13533
  endX.current = e.clientX;
13312
13534
  endY.current = e.clientY;
@@ -13354,11 +13576,11 @@ function TargetCursor({
13354
13576
  previousTimeRef.current = time;
13355
13577
  requestRef.current = requestAnimationFrame(animateCursor);
13356
13578
  };
13357
- useEffect15(() => {
13579
+ useEffect16(() => {
13358
13580
  requestRef.current = requestAnimationFrame(animateCursor);
13359
13581
  return () => cancelAnimationFrame(requestRef.current);
13360
13582
  }, []);
13361
- useEffect15(() => {
13583
+ useEffect16(() => {
13362
13584
  if (isVisible) {
13363
13585
  const style = document.createElement("style");
13364
13586
  style.innerHTML = `body, a, button, input, [role="button"] { cursor: none !important; }`;
@@ -13392,8 +13614,8 @@ function TargetCursor({
13392
13614
  }
13393
13615
  };
13394
13616
  if (!isVisible) return null;
13395
- return /* @__PURE__ */ jsxs57(Fragment5, { children: [
13396
- /* @__PURE__ */ jsx96(
13617
+ return /* @__PURE__ */ jsxs59(Fragment5, { children: [
13618
+ /* @__PURE__ */ jsx98(
13397
13619
  "div",
13398
13620
  {
13399
13621
  ref: cursorOuterRef,
@@ -13410,7 +13632,7 @@ function TargetCursor({
13410
13632
  }
13411
13633
  }
13412
13634
  ),
13413
- /* @__PURE__ */ jsx96(
13635
+ /* @__PURE__ */ jsx98(
13414
13636
  "div",
13415
13637
  {
13416
13638
  ref: cursorInnerRef,
@@ -13429,8 +13651,8 @@ function TargetCursor({
13429
13651
  }
13430
13652
 
13431
13653
  // src/providers/ThemeProvider.tsx
13432
- import { useEffect as useEffect16, useState as useState18 } from "react";
13433
- import { Fragment as Fragment6, jsx as jsx97 } from "react/jsx-runtime";
13654
+ import { useEffect as useEffect17, useState as useState19 } from "react";
13655
+ import { Fragment as Fragment6, jsx as jsx99 } from "react/jsx-runtime";
13434
13656
  var themeTokens = {
13435
13657
  studio: studioTokens,
13436
13658
  terra: terraTokens,
@@ -13655,19 +13877,19 @@ function ThemeProvider({ children, defaultTheme, defaultMode }) {
13655
13877
  const { theme, mode, setTheme, setMode } = useThemeStore();
13656
13878
  const customPalette = useCustomizer((state) => state.customColors?.[theme]?.[mode]);
13657
13879
  const motionIntensity = useCustomizer((state) => state.motion);
13658
- const [isTransitioning, setIsTransitioning] = useState18(false);
13659
- const [mounted, setMounted] = useState18(false);
13660
- useEffect16(() => {
13880
+ const [isTransitioning, setIsTransitioning] = useState19(false);
13881
+ const [mounted, setMounted] = useState19(false);
13882
+ useEffect17(() => {
13661
13883
  if (!defaultTheme && !defaultMode) return;
13662
13884
  const persisted = typeof window !== "undefined" && localStorage.getItem("ecosystem-theme");
13663
13885
  if (persisted) return;
13664
13886
  if (defaultTheme) setTheme(defaultTheme);
13665
13887
  if (defaultMode) setMode(defaultMode);
13666
13888
  }, []);
13667
- useEffect16(() => {
13889
+ useEffect17(() => {
13668
13890
  setMounted(true);
13669
13891
  }, []);
13670
- useEffect16(() => {
13892
+ useEffect17(() => {
13671
13893
  if (!mounted) return;
13672
13894
  setIsTransitioning(true);
13673
13895
  const root = document.documentElement;
@@ -13702,7 +13924,7 @@ function ThemeProvider({ children, defaultTheme, defaultMode }) {
13702
13924
  }, 400);
13703
13925
  return () => clearTimeout(timeout);
13704
13926
  }, [theme, mode, mounted, customPalette, motionIntensity]);
13705
- return /* @__PURE__ */ jsx97(Fragment6, { children });
13927
+ return /* @__PURE__ */ jsx99(Fragment6, { children });
13706
13928
  }
13707
13929
 
13708
13930
  // src/lib/animations.ts
@@ -13988,7 +14210,7 @@ function generateBreadcrumbs(hash, routeConfig, baseUrl = "#") {
13988
14210
 
13989
14211
  // src/component-registry.ts
13990
14212
  var BRAND = {
13991
- productName: "Sage Design Engine",
14213
+ productName: "OpenCosmos UI",
13992
14214
  productNameShort: "Sage",
13993
14215
  themeNames: {
13994
14216
  organic: "Terra",
@@ -14000,7 +14222,7 @@ var BRAND = {
14000
14222
  };
14001
14223
  var COMPONENT_REGISTRY = {
14002
14224
  /**
14003
- * Total count of all exported UI components from @thesage/ui
14225
+ * Total count of all exported UI components from @opencosmos/ui
14004
14226
  */
14005
14227
  totalCount: 100,
14006
14228
  /**
@@ -14359,6 +14581,7 @@ __export(data_display_exports, {
14359
14581
  DescriptionList: () => DescriptionList,
14360
14582
  GitHubIcon: () => GitHubIcon,
14361
14583
  Heading: () => Heading,
14584
+ OpenCosmosIcon: () => OpenCosmosIcon,
14362
14585
  StatCard: () => StatCard,
14363
14586
  StatCardGroup: () => StatCardGroup,
14364
14587
  Table: () => Table,
@@ -14385,10 +14608,15 @@ __export(data_display_exports, {
14385
14608
  // src/components/layout/index.ts
14386
14609
  var layout_exports = {};
14387
14610
  __export(layout_exports, {
14611
+ APP_SIDEBAR_WIDTH: () => APP_SIDEBAR_WIDTH,
14612
+ APP_SIDEBAR_WIDTH_COLLAPSED: () => APP_SIDEBAR_WIDTH_COLLAPSED,
14388
14613
  Accordion: () => Accordion,
14389
14614
  AccordionContent: () => AccordionContent,
14390
14615
  AccordionItem: () => AccordionItem,
14391
14616
  AccordionTrigger: () => AccordionTrigger,
14617
+ AppSidebar: () => AppSidebar,
14618
+ AppSidebarInset: () => AppSidebarInset,
14619
+ AppSidebarProvider: () => AppSidebarProvider,
14392
14620
  AspectRatio: () => AspectRatio,
14393
14621
  Carousel: () => Carousel,
14394
14622
  CarouselContent: () => CarouselContent,
@@ -14420,7 +14648,8 @@ __export(layout_exports, {
14420
14648
  SidebarHeader: () => SidebarHeader,
14421
14649
  SidebarItem: () => SidebarItem,
14422
14650
  SidebarOverlay: () => SidebarOverlay,
14423
- Stack: () => Stack
14651
+ Stack: () => Stack,
14652
+ useAppSidebar: () => useAppSidebar
14424
14653
  });
14425
14654
 
14426
14655
  // src/components/backgrounds/index.ts
@@ -14444,6 +14673,8 @@ __export(providers_exports, {
14444
14673
  ThemeProvider: () => ThemeProvider
14445
14674
  });
14446
14675
  export {
14676
+ APP_SIDEBAR_WIDTH,
14677
+ APP_SIDEBAR_WIDTH_COLLAPSED,
14447
14678
  Accordion,
14448
14679
  AccordionContent,
14449
14680
  AccordionItem,
@@ -14464,6 +14695,9 @@ export {
14464
14695
  AlertDialogTrigger,
14465
14696
  AlertTitle,
14466
14697
  AnimatedBeam,
14698
+ AppSidebar,
14699
+ AppSidebarInset,
14700
+ AppSidebarProvider,
14467
14701
  AspectImage,
14468
14702
  AspectRatio,
14469
14703
  Avatar,
@@ -14633,6 +14867,7 @@ export {
14633
14867
  NavigationMenuTrigger,
14634
14868
  NavigationMenuViewport,
14635
14869
  NotificationCenter,
14870
+ OpenCosmosIcon,
14636
14871
  OpenGraphCard,
14637
14872
  OrbBackground,
14638
14873
  overlays_exports as Overlays,
@@ -14789,6 +15024,7 @@ export {
14789
15024
  transitions,
14790
15025
  treeNodeVariants,
14791
15026
  typographySystem,
15027
+ useAppSidebar,
14792
15028
  useCustomizer,
14793
15029
  useForm,
14794
15030
  useFormField,