@frequencyads/components 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/AnimatedCounter/AnimatedCounter.d.ts +19 -0
  2. package/dist/AnimatedCounter/AnimatedCounter.d.ts.map +1 -0
  3. package/dist/AnimatedCounter/index.d.ts +2 -0
  4. package/dist/AnimatedCounter/index.d.ts.map +1 -0
  5. package/dist/AnimatedWaveform/AnimatedWaveform.d.ts +10 -0
  6. package/dist/AnimatedWaveform/AnimatedWaveform.d.ts.map +1 -0
  7. package/dist/AnimatedWaveform/index.d.ts +2 -0
  8. package/dist/AnimatedWaveform/index.d.ts.map +1 -0
  9. package/dist/AudioPlayer/AudioPlayer.d.ts +26 -0
  10. package/dist/AudioPlayer/AudioPlayer.d.ts.map +1 -0
  11. package/dist/AudioPlayer/index.d.ts +2 -0
  12. package/dist/AudioPlayer/index.d.ts.map +1 -0
  13. package/dist/AudioWaveform/AudioWaveform.d.ts +27 -0
  14. package/dist/AudioWaveform/AudioWaveform.d.ts.map +1 -0
  15. package/dist/AudioWaveform/index.d.ts +2 -0
  16. package/dist/AudioWaveform/index.d.ts.map +1 -0
  17. package/dist/CodeBlock/CodeBlock.d.ts +10 -0
  18. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -0
  19. package/dist/CodeBlock/index.d.ts +2 -0
  20. package/dist/CodeBlock/index.d.ts.map +1 -0
  21. package/dist/ColorPalette/ColorPalette.d.ts +10 -0
  22. package/dist/ColorPalette/ColorPalette.d.ts.map +1 -0
  23. package/dist/ColorPalette/index.d.ts +2 -0
  24. package/dist/ColorPalette/index.d.ts.map +1 -0
  25. package/dist/ColorSwatch/ColorSwatch.d.ts +10 -0
  26. package/dist/ColorSwatch/ColorSwatch.d.ts.map +1 -0
  27. package/dist/ColorSwatch/index.d.ts +2 -0
  28. package/dist/ColorSwatch/index.d.ts.map +1 -0
  29. package/dist/Copyable/Copyable.d.ts +7 -0
  30. package/dist/Copyable/Copyable.d.ts.map +1 -0
  31. package/dist/Copyable/index.d.ts +2 -0
  32. package/dist/Copyable/index.d.ts.map +1 -0
  33. package/dist/DosDonts/DosDonts.d.ts +10 -0
  34. package/dist/DosDonts/DosDonts.d.ts.map +1 -0
  35. package/dist/DosDonts/index.d.ts +2 -0
  36. package/dist/DosDonts/index.d.ts.map +1 -0
  37. package/dist/ExpandableCard/ExpandableCard.d.ts +30 -0
  38. package/dist/ExpandableCard/ExpandableCard.d.ts.map +1 -0
  39. package/dist/ExpandableCard/index.d.ts +2 -0
  40. package/dist/ExpandableCard/index.d.ts.map +1 -0
  41. package/dist/FadeInSection/FadeInSection.d.ts +10 -0
  42. package/dist/FadeInSection/FadeInSection.d.ts.map +1 -0
  43. package/dist/FadeInSection/index.d.ts +2 -0
  44. package/dist/FadeInSection/index.d.ts.map +1 -0
  45. package/dist/FrequencyWave/FrequencyWave.d.ts +15 -0
  46. package/dist/FrequencyWave/FrequencyWave.d.ts.map +1 -0
  47. package/dist/FrequencyWave/index.d.ts +2 -0
  48. package/dist/FrequencyWave/index.d.ts.map +1 -0
  49. package/dist/GradientSwatch/GradientSwatch.d.ts +10 -0
  50. package/dist/GradientSwatch/GradientSwatch.d.ts.map +1 -0
  51. package/dist/GradientSwatch/index.d.ts +2 -0
  52. package/dist/GradientSwatch/index.d.ts.map +1 -0
  53. package/dist/Hero/Hero.d.ts +36 -0
  54. package/dist/Hero/Hero.d.ts.map +1 -0
  55. package/dist/Hero/index.d.ts +2 -0
  56. package/dist/Hero/index.d.ts.map +1 -0
  57. package/dist/HintBadge/HintBadge.d.ts +8 -0
  58. package/dist/HintBadge/HintBadge.d.ts.map +1 -0
  59. package/dist/HintBadge/index.d.ts +2 -0
  60. package/dist/HintBadge/index.d.ts.map +1 -0
  61. package/dist/MiniAudioPlayer/MiniAudioPlayer.d.ts +18 -0
  62. package/dist/MiniAudioPlayer/MiniAudioPlayer.d.ts.map +1 -0
  63. package/dist/MiniAudioPlayer/index.d.ts +2 -0
  64. package/dist/MiniAudioPlayer/index.d.ts.map +1 -0
  65. package/dist/PrincipleCard/PrincipleCard.d.ts +14 -0
  66. package/dist/PrincipleCard/PrincipleCard.d.ts.map +1 -0
  67. package/dist/PrincipleCard/index.d.ts +2 -0
  68. package/dist/PrincipleCard/index.d.ts.map +1 -0
  69. package/dist/SpeedDial/SpeedDial.d.ts +33 -0
  70. package/dist/SpeedDial/SpeedDial.d.ts.map +1 -0
  71. package/dist/SpeedDial/index.d.ts +2 -0
  72. package/dist/SpeedDial/index.d.ts.map +1 -0
  73. package/dist/SplitSection/SplitSection.d.ts +35 -0
  74. package/dist/SplitSection/SplitSection.d.ts.map +1 -0
  75. package/dist/SplitSection/index.d.ts +2 -0
  76. package/dist/SplitSection/index.d.ts.map +1 -0
  77. package/dist/TestimonialCard/TestimonialCard.d.ts +17 -0
  78. package/dist/TestimonialCard/TestimonialCard.d.ts.map +1 -0
  79. package/dist/TestimonialCard/index.d.ts +2 -0
  80. package/dist/TestimonialCard/index.d.ts.map +1 -0
  81. package/dist/VideoBackground/VideoBackground.d.ts +8 -0
  82. package/dist/VideoBackground/VideoBackground.d.ts.map +1 -0
  83. package/dist/VideoBackground/index.d.ts +2 -0
  84. package/dist/VideoBackground/index.d.ts.map +1 -0
  85. package/dist/components.css +1 -0
  86. package/dist/index.d.ts +25 -359
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +1 -1663
  89. package/dist/index.mjs +850 -1242
  90. package/package.json +10 -6
  91. package/dist/index.css +0 -609
  92. package/dist/index.d.mts +0 -361
package/dist/index.mjs CHANGED
@@ -1,1005 +1,685 @@
1
1
  'use client';
2
- var __defProp = Object.defineProperty;
3
- var __defProps = Object.defineProperties;
4
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __spreadValues = (a, b) => {
10
- for (var prop in b || (b = {}))
11
- if (__hasOwnProp.call(b, prop))
12
- __defNormalProp(a, prop, b[prop]);
13
- if (__getOwnPropSymbols)
14
- for (var prop of __getOwnPropSymbols(b)) {
15
- if (__propIsEnum.call(b, prop))
16
- __defNormalProp(a, prop, b[prop]);
17
- }
18
- return a;
19
- };
20
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
- var __objRest = (source, exclude) => {
22
- var target = {};
23
- for (var prop in source)
24
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
- target[prop] = source[prop];
26
- if (source != null && __getOwnPropSymbols)
27
- for (var prop of __getOwnPropSymbols(source)) {
28
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
- target[prop] = source[prop];
30
- }
31
- return target;
32
- };
33
-
34
- // src/AnimatedCounter/AnimatedCounter.tsx
35
- import { useEffect, useRef, useState } from "react";
36
- import { Text } from "@mantine/core";
37
- import { jsxs } from "react/jsx-runtime";
38
- function AnimatedCounter(_a) {
39
- var _b = _a, {
40
- value,
41
- suffix = "",
42
- prefix = "",
43
- duration = 2e3,
44
- threshold = 0.5,
45
- abbreviate = true,
46
- decimals
47
- } = _b, textProps = __objRest(_b, [
48
- "value",
49
- "suffix",
50
- "prefix",
51
- "duration",
52
- "threshold",
53
- "abbreviate",
54
- "decimals"
55
- ]);
56
- const [count, setCount] = useState(0);
57
- const [hasTriggered, setHasTriggered] = useState(false);
58
- const ref = useRef(null);
59
- useEffect(() => {
60
- const el = ref.current;
61
- if (!el) return;
62
- const observer = new IntersectionObserver(
63
- ([entry]) => {
64
- if (entry.isIntersecting && !hasTriggered) {
65
- setHasTriggered(true);
66
- }
2
+ import { jsxs as m, jsx as e, Fragment as ze } from "react/jsx-runtime";
3
+ import { useState as z, useRef as D, useEffect as P, forwardRef as xe, useImperativeHandle as Be, useCallback as S } from "react";
4
+ import { Text as N, Box as k, Group as F, ActionIcon as Y, Slider as Se, Button as re, Portal as Te, Notification as Pe, Title as oe, SimpleGrid as Me, Paper as U, Stack as ce, ThemeIcon as We, useMantineColorScheme as Ee, Badge as $e, Transition as De, Tooltip as Fe, Avatar as je } from "@mantine/core";
5
+ import { motion as B } from "framer-motion";
6
+ import { IconPlayerPauseFilled as Ce, IconPlayerPlayFilled as ke, IconVolumeOff as Ge, IconVolume as Re, IconDownload as Ae, IconX as Oe, IconCheck as He, IconPlus as ue, IconQuote as Ve } from "@tabler/icons-react";
7
+ import qe from "@frequencyads/brand/assets/frequency-mark-white.svg";
8
+ import { gradients as Ue } from "@frequencyads/brand/colors";
9
+ function Cn({
10
+ value: t,
11
+ suffix: o = "",
12
+ prefix: a = "",
13
+ duration: s = 2e3,
14
+ threshold: r = 0.5,
15
+ abbreviate: f = !0,
16
+ decimals: y,
17
+ ...g
18
+ }) {
19
+ const [_, l] = z(0), [d, w] = z(!1), i = D(null);
20
+ return P(() => {
21
+ const u = i.current;
22
+ if (!u) return;
23
+ const c = new IntersectionObserver(
24
+ ([b]) => {
25
+ b.isIntersecting && !d && w(!0);
67
26
  },
68
- { threshold }
27
+ { threshold: r }
69
28
  );
70
- observer.observe(el);
71
- return () => observer.disconnect();
72
- }, [hasTriggered, threshold]);
73
- useEffect(() => {
74
- if (!hasTriggered) return;
75
- let startTime;
76
- let raf;
77
- const animate = (timestamp) => {
78
- if (!startTime) startTime = timestamp;
79
- const progress = Math.min((timestamp - startTime) / duration, 1);
80
- const eased = 1 - Math.pow(1 - progress, 3);
81
- setCount(eased * value);
82
- if (progress < 1) {
83
- raf = requestAnimationFrame(animate);
84
- }
29
+ return c.observe(u), () => c.disconnect();
30
+ }, [d, r]), P(() => {
31
+ if (!d) return;
32
+ let u, c;
33
+ const b = (n) => {
34
+ u || (u = n);
35
+ const p = Math.min((n - u) / s, 1), I = 1 - Math.pow(1 - p, 3);
36
+ l(I * t), p < 1 && (c = requestAnimationFrame(b));
85
37
  };
86
- raf = requestAnimationFrame(animate);
87
- return () => cancelAnimationFrame(raf);
88
- }, [hasTriggered, value, duration]);
89
- const formatValue = () => {
90
- if (abbreviate && value >= 1e3) {
91
- const kValue = count / 1e3;
92
- return kValue % 1 === 0 ? `${Math.round(kValue)}K` : `${kValue.toFixed(1)}K`;
93
- }
94
- if (decimals !== void 0) {
95
- return count.toFixed(decimals);
96
- }
97
- if (value !== Math.floor(value)) {
98
- return count.toFixed(1);
99
- }
100
- return Math.round(count).toString();
101
- };
102
- return /* @__PURE__ */ jsxs(
103
- Text,
104
- __spreadProps(__spreadValues({
38
+ return c = requestAnimationFrame(b), () => cancelAnimationFrame(c);
39
+ }, [d, t, s]), /* @__PURE__ */ m(
40
+ N,
41
+ {
105
42
  component: "span",
106
- ref,
107
- style: { fontVariantNumeric: "tabular-nums" }
108
- }, textProps), {
43
+ ref: i,
44
+ style: { fontVariantNumeric: "tabular-nums" },
45
+ ...g,
109
46
  children: [
110
- prefix,
111
- formatValue(),
112
- suffix
47
+ a,
48
+ (() => {
49
+ if (f && t >= 1e3) {
50
+ const u = _ / 1e3;
51
+ return u % 1 === 0 ? `${Math.round(u)}K` : `${u.toFixed(1)}K`;
52
+ }
53
+ return y !== void 0 ? _.toFixed(y) : t !== Math.floor(t) ? _.toFixed(1) : Math.round(_).toString();
54
+ })(),
55
+ o
113
56
  ]
114
- })
57
+ }
115
58
  );
116
59
  }
117
-
118
- // src/AnimatedWaveform/AnimatedWaveform.tsx
119
- import { useEffect as useEffect2, useState as useState2 } from "react";
120
- import { motion } from "framer-motion";
121
-
122
- // src/AnimatedWaveform/AnimatedWaveform.module.css
123
- var AnimatedWaveform_default = {};
124
-
125
- // src/AnimatedWaveform/AnimatedWaveform.tsx
126
- import { jsx, jsxs as jsxs2 } from "react/jsx-runtime";
127
- var BAR_COUNT = 140;
128
- var BAR_WIDTH = 3;
129
- var BAR_GAP = 10;
130
- var VIEW_HEIGHT = 150;
131
- var MIDLINE = VIEW_HEIGHT / 2;
132
- function AnimatedWaveform({
133
- barCount = BAR_COUNT,
134
- duration = 3,
135
- repeatDelay = 3
60
+ const Xe = "_root_1bq7s_1", Ye = "_svg_1bq7s_12", me = {
61
+ root: Xe,
62
+ svg: Ye
63
+ }, Ke = 140, he = 3, pe = 10, Le = 150, V = Le / 2;
64
+ function fe({
65
+ barCount: t = Ke,
66
+ duration: o = 3,
67
+ repeatDelay: a = 3
136
68
  }) {
137
- const [mounted, setMounted] = useState2(false);
138
- useEffect2(() => {
139
- setMounted(true);
140
- }, []);
141
- if (!mounted) return null;
142
- const viewWidth = barCount * BAR_GAP;
143
- return /* @__PURE__ */ jsx("div", { className: AnimatedWaveform_default.root, children: /* @__PURE__ */ jsxs2(
69
+ const [s, r] = z(!1);
70
+ if (P(() => {
71
+ r(!0);
72
+ }, []), !s) return null;
73
+ const f = t * pe;
74
+ return /* @__PURE__ */ e("div", { className: me.root, children: /* @__PURE__ */ m(
144
75
  "svg",
145
76
  {
146
- className: AnimatedWaveform_default.svg,
147
- viewBox: `0 0 ${viewWidth} ${VIEW_HEIGHT}`,
77
+ className: me.svg,
78
+ viewBox: `0 0 ${f} ${Le}`,
148
79
  preserveAspectRatio: "none",
149
80
  children: [
150
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs2("linearGradient", { id: "waveformBarGradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
151
- /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0" }),
152
- /* @__PURE__ */ jsx("stop", { offset: "15%", stopColor: "white", stopOpacity: "0.15" }),
153
- /* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: "white", stopOpacity: "0.25" }),
154
- /* @__PURE__ */ jsx("stop", { offset: "85%", stopColor: "white", stopOpacity: "0.15" }),
155
- /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })
81
+ /* @__PURE__ */ e("defs", { children: /* @__PURE__ */ m("linearGradient", { id: "waveformBarGradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
82
+ /* @__PURE__ */ e("stop", { offset: "0%", stopColor: "white", stopOpacity: "0" }),
83
+ /* @__PURE__ */ e("stop", { offset: "15%", stopColor: "white", stopOpacity: "0.15" }),
84
+ /* @__PURE__ */ e("stop", { offset: "50%", stopColor: "white", stopOpacity: "0.25" }),
85
+ /* @__PURE__ */ e("stop", { offset: "85%", stopColor: "white", stopOpacity: "0.15" }),
86
+ /* @__PURE__ */ e("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })
156
87
  ] }) }),
157
- [...Array(barCount)].map((_, i) => {
158
- const x = i * BAR_GAP;
159
- const baseHeight = 18 + Math.sin(i * 0.4) * 6 + Math.cos(i * 0.7) * 4;
160
- const staggerDelay = Math.min(i, barCount - 1 - i) * 0.04;
161
- return /* @__PURE__ */ jsxs2("g", { children: [
162
- /* @__PURE__ */ jsx(
163
- motion.rect,
88
+ [...Array(t)].map((y, g) => {
89
+ const _ = g * pe, l = 18 + Math.sin(g * 0.4) * 6 + Math.cos(g * 0.7) * 4, d = Math.min(g, t - 1 - g) * 0.04;
90
+ return /* @__PURE__ */ m("g", { children: [
91
+ /* @__PURE__ */ e(
92
+ B.rect,
164
93
  {
165
- x,
166
- width: BAR_WIDTH,
94
+ x: _,
95
+ width: he,
167
96
  rx: "1.5",
168
97
  fill: "url(#waveformBarGradient)",
169
- initial: { height: baseHeight / 2, y: MIDLINE - baseHeight / 4 },
98
+ initial: { height: l / 2, y: V - l / 4 },
170
99
  animate: {
171
- height: [baseHeight / 2, baseHeight * 2, baseHeight / 2, baseHeight * 1.2, baseHeight / 2],
100
+ height: [l / 2, l * 2, l / 2, l * 1.2, l / 2],
172
101
  y: [
173
- MIDLINE - baseHeight / 4,
174
- MIDLINE - baseHeight,
175
- MIDLINE - baseHeight / 4,
176
- MIDLINE - baseHeight * 0.6,
177
- MIDLINE - baseHeight / 4
102
+ V - l / 4,
103
+ V - l,
104
+ V - l / 4,
105
+ V - l * 0.6,
106
+ V - l / 4
178
107
  ]
179
108
  },
180
109
  transition: {
181
- duration,
182
- repeat: Infinity,
110
+ duration: o,
111
+ repeat: 1 / 0,
183
112
  ease: "easeInOut",
184
- delay: staggerDelay,
185
- repeatDelay
113
+ delay: d,
114
+ repeatDelay: a
186
115
  }
187
116
  }
188
117
  ),
189
- /* @__PURE__ */ jsx(
190
- motion.rect,
118
+ /* @__PURE__ */ e(
119
+ B.rect,
191
120
  {
192
- x,
193
- y: MIDLINE,
194
- width: BAR_WIDTH,
121
+ x: _,
122
+ y: V,
123
+ width: he,
195
124
  rx: "1.5",
196
125
  fill: "url(#waveformBarGradient)",
197
- initial: { height: baseHeight / 2 },
126
+ initial: { height: l / 2 },
198
127
  animate: {
199
- height: [baseHeight / 2, baseHeight * 2, baseHeight / 2, baseHeight * 1.2, baseHeight / 2]
128
+ height: [l / 2, l * 2, l / 2, l * 1.2, l / 2]
200
129
  },
201
130
  transition: {
202
- duration,
203
- repeat: Infinity,
131
+ duration: o,
132
+ repeat: 1 / 0,
204
133
  ease: "easeInOut",
205
- delay: staggerDelay,
206
- repeatDelay
134
+ delay: d,
135
+ repeatDelay: a
207
136
  }
208
137
  }
209
138
  )
210
- ] }, i);
139
+ ] }, g);
211
140
  })
212
141
  ]
213
142
  }
214
143
  ) });
215
144
  }
216
-
217
- // src/AudioPlayer/AudioPlayer.tsx
218
- import { useRef as useRef3, useState as useState4, useEffect as useEffect4, useCallback as useCallback2 } from "react";
219
- import { ActionIcon, Group, Text as Text2, Slider, Box as Box2 } from "@mantine/core";
220
- import {
221
- IconPlayerPlayFilled,
222
- IconPlayerPauseFilled,
223
- IconVolume,
224
- IconVolumeOff,
225
- IconDownload
226
- } from "@tabler/icons-react";
227
-
228
- // src/AudioWaveform/AudioWaveform.tsx
229
- import { useRef as useRef2, useImperativeHandle, forwardRef, useEffect as useEffect3, useState as useState3, useCallback } from "react";
230
- import { Box } from "@mantine/core";
231
-
232
- // src/AudioWaveform/AudioWaveform.module.css
233
- var AudioWaveform_default = {};
234
-
235
- // src/AudioWaveform/AudioWaveform.tsx
236
- import { jsx as jsx2, jsxs as jsxs3 } from "react/jsx-runtime";
237
- function generateWaveformData(barCount = 100) {
238
- const data = [];
239
- for (let i = 0; i < barCount; i++) {
240
- const progress = i / (barCount - 1);
241
- const baseHeight = 20 + Math.sin(i * 0.1) * 15;
242
- const noise = (Math.random() - 0.5) * 20;
243
- const envelope = Math.sin(progress * Math.PI) * 30;
244
- const midBoost = progress > 0.2 && progress < 0.8 ? Math.random() * 10 : 0;
245
- const endTaper = progress < 0.05 || progress > 0.95 ? Math.min(progress / 0.05, (1 - progress) / 0.05) : 1;
246
- data.push(Math.max(5, Math.min(90, (baseHeight + noise + envelope + midBoost) * endTaper)));
145
+ const Je = "_root_1pkxe_1", Qe = "_progressOverlay_1pkxe_9", Ze = "_bars_1pkxe_19", et = "_bar_1pkxe_19", tt = "_loading_1pkxe_34", J = {
146
+ root: Je,
147
+ progressOverlay: Qe,
148
+ bars: Ze,
149
+ bar: et,
150
+ loading: tt
151
+ };
152
+ function nt(t = 100) {
153
+ const o = [];
154
+ for (let a = 0; a < t; a++) {
155
+ const s = a / (t - 1), r = 20 + Math.sin(a * 0.1) * 15, f = (Math.random() - 0.5) * 20, y = Math.sin(s * Math.PI) * 30, g = s > 0.2 && s < 0.8 ? Math.random() * 10 : 0, _ = s < 0.05 || s > 0.95 ? Math.min(s / 0.05, (1 - s) / 0.05) : 1;
156
+ o.push(Math.max(5, Math.min(90, (r + f + y + g) * _)));
247
157
  }
248
- return data;
158
+ return o;
249
159
  }
250
- var AudioWaveform = forwardRef(
160
+ const le = xe(
251
161
  ({
252
- audioRef,
253
- currentTime = 0,
254
- onSeek,
255
- loading = false,
256
- waveColor = "#CCCCCC",
257
- progressColor = "#169bde",
258
- height = 60,
259
- barWidth = 2,
260
- barGap = 1
261
- }, ref) => {
262
- const containerRef = useRef2(null);
263
- const [waveformData] = useState3(() => generateWaveformData());
264
- const [duration, setDuration] = useState3(0);
265
- const [progress, setProgress] = useState3(0);
266
- useImperativeHandle(ref, () => ({
267
- seekTo: (time) => {
268
- if (duration > 0) {
269
- setProgress(Math.max(0, Math.min(100, time / duration * 100)));
270
- }
162
+ audioRef: t,
163
+ currentTime: o = 0,
164
+ onSeek: a,
165
+ loading: s = !1,
166
+ waveColor: r = "#CCCCCC",
167
+ progressColor: f = "#169bde",
168
+ height: y = 60,
169
+ barWidth: g = 2,
170
+ barGap: _ = 1
171
+ }, l) => {
172
+ const d = D(null), [w] = z(() => nt()), [i, v] = z(0), [u, c] = z(0);
173
+ Be(l, () => ({
174
+ seekTo: (n) => {
175
+ i > 0 && c(Math.max(0, Math.min(100, n / i * 100)));
271
176
  },
272
- getCurrentTime: () => progress / 100 * duration,
273
- getDuration: () => duration
274
- }));
275
- useEffect3(() => {
276
- const audio = audioRef.current;
277
- if (!audio) return;
278
- const handleMeta = () => {
279
- if (audio.duration && !isNaN(audio.duration)) setDuration(audio.duration);
280
- };
281
- const handleTime = () => {
282
- if (audio.duration > 0) setProgress(audio.currentTime / audio.duration * 100);
177
+ getCurrentTime: () => u / 100 * i,
178
+ getDuration: () => i
179
+ })), P(() => {
180
+ const n = t.current;
181
+ if (!n) return;
182
+ const p = () => {
183
+ n.duration && !isNaN(n.duration) && v(n.duration);
184
+ }, I = () => {
185
+ n.duration > 0 && c(n.currentTime / n.duration * 100);
283
186
  };
284
- if (audio.duration && !isNaN(audio.duration)) setDuration(audio.duration);
285
- audio.addEventListener("loadedmetadata", handleMeta);
286
- audio.addEventListener("timeupdate", handleTime);
287
- return () => {
288
- audio.removeEventListener("loadedmetadata", handleMeta);
289
- audio.removeEventListener("timeupdate", handleTime);
187
+ return n.duration && !isNaN(n.duration) && v(n.duration), n.addEventListener("loadedmetadata", p), n.addEventListener("timeupdate", I), () => {
188
+ n.removeEventListener("loadedmetadata", p), n.removeEventListener("timeupdate", I);
290
189
  };
291
- }, [audioRef]);
292
- useEffect3(() => {
293
- if (duration > 0 && typeof currentTime === "number") {
294
- setProgress(currentTime / duration * 100);
295
- }
296
- }, [currentTime, duration]);
297
- const handleClick = useCallback(
298
- (e) => {
299
- if (!containerRef.current || !onSeek || duration === 0) return;
300
- const rect = containerRef.current.getBoundingClientRect();
301
- const seekTime = (e.clientX - rect.left) / rect.width * duration;
302
- onSeek(seekTime);
190
+ }, [t]), P(() => {
191
+ i > 0 && typeof o == "number" && c(o / i * 100);
192
+ }, [o, i]);
193
+ const b = S(
194
+ (n) => {
195
+ if (!d.current || !a || i === 0) return;
196
+ const p = d.current.getBoundingClientRect(), I = (n.clientX - p.left) / p.width * i;
197
+ a(I);
303
198
  },
304
- [onSeek, duration]
199
+ [a, i]
305
200
  );
306
- return /* @__PURE__ */ jsxs3(
307
- Box,
201
+ return /* @__PURE__ */ m(
202
+ k,
308
203
  {
309
- ref: containerRef,
310
- className: AudioWaveform_default.root,
311
- style: { height },
312
- onClick: handleClick,
204
+ ref: d,
205
+ className: J.root,
206
+ style: { height: y },
207
+ onClick: b,
313
208
  children: [
314
- /* @__PURE__ */ jsx2(
209
+ /* @__PURE__ */ e(
315
210
  "div",
316
211
  {
317
- className: AudioWaveform_default.progressOverlay,
318
- style: { width: `${progress}%`, backgroundColor: `${progressColor}15` }
212
+ className: J.progressOverlay,
213
+ style: { width: `${u}%`, backgroundColor: `${f}15` }
319
214
  }
320
215
  ),
321
- /* @__PURE__ */ jsx2("div", { className: AudioWaveform_default.bars, style: { gap: barGap }, children: waveformData.map((barHeight, i) => {
322
- const isActive = i / waveformData.length * 100 <= progress;
323
- return /* @__PURE__ */ jsx2(
216
+ /* @__PURE__ */ e("div", { className: J.bars, style: { gap: _ }, children: w.map((n, p) => {
217
+ const I = p / w.length * 100 <= u;
218
+ return /* @__PURE__ */ e(
324
219
  "div",
325
220
  {
326
- className: AudioWaveform_default.bar,
221
+ className: J.bar,
327
222
  style: {
328
- width: barWidth,
329
- height: `${barHeight}%`,
330
- backgroundColor: isActive ? progressColor : waveColor
223
+ width: g,
224
+ height: `${n}%`,
225
+ backgroundColor: I ? f : r
331
226
  }
332
227
  },
333
- i
228
+ p
334
229
  );
335
230
  }) }),
336
- loading && /* @__PURE__ */ jsx2("div", { className: AudioWaveform_default.loading, children: "Loading waveform..." })
231
+ s && /* @__PURE__ */ e("div", { className: J.loading, children: "Loading waveform..." })
337
232
  ]
338
233
  }
339
234
  );
340
235
  }
341
236
  );
342
- AudioWaveform.displayName = "AudioWaveform";
343
-
344
- // src/AudioPlayer/AudioPlayer.module.css
345
- var AudioPlayer_default = {};
346
-
347
- // src/AudioPlayer/AudioPlayer.tsx
348
- import { jsx as jsx3, jsxs as jsxs4 } from "react/jsx-runtime";
349
- function formatTime(seconds) {
350
- const m = Math.floor(seconds / 60);
351
- const s = Math.floor(seconds % 60);
352
- return `${m.toString().padStart(2, "0")}:${s.toString().padStart(2, "0")}`;
237
+ le.displayName = "AudioWaveform";
238
+ const ot = "_root_n9zxy_1", st = "_playButton_n9zxy_8", at = "_time_n9zxy_22", it = "_volumeGroup_n9zxy_28", Q = {
239
+ root: ot,
240
+ playButton: st,
241
+ time: at,
242
+ volumeGroup: it
243
+ };
244
+ function se(t) {
245
+ const o = Math.floor(t / 60), a = Math.floor(t % 60);
246
+ return `${o.toString().padStart(2, "0")}:${a.toString().padStart(2, "0")}`;
353
247
  }
354
- function AudioPlayer({
355
- src,
356
- filename = "audio",
357
- playButtonColor,
358
- playButtonSize = 32,
359
- waveColor = "#D0D0D0",
360
- progressColor = "#a8a8a8",
361
- waveHeight = 64,
362
- barWidth = 3,
363
- barGap = 2,
364
- showVolume = true,
365
- showDownload = true
248
+ function kn({
249
+ src: t,
250
+ filename: o = "audio",
251
+ playButtonColor: a,
252
+ playButtonSize: s = 32,
253
+ waveColor: r = "#D0D0D0",
254
+ progressColor: f = "#a8a8a8",
255
+ waveHeight: y = 64,
256
+ barWidth: g = 3,
257
+ barGap: _ = 2,
258
+ showVolume: l = !0,
259
+ showDownload: d = !0
366
260
  }) {
367
- const audioRef = useRef3(null);
368
- const [isPlaying, setIsPlaying] = useState4(false);
369
- const [currentTime, setCurrentTime] = useState4(0);
370
- const [currentTimeFormatted, setCurrentTimeFormatted] = useState4("00:00");
371
- const [totalDuration, setTotalDuration] = useState4("00:00");
372
- const [volume, setVolume] = useState4(50);
373
- const [prevVolume, setPrevVolume] = useState4(50);
374
- const [isMuted, setIsMuted] = useState4(false);
375
- useEffect4(() => {
376
- const audio = audioRef.current;
377
- if (!audio) return;
378
- audio.volume = volume / 100;
379
- const handleTimeUpdate = () => {
380
- setCurrentTime(audio.currentTime);
381
- setCurrentTimeFormatted(formatTime(audio.currentTime));
382
- };
383
- const handleMeta = () => setTotalDuration(formatTime(audio.duration));
384
- const handleEnded = () => {
261
+ const w = D(null), [i, v] = z(!1), [u, c] = z(0), [b, n] = z("00:00"), [p, I] = z("00:00"), [T, R] = z(50), [A, j] = z(50), [C, M] = z(!1);
262
+ P(() => {
263
+ const h = w.current;
264
+ if (!h) return;
265
+ h.volume = T / 100;
266
+ const x = () => {
267
+ c(h.currentTime), n(se(h.currentTime));
268
+ }, L = () => I(se(h.duration)), X = () => {
385
269
  setTimeout(() => {
386
- setCurrentTime(0);
387
- setCurrentTimeFormatted("00:00");
388
- setIsPlaying(false);
270
+ c(0), n("00:00"), v(!1);
389
271
  }, 500);
272
+ }, Z = () => v(!0), ee = () => v(!1);
273
+ return h.addEventListener("timeupdate", x), h.addEventListener("loadedmetadata", L), h.addEventListener("ended", X), h.addEventListener("play", Z), h.addEventListener("pause", ee), () => {
274
+ h.removeEventListener("timeupdate", x), h.removeEventListener("loadedmetadata", L), h.removeEventListener("ended", X), h.removeEventListener("play", Z), h.removeEventListener("pause", ee);
390
275
  };
391
- const handlePlay = () => setIsPlaying(true);
392
- const handlePause = () => setIsPlaying(false);
393
- audio.addEventListener("timeupdate", handleTimeUpdate);
394
- audio.addEventListener("loadedmetadata", handleMeta);
395
- audio.addEventListener("ended", handleEnded);
396
- audio.addEventListener("play", handlePlay);
397
- audio.addEventListener("pause", handlePause);
398
- return () => {
399
- audio.removeEventListener("timeupdate", handleTimeUpdate);
400
- audio.removeEventListener("loadedmetadata", handleMeta);
401
- audio.removeEventListener("ended", handleEnded);
402
- audio.removeEventListener("play", handlePlay);
403
- audio.removeEventListener("pause", handlePause);
404
- };
405
- }, [src]);
406
- const togglePlay = useCallback2(() => {
407
- const audio = audioRef.current;
408
- if (!audio) return;
409
- if (isPlaying) {
410
- audio.pause();
411
- } else {
412
- audio.play().catch(() => {
413
- });
414
- }
415
- }, [isPlaying]);
416
- const handleSeek = useCallback2((time) => {
417
- const audio = audioRef.current;
418
- if (audio && !isNaN(time) && isFinite(time)) {
419
- audio.currentTime = time;
420
- setCurrentTime(time);
421
- setCurrentTimeFormatted(formatTime(time));
422
- }
423
- }, []);
424
- const handleVolumeChange = useCallback2(
425
- (value) => {
426
- const audio = audioRef.current;
427
- if (!audio) return;
428
- audio.volume = value / 100;
429
- setVolume(value);
430
- if (value > 0) {
431
- setPrevVolume(value);
432
- setIsMuted(false);
433
- } else {
434
- setIsMuted(true);
435
- }
276
+ }, [t]);
277
+ const E = S(() => {
278
+ const h = w.current;
279
+ h && (i ? h.pause() : h.play().catch(() => {
280
+ }));
281
+ }, [i]), G = S((h) => {
282
+ const x = w.current;
283
+ x && !isNaN(h) && isFinite(h) && (x.currentTime = h, c(h), n(se(h)));
284
+ }, []), O = S(
285
+ (h) => {
286
+ const x = w.current;
287
+ x && (x.volume = h / 100, R(h), h > 0 ? (j(h), M(!1)) : M(!0));
436
288
  },
437
289
  []
438
- );
439
- const toggleMute = useCallback2(() => {
440
- const audio = audioRef.current;
441
- if (!audio) return;
442
- if (isMuted) {
443
- const restore = prevVolume || 50;
444
- audio.volume = restore / 100;
445
- setVolume(restore);
446
- setIsMuted(false);
447
- } else {
448
- setPrevVolume(volume);
449
- audio.volume = 0;
450
- setVolume(0);
451
- setIsMuted(true);
452
- }
453
- }, [isMuted, volume, prevVolume]);
454
- const handleDownload = useCallback2(() => {
455
- fetch(src).then((r) => r.blob()).then((blob) => {
456
- const url = URL.createObjectURL(blob);
457
- const a = document.createElement("a");
458
- a.href = url;
459
- a.download = filename;
460
- document.body.appendChild(a);
461
- a.click();
462
- document.body.removeChild(a);
463
- URL.revokeObjectURL(url);
464
- }).catch(() => window.open(src, "_blank"));
465
- }, [src, filename]);
466
- return /* @__PURE__ */ jsxs4(Group, { gap: "sm", wrap: "nowrap", className: AudioPlayer_default.root, children: [
467
- /* @__PURE__ */ jsx3("audio", { ref: audioRef, src, preload: "metadata" }),
468
- /* @__PURE__ */ jsx3(
469
- ActionIcon,
290
+ ), H = S(() => {
291
+ const h = w.current;
292
+ if (h)
293
+ if (C) {
294
+ const x = A || 50;
295
+ h.volume = x / 100, R(x), M(!1);
296
+ } else
297
+ j(T), h.volume = 0, R(0), M(!0);
298
+ }, [C, T, A]), K = S(() => {
299
+ fetch(t).then((h) => h.blob()).then((h) => {
300
+ const x = URL.createObjectURL(h), L = document.createElement("a");
301
+ L.href = x, L.download = o, document.body.appendChild(L), L.click(), document.body.removeChild(L), URL.revokeObjectURL(x);
302
+ }).catch(() => window.open(t, "_blank"));
303
+ }, [t, o]);
304
+ return /* @__PURE__ */ m(F, { gap: "sm", wrap: "nowrap", className: Q.root, children: [
305
+ /* @__PURE__ */ e("audio", { ref: w, src: t, preload: "metadata" }),
306
+ /* @__PURE__ */ e(
307
+ Y,
470
308
  {
471
309
  variant: "filled",
472
310
  radius: "xl",
473
- size: playButtonSize,
474
- color: playButtonColor,
475
- onClick: togglePlay,
476
- "aria-label": isPlaying ? "Pause" : "Play",
477
- className: AudioPlayer_default.playButton,
478
- children: isPlaying ? /* @__PURE__ */ jsx3(IconPlayerPauseFilled, { size: playButtonSize * 0.5 }) : /* @__PURE__ */ jsx3(IconPlayerPlayFilled, { size: playButtonSize * 0.5 })
311
+ size: s,
312
+ color: a,
313
+ onClick: E,
314
+ "aria-label": i ? "Pause" : "Play",
315
+ className: Q.playButton,
316
+ children: i ? /* @__PURE__ */ e(Ce, { size: s * 0.5 }) : /* @__PURE__ */ e(ke, { size: s * 0.5 })
479
317
  }
480
318
  ),
481
- /* @__PURE__ */ jsx3(Text2, { size: "xs", ff: "monospace", c: "dimmed", className: AudioPlayer_default.time, children: currentTimeFormatted }),
482
- /* @__PURE__ */ jsx3(Box2, { style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ jsx3(
483
- AudioWaveform,
319
+ /* @__PURE__ */ e(N, { size: "xs", ff: "monospace", c: "dimmed", className: Q.time, children: b }),
320
+ /* @__PURE__ */ e(k, { style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ e(
321
+ le,
484
322
  {
485
- audioRef,
486
- currentTime,
487
- onSeek: handleSeek,
488
- waveColor,
489
- progressColor,
490
- height: waveHeight,
491
- barWidth,
492
- barGap
323
+ audioRef: w,
324
+ currentTime: u,
325
+ onSeek: G,
326
+ waveColor: r,
327
+ progressColor: f,
328
+ height: y,
329
+ barWidth: g,
330
+ barGap: _
493
331
  }
494
332
  ) }),
495
- /* @__PURE__ */ jsx3(Text2, { size: "xs", ff: "monospace", c: "dimmed", className: AudioPlayer_default.time, children: totalDuration }),
496
- showVolume && /* @__PURE__ */ jsxs4(Group, { gap: 4, wrap: "nowrap", className: AudioPlayer_default.volumeGroup, children: [
497
- /* @__PURE__ */ jsx3(
498
- ActionIcon,
333
+ /* @__PURE__ */ e(N, { size: "xs", ff: "monospace", c: "dimmed", className: Q.time, children: p }),
334
+ l && /* @__PURE__ */ m(F, { gap: 4, wrap: "nowrap", className: Q.volumeGroup, children: [
335
+ /* @__PURE__ */ e(
336
+ Y,
499
337
  {
500
338
  variant: "subtle",
501
339
  size: "sm",
502
- onClick: toggleMute,
503
- "aria-label": isMuted ? "Unmute" : "Mute",
504
- children: isMuted ? /* @__PURE__ */ jsx3(IconVolumeOff, { size: 16 }) : /* @__PURE__ */ jsx3(IconVolume, { size: 16 })
340
+ onClick: H,
341
+ "aria-label": C ? "Unmute" : "Mute",
342
+ children: C ? /* @__PURE__ */ e(Ge, { size: 16 }) : /* @__PURE__ */ e(Re, { size: 16 })
505
343
  }
506
344
  ),
507
- /* @__PURE__ */ jsx3(
508
- Slider,
345
+ /* @__PURE__ */ e(
346
+ Se,
509
347
  {
510
- value: volume,
511
- onChange: handleVolumeChange,
348
+ value: T,
349
+ onChange: O,
512
350
  size: "xs",
513
351
  w: 80,
514
352
  "aria-label": "Volume"
515
353
  }
516
354
  )
517
355
  ] }),
518
- showDownload && /* @__PURE__ */ jsx3(ActionIcon, { variant: "subtle", size: "sm", onClick: handleDownload, "aria-label": "Download", children: /* @__PURE__ */ jsx3(IconDownload, { size: 16 }) })
356
+ d && /* @__PURE__ */ e(Y, { variant: "subtle", size: "sm", onClick: K, "aria-label": "Download", children: /* @__PURE__ */ e(Ae, { size: 16 }) })
519
357
  ] });
520
358
  }
521
-
522
- // src/CodeBlock/CodeBlock.tsx
523
- import { useState as useState5, useCallback as useCallback3 } from "react";
524
- import { Box as Box3, Button, Group as Group2, Text as Text3 } from "@mantine/core";
525
-
526
- // src/CodeBlock/CodeBlock.module.css
527
- var CodeBlock_default = {};
528
-
529
- // src/CodeBlock/CodeBlock.tsx
530
- import { jsx as jsx4, jsxs as jsxs5 } from "react/jsx-runtime";
531
- function CodeBlock({ code, filename, height = 384 }) {
532
- const [copied, setCopied] = useState5(false);
533
- const handleCopy = useCallback3(async () => {
359
+ const rt = "_root_ujac8_1", ct = "_textarea_ujac8_5", _e = {
360
+ root: rt,
361
+ textarea: ct
362
+ };
363
+ function Ln({ code: t, filename: o, height: a = 384 }) {
364
+ const [s, r] = z(!1), f = S(async () => {
534
365
  try {
535
- await navigator.clipboard.writeText(code);
536
- setCopied(true);
537
- setTimeout(() => setCopied(false), 2e3);
538
- } catch (e) {
366
+ await navigator.clipboard.writeText(t), r(!0), setTimeout(() => r(!1), 2e3);
367
+ } catch {
539
368
  }
540
- }, [code]);
541
- return /* @__PURE__ */ jsxs5(Box3, { className: CodeBlock_default.root, children: [
542
- /* @__PURE__ */ jsxs5(Group2, { justify: "space-between", mb: "xs", children: [
543
- filename && /* @__PURE__ */ jsx4(Text3, { size: "sm", fw: 500, c: "dimmed", children: filename }),
544
- /* @__PURE__ */ jsx4(
545
- Button,
369
+ }, [t]);
370
+ return /* @__PURE__ */ m(k, { className: _e.root, children: [
371
+ /* @__PURE__ */ m(F, { justify: "space-between", mb: "xs", children: [
372
+ o && /* @__PURE__ */ e(N, { size: "sm", fw: 500, c: "dimmed", children: o }),
373
+ /* @__PURE__ */ e(
374
+ re,
546
375
  {
547
376
  size: "xs",
548
377
  radius: "md",
549
- color: copied ? "green" : "blue",
550
- onClick: handleCopy,
551
- children: copied ? "Copied!" : "Copy"
378
+ color: s ? "green" : "blue",
379
+ onClick: f,
380
+ children: s ? "Copied!" : "Copy"
552
381
  }
553
382
  )
554
383
  ] }),
555
- /* @__PURE__ */ jsx4(
384
+ /* @__PURE__ */ e(
556
385
  "textarea",
557
386
  {
558
- readOnly: true,
559
- value: code,
560
- className: CodeBlock_default.textarea,
561
- style: { height }
387
+ readOnly: !0,
388
+ value: t,
389
+ className: _e.textarea,
390
+ style: { height: a }
562
391
  }
563
392
  )
564
393
  ] });
565
394
  }
566
-
567
- // src/ColorPalette/ColorPalette.tsx
568
- import { SimpleGrid, Text as Text4, Title } from "@mantine/core";
569
-
570
- // src/Copyable/Copyable.tsx
571
- import { useState as useState6, useCallback as useCallback4 } from "react";
572
- import { Notification, Portal } from "@mantine/core";
573
-
574
- // src/Copyable/Copyable.module.css
575
- var Copyable_default = {};
576
-
577
- // src/Copyable/Copyable.tsx
578
- import { Fragment, jsx as jsx5, jsxs as jsxs6 } from "react/jsx-runtime";
579
- function Copyable({ value, children }) {
580
- const [toast, setToast] = useState6(null);
581
- const handleCopy = useCallback4(() => {
582
- navigator.clipboard.writeText(value).then(() => {
583
- setToast(`Copied ${value}`);
584
- setTimeout(() => setToast(null), 1800);
395
+ const lt = "_root_ix1b2_1", dt = "_toast_ix1b2_5", ve = {
396
+ root: lt,
397
+ toast: dt
398
+ };
399
+ function de({ value: t, children: o }) {
400
+ const [a, s] = z(null), r = S(() => {
401
+ navigator.clipboard.writeText(t).then(() => {
402
+ s(`Copied ${t}`), setTimeout(() => s(null), 1800);
585
403
  });
586
- }, [value]);
587
- return /* @__PURE__ */ jsxs6(Fragment, { children: [
588
- /* @__PURE__ */ jsx5(
404
+ }, [t]);
405
+ return /* @__PURE__ */ m(ze, { children: [
406
+ /* @__PURE__ */ e(
589
407
  "span",
590
408
  {
591
- onClick: handleCopy,
592
- className: Copyable_default.root,
593
- title: `Click to copy ${value}`,
594
- children
409
+ onClick: r,
410
+ className: ve.root,
411
+ title: `Click to copy ${t}`,
412
+ children: o
595
413
  }
596
414
  ),
597
- toast && /* @__PURE__ */ jsx5(Portal, { children: /* @__PURE__ */ jsx5(
598
- Notification,
415
+ a && /* @__PURE__ */ e(Te, { children: /* @__PURE__ */ e(
416
+ Pe,
599
417
  {
600
- withCloseButton: false,
601
- className: Copyable_default.toast,
418
+ withCloseButton: !1,
419
+ className: ve.toast,
602
420
  color: "blue",
603
- children: toast
421
+ children: a
604
422
  }
605
423
  ) })
606
424
  ] });
607
425
  }
608
-
609
- // src/ColorPalette/ColorPalette.module.css
610
- var ColorPalette_default = {};
611
-
612
- // src/ColorPalette/ColorPalette.tsx
613
- import { jsx as jsx6, jsxs as jsxs7 } from "react/jsx-runtime";
614
- function ColorPalette({ name, shades, mainIndex = 5 }) {
615
- return /* @__PURE__ */ jsxs7("div", { className: ColorPalette_default.root, children: [
616
- /* @__PURE__ */ jsx6(Title, { order: 4, size: "lg", tt: "capitalize", mb: "xs", children: name }),
617
- /* @__PURE__ */ jsx6(SimpleGrid, { cols: 10, spacing: 4, children: shades.map((hex, i) => /* @__PURE__ */ jsx6(Copyable, { value: hex, children: /* @__PURE__ */ jsxs7("div", { className: ColorPalette_default.shade, children: [
618
- /* @__PURE__ */ jsx6(
426
+ const ut = "_root_3ht5s_1", mt = "_shade_3ht5s_5", ht = "_color_3ht5s_10", pt = "_main_3ht5s_20", te = {
427
+ root: ut,
428
+ shade: mt,
429
+ color: ht,
430
+ main: pt
431
+ };
432
+ function Bn({ name: t, shades: o, mainIndex: a = 5 }) {
433
+ return /* @__PURE__ */ m("div", { className: te.root, children: [
434
+ /* @__PURE__ */ e(oe, { order: 4, size: "lg", tt: "capitalize", mb: "xs", children: t }),
435
+ /* @__PURE__ */ e(Me, { cols: 10, spacing: 4, children: o.map((s, r) => /* @__PURE__ */ e(de, { value: s, children: /* @__PURE__ */ m("div", { className: te.shade, children: [
436
+ /* @__PURE__ */ e(
619
437
  "div",
620
438
  {
621
- className: `${ColorPalette_default.color} ${i === mainIndex ? ColorPalette_default.main : ""}`,
622
- style: { backgroundColor: hex }
439
+ className: `${te.color} ${r === a ? te.main : ""}`,
440
+ style: { backgroundColor: s }
623
441
  }
624
442
  ),
625
- /* @__PURE__ */ jsx6(Text4, { size: "xs", c: "dimmed", ta: "center", mt: 4, children: i }),
626
- /* @__PURE__ */ jsx6(Text4, { size: "xs", c: "dimmed", ta: "center", ff: "monospace", children: hex })
627
- ] }) }, i)) })
443
+ /* @__PURE__ */ e(N, { size: "xs", c: "dimmed", ta: "center", mt: 4, children: r }),
444
+ /* @__PURE__ */ e(N, { size: "xs", c: "dimmed", ta: "center", ff: "monospace", children: s })
445
+ ] }) }, r)) })
628
446
  ] });
629
447
  }
630
-
631
- // src/ColorSwatch/ColorSwatch.tsx
632
- import { Paper, Text as Text5 } from "@mantine/core";
633
-
634
- // src/ColorSwatch/ColorSwatch.module.css
635
- var ColorSwatch_default = {};
636
-
637
- // src/ColorSwatch/ColorSwatch.tsx
638
- import { jsx as jsx7, jsxs as jsxs8 } from "react/jsx-runtime";
639
- function ColorSwatch({ name, hex, label }) {
640
- return /* @__PURE__ */ jsx7(Copyable, { value: hex, children: /* @__PURE__ */ jsxs8(Paper, { className: ColorSwatch_default.root, shadow: "lg", radius: "md", withBorder: false, children: [
641
- /* @__PURE__ */ jsx7("div", { className: ColorSwatch_default.preview, style: { backgroundColor: hex } }),
642
- /* @__PURE__ */ jsxs8("div", { className: ColorSwatch_default.info, children: [
643
- /* @__PURE__ */ jsx7(Text5, { fw: 600, size: "sm", children: name }),
644
- /* @__PURE__ */ jsx7(Text5, { size: "xs", c: "dimmed", ff: "monospace", children: hex }),
645
- label && /* @__PURE__ */ jsx7(Text5, { size: "xs", c: "dimmed", children: label })
448
+ const ft = "_root_1vxkx_1", _t = "_preview_1vxkx_11", vt = "_info_1vxkx_15", ae = {
449
+ root: ft,
450
+ preview: _t,
451
+ info: vt
452
+ };
453
+ function Sn({ name: t, hex: o, label: a }) {
454
+ return /* @__PURE__ */ e(de, { value: o, children: /* @__PURE__ */ m(U, { className: ae.root, shadow: "lg", radius: "md", withBorder: !1, children: [
455
+ /* @__PURE__ */ e("div", { className: ae.preview, style: { backgroundColor: o } }),
456
+ /* @__PURE__ */ m("div", { className: ae.info, children: [
457
+ /* @__PURE__ */ e(N, { fw: 600, size: "sm", children: t }),
458
+ /* @__PURE__ */ e(N, { size: "xs", c: "dimmed", ff: "monospace", children: o }),
459
+ a && /* @__PURE__ */ e(N, { size: "xs", c: "dimmed", children: a })
646
460
  ] })
647
461
  ] }) });
648
462
  }
649
-
650
- // src/DosDonts/DosDonts.tsx
651
- import { SimpleGrid as SimpleGrid2, Paper as Paper2, Text as Text6, Group as Group3 } from "@mantine/core";
652
- import { IconCheck, IconX } from "@tabler/icons-react";
653
-
654
- // src/DosDonts/DosDonts.module.css
655
- var DosDonts_default = {};
656
-
657
- // src/DosDonts/DosDonts.tsx
658
- import { jsx as jsx8, jsxs as jsxs9 } from "react/jsx-runtime";
659
- function DosDonts({ items }) {
660
- return /* @__PURE__ */ jsx8("div", { className: DosDonts_default.root, children: items.map((item, i) => /* @__PURE__ */ jsxs9(SimpleGrid2, { cols: { base: 1, sm: 2 }, spacing: "md", children: [
661
- /* @__PURE__ */ jsxs9(Paper2, { className: DosDonts_default.dont, p: "md", radius: "md", children: [
662
- /* @__PURE__ */ jsxs9(Group3, { gap: 6, mb: 6, children: [
663
- /* @__PURE__ */ jsx8(IconX, { size: 16, className: DosDonts_default.dontIcon }),
664
- /* @__PURE__ */ jsx8(Text6, { size: "sm", fw: 600, className: DosDonts_default.dontLabel, children: "Don't" })
463
+ const gt = "_root_dzed6_1", yt = "_dont_dzed6_7", bt = "_dontIcon_dzed6_12", wt = "_dontLabel_dzed6_13", Nt = "_doIcon_dzed6_22", It = "_doLabel_dzed6_23", q = {
464
+ root: gt,
465
+ dont: yt,
466
+ dontIcon: bt,
467
+ dontLabel: wt,
468
+ do: "_do_dzed6_7",
469
+ doIcon: Nt,
470
+ doLabel: It
471
+ };
472
+ function Tn({ items: t }) {
473
+ return /* @__PURE__ */ e("div", { className: q.root, children: t.map((o, a) => /* @__PURE__ */ m(Me, { cols: { base: 1, sm: 2 }, spacing: "md", children: [
474
+ /* @__PURE__ */ m(U, { className: q.dont, p: "md", radius: "md", children: [
475
+ /* @__PURE__ */ m(F, { gap: 6, mb: 6, children: [
476
+ /* @__PURE__ */ e(Oe, { size: 16, className: q.dontIcon }),
477
+ /* @__PURE__ */ e(N, { size: "sm", fw: 600, className: q.dontLabel, children: "Don't" })
665
478
  ] }),
666
- /* @__PURE__ */ jsx8(Text6, { size: "sm", children: item.dont })
479
+ /* @__PURE__ */ e(N, { size: "sm", children: o.dont })
667
480
  ] }),
668
- /* @__PURE__ */ jsxs9(Paper2, { className: DosDonts_default.do, p: "md", radius: "md", children: [
669
- /* @__PURE__ */ jsxs9(Group3, { gap: 6, mb: 6, children: [
670
- /* @__PURE__ */ jsx8(IconCheck, { size: 16, className: DosDonts_default.doIcon }),
671
- /* @__PURE__ */ jsx8(Text6, { size: "sm", fw: 600, className: DosDonts_default.doLabel, children: "Do" })
481
+ /* @__PURE__ */ m(U, { className: q.do, p: "md", radius: "md", children: [
482
+ /* @__PURE__ */ m(F, { gap: 6, mb: 6, children: [
483
+ /* @__PURE__ */ e(He, { size: 16, className: q.doIcon }),
484
+ /* @__PURE__ */ e(N, { size: "sm", fw: 600, className: q.doLabel, children: "Do" })
672
485
  ] }),
673
- /* @__PURE__ */ jsx8(Text6, { size: "sm", children: item.do })
486
+ /* @__PURE__ */ e(N, { size: "sm", children: o.do })
674
487
  ] })
675
- ] }, i)) });
488
+ ] }, a)) });
676
489
  }
677
-
678
- // src/ExpandableCard/ExpandableCard.tsx
679
- import { useEffect as useEffect5, useRef as useRef4, useState as useState7 } from "react";
680
- import { Paper as Paper3, Group as Group4, Stack, Text as Text7, ThemeIcon } from "@mantine/core";
681
- import { motion as motion2 } from "framer-motion";
682
-
683
- // src/ExpandableCard/ExpandableCard.module.css
684
- var ExpandableCard_default = {};
685
-
686
- // src/ExpandableCard/ExpandableCard.tsx
687
- import { jsx as jsx9, jsxs as jsxs10 } from "react/jsx-runtime";
688
- function ExpandableCard({
689
- title,
690
- description,
691
- expandedContent,
692
- icon: Icon,
693
- color = "blue",
694
- iconSize = "lg",
695
- collapsedHeight = 120,
696
- threshold = 0.5,
697
- delay = 300,
698
- expanded: controlledExpanded,
699
- onExpandedChange
490
+ const zt = "_root_xi08i_1", xt = "_inner_xi08i_6", ge = {
491
+ root: zt,
492
+ inner: xt
493
+ };
494
+ function Pn({
495
+ title: t,
496
+ description: o,
497
+ expandedContent: a,
498
+ icon: s,
499
+ color: r = "blue",
500
+ iconSize: f = "lg",
501
+ collapsedHeight: y = 120,
502
+ threshold: g = 0.5,
503
+ delay: _ = 300,
504
+ expanded: l,
505
+ onExpandedChange: d
700
506
  }) {
701
- const ref = useRef4(null);
702
- const [internalExpanded, setInternalExpanded] = useState7(false);
703
- const isControlled = controlledExpanded !== void 0;
704
- const isExpanded = isControlled ? controlledExpanded : internalExpanded;
705
- useEffect5(() => {
706
- if (isControlled) return;
707
- const el = ref.current;
708
- if (!el) return;
709
- const observer = new IntersectionObserver(
710
- ([entry]) => {
711
- if (entry.isIntersecting) {
712
- setTimeout(() => {
713
- setInternalExpanded(true);
714
- onExpandedChange == null ? void 0 : onExpandedChange(true);
715
- }, delay);
716
- }
507
+ const w = D(null), [i, v] = z(!1), u = l !== void 0, c = u ? l : i;
508
+ return P(() => {
509
+ if (u) return;
510
+ const b = w.current;
511
+ if (!b) return;
512
+ const n = new IntersectionObserver(
513
+ ([p]) => {
514
+ p.isIntersecting && setTimeout(() => {
515
+ v(!0), d == null || d(!0);
516
+ }, _);
717
517
  },
718
- { threshold }
518
+ { threshold: g }
719
519
  );
720
- observer.observe(el);
721
- return () => observer.disconnect();
722
- }, [isControlled, threshold, delay, onExpandedChange]);
723
- return /* @__PURE__ */ jsx9(
724
- Paper3,
725
- __spreadProps(__spreadValues({
726
- ref,
520
+ return n.observe(b), () => n.disconnect();
521
+ }, [u, g, _, d]), /* @__PURE__ */ e(
522
+ U,
523
+ {
524
+ ref: w,
727
525
  radius: 4,
728
- className: ExpandableCard_default.root,
729
- component: motion2.div
730
- }, {
731
- animate: { height: isExpanded ? "auto" : collapsedHeight },
732
- transition: { duration: 0.5, ease: "easeOut" }
733
- }), {
734
- children: /* @__PURE__ */ jsx9("div", { className: ExpandableCard_default.inner, children: /* @__PURE__ */ jsxs10(Group4, { align: "flex-start", justify: "space-between", gap: "lg", wrap: "nowrap", children: [
735
- /* @__PURE__ */ jsxs10(Stack, { gap: "xs", style: { flex: 1 }, children: [
736
- /* @__PURE__ */ jsx9(Text7, { fw: 700, size: "xl", lh: 1.3, children: title }),
737
- /* @__PURE__ */ jsx9(Text7, { size: "md", c: "dimmed", children: description }),
738
- /* @__PURE__ */ jsx9(
739
- motion2.div,
526
+ className: ge.root,
527
+ component: B.div,
528
+ animate: { height: c ? "auto" : y },
529
+ transition: { duration: 0.5, ease: "easeOut" },
530
+ children: /* @__PURE__ */ e("div", { className: ge.inner, children: /* @__PURE__ */ m(F, { align: "flex-start", justify: "space-between", gap: "lg", wrap: "nowrap", children: [
531
+ /* @__PURE__ */ m(ce, { gap: "xs", style: { flex: 1 }, children: [
532
+ /* @__PURE__ */ e(N, { fw: 700, size: "xl", lh: 1.3, children: t }),
533
+ /* @__PURE__ */ e(N, { size: "md", c: "dimmed", children: o }),
534
+ /* @__PURE__ */ e(
535
+ B.div,
740
536
  {
741
537
  initial: { opacity: 0, height: 0 },
742
538
  animate: {
743
- opacity: isExpanded ? 1 : 0,
744
- height: isExpanded ? "auto" : 0
539
+ opacity: c ? 1 : 0,
540
+ height: c ? "auto" : 0
745
541
  },
746
542
  transition: { duration: 0.4, delay: 0.2 },
747
543
  style: { overflow: "hidden" },
748
- children: typeof expandedContent === "string" ? /* @__PURE__ */ jsx9(Text7, { size: "sm", c: "dimmed", mt: "sm", children: expandedContent }) : expandedContent
544
+ children: typeof a == "string" ? /* @__PURE__ */ e(N, { size: "sm", c: "dimmed", mt: "sm", children: a }) : a
749
545
  }
750
546
  )
751
547
  ] }),
752
- /* @__PURE__ */ jsx9(
753
- motion2.div,
548
+ /* @__PURE__ */ e(
549
+ B.div,
754
550
  {
755
- animate: { scale: isExpanded ? 1.1 : 1 },
551
+ animate: { scale: c ? 1.1 : 1 },
756
552
  transition: { duration: 0.3 },
757
- children: /* @__PURE__ */ jsx9(ThemeIcon, { size: iconSize, radius: 4, color, variant: "filled", children: /* @__PURE__ */ jsx9(Icon, { size: 20, stroke: 1.5 }) })
553
+ children: /* @__PURE__ */ e(We, { size: f, radius: 4, color: r, variant: "filled", children: /* @__PURE__ */ e(s, { size: 20, stroke: 1.5 }) })
758
554
  }
759
555
  )
760
556
  ] }) })
761
- })
557
+ }
762
558
  );
763
559
  }
764
-
765
- // src/FadeInSection/FadeInSection.tsx
766
- import { useEffect as useEffect6, useRef as useRef5, useState as useState8 } from "react";
767
- import { Box as Box4 } from "@mantine/core";
768
-
769
- // src/FadeInSection/FadeInSection.module.css
770
- var FadeInSection_default = {};
771
-
772
- // src/FadeInSection/FadeInSection.tsx
773
- import { jsx as jsx10 } from "react/jsx-runtime";
774
- function FadeInSection(_a) {
775
- var _b = _a, {
776
- children,
777
- delay = 0,
778
- threshold = 0.1,
779
- className
780
- } = _b, props = __objRest(_b, [
781
- "children",
782
- "delay",
783
- "threshold",
784
- "className"
785
- ]);
786
- const ref = useRef5(null);
787
- const [isVisible, setIsVisible] = useState8(false);
788
- useEffect6(() => {
789
- const el = ref.current;
790
- if (!el) return;
791
- const observer = new IntersectionObserver(
792
- ([entry]) => {
793
- if (entry.isIntersecting) {
794
- if (delay > 0) {
795
- setTimeout(() => setIsVisible(true), delay);
796
- } else {
797
- setIsVisible(true);
798
- }
799
- }
560
+ const Mt = "_root_ho0ln_1", $t = "_visible_ho0ln_7", ye = {
561
+ root: Mt,
562
+ visible: $t
563
+ };
564
+ function Wn({
565
+ children: t,
566
+ delay: o = 0,
567
+ threshold: a = 0.1,
568
+ className: s,
569
+ ...r
570
+ }) {
571
+ const f = D(null), [y, g] = z(!1);
572
+ return P(() => {
573
+ const _ = f.current;
574
+ if (!_) return;
575
+ const l = new IntersectionObserver(
576
+ ([d]) => {
577
+ d.isIntersecting && (o > 0 ? setTimeout(() => g(!0), o) : g(!0));
800
578
  },
801
- { threshold }
579
+ { threshold: a }
802
580
  );
803
- observer.observe(el);
804
- return () => observer.disconnect();
805
- }, [delay, threshold]);
806
- return /* @__PURE__ */ jsx10(
807
- Box4,
808
- __spreadProps(__spreadValues({
809
- ref,
810
- className: `${FadeInSection_default.root} ${isVisible ? FadeInSection_default.visible : ""} ${className != null ? className : ""}`
811
- }, props), {
812
- children
813
- })
581
+ return l.observe(_), () => l.disconnect();
582
+ }, [o, a]), /* @__PURE__ */ e(
583
+ k,
584
+ {
585
+ ref: f,
586
+ className: `${ye.root} ${y ? ye.visible : ""} ${s ?? ""}`,
587
+ ...r,
588
+ children: t
589
+ }
814
590
  );
815
591
  }
816
-
817
- // src/FrequencyWave/FrequencyWave.tsx
818
- import { useEffect as useEffect7, useRef as useRef6, useState as useState9, useCallback as useCallback5 } from "react";
819
- import { Box as Box5, useMantineColorScheme } from "@mantine/core";
820
- import { jsx as jsx11 } from "react/jsx-runtime";
821
- function FrequencyWave({ isActive = false, height = 60 }) {
822
- const canvasRef = useRef6(null);
823
- const animationRef = useRef6(void 0);
824
- const [isPulsing, setIsPulsing] = useState9(false);
825
- const lastPulseRef = useRef6(null);
826
- const randomSpikeRef = useRef6(null);
827
- const { colorScheme } = useMantineColorScheme();
828
- const isDark = colorScheme === "dark";
829
- const colors = {
830
- start: isDark ? "#7950F2" : "#9775FA",
831
- mid: isDark ? "#BE4BDB" : "#DA77F2",
832
- end: isDark ? "#15AABF" : "#22B8CF"
833
- };
834
- const drawWave = useCallback5(
835
- (ctx, width, canvasHeight, time) => {
836
- var _a;
837
- ctx.clearRect(0, 0, width, canvasHeight);
838
- const isAnimating = isActive || isPulsing;
839
- const waveY = canvasHeight * 0.65;
840
- const baseAmplitude = isActive ? 5 : isPulsing ? 7 : 1.5;
841
- if (isAnimating) {
842
- if (randomSpikeRef.current === null) {
843
- randomSpikeRef.current = Math.random();
844
- }
845
- if (Math.floor(time / 500) !== Math.floor((time - 16) / 500)) {
846
- randomSpikeRef.current = Math.random();
847
- }
848
- }
849
- const gradient = ctx.createLinearGradient(0, 0, width, 0);
850
- gradient.addColorStop(0, colors.start);
851
- gradient.addColorStop(0.5, colors.mid);
852
- gradient.addColorStop(1, colors.end);
853
- ctx.strokeStyle = gradient;
854
- ctx.lineWidth = isAnimating ? 2.5 : 1.5;
855
- ctx.lineCap = "round";
856
- ctx.lineJoin = "round";
857
- if (isAnimating) {
858
- ctx.shadowColor = colors.mid;
859
- ctx.shadowBlur = isPulsing ? 12 : 8;
860
- } else {
861
- ctx.shadowBlur = 0;
862
- }
863
- ctx.beginPath();
864
- const segments = 300;
865
- const segmentWidth = width / segments;
866
- const speed = isActive ? 0.02 : isPulsing ? 0.025 : 3e-3;
867
- for (let i = 0; i <= segments; i++) {
868
- const x = i * segmentWidth;
869
- const normalizedX = x / width;
870
- let y = waveY;
871
- if (isAnimating) {
872
- const wave1 = Math.sin(normalizedX * Math.PI * 6 + time * speed) * baseAmplitude;
873
- const wave2 = Math.sin(normalizedX * Math.PI * 12 + time * speed * 1.3) * (baseAmplitude * 0.4);
874
- const wave3 = Math.sin(normalizedX * Math.PI * 18 + time * speed * 0.8) * (baseAmplitude * 0.2);
875
- const spikePosition = (_a = randomSpikeRef.current) != null ? _a : 0.5;
876
- const distToSpike = Math.abs(normalizedX - spikePosition);
877
- const spikeAmplitude = distToSpike < 0.15 ? (1 - distToSpike / 0.15) * baseAmplitude * 1 : 0;
878
- const spikeWave = Math.sin(normalizedX * Math.PI * 20 + time * speed * 2) * spikeAmplitude;
879
- let aggressiveWave = 0;
880
- if (isPulsing) {
881
- aggressiveWave = Math.sin(normalizedX * Math.PI * 30 + time * 0.03) * baseAmplitude * 0.4;
882
- aggressiveWave += Math.sin(normalizedX * Math.PI * 8 + time * 0.015) * baseAmplitude * 0.5;
883
- }
884
- const combinedWave = wave1 + wave2 + wave3 + spikeWave + aggressiveWave;
885
- const envelope = Math.sin(normalizedX * Math.PI);
886
- y = waveY + combinedWave * envelope;
887
- } else {
888
- y += Math.sin(normalizedX * Math.PI * 2 + time * speed) * baseAmplitude;
889
- }
890
- if (i === 0) {
891
- ctx.moveTo(x, y);
892
- } else {
893
- ctx.lineTo(x, y);
894
- }
592
+ function En({ isActive: t = !1, height: o = 60 }) {
593
+ const a = D(null), s = D(void 0), [r, f] = z(!1), y = D(null), g = D(null), { colorScheme: _ } = Ee(), l = _ === "dark", d = {
594
+ start: l ? "#7950F2" : "#9775FA",
595
+ mid: l ? "#BE4BDB" : "#DA77F2",
596
+ end: l ? "#15AABF" : "#22B8CF"
597
+ }, w = S(
598
+ (i, v, u, c) => {
599
+ i.clearRect(0, 0, v, u);
600
+ const b = t || r, n = u * 0.65, p = t ? 5 : r ? 7 : 1.5;
601
+ b && (g.current === null && (g.current = Math.random()), Math.floor(c / 500) !== Math.floor((c - 16) / 500) && (g.current = Math.random()));
602
+ const I = i.createLinearGradient(0, 0, v, 0);
603
+ I.addColorStop(0, d.start), I.addColorStop(0.5, d.mid), I.addColorStop(1, d.end), i.strokeStyle = I, i.lineWidth = b ? 2.5 : 1.5, i.lineCap = "round", i.lineJoin = "round", b ? (i.shadowColor = d.mid, i.shadowBlur = r ? 12 : 8) : i.shadowBlur = 0, i.beginPath();
604
+ const T = 300, R = v / T, A = t ? 0.02 : r ? 0.025 : 3e-3;
605
+ for (let j = 0; j <= T; j++) {
606
+ const C = j * R, M = C / v;
607
+ let E = n;
608
+ if (b) {
609
+ const G = Math.sin(M * Math.PI * 6 + c * A) * p, O = Math.sin(M * Math.PI * 12 + c * A * 1.3) * (p * 0.4), H = Math.sin(M * Math.PI * 18 + c * A * 0.8) * (p * 0.2), K = g.current ?? 0.5, h = Math.abs(M - K), x = h < 0.15 ? (1 - h / 0.15) * p * 1 : 0, L = Math.sin(M * Math.PI * 20 + c * A * 2) * x;
610
+ let X = 0;
611
+ r && (X = Math.sin(M * Math.PI * 30 + c * 0.03) * p * 0.4, X += Math.sin(M * Math.PI * 8 + c * 0.015) * p * 0.5);
612
+ const Z = G + O + H + L + X, ee = Math.sin(M * Math.PI);
613
+ E = n + Z * ee;
614
+ } else
615
+ E += Math.sin(M * Math.PI * 2 + c * A) * p;
616
+ j === 0 ? i.moveTo(C, E) : i.lineTo(C, E);
895
617
  }
896
- ctx.stroke();
897
- if (isActive) {
898
- const barCount = 80;
899
- const barWidth = 2;
900
- const barGap = width / barCount;
901
- const maxBarHeight = 16;
902
- ctx.shadowBlur = 3;
903
- for (let i = 0; i < barCount; i++) {
904
- const x = i * barGap + barGap / 2;
905
- const normalizedX = x / width;
906
- const baseBarHeight = Math.sin(normalizedX * Math.PI * 8 + time * 0.025) * 0.5 + Math.sin(normalizedX * Math.PI * 14 + time * 0.018) * 0.3 + Math.sin(normalizedX * Math.PI * 4 + time * 0.03) * 0.2;
907
- const envelope = Math.sin(normalizedX * Math.PI);
908
- const barHeight = Math.abs(baseBarHeight) * maxBarHeight * envelope;
909
- const barGradient = ctx.createLinearGradient(
910
- x,
911
- waveY - barHeight / 2,
912
- x,
913
- waveY + barHeight / 2
618
+ if (i.stroke(), t) {
619
+ const M = v / 80, E = 16;
620
+ i.shadowBlur = 3;
621
+ for (let G = 0; G < 80; G++) {
622
+ const O = G * M + M / 2, H = O / v, K = Math.sin(H * Math.PI * 8 + c * 0.025) * 0.5 + Math.sin(H * Math.PI * 14 + c * 0.018) * 0.3 + Math.sin(H * Math.PI * 4 + c * 0.03) * 0.2, h = Math.sin(H * Math.PI), x = Math.abs(K) * E * h, L = i.createLinearGradient(
623
+ O,
624
+ n - x / 2,
625
+ O,
626
+ n + x / 2
914
627
  );
915
- barGradient.addColorStop(0, colors.start + "90");
916
- barGradient.addColorStop(0.5, colors.mid + "70");
917
- barGradient.addColorStop(1, colors.end + "50");
918
- ctx.fillStyle = barGradient;
919
- ctx.fillRect(x - barWidth / 2, waveY - barHeight / 2, barWidth, barHeight);
628
+ L.addColorStop(0, d.start + "90"), L.addColorStop(0.5, d.mid + "70"), L.addColorStop(1, d.end + "50"), i.fillStyle = L, i.fillRect(O - 2 / 2, n - x / 2, 2, x);
920
629
  }
921
630
  }
922
- if (isPulsing) {
923
- const particleCount = 15;
924
- for (let i = 0; i < particleCount; i++) {
925
- const px = (Math.sin(time * 1e-3 + i * 1.5) * 0.5 + 0.5) * width;
926
- const py = waveY + Math.sin(time * 2e-3 + i) * 8;
927
- const radius = 1.5 + Math.sin(time * 3e-3 + i * 2) * 0.5;
928
- ctx.beginPath();
929
- ctx.arc(px, py, radius, 0, Math.PI * 2);
930
- ctx.fillStyle = i % 2 === 0 ? colors.start + "80" : colors.end + "80";
931
- ctx.fill();
631
+ if (r)
632
+ for (let C = 0; C < 15; C++) {
633
+ const M = (Math.sin(c * 1e-3 + C * 1.5) * 0.5 + 0.5) * v, E = n + Math.sin(c * 2e-3 + C) * 8, G = 1.5 + Math.sin(c * 3e-3 + C * 2) * 0.5;
634
+ i.beginPath(), i.arc(M, E, G, 0, Math.PI * 2), i.fillStyle = C % 2 === 0 ? d.start + "80" : d.end + "80", i.fill();
932
635
  }
933
- }
934
636
  },
935
- [isActive, isPulsing, colors.start, colors.mid, colors.end]
637
+ [t, r, d.start, d.mid, d.end]
936
638
  );
937
- useEffect7(() => {
938
- const canvas = canvasRef.current;
939
- if (!canvas) return;
940
- const ctx = canvas.getContext("2d");
941
- if (!ctx) return;
942
- const updateSize = () => {
943
- const dpr = window.devicePixelRatio || 1;
944
- const rect = canvas.getBoundingClientRect();
945
- canvas.width = rect.width * dpr;
946
- canvas.height = rect.height * dpr;
947
- ctx.scale(dpr, dpr);
639
+ return P(() => {
640
+ const i = a.current;
641
+ if (!i) return;
642
+ const v = i.getContext("2d");
643
+ if (!v) return;
644
+ const u = () => {
645
+ const n = window.devicePixelRatio || 1, p = i.getBoundingClientRect();
646
+ i.width = p.width * n, i.height = p.height * n, v.scale(n, n);
948
647
  };
949
- updateSize();
950
- window.addEventListener("resize", updateSize);
951
- const startTime = performance.now();
952
- const animate = (currentTime) => {
953
- const elapsed = currentTime - startTime;
954
- const rect = canvas.getBoundingClientRect();
955
- drawWave(ctx, rect.width, rect.height, elapsed);
956
- animationRef.current = requestAnimationFrame(animate);
648
+ u(), window.addEventListener("resize", u);
649
+ const c = performance.now(), b = (n) => {
650
+ const p = n - c, I = i.getBoundingClientRect();
651
+ w(v, I.width, I.height, p), s.current = requestAnimationFrame(b);
957
652
  };
958
- animationRef.current = requestAnimationFrame(animate);
959
- return () => {
960
- window.removeEventListener("resize", updateSize);
961
- if (animationRef.current) {
962
- cancelAnimationFrame(animationRef.current);
963
- }
653
+ return s.current = requestAnimationFrame(b), () => {
654
+ window.removeEventListener("resize", u), s.current && cancelAnimationFrame(s.current);
964
655
  };
965
- }, [drawWave]);
966
- useEffect7(() => {
967
- if (isActive) {
968
- queueMicrotask(() => setIsPulsing(false));
969
- lastPulseRef.current = Date.now();
656
+ }, [w]), P(() => {
657
+ if (t) {
658
+ queueMicrotask(() => f(!1)), y.current = Date.now();
970
659
  return;
971
660
  }
972
- const checkForPulse = () => {
973
- const now = Date.now();
974
- if (lastPulseRef.current === null) {
975
- lastPulseRef.current = now;
976
- }
977
- const timeSinceLastPulse = now - lastPulseRef.current;
978
- const pulseInterval = 12e4 + Math.random() * 6e4;
979
- if (timeSinceLastPulse >= pulseInterval && !isPulsing) {
980
- setIsPulsing(true);
981
- lastPulseRef.current = now;
982
- setTimeout(() => setIsPulsing(false), 4e3);
983
- }
984
- };
985
- const intervalId = setInterval(checkForPulse, 5e3);
986
- return () => clearInterval(intervalId);
987
- }, [isActive, isPulsing]);
988
- return /* @__PURE__ */ jsx11(
989
- Box5,
661
+ const v = setInterval(() => {
662
+ const u = Date.now();
663
+ y.current === null && (y.current = u);
664
+ const c = u - y.current, b = 12e4 + Math.random() * 6e4;
665
+ c >= b && !r && (f(!0), y.current = u, setTimeout(() => f(!1), 4e3));
666
+ }, 5e3);
667
+ return () => clearInterval(v);
668
+ }, [t, r]), /* @__PURE__ */ e(
669
+ k,
990
670
  {
991
671
  style: {
992
672
  position: "relative",
993
673
  width: "100%",
994
- height,
674
+ height: o,
995
675
  overflow: "hidden",
996
676
  pointerEvents: "none",
997
- opacity: isDark ? 1 : 0.8
677
+ opacity: l ? 1 : 0.8
998
678
  },
999
- children: /* @__PURE__ */ jsx11(
679
+ children: /* @__PURE__ */ e(
1000
680
  "canvas",
1001
681
  {
1002
- ref: canvasRef,
682
+ ref: a,
1003
683
  style: {
1004
684
  width: "100%",
1005
685
  height: "100%",
@@ -1010,196 +690,189 @@ function FrequencyWave({ isActive = false, height = 60 }) {
1010
690
  }
1011
691
  );
1012
692
  }
1013
-
1014
- // src/GradientSwatch/GradientSwatch.tsx
1015
- import { Paper as Paper4, Text as Text8 } from "@mantine/core";
1016
-
1017
- // src/GradientSwatch/GradientSwatch.module.css
1018
- var GradientSwatch_default = {};
1019
-
1020
- // src/GradientSwatch/GradientSwatch.tsx
1021
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
1022
- function GradientSwatch({ name, colors, description }) {
1023
- const css = `linear-gradient(135deg, ${colors[0]} 0%, ${colors[1]} 100%)`;
1024
- return /* @__PURE__ */ jsx12(Copyable, { value: css, children: /* @__PURE__ */ jsxs11(Paper4, { className: GradientSwatch_default.root, shadow: "lg", radius: "md", children: [
1025
- /* @__PURE__ */ jsx12("div", { className: GradientSwatch_default.preview, style: { background: css } }),
1026
- /* @__PURE__ */ jsxs11("div", { className: GradientSwatch_default.info, children: [
1027
- /* @__PURE__ */ jsx12(Text8, { fw: 600, size: "sm", children: name }),
1028
- description && /* @__PURE__ */ jsx12(Text8, { size: "xs", c: "dimmed", children: description }),
1029
- /* @__PURE__ */ jsxs11(Text8, { size: "xs", c: "dimmed", ff: "monospace", children: [
1030
- colors[0],
1031
- " \u2192 ",
1032
- colors[1]
693
+ const Ct = "_root_9li00_1", kt = "_preview_9li00_11", Lt = "_info_9li00_15", ie = {
694
+ root: Ct,
695
+ preview: kt,
696
+ info: Lt
697
+ };
698
+ function Dn({ name: t, colors: o, description: a }) {
699
+ const s = `linear-gradient(135deg, ${o[0]} 0%, ${o[1]} 100%)`;
700
+ return /* @__PURE__ */ e(de, { value: s, children: /* @__PURE__ */ m(U, { className: ie.root, shadow: "lg", radius: "md", children: [
701
+ /* @__PURE__ */ e("div", { className: ie.preview, style: { background: s } }),
702
+ /* @__PURE__ */ m("div", { className: ie.info, children: [
703
+ /* @__PURE__ */ e(N, { fw: 600, size: "sm", children: t }),
704
+ a && /* @__PURE__ */ e(N, { size: "xs", c: "dimmed", children: a }),
705
+ /* @__PURE__ */ m(N, { size: "xs", c: "dimmed", ff: "monospace", children: [
706
+ o[0],
707
+ " ",
708
+ o[1]
1033
709
  ] })
1034
710
  ] })
1035
711
  ] }) });
1036
712
  }
1037
-
1038
- // src/Hero/Hero.tsx
1039
- import { useEffect as useEffect8, useState as useState10 } from "react";
1040
- import { Box as Box6, Button as Button2, Group as Group5, Text as Text9, Title as Title2 } from "@mantine/core";
1041
- import { motion as motion3 } from "framer-motion";
1042
- import defaultLogoSrc from "@frequencyads/brand/assets/frequency-mark-white.svg";
1043
- import { gradients } from "@frequencyads/brand/colors";
1044
-
1045
- // src/VideoBackground/VideoBackground.module.css
1046
- var VideoBackground_default = {};
1047
-
1048
- // src/VideoBackground/VideoBackground.tsx
1049
- import { jsx as jsx13 } from "react/jsx-runtime";
1050
- function VideoBackground({ src, opacity = 0.3 }) {
1051
- return /* @__PURE__ */ jsx13("div", { className: VideoBackground_default.root, style: { opacity }, children: /* @__PURE__ */ jsx13("video", { autoPlay: true, muted: true, loop: true, playsInline: true, className: VideoBackground_default.video, children: /* @__PURE__ */ jsx13("source", { src, type: "video/mp4" }) }) });
713
+ const Bt = "_root_1vlvy_1", St = "_video_1vlvy_9", be = {
714
+ root: Bt,
715
+ video: St
716
+ };
717
+ function Tt({ src: t, opacity: o = 0.3 }) {
718
+ return /* @__PURE__ */ e("div", { className: be.root, style: { opacity: o }, children: /* @__PURE__ */ e("video", { autoPlay: !0, muted: !0, loop: !0, playsInline: !0, className: be.video, children: /* @__PURE__ */ e("source", { src: t, type: "video/mp4" }) }) });
1052
719
  }
1053
-
1054
- // src/Hero/Hero.module.css
1055
- var Hero_default = {};
1056
-
1057
- // src/Hero/Hero.tsx
1058
- import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
1059
- function Hero({
1060
- variant = "logo",
1061
- heading,
1062
- label,
1063
- tagline,
1064
- logoSrc = defaultLogoSrc,
1065
- gradient: gradientName = "frequencyAlive",
1066
- shimmer = true,
1067
- primaryAction,
1068
- secondaryAction,
1069
- backgroundVideoSrc,
1070
- showWaveform,
1071
- showScrollIndicator = false
720
+ const Pt = "_root_1suaa_1", Wt = "_content_1suaa_8", Et = "_label_1suaa_21", Dt = "_vignette_1suaa_37", Ft = "_logoWrapper_1suaa_50", jt = "_logo_1suaa_50", Gt = "_glow_1suaa_73", Rt = "_textWrapper_1suaa_85", At = "_heading_1suaa_91", Ot = "_shimmer_1suaa_125", Ht = "_tagline_1suaa_129", Vt = "_primaryButton_1suaa_143", qt = "_secondaryButton_1suaa_148", Ut = "_scrollIndicator_1suaa_160", Xt = "_scrollLabel_1suaa_171", Yt = "_scrollLine_1suaa_179", $ = {
721
+ root: Pt,
722
+ content: Wt,
723
+ label: Et,
724
+ vignette: Dt,
725
+ logoWrapper: Ft,
726
+ logo: jt,
727
+ glow: Gt,
728
+ textWrapper: Rt,
729
+ heading: At,
730
+ shimmer: Ot,
731
+ tagline: Ht,
732
+ primaryButton: Vt,
733
+ secondaryButton: qt,
734
+ scrollIndicator: Ut,
735
+ scrollLabel: Xt,
736
+ scrollLine: Yt
737
+ };
738
+ function Fn({
739
+ variant: t = "logo",
740
+ heading: o,
741
+ label: a,
742
+ tagline: s,
743
+ logoSrc: r = qe,
744
+ gradient: f = "frequencyAlive",
745
+ shimmer: y = !0,
746
+ primaryAction: g,
747
+ secondaryAction: _,
748
+ backgroundVideoSrc: l,
749
+ showWaveform: d,
750
+ showScrollIndicator: w = !1
1072
751
  }) {
1073
- const [mounted, setMounted] = useState10(false);
1074
- const resolvedHeading = heading != null ? heading : variant === "text" ? "Your Message" : void 0;
1075
- const resolvedLabel = label || (variant === "logo" ? "Welcome" : void 0);
1076
- const hasActions = primaryAction || secondaryAction;
1077
- const waveformVisible = showWaveform != null ? showWaveform : true;
1078
- const grad = gradients[gradientName];
1079
- useEffect8(() => {
1080
- setMounted(true);
1081
- }, []);
1082
- return /* @__PURE__ */ jsxs12(Box6, { component: "section", className: Hero_default.root, children: [
1083
- backgroundVideoSrc && /* @__PURE__ */ jsx14(VideoBackground, { src: backgroundVideoSrc }),
1084
- /* @__PURE__ */ jsxs12("div", { className: Hero_default.content, children: [
1085
- mounted && /* @__PURE__ */ jsxs12(Fragment2, { children: [
1086
- resolvedLabel && /* @__PURE__ */ jsx14(
1087
- motion3.p,
752
+ const [i, v] = z(!1), u = typeof r == "string" ? r : r == null ? void 0 : r.src, c = o ?? (t === "text" ? "Your Message" : void 0), b = a || (t === "logo" ? "Welcome" : void 0), n = g || _, p = d ?? !0, I = Ue[f];
753
+ return P(() => {
754
+ v(!0);
755
+ }, []), /* @__PURE__ */ m(k, { component: "section", className: $.root, children: [
756
+ l && /* @__PURE__ */ e(Tt, { src: l }),
757
+ /* @__PURE__ */ m("div", { className: $.content, children: [
758
+ i && /* @__PURE__ */ m(ze, { children: [
759
+ b && /* @__PURE__ */ e(
760
+ B.p,
1088
761
  {
1089
762
  initial: { opacity: 0 },
1090
763
  animate: { opacity: 1 },
1091
764
  transition: { duration: 0.8, delay: 0.2 },
1092
- className: Hero_default.label,
1093
- children: resolvedLabel
765
+ className: $.label,
766
+ children: b
1094
767
  }
1095
768
  ),
1096
- variant === "logo" && /* @__PURE__ */ jsxs12(
1097
- motion3.div,
769
+ t === "logo" && /* @__PURE__ */ m(
770
+ B.div,
1098
771
  {
1099
772
  initial: { opacity: 0, scale: 0.8 },
1100
773
  animate: { opacity: 1, scale: 1 },
1101
774
  transition: { duration: 1.2, delay: 0.3, ease: "easeOut" },
1102
- className: Hero_default.logoWrapper,
775
+ className: $.logoWrapper,
1103
776
  children: [
1104
- waveformVisible && /* @__PURE__ */ jsx14(AnimatedWaveform, {}),
1105
- waveformVisible && /* @__PURE__ */ jsx14("div", { className: Hero_default.vignette }),
1106
- /* @__PURE__ */ jsx14(
1107
- motion3.img,
777
+ p && /* @__PURE__ */ e(fe, {}),
778
+ p && /* @__PURE__ */ e("div", { className: $.vignette }),
779
+ /* @__PURE__ */ e(
780
+ B.img,
1108
781
  {
1109
- src: logoSrc,
1110
- alt: resolvedHeading != null ? resolvedHeading : "Frequency",
1111
- className: Hero_default.logo,
782
+ src: u,
783
+ alt: c ?? "Frequency",
784
+ className: $.logo,
1112
785
  animate: { rotate: [0, 0.5, -0.5, 0] },
1113
- transition: { duration: 8, repeat: Infinity, ease: "easeInOut" }
786
+ transition: { duration: 8, repeat: 1 / 0, ease: "easeInOut" }
1114
787
  }
1115
788
  ),
1116
- /* @__PURE__ */ jsx14("div", { className: Hero_default.glow })
789
+ /* @__PURE__ */ e("div", { className: $.glow })
1117
790
  ]
1118
791
  }
1119
792
  ),
1120
- variant === "text" && resolvedHeading && /* @__PURE__ */ jsxs12(
1121
- motion3.div,
793
+ t === "text" && c && /* @__PURE__ */ m(
794
+ B.div,
1122
795
  {
1123
796
  initial: { opacity: 0, scale: 0.8 },
1124
797
  animate: { opacity: 1, scale: 1 },
1125
798
  transition: { duration: 1.2, delay: 0.3, ease: "easeOut" },
1126
- className: Hero_default.textWrapper,
799
+ className: $.textWrapper,
1127
800
  children: [
1128
- waveformVisible && /* @__PURE__ */ jsx14(AnimatedWaveform, {}),
1129
- waveformVisible && /* @__PURE__ */ jsx14("div", { className: Hero_default.vignette }),
1130
- /* @__PURE__ */ jsx14(
1131
- Title2,
801
+ p && /* @__PURE__ */ e(fe, {}),
802
+ p && /* @__PURE__ */ e("div", { className: $.vignette }),
803
+ /* @__PURE__ */ e(
804
+ oe,
1132
805
  {
1133
806
  order: 1,
1134
- className: `${Hero_default.heading} ${shimmer ? Hero_default.shimmer : ""}`,
807
+ className: `${$.heading} ${y ? $.shimmer : ""}`,
1135
808
  style: {
1136
- backgroundImage: `linear-gradient(135deg, ${grad.from}, ${grad.to}, ${grad.from})`,
1137
- backgroundSize: shimmer ? "200% 100%" : void 0
809
+ backgroundImage: `linear-gradient(135deg, ${I.from}, ${I.to}, ${I.from})`,
810
+ backgroundSize: y ? "200% 100%" : void 0
1138
811
  },
1139
- children: resolvedHeading
812
+ children: c
1140
813
  }
1141
814
  )
1142
815
  ]
1143
816
  }
1144
817
  ),
1145
- tagline && /* @__PURE__ */ jsx14(
1146
- motion3.div,
818
+ s && /* @__PURE__ */ e(
819
+ B.div,
1147
820
  {
1148
821
  initial: { opacity: 0, y: 20 },
1149
822
  animate: { opacity: 1, y: 0 },
1150
823
  transition: { duration: 0.8, delay: 0.7 },
1151
- children: /* @__PURE__ */ jsx14(Text9, { className: Hero_default.tagline, children: tagline })
824
+ children: /* @__PURE__ */ e(N, { className: $.tagline, children: s })
1152
825
  }
1153
826
  ),
1154
- hasActions && /* @__PURE__ */ jsx14(
1155
- motion3.div,
827
+ n && /* @__PURE__ */ e(
828
+ B.div,
1156
829
  {
1157
830
  initial: { opacity: 0, y: 20 },
1158
831
  animate: { opacity: 1, y: 0 },
1159
832
  transition: { duration: 0.8, delay: 0.9 },
1160
- children: /* @__PURE__ */ jsxs12(Group5, { gap: "md", justify: "center", wrap: "wrap", children: [
1161
- primaryAction && /* @__PURE__ */ jsx14(
1162
- Button2,
833
+ children: /* @__PURE__ */ m(F, { gap: "md", justify: "center", wrap: "wrap", children: [
834
+ g && /* @__PURE__ */ e(
835
+ re,
1163
836
  {
1164
837
  component: "a",
1165
- href: primaryAction.href,
838
+ href: g.href,
1166
839
  size: "lg",
1167
840
  radius: 4,
1168
- className: Hero_default.primaryButton,
1169
- children: primaryAction.label
841
+ className: $.primaryButton,
842
+ children: g.label
1170
843
  }
1171
844
  ),
1172
- secondaryAction && /* @__PURE__ */ jsx14(
1173
- Button2,
845
+ _ && /* @__PURE__ */ e(
846
+ re,
1174
847
  {
1175
848
  component: "a",
1176
- href: secondaryAction.href,
849
+ href: _.href,
1177
850
  size: "lg",
1178
851
  radius: 4,
1179
852
  variant: "outline",
1180
- className: Hero_default.secondaryButton,
1181
- children: secondaryAction.label
853
+ className: $.secondaryButton,
854
+ children: _.label
1182
855
  }
1183
856
  )
1184
857
  ] })
1185
858
  }
1186
859
  )
1187
860
  ] }),
1188
- mounted && showScrollIndicator && /* @__PURE__ */ jsxs12(
1189
- motion3.div,
861
+ i && w && /* @__PURE__ */ m(
862
+ B.div,
1190
863
  {
1191
- className: Hero_default.scrollIndicator,
864
+ className: $.scrollIndicator,
1192
865
  initial: { opacity: 0 },
1193
866
  animate: { opacity: 1 },
1194
867
  transition: { duration: 1, delay: 1.4 },
1195
868
  children: [
1196
- /* @__PURE__ */ jsx14("span", { className: Hero_default.scrollLabel, children: "Scroll" }),
1197
- /* @__PURE__ */ jsx14(
1198
- motion3.div,
869
+ /* @__PURE__ */ e("span", { className: $.scrollLabel, children: "Scroll" }),
870
+ /* @__PURE__ */ e(
871
+ B.div,
1199
872
  {
1200
- className: Hero_default.scrollLine,
873
+ className: $.scrollLine,
1201
874
  animate: { scaleY: [1, 1.5, 1] },
1202
- transition: { duration: 1.5, repeat: Infinity }
875
+ transition: { duration: 1.5, repeat: 1 / 0 }
1203
876
  }
1204
877
  )
1205
878
  ]
@@ -1208,17 +881,13 @@ function Hero({
1208
881
  ] })
1209
882
  ] });
1210
883
  }
1211
-
1212
- // src/HintBadge/HintBadge.tsx
1213
- import { Badge } from "@mantine/core";
1214
- import { jsxs as jsxs13 } from "react/jsx-runtime";
1215
- function HintBadge({ variant, children }) {
1216
- const isDo = variant === "do";
1217
- return /* @__PURE__ */ jsxs13(
1218
- Badge,
884
+ function we({ variant: t, children: o }) {
885
+ const a = t === "do";
886
+ return /* @__PURE__ */ m(
887
+ $e,
1219
888
  {
1220
889
  variant: "light",
1221
- color: isDo ? "green" : "red",
890
+ color: a ? "green" : "red",
1222
891
  size: "lg",
1223
892
  radius: "sm",
1224
893
  styles: {
@@ -1226,121 +895,87 @@ function HintBadge({ variant, children }) {
1226
895
  label: { whiteSpace: "normal", lineHeight: 1.4 }
1227
896
  },
1228
897
  children: [
1229
- /* @__PURE__ */ jsxs13("strong", { children: [
1230
- isDo ? "Do" : "Don't",
898
+ /* @__PURE__ */ m("strong", { children: [
899
+ a ? "Do" : "Don't",
1231
900
  ":"
1232
901
  ] }),
1233
902
  " ",
1234
- children
903
+ o
1235
904
  ]
1236
905
  }
1237
906
  );
1238
907
  }
1239
-
1240
- // src/MiniAudioPlayer/MiniAudioPlayer.tsx
1241
- import { useRef as useRef7, useState as useState11, useEffect as useEffect9, forwardRef as forwardRef2, useCallback as useCallback6 } from "react";
1242
- import { ActionIcon as ActionIcon2, Group as Group6, Box as Box7 } from "@mantine/core";
1243
- import { IconPlayerPlayFilled as IconPlayerPlayFilled2, IconPlayerPauseFilled as IconPlayerPauseFilled2 } from "@tabler/icons-react";
1244
-
1245
- // src/MiniAudioPlayer/MiniAudioPlayer.module.css
1246
- var MiniAudioPlayer_default = {};
1247
-
1248
- // src/MiniAudioPlayer/MiniAudioPlayer.tsx
1249
- import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
1250
- var SIZE_CONFIG = {
908
+ const Kt = "_root_13w21_1", Jt = "_playButton_13w21_11", Ne = {
909
+ root: Kt,
910
+ playButton: Jt
911
+ }, Qt = {
1251
912
  mini: { height: 24, buttonSize: 20, iconSize: 14, waveHeight: 16, barWidth: 1, barGap: 0 },
1252
913
  small: { height: 32, buttonSize: 28, iconSize: 16, waveHeight: 20, barWidth: 1, barGap: 0 },
1253
914
  compact: { height: 40, buttonSize: 32, iconSize: 18, waveHeight: 24, barWidth: 2, barGap: 1 }
1254
- };
1255
- var MiniAudioPlayer = forwardRef2(
915
+ }, Zt = xe(
1256
916
  ({
1257
- audioUrl,
1258
- size = "mini",
1259
- waveColor = "#CCCCCC",
1260
- progressColor = "#169bde",
1261
- onPlay,
1262
- onPause,
1263
- className,
1264
- style
1265
- }, ref) => {
1266
- const audioRef = useRef7(null);
1267
- const [isPlaying, setIsPlaying] = useState11(false);
1268
- const [currentTime, setCurrentTime] = useState11(0);
1269
- const config = SIZE_CONFIG[size];
1270
- useEffect9(() => {
1271
- const audio = audioRef.current;
1272
- if (!audio) return;
1273
- const handleTimeUpdate = () => setCurrentTime(audio.currentTime);
1274
- const handleEnded = () => {
1275
- setIsPlaying(false);
1276
- setCurrentTime(0);
1277
- };
1278
- const handlePause = () => setIsPlaying(false);
1279
- const handlePlay = () => setIsPlaying(true);
1280
- audio.addEventListener("timeupdate", handleTimeUpdate);
1281
- audio.addEventListener("ended", handleEnded);
1282
- audio.addEventListener("pause", handlePause);
1283
- audio.addEventListener("play", handlePlay);
1284
- return () => {
1285
- audio.removeEventListener("timeupdate", handleTimeUpdate);
1286
- audio.removeEventListener("ended", handleEnded);
1287
- audio.removeEventListener("pause", handlePause);
1288
- audio.removeEventListener("play", handlePlay);
917
+ audioUrl: t,
918
+ size: o = "mini",
919
+ waveColor: a = "#CCCCCC",
920
+ progressColor: s = "#169bde",
921
+ onPlay: r,
922
+ onPause: f,
923
+ className: y,
924
+ style: g
925
+ }, _) => {
926
+ const l = D(null), [d, w] = z(!1), [i, v] = z(0), u = Qt[o];
927
+ P(() => {
928
+ const n = l.current;
929
+ if (!n) return;
930
+ const p = () => v(n.currentTime), I = () => {
931
+ w(!1), v(0);
932
+ }, T = () => w(!1), R = () => w(!0);
933
+ return n.addEventListener("timeupdate", p), n.addEventListener("ended", I), n.addEventListener("pause", T), n.addEventListener("play", R), () => {
934
+ n.removeEventListener("timeupdate", p), n.removeEventListener("ended", I), n.removeEventListener("pause", T), n.removeEventListener("play", R);
1289
935
  };
1290
- }, [audioUrl]);
1291
- const handlePlayPause = useCallback6(() => {
1292
- const audio = audioRef.current;
1293
- if (!audio) return;
1294
- if (isPlaying) {
1295
- audio.pause();
1296
- onPause == null ? void 0 : onPause();
1297
- } else {
1298
- audio.play().catch(() => {
1299
- });
1300
- onPlay == null ? void 0 : onPlay();
1301
- }
1302
- }, [isPlaying, onPlay, onPause]);
1303
- const handleSeek = useCallback6((time) => {
1304
- const audio = audioRef.current;
1305
- if (audio && !isNaN(time) && isFinite(time)) {
1306
- audio.currentTime = time;
1307
- setCurrentTime(time);
1308
- }
936
+ }, [t]);
937
+ const c = S(() => {
938
+ const n = l.current;
939
+ n && (d ? (n.pause(), f == null || f()) : (n.play().catch(() => {
940
+ }), r == null || r()));
941
+ }, [d, r, f]), b = S((n) => {
942
+ const p = l.current;
943
+ p && !isNaN(n) && isFinite(n) && (p.currentTime = n, v(n));
1309
944
  }, []);
1310
- return /* @__PURE__ */ jsxs14(
1311
- Group6,
945
+ return /* @__PURE__ */ m(
946
+ F,
1312
947
  {
1313
- ref,
1314
- gap: size === "mini" ? 6 : size === "small" ? 8 : 10,
948
+ ref: _,
949
+ gap: o === "mini" ? 6 : o === "small" ? 8 : 10,
1315
950
  wrap: "nowrap",
1316
- className: `${MiniAudioPlayer_default.root} ${className != null ? className : ""}`,
1317
- style: __spreadValues({ height: config.height }, style),
951
+ className: `${Ne.root} ${y ?? ""}`,
952
+ style: { height: u.height, ...g },
1318
953
  children: [
1319
- /* @__PURE__ */ jsx15("audio", { ref: audioRef, src: audioUrl, preload: "metadata" }),
1320
- /* @__PURE__ */ jsx15(
1321
- ActionIcon2,
954
+ /* @__PURE__ */ e("audio", { ref: l, src: t, preload: "metadata" }),
955
+ /* @__PURE__ */ e(
956
+ Y,
1322
957
  {
1323
958
  variant: "filled",
1324
959
  color: "blue",
1325
960
  radius: "xl",
1326
- size: config.buttonSize,
1327
- onClick: handlePlayPause,
1328
- "aria-label": isPlaying ? "Pause" : "Play",
1329
- className: MiniAudioPlayer_default.playButton,
1330
- children: isPlaying ? /* @__PURE__ */ jsx15(IconPlayerPauseFilled2, { size: config.iconSize }) : /* @__PURE__ */ jsx15(IconPlayerPlayFilled2, { size: config.iconSize })
961
+ size: u.buttonSize,
962
+ onClick: c,
963
+ "aria-label": d ? "Pause" : "Play",
964
+ className: Ne.playButton,
965
+ children: d ? /* @__PURE__ */ e(Ce, { size: u.iconSize }) : /* @__PURE__ */ e(ke, { size: u.iconSize })
1331
966
  }
1332
967
  ),
1333
- /* @__PURE__ */ jsx15(Box7, { style: { flex: 1, minWidth: 80 }, children: /* @__PURE__ */ jsx15(
1334
- AudioWaveform,
968
+ /* @__PURE__ */ e(k, { style: { flex: 1, minWidth: 80 }, children: /* @__PURE__ */ e(
969
+ le,
1335
970
  {
1336
- audioRef,
1337
- currentTime,
1338
- onSeek: handleSeek,
1339
- waveColor,
1340
- progressColor,
1341
- height: config.waveHeight,
1342
- barWidth: config.barWidth,
1343
- barGap: config.barGap
971
+ audioRef: l,
972
+ currentTime: i,
973
+ onSeek: b,
974
+ waveColor: a,
975
+ progressColor: s,
976
+ height: u.waveHeight,
977
+ barWidth: u.barWidth,
978
+ barGap: u.barGap
1344
979
  }
1345
980
  ) })
1346
981
  ]
@@ -1348,275 +983,248 @@ var MiniAudioPlayer = forwardRef2(
1348
983
  );
1349
984
  }
1350
985
  );
1351
- MiniAudioPlayer.displayName = "MiniAudioPlayer";
1352
-
1353
- // src/PrincipleCard/PrincipleCard.tsx
1354
- import { Paper as Paper5, Title as Title3, Text as Text10, Group as Group7 } from "@mantine/core";
1355
-
1356
- // src/PrincipleCard/PrincipleCard.module.css
1357
- var PrincipleCard_default = {};
1358
-
1359
- // src/PrincipleCard/PrincipleCard.tsx
1360
- import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
1361
- function PrincipleCard({
1362
- accentColor,
1363
- title,
1364
- description,
1365
- doHint,
1366
- dontHint
986
+ Zt.displayName = "MiniAudioPlayer";
987
+ const en = "_root_1bah1_1", tn = {
988
+ root: en
989
+ };
990
+ function jn({
991
+ accentColor: t,
992
+ title: o,
993
+ description: a,
994
+ doHint: s,
995
+ dontHint: r
1367
996
  }) {
1368
- return /* @__PURE__ */ jsxs15(
1369
- Paper5,
997
+ return /* @__PURE__ */ m(
998
+ U,
1370
999
  {
1371
- className: PrincipleCard_default.root,
1000
+ className: tn.root,
1372
1001
  p: "lg",
1373
1002
  radius: "md",
1374
- style: { borderLeftColor: accentColor },
1003
+ style: { borderLeftColor: t },
1375
1004
  children: [
1376
- /* @__PURE__ */ jsx16(Title3, { order: 3, size: "h4", mb: "xs", children: title }),
1377
- /* @__PURE__ */ jsx16(Text10, { c: "dimmed", children: description }),
1378
- (doHint || dontHint) && /* @__PURE__ */ jsxs15(Group7, { gap: "sm", mt: "md", wrap: "wrap", children: [
1379
- doHint && /* @__PURE__ */ jsx16(HintBadge, { variant: "do", children: doHint }),
1380
- dontHint && /* @__PURE__ */ jsx16(HintBadge, { variant: "dont", children: dontHint })
1005
+ /* @__PURE__ */ e(oe, { order: 3, size: "h4", mb: "xs", children: o }),
1006
+ /* @__PURE__ */ e(N, { c: "dimmed", children: a }),
1007
+ (s || r) && /* @__PURE__ */ m(F, { gap: "sm", mt: "md", wrap: "wrap", children: [
1008
+ s && /* @__PURE__ */ e(we, { variant: "do", children: s }),
1009
+ r && /* @__PURE__ */ e(we, { variant: "dont", children: r })
1381
1010
  ] })
1382
1011
  ]
1383
1012
  }
1384
1013
  );
1385
1014
  }
1386
-
1387
- // src/SpeedDial/SpeedDial.tsx
1388
- import { useState as useState12, useCallback as useCallback7 } from "react";
1389
- import { ActionIcon as ActionIcon3, Transition, Tooltip, Box as Box8 } from "@mantine/core";
1390
- import { IconPlus } from "@tabler/icons-react";
1391
-
1392
- // src/SpeedDial/SpeedDial.module.css
1393
- var SpeedDial_default = {};
1394
-
1395
- // src/SpeedDial/SpeedDial.tsx
1396
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
1397
- function SpeedDial({
1398
- actions,
1399
- icon,
1400
- openIcon,
1401
- direction = "up",
1402
- color = "blue",
1403
- size = 56,
1404
- defaultOpen = false,
1405
- open: controlledOpen,
1406
- onOpenChange,
1407
- style,
1408
- className
1015
+ const nn = "_root_ydu7j_1", on = "_actions_ydu7j_22", sn = "_fab_ydu7j_43", an = "_actionButton_ydu7j_61", ne = {
1016
+ root: nn,
1017
+ actions: on,
1018
+ fab: sn,
1019
+ actionButton: an
1020
+ };
1021
+ function Gn({
1022
+ actions: t,
1023
+ icon: o,
1024
+ openIcon: a,
1025
+ direction: s = "up",
1026
+ color: r = "blue",
1027
+ size: f = 56,
1028
+ defaultOpen: y = !1,
1029
+ open: g,
1030
+ onOpenChange: _,
1031
+ style: l,
1032
+ className: d
1409
1033
  }) {
1410
- var _a;
1411
- const [uncontrolledOpen, setUncontrolledOpen] = useState12(defaultOpen);
1412
- const isOpen = controlledOpen != null ? controlledOpen : uncontrolledOpen;
1413
- const toggle = useCallback7(() => {
1414
- const next = !isOpen;
1415
- setUncontrolledOpen(next);
1416
- onOpenChange == null ? void 0 : onOpenChange(next);
1417
- }, [isOpen, onOpenChange]);
1418
- const close = useCallback7(() => {
1419
- setUncontrolledOpen(false);
1420
- onOpenChange == null ? void 0 : onOpenChange(false);
1421
- }, [onOpenChange]);
1422
- const isVertical = direction === "up" || direction === "down";
1423
- return /* @__PURE__ */ jsxs16(
1424
- Box8,
1034
+ const [w, i] = z(y), v = g ?? w, u = S(() => {
1035
+ const n = !v;
1036
+ i(n), _ == null || _(n);
1037
+ }, [v, _]), c = S(() => {
1038
+ i(!1), _ == null || _(!1);
1039
+ }, [_]), b = s === "up" || s === "down";
1040
+ return /* @__PURE__ */ m(
1041
+ k,
1425
1042
  {
1426
- className: `${SpeedDial_default.root} ${className != null ? className : ""}`,
1427
- style,
1428
- "data-direction": direction,
1043
+ className: `${ne.root} ${d ?? ""}`,
1044
+ style: l,
1045
+ "data-direction": s,
1429
1046
  children: [
1430
- /* @__PURE__ */ jsx17("div", { className: SpeedDial_default.actions, "data-direction": direction, children: actions.map((action, i) => {
1431
- const index = direction === "up" || direction === "left" ? actions.length - 1 - i : i;
1432
- return /* @__PURE__ */ jsx17(
1433
- Transition,
1047
+ /* @__PURE__ */ e("div", { className: ne.actions, "data-direction": s, children: t.map((n, p) => {
1048
+ const I = s === "up" || s === "left" ? t.length - 1 - p : p;
1049
+ return /* @__PURE__ */ e(
1050
+ De,
1434
1051
  {
1435
- mounted: isOpen,
1436
- transition: isVertical ? "slide-up" : "slide-right",
1052
+ mounted: v,
1053
+ transition: b ? "slide-up" : "slide-right",
1437
1054
  duration: 200,
1438
1055
  timingFunction: "ease",
1439
- enterDelay: index * 40,
1440
- children: (transitionStyles) => /* @__PURE__ */ jsx17(Tooltip, { label: action.label, position: isVertical ? "left" : "top", children: /* @__PURE__ */ jsx17(
1441
- ActionIcon3,
1056
+ enterDelay: I * 40,
1057
+ children: (T) => /* @__PURE__ */ e(Fe, { label: n.label, position: b ? "left" : "top", children: /* @__PURE__ */ e(
1058
+ Y,
1442
1059
  {
1443
1060
  variant: "filled",
1444
1061
  color: "gray",
1445
1062
  radius: "xl",
1446
- size: size * 0.7,
1447
- style: transitionStyles,
1448
- className: SpeedDial_default.actionButton,
1063
+ size: f * 0.7,
1064
+ style: T,
1065
+ className: ne.actionButton,
1449
1066
  onClick: () => {
1450
- action.onClick();
1451
- close();
1067
+ n.onClick(), c();
1452
1068
  },
1453
- "aria-label": action.label,
1454
- children: action.icon
1069
+ "aria-label": n.label,
1070
+ children: n.icon
1455
1071
  }
1456
1072
  ) })
1457
1073
  },
1458
- action.label
1074
+ n.label
1459
1075
  );
1460
1076
  }) }),
1461
- /* @__PURE__ */ jsx17(
1462
- ActionIcon3,
1077
+ /* @__PURE__ */ e(
1078
+ Y,
1463
1079
  {
1464
1080
  variant: "filled",
1465
- color,
1081
+ color: r,
1466
1082
  radius: "xl",
1467
- size,
1468
- onClick: toggle,
1469
- className: SpeedDial_default.fab,
1470
- "data-open": isOpen || void 0,
1471
- "aria-label": isOpen ? "Close actions" : "Open actions",
1472
- children: isOpen ? (_a = openIcon != null ? openIcon : icon) != null ? _a : /* @__PURE__ */ jsx17(IconPlus, { size: size * 0.45 }) : icon != null ? icon : /* @__PURE__ */ jsx17(IconPlus, { size: size * 0.45 })
1083
+ size: f,
1084
+ onClick: u,
1085
+ className: ne.fab,
1086
+ "data-open": v || void 0,
1087
+ "aria-label": v ? "Close actions" : "Open actions",
1088
+ children: v ? a ?? o ?? /* @__PURE__ */ e(ue, { size: f * 0.45 }) : o ?? /* @__PURE__ */ e(ue, { size: f * 0.45 })
1473
1089
  }
1474
1090
  )
1475
1091
  ]
1476
1092
  }
1477
1093
  );
1478
1094
  }
1479
-
1480
- // src/SplitSection/SplitSection.tsx
1481
- import {
1482
- Box as Box9,
1483
- Badge as Badge2,
1484
- Text as Text11,
1485
- Title as Title4,
1486
- Stack as Stack2
1487
- } from "@mantine/core";
1488
-
1489
- // src/SplitSection/SplitSection.module.css
1490
- var SplitSection_default = {};
1491
-
1492
- // src/SplitSection/SplitSection.tsx
1493
- import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
1494
- function SplitSection({
1495
- badge,
1496
- badgeColor = "violet",
1497
- subtitle,
1498
- title,
1499
- titleColor = "blue",
1500
- preTitle,
1501
- description,
1502
- actions,
1503
- heading,
1504
- children,
1505
- stickyHeading = false,
1506
- py,
1507
- reversed = false,
1508
- id,
1509
- className
1095
+ const rn = "_container_9xj91_1", cn = "_layout_9xj91_16", ln = "_reversed_9xj91_29", dn = "_headingSide_9xj91_39", un = "_sticky_9xj91_49", mn = "_stickyInner_9xj91_54", hn = "_contentSide_9xj91_65", pn = "_title_9xj91_76", fn = "_preTitle_9xj91_82", _n = "_titleHighlight_9xj91_88", vn = "_description_9xj91_95", W = {
1096
+ container: rn,
1097
+ layout: cn,
1098
+ reversed: ln,
1099
+ headingSide: dn,
1100
+ sticky: un,
1101
+ stickyInner: mn,
1102
+ contentSide: hn,
1103
+ title: pn,
1104
+ preTitle: fn,
1105
+ titleHighlight: _n,
1106
+ description: vn
1107
+ };
1108
+ function Rn({
1109
+ badge: t,
1110
+ badgeColor: o = "violet",
1111
+ subtitle: a,
1112
+ title: s,
1113
+ titleColor: r = "blue",
1114
+ preTitle: f,
1115
+ description: y,
1116
+ actions: g,
1117
+ heading: _,
1118
+ children: l,
1119
+ stickyHeading: d = !1,
1120
+ py: w,
1121
+ reversed: i = !1,
1122
+ id: v,
1123
+ className: u
1510
1124
  }) {
1511
- const headingContent = heading != null ? heading : /* @__PURE__ */ jsxs17(Stack2, { gap: "sm", children: [
1512
- badge && /* @__PURE__ */ jsxs17(Box9, { children: [
1513
- /* @__PURE__ */ jsx18(
1514
- Badge2,
1125
+ const c = _ ?? /* @__PURE__ */ m(ce, { gap: "sm", children: [
1126
+ t && /* @__PURE__ */ m(k, { children: [
1127
+ /* @__PURE__ */ e(
1128
+ $e,
1515
1129
  {
1516
- color: badgeColor,
1130
+ color: o,
1517
1131
  variant: "filled",
1518
1132
  size: "sm",
1519
1133
  radius: 4,
1520
1134
  tt: "uppercase",
1521
1135
  fw: 700,
1522
- children: badge
1136
+ children: t
1523
1137
  }
1524
1138
  ),
1525
- subtitle && /* @__PURE__ */ jsx18(Text11, { size: "sm", c: "dimmed", mt: "xs", tt: "uppercase", style: { letterSpacing: "0.05em" }, children: subtitle })
1139
+ a && /* @__PURE__ */ e(N, { size: "sm", c: "dimmed", mt: "xs", tt: "uppercase", style: { letterSpacing: "0.05em" }, children: a })
1526
1140
  ] }),
1527
- !badge && subtitle && /* @__PURE__ */ jsx18(Text11, { size: "sm", c: "dimmed", tt: "uppercase", style: { letterSpacing: "0.05em" }, children: subtitle }),
1528
- (preTitle || title) && /* @__PURE__ */ jsxs17(Title4, { order: 2, className: SplitSection_default.title, children: [
1529
- preTitle && /* @__PURE__ */ jsx18("span", { className: SplitSection_default.preTitle, children: preTitle }),
1530
- preTitle && /* @__PURE__ */ jsx18("br", {}),
1531
- title && /* @__PURE__ */ jsx18(
1532
- Text11,
1141
+ !t && a && /* @__PURE__ */ e(N, { size: "sm", c: "dimmed", tt: "uppercase", style: { letterSpacing: "0.05em" }, children: a }),
1142
+ (f || s) && /* @__PURE__ */ m(oe, { order: 2, className: W.title, children: [
1143
+ f && /* @__PURE__ */ e("span", { className: W.preTitle, children: f }),
1144
+ f && /* @__PURE__ */ e("br", {}),
1145
+ s && /* @__PURE__ */ e(
1146
+ N,
1533
1147
  {
1534
1148
  component: "span",
1535
- inherit: true,
1536
- className: SplitSection_default.titleHighlight,
1537
- c: titleColor,
1538
- children: title
1149
+ inherit: !0,
1150
+ className: W.titleHighlight,
1151
+ c: r,
1152
+ children: s
1539
1153
  }
1540
1154
  )
1541
1155
  ] }),
1542
- description && /* @__PURE__ */ jsx18(Text11, { size: "lg", c: "dimmed", lh: 1.7, className: SplitSection_default.description, children: description }),
1543
- actions && /* @__PURE__ */ jsx18(Box9, { mt: "md", children: actions })
1156
+ y && /* @__PURE__ */ e(N, { size: "lg", c: "dimmed", lh: 1.7, className: W.description, children: y }),
1157
+ g && /* @__PURE__ */ e(k, { mt: "md", children: g })
1544
1158
  ] });
1545
- return /* @__PURE__ */ jsx18(
1546
- Box9,
1159
+ return /* @__PURE__ */ e(
1160
+ k,
1547
1161
  {
1548
1162
  component: "section",
1549
- py: py != null ? py : "calc(var(--mantine-spacing-xl) * 3)",
1163
+ py: w ?? "calc(var(--mantine-spacing-xl) * 3)",
1550
1164
  pos: "relative",
1551
- id,
1552
- className,
1553
- children: /* @__PURE__ */ jsx18(Box9, { className: SplitSection_default.container, children: /* @__PURE__ */ jsxs17(Box9, { className: `${SplitSection_default.layout} ${reversed ? SplitSection_default.reversed : ""}`, children: [
1554
- /* @__PURE__ */ jsx18(
1555
- Box9,
1165
+ id: v,
1166
+ className: u,
1167
+ children: /* @__PURE__ */ e(k, { className: W.container, children: /* @__PURE__ */ m(k, { className: `${W.layout} ${i ? W.reversed : ""}`, children: [
1168
+ /* @__PURE__ */ e(
1169
+ k,
1556
1170
  {
1557
- className: `${SplitSection_default.headingSide} ${stickyHeading ? SplitSection_default.sticky : ""}`,
1558
- children: /* @__PURE__ */ jsx18(Box9, { className: stickyHeading ? SplitSection_default.stickyInner : void 0, children: headingContent })
1171
+ className: `${W.headingSide} ${d ? W.sticky : ""}`,
1172
+ children: /* @__PURE__ */ e(k, { className: d ? W.stickyInner : void 0, children: c })
1559
1173
  }
1560
1174
  ),
1561
- /* @__PURE__ */ jsx18(Box9, { className: SplitSection_default.contentSide, children })
1175
+ /* @__PURE__ */ e(k, { className: W.contentSide, children: l })
1562
1176
  ] }) })
1563
1177
  }
1564
1178
  );
1565
1179
  }
1566
-
1567
- // src/TestimonialCard/TestimonialCard.tsx
1568
- import { Paper as Paper6, Text as Text12, Group as Group8, Avatar, Stack as Stack3 } from "@mantine/core";
1569
- import { IconQuote } from "@tabler/icons-react";
1570
-
1571
- // src/TestimonialCard/TestimonialCard.module.css
1572
- var TestimonialCard_default = {};
1573
-
1574
- // src/TestimonialCard/TestimonialCard.tsx
1575
- import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
1576
- function getInitials(name) {
1577
- return name.split(" ").map((part) => part[0]).join("").toUpperCase().slice(0, 2);
1180
+ const gn = "_root_ioshc_1", yn = "_quoteIcon_ioshc_6", Ie = {
1181
+ root: gn,
1182
+ quoteIcon: yn
1183
+ };
1184
+ function bn(t) {
1185
+ return t.split(" ").map((o) => o[0]).join("").toUpperCase().slice(0, 2);
1578
1186
  }
1579
- function TestimonialCard({
1580
- quote,
1581
- name,
1582
- role,
1583
- company,
1584
- avatarSrc,
1585
- accentColor = "blue"
1187
+ function An({
1188
+ quote: t,
1189
+ name: o,
1190
+ role: a,
1191
+ company: s,
1192
+ avatarSrc: r,
1193
+ accentColor: f = "blue"
1586
1194
  }) {
1587
- const borderColor = `var(--mantine-color-${accentColor}-filled)`;
1588
- return /* @__PURE__ */ jsxs18(Paper6, { className: TestimonialCard_default.root, p: "lg", radius: "md", style: { borderLeftColor: borderColor }, children: [
1589
- /* @__PURE__ */ jsx19(IconQuote, { size: 32, className: TestimonialCard_default.quoteIcon, color: borderColor }),
1590
- /* @__PURE__ */ jsx19(Text12, { fs: "italic", mt: "xs", mb: "md", children: quote }),
1591
- /* @__PURE__ */ jsxs18(Group8, { gap: "sm", children: [
1592
- /* @__PURE__ */ jsx19(Avatar, { src: avatarSrc, alt: name, color: accentColor, radius: "xl", size: "md", children: getInitials(name) }),
1593
- /* @__PURE__ */ jsxs18(Stack3, { gap: 0, children: [
1594
- /* @__PURE__ */ jsx19(Text12, { fw: 600, size: "sm", children: name }),
1595
- (role || company) && /* @__PURE__ */ jsx19(Text12, { size: "xs", c: "dimmed", children: [role, company].filter(Boolean).join(", ") })
1195
+ const y = `var(--mantine-color-${f}-filled)`;
1196
+ return /* @__PURE__ */ m(U, { className: Ie.root, p: "lg", radius: "md", style: { borderLeftColor: y }, children: [
1197
+ /* @__PURE__ */ e(Ve, { size: 32, className: Ie.quoteIcon, color: y }),
1198
+ /* @__PURE__ */ e(N, { fs: "italic", mt: "xs", mb: "md", children: t }),
1199
+ /* @__PURE__ */ m(F, { gap: "sm", children: [
1200
+ /* @__PURE__ */ e(je, { src: r, alt: o, color: f, radius: "xl", size: "md", children: bn(o) }),
1201
+ /* @__PURE__ */ m(ce, { gap: 0, children: [
1202
+ /* @__PURE__ */ e(N, { fw: 600, size: "sm", children: o }),
1203
+ (a || s) && /* @__PURE__ */ e(N, { size: "xs", c: "dimmed", children: [a, s].filter(Boolean).join(", ") })
1596
1204
  ] })
1597
1205
  ] })
1598
1206
  ] });
1599
1207
  }
1600
1208
  export {
1601
- AnimatedCounter,
1602
- AnimatedWaveform,
1603
- AudioPlayer,
1604
- AudioWaveform,
1605
- CodeBlock,
1606
- ColorPalette,
1607
- ColorSwatch,
1608
- Copyable,
1609
- DosDonts,
1610
- ExpandableCard,
1611
- FadeInSection,
1612
- FrequencyWave,
1613
- GradientSwatch,
1614
- Hero,
1615
- HintBadge,
1616
- MiniAudioPlayer,
1617
- PrincipleCard,
1618
- SpeedDial,
1619
- SplitSection,
1620
- TestimonialCard,
1621
- VideoBackground
1209
+ Cn as AnimatedCounter,
1210
+ fe as AnimatedWaveform,
1211
+ kn as AudioPlayer,
1212
+ le as AudioWaveform,
1213
+ Ln as CodeBlock,
1214
+ Bn as ColorPalette,
1215
+ Sn as ColorSwatch,
1216
+ de as Copyable,
1217
+ Tn as DosDonts,
1218
+ Pn as ExpandableCard,
1219
+ Wn as FadeInSection,
1220
+ En as FrequencyWave,
1221
+ Dn as GradientSwatch,
1222
+ Fn as Hero,
1223
+ we as HintBadge,
1224
+ Zt as MiniAudioPlayer,
1225
+ jn as PrincipleCard,
1226
+ Gn as SpeedDial,
1227
+ Rn as SplitSection,
1228
+ An as TestimonialCard,
1229
+ Tt as VideoBackground
1622
1230
  };