@soyfri/shared-library 2.0.0-beta.28 → 2.0.0-beta.29

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.
@@ -0,0 +1,74 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ import { jsx, jsxs } from "react/jsx-runtime";
18
+ import { Box, Typography, CircularProgress } from "@mui/material";
19
+ const sizeMap = {
20
+ sm: 20,
21
+ md: 40,
22
+ lg: 56
23
+ };
24
+ const resolveSize = (size) => typeof size === "number" ? size : sizeMap[size];
25
+ function Spinner({
26
+ size = "md",
27
+ color = "primary",
28
+ thickness,
29
+ centered = false,
30
+ label,
31
+ sx,
32
+ className,
33
+ "aria-label": ariaLabel = "Cargando"
34
+ }) {
35
+ const px = resolveSize(size);
36
+ const spinner = /* @__PURE__ */ jsx(
37
+ CircularProgress,
38
+ {
39
+ size: px,
40
+ color,
41
+ thickness,
42
+ role: "status",
43
+ "aria-label": ariaLabel,
44
+ sx: centered || label ? void 0 : sx
45
+ }
46
+ );
47
+ if (!centered && !label) {
48
+ return /* @__PURE__ */ jsx(Box, { component: "span", className, children: spinner });
49
+ }
50
+ return /* @__PURE__ */ jsxs(
51
+ Box,
52
+ {
53
+ className,
54
+ sx: [
55
+ __spreadValues({
56
+ display: "flex",
57
+ flexDirection: "column",
58
+ alignItems: "center",
59
+ justifyContent: "center",
60
+ gap: 1.5
61
+ }, centered && { width: "100%", minHeight: 120 }),
62
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
63
+ ],
64
+ children: [
65
+ spinner,
66
+ label != null && /* @__PURE__ */ jsx(Typography, { variant: "body2", sx: { color: "text.secondary" }, children: label })
67
+ ]
68
+ }
69
+ );
70
+ }
71
+ export {
72
+ Spinner as S
73
+ };
74
+ //# sourceMappingURL=Spinner-B6sThC1p.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner-B6sThC1p.js","sources":["../src/components/Spinner/Spinner.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | number;\n\nexport type SpinnerColor =\n | 'primary'\n | 'secondary'\n | 'inherit'\n | 'error'\n | 'info'\n | 'success'\n | 'warning';\n\nexport interface SpinnerProps {\n /** Tamaño: `sm`=20, `md`=40, `lg`=56, o un número de px. Default: `md`. */\n size?: SpinnerSize;\n /** Color del indicador. Default: `primary`. */\n color?: SpinnerColor;\n /** Grosor del trazo. Default: 3.6 (default de MUI). */\n thickness?: number;\n /**\n * Si `true`, centra el spinner en un contenedor flex de ancho completo.\n * Útil para estados de carga de página/sección.\n */\n centered?: boolean;\n /** Texto opcional debajo del spinner. */\n label?: ReactNode;\n /** sx del contenedor (o del propio spinner si no hay `centered`/`label`). */\n sx?: SxProps<Theme>;\n className?: string;\n /** Texto accesible. Default: \"Cargando\". */\n 'aria-label'?: string;\n}\n\nconst sizeMap: Record<Exclude<SpinnerSize, number>, number> = {\n sm: 20,\n md: 40,\n lg: 56,\n};\n\nconst resolveSize = (size: SpinnerSize): number =>\n typeof size === 'number' ? size : sizeMap[size];\n\nexport function Spinner({\n size = 'md',\n color = 'primary',\n thickness,\n centered = false,\n label,\n sx,\n className,\n 'aria-label': ariaLabel = 'Cargando',\n}: SpinnerProps) {\n const px = resolveSize(size);\n\n const spinner = (\n <CircularProgress\n size={px}\n color={color}\n thickness={thickness}\n role=\"status\"\n aria-label={ariaLabel}\n // Cuando no hay contenedor (ni centered ni label), el sx va al spinner.\n sx={centered || label ? undefined : sx}\n />\n );\n\n if (!centered && !label) {\n return <Box component=\"span\" className={className}>{spinner}</Box>;\n }\n\n return (\n <Box\n className={className}\n sx={[\n {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 1.5,\n ...(centered && { width: '100%', minHeight: 120 }),\n },\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ]}\n >\n {spinner}\n {label != null && (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n {label}\n </Typography>\n )}\n </Box>\n );\n}\n\nexport default Spinner;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAoCA,MAAM,UAAwD;AAAA,EAC5D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,MAAM,cAAc,CAAC,SACnB,OAAO,SAAS,WAAW,OAAO,QAAQ,IAAI;AAEzC,SAAS,QAAQ;AAAA,EACtB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc,YAAY;AAC5B,GAAiB;AACf,QAAM,KAAK,YAAY,IAAI;AAE3B,QAAM,UACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAK;AAAA,MACL,cAAY;AAAA,MAEZ,IAAI,YAAY,QAAQ,SAAY;AAAA,IAAA;AAAA,EAAA;AAIxC,MAAI,CAAC,YAAY,CAAC,OAAO;AACvB,WAAO,oBAAC,KAAA,EAAI,WAAU,QAAO,WAAuB,UAAA,SAAQ;AAAA,EAC9D;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,IAAI;AAAA,QACF;AAAA,UACE,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,KAAK;AAAA,WACD,YAAY,EAAE,OAAO,QAAQ,WAAW,IAAA;AAAA,QAE9C,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,MAAC;AAAA,MAG3C,UAAA;AAAA,QAAA;AAAA,QACA,SAAS,QACR,oBAAC,YAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,oBACtC,UAAA,MAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __spreadValues = (a, b) => {
8
+ for (var prop in b || (b = {}))
9
+ if (__hasOwnProp.call(b, prop))
10
+ __defNormalProp(a, prop, b[prop]);
11
+ if (__getOwnPropSymbols)
12
+ for (var prop of __getOwnPropSymbols(b)) {
13
+ if (__propIsEnum.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ }
16
+ return a;
17
+ };
18
+ const jsxRuntime = require("react/jsx-runtime");
19
+ const material = require("@mui/material");
20
+ const sizeMap = {
21
+ sm: 20,
22
+ md: 40,
23
+ lg: 56
24
+ };
25
+ const resolveSize = (size) => typeof size === "number" ? size : sizeMap[size];
26
+ function Spinner({
27
+ size = "md",
28
+ color = "primary",
29
+ thickness,
30
+ centered = false,
31
+ label,
32
+ sx,
33
+ className,
34
+ "aria-label": ariaLabel = "Cargando"
35
+ }) {
36
+ const px = resolveSize(size);
37
+ const spinner = /* @__PURE__ */ jsxRuntime.jsx(
38
+ material.CircularProgress,
39
+ {
40
+ size: px,
41
+ color,
42
+ thickness,
43
+ role: "status",
44
+ "aria-label": ariaLabel,
45
+ sx: centered || label ? void 0 : sx
46
+ }
47
+ );
48
+ if (!centered && !label) {
49
+ return /* @__PURE__ */ jsxRuntime.jsx(material.Box, { component: "span", className, children: spinner });
50
+ }
51
+ return /* @__PURE__ */ jsxRuntime.jsxs(
52
+ material.Box,
53
+ {
54
+ className,
55
+ sx: [
56
+ __spreadValues({
57
+ display: "flex",
58
+ flexDirection: "column",
59
+ alignItems: "center",
60
+ justifyContent: "center",
61
+ gap: 1.5
62
+ }, centered && { width: "100%", minHeight: 120 }),
63
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
64
+ ],
65
+ children: [
66
+ spinner,
67
+ label != null && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", sx: { color: "text.secondary" }, children: label })
68
+ ]
69
+ }
70
+ );
71
+ }
72
+ exports.Spinner = Spinner;
73
+ //# sourceMappingURL=Spinner-D7qRmNS9.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner-D7qRmNS9.cjs","sources":["../src/components/Spinner/Spinner.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | number;\n\nexport type SpinnerColor =\n | 'primary'\n | 'secondary'\n | 'inherit'\n | 'error'\n | 'info'\n | 'success'\n | 'warning';\n\nexport interface SpinnerProps {\n /** Tamaño: `sm`=20, `md`=40, `lg`=56, o un número de px. Default: `md`. */\n size?: SpinnerSize;\n /** Color del indicador. Default: `primary`. */\n color?: SpinnerColor;\n /** Grosor del trazo. Default: 3.6 (default de MUI). */\n thickness?: number;\n /**\n * Si `true`, centra el spinner en un contenedor flex de ancho completo.\n * Útil para estados de carga de página/sección.\n */\n centered?: boolean;\n /** Texto opcional debajo del spinner. */\n label?: ReactNode;\n /** sx del contenedor (o del propio spinner si no hay `centered`/`label`). */\n sx?: SxProps<Theme>;\n className?: string;\n /** Texto accesible. Default: \"Cargando\". */\n 'aria-label'?: string;\n}\n\nconst sizeMap: Record<Exclude<SpinnerSize, number>, number> = {\n sm: 20,\n md: 40,\n lg: 56,\n};\n\nconst resolveSize = (size: SpinnerSize): number =>\n typeof size === 'number' ? size : sizeMap[size];\n\nexport function Spinner({\n size = 'md',\n color = 'primary',\n thickness,\n centered = false,\n label,\n sx,\n className,\n 'aria-label': ariaLabel = 'Cargando',\n}: SpinnerProps) {\n const px = resolveSize(size);\n\n const spinner = (\n <CircularProgress\n size={px}\n color={color}\n thickness={thickness}\n role=\"status\"\n aria-label={ariaLabel}\n // Cuando no hay contenedor (ni centered ni label), el sx va al spinner.\n sx={centered || label ? undefined : sx}\n />\n );\n\n if (!centered && !label) {\n return <Box component=\"span\" className={className}>{spinner}</Box>;\n }\n\n return (\n <Box\n className={className}\n sx={[\n {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 1.5,\n ...(centered && { width: '100%', minHeight: 120 }),\n },\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ]}\n >\n {spinner}\n {label != null && (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n {label}\n </Typography>\n )}\n </Box>\n );\n}\n\nexport default Spinner;\n"],"names":["jsx","CircularProgress","Box","jsxs","Typography"],"mappings":";;;;;;;;;;;;;;;;;;;AAoCA,MAAM,UAAwD;AAAA,EAC5D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,MAAM,cAAc,CAAC,SACnB,OAAO,SAAS,WAAW,OAAO,QAAQ,IAAI;AAEzC,SAAS,QAAQ;AAAA,EACtB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc,YAAY;AAC5B,GAAiB;AACf,QAAM,KAAK,YAAY,IAAI;AAE3B,QAAM,UACJA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAK;AAAA,MACL,cAAY;AAAA,MAEZ,IAAI,YAAY,QAAQ,SAAY;AAAA,IAAA;AAAA,EAAA;AAIxC,MAAI,CAAC,YAAY,CAAC,OAAO;AACvB,WAAOD,2BAAAA,IAACE,SAAAA,KAAA,EAAI,WAAU,QAAO,WAAuB,UAAA,SAAQ;AAAA,EAC9D;AAEA,SACEC,2BAAAA;AAAAA,IAACD,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,IAAI;AAAA,QACF;AAAA,UACE,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,KAAK;AAAA,WACD,YAAY,EAAE,OAAO,QAAQ,WAAW,IAAA;AAAA,QAE9C,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,MAAC;AAAA,MAG3C,UAAA;AAAA,QAAA;AAAA,QACA,SAAS,QACRF,2BAAAA,IAACI,SAAAA,YAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,oBACtC,UAAA,MAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;;"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const Spinner = require("../../Spinner-D7qRmNS9.cjs");
4
+ exports.Spinner = Spinner.Spinner;
5
+ exports.default = Spinner.Spinner;
6
+ //# sourceMappingURL=Spinner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -0,0 +1,26 @@
1
+ import { ReactNode } from 'react';
2
+ import { SxProps, Theme } from '@mui/material/styles';
3
+ export type SpinnerSize = 'sm' | 'md' | 'lg' | number;
4
+ export type SpinnerColor = 'primary' | 'secondary' | 'inherit' | 'error' | 'info' | 'success' | 'warning';
5
+ export interface SpinnerProps {
6
+ /** Tamaño: `sm`=20, `md`=40, `lg`=56, o un número de px. Default: `md`. */
7
+ size?: SpinnerSize;
8
+ /** Color del indicador. Default: `primary`. */
9
+ color?: SpinnerColor;
10
+ /** Grosor del trazo. Default: 3.6 (default de MUI). */
11
+ thickness?: number;
12
+ /**
13
+ * Si `true`, centra el spinner en un contenedor flex de ancho completo.
14
+ * Útil para estados de carga de página/sección.
15
+ */
16
+ centered?: boolean;
17
+ /** Texto opcional debajo del spinner. */
18
+ label?: ReactNode;
19
+ /** sx del contenedor (o del propio spinner si no hay `centered`/`label`). */
20
+ sx?: SxProps<Theme>;
21
+ className?: string;
22
+ /** Texto accesible. Default: "Cargando". */
23
+ 'aria-label'?: string;
24
+ }
25
+ export declare function Spinner({ size, color, thickness, centered, label, sx, className, 'aria-label': ariaLabel, }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
26
+ export default Spinner;
@@ -0,0 +1,6 @@
1
+ import { S, S as S2 } from "../../Spinner-B6sThC1p.js";
2
+ export {
3
+ S as Spinner,
4
+ S2 as default
5
+ };
6
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,2 @@
1
+ export { Spinner, default } from './Spinner';
2
+ export type { SpinnerProps, SpinnerSize, SpinnerColor } from './Spinner';
@@ -0,0 +1,6 @@
1
+ export * from './Spinner/index'
2
+ export {}
3
+ import _default from './Spinner/index'
4
+ export default _default
5
+ export * from './Spinner/index'
6
+ export {}
package/index.cjs CHANGED
@@ -9,6 +9,7 @@ const Chip = require("./Chip-qoJLDiva.cjs");
9
9
  const components_Column = require("./components/Column/Column.cjs");
10
10
  const Avatar = require("./Avatar-Dw5rzayR.cjs");
11
11
  const Stat = require("./Stat-BUcFCGrz.cjs");
12
+ const Spinner = require("./Spinner-D7qRmNS9.cjs");
12
13
  const Step = require("./Step-Nd7SJbRZ.cjs");
13
14
  const Tab = require("./Tab-BbP8jBcK.cjs");
14
15
  const Table = require("./Table-C4OM6rrC.cjs");
@@ -166,6 +167,7 @@ exports.Chip = Chip.Chip;
166
167
  exports.Column = components_Column.Column;
167
168
  exports.Avatar = Avatar.Avatar;
168
169
  exports.Stat = Stat.Stat;
170
+ exports.Spinner = Spinner.Spinner;
169
171
  exports.Step = Step.Step;
170
172
  exports.Stepper = Step.Stepper;
171
173
  exports.Tab = Tab.Tab;
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/scrollToTop.ts"],"sourcesContent":["export interface ScrollToTopOptions {\n /** Comportamiento del scroll. Default: `'smooth'`. */\n behavior?: ScrollBehavior;\n /**\n * Elemento target del scroll. Default: `window`. Útil cuando el contenedor\n * scrolleable NO es `window` (p.ej. un `<Box>` con `overflow: auto`).\n */\n target?: Window | HTMLElement;\n /** Offset desde el top. Default: `0`. */\n top?: number;\n}\n\n/**\n * Hace scroll al tope (por default con animación suave). Safe en SSR — si\n * `window` no existe, es un no-op.\n *\n * Llamar tras mutaciones / cambios de filtros / apertura de modales para\n * asegurar que el usuario vea el mensaje de confirmación en la parte\n * superior de la página.\n *\n * ```ts\n * import { scrollToTop } from '@soyfri/shared-library';\n *\n * scrollToTop(); // window, smooth\n * scrollToTop({ behavior: 'auto' }); // window, instantáneo\n * scrollToTop({ target: myScrollableRef.current }); // container custom\n * ```\n */\nexport function scrollToTop({\n behavior = 'smooth',\n target = typeof window !== 'undefined' ? window : undefined,\n top = 0,\n}: ScrollToTopOptions = {}): void {\n if (!target) return;\n target.scrollTo({ top, left: 0, behavior });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA4BO,SAAS,YAAY;AAAA,EAC1B,WAAW;AAAA,EACX,SAAS,OAAO,WAAW,cAAc,SAAS;AAAA,EAClD,MAAM;AACR,IAAwB,IAAU;AAChC,MAAI,CAAC,OAAQ;AACb,SAAO,SAAS,EAAE,KAAK,MAAM,GAAG,UAAU;AAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/scrollToTop.ts"],"sourcesContent":["export interface ScrollToTopOptions {\n /** Comportamiento del scroll. Default: `'smooth'`. */\n behavior?: ScrollBehavior;\n /**\n * Elemento target del scroll. Default: `window`. Útil cuando el contenedor\n * scrolleable NO es `window` (p.ej. un `<Box>` con `overflow: auto`).\n */\n target?: Window | HTMLElement;\n /** Offset desde el top. Default: `0`. */\n top?: number;\n}\n\n/**\n * Hace scroll al tope (por default con animación suave). Safe en SSR — si\n * `window` no existe, es un no-op.\n *\n * Llamar tras mutaciones / cambios de filtros / apertura de modales para\n * asegurar que el usuario vea el mensaje de confirmación en la parte\n * superior de la página.\n *\n * ```ts\n * import { scrollToTop } from '@soyfri/shared-library';\n *\n * scrollToTop(); // window, smooth\n * scrollToTop({ behavior: 'auto' }); // window, instantáneo\n * scrollToTop({ target: myScrollableRef.current }); // container custom\n * ```\n */\nexport function scrollToTop({\n behavior = 'smooth',\n target = typeof window !== 'undefined' ? window : undefined,\n top = 0,\n}: ScrollToTopOptions = {}): void {\n if (!target) return;\n target.scrollTo({ top, left: 0, behavior });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,SAAS,YAAY;AAAA,EAC1B,WAAW;AAAA,EACX,SAAS,OAAO,WAAW,cAAc,SAAS;AAAA,EAClD,MAAM;AACR,IAAwB,IAAU;AAChC,MAAI,CAAC,OAAQ;AACb,SAAO,SAAS,EAAE,KAAK,MAAM,GAAG,UAAU;AAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/index.d.ts CHANGED
@@ -10,6 +10,8 @@ export { Column } from './components/Column';
10
10
  export type { ColumnProps } from './components/Column';
11
11
  export { Avatar } from './components/Avatar';
12
12
  export { Stat } from './components/Stat';
13
+ export { Spinner } from './components/Spinner';
14
+ export type { SpinnerProps, SpinnerSize, SpinnerColor } from './components/Spinner';
13
15
  export { Stepper, Step } from './components/Stepper';
14
16
  export { Tabs, Tab } from './components/Tabs';
15
17
  export { Table } from './components/Table';
package/index.js CHANGED
@@ -7,15 +7,16 @@ import { C as C2 } from "./Chip-OPYQ1uQ_.js";
7
7
  import { Column } from "./components/Column/Column.js";
8
8
  import { A } from "./Avatar-H8akSege.js";
9
9
  import { S } from "./Stat-C06A_izS.js";
10
- import { a, S as S2 } from "./Step-BArsou1V.js";
10
+ import { S as S2 } from "./Spinner-B6sThC1p.js";
11
+ import { a, S as S3 } from "./Step-BArsou1V.js";
11
12
  import { a as a2, T } from "./Tab-BxSxKJsP.js";
12
13
  import { T as T2 } from "./Table-C2LbW0B1.js";
13
- import { S as S3 } from "./StatusMessage-D0WgSBx7.js";
14
+ import { S as S4 } from "./StatusMessage-D0WgSBx7.js";
14
15
  import { M, b, c, a as a3 } from "./Modal-BFpX5AFV.js";
15
16
  import { I } from "./Input-DP_fKl38.js";
16
- import { O, S as S4 } from "./Select-BY5Y0qZ1.js";
17
+ import { O, S as S5 } from "./Select-BY5Y0qZ1.js";
17
18
  import { A as A2, a as a4 } from "./Autocomplete-C_lW1VER.js";
18
- import { S as S5 } from "./Switch-D72dpkH2.js";
19
+ import { S as S6 } from "./Switch-D72dpkH2.js";
19
20
  import { R } from "./RadioGroup-bO-ahP9T.js";
20
21
  import { C as C3 } from "./Checkbox-gB5YKkVo.js";
21
22
  import { D as D2 } from "./DatePicker-_IGWc3I5.js";
@@ -67,15 +68,16 @@ export {
67
68
  O as Option,
68
69
  Paper,
69
70
  R as RadioGroup,
70
- S4 as Select,
71
+ S5 as Select,
71
72
  Skeleton,
72
73
  Snackbar,
74
+ S2 as Spinner,
73
75
  Stack,
74
76
  S as Stat,
75
- S3 as StatusMessage,
77
+ S4 as StatusMessage,
76
78
  a as Step,
77
- S2 as Stepper,
78
- S5 as Switch,
79
+ S3 as Stepper,
80
+ S6 as Switch,
79
81
  a2 as Tab,
80
82
  T2 as Table,
81
83
  T as Tabs,
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/scrollToTop.ts"],"sourcesContent":["export interface ScrollToTopOptions {\n /** Comportamiento del scroll. Default: `'smooth'`. */\n behavior?: ScrollBehavior;\n /**\n * Elemento target del scroll. Default: `window`. Útil cuando el contenedor\n * scrolleable NO es `window` (p.ej. un `<Box>` con `overflow: auto`).\n */\n target?: Window | HTMLElement;\n /** Offset desde el top. Default: `0`. */\n top?: number;\n}\n\n/**\n * Hace scroll al tope (por default con animación suave). Safe en SSR — si\n * `window` no existe, es un no-op.\n *\n * Llamar tras mutaciones / cambios de filtros / apertura de modales para\n * asegurar que el usuario vea el mensaje de confirmación en la parte\n * superior de la página.\n *\n * ```ts\n * import { scrollToTop } from '@soyfri/shared-library';\n *\n * scrollToTop(); // window, smooth\n * scrollToTop({ behavior: 'auto' }); // window, instantáneo\n * scrollToTop({ target: myScrollableRef.current }); // container custom\n * ```\n */\nexport function scrollToTop({\n behavior = 'smooth',\n target = typeof window !== 'undefined' ? window : undefined,\n top = 0,\n}: ScrollToTopOptions = {}): void {\n if (!target) return;\n target.scrollTo({ top, left: 0, behavior });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA4BO,SAAS,YAAY;AAAA,EAC1B,WAAW;AAAA,EACX,SAAS,OAAO,WAAW,cAAc,SAAS;AAAA,EAClD,MAAM;AACR,IAAwB,IAAU;AAChC,MAAI,CAAC,OAAQ;AACb,SAAO,SAAS,EAAE,KAAK,MAAM,GAAG,UAAU;AAC5C;"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/scrollToTop.ts"],"sourcesContent":["export interface ScrollToTopOptions {\n /** Comportamiento del scroll. Default: `'smooth'`. */\n behavior?: ScrollBehavior;\n /**\n * Elemento target del scroll. Default: `window`. Útil cuando el contenedor\n * scrolleable NO es `window` (p.ej. un `<Box>` con `overflow: auto`).\n */\n target?: Window | HTMLElement;\n /** Offset desde el top. Default: `0`. */\n top?: number;\n}\n\n/**\n * Hace scroll al tope (por default con animación suave). Safe en SSR — si\n * `window` no existe, es un no-op.\n *\n * Llamar tras mutaciones / cambios de filtros / apertura de modales para\n * asegurar que el usuario vea el mensaje de confirmación en la parte\n * superior de la página.\n *\n * ```ts\n * import { scrollToTop } from '@soyfri/shared-library';\n *\n * scrollToTop(); // window, smooth\n * scrollToTop({ behavior: 'auto' }); // window, instantáneo\n * scrollToTop({ target: myScrollableRef.current }); // container custom\n * ```\n */\nexport function scrollToTop({\n behavior = 'smooth',\n target = typeof window !== 'undefined' ? window : undefined,\n top = 0,\n}: ScrollToTopOptions = {}): void {\n if (!target) return;\n target.scrollTo({ top, left: 0, behavior });\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA4BO,SAAS,YAAY;AAAA,EAC1B,WAAW;AAAA,EACX,SAAS,OAAO,WAAW,cAAc,SAAS;AAAA,EAClD,MAAM;AACR,IAAwB,IAAU;AAChC,MAAI,CAAC,OAAQ;AACb,SAAO,SAAS,EAAE,KAAK,MAAM,GAAG,UAAU;AAC5C;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soyfri/shared-library",
3
- "version": "2.0.0-beta.28",
3
+ "version": "2.0.0-beta.29",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -25,6 +25,7 @@
25
25
  "optional": true
26
26
  }
27
27
  },
28
+ "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c",
28
29
  "exports": {
29
30
  ".": {
30
31
  "import": "./index.js",
@@ -72,6 +73,11 @@
72
73
  "require": "./components/Stat/Stat.cjs",
73
74
  "types": "./components/Stat/index.d.ts"
74
75
  },
76
+ "./components/Spinner": {
77
+ "import": "./components/Spinner/Spinner.js",
78
+ "require": "./components/Spinner/Spinner.cjs",
79
+ "types": "./components/Spinner/index.d.ts"
80
+ },
75
81
  "./components/Select": {
76
82
  "import": "./components/Select/Select.js",
77
83
  "require": "./components/Select/Select.cjs",