@salt-ds/date-components 0.0.0-snapshot-20260330155807

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 (227) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +63 -0
  3. package/css/salt-date-components.css +633 -0
  4. package/dist-cjs/calendar/Calendar.css.js +6 -0
  5. package/dist-cjs/calendar/Calendar.css.js.map +1 -0
  6. package/dist-cjs/calendar/Calendar.js +154 -0
  7. package/dist-cjs/calendar/Calendar.js.map +1 -0
  8. package/dist-cjs/calendar/CalendarGrid.js +85 -0
  9. package/dist-cjs/calendar/CalendarGrid.js.map +1 -0
  10. package/dist-cjs/calendar/CalendarMonthHeader.css.js +6 -0
  11. package/dist-cjs/calendar/CalendarMonthHeader.css.js.map +1 -0
  12. package/dist-cjs/calendar/CalendarMonthHeader.js +41 -0
  13. package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -0
  14. package/dist-cjs/calendar/CalendarNavigation.css.js +6 -0
  15. package/dist-cjs/calendar/CalendarNavigation.css.js.map +1 -0
  16. package/dist-cjs/calendar/CalendarNavigation.js +334 -0
  17. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -0
  18. package/dist-cjs/calendar/CalendarWeekHeader.css.js +6 -0
  19. package/dist-cjs/calendar/CalendarWeekHeader.css.js.map +1 -0
  20. package/dist-cjs/calendar/CalendarWeekHeader.js +46 -0
  21. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -0
  22. package/dist-cjs/calendar/internal/CalendarContext.js +23 -0
  23. package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -0
  24. package/dist-cjs/calendar/internal/CalendarDay.css.js +6 -0
  25. package/dist-cjs/calendar/internal/CalendarDay.css.js.map +1 -0
  26. package/dist-cjs/calendar/internal/CalendarDay.js +98 -0
  27. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -0
  28. package/dist-cjs/calendar/internal/CalendarMonth.css.js +6 -0
  29. package/dist-cjs/calendar/internal/CalendarMonth.css.js.map +1 -0
  30. package/dist-cjs/calendar/internal/CalendarMonth.js +81 -0
  31. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -0
  32. package/dist-cjs/calendar/internal/createAnnouncement.js +90 -0
  33. package/dist-cjs/calendar/internal/createAnnouncement.js.map +1 -0
  34. package/dist-cjs/calendar/internal/useFocusManagement.js +66 -0
  35. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -0
  36. package/dist-cjs/calendar/internal/utils.js +50 -0
  37. package/dist-cjs/calendar/internal/utils.js.map +1 -0
  38. package/dist-cjs/calendar/useCalendar.js +464 -0
  39. package/dist-cjs/calendar/useCalendar.js.map +1 -0
  40. package/dist-cjs/calendar/useCalendarDay.js +84 -0
  41. package/dist-cjs/calendar/useCalendarDay.js.map +1 -0
  42. package/dist-cjs/calendar/useCalendarSelection.js +353 -0
  43. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
  44. package/dist-cjs/calendar/useDateSelectionAnnouncer.js +52 -0
  45. package/dist-cjs/calendar/useDateSelectionAnnouncer.js.map +1 -0
  46. package/dist-cjs/date-input/DateInput.css.js +6 -0
  47. package/dist-cjs/date-input/DateInput.css.js.map +1 -0
  48. package/dist-cjs/date-input/DateInputRange.js +353 -0
  49. package/dist-cjs/date-input/DateInputRange.js.map +1 -0
  50. package/dist-cjs/date-input/DateInputSingle.js +237 -0
  51. package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
  52. package/dist-cjs/date-picker/DatePicker.js +83 -0
  53. package/dist-cjs/date-picker/DatePicker.js.map +1 -0
  54. package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
  55. package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
  56. package/dist-cjs/date-picker/DatePickerActions.js +119 -0
  57. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
  58. package/dist-cjs/date-picker/DatePickerContext.js +36 -0
  59. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -0
  60. package/dist-cjs/date-picker/DatePickerHelperText.css.js +6 -0
  61. package/dist-cjs/date-picker/DatePickerHelperText.css.js.map +1 -0
  62. package/dist-cjs/date-picker/DatePickerHelperText.js +36 -0
  63. package/dist-cjs/date-picker/DatePickerHelperText.js.map +1 -0
  64. package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
  65. package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
  66. package/dist-cjs/date-picker/DatePickerOverlay.js +49 -0
  67. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
  68. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +164 -0
  69. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
  70. package/dist-cjs/date-picker/DatePickerPanel.css.js +6 -0
  71. package/dist-cjs/date-picker/DatePickerPanel.css.js.map +1 -0
  72. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +250 -0
  73. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -0
  74. package/dist-cjs/date-picker/DatePickerRangeInput.js +206 -0
  75. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
  76. package/dist-cjs/date-picker/DatePickerRangePanel.js +365 -0
  77. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
  78. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +262 -0
  79. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -0
  80. package/dist-cjs/date-picker/DatePickerSingleInput.js +150 -0
  81. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
  82. package/dist-cjs/date-picker/DatePickerSinglePanel.js +20 -0
  83. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
  84. package/dist-cjs/date-picker/DatePickerTrigger.js +32 -0
  85. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -0
  86. package/dist-cjs/date-picker/useDatePicker.js +222 -0
  87. package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
  88. package/dist-cjs/date-picker/useFocusOut.js +43 -0
  89. package/dist-cjs/date-picker/useFocusOut.js.map +1 -0
  90. package/dist-cjs/date-picker/useKeyboard.js +22 -0
  91. package/dist-cjs/date-picker/useKeyboard.js.map +1 -0
  92. package/dist-cjs/index.js +64 -0
  93. package/dist-cjs/index.js.map +1 -0
  94. package/dist-cjs/localization-provider/LocalizationProvider.js +51 -0
  95. package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -0
  96. package/dist-es/calendar/Calendar.css.js +4 -0
  97. package/dist-es/calendar/Calendar.css.js.map +1 -0
  98. package/dist-es/calendar/Calendar.js +152 -0
  99. package/dist-es/calendar/Calendar.js.map +1 -0
  100. package/dist-es/calendar/CalendarGrid.js +83 -0
  101. package/dist-es/calendar/CalendarGrid.js.map +1 -0
  102. package/dist-es/calendar/CalendarMonthHeader.css.js +4 -0
  103. package/dist-es/calendar/CalendarMonthHeader.css.js.map +1 -0
  104. package/dist-es/calendar/CalendarMonthHeader.js +39 -0
  105. package/dist-es/calendar/CalendarMonthHeader.js.map +1 -0
  106. package/dist-es/calendar/CalendarNavigation.css.js +4 -0
  107. package/dist-es/calendar/CalendarNavigation.css.js.map +1 -0
  108. package/dist-es/calendar/CalendarNavigation.js +332 -0
  109. package/dist-es/calendar/CalendarNavigation.js.map +1 -0
  110. package/dist-es/calendar/CalendarWeekHeader.css.js +4 -0
  111. package/dist-es/calendar/CalendarWeekHeader.css.js.map +1 -0
  112. package/dist-es/calendar/CalendarWeekHeader.js +44 -0
  113. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -0
  114. package/dist-es/calendar/internal/CalendarContext.js +20 -0
  115. package/dist-es/calendar/internal/CalendarContext.js.map +1 -0
  116. package/dist-es/calendar/internal/CalendarDay.css.js +4 -0
  117. package/dist-es/calendar/internal/CalendarDay.css.js.map +1 -0
  118. package/dist-es/calendar/internal/CalendarDay.js +96 -0
  119. package/dist-es/calendar/internal/CalendarDay.js.map +1 -0
  120. package/dist-es/calendar/internal/CalendarMonth.css.js +4 -0
  121. package/dist-es/calendar/internal/CalendarMonth.css.js.map +1 -0
  122. package/dist-es/calendar/internal/CalendarMonth.js +79 -0
  123. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -0
  124. package/dist-es/calendar/internal/createAnnouncement.js +87 -0
  125. package/dist-es/calendar/internal/createAnnouncement.js.map +1 -0
  126. package/dist-es/calendar/internal/useFocusManagement.js +64 -0
  127. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -0
  128. package/dist-es/calendar/internal/utils.js +44 -0
  129. package/dist-es/calendar/internal/utils.js.map +1 -0
  130. package/dist-es/calendar/useCalendar.js +462 -0
  131. package/dist-es/calendar/useCalendar.js.map +1 -0
  132. package/dist-es/calendar/useCalendarDay.js +82 -0
  133. package/dist-es/calendar/useCalendarDay.js.map +1 -0
  134. package/dist-es/calendar/useCalendarSelection.js +349 -0
  135. package/dist-es/calendar/useCalendarSelection.js.map +1 -0
  136. package/dist-es/calendar/useDateSelectionAnnouncer.js +50 -0
  137. package/dist-es/calendar/useDateSelectionAnnouncer.js.map +1 -0
  138. package/dist-es/date-input/DateInput.css.js +4 -0
  139. package/dist-es/date-input/DateInput.css.js.map +1 -0
  140. package/dist-es/date-input/DateInputRange.js +350 -0
  141. package/dist-es/date-input/DateInputRange.js.map +1 -0
  142. package/dist-es/date-input/DateInputSingle.js +235 -0
  143. package/dist-es/date-input/DateInputSingle.js.map +1 -0
  144. package/dist-es/date-picker/DatePicker.js +80 -0
  145. package/dist-es/date-picker/DatePicker.js.map +1 -0
  146. package/dist-es/date-picker/DatePickerActions.css.js +4 -0
  147. package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
  148. package/dist-es/date-picker/DatePickerActions.js +117 -0
  149. package/dist-es/date-picker/DatePickerActions.js.map +1 -0
  150. package/dist-es/date-picker/DatePickerContext.js +32 -0
  151. package/dist-es/date-picker/DatePickerContext.js.map +1 -0
  152. package/dist-es/date-picker/DatePickerHelperText.css.js +4 -0
  153. package/dist-es/date-picker/DatePickerHelperText.css.js.map +1 -0
  154. package/dist-es/date-picker/DatePickerHelperText.js +34 -0
  155. package/dist-es/date-picker/DatePickerHelperText.js.map +1 -0
  156. package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
  157. package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
  158. package/dist-es/date-picker/DatePickerOverlay.js +47 -0
  159. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
  160. package/dist-es/date-picker/DatePickerOverlayProvider.js +161 -0
  161. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
  162. package/dist-es/date-picker/DatePickerPanel.css.js +4 -0
  163. package/dist-es/date-picker/DatePickerPanel.css.js.map +1 -0
  164. package/dist-es/date-picker/DatePickerRangeGridPanel.js +248 -0
  165. package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -0
  166. package/dist-es/date-picker/DatePickerRangeInput.js +203 -0
  167. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
  168. package/dist-es/date-picker/DatePickerRangePanel.js +363 -0
  169. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
  170. package/dist-es/date-picker/DatePickerSingleGridPanel.js +260 -0
  171. package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -0
  172. package/dist-es/date-picker/DatePickerSingleInput.js +148 -0
  173. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
  174. package/dist-es/date-picker/DatePickerSinglePanel.js +18 -0
  175. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
  176. package/dist-es/date-picker/DatePickerTrigger.js +30 -0
  177. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -0
  178. package/dist-es/date-picker/useDatePicker.js +220 -0
  179. package/dist-es/date-picker/useDatePicker.js.map +1 -0
  180. package/dist-es/date-picker/useFocusOut.js +41 -0
  181. package/dist-es/date-picker/useFocusOut.js.map +1 -0
  182. package/dist-es/date-picker/useKeyboard.js +20 -0
  183. package/dist-es/date-picker/useKeyboard.js.map +1 -0
  184. package/dist-es/index.js +25 -0
  185. package/dist-es/index.js.map +1 -0
  186. package/dist-es/localization-provider/LocalizationProvider.js +47 -0
  187. package/dist-es/localization-provider/LocalizationProvider.js.map +1 -0
  188. package/dist-types/calendar/Calendar.d.ts +105 -0
  189. package/dist-types/calendar/CalendarGrid.d.ts +27 -0
  190. package/dist-types/calendar/CalendarMonthHeader.d.ts +17 -0
  191. package/dist-types/calendar/CalendarNavigation.d.ts +43 -0
  192. package/dist-types/calendar/CalendarWeekHeader.d.ts +6 -0
  193. package/dist-types/calendar/index.d.ts +9 -0
  194. package/dist-types/calendar/internal/CalendarContext.d.ts +6 -0
  195. package/dist-types/calendar/internal/CalendarDay.d.ts +33 -0
  196. package/dist-types/calendar/internal/CalendarMonth.d.ts +14 -0
  197. package/dist-types/calendar/internal/createAnnouncement.d.ts +24 -0
  198. package/dist-types/calendar/internal/useFocusManagement.d.ts +9 -0
  199. package/dist-types/calendar/internal/utils.d.ts +6 -0
  200. package/dist-types/calendar/useCalendar.d.ts +335 -0
  201. package/dist-types/calendar/useCalendarDay.d.ts +67 -0
  202. package/dist-types/calendar/useCalendarSelection.d.ts +145 -0
  203. package/dist-types/calendar/useDateSelectionAnnouncer.d.ts +6 -0
  204. package/dist-types/date-input/DateInputRange.d.ts +131 -0
  205. package/dist-types/date-input/DateInputSingle.d.ts +99 -0
  206. package/dist-types/date-input/index.d.ts +2 -0
  207. package/dist-types/date-picker/DatePicker.d.ts +52 -0
  208. package/dist-types/date-picker/DatePickerActions.d.ts +79 -0
  209. package/dist-types/date-picker/DatePickerContext.d.ts +172 -0
  210. package/dist-types/date-picker/DatePickerHelperText.d.ts +4 -0
  211. package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
  212. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +106 -0
  213. package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +14 -0
  214. package/dist-types/date-picker/DatePickerRangeInput.d.ts +17 -0
  215. package/dist-types/date-picker/DatePickerRangePanel.d.ts +83 -0
  216. package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +63 -0
  217. package/dist-types/date-picker/DatePickerSingleInput.d.ts +15 -0
  218. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +8 -0
  219. package/dist-types/date-picker/DatePickerTrigger.d.ts +9 -0
  220. package/dist-types/date-picker/index.d.ts +13 -0
  221. package/dist-types/date-picker/useDatePicker.d.ts +121 -0
  222. package/dist-types/date-picker/useFocusOut.d.ts +9 -0
  223. package/dist-types/date-picker/useKeyboard.d.ts +20 -0
  224. package/dist-types/index.d.ts +4 -0
  225. package/dist-types/localization-provider/LocalizationProvider.d.ts +62 -0
  226. package/dist-types/localization-provider/index.d.ts +1 -0
  227. package/package.json +60 -0
@@ -0,0 +1,81 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var core = require('@salt-ds/core');
6
+ var styles = require('@salt-ds/styles');
7
+ var window = require('@salt-ds/window');
8
+ var clsx = require('clsx');
9
+ var LocalizationProvider = require('../../localization-provider/LocalizationProvider.js');
10
+ var CalendarContext = require('./CalendarContext.js');
11
+ var CalendarDay = require('./CalendarDay.js');
12
+ var CalendarMonth$1 = require('./CalendarMonth.css.js');
13
+ var utils = require('./utils.js');
14
+
15
+ function chunkArray(array, chunkSize) {
16
+ const result = [];
17
+ for (let chunkIndex = 0; chunkIndex < array.length; chunkIndex += chunkSize) {
18
+ result.push(array.slice(chunkIndex, chunkIndex + chunkSize));
19
+ }
20
+ return result;
21
+ }
22
+ const withBaseName = core.makePrefixer("saltCalendarMonth");
23
+ const CalendarMonth = react.forwardRef(
24
+ function CalendarMonth2(props, ref) {
25
+ const { className, date, onMouseLeave, CalendarDayProps, ...rest } = props;
26
+ const { dateAdapter } = LocalizationProvider.useLocalization();
27
+ const targetWindow = window.useWindow();
28
+ styles.useComponentCssInjection({
29
+ testId: "salt-calendar-month",
30
+ css: CalendarMonth$1,
31
+ window: targetWindow
32
+ });
33
+ const {
34
+ state: { selectionVariant, timezone = "default" },
35
+ helpers: { setHoveredDate }
36
+ } = CalendarContext.useCalendarContext();
37
+ const handleMouseLeave = (event) => {
38
+ setHoveredDate(event, null);
39
+ onMouseLeave == null ? void 0 : onMouseLeave(event);
40
+ };
41
+ const weeks = react.useMemo(() => {
42
+ const days = utils.generateVisibleDays(dateAdapter, date, timezone);
43
+ return chunkArray(days, 7);
44
+ }, [dateAdapter, date, timezone]);
45
+ return /* @__PURE__ */ jsxRuntime.jsx(
46
+ "div",
47
+ {
48
+ className: clsx.clsx(withBaseName(), className),
49
+ ref,
50
+ onMouseLeave: handleMouseLeave,
51
+ ...rest,
52
+ children: /* @__PURE__ */ jsxRuntime.jsx(
53
+ "div",
54
+ {
55
+ "data-testid": "CalendarGrid",
56
+ className: clsx.clsx(withBaseName("grid"), withBaseName(selectionVariant)),
57
+ children: weeks.map((week) => /* @__PURE__ */ jsxRuntime.jsx(
58
+ "div",
59
+ {
60
+ className: withBaseName("week"),
61
+ children: week.map((day) => /* @__PURE__ */ react.createElement(
62
+ CalendarDay.CalendarDay,
63
+ {
64
+ ...CalendarDayProps,
65
+ key: dateAdapter.format(day, "DD MMM YYYY"),
66
+ date: day,
67
+ month: date
68
+ }
69
+ ))
70
+ },
71
+ `row-${dateAdapter.format(week[0], "DD MMM YYYY")}`
72
+ ))
73
+ }
74
+ )
75
+ }
76
+ );
77
+ }
78
+ );
79
+
80
+ exports.CalendarMonth = CalendarMonth;
81
+ //# sourceMappingURL=CalendarMonth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarMonth.js","sources":["../src/calendar/internal/CalendarMonth.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n forwardRef,\n type MouseEvent,\n type SyntheticEvent,\n useMemo,\n} from \"react\";\nimport { useLocalization } from \"../../localization-provider\";\nimport { useCalendarContext } from \"./CalendarContext\";\nimport { CalendarDay, type CalendarDayProps } from \"./CalendarDay\";\nimport calendarMonthCss from \"./CalendarMonth.css\";\nimport { generateVisibleDays } from \"./utils\";\n\nexport interface CalendarMonthProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Month to render as selectable dates\n */\n date: DateFrameworkType;\n /**\n * Props for the CalendarDay component.\n */\n CalendarDayProps?: Partial<CalendarDayProps>;\n}\n\nfunction chunkArray(array: DateFrameworkType[], chunkSize: number) {\n const result = [];\n for (let chunkIndex = 0; chunkIndex < array.length; chunkIndex += chunkSize) {\n result.push(array.slice(chunkIndex, chunkIndex + chunkSize));\n }\n return result;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarMonth\");\n\nexport const CalendarMonth = forwardRef<HTMLDivElement, CalendarMonthProps>(\n function CalendarMonth(\n props: CalendarMonthProps,\n ref: React.Ref<HTMLDivElement>,\n ) {\n const { className, date, onMouseLeave, CalendarDayProps, ...rest } = props;\n const { dateAdapter } = useLocalization();\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-month\",\n css: calendarMonthCss,\n window: targetWindow,\n });\n\n const {\n state: { selectionVariant, timezone = \"default\" },\n helpers: { setHoveredDate },\n } = useCalendarContext();\n const handleMouseLeave = (event: SyntheticEvent) => {\n setHoveredDate(event, null);\n onMouseLeave?.(event as MouseEvent<HTMLDivElement>);\n };\n\n const weeks = useMemo(() => {\n const days = generateVisibleDays(dateAdapter, date, timezone);\n return chunkArray(days, 7);\n }, [dateAdapter, date, timezone]);\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n ref={ref}\n onMouseLeave={handleMouseLeave}\n {...rest}\n >\n <div\n data-testid=\"CalendarGrid\"\n className={clsx(withBaseName(\"grid\"), withBaseName(selectionVariant))}\n >\n {weeks.map((week) => (\n <div\n key={`row-${dateAdapter.format(week[0], \"DD MMM YYYY\")}`}\n className={withBaseName(\"week\")}\n >\n {week.map((day) => (\n <CalendarDay\n {...CalendarDayProps}\n key={dateAdapter.format(day, \"DD MMM YYYY\")}\n date={day}\n month={date}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CalendarMonth","useLocalization","useWindow","useComponentCssInjection","calendarMonthCss","useCalendarContext","useMemo","generateVisibleDays","jsx","clsx","createElement","CalendarDay"],"mappings":";;;;;;;;;;;;;;AA6BA,SAAS,UAAA,CAAW,OAA4B,SAAA,EAAmB;AACjE,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,IAAS,aAAa,CAAA,EAAG,UAAA,GAAa,KAAA,CAAM,MAAA,EAAQ,cAAc,SAAA,EAAW;AAC3E,IAAA,MAAA,CAAO,KAAK,KAAA,CAAM,KAAA,CAAM,UAAA,EAAY,UAAA,GAAa,SAAS,CAAC,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,MAAA;AACT;AAEA,MAAM,YAAA,GAAeA,kBAAa,mBAAmB,CAAA;AAE9C,MAAM,aAAA,GAAgBC,gBAAA;AAAA,EAC3B,SAASC,cAAAA,CACP,KAAA,EACA,GAAA,EACA;AACA,IAAA,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,cAAc,gBAAA,EAAkB,GAAG,MAAK,GAAI,KAAA;AACrE,IAAA,MAAM,EAAE,WAAA,EAAY,GAAIC,oCAAA,EAAgB;AACxC,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAKC,eAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM;AAAA,MACJ,KAAA,EAAO,EAAE,gBAAA,EAAkB,QAAA,GAAW,SAAA,EAAU;AAAA,MAChD,OAAA,EAAS,EAAE,cAAA;AAAe,QACxBC,kCAAA,EAAmB;AACvB,IAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAA0B;AAClD,MAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAC1B,MAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,KAAA,CAAA;AAAA,IACjB,CAAA;AAEA,IAAA,MAAM,KAAA,GAAQC,cAAQ,MAAM;AAC1B,MAAA,MAAM,IAAA,GAAOC,yBAAA,CAAoB,WAAA,EAAa,IAAA,EAAM,QAAQ,CAAA;AAC5D,MAAA,OAAO,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,IAC3B,CAAA,EAAG,CAAC,WAAA,EAAa,IAAA,EAAM,QAAQ,CAAC,CAAA;AAEhC,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,GAAA;AAAA,QACA,YAAA,EAAc,gBAAA;AAAA,QACb,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAD,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,cAAA;AAAA,YACZ,WAAWC,SAAA,CAAK,YAAA,CAAa,MAAM,CAAA,EAAG,YAAA,CAAa,gBAAgB,CAAC,CAAA;AAAA,YAEnE,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVD,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,gBAE7B,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACTE,mBAAA;AAAA,kBAACC,uBAAA;AAAA,kBAAA;AAAA,oBACE,GAAG,gBAAA;AAAA,oBACJ,GAAA,EAAK,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,aAAa,CAAA;AAAA,oBAC1C,IAAA,EAAM,GAAA;AAAA,oBACN,KAAA,EAAO;AAAA;AAAA,iBAEV;AAAA,eAAA;AAAA,cAVI,OAAO,WAAA,CAAY,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,aAYzD;AAAA;AAAA;AACH;AAAA,KACF;AAAA,EAEJ;AACF;;;;"}
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ function createSingleSelectionAnnouncement(announcementType, state, dateAdapter) {
4
+ switch (announcementType) {
5
+ case "minFocusableDateExceeded":
6
+ return "cannot focus before minimum date";
7
+ case "maxFocusableDateExceeded":
8
+ return "cannot focus beyond maximum date";
9
+ case "dateSelected": {
10
+ const { multiselect, selectedDate } = state;
11
+ if (!selectedDate || multiselect && Array.isArray(selectedDate) && !selectedDate.length) {
12
+ return "cleared date selection";
13
+ }
14
+ if (multiselect && Array.isArray(selectedDate)) {
15
+ const lastSelectedDate = selectedDate[selectedDate.length - 1];
16
+ return `${dateAdapter.format(lastSelectedDate, "dddd D MMMM YYYY")}, selected, ${selectedDate.length} dates in selection`;
17
+ }
18
+ if (!multiselect && selectedDate) {
19
+ return `${dateAdapter.format(selectedDate, "dddd D MMMM YYYY")}, selected`;
20
+ }
21
+ break;
22
+ }
23
+ case "visibleMonthChanged": {
24
+ const { startVisibleMonth, endVisibleMonth } = state;
25
+ const isSingleMonth = dateAdapter.isSame(
26
+ startVisibleMonth,
27
+ endVisibleMonth,
28
+ "month"
29
+ );
30
+ if (isSingleMonth) {
31
+ return `Visible month starts from ${dateAdapter.format(startVisibleMonth, "dddd D MMMM YYYY")}`;
32
+ }
33
+ const endOfMonth = dateAdapter.endOf(endVisibleMonth, "month");
34
+ return `Visible months are from ${dateAdapter.format(startVisibleMonth, "dddd D MMMM YYYY")} to ${dateAdapter.format(endOfMonth, "dddd D MMMM YYYY")}`;
35
+ }
36
+ }
37
+ }
38
+ function createRangeSelectionAnnouncement(announcementType, state, dateAdapter) {
39
+ switch (announcementType) {
40
+ case "minFocusableDateExceeded":
41
+ return "cannot focus before minimum date";
42
+ case "maxFocusableDateExceeded":
43
+ return "cannot focus beyond maximum date";
44
+ case "dateSelected": {
45
+ const { multiselect, selectedDate } = state;
46
+ if (!selectedDate || multiselect && Array.isArray(selectedDate) && !selectedDate.length) {
47
+ return "cleared date selection";
48
+ }
49
+ let startDate;
50
+ let endDate;
51
+ if (multiselect && Array.isArray(selectedDate)) {
52
+ const last = selectedDate[selectedDate.length - 1];
53
+ startDate = last.startDate;
54
+ endDate = last.endDate;
55
+ } else if (!multiselect && selectedDate && typeof selectedDate === "object") {
56
+ const range = selectedDate;
57
+ startDate = range.startDate;
58
+ endDate = range.endDate;
59
+ }
60
+ if (startDate && !endDate) {
61
+ return `Selected start date ${dateAdapter.format(startDate, "dddd D MMMM YYYY")}`;
62
+ }
63
+ if (!startDate && endDate) {
64
+ return `${dateAdapter.format(endDate, "dddd D MMMM YYYY")}, selected as end date`;
65
+ }
66
+ if (startDate && endDate) {
67
+ const multiselectSuffix = multiselect && Array.isArray(selectedDate) ? `, ${selectedDate.length > 1 ? `${selectedDate.length} date ranges in selection` : ""}` : "";
68
+ return `Date range ${dateAdapter.format(startDate, "dddd D MMMM YYYY")} to ${dateAdapter.format(endDate, "dddd D MMMM YYYY")}, selected${multiselectSuffix}`;
69
+ }
70
+ break;
71
+ }
72
+ case "visibleMonthChanged": {
73
+ const { startVisibleMonth, endVisibleMonth } = state;
74
+ const isSingleMonth = dateAdapter.isSame(
75
+ startVisibleMonth,
76
+ endVisibleMonth,
77
+ "month"
78
+ );
79
+ if (isSingleMonth) {
80
+ return `Visible month starts from ${dateAdapter.format(startVisibleMonth, "dddd D MMMM YYYY")}`;
81
+ }
82
+ const endOfMonth = dateAdapter.endOf(endVisibleMonth, "month");
83
+ return `Visible months are from ${dateAdapter.format(startVisibleMonth, "dddd D MMMM YYYY")} to ${dateAdapter.format(endOfMonth, "dddd D MMMM YYYY")}`;
84
+ }
85
+ }
86
+ }
87
+
88
+ exports.createRangeSelectionAnnouncement = createRangeSelectionAnnouncement;
89
+ exports.createSingleSelectionAnnouncement = createSingleSelectionAnnouncement;
90
+ //# sourceMappingURL=createAnnouncement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAnnouncement.js","sources":["../src/calendar/internal/createAnnouncement.ts"],"sourcesContent":["import type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\n\nexport type AnnouncementType =\n | \"minFocusableDateExceeded\"\n | \"maxFocusableDateExceeded\"\n | \"dateSelected\"\n | \"visibleMonthChanged\";\n\nexport type AnnouncerMinMaxFocusState = Record<string, never>;\n\nexport interface AnnouncerVisibleMonthState {\n startVisibleMonth: DateFrameworkType;\n endVisibleMonth: DateFrameworkType;\n}\n\nexport interface AnnouncerRangeDateSelectedState {\n multiselect: boolean;\n selectedDate:\n | Array<{ startDate?: DateFrameworkType; endDate?: DateFrameworkType }>\n | { startDate?: DateFrameworkType; endDate?: DateFrameworkType }\n | null;\n}\n\nexport interface AnnouncerSingleDateSelectedState {\n multiselect: boolean;\n selectedDate: DateFrameworkType | DateFrameworkType[] | null;\n}\n\nexport type DateSelectionAnnouncerState =\n | AnnouncerSingleDateSelectedState\n | AnnouncerRangeDateSelectedState\n | AnnouncerVisibleMonthState\n | AnnouncerMinMaxFocusState;\n\nexport function createSingleSelectionAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n switch (announcementType) {\n case \"minFocusableDateExceeded\":\n return \"cannot focus before minimum date\";\n case \"maxFocusableDateExceeded\":\n return \"cannot focus beyond maximum date\";\n case \"dateSelected\": {\n const { multiselect, selectedDate } =\n state as AnnouncerSingleDateSelectedState;\n if (\n !selectedDate ||\n (multiselect && Array.isArray(selectedDate) && !selectedDate.length)\n ) {\n return \"cleared date selection\";\n }\n if (multiselect && Array.isArray(selectedDate)) {\n const lastSelectedDate = selectedDate[selectedDate.length - 1];\n return `${dateAdapter.format(lastSelectedDate, \"dddd D MMMM YYYY\")}, selected, ${selectedDate.length} dates in selection`;\n }\n if (!multiselect && selectedDate) {\n return `${dateAdapter.format(selectedDate as DateFrameworkType, \"dddd D MMMM YYYY\")}, selected`;\n }\n break;\n }\n case \"visibleMonthChanged\": {\n const { startVisibleMonth, endVisibleMonth } =\n state as AnnouncerVisibleMonthState;\n const isSingleMonth = dateAdapter.isSame(\n startVisibleMonth,\n endVisibleMonth,\n \"month\",\n );\n if (isSingleMonth) {\n return `Visible month starts from ${dateAdapter.format(startVisibleMonth, \"dddd D MMMM YYYY\")}`;\n }\n const endOfMonth = dateAdapter.endOf(endVisibleMonth, \"month\");\n return `Visible months are from ${dateAdapter.format(startVisibleMonth, \"dddd D MMMM YYYY\")} to ${dateAdapter.format(endOfMonth, \"dddd D MMMM YYYY\")}`;\n }\n }\n}\n\nexport function createRangeSelectionAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n switch (announcementType) {\n case \"minFocusableDateExceeded\":\n return \"cannot focus before minimum date\";\n case \"maxFocusableDateExceeded\":\n return \"cannot focus beyond maximum date\";\n case \"dateSelected\": {\n const { multiselect, selectedDate } =\n state as AnnouncerRangeDateSelectedState;\n if (\n !selectedDate ||\n (multiselect && Array.isArray(selectedDate) && !selectedDate.length)\n ) {\n return \"cleared date selection\";\n }\n let startDate: DateFrameworkType | null | undefined;\n let endDate: DateFrameworkType | null | undefined;\n if (multiselect && Array.isArray(selectedDate)) {\n const last = selectedDate[selectedDate.length - 1];\n startDate = last.startDate;\n endDate = last.endDate;\n } else if (\n !multiselect &&\n selectedDate &&\n typeof selectedDate === \"object\"\n ) {\n const range = selectedDate as {\n startDate?: DateFrameworkType | null;\n endDate?: DateFrameworkType | null;\n };\n startDate = range.startDate;\n endDate = range.endDate;\n }\n if (startDate && !endDate) {\n return `Selected start date ${dateAdapter.format(startDate, \"dddd D MMMM YYYY\")}`;\n }\n if (!startDate && endDate) {\n return `${dateAdapter.format(endDate, \"dddd D MMMM YYYY\")}, selected as end date`;\n }\n if (startDate && endDate) {\n const multiselectSuffix =\n multiselect && Array.isArray(selectedDate)\n ? `, ${selectedDate.length > 1 ? `${selectedDate.length} date ranges in selection` : \"\"}`\n : \"\";\n return `Date range ${dateAdapter.format(startDate, \"dddd D MMMM YYYY\")} to ${dateAdapter.format(endDate, \"dddd D MMMM YYYY\")}, selected${multiselectSuffix}`;\n }\n break;\n }\n case \"visibleMonthChanged\": {\n const { startVisibleMonth, endVisibleMonth } =\n state as AnnouncerVisibleMonthState;\n const isSingleMonth = dateAdapter.isSame(\n startVisibleMonth,\n endVisibleMonth,\n \"month\",\n );\n if (isSingleMonth) {\n return `Visible month starts from ${dateAdapter.format(startVisibleMonth, \"dddd D MMMM YYYY\")}`;\n }\n const endOfMonth = dateAdapter.endOf(endVisibleMonth, \"month\");\n return `Visible months are from ${dateAdapter.format(startVisibleMonth, \"dddd D MMMM YYYY\")} to ${dateAdapter.format(endOfMonth, \"dddd D MMMM YYYY\")}`;\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ 'use strict';
2
+
3
+ var LocalizationProvider = require('../../localization-provider/LocalizationProvider.js');
4
+ var CalendarContext = require('./CalendarContext.js');
5
+
6
+ function useFocusManagement({ date }) {
7
+ const { dateAdapter } = LocalizationProvider.useLocalization();
8
+ const {
9
+ helpers: { setFocusedDate }
10
+ } = CalendarContext.useCalendarContext();
11
+ const handleClick = (event) => {
12
+ setFocusedDate(event, date);
13
+ };
14
+ const handleKeyDown = (event) => {
15
+ let newDate;
16
+ switch (event.key) {
17
+ case "ArrowUp":
18
+ newDate = dateAdapter.subtract(date, { weeks: 1 });
19
+ break;
20
+ case "ArrowDown":
21
+ newDate = dateAdapter.add(date, { weeks: 1 });
22
+ break;
23
+ case "ArrowLeft":
24
+ newDate = dateAdapter.subtract(date, { days: 1 });
25
+ break;
26
+ case "ArrowRight":
27
+ newDate = dateAdapter.add(date, { days: 1 });
28
+ break;
29
+ case "Home":
30
+ newDate = dateAdapter.startOf(date, "week");
31
+ break;
32
+ case "End":
33
+ newDate = dateAdapter.endOf(date, "week");
34
+ break;
35
+ case "PageUp":
36
+ if (event.shiftKey) {
37
+ newDate = dateAdapter.subtract(date, { years: 1 });
38
+ } else {
39
+ newDate = dateAdapter.subtract(date, { months: 1 });
40
+ }
41
+ break;
42
+ case "PageDown":
43
+ if (event.shiftKey) {
44
+ newDate = dateAdapter.add(date, { years: 1 });
45
+ } else {
46
+ newDate = dateAdapter.add(date, { months: 1 });
47
+ }
48
+ break;
49
+ }
50
+ if (newDate && dateAdapter.compare(newDate, date) !== 0) {
51
+ event.preventDefault();
52
+ setFocusedDate(event, newDate);
53
+ }
54
+ };
55
+ const handleFocus = (event) => {
56
+ setFocusedDate(event, date);
57
+ };
58
+ return {
59
+ handleClick,
60
+ handleKeyDown,
61
+ handleFocus
62
+ };
63
+ }
64
+
65
+ exports.useFocusManagement = useFocusManagement;
66
+ //# sourceMappingURL=useFocusManagement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusManagement.js","sources":["../src/calendar/internal/useFocusManagement.ts"],"sourcesContent":["import type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport type {\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n} from \"react\";\nimport { useLocalization } from \"../../localization-provider\";\nimport { useCalendarContext } from \"./CalendarContext\";\n\nexport function useFocusManagement({ date }: { date: DateFrameworkType }) {\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const {\n helpers: { setFocusedDate },\n } = useCalendarContext();\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setFocusedDate(event, date);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n let newDate: DateFrameworkType | undefined;\n switch (event.key) {\n case \"ArrowUp\":\n newDate = dateAdapter.subtract(date, { weeks: 1 });\n break;\n case \"ArrowDown\":\n newDate = dateAdapter.add(date, { weeks: 1 });\n break;\n case \"ArrowLeft\":\n newDate = dateAdapter.subtract(date, { days: 1 });\n break;\n case \"ArrowRight\":\n newDate = dateAdapter.add(date, { days: 1 });\n break;\n case \"Home\":\n newDate = dateAdapter.startOf(date, \"week\");\n break;\n case \"End\":\n newDate = dateAdapter.endOf(date, \"week\");\n break;\n case \"PageUp\":\n if (event.shiftKey) {\n newDate = dateAdapter.subtract(date, { years: 1 });\n } else {\n newDate = dateAdapter.subtract(date, { months: 1 });\n }\n break;\n case \"PageDown\":\n if (event.shiftKey) {\n newDate = dateAdapter.add(date, { years: 1 });\n } else {\n newDate = dateAdapter.add(date, { months: 1 });\n }\n break;\n default:\n }\n if (newDate && dateAdapter.compare(newDate, date) !== 0) {\n event.preventDefault();\n setFocusedDate(event, newDate);\n }\n };\n\n const handleFocus: FocusEventHandler<HTMLButtonElement> = (event) => {\n setFocusedDate(event, date);\n };\n\n return {\n handleClick,\n handleKeyDown,\n handleFocus,\n };\n}\n"],"names":["useLocalization","useCalendarContext"],"mappings":";;;;;AASO,SAAS,kBAAA,CAAmB,EAAE,IAAA,EAAK,EAAgC;AACxE,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIA,oCAAA,EAAmC;AAC3D,EAAA,MAAM;AAAA,IACJ,OAAA,EAAS,EAAE,cAAA;AAAe,MACxBC,kCAAA,EAAmB;AACvB,EAAA,MAAM,WAAA,GAAoD,CAAC,KAAA,KAAU;AACnE,IAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,aAAA,GAAyD,CAAC,KAAA,KAAU;AACxE,IAAA,IAAI,OAAA;AACJ,IAAA,QAAQ,MAAM,GAAA;AAAK,MACjB,KAAK,SAAA;AACH,QAAA,OAAA,GAAU,YAAY,QAAA,CAAS,IAAA,EAAM,EAAE,KAAA,EAAO,GAAG,CAAA;AACjD,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,OAAA,GAAU,YAAY,GAAA,CAAI,IAAA,EAAM,EAAE,KAAA,EAAO,GAAG,CAAA;AAC5C,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,OAAA,GAAU,YAAY,QAAA,CAAS,IAAA,EAAM,EAAE,IAAA,EAAM,GAAG,CAAA;AAChD,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,OAAA,GAAU,YAAY,GAAA,CAAI,IAAA,EAAM,EAAE,IAAA,EAAM,GAAG,CAAA;AAC3C,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,OAAA,GAAU,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAC1C,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,OAAA,GAAU,WAAA,CAAY,KAAA,CAAM,IAAA,EAAM,MAAM,CAAA;AACxC,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,IAAI,MAAM,QAAA,EAAU;AAClB,UAAA,OAAA,GAAU,YAAY,QAAA,CAAS,IAAA,EAAM,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,QACnD,CAAA,MAAO;AACL,UAAA,OAAA,GAAU,YAAY,QAAA,CAAS,IAAA,EAAM,EAAE,MAAA,EAAQ,GAAG,CAAA;AAAA,QACpD;AACA,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAI,MAAM,QAAA,EAAU;AAClB,UAAA,OAAA,GAAU,YAAY,GAAA,CAAI,IAAA,EAAM,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,OAAA,GAAU,YAAY,GAAA,CAAI,IAAA,EAAM,EAAE,MAAA,EAAQ,GAAG,CAAA;AAAA,QAC/C;AACA,QAAA;AACF;AAEF,IAAA,IAAI,WAAW,WAAA,CAAY,OAAA,CAAQ,OAAA,EAAS,IAAI,MAAM,CAAA,EAAG;AACvD,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,cAAA,CAAe,OAAO,OAAO,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAoD,CAAC,KAAA,KAAU;AACnE,IAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ function daysOfWeek(dateAdapter, format) {
4
+ return Array.from(
5
+ { length: 7 },
6
+ (_, day) => dateAdapter.getDayOfWeekName(day, format)
7
+ );
8
+ }
9
+ function generateMonthsForYear(dateAdapter, currentYear) {
10
+ const startOfYear = dateAdapter.startOf(currentYear, "year");
11
+ return Array.from(
12
+ { length: 12 },
13
+ (_, month) => dateAdapter.add(startOfYear, { months: month })
14
+ );
15
+ }
16
+ function generateVisibleDays(dateAdapter, currentMonth, timezone) {
17
+ const totalDays = 6 * 7;
18
+ const startDate = dateAdapter.startOf(
19
+ dateAdapter.startOf(currentMonth, "month"),
20
+ "week"
21
+ );
22
+ return [...Array(totalDays).keys()].map((dayDelta) => {
23
+ let day = dateAdapter.add(startDate, { days: dayDelta });
24
+ day = dateAdapter.setTimezone(day, timezone);
25
+ return day;
26
+ });
27
+ }
28
+ function monthDiff(dateAdapter, a, b) {
29
+ const aMonth = dateAdapter.getMonth(a);
30
+ const aYear = dateAdapter.getYear(a);
31
+ const bMonth = dateAdapter.getMonth(b);
32
+ const bYear = dateAdapter.getYear(b);
33
+ return bMonth - aMonth + 12 * (bYear - aYear);
34
+ }
35
+ function generateDatesForMonth(dateAdapter, date) {
36
+ const startDate = dateAdapter.startOf(date, "month");
37
+ const endDate = dateAdapter.endOf(date, "month");
38
+ const dates = [];
39
+ for (let currentDate = startDate; dateAdapter.compare(currentDate, endDate) <= 0; currentDate = dateAdapter.add(currentDate, { days: 1 })) {
40
+ dates.push(currentDate);
41
+ }
42
+ return dates;
43
+ }
44
+
45
+ exports.daysOfWeek = daysOfWeek;
46
+ exports.generateDatesForMonth = generateDatesForMonth;
47
+ exports.generateMonthsForYear = generateMonthsForYear;
48
+ exports.generateVisibleDays = generateVisibleDays;
49
+ exports.monthDiff = monthDiff;
50
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../src/calendar/internal/utils.ts"],"sourcesContent":["import type {\n DateFrameworkType,\n SaltDateAdapter,\n Timezone,\n} from \"@salt-ds/date-adapters\";\n\nexport function daysOfWeek(\n dateAdapter: SaltDateAdapter,\n format: \"long\" | \"short\" | \"narrow\",\n) {\n return Array.from({ length: 7 }, (_, day) =>\n dateAdapter.getDayOfWeekName(day, format),\n );\n}\n\nexport function generateMonthsForYear(\n dateAdapter: SaltDateAdapter,\n currentYear: DateFrameworkType,\n) {\n const startOfYear = dateAdapter.startOf(currentYear, \"year\");\n return Array.from({ length: 12 }, (_, month) =>\n dateAdapter.add(startOfYear, { months: month }),\n );\n}\n\nexport function generateVisibleDays(\n dateAdapter: SaltDateAdapter,\n currentMonth: DateFrameworkType,\n timezone: Timezone,\n) {\n const totalDays = 6 * 7;\n const startDate = dateAdapter.startOf(\n dateAdapter.startOf(currentMonth, \"month\"),\n \"week\",\n );\n return [...Array(totalDays).keys()].map((dayDelta) => {\n let day = dateAdapter.add(startDate, { days: dayDelta });\n day = dateAdapter.setTimezone(day, timezone);\n return day;\n });\n}\n\nexport function monthDiff(\n dateAdapter: SaltDateAdapter,\n a: DateFrameworkType,\n b: DateFrameworkType,\n) {\n const aMonth = dateAdapter.getMonth(a);\n const aYear = dateAdapter.getYear(a);\n const bMonth = dateAdapter.getMonth(b);\n const bYear = dateAdapter.getYear(b);\n\n return bMonth - aMonth + 12 * (bYear - aYear);\n}\n\nexport function generateDatesForMonth(\n dateAdapter: SaltDateAdapter,\n date: DateFrameworkType,\n): DateFrameworkType[] {\n const startDate = dateAdapter.startOf(date, \"month\");\n const endDate = dateAdapter.endOf(date, \"month\");\n const dates: DateFrameworkType[] = [];\n for (\n let currentDate = startDate;\n dateAdapter.compare(currentDate, endDate) <= 0;\n currentDate = dateAdapter.add(currentDate, { days: 1 })\n ) {\n dates.push(currentDate);\n }\n return dates;\n}\n"],"names":[],"mappings":";;AAMO,SAAS,UAAA,CACd,aACA,MAAA,EACA;AACA,EAAA,OAAO,KAAA,CAAM,IAAA;AAAA,IAAK,EAAE,QAAQ,CAAA,EAAE;AAAA,IAAG,CAAC,CAAA,EAAG,GAAA,KACnC,WAAA,CAAY,gBAAA,CAAiB,KAAK,MAAM;AAAA,GAC1C;AACF;AAEO,SAAS,qBAAA,CACd,aACA,WAAA,EACA;AACA,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,WAAA,EAAa,MAAM,CAAA;AAC3D,EAAA,OAAO,KAAA,CAAM,IAAA;AAAA,IAAK,EAAE,QAAQ,EAAA,EAAG;AAAA,IAAG,CAAC,GAAG,KAAA,KACpC,WAAA,CAAY,IAAI,WAAA,EAAa,EAAE,MAAA,EAAQ,KAAA,EAAO;AAAA,GAChD;AACF;AAEO,SAAS,mBAAA,CACd,WAAA,EACA,YAAA,EACA,QAAA,EACA;AACA,EAAA,MAAM,YAAY,CAAA,GAAI,CAAA;AACtB,EAAA,MAAM,YAAY,WAAA,CAAY,OAAA;AAAA,IAC5B,WAAA,CAAY,OAAA,CAAQ,YAAA,EAAc,OAAO,CAAA;AAAA,IACzC;AAAA,GACF;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,SAAS,CAAA,CAAE,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,QAAA,KAAa;AACpD,IAAA,IAAI,MAAM,WAAA,CAAY,GAAA,CAAI,WAAW,EAAE,IAAA,EAAM,UAAU,CAAA;AACvD,IAAA,GAAA,GAAM,WAAA,CAAY,WAAA,CAAY,GAAA,EAAK,QAAQ,CAAA;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEO,SAAS,SAAA,CACd,WAAA,EACA,CAAA,EACA,CAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA;AACnC,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA;AAEnC,EAAA,OAAO,MAAA,GAAS,MAAA,GAAS,EAAA,IAAM,KAAA,GAAQ,KAAA,CAAA;AACzC;AAEO,SAAS,qBAAA,CACd,aACA,IAAA,EACqB;AACrB,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAC/C,EAAA,MAAM,QAA6B,EAAC;AACpC,EAAA,KAAA,IACM,cAAc,SAAA,EAClB,WAAA,CAAY,OAAA,CAAQ,WAAA,EAAa,OAAO,CAAA,IAAK,CAAA,EAC7C,WAAA,GAAc,WAAA,CAAY,IAAI,WAAA,EAAa,EAAE,IAAA,EAAM,CAAA,EAAG,CAAA,EACtD;AACA,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,KAAA;AACT;;;;;;;;"}