@m4l/components 9.81.0 → 9.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/@types/types.d.ts +8 -0
  2. package/components/HoursOfWeekPicker/HoursOfWeekPicker.d.ts +4 -0
  3. package/components/HoursOfWeekPicker/HoursOfWeekPicker.d.ts.map +1 -0
  4. package/components/HoursOfWeekPicker/HoursOfWeekPicker.js +144 -0
  5. package/components/HoursOfWeekPicker/HoursOfWeekPicker.styles.d.ts +3 -0
  6. package/components/HoursOfWeekPicker/HoursOfWeekPicker.styles.d.ts.map +1 -0
  7. package/components/HoursOfWeekPicker/HoursOfWeekPicker.styles.js +317 -0
  8. package/components/HoursOfWeekPicker/constants.d.ts +18 -0
  9. package/components/HoursOfWeekPicker/constants.d.ts.map +1 -0
  10. package/components/HoursOfWeekPicker/constants.js +24 -0
  11. package/components/HoursOfWeekPicker/dictionary.d.ts +6 -0
  12. package/components/HoursOfWeekPicker/dictionary.d.ts.map +1 -0
  13. package/components/HoursOfWeekPicker/dictionary.js +6 -0
  14. package/components/HoursOfWeekPicker/helpers/applyRectangle/applyRectangle.d.ts +4 -0
  15. package/components/HoursOfWeekPicker/helpers/applyRectangle/applyRectangle.d.ts.map +1 -0
  16. package/components/HoursOfWeekPicker/helpers/applyRectangle/applyRectangle.js +12 -0
  17. package/components/HoursOfWeekPicker/helpers/copyDay/copyDay.d.ts +4 -0
  18. package/components/HoursOfWeekPicker/helpers/copyDay/copyDay.d.ts.map +1 -0
  19. package/components/HoursOfWeekPicker/helpers/copyDay/copyDay.js +6 -0
  20. package/components/HoursOfWeekPicker/helpers/createHourFormatter/createHourFormatter.d.ts +4 -0
  21. package/components/HoursOfWeekPicker/helpers/createHourFormatter/createHourFormatter.d.ts.map +1 -0
  22. package/components/HoursOfWeekPicker/helpers/createHourFormatter/createHourFormatter.js +14 -0
  23. package/components/HoursOfWeekPicker/helpers/firstAvailableRange/firstAvailableRange.d.ts +4 -0
  24. package/components/HoursOfWeekPicker/helpers/firstAvailableRange/firstAvailableRange.d.ts.map +1 -0
  25. package/components/HoursOfWeekPicker/helpers/firstAvailableRange/firstAvailableRange.js +12 -0
  26. package/components/HoursOfWeekPicker/helpers/formatDuration/formatDuration.d.ts +4 -0
  27. package/components/HoursOfWeekPicker/helpers/formatDuration/formatDuration.d.ts.map +1 -0
  28. package/components/HoursOfWeekPicker/helpers/formatDuration/formatDuration.js +7 -0
  29. package/components/HoursOfWeekPicker/helpers/formatTime/formatTime.d.ts +3 -0
  30. package/components/HoursOfWeekPicker/helpers/formatTime/formatTime.d.ts.map +1 -0
  31. package/components/HoursOfWeekPicker/helpers/formatTime/formatTime.js +8 -0
  32. package/components/HoursOfWeekPicker/helpers/getCellState/getCellState.d.ts +4 -0
  33. package/components/HoursOfWeekPicker/helpers/getCellState/getCellState.d.ts.map +1 -0
  34. package/components/HoursOfWeekPicker/helpers/getCellState/getCellState.js +7 -0
  35. package/components/HoursOfWeekPicker/helpers/getDayPeriodClock/getDayPeriodClock.d.ts +6 -0
  36. package/components/HoursOfWeekPicker/helpers/getDayPeriodClock/getDayPeriodClock.d.ts.map +1 -0
  37. package/components/HoursOfWeekPicker/helpers/getDayPeriodClock/getDayPeriodClock.js +33 -0
  38. package/components/HoursOfWeekPicker/helpers/getDayPeriodReference/getDayPeriodReference.d.ts +4 -0
  39. package/components/HoursOfWeekPicker/helpers/getDayPeriodReference/getDayPeriodReference.d.ts.map +1 -0
  40. package/components/HoursOfWeekPicker/helpers/getDayPeriodReference/getDayPeriodReference.js +31 -0
  41. package/components/HoursOfWeekPicker/helpers/getTimeOptions/getTimeOptions.d.ts +4 -0
  42. package/components/HoursOfWeekPicker/helpers/getTimeOptions/getTimeOptions.d.ts.map +1 -0
  43. package/components/HoursOfWeekPicker/helpers/getTimeOptions/getTimeOptions.js +9 -0
  44. package/components/HoursOfWeekPicker/helpers/getTotals/getTotals.d.ts +8 -0
  45. package/components/HoursOfWeekPicker/helpers/getTotals/getTotals.d.ts.map +1 -0
  46. package/components/HoursOfWeekPicker/helpers/getTotals/getTotals.js +8 -0
  47. package/components/HoursOfWeekPicker/helpers/getVisiblePeriods/getVisiblePeriods.d.ts +4 -0
  48. package/components/HoursOfWeekPicker/helpers/getVisiblePeriods/getVisiblePeriods.d.ts.map +1 -0
  49. package/components/HoursOfWeekPicker/helpers/getVisiblePeriods/getVisiblePeriods.js +6 -0
  50. package/components/HoursOfWeekPicker/helpers/index.d.ts +17 -0
  51. package/components/HoursOfWeekPicker/helpers/index.d.ts.map +1 -0
  52. package/components/HoursOfWeekPicker/helpers/matrixToValue/matrixToValue.d.ts +4 -0
  53. package/components/HoursOfWeekPicker/helpers/matrixToValue/matrixToValue.d.ts.map +1 -0
  54. package/components/HoursOfWeekPicker/helpers/matrixToValue/matrixToValue.js +14 -0
  55. package/components/HoursOfWeekPicker/helpers/parseTime/parseTime.d.ts +3 -0
  56. package/components/HoursOfWeekPicker/helpers/parseTime/parseTime.d.ts.map +1 -0
  57. package/components/HoursOfWeekPicker/helpers/parseTime/parseTime.js +12 -0
  58. package/components/HoursOfWeekPicker/helpers/replaceDayRanges/replaceDayRanges.d.ts +4 -0
  59. package/components/HoursOfWeekPicker/helpers/replaceDayRanges/replaceDayRanges.d.ts.map +1 -0
  60. package/components/HoursOfWeekPicker/helpers/replaceDayRanges/replaceDayRanges.js +8 -0
  61. package/components/HoursOfWeekPicker/helpers/resolveDayPeriodLocation/resolveDayPeriodLocation.d.ts +4 -0
  62. package/components/HoursOfWeekPicker/helpers/resolveDayPeriodLocation/resolveDayPeriodLocation.d.ts.map +1 -0
  63. package/components/HoursOfWeekPicker/helpers/resolveDayPeriodLocation/resolveDayPeriodLocation.js +23 -0
  64. package/components/HoursOfWeekPicker/helpers/resolveVisibleRange/resolveVisibleRange.d.ts +4 -0
  65. package/components/HoursOfWeekPicker/helpers/resolveVisibleRange/resolveVisibleRange.d.ts.map +1 -0
  66. package/components/HoursOfWeekPicker/helpers/resolveVisibleRange/resolveVisibleRange.js +8 -0
  67. package/components/HoursOfWeekPicker/helpers/toggleDay/toggleDay.d.ts +4 -0
  68. package/components/HoursOfWeekPicker/helpers/toggleDay/toggleDay.d.ts.map +1 -0
  69. package/components/HoursOfWeekPicker/helpers/toggleDay/toggleDay.js +8 -0
  70. package/components/HoursOfWeekPicker/helpers/toggleHour/toggleHour.d.ts +4 -0
  71. package/components/HoursOfWeekPicker/helpers/toggleHour/toggleHour.d.ts.map +1 -0
  72. package/components/HoursOfWeekPicker/helpers/toggleHour/toggleHour.js +9 -0
  73. package/components/HoursOfWeekPicker/helpers/validateRange/validateRange.d.ts +4 -0
  74. package/components/HoursOfWeekPicker/helpers/validateRange/validateRange.d.ts.map +1 -0
  75. package/components/HoursOfWeekPicker/helpers/validateRange/validateRange.js +15 -0
  76. package/components/HoursOfWeekPicker/helpers/valueToMatrix/valueToMatrix.d.ts +4 -0
  77. package/components/HoursOfWeekPicker/helpers/valueToMatrix/valueToMatrix.d.ts.map +1 -0
  78. package/components/HoursOfWeekPicker/helpers/valueToMatrix/valueToMatrix.js +17 -0
  79. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekCards/useHoursOfWeekCards.d.ts +22 -0
  80. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekCards/useHoursOfWeekCards.d.ts.map +1 -0
  81. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekCards/useHoursOfWeekCards.js +49 -0
  82. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekDayPeriods/useHoursOfWeekDayPeriods.d.ts +4 -0
  83. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekDayPeriods/useHoursOfWeekDayPeriods.d.ts.map +1 -0
  84. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekDayPeriods/useHoursOfWeekDayPeriods.js +20 -0
  85. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekPicker/index.d.ts +2 -0
  86. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekPicker/index.d.ts.map +1 -0
  87. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekPicker/useHoursOfWeekPicker.d.ts +29 -0
  88. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekPicker/useHoursOfWeekPicker.d.ts.map +1 -0
  89. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekPicker/useHoursOfWeekPicker.js +107 -0
  90. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekPresentation/useHoursOfWeekPresentation.d.ts +3 -0
  91. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekPresentation/useHoursOfWeekPresentation.d.ts.map +1 -0
  92. package/components/HoursOfWeekPicker/hooks/useHoursOfWeekPresentation/useHoursOfWeekPresentation.js +10 -0
  93. package/components/HoursOfWeekPicker/index.d.ts +4 -0
  94. package/components/HoursOfWeekPicker/index.d.ts.map +1 -0
  95. package/components/HoursOfWeekPicker/slots/HoursOfWeekPickerEnum.d.ts +51 -0
  96. package/components/HoursOfWeekPicker/slots/HoursOfWeekPickerEnum.d.ts.map +1 -0
  97. package/components/HoursOfWeekPicker/slots/HoursOfWeekPickerEnum.js +4 -0
  98. package/components/HoursOfWeekPicker/slots/HoursOfWeekPickerSlots.d.ts +145 -0
  99. package/components/HoursOfWeekPicker/slots/HoursOfWeekPickerSlots.d.ts.map +1 -0
  100. package/components/HoursOfWeekPicker/slots/HoursOfWeekPickerSlots.js +56 -0
  101. package/components/HoursOfWeekPicker/slots/index.d.ts +3 -0
  102. package/components/HoursOfWeekPicker/slots/index.d.ts.map +1 -0
  103. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekCards/HoursOfWeekCards.d.ts +4 -0
  104. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekCards/HoursOfWeekCards.d.ts.map +1 -0
  105. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekCards/HoursOfWeekCards.js +111 -0
  106. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekCell/HoursOfWeekCell.d.ts +4 -0
  107. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekCell/HoursOfWeekCell.d.ts.map +1 -0
  108. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekCell/HoursOfWeekCell.js +42 -0
  109. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekLegend/HoursOfWeekLegend.d.ts +4 -0
  110. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekLegend/HoursOfWeekLegend.d.ts.map +1 -0
  111. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekLegend/HoursOfWeekLegend.js +31 -0
  112. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekPeriods/HoursOfWeekPeriods.d.ts +4 -0
  113. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekPeriods/HoursOfWeekPeriods.d.ts.map +1 -0
  114. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekPeriods/HoursOfWeekPeriods.js +28 -0
  115. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekRow/HoursOfWeekRow.d.ts +4 -0
  116. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekRow/HoursOfWeekRow.d.ts.map +1 -0
  117. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekRow/HoursOfWeekRow.js +38 -0
  118. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekSkeleton/HoursOfWeekSkeleton.d.ts +6 -0
  119. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekSkeleton/HoursOfWeekSkeleton.d.ts.map +1 -0
  120. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekSkeleton/HoursOfWeekSkeleton.js +24 -0
  121. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekSummary/HoursOfWeekSummary.d.ts +4 -0
  122. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekSummary/HoursOfWeekSummary.d.ts.map +1 -0
  123. package/components/HoursOfWeekPicker/subcomponents/HoursOfWeekSummary/HoursOfWeekSummary.js +27 -0
  124. package/components/HoursOfWeekPicker/types.d.ts +219 -0
  125. package/components/HoursOfWeekPicker/types.d.ts.map +1 -0
  126. package/components/hook-form/RHFHoursOfWeekPicker/RHFHoursOfWeekPicker.d.ts +7 -0
  127. package/components/hook-form/RHFHoursOfWeekPicker/RHFHoursOfWeekPicker.d.ts.map +1 -0
  128. package/components/hook-form/RHFHoursOfWeekPicker/RHFHoursOfWeekPicker.js +10 -0
  129. package/components/hook-form/RHFHoursOfWeekPicker/index.d.ts +3 -0
  130. package/components/hook-form/RHFHoursOfWeekPicker/index.d.ts.map +1 -0
  131. package/components/hook-form/RHFHoursOfWeekPicker/types.d.ts +6 -0
  132. package/components/hook-form/RHFHoursOfWeekPicker/types.d.ts.map +1 -0
  133. package/components/hook-form/index.d.ts +1 -0
  134. package/components/hook-form/index.d.ts.map +1 -1
  135. package/components/index.d.ts +1 -0
  136. package/components/index.d.ts.map +1 -1
  137. package/index.js +378 -372
  138. package/package.json +8 -6
package/@types/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { HoursOfWeekPickerOwnerState, HoursOfWeekPickerSlotsType } from '../components/HoursOfWeekPicker/types';
1
2
  import { ComponentsOverrides, ComponentsVariants } from '@mui/material/styles';
2
3
  import {
3
4
  RHFTextFieldSlotsType,
@@ -508,6 +509,7 @@ declare module '@mui/material/styles' {
508
509
  M4LDatePicker: DatePickerSlotsType;
509
510
  M4LDateRangeCalendarPicker: DateRangeCalendarPickerSlotsType;
510
511
  M4LImageFormatter: ImageFormatterSlotsType;
512
+ M4LHoursOfWeekPicker: HoursOfWeekPickerSlotsType;
511
513
  M4LDaysOfWeekPicker: DaysOfWeekPickerSlotsType;
512
514
  M4LDaysOfMonthPicker: DaysOfMonthPickerSlotsType;
513
515
  M4LDateRangeCalendarPicker: DateRangeCalendarPickerSlotsType;
@@ -627,6 +629,7 @@ declare module '@mui/material/styles' {
627
629
  M4LRHFDatePicker: Partial<RHFDatePickerOwnerState>;
628
630
  M4LDateRangeCalendarPicker: Partial<DateRangeCalendarPickerOwnerState>;
629
631
  M4LImageFormatter: Partial<ImageFormatterOwnerState>;
632
+ M4LHoursOfWeekPicker: Partial<HoursOfWeekPickerOwnerState>;
630
633
  M4LDaysOfWeekPicker: Partial<DaysOfWeekPickerOwnerState>;
631
634
  M4LDaysOfMonthPicker: Partial<DaysOfMonthPickerOwnerState>;
632
635
  M4LDateRangeCalendarPicker: Partial<DateRangeCalendarPickerOwnerState>;
@@ -1174,6 +1177,11 @@ declare module '@mui/material/styles' {
1174
1177
  styleOverrides?: ComponentsOverrides<Theme>['M4LDaysOfMonthPicker'];
1175
1178
  variants?: ComponentsVariants['M4LDaysOfMonthPicker'];
1176
1179
  };
1180
+ M4LHoursOfWeekPicker?: {
1181
+ defaultProps?: ComponentsPropsList['M4LHoursOfWeekPicker'];
1182
+ styleOverrides?: ComponentsOverrides<Theme>['M4LHoursOfWeekPicker'];
1183
+ variants?: ComponentsVariants['M4LHoursOfWeekPicker'];
1184
+ };
1177
1185
  M4LDaysOfWeekPicker?: {
1178
1186
  defaultProps?: ComponentsPropsList['M4LDaysOfWeekPicker'];
1179
1187
  styleOverrides?: ComponentsOverrides<Theme>['M4LDaysOfWeekPicker'];
@@ -0,0 +1,4 @@
1
+ import { HoursOfWeekPickerProps } from './types';
2
+ /** Edit recurring local weekly availability with pointer transactions and an accessible keyboard grid. */
3
+ export declare const HoursOfWeekPicker: import('react').ForwardRefExoticComponent<HoursOfWeekPickerProps & import('react').RefAttributes<HTMLDivElement>>;
4
+ //# sourceMappingURL=HoursOfWeekPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HoursOfWeekPicker.d.ts","sourceRoot":"","sources":["../../../../../../packages/components/src/components/HoursOfWeekPicker/HoursOfWeekPicker.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAkD,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtG,0GAA0G;AAC1G,eAAO,MAAM,iBAAiB,mHA0G5B,CAAC"}
@@ -0,0 +1,144 @@
1
+ import { jsx as t, jsxs as s, Fragment as pe } from "@emotion/react/jsx-runtime";
2
+ import fe from "clsx";
3
+ import { forwardRef as he, useMemo as O } from "react";
4
+ import _e from "@mui/material/useMediaQuery";
5
+ import { useTheme as be } from "@mui/material/styles";
6
+ import { Typography as y, Tooltip as ye } from "@m4l/base";
7
+ import { useModuleSkeleton as ke, useModuleDictionary as Se } from "@m4l/core";
8
+ import { useComponentSize as ge } from "../../hooks/useComponentSize/index.js";
9
+ import { HOURS_OF_WEEK_DEFAULT_SLOT_MINUTES as Oe, HOURS_OF_WEEK_DEFAULT_PRESENTATION as ve, HOURS_OF_WEEK_DAY_KEYS as G, HOURS_OF_WEEK_CARD_SLOT_OPTIONS as we, HOURS_OF_WEEK_PICKER_CLASSES as i, HOURS_OF_WEEK_DAYS as Ne, HOURS_OF_WEEK_COPY_DAYS as Ee } from "./constants.js";
10
+ import { useHoursOfWeekPresentation as He } from "./hooks/useHoursOfWeekPresentation/useHoursOfWeekPresentation.js";
11
+ import { useHoursOfWeekDayPeriods as Ce } from "./hooks/useHoursOfWeekDayPeriods/useHoursOfWeekDayPeriods.js";
12
+ import { HoursOfWeekCards as Te } from "./subcomponents/HoursOfWeekCards/HoursOfWeekCards.js";
13
+ import { HoursOfWeekRow as xe } from "./subcomponents/HoursOfWeekRow/HoursOfWeekRow.js";
14
+ import { HoursOfWeekPeriods as V } from "./subcomponents/HoursOfWeekPeriods/HoursOfWeekPeriods.js";
15
+ import { HoursOfWeekSummary as ze } from "./subcomponents/HoursOfWeekSummary/HoursOfWeekSummary.js";
16
+ import { HoursOfWeekLegend as Re } from "./subcomponents/HoursOfWeekLegend/HoursOfWeekLegend.js";
17
+ import { HoursOfWeekSkeleton as We } from "./subcomponents/HoursOfWeekSkeleton/HoursOfWeekSkeleton.js";
18
+ import { useHoursOfWeekPicker as Pe } from "./hooks/useHoursOfWeekPicker/useHoursOfWeekPicker.js";
19
+ import { getTotals as Fe } from "./helpers/getTotals/getTotals.js";
20
+ import { matrixToValue as Q } from "./helpers/matrixToValue/matrixToValue.js";
21
+ import { getCellState as q } from "./helpers/getCellState/getCellState.js";
22
+ import { Label as Ae } from "../Label/Label.js";
23
+ import { formatDuration as g } from "./helpers/formatDuration/formatDuration.js";
24
+ import { valueToMatrix as X } from "./helpers/valueToMatrix/valueToMatrix.js";
25
+ import { copyDay as De } from "./helpers/copyDay/copyDay.js";
26
+ import { Alert as Me } from "../Alert/Alert.js";
27
+ import { toggleHour as Le } from "./helpers/toggleHour/toggleHour.js";
28
+ import { toggleDay as Ue } from "./helpers/toggleDay/toggleDay.js";
29
+ import { Root as $e, Header as Ke, Status as Z, Interval as Be, SlotSelector as Ie, SlotButton as Ye, Actions as ee, Notice as Je, Viewport as je, Grid as te, Axis as Ge, RowTotal as A, Track as Ve, TooltipTarget as Qe, AxisHour as qe, GridBody as Xe, Footer as Ze, Totals as et, LegendItem as tt } from "./slots/HoursOfWeekPickerSlots.js";
30
+ import { Chip as ot } from "../Chip/Chip.js";
31
+ import { Button as v } from "../extended/mui/Button/Button.js";
32
+ const Ft = he(function(p, z) {
33
+ const { slotMinutes: w = Oe, slotMinutesOptions: D = [], onSlotMinutesChange: M, presets: oe = [], showSummary: ae = !1, showDayPeriods: N = !0, disabled: d = !1, readOnly: f = !1, error: L = !1, id: U, className: $, onBlur: re } = p, R = !d && !f, le = ke(), K = p.skeleton || le, { currentSize: l } = ge(p.size), { getLabel: n } = Se(), h = He(), ie = be(), se = _e(ie.breakpoints.down("sm")), B = p.presentation ?? ve, m = B === "cards" || B === "auto" && se, k = Ce(N && !m, p.dayPeriodsDate, p.dayPeriodsLocation), E = Pe({ ...p, skeleton: K || m }), { matrix: u, columns: H, startUnit: _, endUnit: C, unitsPerSlot: b, drag: c, hover: ne, focused: I, changeMatrix: T } = E, x = (C - _) / 4, o = O(() => ({ size: l, disabled: d, readOnly: f, error: L, columns: H, unitsPerSlot: b, hours: x, cards: m, dayPeriods: N, periods: k?.periods }), [l, d, f, L, H, b, x, m, N, k]), a = (e) => n(`hours_of_week_picker.${e}`), Y = O(() => ({ full: n("hours_of_week_picker.selected"), partial: n("hours_of_week_picker.partial"), empty: n("hours_of_week_picker.empty") }), [n]), J = O(() => G.map((e) => n(`hours_of_week_picker.${e}`)), [n]), j = [...new Set(D.length === 0 && M ? we : D)], W = O(() => Fe(u), [u]), ce = O(() => Q(u), [u]), de = u.some((e) => Array.from({ length: H }, (r, ue) => q(e, _ + ue * b, b)).includes("partial")), P = c?.end ?? ne, S = P && P.slot < H ? P : null, me = S ? `${J[S.day]}, ${h(_ + S.slot * b)}–${h(_ + (S.slot + 1) * b)}, ${c ? a(c.selected ? "adding" : "removing") : Y[q(u[S.day], _ + S.slot * b, b)]}` : "", F = (e) => {
34
+ p.onChange?.(Q(e));
35
+ };
36
+ return K ? /* @__PURE__ */ t(We, { inputRef: z, label: a("loading"), ownerState: o, className: $ }) : /* @__PURE__ */ s($e, { ownerState: o, className: fe($, i.root), onBlur: (e) => {
37
+ e.currentTarget.contains(e.relatedTarget) || re?.(e);
38
+ }, children: [
39
+ /* @__PURE__ */ s(Ke, { ownerState: o, className: i.header, children: [
40
+ /* @__PURE__ */ t(Ae, { label: a("title"), helperMessage: m ? void 0 : a("instructions"), size: l, disabled: d }),
41
+ /* @__PURE__ */ t(y, { variant: "bodySlim", size: l, color: "text.secondary", children: a(m ? "cards_description" : "description") }),
42
+ !m && /* @__PURE__ */ t(Z, { role: "status", "aria-live": "polite", ownerState: o, className: i.status, children: me })
43
+ ] }),
44
+ R && j.length >= 2 && /* @__PURE__ */ s(Be, { ownerState: o, children: [
45
+ /* @__PURE__ */ t(y, { variant: "captionStandard", size: l, color: "text.secondary", children: a("interval") }),
46
+ /* @__PURE__ */ t(Ie, { role: "group", "aria-label": a("interval"), className: i.slotSelector, children: j.map((e) => /* @__PURE__ */ t(Ye, { type: "button", "aria-label": g(e, n), "aria-pressed": w === e, disabled: d || f, ownerState: o, className: i.slotButton, onClick: () => M?.(e), children: /* @__PURE__ */ t(ot, { size: l, variant: "contained", opacity: !0, color: w === e ? "info" : "default", label: /* @__PURE__ */ t(y, { component: "span", fontFamily: "Jura", variant: "captionStandard", size: l, color: "inherit", children: g(e, n) }) }) }, e)) })
47
+ ] }),
48
+ R && !m && /* @__PURE__ */ s(ee, { ownerState: o, className: i.actions, children: [
49
+ /* @__PURE__ */ t(y, { variant: "captionStandard", size: l, color: "text.secondary", children: a("shortcuts") }),
50
+ oe.map((e, r) => /* @__PURE__ */ t(v, { label: e.label, size: l, variant: "contained", color: "default", disabled: d || f, onClick: () => T(X(e.value)) }, `${e.label}-${r}`)),
51
+ /* @__PURE__ */ t(v, { label: a("copy_monday"), size: l, variant: "contained", color: "default", disabled: d || f, onClick: () => T(De(u, 0, Ee)) })
52
+ ] }),
53
+ !m && de && /* @__PURE__ */ t(Je, { className: i.notice, children: /* @__PURE__ */ t(Me, { severity: "info", size: l, label: a("partial_notice") }) }),
54
+ m ? /* @__PURE__ */ s(pe, { children: [
55
+ /* @__PURE__ */ s(Z, { role: "status", ownerState: o, className: i.status, children: [
56
+ a("interval_hint"),
57
+ " ",
58
+ g(w, n)
59
+ ] }),
60
+ /* @__PURE__ */ t(Te, { ...p, ownerState: o, inputRef: z, id: U, formatHour: h })
61
+ ] }) : /* @__PURE__ */ t(je, { ownerState: o, className: i.viewport, children: /* @__PURE__ */ s(te, { ownerState: o, children: [
62
+ k && /* @__PURE__ */ t(V, { startUnit: _, endUnit: C, ownerState: o, formatHour: h, periods: k.periods }),
63
+ /* @__PURE__ */ s(Ge, { ownerState: o, className: i.axis, children: [
64
+ /* @__PURE__ */ t(A, { ownerState: o }),
65
+ /* @__PURE__ */ t(Ve, { ownerState: { ...o, columns: x }, className: i.track, children: Array.from({ length: x }, (e, r) => _ / 4 + r).map((e, r) => /* @__PURE__ */ t(ye, { title: h(e * 4), size: l, describeChild: !0, children: /* @__PURE__ */ t(Qe, { ownerState: o, children: /* @__PURE__ */ t(qe, { type: "button", "aria-label": h(e * 4), ownerState: o, className: i.axisHour, disabled: d || f, onClick: () => T(Le(u, e)), children: /* @__PURE__ */ t(y, { component: "span", fontFamily: "Jura", variant: "bodyStandard", size: l, color: "text.secondary", children: w === 60 ? h(e * 4).replace(":00", "") : r % 3 === 0 ? h(e * 4) : "" }) }) }) }, e)) }),
66
+ /* @__PURE__ */ t(A, { ownerState: o, children: a("total") })
67
+ ] }),
68
+ /* @__PURE__ */ s(Xe, { ownerState: o, children: [
69
+ k && /* @__PURE__ */ t(V, { startUnit: _, endUnit: C, ownerState: o, formatHour: h, periods: k.periods, background: !0 }),
70
+ /* @__PURE__ */ t(
71
+ te,
72
+ {
73
+ ref: E.gridRef,
74
+ role: "grid",
75
+ "aria-label": p["aria-label"] ?? a("label"),
76
+ "aria-labelledby": p["aria-labelledby"],
77
+ "aria-multiselectable": "true",
78
+ "aria-readonly": f,
79
+ "aria-disabled": d,
80
+ ownerState: o,
81
+ className: i.grid,
82
+ ...E.handlers,
83
+ onFocus: (e) => {
84
+ const r = e.target.closest("[data-hours-cell]");
85
+ r && E.setFocus({ day: Number(r.dataset.day), slot: Number(r.dataset.slot) });
86
+ },
87
+ onClick: (e) => {
88
+ const r = e.target.closest("[data-day-action]");
89
+ r && T(Ue(u, Number(r.dataset.dayAction), _, C));
90
+ },
91
+ children: Ne.map((e) => {
92
+ const r = c && e >= Math.min(c.start.day, c.end.day) && e <= Math.max(c.start.day, c.end.day);
93
+ return /* @__PURE__ */ t(
94
+ xe,
95
+ {
96
+ day: e,
97
+ label: J[e],
98
+ shortLabel: a(`${G[e]}_short`),
99
+ formatHour: h,
100
+ showDayPeriods: N,
101
+ values: u[e],
102
+ startUnit: _,
103
+ unitsPerSlot: b,
104
+ ownerState: o,
105
+ focusedSlot: I.day === e ? I.slot : -1,
106
+ previewStart: r ? Math.min(c.start.slot, c.end.slot) : -1,
107
+ previewEnd: r ? Math.max(c.start.slot, c.end.slot) : -1,
108
+ previewSelected: !!(r && c.selected),
109
+ labels: Y,
110
+ firstCellId: U,
111
+ firstCellRef: z
112
+ },
113
+ e
114
+ );
115
+ })
116
+ }
117
+ )
118
+ ] })
119
+ ] }) }),
120
+ !m && /* @__PURE__ */ t(Re, { ownerState: o }),
121
+ !m && ae && /* @__PURE__ */ t(ze, { ownerState: o, ranges: ce, formatHour: h }),
122
+ /* @__PURE__ */ s(Ze, { ownerState: o, children: [
123
+ /* @__PURE__ */ s(et, { ownerState: o, children: [
124
+ /* @__PURE__ */ s(tt, { ownerState: o, "aria-label": `${a("week_total")}: ${g(W.week, n)}`, "data-testid": "hours-week-total", children: [
125
+ /* @__PURE__ */ t(y, { component: "span", fontFamily: "Jura", variant: "captionDens", size: l, children: g(W.week, n) }),
126
+ /* @__PURE__ */ t(y, { component: "span", variant: "captionDens", size: l, children: a("selected_total") })
127
+ ] }),
128
+ /* @__PURE__ */ s(A, { ownerState: o, className: i.rowTotal, "data-testid": "hours-holiday-total", children: [
129
+ a("holidays_total"),
130
+ ": ",
131
+ g(W.holidays, n)
132
+ ] })
133
+ ] }),
134
+ R && /* @__PURE__ */ s(ee, { ownerState: o, className: i.actions, children: [
135
+ /* @__PURE__ */ t(v, { label: a("invert"), size: l, variant: "text", color: "default", disabled: d || f, onClick: () => F(u.map((e) => e.map((r) => !r))) }),
136
+ /* @__PURE__ */ t(v, { label: a("select_all"), size: l, variant: "text", color: "primary", disabled: d || f, onClick: () => F(u.map((e) => e.map(() => !0))) }),
137
+ /* @__PURE__ */ t(v, { label: a("clear"), size: l, variant: "text", color: "error", disabled: d || f, onClick: () => F(X([])) })
138
+ ] })
139
+ ] })
140
+ ] });
141
+ });
142
+ export {
143
+ Ft as HoursOfWeekPicker
144
+ };
@@ -0,0 +1,3 @@
1
+ import { HoursOfWeekPickerStyles } from './types';
2
+ export declare const hoursOfWeekPickerStyles: HoursOfWeekPickerStyles;
3
+ //# sourceMappingURL=HoursOfWeekPicker.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HoursOfWeekPicker.styles.d.ts","sourceRoot":"","sources":["../../../../../../packages/components/src/components/HoursOfWeekPicker/HoursOfWeekPicker.styles.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAA+B,MAAM,SAAS,CAAC;AAEpF,eAAO,MAAM,uBAAuB,EAAE,uBAmRrC,CAAC"}
@@ -0,0 +1,317 @@
1
+ import { HOURS_OF_WEEK_HOLIDAY_DAY as c } from "./constants.js";
2
+ import { getSizeStyles as l } from "../../utils/getSizeStyles/getSizeStyles.js";
3
+ import { getTypographyStyles as n } from "../../utils/getTypographyStyles.js";
4
+ const y = {
5
+ /**
6
+ * Keep the paper surface borderless in every state; RHF owns validation helpers.
7
+ * Reserve the wider totals column without reducing the minimum time-track width.
8
+ * Mantener la superficie paper sin borde en todos los estados; RHF controla la ayuda de validación.
9
+ * Reservar la columna de totales más ancha sin reducir el mínimo de la pista horaria.
10
+ */
11
+ root: ({ theme: a, ownerState: s }) => ({
12
+ display: "flex",
13
+ flexDirection: "column",
14
+ minWidth: s?.cards ? 0 : `calc(${a.breakpoints.values.md}px + ${a.vars.size.baseSpacings.sp8})`,
15
+ boxSizing: "border-box",
16
+ gap: a.vars.size.baseSpacings.sp4,
17
+ padding: s?.cards ? a.vars.size.baseSpacings.sp4 : a.vars.size.baseSpacings.sp6,
18
+ border: 0,
19
+ borderRadius: a.vars.size.borderRadius.r3,
20
+ // The supplied sh1 design variable has no theme equivalent; preserve its exact fallback color.
21
+ // La variable sh1 suministrada no tiene equivalente en el tema; conservar su color fallback exacto.
22
+ boxShadow: "0 4px 16px 1px var(--customShadowsColors-sh1, rgba(146, 156, 171, 0.08))",
23
+ backgroundColor: a.vars.palette.background.paper,
24
+ color: a.vars.palette.text.primary,
25
+ ...n(a.generalSettings.isMobile, s.size, "bodySlim"),
26
+ ...s?.disabled && { pointerEvents: "none" }
27
+ }),
28
+ /**
29
+ * Separate the title/help from precision controls and keep its Label on captionDens.
30
+ * Separar título/ayuda de los intervalos y aplicar captionDens al Label del título.
31
+ */
32
+ header: ({ theme: a, ownerState: s }) => ({ display: "flex", flexDirection: "column", gap: a.vars.size.baseSpacings.sp2, minWidth: 0, "& .M4LLabel-root.M4LTypography-root": n(a.generalSettings.isMobile, s.size, "captionDens") }),
33
+ /** Let precision controls wrap independently of the horizontal time viewport. */
34
+ interval: ({ theme: a, ownerState: s }) => ({ display: "flex", alignItems: "center", flexWrap: "wrap", gap: a.vars.size.baseSpacings.sp2, ...l(a, s.size, "action", (r) => ({ minHeight: r, height: "auto" })) }),
35
+ /** Group shared chips without introducing a second selector surface. */
36
+ slotSelector: ({ theme: a }) => ({ display: "flex", alignItems: "center", gap: a.vars.size.baseSpacings.sp1 }),
37
+ /**
38
+ * Retain native button semantics and size interval chips with the action token on both surfaces.
39
+ * Conservar la semántica de botón y dimensionar los chips de intervalo con el token action en ambas vistas.
40
+ */
41
+ slotButton: ({ theme: a, ownerState: s }) => ({
42
+ display: "flex",
43
+ alignItems: "center",
44
+ border: 0,
45
+ padding: 0,
46
+ cursor: "pointer",
47
+ background: "transparent",
48
+ borderRadius: a.vars.size.borderRadius["r1-5"],
49
+ "& > .M4LChip-root": l(a, s.size, "action", (r) => ({ height: r, minHeight: r, boxSizing: "border-box" })),
50
+ "&:focus-visible": { outline: a.vars.size.borderStroke.container, outlineColor: a.vars.palette.primary.focusVisible },
51
+ "&:disabled": { cursor: "default", opacity: a.vars.palette.action.disabledOpacity }
52
+ }),
53
+ /**
54
+ * Space caller presets and standard actions, keeping their labels on bodyDens over the Typography primitive.
55
+ * Separar presets y acciones, aplicando bodyDens a sus etiquetas sobre la primitiva Typography.
56
+ */
57
+ actions: ({ theme: a, ownerState: s }) => ({ display: "flex", alignItems: "center", flexWrap: "wrap", gap: a.vars.size.baseSpacings.sp1, "& .M4LButton-textButton.M4LTypography-root": n(a.generalSettings.isMobile, s.size, "bodyDens") }),
58
+ /** Keep the partial-selection explanation within the editor width. */
59
+ notice: () => ({ minWidth: 0 }),
60
+ /** Reserve one grid hover line, even when empty, without clipping the mobile interval hint. */
61
+ status: ({ theme: a, ownerState: s }) => ({ color: a.vars.palette.text.secondary, minWidth: 0, ...n(a.generalSettings.isMobile, s.size, "captionSlim"), ...!s?.cards && { height: "1lh", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" } }),
62
+ /**
63
+ * Anchor shared tooltips without changing column widths, including disabled readonly buttons.
64
+ * Anclar tooltips compartidos sin cambiar anchos, incluidos los botones desactivados en solo lectura.
65
+ */
66
+ tooltipTarget: ({ ownerState: a }) => ({ display: "flex", minWidth: 0, "& > button": { width: "100%", ...(a?.disabled || a?.readOnly) && { pointerEvents: "none" } } }),
67
+ /** Align hour headings with the time track and its side labels. */
68
+ axis: ({ theme: a }) => ({ display: "grid", gridTemplateColumns: `${a.vars.size.baseSpacings["sp7-5"]} minmax(0, 1fr) calc(${a.vars.size.baseSpacings.sp14} + ${a.vars.size.baseSpacings.sp8})`, columnGap: a.vars.size.baseSpacings.sp1, alignItems: "center" }),
69
+ /** Keep every hour actionable while showing sparse labels for subdivided tracks. */
70
+ axisHour: ({ theme: a, ownerState: s }) => ({
71
+ minWidth: 0,
72
+ border: 0,
73
+ padding: 0,
74
+ textAlign: "left",
75
+ whiteSpace: "nowrap",
76
+ background: "transparent",
77
+ color: a.vars.palette.text.secondary,
78
+ cursor: s?.readOnly ? "default" : "pointer",
79
+ minHeight: a.vars.size.baseSpacings.sp4,
80
+ "&:focus-visible": { outline: a.vars.size.borderStroke.container, outlineColor: a.vars.palette.primary.focusVisible }
81
+ }),
82
+ /** Align weekday labels, the editable track, and whole-day totals. */
83
+ row: ({ theme: a, ownerState: s }) => ({ display: "grid", gridTemplateColumns: `${a.vars.size.baseSpacings["sp7-5"]} minmax(0, 1fr) calc(${a.vars.size.baseSpacings.sp14} + ${a.vars.size.baseSpacings.sp8})`, columnGap: a.vars.size.baseSpacings.sp1, alignItems: "center", ...s?.day === c && { marginBlockStart: a.vars.size.baseSpacings.sp3 } }),
84
+ /** Present abbreviated row actions while accessible names retain the complete day. */
85
+ dayButton: ({ theme: a, ownerState: s }) => ({
86
+ minWidth: 0,
87
+ padding: 0,
88
+ border: 0,
89
+ textAlign: "left",
90
+ background: "transparent",
91
+ color: a.vars.palette.text.secondary,
92
+ overflow: "hidden",
93
+ textOverflow: "ellipsis",
94
+ whiteSpace: "nowrap",
95
+ cursor: s?.readOnly ? "default" : "pointer",
96
+ ...l(a, s.size, "action"),
97
+ ...n(a.generalSettings.isMobile, s.size, "bodyStandard"),
98
+ "&:focus-visible": { outline: a.vars.size.borderStroke.container, outlineColor: a.vars.palette.primary.focusVisible }
99
+ }),
100
+ /**
101
+ * Share the remaining width after cell margins so hourly separators never shrink the last subdivision.
102
+ * Keep hour headings on the same full-width track while retaining visual grouping by hour.
103
+ * Repartir el ancho restante tras los márgenes evita que el separador horario estreche la última subdivisión.
104
+ * Mantener los encabezados sobre el mismo ancho de pista y conservar la agrupación visual por hora.
105
+ */
106
+ track: () => ({ display: "flex", minWidth: 0, "& > *": { flex: "1 1 0%" } }),
107
+ /**
108
+ * Use error/primary selection tokens and stronger light fills; lift dark neutrals above the soft tints and retain a distinct focus ring.
109
+ * Usar selección error/primary y vacíos light con más contraste; aclarar neutros dark sobre los tintes y conservar un foco distinguible.
110
+ */
111
+ cell: ({ theme: a, ownerState: s }) => {
112
+ const r = s?.cellState, i = s?.readOnly, e = s?.disabled, o = s?.error ? "error" : "primary", p = e ? a.vars.palette.background.default : i ? a.vars.palette.primary.activeOpacity : a.vars.palette[o].focus, g = a.vars.palette[i && !e ? "primary" : o].selectedOpacity, b = e ? a.vars.palette[o].main : i ? a.vars.palette.primary.focus : p, d = s?.boundary === "hour" ? a.vars.size.borderRadius.r1 : a.vars.size.borderRadius.r0, t = s?.hourEnd ? a.vars.size.borderRadius.r1 : a.vars.size.borderRadius.r0;
113
+ return {
114
+ boxSizing: "border-box",
115
+ minWidth: 0,
116
+ cursor: i ? "default" : "crosshair",
117
+ ...l(a, s.size, "action"),
118
+ border: 0,
119
+ borderRadius: `${d} ${t} ${t} ${d}`,
120
+ marginInlineEnd: s?.hourEnd ? a.vars.size.baseSpacings.sp1 : `calc(${a.vars.size.baseSpacings["sp0-5"]} / 2)`,
121
+ backgroundColor: r === "full" ? p : r === "partial" && (i || e) ? e ? a.vars.palette.background.default : a.vars.palette.background.paper : i || e ? a.vars.palette.background.surface : a.palette.mode === "dark" ? `color-mix(in srgb, ${a.vars.palette.default.enabled} 50%, ${a.vars.palette.default.selected})` : a.vars.palette.default.hover,
122
+ ...r === "full" && !e && { boxShadow: a.vars.customShadows[i ? "primary" : o] },
123
+ // Paint the disabled contour inside the cell without changing flex widths between selected and empty rows.
124
+ // Dibujar el contorno disabled por dentro sin cambiar los anchos flex entre filas seleccionadas y vacías.
125
+ ...e && r !== "empty" && { outline: a.vars.size.borderStroke.container, outlineStyle: "dashed", outlineColor: a.vars.palette.border.secondary, outlineOffset: `calc(${a.vars.size.baseSpacings["sp0-5"]} / -2)` },
126
+ ...r === "partial" && { backgroundImage: `repeating-linear-gradient(135deg, ${b} 0 ${a.vars.size.baseSpacings["sp0-5"]}, ${g} ${a.vars.size.baseSpacings["sp0-5"]} ${a.vars.size.baseSpacings["sp1-5"]})` },
127
+ // Readonly retains saved selection and keyboard focus, but has no editing preview.
128
+ // Solo lectura conserva selección y foco de teclado, sin previsualización de edición.
129
+ ...s?.preview && !i && !s?.disabled && {
130
+ backgroundImage: "none",
131
+ boxShadow: "none",
132
+ backgroundColor: s.preview === "add" ? a.vars.palette[o].selectedOpacity : a.vars.palette.default.hover,
133
+ ...s.preview === "remove" && { outline: a.vars.size.borderStroke.container, outlineStyle: "dashed", outlineColor: a.vars.palette.default.focus, outlineOffset: `calc(${a.vars.size.baseSpacings["sp0-5"]} / -2)` }
134
+ },
135
+ ...!i && !s?.disabled && !s?.preview && { "&:hover": { backgroundColor: r === "full" ? a.vars.palette[o].active : a.palette.mode === "dark" ? `color-mix(in srgb, ${a.vars.palette.default.hover} 50%, ${a.vars.palette.default.selected})` : a.vars.palette.default.active } },
136
+ "&:focus-visible": { position: "relative", zIndex: 1, outline: a.vars.size.borderStroke.container, outlineColor: a.vars.palette.primary.main, outlineOffset: `calc(${a.vars.size.baseSpacings["sp0-5"]} * -1)` }
137
+ };
138
+ },
139
+ /**
140
+ * Keep complete durations on one line so totals cannot change the row height.
141
+ * Mantener las duraciones completas en una línea para que los totales no cambien la altura de la fila.
142
+ */
143
+ rowTotal: ({ theme: a, ownerState: s }) => ({ textAlign: "right", whiteSpace: "nowrap", color: a.vars.palette.text.secondary, ...n(a.generalSettings.isMobile, s.size, "bodySlim") }),
144
+ /** Keep the selection legend separate from the scrollable grid. */
145
+ legend: ({ theme: a }) => ({ display: "flex", alignItems: "center", flexWrap: "wrap", columnGap: a.vars.size.baseSpacings.sp4, rowGap: a.vars.size.baseSpacings.sp1, color: a.vars.palette.text.secondary }),
146
+ /** Pair each legend swatch with its readable explanation. */
147
+ legendItem: ({ theme: a }) => ({ display: "flex", alignItems: "center", gap: a.vars.size.baseSpacings.sp2 }),
148
+ /** Mirror cell states and period semantics without relying on color alone. */
149
+ swatch: ({ theme: a, ownerState: s }) => {
150
+ const r = s?.error ? "error" : "primary", i = s?.readOnly || s?.disabled ? a.vars.palette.primary.activeOpacity : a.vars.palette[r].focus, e = a.vars.palette[s?.readOnly && !s?.disabled ? "primary" : r].selectedOpacity, o = s?.disabled ? a.vars.palette[r].main : s?.readOnly ? a.vars.palette.primary.focus : i;
151
+ return {
152
+ width: a.vars.size.baseSpacings.sp3,
153
+ height: a.vars.size.baseSpacings.sp3,
154
+ flexShrink: 0,
155
+ borderRadius: a.vars.size.borderRadius.r1,
156
+ backgroundColor: s?.legendState === "full" ? i : s?.legendState === "partial" && (s?.readOnly || s?.disabled) ? s?.disabled ? a.vars.palette.background.default : a.vars.palette.background.paper : s?.legendState === "preview" ? a.vars.palette[r].selectedOpacity : s?.readOnly || s?.disabled ? a.vars.palette.background.surface : a.palette.mode === "dark" ? `color-mix(in srgb, ${a.vars.palette.default.enabled} 50%, ${a.vars.palette.default.selected})` : a.vars.palette.default.hover,
157
+ ...s?.legendState === "partial" && { backgroundImage: `repeating-linear-gradient(135deg, ${o} 0 ${a.vars.size.baseSpacings["sp0-5"]}, ${e} ${a.vars.size.baseSpacings["sp0-5"]} ${a.vars.size.baseSpacings["sp1-5"]})` },
158
+ ...s?.legendState === "full" && (s?.readOnly || s?.disabled) && { boxShadow: a.vars.customShadows.primary },
159
+ ...s?.disabled && s?.legendState === "partial" && { boxSizing: "border-box", border: a.vars.size.borderStroke.container, borderStyle: "dashed", borderColor: a.vars.palette.border.secondary },
160
+ ...s?.legendState === "disabled" && { background: "transparent", border: a.vars.size.borderStroke.container, borderStyle: "dashed", borderColor: a.vars.palette.border.secondary },
161
+ ...s?.period && {
162
+ backgroundColor: `color-mix(in srgb, ${a.vars.palette[s.period === "daytime" ? "warning" : "info"].focusOpacity} 50%, transparent)`,
163
+ border: a.vars.size.borderStroke.container,
164
+ borderColor: s.period === "daytime" ? a.vars.palette.chips.orange.contained.color : a.vars.palette.info.semanticText
165
+ },
166
+ ...s?.periodBoundary && { width: a.vars.size.baseSpacings["sp0-5"], backgroundColor: a.vars.palette.warning.semanticText }
167
+ };
168
+ },
169
+ /** Lay out the normalized weekly summary as readable lines. */
170
+ summary: ({ theme: a }) => ({ display: "flex", flexDirection: "column", gap: a.vars.size.baseSpacings.sp2 }),
171
+ /** Use two reading columns on desktop and collapse naturally in narrow containers. */
172
+ summaryDays: ({ theme: a }) => ({ display: "grid", gridTemplateColumns: "repeat(2, minmax(0, 1fr))", gap: a.vars.size.baseSpacings.sp1, columnGap: a.vars.size.baseSpacings.sp6, [a.breakpoints.down("sm")]: { gridTemplateColumns: "minmax(0, 1fr)" } }),
173
+ /** Give day names a stable column beside wrapping range chips. */
174
+ summaryDay: ({ theme: a }) => ({ display: "grid", gridTemplateColumns: `calc(${a.vars.size.baseSpacings.sp10} * 2) minmax(0, 1fr)`, alignItems: "center", gap: a.vars.size.baseSpacings.sp1 }),
175
+ /** Wrap the shared range chips without shrinking their time labels. */
176
+ summaryRanges: ({ theme: a }) => ({ display: "flex", flexWrap: "wrap", alignItems: "center", gap: a.vars.size.baseSpacings.sp1 }),
177
+ /** Wrap long daily summaries within the available editor width. */
178
+ summaryRange: () => ({ overflowWrap: "anywhere" }),
179
+ /** Keep the loading silhouette inside the same responsive paper surface as the editor.
180
+ * Mantener la silueta de carga dentro de la misma superficie paper adaptable del editor.
181
+ */
182
+ skeleton: () => ({ width: "100%" }),
183
+ /** Arrange loading sections with the Figma spacing, independently from interactive controls.
184
+ * Organizar las secciones de carga con el espaciado de Figma, independientemente de los controles.
185
+ */
186
+ skeletonGroup: ({ theme: a, ownerState: s }) => ({
187
+ display: "flex",
188
+ flexDirection: ["interval", "row", "footer"].includes(String(s?.skeletonGroup)) ? "row" : "column",
189
+ alignItems: "flex-start",
190
+ width: "100%",
191
+ minWidth: 0,
192
+ gap: s?.skeletonGroup === "content" ? a.vars.size.baseSpacings.sp4 : s?.skeletonGroup === "footer" ? a.vars.size.baseSpacings.sp2 : a.vars.size.baseSpacings.sp1,
193
+ ...s?.skeletonGroup === "footer" && { justifyContent: "space-between" }
194
+ }),
195
+ /** Size shared Skeleton bones with existing spacing/action tokens; the local selector overrides its full-size rounded default.
196
+ * Dimensionar los bloques compartidos con tokens de espaciado/action; el selector local ajusta el tamaño rounded predeterminado.
197
+ */
198
+ skeletonBone: ({ theme: a, ownerState: s }) => {
199
+ const r = a.vars.size.baseSpacings, i = s.skeletonBone ?? "track", e = {
200
+ title: { width: `calc(${r.sp10} * 3 + ${r.sp5})`, height: r.sp4 },
201
+ description: { width: `calc(${r.sp10} * ${s?.cards ? 6 : 9})`, height: r.sp3 },
202
+ intervalLabel: { width: r.sp14 },
203
+ intervalHour: { width: r.sp9 },
204
+ intervalMinute: { width: r.sp13 },
205
+ dayLabel: { width: r["sp7-5"], height: r["sp3-5"] },
206
+ track: { flex: 1 },
207
+ dayCard: { height: r.sp14 },
208
+ summary: { width: `calc(${r.sp10} * 3 - ${r["sp2-5"]})`, height: r["sp3-5"] },
209
+ actions: { width: `calc(${r.sp10} * 4 - ${r["sp2-5"]})` }
210
+ };
211
+ return { "&.MuiSkeleton-root.M4lclassCssSpecificity": {
212
+ width: "100%",
213
+ minWidth: 0,
214
+ maxWidth: "100%",
215
+ flexShrink: 1,
216
+ borderRadius: a.vars.size.borderRadius.r2,
217
+ ...l(a, s.size, "action"),
218
+ ...e[i]
219
+ } };
220
+ },
221
+ /** Contain the time viewport while the root owns the fixed resize minimum. */
222
+ viewport: () => ({ overflow: "auto", maxWidth: "100%" }),
223
+ /** Share the available width across slots without stretching the grid when precision changes. */
224
+ grid: ({ theme: a, ownerState: s }) => ({ position: "relative", display: "flex", flexDirection: "column", gap: a.vars.size.baseSpacings.sp1, minWidth: 0, touchAction: s?.readOnly ? "auto" : "none", userSelect: "none" }),
225
+ /** Keep period tints behind cells and confine the continuous boundary overlays to this grid. */
226
+ gridBody: () => ({ position: "relative", isolation: "isolate" }),
227
+ /** Align the three period bands with their clipped time coverage. */
228
+ periodTrack: ({ theme: a }) => ({ position: "relative", height: a.vars.size.baseSpacings.sp7, marginBlockEnd: a.vars.size.baseSpacings.sp1 }),
229
+ /** Keep each local-period label and its numeric interval together, truncating the text after a stable icon. */
230
+ periodBand: ({ theme: a, ownerState: s }) => ({
231
+ position: "absolute",
232
+ insetBlock: 0,
233
+ left: `${s?.startPercent}%`,
234
+ width: `calc(${s?.widthPercent}% - ${a.vars.size.baseSpacings.sp1})`,
235
+ display: "flex",
236
+ alignItems: "center",
237
+ justifyContent: "center",
238
+ gap: a.vars.size.baseSpacings["sp1-5"],
239
+ overflow: "hidden",
240
+ whiteSpace: "nowrap",
241
+ boxSizing: "border-box",
242
+ paddingInline: a.vars.size.baseSpacings["sp0-5"],
243
+ borderRadius: a.vars.size.borderRadius.r2,
244
+ backgroundColor: a.vars.palette[s?.period === "daytime" ? "warning" : "info"].focusOpacity,
245
+ "& > .M4LIcon-root": { flexShrink: 0 },
246
+ "& > .M4LTypography-root": { minWidth: 0, flexShrink: 1, "& > .M4LTypography-root": { marginInlineStart: a.vars.size.baseSpacings["sp1-5"] } }
247
+ }),
248
+ /** Tint only the time track, preserving row labels and totals on the surface. */
249
+ periodBackground: ({ theme: a }) => ({ position: "absolute", insetBlock: 0, left: `calc(${a.vars.size.baseSpacings["sp7-5"]} + ${a.vars.size.baseSpacings.sp1})`, right: `calc(${a.vars.size.baseSpacings.sp14} + ${a.vars.size.baseSpacings.sp8} + ${a.vars.size.baseSpacings.sp1})`, overflow: "hidden", pointerEvents: "none", borderRadius: a.vars.size.borderRadius.r2 }),
250
+ /** Mark the reference date's estimated sunrise and sunset above cells and focus rings without changing selectable hours. */
251
+ periodTint: ({ theme: a, ownerState: s }) => ({
252
+ position: "absolute",
253
+ insetBlock: 0,
254
+ left: `${s?.startPercent}%`,
255
+ width: `${s?.widthPercent}%`,
256
+ backgroundColor: `color-mix(in srgb, ${a.vars.palette[s?.period === "daytime" ? "warning" : "info"].focusOpacity} 50%, transparent)`,
257
+ ...s?.periodBoundary && {
258
+ "&::after": {
259
+ content: '""',
260
+ position: "absolute",
261
+ insetBlock: 0,
262
+ left: 0,
263
+ transform: "translateX(-50%)",
264
+ width: a.vars.size.baseSpacings["sp0-5"],
265
+ backgroundColor: a.vars.palette.warning.semanticText,
266
+ zIndex: 2
267
+ }
268
+ }
269
+ }),
270
+ /** Separate whole-schedule actions from the editable body. */
271
+ footer: ({ theme: a }) => ({ display: "flex", flexWrap: "wrap", alignItems: "center", justifyContent: "space-between", gap: a.vars.size.baseSpacings.sp2, borderTop: a.vars.size.borderStroke.container, borderColor: a.vars.palette.border.secondary, paddingTop: a.vars.size.baseSpacings.sp3 }),
272
+ /** Keep the holiday total distinct from the seven-day weekly duration. */
273
+ totals: ({ theme: a }) => ({ display: "flex", alignItems: "center", flexWrap: "wrap", gap: a.vars.size.baseSpacings.sp3 }),
274
+ /** Stack touch-friendly day cards without a horizontal scrolling grid. */
275
+ cards: ({ theme: a }) => ({ display: "flex", flexDirection: "column", gap: a.vars.size.baseSpacings.sp2, minWidth: 0, outlineColor: a.vars.palette.primary.focusVisible }),
276
+ /**
277
+ * Separate Holidays and keep each day on the paper surface with a secondary divider in both disclosure states.
278
+ * Separar Festivos y mantener cada día sobre paper con un divisor secondary tanto abierto como cerrado.
279
+ */
280
+ card: ({ theme: a, ownerState: s }) => ({ borderBottom: a.vars.size.borderStroke.container, borderColor: a.vars.palette.border.secondary, paddingInline: a.vars.size.baseSpacings.sp3, paddingBottom: a.vars.size.baseSpacings.sp3, backgroundColor: a.vars.palette.background.paper, ...s?.day === c && { marginTop: a.vars.size.baseSpacings.sp3 } }),
281
+ /**
282
+ * Keep disclosure and availability as separate touch targets, with sp2 before the day overview.
283
+ * Mantener desplegar y disponibilidad como controles separados, con sp2 antes de la vista diaria.
284
+ */
285
+ cardHeader: ({ theme: a }) => ({ display: "flex", alignItems: "center", gap: a.vars.size.baseSpacings.sp1, marginBottom: a.vars.size.baseSpacings.sp2 }),
286
+ /**
287
+ * Fill the space beside the switch without Button's width cap or lateral padding; retain its theme-owned interaction states.
288
+ * Ocupar el espacio junto al switch sin el ancho máximo ni padding lateral de Button; conservar sus estados del tema.
289
+ */
290
+ cardToggle: ({ theme: a }) => ({ flex: 1, minWidth: 0, maxWidth: "none", paddingInline: 0, justifyContent: "space-between", gap: a.vars.size.baseSpacings.sp2, "& .M4LButton-textButton": { flex: 1, minWidth: 0, textAlign: "left" } }),
291
+ /** Show the complete 24-hour schedule without intercepting scrolling gestures. */
292
+ overview: ({ theme: a }) => ({ position: "relative", height: a.vars.size.baseSpacings.sp1, backgroundColor: a.vars.palette.default.enabled, borderRadius: a.vars.size.borderRadius.r1, overflow: "hidden" }),
293
+ /** Position each saved range and mirror the grid's readonly fill or disabled outline.
294
+ * Posicionar cada franja guardada y reflejar el relleno readonly o contorno disabled del grid.
295
+ */
296
+ overviewRange: ({ theme: a, ownerState: s }) => ({ position: "absolute", insetBlock: 0, left: `${s?.startPercent}%`, width: `${s?.widthPercent}%`, backgroundColor: s?.disabled ? a.vars.palette.background.default : s?.readOnly ? a.vars.palette.primary.activeOpacity : a.vars.palette[s?.error ? "error" : "primary"].focus, ...s?.disabled && { boxSizing: "border-box", border: a.vars.size.borderStroke.container, borderStyle: "dashed", borderColor: a.vars.palette.border.secondary } }),
297
+ /** Distribute whole-day markers below the expanded overview. */
298
+ overviewAxis: ({ theme: a }) => ({ display: "flex", justifyContent: "space-between", color: a.vars.palette.text.secondary, marginBlock: a.vars.size.baseSpacings.sp1 }),
299
+ /**
300
+ * Keep range text and touch actions within a narrow phone card, with dense action typography.
301
+ * Pair the Button and Typography classes so the primitive's specificity class cannot restore the standard weight.
302
+ * Mantener texto y acciones dentro de la tarjeta móvil, con tipografía densa para las acciones.
303
+ * Combinar las clases de Button y Typography evita que la especificidad de la primitiva restaure el peso estándar.
304
+ */
305
+ rangeRow: ({ theme: a, ownerState: s }) => ({ display: "flex", alignItems: "center", gap: a.vars.size.baseSpacings.sp1, minHeight: a.vars.size.baseSpacings.sp11, borderBottom: a.vars.size.borderStroke.container, borderColor: a.vars.palette.border.disabled, "& > span": { flex: 1, minWidth: 0 }, "& .M4LButton-textButton.M4LTypography-root": n(a.generalSettings.isMobile, s.size, "bodyDens") }),
306
+ /** Lay out two time controls and wrapping actions without covering other days. */
307
+ rangeEditor: ({ theme: a }) => ({ display: "grid", gridTemplateColumns: "repeat(2, minmax(0, 1fr))", alignItems: "end", gap: a.vars.size.baseSpacings.sp2, paddingBlock: a.vars.size.baseSpacings.sp2, "& > div:nth-of-type(n + 3)": { gridColumn: "1 / -1" }, '& > [role="alert"]': { color: a.vars.palette.error.main } }),
308
+ /** Keep the shared label and Select together without overriding the control's design-system styles. */
309
+ timeLabel: ({ theme: a }) => ({ display: "flex", flexDirection: "column", gap: a.vars.size.baseSpacings.sp1, minWidth: 0 }),
310
+ /** Wrap explicit copy destinations within the day card. */
311
+ copyTargets: ({ theme: a }) => ({ display: "flex", flexWrap: "wrap", gap: a.vars.size.baseSpacings.sp2, marginBlock: a.vars.size.baseSpacings.sp2 }),
312
+ /** Keep destination labels and their checkbox in one touch target. */
313
+ copyTarget: ({ theme: a }) => ({ display: "flex", alignItems: "center", minHeight: a.vars.size.baseSpacings.sp11, gap: a.vars.size.baseSpacings.sp1, minWidth: "45%" })
314
+ };
315
+ export {
316
+ y as hoursOfWeekPickerStyles
317
+ };
@@ -0,0 +1,18 @@
1
+ import { HoursOfWeekDay, HoursOfWeekPeriodLocation } from './types';
2
+ export declare const HOURS_OF_WEEK_PICKER_KEY_COMPONENT = "M4LHoursOfWeekPicker";
3
+ export declare const HOURS_OF_WEEK_PICKER_CLASSES: Record<"root" | "grid" | "skeleton" | "footer" | "header" | "legend" | "summary" | "track" | "row" | "cell" | "status" | "actions" | "viewport" | "axis" | "dayButton" | "slotSelector" | "slotButton" | "notice" | "axisHour" | "rowTotal" | "summaryRange" | "cards" | "card" | "cardHeader" | "cardToggle" | "overview" | "overviewRange" | "overviewAxis" | "rangeRow" | "rangeEditor" | "timeLabel" | "copyTargets" | "copyTarget" | "interval" | "gridBody" | "periodTrack" | "periodBand" | "periodBackground" | "periodTint" | "legendItem" | "swatch" | "summaryDays" | "summaryDay" | "summaryRanges" | "totals" | "skeletonGroup" | "skeletonBone" | "tooltipTarget", string>;
4
+ export declare const HOURS_OF_WEEK_DAYS: HoursOfWeekDay[];
5
+ export declare const HOURS_OF_WEEK_DAY_KEYS: readonly ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday", "holidays"];
6
+ export declare const HOURS_OF_WEEK_UNITS = 96;
7
+ export declare const HOURS_OF_WEEK_UNIT_MINUTES = 15;
8
+ export declare const HOURS_OF_WEEK_DEFAULT_SLOT_MINUTES = 30;
9
+ export declare const HOURS_OF_WEEK_DEFAULT_VISIBLE_RANGE: {
10
+ startHour: number;
11
+ endHour: number;
12
+ };
13
+ export declare const HOURS_OF_WEEK_COPY_DAYS: HoursOfWeekDay[];
14
+ export declare const HOURS_OF_WEEK_HOLIDAY_DAY = 7;
15
+ export declare const HOURS_OF_WEEK_DEFAULT_PRESENTATION = "auto";
16
+ export declare const HOURS_OF_WEEK_CARD_SLOT_OPTIONS: readonly [60, 30, 15];
17
+ export declare const HOURS_OF_WEEK_DEFAULT_LOCATION: Readonly<HoursOfWeekPeriodLocation>;
18
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../../packages/components/src/components/HoursOfWeekPicker/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGzE,eAAO,MAAM,kCAAkC,yBAAyB,CAAC;AACzE,eAAO,MAAM,4BAA4B,0pBAAkF,CAAC;AAC5H,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAA6B,CAAC;AAC7E,eAAO,MAAM,sBAAsB,qGAAsG,CAAC;AAC1I,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,mCAAmC;;;CAAgC,CAAC;AACjF,eAAO,MAAM,uBAAuB,EAAE,cAAc,EAAiB,CAAC;AACtE,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,kCAAkC,SAAS,CAAC;AACzD,eAAO,MAAM,+BAA+B,uBAAwB,CAAC;AAErE,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,yBAAyB,CAM9E,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { getComponentClasses as _ } from "../../utils/getComponentSlotRoot.js";
2
+ import { HoursOfWeekPickerSlots as E } from "./slots/HoursOfWeekPickerEnum.js";
3
+ const O = "M4LHoursOfWeekPicker", S = _(O, E), s = [0, 1, 2, 3, 4, 5, 6, 7], e = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday", "holidays"], n = 96, U = 15, a = 30, H = { startHour: 0, endHour: 24 }, R = [1, 2, 3, 4], c = 7, r = "auto", F = [60, 30, 15], K = {
4
+ latitude: 4.711,
5
+ longitude: -74.0721,
6
+ timeZone: "America/Bogota",
7
+ name: "Bogotá, Colombia",
8
+ source: "default"
9
+ };
10
+ export {
11
+ F as HOURS_OF_WEEK_CARD_SLOT_OPTIONS,
12
+ R as HOURS_OF_WEEK_COPY_DAYS,
13
+ s as HOURS_OF_WEEK_DAYS,
14
+ e as HOURS_OF_WEEK_DAY_KEYS,
15
+ K as HOURS_OF_WEEK_DEFAULT_LOCATION,
16
+ r as HOURS_OF_WEEK_DEFAULT_PRESENTATION,
17
+ a as HOURS_OF_WEEK_DEFAULT_SLOT_MINUTES,
18
+ H as HOURS_OF_WEEK_DEFAULT_VISIBLE_RANGE,
19
+ c as HOURS_OF_WEEK_HOLIDAY_DAY,
20
+ S as HOURS_OF_WEEK_PICKER_CLASSES,
21
+ O as HOURS_OF_WEEK_PICKER_KEY_COMPONENT,
22
+ n as HOURS_OF_WEEK_UNITS,
23
+ U as HOURS_OF_WEEK_UNIT_MINUTES
24
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Declare the dictionary required by the weekly schedule picker.
3
+ * Declarar el diccionario requerido por el selector de horario semanal.
4
+ */
5
+ export declare function getHoursOfWeekPickerDictionary(): string[];
6
+ //# sourceMappingURL=dictionary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../../../../../packages/components/src/components/HoursOfWeekPicker/dictionary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,8BAA8B,aAE7C"}
@@ -0,0 +1,6 @@
1
+ function e() {
2
+ return ["hours_of_week_picker"];
3
+ }
4
+ export {
5
+ e as getHoursOfWeekPickerDictionary
6
+ };
@@ -0,0 +1,4 @@
1
+ import { HoursOfWeekCoordinate, HoursOfWeekMatrix } from '../../types';
2
+ /** Apply a rectangle in either direction while preserving unchanged row references. */
3
+ export declare function applyRectangle(matrix: HoursOfWeekMatrix, start: HoursOfWeekCoordinate, end: HoursOfWeekCoordinate, unitsPerSlot: number, startUnit: number, selected: boolean): HoursOfWeekMatrix;
4
+ //# sourceMappingURL=applyRectangle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyRectangle.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/components/src/components/HoursOfWeekPicker/helpers/applyRectangle/applyRectangle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5E,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,iBAAiB,CAWjM"}
@@ -0,0 +1,12 @@
1
+ function M(m, t, a, l, i, o) {
2
+ const h = Math.min(t.day, a.day), p = Math.max(t.day, a.day), s = i + Math.min(t.slot, a.slot) * l, c = i + (Math.max(t.slot, a.slot) + 1) * l;
3
+ return m.map((n, y) => {
4
+ if (y < h || y > p || n.slice(s, c).every((x) => x === o))
5
+ return n;
6
+ const f = [...n];
7
+ return f.fill(o, s, c), f;
8
+ });
9
+ }
10
+ export {
11
+ M as applyRectangle
12
+ };
@@ -0,0 +1,4 @@
1
+ import { HoursOfWeekDay, HoursOfWeekMatrix } from '../../types';
2
+ /** Replace target days with the full source day, including hours outside the viewport. */
3
+ export declare function copyDay(matrix: HoursOfWeekMatrix, source: HoursOfWeekDay, targets: readonly HoursOfWeekDay[]): HoursOfWeekMatrix;
4
+ //# sourceMappingURL=copyDay.d.ts.map