@synthex-engineers/refined-tech 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +187 -2
  2. package/dist/angular/index.cjs +1476 -0
  3. package/dist/angular/index.cjs.map +1 -0
  4. package/dist/angular/index.d.cts +237 -0
  5. package/dist/angular/index.d.ts +237 -0
  6. package/dist/angular/index.js +1463 -0
  7. package/dist/angular/index.js.map +1 -0
  8. package/dist/astro/components/ButtonOutline.astro +36 -0
  9. package/dist/astro/components/ButtonPrimary.astro +36 -0
  10. package/dist/astro/components/ButtonSecondary.astro +36 -0
  11. package/dist/astro/components/ClientTrustCard.astro +79 -0
  12. package/dist/astro/components/HelpTooltip.astro +119 -0
  13. package/dist/astro/components/LanguageSelectorPill.astro +35 -0
  14. package/dist/astro/components/ProcessStepCard.astro +68 -0
  15. package/dist/astro/components/SolutionBentoCard.astro +90 -0
  16. package/dist/astro/components/WavyUnderlineHeading.astro +90 -0
  17. package/dist/astro/index.d.ts +9 -0
  18. package/dist/astro/index.js +9 -0
  19. package/dist/chunk-EUXUH3YW.js +14 -0
  20. package/dist/chunk-EUXUH3YW.js.map +1 -0
  21. package/dist/chunk-PAHBEY3T.js +73 -0
  22. package/dist/chunk-PAHBEY3T.js.map +1 -0
  23. package/dist/index.cjs +910 -0
  24. package/dist/index.cjs.map +1 -0
  25. package/dist/index.d.cts +82 -0
  26. package/dist/index.d.ts +82 -0
  27. package/dist/index.js +833 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/react/index.cjs +1171 -0
  30. package/dist/react/index.cjs.map +1 -0
  31. package/dist/react/index.d.cts +239 -0
  32. package/dist/react/index.d.ts +239 -0
  33. package/dist/react/index.js +1138 -0
  34. package/dist/react/index.js.map +1 -0
  35. package/dist/registry/components.json +791 -0
  36. package/dist/tokens/index.cjs +85 -0
  37. package/dist/tokens/index.cjs.map +1 -0
  38. package/dist/tokens/index.d.cts +133 -0
  39. package/dist/tokens/index.d.ts +133 -0
  40. package/dist/tokens/index.js +4 -0
  41. package/dist/tokens/index.js.map +1 -0
  42. package/dist/tokens/refined-tech.css +73 -0
  43. package/dist/tokens/tailwind-preset.d.ts +46 -0
  44. package/dist/tokens/tailwind-preset.js +74 -0
  45. package/package.json +93 -4
@@ -0,0 +1,1171 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var gsap2 = require('gsap');
6
+ var MorphSVGPlugin = require('gsap/MorphSVGPlugin');
7
+
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var gsap2__default = /*#__PURE__*/_interopDefault(gsap2);
11
+
12
+ // src/components/library/animated-dropdown/react/AnimatedDropdown.tsx
13
+ var AnimatedDropdown = ({
14
+ items,
15
+ value,
16
+ onChange,
17
+ placeholder = "Seleccionar...",
18
+ header = "Opciones Disponibles",
19
+ disabled = false
20
+ }) => {
21
+ const [isOpen, setIsOpen] = react.useState(false);
22
+ const containerRef = react.useRef(null);
23
+ react.useEffect(() => {
24
+ const handleOutsideClick = (e) => {
25
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
26
+ setIsOpen(false);
27
+ }
28
+ };
29
+ document.addEventListener("click", handleOutsideClick);
30
+ return () => document.removeEventListener("click", handleOutsideClick);
31
+ }, []);
32
+ const selectedItem = items.find((it) => it.value === value);
33
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: "relative inline-block w-full font-sans text-left", children: [
34
+ /* @__PURE__ */ jsxRuntime.jsxs(
35
+ "button",
36
+ {
37
+ type: "button",
38
+ disabled,
39
+ onClick: () => setIsOpen(!isOpen),
40
+ className: "w-full flex items-center justify-between gap-3 bg-charcoal border border-slateBorder hover:border-slateBorder-focus px-4 py-2.5 rounded-xl text-sm text-white focus:outline-none focus:border-pistachio disabled:opacity-60 disabled:cursor-not-allowed transition-all cursor-pointer shadow-inner group",
41
+ "aria-haspopup": "listbox",
42
+ "aria-expanded": isOpen,
43
+ children: [
44
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 truncate", children: [
45
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-2 h-2 rounded-full bg-pistachio shrink-0" }),
46
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: selectedItem ? selectedItem.label : placeholder })
47
+ ] }),
48
+ /* @__PURE__ */ jsxRuntime.jsx(
49
+ "svg",
50
+ {
51
+ className: `w-4 h-4 text-muted transition-transform duration-200 ease-out group-hover:text-white shrink-0 ${isOpen ? "rotate-180" : ""}`,
52
+ fill: "none",
53
+ stroke: "currentColor",
54
+ "stroke-width": "2",
55
+ viewBox: "0 0 24 24",
56
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 9l-7 7-7-7", "stroke-linecap": "round", "stroke-linejoin": "round" })
57
+ }
58
+ )
59
+ ]
60
+ }
61
+ ),
62
+ /* @__PURE__ */ jsxRuntime.jsxs(
63
+ "div",
64
+ {
65
+ className: `absolute left-0 mt-2 w-full bg-slateSurface-card border border-slateBorder rounded-xl shadow-2xl py-1.5 z-40 overflow-hidden transition-all duration-200 ease-out origin-top ${isOpen ? "opacity-100 scale-100 pointer-events-auto" : "opacity-0 scale-95 pointer-events-none"}`,
66
+ role: "listbox",
67
+ children: [
68
+ header && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3.5 py-1.5 text-xs font-mono text-muted uppercase tracking-wider border-b border-slateBorder/50", children: header }),
69
+ items.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
70
+ "button",
71
+ {
72
+ type: "button",
73
+ disabled: item.disabled,
74
+ onClick: () => {
75
+ onChange(item.value);
76
+ setIsOpen(false);
77
+ },
78
+ className: "w-full text-left px-3.5 py-2.5 hover:bg-slateBorder text-white flex items-center justify-between text-xs transition-colors cursor-pointer disabled:opacity-40",
79
+ children: [
80
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: item.value === value ? "font-medium text-white" : "text-muted", children: item.label }),
81
+ item.value === value && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-pistachio font-bold", children: "\u2713" })
82
+ ]
83
+ },
84
+ String(item.value)
85
+ ))
86
+ ]
87
+ }
88
+ )
89
+ ] });
90
+ };
91
+ var BadgeStatus = ({
92
+ label,
93
+ status = "success",
94
+ className = ""
95
+ }) => {
96
+ const dotColor = {
97
+ success: "bg-pistachio",
98
+ warning: "bg-amber-500",
99
+ error: "bg-red-500",
100
+ neutral: "bg-muted"
101
+ }[status];
102
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-mono bg-slateSurface text-pistachio border border-slateBorder ${className}`, children: [
103
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `w-1.5 h-1.5 rounded-full ${dotColor}` }),
104
+ label
105
+ ] });
106
+ };
107
+ var BentoGridCard = ({
108
+ title,
109
+ description,
110
+ icon,
111
+ className = ""
112
+ }) => {
113
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `p-5 rounded-2xl bg-slateSurface-card border border-slateBorder hover:border-pistachio/40 transition-all flex flex-col gap-2 w-64 font-sans ${className}`, children: [
114
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-7 h-7 rounded-lg bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio", children: icon || /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" }) }) }),
115
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-semibold text-white", children: title }),
116
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted leading-relaxed", children: description })
117
+ ] });
118
+ };
119
+ var ButtonOutline = ({
120
+ children,
121
+ className = "",
122
+ type = "button",
123
+ disabled = false,
124
+ ...props
125
+ }) => {
126
+ return /* @__PURE__ */ jsxRuntime.jsx(
127
+ "button",
128
+ {
129
+ type,
130
+ disabled,
131
+ className: `bg-transparent text-pistachio border border-pistachio/70 hover:bg-pistachio/10 hover:border-pistachio disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans ${className}`,
132
+ ...props,
133
+ children
134
+ }
135
+ );
136
+ };
137
+ var ButtonPrimary = ({
138
+ children,
139
+ className = "",
140
+ type = "button",
141
+ disabled = false,
142
+ ...props
143
+ }) => {
144
+ return /* @__PURE__ */ jsxRuntime.jsx(
145
+ "button",
146
+ {
147
+ type,
148
+ disabled,
149
+ className: `bg-pistachio text-charcoal hover:bg-pistachio-hover disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm active:scale-95 inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans ${className}`,
150
+ ...props,
151
+ children
152
+ }
153
+ );
154
+ };
155
+ var ButtonSecondary = ({
156
+ children,
157
+ className = "",
158
+ type = "button",
159
+ disabled = false,
160
+ ...props
161
+ }) => {
162
+ return /* @__PURE__ */ jsxRuntime.jsx(
163
+ "button",
164
+ {
165
+ type,
166
+ disabled,
167
+ className: `bg-slateSurface text-white border border-slateBorder hover:bg-slateBorder hover:border-slateBorder-focus disabled:opacity-50 disabled:cursor-not-allowed px-4 py-2 rounded-md font-medium text-xs transition-colors shadow-sm inline-flex items-center justify-center gap-1.5 cursor-pointer font-sans ${className}`,
168
+ ...props,
169
+ children
170
+ }
171
+ );
172
+ };
173
+ var ClientTrustCard = ({
174
+ clientName = "SD-M GmbH",
175
+ location = "Alemania",
176
+ href = "https://sd-kpi.com/",
177
+ logoSrc = "/brand/sd-m-logo-dark.png",
178
+ className = ""
179
+ }) => {
180
+ return /* @__PURE__ */ jsxRuntime.jsxs(
181
+ "a",
182
+ {
183
+ href,
184
+ target: "_blank",
185
+ rel: "noopener noreferrer",
186
+ className: `group inline-flex items-center gap-4 sm:gap-5 px-6 sm:px-8 py-3.5 sm:py-4 rounded-2xl bg-slateSurface/60 border border-slateBorder hover:border-pistachio/50 hover:bg-slateCard/80 hover:scale-105 active:scale-95 transition-all duration-300 shadow-sm cursor-pointer font-sans ${className}`,
187
+ "aria-label": `${clientName}${location ? ` - ${location}` : ""}`,
188
+ children: [
189
+ logoSrc ? /* @__PURE__ */ jsxRuntime.jsx(
190
+ "img",
191
+ {
192
+ src: logoSrc,
193
+ alt: clientName,
194
+ className: "h-7 sm:h-8 w-auto object-contain opacity-90 group-hover:opacity-100 transition-opacity",
195
+ width: "120",
196
+ height: "44",
197
+ loading: "lazy"
198
+ }
199
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 rounded-lg bg-slateSurface border border-slateBorder flex items-center justify-center text-pistachio shrink-0", children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "w-5 h-5 text-pistachio transition-transform duration-300 group-hover:scale-105", viewBox: "0 0 32 32", fill: "none", children: [
200
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 21L12 16L16 19L24 10", stroke: "#E0F9B5", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }),
201
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "24", cy: "10", r: "2", fill: "#E0F9B5" }),
202
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 10H24V15", stroke: "#E0F9B5", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })
203
+ ] }) }),
204
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-left border-l border-slateBorder/60 pl-4 sm:pl-5", children: [
205
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block font-display font-bold text-base sm:text-lg text-white group-hover:text-pistachio transition-colors leading-tight", children: clientName }),
206
+ location && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-sm font-sans text-muted leading-tight mt-0.5", children: location })
207
+ ] })
208
+ ]
209
+ }
210
+ );
211
+ };
212
+ var CommandKTrigger = ({
213
+ placeholder = "Buscar o ejecutar...",
214
+ shortcut = "Ctrl K",
215
+ onOpen,
216
+ className = ""
217
+ }) => {
218
+ return /* @__PURE__ */ jsxRuntime.jsxs(
219
+ "button",
220
+ {
221
+ type: "button",
222
+ onClick: onOpen,
223
+ className: `flex items-center justify-between gap-3 bg-slateSurface text-muted border border-slateBorder px-3 py-1.5 rounded-md text-xs hover:border-pistachio/40 transition-colors w-48 cursor-pointer font-sans ${className}`,
224
+ children: [
225
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1.5", children: [
226
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }),
227
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: placeholder })
228
+ ] }),
229
+ /* @__PURE__ */ jsxRuntime.jsx("kbd", { className: "bg-charcoal border border-slateBorder text-xs px-1.5 py-0.5 rounded text-white font-mono", children: shortcut })
230
+ ]
231
+ }
232
+ );
233
+ };
234
+ var DropdownSelect = ({
235
+ id,
236
+ label,
237
+ placeholder,
238
+ required,
239
+ disabled,
240
+ errorText,
241
+ options,
242
+ value,
243
+ onChange
244
+ }) => {
245
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full space-y-1.5", children: [
246
+ label && /* @__PURE__ */ jsxRuntime.jsxs("label", { htmlFor: id, className: "block text-xs font-medium text-white/80", children: [
247
+ label,
248
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-pistachio ml-0.5", children: "*" })
249
+ ] }),
250
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
251
+ /* @__PURE__ */ jsxRuntime.jsxs(
252
+ "select",
253
+ {
254
+ id,
255
+ disabled,
256
+ value,
257
+ onChange: (e) => onChange(e.target.value),
258
+ className: "w-full appearance-none bg-charcoal border border-slateBorder hover:border-slateBorder-focus rounded-xl px-4 py-2.5 pr-10 text-sm text-white focus:outline-none focus:border-pistachio disabled:opacity-60 disabled:cursor-not-allowed transition-colors cursor-pointer",
259
+ children: [
260
+ placeholder && /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: true, className: "bg-charcoal-card text-muted", children: placeholder }),
261
+ options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx(
262
+ "option",
263
+ {
264
+ value: opt.value,
265
+ disabled: opt.disabled,
266
+ className: "bg-charcoal-card text-white",
267
+ children: opt.label
268
+ },
269
+ String(opt.value)
270
+ ))
271
+ ]
272
+ }
273
+ ),
274
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3.5 text-muted", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 9l-7 7-7-7", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
275
+ ] }),
276
+ errorText && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-red-400 mt-1", children: errorText })
277
+ ] });
278
+ };
279
+ var FooterBounce = ({
280
+ color = "#E0F9B5",
281
+ className = ""
282
+ }) => {
283
+ const pathRef = react.useRef(null);
284
+ const triggerBounce = () => {
285
+ if (!pathRef.current) return;
286
+ gsap2__default.default.fromTo(
287
+ pathRef.current,
288
+ { attr: { d: "M 0,160 Q 720,310 1440,160 L 1440,320 L 0,320 Z" } },
289
+ {
290
+ duration: 2.2,
291
+ attr: { d: "M 0,160 Q 720,160 1440,160 L 1440,320 L 0,320 Z" },
292
+ ease: "elastic.out(1.8, 0.22)",
293
+ overwrite: "auto"
294
+ }
295
+ );
296
+ };
297
+ react.useEffect(() => {
298
+ triggerBounce();
299
+ }, []);
300
+ return /* @__PURE__ */ jsxRuntime.jsxs(
301
+ "div",
302
+ {
303
+ className: `relative w-full overflow-hidden bg-charcoal border border-slateBorder rounded-xl p-4 flex flex-col items-center justify-center gap-3 ${className}`,
304
+ children: [
305
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-full h-16", viewBox: "0 0 1440 320", preserveAspectRatio: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
306
+ "path",
307
+ {
308
+ ref: pathRef,
309
+ fill: color,
310
+ d: "M 0,160 Q 720,160 1440,160 L 1440,320 L 0,320 Z"
311
+ }
312
+ ) }),
313
+ /* @__PURE__ */ jsxRuntime.jsxs(
314
+ "button",
315
+ {
316
+ type: "button",
317
+ onClick: triggerBounce,
318
+ className: "inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder text-xs font-mono transition-colors cursor-pointer",
319
+ children: [
320
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3.5 h-3.5 text-pistachio", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx(
321
+ "path",
322
+ {
323
+ strokeLinecap: "round",
324
+ strokeLinejoin: "round",
325
+ d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"
326
+ }
327
+ ) }),
328
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Recargar animaci\xF3n" })
329
+ ]
330
+ }
331
+ )
332
+ ]
333
+ }
334
+ );
335
+ };
336
+ var MagneticButton = ({
337
+ children,
338
+ strength = 0.35,
339
+ className = "",
340
+ type = "button",
341
+ disabled = false,
342
+ ...props
343
+ }) => {
344
+ const btnRef = react.useRef(null);
345
+ react.useEffect(() => {
346
+ const el = btnRef.current;
347
+ if (!el) return;
348
+ const xTo = gsap2__default.default.quickTo(el, "x", { duration: 0.3, ease: "power2.out" });
349
+ const yTo = gsap2__default.default.quickTo(el, "y", { duration: 0.3, ease: "power2.out" });
350
+ const handleMouseMove = (e) => {
351
+ const { left, top, width, height } = el.getBoundingClientRect();
352
+ const x = (e.clientX - (left + width / 2)) * strength;
353
+ const y = (e.clientY - (top + height / 2)) * strength;
354
+ xTo(x);
355
+ yTo(y);
356
+ };
357
+ const handleMouseLeave = () => {
358
+ xTo(0);
359
+ yTo(0);
360
+ };
361
+ el.addEventListener("mousemove", handleMouseMove);
362
+ el.addEventListener("mouseleave", handleMouseLeave);
363
+ return () => {
364
+ el.removeEventListener("mousemove", handleMouseMove);
365
+ el.removeEventListener("mouseleave", handleMouseLeave);
366
+ };
367
+ }, [strength]);
368
+ return /* @__PURE__ */ jsxRuntime.jsx(
369
+ "button",
370
+ {
371
+ ref: btnRef,
372
+ type,
373
+ disabled,
374
+ className: `px-4 py-2.5 rounded-lg bg-slateSurface text-white border border-slateBorder text-sm font-medium hover:border-pistachio transition-colors relative cursor-pointer font-sans inline-flex items-center justify-center gap-2 select-none shadow-sm active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed ${className}`,
375
+ ...props,
376
+ children
377
+ }
378
+ );
379
+ };
380
+ var Preloader = ({ onFinish, className = "" }) => {
381
+ const containerRef = react.useRef(null);
382
+ const initialPaths = [
383
+ "M 18 50 L 44 32 L 44 68 Z",
384
+ "M 54 30 L 63 30 L 63 70 L 54 70 Z",
385
+ "M 96 50 L 70 68 L 70 32 Z",
386
+ "M 135 34 A 16 16 0 1 0 135 66 A 16 16 0 1 0 135 34 Z",
387
+ "M 152 40 L 180 40 L 166 75 Z",
388
+ "M 183 41 L 209 41 L 209 67 L 183 67 Z",
389
+ "M 215 31 L 229 31 L 229 68 L 215 68 Z",
390
+ "M 235 29 L 261 29 L 261 68 L 235 68 Z",
391
+ "M 278 41 A 14 14 0 1 0 278 69 A 14 14 0 1 0 278 41 Z",
392
+ "M 308 41 L 322 55 L 308 69 L 294 55 Z"
393
+ ];
394
+ const targets = [
395
+ "#st-target-bracket-left",
396
+ "#st-target-slash",
397
+ "#st-target-bracket-right",
398
+ "#st-target-char-s",
399
+ "#st-target-char-y",
400
+ "#st-target-char-n",
401
+ "#st-target-char-t",
402
+ "#st-target-char-h",
403
+ "#st-target-char-e",
404
+ "#st-target-char-x"
405
+ ];
406
+ const restart = () => {
407
+ const el = containerRef.current;
408
+ if (!el) return;
409
+ try {
410
+ gsap2__default.default.registerPlugin(MorphSVGPlugin.MorphSVGPlugin);
411
+ } catch {
412
+ }
413
+ initialPaths.forEach((path, i) => {
414
+ const shape = el.querySelector(`.st-shape-${i}`);
415
+ if (shape) {
416
+ shape.setAttribute("d", path);
417
+ }
418
+ });
419
+ const group = el.querySelector(".st-morph-group");
420
+ const tl = gsap2__default.default.timeline({
421
+ onComplete: () => onFinish?.(),
422
+ overwrite: "auto"
423
+ });
424
+ tl.fromTo(group, { opacity: 0 }, { opacity: 1, duration: 0.3, ease: "power2.out" });
425
+ targets.forEach((targetSelector, i) => {
426
+ tl.to(
427
+ el.querySelector(`.st-shape-${i}`),
428
+ {
429
+ morphSVG: targetSelector,
430
+ duration: 0.85,
431
+ ease: "power2.inOut"
432
+ },
433
+ 0.15 + i * 0.035
434
+ );
435
+ });
436
+ };
437
+ react.useEffect(() => {
438
+ restart();
439
+ }, []);
440
+ return /* @__PURE__ */ jsxRuntime.jsxs(
441
+ "div",
442
+ {
443
+ ref: containerRef,
444
+ className: `p-6 bg-charcoal border border-slateBorder rounded-xl flex flex-col items-center justify-center gap-4 w-full ${className}`,
445
+ children: [
446
+ /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 350 100", className: "w-full max-w-[360px] overflow-visible select-none", children: [
447
+ /* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
448
+ /* @__PURE__ */ jsxRuntime.jsx("path", { id: "st-target-bracket-left", d: "M 40 29 L 18 50 L 40 71 L 44.5 66.5 L 27 50 L 44.5 33.5 Z" }),
449
+ /* @__PURE__ */ jsxRuntime.jsx("path", { id: "st-target-slash", d: "M 50.5 70 L 64.5 30 L 68.5 31.5 L 54.5 71.5 Z" }),
450
+ /* @__PURE__ */ jsxRuntime.jsx("path", { id: "st-target-bracket-right", d: "M 74 29 L 96 50 L 74 71 L 69.5 66.5 L 87 50 L 69.5 33.5 Z" }),
451
+ /* @__PURE__ */ jsxRuntime.jsx(
452
+ "path",
453
+ {
454
+ id: "st-target-char-s",
455
+ d: "M135.12 68.59L135.12 68.59Q130.42 68.59 127.02 67.08Q123.62 65.57 120.86 62.38L120.86 62.38L126.37 56.93Q128.21 59.09 130.42 60.22Q132.64 61.36 135.66 61.36L135.66 61.36Q138.36 61.36 139.84 60.39Q141.33 59.41 141.33 57.69L141.33 57.69Q141.33 55.90 140.03 54.82Q138.74 53.74 136.71 53.02Q134.69 52.29 132.39 51.45Q130.10 50.61 128.05 49.34Q125.99 48.07 124.72 45.97Q123.46 43.86 123.46 40.51L123.46 40.51Q123.46 37.00 125.16 34.49Q126.86 31.98 129.88 30.63Q132.91 29.28 136.85 29.28L136.85 29.28Q140.84 29.28 144.16 30.71Q147.49 32.14 149.65 34.52L149.65 34.52L144.14 39.97Q142.41 38.19 140.66 37.33Q138.90 36.46 136.69 36.46L136.69 36.46Q134.42 36.46 133.15 37.30Q131.88 38.14 131.88 39.70L131.88 39.70Q131.88 41.38 133.15 42.35Q134.42 43.32 136.47 44.05Q138.52 44.78 140.82 45.62Q143.11 46.45 145.14 47.78Q147.16 49.10 148.46 51.29Q149.75 53.47 149.75 56.93L149.75 56.93Q149.75 62.44 145.87 65.52Q141.98 68.59 135.12 68.59Z"
456
+ }
457
+ ),
458
+ /* @__PURE__ */ jsxRuntime.jsx("path", { id: "st-target-char-y", d: "M164.23 79.07L155.75 79.07L161.69 66.22L151.70 41.76L160.61 41.76L165.85 57.74L171.19 41.76L180.10 41.76L168.87 68.11L164.23 79.07Z" }),
459
+ /* @__PURE__ */ jsxRuntime.jsx(
460
+ "path",
461
+ {
462
+ id: "st-target-char-n",
463
+ d: "M191.50 68L183.23 68L183.23 41.76L191.50 41.76L191.50 43.86Q194.41 41.22 198.84 41.22L198.84 41.22Q201.70 41.22 203.97 42.59Q206.24 43.97 207.53 46.24Q208.83 48.51 208.83 51.21L208.83 51.21L208.83 68L200.57 68L200.57 53.04Q200.57 50.99 199.30 49.72Q198.03 48.45 196.09 48.45L196.09 48.45Q194.09 48.45 192.79 49.72Q191.50 50.99 191.50 53.04L191.50 53.04L191.50 68Z"
464
+ }
465
+ ),
466
+ /* @__PURE__ */ jsxRuntime.jsx(
467
+ "path",
468
+ {
469
+ id: "st-target-char-t",
470
+ d: "M226.11 68L217.85 68L217.85 48.78L211.91 48.78L211.91 41.76L217.85 41.76L217.85 30.90L226.11 30.90L226.11 41.76L232.05 41.76L232.05 48.78L226.11 48.78L226.11 68Z"
471
+ }
472
+ ),
473
+ /* @__PURE__ */ jsxRuntime.jsx(
474
+ "path",
475
+ {
476
+ id: "st-target-char-h",
477
+ d: "M243.93 68L235.67 68L235.67 28.80L243.93 28.80L243.93 43.70Q246.74 41.22 251.00 41.22L251.00 41.22Q254.03 41.22 256.35 42.48Q258.67 43.75 259.97 46.02Q261.26 48.29 261.26 51.21L261.26 51.21L261.26 68L253.00 68L253.00 53.04Q253.00 50.99 251.73 49.72Q250.46 48.45 248.52 48.45L248.52 48.45Q246.52 48.45 245.23 49.72Q243.93 50.99 243.93 53.04L243.93 53.04L243.93 68Z"
478
+ }
479
+ ),
480
+ /* @__PURE__ */ jsxRuntime.jsx(
481
+ "path",
482
+ {
483
+ id: "st-target-char-e",
484
+ d: "M279.52 68.59L279.52 68.59Q275.25 68.59 271.93 66.84Q268.61 65.08 266.72 61.98Q264.83 58.87 264.83 54.88L264.83 54.88Q264.83 50.94 266.69 47.86Q268.55 44.78 271.74 42.97Q274.93 41.16 278.92 41.16L278.92 41.16Q282.76 41.16 285.75 42.86Q288.75 44.56 290.45 47.51Q292.15 50.45 292.15 54.28L292.15 54.28Q292.15 55.74 291.77 57.58L291.77 57.58L272.98 57.63Q273.63 59.85 275.30 61.03Q276.98 62.22 279.46 62.22L279.46 62.22Q283.40 62.22 285.73 59.52L285.73 59.52L290.26 64.06Q288.32 66.33 285.56 67.46Q282.81 68.59 279.52 68.59ZM278.98 47.48L278.98 47.48Q276.71 47.48 275.14 48.67Q273.58 49.86 272.98 51.96L272.98 51.96L284.43 51.91Q283.40 47.48 278.98 47.48Z"
485
+ }
486
+ ),
487
+ /* @__PURE__ */ jsxRuntime.jsx("path", { id: "st-target-char-x", d: "M302.52 68L293.50 68L302.90 54.61L293.99 41.76L303.65 41.76L308.03 48.88L312.46 41.76L321.42 41.76L312.67 54.45L321.96 68L312.40 68L307.54 60.17L302.52 68Z" })
488
+ ] }),
489
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { className: "st-morph-group", children: [
490
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-0", d: "M 18 50 L 44 32 L 44 68 Z", fill: "#E0F9B5" }),
491
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-1", d: "M 54 30 L 63 30 L 63 70 L 54 70 Z", fill: "#E0F9B5" }),
492
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-2", d: "M 96 50 L 70 68 L 70 32 Z", fill: "#E0F9B5" }),
493
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-3", d: "M 135 34 A 16 16 0 1 0 135 66 A 16 16 0 1 0 135 34 Z", fill: "#FFFFFF" }),
494
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-4", d: "M 152 40 L 180 40 L 166 75 Z", fill: "#FFFFFF" }),
495
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-5", d: "M 183 41 L 209 41 L 209 67 L 183 67 Z", fill: "#FFFFFF" }),
496
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-6", d: "M 215 31 L 229 31 L 229 68 L 215 68 Z", fill: "#FFFFFF" }),
497
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-7", d: "M 235 29 L 261 29 L 261 68 L 235 68 Z", fill: "#FFFFFF" }),
498
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-8", d: "M 278 41 A 14 14 0 1 0 278 69 A 14 14 0 1 0 278 41 Z", fill: "#FFFFFF" }),
499
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "st-shape-9", d: "M 308 41 L 322 55 L 308 69 L 294 55 Z", fill: "#FFFFFF" })
500
+ ] })
501
+ ] }),
502
+ /* @__PURE__ */ jsxRuntime.jsxs(
503
+ "button",
504
+ {
505
+ type: "button",
506
+ onClick: restart,
507
+ className: "inline-flex items-center gap-2 px-3.5 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder hover:border-pistachio/50 text-xs font-mono transition-all cursor-pointer shadow-sm active:scale-95",
508
+ children: [
509
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3.5 h-3.5 text-pistachio", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" }) }),
510
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Recargar animaci\xF3n" })
511
+ ]
512
+ }
513
+ )
514
+ ]
515
+ }
516
+ );
517
+ };
518
+ var HelpTooltip = ({
519
+ text,
520
+ title = "Informaci\xF3n",
521
+ ariaLabel
522
+ }) => {
523
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative inline-flex items-center group/tooltip font-sans select-none", children: [
524
+ /* @__PURE__ */ jsxRuntime.jsx(
525
+ "button",
526
+ {
527
+ type: "button",
528
+ className: "w-5 h-5 rounded-full bg-slateSurface border border-slateBorder text-muted hover:text-pistachio hover:border-pistachio/50 flex items-center justify-center text-xs font-mono transition-colors cursor-help focus:outline-none focus:border-pistachio",
529
+ "aria-label": ariaLabel || text,
530
+ children: "?"
531
+ }
532
+ ),
533
+ /* @__PURE__ */ jsxRuntime.jsxs(
534
+ "div",
535
+ {
536
+ className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-2 rounded-xl bg-charcoal border border-slateBorder shadow-2xl text-xs text-white/90 whitespace-normal w-56 text-center opacity-0 scale-95 pointer-events-none group-hover/tooltip:opacity-100 group-hover/tooltip:scale-100 group-focus-within/tooltip:opacity-100 group-focus-within/tooltip:scale-100 transition-all duration-200 ease-out z-50 origin-bottom",
537
+ role: "tooltip",
538
+ children: [
539
+ title && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-1.5 mb-1 text-pistachio font-semibold font-mono text-xs", children: [
540
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-pistachio" }),
541
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: title })
542
+ ] }),
543
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted leading-relaxed", children: text }),
544
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-full left-1/2 -translate-x-1/2 -mt-1 w-2 h-2 bg-charcoal border-r border-b border-slateBorder rotate-45" })
545
+ ]
546
+ }
547
+ )
548
+ ] });
549
+ };
550
+ var InputText = ({
551
+ className = "",
552
+ placeholder = "",
553
+ ...props
554
+ }) => {
555
+ return /* @__PURE__ */ jsxRuntime.jsx(
556
+ "input",
557
+ {
558
+ type: "text",
559
+ placeholder,
560
+ className: `bg-charcoal border border-slateBorder focus:border-pistachio focus:outline-none focus:ring-1 focus:ring-pistachio text-white px-3 py-1.5 rounded-md text-xs font-mono transition-all w-48 placeholder-muted disabled:opacity-50 ${className}`,
561
+ ...props
562
+ }
563
+ );
564
+ };
565
+ var LanguageSelectorDropdown = ({
566
+ currentLang = "es",
567
+ onLangChange,
568
+ className = ""
569
+ }) => {
570
+ const [isOpen, setIsOpen] = react.useState(false);
571
+ const containerRef = react.useRef(null);
572
+ react.useEffect(() => {
573
+ const handleClickOutside = (e) => {
574
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
575
+ setIsOpen(false);
576
+ }
577
+ };
578
+ if (isOpen) {
579
+ document.addEventListener("click", handleClickOutside);
580
+ }
581
+ return () => document.removeEventListener("click", handleClickOutside);
582
+ }, [isOpen]);
583
+ const selectLang = (lang) => {
584
+ setIsOpen(false);
585
+ if (lang !== currentLang) {
586
+ onLangChange?.(lang);
587
+ }
588
+ };
589
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: `relative inline-block text-left shrink-0 font-sans ${className}`, children: [
590
+ /* @__PURE__ */ jsxRuntime.jsxs(
591
+ "button",
592
+ {
593
+ type: "button",
594
+ onClick: () => setIsOpen(!isOpen),
595
+ className: "flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-code font-medium text-white/80 hover:text-white bg-slateSurface hover:bg-slateBorder/80 border border-slateBorder hover:border-pistachio/50 transition-all cursor-pointer shadow-sm group select-none",
596
+ "aria-haspopup": "listbox",
597
+ "aria-expanded": isOpen,
598
+ "aria-label": `Idioma: ${currentLang.toUpperCase()}`,
599
+ children: [
600
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-pistachio shrink-0" }),
601
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tracking-wider uppercase text-pistachio font-bold", children: currentLang }),
602
+ /* @__PURE__ */ jsxRuntime.jsx(
603
+ "svg",
604
+ {
605
+ className: `w-3.5 h-3.5 text-white/50 transition-transform duration-200 ease-out group-hover:text-white shrink-0 ${isOpen ? "rotate-180" : ""}`,
606
+ fill: "none",
607
+ stroke: "currentColor",
608
+ "stroke-width": "2",
609
+ viewBox: "0 0 24 24",
610
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 9l-7 7-7-7", "stroke-linecap": "round", "stroke-linejoin": "round" })
611
+ }
612
+ )
613
+ ]
614
+ }
615
+ ),
616
+ isOpen && /* @__PURE__ */ jsxRuntime.jsxs(
617
+ "div",
618
+ {
619
+ className: "absolute right-0 mt-2 w-44 bg-charcoal border border-slateBorder rounded-xl shadow-2xl py-1.5 z-50 overflow-hidden origin-top",
620
+ role: "listbox",
621
+ children: [
622
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3 py-1 text-xs font-mono text-muted uppercase tracking-wider border-b border-slateBorder/50", children: "Idioma / Language" }),
623
+ /* @__PURE__ */ jsxRuntime.jsxs(
624
+ "button",
625
+ {
626
+ type: "button",
627
+ onClick: () => selectLang("es"),
628
+ className: "w-full text-left px-3 py-2 hover:bg-slateBorder flex items-center justify-between text-xs font-code transition-colors cursor-pointer text-white",
629
+ children: [
630
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
631
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white/60 font-mono text-xs", children: "ES" }),
632
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: currentLang === "es" ? "font-medium text-white" : "text-white/70", children: "Espa\xF1ol" })
633
+ ] }),
634
+ currentLang === "es" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-pistachio font-bold", children: "\u2713" })
635
+ ]
636
+ }
637
+ ),
638
+ /* @__PURE__ */ jsxRuntime.jsxs(
639
+ "button",
640
+ {
641
+ type: "button",
642
+ onClick: () => selectLang("en"),
643
+ className: "w-full text-left px-3 py-2 hover:bg-slateBorder flex items-center justify-between text-xs font-code transition-colors cursor-pointer text-white",
644
+ children: [
645
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
646
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white/60 font-mono text-xs", children: "EN" }),
647
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: currentLang === "en" ? "font-medium text-white" : "text-white/70", children: "English" })
648
+ ] }),
649
+ currentLang === "en" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-pistachio font-bold", children: "\u2713" })
650
+ ]
651
+ }
652
+ )
653
+ ]
654
+ }
655
+ )
656
+ ] });
657
+ };
658
+ var LanguageSelectorPill = ({
659
+ currentLang = "es",
660
+ onLangChange,
661
+ className = ""
662
+ }) => {
663
+ const nextLang = currentLang === "es" ? "en" : "es";
664
+ return /* @__PURE__ */ jsxRuntime.jsxs(
665
+ "button",
666
+ {
667
+ type: "button",
668
+ onClick: () => onLangChange?.(nextLang),
669
+ className: `inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-code font-medium text-white/80 hover:text-white bg-slateSurface hover:bg-slateBorder/80 border border-slateBorder hover:border-pistachio/50 transition-all cursor-pointer shadow-sm group active:scale-95 select-none ${className}`,
670
+ "aria-label": `Idioma: ${currentLang.toUpperCase()} - Cambiar a ${nextLang.toUpperCase()}`,
671
+ children: [
672
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-pistachio shrink-0" }),
673
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: currentLang === "es" ? "text-pistachio font-bold" : "text-white/40 group-hover:text-white transition-colors", children: "ES" }),
674
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white/30 font-light", children: "/" }),
675
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: currentLang === "en" ? "text-pistachio font-bold" : "text-white/40 group-hover:text-white transition-colors", children: "EN" })
676
+ ]
677
+ }
678
+ );
679
+ };
680
+ var MagicLinkCard = ({
681
+ email,
682
+ onResend,
683
+ className = ""
684
+ }) => {
685
+ return /* @__PURE__ */ jsxRuntime.jsxs(
686
+ "div",
687
+ {
688
+ className: `p-6 rounded-2xl bg-slateSurface-card border border-slateBorder max-w-sm w-full text-center flex flex-col items-center gap-3 font-sans ${className}`,
689
+ children: [
690
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-10 h-10 rounded-xl bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx(
691
+ "path",
692
+ {
693
+ strokeLinecap: "round",
694
+ strokeLinejoin: "round",
695
+ d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
696
+ }
697
+ ) }) }),
698
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-white", children: "Revisa tu bandeja de entrada" }),
699
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted leading-relaxed", children: [
700
+ "Hemos enviado un enlace de acceso seguro a ",
701
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white font-mono", children: email }),
702
+ "."
703
+ ] }),
704
+ /* @__PURE__ */ jsxRuntime.jsx(
705
+ "button",
706
+ {
707
+ type: "button",
708
+ onClick: onResend,
709
+ className: "mt-2 text-xs text-pistachio hover:underline cursor-pointer",
710
+ children: "Reenviar enlace de acceso"
711
+ }
712
+ )
713
+ ]
714
+ }
715
+ );
716
+ };
717
+ var ManifestoIconBox = ({
718
+ size = 40,
719
+ className = ""
720
+ }) => {
721
+ return /* @__PURE__ */ jsxRuntime.jsx(
722
+ "div",
723
+ {
724
+ style: { width: `${size}px`, height: `${size}px` },
725
+ className: `rounded-xl bg-pistachio flex items-center justify-center shadow-sm ${className}`,
726
+ children: /* @__PURE__ */ jsxRuntime.jsx(
727
+ "svg",
728
+ {
729
+ xmlns: "http://www.w3.org/2000/svg",
730
+ viewBox: "0 0 200 200",
731
+ style: { width: `${size * 0.6}px`, height: `${size * 0.6}px` },
732
+ children: /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: "#111111", strokeWidth: "14", strokeLinecap: "round", strokeLinejoin: "round", fill: "none", transform: "translate(41, 56)", children: [
733
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "40,24 14,46 40,68" }),
734
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "53", y1: "72", x2: "69", y2: "20" }),
735
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "82,24 108,46 82,68" })
736
+ ] })
737
+ }
738
+ )
739
+ }
740
+ );
741
+ };
742
+ var MetricCard = ({
743
+ label,
744
+ value,
745
+ trend,
746
+ className = ""
747
+ }) => {
748
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `p-4 rounded-xl bg-slateSurface border border-slateBorder flex flex-col gap-1 w-56 font-sans ${className}`, children: [
749
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted uppercase font-mono tracking-wider", children: label }),
750
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-2xl font-bold text-white font-mono", children: value }),
751
+ trend && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-pistachio font-mono", children: [
752
+ "\u2191 ",
753
+ trend
754
+ ] })
755
+ ] });
756
+ };
757
+ var ModalDialog = ({
758
+ isOpen,
759
+ onClose,
760
+ title,
761
+ subtitle,
762
+ size = "md",
763
+ showCloseButton = true,
764
+ closeOnBackdrop = true,
765
+ children,
766
+ footer
767
+ }) => {
768
+ if (!isOpen) return null;
769
+ const sizeClasses = {
770
+ sm: "max-w-md",
771
+ md: "max-w-lg",
772
+ lg: "max-w-2xl",
773
+ xl: "max-w-3xl",
774
+ "2xl": "max-w-4xl"
775
+ };
776
+ return /* @__PURE__ */ jsxRuntime.jsx(
777
+ "div",
778
+ {
779
+ className: "fixed inset-0 w-screen h-screen min-h-screen z-50 flex items-center justify-center p-4 bg-black/80 backdrop-blur-md",
780
+ onClick: (e) => {
781
+ if (closeOnBackdrop && e.target === e.currentTarget) {
782
+ onClose();
783
+ }
784
+ },
785
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
786
+ "div",
787
+ {
788
+ className: `w-full bg-charcoal-card border border-slateBorder rounded-2xl shadow-2xl overflow-hidden flex flex-col max-h-[90vh] ${sizeClasses[size] || "max-w-lg"}`,
789
+ onClick: (e) => e.stopPropagation(),
790
+ children: [
791
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-6 py-4 sm:px-7 sm:py-5 border-b border-slateBorder-subtle flex items-center justify-between gap-4", children: [
792
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
793
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg sm:text-xl font-bold text-white font-display tracking-tight truncate", children: title }),
794
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted mt-0.5 truncate", children: subtitle })
795
+ ] }),
796
+ showCloseButton && /* @__PURE__ */ jsxRuntime.jsx(
797
+ "button",
798
+ {
799
+ type: "button",
800
+ onClick: onClose,
801
+ className: "w-8 h-8 rounded-lg text-muted hover:text-white hover:bg-slateBorder-subtle transition-colors flex items-center justify-center cursor-pointer flex-shrink-0",
802
+ title: "Cerrar modal",
803
+ "aria-label": "Cerrar modal",
804
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6L6 18M6 6l12 12", strokeLinecap: "round", strokeLinejoin: "round" }) })
805
+ }
806
+ )
807
+ ] }),
808
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-6 sm:p-7 overflow-y-auto flex-1 space-y-4", children }),
809
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 py-4 border-t border-slateBorder-subtle bg-charcoal", children: footer })
810
+ ]
811
+ }
812
+ )
813
+ }
814
+ );
815
+ };
816
+ var ProcessStepCard = ({
817
+ stepNumber = "01",
818
+ title,
819
+ description,
820
+ badge,
821
+ icon,
822
+ className = ""
823
+ }) => {
824
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: `p-8 rounded-3xl bg-slateSurface/80 border border-slateBorder hover:border-pistachio/40 transition-all duration-300 flex flex-col justify-between group shadow-sm font-sans h-full ${className}`, children: [
825
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
826
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mb-6", children: [
827
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-2xl sm:text-3xl font-mono font-bold text-pistachio tracking-tight", children: stepNumber }),
828
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 rounded-lg bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio", children: icon || /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", "stroke-width": "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4" }) }) })
829
+ ] }),
830
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl font-display font-bold text-white mb-3 group-hover:text-pistachio transition-colors", children: title }),
831
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted font-sans leading-relaxed", children: description })
832
+ ] }),
833
+ badge && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8 pt-4 border-t border-slateBorder/50 text-sm font-mono text-muted", children: badge })
834
+ ] });
835
+ };
836
+ var RoleViewSwitcher = ({
837
+ activeRole = "ADMIN",
838
+ onRoleChange,
839
+ className = ""
840
+ }) => {
841
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `inline-flex items-center bg-charcoal-surface border border-slateBorder p-0.5 rounded-xl text-xs select-none shadow-xs font-sans ${className}`, children: [
842
+ /* @__PURE__ */ jsxRuntime.jsxs(
843
+ "button",
844
+ {
845
+ type: "button",
846
+ onClick: () => onRoleChange?.("ADMIN"),
847
+ className: `inline-flex items-center gap-1.5 px-2.5 py-1 rounded-lg transition-all cursor-pointer ${activeRole === "ADMIN" ? "bg-pistachio text-charcoal font-semibold" : "text-muted hover:text-white"}`,
848
+ title: "Ver como Administrador",
849
+ children: [
850
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" }) }),
851
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Admin" })
852
+ ]
853
+ }
854
+ ),
855
+ /* @__PURE__ */ jsxRuntime.jsxs(
856
+ "button",
857
+ {
858
+ type: "button",
859
+ onClick: () => onRoleChange?.("USER"),
860
+ className: `inline-flex items-center gap-1.5 px-2.5 py-1 rounded-lg transition-all cursor-pointer ${activeRole === "USER" ? "bg-slateBorder text-white font-medium" : "text-muted hover:text-white"}`,
861
+ title: "Ver como Colaborador",
862
+ children: [
863
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }),
864
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Colaborador" })
865
+ ]
866
+ }
867
+ )
868
+ ] });
869
+ };
870
+ var SolutionBentoCard = ({
871
+ title,
872
+ description,
873
+ badge,
874
+ bulletPoints = [],
875
+ ctaText = "Ver tarifas",
876
+ ctaHref = "/servicios/",
877
+ icon,
878
+ className = ""
879
+ }) => {
880
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: `p-8 sm:p-10 rounded-3xl bg-slateSurface/80 border border-slateBorder hover:border-pistachio/40 transition-all duration-300 flex flex-col justify-between group shadow-sm font-sans h-full ${className}`, children: [
881
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
882
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mb-6", children: [
883
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-12 h-12 rounded-xl bg-pistachio/10 border border-pistachio/20 flex items-center justify-center text-pistachio group-hover:scale-105 transition-transform", children: icon || /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", "stroke-width": "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" }) }) }),
884
+ badge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-3 py-1 rounded-full bg-slateCard text-pistachio text-sm font-mono font-semibold border border-slateBorder", children: badge })
885
+ ] }),
886
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl sm:text-3xl font-display font-bold text-white mb-4 group-hover:text-pistachio transition-colors", children: title }),
887
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm sm:text-base text-muted font-sans leading-relaxed mb-8", children: description }),
888
+ bulletPoints.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-3 mb-10 text-sm font-sans text-white/80", children: bulletPoints.map((point, idx) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-3", children: [
889
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-pistachio mt-2 shrink-0" }),
890
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: point })
891
+ ] }, idx)) })
892
+ ] }),
893
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(
894
+ "a",
895
+ {
896
+ href: ctaHref,
897
+ className: "inline-flex items-center justify-between w-full px-5 py-3.5 rounded-xl bg-slateCard hover:bg-slateBorder/80 text-white hover:text-pistachio border border-slateBorder hover:border-pistachio/50 font-display font-semibold text-sm transition-all duration-200 group/btn",
898
+ children: [
899
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: ctaText }),
900
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-4 h-4 text-pistachio transform group-hover/btn:translate-x-1 transition-transform", fill: "none", stroke: "currentColor", "stroke-width": "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { "stroke-linecap": "round", "stroke-linejoin": "round", d: "M14 5l7 7m0 0l-7 7m7-7H3" }) })
901
+ ]
902
+ }
903
+ ) })
904
+ ] });
905
+ };
906
+ var TableLedgerRow = ({
907
+ index,
908
+ hash,
909
+ timestamp,
910
+ verified = true,
911
+ onCopyHash,
912
+ className = ""
913
+ }) => {
914
+ const truncatedHash = react.useMemo(() => {
915
+ if (!hash || hash.length <= 16) return hash;
916
+ return `${hash.slice(0, 8)}...${hash.slice(-8)}`;
917
+ }, [hash]);
918
+ const handleCopy = () => {
919
+ if (onCopyHash) {
920
+ onCopyHash(hash);
921
+ } else if (navigator.clipboard) {
922
+ navigator.clipboard.writeText(hash);
923
+ }
924
+ };
925
+ return /* @__PURE__ */ jsxRuntime.jsxs(
926
+ "div",
927
+ {
928
+ className: `flex items-center justify-between py-2 px-3 bg-charcoal hover:bg-charcoal-surface border-b border-slateBorder text-xs font-mono transition-colors ${className}`,
929
+ children: [
930
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
931
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted w-12 font-medium", children: [
932
+ "#",
933
+ index
934
+ ] }),
935
+ /* @__PURE__ */ jsxRuntime.jsx(
936
+ "button",
937
+ {
938
+ type: "button",
939
+ onClick: handleCopy,
940
+ className: "text-pistachio hover:underline cursor-pointer select-none font-medium",
941
+ title: "Copiar hash completo",
942
+ children: truncatedHash
943
+ }
944
+ )
945
+ ] }),
946
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
947
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted text-xs", children: timestamp }),
948
+ verified ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-pistachio", children: [
949
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-pistachio" }),
950
+ "Sellado"
951
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-amber-500", children: [
952
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-amber-500" }),
953
+ "Pendiente"
954
+ ] })
955
+ ] })
956
+ ]
957
+ }
958
+ );
959
+ };
960
+ var TimerWidget = ({
961
+ time = "00:00:00",
962
+ active = false,
963
+ onToggle,
964
+ className = ""
965
+ }) => {
966
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `inline-flex items-center gap-3 bg-charcoal border border-slateBorder px-3 py-1.5 rounded-lg font-mono text-xs ${className}`, children: [
967
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `w-2 h-2 rounded-full ${active ? "bg-pistachio" : "bg-muted"}` }),
968
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white font-bold tracking-wider", children: time }),
969
+ onToggle && /* @__PURE__ */ jsxRuntime.jsx(
970
+ "button",
971
+ {
972
+ onClick: onToggle,
973
+ className: "text-xs text-pistachio hover:underline cursor-pointer font-mono",
974
+ children: active ? "Pausar" : "Reanudar"
975
+ }
976
+ )
977
+ ] });
978
+ };
979
+ var ToggleSwitch = ({
980
+ label = "",
981
+ checked = false,
982
+ onChange,
983
+ className = ""
984
+ }) => {
985
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: `inline-flex items-center gap-2 cursor-pointer font-sans ${className}`, children: [
986
+ /* @__PURE__ */ jsxRuntime.jsx(
987
+ "input",
988
+ {
989
+ type: "checkbox",
990
+ checked,
991
+ onChange: (e) => onChange?.(e.target.checked),
992
+ className: "sr-only peer"
993
+ }
994
+ ),
995
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-4 bg-slateBorder rounded-full peer peer-checked:after:translate-x-full after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-charcoal after:rounded-full after:h-3 after:w-3 after:transition-all peer-checked:bg-pistachio relative" }),
996
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-white font-medium", children: label })
997
+ ] });
998
+ };
999
+ var WavyUnderlineHeading = ({
1000
+ prefixText = "Ingenier\xEDa con",
1001
+ highlightText = "total transparencia.",
1002
+ strokeColor = "#E0F9B5",
1003
+ className = "",
1004
+ showReload = true
1005
+ }) => {
1006
+ const pathRef = react.useRef(null);
1007
+ const triggerAnimation = () => {
1008
+ if (!pathRef.current) return;
1009
+ const length = Math.ceil(pathRef.current.getTotalLength()) + 20;
1010
+ gsap2__default.default.fromTo(
1011
+ pathRef.current,
1012
+ {
1013
+ strokeDasharray: length,
1014
+ strokeDashoffset: length,
1015
+ opacity: 1
1016
+ },
1017
+ {
1018
+ strokeDashoffset: 0,
1019
+ duration: 0.8,
1020
+ ease: "power2.inOut",
1021
+ overwrite: "auto"
1022
+ }
1023
+ );
1024
+ };
1025
+ react.useEffect(() => {
1026
+ triggerAnimation();
1027
+ }, []);
1028
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `w-full flex flex-col items-center justify-center gap-3 p-4 bg-charcoal border border-slateBorder rounded-xl font-display text-center ${className}`, children: [
1029
+ /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "text-xl sm:text-2xl md:text-3xl font-bold text-white tracking-tight leading-snug", children: [
1030
+ prefixText && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1031
+ prefixText,
1032
+ " "
1033
+ ] }),
1034
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-block text-pistachio", children: [
1035
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative z-10", children: highlightText }),
1036
+ /* @__PURE__ */ jsxRuntime.jsx(
1037
+ "svg",
1038
+ {
1039
+ className: "absolute left-0 -bottom-2 w-full h-3 overflow-visible pointer-events-none",
1040
+ viewBox: "0 0 300 16",
1041
+ preserveAspectRatio: "none",
1042
+ fill: "none",
1043
+ xmlns: "http://www.w3.org/2000/svg",
1044
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1045
+ "path",
1046
+ {
1047
+ ref: pathRef,
1048
+ d: "M2 10 Q 35 2, 75 9 T 150 9 T 225 9 T 298 9",
1049
+ stroke: strokeColor,
1050
+ strokeWidth: "3",
1051
+ strokeLinecap: "round"
1052
+ }
1053
+ )
1054
+ }
1055
+ )
1056
+ ] })
1057
+ ] }),
1058
+ showReload && /* @__PURE__ */ jsxRuntime.jsxs(
1059
+ "button",
1060
+ {
1061
+ type: "button",
1062
+ onClick: triggerAnimation,
1063
+ className: "inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-slateSurface hover:bg-slateBorder text-white border border-slateBorder text-xs font-mono transition-colors cursor-pointer mt-2",
1064
+ children: [
1065
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3.5 h-3.5 text-pistachio", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" }) }),
1066
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Recargar animaci\xF3n" })
1067
+ ]
1068
+ }
1069
+ )
1070
+ ] });
1071
+ };
1072
+ var WorkspaceSwitcher = ({
1073
+ workspaces = [
1074
+ { id: "synthex", name: "Synthex Matriz", isMain: true },
1075
+ { id: "filial-de", name: "Synthex GmbH (Alemania)" }
1076
+ ],
1077
+ currentWorkspace,
1078
+ onSelect,
1079
+ className = ""
1080
+ }) => {
1081
+ const [isOpen, setIsOpen] = react.useState(false);
1082
+ const [selected, setSelected] = react.useState(
1083
+ currentWorkspace || workspaces[0] || { id: "synthex", name: "Synthex Matriz", isMain: true }
1084
+ );
1085
+ const containerRef = react.useRef(null);
1086
+ react.useEffect(() => {
1087
+ if (currentWorkspace) {
1088
+ setSelected(currentWorkspace);
1089
+ }
1090
+ }, [currentWorkspace]);
1091
+ react.useEffect(() => {
1092
+ const handleClickOutside = (event) => {
1093
+ if (containerRef.current && !containerRef.current.contains(event.target)) {
1094
+ setIsOpen(false);
1095
+ }
1096
+ };
1097
+ document.addEventListener("mousedown", handleClickOutside);
1098
+ return () => document.removeEventListener("mousedown", handleClickOutside);
1099
+ }, []);
1100
+ const handleSelect = (item) => {
1101
+ setSelected(item);
1102
+ setIsOpen(false);
1103
+ onSelect?.(item);
1104
+ };
1105
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: `relative inline-block font-sans text-xs ${className}`, children: [
1106
+ /* @__PURE__ */ jsxRuntime.jsxs(
1107
+ "button",
1108
+ {
1109
+ type: "button",
1110
+ onClick: () => setIsOpen(!isOpen),
1111
+ className: "flex items-center gap-2 bg-charcoal border border-slateBorder hover:border-pistachio/40 px-3 py-1.5 rounded-lg text-white transition-colors cursor-pointer",
1112
+ children: [
1113
+ /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 200 200", width: "18", height: "18", children: [
1114
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "10", y: "10", width: "180", height: "180", rx: "52", fill: "#E0F9B5" }),
1115
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: "#111111", strokeWidth: "14", strokeLinecap: "round", strokeLinejoin: "round", fill: "none", transform: "translate(41, 56)", children: [
1116
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "40,24 14,46 40,68" }),
1117
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "53", y1: "72", x2: "69", y2: "20" }),
1118
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "82,24 108,46 82,68" })
1119
+ ] })
1120
+ ] }),
1121
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-white", children: selected?.name || "Seleccionar Empresa" }),
1122
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-muted text-xs font-mono transition-transform ${isOpen ? "rotate-180" : ""}`, children: "\u25BE" })
1123
+ ]
1124
+ }
1125
+ ),
1126
+ isOpen && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-0 mt-1 w-52 bg-slateSurface-card border border-slateBorder rounded-lg shadow-xl z-50 py-1 overflow-hidden", children: workspaces.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
1127
+ "button",
1128
+ {
1129
+ type: "button",
1130
+ onClick: () => handleSelect(item),
1131
+ className: "w-full text-left px-3 py-2 hover:bg-slateBorder text-white flex items-center justify-between text-xs transition-colors cursor-pointer",
1132
+ children: [
1133
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.name }),
1134
+ item.id === selected?.id && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-pistachio", children: "\u2713" })
1135
+ ]
1136
+ },
1137
+ item.id
1138
+ )) })
1139
+ ] });
1140
+ };
1141
+
1142
+ exports.AnimatedDropdown = AnimatedDropdown;
1143
+ exports.BadgeStatus = BadgeStatus;
1144
+ exports.BentoGridCard = BentoGridCard;
1145
+ exports.ButtonOutline = ButtonOutline;
1146
+ exports.ButtonPrimary = ButtonPrimary;
1147
+ exports.ButtonSecondary = ButtonSecondary;
1148
+ exports.ClientTrustCard = ClientTrustCard;
1149
+ exports.CommandKTrigger = CommandKTrigger;
1150
+ exports.DropdownSelect = DropdownSelect;
1151
+ exports.FooterBounce = FooterBounce;
1152
+ exports.HelpTooltip = HelpTooltip;
1153
+ exports.InputText = InputText;
1154
+ exports.LanguageSelectorDropdown = LanguageSelectorDropdown;
1155
+ exports.LanguageSelectorPill = LanguageSelectorPill;
1156
+ exports.MagicLinkCard = MagicLinkCard;
1157
+ exports.MagneticButton = MagneticButton;
1158
+ exports.ManifestoIconBox = ManifestoIconBox;
1159
+ exports.MetricCard = MetricCard;
1160
+ exports.ModalDialog = ModalDialog;
1161
+ exports.Preloader = Preloader;
1162
+ exports.ProcessStepCard = ProcessStepCard;
1163
+ exports.RoleViewSwitcher = RoleViewSwitcher;
1164
+ exports.SolutionBentoCard = SolutionBentoCard;
1165
+ exports.TableLedgerRow = TableLedgerRow;
1166
+ exports.TimerWidget = TimerWidget;
1167
+ exports.ToggleSwitch = ToggleSwitch;
1168
+ exports.WavyUnderlineHeading = WavyUnderlineHeading;
1169
+ exports.WorkspaceSwitcher = WorkspaceSwitcher;
1170
+ //# sourceMappingURL=index.cjs.map
1171
+ //# sourceMappingURL=index.cjs.map