@octavius2929-personal/design-system 1.2.0 → 1.3.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.d.cts CHANGED
@@ -1680,6 +1680,12 @@ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
1680
1680
  startIcon?: Icon;
1681
1681
  endIcon?: Icon;
1682
1682
  full?: boolean;
1683
+ /** No interactivo mientras carga: no dispara onClick, expone aria-busy y muestra un
1684
+ * spinner sin cambiar el tamaño del botón (el label queda reservado, solo oculto). */
1685
+ loading?: boolean;
1686
+ /** Estado "elegido" persistente (p.ej. una opción de quiz ya marcada). Distinto del hover/
1687
+ * focus transitorios; expone aria-pressed. */
1688
+ selected?: boolean;
1683
1689
  /** Segmento de contexto para el data-testid (no es un override del id completo). */
1684
1690
  testId?: string;
1685
1691
  }
package/dist/index.d.ts CHANGED
@@ -1680,6 +1680,12 @@ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
1680
1680
  startIcon?: Icon;
1681
1681
  endIcon?: Icon;
1682
1682
  full?: boolean;
1683
+ /** No interactivo mientras carga: no dispara onClick, expone aria-busy y muestra un
1684
+ * spinner sin cambiar el tamaño del botón (el label queda reservado, solo oculto). */
1685
+ loading?: boolean;
1686
+ /** Estado "elegido" persistente (p.ej. una opción de quiz ya marcada). Distinto del hover/
1687
+ * focus transitorios; expone aria-pressed. */
1688
+ selected?: boolean;
1683
1689
  /** Segmento de contexto para el data-testid (no es un override del id completo). */
1684
1690
  testId?: string;
1685
1691
  }
package/dist/index.js CHANGED
@@ -664,10 +664,15 @@ function states(map) {
664
664
  import { useMemo as useMemo7 } from "react";
665
665
 
666
666
  // src/components/button/use-styles.css.ts
667
- var full = "use-styles_full__1pbtill4";
667
+ var content = "use-styles_content__1pbtillg";
668
+ var contentHidden = "use-styles_contentHidden__1pbtillh";
669
+ var full = "use-styles_full__1pbtill5";
670
+ var loadingRoot = "use-styles_loadingRoot__1pbtill1";
668
671
  var root = "use-styles_root__1pbtill0";
669
- var size = { sm: "use-styles_size_sm__1pbtill1", md: "use-styles_size_md__1pbtill2", lg: "use-styles_size_lg__1pbtill3" };
670
- var tone = { filledInk: "use-styles_tone_filledInk__1pbtill5", filledAccent: "use-styles_tone_filledAccent__1pbtill6", outlineInk: "use-styles_tone_outlineInk__1pbtill7", outlineAccent: "use-styles_tone_outlineAccent__1pbtill8", ghostInk: "use-styles_tone_ghostInk__1pbtill9", ghostAccent: "use-styles_tone_ghostAccent__1pbtilla", filledDanger: "use-styles_tone_filledDanger__1pbtillb", outlineDanger: "use-styles_tone_outlineDanger__1pbtillc", ghostDanger: "use-styles_tone_ghostDanger__1pbtilld" };
672
+ var selected = "use-styles_selected__1pbtillf";
673
+ var size = { sm: "use-styles_size_sm__1pbtill2", md: "use-styles_size_md__1pbtill3", lg: "use-styles_size_lg__1pbtill4" };
674
+ var spinner = "use-styles_spinner__1pbtillj";
675
+ var tone = { filledInk: "use-styles_tone_filledInk__1pbtill6", filledAccent: "use-styles_tone_filledAccent__1pbtill7", outlineInk: "use-styles_tone_outlineInk__1pbtill8", outlineAccent: "use-styles_tone_outlineAccent__1pbtill9", ghostInk: "use-styles_tone_ghostInk__1pbtilla", ghostAccent: "use-styles_tone_ghostAccent__1pbtillb", filledDanger: "use-styles_tone_filledDanger__1pbtillc", outlineDanger: "use-styles_tone_outlineDanger__1pbtilld", ghostDanger: "use-styles_tone_ghostDanger__1pbtille" };
671
676
 
672
677
  // src/components/button/use-styles.ts
673
678
  function toneKey(variant2, tone4) {
@@ -679,7 +684,9 @@ function useStyles4({
679
684
  tone: tone4 = "ink",
680
685
  size: size3 = "md",
681
686
  full: full2,
682
- className
687
+ className,
688
+ selected: selected4,
689
+ loading
683
690
  }) {
684
691
  const { themeClass } = useTheme();
685
692
  const container = useMemo7(
@@ -687,13 +694,19 @@ function useStyles4({
687
694
  themeClass,
688
695
  root,
689
696
  size[size3],
690
- tone[toneKey(variant2, tone4)],
697
+ // `selected` pisa el tono en vez de combinarse con él (ver comentario en use-styles.css.ts).
698
+ selected4 ? selected : tone[toneKey(variant2, tone4)],
691
699
  full2 && full,
700
+ loading && loadingRoot,
692
701
  className
693
702
  ].filter(Boolean).join(" "),
694
- [themeClass, variant2, tone4, size3, full2, className]
703
+ [themeClass, variant2, tone4, size3, full2, loading, selected4, className]
695
704
  );
696
- return { container };
705
+ return {
706
+ container,
707
+ content: loading ? contentHidden : content,
708
+ spinner
709
+ };
697
710
  }
698
711
 
699
712
  // src/components/button/index.tsx
@@ -709,12 +722,27 @@ var Button = forwardRef4(function Button2({
709
722
  className,
710
723
  type = "button",
711
724
  testId,
725
+ loading,
726
+ selected: selected4,
712
727
  children,
728
+ onClick,
713
729
  ...rest
714
730
  }, ref) {
715
- const { container } = useStyles4({ variant: variant2, tone: tone4, size: size3, full: full2, className });
716
- const { testId: dataTestId } = useTestId("button", testId);
731
+ const { container, content: content4, spinner: spinner3 } = useStyles4({
732
+ variant: variant2,
733
+ tone: tone4,
734
+ size: size3,
735
+ full: full2,
736
+ className,
737
+ selected: selected4,
738
+ loading
739
+ });
740
+ const { testId: dataTestId, slot } = useTestId("button", testId);
717
741
  const iconSize = ICON_SIZE[size3];
742
+ const handleClick = (event) => {
743
+ if (loading) return;
744
+ onClick?.(event);
745
+ };
718
746
  return /* @__PURE__ */ jsxs(
719
747
  "button",
720
748
  {
@@ -722,12 +750,19 @@ var Button = forwardRef4(function Button2({
722
750
  type,
723
751
  className: container,
724
752
  "data-testid": dataTestId,
725
- "data-state": states({ disabled: rest.disabled }),
753
+ "data-state": states({ disabled: rest.disabled, loading, selected: selected4 }),
754
+ "aria-busy": loading || void 0,
755
+ "aria-disabled": loading || void 0,
756
+ "aria-pressed": selected4 === void 0 ? void 0 : selected4,
757
+ onClick: handleClick,
726
758
  ...rest,
727
759
  children: [
728
- StartIcon && /* @__PURE__ */ jsx6(StartIcon, { size: iconSize }),
729
- children,
730
- EndIcon && /* @__PURE__ */ jsx6(EndIcon, { size: iconSize })
760
+ /* @__PURE__ */ jsxs("span", { className: content4, children: [
761
+ StartIcon && /* @__PURE__ */ jsx6(StartIcon, { size: iconSize }),
762
+ children,
763
+ EndIcon && /* @__PURE__ */ jsx6(EndIcon, { size: iconSize })
764
+ ] }),
765
+ loading && /* @__PURE__ */ jsx6("span", { className: spinner3, "aria-hidden": "true", "data-testid": slot("spinner") })
731
766
  ]
732
767
  }
733
768
  );
@@ -861,7 +896,7 @@ import { useMemo as useMemo11 } from "react";
861
896
  // src/components/progress/use-styles.css.ts
862
897
  var bar = "use-styles_bar__kbop7v3";
863
898
  var indeterminate = "use-styles_indeterminate__kbop7v4";
864
- var spinner = "use-styles_spinner__kbop7v5";
899
+ var spinner2 = "use-styles_spinner__kbop7v5";
865
900
  var track = "use-styles_track__kbop7v2";
866
901
 
867
902
  // src/components/progress/use-styles.ts
@@ -875,7 +910,7 @@ function useStyles8({
875
910
  return useMemo11(() => {
876
911
  const root24 = (...classes) => [themeClass, ...classes, className].filter(Boolean).join(" ");
877
912
  if (variant2 === "circular") {
878
- return { track: "", bar: "", spinner: root24(spinner) };
913
+ return { track: "", bar: "", spinner: root24(spinner2) };
879
914
  }
880
915
  return {
881
916
  track: root24(track),
@@ -888,7 +923,7 @@ function useStyles8({
888
923
  // src/components/progress/index.tsx
889
924
  import { jsx as jsx10 } from "react/jsx-runtime";
890
925
  var Progress = forwardRef8(function Progress2({ variant: variant2 = "linear", value, size: size3 = 20, className, testId, ...rest }, ref) {
891
- const { track: track4, bar: bar2, spinner: spinner2 } = useStyles8({ variant: variant2, value, className });
926
+ const { track: track4, bar: bar2, spinner: spinner3 } = useStyles8({ variant: variant2, value, className });
892
927
  const indeterminate2 = value === void 0;
893
928
  const { testId: dataTestId, slot } = useTestId("media", testId);
894
929
  if (variant2 === "circular") {
@@ -896,7 +931,7 @@ var Progress = forwardRef8(function Progress2({ variant: variant2 = "linear", va
896
931
  "span",
897
932
  {
898
933
  ref,
899
- className: spinner2,
934
+ className: spinner3,
900
935
  role: "progressbar",
901
936
  "aria-valuenow": indeterminate2 ? void 0 : value,
902
937
  "aria-valuemin": indeterminate2 ? void 0 : 0,
@@ -967,12 +1002,12 @@ import { useMemo as useMemo12 } from "react";
967
1002
  var clickable = "use-styles_clickable__1axilf44";
968
1003
  var deleteBtn = "use-styles_deleteBtn__1axilf45";
969
1004
  var root5 = "use-styles_root__1axilf40";
970
- var selected = "use-styles_selected__1axilf43";
1005
+ var selected2 = "use-styles_selected__1axilf43";
971
1006
  var tone3 = { ink: "use-styles_tone_ink__1axilf41", accent: "use-styles_tone_accent__1axilf42" };
972
1007
 
973
1008
  // src/components/chip/use-styles.ts
974
1009
  function useStyles9({
975
- selected: selected3,
1010
+ selected: selected4,
976
1011
  tone: tone4 = "ink",
977
1012
  clickable: clickable2
978
1013
  }) {
@@ -981,10 +1016,10 @@ function useStyles9({
981
1016
  () => [
982
1017
  themeClass,
983
1018
  root5,
984
- selected3 ? selected : tone3[tone4],
1019
+ selected4 ? selected2 : tone3[tone4],
985
1020
  clickable2 && clickable
986
1021
  ].filter(Boolean).join(" "),
987
- [themeClass, selected3, tone4, clickable2]
1022
+ [themeClass, selected4, tone4, clickable2]
988
1023
  );
989
1024
  return { root: root24, deleteBtn };
990
1025
  }
@@ -992,9 +1027,9 @@ function useStyles9({
992
1027
  // src/components/chip/index.tsx
993
1028
  import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
994
1029
  var ICON_SIZE2 = 13;
995
- var Chip = forwardRef9(function Chip2({ selected: selected3, tone: tone4, onDelete, onClick, startIcon: StartIcon, children, testId, ...rest }, ref) {
1030
+ var Chip = forwardRef9(function Chip2({ selected: selected4, tone: tone4, onDelete, onClick, startIcon: StartIcon, children, testId, ...rest }, ref) {
996
1031
  const clickable2 = Boolean(onClick);
997
- const { root: root24, deleteBtn: deleteBtn2 } = useStyles9({ selected: selected3, tone: tone4, clickable: clickable2 });
1032
+ const { root: root24, deleteBtn: deleteBtn2 } = useStyles9({ selected: selected4, tone: tone4, clickable: clickable2 });
998
1033
  const { testId: dataTestId, slot } = useTestId("media", testId);
999
1034
  const handleDelete = (event) => {
1000
1035
  event.stopPropagation();
@@ -1007,7 +1042,7 @@ var Chip = forwardRef9(function Chip2({ selected: selected3, tone: tone4, onDele
1007
1042
  className: root24,
1008
1043
  onClick,
1009
1044
  "data-testid": dataTestId,
1010
- "data-state": states({ selected: selected3 }),
1045
+ "data-state": states({ selected: selected4 }),
1011
1046
  ...rest,
1012
1047
  children: [
1013
1048
  StartIcon ? /* @__PURE__ */ jsx12(StartIcon, { size: ICON_SIZE2 }) : null,
@@ -1765,7 +1800,7 @@ function TriangleAlertIcon({ size: size3 = 20, strokeWidth = 1.75, title, ...res
1765
1800
  import { useMemo as useMemo21 } from "react";
1766
1801
 
1767
1802
  // src/components/alert/use-styles.css.ts
1768
- var content = "use-styles_content__ivsh6u6";
1803
+ var content2 = "use-styles_content__ivsh6u6";
1769
1804
  var iconSlot = "use-styles_iconSlot__ivsh6u5";
1770
1805
  var root12 = "use-styles_root__ivsh6u0";
1771
1806
  var severity = { info: "use-styles_severity_info__ivsh6u1", ok: "use-styles_severity_ok__ivsh6u2", warn: "use-styles_severity_warn__ivsh6u3", danger: "use-styles_severity_danger__ivsh6u4" };
@@ -1783,7 +1818,7 @@ function useStyles17({
1783
1818
  return {
1784
1819
  root: root24,
1785
1820
  iconSlot,
1786
- content
1821
+ content: content2
1787
1822
  };
1788
1823
  }
1789
1824
 
@@ -1983,7 +2018,7 @@ function useStyles19({
1983
2018
  placeholder,
1984
2019
  chevron: chevron3,
1985
2020
  menu,
1986
- optionClass: (selected3, active2) => [option, selected3 && optionSelected, active2 && optionActive].filter(Boolean).join(" ")
2021
+ optionClass: (selected4, active2) => [option, selected4 && optionSelected, active2 && optionActive].filter(Boolean).join(" ")
1987
2022
  };
1988
2023
  }, [themeClass, open]);
1989
2024
  }
@@ -2032,7 +2067,7 @@ var Select = forwardRef21(function Select2({
2032
2067
  document.addEventListener("mousedown", onPointerDown);
2033
2068
  return () => document.removeEventListener("mousedown", onPointerDown);
2034
2069
  }, [open]);
2035
- const selected3 = options.find((option2) => option2.value === value);
2070
+ const selected4 = options.find((option2) => option2.value === value);
2036
2071
  const selectAt = (index) => {
2037
2072
  const option2 = options[index];
2038
2073
  if (option2) onChange?.(option2.value);
@@ -2105,7 +2140,7 @@ var Select = forwardRef21(function Select2({
2105
2140
  },
2106
2141
  onKeyDown: handleKeyDown,
2107
2142
  children: [
2108
- selected3 ? selected3.label : /* @__PURE__ */ jsx32("span", { className: placeholderClass, children: placeholder2 }),
2143
+ selected4 ? selected4.label : /* @__PURE__ */ jsx32("span", { className: placeholderClass, children: placeholder2 }),
2109
2144
  /* @__PURE__ */ jsx32("span", { className: chevron3, children: /* @__PURE__ */ jsx32(ChevronDownIcon, { size: 18 }) })
2110
2145
  ]
2111
2146
  }
@@ -3140,29 +3175,29 @@ import { forwardRef as forwardRef33 } from "react";
3140
3175
  import { useMemo as useMemo35 } from "react";
3141
3176
 
3142
3177
  // src/components/list-item/use-styles.css.ts
3143
- var content2 = "use-styles_content__kbreq13";
3178
+ var content3 = "use-styles_content__kbreq13";
3144
3179
  var leading = "use-styles_leading__kbreq12";
3145
3180
  var root23 = "use-styles_root__kbreq10";
3146
- var selected2 = "use-styles_selected__kbreq11";
3181
+ var selected3 = "use-styles_selected__kbreq11";
3147
3182
  var trailing = "use-styles_trailing__kbreq14";
3148
3183
 
3149
3184
  // src/components/list-item/use-styles.ts
3150
3185
  function useStyles31({
3151
- selected: selected3,
3186
+ selected: selected4,
3152
3187
  className
3153
3188
  }) {
3154
3189
  const { themeClass } = useTheme();
3155
3190
  const root24 = useMemo35(
3156
- () => [themeClass, root23, selected3 && selected2, className].filter(Boolean).join(" "),
3157
- [themeClass, selected3, className]
3191
+ () => [themeClass, root23, selected4 && selected3, className].filter(Boolean).join(" "),
3192
+ [themeClass, selected4, className]
3158
3193
  );
3159
- return { root: root24, leading, content: content2, trailing };
3194
+ return { root: root24, leading, content: content3, trailing };
3160
3195
  }
3161
3196
 
3162
3197
  // src/components/list-item/index.tsx
3163
3198
  import { jsx as jsx46, jsxs as jsxs30 } from "react/jsx-runtime";
3164
- var ListItem = forwardRef33(function ListItem2({ leading: leading2, trailing: trailing2, selected: selected3, className, testId, children, ...rest }, ref) {
3165
- const styles = useStyles31({ selected: selected3, className });
3199
+ var ListItem = forwardRef33(function ListItem2({ leading: leading2, trailing: trailing2, selected: selected4, className, testId, children, ...rest }, ref) {
3200
+ const styles = useStyles31({ selected: selected4, className });
3166
3201
  const { testId: dataTestId, slot } = useTestId("list", testId);
3167
3202
  return /* @__PURE__ */ jsxs30(
3168
3203
  "div",
@@ -3170,7 +3205,7 @@ var ListItem = forwardRef33(function ListItem2({ leading: leading2, trailing: tr
3170
3205
  ref,
3171
3206
  className: styles.root,
3172
3207
  "data-testid": dataTestId,
3173
- "data-state": states({ selected: selected3 }),
3208
+ "data-state": states({ selected: selected4 }),
3174
3209
  ...rest,
3175
3210
  children: [
3176
3211
  leading2 != null && /* @__PURE__ */ jsx46("span", { className: styles.leading, "data-testid": slot("leading"), children: leading2 }),