@prokodo/ui 0.1.15 → 1.0.1

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 (283) hide show
  1. package/LICENSE +187 -26
  2. package/NOTICE +24 -0
  3. package/README.md +32 -302
  4. package/dist/components/RTE/RTE.css +180 -68
  5. package/dist/components/RTE/RTE.module.css +180 -68
  6. package/dist/components/RTE/RTE.module.scss.js +10 -0
  7. package/dist/components/RTE/RTE.view.js +5 -1
  8. package/dist/components/accordion/Accordion.css +120 -67
  9. package/dist/components/accordion/Accordion.module.css +120 -67
  10. package/dist/components/accordion/Accordion.module.scss.js +12 -5
  11. package/dist/components/accordion/Accordion.view.js +3 -3
  12. package/dist/components/autocomplete/Autocomplete.css +111 -95
  13. package/dist/components/autocomplete/Autocomplete.module.css +111 -95
  14. package/dist/components/autocomplete/Autocomplete.module.scss.js +11 -4
  15. package/dist/components/autocomplete/Autocomplete.view.js +3 -1
  16. package/dist/components/avatar/Avatar.css +11 -8
  17. package/dist/components/avatar/Avatar.module.css +11 -8
  18. package/dist/components/avatar/Avatar.module.scss.js +1 -0
  19. package/dist/components/avatar/Avatar.view.js +5 -5
  20. package/dist/components/button/Button.client.js +12 -16
  21. package/dist/components/button/Button.css +85 -137
  22. package/dist/components/button/Button.module.css +85 -137
  23. package/dist/components/button/Button.module.scss.js +15 -19
  24. package/dist/components/button/Button.view.js +6 -2
  25. package/dist/components/calendly/Calendly.css +132 -0
  26. package/dist/components/calendly/Calendly.module.css +132 -0
  27. package/dist/components/calendly/Calendly.module.scss.js +6 -0
  28. package/dist/components/calendly/Calendly.view.js +12 -6
  29. package/dist/components/card/Card.client.js +6 -1
  30. package/dist/components/card/Card.css +67 -32
  31. package/dist/components/card/Card.module.css +67 -32
  32. package/dist/components/card/Card.module.scss.js +8 -2
  33. package/dist/components/card/Card.view.js +3 -3
  34. package/dist/components/carousel/Carousel.client.js +2 -4
  35. package/dist/components/carousel/Carousel.css +8 -4
  36. package/dist/components/carousel/Carousel.module.css +8 -4
  37. package/dist/components/checkbox/Checkbox.css +100 -79
  38. package/dist/components/checkbox/Checkbox.module.css +100 -79
  39. package/dist/components/checkbox/Checkbox.module.scss.js +11 -4
  40. package/dist/components/checkbox/Checkbox.view.js +3 -1
  41. package/dist/components/checkbox-group/CheckboxGroup.css +39 -6
  42. package/dist/components/checkbox-group/CheckboxGroup.module.css +39 -6
  43. package/dist/components/checkbox-group/CheckboxGroup.module.scss.js +8 -0
  44. package/dist/components/checkbox-group/CheckboxGroup.view.js +3 -1
  45. package/dist/components/chip/Chip.css +185 -61
  46. package/dist/components/chip/Chip.module.css +185 -61
  47. package/dist/components/chip/Chip.module.scss.js +13 -17
  48. package/dist/components/chip/Chip.view.js +3 -4
  49. package/dist/components/datePicker/DatePicker.client.js +211 -66
  50. package/dist/components/datePicker/DatePicker.css +940 -0
  51. package/dist/components/datePicker/DatePicker.module.css +940 -0
  52. package/dist/components/datePicker/DatePicker.module.scss.js +62 -0
  53. package/dist/components/datePicker/DatePicker.server.js +31 -1
  54. package/dist/components/datePicker/DatePicker.utils.js +103 -0
  55. package/dist/components/datePicker/DatePicker.view.js +113 -41
  56. package/dist/components/datePicker/DatePickerDialog.view.js +291 -0
  57. package/dist/components/dialog/Dialog.css +107 -132
  58. package/dist/components/dialog/Dialog.module.css +107 -132
  59. package/dist/components/dialog/Dialog.module.scss.js +13 -8
  60. package/dist/components/drawer/Drawer.css +8 -8
  61. package/dist/components/drawer/Drawer.module.css +8 -8
  62. package/dist/components/dynamic-list/DynamicList.css +20 -12
  63. package/dist/components/dynamic-list/DynamicList.module.css +20 -12
  64. package/dist/components/dynamic-list/DynamicList.module.scss.js +1 -0
  65. package/dist/components/dynamic-list/DynamicList.view.js +78 -46
  66. package/dist/components/form/Form.view.js +3 -3
  67. package/dist/components/form/FormField.client.js +51 -2
  68. package/dist/components/form/FormField.server.js +10 -4
  69. package/dist/components/form/FormResponse.js +2 -2
  70. package/dist/components/grid/Grid.css +1 -1
  71. package/dist/components/grid/Grid.module.css +1 -1
  72. package/dist/components/headline/Headline.css +16 -16
  73. package/dist/components/headline/Headline.js +5 -6
  74. package/dist/components/headline/Headline.module.css +16 -16
  75. package/dist/components/headline/Headline.module.scss.js +1 -1
  76. package/dist/components/headline/Headline.variants.js +4 -1
  77. package/dist/components/icon/Icon.css +14 -14
  78. package/dist/components/icon/Icon.module.css +14 -14
  79. package/dist/components/image/Image.css +4 -3
  80. package/dist/components/image/Image.module.css +4 -3
  81. package/dist/components/image-text/ImageText.css +43 -14
  82. package/dist/components/image-text/ImageText.js +61 -53
  83. package/dist/components/image-text/ImageText.module.css +43 -14
  84. package/dist/components/image-text/ImageText.module.scss.js +11 -2
  85. package/dist/components/input/Input.css +197 -115
  86. package/dist/components/input/Input.module.css +197 -115
  87. package/dist/components/input/Input.module.scss.js +19 -3
  88. package/dist/components/input/Input.view.js +87 -57
  89. package/dist/components/inputOTP/InputOTP.client.js +165 -0
  90. package/dist/components/inputOTP/InputOTP.css +155 -7
  91. package/dist/components/inputOTP/InputOTP.js +10 -195
  92. package/dist/components/inputOTP/InputOTP.lazy.js +12 -0
  93. package/dist/components/inputOTP/InputOTP.module.css +155 -7
  94. package/dist/components/inputOTP/InputOTP.module.scss.js +14 -0
  95. package/dist/components/inputOTP/InputOTP.server.js +32 -0
  96. package/dist/components/inputOTP/InputOTP.view.js +117 -0
  97. package/dist/components/label/Label.css +33 -14
  98. package/dist/components/label/Label.js +37 -35
  99. package/dist/components/label/Label.module.css +33 -14
  100. package/dist/components/label/Label.module.scss.js +9 -2
  101. package/dist/components/link/Link.css +13 -13
  102. package/dist/components/link/Link.module.css +13 -13
  103. package/dist/components/link/Link.view.js +14 -12
  104. package/dist/components/list/List.css +71 -32
  105. package/dist/components/list/List.js +25 -8
  106. package/dist/components/list/List.module.css +71 -32
  107. package/dist/components/list/List.module.scss.js +1 -1
  108. package/dist/components/loading/Loading.view.js +22 -2
  109. package/dist/components/lottie/Lottie.css +16 -0
  110. package/dist/components/lottie/Lottie.module.css +16 -0
  111. package/dist/components/lottie/Lottie.module.scss.js +6 -2
  112. package/dist/components/map/Map.css +130 -0
  113. package/dist/components/map/Map.js +5 -2
  114. package/dist/components/map/Map.module.css +130 -0
  115. package/dist/components/map/Map.module.scss.js +6 -0
  116. package/dist/components/pagination/Pagination.css +127 -11
  117. package/dist/components/pagination/Pagination.module.css +127 -11
  118. package/dist/components/pagination/Pagination.module.scss.js +12 -4
  119. package/dist/components/pagination/Pagination.view.js +13 -1
  120. package/dist/components/post-item/PostItem.css +16 -16
  121. package/dist/components/post-item/PostItem.module.css +16 -16
  122. package/dist/components/post-item/PostItem.view.js +14 -5
  123. package/dist/components/post-teaser/PostTeaser.css +13 -13
  124. package/dist/components/post-teaser/PostTeaser.module.css +13 -13
  125. package/dist/components/post-teaser/PostTeaser.view.js +10 -3
  126. package/dist/components/post-widget/PostWidget.css +6 -8
  127. package/dist/components/post-widget/PostWidget.module.css +6 -8
  128. package/dist/components/post-widget/PostWidget.view.js +12 -5
  129. package/dist/components/post-widget-carousel/PostWidgetCarousel.css +7 -7
  130. package/dist/components/post-widget-carousel/PostWidgetCarousel.module.css +7 -7
  131. package/dist/components/post-widget-carousel/PostWidgetCarousel.view.js +30 -13
  132. package/dist/components/progressBar/ProgressBar.css +4 -4
  133. package/dist/components/progressBar/ProgressBar.module.css +4 -4
  134. package/dist/components/progressBar/ProgressBar.view.js +2 -2
  135. package/dist/components/quote/Quote.css +21 -6
  136. package/dist/components/quote/Quote.js +5 -5
  137. package/dist/components/quote/Quote.module.css +21 -6
  138. package/dist/components/quote/Quote.module.scss.js +5 -0
  139. package/dist/components/rating/Rating.css +34 -21
  140. package/dist/components/rating/Rating.module.css +34 -21
  141. package/dist/components/rating/Rating.module.scss.js +8 -0
  142. package/dist/components/rating/Rating.view.js +4 -2
  143. package/dist/components/rich-text/RichText.client.js +3 -3
  144. package/dist/components/rich-text/RichText.css +47 -31
  145. package/dist/components/rich-text/RichText.module.css +47 -31
  146. package/dist/components/rich-text/RichText.server.js +1 -1
  147. package/dist/components/select/Select.client.js +154 -1
  148. package/dist/components/select/Select.css +542 -221
  149. package/dist/components/select/Select.module.css +542 -221
  150. package/dist/components/select/Select.module.scss.js +57 -14
  151. package/dist/components/select/Select.view.js +40 -14
  152. package/dist/components/sidenav/SideNav.client.js +24 -1
  153. package/dist/components/sidenav/SideNav.css +89 -21
  154. package/dist/components/sidenav/SideNav.module.css +89 -21
  155. package/dist/components/sidenav/SideNav.module.scss.js +6 -1
  156. package/dist/components/sidenav/SideNav.view.js +69 -14
  157. package/dist/components/skeleton/Skeleton.css +7 -7
  158. package/dist/components/skeleton/Skeleton.module.css +7 -7
  159. package/dist/components/slider/Slider.css +177 -112
  160. package/dist/components/slider/Slider.module.css +177 -112
  161. package/dist/components/slider/Slider.module.scss.js +11 -2
  162. package/dist/components/slider/Slider.view.js +113 -101
  163. package/dist/components/snackbar/Snackbar.css +125 -64
  164. package/dist/components/snackbar/Snackbar.module.css +125 -64
  165. package/dist/components/snackbar/Snackbar.module.scss.js +11 -13
  166. package/dist/components/snackbar/Snackbar.view.js +2 -2
  167. package/dist/components/stepper/Stepper.client.js +21 -6
  168. package/dist/components/stepper/Stepper.css +46 -11
  169. package/dist/components/stepper/Stepper.module.css +46 -11
  170. package/dist/components/stepper/Stepper.module.scss.js +7 -0
  171. package/dist/components/stepper/Stepper.server.js +2 -0
  172. package/dist/components/stepper/Stepper.view.js +6 -1
  173. package/dist/components/switch/Switch.css +108 -84
  174. package/dist/components/switch/Switch.module.css +108 -84
  175. package/dist/components/switch/Switch.module.scss.js +14 -12
  176. package/dist/components/switch/Switch.view.js +9 -8
  177. package/dist/components/table/Table.css +19 -14
  178. package/dist/components/table/Table.module.css +19 -14
  179. package/dist/components/tabs/Tabs.css +53 -27
  180. package/dist/components/tabs/Tabs.module.css +53 -27
  181. package/dist/components/tabs/Tabs.module.scss.js +7 -2
  182. package/dist/components/tabs/Tabs.view.js +4 -2
  183. package/dist/components/teaser/Teaser.css +5 -5
  184. package/dist/components/teaser/Teaser.js +4 -4
  185. package/dist/components/teaser/Teaser.module.css +5 -5
  186. package/dist/components/tooltip/Tooltip.client.js +14 -4
  187. package/dist/components/tooltip/Tooltip.css +46 -9
  188. package/dist/components/tooltip/Tooltip.module.css +46 -9
  189. package/dist/components/tooltip/Tooltip.module.scss.js +5 -1
  190. package/dist/components/tooltip/Tooltip.view.js +6 -1
  191. package/dist/constants/project.js +1 -1
  192. package/dist/theme.css +3269 -1588
  193. package/dist/tsconfig.build.tsbuildinfo +1 -1
  194. package/dist/types/components/RTE/RTE.d.ts +5 -0
  195. package/dist/types/components/RTE/RTE.lazy.d.ts +5 -0
  196. package/dist/types/components/RTE/RTE.view.d.ts +1 -1
  197. package/dist/types/components/accordion/Accordion.d.ts +1 -1
  198. package/dist/types/components/accordion/Accordion.lazy.d.ts +1 -1
  199. package/dist/types/components/accordion/Accordion.model.d.ts +1 -1
  200. package/dist/types/components/accordion/Accordion.view.d.ts +1 -1
  201. package/dist/types/components/autocomplete/Autocomplete.model.d.ts +2 -0
  202. package/dist/types/components/autocomplete/Autocomplete.view.d.ts +1 -1
  203. package/dist/types/components/avatar/Avatar.d.ts +1 -1
  204. package/dist/types/components/avatar/Avatar.lazy.d.ts +1 -1
  205. package/dist/types/components/avatar/Avatar.model.d.ts +1 -1
  206. package/dist/types/components/avatar/Avatar.view.d.ts +1 -1
  207. package/dist/types/components/calendly/Calendly.view.d.ts +1 -1
  208. package/dist/types/components/card/Card.model.d.ts +1 -1
  209. package/dist/types/components/card/Card.view.d.ts +1 -1
  210. package/dist/types/components/checkbox/Checkbox.d.ts +1 -0
  211. package/dist/types/components/checkbox/Checkbox.lazy.d.ts +1 -0
  212. package/dist/types/components/checkbox/Checkbox.model.d.ts +2 -0
  213. package/dist/types/components/checkbox/Checkbox.view.d.ts +1 -1
  214. package/dist/types/components/checkbox-group/CheckboxGroup.model.d.ts +2 -0
  215. package/dist/types/components/checkbox-group/CheckboxGroup.view.d.ts +1 -1
  216. package/dist/types/components/datePicker/DatePicker.model.d.ts +70 -1
  217. package/dist/types/components/datePicker/DatePicker.utils.d.ts +10 -0
  218. package/dist/types/components/datePicker/DatePicker.view.d.ts +7 -4
  219. package/dist/types/components/datePicker/DatePickerDialog.view.d.ts +4 -0
  220. package/dist/types/components/dynamic-list/DynamicList.model.d.ts +2 -0
  221. package/dist/types/components/dynamic-list/DynamicList.view.d.ts +1 -1
  222. package/dist/types/components/form/Form.d.ts +1 -1
  223. package/dist/types/components/form/Form.lazy.d.ts +1 -1
  224. package/dist/types/components/form/Form.model.d.ts +19 -4
  225. package/dist/types/components/form/FormField.client.d.ts +2 -2
  226. package/dist/types/components/form/FormField.d.ts +1 -1
  227. package/dist/types/components/form/FormField.lazy.d.ts +1 -1
  228. package/dist/types/components/form/FormField.server.d.ts +2 -2
  229. package/dist/types/components/headline/Headline.model.d.ts +1 -1
  230. package/dist/types/components/input/Input.model.d.ts +8 -1
  231. package/dist/types/components/input/Input.view.d.ts +1 -1
  232. package/dist/types/components/inputOTP/InputOTP.client.d.ts +4 -0
  233. package/dist/types/components/inputOTP/InputOTP.d.ts +10 -3
  234. package/dist/types/components/inputOTP/InputOTP.lazy.d.ts +11 -0
  235. package/dist/types/components/inputOTP/InputOTP.model.d.ts +10 -0
  236. package/dist/types/components/inputOTP/InputOTP.server.d.ts +3 -0
  237. package/dist/types/components/inputOTP/InputOTP.view.d.ts +3 -0
  238. package/dist/types/components/inputOTP/index.d.ts +1 -1
  239. package/dist/types/components/label/Label.model.d.ts +2 -0
  240. package/dist/types/components/link/Link.model.d.ts +1 -1
  241. package/dist/types/components/link/Link.view.d.ts +1 -1
  242. package/dist/types/components/list/List.d.ts +1 -1
  243. package/dist/types/components/list/List.model.d.ts +14 -5
  244. package/dist/types/components/list/index.d.ts +1 -1
  245. package/dist/types/components/loading/Loading.model.d.ts +2 -0
  246. package/dist/types/components/loading/index.d.ts +1 -1
  247. package/dist/types/components/pagination/Pagination.model.d.ts +2 -0
  248. package/dist/types/components/pagination/Pagination.view.d.ts +1 -1
  249. package/dist/types/components/post-item/PostItem.model.d.ts +2 -1
  250. package/dist/types/components/post-teaser/PostTeaser.model.d.ts +2 -1
  251. package/dist/types/components/post-widget/PostWidget.view.d.ts +1 -1
  252. package/dist/types/components/progressBar/ProgressBar.d.ts +1 -1
  253. package/dist/types/components/progressBar/ProgressBar.lazy.d.ts +1 -1
  254. package/dist/types/components/progressBar/ProgressBar.model.d.ts +3 -2
  255. package/dist/types/components/progressBar/ProgressBar.view.d.ts +1 -1
  256. package/dist/types/components/progressBar/index.d.ts +1 -1
  257. package/dist/types/components/quote/Quote.model.d.ts +1 -1
  258. package/dist/types/components/rating/Rating.model.d.ts +2 -0
  259. package/dist/types/components/rich-text/RichText.client.d.ts +1 -1
  260. package/dist/types/components/rich-text/RichText.d.ts +1 -1
  261. package/dist/types/components/rich-text/RichText.lazy.d.ts +1 -1
  262. package/dist/types/components/rich-text/RichText.model.d.ts +1 -1
  263. package/dist/types/components/select/Select.model.d.ts +2 -0
  264. package/dist/types/components/select/Select.view.d.ts +1 -1
  265. package/dist/types/components/sidenav/SideNav.client.d.ts +1 -1
  266. package/dist/types/components/sidenav/SideNav.model.d.ts +16 -2
  267. package/dist/types/components/sidenav/SideNav.view.d.ts +1 -1
  268. package/dist/types/components/slider/Slider.model.d.ts +2 -0
  269. package/dist/types/components/snackbar/Snackbar.model.d.ts +3 -2
  270. package/dist/types/components/snackbar/Snackbar.view.d.ts +3 -2
  271. package/dist/types/components/snackbar/index.d.ts +1 -1
  272. package/dist/types/components/stepper/Stepper.d.ts +1 -0
  273. package/dist/types/components/stepper/Stepper.lazy.d.ts +1 -0
  274. package/dist/types/components/stepper/Stepper.model.d.ts +3 -0
  275. package/dist/types/components/stepper/Stepper.server.d.ts +1 -1
  276. package/dist/types/components/switch/Switch.d.ts +2 -2
  277. package/dist/types/components/switch/Switch.lazy.d.ts +2 -2
  278. package/dist/types/components/switch/Switch.model.d.ts +3 -4
  279. package/dist/types/components/tabs/Tabs.model.d.ts +2 -0
  280. package/dist/types/components/tabs/Tabs.view.d.ts +1 -1
  281. package/dist/types/components/teaser/Teaser.model.d.ts +1 -1
  282. package/dist/types/components/tooltip/Tooltip.model.d.ts +2 -0
  283. package/package.json +37 -22
@@ -3,8 +3,8 @@ var __defProp = Object.defineProperty;
3
3
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import dayjs, { isDayjs } from "dayjs";
6
- import { useMemo, useState, useEffect, useCallback } from "react";
7
- import { isString, isNull } from "../../helpers/validations.js";
6
+ import { useMemo, useState, useRef, useCallback, useEffect } from "react";
7
+ import { isNull } from "../../helpers/validations.js";
8
8
  import { DatePickerView } from "./DatePicker.view.js";
9
9
  function toDayjs(val) {
10
10
  if (isNull(val)) return null;
@@ -13,7 +13,12 @@ function toDayjs(val) {
13
13
  return d.isValid() ? d : null;
14
14
  }
15
15
  __name(toDayjs, "toDayjs");
16
- const sameByUnit = /* @__PURE__ */ __name((a, b, unit) => a === null && b === null ? true : a !== null && b !== null && a.isSame(b, unit), "sameByUnit");
16
+ function sameByUnit(a, b, unit) {
17
+ if (a === null && b === null) return true;
18
+ if (a !== null && b !== null) return a.isSame(b, unit);
19
+ return false;
20
+ }
21
+ __name(sameByUnit, "sameByUnit");
17
22
  const DatePickerClient = /* @__PURE__ */ __name(({
18
23
  name,
19
24
  value,
@@ -27,6 +32,8 @@ const DatePickerClient = /* @__PURE__ */ __name(({
27
32
  helperText,
28
33
  withTime = false,
29
34
  minuteStep = 1,
35
+ required,
36
+ color = "primary",
30
37
  ...rest
31
38
  }) => {
32
39
  const unit = withTime ? "minute" : "day";
@@ -36,83 +43,221 @@ const DatePickerClient = /* @__PURE__ */ __name(({
36
43
  );
37
44
  const [date, setDate] = useState(toDayjs(value));
38
45
  const [error, setError] = useState(void 0);
46
+ const [isOpen, setIsOpen] = useState(false);
47
+ const [isMobile, setIsMobile] = useState(false);
48
+ const [viewMode, setViewMode] = useState("days");
49
+ const viewModeRef = useRef("days");
50
+ viewModeRef.current = viewMode;
51
+ const swipeTouchStart = useRef(null);
52
+ const handleDialogTouchStart = useCallback(
53
+ (e) => {
54
+ const [t] = Array.from(e.touches);
55
+ if (t) swipeTouchStart.current = { x: t.clientX, y: t.clientY };
56
+ },
57
+ []
58
+ );
59
+ const handleDialogTouchEnd = useCallback(
60
+ (e) => {
61
+ const start = swipeTouchStart.current;
62
+ swipeTouchStart.current = null;
63
+ if (!start) return;
64
+ const [t] = Array.from(e.changedTouches);
65
+ if (!t) return;
66
+ const dx = t.clientX - start.x;
67
+ const dy = t.clientY - start.y;
68
+ if (Math.abs(dy) > Math.abs(dx)) {
69
+ if (dy > 80) setIsOpen(false);
70
+ } else if (Math.abs(dx) > 50 && viewModeRef.current === "days") {
71
+ if (dx < 0) setViewingMonth((m) => m.add(1, "month"));
72
+ else setViewingMonth((m) => m.subtract(1, "month"));
73
+ }
74
+ },
75
+ []
76
+ );
77
+ const [viewingMonth, setViewingMonth] = useState(
78
+ () => toDayjs(value) ?? dayjs()
79
+ );
80
+ const [draft, setDraft] = useState(toDayjs(value));
81
+ const rootRef = useRef(null);
39
82
  useEffect(() => {
40
83
  const incoming = toDayjs(value);
41
84
  if (!sameByUnit(date, incoming, unit)) {
42
85
  setDate(incoming);
43
- if (incoming) setError(void 0);
86
+ setDraft(incoming);
87
+ if (incoming) {
88
+ setViewingMonth(incoming);
89
+ setError(void 0);
90
+ }
44
91
  }
45
92
  }, [value, unit]);
46
- const emitRaw = useCallback(
47
- (raw) => {
48
- if (raw === "") {
49
- if (date !== null) setDate(null);
50
- if (isString(error)) setError(void 0);
51
- onValidate == null ? void 0 : onValidate(name, void 0);
52
- onChange == null ? void 0 : onChange(null);
53
- return;
93
+ useEffect(() => {
94
+ const mq = window.matchMedia("(max-width: 480px)");
95
+ setIsMobile(mq.matches);
96
+ const handler = /* @__PURE__ */ __name((e) => setIsMobile(e.matches), "handler");
97
+ mq.addEventListener("change", handler);
98
+ return () => mq.removeEventListener("change", handler);
99
+ }, []);
100
+ useEffect(() => {
101
+ if (!isOpen || isMobile) return;
102
+ function handlePointerDown(e) {
103
+ if (rootRef.current && !rootRef.current.contains(e.target)) {
104
+ setIsOpen(false);
105
+ setDraft(date);
106
+ }
107
+ }
108
+ __name(handlePointerDown, "handlePointerDown");
109
+ document.addEventListener("pointerdown", handlePointerDown);
110
+ return () => document.removeEventListener("pointerdown", handlePointerDown);
111
+ }, [isOpen, isMobile, date]);
112
+ const validateDate = useCallback(
113
+ (d) => {
114
+ if (isNull(d)) {
115
+ if (required) return (translations == null ? void 0 : translations.required) ?? "This field is required.";
116
+ return void 0;
117
+ }
118
+ if (!isNull(minDate) && (d == null ? void 0 : d.isBefore(dayjs(minDate), unit))) {
119
+ return (translations == null ? void 0 : translations.minDate) ?? (dayjs(minDate).isSame(dayjs(), unit) ? withTime ? "Date/time cannot be in the past." : "Date cannot be in the past." : `Must be >= ${dayjs(minDate).format(fmt)}`);
54
120
  }
55
- const parsed = dayjs(raw, fmt, true);
56
- const year = parsed.isValid() ? parsed.year() : dayjs(raw).year();
57
- if (!parsed.isValid() || year > 9999 || year < 100) {
58
- const msg = withTime ? "Invalid date/time format." : "Invalid date format.";
59
- setError(msg);
60
- onValidate == null ? void 0 : onValidate(name, msg);
61
- onChange == null ? void 0 : onChange(null);
62
- return;
121
+ if (!isNull(maxDate) && (d == null ? void 0 : d.isAfter(dayjs(maxDate), unit))) {
122
+ return (translations == null ? void 0 : translations.maxDate) ?? (dayjs(maxDate).isSame(dayjs(), unit) ? withTime ? "Date/time cannot be in the future." : "Date cannot be in the future." : `Must be <= ${dayjs(maxDate).format(fmt)}`);
63
123
  }
64
- if (!isNull(minDate) && parsed.isBefore(dayjs(minDate), unit)) {
65
- const msg = (translations == null ? void 0 : translations.minDate) ?? (dayjs(minDate).isSame(dayjs(), unit) ? withTime ? "Date/time cannot be in the past." : "Date cannot be in the past." : `Must be ≥ ${dayjs(minDate).format(fmt)}`);
66
- setError(msg);
67
- onValidate == null ? void 0 : onValidate(name, msg);
68
- onChange == null ? void 0 : onChange(null);
69
- return;
124
+ return void 0;
125
+ },
126
+ [minDate, maxDate, unit, fmt, required, withTime, translations]
127
+ );
128
+ const commit = useCallback(
129
+ (d) => {
130
+ const err = validateDate(d);
131
+ setError(err);
132
+ onValidate == null ? void 0 : onValidate(name, err);
133
+ if (!err) {
134
+ setDate(d);
135
+ onChange == null ? void 0 : onChange(d);
70
136
  }
71
- if (!isNull(maxDate) && parsed.isAfter(dayjs(maxDate), unit)) {
72
- const msg = (translations == null ? void 0 : translations.maxDate) ?? (dayjs(maxDate).isSame(dayjs(), unit) ? withTime ? "Date/time cannot be in the future." : "Date cannot be in the future." : `Must be ≤ ${dayjs(maxDate).format(fmt)}`);
73
- setError(msg);
74
- onValidate == null ? void 0 : onValidate(name, msg);
75
- onChange == null ? void 0 : onChange(null);
76
- return;
137
+ },
138
+ [validateDate, onChange, onValidate, name]
139
+ );
140
+ const handleToggle = useCallback(() => {
141
+ setIsOpen((prev) => {
142
+ if (!prev) {
143
+ setViewingMonth(date ?? dayjs());
144
+ setDraft(date);
145
+ setViewMode("days");
77
146
  }
78
- const snapped = withTime ? parsed.minute(
79
- Math.round(parsed.minute() / Math.max(1, minuteStep)) * Math.max(1, minuteStep)
80
- ) : parsed;
81
- if (!sameByUnit(date, snapped, unit)) setDate(snapped);
82
- if (isString(error)) setError(void 0);
83
- onValidate == null ? void 0 : onValidate(name, void 0);
84
- onChange == null ? void 0 : onChange(snapped);
147
+ return !prev;
148
+ });
149
+ }, [date]);
150
+ const handleViewModeChange = useCallback((mode) => {
151
+ setViewMode(mode);
152
+ }, []);
153
+ const handleMonthSelect = useCallback((month) => {
154
+ setViewingMonth((m) => m.month(month));
155
+ setViewMode("days");
156
+ }, []);
157
+ const handleYearSelect = useCallback((year) => {
158
+ setViewingMonth((m) => m.year(year));
159
+ setViewMode("months");
160
+ }, []);
161
+ const handlePrevMonth = useCallback(() => {
162
+ setViewingMonth((m) => {
163
+ const mode = viewModeRef.current;
164
+ if (mode === "months") return m.subtract(1, "year");
165
+ if (mode === "years") return m.subtract(10, "year");
166
+ return m.subtract(1, "month");
167
+ });
168
+ }, []);
169
+ const handleNextMonth = useCallback(() => {
170
+ setViewingMonth((m) => {
171
+ const mode = viewModeRef.current;
172
+ if (mode === "months") return m.add(1, "year");
173
+ if (mode === "years") return m.add(10, "year");
174
+ return m.add(1, "month");
175
+ });
176
+ }, []);
177
+ const handleDayClick = useCallback(
178
+ (day) => {
179
+ const withExistingTime = withTime && draft ? day.hour(draft.hour()).minute(draft.minute()).second(0).millisecond(0) : day.startOf("day");
180
+ if (!withTime) {
181
+ commit(withExistingTime);
182
+ setDraft(withExistingTime);
183
+ setIsOpen(false);
184
+ } else {
185
+ setDraft(withExistingTime);
186
+ }
187
+ },
188
+ [withTime, draft, commit]
189
+ );
190
+ const handleToday = useCallback(() => {
191
+ const today = dayjs().startOf("day");
192
+ setViewingMonth(today);
193
+ setDraft(today);
194
+ }, []);
195
+ const handleClear = useCallback(() => {
196
+ setDraft(null);
197
+ commit(null);
198
+ setIsOpen(false);
199
+ }, [commit]);
200
+ const handleApply = useCallback(() => {
201
+ let snapped = draft;
202
+ if (withTime && snapped) {
203
+ snapped = snapped.minute(
204
+ Math.round(snapped.minute() / Math.max(1, minuteStep)) * Math.max(1, minuteStep)
205
+ ).second(0).millisecond(0);
206
+ }
207
+ commit(snapped);
208
+ if (!validateDate(snapped)) {
209
+ setIsOpen(false);
210
+ }
211
+ }, [draft, withTime, minuteStep, commit, validateDate]);
212
+ const handleTimeChange = useCallback(
213
+ (val, timeUnit) => {
214
+ setDraft((prev) => {
215
+ const base = prev ?? dayjs().startOf("day");
216
+ return timeUnit === "hour" ? base.hour(val) : base.minute(val);
217
+ });
85
218
  },
86
- [
87
- date,
88
- error,
89
- fmt,
90
- maxDate,
91
- minDate,
92
- minuteStep,
93
- name,
94
- onChange,
95
- onValidate,
96
- translations,
97
- unit,
98
- withTime
99
- ]
219
+ []
100
220
  );
101
221
  return /* @__PURE__ */ jsx(
102
- DatePickerView,
222
+ "div",
103
223
  {
104
- ...rest,
105
- errorText: error,
106
- format: fmt,
107
- helperText,
108
- label,
109
- maxDate,
110
- minDate,
111
- minuteStep,
112
- name,
113
- value: date,
114
- withTime,
115
- onChangeInput: emitRaw
224
+ ref: rootRef,
225
+ style: { position: "relative", display: "inline-block", width: "100%" },
226
+ children: /* @__PURE__ */ jsx(
227
+ DatePickerView,
228
+ {
229
+ ...rest,
230
+ color,
231
+ dialogPortalTarget: isMobile ? document.body : null,
232
+ errorText: error,
233
+ format: fmt,
234
+ helperText,
235
+ isOpen,
236
+ label,
237
+ maxDate,
238
+ minDate,
239
+ minuteStep,
240
+ name,
241
+ required,
242
+ selectedDate: draft,
243
+ viewingMonth,
244
+ viewMode,
245
+ withTime,
246
+ onApply: handleApply,
247
+ onClear: handleClear,
248
+ onDayClick: handleDayClick,
249
+ onDialogTouchEnd: handleDialogTouchEnd,
250
+ onDialogTouchStart: handleDialogTouchStart,
251
+ onMonthSelect: handleMonthSelect,
252
+ onNextMonth: handleNextMonth,
253
+ onPrevMonth: handlePrevMonth,
254
+ onTimeChange: handleTimeChange,
255
+ onToday: handleToday,
256
+ onToggle: handleToggle,
257
+ onViewModeChange: handleViewModeChange,
258
+ onYearSelect: handleYearSelect
259
+ }
260
+ )
116
261
  }
117
262
  );
118
263
  }, "DatePickerClient");