@m4l/components 9.4.18 → 9.4.19

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 (52) hide show
  1. package/@types/types.d.ts +24 -16
  2. package/components/DaysOfWeekPicker/DaysOfWeekPicker.d.ts +33 -0
  3. package/components/DaysOfWeekPicker/DaysOfWeekPicker.js +81 -0
  4. package/components/DaysOfWeekPicker/DaysOfWeekPicker.styles.d.ts +2 -0
  5. package/components/DaysOfWeekPicker/DaysOfWeekPicker.styles.js +99 -0
  6. package/components/DaysOfWeekPicker/DaysOfWeekPicker.test.d.ts +1 -0
  7. package/components/DaysOfWeekPicker/constants.d.ts +12 -0
  8. package/components/DaysOfWeekPicker/constants.js +11 -0
  9. package/components/DaysOfWeekPicker/dictionary.d.ts +1 -0
  10. package/components/DaysOfWeekPicker/dictionary.js +6 -0
  11. package/components/DaysOfWeekPicker/helpers/getDaysOfWeekFromDictionary.d.ts +29 -0
  12. package/components/DaysOfWeekPicker/helpers/getDaysOfWeekFromDictionary.js +12 -0
  13. package/components/DaysOfWeekPicker/helpers/getDaysOfWeekFromDictionary.test.d.ts +1 -0
  14. package/components/DaysOfWeekPicker/helpers/index.d.ts +1 -0
  15. package/components/DaysOfWeekPicker/helpers/index.js +1 -0
  16. package/components/DaysOfWeekPicker/hooks/index.d.ts +2 -0
  17. package/components/DaysOfWeekPicker/hooks/types.d.ts +29 -0
  18. package/components/DaysOfWeekPicker/hooks/useDaysOfWeekPicker.d.ts +9 -0
  19. package/components/DaysOfWeekPicker/hooks/useDaysOfWeekPicker.js +71 -0
  20. package/components/DaysOfWeekPicker/hooks/useDaysOfWeekPicker.test.d.ts +1 -0
  21. package/components/DaysOfWeekPicker/index.d.ts +3 -0
  22. package/components/DaysOfWeekPicker/index.js +1 -0
  23. package/components/DaysOfWeekPicker/slots/DaysOfWeekPickerEnum.d.ts +5 -0
  24. package/components/DaysOfWeekPicker/slots/DaysOfWeekPickerEnum.js +9 -0
  25. package/components/DaysOfWeekPicker/slots/DaysOfWeekPickerSlots.d.ts +9 -0
  26. package/components/DaysOfWeekPicker/slots/DaysOfWeekPickerSlots.js +23 -0
  27. package/components/DaysOfWeekPicker/slots/index.d.ts +3 -0
  28. package/components/DaysOfWeekPicker/slots/index.js +1 -0
  29. package/components/DaysOfWeekPicker/types.d.ts +70 -0
  30. package/components/hook-form/RHFDaysOfWeekPicker/RHFDaysOfWeekPicker.d.ts +26 -0
  31. package/components/hook-form/RHFDaysOfWeekPicker/RHFDaysOfWeekPicker.js +6 -0
  32. package/components/hook-form/RHFDaysOfWeekPicker/index.d.ts +1 -0
  33. package/components/hook-form/RHFDaysOfWeekPicker/index.js +1 -0
  34. package/components/hook-form/index.d.ts +1 -0
  35. package/components/index.d.ts +1 -0
  36. package/hocs/index.d.ts +2 -0
  37. package/hocs/withRHFController/constants.d.ts +8 -0
  38. package/hocs/withRHFController/constants.js +8 -0
  39. package/hocs/withRHFController/index.d.ts +37 -0
  40. package/hocs/withRHFController/index.js +95 -0
  41. package/hocs/withRHFController/slots/WithRHFControllerEnum.d.ts +3 -0
  42. package/hocs/withRHFController/slots/WithRHFControllerEnum.js +7 -0
  43. package/hocs/withRHFController/slots/WithRHFControllerSlots.d.ts +5 -0
  44. package/hocs/withRHFController/slots/WithRHFControllerSlots.js +11 -0
  45. package/hocs/withRHFController/slots/index.d.ts +2 -0
  46. package/hocs/withRHFController/slots/index.js +1 -0
  47. package/hocs/withRHFController/types.d.ts +70 -0
  48. package/hocs/withRHFController/withRHFController.styles.d.ts +5 -0
  49. package/hocs/withRHFController/withRHFController.styles.js +14 -0
  50. package/hocs/withRHFController/withRHFController.test.d.ts +1 -0
  51. package/index.js +111 -105
  52. package/package.json +1 -1
package/@types/types.d.ts CHANGED
@@ -331,6 +331,7 @@ import {
331
331
  ImageFormatterOwnerState,
332
332
  ImageFormatterSlotsType,
333
333
  } from '../components/formatters/ImageFormatter';
334
+ import { DaysOfWeekPickerOwnerState, DaysOfWeekPickerSlotsType } from '../components/DaysOfWeekPicker/types';
334
335
 
335
336
  declare module '@mui/material/styles' {
336
337
  // Define the slots in the theme
@@ -430,6 +431,7 @@ declare module '@mui/material/styles' {
430
431
  M4LRHFDatePicker: RHFDatePickerSlotsType;
431
432
  M4LDatePicker: DatePickerSlotsType;
432
433
  M4LImageFormatter: ImageFormatterSlotsType;
434
+ M4LDaysOfWeekPicker: DaysOfWeekPickerSlotsType;
433
435
  }
434
436
  interface ComponentsPropsList {
435
437
  // Extend ComponentsProps or ComponentsOwnerState(this extend ComponentProps)
@@ -528,6 +530,7 @@ declare module '@mui/material/styles' {
528
530
  M4LDatePicker: Partial<DatePickerOwnerState>;
529
531
  M4LRHFDatePicker: Partial<RHFDatePickerOwnerState>;
530
532
  M4LImageFormatter: Partial<ImageFormatterOwnerState>;
533
+ M4LDaysOfWeekPicker: Partial<DaysOfWeekPickerOwnerState>;
531
534
  }
532
535
  interface Components {
533
536
  M4LDynamicFilter?: {
@@ -999,21 +1002,26 @@ declare module '@mui/material/styles' {
999
1002
  defaultProps?: ComponentsPropsList['M4LCheckableList'];
1000
1003
  styleOverrides?: ComponentsOverrides<Theme>['M4LCheckableList'];
1001
1004
  variants?: ComponentsVariants['M4LCheckableList'];
1002
- M4LRHFDatePicker?: {
1003
- defaultProps?: ComponentsPropsList['M4LRHFDatePicker'];
1004
- styleOverrides?: ComponentsOverrides<Theme>['M4LRHFDatePicker'];
1005
- variants?: ComponentsVariants['M4LRHFDatePicker'];
1006
- };
1007
- M4LDatePicker?: {
1008
- defaultProps?: ComponentsPropsList['M4LDatePicker'];
1009
- styleOverrides?: ComponentsOverrides<Theme>['M4LDatePicker'];
1010
- variants?: ComponentsVariants['M4LDatePicker'];
1011
- };
1012
- M4LImageFormatter?: {
1013
- defaultProps?: ComponentsPropsList['M4LImageFormatter'];
1014
- styleOverrides?: ComponentsOverrides<Theme>['M4LImageFormatter'];
1015
- variants?: ComponentsVariants['M4LImageFormatter'];
1016
- };
1017
1005
  };
1018
- }
1006
+ M4LRHFDatePicker?: {
1007
+ defaultProps?: ComponentsPropsList['M4LRHFDatePicker'];
1008
+ styleOverrides?: ComponentsOverrides<Theme>['M4LRHFDatePicker'];
1009
+ variants?: ComponentsVariants['M4LRHFDatePicker'];
1010
+ };
1011
+ M4LDatePicker?: {
1012
+ defaultProps?: ComponentsPropsList['M4LDatePicker'];
1013
+ styleOverrides?: ComponentsOverrides<Theme>['M4LDatePicker'];
1014
+ variants?: ComponentsVariants['M4LDatePicker'];
1015
+ };
1016
+ M4LImageFormatter?: {
1017
+ defaultProps?: ComponentsPropsList['M4LImageFormatter'];
1018
+ styleOverrides?: ComponentsOverrides<Theme>['M4LImageFormatter'];
1019
+ variants?: ComponentsVariants['M4LImageFormatter'];
1020
+ };
1021
+ M4LDaysOfWeekPicker?: {
1022
+ defaultProps?: ComponentsPropsList['M4LDaysOfWeekPicker'];
1023
+ styleOverrides?: ComponentsOverrides<Theme>['M4LDaysOfWeekPicker'];
1024
+ variants?: ComponentsVariants['M4LDaysOfWeekPicker'];
1025
+ };
1026
+ };
1019
1027
  }
@@ -0,0 +1,33 @@
1
+ import { DaysOfWeekPickerProps } from './types';
2
+ /**
3
+ * Componente para seleccionar días de la semana.
4
+ *
5
+ * Permite seleccionar uno o múltiples días de la semana mediante botones interactivos.
6
+ * El componente es controlado y requiere la prop `value` para funcionar.
7
+ *
8
+ * ### Características:
9
+ * - **Selección múltiple**: Por defecto permite seleccionar múltiples días
10
+ * - **Modo controlado**: Requiere la prop `value` para controlar el estado
11
+ * - **Días deshabilitados**: Permite deshabilitar días específicos mediante `disabledDays`
12
+ * - **Solo lectura**: Permite mostrar el componente en modo solo lectura con `readOnly`
13
+ * - **Tamaños**: Soporta tamaños small, medium y large
14
+ * @param {DaysOfWeekPickerProps} props - Propiedades del componente.
15
+ * @returns {JSX.Element} Elemento renderizado.
16
+ * @example
17
+ * ```tsx
18
+ * const [selectedDays, setSelectedDays] = useState<DayOfWeek[]>([0, 1, 2]);
19
+ *
20
+ * <DaysOfWeekPicker
21
+ * value={selectedDays}
22
+ * onChange={setSelectedDays}
23
+ * disabledDays={[6]} // Deshabilita domingo
24
+ * />
25
+ *
26
+ * // Modo solo lectura
27
+ * <DaysOfWeekPicker
28
+ * value={selectedDays}
29
+ * readOnly={true} // No permite interacción, los botones disabled se ven igual que enabled
30
+ * />
31
+ * ```
32
+ */
33
+ export declare const DaysOfWeekPicker: import('react').ForwardRefExoticComponent<DaysOfWeekPickerProps & import('react').RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,81 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { forwardRef } from "react";
4
+ import { D as DAYS_OF_WEEK_PICKER_CLASSES } from "./constants.js";
5
+ import { u as useDaysOfWeekPicker } from "./hooks/useDaysOfWeekPicker.js";
6
+ import { D as DaysOfWeekPickerSkeletonStyled, a as DaysOfWeekPickerRootStyled, b as DayButtonStyled } from "./slots/DaysOfWeekPickerSlots.js";
7
+ const DaysOfWeekPicker = forwardRef(
8
+ (props, ref) => {
9
+ const {
10
+ value,
11
+ onChange,
12
+ disabledDays = [],
13
+ disabled = false,
14
+ readOnly = false,
15
+ size,
16
+ className,
17
+ multiple = true
18
+ } = props;
19
+ const {
20
+ currentSize,
21
+ isSkeleton,
22
+ daysOfWeek,
23
+ handleDayClick,
24
+ isDaySelected,
25
+ isDayDisabled,
26
+ ownerState
27
+ } = useDaysOfWeekPicker({
28
+ value,
29
+ onChange,
30
+ disabledDays,
31
+ disabled,
32
+ readOnly,
33
+ size,
34
+ multiple
35
+ });
36
+ if (isSkeleton) {
37
+ return /* @__PURE__ */ jsx(
38
+ DaysOfWeekPickerSkeletonStyled,
39
+ {
40
+ ownerState,
41
+ ...process.env.NODE_ENV !== "production" ? { "data-testid": `SkeletonDaysOfWeekPicker` } : {}
42
+ }
43
+ );
44
+ }
45
+ return /* @__PURE__ */ jsx(
46
+ DaysOfWeekPickerRootStyled,
47
+ {
48
+ ownerState,
49
+ className: clsx(className, DAYS_OF_WEEK_PICKER_CLASSES.root),
50
+ ref,
51
+ children: daysOfWeek.map((day) => {
52
+ const isSelected = isDaySelected(day.value);
53
+ const isDisabled = isDayDisabled(day.value);
54
+ const dayOwnerState = {
55
+ ...ownerState,
56
+ selected: isSelected,
57
+ day: day.value,
58
+ readOnly
59
+ };
60
+ return /* @__PURE__ */ jsx(
61
+ DayButtonStyled,
62
+ {
63
+ ownerState: dayOwnerState,
64
+ onClick: readOnly ? void 0 : () => handleDayClick(day.value),
65
+ disabled: isDisabled && !readOnly,
66
+ size: currentSize,
67
+ label: day.label,
68
+ className: DAYS_OF_WEEK_PICKER_CLASSES.dayButton,
69
+ ...process.env.NODE_ENV !== "production" ? { "data-testid": `day-${day.value}` } : {}
70
+ },
71
+ day.value
72
+ );
73
+ })
74
+ }
75
+ );
76
+ }
77
+ );
78
+ DaysOfWeekPicker.displayName = "DaysOfWeekPicker";
79
+ export {
80
+ DaysOfWeekPicker as D
81
+ };
@@ -0,0 +1,2 @@
1
+ import { DaysOfWeekPickerStyles } from './types';
2
+ export declare const daysOfWeekPickerStyles: DaysOfWeekPickerStyles;
@@ -0,0 +1,99 @@
1
+ import { g as getSizeStyles } from "../../utils/getSizeStyles/getSizeStyles.js";
2
+ const daysOfWeekPickerStyles = {
3
+ /**
4
+ * Estilos para el elemento raíz del componente.
5
+ */
6
+ root: ({ theme, ownerState }) => {
7
+ const state = ownerState;
8
+ return {
9
+ display: "flex",
10
+ alignItems: "center",
11
+ gap: 0,
12
+ backgroundColor: theme.vars.palette.background.default,
13
+ borderRadius: theme.vars.size.borderRadius.r2,
14
+ border: theme.vars.size.borderStroke.container,
15
+ borderColor: theme.vars.palette.border.secondary,
16
+ overflow: "hidden",
17
+ width: "fit-content",
18
+ ...state?.disabled && !state?.readOnly && {
19
+ pointerEvents: "none"
20
+ },
21
+ ...state?.readOnly && {
22
+ pointerEvents: "none",
23
+ cursor: "default"
24
+ }
25
+ };
26
+ },
27
+ /**
28
+ * Estilos para cada botón de día.
29
+ */
30
+ dayButton: ({ theme, ownerState }) => {
31
+ const state = ownerState;
32
+ const isSelected = state?.selected;
33
+ const isDisabled = state?.disabled || false;
34
+ const isReadOnly = state?.readOnly || false;
35
+ const isFirst = state?.day === 0;
36
+ const isLast = state?.day === 6;
37
+ return {
38
+ "&&&": {
39
+ minWidth: "auto",
40
+ padding: theme.vars.size.baseSpacings.sp1,
41
+ borderRadius: 0,
42
+ border: "none",
43
+ // Todos los botones tienen borderRight con color border.secondary (excepto el último)
44
+ borderRight: isLast ? "none" : `${theme.vars.size.borderStroke.container}!important`,
45
+ borderColor: `${theme.vars.palette.border.secondary}!important`,
46
+ // Solo cambia el backgroundColor según el estado de selección
47
+ backgroundColor: isSelected ? theme.vars.palette.primary.enabledOpacity : theme.vars.palette.background.paper,
48
+ "& .MuiTypography-root": {
49
+ ...isDisabled && {
50
+ color: theme.vars.palette.text.disabled
51
+ },
52
+ color: isSelected ? theme.vars.palette.primary.semanticText : theme.vars.palette.default.semanticText
53
+ },
54
+ ...getSizeStyles(theme, state?.size || "medium", "base"),
55
+ ...isFirst && {
56
+ borderTopLeftRadius: theme.vars.size.borderRadius["r1-5"],
57
+ borderBottomLeftRadius: theme.vars.size.borderRadius["r1-5"]
58
+ },
59
+ ...isLast && {
60
+ borderTopRightRadius: theme.vars.size.borderRadius["r1-5"],
61
+ borderBottomRightRadius: theme.vars.size.borderRadius["r1-5"]
62
+ },
63
+ ...!isDisabled && !isReadOnly && {
64
+ "&:hover": {
65
+ backgroundColor: isSelected ? theme.vars.palette.primary.hoverOpacity : theme.vars.palette.default.hoverOpacity
66
+ },
67
+ "&:active": {
68
+ backgroundColor: isSelected ? theme.vars.palette.primary.activeOpacity : theme.vars.palette.default.activeOpacity
69
+ }
70
+ /* '&:focus-visible': {
71
+ outline: `${theme.vars.size.borderStroke.container} ${theme.vars.palette.primary.main}`,
72
+ outlineOffset: -1,
73
+ }, */
74
+ },
75
+ ...isDisabled && !isReadOnly && {
76
+ cursor: "not-allowed",
77
+ opacity: 0.5
78
+ },
79
+ ...isReadOnly && {
80
+ cursor: "default",
81
+ pointerEvents: "none"
82
+ }
83
+ }
84
+ };
85
+ },
86
+ /**
87
+ * Estilos para el skeleton del componente.
88
+ */
89
+ skeleton: ({ theme, ownerState }) => ({
90
+ borderRadius: theme.vars.size.borderRadius.r2,
91
+ ...getSizeStyles(theme, ownerState?.size || "medium", "base", (size) => ({
92
+ width: "234px!important",
93
+ height: `${size}!important`
94
+ }))
95
+ })
96
+ };
97
+ export {
98
+ daysOfWeekPickerStyles as d
99
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Clave de identificación del componente DaysOfWeekPicker dentro del sistema.
3
+ *
4
+ * Esta constante se utiliza como identificador único para asociar y personalizar estilos
5
+ * y configuraciones relacionadas con el componente dentro del sistema de temas y estilos.
6
+ * @default 'M4LDaysOfWeekPicker'
7
+ */
8
+ export declare const DAYS_OF_WEEK_PICKER_KEY_COMPONENT = "M4LDaysOfWeekPicker";
9
+ /**
10
+ * Inventario de clases CSS para el componente DaysOfWeekPicker
11
+ */
12
+ export declare const DAYS_OF_WEEK_PICKER_CLASSES: Record<"skeleton" | "root" | "dayButton", string>;
@@ -0,0 +1,11 @@
1
+ import { g as getComponentClasses } from "../../utils/getComponentSlotRoot.js";
2
+ import { D as DaysOfWeekPickerSlots } from "./slots/DaysOfWeekPickerEnum.js";
3
+ const DAYS_OF_WEEK_PICKER_KEY_COMPONENT = "M4LDaysOfWeekPicker";
4
+ const DAYS_OF_WEEK_PICKER_CLASSES = getComponentClasses(
5
+ DAYS_OF_WEEK_PICKER_KEY_COMPONENT,
6
+ DaysOfWeekPickerSlots
7
+ );
8
+ export {
9
+ DAYS_OF_WEEK_PICKER_CLASSES as D,
10
+ DAYS_OF_WEEK_PICKER_KEY_COMPONENT as a
11
+ };
@@ -0,0 +1 @@
1
+ export declare function getDaysOfWeekPickerDictionary(): string[];
@@ -0,0 +1,6 @@
1
+ function getDaysOfWeekPickerDictionary() {
2
+ return ["days_of_week_picker"];
3
+ }
4
+ export {
5
+ getDaysOfWeekPickerDictionary as g
6
+ };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Genera un array de días de la semana con sus etiquetas obtenidas del sistema de diccionario.
3
+ *
4
+ * Esta función utiliza la función `getLabel` proporcionada para obtener las etiquetas
5
+ * traducidas de cada día de la semana desde el diccionario del módulo.
6
+ * @param getLabel - Función para obtener las etiquetas del diccionario del módulo.
7
+ * @returns Array de días de la semana con sus valores numéricos (0-6) y etiquetas traducidas.
8
+ * - 0: Lunes (Monday)
9
+ * - 1: Martes (Tuesday)
10
+ * - 2: Miércoles (Wednesday)
11
+ * - 3: Jueves (Thursday)
12
+ * - 4: Viernes (Friday)
13
+ * - 5: Sábado (Saturday)
14
+ * - 6: Domingo (Sunday)
15
+ * @example
16
+ * ```tsx
17
+ * const { getLabel } = useModuleDictionary();
18
+ * const days = getDaysOfWeekFromDictionary(getLabel);
19
+ * // Resultado: [
20
+ * // { value: 0, label: 'Lun' },
21
+ * // { value: 1, label: 'Mar' },
22
+ * // ...
23
+ * // ]
24
+ * ```
25
+ */
26
+ export declare const getDaysOfWeekFromDictionary: (getLabel: (key: string) => string) => Array<{
27
+ value: number;
28
+ label: string;
29
+ }>;
@@ -0,0 +1,12 @@
1
+ const getDaysOfWeekFromDictionary = (getLabel) => [
2
+ { value: 0, label: getLabel("days_of_week_picker.mon") },
3
+ { value: 1, label: getLabel("days_of_week_picker.tu") },
4
+ { value: 2, label: getLabel("days_of_week_picker.we") },
5
+ { value: 3, label: getLabel("days_of_week_picker.th") },
6
+ { value: 4, label: getLabel("days_of_week_picker.fr") },
7
+ { value: 5, label: getLabel("days_of_week_picker.sa") },
8
+ { value: 6, label: getLabel("days_of_week_picker.su") }
9
+ ];
10
+ export {
11
+ getDaysOfWeekFromDictionary as g
12
+ };
@@ -0,0 +1 @@
1
+ export { getDaysOfWeekFromDictionary } from './getDaysOfWeekFromDictionary';
@@ -0,0 +1,2 @@
1
+ export { useDaysOfWeekPicker } from './useDaysOfWeekPicker';
2
+ export type { UseDaysOfWeekPickerParams, UseDaysOfWeekPickerReturn } from './types';
@@ -0,0 +1,29 @@
1
+ import { useComponentSize } from '../../../hooks/useComponentSize';
2
+ import { DayOfWeek, DaysOfWeekPickerProps, DaysOfWeekPickerOwnerState } from '../types';
3
+ /**
4
+ * Parámetros del hook useDaysOfWeekPicker.
5
+ */
6
+ export interface UseDaysOfWeekPickerParams {
7
+ value: DayOfWeek[];
8
+ onChange?: (value: DayOfWeek[]) => void;
9
+ disabledDays?: DayOfWeek[];
10
+ disabled?: boolean;
11
+ readOnly?: boolean;
12
+ size?: DaysOfWeekPickerProps['size'];
13
+ multiple?: boolean;
14
+ }
15
+ /**
16
+ * Retorno del hook useDaysOfWeekPicker.
17
+ */
18
+ export interface UseDaysOfWeekPickerReturn {
19
+ currentSize: ReturnType<typeof useComponentSize>['currentSize'];
20
+ isSkeleton: boolean;
21
+ daysOfWeek: Array<{
22
+ value: number;
23
+ label: string;
24
+ }>;
25
+ handleDayClick: (day: DayOfWeek) => void;
26
+ isDaySelected: (day: DayOfWeek) => boolean;
27
+ isDayDisabled: (day: DayOfWeek) => boolean;
28
+ ownerState: DaysOfWeekPickerOwnerState;
29
+ }
@@ -0,0 +1,9 @@
1
+ import { UseDaysOfWeekPickerParams, UseDaysOfWeekPickerReturn } from './types';
2
+ /**
3
+ * Hook personalizado que encapsula la lógica del componente DaysOfWeekPicker.
4
+ *
5
+ * Maneja la lógica de selección de días, validaciones, estados y callbacks.
6
+ * @param params - Parámetros del hook
7
+ * @returns Objeto con toda la lógica necesaria para el componente
8
+ */
9
+ export declare const useDaysOfWeekPicker: (params: UseDaysOfWeekPickerParams) => UseDaysOfWeekPickerReturn;
@@ -0,0 +1,71 @@
1
+ import { useModuleSkeleton, useModuleDictionary } from "@m4l/core";
2
+ import { useMemo, useCallback } from "react";
3
+ import { u as useComponentSize } from "../../../hooks/useComponentSize/useComponentSize.js";
4
+ import { g as getDaysOfWeekFromDictionary } from "../helpers/getDaysOfWeekFromDictionary.js";
5
+ const useDaysOfWeekPicker = (params) => {
6
+ const {
7
+ value,
8
+ onChange,
9
+ disabledDays = [],
10
+ disabled = false,
11
+ readOnly = false,
12
+ size,
13
+ multiple = true
14
+ } = params;
15
+ const { currentSize } = useComponentSize(size);
16
+ const isSkeleton = useModuleSkeleton();
17
+ const { getLabel } = useModuleDictionary();
18
+ const daysOfWeek = useMemo(() => getDaysOfWeekFromDictionary(getLabel), [getLabel]);
19
+ const handleDayToggleClick = useCallback(
20
+ (day) => {
21
+ if (readOnly || disabled || disabledDays.includes(day)) {
22
+ return;
23
+ }
24
+ const isSelected = value.includes(day);
25
+ let newValue;
26
+ if (multiple) {
27
+ if (isSelected) {
28
+ newValue = value.filter((d) => d !== day);
29
+ } else {
30
+ newValue = [...value, day].sort((a, b) => a - b);
31
+ }
32
+ } else {
33
+ newValue = isSelected ? [] : [day];
34
+ }
35
+ onChange?.(newValue);
36
+ },
37
+ [readOnly, disabled, disabledDays, value, multiple, onChange]
38
+ );
39
+ const isDaySelected = useCallback(
40
+ (day) => {
41
+ return value.includes(day);
42
+ },
43
+ [value]
44
+ );
45
+ const isDayDisabled = useCallback(
46
+ (day) => {
47
+ return disabled || disabledDays.includes(day);
48
+ },
49
+ [disabled, disabledDays]
50
+ );
51
+ const ownerState = useMemo(
52
+ () => ({
53
+ size: currentSize,
54
+ disabled,
55
+ readOnly
56
+ }),
57
+ [currentSize, disabled, readOnly]
58
+ );
59
+ return {
60
+ currentSize,
61
+ isSkeleton,
62
+ daysOfWeek,
63
+ handleDayClick: handleDayToggleClick,
64
+ isDaySelected,
65
+ isDayDisabled,
66
+ ownerState
67
+ };
68
+ };
69
+ export {
70
+ useDaysOfWeekPicker as u
71
+ };
@@ -0,0 +1,3 @@
1
+ export { DaysOfWeekPicker } from './DaysOfWeekPicker';
2
+ export { getDaysOfWeekPickerDictionary } from './dictionary';
3
+ export type { DaysOfWeekPickerProps, DayOfWeek } from './types';
@@ -0,0 +1,5 @@
1
+ export declare enum DaysOfWeekPickerSlots {
2
+ root = "root",
3
+ dayButton = "dayButton",
4
+ skeleton = "skeleton"
5
+ }
@@ -0,0 +1,9 @@
1
+ var DaysOfWeekPickerSlots = /* @__PURE__ */ ((DaysOfWeekPickerSlots2) => {
2
+ DaysOfWeekPickerSlots2["root"] = "root";
3
+ DaysOfWeekPickerSlots2["dayButton"] = "dayButton";
4
+ DaysOfWeekPickerSlots2["skeleton"] = "skeleton";
5
+ return DaysOfWeekPickerSlots2;
6
+ })(DaysOfWeekPickerSlots || {});
7
+ export {
8
+ DaysOfWeekPickerSlots as D
9
+ };
@@ -0,0 +1,9 @@
1
+ export declare const DaysOfWeekPickerRootStyled: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material/styles').Theme> & Record<string, unknown> & {
2
+ ownerState?: (Partial<import('../types').DaysOfWeekPickerOwnerState> & Record<string, unknown>) | undefined;
3
+ }, Pick<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('react').ClassAttributes<HTMLDivElement> | keyof import('react').HTMLAttributes<HTMLDivElement>>, {}>;
4
+ export declare const DayButtonStyled: import('@emotion/styled').StyledComponent<Pick<Omit<import('../../mui_extended/Button').ButtonProps, "ref"> & import('react').RefAttributes<HTMLButtonElement>, "value" | "size" | "children" | "title" | "component" | "name" | "id" | "type" | "disabled" | "action" | "variant" | "color" | "content" | "translate" | "className" | "style" | "classes" | "sx" | "form" | "label" | "slot" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "hidden" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "href" | "skeletonWidth" | "startIcon" | "endIcon" | keyof import('react').RefAttributes<HTMLButtonElement> | "fullWidth" | "disableElevation"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material/styles').Theme> & Record<string, unknown> & {
5
+ ownerState?: (Partial<import('../types').DaysOfWeekPickerOwnerState> & Record<string, unknown>) | undefined;
6
+ }, {}, {}>;
7
+ export declare const DaysOfWeekPickerSkeletonStyled: import('@emotion/styled').StyledComponent<Pick<import('../../mui_extended/Skeleton/types').SkeletonProps, keyof import('../../mui_extended/Skeleton/types').SkeletonProps> & import('@mui/system').MUIStyledCommonProps<import('@mui/material/styles').Theme> & Record<string, unknown> & {
8
+ ownerState?: (Partial<import('../types').DaysOfWeekPickerOwnerState> & Record<string, unknown>) | undefined;
9
+ }, {}, {}>;
@@ -0,0 +1,23 @@
1
+ import { styled } from "@mui/material/styles";
2
+ import { D as DaysOfWeekPickerSlots } from "./DaysOfWeekPickerEnum.js";
3
+ import { d as daysOfWeekPickerStyles } from "../DaysOfWeekPicker.styles.js";
4
+ import { a as DAYS_OF_WEEK_PICKER_KEY_COMPONENT } from "../constants.js";
5
+ import { S as Skeleton } from "../../mui_extended/Skeleton/Skeleton.js";
6
+ import { B as Button } from "../../mui_extended/Button/Button.js";
7
+ const DaysOfWeekPickerRootStyled = styled("div", {
8
+ name: DAYS_OF_WEEK_PICKER_KEY_COMPONENT,
9
+ slot: DaysOfWeekPickerSlots.root
10
+ })(daysOfWeekPickerStyles?.root);
11
+ const DayButtonStyled = styled(Button, {
12
+ name: DAYS_OF_WEEK_PICKER_KEY_COMPONENT,
13
+ slot: DaysOfWeekPickerSlots.dayButton
14
+ })(daysOfWeekPickerStyles?.dayButton);
15
+ const DaysOfWeekPickerSkeletonStyled = styled(Skeleton, {
16
+ name: DAYS_OF_WEEK_PICKER_KEY_COMPONENT,
17
+ slot: DaysOfWeekPickerSlots.skeleton
18
+ })(daysOfWeekPickerStyles?.skeleton);
19
+ export {
20
+ DaysOfWeekPickerSkeletonStyled as D,
21
+ DaysOfWeekPickerRootStyled as a,
22
+ DayButtonStyled as b
23
+ };
@@ -0,0 +1,3 @@
1
+ export * from './DaysOfWeekPickerSlots';
2
+ export * from './DaysOfWeekPickerEnum';
3
+ export { DaysOfWeekPickerSlots } from './DaysOfWeekPickerEnum';
@@ -0,0 +1,70 @@
1
+ import { Sizes } from '@m4l/styles';
2
+ import { Theme } from '@mui/material/styles';
3
+ import { ReactNode } from 'react';
4
+ import { DAYS_OF_WEEK_PICKER_KEY_COMPONENT } from './constants';
5
+ import { DaysOfWeekPickerSlots } from './slots';
6
+ import { M4LOverridesStyleRules } from '../../@types/augmentations';
7
+ /**
8
+ * Días de la semana disponibles.
9
+ */
10
+ export type DayOfWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6;
11
+ /**
12
+ * Propiedades del componente `DaysOfWeekPicker`.
13
+ */
14
+ export interface DaysOfWeekPickerProps {
15
+ /**
16
+ * Valor controlado del componente. Array de días seleccionados (0 = Lunes, 6 = Domingo).
17
+ */
18
+ value: DayOfWeek[];
19
+ /**
20
+ * Callback que se ejecuta cuando cambia la selección de días.
21
+ * @param value - Array de días seleccionados.
22
+ */
23
+ onChange?: (value: DayOfWeek[]) => void;
24
+ /**
25
+ * Array de días que deben estar deshabilitados.
26
+ * Cada valor representa un día de la semana (0 = Lunes, 6 = Domingo).
27
+ */
28
+ disabledDays?: DayOfWeek[];
29
+ /**
30
+ * Si es true, deshabilita todo el componente.
31
+ */
32
+ disabled?: boolean;
33
+ /**
34
+ * Si es true, el componente es de solo lectura y no permite interacción.
35
+ * Los botones deshabilitados se muestran con el mismo estilo que los habilitados.
36
+ */
37
+ readOnly?: boolean;
38
+ /**
39
+ * Tamaño del componente.
40
+ */
41
+ size?: Extract<Sizes, 'small' | 'medium'>;
42
+ /**
43
+ * Clase CSS adicional.
44
+ */
45
+ className?: string;
46
+ /**
47
+ * Si es true, permite selección múltiple. Por defecto es true.
48
+ */
49
+ multiple?: boolean;
50
+ /**
51
+ * Contenido adicional del componente.
52
+ */
53
+ children?: ReactNode;
54
+ }
55
+ /**
56
+ * Owner state del componente usado para definir propiedades internas de estilo y comportamiento.
57
+ */
58
+ export interface DaysOfWeekPickerOwnerState extends Pick<DaysOfWeekPickerProps, 'size' | 'disabled' | 'readOnly'> {
59
+ selected?: boolean;
60
+ day?: DayOfWeek;
61
+ [key: string]: unknown;
62
+ }
63
+ /**
64
+ * Define los tipos de Slots disponibles para el componente.
65
+ */
66
+ export type DaysOfWeekPickerSlotsType = keyof typeof DaysOfWeekPickerSlots;
67
+ /**
68
+ * Estilos aplicables al componente usando temas y slots personalizados.
69
+ */
70
+ export type DaysOfWeekPickerStyles = M4LOverridesStyleRules<DaysOfWeekPickerSlotsType, typeof DAYS_OF_WEEK_PICKER_KEY_COMPONENT, Theme>;