@opencosmos/ui 1.3.1 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +47 -47
- package/README.md +21 -21
- package/dist/{hooks-CKW8vE9H.d.ts → hooks-CFPKFXhH.d.ts} +1 -1
- package/dist/{hooks-1b8WaQf1.d.mts → hooks-CeAuZ0i5.d.mts} +1 -1
- package/dist/hooks.d.mts +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js.map +1 -1
- package/dist/hooks.mjs.map +1 -1
- package/dist/index.d.mts +78 -11
- package/dist/index.d.ts +78 -11
- package/dist/index.js +585 -342
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +548 -312
- package/dist/index.mjs.map +1 -1
- package/dist/{providers-CXPDMsl7.d.mts → providers-CzKisd2T.d.mts} +1 -1
- package/dist/{providers-Dn_Msjvz.d.ts → providers-D39-kwai.d.ts} +1 -1
- package/dist/providers.d.mts +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js.map +1 -1
- package/dist/providers.mjs.map +1 -1
- package/dist/tokens.js.map +1 -1
- package/dist/{utils-Cs04sxth.d.mts → utils-CkatYLG4.d.mts} +1 -1
- package/dist/{utils-CIIM7dAC.d.ts → utils-Y1Zi7biA.d.ts} +1 -1
- package/dist/utils.d.mts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/utils.mjs.map +1 -1
- package/package.json +257 -257
- package/src/component-registry.ts +4 -4
- package/src/components/data-display/CollapsibleCodeBlock.tsx +1 -1
- package/src/components/data-display/OpenCosmosIcon.tsx +39 -0
- package/src/components/data-display/index.ts +1 -0
- package/src/components/layout/AppSidebar.tsx +277 -0
- package/src/components/layout/CustomizerPanel.tsx +2 -2
- package/src/components/layout/index.ts +1 -0
- package/src/hooks/useTheme.ts +1 -1
- package/src/hooks.ts +1 -1
- package/src/index.ts +6 -4
- package/src/lib/store/customizer.ts +1 -1
- package/src/lib/store/theme.ts +1 -1
- package/src/lib/syntax-parser/index.ts +1 -1
- package/src/providers/ThemeProvider.tsx +2 -2
- package/src/providers.ts +1 -1
- package/src/tokens.ts +3 -3
- package/src/utils.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -31,6 +31,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
// src/index.ts
|
|
32
32
|
var index_exports = {};
|
|
33
33
|
__export(index_exports, {
|
|
34
|
+
APP_SIDEBAR_WIDTH: () => APP_SIDEBAR_WIDTH,
|
|
35
|
+
APP_SIDEBAR_WIDTH_COLLAPSED: () => APP_SIDEBAR_WIDTH_COLLAPSED,
|
|
34
36
|
Accordion: () => Accordion,
|
|
35
37
|
AccordionContent: () => AccordionContent,
|
|
36
38
|
AccordionItem: () => AccordionItem,
|
|
@@ -51,6 +53,9 @@ __export(index_exports, {
|
|
|
51
53
|
AlertDialogTrigger: () => AlertDialogTrigger,
|
|
52
54
|
AlertTitle: () => AlertTitle,
|
|
53
55
|
AnimatedBeam: () => AnimatedBeam,
|
|
56
|
+
AppSidebar: () => AppSidebar,
|
|
57
|
+
AppSidebarInset: () => AppSidebarInset,
|
|
58
|
+
AppSidebarProvider: () => AppSidebarProvider,
|
|
54
59
|
AspectImage: () => AspectImage,
|
|
55
60
|
AspectRatio: () => AspectRatio,
|
|
56
61
|
Avatar: () => Avatar,
|
|
@@ -220,6 +225,7 @@ __export(index_exports, {
|
|
|
220
225
|
NavigationMenuTrigger: () => NavigationMenuTrigger,
|
|
221
226
|
NavigationMenuViewport: () => NavigationMenuViewport,
|
|
222
227
|
NotificationCenter: () => NotificationCenter,
|
|
228
|
+
OpenCosmosIcon: () => OpenCosmosIcon,
|
|
223
229
|
OpenGraphCard: () => OpenGraphCard,
|
|
224
230
|
OrbBackground: () => OrbBackground,
|
|
225
231
|
Overlays: () => overlays_exports,
|
|
@@ -376,6 +382,7 @@ __export(index_exports, {
|
|
|
376
382
|
transitions: () => transitions,
|
|
377
383
|
treeNodeVariants: () => treeNodeVariants,
|
|
378
384
|
typographySystem: () => typographySystem,
|
|
385
|
+
useAppSidebar: () => useAppSidebar,
|
|
379
386
|
useCustomizer: () => useCustomizer,
|
|
380
387
|
useForm: () => useForm,
|
|
381
388
|
useFormField: () => useFormField,
|
|
@@ -8610,6 +8617,34 @@ var GitHubIcon = ({
|
|
|
8610
8617
|
);
|
|
8611
8618
|
};
|
|
8612
8619
|
|
|
8620
|
+
// src/components/data-display/OpenCosmosIcon.tsx
|
|
8621
|
+
var import_jsx_runtime68 = require("react/jsx-runtime");
|
|
8622
|
+
var OpenCosmosIcon = ({
|
|
8623
|
+
ref,
|
|
8624
|
+
size = 20,
|
|
8625
|
+
className = ""
|
|
8626
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
|
|
8627
|
+
"svg",
|
|
8628
|
+
{
|
|
8629
|
+
ref,
|
|
8630
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
8631
|
+
width: size,
|
|
8632
|
+
height: size,
|
|
8633
|
+
viewBox: "0 0 24 24",
|
|
8634
|
+
fill: "none",
|
|
8635
|
+
stroke: "currentColor",
|
|
8636
|
+
strokeLinecap: "round",
|
|
8637
|
+
strokeLinejoin: "round",
|
|
8638
|
+
className,
|
|
8639
|
+
"aria-hidden": "true",
|
|
8640
|
+
children: [
|
|
8641
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("circle", { cx: "12", cy: "12", r: "9.5", strokeWidth: "1.5" }),
|
|
8642
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("ellipse", { cx: "12", cy: "12", rx: "9.5", ry: "3.2", strokeWidth: "1.25", transform: "rotate(-35 12 12)" }),
|
|
8643
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("circle", { cx: "12", cy: "12", r: "1.75", fill: "currentColor", stroke: "none" })
|
|
8644
|
+
]
|
|
8645
|
+
}
|
|
8646
|
+
);
|
|
8647
|
+
|
|
8613
8648
|
// src/components/data-display/Heading.tsx
|
|
8614
8649
|
var import_react13 = __toESM(require("react"));
|
|
8615
8650
|
var Heading = ({
|
|
@@ -8717,7 +8752,7 @@ var Text = ({
|
|
|
8717
8752
|
|
|
8718
8753
|
// src/components/data-display/VariableWeightText.tsx
|
|
8719
8754
|
var import_framer_motion2 = require("framer-motion");
|
|
8720
|
-
var
|
|
8755
|
+
var import_jsx_runtime69 = require("react/jsx-runtime");
|
|
8721
8756
|
var VariableWeightText = ({
|
|
8722
8757
|
children,
|
|
8723
8758
|
minWeight = 200,
|
|
@@ -8733,7 +8768,7 @@ var VariableWeightText = ({
|
|
|
8733
8768
|
const effectiveIntensity = intensity ?? motionIntensity;
|
|
8734
8769
|
const scaledDuration = effectiveIntensity > 0 ? duration * (5 / effectiveIntensity) : duration;
|
|
8735
8770
|
if (effectiveIntensity === 0) {
|
|
8736
|
-
return /* @__PURE__ */ (0,
|
|
8771
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
8737
8772
|
"div",
|
|
8738
8773
|
{
|
|
8739
8774
|
className,
|
|
@@ -8752,7 +8787,7 @@ var VariableWeightText = ({
|
|
|
8752
8787
|
}
|
|
8753
8788
|
);
|
|
8754
8789
|
}
|
|
8755
|
-
return /* @__PURE__ */ (0,
|
|
8790
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
8756
8791
|
import_framer_motion2.motion.div,
|
|
8757
8792
|
{
|
|
8758
8793
|
initial: {
|
|
@@ -8789,7 +8824,7 @@ var VariableWeightText = ({
|
|
|
8789
8824
|
// src/components/data-display/Typewriter.tsx
|
|
8790
8825
|
var import_framer_motion3 = require("framer-motion");
|
|
8791
8826
|
var import_react15 = require("react");
|
|
8792
|
-
var
|
|
8827
|
+
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
8793
8828
|
function Typewriter({
|
|
8794
8829
|
text,
|
|
8795
8830
|
speed = 0.05,
|
|
@@ -8852,9 +8887,9 @@ function Typewriter({
|
|
|
8852
8887
|
clearTimeout(timeoutId);
|
|
8853
8888
|
};
|
|
8854
8889
|
}, [text, speed, delay, loop, loopDelay, shouldAnimate, scale]);
|
|
8855
|
-
return /* @__PURE__ */ (0,
|
|
8856
|
-
/* @__PURE__ */ (0,
|
|
8857
|
-
showCursor && /* @__PURE__ */ (0,
|
|
8890
|
+
return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Component, { className: cn("inline", className), children: [
|
|
8891
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { children: displayedText }),
|
|
8892
|
+
showCursor && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
|
|
8858
8893
|
import_framer_motion3.motion.span,
|
|
8859
8894
|
{
|
|
8860
8895
|
initial: { opacity: 0 },
|
|
@@ -8869,7 +8904,7 @@ function Typewriter({
|
|
|
8869
8904
|
|
|
8870
8905
|
// src/components/data-display/StatCard.tsx
|
|
8871
8906
|
var import_class_variance_authority12 = require("class-variance-authority");
|
|
8872
|
-
var
|
|
8907
|
+
var import_jsx_runtime71 = require("react/jsx-runtime");
|
|
8873
8908
|
var statCardVariants = (0, import_class_variance_authority12.cva)(
|
|
8874
8909
|
"rounded-2xl border bg-surface text-foreground shadow-xs p-6",
|
|
8875
8910
|
{
|
|
@@ -8918,7 +8953,7 @@ var statCardChangeVariants = (0, import_class_variance_authority12.cva)(
|
|
|
8918
8953
|
}
|
|
8919
8954
|
}
|
|
8920
8955
|
);
|
|
8921
|
-
var TrendUpIcon = () => /* @__PURE__ */ (0,
|
|
8956
|
+
var TrendUpIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
|
|
8922
8957
|
"svg",
|
|
8923
8958
|
{
|
|
8924
8959
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -8932,12 +8967,12 @@ var TrendUpIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
|
|
|
8932
8967
|
strokeLinejoin: "round",
|
|
8933
8968
|
"aria-hidden": "true",
|
|
8934
8969
|
children: [
|
|
8935
|
-
/* @__PURE__ */ (0,
|
|
8936
|
-
/* @__PURE__ */ (0,
|
|
8970
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }),
|
|
8971
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "16 7 22 7 22 13" })
|
|
8937
8972
|
]
|
|
8938
8973
|
}
|
|
8939
8974
|
);
|
|
8940
|
-
var TrendDownIcon = () => /* @__PURE__ */ (0,
|
|
8975
|
+
var TrendDownIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
|
|
8941
8976
|
"svg",
|
|
8942
8977
|
{
|
|
8943
8978
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -8951,12 +8986,12 @@ var TrendDownIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
|
|
|
8951
8986
|
strokeLinejoin: "round",
|
|
8952
8987
|
"aria-hidden": "true",
|
|
8953
8988
|
children: [
|
|
8954
|
-
/* @__PURE__ */ (0,
|
|
8955
|
-
/* @__PURE__ */ (0,
|
|
8989
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }),
|
|
8990
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)("polyline", { points: "16 17 22 17 22 11" })
|
|
8956
8991
|
]
|
|
8957
8992
|
}
|
|
8958
8993
|
);
|
|
8959
|
-
var MinusIcon = () => /* @__PURE__ */ (0,
|
|
8994
|
+
var MinusIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
8960
8995
|
"svg",
|
|
8961
8996
|
{
|
|
8962
8997
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -8969,7 +9004,7 @@ var MinusIcon = () => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
|
|
|
8969
9004
|
strokeLinecap: "round",
|
|
8970
9005
|
strokeLinejoin: "round",
|
|
8971
9006
|
"aria-hidden": "true",
|
|
8972
|
-
children: /* @__PURE__ */ (0,
|
|
9007
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("line", { x1: "5", y1: "12", x2: "19", y2: "12" })
|
|
8973
9008
|
}
|
|
8974
9009
|
);
|
|
8975
9010
|
function StatCard({
|
|
@@ -8985,31 +9020,31 @@ function StatCard({
|
|
|
8985
9020
|
...props
|
|
8986
9021
|
}) {
|
|
8987
9022
|
const resolvedTrend = trend ?? (change !== void 0 ? change > 0 ? "up" : change < 0 ? "down" : "flat" : void 0);
|
|
8988
|
-
return /* @__PURE__ */ (0,
|
|
9023
|
+
return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
8989
9024
|
"div",
|
|
8990
9025
|
{
|
|
8991
9026
|
"data-slot": "stat-card",
|
|
8992
9027
|
role: "article",
|
|
8993
9028
|
className: cn(statCardVariants({ variant, size }), className),
|
|
8994
9029
|
...props,
|
|
8995
|
-
children: /* @__PURE__ */ (0,
|
|
8996
|
-
/* @__PURE__ */ (0,
|
|
8997
|
-
/* @__PURE__ */ (0,
|
|
8998
|
-
icon && /* @__PURE__ */ (0,
|
|
9030
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("dl", { className: "space-y-1", children: [
|
|
9031
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
9032
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)("dt", { className: "text-sm font-medium text-foreground-secondary", children: label }),
|
|
9033
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "text-foreground-secondary", "aria-hidden": "true", children: icon })
|
|
8999
9034
|
] }),
|
|
9000
|
-
/* @__PURE__ */ (0,
|
|
9001
|
-
(change !== void 0 || description) && /* @__PURE__ */ (0,
|
|
9002
|
-
change !== void 0 && resolvedTrend && /* @__PURE__ */ (0,
|
|
9003
|
-
resolvedTrend === "up" && /* @__PURE__ */ (0,
|
|
9004
|
-
resolvedTrend === "down" && /* @__PURE__ */ (0,
|
|
9005
|
-
resolvedTrend === "flat" && /* @__PURE__ */ (0,
|
|
9006
|
-
/* @__PURE__ */ (0,
|
|
9035
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsx)("dd", { className: cn(statCardValueVariants({ size })), children: value }),
|
|
9036
|
+
(change !== void 0 || description) && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("dd", { className: "flex items-center gap-2 pt-1", children: [
|
|
9037
|
+
change !== void 0 && resolvedTrend && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: cn(statCardChangeVariants({ trend: resolvedTrend })), children: [
|
|
9038
|
+
resolvedTrend === "up" && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(TrendUpIcon, {}),
|
|
9039
|
+
resolvedTrend === "down" && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(TrendDownIcon, {}),
|
|
9040
|
+
resolvedTrend === "flat" && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(MinusIcon, {}),
|
|
9041
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
|
|
9007
9042
|
change > 0 ? "+" : "",
|
|
9008
9043
|
change,
|
|
9009
9044
|
"%"
|
|
9010
9045
|
] })
|
|
9011
9046
|
] }),
|
|
9012
|
-
description && /* @__PURE__ */ (0,
|
|
9047
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "text-sm text-foreground-secondary", children: description })
|
|
9013
9048
|
] })
|
|
9014
9049
|
] })
|
|
9015
9050
|
}
|
|
@@ -9019,7 +9054,7 @@ function StatCardGroup({
|
|
|
9019
9054
|
className,
|
|
9020
9055
|
...props
|
|
9021
9056
|
}) {
|
|
9022
|
-
return /* @__PURE__ */ (0,
|
|
9057
|
+
return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
9023
9058
|
"div",
|
|
9024
9059
|
{
|
|
9025
9060
|
"data-slot": "stat-card-group",
|
|
@@ -9031,7 +9066,7 @@ function StatCardGroup({
|
|
|
9031
9066
|
|
|
9032
9067
|
// src/components/data-display/Timeline.tsx
|
|
9033
9068
|
var import_class_variance_authority13 = require("class-variance-authority");
|
|
9034
|
-
var
|
|
9069
|
+
var import_jsx_runtime72 = require("react/jsx-runtime");
|
|
9035
9070
|
var timelineVariants = (0, import_class_variance_authority13.cva)("relative", {
|
|
9036
9071
|
variants: {
|
|
9037
9072
|
orientation: {
|
|
@@ -9065,7 +9100,7 @@ var timelineItemStatusVariants = (0, import_class_variance_authority13.cva)(
|
|
|
9065
9100
|
}
|
|
9066
9101
|
}
|
|
9067
9102
|
);
|
|
9068
|
-
var CheckIcon3 = () => /* @__PURE__ */ (0,
|
|
9103
|
+
var CheckIcon3 = () => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
9069
9104
|
"svg",
|
|
9070
9105
|
{
|
|
9071
9106
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -9078,10 +9113,10 @@ var CheckIcon3 = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
|
9078
9113
|
strokeLinecap: "round",
|
|
9079
9114
|
strokeLinejoin: "round",
|
|
9080
9115
|
"aria-hidden": "true",
|
|
9081
|
-
children: /* @__PURE__ */ (0,
|
|
9116
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("polyline", { points: "20 6 9 17 4 12" })
|
|
9082
9117
|
}
|
|
9083
9118
|
);
|
|
9084
|
-
var XIcon4 = () => /* @__PURE__ */ (0,
|
|
9119
|
+
var XIcon4 = () => /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
|
|
9085
9120
|
"svg",
|
|
9086
9121
|
{
|
|
9087
9122
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -9095,12 +9130,12 @@ var XIcon4 = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
|
|
|
9095
9130
|
strokeLinejoin: "round",
|
|
9096
9131
|
"aria-hidden": "true",
|
|
9097
9132
|
children: [
|
|
9098
|
-
/* @__PURE__ */ (0,
|
|
9099
|
-
/* @__PURE__ */ (0,
|
|
9133
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
9134
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
9100
9135
|
]
|
|
9101
9136
|
}
|
|
9102
9137
|
);
|
|
9103
|
-
var CircleIcon = () => /* @__PURE__ */ (0,
|
|
9138
|
+
var CircleIcon = () => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
9104
9139
|
"svg",
|
|
9105
9140
|
{
|
|
9106
9141
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -9109,7 +9144,7 @@ var CircleIcon = () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
|
9109
9144
|
viewBox: "0 0 24 24",
|
|
9110
9145
|
fill: "currentColor",
|
|
9111
9146
|
"aria-hidden": "true",
|
|
9112
|
-
children: /* @__PURE__ */ (0,
|
|
9147
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("circle", { cx: "12", cy: "12", r: "6" })
|
|
9113
9148
|
}
|
|
9114
9149
|
);
|
|
9115
9150
|
function Timeline({
|
|
@@ -9118,7 +9153,7 @@ function Timeline({
|
|
|
9118
9153
|
children,
|
|
9119
9154
|
...props
|
|
9120
9155
|
}) {
|
|
9121
|
-
return /* @__PURE__ */ (0,
|
|
9156
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
9122
9157
|
"ol",
|
|
9123
9158
|
{
|
|
9124
9159
|
"data-slot": "timeline",
|
|
@@ -9142,16 +9177,16 @@ function TimelineItem({
|
|
|
9142
9177
|
const defaultIcon = (() => {
|
|
9143
9178
|
switch (status) {
|
|
9144
9179
|
case "completed":
|
|
9145
|
-
return /* @__PURE__ */ (0,
|
|
9180
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CheckIcon3, {});
|
|
9146
9181
|
case "error":
|
|
9147
|
-
return /* @__PURE__ */ (0,
|
|
9182
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(XIcon4, {});
|
|
9148
9183
|
case "active":
|
|
9149
|
-
return /* @__PURE__ */ (0,
|
|
9184
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CircleIcon, {});
|
|
9150
9185
|
default:
|
|
9151
|
-
return /* @__PURE__ */ (0,
|
|
9186
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CircleIcon, {});
|
|
9152
9187
|
}
|
|
9153
9188
|
})();
|
|
9154
|
-
return /* @__PURE__ */ (0,
|
|
9189
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
|
|
9155
9190
|
"li",
|
|
9156
9191
|
{
|
|
9157
9192
|
"data-slot": "timeline-item",
|
|
@@ -9159,8 +9194,8 @@ function TimelineItem({
|
|
|
9159
9194
|
"aria-current": status === "active" ? "step" : void 0,
|
|
9160
9195
|
...props,
|
|
9161
9196
|
children: [
|
|
9162
|
-
/* @__PURE__ */ (0,
|
|
9163
|
-
/* @__PURE__ */ (0,
|
|
9197
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex flex-col items-center", children: [
|
|
9198
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
9164
9199
|
"div",
|
|
9165
9200
|
{
|
|
9166
9201
|
"data-slot": "timeline-icon",
|
|
@@ -9169,7 +9204,7 @@ function TimelineItem({
|
|
|
9169
9204
|
children: icon ?? defaultIcon
|
|
9170
9205
|
}
|
|
9171
9206
|
),
|
|
9172
|
-
!isLast && /* @__PURE__ */ (0,
|
|
9207
|
+
!isLast && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
|
|
9173
9208
|
"div",
|
|
9174
9209
|
{
|
|
9175
9210
|
"data-slot": "timeline-connector",
|
|
@@ -9180,12 +9215,12 @@ function TimelineItem({
|
|
|
9180
9215
|
}
|
|
9181
9216
|
)
|
|
9182
9217
|
] }),
|
|
9183
|
-
/* @__PURE__ */ (0,
|
|
9184
|
-
/* @__PURE__ */ (0,
|
|
9185
|
-
/* @__PURE__ */ (0,
|
|
9186
|
-
timestamp && /* @__PURE__ */ (0,
|
|
9218
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: cn("pb-6", isLast && "pb-0"), children: [
|
|
9219
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
9220
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "font-medium text-foreground leading-none", children: title }),
|
|
9221
|
+
timestamp && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("time", { className: "text-xs text-foreground-secondary", children: timestamp })
|
|
9187
9222
|
] }),
|
|
9188
|
-
description && /* @__PURE__ */ (0,
|
|
9223
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "mt-1 text-sm text-foreground-secondary", children: description })
|
|
9189
9224
|
] })
|
|
9190
9225
|
]
|
|
9191
9226
|
}
|
|
@@ -9195,7 +9230,7 @@ function TimelineItem({
|
|
|
9195
9230
|
// src/components/data-display/TreeView.tsx
|
|
9196
9231
|
var React18 = __toESM(require("react"));
|
|
9197
9232
|
var import_class_variance_authority14 = require("class-variance-authority");
|
|
9198
|
-
var
|
|
9233
|
+
var import_jsx_runtime73 = require("react/jsx-runtime");
|
|
9199
9234
|
var treeNodeVariants = (0, import_class_variance_authority14.cva)(
|
|
9200
9235
|
"flex items-center gap-2 py-1 px-2 rounded-md text-sm cursor-pointer select-none transition-colors",
|
|
9201
9236
|
{
|
|
@@ -9211,7 +9246,7 @@ var treeNodeVariants = (0, import_class_variance_authority14.cva)(
|
|
|
9211
9246
|
}
|
|
9212
9247
|
}
|
|
9213
9248
|
);
|
|
9214
|
-
var ChevronIcon = ({ expanded }) => /* @__PURE__ */ (0,
|
|
9249
|
+
var ChevronIcon = ({ expanded }) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
|
|
9215
9250
|
"svg",
|
|
9216
9251
|
{
|
|
9217
9252
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -9228,7 +9263,7 @@ var ChevronIcon = ({ expanded }) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx
|
|
|
9228
9263
|
"shrink-0 transition-transform",
|
|
9229
9264
|
expanded ? "rotate-90" : "rotate-0"
|
|
9230
9265
|
),
|
|
9231
|
-
children: /* @__PURE__ */ (0,
|
|
9266
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("polyline", { points: "9 18 15 12 9 6" })
|
|
9232
9267
|
}
|
|
9233
9268
|
);
|
|
9234
9269
|
var TreeViewContext = React18.createContext({
|
|
@@ -9280,14 +9315,14 @@ function TreeView({
|
|
|
9280
9315
|
},
|
|
9281
9316
|
[controlledSelected, onSelectChange]
|
|
9282
9317
|
);
|
|
9283
|
-
return /* @__PURE__ */ (0,
|
|
9318
|
+
return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(TreeViewContext.Provider, { value: { expanded, selected, toggleExpand, selectNode }, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
|
|
9284
9319
|
"div",
|
|
9285
9320
|
{
|
|
9286
9321
|
"data-slot": "tree-view",
|
|
9287
9322
|
role: "tree",
|
|
9288
9323
|
className: cn("space-y-0.5", className),
|
|
9289
9324
|
...props,
|
|
9290
|
-
children: nodes.map((node) => /* @__PURE__ */ (0,
|
|
9325
|
+
children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(TreeViewNodeComponent, { node, level: 1 }, node.id))
|
|
9291
9326
|
}
|
|
9292
9327
|
) });
|
|
9293
9328
|
}
|
|
@@ -9326,8 +9361,8 @@ function TreeViewNodeComponent({ node, level }) {
|
|
|
9326
9361
|
break;
|
|
9327
9362
|
}
|
|
9328
9363
|
};
|
|
9329
|
-
return /* @__PURE__ */ (0,
|
|
9330
|
-
/* @__PURE__ */ (0,
|
|
9364
|
+
return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { "data-slot": "tree-view-node", role: "treeitem", "aria-expanded": hasChildren ? isExpanded : void 0, "aria-level": level, "aria-selected": isSelected, children: [
|
|
9365
|
+
/* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
|
|
9331
9366
|
"div",
|
|
9332
9367
|
{
|
|
9333
9368
|
className: cn(treeNodeVariants({ state })),
|
|
@@ -9336,18 +9371,18 @@ function TreeViewNodeComponent({ node, level }) {
|
|
|
9336
9371
|
onKeyDown: handleKeyDown,
|
|
9337
9372
|
tabIndex: node.disabled ? -1 : 0,
|
|
9338
9373
|
children: [
|
|
9339
|
-
hasChildren ? /* @__PURE__ */ (0,
|
|
9340
|
-
node.icon && /* @__PURE__ */ (0,
|
|
9341
|
-
/* @__PURE__ */ (0,
|
|
9374
|
+
hasChildren ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ChevronIcon, { expanded: isExpanded }) : /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "w-3.5 shrink-0", "aria-hidden": "true" }),
|
|
9375
|
+
node.icon && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "shrink-0 text-foreground-secondary", "aria-hidden": "true", children: node.icon }),
|
|
9376
|
+
/* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "truncate", children: node.label })
|
|
9342
9377
|
]
|
|
9343
9378
|
}
|
|
9344
9379
|
),
|
|
9345
|
-
hasChildren && isExpanded && /* @__PURE__ */ (0,
|
|
9380
|
+
hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { role: "group", children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(TreeViewNodeComponent, { node: child, level: level + 1 }, child.id)) })
|
|
9346
9381
|
] });
|
|
9347
9382
|
}
|
|
9348
9383
|
|
|
9349
9384
|
// src/components/blocks/social/OpenGraphCard.tsx
|
|
9350
|
-
var
|
|
9385
|
+
var import_jsx_runtime74 = require("react/jsx-runtime");
|
|
9351
9386
|
function buildGradientCSS(config) {
|
|
9352
9387
|
const { type, angle = 135, position = "circle at 50% 50%", colors, stops } = config;
|
|
9353
9388
|
const colorStops = colors.map((color, index) => {
|
|
@@ -9415,7 +9450,7 @@ function OpenGraphCard({
|
|
|
9415
9450
|
const activeStyle = backgroundStyles[variant] || backgroundStyles.sage;
|
|
9416
9451
|
const firstColor = gradient?.colors[0] || primaryColor || "#0a0a0a";
|
|
9417
9452
|
const isLight = variant === "secondary" || isLightColor(firstColor);
|
|
9418
|
-
return /* @__PURE__ */ (0,
|
|
9453
|
+
return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
|
|
9419
9454
|
"div",
|
|
9420
9455
|
{
|
|
9421
9456
|
className: cn(className),
|
|
@@ -9436,7 +9471,7 @@ function OpenGraphCard({
|
|
|
9436
9471
|
},
|
|
9437
9472
|
...props,
|
|
9438
9473
|
children: [
|
|
9439
|
-
!isLight && /* @__PURE__ */ (0,
|
|
9474
|
+
!isLight && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
9440
9475
|
"div",
|
|
9441
9476
|
{
|
|
9442
9477
|
style: {
|
|
@@ -9452,7 +9487,7 @@ function OpenGraphCard({
|
|
|
9452
9487
|
}
|
|
9453
9488
|
}
|
|
9454
9489
|
),
|
|
9455
|
-
/* @__PURE__ */ (0,
|
|
9490
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
|
|
9456
9491
|
"div",
|
|
9457
9492
|
{
|
|
9458
9493
|
style: {
|
|
@@ -9466,7 +9501,7 @@ function OpenGraphCard({
|
|
|
9466
9501
|
textAlign: "center"
|
|
9467
9502
|
},
|
|
9468
9503
|
children: [
|
|
9469
|
-
icon !== null && (icon !== void 0 ? /* @__PURE__ */ (0,
|
|
9504
|
+
icon !== null && (icon !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
9470
9505
|
"div",
|
|
9471
9506
|
{
|
|
9472
9507
|
style: {
|
|
@@ -9477,7 +9512,7 @@ function OpenGraphCard({
|
|
|
9477
9512
|
},
|
|
9478
9513
|
children: icon
|
|
9479
9514
|
}
|
|
9480
|
-
) : /* @__PURE__ */ (0,
|
|
9515
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
9481
9516
|
"div",
|
|
9482
9517
|
{
|
|
9483
9518
|
style: {
|
|
@@ -9491,10 +9526,10 @@ function OpenGraphCard({
|
|
|
9491
9526
|
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
9492
9527
|
marginBottom: "16px"
|
|
9493
9528
|
},
|
|
9494
|
-
children: /* @__PURE__ */ (0,
|
|
9529
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { style: { width: "24px", height: "24px", borderRadius: "50%", background: isLight ? "white" : activeStyle.accentColor } })
|
|
9495
9530
|
}
|
|
9496
9531
|
)),
|
|
9497
|
-
/* @__PURE__ */ (0,
|
|
9532
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
9498
9533
|
"h1",
|
|
9499
9534
|
{
|
|
9500
9535
|
style: {
|
|
@@ -9508,7 +9543,7 @@ function OpenGraphCard({
|
|
|
9508
9543
|
children: title
|
|
9509
9544
|
}
|
|
9510
9545
|
),
|
|
9511
|
-
description && /* @__PURE__ */ (0,
|
|
9546
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
|
|
9512
9547
|
"p",
|
|
9513
9548
|
{
|
|
9514
9549
|
style: {
|
|
@@ -9534,13 +9569,13 @@ function OpenGraphCard({
|
|
|
9534
9569
|
// src/components/layout/Accordion.tsx
|
|
9535
9570
|
var AccordionPrimitive = __toESM(require("@radix-ui/react-accordion"));
|
|
9536
9571
|
var import_lucide_react16 = require("lucide-react");
|
|
9537
|
-
var
|
|
9572
|
+
var import_jsx_runtime75 = require("react/jsx-runtime");
|
|
9538
9573
|
var Accordion = AccordionPrimitive.Root;
|
|
9539
9574
|
var AccordionItem = ({
|
|
9540
9575
|
ref,
|
|
9541
9576
|
className,
|
|
9542
9577
|
...props
|
|
9543
|
-
}) => /* @__PURE__ */ (0,
|
|
9578
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
|
|
9544
9579
|
AccordionPrimitive.Item,
|
|
9545
9580
|
{
|
|
9546
9581
|
ref,
|
|
@@ -9553,7 +9588,7 @@ var AccordionTrigger = ({
|
|
|
9553
9588
|
className,
|
|
9554
9589
|
children,
|
|
9555
9590
|
...props
|
|
9556
|
-
}) => /* @__PURE__ */ (0,
|
|
9591
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
|
|
9557
9592
|
AccordionPrimitive.Trigger,
|
|
9558
9593
|
{
|
|
9559
9594
|
ref,
|
|
@@ -9564,7 +9599,7 @@ var AccordionTrigger = ({
|
|
|
9564
9599
|
...props,
|
|
9565
9600
|
children: [
|
|
9566
9601
|
children,
|
|
9567
|
-
/* @__PURE__ */ (0,
|
|
9602
|
+
/* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_lucide_react16.ChevronDown, { className: "pointer-events-none h-4 w-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200" })
|
|
9568
9603
|
]
|
|
9569
9604
|
}
|
|
9570
9605
|
) });
|
|
@@ -9573,13 +9608,13 @@ var AccordionContent = ({
|
|
|
9573
9608
|
className,
|
|
9574
9609
|
children,
|
|
9575
9610
|
...props
|
|
9576
|
-
}) => /* @__PURE__ */ (0,
|
|
9611
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
|
|
9577
9612
|
AccordionPrimitive.Content,
|
|
9578
9613
|
{
|
|
9579
9614
|
ref,
|
|
9580
9615
|
className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
|
|
9581
9616
|
...props,
|
|
9582
|
-
children: /* @__PURE__ */ (0,
|
|
9617
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: cn("pb-4 pt-0", className), children })
|
|
9583
9618
|
}
|
|
9584
9619
|
);
|
|
9585
9620
|
|
|
@@ -9591,7 +9626,7 @@ var AspectRatio = AspectRatioPrimitive.Root;
|
|
|
9591
9626
|
var React19 = __toESM(require("react"));
|
|
9592
9627
|
var import_embla_carousel_react = __toESM(require("embla-carousel-react"));
|
|
9593
9628
|
var import_lucide_react17 = require("lucide-react");
|
|
9594
|
-
var
|
|
9629
|
+
var import_jsx_runtime76 = require("react/jsx-runtime");
|
|
9595
9630
|
var CarouselContext = React19.createContext(null);
|
|
9596
9631
|
function useCarousel() {
|
|
9597
9632
|
const context = React19.useContext(CarouselContext);
|
|
@@ -9661,7 +9696,7 @@ var Carousel = ({
|
|
|
9661
9696
|
api?.off("select", onSelect);
|
|
9662
9697
|
};
|
|
9663
9698
|
}, [api, onSelect]);
|
|
9664
|
-
return /* @__PURE__ */ (0,
|
|
9699
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
|
|
9665
9700
|
CarouselContext.Provider,
|
|
9666
9701
|
{
|
|
9667
9702
|
value: {
|
|
@@ -9674,7 +9709,7 @@ var Carousel = ({
|
|
|
9674
9709
|
canScrollPrev,
|
|
9675
9710
|
canScrollNext
|
|
9676
9711
|
},
|
|
9677
|
-
children: /* @__PURE__ */ (0,
|
|
9712
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
|
|
9678
9713
|
"div",
|
|
9679
9714
|
{
|
|
9680
9715
|
ref,
|
|
@@ -9695,7 +9730,7 @@ var CarouselContent = ({
|
|
|
9695
9730
|
...props
|
|
9696
9731
|
}) => {
|
|
9697
9732
|
const { carouselRef, orientation } = useCarousel();
|
|
9698
|
-
return /* @__PURE__ */ (0,
|
|
9733
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
|
|
9699
9734
|
"div",
|
|
9700
9735
|
{
|
|
9701
9736
|
ref,
|
|
@@ -9714,7 +9749,7 @@ var CarouselItem = ({
|
|
|
9714
9749
|
...props
|
|
9715
9750
|
}) => {
|
|
9716
9751
|
const { orientation } = useCarousel();
|
|
9717
|
-
return /* @__PURE__ */ (0,
|
|
9752
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
|
|
9718
9753
|
"div",
|
|
9719
9754
|
{
|
|
9720
9755
|
ref,
|
|
@@ -9737,7 +9772,7 @@ var CarouselPrevious = ({
|
|
|
9737
9772
|
...props
|
|
9738
9773
|
}) => {
|
|
9739
9774
|
const { orientation, scrollPrev, canScrollPrev } = useCarousel();
|
|
9740
|
-
return /* @__PURE__ */ (0,
|
|
9775
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
|
|
9741
9776
|
Button,
|
|
9742
9777
|
{
|
|
9743
9778
|
ref,
|
|
@@ -9752,8 +9787,8 @@ var CarouselPrevious = ({
|
|
|
9752
9787
|
onClick: scrollPrev,
|
|
9753
9788
|
...props,
|
|
9754
9789
|
children: [
|
|
9755
|
-
/* @__PURE__ */ (0,
|
|
9756
|
-
/* @__PURE__ */ (0,
|
|
9790
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react17.ArrowLeft, { className: "h-4 w-4" }),
|
|
9791
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "sr-only", children: "Previous slide" })
|
|
9757
9792
|
]
|
|
9758
9793
|
}
|
|
9759
9794
|
);
|
|
@@ -9766,7 +9801,7 @@ var CarouselNext = ({
|
|
|
9766
9801
|
...props
|
|
9767
9802
|
}) => {
|
|
9768
9803
|
const { orientation, scrollNext, canScrollNext } = useCarousel();
|
|
9769
|
-
return /* @__PURE__ */ (0,
|
|
9804
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
|
|
9770
9805
|
Button,
|
|
9771
9806
|
{
|
|
9772
9807
|
ref,
|
|
@@ -9781,8 +9816,8 @@ var CarouselNext = ({
|
|
|
9781
9816
|
onClick: scrollNext,
|
|
9782
9817
|
...props,
|
|
9783
9818
|
children: [
|
|
9784
|
-
/* @__PURE__ */ (0,
|
|
9785
|
-
/* @__PURE__ */ (0,
|
|
9819
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react17.ArrowRight, { className: "h-4 w-4" }),
|
|
9820
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "sr-only", children: "Next slide" })
|
|
9786
9821
|
]
|
|
9787
9822
|
}
|
|
9788
9823
|
);
|
|
@@ -9790,7 +9825,7 @@ var CarouselNext = ({
|
|
|
9790
9825
|
|
|
9791
9826
|
// src/components/layout/Collapsible.tsx
|
|
9792
9827
|
var CollapsiblePrimitive = __toESM(require("@radix-ui/react-collapsible"));
|
|
9793
|
-
var
|
|
9828
|
+
var import_jsx_runtime77 = require("react/jsx-runtime");
|
|
9794
9829
|
var Collapsible = CollapsiblePrimitive.Root;
|
|
9795
9830
|
var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
|
|
9796
9831
|
var CollapsibleContent2 = ({
|
|
@@ -9798,7 +9833,7 @@ var CollapsibleContent2 = ({
|
|
|
9798
9833
|
className,
|
|
9799
9834
|
children,
|
|
9800
9835
|
...props
|
|
9801
|
-
}) => /* @__PURE__ */ (0,
|
|
9836
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
|
|
9802
9837
|
CollapsiblePrimitive.CollapsibleContent,
|
|
9803
9838
|
{
|
|
9804
9839
|
ref,
|
|
@@ -9843,12 +9878,12 @@ var Container = ({
|
|
|
9843
9878
|
// src/components/layout/CustomizerPanel.tsx
|
|
9844
9879
|
var import_react17 = __toESM(require("react"));
|
|
9845
9880
|
var import_lucide_react18 = require("lucide-react");
|
|
9846
|
-
var
|
|
9881
|
+
var import_jsx_runtime78 = require("react/jsx-runtime");
|
|
9847
9882
|
var allThemeOptions = [
|
|
9848
|
-
{ id: "studio", label: "Studio", icon: /* @__PURE__ */ (0,
|
|
9849
|
-
{ id: "terra", label: "Terra", icon: /* @__PURE__ */ (0,
|
|
9850
|
-
{ id: "volt", label: "Volt", icon: /* @__PURE__ */ (0,
|
|
9851
|
-
{ id: "speedboat", label: "Speedboat", icon: /* @__PURE__ */ (0,
|
|
9883
|
+
{ id: "studio", label: "Studio", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Building2, { className: "w-4 h-4" }) },
|
|
9884
|
+
{ id: "terra", label: "Terra", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Leaf, { className: "w-4 h-4" }) },
|
|
9885
|
+
{ id: "volt", label: "Volt", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Zap, { className: "w-4 h-4" }) },
|
|
9886
|
+
{ id: "speedboat", label: "Speedboat", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Rocket, { className: "w-4 h-4" }) }
|
|
9852
9887
|
];
|
|
9853
9888
|
var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) => {
|
|
9854
9889
|
const [mounted, setMounted] = import_react17.default.useState(false);
|
|
@@ -9927,7 +9962,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
9927
9962
|
}, [isOpen]);
|
|
9928
9963
|
if (!mounted) return null;
|
|
9929
9964
|
if (!isOpen) {
|
|
9930
|
-
return /* @__PURE__ */ (0,
|
|
9965
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
|
|
9931
9966
|
"button",
|
|
9932
9967
|
{
|
|
9933
9968
|
onClick: () => setIsOpen(true),
|
|
@@ -9935,13 +9970,13 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
9935
9970
|
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",
|
|
9936
9971
|
style: { backdropFilter: "var(--effect-blur-sm)" },
|
|
9937
9972
|
children: [
|
|
9938
|
-
mode === "lightweight" ? /* @__PURE__ */ (0,
|
|
9973
|
+
mode === "lightweight" ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.SunMoon, { className: "w-5 h-5" }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.SlidersHorizontal, { className: "w-5 h-5" }),
|
|
9939
9974
|
mode === "lightweight" ? "Theme" : "Customizer"
|
|
9940
9975
|
]
|
|
9941
9976
|
}
|
|
9942
9977
|
);
|
|
9943
9978
|
}
|
|
9944
|
-
return /* @__PURE__ */ (0,
|
|
9979
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
|
|
9945
9980
|
"div",
|
|
9946
9981
|
{
|
|
9947
9982
|
ref: panelRef,
|
|
@@ -9960,25 +9995,25 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
9960
9995
|
backgroundColor: "var(--color-glass)"
|
|
9961
9996
|
},
|
|
9962
9997
|
children: [
|
|
9963
|
-
/* @__PURE__ */ (0,
|
|
9964
|
-
/* @__PURE__ */ (0,
|
|
9965
|
-
/* @__PURE__ */ (0,
|
|
9998
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex justify-between items-center mb-6", children: [
|
|
9999
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("h3", { className: "font-bold text-lg", children: mode === "lightweight" ? "Theme Settings" : "Experience Customizer" }),
|
|
10000
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
9966
10001
|
"button",
|
|
9967
10002
|
{
|
|
9968
10003
|
onClick: () => setIsOpen(false),
|
|
9969
10004
|
"aria-label": "Close customizer",
|
|
9970
10005
|
className: "text-foreground opacity-60 hover:opacity-100 transition-opacity p-1",
|
|
9971
|
-
children: /* @__PURE__ */ (0,
|
|
10006
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.X, { className: "w-5 h-5", "aria-hidden": "true" })
|
|
9972
10007
|
}
|
|
9973
10008
|
)
|
|
9974
10009
|
] }),
|
|
9975
|
-
/* @__PURE__ */ (0,
|
|
9976
|
-
mode === "full" && showMotionIntensity && /* @__PURE__ */ (0,
|
|
9977
|
-
/* @__PURE__ */ (0,
|
|
9978
|
-
/* @__PURE__ */ (0,
|
|
9979
|
-
/* @__PURE__ */ (0,
|
|
10010
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "space-y-6", children: [
|
|
10011
|
+
mode === "full" && showMotionIntensity && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
|
|
10012
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex justify-between mb-2", children: [
|
|
10013
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-sm font-medium opacity-80", children: "Motion Intensity" }),
|
|
10014
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "text-sm opacity-60", children: motion6 })
|
|
9980
10015
|
] }),
|
|
9981
|
-
/* @__PURE__ */ (0,
|
|
10016
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
9982
10017
|
"input",
|
|
9983
10018
|
{
|
|
9984
10019
|
type: "range",
|
|
@@ -9994,9 +10029,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
9994
10029
|
}
|
|
9995
10030
|
)
|
|
9996
10031
|
] }),
|
|
9997
|
-
mode === "full" && showThemeSelector && /* @__PURE__ */ (0,
|
|
9998
|
-
/* @__PURE__ */ (0,
|
|
9999
|
-
/* @__PURE__ */ (0,
|
|
10032
|
+
mode === "full" && showThemeSelector && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
|
|
10033
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Theme" }),
|
|
10034
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: `grid gap-2 mb-3 ${visibleThemes.length <= 3 ? "grid-cols-3" : "grid-cols-4"}`, children: visibleThemes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
|
|
10000
10035
|
"button",
|
|
10001
10036
|
{
|
|
10002
10037
|
onClick: () => setTheme(t.id),
|
|
@@ -10011,31 +10046,31 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10011
10046
|
borderColor: "var(--color-primary)"
|
|
10012
10047
|
} : {},
|
|
10013
10048
|
children: [
|
|
10014
|
-
/* @__PURE__ */ (0,
|
|
10015
|
-
/* @__PURE__ */ (0,
|
|
10049
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "text-base", children: t.icon }),
|
|
10050
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: t.label })
|
|
10016
10051
|
]
|
|
10017
10052
|
},
|
|
10018
10053
|
t.id
|
|
10019
10054
|
)) }),
|
|
10020
|
-
/* @__PURE__ */ (0,
|
|
10021
|
-
/* @__PURE__ */ (0,
|
|
10022
|
-
/* @__PURE__ */ (0,
|
|
10055
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "text-xs opacity-60 space-y-1", children: [
|
|
10056
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
|
|
10057
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "font-heading", children: "Heading:" }),
|
|
10023
10058
|
" ",
|
|
10024
10059
|
theme === "studio" ? "Outfit" : theme === "terra" ? "Lora" : theme === "speedboat" ? "Montserrat" : "Space Grotesk"
|
|
10025
10060
|
] }),
|
|
10026
|
-
/* @__PURE__ */ (0,
|
|
10027
|
-
/* @__PURE__ */ (0,
|
|
10061
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
|
|
10062
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "font-body", children: "Body:" }),
|
|
10028
10063
|
" ",
|
|
10029
10064
|
theme === "studio" ? "Manrope" : theme === "terra" ? "Instrument Sans" : theme === "speedboat" ? "Roboto" : "Space Grotesk"
|
|
10030
10065
|
] })
|
|
10031
10066
|
] })
|
|
10032
10067
|
] }),
|
|
10033
|
-
/* @__PURE__ */ (0,
|
|
10034
|
-
/* @__PURE__ */ (0,
|
|
10035
|
-
/* @__PURE__ */ (0,
|
|
10036
|
-
{ id: "light", label: "Light", icon: /* @__PURE__ */ (0,
|
|
10037
|
-
{ id: "dark", label: "Dark", icon: /* @__PURE__ */ (0,
|
|
10038
|
-
].map((m) => /* @__PURE__ */ (0,
|
|
10068
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
|
|
10069
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "block text-sm font-medium opacity-80 mb-3", children: "Mode" }),
|
|
10070
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "grid grid-cols-2 gap-2", children: [
|
|
10071
|
+
{ id: "light", label: "Light", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Sun, { className: "w-4 h-4" }) },
|
|
10072
|
+
{ id: "dark", label: "Dark", icon: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Moon, { className: "w-4 h-4" }) }
|
|
10073
|
+
].map((m) => /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
|
|
10039
10074
|
"button",
|
|
10040
10075
|
{
|
|
10041
10076
|
onClick: () => setMode(m.id),
|
|
@@ -10050,21 +10085,21 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10050
10085
|
borderColor: "var(--color-primary)"
|
|
10051
10086
|
} : {},
|
|
10052
10087
|
children: [
|
|
10053
|
-
/* @__PURE__ */ (0,
|
|
10054
|
-
/* @__PURE__ */ (0,
|
|
10088
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: m.icon }),
|
|
10089
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: m.label })
|
|
10055
10090
|
]
|
|
10056
10091
|
},
|
|
10057
10092
|
m.id
|
|
10058
10093
|
)) })
|
|
10059
10094
|
] }),
|
|
10060
|
-
mode === "full" && /* @__PURE__ */ (0,
|
|
10061
|
-
/* @__PURE__ */ (0,
|
|
10062
|
-
/* @__PURE__ */ (0,
|
|
10063
|
-
/* @__PURE__ */ (0,
|
|
10064
|
-
/* @__PURE__ */ (0,
|
|
10095
|
+
mode === "full" && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "pt-4 border-t border-[var(--color-border)]", children: [
|
|
10096
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
|
|
10097
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
10098
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react18.Palette, { className: "w-4 h-4 opacity-80" }),
|
|
10099
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-sm font-medium opacity-80", children: "Color Customization" })
|
|
10065
10100
|
] }),
|
|
10066
|
-
/* @__PURE__ */ (0,
|
|
10067
|
-
/* @__PURE__ */ (0,
|
|
10101
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex gap-1 bg-[var(--color-surface)] rounded-md p-0.5", children: [
|
|
10102
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
10068
10103
|
"button",
|
|
10069
10104
|
{
|
|
10070
10105
|
onClick: () => setCustomizationMode("simple"),
|
|
@@ -10076,7 +10111,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10076
10111
|
children: "Simple"
|
|
10077
10112
|
}
|
|
10078
10113
|
),
|
|
10079
|
-
/* @__PURE__ */ (0,
|
|
10114
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
10080
10115
|
"button",
|
|
10081
10116
|
{
|
|
10082
10117
|
onClick: () => setCustomizationMode("advanced"),
|
|
@@ -10090,10 +10125,10 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10090
10125
|
)
|
|
10091
10126
|
] })
|
|
10092
10127
|
] }),
|
|
10093
|
-
/* @__PURE__ */ (0,
|
|
10094
|
-
/* @__PURE__ */ (0,
|
|
10095
|
-
/* @__PURE__ */ (0,
|
|
10096
|
-
/* @__PURE__ */ (0,
|
|
10128
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "space-y-4", children: [
|
|
10129
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
|
|
10130
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Primary Color" }),
|
|
10131
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
10097
10132
|
ColorPicker,
|
|
10098
10133
|
{
|
|
10099
10134
|
value: tempPrimaryColor,
|
|
@@ -10101,9 +10136,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10101
10136
|
}
|
|
10102
10137
|
)
|
|
10103
10138
|
] }),
|
|
10104
|
-
customizationMode === "advanced" && /* @__PURE__ */ (0,
|
|
10105
|
-
/* @__PURE__ */ (0,
|
|
10106
|
-
/* @__PURE__ */ (0,
|
|
10139
|
+
customizationMode === "advanced" && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
|
|
10140
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Secondary Color" }),
|
|
10141
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
10107
10142
|
ColorPicker,
|
|
10108
10143
|
{
|
|
10109
10144
|
value: tempSecondaryColor,
|
|
@@ -10111,9 +10146,9 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10111
10146
|
}
|
|
10112
10147
|
)
|
|
10113
10148
|
] }),
|
|
10114
|
-
customizationMode === "advanced" && /* @__PURE__ */ (0,
|
|
10115
|
-
/* @__PURE__ */ (0,
|
|
10116
|
-
/* @__PURE__ */ (0,
|
|
10149
|
+
customizationMode === "advanced" && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { children: [
|
|
10150
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("label", { className: "text-xs font-medium opacity-70 mb-2 block", children: "Accent Color" }),
|
|
10151
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
10117
10152
|
ColorPicker,
|
|
10118
10153
|
{
|
|
10119
10154
|
value: tempAccentColor,
|
|
@@ -10122,8 +10157,8 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10122
10157
|
)
|
|
10123
10158
|
] })
|
|
10124
10159
|
] }),
|
|
10125
|
-
/* @__PURE__ */ (0,
|
|
10126
|
-
/* @__PURE__ */ (0,
|
|
10160
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex gap-2 mt-4", children: [
|
|
10161
|
+
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
10127
10162
|
Button,
|
|
10128
10163
|
{
|
|
10129
10164
|
onClick: handleApplyColor,
|
|
@@ -10133,7 +10168,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10133
10168
|
children: "Apply Colors"
|
|
10134
10169
|
}
|
|
10135
10170
|
),
|
|
10136
|
-
currentPalette && /* @__PURE__ */ (0,
|
|
10171
|
+
currentPalette && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
|
|
10137
10172
|
Button,
|
|
10138
10173
|
{
|
|
10139
10174
|
onClick: handleResetColors,
|
|
@@ -10143,7 +10178,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10143
10178
|
}
|
|
10144
10179
|
)
|
|
10145
10180
|
] }),
|
|
10146
|
-
currentPalette && /* @__PURE__ */ (0,
|
|
10181
|
+
currentPalette && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("p", { className: "text-xs opacity-60 mt-2", children: [
|
|
10147
10182
|
"Custom colors active for ",
|
|
10148
10183
|
theme,
|
|
10149
10184
|
" ",
|
|
@@ -10160,7 +10195,7 @@ var CustomizerPanel = ({ mode = "full", showMotionIntensity = false, themes }) =
|
|
|
10160
10195
|
// src/components/layout/DatePicker.tsx
|
|
10161
10196
|
var import_date_fns = require("date-fns");
|
|
10162
10197
|
var import_lucide_react19 = require("lucide-react");
|
|
10163
|
-
var
|
|
10198
|
+
var import_jsx_runtime79 = require("react/jsx-runtime");
|
|
10164
10199
|
function DatePicker({
|
|
10165
10200
|
date,
|
|
10166
10201
|
onDateChange,
|
|
@@ -10168,8 +10203,8 @@ function DatePicker({
|
|
|
10168
10203
|
className,
|
|
10169
10204
|
disabled = false
|
|
10170
10205
|
}) {
|
|
10171
|
-
return /* @__PURE__ */ (0,
|
|
10172
|
-
/* @__PURE__ */ (0,
|
|
10206
|
+
return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(Popover, { children: [
|
|
10207
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
|
|
10173
10208
|
Button,
|
|
10174
10209
|
{
|
|
10175
10210
|
variant: "outline",
|
|
@@ -10180,12 +10215,12 @@ function DatePicker({
|
|
|
10180
10215
|
),
|
|
10181
10216
|
disabled,
|
|
10182
10217
|
children: [
|
|
10183
|
-
/* @__PURE__ */ (0,
|
|
10184
|
-
date ? (0, import_date_fns.format)(date, "PPP") : /* @__PURE__ */ (0,
|
|
10218
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_lucide_react19.Calendar, { className: "mr-2 h-4 w-4" }),
|
|
10219
|
+
date ? (0, import_date_fns.format)(date, "PPP") : /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { children: placeholder })
|
|
10185
10220
|
]
|
|
10186
10221
|
}
|
|
10187
10222
|
) }),
|
|
10188
|
-
/* @__PURE__ */ (0,
|
|
10223
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PopoverContent, { className: "w-auto p-0", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
|
|
10189
10224
|
Calendar,
|
|
10190
10225
|
{
|
|
10191
10226
|
mode: "single",
|
|
@@ -10198,7 +10233,7 @@ function DatePicker({
|
|
|
10198
10233
|
}
|
|
10199
10234
|
|
|
10200
10235
|
// src/components/layout/Footer/Footer.tsx
|
|
10201
|
-
var
|
|
10236
|
+
var import_jsx_runtime80 = require("react/jsx-runtime");
|
|
10202
10237
|
var Footer = ({
|
|
10203
10238
|
ref,
|
|
10204
10239
|
logo,
|
|
@@ -10208,7 +10243,7 @@ var Footer = ({
|
|
|
10208
10243
|
className = ""
|
|
10209
10244
|
}) => {
|
|
10210
10245
|
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
10211
|
-
return /* @__PURE__ */ (0,
|
|
10246
|
+
return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
|
|
10212
10247
|
"footer",
|
|
10213
10248
|
{
|
|
10214
10249
|
ref,
|
|
@@ -10218,11 +10253,11 @@ var Footer = ({
|
|
|
10218
10253
|
${className}
|
|
10219
10254
|
`,
|
|
10220
10255
|
children: [
|
|
10221
|
-
/* @__PURE__ */ (0,
|
|
10222
|
-
/* @__PURE__ */ (0,
|
|
10223
|
-
sections.map((section, index) => /* @__PURE__ */ (0,
|
|
10224
|
-
/* @__PURE__ */ (0,
|
|
10225
|
-
/* @__PURE__ */ (0,
|
|
10256
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)("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__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-12 lg:gap-8", children: [
|
|
10257
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "lg:col-span-4", children: logo && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "mb-6 text-2xl font-bold text-[var(--color-text-primary)]", children: logo }) }),
|
|
10258
|
+
sections.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "lg:col-span-2", children: [
|
|
10259
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: section.title }),
|
|
10260
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)("ul", { className: "space-y-3", children: section.links.map((link) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
|
|
10226
10261
|
"a",
|
|
10227
10262
|
{
|
|
10228
10263
|
href: link.href,
|
|
@@ -10233,10 +10268,10 @@ var Footer = ({
|
|
|
10233
10268
|
}
|
|
10234
10269
|
) }, link.label)) })
|
|
10235
10270
|
] }, section.title)),
|
|
10236
|
-
socialLinks && /* @__PURE__ */ (0,
|
|
10237
|
-
/* @__PURE__ */ (0,
|
|
10238
|
-
/* @__PURE__ */ (0,
|
|
10239
|
-
socialLinks.github && /* @__PURE__ */ (0,
|
|
10271
|
+
socialLinks && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "lg:col-span-2", children: [
|
|
10272
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)("h3", { className: "text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4", children: "Connect" }),
|
|
10273
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("ul", { className: "space-y-3", children: [
|
|
10274
|
+
socialLinks.github && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
|
|
10240
10275
|
"a",
|
|
10241
10276
|
{
|
|
10242
10277
|
href: socialLinks.github,
|
|
@@ -10244,12 +10279,12 @@ var Footer = ({
|
|
|
10244
10279
|
rel: "noopener noreferrer",
|
|
10245
10280
|
className: "text-[var(--color-text-secondary)] hover:text-[var(--color-primary)] transition-colors duration-200 text-sm flex items-center gap-2",
|
|
10246
10281
|
children: [
|
|
10247
|
-
/* @__PURE__ */ (0,
|
|
10282
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(GitHubIcon, { size: 16 }),
|
|
10248
10283
|
"GitHub"
|
|
10249
10284
|
]
|
|
10250
10285
|
}
|
|
10251
10286
|
) }),
|
|
10252
|
-
socialLinks.linkedin && /* @__PURE__ */ (0,
|
|
10287
|
+
socialLinks.linkedin && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
|
|
10253
10288
|
"a",
|
|
10254
10289
|
{
|
|
10255
10290
|
href: socialLinks.linkedin,
|
|
@@ -10259,7 +10294,7 @@ var Footer = ({
|
|
|
10259
10294
|
children: "LinkedIn"
|
|
10260
10295
|
}
|
|
10261
10296
|
) }),
|
|
10262
|
-
socialLinks.email && /* @__PURE__ */ (0,
|
|
10297
|
+
socialLinks.email && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
|
|
10263
10298
|
"a",
|
|
10264
10299
|
{
|
|
10265
10300
|
href: `mailto:${socialLinks.email}`,
|
|
@@ -10270,14 +10305,14 @@ var Footer = ({
|
|
|
10270
10305
|
] })
|
|
10271
10306
|
] })
|
|
10272
10307
|
] }) }),
|
|
10273
|
-
/* @__PURE__ */ (0,
|
|
10308
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "border-t border-[var(--color-border)]", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "text-sm text-[var(--color-text-secondary)] text-center", children: copyright || `\xA9 ${currentYear} All rights reserved.` }) }) })
|
|
10274
10309
|
]
|
|
10275
10310
|
}
|
|
10276
10311
|
);
|
|
10277
10312
|
};
|
|
10278
10313
|
|
|
10279
10314
|
// src/components/layout/Grid.tsx
|
|
10280
|
-
var
|
|
10315
|
+
var import_jsx_runtime81 = require("react/jsx-runtime");
|
|
10281
10316
|
var mapResponsive = (prop, prefix, mapFunc) => {
|
|
10282
10317
|
if (typeof prop === "number") {
|
|
10283
10318
|
return mapFunc(prop);
|
|
@@ -10319,7 +10354,7 @@ var Grid = ({
|
|
|
10319
10354
|
const getGapClass = (n) => `gap-${n}`;
|
|
10320
10355
|
const colClasses = mapResponsive(columns, "grid-cols", getColClass);
|
|
10321
10356
|
const gapClasses = mapResponsive(gap, "gap", getGapClass);
|
|
10322
|
-
return /* @__PURE__ */ (0,
|
|
10357
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
10323
10358
|
Component,
|
|
10324
10359
|
{
|
|
10325
10360
|
ref,
|
|
@@ -10374,13 +10409,13 @@ var GridItem = ({
|
|
|
10374
10409
|
colStart ? mapResponsive(colStart, "col-start", getColStartClass) : "",
|
|
10375
10410
|
className
|
|
10376
10411
|
].filter(Boolean).join(" ");
|
|
10377
|
-
return /* @__PURE__ */ (0,
|
|
10412
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Component, { ref, className: classes, ...props, children });
|
|
10378
10413
|
};
|
|
10379
10414
|
|
|
10380
10415
|
// src/components/layout/Header/Header.tsx
|
|
10381
10416
|
var import_react18 = require("react");
|
|
10382
10417
|
var import_lucide_react20 = require("lucide-react");
|
|
10383
|
-
var
|
|
10418
|
+
var import_jsx_runtime82 = require("react/jsx-runtime");
|
|
10384
10419
|
var Header2 = ({
|
|
10385
10420
|
ref,
|
|
10386
10421
|
logo,
|
|
@@ -10435,16 +10470,16 @@ var Header2 = ({
|
|
|
10435
10470
|
return "absolute left-1/2 -translate-x-1/2";
|
|
10436
10471
|
}
|
|
10437
10472
|
};
|
|
10438
|
-
return /* @__PURE__ */ (0,
|
|
10439
|
-
/* @__PURE__ */ (0,
|
|
10473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
|
|
10474
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10440
10475
|
"header",
|
|
10441
10476
|
{
|
|
10442
10477
|
ref,
|
|
10443
10478
|
className: `${baseStyles} ${positionStyles} ${transitionStyles} ${backgroundStyles} ${className}`,
|
|
10444
10479
|
style: { transitionDuration },
|
|
10445
|
-
children: /* @__PURE__ */ (0,
|
|
10446
|
-
logo && /* @__PURE__ */ (0,
|
|
10447
|
-
navLinks.length > 0 && /* @__PURE__ */ (0,
|
|
10480
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `${maxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "flex items-center justify-between h-16 lg:h-20 relative", children: [
|
|
10481
|
+
logo && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "flex-shrink-0 z-10", children: logo }),
|
|
10482
|
+
navLinks.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10448
10483
|
"nav",
|
|
10449
10484
|
{
|
|
10450
10485
|
className: `hidden lg:flex items-center gap-8 ${getNavClasses()}`,
|
|
@@ -10453,14 +10488,14 @@ var Header2 = ({
|
|
|
10453
10488
|
const hasDropdown = link.children && link.children.length > 0;
|
|
10454
10489
|
const isOpen = openDropdown === link.label;
|
|
10455
10490
|
if (hasDropdown) {
|
|
10456
|
-
return /* @__PURE__ */ (0,
|
|
10491
|
+
return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
|
|
10457
10492
|
"div",
|
|
10458
10493
|
{
|
|
10459
10494
|
className: "relative group",
|
|
10460
10495
|
onMouseEnter: () => setOpenDropdown(link.label),
|
|
10461
10496
|
onMouseLeave: () => setOpenDropdown(null),
|
|
10462
10497
|
children: [
|
|
10463
|
-
/* @__PURE__ */ (0,
|
|
10498
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
|
|
10464
10499
|
"button",
|
|
10465
10500
|
{
|
|
10466
10501
|
className: `
|
|
@@ -10481,18 +10516,18 @@ var Header2 = ({
|
|
|
10481
10516
|
"aria-haspopup": "true",
|
|
10482
10517
|
children: [
|
|
10483
10518
|
link.label,
|
|
10484
|
-
/* @__PURE__ */ (0,
|
|
10519
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react20.ChevronDown, { className: `w-3 h-3 ${shouldAnimate ? "transition-transform" : ""} ${isOpen ? "rotate-180" : ""}`, style: { transitionDuration } })
|
|
10485
10520
|
]
|
|
10486
10521
|
}
|
|
10487
10522
|
),
|
|
10488
|
-
isOpen && /* @__PURE__ */ (0,
|
|
10489
|
-
isOpen && /* @__PURE__ */ (0,
|
|
10523
|
+
isOpen && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "absolute top-full left-1/2 -translate-x-1/2 w-[200px] h-2" }),
|
|
10524
|
+
isOpen && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: `
|
|
10490
10525
|
absolute top-full left-1/2 -translate-x-1/2 mt-2 min-w-[200px] z-50
|
|
10491
10526
|
bg-[var(--color-surface)] border border-[var(--color-border)]
|
|
10492
10527
|
rounded-lg shadow-xl py-1 p-1
|
|
10493
10528
|
backdrop-blur-3xl bg-[var(--color-surface)]/95
|
|
10494
10529
|
${shouldAnimate ? "animate-fade-in" : ""}
|
|
10495
|
-
`, style: { animationDuration: `${0.2 * motionFactor}s` }, children: link.children?.map((child) => /* @__PURE__ */ (0,
|
|
10530
|
+
`, style: { animationDuration: `${0.2 * motionFactor}s` }, children: link.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10496
10531
|
NavLink,
|
|
10497
10532
|
{
|
|
10498
10533
|
href: child.href,
|
|
@@ -10508,7 +10543,7 @@ var Header2 = ({
|
|
|
10508
10543
|
link.label
|
|
10509
10544
|
);
|
|
10510
10545
|
}
|
|
10511
|
-
return /* @__PURE__ */ (0,
|
|
10546
|
+
return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10512
10547
|
NavLink,
|
|
10513
10548
|
{
|
|
10514
10549
|
href: link.href,
|
|
@@ -10523,8 +10558,8 @@ var Header2 = ({
|
|
|
10523
10558
|
})
|
|
10524
10559
|
}
|
|
10525
10560
|
),
|
|
10526
|
-
actions && /* @__PURE__ */ (0,
|
|
10527
|
-
/* @__PURE__ */ (0,
|
|
10561
|
+
actions && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "hidden lg:flex items-center gap-4 z-10", children: actions }),
|
|
10562
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10528
10563
|
"button",
|
|
10529
10564
|
{
|
|
10530
10565
|
onClick: () => setIsMenuOpen(!isMenuOpen),
|
|
@@ -10543,13 +10578,13 @@ var Header2 = ({
|
|
|
10543
10578
|
style: { transitionDuration },
|
|
10544
10579
|
"aria-label": isMenuOpen ? "Close menu" : "Open menu",
|
|
10545
10580
|
"aria-expanded": isMenuOpen,
|
|
10546
|
-
children: isMenuOpen ? /* @__PURE__ */ (0,
|
|
10581
|
+
children: isMenuOpen ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react20.X, { className: "w-6 h-6" }) : /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(import_lucide_react20.Menu, { className: "w-6 h-6" })
|
|
10547
10582
|
}
|
|
10548
10583
|
)
|
|
10549
10584
|
] }) })
|
|
10550
10585
|
}
|
|
10551
10586
|
),
|
|
10552
|
-
/* @__PURE__ */ (0,
|
|
10587
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10553
10588
|
"div",
|
|
10554
10589
|
{
|
|
10555
10590
|
className: `
|
|
@@ -10559,13 +10594,13 @@ var Header2 = ({
|
|
|
10559
10594
|
`,
|
|
10560
10595
|
style: { transitionDuration },
|
|
10561
10596
|
"aria-hidden": !isMenuOpen,
|
|
10562
|
-
children: /* @__PURE__ */ (0,
|
|
10597
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "absolute inset-0 bg-[var(--color-background)]", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "flex flex-col items-center justify-center h-full gap-8 px-4", children: [
|
|
10563
10598
|
navLinks.map((link, index) => {
|
|
10564
10599
|
const hasDropdown = link.children && link.children.length > 0;
|
|
10565
10600
|
const isExpanded = expandedMobileSection === link.label;
|
|
10566
10601
|
if (hasDropdown) {
|
|
10567
|
-
return /* @__PURE__ */ (0,
|
|
10568
|
-
/* @__PURE__ */ (0,
|
|
10602
|
+
return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "w-full max-w-xs", children: [
|
|
10603
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10569
10604
|
"button",
|
|
10570
10605
|
{
|
|
10571
10606
|
onClick: () => setExpandedMobileSection(isExpanded ? null : link.label),
|
|
@@ -10589,7 +10624,7 @@ var Header2 = ({
|
|
|
10589
10624
|
children: link.label
|
|
10590
10625
|
}
|
|
10591
10626
|
),
|
|
10592
|
-
isExpanded && /* @__PURE__ */ (0,
|
|
10627
|
+
isExpanded && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "flex flex-col gap-3 mt-4", children: link.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10593
10628
|
"a",
|
|
10594
10629
|
{
|
|
10595
10630
|
href: child.href,
|
|
@@ -10612,7 +10647,7 @@ var Header2 = ({
|
|
|
10612
10647
|
)) })
|
|
10613
10648
|
] }, link.label);
|
|
10614
10649
|
}
|
|
10615
|
-
return /* @__PURE__ */ (0,
|
|
10650
|
+
return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10616
10651
|
"a",
|
|
10617
10652
|
{
|
|
10618
10653
|
href: link.href,
|
|
@@ -10639,7 +10674,7 @@ var Header2 = ({
|
|
|
10639
10674
|
link.label
|
|
10640
10675
|
);
|
|
10641
10676
|
}),
|
|
10642
|
-
actions && /* @__PURE__ */ (0,
|
|
10677
|
+
actions && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
|
|
10643
10678
|
"div",
|
|
10644
10679
|
{
|
|
10645
10680
|
className: "flex flex-col gap-4 mt-8 w-full max-w-xs",
|
|
@@ -10653,7 +10688,7 @@ var Header2 = ({
|
|
|
10653
10688
|
] }) })
|
|
10654
10689
|
}
|
|
10655
10690
|
),
|
|
10656
|
-
shouldAnimate && /* @__PURE__ */ (0,
|
|
10691
|
+
shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("style", { children: `
|
|
10657
10692
|
@keyframes fadeInUp {
|
|
10658
10693
|
from {
|
|
10659
10694
|
opacity: 0;
|
|
@@ -10669,7 +10704,7 @@ var Header2 = ({
|
|
|
10669
10704
|
};
|
|
10670
10705
|
|
|
10671
10706
|
// src/components/layout/PageLayout.tsx
|
|
10672
|
-
var
|
|
10707
|
+
var import_jsx_runtime83 = require("react/jsx-runtime");
|
|
10673
10708
|
function PageLayout({
|
|
10674
10709
|
header,
|
|
10675
10710
|
stickyHeader = false,
|
|
@@ -10692,9 +10727,9 @@ function PageLayout({
|
|
|
10692
10727
|
const titleAreaBottomSpacing = swissGridSpacing && showBreadcrumbsBelowTitle ? "pb-3" : swissGridSpacing ? "pb-12 lg:pb-16" : "pb-8";
|
|
10693
10728
|
const titleBottomMargin = swissGridSpacing ? "mb-4" : "mb-3";
|
|
10694
10729
|
const breadcrumbsAreaSpacing = swissGridSpacing ? "pt-4 pb-8" : "pt-3 pb-6";
|
|
10695
|
-
return /* @__PURE__ */ (0,
|
|
10730
|
+
return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "min-h-screen flex flex-col w-full min-w-0", children: [
|
|
10696
10731
|
header,
|
|
10697
|
-
breadcrumbs && showBreadcrumbsAtTop && /* @__PURE__ */ (0,
|
|
10732
|
+
breadcrumbs && showBreadcrumbsAtTop && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
|
|
10698
10733
|
"div",
|
|
10699
10734
|
{
|
|
10700
10735
|
className: `
|
|
@@ -10705,23 +10740,23 @@ function PageLayout({
|
|
|
10705
10740
|
${stickyHeaderSpacing}
|
|
10706
10741
|
`,
|
|
10707
10742
|
style: { zIndex: 45 },
|
|
10708
|
-
children: /* @__PURE__ */ (0,
|
|
10743
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-3`, children: breadcrumbs })
|
|
10709
10744
|
}
|
|
10710
10745
|
),
|
|
10711
|
-
(title || subtitle) && /* @__PURE__ */ (0,
|
|
10712
|
-
title && /* @__PURE__ */ (0,
|
|
10713
|
-
subtitle && /* @__PURE__ */ (0,
|
|
10746
|
+
(title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${titleAreaTopSpacing} ${titleAreaBottomSpacing} ${!showBreadcrumbsAtTop ? stickyHeaderSpacing : ""} bg-[var(--color-background)]`, children: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: [
|
|
10747
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: titleBottomMargin, children: title }),
|
|
10748
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { children: subtitle })
|
|
10714
10749
|
] }) }),
|
|
10715
|
-
breadcrumbs && showBreadcrumbsBelowTitle && /* @__PURE__ */ (0,
|
|
10750
|
+
breadcrumbs && showBreadcrumbsBelowTitle && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${breadcrumbsAreaSpacing} bg-[var(--color-background)]`, children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`, children: breadcrumbs }) }),
|
|
10716
10751
|
secondaryNav,
|
|
10717
10752
|
tertiaryNav,
|
|
10718
|
-
/* @__PURE__ */ (0,
|
|
10753
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)("main", { className: `flex-1 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: `${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-12`, children }) }),
|
|
10719
10754
|
footer
|
|
10720
10755
|
] });
|
|
10721
10756
|
}
|
|
10722
10757
|
|
|
10723
10758
|
// src/components/layout/PageTemplate.tsx
|
|
10724
|
-
var
|
|
10759
|
+
var import_jsx_runtime84 = require("react/jsx-runtime");
|
|
10725
10760
|
function PageTemplate({
|
|
10726
10761
|
header,
|
|
10727
10762
|
title,
|
|
@@ -10741,11 +10776,11 @@ function PageTemplate({
|
|
|
10741
10776
|
narrow: "max-w-4xl"
|
|
10742
10777
|
// 896px - for reading-focused pages
|
|
10743
10778
|
}[variant];
|
|
10744
|
-
return /* @__PURE__ */ (0,
|
|
10745
|
-
/* @__PURE__ */ (0,
|
|
10779
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(import_jsx_runtime84.Fragment, { children: [
|
|
10780
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
|
|
10746
10781
|
PageLayout,
|
|
10747
10782
|
{
|
|
10748
|
-
header: /* @__PURE__ */ (0,
|
|
10783
|
+
header: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
|
|
10749
10784
|
Header2,
|
|
10750
10785
|
{
|
|
10751
10786
|
logo: header.logo,
|
|
@@ -10757,10 +10792,10 @@ function PageTemplate({
|
|
|
10757
10792
|
),
|
|
10758
10793
|
stickyHeader: header.sticky ?? true,
|
|
10759
10794
|
breadcrumbsPosition: "below-title",
|
|
10760
|
-
breadcrumbs: /* @__PURE__ */ (0,
|
|
10761
|
-
title: /* @__PURE__ */ (0,
|
|
10762
|
-
subtitle: subtitle ? /* @__PURE__ */ (0,
|
|
10763
|
-
secondaryNav: secondaryNav ? /* @__PURE__ */ (0,
|
|
10795
|
+
breadcrumbs: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Breadcrumbs, { items: breadcrumbs, variant: "subtle" }),
|
|
10796
|
+
title: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Heading, { level: 1, children: title }),
|
|
10797
|
+
subtitle: subtitle ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Text, { size: "lg", variant: "secondary", children: subtitle }) : void 0,
|
|
10798
|
+
secondaryNav: secondaryNav ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
|
|
10764
10799
|
SecondaryNav,
|
|
10765
10800
|
{
|
|
10766
10801
|
items: secondaryNav.items,
|
|
@@ -10775,19 +10810,19 @@ function PageTemplate({
|
|
|
10775
10810
|
children
|
|
10776
10811
|
}
|
|
10777
10812
|
),
|
|
10778
|
-
showCustomizer && /* @__PURE__ */ (0,
|
|
10813
|
+
showCustomizer && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(CustomizerPanel, {})
|
|
10779
10814
|
] });
|
|
10780
10815
|
}
|
|
10781
10816
|
|
|
10782
10817
|
// src/components/layout/Resizable.tsx
|
|
10783
10818
|
var import_lucide_react21 = require("lucide-react");
|
|
10784
10819
|
var import_react_resizable_panels = require("react-resizable-panels");
|
|
10785
|
-
var
|
|
10820
|
+
var import_jsx_runtime85 = require("react/jsx-runtime");
|
|
10786
10821
|
var ResizablePanelGroup = ({
|
|
10787
10822
|
className,
|
|
10788
10823
|
...props
|
|
10789
10824
|
}) => {
|
|
10790
|
-
return /* @__PURE__ */ (0,
|
|
10825
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
10791
10826
|
import_react_resizable_panels.Group,
|
|
10792
10827
|
{
|
|
10793
10828
|
className: cn(
|
|
@@ -10804,7 +10839,7 @@ var ResizableHandle = ({
|
|
|
10804
10839
|
className,
|
|
10805
10840
|
...props
|
|
10806
10841
|
}) => {
|
|
10807
|
-
return /* @__PURE__ */ (0,
|
|
10842
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
10808
10843
|
import_react_resizable_panels.Separator,
|
|
10809
10844
|
{
|
|
10810
10845
|
className: cn(
|
|
@@ -10812,29 +10847,29 @@ var ResizableHandle = ({
|
|
|
10812
10847
|
className
|
|
10813
10848
|
),
|
|
10814
10849
|
...props,
|
|
10815
|
-
children: withHandle && /* @__PURE__ */ (0,
|
|
10850
|
+
children: withHandle && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(import_lucide_react21.GripVertical, { className: "h-2.5 w-2.5" }) })
|
|
10816
10851
|
}
|
|
10817
10852
|
);
|
|
10818
10853
|
};
|
|
10819
10854
|
|
|
10820
10855
|
// src/components/layout/ScrollArea.tsx
|
|
10821
10856
|
var ScrollAreaPrimitive = __toESM(require("@radix-ui/react-scroll-area"));
|
|
10822
|
-
var
|
|
10857
|
+
var import_jsx_runtime86 = require("react/jsx-runtime");
|
|
10823
10858
|
var ScrollArea = ({
|
|
10824
10859
|
ref,
|
|
10825
10860
|
className,
|
|
10826
10861
|
children,
|
|
10827
10862
|
...props
|
|
10828
|
-
}) => /* @__PURE__ */ (0,
|
|
10863
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
|
|
10829
10864
|
ScrollAreaPrimitive.Root,
|
|
10830
10865
|
{
|
|
10831
10866
|
ref,
|
|
10832
10867
|
className: cn("relative overflow-hidden", className),
|
|
10833
10868
|
...props,
|
|
10834
10869
|
children: [
|
|
10835
|
-
/* @__PURE__ */ (0,
|
|
10836
|
-
/* @__PURE__ */ (0,
|
|
10837
|
-
/* @__PURE__ */ (0,
|
|
10870
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
|
|
10871
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ScrollBar, {}),
|
|
10872
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ScrollAreaPrimitive.Corner, {})
|
|
10838
10873
|
]
|
|
10839
10874
|
}
|
|
10840
10875
|
);
|
|
@@ -10843,7 +10878,7 @@ var ScrollBar = ({
|
|
|
10843
10878
|
className,
|
|
10844
10879
|
orientation = "vertical",
|
|
10845
10880
|
...props
|
|
10846
|
-
}) => /* @__PURE__ */ (0,
|
|
10881
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
10847
10882
|
ScrollAreaPrimitive.Scrollbar,
|
|
10848
10883
|
{
|
|
10849
10884
|
ref,
|
|
@@ -10855,20 +10890,20 @@ var ScrollBar = ({
|
|
|
10855
10890
|
className
|
|
10856
10891
|
),
|
|
10857
10892
|
...props,
|
|
10858
|
-
children: /* @__PURE__ */ (0,
|
|
10893
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ScrollAreaPrimitive.Thumb, { className: "relative flex-1 rounded-full bg-border" })
|
|
10859
10894
|
}
|
|
10860
10895
|
);
|
|
10861
10896
|
|
|
10862
10897
|
// src/components/layout/Separator.tsx
|
|
10863
10898
|
var SeparatorPrimitive = __toESM(require("@radix-ui/react-separator"));
|
|
10864
|
-
var
|
|
10899
|
+
var import_jsx_runtime87 = require("react/jsx-runtime");
|
|
10865
10900
|
var Separator4 = ({
|
|
10866
10901
|
ref,
|
|
10867
10902
|
className,
|
|
10868
10903
|
orientation = "horizontal",
|
|
10869
10904
|
decorative = true,
|
|
10870
10905
|
...props
|
|
10871
|
-
}) => /* @__PURE__ */ (0,
|
|
10906
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
10872
10907
|
SeparatorPrimitive.Root,
|
|
10873
10908
|
{
|
|
10874
10909
|
ref,
|
|
@@ -10885,14 +10920,14 @@ var Separator4 = ({
|
|
|
10885
10920
|
|
|
10886
10921
|
// src/components/layout/Sidebar.tsx
|
|
10887
10922
|
var import_react_slot3 = require("@radix-ui/react-slot");
|
|
10888
|
-
var
|
|
10923
|
+
var import_jsx_runtime88 = require("react/jsx-runtime");
|
|
10889
10924
|
var Sidebar = ({
|
|
10890
10925
|
ref,
|
|
10891
10926
|
className,
|
|
10892
10927
|
children,
|
|
10893
10928
|
isOpen = true,
|
|
10894
10929
|
...props
|
|
10895
|
-
}) => /* @__PURE__ */ (0,
|
|
10930
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
10896
10931
|
"aside",
|
|
10897
10932
|
{
|
|
10898
10933
|
ref,
|
|
@@ -10902,7 +10937,7 @@ var Sidebar = ({
|
|
|
10902
10937
|
className
|
|
10903
10938
|
),
|
|
10904
10939
|
...props,
|
|
10905
|
-
children: /* @__PURE__ */ (0,
|
|
10940
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "flex flex-col h-full", children })
|
|
10906
10941
|
}
|
|
10907
10942
|
);
|
|
10908
10943
|
var SidebarOverlay = ({
|
|
@@ -10913,7 +10948,7 @@ var SidebarOverlay = ({
|
|
|
10913
10948
|
...props
|
|
10914
10949
|
}) => {
|
|
10915
10950
|
if (!isOpen) return null;
|
|
10916
|
-
return /* @__PURE__ */ (0,
|
|
10951
|
+
return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
10917
10952
|
"div",
|
|
10918
10953
|
{
|
|
10919
10954
|
ref,
|
|
@@ -10930,7 +10965,7 @@ var SidebarHeader = ({
|
|
|
10930
10965
|
ref,
|
|
10931
10966
|
className,
|
|
10932
10967
|
...props
|
|
10933
|
-
}) => /* @__PURE__ */ (0,
|
|
10968
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
10934
10969
|
"div",
|
|
10935
10970
|
{
|
|
10936
10971
|
ref,
|
|
@@ -10942,7 +10977,7 @@ var SidebarContent = ({
|
|
|
10942
10977
|
ref,
|
|
10943
10978
|
className,
|
|
10944
10979
|
...props
|
|
10945
|
-
}) => /* @__PURE__ */ (0,
|
|
10980
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
10946
10981
|
"div",
|
|
10947
10982
|
{
|
|
10948
10983
|
ref,
|
|
@@ -10954,7 +10989,7 @@ var SidebarFooter = ({
|
|
|
10954
10989
|
ref,
|
|
10955
10990
|
className,
|
|
10956
10991
|
...props
|
|
10957
|
-
}) => /* @__PURE__ */ (0,
|
|
10992
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
10958
10993
|
"div",
|
|
10959
10994
|
{
|
|
10960
10995
|
ref,
|
|
@@ -10976,7 +11011,7 @@ var SidebarItem = ({
|
|
|
10976
11011
|
...props
|
|
10977
11012
|
}) => {
|
|
10978
11013
|
const Comp = asChild ? import_react_slot3.Slot : "button";
|
|
10979
|
-
return /* @__PURE__ */ (0,
|
|
11014
|
+
return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
|
|
10980
11015
|
Comp,
|
|
10981
11016
|
{
|
|
10982
11017
|
ref,
|
|
@@ -10989,7 +11024,7 @@ var SidebarItem = ({
|
|
|
10989
11024
|
style: { paddingLeft: `${12 + depth * 16}px` },
|
|
10990
11025
|
...props,
|
|
10991
11026
|
children: [
|
|
10992
|
-
hasChildren && /* @__PURE__ */ (0,
|
|
11027
|
+
hasChildren && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
10993
11028
|
"svg",
|
|
10994
11029
|
{
|
|
10995
11030
|
className: cn(
|
|
@@ -10999,7 +11034,7 @@ var SidebarItem = ({
|
|
|
10999
11034
|
fill: "none",
|
|
11000
11035
|
stroke: "currentColor",
|
|
11001
11036
|
viewBox: "0 0 24 24",
|
|
11002
|
-
children: /* @__PURE__ */ (0,
|
|
11037
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
11003
11038
|
"path",
|
|
11004
11039
|
{
|
|
11005
11040
|
strokeLinecap: "round",
|
|
@@ -11010,16 +11045,210 @@ var SidebarItem = ({
|
|
|
11010
11045
|
)
|
|
11011
11046
|
}
|
|
11012
11047
|
),
|
|
11013
|
-
!hasChildren && depth > 0 && /* @__PURE__ */ (0,
|
|
11014
|
-
showIcon && icon && /* @__PURE__ */ (0,
|
|
11015
|
-
/* @__PURE__ */ (0,
|
|
11048
|
+
!hasChildren && depth > 0 && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "w-4 flex-shrink-0" }),
|
|
11049
|
+
showIcon && icon && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "flex-shrink-0", children: icon }),
|
|
11050
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "flex-1 text-left truncate", children })
|
|
11016
11051
|
]
|
|
11017
11052
|
}
|
|
11018
11053
|
);
|
|
11019
11054
|
};
|
|
11020
11055
|
|
|
11056
|
+
// src/components/layout/AppSidebar.tsx
|
|
11057
|
+
var import_react19 = require("react");
|
|
11058
|
+
var import_lucide_react22 = require("lucide-react");
|
|
11059
|
+
var import_jsx_runtime89 = require("react/jsx-runtime");
|
|
11060
|
+
var STORAGE_KEY = "appsidebar:state";
|
|
11061
|
+
var APP_SIDEBAR_WIDTH = 280;
|
|
11062
|
+
var APP_SIDEBAR_WIDTH_COLLAPSED = 60;
|
|
11063
|
+
var AppSidebarContext = (0, import_react19.createContext)(null);
|
|
11064
|
+
var DEFAULT_CONTEXT = {
|
|
11065
|
+
isOpen: true,
|
|
11066
|
+
toggle: () => {
|
|
11067
|
+
},
|
|
11068
|
+
open: () => {
|
|
11069
|
+
},
|
|
11070
|
+
close: () => {
|
|
11071
|
+
}
|
|
11072
|
+
};
|
|
11073
|
+
function useAppSidebar() {
|
|
11074
|
+
return (0, import_react19.useContext)(AppSidebarContext) ?? DEFAULT_CONTEXT;
|
|
11075
|
+
}
|
|
11076
|
+
function AppSidebarProvider({ children, defaultOpen = true }) {
|
|
11077
|
+
const [isOpen, setIsOpen] = (0, import_react19.useState)(defaultOpen);
|
|
11078
|
+
(0, import_react19.useEffect)(() => {
|
|
11079
|
+
const stored = localStorage.getItem(STORAGE_KEY);
|
|
11080
|
+
if (stored !== null) setIsOpen(stored === "true");
|
|
11081
|
+
}, []);
|
|
11082
|
+
const persist3 = (value) => localStorage.setItem(STORAGE_KEY, String(value));
|
|
11083
|
+
const toggle = () => setIsOpen((prev) => {
|
|
11084
|
+
const next = !prev;
|
|
11085
|
+
persist3(next);
|
|
11086
|
+
return next;
|
|
11087
|
+
});
|
|
11088
|
+
const open = () => {
|
|
11089
|
+
setIsOpen(true);
|
|
11090
|
+
persist3(true);
|
|
11091
|
+
};
|
|
11092
|
+
const close = () => {
|
|
11093
|
+
setIsOpen(false);
|
|
11094
|
+
persist3(false);
|
|
11095
|
+
};
|
|
11096
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(AppSidebarContext.Provider, { value: { isOpen, toggle, open, close }, children });
|
|
11097
|
+
}
|
|
11098
|
+
function AppSidebarInset({
|
|
11099
|
+
children,
|
|
11100
|
+
className
|
|
11101
|
+
}) {
|
|
11102
|
+
const { isOpen } = useAppSidebar();
|
|
11103
|
+
const { shouldAnimate, scale } = useMotionPreference();
|
|
11104
|
+
const duration = shouldAnimate ? Math.round(300 * (5 / Math.max(scale, 0.1))) : 0;
|
|
11105
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
11106
|
+
"div",
|
|
11107
|
+
{
|
|
11108
|
+
className: cn("min-h-screen", className),
|
|
11109
|
+
style: {
|
|
11110
|
+
marginLeft: isOpen ? APP_SIDEBAR_WIDTH : APP_SIDEBAR_WIDTH_COLLAPSED,
|
|
11111
|
+
transition: shouldAnimate ? `margin-left ${duration}ms ease-out` : "none"
|
|
11112
|
+
},
|
|
11113
|
+
children
|
|
11114
|
+
}
|
|
11115
|
+
);
|
|
11116
|
+
}
|
|
11117
|
+
function AppSidebar({
|
|
11118
|
+
logo,
|
|
11119
|
+
title,
|
|
11120
|
+
items = [],
|
|
11121
|
+
children,
|
|
11122
|
+
footer,
|
|
11123
|
+
className
|
|
11124
|
+
}) {
|
|
11125
|
+
const { isOpen, toggle } = useAppSidebar();
|
|
11126
|
+
const { shouldAnimate, scale } = useMotionPreference();
|
|
11127
|
+
const duration = shouldAnimate ? Math.round(300 * (5 / Math.max(scale, 0.1))) : 0;
|
|
11128
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
|
|
11129
|
+
"aside",
|
|
11130
|
+
{
|
|
11131
|
+
className: cn(
|
|
11132
|
+
"fixed left-0 top-0 bottom-0 z-40 flex flex-col",
|
|
11133
|
+
"bg-background border-r border-foreground/8 overflow-hidden",
|
|
11134
|
+
className
|
|
11135
|
+
),
|
|
11136
|
+
style: {
|
|
11137
|
+
width: isOpen ? APP_SIDEBAR_WIDTH : APP_SIDEBAR_WIDTH_COLLAPSED,
|
|
11138
|
+
transition: shouldAnimate ? `width ${duration}ms ease-out` : "none"
|
|
11139
|
+
},
|
|
11140
|
+
children: [
|
|
11141
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsxs)("div", { className: "flex items-center h-16 px-[10px] shrink-0", children: [
|
|
11142
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
|
|
11143
|
+
"button",
|
|
11144
|
+
{
|
|
11145
|
+
onClick: toggle,
|
|
11146
|
+
className: cn(
|
|
11147
|
+
"flex items-center gap-2.5 flex-1 min-w-0",
|
|
11148
|
+
"rounded-lg p-1.5",
|
|
11149
|
+
"hover:bg-foreground/5 transition-colors duration-150",
|
|
11150
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]"
|
|
11151
|
+
),
|
|
11152
|
+
"aria-label": isOpen ? title ?? "OpenCosmos" : "Expand sidebar",
|
|
11153
|
+
children: [
|
|
11154
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "w-8 h-8 shrink-0 flex items-center justify-center", children: logo }),
|
|
11155
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
11156
|
+
"span",
|
|
11157
|
+
{
|
|
11158
|
+
className: "font-semibold text-sm text-foreground whitespace-nowrap",
|
|
11159
|
+
style: {
|
|
11160
|
+
opacity: isOpen ? 1 : 0,
|
|
11161
|
+
width: isOpen ? "auto" : 0,
|
|
11162
|
+
overflow: "hidden",
|
|
11163
|
+
pointerEvents: isOpen ? "auto" : "none",
|
|
11164
|
+
transition: shouldAnimate ? `opacity ${Math.round(duration * 0.6)}ms ease-out` : "none"
|
|
11165
|
+
},
|
|
11166
|
+
children: title
|
|
11167
|
+
}
|
|
11168
|
+
)
|
|
11169
|
+
]
|
|
11170
|
+
}
|
|
11171
|
+
),
|
|
11172
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
11173
|
+
"button",
|
|
11174
|
+
{
|
|
11175
|
+
onClick: toggle,
|
|
11176
|
+
tabIndex: isOpen ? 0 : -1,
|
|
11177
|
+
className: cn(
|
|
11178
|
+
"shrink-0 w-8 h-8 flex items-center justify-center rounded-lg",
|
|
11179
|
+
"text-foreground/35 hover:text-foreground/65 hover:bg-foreground/5",
|
|
11180
|
+
"transition-colors duration-150",
|
|
11181
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]"
|
|
11182
|
+
),
|
|
11183
|
+
style: {
|
|
11184
|
+
opacity: isOpen ? 1 : 0,
|
|
11185
|
+
pointerEvents: isOpen ? "auto" : "none",
|
|
11186
|
+
transition: shouldAnimate ? `opacity ${Math.round(duration * 0.5)}ms ease-out` : "none"
|
|
11187
|
+
},
|
|
11188
|
+
"aria-label": "Collapse sidebar",
|
|
11189
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(import_lucide_react22.PanelLeftClose, { className: "w-4 h-4" })
|
|
11190
|
+
}
|
|
11191
|
+
)
|
|
11192
|
+
] }),
|
|
11193
|
+
items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("nav", { className: "px-2 py-2 space-y-1 shrink-0", "aria-label": "Main navigation", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
|
|
11194
|
+
"a",
|
|
11195
|
+
{
|
|
11196
|
+
href: item.href,
|
|
11197
|
+
target: item.external ? "_blank" : void 0,
|
|
11198
|
+
rel: item.external ? "noopener noreferrer" : void 0,
|
|
11199
|
+
title: !isOpen ? item.label : void 0,
|
|
11200
|
+
"aria-label": !isOpen ? item.label : void 0,
|
|
11201
|
+
className: cn(
|
|
11202
|
+
"flex items-center rounded-lg transition-colors duration-150",
|
|
11203
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]",
|
|
11204
|
+
isOpen ? "gap-3 px-3 py-3" : "justify-center w-9 h-9 mx-auto",
|
|
11205
|
+
item.active ? "bg-foreground/8 text-foreground font-medium" : "text-[var(--color-text-secondary)] hover:bg-foreground/5 hover:text-[var(--color-text-primary)]"
|
|
11206
|
+
),
|
|
11207
|
+
children: [
|
|
11208
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "shrink-0 flex items-center justify-center w-4 h-4", children: item.icon }),
|
|
11209
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
11210
|
+
"span",
|
|
11211
|
+
{
|
|
11212
|
+
className: "text-sm whitespace-nowrap",
|
|
11213
|
+
style: {
|
|
11214
|
+
opacity: isOpen ? 1 : 0,
|
|
11215
|
+
width: isOpen ? "auto" : 0,
|
|
11216
|
+
overflow: "hidden",
|
|
11217
|
+
pointerEvents: isOpen ? "auto" : "none",
|
|
11218
|
+
transition: shouldAnimate ? `opacity ${Math.round(duration * 0.55)}ms ease-out` : "none"
|
|
11219
|
+
},
|
|
11220
|
+
children: item.label
|
|
11221
|
+
}
|
|
11222
|
+
)
|
|
11223
|
+
]
|
|
11224
|
+
},
|
|
11225
|
+
item.label
|
|
11226
|
+
)) }),
|
|
11227
|
+
/* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
11228
|
+
"div",
|
|
11229
|
+
{
|
|
11230
|
+
className: "flex-1 overflow-y-auto overflow-x-hidden min-h-0",
|
|
11231
|
+
style: { opacity: isOpen ? 1 : 0, pointerEvents: isOpen ? "auto" : "none" },
|
|
11232
|
+
children
|
|
11233
|
+
}
|
|
11234
|
+
),
|
|
11235
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
11236
|
+
"div",
|
|
11237
|
+
{
|
|
11238
|
+
className: cn(
|
|
11239
|
+
"shrink-0 border-t border-foreground/8",
|
|
11240
|
+
isOpen ? "px-4 py-4 space-y-3" : "px-2 py-3 flex justify-center"
|
|
11241
|
+
),
|
|
11242
|
+
children: footer
|
|
11243
|
+
}
|
|
11244
|
+
)
|
|
11245
|
+
]
|
|
11246
|
+
}
|
|
11247
|
+
);
|
|
11248
|
+
}
|
|
11249
|
+
|
|
11021
11250
|
// src/components/layout/Stack.tsx
|
|
11022
|
-
var
|
|
11251
|
+
var import_jsx_runtime90 = require("react/jsx-runtime");
|
|
11023
11252
|
var Stack = ({
|
|
11024
11253
|
ref,
|
|
11025
11254
|
children,
|
|
@@ -11055,7 +11284,7 @@ var Stack = ({
|
|
|
11055
11284
|
evenly: "justify-evenly"
|
|
11056
11285
|
}
|
|
11057
11286
|
};
|
|
11058
|
-
return /* @__PURE__ */ (0,
|
|
11287
|
+
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
11059
11288
|
Component,
|
|
11060
11289
|
{
|
|
11061
11290
|
ref,
|
|
@@ -11067,7 +11296,7 @@ var Stack = ({
|
|
|
11067
11296
|
};
|
|
11068
11297
|
|
|
11069
11298
|
// src/components/layout/GlassSurface.tsx
|
|
11070
|
-
var
|
|
11299
|
+
var import_jsx_runtime91 = require("react/jsx-runtime");
|
|
11071
11300
|
var TINT_COLORS = {
|
|
11072
11301
|
0: "255, 255, 255",
|
|
11073
11302
|
1: "227, 227, 227",
|
|
@@ -11108,7 +11337,7 @@ function GlassSurface({
|
|
|
11108
11337
|
} : void 0,
|
|
11109
11338
|
...style
|
|
11110
11339
|
};
|
|
11111
|
-
return /* @__PURE__ */ (0,
|
|
11340
|
+
return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { ref, className: classes, style: inlineStyles, children });
|
|
11112
11341
|
}
|
|
11113
11342
|
|
|
11114
11343
|
// src/lib/webgl/Renderer.ts
|
|
@@ -11297,8 +11526,8 @@ var Color = class {
|
|
|
11297
11526
|
};
|
|
11298
11527
|
|
|
11299
11528
|
// src/components/backgrounds/WarpBackground.tsx
|
|
11300
|
-
var
|
|
11301
|
-
var
|
|
11529
|
+
var import_react20 = require("react");
|
|
11530
|
+
var import_jsx_runtime92 = require("react/jsx-runtime");
|
|
11302
11531
|
var vertexShader = `
|
|
11303
11532
|
attribute vec2 uv;
|
|
11304
11533
|
attribute vec2 position;
|
|
@@ -11485,12 +11714,12 @@ function WarpBackground({
|
|
|
11485
11714
|
className = "",
|
|
11486
11715
|
...rest
|
|
11487
11716
|
}) {
|
|
11488
|
-
const ctnDom = (0,
|
|
11489
|
-
const targetMousePos = (0,
|
|
11490
|
-
const smoothMousePos = (0,
|
|
11491
|
-
const targetMouseActive = (0,
|
|
11492
|
-
const smoothMouseActive = (0,
|
|
11493
|
-
(0,
|
|
11717
|
+
const ctnDom = (0, import_react20.useRef)(null);
|
|
11718
|
+
const targetMousePos = (0, import_react20.useRef)({ x: 0.5, y: 0.5 });
|
|
11719
|
+
const smoothMousePos = (0, import_react20.useRef)({ x: 0.5, y: 0.5 });
|
|
11720
|
+
const targetMouseActive = (0, import_react20.useRef)(0);
|
|
11721
|
+
const smoothMouseActive = (0, import_react20.useRef)(0);
|
|
11722
|
+
(0, import_react20.useEffect)(() => {
|
|
11494
11723
|
if (!ctnDom.current) return;
|
|
11495
11724
|
const ctn = ctnDom.current;
|
|
11496
11725
|
const renderer = new Renderer({
|
|
@@ -11611,12 +11840,12 @@ function WarpBackground({
|
|
|
11611
11840
|
autoCenterRepulsion,
|
|
11612
11841
|
transparent
|
|
11613
11842
|
]);
|
|
11614
|
-
return /* @__PURE__ */ (0,
|
|
11843
|
+
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { ref: ctnDom, className: `w-full h-full relative ${className}`, ...rest });
|
|
11615
11844
|
}
|
|
11616
11845
|
|
|
11617
11846
|
// src/components/backgrounds/FaultyTerminal.tsx
|
|
11618
|
-
var
|
|
11619
|
-
var
|
|
11847
|
+
var import_react21 = require("react");
|
|
11848
|
+
var import_jsx_runtime93 = require("react/jsx-runtime");
|
|
11620
11849
|
var vertexShader2 = `
|
|
11621
11850
|
attribute vec2 position;
|
|
11622
11851
|
attribute vec2 uv;
|
|
@@ -11852,18 +12081,18 @@ function FaultyTerminal({
|
|
|
11852
12081
|
style,
|
|
11853
12082
|
...rest
|
|
11854
12083
|
}) {
|
|
11855
|
-
const containerRef = (0,
|
|
11856
|
-
const programRef = (0,
|
|
11857
|
-
const rendererRef = (0,
|
|
11858
|
-
const mouseRef = (0,
|
|
11859
|
-
const smoothMouseRef = (0,
|
|
11860
|
-
const frozenTimeRef = (0,
|
|
11861
|
-
const rafRef = (0,
|
|
11862
|
-
const loadAnimationStartRef = (0,
|
|
11863
|
-
const timeOffsetRef = (0,
|
|
11864
|
-
const tintVec = (0,
|
|
11865
|
-
const ditherValue = (0,
|
|
11866
|
-
const handleMouseMove = (0,
|
|
12084
|
+
const containerRef = (0, import_react21.useRef)(null);
|
|
12085
|
+
const programRef = (0, import_react21.useRef)(null);
|
|
12086
|
+
const rendererRef = (0, import_react21.useRef)(null);
|
|
12087
|
+
const mouseRef = (0, import_react21.useRef)({ x: 0.5, y: 0.5 });
|
|
12088
|
+
const smoothMouseRef = (0, import_react21.useRef)({ x: 0.5, y: 0.5 });
|
|
12089
|
+
const frozenTimeRef = (0, import_react21.useRef)(0);
|
|
12090
|
+
const rafRef = (0, import_react21.useRef)(0);
|
|
12091
|
+
const loadAnimationStartRef = (0, import_react21.useRef)(0);
|
|
12092
|
+
const timeOffsetRef = (0, import_react21.useRef)(Math.random() * 100);
|
|
12093
|
+
const tintVec = (0, import_react21.useMemo)(() => hexToRgb3(tint), [tint]);
|
|
12094
|
+
const ditherValue = (0, import_react21.useMemo)(() => typeof dither === "boolean" ? dither ? 1 : 0 : dither, [dither]);
|
|
12095
|
+
const handleMouseMove = (0, import_react21.useCallback)((e) => {
|
|
11867
12096
|
const ctn = containerRef.current;
|
|
11868
12097
|
if (!ctn) return;
|
|
11869
12098
|
const rect = ctn.getBoundingClientRect();
|
|
@@ -11871,7 +12100,7 @@ function FaultyTerminal({
|
|
|
11871
12100
|
const y = 1 - (e.clientY - rect.top) / rect.height;
|
|
11872
12101
|
mouseRef.current = { x, y };
|
|
11873
12102
|
}, []);
|
|
11874
|
-
(0,
|
|
12103
|
+
(0, import_react21.useEffect)(() => {
|
|
11875
12104
|
const ctn = containerRef.current;
|
|
11876
12105
|
if (!ctn) return;
|
|
11877
12106
|
const renderer = new Renderer({ dpr });
|
|
@@ -11987,13 +12216,13 @@ function FaultyTerminal({
|
|
|
11987
12216
|
brightness,
|
|
11988
12217
|
handleMouseMove
|
|
11989
12218
|
]);
|
|
11990
|
-
return /* @__PURE__ */ (0,
|
|
12219
|
+
return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { ref: containerRef, className: `w-full h-full relative overflow-hidden ${className}`, style, ...rest });
|
|
11991
12220
|
}
|
|
11992
12221
|
|
|
11993
12222
|
// src/components/motion/AnimatedBeam.tsx
|
|
11994
12223
|
var import_framer_motion4 = require("framer-motion");
|
|
11995
|
-
var
|
|
11996
|
-
var
|
|
12224
|
+
var import_react22 = require("react");
|
|
12225
|
+
var import_jsx_runtime94 = require("react/jsx-runtime");
|
|
11997
12226
|
var AnimatedBeam = ({
|
|
11998
12227
|
className,
|
|
11999
12228
|
containerRef,
|
|
@@ -12014,7 +12243,7 @@ var AnimatedBeam = ({
|
|
|
12014
12243
|
endY
|
|
12015
12244
|
}) => {
|
|
12016
12245
|
const { shouldAnimate, scale } = useMotionPreference();
|
|
12017
|
-
const id = (0,
|
|
12246
|
+
const id = (0, import_react22.useId)();
|
|
12018
12247
|
const pathId = `beam-path-${id}`;
|
|
12019
12248
|
const gradientId = `beam-gradient-${id}`;
|
|
12020
12249
|
const maskId = `beam-mask-${id}`;
|
|
@@ -12029,7 +12258,7 @@ var AnimatedBeam = ({
|
|
|
12029
12258
|
const controlY = y1;
|
|
12030
12259
|
const controlX = x2;
|
|
12031
12260
|
const path = `M ${x1},${y1} C ${x1 + curvature},${y1} ${x2 - curvature},${y2} ${x2},${y2}`;
|
|
12032
|
-
return /* @__PURE__ */ (0,
|
|
12261
|
+
return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(
|
|
12033
12262
|
"svg",
|
|
12034
12263
|
{
|
|
12035
12264
|
fill: "none",
|
|
@@ -12038,16 +12267,16 @@ var AnimatedBeam = ({
|
|
|
12038
12267
|
xmlns: "http://www.w3.org/2000/svg",
|
|
12039
12268
|
className: cn("pointer-events-none absolute inset-0 transform-gpu overflow-visible", className),
|
|
12040
12269
|
children: [
|
|
12041
|
-
/* @__PURE__ */ (0,
|
|
12042
|
-
/* @__PURE__ */ (0,
|
|
12043
|
-
/* @__PURE__ */ (0,
|
|
12044
|
-
/* @__PURE__ */ (0,
|
|
12045
|
-
/* @__PURE__ */ (0,
|
|
12046
|
-
/* @__PURE__ */ (0,
|
|
12270
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("defs", { children: [
|
|
12271
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("linearGradient", { id: gradientId, gradientUnits: "userSpaceOnUse", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
12272
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
|
|
12273
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("stop", { stopColor: gradientStartColor }),
|
|
12274
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("stop", { offset: "32.5%", stopColor: gradientStopColor }),
|
|
12275
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
|
|
12047
12276
|
] }),
|
|
12048
|
-
/* @__PURE__ */ (0,
|
|
12277
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)("marker", { id: `arrow-${id}`, markerWidth: "5", markerHeight: "5", refX: "2.5", refY: "2.5", orient: "auto", markerUnits: "strokeWidth", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("circle", { cx: "2.5", cy: "2.5", r: "2.5", fill: gradientStopColor }) })
|
|
12049
12278
|
] }),
|
|
12050
|
-
/* @__PURE__ */ (0,
|
|
12279
|
+
/* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
12051
12280
|
"path",
|
|
12052
12281
|
{
|
|
12053
12282
|
d: path,
|
|
@@ -12057,7 +12286,7 @@ var AnimatedBeam = ({
|
|
|
12057
12286
|
strokeLinecap: "round"
|
|
12058
12287
|
}
|
|
12059
12288
|
),
|
|
12060
|
-
shouldAnimate && /* @__PURE__ */ (0,
|
|
12289
|
+
shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
12061
12290
|
"path",
|
|
12062
12291
|
{
|
|
12063
12292
|
d: path,
|
|
@@ -12065,7 +12294,7 @@ var AnimatedBeam = ({
|
|
|
12065
12294
|
strokeWidth: pathWidth,
|
|
12066
12295
|
strokeLinecap: "round",
|
|
12067
12296
|
fill: "none",
|
|
12068
|
-
children: /* @__PURE__ */ (0,
|
|
12297
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
12069
12298
|
"animate",
|
|
12070
12299
|
{
|
|
12071
12300
|
attributeName: "stroke-dasharray",
|
|
@@ -12076,7 +12305,7 @@ var AnimatedBeam = ({
|
|
|
12076
12305
|
)
|
|
12077
12306
|
}
|
|
12078
12307
|
),
|
|
12079
|
-
shouldAnimate && /* @__PURE__ */ (0,
|
|
12308
|
+
shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
12080
12309
|
import_framer_motion4.motion.circle,
|
|
12081
12310
|
{
|
|
12082
12311
|
r: pathWidth * 1.5,
|
|
@@ -12093,7 +12322,7 @@ var AnimatedBeam = ({
|
|
|
12093
12322
|
style: { offsetPath: `path('${path}')` }
|
|
12094
12323
|
}
|
|
12095
12324
|
),
|
|
12096
|
-
shouldAnimate && /* @__PURE__ */ (0,
|
|
12325
|
+
shouldAnimate && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
|
|
12097
12326
|
import_framer_motion4.motion.circle,
|
|
12098
12327
|
{
|
|
12099
12328
|
r: pathWidth,
|
|
@@ -12116,8 +12345,8 @@ var AnimatedBeam = ({
|
|
|
12116
12345
|
};
|
|
12117
12346
|
|
|
12118
12347
|
// src/components/backgrounds/OrbBackground.tsx
|
|
12119
|
-
var
|
|
12120
|
-
var
|
|
12348
|
+
var import_react23 = require("react");
|
|
12349
|
+
var import_jsx_runtime95 = require("react/jsx-runtime");
|
|
12121
12350
|
function hexToRgb4(hex) {
|
|
12122
12351
|
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
12123
12352
|
if (!result) return [0, 0, 0];
|
|
@@ -12143,7 +12372,7 @@ function OrbBackground({
|
|
|
12143
12372
|
orbColor2,
|
|
12144
12373
|
orbColor3
|
|
12145
12374
|
}) {
|
|
12146
|
-
const ctnDom = (0,
|
|
12375
|
+
const ctnDom = (0, import_react23.useRef)(null);
|
|
12147
12376
|
const vert = (
|
|
12148
12377
|
/* glsl */
|
|
12149
12378
|
`
|
|
@@ -12328,7 +12557,7 @@ function OrbBackground({
|
|
|
12328
12557
|
}
|
|
12329
12558
|
`
|
|
12330
12559
|
);
|
|
12331
|
-
(0,
|
|
12560
|
+
(0, import_react23.useEffect)(() => {
|
|
12332
12561
|
const container = ctnDom.current;
|
|
12333
12562
|
if (!container) return;
|
|
12334
12563
|
const bgColor = backgroundColor || getCSSVariable2("--color-background", "#000000");
|
|
@@ -12431,13 +12660,13 @@ function OrbBackground({
|
|
|
12431
12660
|
gl.getExtension("WEBGL_lose_context")?.loseContext();
|
|
12432
12661
|
};
|
|
12433
12662
|
}, [hue, hoverIntensity, rotateOnHover, forceHoverState, backgroundColor]);
|
|
12434
|
-
return /* @__PURE__ */ (0,
|
|
12663
|
+
return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { ref: ctnDom, className: cn("w-full h-full pointer-events-auto", className) });
|
|
12435
12664
|
}
|
|
12436
12665
|
|
|
12437
12666
|
// src/components/blocks/Hero.tsx
|
|
12438
|
-
var
|
|
12667
|
+
var import_lucide_react23 = require("lucide-react");
|
|
12439
12668
|
var import_framer_motion5 = require("framer-motion");
|
|
12440
|
-
var
|
|
12669
|
+
var import_jsx_runtime96 = require("react/jsx-runtime");
|
|
12441
12670
|
function HeroBlock({
|
|
12442
12671
|
className,
|
|
12443
12672
|
badge,
|
|
@@ -12475,12 +12704,12 @@ function HeroBlock({
|
|
|
12475
12704
|
} : { duration: 0 }
|
|
12476
12705
|
}
|
|
12477
12706
|
};
|
|
12478
|
-
return /* @__PURE__ */ (0,
|
|
12479
|
-
background && /* @__PURE__ */ (0,
|
|
12480
|
-
/* @__PURE__ */ (0,
|
|
12481
|
-
/* @__PURE__ */ (0,
|
|
12707
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: cn("relative min-h-[80vh] flex flex-col items-center justify-center overflow-hidden w-full", className), children: [
|
|
12708
|
+
background && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "absolute inset-0 z-0 select-none pointer-events-none", children: [
|
|
12709
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "absolute inset-0", children: background }),
|
|
12710
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent via-transparent to-[var(--color-background)] z-10" })
|
|
12482
12711
|
] }),
|
|
12483
|
-
/* @__PURE__ */ (0,
|
|
12712
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
|
|
12484
12713
|
import_framer_motion5.motion.div,
|
|
12485
12714
|
{
|
|
12486
12715
|
className: "relative z-20 container max-w-4xl px-4 text-center space-y-8",
|
|
@@ -12489,8 +12718,8 @@ function HeroBlock({
|
|
|
12489
12718
|
whileInView: "visible",
|
|
12490
12719
|
viewport: { once: true },
|
|
12491
12720
|
children: [
|
|
12492
|
-
badge && /* @__PURE__ */ (0,
|
|
12493
|
-
/* @__PURE__ */ (0,
|
|
12721
|
+
badge && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Badge, { variant: "outline", className: "backdrop-blur-md bg-[var(--color-surface)]/30 border-[var(--color-border)] px-4 py-1.5", children: badge }) }),
|
|
12722
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
12494
12723
|
import_framer_motion5.motion.h1,
|
|
12495
12724
|
{
|
|
12496
12725
|
variants: itemVariants,
|
|
@@ -12498,14 +12727,14 @@ function HeroBlock({
|
|
|
12498
12727
|
children: headline
|
|
12499
12728
|
}
|
|
12500
12729
|
),
|
|
12501
|
-
/* @__PURE__ */ (0,
|
|
12502
|
-
children && /* @__PURE__ */ (0,
|
|
12503
|
-
/* @__PURE__ */ (0,
|
|
12504
|
-
primaryCta && /* @__PURE__ */ (0,
|
|
12730
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Text, { variant: "secondary", className: "text-xl md:text-2xl max-w-2xl mx-auto", children: description }) }),
|
|
12731
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex justify-center", children }),
|
|
12732
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_framer_motion5.motion.div, { variants: itemVariants, className: "flex flex-col sm:flex-row gap-4 justify-center items-center pt-4", children: [
|
|
12733
|
+
primaryCta && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(Button, { size: "lg", variant: primaryCta.variant || "default", onClick: primaryCta.onClick, children: [
|
|
12505
12734
|
primaryCta.label,
|
|
12506
|
-
/* @__PURE__ */ (0,
|
|
12735
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_lucide_react23.ArrowRight, { className: "w-4 h-4 ml-2" })
|
|
12507
12736
|
] }),
|
|
12508
|
-
secondaryCta && /* @__PURE__ */ (0,
|
|
12737
|
+
secondaryCta && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Button, { size: "lg", variant: "outline", className: "bg-[var(--color-surface)]/50 backdrop-blur-md", onClick: secondaryCta.onClick, children: secondaryCta.label })
|
|
12509
12738
|
] })
|
|
12510
12739
|
]
|
|
12511
12740
|
}
|
|
@@ -12514,8 +12743,8 @@ function HeroBlock({
|
|
|
12514
12743
|
}
|
|
12515
12744
|
|
|
12516
12745
|
// src/components/cursor/SplashCursor.tsx
|
|
12517
|
-
var
|
|
12518
|
-
var
|
|
12746
|
+
var import_react24 = require("react");
|
|
12747
|
+
var import_jsx_runtime97 = require("react/jsx-runtime");
|
|
12519
12748
|
function pointerPrototype() {
|
|
12520
12749
|
return {
|
|
12521
12750
|
id: -1,
|
|
@@ -12548,8 +12777,8 @@ function SplashCursor({
|
|
|
12548
12777
|
className,
|
|
12549
12778
|
style
|
|
12550
12779
|
}) {
|
|
12551
|
-
const canvasRef = (0,
|
|
12552
|
-
(0,
|
|
12780
|
+
const canvasRef = (0, import_react24.useRef)(null);
|
|
12781
|
+
(0, import_react24.useEffect)(() => {
|
|
12553
12782
|
const canvas = canvasRef.current;
|
|
12554
12783
|
if (!canvas) return;
|
|
12555
12784
|
const pointers = [pointerPrototype()];
|
|
@@ -13595,7 +13824,7 @@ function SplashCursor({
|
|
|
13595
13824
|
BACK_COLOR,
|
|
13596
13825
|
TRANSPARENT
|
|
13597
13826
|
]);
|
|
13598
|
-
return /* @__PURE__ */ (0,
|
|
13827
|
+
return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
13599
13828
|
"div",
|
|
13600
13829
|
{
|
|
13601
13830
|
style: {
|
|
@@ -13609,7 +13838,7 @@ function SplashCursor({
|
|
|
13609
13838
|
...style
|
|
13610
13839
|
},
|
|
13611
13840
|
className,
|
|
13612
|
-
children: /* @__PURE__ */ (0,
|
|
13841
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
13613
13842
|
"canvas",
|
|
13614
13843
|
{
|
|
13615
13844
|
ref: canvasRef,
|
|
@@ -13626,8 +13855,8 @@ function SplashCursor({
|
|
|
13626
13855
|
}
|
|
13627
13856
|
|
|
13628
13857
|
// src/components/cursor/TargetCursor.tsx
|
|
13629
|
-
var
|
|
13630
|
-
var
|
|
13858
|
+
var import_react25 = require("react");
|
|
13859
|
+
var import_jsx_runtime98 = require("react/jsx-runtime");
|
|
13631
13860
|
function TargetCursor({
|
|
13632
13861
|
color = "255, 255, 255",
|
|
13633
13862
|
outerSize = 40,
|
|
@@ -13638,18 +13867,18 @@ function TargetCursor({
|
|
|
13638
13867
|
clickScale = 0.7,
|
|
13639
13868
|
blendMode = true
|
|
13640
13869
|
}) {
|
|
13641
|
-
const cursorOuterRef = (0,
|
|
13642
|
-
const cursorInnerRef = (0,
|
|
13643
|
-
const requestRef = (0,
|
|
13644
|
-
const previousTimeRef = (0,
|
|
13645
|
-
const endX = (0,
|
|
13646
|
-
const endY = (0,
|
|
13647
|
-
const _x = (0,
|
|
13648
|
-
const _y = (0,
|
|
13649
|
-
const [isActive, setIsActive] = (0,
|
|
13650
|
-
const [isActiveClickable, setIsActiveClickable] = (0,
|
|
13651
|
-
const [isVisible, setIsVisible] = (0,
|
|
13652
|
-
(0,
|
|
13870
|
+
const cursorOuterRef = (0, import_react25.useRef)(null);
|
|
13871
|
+
const cursorInnerRef = (0, import_react25.useRef)(null);
|
|
13872
|
+
const requestRef = (0, import_react25.useRef)(null);
|
|
13873
|
+
const previousTimeRef = (0, import_react25.useRef)(null);
|
|
13874
|
+
const endX = (0, import_react25.useRef)(0);
|
|
13875
|
+
const endY = (0, import_react25.useRef)(0);
|
|
13876
|
+
const _x = (0, import_react25.useRef)(0);
|
|
13877
|
+
const _y = (0, import_react25.useRef)(0);
|
|
13878
|
+
const [isActive, setIsActive] = (0, import_react25.useState)(false);
|
|
13879
|
+
const [isActiveClickable, setIsActiveClickable] = (0, import_react25.useState)(false);
|
|
13880
|
+
const [isVisible, setIsVisible] = (0, import_react25.useState)(false);
|
|
13881
|
+
(0, import_react25.useEffect)(() => {
|
|
13653
13882
|
const onMouseMove = (e) => {
|
|
13654
13883
|
endX.current = e.clientX;
|
|
13655
13884
|
endY.current = e.clientY;
|
|
@@ -13697,11 +13926,11 @@ function TargetCursor({
|
|
|
13697
13926
|
previousTimeRef.current = time;
|
|
13698
13927
|
requestRef.current = requestAnimationFrame(animateCursor);
|
|
13699
13928
|
};
|
|
13700
|
-
(0,
|
|
13929
|
+
(0, import_react25.useEffect)(() => {
|
|
13701
13930
|
requestRef.current = requestAnimationFrame(animateCursor);
|
|
13702
13931
|
return () => cancelAnimationFrame(requestRef.current);
|
|
13703
13932
|
}, []);
|
|
13704
|
-
(0,
|
|
13933
|
+
(0, import_react25.useEffect)(() => {
|
|
13705
13934
|
if (isVisible) {
|
|
13706
13935
|
const style = document.createElement("style");
|
|
13707
13936
|
style.innerHTML = `body, a, button, input, [role="button"] { cursor: none !important; }`;
|
|
@@ -13735,8 +13964,8 @@ function TargetCursor({
|
|
|
13735
13964
|
}
|
|
13736
13965
|
};
|
|
13737
13966
|
if (!isVisible) return null;
|
|
13738
|
-
return /* @__PURE__ */ (0,
|
|
13739
|
-
/* @__PURE__ */ (0,
|
|
13967
|
+
return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment, { children: [
|
|
13968
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
13740
13969
|
"div",
|
|
13741
13970
|
{
|
|
13742
13971
|
ref: cursorOuterRef,
|
|
@@ -13753,7 +13982,7 @@ function TargetCursor({
|
|
|
13753
13982
|
}
|
|
13754
13983
|
}
|
|
13755
13984
|
),
|
|
13756
|
-
/* @__PURE__ */ (0,
|
|
13985
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
13757
13986
|
"div",
|
|
13758
13987
|
{
|
|
13759
13988
|
ref: cursorInnerRef,
|
|
@@ -13772,8 +14001,8 @@ function TargetCursor({
|
|
|
13772
14001
|
}
|
|
13773
14002
|
|
|
13774
14003
|
// src/providers/ThemeProvider.tsx
|
|
13775
|
-
var
|
|
13776
|
-
var
|
|
14004
|
+
var import_react26 = require("react");
|
|
14005
|
+
var import_jsx_runtime99 = require("react/jsx-runtime");
|
|
13777
14006
|
var themeTokens = {
|
|
13778
14007
|
studio: studioTokens,
|
|
13779
14008
|
terra: terraTokens,
|
|
@@ -13998,19 +14227,19 @@ function ThemeProvider({ children, defaultTheme, defaultMode }) {
|
|
|
13998
14227
|
const { theme, mode, setTheme, setMode } = useThemeStore();
|
|
13999
14228
|
const customPalette = useCustomizer((state) => state.customColors?.[theme]?.[mode]);
|
|
14000
14229
|
const motionIntensity = useCustomizer((state) => state.motion);
|
|
14001
|
-
const [isTransitioning, setIsTransitioning] = (0,
|
|
14002
|
-
const [mounted, setMounted] = (0,
|
|
14003
|
-
(0,
|
|
14230
|
+
const [isTransitioning, setIsTransitioning] = (0, import_react26.useState)(false);
|
|
14231
|
+
const [mounted, setMounted] = (0, import_react26.useState)(false);
|
|
14232
|
+
(0, import_react26.useEffect)(() => {
|
|
14004
14233
|
if (!defaultTheme && !defaultMode) return;
|
|
14005
14234
|
const persisted = typeof window !== "undefined" && localStorage.getItem("ecosystem-theme");
|
|
14006
14235
|
if (persisted) return;
|
|
14007
14236
|
if (defaultTheme) setTheme(defaultTheme);
|
|
14008
14237
|
if (defaultMode) setMode(defaultMode);
|
|
14009
14238
|
}, []);
|
|
14010
|
-
(0,
|
|
14239
|
+
(0, import_react26.useEffect)(() => {
|
|
14011
14240
|
setMounted(true);
|
|
14012
14241
|
}, []);
|
|
14013
|
-
(0,
|
|
14242
|
+
(0, import_react26.useEffect)(() => {
|
|
14014
14243
|
if (!mounted) return;
|
|
14015
14244
|
setIsTransitioning(true);
|
|
14016
14245
|
const root = document.documentElement;
|
|
@@ -14045,7 +14274,7 @@ function ThemeProvider({ children, defaultTheme, defaultMode }) {
|
|
|
14045
14274
|
}, 400);
|
|
14046
14275
|
return () => clearTimeout(timeout);
|
|
14047
14276
|
}, [theme, mode, mounted, customPalette, motionIntensity]);
|
|
14048
|
-
return /* @__PURE__ */ (0,
|
|
14277
|
+
return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_jsx_runtime99.Fragment, { children });
|
|
14049
14278
|
}
|
|
14050
14279
|
|
|
14051
14280
|
// src/lib/animations.ts
|
|
@@ -14331,7 +14560,7 @@ function generateBreadcrumbs(hash, routeConfig, baseUrl = "#") {
|
|
|
14331
14560
|
|
|
14332
14561
|
// src/component-registry.ts
|
|
14333
14562
|
var BRAND = {
|
|
14334
|
-
productName: "
|
|
14563
|
+
productName: "OpenCosmos UI",
|
|
14335
14564
|
productNameShort: "Sage",
|
|
14336
14565
|
themeNames: {
|
|
14337
14566
|
organic: "Terra",
|
|
@@ -14343,7 +14572,7 @@ var BRAND = {
|
|
|
14343
14572
|
};
|
|
14344
14573
|
var COMPONENT_REGISTRY = {
|
|
14345
14574
|
/**
|
|
14346
|
-
* Total count of all exported UI components from @
|
|
14575
|
+
* Total count of all exported UI components from @opencosmos/ui
|
|
14347
14576
|
*/
|
|
14348
14577
|
totalCount: 100,
|
|
14349
14578
|
/**
|
|
@@ -14702,6 +14931,7 @@ __export(data_display_exports, {
|
|
|
14702
14931
|
DescriptionList: () => DescriptionList,
|
|
14703
14932
|
GitHubIcon: () => GitHubIcon,
|
|
14704
14933
|
Heading: () => Heading,
|
|
14934
|
+
OpenCosmosIcon: () => OpenCosmosIcon,
|
|
14705
14935
|
StatCard: () => StatCard,
|
|
14706
14936
|
StatCardGroup: () => StatCardGroup,
|
|
14707
14937
|
Table: () => Table,
|
|
@@ -14728,10 +14958,15 @@ __export(data_display_exports, {
|
|
|
14728
14958
|
// src/components/layout/index.ts
|
|
14729
14959
|
var layout_exports = {};
|
|
14730
14960
|
__export(layout_exports, {
|
|
14961
|
+
APP_SIDEBAR_WIDTH: () => APP_SIDEBAR_WIDTH,
|
|
14962
|
+
APP_SIDEBAR_WIDTH_COLLAPSED: () => APP_SIDEBAR_WIDTH_COLLAPSED,
|
|
14731
14963
|
Accordion: () => Accordion,
|
|
14732
14964
|
AccordionContent: () => AccordionContent,
|
|
14733
14965
|
AccordionItem: () => AccordionItem,
|
|
14734
14966
|
AccordionTrigger: () => AccordionTrigger,
|
|
14967
|
+
AppSidebar: () => AppSidebar,
|
|
14968
|
+
AppSidebarInset: () => AppSidebarInset,
|
|
14969
|
+
AppSidebarProvider: () => AppSidebarProvider,
|
|
14735
14970
|
AspectRatio: () => AspectRatio,
|
|
14736
14971
|
Carousel: () => Carousel,
|
|
14737
14972
|
CarouselContent: () => CarouselContent,
|
|
@@ -14763,7 +14998,8 @@ __export(layout_exports, {
|
|
|
14763
14998
|
SidebarHeader: () => SidebarHeader,
|
|
14764
14999
|
SidebarItem: () => SidebarItem,
|
|
14765
15000
|
SidebarOverlay: () => SidebarOverlay,
|
|
14766
|
-
Stack: () => Stack
|
|
15001
|
+
Stack: () => Stack,
|
|
15002
|
+
useAppSidebar: () => useAppSidebar
|
|
14767
15003
|
});
|
|
14768
15004
|
|
|
14769
15005
|
// src/components/backgrounds/index.ts
|
|
@@ -14788,6 +15024,8 @@ __export(providers_exports, {
|
|
|
14788
15024
|
});
|
|
14789
15025
|
// Annotate the CommonJS export names for ESM import in node:
|
|
14790
15026
|
0 && (module.exports = {
|
|
15027
|
+
APP_SIDEBAR_WIDTH,
|
|
15028
|
+
APP_SIDEBAR_WIDTH_COLLAPSED,
|
|
14791
15029
|
Accordion,
|
|
14792
15030
|
AccordionContent,
|
|
14793
15031
|
AccordionItem,
|
|
@@ -14808,6 +15046,9 @@ __export(providers_exports, {
|
|
|
14808
15046
|
AlertDialogTrigger,
|
|
14809
15047
|
AlertTitle,
|
|
14810
15048
|
AnimatedBeam,
|
|
15049
|
+
AppSidebar,
|
|
15050
|
+
AppSidebarInset,
|
|
15051
|
+
AppSidebarProvider,
|
|
14811
15052
|
AspectImage,
|
|
14812
15053
|
AspectRatio,
|
|
14813
15054
|
Avatar,
|
|
@@ -14977,6 +15218,7 @@ __export(providers_exports, {
|
|
|
14977
15218
|
NavigationMenuTrigger,
|
|
14978
15219
|
NavigationMenuViewport,
|
|
14979
15220
|
NotificationCenter,
|
|
15221
|
+
OpenCosmosIcon,
|
|
14980
15222
|
OpenGraphCard,
|
|
14981
15223
|
OrbBackground,
|
|
14982
15224
|
Overlays,
|
|
@@ -15133,6 +15375,7 @@ __export(providers_exports, {
|
|
|
15133
15375
|
transitions,
|
|
15134
15376
|
treeNodeVariants,
|
|
15135
15377
|
typographySystem,
|
|
15378
|
+
useAppSidebar,
|
|
15136
15379
|
useCustomizer,
|
|
15137
15380
|
useForm,
|
|
15138
15381
|
useFormField,
|