@eduardoalvarez/arrecife 0.3.0 → 0.5.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.
- package/CHANGELOG.md +43 -0
- package/README.md +121 -1
- package/dist/brand/index.cjs +29 -10
- package/dist/brand/index.d.cts +9 -1
- package/dist/brand/index.d.ts +9 -1
- package/dist/brand/index.js +4 -2
- package/dist/chart/index.cjs +287 -0
- package/dist/chart/index.d.cts +127 -0
- package/dist/chart/index.d.ts +127 -0
- package/dist/chart/index.js +103 -0
- package/dist/chunk-KPZNNMV5.js +83 -0
- package/dist/chunk-MLKGABMK.js +7 -0
- package/dist/chunk-NHS7ETKJ.js +27 -0
- package/dist/{chunk-I7GYZD2A.js → chunk-TSPJOM6K.js} +5 -7
- package/dist/chunk-UOWIDFCB.js +81 -0
- package/dist/{chunk-VSMW2CT4.js → chunk-VPT32GPG.js} +2 -1
- package/dist/{chunk-ND45OQOC.js → chunk-YZ2SDOVZ.js} +29 -35
- package/dist/chunk-ZEOQKRQ7.js +19 -0
- package/dist/form/index.cjs +301 -0
- package/dist/form/index.d.cts +86 -0
- package/dist/form/index.d.ts +86 -0
- package/dist/form/index.js +84 -0
- package/dist/index.cjs +1094 -293
- package/dist/index.d.cts +452 -37
- package/dist/index.d.ts +452 -37
- package/dist/index.js +963 -373
- package/dist/label-DuTvJGxD.d.cts +14 -0
- package/dist/label-DuTvJGxD.d.ts +14 -0
- package/dist/og/index.js +2 -1
- package/dist/shiki/index.js +2 -1
- package/dist/tema/index.cjs +94 -0
- package/dist/tema/index.d.cts +110 -0
- package/dist/tema/index.d.ts +110 -0
- package/dist/tema/index.js +2 -0
- package/dist/tokens/index.cjs +6 -0
- package/dist/tokens/index.d.cts +33 -1
- package/dist/tokens/index.d.ts +33 -1
- package/dist/tokens/index.js +3 -2
- package/dist/tokens/theme.css +43 -0
- package/llms.txt +351 -44
- package/package.json +31 -2
package/dist/index.cjs
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var AccordionPrimitive = require('@radix-ui/react-accordion');
|
|
4
4
|
var clsx = require('clsx');
|
|
5
5
|
var tailwindMerge = require('tailwind-merge');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
-
var
|
|
7
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
8
|
+
var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
|
|
8
9
|
var reactSlot = require('@radix-ui/react-slot');
|
|
10
|
+
var AvatarPrimitive = require('@radix-ui/react-avatar');
|
|
11
|
+
var react = require('react');
|
|
9
12
|
var locale = require('date-fns/locale');
|
|
10
13
|
var reactDayPicker = require('react-day-picker');
|
|
11
14
|
var CheckboxPrimitive = require('@radix-ui/react-checkbox');
|
|
@@ -21,7 +24,7 @@ var SwitchPrimitive = require('@radix-ui/react-switch');
|
|
|
21
24
|
var TabsPrimitive = require('@radix-ui/react-tabs');
|
|
22
25
|
var ToastPrimitive = require('@radix-ui/react-toast');
|
|
23
26
|
var TooltipPrimitive = require('@radix-ui/react-tooltip');
|
|
24
|
-
var
|
|
27
|
+
var dateFns = require('date-fns');
|
|
25
28
|
|
|
26
29
|
function _interopNamespace(e) {
|
|
27
30
|
if (e && e.__esModule) return e;
|
|
@@ -41,6 +44,8 @@ function _interopNamespace(e) {
|
|
|
41
44
|
return Object.freeze(n);
|
|
42
45
|
}
|
|
43
46
|
|
|
47
|
+
var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
|
|
48
|
+
var AlertDialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(AlertDialogPrimitive);
|
|
44
49
|
var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
|
|
45
50
|
var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
|
|
46
51
|
var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
|
|
@@ -249,6 +254,10 @@ var sintaxis = {
|
|
|
249
254
|
/** `markup.deleted`, `invalid`. */
|
|
250
255
|
invalido: dark.error
|
|
251
256
|
};
|
|
257
|
+
var series = {
|
|
258
|
+
dark: [dark.accent, dark.warm, brand.body, dark.textMuted],
|
|
259
|
+
light: [light.accent, light.warm, brand.body, light.textMuted]
|
|
260
|
+
};
|
|
252
261
|
var profundo = "#0D2129";
|
|
253
262
|
var gradient = {
|
|
254
263
|
dark: {
|
|
@@ -299,11 +308,94 @@ var tokens = {
|
|
|
299
308
|
size,
|
|
300
309
|
gradient,
|
|
301
310
|
sintaxis,
|
|
311
|
+
series,
|
|
302
312
|
shadow,
|
|
303
313
|
motion,
|
|
304
314
|
tagline,
|
|
305
315
|
naming
|
|
306
316
|
};
|
|
317
|
+
|
|
318
|
+
// src/tema/index.ts
|
|
319
|
+
var TEMA_CLAVE = "arrecife-tema";
|
|
320
|
+
var TEMA_ATRIBUTO = "data-theme";
|
|
321
|
+
var TEMA_EVENTO = "arrecife:tema";
|
|
322
|
+
var esTema = (valor) => valor === "dark" || valor === "light";
|
|
323
|
+
function temaActual() {
|
|
324
|
+
if (typeof document === "undefined") return "dark";
|
|
325
|
+
const puesto = document.documentElement.getAttribute(TEMA_ATRIBUTO);
|
|
326
|
+
return esTema(puesto) ? puesto : "dark";
|
|
327
|
+
}
|
|
328
|
+
function temaGuardado() {
|
|
329
|
+
if (typeof localStorage === "undefined") return null;
|
|
330
|
+
try {
|
|
331
|
+
const valor = localStorage.getItem(TEMA_CLAVE);
|
|
332
|
+
return esTema(valor) ? valor : null;
|
|
333
|
+
} catch {
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function temaPreferido() {
|
|
338
|
+
const guardado = temaGuardado();
|
|
339
|
+
if (guardado) return guardado;
|
|
340
|
+
if (typeof matchMedia === "undefined") return "dark";
|
|
341
|
+
return matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
|
|
342
|
+
}
|
|
343
|
+
function aplicarTema(tema, persistir = true) {
|
|
344
|
+
if (typeof document === "undefined") return;
|
|
345
|
+
document.documentElement.setAttribute(TEMA_ATRIBUTO, tema);
|
|
346
|
+
document.documentElement.style.colorScheme = tema;
|
|
347
|
+
if (persistir) {
|
|
348
|
+
try {
|
|
349
|
+
localStorage.setItem(TEMA_CLAVE, tema);
|
|
350
|
+
} catch {
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
dispatchEvent(new CustomEvent(TEMA_EVENTO, { detail: tema }));
|
|
354
|
+
}
|
|
355
|
+
function alternarTema() {
|
|
356
|
+
const siguiente = temaActual() === "dark" ? "light" : "dark";
|
|
357
|
+
aplicarTema(siguiente);
|
|
358
|
+
return siguiente;
|
|
359
|
+
}
|
|
360
|
+
function escucharTema(alCambiar) {
|
|
361
|
+
if (typeof window === "undefined") return () => {
|
|
362
|
+
};
|
|
363
|
+
const propio = (evento) => {
|
|
364
|
+
const detalle = evento.detail;
|
|
365
|
+
if (esTema(detalle)) alCambiar(detalle);
|
|
366
|
+
};
|
|
367
|
+
const otraPestana = (evento) => {
|
|
368
|
+
if (evento.key !== TEMA_CLAVE) return;
|
|
369
|
+
const tema = esTema(evento.newValue) ? evento.newValue : temaPreferido();
|
|
370
|
+
aplicarTema(tema, false);
|
|
371
|
+
alCambiar(tema);
|
|
372
|
+
};
|
|
373
|
+
addEventListener(TEMA_EVENTO, propio);
|
|
374
|
+
addEventListener("storage", otraPestana);
|
|
375
|
+
return () => {
|
|
376
|
+
removeEventListener(TEMA_EVENTO, propio);
|
|
377
|
+
removeEventListener("storage", otraPestana);
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
var scriptTema = [
|
|
381
|
+
"(function () {",
|
|
382
|
+
" var CLAVE = " + JSON.stringify(TEMA_CLAVE) + ";",
|
|
383
|
+
" function resolver() {",
|
|
384
|
+
" try {",
|
|
385
|
+
" var guardado = localStorage.getItem(CLAVE);",
|
|
386
|
+
' if (guardado === "dark" || guardado === "light") return guardado;',
|
|
387
|
+
" } catch (e) {}",
|
|
388
|
+
' return matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";',
|
|
389
|
+
" }",
|
|
390
|
+
" function aplicar() {",
|
|
391
|
+
" var tema = resolver();",
|
|
392
|
+
" document.documentElement.setAttribute(" + JSON.stringify(TEMA_ATRIBUTO) + ", tema);",
|
|
393
|
+
" document.documentElement.style.colorScheme = tema;",
|
|
394
|
+
" }",
|
|
395
|
+
" aplicar();",
|
|
396
|
+
' document.addEventListener("astro:after-swap", aplicar);',
|
|
397
|
+
"})();"
|
|
398
|
+
].join("\n");
|
|
307
399
|
var kebab = (nombre) => nombre.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
|
|
308
400
|
var escalas = Object.keys(typeScale);
|
|
309
401
|
var radios = Object.keys(radius);
|
|
@@ -325,6 +417,178 @@ var twMerge = tailwindMerge.extendTailwindMerge({
|
|
|
325
417
|
function cn(...inputs) {
|
|
326
418
|
return twMerge(clsx.clsx(inputs));
|
|
327
419
|
}
|
|
420
|
+
function Glyph({ children, ...props }) {
|
|
421
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
422
|
+
"svg",
|
|
423
|
+
{
|
|
424
|
+
viewBox: "0 0 16 16",
|
|
425
|
+
width: "1em",
|
|
426
|
+
height: "1em",
|
|
427
|
+
fill: "none",
|
|
428
|
+
stroke: "currentColor",
|
|
429
|
+
strokeWidth: 1.75,
|
|
430
|
+
strokeLinecap: "round",
|
|
431
|
+
strokeLinejoin: "round",
|
|
432
|
+
"aria-hidden": "true",
|
|
433
|
+
focusable: "false",
|
|
434
|
+
...props,
|
|
435
|
+
children
|
|
436
|
+
}
|
|
437
|
+
);
|
|
438
|
+
}
|
|
439
|
+
var Check = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 8.5 6.5 12 13 4.5" }) });
|
|
440
|
+
var Minus = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3.5 8h9" }) });
|
|
441
|
+
var ChevronDown = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 6l4 4 4-4" }) });
|
|
442
|
+
var ChevronUp = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 10l4-4 4 4" }) });
|
|
443
|
+
var ChevronLeft = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 4L6 8l4 4" }) });
|
|
444
|
+
var ChevronRight = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 4l4 4-4 4" }) });
|
|
445
|
+
var Close = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 4l8 8M12 4l-8 8" }) });
|
|
446
|
+
var Copy = (props) => /* @__PURE__ */ jsxRuntime.jsxs(Glyph, { ...props, children: [
|
|
447
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: "5.5", y: "5.5", width: "8", height: "8", rx: "1.5" }),
|
|
448
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10.5 3.5h-7a1.5 1.5 0 0 0-1.5 1.5v7" })
|
|
449
|
+
] });
|
|
450
|
+
var ArrowUpRight = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 11l6-6M5.5 5h5.5v5.5" }) });
|
|
451
|
+
var Ellipsis = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, strokeWidth: 2.25, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 8h.01M8 8h.01M12 8h.01" }) });
|
|
452
|
+
var Spinner = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
453
|
+
"svg",
|
|
454
|
+
{
|
|
455
|
+
viewBox: "0 0 16 16",
|
|
456
|
+
width: "1em",
|
|
457
|
+
height: "1em",
|
|
458
|
+
fill: "none",
|
|
459
|
+
stroke: "currentColor",
|
|
460
|
+
strokeWidth: 2,
|
|
461
|
+
strokeLinecap: "round",
|
|
462
|
+
"aria-hidden": "true",
|
|
463
|
+
focusable: "false",
|
|
464
|
+
className: "motion-safe:animate-spin",
|
|
465
|
+
...props,
|
|
466
|
+
children: [
|
|
467
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "8", r: "6", opacity: 0.3 }),
|
|
468
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 2a6 6 0 0 1 6 6" })
|
|
469
|
+
]
|
|
470
|
+
}
|
|
471
|
+
);
|
|
472
|
+
var Camara = (props) => /* @__PURE__ */ jsxRuntime.jsxs(Glyph, { ...props, children: [
|
|
473
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 5.5h2.6l1-1.5h4.8l1 1.5H14v7.5H2z" }),
|
|
474
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "9", r: "2.4" })
|
|
475
|
+
] });
|
|
476
|
+
var Sol = (props) => /* @__PURE__ */ jsxRuntime.jsxs(Glyph, { ...props, children: [
|
|
477
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "8", r: "3" }),
|
|
478
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 1.5v1.2M8 13.3v1.2M14.5 8h-1.2M2.7 8H1.5M12.6 3.4l-.85.85M4.25 11.75l-.85.85M12.6 12.6l-.85-.85M4.25 4.25l-.85-.85" })
|
|
479
|
+
] });
|
|
480
|
+
var Luna = (props) => /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13.5 9.4A5.8 5.8 0 0 1 6.6 2.5a5.8 5.8 0 1 0 6.9 6.9Z" }) });
|
|
481
|
+
function GlifoMedia({ children, ...props }) {
|
|
482
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
483
|
+
"svg",
|
|
484
|
+
{
|
|
485
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
486
|
+
viewBox: "0 0 24 24",
|
|
487
|
+
fill: "none",
|
|
488
|
+
"aria-hidden": "true",
|
|
489
|
+
focusable: "false",
|
|
490
|
+
...props,
|
|
491
|
+
children
|
|
492
|
+
}
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
var Play = (props) => /* @__PURE__ */ jsxRuntime.jsx(GlifoMedia, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 5v14l11-7z" }) });
|
|
496
|
+
var Pause = (props) => /* @__PURE__ */ jsxRuntime.jsx(GlifoMedia, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 4h4v16H6V4zm8 0h4v16h-4V4z" }) });
|
|
497
|
+
var Retry = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
498
|
+
GlifoMedia,
|
|
499
|
+
{
|
|
500
|
+
stroke: "currentColor",
|
|
501
|
+
strokeWidth: 2,
|
|
502
|
+
strokeLinecap: "round",
|
|
503
|
+
strokeLinejoin: "round",
|
|
504
|
+
...props,
|
|
505
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { 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" })
|
|
506
|
+
}
|
|
507
|
+
);
|
|
508
|
+
var GoBackSeconds = (props) => /* @__PURE__ */ jsxRuntime.jsxs(GlifoMedia, { stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", ...props, children: [
|
|
509
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5 8.5H13.8604C13.6452 8.5 13.4541 8.63772 13.386 8.84189L12.7194 10.8419C12.6114 11.1657 12.8524 11.5 13.1937 11.5H14.5C15.6046 11.5 16.5 12.3954 16.5 13.5C16.5 14.6046 15.6046 15.5 14.5 15.5H12.5" }),
|
|
510
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 10.5L10 8.5V15.5", strokeLinejoin: "round" }),
|
|
511
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
512
|
+
"path",
|
|
513
|
+
{
|
|
514
|
+
d: "M14 4.5L12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C8.7288 22 5.82446 20.4293 4 18.001M8 2.83209C6.87754 3.32251 5.86251 4.01303 5 4.85857C3.14864 6.67349 2 9.20261 2 12C2 12.6849 2.06886 13.3538 2.20004 14",
|
|
515
|
+
strokeLinejoin: "round"
|
|
516
|
+
}
|
|
517
|
+
)
|
|
518
|
+
] });
|
|
519
|
+
var AdvanceSeconds = (props) => /* @__PURE__ */ jsxRuntime.jsxs(GlifoMedia, { stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", ...props, children: [
|
|
520
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5 8.5H13.8604C13.6452 8.5 13.4541 8.63772 13.386 8.84189L12.7194 10.8419C12.6114 11.1657 12.8524 11.5 13.1937 11.5H14.5C15.6046 11.5 16.5 12.3954 16.5 13.5C16.5 14.6046 15.6046 15.5 14.5 15.5H12.5" }),
|
|
521
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 10.5L10 8.5V15.5", strokeLinejoin: "round" }),
|
|
522
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
523
|
+
"path",
|
|
524
|
+
{
|
|
525
|
+
d: "M10 4.5L12 2C6.47715 2 2 6.47715 2 12C2 12.6849 2.06886 13.3538 2.20004 14M16 2.83209C19.5318 4.3752 22 7.89936 22 12C22 17.5228 17.5228 22 12 22C8.72852 22 5.82443 20.4287 4 18",
|
|
526
|
+
strokeLinejoin: "round"
|
|
527
|
+
}
|
|
528
|
+
)
|
|
529
|
+
] });
|
|
530
|
+
var VolumeOn = (props) => /* @__PURE__ */ jsxRuntime.jsx(GlifoMedia, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z" }) });
|
|
531
|
+
var VolumeMuted = (props) => /* @__PURE__ */ jsxRuntime.jsx(GlifoMedia, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z" }) });
|
|
532
|
+
function Accordion({ className, ...props }) {
|
|
533
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
534
|
+
AccordionPrimitive__namespace.Root,
|
|
535
|
+
{
|
|
536
|
+
className: cn("border-hairline w-full border-t", className),
|
|
537
|
+
...props
|
|
538
|
+
}
|
|
539
|
+
);
|
|
540
|
+
}
|
|
541
|
+
function AccordionItem({
|
|
542
|
+
className,
|
|
543
|
+
...props
|
|
544
|
+
}) {
|
|
545
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Item, { className: cn("border-hairline border-b", className), ...props });
|
|
546
|
+
}
|
|
547
|
+
function AccordionTrigger({
|
|
548
|
+
className,
|
|
549
|
+
children,
|
|
550
|
+
headingLevel = 3,
|
|
551
|
+
...props
|
|
552
|
+
}) {
|
|
553
|
+
const Encabezado = `h${headingLevel}`;
|
|
554
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Encabezado, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
555
|
+
AccordionPrimitive__namespace.Trigger,
|
|
556
|
+
{
|
|
557
|
+
className: cn(
|
|
558
|
+
"gap-step-sm py-step-sm flex w-full cursor-pointer items-center justify-between text-left",
|
|
559
|
+
"font-sans text-lead font-medium text-text-primary",
|
|
560
|
+
"transition-standard",
|
|
561
|
+
"hover:text-accent",
|
|
562
|
+
"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
|
|
563
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
564
|
+
"[&[data-state=open]>svg]:rotate-180",
|
|
565
|
+
className
|
|
566
|
+
),
|
|
567
|
+
...props,
|
|
568
|
+
children: [
|
|
569
|
+
children,
|
|
570
|
+
/* @__PURE__ */ jsxRuntime.jsx(ChevronDown, { className: "text-text-muted shrink-0" })
|
|
571
|
+
]
|
|
572
|
+
}
|
|
573
|
+
) }) });
|
|
574
|
+
}
|
|
575
|
+
function AccordionContent({
|
|
576
|
+
className,
|
|
577
|
+
children,
|
|
578
|
+
...props
|
|
579
|
+
}) {
|
|
580
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
581
|
+
AccordionPrimitive__namespace.Content,
|
|
582
|
+
{
|
|
583
|
+
className: cn(
|
|
584
|
+
"overflow-hidden",
|
|
585
|
+
"motion-safe:data-[state=open]:desplegar motion-safe:data-[state=closed]:replegar"
|
|
586
|
+
),
|
|
587
|
+
...props,
|
|
588
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pb-step-md font-sans text-ui text-text-secondary max-w-measure", className), children })
|
|
589
|
+
}
|
|
590
|
+
);
|
|
591
|
+
}
|
|
328
592
|
var alert = classVarianceAuthority.cva("w-full rounded-card border p-step-md font-sans text-ui", {
|
|
329
593
|
variants: {
|
|
330
594
|
variant: {
|
|
@@ -395,273 +659,329 @@ function Alert({
|
|
|
395
659
|
}
|
|
396
660
|
);
|
|
397
661
|
}
|
|
398
|
-
var
|
|
399
|
-
|
|
662
|
+
var button = classVarianceAuthority.cva(
|
|
663
|
+
[
|
|
664
|
+
"inline-flex cursor-pointer items-center justify-center gap-step-xs whitespace-nowrap select-none",
|
|
665
|
+
"rounded-control font-sans font-medium",
|
|
666
|
+
"transition-standard",
|
|
667
|
+
"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
|
|
668
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
669
|
+
"[&_svg]:shrink-0"
|
|
670
|
+
],
|
|
400
671
|
{
|
|
401
672
|
variants: {
|
|
673
|
+
variant: {
|
|
674
|
+
primary: [
|
|
675
|
+
"bg-accent text-accent-on hover:bg-accent-hover",
|
|
676
|
+
"light:bg-brand-hull light:text-accent-on light:hover:bg-text-secondary"
|
|
677
|
+
],
|
|
678
|
+
conversion: "bg-warm text-warm-on hover:bg-warm-hover",
|
|
679
|
+
secondary: [
|
|
680
|
+
"border-hairline-hover border bg-transparent text-text-primary",
|
|
681
|
+
"hover:border-accent hover:text-accent"
|
|
682
|
+
],
|
|
683
|
+
tertiary: [
|
|
684
|
+
"bg-transparent font-mono font-normal text-text-secondary",
|
|
685
|
+
"hover:text-accent hover:underline hover:underline-offset-4"
|
|
686
|
+
]
|
|
687
|
+
},
|
|
402
688
|
size: {
|
|
403
|
-
sm: "
|
|
404
|
-
md: "
|
|
405
|
-
lg: "
|
|
406
|
-
|
|
689
|
+
sm: "h-8 px-control-sm text-label",
|
|
690
|
+
md: "h-10 px-control-md text-ui",
|
|
691
|
+
lg: "h-12 px-control-lg text-lead",
|
|
692
|
+
/** Cuadrado 42×42, sin texto. Lleva `aria-label` obligatorio. */
|
|
693
|
+
icon: "size-control-icon p-0"
|
|
407
694
|
}
|
|
408
695
|
},
|
|
409
|
-
|
|
696
|
+
compoundVariants: [
|
|
697
|
+
/**
|
|
698
|
+
* El terciario no tiene caja: ni padding horizontal ni alto de control.
|
|
699
|
+
* Va aquí y no como `px-0` en la variante para que gane al `px-*` del
|
|
700
|
+
* tamaño sin depender del orden en que cva concatena las clases.
|
|
701
|
+
*/
|
|
702
|
+
{ variant: "tertiary", size: ["sm", "md", "lg"], class: "h-auto px-0" }
|
|
703
|
+
],
|
|
704
|
+
defaultVariants: { variant: "primary", size: "md" }
|
|
410
705
|
}
|
|
411
706
|
);
|
|
412
|
-
function
|
|
413
|
-
return /* @__PURE__ */ jsxRuntime.jsx(AvatarPrimitive__namespace.Root, { className: cn(avatar({ size: size2 }), className), ...props });
|
|
414
|
-
}
|
|
415
|
-
function AvatarImage({
|
|
707
|
+
function Button({
|
|
416
708
|
className,
|
|
709
|
+
variant,
|
|
710
|
+
size: size2,
|
|
711
|
+
asChild = false,
|
|
712
|
+
loading = false,
|
|
713
|
+
icon,
|
|
714
|
+
children,
|
|
715
|
+
disabled,
|
|
417
716
|
...props
|
|
418
717
|
}) {
|
|
419
|
-
|
|
718
|
+
if (asChild) {
|
|
719
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slot, { className: cn(button({ variant, size: size2 }), className), ...props, children });
|
|
720
|
+
}
|
|
721
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
722
|
+
"button",
|
|
723
|
+
{
|
|
724
|
+
className: cn(button({ variant, size: size2 }), className),
|
|
725
|
+
disabled: disabled === true || loading,
|
|
726
|
+
"aria-busy": loading || void 0,
|
|
727
|
+
...props,
|
|
728
|
+
children: [
|
|
729
|
+
loading ? /* @__PURE__ */ jsxRuntime.jsx(Spinner, {}) : icon,
|
|
730
|
+
children
|
|
731
|
+
]
|
|
732
|
+
}
|
|
733
|
+
);
|
|
420
734
|
}
|
|
421
|
-
|
|
735
|
+
var AlertDialog = AlertDialogPrimitive__namespace.Root;
|
|
736
|
+
var AlertDialogTrigger = AlertDialogPrimitive__namespace.Trigger;
|
|
737
|
+
function AlertDialogOverlay({
|
|
422
738
|
className,
|
|
423
739
|
...props
|
|
424
740
|
}) {
|
|
425
741
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
426
|
-
|
|
742
|
+
AlertDialogPrimitive__namespace.Overlay,
|
|
427
743
|
{
|
|
428
|
-
className: cn(
|
|
429
|
-
"text-label font-mono text-text-secondary flex size-full items-center justify-center uppercase",
|
|
430
|
-
className
|
|
431
|
-
),
|
|
744
|
+
className: cn("bg-brand-hull/70 fixed inset-0 z-50", className),
|
|
432
745
|
...props
|
|
433
746
|
}
|
|
434
747
|
);
|
|
435
748
|
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
749
|
+
function AlertDialogContent({
|
|
750
|
+
className,
|
|
751
|
+
children,
|
|
752
|
+
...props
|
|
753
|
+
}) {
|
|
754
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(AlertDialogPrimitive__namespace.Portal, { children: [
|
|
755
|
+
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogOverlay, {}),
|
|
756
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
757
|
+
AlertDialogPrimitive__namespace.Content,
|
|
758
|
+
{
|
|
759
|
+
className: cn(
|
|
760
|
+
"fixed top-1/2 left-1/2 z-50 w-full max-w-content -translate-x-1/2 -translate-y-1/2",
|
|
761
|
+
"gap-step-md p-step-lg flex flex-col",
|
|
762
|
+
"rounded-panel border-border bg-surface shadow-standard border",
|
|
763
|
+
"text-text-primary font-sans",
|
|
764
|
+
className
|
|
765
|
+
),
|
|
766
|
+
...props,
|
|
767
|
+
children
|
|
447
768
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
451
|
-
);
|
|
452
|
-
function Badge({ className, variant, ...props }) {
|
|
453
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(badge({ variant }), className), ...props });
|
|
769
|
+
)
|
|
770
|
+
] });
|
|
454
771
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
"font-mono text-chip",
|
|
460
|
-
"border transition-standard"
|
|
461
|
-
],
|
|
462
|
-
{
|
|
463
|
-
variants: {
|
|
464
|
-
active: {
|
|
465
|
-
false: "border-warm/28 bg-transparent text-warm",
|
|
466
|
-
true: "border-warm bg-warm text-warm-on"
|
|
467
|
-
}
|
|
468
|
-
},
|
|
469
|
-
defaultVariants: { active: false }
|
|
470
|
-
}
|
|
471
|
-
);
|
|
472
|
-
function CategoryBadge({ className, active = false, ...props }) {
|
|
772
|
+
function AlertDialogHeader({ className, ...props }) {
|
|
773
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("gap-step-xs flex flex-col", className), ...props });
|
|
774
|
+
}
|
|
775
|
+
function AlertDialogFooter({ className, ...props }) {
|
|
473
776
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
474
|
-
"
|
|
777
|
+
"div",
|
|
475
778
|
{
|
|
476
|
-
"
|
|
477
|
-
className: cn(categoria({ active }), className),
|
|
779
|
+
className: cn("gap-step-sm flex flex-col-reverse sm:flex-row sm:justify-end", className),
|
|
478
780
|
...props
|
|
479
781
|
}
|
|
480
782
|
);
|
|
481
783
|
}
|
|
482
|
-
|
|
483
|
-
|
|
784
|
+
function AlertDialogTitle({
|
|
785
|
+
className,
|
|
786
|
+
...props
|
|
787
|
+
}) {
|
|
484
788
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
485
|
-
|
|
789
|
+
AlertDialogPrimitive__namespace.Title,
|
|
486
790
|
{
|
|
487
|
-
className: cn(
|
|
791
|
+
className: cn("text-h3 font-display text-text-primary", className),
|
|
488
792
|
...props
|
|
489
793
|
}
|
|
490
794
|
);
|
|
491
795
|
}
|
|
492
|
-
function
|
|
796
|
+
function AlertDialogDescription({
|
|
797
|
+
className,
|
|
798
|
+
...props
|
|
799
|
+
}) {
|
|
493
800
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
494
|
-
|
|
801
|
+
AlertDialogPrimitive__namespace.Description,
|
|
495
802
|
{
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
height: "1em",
|
|
499
|
-
fill: "none",
|
|
500
|
-
stroke: "currentColor",
|
|
501
|
-
strokeWidth: 1.75,
|
|
502
|
-
strokeLinecap: "round",
|
|
503
|
-
strokeLinejoin: "round",
|
|
504
|
-
"aria-hidden": "true",
|
|
505
|
-
focusable: "false",
|
|
506
|
-
...props,
|
|
507
|
-
children
|
|
803
|
+
className: cn("text-ui text-text-secondary max-w-measure", className),
|
|
804
|
+
...props
|
|
508
805
|
}
|
|
509
806
|
);
|
|
510
807
|
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
808
|
+
function AlertDialogCancel({
|
|
809
|
+
className,
|
|
810
|
+
...props
|
|
811
|
+
}) {
|
|
812
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
813
|
+
AlertDialogPrimitive__namespace.Cancel,
|
|
814
|
+
{
|
|
815
|
+
className: cn(button({ variant: "secondary" }), className),
|
|
816
|
+
...props
|
|
817
|
+
}
|
|
818
|
+
);
|
|
819
|
+
}
|
|
820
|
+
function AlertDialogAction({
|
|
821
|
+
className,
|
|
822
|
+
...props
|
|
823
|
+
}) {
|
|
824
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
825
|
+
AlertDialogPrimitive__namespace.Action,
|
|
826
|
+
{
|
|
827
|
+
className: cn(button({ variant: "primary" }), className),
|
|
828
|
+
...props
|
|
829
|
+
}
|
|
830
|
+
);
|
|
831
|
+
}
|
|
832
|
+
var avatar = classVarianceAuthority.cva(
|
|
833
|
+
"relative flex shrink-0 overflow-hidden rounded-pill bg-surface-raised border border-hairline",
|
|
526
834
|
{
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
className: "motion-safe:animate-spin",
|
|
537
|
-
...props,
|
|
538
|
-
children: [
|
|
539
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "8", r: "6", opacity: 0.3 }),
|
|
540
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 2a6 6 0 0 1 6 6" })
|
|
541
|
-
]
|
|
835
|
+
variants: {
|
|
836
|
+
size: {
|
|
837
|
+
sm: "size-8",
|
|
838
|
+
md: "size-10",
|
|
839
|
+
lg: "size-14",
|
|
840
|
+
xl: "size-24"
|
|
841
|
+
}
|
|
842
|
+
},
|
|
843
|
+
defaultVariants: { size: "md" }
|
|
542
844
|
}
|
|
543
845
|
);
|
|
544
|
-
function
|
|
846
|
+
function Avatar({ className, size: size2, ...props }) {
|
|
847
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AvatarPrimitive__namespace.Root, { className: cn(avatar({ size: size2 }), className), ...props });
|
|
848
|
+
}
|
|
849
|
+
function AvatarImage({
|
|
850
|
+
className,
|
|
851
|
+
...props
|
|
852
|
+
}) {
|
|
853
|
+
return /* @__PURE__ */ jsxRuntime.jsx(AvatarPrimitive__namespace.Image, { className: cn("aspect-square size-full object-cover", className), ...props });
|
|
854
|
+
}
|
|
855
|
+
function AvatarFallback({
|
|
856
|
+
className,
|
|
857
|
+
...props
|
|
858
|
+
}) {
|
|
545
859
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
546
|
-
|
|
860
|
+
AvatarPrimitive__namespace.Fallback,
|
|
547
861
|
{
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
...props,
|
|
554
|
-
children
|
|
862
|
+
className: cn(
|
|
863
|
+
"text-label font-mono text-text-secondary flex size-full items-center justify-center uppercase",
|
|
864
|
+
className
|
|
865
|
+
),
|
|
866
|
+
...props
|
|
555
867
|
}
|
|
556
868
|
);
|
|
557
869
|
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
870
|
+
function AvatarUpload({
|
|
871
|
+
src,
|
|
872
|
+
fallback,
|
|
873
|
+
onSelectFile,
|
|
874
|
+
accept = "image/*",
|
|
875
|
+
label = "Cambiar la foto",
|
|
876
|
+
size: size2,
|
|
877
|
+
disabled = false,
|
|
878
|
+
className,
|
|
879
|
+
...props
|
|
880
|
+
}) {
|
|
881
|
+
const id = react.useId();
|
|
882
|
+
const [previa, setPrevia] = react.useState(null);
|
|
883
|
+
react.useEffect(() => {
|
|
884
|
+
if (!previa) return;
|
|
885
|
+
return () => URL.revokeObjectURL(previa);
|
|
886
|
+
}, [previa]);
|
|
887
|
+
function elegir(evento) {
|
|
888
|
+
const archivo = evento.target.files?.[0];
|
|
889
|
+
if (!archivo) return;
|
|
890
|
+
setPrevia(URL.createObjectURL(archivo));
|
|
891
|
+
onSelectFile?.(archivo);
|
|
892
|
+
evento.target.value = "";
|
|
893
|
+
}
|
|
894
|
+
const imagen = previa ?? src;
|
|
895
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative inline-flex", className), ...props, children: [
|
|
896
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Avatar, { size: size2, children: [
|
|
897
|
+
imagen ? /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: imagen, alt: "" }) : null,
|
|
898
|
+
/* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: fallback })
|
|
899
|
+
] }),
|
|
900
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
901
|
+
"label",
|
|
902
|
+
{
|
|
903
|
+
htmlFor: id,
|
|
904
|
+
className: cn(
|
|
905
|
+
"rounded-pill absolute -right-1 -bottom-1 flex size-6 cursor-pointer items-center justify-center",
|
|
906
|
+
"border-hairline bg-surface-raised text-text-secondary border",
|
|
907
|
+
"transition-standard hover:text-accent hover:border-accent",
|
|
908
|
+
// El foco vive en el input, que está oculto: sin esto, tabular hasta
|
|
909
|
+
// el control no se ve por ninguna parte.
|
|
910
|
+
"has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-accent",
|
|
911
|
+
disabled && "pointer-events-none opacity-50"
|
|
912
|
+
),
|
|
913
|
+
children: [
|
|
914
|
+
/* @__PURE__ */ jsxRuntime.jsx(Camara, { "aria-hidden": "true" }),
|
|
915
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: label }),
|
|
916
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
917
|
+
"input",
|
|
918
|
+
{
|
|
919
|
+
id,
|
|
920
|
+
type: "file",
|
|
921
|
+
accept,
|
|
922
|
+
disabled,
|
|
923
|
+
onChange: elegir,
|
|
924
|
+
className: "sr-only"
|
|
925
|
+
}
|
|
926
|
+
)
|
|
927
|
+
]
|
|
928
|
+
}
|
|
929
|
+
)
|
|
930
|
+
] });
|
|
931
|
+
}
|
|
932
|
+
var badge = classVarianceAuthority.cva(
|
|
933
|
+
["inline-flex items-center gap-step-xs", "rounded-chip px-step-xs py-0.5", "font-sans text-tag", "transition-standard"],
|
|
562
934
|
{
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
935
|
+
variants: {
|
|
936
|
+
variant: {
|
|
937
|
+
neutral: "bg-surface-raised text-text-secondary",
|
|
938
|
+
accent: "bg-accent/8 text-text-primary",
|
|
939
|
+
warm: "bg-warm/8 text-text-primary",
|
|
940
|
+
success: "bg-success/8 text-text-primary",
|
|
941
|
+
warning: "bg-warning/8 text-text-primary",
|
|
942
|
+
error: "bg-error/8 text-text-primary"
|
|
943
|
+
}
|
|
944
|
+
},
|
|
945
|
+
defaultVariants: { variant: "neutral" }
|
|
569
946
|
}
|
|
570
947
|
);
|
|
571
|
-
|
|
572
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
"path",
|
|
576
|
-
{
|
|
577
|
-
d: "M14 4.5L12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C8.7288 22 5.82446 20.4293 4 18.001M8 2.83209C6.87754 3.32251 5.86251 4.01303 5 4.85857C3.14864 6.67349 2 9.20261 2 12C2 12.6849 2.06886 13.3538 2.20004 14",
|
|
578
|
-
strokeLinejoin: "round"
|
|
579
|
-
}
|
|
580
|
-
)
|
|
581
|
-
] });
|
|
582
|
-
var AdvanceSeconds = (props) => /* @__PURE__ */ jsxRuntime.jsxs(GlifoMedia, { stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", ...props, children: [
|
|
583
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5 8.5H13.8604C13.6452 8.5 13.4541 8.63772 13.386 8.84189L12.7194 10.8419C12.6114 11.1657 12.8524 11.5 13.1937 11.5H14.5C15.6046 11.5 16.5 12.3954 16.5 13.5C16.5 14.6046 15.6046 15.5 14.5 15.5H12.5" }),
|
|
584
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 10.5L10 8.5V15.5", strokeLinejoin: "round" }),
|
|
585
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
586
|
-
"path",
|
|
587
|
-
{
|
|
588
|
-
d: "M10 4.5L12 2C6.47715 2 2 6.47715 2 12C2 12.6849 2.06886 13.3538 2.20004 14M16 2.83209C19.5318 4.3752 22 7.89936 22 12C22 17.5228 17.5228 22 12 22C8.72852 22 5.82443 20.4287 4 18",
|
|
589
|
-
strokeLinejoin: "round"
|
|
590
|
-
}
|
|
591
|
-
)
|
|
592
|
-
] });
|
|
593
|
-
var VolumeOn = (props) => /* @__PURE__ */ jsxRuntime.jsx(GlifoMedia, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z" }) });
|
|
594
|
-
var VolumeMuted = (props) => /* @__PURE__ */ jsxRuntime.jsx(GlifoMedia, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z" }) });
|
|
595
|
-
var button = classVarianceAuthority.cva(
|
|
948
|
+
function Badge({ className, variant, ...props }) {
|
|
949
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(badge({ variant }), className), ...props });
|
|
950
|
+
}
|
|
951
|
+
var categoria = classVarianceAuthority.cva(
|
|
596
952
|
[
|
|
597
|
-
"inline-flex
|
|
598
|
-
"rounded-
|
|
599
|
-
"
|
|
600
|
-
"
|
|
601
|
-
"disabled:pointer-events-none disabled:opacity-50",
|
|
602
|
-
"[&_svg]:shrink-0"
|
|
953
|
+
"inline-flex items-center gap-step-xs",
|
|
954
|
+
"rounded-pill px-step-sm py-0.5",
|
|
955
|
+
"font-mono text-chip",
|
|
956
|
+
"border transition-standard"
|
|
603
957
|
],
|
|
604
958
|
{
|
|
605
959
|
variants: {
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
"light:bg-brand-hull light:text-accent-on light:hover:bg-text-secondary"
|
|
610
|
-
],
|
|
611
|
-
conversion: "bg-warm text-warm-on hover:bg-warm-hover",
|
|
612
|
-
secondary: [
|
|
613
|
-
"border-hairline-hover border bg-transparent text-text-primary",
|
|
614
|
-
"hover:border-accent hover:text-accent"
|
|
615
|
-
],
|
|
616
|
-
tertiary: [
|
|
617
|
-
"bg-transparent font-mono font-normal text-text-secondary",
|
|
618
|
-
"hover:text-accent hover:underline hover:underline-offset-4"
|
|
619
|
-
]
|
|
620
|
-
},
|
|
621
|
-
size: {
|
|
622
|
-
sm: "h-8 px-control-sm text-label",
|
|
623
|
-
md: "h-10 px-control-md text-ui",
|
|
624
|
-
lg: "h-12 px-control-lg text-lead",
|
|
625
|
-
/** Cuadrado 42×42, sin texto. Lleva `aria-label` obligatorio. */
|
|
626
|
-
icon: "size-control-icon p-0"
|
|
960
|
+
active: {
|
|
961
|
+
false: "border-warm/28 bg-transparent text-warm",
|
|
962
|
+
true: "border-warm bg-warm text-warm-on"
|
|
627
963
|
}
|
|
628
964
|
},
|
|
629
|
-
|
|
630
|
-
/**
|
|
631
|
-
* El terciario no tiene caja: ni padding horizontal ni alto de control.
|
|
632
|
-
* Va aquí y no como `px-0` en la variante para que gane al `px-*` del
|
|
633
|
-
* tamaño sin depender del orden en que cva concatena las clases.
|
|
634
|
-
*/
|
|
635
|
-
{ variant: "tertiary", size: ["sm", "md", "lg"], class: "h-auto px-0" }
|
|
636
|
-
],
|
|
637
|
-
defaultVariants: { variant: "primary", size: "md" }
|
|
965
|
+
defaultVariants: { active: false }
|
|
638
966
|
}
|
|
639
967
|
);
|
|
640
|
-
function
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
size: size2,
|
|
644
|
-
asChild = false,
|
|
645
|
-
loading = false,
|
|
646
|
-
icon,
|
|
647
|
-
children,
|
|
648
|
-
disabled,
|
|
649
|
-
...props
|
|
650
|
-
}) {
|
|
651
|
-
if (asChild) {
|
|
652
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slot, { className: cn(button({ variant, size: size2 }), className), ...props, children });
|
|
653
|
-
}
|
|
654
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
655
|
-
"button",
|
|
968
|
+
function CategoryBadge({ className, active = false, ...props }) {
|
|
969
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
970
|
+
"span",
|
|
656
971
|
{
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
972
|
+
"data-active": active || void 0,
|
|
973
|
+
className: cn(categoria({ active }), className),
|
|
974
|
+
...props
|
|
975
|
+
}
|
|
976
|
+
);
|
|
977
|
+
}
|
|
978
|
+
var metrica = ["inline-flex items-center gap-step-xs", "rounded-pill", "font-mono text-chip text-text-muted"];
|
|
979
|
+
function MetricBadge({ className, boxed = false, ...props }) {
|
|
980
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
981
|
+
"span",
|
|
982
|
+
{
|
|
983
|
+
className: cn(metrica, boxed && "border-hairline px-step-sm py-0.5 border", className),
|
|
984
|
+
...props
|
|
665
985
|
}
|
|
666
986
|
);
|
|
667
987
|
}
|
|
@@ -1700,6 +2020,76 @@ function ToastDescription({
|
|
|
1700
2020
|
}) {
|
|
1701
2021
|
return /* @__PURE__ */ jsxRuntime.jsx(ToastPrimitive__namespace.Description, { className: cn("max-w-measure", className), ...props });
|
|
1702
2022
|
}
|
|
2023
|
+
var avisos = [];
|
|
2024
|
+
var suscriptores = /* @__PURE__ */ new Set();
|
|
2025
|
+
var contador = 0;
|
|
2026
|
+
function emitir(siguientes) {
|
|
2027
|
+
avisos = siguientes;
|
|
2028
|
+
for (const avisar of suscriptores) avisar();
|
|
2029
|
+
}
|
|
2030
|
+
var suscribirse = (avisar) => {
|
|
2031
|
+
suscriptores.add(avisar);
|
|
2032
|
+
return () => {
|
|
2033
|
+
suscriptores.delete(avisar);
|
|
2034
|
+
};
|
|
2035
|
+
};
|
|
2036
|
+
var leer = () => avisos;
|
|
2037
|
+
var VACIO = [];
|
|
2038
|
+
var enServidor = () => VACIO;
|
|
2039
|
+
function crear(mensaje, opciones = {}) {
|
|
2040
|
+
contador += 1;
|
|
2041
|
+
const id = `arrecife-toast-${contador}`;
|
|
2042
|
+
const { description, ...resto } = opciones;
|
|
2043
|
+
emitir([
|
|
2044
|
+
...avisos,
|
|
2045
|
+
{
|
|
2046
|
+
...resto,
|
|
2047
|
+
// El primer argumento es la línea principal. Si además llega `title`, el
|
|
2048
|
+
// mensaje pasa a ser la descripción: así `toast('Guardado')` y
|
|
2049
|
+
// `toast('No se pudo guardar', { title: 'Error' })` se leen igual de bien.
|
|
2050
|
+
...opciones.title ? { description: description ?? mensaje } : { title: mensaje, ...description === void 0 ? {} : { description } },
|
|
2051
|
+
id,
|
|
2052
|
+
abierto: true
|
|
2053
|
+
}
|
|
2054
|
+
]);
|
|
2055
|
+
return id;
|
|
2056
|
+
}
|
|
2057
|
+
function descartar(id) {
|
|
2058
|
+
emitir(avisos.map((a) => id === void 0 || a.id === id ? { ...a, abierto: false } : a));
|
|
2059
|
+
}
|
|
2060
|
+
function retirar(id) {
|
|
2061
|
+
emitir(avisos.filter((a) => a.id !== id));
|
|
2062
|
+
}
|
|
2063
|
+
var toast2 = Object.assign(crear, {
|
|
2064
|
+
success: (mensaje, opciones = {}) => crear(mensaje, { ...opciones, variant: "success" }),
|
|
2065
|
+
error: (mensaje, opciones = {}) => crear(mensaje, { ...opciones, variant: "error" }),
|
|
2066
|
+
dismiss: descartar
|
|
2067
|
+
});
|
|
2068
|
+
function Toaster({ duration = 5e3, label = "Avisos" }) {
|
|
2069
|
+
const lista = react.useSyncExternalStore(suscribirse, leer, enServidor);
|
|
2070
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(ToastProvider, { duration, label, children: [
|
|
2071
|
+
lista.map(({ id, title, description, variant, duration: propio, action, abierto }) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2072
|
+
Toast,
|
|
2073
|
+
{
|
|
2074
|
+
open: abierto,
|
|
2075
|
+
variant: variant ?? "neutral",
|
|
2076
|
+
...propio === void 0 ? {} : { duration: propio },
|
|
2077
|
+
onOpenChange: (sigue) => {
|
|
2078
|
+
if (!sigue) retirar(id);
|
|
2079
|
+
},
|
|
2080
|
+
children: [
|
|
2081
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
2082
|
+
title ? /* @__PURE__ */ jsxRuntime.jsx(ToastTitle, { children: title }) : null,
|
|
2083
|
+
description ? /* @__PURE__ */ jsxRuntime.jsx(ToastDescription, { children: description }) : null
|
|
2084
|
+
] }),
|
|
2085
|
+
action
|
|
2086
|
+
]
|
|
2087
|
+
},
|
|
2088
|
+
id
|
|
2089
|
+
)),
|
|
2090
|
+
/* @__PURE__ */ jsxRuntime.jsx(ToastViewport, {})
|
|
2091
|
+
] });
|
|
2092
|
+
}
|
|
1703
2093
|
var TooltipProvider = TooltipPrimitive__namespace.Provider;
|
|
1704
2094
|
var Tooltip = TooltipPrimitive__namespace.Root;
|
|
1705
2095
|
var TooltipTrigger = TooltipPrimitive__namespace.Trigger;
|
|
@@ -1739,6 +2129,7 @@ function ArticleCard({
|
|
|
1739
2129
|
dateTime,
|
|
1740
2130
|
readingMinutes,
|
|
1741
2131
|
tags,
|
|
2132
|
+
headingLevel = 3,
|
|
1742
2133
|
className,
|
|
1743
2134
|
...props
|
|
1744
2135
|
}) {
|
|
@@ -1754,7 +2145,15 @@ function ArticleCard({
|
|
|
1754
2145
|
i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
|
|
1755
2146
|
m
|
|
1756
2147
|
] }, i)) }) : null,
|
|
1757
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2148
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2149
|
+
Text,
|
|
2150
|
+
{
|
|
2151
|
+
as: headingLevel === 2 ? "h2" : "h3",
|
|
2152
|
+
variant: "h3",
|
|
2153
|
+
className: "group-hover:text-accent transition-standard",
|
|
2154
|
+
children: title
|
|
2155
|
+
}
|
|
2156
|
+
),
|
|
1758
2157
|
excerpt ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", className: "line-clamp-2", children: excerpt }) : null,
|
|
1759
2158
|
tags && tags.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-xs mt-auto flex flex-wrap pt-step-sm", children: tags.map((t) => /* @__PURE__ */ jsxRuntime.jsx(CategoryBadge, { children: t }, t)) }) : null
|
|
1760
2159
|
] }) });
|
|
@@ -2527,40 +2926,231 @@ function EmptyState({
|
|
|
2527
2926
|
}
|
|
2528
2927
|
);
|
|
2529
2928
|
}
|
|
2929
|
+
var mismoDia = (a, b) => a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
|
|
2930
|
+
function aValorDeCampo(fecha) {
|
|
2931
|
+
const dos = (n) => String(n).padStart(2, "0");
|
|
2932
|
+
return `${fecha.getFullYear()}-${dos(fecha.getMonth() + 1)}-${dos(fecha.getDate())}T${dos(
|
|
2933
|
+
fecha.getHours()
|
|
2934
|
+
)}:${dos(fecha.getMinutes())}`;
|
|
2935
|
+
}
|
|
2936
|
+
function EventCalendar({
|
|
2937
|
+
events,
|
|
2938
|
+
onCreateEvent,
|
|
2939
|
+
onUpdateEvent,
|
|
2940
|
+
onDeleteEvent,
|
|
2941
|
+
selected,
|
|
2942
|
+
onSelectDay,
|
|
2943
|
+
formatDay = (dia) => dateFns.format(dia, "EEEE d 'de' MMMM", { locale: locale.es }),
|
|
2944
|
+
formatTime: formatTime2 = (fecha) => dateFns.format(fecha, "HH:mm", { locale: locale.es }),
|
|
2945
|
+
emptyMessage = "Nada en este d\xEDa.",
|
|
2946
|
+
className,
|
|
2947
|
+
...props
|
|
2948
|
+
}) {
|
|
2949
|
+
const id = react.useId();
|
|
2950
|
+
const [diaInterno, setDiaInterno] = react.useState(() => selected ?? /* @__PURE__ */ new Date());
|
|
2951
|
+
const dia = selected ?? diaInterno;
|
|
2952
|
+
const [mes, setMes] = react.useState(() => dia);
|
|
2953
|
+
const [editando, setEditando] = react.useState(null);
|
|
2954
|
+
const [titulo, setTitulo] = react.useState("");
|
|
2955
|
+
const [cuando, setCuando] = react.useState("");
|
|
2956
|
+
const editable = Boolean(onCreateEvent ?? onUpdateEvent);
|
|
2957
|
+
const delDia = events.filter((e) => mismoDia(e.start, dia)).sort((a, b) => a.start.getTime() - b.start.getTime());
|
|
2958
|
+
function elegirDia(nuevo) {
|
|
2959
|
+
if (!nuevo) return;
|
|
2960
|
+
setDiaInterno(nuevo);
|
|
2961
|
+
setMes(nuevo);
|
|
2962
|
+
onSelectDay?.(nuevo);
|
|
2963
|
+
cancelar();
|
|
2964
|
+
}
|
|
2965
|
+
function cancelar() {
|
|
2966
|
+
setEditando(null);
|
|
2967
|
+
setTitulo("");
|
|
2968
|
+
setCuando("");
|
|
2969
|
+
}
|
|
2970
|
+
function editar(evento) {
|
|
2971
|
+
setEditando(evento.id);
|
|
2972
|
+
setTitulo(evento.title);
|
|
2973
|
+
setCuando(aValorDeCampo(evento.start));
|
|
2974
|
+
}
|
|
2975
|
+
function enviar(e) {
|
|
2976
|
+
e.preventDefault();
|
|
2977
|
+
if (!titulo.trim() || !cuando) return;
|
|
2978
|
+
const start = new Date(cuando);
|
|
2979
|
+
if (Number.isNaN(start.getTime())) return;
|
|
2980
|
+
if (editando) {
|
|
2981
|
+
const previo = events.find((ev) => ev.id === editando);
|
|
2982
|
+
if (previo) onUpdateEvent?.({ ...previo, title: titulo.trim(), start });
|
|
2983
|
+
} else {
|
|
2984
|
+
onCreateEvent?.({ title: titulo.trim(), start });
|
|
2985
|
+
}
|
|
2986
|
+
cancelar();
|
|
2987
|
+
}
|
|
2988
|
+
const conEvento = events.map((e) => e.start);
|
|
2989
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("gap-step-lg flex flex-col md:flex-row md:items-start", className), ...props, children: [
|
|
2990
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2991
|
+
Calendar,
|
|
2992
|
+
{
|
|
2993
|
+
mode: "single",
|
|
2994
|
+
selected: dia,
|
|
2995
|
+
onSelect: elegirDia,
|
|
2996
|
+
month: mes,
|
|
2997
|
+
onMonthChange: setMes,
|
|
2998
|
+
modifiers: { conEvento },
|
|
2999
|
+
modifiersClassNames: {
|
|
3000
|
+
// El punto va bajo el número, no encima del fondo del día: sobre el
|
|
3001
|
+
// seleccionado —que es bioluz sólido— un punto de acento desaparece.
|
|
3002
|
+
// `after:` en Tailwind v4 ya trae `content: ""`, así que no hace falta
|
|
3003
|
+
// declararlo con un valor arbitrario.
|
|
3004
|
+
conEvento: cn(
|
|
3005
|
+
"after:bg-accent after:absolute after:bottom-1 after:left-1/2",
|
|
3006
|
+
"after:size-1 after:-translate-x-1/2 after:rounded-pill",
|
|
3007
|
+
"[&[data-selected=true]]:after:bg-accent-on"
|
|
3008
|
+
)
|
|
3009
|
+
},
|
|
3010
|
+
className: "shrink-0"
|
|
3011
|
+
}
|
|
3012
|
+
),
|
|
3013
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3014
|
+
"section",
|
|
3015
|
+
{
|
|
3016
|
+
"aria-labelledby": `${id}-dia`,
|
|
3017
|
+
className: "border-hairline rounded-card p-step-md gap-step-md flex min-w-0 flex-1 flex-col border",
|
|
3018
|
+
children: [
|
|
3019
|
+
/* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h3", variant: "h3", id: `${id}-dia`, className: "first-letter:uppercase", children: formatDay(dia) }),
|
|
3020
|
+
delDia.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-step-xs flex flex-col", children: delDia.map((evento) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3021
|
+
"li",
|
|
3022
|
+
{
|
|
3023
|
+
className: "border-hairline gap-step-sm py-step-xs flex items-center border-b last:border-b-0",
|
|
3024
|
+
children: [
|
|
3025
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3026
|
+
Text,
|
|
3027
|
+
{
|
|
3028
|
+
as: "span",
|
|
3029
|
+
variant: "meta",
|
|
3030
|
+
tone: evento.tone === "warm" ? "warm" : "accent",
|
|
3031
|
+
className: "shrink-0 tabular-nums",
|
|
3032
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("time", { dateTime: evento.start.toISOString(), children: formatTime2(evento.start) })
|
|
3033
|
+
}
|
|
3034
|
+
),
|
|
3035
|
+
/* @__PURE__ */ jsxRuntime.jsx(Text, { as: "span", variant: "ui", className: "min-w-0 flex-1 truncate", children: evento.title }),
|
|
3036
|
+
onUpdateEvent ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3037
|
+
Button,
|
|
3038
|
+
{
|
|
3039
|
+
variant: "tertiary",
|
|
3040
|
+
size: "sm",
|
|
3041
|
+
onClick: () => editar(evento),
|
|
3042
|
+
"aria-label": `Editar \xAB${evento.title}\xBB`,
|
|
3043
|
+
children: "./editar"
|
|
3044
|
+
}
|
|
3045
|
+
) : null,
|
|
3046
|
+
onDeleteEvent ? /* @__PURE__ */ jsxRuntime.jsxs(AlertDialog, { children: [
|
|
3047
|
+
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "tertiary", size: "sm", "aria-label": `Borrar \xAB${evento.title}\xBB`, children: "./borrar" }) }),
|
|
3048
|
+
/* @__PURE__ */ jsxRuntime.jsxs(AlertDialogContent, { children: [
|
|
3049
|
+
/* @__PURE__ */ jsxRuntime.jsxs(AlertDialogHeader, { children: [
|
|
3050
|
+
/* @__PURE__ */ jsxRuntime.jsxs(AlertDialogTitle, { children: [
|
|
3051
|
+
"Borrar \xAB",
|
|
3052
|
+
evento.title,
|
|
3053
|
+
"\xBB"
|
|
3054
|
+
] }),
|
|
3055
|
+
/* @__PURE__ */ jsxRuntime.jsxs(AlertDialogDescription, { children: [
|
|
3056
|
+
"Se borra del ",
|
|
3057
|
+
formatDay(evento.start),
|
|
3058
|
+
" a las ",
|
|
3059
|
+
formatTime2(evento.start),
|
|
3060
|
+
". No se puede deshacer."
|
|
3061
|
+
] })
|
|
3062
|
+
] }),
|
|
3063
|
+
/* @__PURE__ */ jsxRuntime.jsxs(AlertDialogFooter, { children: [
|
|
3064
|
+
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogCancel, { children: "Mejor no" }),
|
|
3065
|
+
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogAction, { onClick: () => onDeleteEvent(evento.id), children: "Borrar el evento" })
|
|
3066
|
+
] })
|
|
3067
|
+
] })
|
|
3068
|
+
] }) : null
|
|
3069
|
+
]
|
|
3070
|
+
},
|
|
3071
|
+
evento.id
|
|
3072
|
+
)) }) : (
|
|
3073
|
+
// `EmptyState` no: lleva una cara de la mascota, y la mascota tiene
|
|
3074
|
+
// siete sitios contados donde puede aparecer. Un día vacío de una
|
|
3075
|
+
// agenda no es uno de ellos — y en un mes de treinta días, la mitad lo
|
|
3076
|
+
// serían.
|
|
3077
|
+
/* @__PURE__ */ jsxRuntime.jsx(Text, { as: "p", variant: "ui", tone: "muted", children: emptyMessage })
|
|
3078
|
+
),
|
|
3079
|
+
editable ? /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: enviar, className: "gap-step-sm border-hairline pt-step-md flex flex-col border-t", children: [
|
|
3080
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex flex-col", children: [
|
|
3081
|
+
/* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: `${id}-titulo`, children: "T\xEDtulo" }),
|
|
3082
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3083
|
+
Input,
|
|
3084
|
+
{
|
|
3085
|
+
id: `${id}-titulo`,
|
|
3086
|
+
value: titulo,
|
|
3087
|
+
onChange: (e) => setTitulo(e.target.value),
|
|
3088
|
+
placeholder: "Publicar el art\xEDculo",
|
|
3089
|
+
required: true
|
|
3090
|
+
}
|
|
3091
|
+
)
|
|
3092
|
+
] }),
|
|
3093
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex flex-col", children: [
|
|
3094
|
+
/* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: `${id}-cuando`, children: "Cu\xE1ndo" }),
|
|
3095
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3096
|
+
DateField,
|
|
3097
|
+
{
|
|
3098
|
+
id: `${id}-cuando`,
|
|
3099
|
+
withTime: true,
|
|
3100
|
+
value: cuando,
|
|
3101
|
+
onChange: (e) => setCuando(e.target.value),
|
|
3102
|
+
required: true
|
|
3103
|
+
}
|
|
3104
|
+
)
|
|
3105
|
+
] }),
|
|
3106
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex flex-wrap items-center", children: [
|
|
3107
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", size: "sm", children: editando ? "Guardar" : "A\xF1adir" }),
|
|
3108
|
+
editando ? /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "tertiary", size: "sm", onClick: cancelar, children: "./cancelar" }) : null
|
|
3109
|
+
] })
|
|
3110
|
+
] }) : null
|
|
3111
|
+
]
|
|
3112
|
+
}
|
|
3113
|
+
)
|
|
3114
|
+
] });
|
|
3115
|
+
}
|
|
2530
3116
|
function Footer({
|
|
2531
3117
|
social,
|
|
2532
3118
|
year = (/* @__PURE__ */ new Date()).getFullYear(),
|
|
2533
3119
|
children,
|
|
3120
|
+
brand: brand2,
|
|
2534
3121
|
className,
|
|
2535
3122
|
...props
|
|
2536
3123
|
}) {
|
|
2537
3124
|
return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: cn("border-hairline w-full border-t", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-wide px-step-md py-step-xl gap-step-lg mx-auto flex flex-col", children: [
|
|
3125
|
+
brand2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: brand2 }) : null,
|
|
2538
3126
|
children ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-md flex flex-wrap items-center", children }) : null,
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
"
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
/* @__PURE__ */ jsxRuntime.jsxs("
|
|
2557
|
-
"
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
3127
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-md flex flex-wrap items-center", children: [
|
|
3128
|
+
social && social.length > 0 ? (
|
|
3129
|
+
// 18px de separación, del documento. No es un escalón de `spacing`:
|
|
3130
|
+
// es el ritmo de una fila de iconos, no el de una página.
|
|
3131
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex items-center gap-[18px]", children: social.map((red) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3132
|
+
"a",
|
|
3133
|
+
{
|
|
3134
|
+
href: red.href,
|
|
3135
|
+
"aria-label": red.label,
|
|
3136
|
+
className: cn(
|
|
3137
|
+
"text-text-muted hover:text-accent transition-standard block cursor-pointer text-[19px]",
|
|
3138
|
+
"rounded-chip focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
|
|
3139
|
+
),
|
|
3140
|
+
children: red.icon
|
|
3141
|
+
}
|
|
3142
|
+
) }, red.href)) })
|
|
3143
|
+
) : null,
|
|
3144
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "meta", tone: "muted", as: "p", className: "ml-auto", children: [
|
|
3145
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { "aria-hidden": "true", className: "text-accent", children: [
|
|
3146
|
+
"$",
|
|
3147
|
+
" "
|
|
3148
|
+
] }),
|
|
3149
|
+
"cd ~/",
|
|
3150
|
+
naming.domain,
|
|
3151
|
+
"/",
|
|
3152
|
+
year
|
|
3153
|
+
] })
|
|
2564
3154
|
] })
|
|
2565
3155
|
] }) });
|
|
2566
3156
|
}
|
|
@@ -2585,9 +3175,11 @@ function Hero({
|
|
|
2585
3175
|
action,
|
|
2586
3176
|
pose,
|
|
2587
3177
|
basePath,
|
|
3178
|
+
variant = "cabecera",
|
|
2588
3179
|
className,
|
|
2589
3180
|
...props
|
|
2590
3181
|
}) {
|
|
3182
|
+
const centrado = variant === "centrado";
|
|
2591
3183
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2592
3184
|
"section",
|
|
2593
3185
|
{
|
|
@@ -2599,13 +3191,39 @@ function Hero({
|
|
|
2599
3191
|
),
|
|
2600
3192
|
...props,
|
|
2601
3193
|
children: [
|
|
2602
|
-
/* @__PURE__ */ jsxRuntime.
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
3194
|
+
centrado && pose ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3195
|
+
Mascota,
|
|
3196
|
+
{
|
|
3197
|
+
pose,
|
|
3198
|
+
basePath,
|
|
3199
|
+
className: "mb-step-md mx-auto w-48 md:w-56"
|
|
3200
|
+
}
|
|
3201
|
+
) : null,
|
|
3202
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3203
|
+
"div",
|
|
3204
|
+
{
|
|
3205
|
+
className: cn(
|
|
3206
|
+
"gap-step-md flex flex-col",
|
|
3207
|
+
centrado ? "items-center text-center" : "md:max-w-[62%]"
|
|
3208
|
+
),
|
|
3209
|
+
children: [
|
|
3210
|
+
eyebrow ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "eyebrow", tone: "accent", as: "p", children: eyebrow }) : null,
|
|
3211
|
+
/* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h1", variant: "display", children: title }),
|
|
3212
|
+
description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "body", tone: "secondary", children: description }) : null,
|
|
3213
|
+
action ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3214
|
+
"div",
|
|
3215
|
+
{
|
|
3216
|
+
className: cn(
|
|
3217
|
+
"gap-step-sm mt-step-xs flex flex-wrap items-center",
|
|
3218
|
+
centrado && "justify-center"
|
|
3219
|
+
),
|
|
3220
|
+
children: action
|
|
3221
|
+
}
|
|
3222
|
+
) : null
|
|
3223
|
+
]
|
|
3224
|
+
}
|
|
3225
|
+
),
|
|
3226
|
+
!centrado && pose ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2609
3227
|
Mascota,
|
|
2610
3228
|
{
|
|
2611
3229
|
pose,
|
|
@@ -2671,7 +3289,10 @@ function Nav({ brand: brand2, children, actions, className, ...props }) {
|
|
|
2671
3289
|
...props,
|
|
2672
3290
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-wide px-step-md h-nav gap-step-lg mx-auto flex items-center", children: [
|
|
2673
3291
|
brand2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: brand2 }) : null,
|
|
2674
|
-
children ? /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Principal", className: "min-w-0
|
|
3292
|
+
children ? /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Principal", className: "ml-auto min-w-0", children: /* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "gap-step-md flex items-center", children: [
|
|
3293
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-text-muted font-mono text-meta select-none", children: "~/" }),
|
|
3294
|
+
children
|
|
3295
|
+
] }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
|
|
2675
3296
|
actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-sm flex shrink-0 items-center", children: actions }) : null
|
|
2676
3297
|
] })
|
|
2677
3298
|
}
|
|
@@ -2691,8 +3312,10 @@ function NavItem({ active = false, asChild = false, className, children, ...prop
|
|
|
2691
3312
|
),
|
|
2692
3313
|
...props,
|
|
2693
3314
|
children: [
|
|
2694
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-
|
|
2695
|
-
children
|
|
3315
|
+
active ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-accent", children: "[" }) : null,
|
|
3316
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: active ? "text-accent" : "text-text-muted", children: "./" }),
|
|
3317
|
+
children,
|
|
3318
|
+
active ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-accent", children: "]" }) : null
|
|
2696
3319
|
]
|
|
2697
3320
|
}
|
|
2698
3321
|
) });
|
|
@@ -2710,6 +3333,10 @@ function NewsletterForm({
|
|
|
2710
3333
|
submitLabel = "Suscribirme",
|
|
2711
3334
|
placeholder = "tu@correo.dev",
|
|
2712
3335
|
fieldLabel = "Correo electr\xF3nico",
|
|
3336
|
+
nameField = false,
|
|
3337
|
+
nameLabel = "Nombre",
|
|
3338
|
+
namePlaceholder = "C\xF3mo te llamas",
|
|
3339
|
+
nameInputProps,
|
|
2713
3340
|
className,
|
|
2714
3341
|
...props
|
|
2715
3342
|
}) {
|
|
@@ -2720,8 +3347,19 @@ function NewsletterForm({
|
|
|
2720
3347
|
evento.preventDefault();
|
|
2721
3348
|
const datos = new FormData(evento.currentTarget);
|
|
2722
3349
|
const correo = String(datos.get("email") ?? "");
|
|
2723
|
-
|
|
3350
|
+
const nombre = nameField ? String(datos.get("name") ?? "") : void 0;
|
|
3351
|
+
onSubmitEmail?.(correo, nombre);
|
|
2724
3352
|
}
|
|
3353
|
+
const boton = /* @__PURE__ */ jsxRuntime.jsx(
|
|
3354
|
+
Button,
|
|
3355
|
+
{
|
|
3356
|
+
type: "submit",
|
|
3357
|
+
variant: "conversion",
|
|
3358
|
+
loading: enviando,
|
|
3359
|
+
className: cn("disabled:opacity-60", nameField && "sm:self-start"),
|
|
3360
|
+
children: submitLabel
|
|
3361
|
+
}
|
|
3362
|
+
);
|
|
2725
3363
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2726
3364
|
"section",
|
|
2727
3365
|
{
|
|
@@ -2735,34 +3373,44 @@ function NewsletterForm({
|
|
|
2735
3373
|
/* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h2", variant: "h3", children: title }),
|
|
2736
3374
|
description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", children: description }) : null
|
|
2737
3375
|
] }),
|
|
2738
|
-
/* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: enviar, className: "gap-step-sm flex flex-col
|
|
2739
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-
|
|
2740
|
-
/* @__PURE__ */ jsxRuntime.
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
3376
|
+
/* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: enviar, className: "gap-step-sm flex flex-col", noValidate: true, children: [
|
|
3377
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-sm flex flex-col sm:flex-row sm:items-end", children: [
|
|
3378
|
+
nameField ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex flex-1 flex-col", children: [
|
|
3379
|
+
/* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: `${id}-nombre`, children: nameLabel }),
|
|
3380
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3381
|
+
Input,
|
|
3382
|
+
{
|
|
3383
|
+
id: `${id}-nombre`,
|
|
3384
|
+
name: "name",
|
|
3385
|
+
type: "text",
|
|
3386
|
+
autoComplete: "name",
|
|
3387
|
+
required: true,
|
|
3388
|
+
placeholder: namePlaceholder,
|
|
3389
|
+
disabled: enviando,
|
|
3390
|
+
...nameInputProps
|
|
3391
|
+
}
|
|
3392
|
+
)
|
|
3393
|
+
] }) : null,
|
|
3394
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "gap-step-xs flex flex-1 flex-col", children: [
|
|
3395
|
+
/* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: id, children: fieldLabel }),
|
|
3396
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3397
|
+
Input,
|
|
3398
|
+
{
|
|
3399
|
+
id,
|
|
3400
|
+
name: "email",
|
|
3401
|
+
type: "email",
|
|
3402
|
+
autoComplete: "email",
|
|
3403
|
+
required: true,
|
|
3404
|
+
placeholder,
|
|
3405
|
+
disabled: enviando,
|
|
3406
|
+
invalid: error,
|
|
3407
|
+
"aria-describedby": state === "exito" || error ? `${id}-aviso` : void 0
|
|
3408
|
+
}
|
|
3409
|
+
)
|
|
3410
|
+
] }),
|
|
3411
|
+
nameField ? null : boton
|
|
2755
3412
|
] }),
|
|
2756
|
-
|
|
2757
|
-
Button,
|
|
2758
|
-
{
|
|
2759
|
-
type: "submit",
|
|
2760
|
-
variant: "conversion",
|
|
2761
|
-
loading: enviando,
|
|
2762
|
-
className: "disabled:opacity-60",
|
|
2763
|
-
children: submitLabel
|
|
2764
|
-
}
|
|
2765
|
-
)
|
|
3413
|
+
nameField ? boton : null
|
|
2766
3414
|
] }),
|
|
2767
3415
|
state === "exito" ? /* @__PURE__ */ jsxRuntime.jsx(Alert, { id: `${id}-aviso`, variant: "success", enfasis: "fuerte", children: successMessage }) : null,
|
|
2768
3416
|
error ? /* @__PURE__ */ jsxRuntime.jsx(Alert, { id: `${id}-aviso`, variant: "error", enfasis: "fuerte", children: errorMessage }) : null,
|
|
@@ -2800,6 +3448,62 @@ function PageHeader({
|
|
|
2800
3448
|
action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "gap-step-sm mt-step-sm flex flex-wrap items-center", children: action }) : null
|
|
2801
3449
|
] });
|
|
2802
3450
|
}
|
|
3451
|
+
function ScrollingProgressBar({
|
|
3452
|
+
target,
|
|
3453
|
+
tone = "accent",
|
|
3454
|
+
sticky = true,
|
|
3455
|
+
className,
|
|
3456
|
+
...props
|
|
3457
|
+
}) {
|
|
3458
|
+
const [avance, setAvance] = react.useState(0);
|
|
3459
|
+
const pendiente = react.useRef(0);
|
|
3460
|
+
react.useEffect(() => {
|
|
3461
|
+
const medir = () => {
|
|
3462
|
+
pendiente.current = 0;
|
|
3463
|
+
const elemento = target?.current;
|
|
3464
|
+
const inicio = elemento ? elemento.getBoundingClientRect().top + scrollY : 0;
|
|
3465
|
+
const alto = elemento ? elemento.offsetHeight : document.documentElement.scrollHeight;
|
|
3466
|
+
const recorrible = alto - innerHeight;
|
|
3467
|
+
if (recorrible <= 0) {
|
|
3468
|
+
setAvance(scrollY >= inicio ? 100 : 0);
|
|
3469
|
+
return;
|
|
3470
|
+
}
|
|
3471
|
+
const recorrido = scrollY - inicio;
|
|
3472
|
+
setAvance(Math.min(100, Math.max(0, recorrido / recorrible * 100)));
|
|
3473
|
+
};
|
|
3474
|
+
const alMoverse = () => {
|
|
3475
|
+
if (pendiente.current) return;
|
|
3476
|
+
pendiente.current = requestAnimationFrame(medir);
|
|
3477
|
+
};
|
|
3478
|
+
medir();
|
|
3479
|
+
addEventListener("scroll", alMoverse, { passive: true });
|
|
3480
|
+
addEventListener("resize", alMoverse);
|
|
3481
|
+
return () => {
|
|
3482
|
+
if (pendiente.current) cancelAnimationFrame(pendiente.current);
|
|
3483
|
+
removeEventListener("scroll", alMoverse);
|
|
3484
|
+
removeEventListener("resize", alMoverse);
|
|
3485
|
+
};
|
|
3486
|
+
}, [target]);
|
|
3487
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3488
|
+
"div",
|
|
3489
|
+
{
|
|
3490
|
+
"aria-hidden": "true",
|
|
3491
|
+
className: cn(
|
|
3492
|
+
"h-1 w-full overflow-hidden",
|
|
3493
|
+
sticky && "sticky top-0 z-40",
|
|
3494
|
+
className
|
|
3495
|
+
),
|
|
3496
|
+
...props,
|
|
3497
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3498
|
+
"div",
|
|
3499
|
+
{
|
|
3500
|
+
className: cn("h-full", tone === "warm" ? "bg-warm" : "bg-accent"),
|
|
3501
|
+
style: { width: `${avance}%` }
|
|
3502
|
+
}
|
|
3503
|
+
)
|
|
3504
|
+
}
|
|
3505
|
+
);
|
|
3506
|
+
}
|
|
2803
3507
|
function SidebarItem({
|
|
2804
3508
|
active = false,
|
|
2805
3509
|
asChild = false,
|
|
@@ -2863,10 +3567,28 @@ function SidebarNav({
|
|
|
2863
3567
|
}
|
|
2864
3568
|
);
|
|
2865
3569
|
}
|
|
2866
|
-
function Stat({
|
|
3570
|
+
function Stat({
|
|
3571
|
+
value,
|
|
3572
|
+
label,
|
|
3573
|
+
tone = "neutral",
|
|
3574
|
+
progress,
|
|
3575
|
+
icon,
|
|
3576
|
+
description,
|
|
3577
|
+
className,
|
|
3578
|
+
...props
|
|
3579
|
+
}) {
|
|
2867
3580
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(SUPERFICIE_TARJETA, "p-step-lg gap-step-xs flex flex-col", className), ...props, children: [
|
|
3581
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "gap-step-xs flex items-center", children: [
|
|
3582
|
+
icon ? (
|
|
3583
|
+
// `aria-hidden` no hace falta: los glifos del sistema ya lo traen
|
|
3584
|
+
// puesto. Lo que sí hace falta es que no encoja al lado de un título
|
|
3585
|
+
// largo, porque un icono aplastado se lee como otro icono.
|
|
3586
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: icon })
|
|
3587
|
+
) : null,
|
|
3588
|
+
label
|
|
3589
|
+
] }),
|
|
2868
3590
|
/* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "stat", as: "p", tone: tone === "alerta" ? "warm" : "accent", children: value }),
|
|
2869
|
-
/* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "
|
|
3591
|
+
description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", as: "p", children: description }) : null,
|
|
2870
3592
|
typeof progress === "number" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2871
3593
|
Progress,
|
|
2872
3594
|
{
|
|
@@ -2885,6 +3607,7 @@ function TalkCard({
|
|
|
2885
3607
|
dateTime,
|
|
2886
3608
|
location,
|
|
2887
3609
|
status,
|
|
3610
|
+
description,
|
|
2888
3611
|
className,
|
|
2889
3612
|
...props
|
|
2890
3613
|
}) {
|
|
@@ -2898,12 +3621,43 @@ function TalkCard({
|
|
|
2898
3621
|
status ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "neutral", children: status }) : null
|
|
2899
3622
|
] }),
|
|
2900
3623
|
/* @__PURE__ */ jsxRuntime.jsx(Text, { as: "h3", variant: "h3", className: "group-hover:text-accent transition-standard", children: title }),
|
|
3624
|
+
description ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "ui", tone: "secondary", className: "line-clamp-2", children: description }) : null,
|
|
2901
3625
|
pie.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "label", tone: "muted", as: "p", className: "gap-step-xs mt-auto flex items-center pt-step-sm", children: pie.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "gap-step-xs flex items-center", children: [
|
|
2902
3626
|
i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
|
|
2903
3627
|
m
|
|
2904
3628
|
] }, i)) }) : null
|
|
2905
3629
|
] }) });
|
|
2906
3630
|
}
|
|
3631
|
+
function ThemeToggle({
|
|
3632
|
+
label = "Cambiar de tema",
|
|
3633
|
+
onThemeChange,
|
|
3634
|
+
variant = "secondary",
|
|
3635
|
+
size: size2 = "icon",
|
|
3636
|
+
className,
|
|
3637
|
+
...props
|
|
3638
|
+
}) {
|
|
3639
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3640
|
+
Button,
|
|
3641
|
+
{
|
|
3642
|
+
type: "button",
|
|
3643
|
+
variant,
|
|
3644
|
+
size: size2,
|
|
3645
|
+
"aria-label": label,
|
|
3646
|
+
className: cn("[&_svg]:size-[19px]", className),
|
|
3647
|
+
onClick: () => onThemeChange?.(alternarTema()),
|
|
3648
|
+
...props,
|
|
3649
|
+
children: [
|
|
3650
|
+
/* @__PURE__ */ jsxRuntime.jsx(Sol, { className: "light:hidden" }),
|
|
3651
|
+
/* @__PURE__ */ jsxRuntime.jsx(Luna, { className: "hidden light:block" })
|
|
3652
|
+
]
|
|
3653
|
+
}
|
|
3654
|
+
);
|
|
3655
|
+
}
|
|
3656
|
+
function useTema() {
|
|
3657
|
+
return react.useSyncExternalStore(suscribirse2, temaActual, servidor);
|
|
3658
|
+
}
|
|
3659
|
+
var suscribirse2 = (avisar) => escucharTema(() => avisar());
|
|
3660
|
+
var servidor = () => "dark";
|
|
2907
3661
|
function TableOfContents({
|
|
2908
3662
|
items,
|
|
2909
3663
|
title = "En esta p\xE1gina",
|
|
@@ -2922,7 +3676,11 @@ function TableOfContents({
|
|
|
2922
3676
|
"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
|
|
2923
3677
|
"cursor-pointer",
|
|
2924
3678
|
item2.nested && "pl-step-lg",
|
|
2925
|
-
|
|
3679
|
+
"border-transparent text-text-secondary hover:text-text-primary",
|
|
3680
|
+
// El hover del activo se declara con las dos variantes juntas para
|
|
3681
|
+
// que gane al `hover:` de arriba por especificidad y no por el orden
|
|
3682
|
+
// en que Tailwind decida emitir las reglas.
|
|
3683
|
+
"aria-[current]:border-accent aria-[current]:text-accent aria-[current]:hover:text-accent"
|
|
2926
3684
|
);
|
|
2927
3685
|
return /* @__PURE__ */ jsxRuntime.jsx("li", { children: linkAsChild ? /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slot, { className: clases, "aria-current": activo ? "location" : void 0, children: linkAsChild({ href: item2.href, children: item2.label }) }) : /* @__PURE__ */ jsxRuntime.jsx("a", { href: item2.href, className: clases, "aria-current": activo ? "location" : void 0, children: item2.label }) }, item2.href);
|
|
2928
3686
|
}) })
|
|
@@ -2952,20 +3710,36 @@ function Logo({
|
|
|
2952
3710
|
sobre = "oscuro",
|
|
2953
3711
|
basePath = RUTA_ASSETS,
|
|
2954
3712
|
soloIsotipo = false,
|
|
3713
|
+
conLema = false,
|
|
2955
3714
|
className,
|
|
2956
3715
|
...props
|
|
2957
3716
|
}) {
|
|
3717
|
+
const conAleta = /* @__PURE__ */ jsxRuntime.jsx(
|
|
3718
|
+
Isotipo,
|
|
3719
|
+
{
|
|
3720
|
+
sobre,
|
|
3721
|
+
basePath,
|
|
3722
|
+
alt: soloIsotipo ? naming.wordmark : "",
|
|
3723
|
+
className: conLema ? "h-9 w-auto" : "h-7 w-auto"
|
|
3724
|
+
}
|
|
3725
|
+
);
|
|
3726
|
+
const wordmark = /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ui font-display text-text-primary font-bold tracking-[-0.02em]", children: naming.wordmark });
|
|
3727
|
+
if (soloIsotipo) {
|
|
3728
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: conAleta });
|
|
3729
|
+
}
|
|
3730
|
+
if (conLema) {
|
|
3731
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("gap-step-sm inline-flex items-center", className), ...props, children: [
|
|
3732
|
+
conAleta,
|
|
3733
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "bg-hairline h-8 w-px shrink-0" }),
|
|
3734
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
3735
|
+
wordmark,
|
|
3736
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-eyebrow font-mono text-text-muted uppercase", children: tagline.corto })
|
|
3737
|
+
] })
|
|
3738
|
+
] });
|
|
3739
|
+
}
|
|
2958
3740
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("gap-step-xs inline-flex items-center", className), ...props, children: [
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
{
|
|
2962
|
-
sobre,
|
|
2963
|
-
basePath,
|
|
2964
|
-
alt: soloIsotipo ? naming.wordmark : "",
|
|
2965
|
-
className: "h-7 w-auto"
|
|
2966
|
-
}
|
|
2967
|
-
),
|
|
2968
|
-
soloIsotipo ? null : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ui font-display text-text-primary font-bold tracking-[-0.02em]", children: naming.wordmark })
|
|
3741
|
+
conAleta,
|
|
3742
|
+
wordmark
|
|
2969
3743
|
] });
|
|
2970
3744
|
}
|
|
2971
3745
|
|
|
@@ -3030,13 +3804,28 @@ var Correo = (props) => /* @__PURE__ */ jsxRuntime.jsxs(Funcional, { ...props, c
|
|
|
3030
3804
|
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m3.5 7.5 7.4 5.2a2 2 0 0 0 2.2 0l7.4-5.2" })
|
|
3031
3805
|
] });
|
|
3032
3806
|
|
|
3807
|
+
exports.Accordion = Accordion;
|
|
3808
|
+
exports.AccordionContent = AccordionContent;
|
|
3809
|
+
exports.AccordionItem = AccordionItem;
|
|
3810
|
+
exports.AccordionTrigger = AccordionTrigger;
|
|
3033
3811
|
exports.Alert = Alert;
|
|
3812
|
+
exports.AlertDialog = AlertDialog;
|
|
3813
|
+
exports.AlertDialogAction = AlertDialogAction;
|
|
3814
|
+
exports.AlertDialogCancel = AlertDialogCancel;
|
|
3815
|
+
exports.AlertDialogContent = AlertDialogContent;
|
|
3816
|
+
exports.AlertDialogDescription = AlertDialogDescription;
|
|
3817
|
+
exports.AlertDialogFooter = AlertDialogFooter;
|
|
3818
|
+
exports.AlertDialogHeader = AlertDialogHeader;
|
|
3819
|
+
exports.AlertDialogOverlay = AlertDialogOverlay;
|
|
3820
|
+
exports.AlertDialogTitle = AlertDialogTitle;
|
|
3821
|
+
exports.AlertDialogTrigger = AlertDialogTrigger;
|
|
3034
3822
|
exports.ArticleCard = ArticleCard;
|
|
3035
3823
|
exports.AudioPlayer = AudioPlayer;
|
|
3036
3824
|
exports.AuthorCard = AuthorCard;
|
|
3037
3825
|
exports.Avatar = Avatar;
|
|
3038
3826
|
exports.AvatarFallback = AvatarFallback;
|
|
3039
3827
|
exports.AvatarImage = AvatarImage;
|
|
3828
|
+
exports.AvatarUpload = AvatarUpload;
|
|
3040
3829
|
exports.Badge = Badge;
|
|
3041
3830
|
exports.Blockquote = Blockquote;
|
|
3042
3831
|
exports.Breadcrumb = Breadcrumb;
|
|
@@ -3078,6 +3867,7 @@ exports.DropdownMenuSubContent = DropdownMenuSubContent;
|
|
|
3078
3867
|
exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
|
|
3079
3868
|
exports.DropdownMenuTrigger = DropdownMenuTrigger;
|
|
3080
3869
|
exports.EmptyState = EmptyState;
|
|
3870
|
+
exports.EventCalendar = EventCalendar;
|
|
3081
3871
|
exports.Footer = Footer;
|
|
3082
3872
|
exports.FooterLink = FooterLink;
|
|
3083
3873
|
exports.HOVER_TARJETA = HOVER_TARJETA;
|
|
@@ -3109,6 +3899,7 @@ exports.RUTA_ASSETS = RUTA_ASSETS;
|
|
|
3109
3899
|
exports.RadioGroup = RadioGroup2;
|
|
3110
3900
|
exports.RadioGroupItem = RadioGroupItem;
|
|
3111
3901
|
exports.SUPERFICIE_TARJETA = SUPERFICIE_TARJETA;
|
|
3902
|
+
exports.ScrollingProgressBar = ScrollingProgressBar;
|
|
3112
3903
|
exports.Select = Select;
|
|
3113
3904
|
exports.SelectContent = SelectContent;
|
|
3114
3905
|
exports.SelectGroup = SelectGroup;
|
|
@@ -3132,6 +3923,9 @@ exports.SidebarNav = SidebarNav;
|
|
|
3132
3923
|
exports.Skeleton = Skeleton;
|
|
3133
3924
|
exports.Stat = Stat;
|
|
3134
3925
|
exports.Switch = Switch;
|
|
3926
|
+
exports.TEMA_ATRIBUTO = TEMA_ATRIBUTO;
|
|
3927
|
+
exports.TEMA_CLAVE = TEMA_CLAVE;
|
|
3928
|
+
exports.TEMA_EVENTO = TEMA_EVENTO;
|
|
3135
3929
|
exports.Table = Table;
|
|
3136
3930
|
exports.TableBody = TableBody;
|
|
3137
3931
|
exports.TableCaption = TableCaption;
|
|
@@ -3148,18 +3942,17 @@ exports.TabsTrigger = TabsTrigger;
|
|
|
3148
3942
|
exports.TalkCard = TalkCard;
|
|
3149
3943
|
exports.Text = Text;
|
|
3150
3944
|
exports.Textarea = Textarea;
|
|
3151
|
-
exports.
|
|
3945
|
+
exports.ThemeToggle = ThemeToggle;
|
|
3152
3946
|
exports.ToastAction = ToastAction;
|
|
3153
|
-
exports.
|
|
3154
|
-
exports.ToastProvider = ToastProvider;
|
|
3155
|
-
exports.ToastTitle = ToastTitle;
|
|
3156
|
-
exports.ToastViewport = ToastViewport;
|
|
3947
|
+
exports.Toaster = Toaster;
|
|
3157
3948
|
exports.Tooltip = Tooltip;
|
|
3158
3949
|
exports.TooltipContent = TooltipContent;
|
|
3159
3950
|
exports.TooltipProvider = TooltipProvider;
|
|
3160
3951
|
exports.TooltipTrigger = TooltipTrigger;
|
|
3161
3952
|
exports.alertVariants = alert;
|
|
3162
3953
|
exports.aletas = aletas;
|
|
3954
|
+
exports.alternarTema = alternarTema;
|
|
3955
|
+
exports.aplicarTema = aplicarTema;
|
|
3163
3956
|
exports.avatarVariants = avatar;
|
|
3164
3957
|
exports.badgeVariants = badge;
|
|
3165
3958
|
exports.brand = brand;
|
|
@@ -3170,6 +3963,7 @@ exports.cn = cn;
|
|
|
3170
3963
|
exports.colors = colors;
|
|
3171
3964
|
exports.control = control;
|
|
3172
3965
|
exports.dark = dark;
|
|
3966
|
+
exports.escucharTema = escucharTema;
|
|
3173
3967
|
exports.fonts = fonts;
|
|
3174
3968
|
exports.gradient = gradient;
|
|
3175
3969
|
exports.light = light;
|
|
@@ -3180,13 +3974,20 @@ exports.motion = motion;
|
|
|
3180
3974
|
exports.naming = naming;
|
|
3181
3975
|
exports.poses = poses;
|
|
3182
3976
|
exports.radius = radius;
|
|
3977
|
+
exports.scriptTema = scriptTema;
|
|
3978
|
+
exports.series = series;
|
|
3183
3979
|
exports.shadow = shadow;
|
|
3184
3980
|
exports.sintaxis = sintaxis;
|
|
3185
3981
|
exports.size = size;
|
|
3186
3982
|
exports.social = social_exports;
|
|
3187
3983
|
exports.spacing = spacing;
|
|
3188
3984
|
exports.tagline = tagline;
|
|
3985
|
+
exports.temaActual = temaActual;
|
|
3986
|
+
exports.temaGuardado = temaGuardado;
|
|
3987
|
+
exports.temaPreferido = temaPreferido;
|
|
3189
3988
|
exports.textVariants = texto;
|
|
3989
|
+
exports.toast = toast2;
|
|
3190
3990
|
exports.tokens = tokens;
|
|
3191
3991
|
exports.typeScale = typeScale;
|
|
3992
|
+
exports.useTema = useTema;
|
|
3192
3993
|
exports.usoDeCara = usoDeCara;
|