@eduardoalvarez/arrecife 0.9.0 → 0.10.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/dist/index.js CHANGED
@@ -9,16 +9,15 @@ export { THEME_ATTRIBUTE, THEME_EVENT, THEME_KEY, applyTheme, currentTheme, pref
9
9
  import { alert, button, avatar, badge, category, metric, CARD_SURFACE, CARD } from './chunk-XXDATT3A.js';
10
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';
11
11
  export { text as textVariants } from './chunk-ODBFN44D.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';
12
+ import { MascotFace, Mascot } from './chunk-IIT3YLYN.js';
13
+ export { Isotype, Logo, Mascot, MascotFace } from './chunk-IIT3YLYN.js';
14
+ import { Icon } from './chunk-ZSCSKCTY.js';
17
15
  import { cn } from './chunk-FAAGZG7A.js';
18
16
  export { cn } from './chunk-FAAGZG7A.js';
17
+ export { ASSETS_PATH, faceList, faceUsage, faces, fins, poseList, poses } from './chunk-CKRSQPTX.js';
19
18
  import { naming } from './chunk-FGFNK72B.js';
20
19
  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
+ import { CaretDown, XCircle, Warning, CheckCircle, Info, Camera, CircleNotch, CaretLeft, CaretRight, Minus, Check, X, DotsThree, CaretUp, Copy, ArrowUpRight, TrendDown, TrendUp, Sun, Moon, WarningCircle, Waveform, ArrowCounterClockwise, ArrowClockwise, SpeakerSlash, SpeakerHigh, ArrowsClockwise, Pause, Play } from '@phosphor-icons/react';
22
21
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
23
22
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
24
23
  import { cva } from 'class-variance-authority';
@@ -42,118 +41,6 @@ import * as ToastPrimitive from '@radix-ui/react-toast';
42
41
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
43
42
  import { format } from 'date-fns';
44
43
 
45
- function Glyph({ children, ...props }) {
46
- return /* @__PURE__ */ jsx(
47
- "svg",
48
- {
49
- viewBox: "0 0 16 16",
50
- width: "1em",
51
- height: "1em",
52
- fill: "none",
53
- stroke: "currentColor",
54
- strokeWidth: 1.75,
55
- strokeLinecap: "round",
56
- strokeLinejoin: "round",
57
- "aria-hidden": "true",
58
- focusable: "false",
59
- ...props,
60
- children
61
- }
62
- );
63
- }
64
- var Check = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M3 8.5 6.5 12 13 4.5" }) });
65
- var Minus = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M3.5 8h9" }) });
66
- var ChevronDown = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M4 6l4 4 4-4" }) });
67
- var ChevronUp = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M4 10l4-4 4 4" }) });
68
- var ChevronLeft = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M10 4L6 8l4 4" }) });
69
- var ChevronRight = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M6 4l4 4-4 4" }) });
70
- var Close = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M4 4l8 8M12 4l-8 8" }) });
71
- var Copy = (props) => /* @__PURE__ */ jsxs(Glyph, { ...props, children: [
72
- /* @__PURE__ */ jsx("rect", { x: "5.5", y: "5.5", width: "8", height: "8", rx: "1.5" }),
73
- /* @__PURE__ */ jsx("path", { d: "M10.5 3.5h-7a1.5 1.5 0 0 0-1.5 1.5v7" })
74
- ] });
75
- var ArrowUpRight = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M5 11l6-6M5.5 5h5.5v5.5" }) });
76
- var Ellipsis = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, strokeWidth: 2.25, children: /* @__PURE__ */ jsx("path", { d: "M4 8h.01M8 8h.01M12 8h.01" }) });
77
- var Spinner = (props) => /* @__PURE__ */ jsxs(
78
- "svg",
79
- {
80
- viewBox: "0 0 16 16",
81
- width: "1em",
82
- height: "1em",
83
- fill: "none",
84
- stroke: "currentColor",
85
- strokeWidth: 2,
86
- strokeLinecap: "round",
87
- "aria-hidden": "true",
88
- focusable: "false",
89
- className: "motion-safe:animate-spin",
90
- ...props,
91
- children: [
92
- /* @__PURE__ */ jsx("circle", { cx: "8", cy: "8", r: "6", opacity: 0.3 }),
93
- /* @__PURE__ */ jsx("path", { d: "M8 2a6 6 0 0 1 6 6" })
94
- ]
95
- }
96
- );
97
- var Camera = (props) => /* @__PURE__ */ jsxs(Glyph, { ...props, children: [
98
- /* @__PURE__ */ jsx("path", { d: "M2 5.5h2.6l1-1.5h4.8l1 1.5H14v7.5H2z" }),
99
- /* @__PURE__ */ jsx("circle", { cx: "8", cy: "9", r: "2.4" })
100
- ] });
101
- var Sun = (props) => /* @__PURE__ */ jsxs(Glyph, { ...props, children: [
102
- /* @__PURE__ */ jsx("circle", { cx: "8", cy: "8", r: "3" }),
103
- /* @__PURE__ */ 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" })
104
- ] });
105
- var Moon = (props) => /* @__PURE__ */ jsx(Glyph, { ...props, children: /* @__PURE__ */ 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" }) });
106
- function MediaGlyph({ children, ...props }) {
107
- return /* @__PURE__ */ jsx(
108
- "svg",
109
- {
110
- xmlns: "http://www.w3.org/2000/svg",
111
- viewBox: "0 0 24 24",
112
- fill: "none",
113
- "aria-hidden": "true",
114
- focusable: "false",
115
- ...props,
116
- children
117
- }
118
- );
119
- }
120
- var Play = (props) => /* @__PURE__ */ jsx(MediaGlyph, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsx("path", { d: "M8 5v14l11-7z" }) });
121
- var Pause = (props) => /* @__PURE__ */ jsx(MediaGlyph, { fill: "currentColor", ...props, children: /* @__PURE__ */ jsx("path", { d: "M6 4h4v16H6V4zm8 0h4v16h-4V4z" }) });
122
- var Retry = (props) => /* @__PURE__ */ jsx(
123
- MediaGlyph,
124
- {
125
- stroke: "currentColor",
126
- strokeWidth: 2,
127
- strokeLinecap: "round",
128
- strokeLinejoin: "round",
129
- ...props,
130
- children: /* @__PURE__ */ 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" })
131
- }
132
- );
133
- var GoBackSeconds = (props) => /* @__PURE__ */ jsxs(MediaGlyph, { stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", ...props, children: [
134
- /* @__PURE__ */ 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" }),
135
- /* @__PURE__ */ jsx("path", { d: "M7.5 10.5L10 8.5V15.5", strokeLinejoin: "round" }),
136
- /* @__PURE__ */ jsx(
137
- "path",
138
- {
139
- 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",
140
- strokeLinejoin: "round"
141
- }
142
- )
143
- ] });
144
- var AdvanceSeconds = (props) => /* @__PURE__ */ jsxs(MediaGlyph, { stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", ...props, children: [
145
- /* @__PURE__ */ 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" }),
146
- /* @__PURE__ */ jsx("path", { d: "M7.5 10.5L10 8.5V15.5", strokeLinejoin: "round" }),
147
- /* @__PURE__ */ jsx(
148
- "path",
149
- {
150
- 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",
151
- strokeLinejoin: "round"
152
- }
153
- )
154
- ] });
155
- var VolumeOn = (props) => /* @__PURE__ */ jsx(MediaGlyph, { fill: "currentColor", ...props, children: /* @__PURE__ */ 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" }) });
156
- var VolumeMuted = (props) => /* @__PURE__ */ jsx(MediaGlyph, { fill: "currentColor", ...props, children: /* @__PURE__ */ 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" }) });
157
44
  function Accordion({ className, ...props }) {
158
45
  return /* @__PURE__ */ jsx(
159
46
  AccordionPrimitive.Root,
@@ -192,7 +79,7 @@ function AccordionTrigger({
192
79
  ...props,
193
80
  children: [
194
81
  children,
195
- /* @__PURE__ */ jsx(ChevronDown, { className: "text-text-muted shrink-0" })
82
+ /* @__PURE__ */ jsx(Icon, { as: CaretDown, className: "text-text-muted shrink-0" })
196
83
  ]
197
84
  }
198
85
  ) }) });
@@ -221,10 +108,10 @@ var colorGlyph = {
221
108
  error: "text-error"
222
109
  };
223
110
  var GLYPH = {
224
- accent: "\u2726",
225
- success: "\u2713",
226
- warning: "!",
227
- error: "\u2715"
111
+ accent: Info,
112
+ success: CheckCircle,
113
+ warning: Warning,
114
+ error: XCircle
228
115
  };
229
116
  function Alert({
230
117
  className,
@@ -246,9 +133,8 @@ function Alert({
246
133
  /* @__PURE__ */ jsx(
247
134
  "span",
248
135
  {
249
- "aria-hidden": "true",
250
- className: cn("font-mono text-ui leading-normal select-none", colorGlyph[tone]),
251
- children: icon ?? GLYPH[tone]
136
+ className: cn("text-ui flex h-[1lh] shrink-0 items-center leading-normal", colorGlyph[tone]),
137
+ children: icon ?? /* @__PURE__ */ jsx(Icon, { as: GLYPH[tone] })
252
138
  }
253
139
  ),
254
140
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
@@ -424,7 +310,7 @@ function AvatarUpload({
424
310
  disabled && "pointer-events-none opacity-50"
425
311
  ),
426
312
  children: [
427
- /* @__PURE__ */ jsx(Camera, { "aria-hidden": "true" }),
313
+ /* @__PURE__ */ jsx(Icon, { as: Camera, "aria-hidden": "true" }),
428
314
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: label }),
429
315
  /* @__PURE__ */ jsx(
430
316
  "input",
@@ -486,7 +372,7 @@ function Button({
486
372
  "aria-busy": loading || void 0,
487
373
  ...props,
488
374
  children: [
489
- loading ? /* @__PURE__ */ jsx(Spinner, {}) : icon,
375
+ loading ? /* @__PURE__ */ jsx(Icon, { as: CircleNotch, className: "motion-safe:animate-spin" }) : icon,
490
376
  children
491
377
  ]
492
378
  }
@@ -563,7 +449,7 @@ function Calendar({
563
449
  ...classNames
564
450
  },
565
451
  components: {
566
- Chevron: ({ orientation, ...rest }) => orientation === "left" ? /* @__PURE__ */ jsx(ChevronLeft, { ...rest }) : /* @__PURE__ */ jsx(ChevronRight, { ...rest })
452
+ Chevron: ({ orientation, ...rest }) => orientation === "left" ? /* @__PURE__ */ jsx(Icon, { as: CaretLeft, ...rest }) : /* @__PURE__ */ jsx(Icon, { as: CaretRight, ...rest })
567
453
  },
568
454
  ...props
569
455
  }
@@ -608,7 +494,7 @@ function Checkbox({ className, ...props }) {
608
494
  className
609
495
  ),
610
496
  ...props,
611
- children: /* @__PURE__ */ jsx(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-[13px]", children: props.checked === "indeterminate" ? /* @__PURE__ */ jsx(Minus, {}) : /* @__PURE__ */ jsx(Check, {}) })
497
+ children: /* @__PURE__ */ jsx(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-[13px]", children: props.checked === "indeterminate" ? /* @__PURE__ */ jsx(Icon, { as: Minus }) : /* @__PURE__ */ jsx(Icon, { as: Check }) })
612
498
  }
613
499
  );
614
500
  }
@@ -700,7 +586,7 @@ function DialogContent({
700
586
  "hover:bg-surface-raised hover:text-text-primary",
701
587
  "focus-ring"
702
588
  ),
703
- children: /* @__PURE__ */ jsx(Close, {})
589
+ children: /* @__PURE__ */ jsx(Icon, { as: X })
704
590
  }
705
591
  )
706
592
  ]
@@ -780,7 +666,7 @@ function DropdownMenuCheckboxItem({
780
666
  ...props
781
667
  }) {
782
668
  return /* @__PURE__ */ jsxs(DropdownMenuPrimitive.CheckboxItem, { className: cn(item, "pl-8", className), ...props, children: [
783
- /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { className: "text-accent absolute left-2 flex items-center", children: /* @__PURE__ */ jsx(Check, {}) }),
669
+ /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { className: "text-accent absolute left-2 flex items-center", children: /* @__PURE__ */ jsx(Icon, { as: Check }) }),
784
670
  children
785
671
  ] });
786
672
  }
@@ -824,7 +710,7 @@ function DropdownMenuSubTrigger({
824
710
  ...props,
825
711
  children: [
826
712
  children,
827
- /* @__PURE__ */ jsx(ChevronRight, { className: "text-text-muted ml-auto" })
713
+ /* @__PURE__ */ jsx(Icon, { as: CaretRight, className: "text-text-muted ml-auto" })
828
714
  ]
829
715
  }
830
716
  );
@@ -869,7 +755,13 @@ function Pagination({ className, ...props }) {
869
755
  );
870
756
  }
871
757
  function PaginationContent({ className, ...props }) {
872
- return /* @__PURE__ */ jsx("ul", { className: cn("gap-step-xs flex flex-row items-center", className), ...props });
758
+ return /* @__PURE__ */ jsx(
759
+ "ul",
760
+ {
761
+ className: cn("gap-step-xs flex flex-row flex-wrap items-center justify-center", className),
762
+ ...props
763
+ }
764
+ );
873
765
  }
874
766
  function PaginationItem(props) {
875
767
  return /* @__PURE__ */ jsx("li", { ...props });
@@ -894,14 +786,14 @@ function PaginationLink({ className, isActive = false, ...props }) {
894
786
  }
895
787
  function PaginationPrevious({ className, ...props }) {
896
788
  return /* @__PURE__ */ jsxs(PaginationLink, { "aria-label": "P\xE1gina anterior", className: cn("gap-step-xs", className), ...props, children: [
897
- /* @__PURE__ */ jsx(ChevronLeft, {}),
789
+ /* @__PURE__ */ jsx(Icon, { as: CaretLeft }),
898
790
  "Anterior"
899
791
  ] });
900
792
  }
901
793
  function PaginationNext({ className, ...props }) {
902
794
  return /* @__PURE__ */ jsxs(PaginationLink, { "aria-label": "P\xE1gina siguiente", className: cn("gap-step-xs", className), ...props, children: [
903
795
  "Siguiente",
904
- /* @__PURE__ */ jsx(ChevronRight, {})
796
+ /* @__PURE__ */ jsx(Icon, { as: CaretRight })
905
797
  ] });
906
798
  }
907
799
  function PaginationEllipsis({ className, ...props }) {
@@ -911,7 +803,7 @@ function PaginationEllipsis({ className, ...props }) {
911
803
  "aria-hidden": "true",
912
804
  className: cn("text-text-muted flex size-9 items-center justify-center", className),
913
805
  ...props,
914
- children: /* @__PURE__ */ jsx(Ellipsis, {})
806
+ children: /* @__PURE__ */ jsx(Icon, { as: DotsThree })
915
807
  }
916
808
  );
917
809
  }
@@ -1004,7 +896,7 @@ function SelectTrigger({
1004
896
  ...props,
1005
897
  children: [
1006
898
  children,
1007
- /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: "text-text-muted" }) })
899
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(Icon, { as: CaretDown, className: "text-text-muted" }) })
1008
900
  ]
1009
901
  }
1010
902
  );
@@ -1028,9 +920,9 @@ function SelectContent({
1028
920
  ),
1029
921
  ...props,
1030
922
  children: [
1031
- /* @__PURE__ */ jsx(SelectPrimitive.ScrollUpButton, { className: "text-text-secondary flex h-6 items-center justify-center", children: /* @__PURE__ */ jsx(ChevronUp, {}) }),
923
+ /* @__PURE__ */ jsx(SelectPrimitive.ScrollUpButton, { className: "text-text-secondary flex h-6 items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { as: CaretUp }) }),
1032
924
  /* @__PURE__ */ jsx(SelectPrimitive.Viewport, { className: "p-1", children }),
1033
- /* @__PURE__ */ jsx(SelectPrimitive.ScrollDownButton, { className: "text-text-secondary flex h-6 items-center justify-center", children: /* @__PURE__ */ jsx(ChevronDown, {}) })
925
+ /* @__PURE__ */ jsx(SelectPrimitive.ScrollDownButton, { className: "text-text-secondary flex h-6 items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { as: CaretDown }) })
1034
926
  ]
1035
927
  }
1036
928
  ) });
@@ -1066,7 +958,7 @@ function SelectItem({
1066
958
  ...props,
1067
959
  children: [
1068
960
  /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children }),
1069
- /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { className: "text-accent absolute right-2 flex items-center", children: /* @__PURE__ */ jsx(Check, {}) })
961
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { className: "text-accent absolute right-2 flex items-center", children: /* @__PURE__ */ jsx(Icon, { as: Check }) })
1070
962
  ]
1071
963
  }
1072
964
  );
@@ -1148,7 +1040,7 @@ function SheetContent({ className, side, children, ...props }) {
1148
1040
  "hover:bg-surface-raised hover:text-text-primary",
1149
1041
  "focus-ring"
1150
1042
  ),
1151
- children: /* @__PURE__ */ jsx(Close, {})
1043
+ children: /* @__PURE__ */ jsx(Icon, { as: X })
1152
1044
  }
1153
1045
  )
1154
1046
  ] })
@@ -1311,7 +1203,18 @@ function TabsList({
1311
1203
  return /* @__PURE__ */ jsx(
1312
1204
  TabsPrimitive.List,
1313
1205
  {
1314
- className: cn("rounded-control bg-surface gap-step-xs inline-flex items-center p-1", className),
1206
+ className: cn(
1207
+ "rounded-control bg-surface gap-step-xs inline-flex max-w-full items-center p-1",
1208
+ // The triggers are `whitespace-nowrap` — a tab whose label wraps stops
1209
+ // reading as a tab — so on a narrow screen the list is wider than the
1210
+ // page and takes the whole document with it. It SCROLLS instead: the
1211
+ // list keeps hugging its content up to the width available and gives up
1212
+ // the overflow to itself rather than to the page. Every tab stays
1213
+ // reachable, and reaching one by keyboard scrolls it into view on its
1214
+ // own because focus does that.
1215
+ "overflow-x-auto",
1216
+ className
1217
+ ),
1315
1218
  ...props
1316
1219
  }
1317
1220
  );
@@ -1324,7 +1227,10 @@ function TabsTrigger({
1324
1227
  TabsPrimitive.Trigger,
1325
1228
  {
1326
1229
  className: cn(
1327
- "rounded-chip px-step-sm inline-flex h-8 cursor-pointer items-center justify-center whitespace-nowrap",
1230
+ // `shrink-0` is what makes the list's `overflow-x-auto` work: without it
1231
+ // the triggers give up their width first and the labels run out of their
1232
+ // own pills instead of the row scrolling.
1233
+ "rounded-chip px-step-sm inline-flex h-8 shrink-0 cursor-pointer items-center justify-center whitespace-nowrap",
1328
1234
  "font-sans text-label text-text-secondary",
1329
1235
  "transition-standard",
1330
1236
  "hover:text-text-primary",
@@ -1401,15 +1307,28 @@ var toast = cva(
1401
1307
  variants: {
1402
1308
  variant: {
1403
1309
  neutral: "border-border",
1404
- success: "border-success/40",
1405
- error: "border-error/40"
1310
+ success: "border-success bg-linear-to-b from-success/10 to-success/10",
1311
+ error: "border-error bg-linear-to-b from-error/10 to-error/10"
1406
1312
  }
1407
1313
  },
1408
1314
  defaultVariants: { variant: "neutral" }
1409
1315
  }
1410
1316
  );
1317
+ var GLYPH2 = {
1318
+ neutral: null,
1319
+ success: CheckCircle,
1320
+ error: WarningCircle
1321
+ };
1322
+ var GLYPH_COLOR = {
1323
+ neutral: "",
1324
+ success: "text-success",
1325
+ error: "text-error"
1326
+ };
1411
1327
  function Toast({ className, variant, children, ...props }) {
1328
+ const tone = variant ?? "neutral";
1329
+ const Mark = GLYPH2[tone];
1412
1330
  return /* @__PURE__ */ jsxs(ToastPrimitive.Root, { className: cn(toast({ variant }), className), ...props, children: [
1331
+ Mark ? /* @__PURE__ */ jsx("span", { className: cn("text-ui flex h-[1lh] shrink-0 items-center leading-normal", GLYPH_COLOR[tone]), children: /* @__PURE__ */ jsx(Icon, { as: Mark }) }) : null,
1413
1332
  children,
1414
1333
  /* @__PURE__ */ jsx(
1415
1334
  ToastPrimitive.Close,
@@ -1421,7 +1340,7 @@ function Toast({ className, variant, children, ...props }) {
1421
1340
  "hover:bg-surface-raised hover:text-text-primary",
1422
1341
  "focus-ring"
1423
1342
  ),
1424
- children: /* @__PURE__ */ jsx(Close, {})
1343
+ children: /* @__PURE__ */ jsx(Icon, { as: X })
1425
1344
  }
1426
1345
  )
1427
1346
  ] });
@@ -1619,17 +1538,15 @@ function formatTime(seconds) {
1619
1538
  const secs = Math.floor(seconds % 60);
1620
1539
  return `${mins}:${secs.toString().padStart(2, "0")}`;
1621
1540
  }
1622
- var WAVEFORM_HEIGHTS = [35, 65, 100, 65, 35];
1623
1541
  var RATES = [1, 1.25, 1.5, 1.75, 2];
1624
- function Wave({ strokeWidth, height, playing }) {
1625
- return /* @__PURE__ */ jsx("div", { className: cn("flex items-end gap-[2px]", height), "aria-hidden": "true", children: WAVEFORM_HEIGHTS.map((h, i) => /* @__PURE__ */ jsx(
1626
- "span",
1542
+ function Wave({ size: size2, playing }) {
1543
+ return /* @__PURE__ */ jsx(
1544
+ Icon,
1627
1545
  {
1628
- className: cn("rounded-pill bg-accent transition-standard", strokeWidth),
1629
- style: { height: `${h}%`, opacity: playing ? 1 : 0.3 + h / 100 * 0.4 }
1630
- },
1631
- i
1632
- )) });
1546
+ as: Waveform,
1547
+ className: cn("text-accent", size2, playing ? "opacity-100" : "opacity-60")
1548
+ }
1549
+ );
1633
1550
  }
1634
1551
  function ProgressBar({
1635
1552
  height,
@@ -1691,7 +1608,7 @@ function SkipButton({
1691
1608
  onClick: () => onSkip(seconds),
1692
1609
  className: cn("text-text-muted hover:text-text-primary", CONTROL, className),
1693
1610
  "aria-label": seconds < 0 ? "Retroceder 15 segundos" : "Adelantar 15 segundos",
1694
- children: seconds < 0 ? /* @__PURE__ */ jsx(GoBackSeconds, { className: size2 }) : /* @__PURE__ */ jsx(AdvanceSeconds, { className: size2 })
1611
+ children: seconds < 0 ? /* @__PURE__ */ jsx(Icon, { as: ArrowCounterClockwise, className: size2 }) : /* @__PURE__ */ jsx(Icon, { as: ArrowClockwise, className: size2 })
1695
1612
  }
1696
1613
  );
1697
1614
  }
@@ -1736,7 +1653,7 @@ function Volume({
1736
1653
  onClick: onMute,
1737
1654
  className: cn("text-text-muted hover:text-text-primary p-1", CONTROL),
1738
1655
  "aria-label": muted ? "Activar sonido" : "Silenciar",
1739
- children: muted || volume === 0 ? /* @__PURE__ */ jsx(VolumeMuted, { className: size2 }) : /* @__PURE__ */ jsx(VolumeOn, { className: size2 })
1656
+ children: muted || volume === 0 ? /* @__PURE__ */ jsx(Icon, { as: SpeakerSlash, className: size2 }) : /* @__PURE__ */ jsx(Icon, { as: SpeakerHigh, className: size2 })
1740
1657
  }
1741
1658
  ),
1742
1659
  /* @__PURE__ */ jsx(
@@ -1759,10 +1676,11 @@ function Volume({
1759
1676
  ] });
1760
1677
  }
1761
1678
  function PlayIcon({ className, loading, error, playing }) {
1762
- if (loading) return /* @__PURE__ */ jsx(Spinner, { className: cn("motion-safe:animate-spin", className) });
1763
- if (error) return /* @__PURE__ */ jsx(Retry, { className });
1764
- if (playing) return /* @__PURE__ */ jsx(Pause, { className });
1765
- return /* @__PURE__ */ jsx(Play, { className });
1679
+ if (loading)
1680
+ return /* @__PURE__ */ jsx(Icon, { as: CircleNotch, className: cn("motion-safe:animate-spin", className) });
1681
+ if (error) return /* @__PURE__ */ jsx(Icon, { as: ArrowsClockwise, className });
1682
+ if (playing) return /* @__PURE__ */ jsx(Icon, { as: Pause, className });
1683
+ return /* @__PURE__ */ jsx(Icon, { as: Play, className });
1766
1684
  }
1767
1685
  function PlayButton({
1768
1686
  className,
@@ -1977,7 +1895,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
1977
1895
  ),
1978
1896
  /* @__PURE__ */ jsx("div", { className: "bg-surface/95 border-accent/25 border-t backdrop-blur-md", children: /* @__PURE__ */ jsxs("div", { className: "gap-step-sm px-step-md flex items-center py-5", children: [
1979
1897
  /* @__PURE__ */ jsxs("div", { className: "gap-step-xs flex shrink-0 items-center", children: [
1980
- /* @__PURE__ */ jsx(Wave, { strokeWidth: "w-[2px]", height: "h-4", playing: isPlaying }),
1898
+ /* @__PURE__ */ jsx(Wave, { size: "size-4", playing: isPlaying }),
1981
1899
  /* @__PURE__ */ jsx("span", { className: "text-eyebrow font-mono text-accent hidden uppercase sm:block", children: "Narraci\xF3n" })
1982
1900
  ] }),
1983
1901
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
@@ -2019,7 +1937,7 @@ function AudioPlayer({ src, title, mode = "full", onFirstPlay }) {
2019
1937
  /* @__PURE__ */ jsx("audio", { ref: audioRef, src, preload: "metadata" }),
2020
1938
  /* @__PURE__ */ jsxs("div", { ref: staticRef, children: [
2021
1939
  /* @__PURE__ */ jsxs("div", { className: "gap-step-sm mb-step-md flex items-center", children: [
2022
- /* @__PURE__ */ jsx(Wave, { strokeWidth: "w-[3px]", height: "h-5", playing: isPlaying }),
1940
+ /* @__PURE__ */ jsx(Wave, { size: "size-5", playing: isPlaying }),
2023
1941
  /* @__PURE__ */ jsx("span", { className: "text-eyebrow font-mono text-accent uppercase", children: "Narraci\xF3n de audio" }),
2024
1942
  /* @__PURE__ */ jsxs("span", { className: "text-chip font-mono text-text-muted ml-auto tabular-nums", children: [
2025
1943
  formatTime(currentTime),
@@ -2233,13 +2151,26 @@ function CodeBlock({ children, language, copyText, className, ...props }) {
2233
2151
  "focus-ring"
2234
2152
  ),
2235
2153
  children: [
2236
- copiado ? /* @__PURE__ */ jsx(Check, { className: "text-accent" }) : /* @__PURE__ */ jsx(Copy, {}),
2154
+ copiado ? /* @__PURE__ */ jsx(Icon, { as: Check, className: "text-accent" }) : /* @__PURE__ */ jsx(Icon, { as: Copy }),
2237
2155
  copiado ? "Copiado" : "Copiar"
2238
2156
  ]
2239
2157
  }
2240
2158
  ) : null
2241
2159
  ] }),
2242
- /* @__PURE__ */ jsx("pre", { className: "p-step-md font-mono text-meta text-text-primary overflow-x-auto leading-relaxed", children })
2160
+ /* @__PURE__ */ jsx(
2161
+ "pre",
2162
+ {
2163
+ tabIndex: 0,
2164
+ className: cn(
2165
+ "p-step-md font-mono text-meta text-text-primary overflow-x-auto leading-relaxed",
2166
+ // `focus-ring-inset` and not the plain ring: the root carries
2167
+ // `overflow-hidden` so its corners hold, and it clips an outward ring
2168
+ // on three sides. See the note beside the utility in build-tokens.mjs.
2169
+ "focus-ring focus-ring-inset"
2170
+ ),
2171
+ children
2172
+ }
2173
+ )
2243
2174
  ]
2244
2175
  }
2245
2176
  );
@@ -2494,7 +2425,7 @@ function EventCalendar({
2494
2425
  ] });
2495
2426
  }
2496
2427
  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(
2428
+ return /* @__PURE__ */ jsx("ul", { className: "flex flex-wrap items-center justify-center gap-[18px] sm:justify-start", children: social.map((socialLink) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
2498
2429
  "a",
2499
2430
  {
2500
2431
  href: socialLink.href,
@@ -2592,16 +2523,23 @@ function Footer({
2592
2523
  };
2593
2524
  return /* @__PURE__ */ jsxs(Shell, { className, ...rest, children: [
2594
2525
  /* @__PURE__ */ jsxs("div", { className: "gap-step-xl flex flex-col md:flex-row md:justify-between", children: [
2595
- /* @__PURE__ */ jsxs("div", { className: "gap-step-md flex max-w-xs flex-col", children: [
2526
+ /* @__PURE__ */ jsxs("div", { className: "gap-step-md flex max-w-xs flex-col items-center text-center md:items-start md:text-left", children: [
2596
2527
  brand2,
2597
2528
  description ? /* @__PURE__ */ jsx(Text, { variant: "ui", tone: "secondary", as: "p", children: description }) : null,
2598
2529
  social && social.length > 0 ? /* @__PURE__ */ jsx(SocialRow, { social }) : null,
2599
2530
  action
2600
2531
  ] }),
2601
- /* @__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: [
2602
- /* @__PURE__ */ jsx(Text, { variant: "eyebrow", tone: "muted", as: "h3", children: column.title }),
2603
- /* @__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)) })
2604
- ] }, column.title)) })
2532
+ /* @__PURE__ */ jsx("div", { className: "gap-step-lg grid grid-cols-1 min-[420px]:grid-cols-2 sm:grid-cols-3", children: columns.map((column) => /* @__PURE__ */ jsxs(
2533
+ "div",
2534
+ {
2535
+ className: "gap-step-sm flex flex-col items-center text-center md:items-start md:text-left",
2536
+ children: [
2537
+ /* @__PURE__ */ jsx(Text, { variant: "eyebrow", tone: "muted", as: "h3", children: column.title }),
2538
+ /* @__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)) })
2539
+ ]
2540
+ },
2541
+ column.title
2542
+ )) })
2605
2543
  ] }),
2606
2544
  /* @__PURE__ */ jsx("div", { className: "border-hairline mt-step-xl pt-step-lg border-t", children: /* @__PURE__ */ jsx(Signature, { year, href: signatureHref, domain, className: "text-center sm:text-right" }) })
2607
2545
  ] });
@@ -2612,9 +2550,9 @@ function Footer({
2612
2550
  ].filter(Boolean);
2613
2551
  const [first, ...others] = rows;
2614
2552
  return /* @__PURE__ */ jsxs(Shell, { className, contentClassName: "gap-step-lg", ...rest, children: [
2615
- /* @__PURE__ */ jsxs("div", { className: "gap-step-md flex flex-wrap items-center", children: [
2553
+ /* @__PURE__ */ jsxs("div", { className: "gap-step-md flex flex-col items-center sm:flex-row sm:flex-wrap", children: [
2616
2554
  first ?? null,
2617
- /* @__PURE__ */ jsx(Signature, { year, href: signatureHref, domain, className: "ml-auto" })
2555
+ /* @__PURE__ */ jsx(Signature, { year, href: signatureHref, domain, className: "sm:ml-auto" })
2618
2556
  ] }),
2619
2557
  others
2620
2558
  ] });
@@ -2715,8 +2653,9 @@ function LinkRow({
2715
2653
  description ? /* @__PURE__ */ jsx(Text, { as: "span", variant: "label", tone: "muted", className: "block truncate", children: description }) : null
2716
2654
  ] }),
2717
2655
  external ? /* @__PURE__ */ jsx(
2718
- ArrowUpRight,
2656
+ Icon,
2719
2657
  {
2658
+ as: ArrowUpRight,
2720
2659
  className: "text-text-muted group-hover:text-accent transition-standard shrink-0",
2721
2660
  "aria-hidden": "true"
2722
2661
  }
@@ -2742,15 +2681,35 @@ function Nav({ brand: brand2, children, actions, size: size2 = "default", classN
2742
2681
  "div",
2743
2682
  {
2744
2683
  className: cn(
2745
- "max-w-wide px-step-md gap-step-lg mx-auto flex items-center",
2684
+ "max-w-wide px-step-md gap-step-sm sm:gap-step-lg mx-auto flex items-center",
2746
2685
  size2 === "compact" ? "h-nav-compact" : "h-nav"
2747
2686
  ),
2748
2687
  children: [
2749
2688
  brand2 ? /* @__PURE__ */ jsx("div", { className: "shrink-0", children: brand2 }) : null,
2750
- 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: [
2751
- /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-text-muted font-mono text-meta select-none", children: "~/" }),
2752
- children
2753
- ] }) }) : /* @__PURE__ */ jsx("div", { className: "flex-1" }),
2689
+ children ? (
2690
+ /*
2691
+ THE ITEM ROW SCROLLS instead of pushing the page sideways.
2692
+
2693
+ `min-w-0` was already here and on its own it does nothing: it lets the
2694
+ nav shrink below its content, and the content then simply overflows
2695
+ the bar. Six mono items at 13px plus the `~/` is around 300px, which
2696
+ fits nowhere under a brand and a theme switch on a 360px screen, and
2697
+ what the reader got was a horizontal scrollbar on the whole document.
2698
+
2699
+ It does NOT hide them below a breakpoint, which is the other obvious
2700
+ answer and the wrong one for a library: hiding the navigation is only
2701
+ safe if something else exposes it, and that something is a drawer the
2702
+ project owns — `eduardoalvarez.dev` composes one out of `Sheet` and
2703
+ puts it in `actions`. A `Nav` that hid its own items would leave every
2704
+ consumer without a drawer with no navigation at all, silently.
2705
+
2706
+ See `docs/decisions/0.10.md` § 54.
2707
+ */
2708
+ /* @__PURE__ */ jsx("nav", { "aria-label": "Principal", className: "ml-auto min-w-0 overflow-x-auto", children: /* @__PURE__ */ jsxs("ul", { className: "gap-step-md flex w-max items-center", children: [
2709
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-text-muted font-mono text-meta select-none", children: "~/" }),
2710
+ children
2711
+ ] }) })
2712
+ ) : /* @__PURE__ */ jsx("div", { className: "flex-1" }),
2754
2713
  actions ? /* @__PURE__ */ jsx("div", { className: "gap-step-sm flex shrink-0 items-center", children: actions }) : null
2755
2714
  ]
2756
2715
  }
@@ -2989,8 +2948,8 @@ function ScrollingProgressBar({
2989
2948
  );
2990
2949
  }
2991
2950
  var DELTA = {
2992
- up: { glyph: ChevronUp, label: "sube" },
2993
- down: { glyph: ChevronDown, label: "baja" },
2951
+ up: { glyph: TrendUp, label: "sube" },
2952
+ down: { glyph: TrendDown, label: "baja" },
2994
2953
  flat: { glyph: Minus, label: "sin cambio" }
2995
2954
  };
2996
2955
  function Stat({
@@ -3032,7 +2991,7 @@ function Stat({
3032
2991
  DELTA[delta.direction].label,
3033
2992
  " "
3034
2993
  ] }),
3035
- /* @__PURE__ */ jsx(DeltaGlyph, { className: "shrink-0" }),
2994
+ /* @__PURE__ */ jsx(Icon, { as: DeltaGlyph }),
3036
2995
  delta.value
3037
2996
  ] }) : null,
3038
2997
  description ? /* @__PURE__ */ jsx(Text, { variant: "ui", tone: "secondary", as: "p", children: description }) : null,
@@ -3122,11 +3081,14 @@ function ThemeToggle({
3122
3081
  size: size2,
3123
3082
  "aria-label": label,
3124
3083
  className: cn("[&_svg]:size-[19px]", className),
3125
- onClick: () => onThemeChange?.(toggleTheme()),
3084
+ onClick: () => {
3085
+ const theme = toggleTheme();
3086
+ onThemeChange?.(theme);
3087
+ },
3126
3088
  ...props,
3127
3089
  children: [
3128
- /* @__PURE__ */ jsx(Sun, { className: "light:hidden" }),
3129
- /* @__PURE__ */ jsx(Moon, { className: "hidden light:block" })
3090
+ /* @__PURE__ */ jsx(Icon, { as: Sun, className: "light:hidden" }),
3091
+ /* @__PURE__ */ jsx(Icon, { as: Moon, className: "hidden light:block" })
3130
3092
  ]
3131
3093
  }
3132
3094
  );
package/dist/og/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { ASSETS_PATH, faces, poses, fins } from '../chunk-CKRSQPTX.js';
2
2
  import { fonts, dark, light, naming, gradient, tagline, typeScale } from '../chunk-FGFNK72B.js';
3
- import '../chunk-MLKGABMK.js';
4
3
 
5
4
  // src/og/templates.ts
6
5
  var OG = {
@@ -1,5 +1,4 @@
1
1
  import { syntax } from '../chunk-FGFNK72B.js';
2
- import '../chunk-MLKGABMK.js';
3
2
 
4
3
  // src/shiki/theme.ts
5
4
  var arrecife = {
@@ -1,2 +1 @@
1
1
  export { THEME_ATTRIBUTE, THEME_EVENT, THEME_KEY, applyTheme, currentTheme, preferredTheme, storedTheme, themeScript, toggleTheme, watchTheme } from '../chunk-GCRII2KQ.js';
2
- import '../chunk-MLKGABMK.js';