@eduardoalvarez/arrecife 0.6.0 → 0.8.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 (56) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/README.md +288 -49
  3. package/dist/brand/index.cjs +2 -2
  4. package/dist/brand/index.js +3 -3
  5. package/dist/chart/index.cjs +129 -2
  6. package/dist/chart/index.d.cts +114 -4
  7. package/dist/chart/index.d.ts +114 -4
  8. package/dist/chart/index.js +129 -5
  9. package/dist/{chunk-PMN7NR3G.js → chunk-5A5GH2PF.js} +1 -1
  10. package/dist/{chunk-DKCN7BAL.js → chunk-6IGD5REB.js} +1 -1
  11. package/dist/{chunk-XKYHTOUJ.js → chunk-FAAGZG7A.js} +1 -1
  12. package/dist/{chunk-O4TAH7YJ.js → chunk-FGFNK72B.js} +29 -5
  13. package/dist/chunk-HOADZ6GS.js +72 -0
  14. package/dist/chunk-LXRGQKMG.js +145 -0
  15. package/dist/{chunk-6O3KWB6P.js → chunk-MPZBF2TZ.js} +2 -2
  16. package/dist/{chunk-JMOOFZ3B.js → chunk-TRPBID2W.js} +1 -1
  17. package/dist/{chunk-25YNFCIF.js → chunk-XXDATT3A.js} +6 -3
  18. package/dist/doctor.mjs +248 -0
  19. package/dist/form/index.cjs +2 -2
  20. package/dist/form/index.d.cts +1 -1
  21. package/dist/form/index.d.ts +1 -1
  22. package/dist/form/index.js +4 -4
  23. package/dist/icons/index.cjs +149 -0
  24. package/dist/icons/index.d.cts +94 -0
  25. package/dist/icons/index.d.ts +94 -0
  26. package/dist/icons/index.js +28 -0
  27. package/dist/index-BbRplw_B.d.cts +58 -0
  28. package/dist/index-BbRplw_B.d.ts +58 -0
  29. package/dist/index.cjs +425 -251
  30. package/dist/index.d.cts +303 -104
  31. package/dist/index.d.ts +303 -104
  32. package/dist/index.js +283 -285
  33. package/dist/{label-MgHFKnFy.d.ts → label-DJ4HuD-R.d.cts} +3 -2
  34. package/dist/{label-MgHFKnFy.d.cts → label-DJ4HuD-R.d.ts} +3 -2
  35. package/dist/og/index.cjs +3 -2
  36. package/dist/og/index.js +1 -1
  37. package/dist/shiki/index.js +1 -1
  38. package/dist/social/data.cjs +161 -0
  39. package/dist/social/data.d.cts +161 -0
  40. package/dist/social/data.d.ts +161 -0
  41. package/dist/social/data.js +2 -0
  42. package/dist/social/index.cjs +153 -0
  43. package/dist/social/index.d.cts +2 -0
  44. package/dist/social/index.d.ts +2 -0
  45. package/dist/social/index.js +3 -0
  46. package/dist/tokens/index.cjs +29 -5
  47. package/dist/tokens/index.d.cts +37 -10
  48. package/dist/tokens/index.d.ts +37 -10
  49. package/dist/tokens/index.js +2 -2
  50. package/dist/tokens/theme.css +79 -22
  51. package/dist/variants/index.cjs +6 -3
  52. package/dist/variants/index.d.cts +6 -3
  53. package/dist/variants/index.d.ts +6 -3
  54. package/dist/variants/index.js +1 -1
  55. package/llms.txt +530 -80
  56. package/package.json +29 -2
package/dist/index.js CHANGED
@@ -1,29 +1,31 @@
1
1
  'use client';
2
- export { tokens } from './chunk-PMN7NR3G.js';
2
+ import { Label } from './chunk-6IGD5REB.js';
3
+ export { Label } from './chunk-6IGD5REB.js';
4
+ import { Text } from './chunk-TRPBID2W.js';
5
+ export { Text } from './chunk-TRPBID2W.js';
6
+ export { tokens } from './chunk-5A5GH2PF.js';
3
7
  import { toggleTheme, currentTheme, watchTheme } from './chunk-GCRII2KQ.js';
4
8
  export { THEME_ATTRIBUTE, THEME_EVENT, THEME_KEY, applyTheme, currentTheme, preferredTheme, storedTheme, themeScript, toggleTheme, watchTheme } from './chunk-GCRII2KQ.js';
5
- import { alert, button, avatar, badge, category, metric, CARD_SURFACE, CARD } from './chunk-25YNFCIF.js';
6
- export { CARD, CARD_HOVER, CARD_SURFACE, alert as alertVariants, avatar as avatarVariants, badge as badgeVariants, button as buttonVariants, category as categoryBadgeVariants, metric as metricBadgeVariants } from './chunk-25YNFCIF.js';
7
- import { MascotFace, Mascot } from './chunk-6O3KWB6P.js';
8
- export { Isotype, Logo, Mascot, MascotFace } from './chunk-6O3KWB6P.js';
9
- export { ASSETS_PATH, faceList, faceUsage, faces, fins, poseList, poses } from './chunk-CKRSQPTX.js';
10
- import { Label } from './chunk-DKCN7BAL.js';
11
- export { Label } from './chunk-DKCN7BAL.js';
12
- import { Text } from './chunk-JMOOFZ3B.js';
13
- export { Text } from './chunk-JMOOFZ3B.js';
9
+ import { alert, button, avatar, badge, category, metric, CARD_SURFACE, CARD } from './chunk-XXDATT3A.js';
10
+ export { CARD, CARD_HOVER, CARD_SURFACE, alert as alertVariants, avatar as avatarVariants, badge as badgeVariants, button as buttonVariants, category as categoryBadgeVariants, metric as metricBadgeVariants } from './chunk-XXDATT3A.js';
14
11
  export { text as textVariants } from './chunk-ODBFN44D.js';
15
- import { cn } from './chunk-XKYHTOUJ.js';
16
- export { cn } from './chunk-XKYHTOUJ.js';
17
- import { naming } from './chunk-O4TAH7YJ.js';
18
- export { brand, colors, control, dark, fonts, gradient, light, limits, motion, naming, radius, series, shadow, size, spacing, syntax, tagline, typeScale } from './chunk-O4TAH7YJ.js';
19
- import { __export } from './chunk-MLKGABMK.js';
12
+ import { MascotFace, Mascot } from './chunk-MPZBF2TZ.js';
13
+ export { Isotype, Logo, Mascot, MascotFace } from './chunk-MPZBF2TZ.js';
14
+ export { ASSETS_PATH, faceList, faceUsage, faces, fins, poseList, poses } from './chunk-CKRSQPTX.js';
15
+ export { social_exports as social } from './chunk-HOADZ6GS.js';
16
+ import './chunk-LXRGQKMG.js';
17
+ import { cn } from './chunk-FAAGZG7A.js';
18
+ export { cn } from './chunk-FAAGZG7A.js';
19
+ import { naming } from './chunk-FGFNK72B.js';
20
+ export { brand, colors, control, dark, fonts, gradient, light, limits, motion, naming, radius, series, shadow, size, spacing, syntax, tagline, typeScale } from './chunk-FGFNK72B.js';
21
+ import './chunk-MLKGABMK.js';
20
22
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
21
23
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
22
24
  import { cva } from 'class-variance-authority';
23
25
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
24
26
  import * as AvatarPrimitive from '@radix-ui/react-avatar';
25
27
  import { useId, useState, useEffect, useSyncExternalStore, useRef, useCallback } from 'react';
26
- import { Slot } from '@radix-ui/react-slot';
28
+ import { Slot, Slottable } from '@radix-ui/react-slot';
27
29
  import { es } from 'date-fns/locale';
28
30
  import { DayPicker } from 'react-day-picker';
29
31
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
@@ -182,7 +184,7 @@ function AccordionTrigger({
182
184
  "font-sans text-lead font-medium text-text-primary",
183
185
  "transition-standard",
184
186
  "hover:text-accent",
185
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
187
+ "focus-ring",
186
188
  "disabled:pointer-events-none disabled:opacity-50",
187
189
  "[&[data-state=open]>svg]:rotate-180",
188
190
  className
@@ -418,7 +420,7 @@ function AvatarUpload({
418
420
  "transition-standard hover:text-accent hover:border-accent",
419
421
  // Focus lives on the input, which is hidden: without this, tabbing to
420
422
  // the control shows up nowhere.
421
- "has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-accent",
423
+ "has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-3 has-[:focus-visible]:outline-accent",
422
424
  disabled && "pointer-events-none opacity-50"
423
425
  ),
424
426
  children: [
@@ -507,14 +509,14 @@ function Calendar({
507
509
  "rounded-chip inline-flex items-center justify-center",
508
510
  "transition-standard cursor-pointer",
509
511
  "hover:bg-surface-raised",
510
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
512
+ "focus-ring",
511
513
  "disabled:pointer-events-none disabled:opacity-50"
512
514
  ].join(" ");
513
515
  const navigation = [
514
516
  "size-8 rounded-chip inline-flex items-center justify-center",
515
517
  "text-text-secondary transition-standard cursor-pointer",
516
518
  "hover:bg-surface-raised hover:text-text-primary",
517
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
519
+ "focus-ring",
518
520
  "disabled:pointer-events-none disabled:opacity-50"
519
521
  ].join(" ");
520
522
  return /* @__PURE__ */ jsx(
@@ -599,7 +601,7 @@ function Checkbox({ className, ...props }) {
599
601
  "rounded-chip border-border bg-surface size-5 shrink-0 cursor-pointer border",
600
602
  "text-accent-on transition-standard",
601
603
  "hover:border-hairline-hover",
602
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
604
+ "focus-ring",
603
605
  "disabled:pointer-events-none disabled:opacity-50",
604
606
  "data-[state=checked]:border-accent data-[state=checked]:bg-accent",
605
607
  "data-[state=indeterminate]:border-accent data-[state=indeterminate]:bg-accent",
@@ -642,7 +644,7 @@ function DateField({
642
644
  "font-mono text-ui text-text-primary",
643
645
  "transition-standard",
644
646
  "hover:border-hairline-hover",
645
- "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
647
+ "focus-visible:border-accent focus-ring",
646
648
  "disabled:pointer-events-none disabled:opacity-50",
647
649
  "data-[invalid]:border-error data-[invalid]:focus-visible:outline-error",
648
650
  // The native indicator inherits the active theme's scheme.
@@ -696,7 +698,7 @@ function DialogContent({
696
698
  "rounded-chip text-text-muted absolute top-4 right-4 flex size-8 cursor-pointer items-center justify-center",
697
699
  "transition-standard",
698
700
  "hover:bg-surface-raised hover:text-text-primary",
699
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
701
+ "focus-ring"
700
702
  ),
701
703
  children: /* @__PURE__ */ jsx(Close, {})
702
704
  }
@@ -845,7 +847,7 @@ function Input({ className, invalid = false, ...props }) {
845
847
  "font-sans text-ui text-text-primary placeholder:text-text-muted",
846
848
  "transition-standard",
847
849
  "hover:border-hairline-hover",
848
- "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
850
+ "focus-visible:border-accent focus-ring",
849
851
  "disabled:pointer-events-none disabled:opacity-50",
850
852
  "data-[invalid]:border-error data-[invalid]:focus-visible:outline-error",
851
853
  "file:mr-step-sm file:border-0 file:bg-transparent file:font-sans file:text-label file:text-text-secondary",
@@ -882,7 +884,7 @@ function PaginationLink({ className, isActive = false, ...props }) {
882
884
  "font-sans text-ui text-text-secondary",
883
885
  "transition-standard",
884
886
  "hover:bg-surface hover:text-text-primary",
885
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
887
+ "focus-ring",
886
888
  isActive && "bg-surface-raised text-text-primary",
887
889
  className
888
890
  ),
@@ -897,7 +899,7 @@ function PaginationPrevious({ className, ...props }) {
897
899
  ] });
898
900
  }
899
901
  function PaginationNext({ className, ...props }) {
900
- return /* @__PURE__ */ jsxs(PaginationLink, { "aria-label": "P\xE1gina next", className: cn("gap-step-xs", className), ...props, children: [
902
+ return /* @__PURE__ */ jsxs(PaginationLink, { "aria-label": "P\xE1gina siguiente", className: cn("gap-step-xs", className), ...props, children: [
901
903
  "Siguiente",
902
904
  /* @__PURE__ */ jsx(ChevronRight, {})
903
905
  ] });
@@ -967,7 +969,7 @@ function RadioGroupItem({ className, ...props }) {
967
969
  "rounded-pill border-border bg-surface size-5 shrink-0 cursor-pointer border",
968
970
  "transition-standard",
969
971
  "hover:border-hairline-hover",
970
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
972
+ "focus-ring",
971
973
  "disabled:pointer-events-none disabled:opacity-50",
972
974
  "data-[state=checked]:border-accent",
973
975
  className
@@ -994,7 +996,7 @@ function SelectTrigger({
994
996
  "font-sans text-ui text-text-primary",
995
997
  "transition-standard",
996
998
  "hover:border-hairline-hover",
997
- "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
999
+ "focus-visible:border-accent focus-ring",
998
1000
  "disabled:pointer-events-none disabled:opacity-50",
999
1001
  "data-[placeholder]:text-text-muted",
1000
1002
  className
@@ -1144,7 +1146,7 @@ function SheetContent({ className, side, children, ...props }) {
1144
1146
  "rounded-chip text-text-muted absolute top-4 right-4 flex size-8 cursor-pointer items-center justify-center",
1145
1147
  "transition-standard",
1146
1148
  "hover:bg-surface-raised hover:text-text-primary",
1147
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
1149
+ "focus-ring"
1148
1150
  ),
1149
1151
  children: /* @__PURE__ */ jsx(Close, {})
1150
1152
  }
@@ -1219,7 +1221,7 @@ function Switch({ className, ...props }) {
1219
1221
  "rounded-pill border-border bg-surface-raised inline-flex h-6 w-11 shrink-0 cursor-pointer items-center border",
1220
1222
  "transition-standard",
1221
1223
  "hover:border-hairline-hover",
1222
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1224
+ "focus-ring",
1223
1225
  "disabled:pointer-events-none disabled:opacity-50",
1224
1226
  "data-[state=checked]:border-accent data-[state=checked]:bg-accent",
1225
1227
  className
@@ -1238,7 +1240,7 @@ function Switch({ className, ...props }) {
1238
1240
  );
1239
1241
  }
1240
1242
  function Table({ className, ...props }) {
1241
- return /* @__PURE__ */ jsx("div", { className: "w-full overflow-x-auto", children: /* @__PURE__ */ jsx(
1243
+ return /* @__PURE__ */ jsx("div", { tabIndex: 0, className: "rounded-card border-hairline focus-ring w-full overflow-x-auto border", children: /* @__PURE__ */ jsx(
1242
1244
  "table",
1243
1245
  {
1244
1246
  className: cn("w-full caption-bottom border-collapse font-sans text-ui", className),
@@ -1291,7 +1293,13 @@ function TableCell({ className, ...props }) {
1291
1293
  return /* @__PURE__ */ jsx("td", { className: cn("px-step-sm py-step-sm text-text-secondary align-middle", className), ...props });
1292
1294
  }
1293
1295
  function TableCaption({ className, ...props }) {
1294
- return /* @__PURE__ */ jsx("caption", { className: cn("mt-step-sm text-label text-text-muted", className), ...props });
1296
+ return /* @__PURE__ */ jsx(
1297
+ "caption",
1298
+ {
1299
+ className: cn("px-step-sm pt-step-sm pb-step-sm text-label text-text-muted", className),
1300
+ ...props
1301
+ }
1302
+ );
1295
1303
  }
1296
1304
  function Tabs({ className, ...props }) {
1297
1305
  return /* @__PURE__ */ jsx(TabsPrimitive.Root, { className: cn("gap-step-md flex flex-col", className), ...props });
@@ -1320,7 +1328,7 @@ function TabsTrigger({
1320
1328
  "font-sans text-label text-text-secondary",
1321
1329
  "transition-standard",
1322
1330
  "hover:text-text-primary",
1323
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1331
+ "focus-ring",
1324
1332
  "disabled:pointer-events-none disabled:opacity-50",
1325
1333
  "data-[state=active]:bg-surface-raised data-[state=active]:text-text-primary",
1326
1334
  className
@@ -1337,7 +1345,7 @@ function TabsContent({
1337
1345
  TabsPrimitive.Content,
1338
1346
  {
1339
1347
  className: cn(
1340
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1348
+ "focus-ring",
1341
1349
  className
1342
1350
  ),
1343
1351
  ...props
@@ -1356,7 +1364,7 @@ function Textarea({ className, invalid = false, ...props }) {
1356
1364
  "font-sans text-ui text-text-primary placeholder:text-text-muted",
1357
1365
  "transition-standard",
1358
1366
  "hover:border-hairline-hover",
1359
- "focus-visible:border-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1367
+ "focus-visible:border-accent focus-ring",
1360
1368
  "disabled:pointer-events-none disabled:opacity-50",
1361
1369
  "data-[invalid]:border-error data-[invalid]:focus-visible:outline-error",
1362
1370
  className
@@ -1411,7 +1419,7 @@ function Toast({ className, variant, children, ...props }) {
1411
1419
  "rounded-chip text-text-muted absolute top-3 right-3 flex size-7 cursor-pointer items-center justify-center",
1412
1420
  "transition-standard",
1413
1421
  "hover:bg-surface-raised hover:text-text-primary",
1414
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
1422
+ "focus-ring"
1415
1423
  ),
1416
1424
  children: /* @__PURE__ */ jsx(Close, {})
1417
1425
  }
@@ -1551,11 +1559,20 @@ function ArticleCard({
1551
1559
  " min de lectura"
1552
1560
  ] }, "lectura") : null
1553
1561
  ].filter(Boolean);
1554
- return /* @__PURE__ */ jsx(CardShell, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsxs("article", { className: "gap-step-sm flex h-full flex-col", children: [
1555
- meta.length > 0 ? /* @__PURE__ */ jsx(Text, { variant: "meta", tone: "muted", as: "p", className: "gap-step-xs flex items-center", children: meta.map((m, i) => /* @__PURE__ */ jsxs("span", { className: "gap-step-xs flex items-center", children: [
1556
- i > 0 ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
1557
- m
1558
- ] }, i)) }) : null,
1562
+ return /* @__PURE__ */ jsx(CardShell, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsxs("article", { className: "flex flex-col h-full gap-step-sm", children: [
1563
+ meta.length > 0 ? /* @__PURE__ */ jsx(
1564
+ Text,
1565
+ {
1566
+ variant: "meta",
1567
+ tone: "muted",
1568
+ as: "p",
1569
+ className: "flex items-center gap-step-xs",
1570
+ children: meta.map((m, i) => /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-step-xs", children: [
1571
+ i > 0 ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
1572
+ m
1573
+ ] }, i))
1574
+ }
1575
+ ) : null,
1559
1576
  /* @__PURE__ */ jsx(
1560
1577
  Text,
1561
1578
  {
@@ -1566,8 +1583,15 @@ function ArticleCard({
1566
1583
  }
1567
1584
  ),
1568
1585
  excerpt ? /* @__PURE__ */ jsx(Text, { variant: "ui", tone: "secondary", className: "line-clamp-2", children: excerpt }) : null,
1569
- tags && tags.length > 0 ? /* @__PURE__ */ jsx("div", { className: "gap-step-xs mt-auto flex flex-wrap pt-step-sm", children: tags.map(
1570
- (t) => tagAsChild ? /* @__PURE__ */ jsx(Slot, { className: category({ active: false }), children: tagAsChild({ tag: t, children: t }) }, t) : /* @__PURE__ */ jsx(CategoryBadge, { children: t }, t)
1586
+ tags && tags.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex flex-wrap mt-auto gap-step-xs pt-step-sm", children: tags.map(
1587
+ (t) => tagAsChild ? /* @__PURE__ */ jsx(
1588
+ Slot,
1589
+ {
1590
+ className: category({ active: false }),
1591
+ children: tagAsChild({ tag: t, children: t })
1592
+ },
1593
+ t
1594
+ ) : /* @__PURE__ */ jsx(CategoryBadge, { children: t }, t)
1571
1595
  ) }) : null
1572
1596
  ] }) });
1573
1597
  }
@@ -1653,21 +1677,21 @@ function ProgressBar({
1653
1677
  }
1654
1678
  );
1655
1679
  }
1656
- var CONTROL = "rounded-chip transition-standard cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent";
1680
+ var CONTROL = "rounded-chip transition-standard cursor-pointer focus-ring";
1657
1681
  function SkipButton({
1658
- segundos,
1682
+ seconds,
1659
1683
  className,
1660
1684
  size: size2,
1661
- onSaltar
1685
+ onSkip
1662
1686
  }) {
1663
1687
  return /* @__PURE__ */ jsx(
1664
1688
  "button",
1665
1689
  {
1666
1690
  type: "button",
1667
- onClick: () => onSaltar(segundos),
1691
+ onClick: () => onSkip(seconds),
1668
1692
  className: cn("text-text-muted hover:text-text-primary", CONTROL, className),
1669
- "aria-label": segundos < 0 ? "Retroceder 15 segundos" : "Adelantar 15 segundos",
1670
- children: segundos < 0 ? /* @__PURE__ */ jsx(GoBackSeconds, { className: size2 }) : /* @__PURE__ */ jsx(AdvanceSeconds, { className: size2 })
1693
+ "aria-label": seconds < 0 ? "Retroceder 15 segundos" : "Adelantar 15 segundos",
1694
+ children: seconds < 0 ? /* @__PURE__ */ jsx(GoBackSeconds, { className: size2 }) : /* @__PURE__ */ jsx(AdvanceSeconds, { className: size2 })
1671
1695
  }
1672
1696
  );
1673
1697
  }
@@ -1699,8 +1723,8 @@ function SpeedButton({
1699
1723
  function Volume({
1700
1724
  size: size2,
1701
1725
  width,
1702
- silenciado,
1703
- volumen,
1726
+ muted,
1727
+ volume,
1704
1728
  onMute,
1705
1729
  onVolumeChange
1706
1730
  }) {
@@ -1711,8 +1735,8 @@ function Volume({
1711
1735
  type: "button",
1712
1736
  onClick: onMute,
1713
1737
  className: cn("text-text-muted hover:text-text-primary p-1", CONTROL),
1714
- "aria-label": silenciado ? "Activar sonido" : "Silenciar",
1715
- children: silenciado || volumen === 0 ? /* @__PURE__ */ jsx(VolumeMuted, { className: size2 }) : /* @__PURE__ */ jsx(VolumeOn, { className: size2 })
1738
+ "aria-label": muted ? "Activar sonido" : "Silenciar",
1739
+ children: muted || volume === 0 ? /* @__PURE__ */ jsx(VolumeMuted, { className: size2 }) : /* @__PURE__ */ jsx(VolumeOn, { className: size2 })
1716
1740
  }
1717
1741
  ),
1718
1742
  /* @__PURE__ */ jsx(
@@ -1722,20 +1746,20 @@ function Volume({
1722
1746
  min: "0",
1723
1747
  max: "1",
1724
1748
  step: "0.1",
1725
- value: silenciado ? 0 : volumen,
1749
+ value: muted ? 0 : volume,
1726
1750
  onChange: onVolumeChange,
1727
1751
  className: cn(
1728
1752
  "bg-surface-raised rounded-pill h-1 cursor-pointer appearance-none",
1729
1753
  "[accent-color:var(--color-accent)]",
1730
1754
  width
1731
1755
  ),
1732
- "aria-label": "Volume"
1756
+ "aria-label": "Volumen"
1733
1757
  }
1734
1758
  )
1735
1759
  ] });
1736
1760
  }
1737
- function PlayIcon({ className, cargando, error, playing }) {
1738
- if (cargando) return /* @__PURE__ */ jsx(Spinner, { className: cn("motion-safe:animate-spin", className) });
1761
+ function PlayIcon({ className, loading, error, playing }) {
1762
+ if (loading) return /* @__PURE__ */ jsx(Spinner, { className: cn("motion-safe:animate-spin", className) });
1739
1763
  if (error) return /* @__PURE__ */ jsx(Retry, { className });
1740
1764
  if (playing) return /* @__PURE__ */ jsx(Pause, { className });
1741
1765
  return /* @__PURE__ */ jsx(Play, { className });
@@ -1755,7 +1779,7 @@ function PlayButton({
1755
1779
  onClick: onToggle,
1756
1780
  className: cn(
1757
1781
  "text-accent-on transition-standard cursor-pointer",
1758
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
1782
+ "focus-ring",
1759
1783
  state.error ? "bg-error hover:bg-error/80" : "bg-accent hover:bg-accent-hover",
1760
1784
  className
1761
1785
  ),
@@ -1924,7 +1948,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
1924
1948
  );
1925
1949
  const progress = duration > 0 ? currentTime / duration * 100 : 0;
1926
1950
  const playLabel = hasError ? "Reintentar" : isPlaying ? "Pausar" : "Reproducir";
1927
- const playState = { cargando: isLoading, error: hasError, playing: isPlaying };
1951
+ const playState = { loading: isLoading, error: hasError, playing: isPlaying };
1928
1952
  const pointer = {
1929
1953
  onPointerDown: handlePointerDown,
1930
1954
  onPointerMove: handlePointerMove,
@@ -1965,7 +1989,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
1965
1989
  ] })
1966
1990
  ] }),
1967
1991
  /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
1968
- /* @__PURE__ */ jsx(SkipButton, { segundos: -15, className: "p-1.5", size: "w-5 h-5", onSaltar: skip }),
1992
+ /* @__PURE__ */ jsx(SkipButton, { seconds: -15, className: "p-1.5", size: "w-5 h-5", onSkip: skip }),
1969
1993
  /* @__PURE__ */ jsx(
1970
1994
  PlayButton,
1971
1995
  {
@@ -1976,7 +2000,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
1976
2000
  ...playState
1977
2001
  }
1978
2002
  ),
1979
- /* @__PURE__ */ jsx(SkipButton, { segundos: 15, className: "p-1.5", size: "w-5 h-5", onSaltar: skip }),
2003
+ /* @__PURE__ */ jsx(SkipButton, { seconds: 15, className: "p-1.5", size: "w-5 h-5", onSkip: skip }),
1980
2004
  /* @__PURE__ */ jsx(
1981
2005
  SpeedButton,
1982
2006
  {
@@ -2005,7 +2029,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2005
2029
  ] }),
2006
2030
  /* @__PURE__ */ jsx("div", { className: "mb-step-md", children: /* @__PURE__ */ jsx(ProgressBar, { height: "h-1.5", knob: 14, progress, ...pointer }) }),
2007
2031
  /* @__PURE__ */ jsxs("div", { className: "gap-step-sm flex items-center", children: [
2008
- /* @__PURE__ */ jsx(SkipButton, { segundos: -15, className: "p-2", size: "w-6 h-6", onSaltar: skip }),
2032
+ /* @__PURE__ */ jsx(SkipButton, { seconds: -15, className: "p-2", size: "w-6 h-6", onSkip: skip }),
2009
2033
  /* @__PURE__ */ jsx(
2010
2034
  PlayButton,
2011
2035
  {
@@ -2017,7 +2041,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2017
2041
  ...playState
2018
2042
  }
2019
2043
  ),
2020
- /* @__PURE__ */ jsx(SkipButton, { segundos: 15, className: "p-2", size: "w-6 h-6", onSaltar: skip }),
2044
+ /* @__PURE__ */ jsx(SkipButton, { seconds: 15, className: "p-2", size: "w-6 h-6", onSkip: skip }),
2021
2045
  /* @__PURE__ */ jsxs("div", { className: "gap-step-sm ml-auto flex items-center", children: [
2022
2046
  /* @__PURE__ */ jsx(
2023
2047
  SpeedButton,
@@ -2032,8 +2056,8 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2032
2056
  {
2033
2057
  size: "w-4 h-4",
2034
2058
  width: "w-16",
2035
- silenciado: isMuted,
2036
- volumen: volume,
2059
+ muted: isMuted,
2060
+ volume,
2037
2061
  onMute: toggleMute,
2038
2062
  onVolumeChange: handleVolumeChange
2039
2063
  }
@@ -2055,7 +2079,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2055
2079
  ] }),
2056
2080
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
2057
2081
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
2058
- /* @__PURE__ */ jsx(SkipButton, { segundos: -15, className: "p-1.5", size: "w-5 h-5", onSaltar: skip }),
2082
+ /* @__PURE__ */ jsx(SkipButton, { seconds: -15, className: "p-1.5", size: "w-5 h-5", onSkip: skip }),
2059
2083
  /* @__PURE__ */ jsx(
2060
2084
  PlayButton,
2061
2085
  {
@@ -2066,7 +2090,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2066
2090
  ...playState
2067
2091
  }
2068
2092
  ),
2069
- /* @__PURE__ */ jsx(SkipButton, { segundos: 15, className: "p-1.5", size: "w-5 h-5", onSaltar: skip })
2093
+ /* @__PURE__ */ jsx(SkipButton, { seconds: 15, className: "p-1.5", size: "w-5 h-5", onSkip: skip })
2070
2094
  ] }),
2071
2095
  /* @__PURE__ */ jsx(
2072
2096
  SpeedButton,
@@ -2091,7 +2115,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2091
2115
  ] }),
2092
2116
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
2093
2117
  /* @__PURE__ */ jsxs("div", { className: "gap-step-xs flex items-center", children: [
2094
- /* @__PURE__ */ jsx(SkipButton, { segundos: -15, className: "p-2", size: "w-5 h-5", onSaltar: skip }),
2118
+ /* @__PURE__ */ jsx(SkipButton, { seconds: -15, className: "p-2", size: "w-5 h-5", onSkip: skip }),
2095
2119
  /* @__PURE__ */ jsx(
2096
2120
  PlayButton,
2097
2121
  {
@@ -2102,7 +2126,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2102
2126
  ...playState
2103
2127
  }
2104
2128
  ),
2105
- /* @__PURE__ */ jsx(SkipButton, { segundos: 15, className: "p-2", size: "w-5 h-5", onSaltar: skip })
2129
+ /* @__PURE__ */ jsx(SkipButton, { seconds: 15, className: "p-2", size: "w-5 h-5", onSkip: skip })
2106
2130
  ] }),
2107
2131
  /* @__PURE__ */ jsxs("div", { className: "gap-step-sm flex items-center", children: [
2108
2132
  /* @__PURE__ */ jsx(
@@ -2118,8 +2142,8 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2118
2142
  {
2119
2143
  size: "w-5 h-5",
2120
2144
  width: "w-20",
2121
- silenciado: isMuted,
2122
- volumen: volume,
2145
+ muted: isMuted,
2146
+ volume,
2123
2147
  onMute: toggleMute,
2124
2148
  onVolumeChange: handleVolumeChange
2125
2149
  }
@@ -2145,7 +2169,7 @@ function Blockquote({ children, author, source, className, ...props }) {
2145
2169
  }
2146
2170
  );
2147
2171
  }
2148
- var LINK = "transition-standard hover:text-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent rounded-chip cursor-pointer";
2172
+ var LINK = "transition-standard hover:text-accent focus-ring rounded-chip cursor-pointer";
2149
2173
  function Breadcrumb({
2150
2174
  items,
2151
2175
  homeHref = "/",
@@ -2206,7 +2230,7 @@ function CodeBlock({ children, language, copyText, className, ...props }) {
2206
2230
  "gap-step-xs rounded-chip flex items-center px-2 py-1",
2207
2231
  "text-label font-mono text-text-muted cursor-pointer",
2208
2232
  "transition-standard hover:bg-surface hover:text-text-primary",
2209
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
2233
+ "focus-ring"
2210
2234
  ),
2211
2235
  children: [
2212
2236
  copiado ? /* @__PURE__ */ jsx(Check, { className: "text-accent" }) : /* @__PURE__ */ jsx(Copy, {}),
@@ -2247,20 +2271,32 @@ function CourseCard({
2247
2271
  ] }) });
2248
2272
  }
2249
2273
  var FACE = "w-[66px] max-w-none";
2250
- function EmptyState({
2251
- expression,
2252
- title,
2253
- description,
2254
- action,
2255
- basePath,
2256
- className,
2257
- ...props
2258
- }) {
2274
+ function EmptyState(props) {
2275
+ if (props.variant === "inline") {
2276
+ const { variant: variant2, title: title2, description: description2, action: action2, icon, className: className2, ...rest2 } = props;
2277
+ return /* @__PURE__ */ jsxs(
2278
+ "div",
2279
+ {
2280
+ className: cn(
2281
+ "py-step-lg px-step-md gap-step-xs flex flex-col items-center text-center",
2282
+ className2
2283
+ ),
2284
+ ...rest2,
2285
+ children: [
2286
+ icon ? /* @__PURE__ */ jsx("span", { className: "text-text-muted shrink-0", children: icon }) : null,
2287
+ /* @__PURE__ */ jsx(Text, { variant: "ui", tone: "muted", as: "p", className: "max-w-measure", children: title2 }),
2288
+ description2 ? /* @__PURE__ */ jsx(Text, { variant: "label", tone: "muted", as: "p", className: "max-w-measure font-normal", children: description2 }) : null,
2289
+ action2 ? /* @__PURE__ */ jsx("div", { className: "mt-step-xs", children: action2 }) : null
2290
+ ]
2291
+ }
2292
+ );
2293
+ }
2294
+ const { variant, title, description, action, expression, basePath, className, ...rest } = props;
2259
2295
  return /* @__PURE__ */ jsxs(
2260
2296
  "div",
2261
2297
  {
2262
2298
  className: cn(CARD_SURFACE, "p-step-lg gap-step-sm flex flex-col items-center text-center", className),
2263
- ...props,
2299
+ ...rest,
2264
2300
  children: [
2265
2301
  /* @__PURE__ */ jsx(MascotFace, { expression, className: FACE, basePath }),
2266
2302
  /* @__PURE__ */ jsx(Text, { variant: "ui", as: "p", className: "font-medium", children: title }),
@@ -2449,7 +2485,7 @@ function EventCalendar({
2449
2485
  ] }),
2450
2486
  /* @__PURE__ */ jsxs("div", { className: "gap-step-sm flex flex-wrap items-center", children: [
2451
2487
  /* @__PURE__ */ jsx(Button, { type: "submit", size: "sm", children: editing ? "Guardar" : "A\xF1adir" }),
2452
- editing ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "tertiary", size: "sm", onClick: cancel, children: "./cancel" }) : null
2488
+ editing ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "tertiary", size: "sm", onClick: cancel, children: "./cancelar" }) : null
2453
2489
  ] })
2454
2490
  ] }) : null
2455
2491
  ]
@@ -2457,73 +2493,129 @@ function EventCalendar({
2457
2493
  )
2458
2494
  ] });
2459
2495
  }
2460
- function Footer({
2461
- social,
2462
- year = (/* @__PURE__ */ new Date()).getFullYear(),
2463
- children,
2464
- brand: brand2,
2465
- className,
2466
- ...props
2496
+ function SocialRow({ social }) {
2497
+ return /* @__PURE__ */ jsx("ul", { className: "flex flex-wrap items-center gap-[18px]", children: social.map((socialLink) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
2498
+ "a",
2499
+ {
2500
+ href: socialLink.href,
2501
+ "aria-label": socialLink.label,
2502
+ className: cn(
2503
+ "text-text-muted hover:text-accent transition-standard block cursor-pointer text-[19px]",
2504
+ "rounded-chip focus-ring"
2505
+ ),
2506
+ children: socialLink.icon
2507
+ }
2508
+ ) }, socialLink.href)) });
2509
+ }
2510
+ function Signature({
2511
+ year,
2512
+ href,
2513
+ className
2467
2514
  }) {
2468
- const signature = /* @__PURE__ */ jsxs(Text, { variant: "meta", tone: "muted", as: "p", className: "ml-auto shrink-0", children: [
2515
+ const domain = href ? /* @__PURE__ */ jsx(
2516
+ "a",
2517
+ {
2518
+ href,
2519
+ className: "text-accent hover:text-text-primary transition-standard rounded-chip focus-ring cursor-pointer",
2520
+ children: naming.domain
2521
+ }
2522
+ ) : naming.domain;
2523
+ return /* @__PURE__ */ jsxs(Text, { variant: "meta", tone: "muted", as: "p", className: cn("shrink-0", className), children: [
2469
2524
  /* @__PURE__ */ jsxs("span", { "aria-hidden": "true", className: "text-accent", children: [
2470
2525
  "$",
2471
2526
  " "
2472
2527
  ] }),
2473
2528
  "cd ~/",
2474
- naming.domain,
2529
+ domain,
2475
2530
  "/",
2476
2531
  year,
2477
2532
  /* @__PURE__ */ jsx(
2478
2533
  "span",
2479
2534
  {
2480
2535
  "aria-hidden": "true",
2481
- className: "bg-accent motion-safe:caret ml-[0.2em] inline-block h-[1em] w-[0.5em] translate-y-[0.15em]"
2536
+ className: "bg-accent motion-safe:pulse-accent rounded-pill ml-1 inline-block h-[1em] w-[2px] align-middle"
2482
2537
  }
2483
2538
  )
2484
2539
  ] });
2485
- const rows = [
2486
- brand2 ? /* @__PURE__ */ jsx("div", { className: "flex items-center", children: brand2 }, "marca") : null,
2487
- children ? /* @__PURE__ */ jsx("div", { className: "gap-step-md flex flex-wrap items-center", children }, "enlaces") : null,
2488
- social && social.length > 0 ? (
2489
- // 18px of separation, from the document. It is not a `spacing` step: it is
2490
- // the rhythm of a row of icons, not that of a page.
2491
- /* @__PURE__ */ jsx("ul", { className: "flex items-center gap-[18px]", children: social.map((socialLink) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
2540
+ }
2541
+ function Shell({
2542
+ className,
2543
+ contentClassName,
2544
+ children,
2545
+ ...props
2546
+ }) {
2547
+ return /* @__PURE__ */ jsx("footer", { className: cn("border-hairline w-full border-t", className), ...props, children: /* @__PURE__ */ jsx(
2548
+ "div",
2549
+ {
2550
+ className: cn("max-w-wide px-step-md py-step-xl mx-auto flex flex-col", contentClassName),
2551
+ children
2552
+ }
2553
+ ) });
2554
+ }
2555
+ function Footer({
2556
+ variant,
2557
+ columns,
2558
+ description,
2559
+ action,
2560
+ linkAsChild,
2561
+ social,
2562
+ brand: brand2,
2563
+ year = (/* @__PURE__ */ new Date()).getFullYear(),
2564
+ signatureHref,
2565
+ className,
2566
+ ...rest
2567
+ }) {
2568
+ if (variant === "full") {
2569
+ const link = (href, external, content) => {
2570
+ const classes = cn(
2571
+ "font-mono text-meta text-text-secondary hover:text-accent transition-standard cursor-pointer",
2572
+ "rounded-chip focus-ring"
2573
+ );
2574
+ const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
2575
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-text-muted", children: "./" }),
2576
+ content
2577
+ ] });
2578
+ if (linkAsChild) {
2579
+ return /* @__PURE__ */ jsx(Slot, { className: classes, children: linkAsChild({ href, children: inner }) });
2580
+ }
2581
+ return /* @__PURE__ */ jsx(
2492
2582
  "a",
2493
2583
  {
2494
- href: socialLink.href,
2495
- "aria-label": socialLink.label,
2496
- className: cn(
2497
- "text-text-muted hover:text-accent transition-standard block cursor-pointer text-[19px]",
2498
- "rounded-chip focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent"
2499
- ),
2500
- children: socialLink.icon
2584
+ href,
2585
+ className: classes,
2586
+ ...external ? { target: "_blank", rel: "noopener noreferrer" } : {},
2587
+ children: inner
2501
2588
  }
2502
- ) }, socialLink.href)) }, "socialLinks")
2503
- ) : null
2589
+ );
2590
+ };
2591
+ return /* @__PURE__ */ jsxs(Shell, { className, ...rest, children: [
2592
+ /* @__PURE__ */ jsxs("div", { className: "gap-step-xl flex flex-col md:flex-row md:justify-between", children: [
2593
+ /* @__PURE__ */ jsxs("div", { className: "gap-step-md flex max-w-xs flex-col", children: [
2594
+ brand2,
2595
+ description ? /* @__PURE__ */ jsx(Text, { variant: "ui", tone: "secondary", as: "p", children: description }) : null,
2596
+ social && social.length > 0 ? /* @__PURE__ */ jsx(SocialRow, { social }) : null,
2597
+ action
2598
+ ] }),
2599
+ /* @__PURE__ */ jsx("div", { className: "gap-step-lg grid grid-cols-2 sm:grid-cols-3", children: columns.map((column) => /* @__PURE__ */ jsxs("div", { className: "gap-step-sm flex flex-col", children: [
2600
+ /* @__PURE__ */ jsx(Text, { variant: "eyebrow", tone: "muted", as: "h3", children: column.title }),
2601
+ /* @__PURE__ */ jsx("ul", { className: "gap-step-xs flex flex-col", children: column.links.map((columnLink) => /* @__PURE__ */ jsx("li", { children: link(columnLink.href, columnLink.external, columnLink.label) }, columnLink.href)) })
2602
+ ] }, column.title)) })
2603
+ ] }),
2604
+ /* @__PURE__ */ jsx("div", { className: "border-hairline mt-step-xl pt-step-lg border-t", children: /* @__PURE__ */ jsx(Signature, { year, href: signatureHref, className: "text-center sm:text-right" }) })
2605
+ ] });
2606
+ }
2607
+ const rows = [
2608
+ brand2 ? /* @__PURE__ */ jsx("div", { className: "flex items-center", children: brand2 }, "brand") : null,
2609
+ social && social.length > 0 ? /* @__PURE__ */ jsx(SocialRow, { social }, "social") : null
2504
2610
  ].filter(Boolean);
2505
- const [first, ...rest] = rows;
2506
- return /* @__PURE__ */ jsx("footer", { className: cn("border-hairline w-full border-t", className), ...props, children: /* @__PURE__ */ jsxs("div", { className: "max-w-wide px-step-md py-step-xl gap-step-lg mx-auto flex flex-col", children: [
2611
+ const [first, ...others] = rows;
2612
+ return /* @__PURE__ */ jsxs(Shell, { className, contentClassName: "gap-step-lg", ...rest, children: [
2507
2613
  /* @__PURE__ */ jsxs("div", { className: "gap-step-md flex flex-wrap items-center", children: [
2508
2614
  first ?? null,
2509
- signature
2615
+ /* @__PURE__ */ jsx(Signature, { year, href: signatureHref, className: "ml-auto" })
2510
2616
  ] }),
2511
- rest
2512
- ] }) });
2513
- }
2514
- function FooterLink({ asChild = false, className, ...props }) {
2515
- const Root17 = asChild ? Slot : "a";
2516
- return /* @__PURE__ */ jsx(
2517
- Root17,
2518
- {
2519
- className: cn(
2520
- "font-mono text-meta text-text-secondary hover:text-accent transition-standard cursor-pointer",
2521
- "rounded-chip focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2522
- className
2523
- ),
2524
- ...props
2525
- }
2526
- );
2617
+ others
2618
+ ] });
2527
2619
  }
2528
2620
  function Hero({
2529
2621
  title,
@@ -2631,7 +2723,7 @@ function LinkRow({
2631
2723
  }
2632
2724
  );
2633
2725
  }
2634
- function Nav({ brand: brand2, children, actions, className, ...props }) {
2726
+ function Nav({ brand: brand2, children, actions, size: size2 = "default", className, ...props }) {
2635
2727
  return /* @__PURE__ */ jsx(
2636
2728
  "header",
2637
2729
  {
@@ -2644,14 +2736,23 @@ function Nav({ brand: brand2, children, actions, className, ...props }) {
2644
2736
  className
2645
2737
  ),
2646
2738
  ...props,
2647
- children: /* @__PURE__ */ jsxs("div", { className: "max-w-wide px-step-md h-nav gap-step-lg mx-auto flex items-center", children: [
2648
- brand2 ? /* @__PURE__ */ jsx("div", { className: "shrink-0", children: brand2 }) : null,
2649
- children ? /* @__PURE__ */ jsx("nav", { "aria-label": "Principal", className: "ml-auto min-w-0", children: /* @__PURE__ */ jsxs("ul", { className: "gap-step-md flex items-center", children: [
2650
- /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-text-muted font-mono text-meta select-none", children: "~/" }),
2651
- children
2652
- ] }) }) : /* @__PURE__ */ jsx("div", { className: "flex-1" }),
2653
- actions ? /* @__PURE__ */ jsx("div", { className: "gap-step-sm flex shrink-0 items-center", children: actions }) : null
2654
- ] })
2739
+ children: /* @__PURE__ */ jsxs(
2740
+ "div",
2741
+ {
2742
+ className: cn(
2743
+ "max-w-wide px-step-md gap-step-lg mx-auto flex items-center",
2744
+ size2 === "compact" ? "h-nav-compact" : "h-nav"
2745
+ ),
2746
+ children: [
2747
+ brand2 ? /* @__PURE__ */ jsx("div", { className: "shrink-0", children: brand2 }) : null,
2748
+ children ? /* @__PURE__ */ jsx("nav", { "aria-label": "Principal", className: "ml-auto min-w-0", children: /* @__PURE__ */ jsxs("ul", { className: "gap-step-md flex items-center", children: [
2749
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-text-muted font-mono text-meta select-none", children: "~/" }),
2750
+ children
2751
+ ] }) }) : /* @__PURE__ */ jsx("div", { className: "flex-1" }),
2752
+ actions ? /* @__PURE__ */ jsx("div", { className: "gap-step-sm flex shrink-0 items-center", children: actions }) : null
2753
+ ]
2754
+ }
2755
+ )
2655
2756
  }
2656
2757
  );
2657
2758
  }
@@ -2663,7 +2764,7 @@ function NavItem({ active = false, asChild = false, className, children, ...prop
2663
2764
  "aria-current": active ? "page" : void 0,
2664
2765
  className: cn(
2665
2766
  "font-mono text-meta transition-standard cursor-pointer",
2666
- "rounded-chip focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2767
+ "rounded-chip focus-ring",
2667
2768
  active ? "text-accent underline decoration-1 underline-offset-4" : "text-text-secondary hover:text-accent",
2668
2769
  className
2669
2770
  ),
@@ -2671,7 +2772,7 @@ function NavItem({ active = false, asChild = false, className, children, ...prop
2671
2772
  children: [
2672
2773
  active ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-accent", children: "[" }) : null,
2673
2774
  /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: active ? "text-accent" : "text-text-muted", children: "./" }),
2674
- children,
2775
+ /* @__PURE__ */ jsx(Slottable, { children }),
2675
2776
  active ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-accent", children: "]" }) : null
2676
2777
  ]
2677
2778
  }
@@ -2682,14 +2783,14 @@ function NewsletterForm({
2682
2783
  description,
2683
2784
  state = "idle",
2684
2785
  onSubmitEmail,
2685
- successMessage = "Ya est\xE1s dentro. Te llega un email cada dos semanas, y nada m\xE1s.",
2686
- errorMessage = "No se pudo suscribir ese email. Rev\xEDsalo y vuelve a intentar.",
2786
+ successMessage = "Ya est\xE1s dentro. Te llega un correo cada dos semanas, y nada m\xE1s.",
2787
+ errorMessage = "No se pudo suscribir ese correo. Rev\xEDsalo y vuelve a intentar.",
2687
2788
  disclaimer,
2688
2789
  expression,
2689
2790
  basePath,
2690
2791
  submitLabel = "Suscribirme",
2691
2792
  placeholder = "tu@email.dev",
2692
- fieldLabel = "Email electr\xF3nico",
2793
+ fieldLabel = "Correo electr\xF3nico",
2693
2794
  nameField = false,
2694
2795
  nameLabel = "Nombre",
2695
2796
  namePlaceholder = "C\xF3mo te llamas",
@@ -2885,70 +2986,11 @@ function ScrollingProgressBar({
2885
2986
  }
2886
2987
  );
2887
2988
  }
2888
- function SidebarItem({
2889
- active = false,
2890
- asChild = false,
2891
- badge: badge2,
2892
- className,
2893
- children,
2894
- ...props
2895
- }) {
2896
- const Root17 = asChild ? Slot : "a";
2897
- return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
2898
- Root17,
2899
- {
2900
- "aria-current": active ? "page" : void 0,
2901
- className: cn(
2902
- "rounded-chip px-step-sm gap-step-xs flex cursor-pointer items-center py-1.5",
2903
- "font-mono text-meta transition-standard",
2904
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
2905
- // The active item is `surfaceRaised` with primary ink, same as
2906
- // `TabsTrigger`. NOT biolume: `tokens.ts` says so explicitly — light
2907
- // accent passes over background and over surface, but over
2908
- // surfaceRaised it measures 4.2 and is not a text color there. The
2909
- // accent stays on the `▸`, which is decorative and gets the 3:1
2910
- // threshold.
2911
- active ? "bg-surface-raised text-text-primary" : "text-text-secondary hover:text-text-primary hover:bg-surface-raised",
2912
- className
2913
- ),
2914
- ...props,
2915
- children: [
2916
- /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: active ? "text-accent" : "text-text-muted", children: "\u25B8" }),
2917
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children }),
2918
- badge2 ? /* @__PURE__ */ jsx("span", { className: "text-text-muted shrink-0", children: badge2 }) : null
2919
- ]
2920
- }
2921
- ) });
2922
- }
2923
- function SidebarNav({
2924
- title,
2925
- version,
2926
- branch,
2927
- children,
2928
- className,
2929
- ...props
2930
- }) {
2931
- const footer = [version, branch].filter(Boolean);
2932
- return /* @__PURE__ */ jsxs(
2933
- "nav",
2934
- {
2935
- "aria-label": typeof title === "string" ? title : "Administraci\xF3n",
2936
- className: cn(
2937
- "border-hairline bg-surface p-step-sm gap-step-sm flex h-full flex-col border-r",
2938
- className
2939
- ),
2940
- ...props,
2941
- children: [
2942
- title ? /* @__PURE__ */ jsx(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "px-step-sm", children: title }) : null,
2943
- /* @__PURE__ */ jsx("ul", { className: "gap-0.5 flex flex-1 flex-col", children }),
2944
- footer.length > 0 ? /* @__PURE__ */ jsx(Text, { variant: "meta", tone: "muted", as: "p", className: "border-hairline px-step-sm pt-step-sm border-t", children: footer.map((p, i) => /* @__PURE__ */ jsxs("span", { children: [
2945
- i > 0 ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: " \xB7 " }) : null,
2946
- p
2947
- ] }, i)) }) : null
2948
- ]
2949
- }
2950
- );
2951
- }
2989
+ var DELTA = {
2990
+ up: { glyph: ChevronUp, label: "sube" },
2991
+ down: { glyph: ChevronDown, label: "baja" },
2992
+ flat: { glyph: Minus, label: "sin cambio" }
2993
+ };
2952
2994
  function Stat({
2953
2995
  value,
2954
2996
  label,
@@ -2956,30 +2998,52 @@ function Stat({
2956
2998
  progress,
2957
2999
  icon,
2958
3000
  description,
3001
+ delta,
3002
+ spark,
2959
3003
  className,
2960
3004
  ...props
2961
3005
  }) {
3006
+ const DeltaGlyph = delta ? DELTA[delta.direction].glyph : null;
2962
3007
  return /* @__PURE__ */ jsxs("div", { className: cn(CARD_SURFACE, "p-step-lg gap-step-xs flex flex-col", className), ...props, children: [
2963
- /* @__PURE__ */ jsxs(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "gap-step-xs flex items-center", children: [
3008
+ /* @__PURE__ */ jsxs("div", { className: "gap-step-sm flex items-start justify-between", children: [
3009
+ /* @__PURE__ */ jsx(Text, { variant: "eyebrow", tone: "muted", as: "p", className: "min-w-0", children: label }),
2964
3010
  icon ? (
2965
3011
  // `aria-hidden` is not needed: the system's glyphs already carry it.
2966
- // What IS needed is that it does not shrink next to a long title,
2967
- // because a squashed icon reads as a different icon.
2968
- /* @__PURE__ */ jsx("span", { className: "shrink-0", children: icon })
2969
- ) : null,
2970
- label
3012
+ // The circle is a SURFACE — the tint at 10 %, same as an alert's — and
3013
+ // the colour stays on the glyph, which is § 4b and also what keeps it
3014
+ // on the 3:1 graphical threshold instead of text's 4.5.
3015
+ /* @__PURE__ */ jsx(
3016
+ "span",
3017
+ {
3018
+ className: cn(
3019
+ "size-control-icon-sm text-ui flex shrink-0 items-center justify-center rounded-full",
3020
+ tone === "neutral" ? "bg-accent/10 text-accent" : "bg-warm/10 text-warm"
3021
+ ),
3022
+ children: icon
3023
+ }
3024
+ )
3025
+ ) : null
2971
3026
  ] }),
2972
- /* @__PURE__ */ jsx(Text, { variant: "stat", as: "p", tone: tone === "alerta" ? "warm" : "accent", children: value }),
3027
+ /* @__PURE__ */ jsx(Text, { variant: "stat", as: "p", tone: tone === "neutral" ? "primary" : "warm", children: value }),
3028
+ delta && DeltaGlyph ? /* @__PURE__ */ jsxs(Text, { variant: "label", tone: "secondary", as: "p", className: "gap-step-xs flex items-center", children: [
3029
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
3030
+ DELTA[delta.direction].label,
3031
+ " "
3032
+ ] }),
3033
+ /* @__PURE__ */ jsx(DeltaGlyph, { className: "shrink-0" }),
3034
+ delta.value
3035
+ ] }) : null,
2973
3036
  description ? /* @__PURE__ */ jsx(Text, { variant: "ui", tone: "secondary", as: "p", children: description }) : null,
2974
3037
  typeof progress === "number" ? /* @__PURE__ */ jsx(
2975
3038
  Progress,
2976
3039
  {
2977
3040
  value: progress,
2978
- tone: tone === "alerta" ? "warm" : "accent",
3041
+ tone: tone === "neutral" ? "accent" : "warm",
2979
3042
  label: `${label}: ${progress}%`,
2980
3043
  className: "mt-step-sm"
2981
3044
  }
2982
- ) : null
3045
+ ) : null,
3046
+ spark ? /* @__PURE__ */ jsx("div", { className: "mt-auto pt-step-md", children: spark }) : null
2983
3047
  ] });
2984
3048
  }
2985
3049
  function TalkCard({
@@ -3041,7 +3105,7 @@ function TalkCard({
3041
3105
  return /* @__PURE__ */ jsx(CardShell, { className: cn("p-step-lg", className), ...props, children: /* @__PURE__ */ jsx("article", { className: "gap-step-sm flex h-full flex-col", children: body }) });
3042
3106
  }
3043
3107
  function ThemeToggle({
3044
- label = "Cambiar de theme",
3108
+ label = "Cambiar de tema",
3045
3109
  onThemeChange,
3046
3110
  variant = "secondary",
3047
3111
  size: size2 = "icon",
@@ -3085,7 +3149,7 @@ function TableOfContents({
3085
3149
  const classes = cn(
3086
3150
  "px-step-sm -ml-px block border-l",
3087
3151
  "font-sans text-label transition-standard",
3088
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
3152
+ "focus-ring",
3089
3153
  "cursor-pointer",
3090
3154
  item2.nested && "pl-step-lg",
3091
3155
  "border-transparent text-text-secondary hover:text-text-primary",
@@ -3099,70 +3163,4 @@ function TableOfContents({
3099
3163
  ] });
3100
3164
  }
3101
3165
 
3102
- // src/lib/social.tsx
3103
- var social_exports = {};
3104
- __export(social_exports, {
3105
- Discord: () => Discord,
3106
- Email: () => Email,
3107
- GitHub: () => GitHub,
3108
- Instagram: () => Instagram,
3109
- LinkedIn: () => LinkedIn,
3110
- Newsletter: () => Newsletter,
3111
- Rss: () => Rss,
3112
- X: () => X,
3113
- YouTube: () => YouTube
3114
- });
3115
- function Brand({ children, ...props }) {
3116
- return /* @__PURE__ */ jsx(
3117
- "svg",
3118
- {
3119
- viewBox: "0 0 24 24",
3120
- width: "1em",
3121
- height: "1em",
3122
- fill: "currentColor",
3123
- "aria-hidden": "true",
3124
- focusable: "false",
3125
- ...props,
3126
- children
3127
- }
3128
- );
3129
- }
3130
- function Functional({ children, ...props }) {
3131
- return /* @__PURE__ */ jsx(
3132
- "svg",
3133
- {
3134
- viewBox: "0 0 24 24",
3135
- width: "1em",
3136
- height: "1em",
3137
- fill: "none",
3138
- stroke: "currentColor",
3139
- strokeWidth: 1.6,
3140
- strokeLinecap: "round",
3141
- strokeLinejoin: "round",
3142
- "aria-hidden": "true",
3143
- focusable: "false",
3144
- ...props,
3145
- children
3146
- }
3147
- );
3148
- }
3149
- var GitHub = (props) => /* @__PURE__ */ jsx(Brand, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M12 .5C5.73.5.5 5.73.5 12a11.5 11.5 0 0 0 7.86 10.91c.58.1.79-.25.79-.55 0-.27-.01-1.18-.02-2.14-3.2.7-3.88-1.36-3.88-1.36-.52-1.33-1.28-1.68-1.28-1.68-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.19 1.77 1.19 1.03 1.77 2.7 1.26 3.36.96.1-.75.4-1.26.73-1.55-2.55-.29-5.24-1.28-5.24-5.69 0-1.26.45-2.29 1.19-3.09-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.18a11 11 0 0 1 5.79 0c2.2-1.49 3.17-1.18 3.17-1.18.63 1.59.23 2.76.12 3.05.74.8 1.18 1.83 1.18 3.09 0 4.42-2.69 5.39-5.25 5.68.41.36.78 1.06.78 2.14 0 1.55-.01 2.79-.01 3.17 0 .3.2.66.79.55A11.5 11.5 0 0 0 23.5 12C23.5 5.73 18.27.5 12 .5Z" }) });
3150
- var LinkedIn = (props) => /* @__PURE__ */ jsx(Brand, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5ZM3 9h4v12H3V9Zm7 0h3.8v1.71h.05a4.17 4.17 0 0 1 3.75-2.06c4.01 0 4.75 2.64 4.75 6.07V21h-4v-5.4c0-1.29-.02-2.95-1.8-2.95-1.8 0-2.08 1.4-2.08 2.85V21h-3.97V9Z" }) });
3151
- var X = (props) => /* @__PURE__ */ jsx(Brand, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M17.53 3h3.06l-6.69 7.64L21.75 21h-6.16l-4.83-6.3L5.25 21H2.19l7.15-8.17L2.5 3h6.32l4.36 5.77L17.53 3Zm-1.07 16.17h1.7L7.62 4.74H5.8l10.66 14.43Z" }) });
3152
- var Instagram = (props) => /* @__PURE__ */ jsx(Brand, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M12 2.16c3.2 0 3.58.01 4.85.07 1.17.05 1.8.25 2.23.41.56.22.96.48 1.38.9.42.42.68.82.9 1.38.16.42.36 1.06.41 2.23.06 1.27.07 1.65.07 4.85s-.01 3.58-.07 4.85c-.05 1.17-.25 1.8-.41 2.23-.22.56-.48.96-.9 1.38-.42.42-.82.68-1.38.9-.42.16-1.06.36-2.23.41-1.27.06-1.65.07-4.85.07s-3.58-.01-4.85-.07c-1.17-.05-1.8-.25-2.23-.41-.56-.22-.96-.48-1.38-.9-.42-.42-.68-.82-.9-1.38-.16-.42-.36-1.06-.41-2.23C2.17 15.58 2.16 15.2 2.16 12s.01-3.58.07-4.85c.05-1.17.25-1.8.41-2.23.22-.56.48-.96.9-1.38.42-.42.82-.68 1.38-.9.42-.16 1.06-.36 2.23-.41C8.42 2.17 8.8 2.16 12 2.16Zm0 3.68a6.16 6.16 0 1 0 0 12.32 6.16 6.16 0 0 0 0-12.32Zm0 10.16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Zm7.85-10.4a1.44 1.44 0 1 1-2.88 0 1.44 1.44 0 0 1 2.88 0Z" }) });
3153
- var Discord = (props) => /* @__PURE__ */ jsx(Brand, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M20.32 5.56A18.5 18.5 0 0 0 15.7 4.1a.07.07 0 0 0-.07.04c-.2.36-.42.82-.58 1.19a17 17 0 0 0-5.1 0c-.16-.38-.39-.83-.59-1.19a.07.07 0 0 0-.07-.04c-1.6.28-3.15.77-4.62 1.46a.06.06 0 0 0-.03.03C1.66 10 .9 14.28 1.28 18.5a.08.08 0 0 0 .03.05 18.6 18.6 0 0 0 5.6 2.84.07.07 0 0 0 .08-.03c.43-.59.81-1.21 1.14-1.86a.07.07 0 0 0-.04-.1c-.6-.23-1.18-.51-1.74-.83a.07.07 0 0 1-.01-.12l.35-.27a.07.07 0 0 1 .07-.01 13.3 13.3 0 0 0 11.3 0 .07.07 0 0 1 .08.01l.34.27c.04.04.04.1-.01.12-.55.33-1.13.6-1.74.83a.07.07 0 0 0-.04.1c.34.65.72 1.27 1.14 1.86a.07.07 0 0 0 .08.03 18.5 18.5 0 0 0 5.6-2.84.07.07 0 0 0 .04-.05c.45-4.88-.75-9.12-3.18-12.88a.06.06 0 0 0-.03-.03ZM8.4 15.93c-1.1 0-2.01-1.01-2.01-2.25 0-1.24.89-2.25 2.01-2.25 1.13 0 2.03 1.02 2.02 2.25 0 1.24-.9 2.25-2.02 2.25Zm7.22 0c-1.1 0-2.01-1.01-2.01-2.25 0-1.24.89-2.25 2.01-2.25 1.13 0 2.03 1.02 2.02 2.25 0 1.24-.89 2.25-2.02 2.25Z" }) });
3154
- var YouTube = (props) => /* @__PURE__ */ jsx(Brand, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M23.5 6.9a3 3 0 0 0-2.12-2.12C19.5 4.27 12 4.27 12 4.27s-7.5 0-9.38.51A3 3 0 0 0 .5 6.9 31.3 31.3 0 0 0 0 12a31.3 31.3 0 0 0 .5 5.1 3 3 0 0 0 2.12 2.12c1.88.51 9.38.51 9.38.51s7.5 0 9.38-.51a3 3 0 0 0 2.12-2.12A31.3 31.3 0 0 0 24 12a31.3 31.3 0 0 0-.5-5.1ZM9.6 15.6V8.4l6.24 3.6-6.24 3.6Z" }) });
3155
- var Rss = (props) => /* @__PURE__ */ jsxs(Functional, { ...props, children: [
3156
- /* @__PURE__ */ jsx("path", { d: "M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16" }),
3157
- /* @__PURE__ */ jsx("circle", { cx: "5", cy: "19", r: "1.6", fill: "currentColor", stroke: "none" })
3158
- ] });
3159
- var Email = (props) => /* @__PURE__ */ jsxs(Functional, { ...props, children: [
3160
- /* @__PURE__ */ jsx("rect", { x: "2.75", y: "4.75", width: "18.5", height: "14.5", rx: "2" }),
3161
- /* @__PURE__ */ jsx("path", { d: "m3.5 7.5 7.4 5.2a2 2 0 0 0 2.2 0l7.4-5.2" })
3162
- ] });
3163
- var Newsletter = (props) => /* @__PURE__ */ jsxs(Functional, { ...props, children: [
3164
- /* @__PURE__ */ jsx("path", { d: "M18 8.5a6 6 0 1 0-12 0c0 5-2 6.5-2 6.5h16s-2-1.5-2-6.5" }),
3165
- /* @__PURE__ */ jsx("path", { d: "M13.7 19a2 2 0 0 1-3.4 0" })
3166
- ] });
3167
-
3168
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, ArticleCard, AudioPlayer, AuthorCard, Avatar, AvatarFallback, AvatarImage, AvatarUpload, Badge, Blockquote, Breadcrumb, Button, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryBadge, Checkbox, Code, CodeBlock, CourseCard, DateField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EventCalendar, Footer, FooterLink, Hero, Input, LinkRow, MetricBadge, Nav, NavItem, NewsletterForm, PageHeader, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup2 as RadioGroup, RadioGroupItem, ScrollingProgressBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator3 as Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SidebarItem, SidebarNav, Skeleton, Stat, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableOfContents, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TalkCard, Textarea, ThemeToggle, ToastAction, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, social_exports as social, toast2 as toast, useTheme };
3166
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, ArticleCard, AudioPlayer, AuthorCard, Avatar, AvatarFallback, AvatarImage, AvatarUpload, Badge, Blockquote, Breadcrumb, Button, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryBadge, Checkbox, Code, CodeBlock, CourseCard, DateField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EventCalendar, Footer, Hero, Input, LinkRow, MetricBadge, Nav, NavItem, NewsletterForm, PageHeader, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup2 as RadioGroup, RadioGroupItem, ScrollingProgressBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator3 as Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, Stat, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableOfContents, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TalkCard, Textarea, ThemeToggle, ToastAction, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, toast2 as toast, useTheme };