zkit-ui 1.0.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 (267) hide show
  1. package/README.md +267 -0
  2. package/dist/ComponentLibProvider.d.ts +15 -0
  3. package/dist/ComponentLibProvider.d.ts.map +1 -0
  4. package/dist/ComponentLibProvider.js +18 -0
  5. package/dist/assets/animations/spinner.json +1 -0
  6. package/dist/assets/icons/check.svg +4 -0
  7. package/dist/assets/icons/toast/error.webp +0 -0
  8. package/dist/assets/icons/toast/success.webp +0 -0
  9. package/dist/assets/icons/toast/warning.webp +0 -0
  10. package/dist/config.d.ts +16 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +42 -0
  13. package/dist/i18n/I18nProvider.d.ts +11 -0
  14. package/dist/i18n/I18nProvider.d.ts.map +1 -0
  15. package/dist/i18n/I18nProvider.js +84 -0
  16. package/dist/i18n/locale.d.ts +7 -0
  17. package/dist/i18n/locale.d.ts.map +1 -0
  18. package/dist/i18n/locale.js +87 -0
  19. package/dist/i18n/locales/de.d.ts +51 -0
  20. package/dist/i18n/locales/de.d.ts.map +1 -0
  21. package/dist/i18n/locales/de.js +62 -0
  22. package/dist/i18n/locales/en-US.d.ts +51 -0
  23. package/dist/i18n/locales/en-US.d.ts.map +1 -0
  24. package/dist/i18n/locales/en-US.js +62 -0
  25. package/dist/i18n/locales/index.d.ts +9 -0
  26. package/dist/i18n/locales/index.d.ts.map +1 -0
  27. package/dist/i18n/locales/index.js +23 -0
  28. package/dist/i18n/locales/ja.d.ts +51 -0
  29. package/dist/i18n/locales/ja.d.ts.map +1 -0
  30. package/dist/i18n/locales/ja.js +62 -0
  31. package/dist/i18n/locales/zh-CN.d.ts +51 -0
  32. package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
  33. package/dist/i18n/locales/zh-CN.js +62 -0
  34. package/dist/i18n/locales/zh-TW.d.ts +51 -0
  35. package/dist/i18n/locales/zh-TW.d.ts.map +1 -0
  36. package/dist/i18n/locales/zh-TW.js +62 -0
  37. package/dist/i18n/types.d.ts +11 -0
  38. package/dist/i18n/types.d.ts.map +1 -0
  39. package/dist/i18n/types.js +2 -0
  40. package/dist/i18n/useI18n.d.ts +2 -0
  41. package/dist/i18n/useI18n.d.ts.map +1 -0
  42. package/dist/i18n/useI18n.js +41 -0
  43. package/dist/index.d.ts +57 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +90 -0
  46. package/dist/services/ActionDialogService/ActionDialog.d.ts +4 -0
  47. package/dist/services/ActionDialogService/ActionDialog.d.ts.map +1 -0
  48. package/dist/services/ActionDialogService/ActionDialog.js +531 -0
  49. package/dist/services/ActionDialogService/index.d.ts +4 -0
  50. package/dist/services/ActionDialogService/index.d.ts.map +1 -0
  51. package/dist/services/ActionDialogService/index.js +8 -0
  52. package/dist/services/ActionDialogService/service.d.ts +7 -0
  53. package/dist/services/ActionDialogService/service.d.ts.map +1 -0
  54. package/dist/services/ActionDialogService/service.js +309 -0
  55. package/dist/services/ActionDialogService/shared.d.ts +17 -0
  56. package/dist/services/ActionDialogService/shared.d.ts.map +1 -0
  57. package/dist/services/ActionDialogService/shared.js +167 -0
  58. package/dist/services/ActionDialogService/types.d.ts +160 -0
  59. package/dist/services/ActionDialogService/types.d.ts.map +1 -0
  60. package/dist/services/ActionDialogService/types.js +2 -0
  61. package/dist/services/CardToastService/index.d.ts +115 -0
  62. package/dist/services/CardToastService/index.d.ts.map +1 -0
  63. package/dist/services/CardToastService/index.js +899 -0
  64. package/dist/services/ImagePreviewService/index.d.ts +179 -0
  65. package/dist/services/ImagePreviewService/index.d.ts.map +1 -0
  66. package/dist/services/ImagePreviewService/index.js +1383 -0
  67. package/dist/services/LoadingService/index.d.ts +146 -0
  68. package/dist/services/LoadingService/index.d.ts.map +1 -0
  69. package/dist/services/LoadingService/index.js +827 -0
  70. package/dist/services/PermissionPurposeDialogService/index.d.ts +99 -0
  71. package/dist/services/PermissionPurposeDialogService/index.d.ts.map +1 -0
  72. package/dist/services/PermissionPurposeDialogService/index.js +360 -0
  73. package/dist/services/PickerService/index.d.ts +128 -0
  74. package/dist/services/PickerService/index.d.ts.map +1 -0
  75. package/dist/services/PickerService/index.js +250 -0
  76. package/dist/theme/ThemeProvider.d.ts +15 -0
  77. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  78. package/dist/theme/ThemeProvider.js +61 -0
  79. package/dist/theme/defaultTheme.d.ts +3 -0
  80. package/dist/theme/defaultTheme.d.ts.map +1 -0
  81. package/dist/theme/defaultTheme.js +28 -0
  82. package/dist/theme/mergeTheme.d.ts +3 -0
  83. package/dist/theme/mergeTheme.d.ts.map +1 -0
  84. package/dist/theme/mergeTheme.js +19 -0
  85. package/dist/theme/types.d.ts +17 -0
  86. package/dist/theme/types.d.ts.map +1 -0
  87. package/dist/theme/types.js +2 -0
  88. package/dist/theme/useTheme.d.ts +2 -0
  89. package/dist/theme/useTheme.d.ts.map +1 -0
  90. package/dist/theme/useTheme.js +46 -0
  91. package/dist/ui/Accordion/index.d.ts +99 -0
  92. package/dist/ui/Accordion/index.d.ts.map +1 -0
  93. package/dist/ui/Accordion/index.js +777 -0
  94. package/dist/ui/AddressCascader/index.d.ts +58 -0
  95. package/dist/ui/AddressCascader/index.d.ts.map +1 -0
  96. package/dist/ui/AddressCascader/index.js +710 -0
  97. package/dist/ui/BetweenTime/index.d.ts +82 -0
  98. package/dist/ui/BetweenTime/index.d.ts.map +1 -0
  99. package/dist/ui/BetweenTime/index.js +702 -0
  100. package/dist/ui/Button/index.d.ts +93 -0
  101. package/dist/ui/Button/index.d.ts.map +1 -0
  102. package/dist/ui/Button/index.js +832 -0
  103. package/dist/ui/Checkbox/index.d.ts +103 -0
  104. package/dist/ui/Checkbox/index.d.ts.map +1 -0
  105. package/dist/ui/Checkbox/index.js +694 -0
  106. package/dist/ui/DatePicker/index.d.ts +5 -0
  107. package/dist/ui/DatePicker/index.d.ts.map +1 -0
  108. package/dist/ui/DatePicker/index.js +157 -0
  109. package/dist/ui/DatePicker/types.d.ts +99 -0
  110. package/dist/ui/DatePicker/types.d.ts.map +1 -0
  111. package/dist/ui/DatePicker/types.js +2 -0
  112. package/dist/ui/DatePicker/utils.d.ts +32 -0
  113. package/dist/ui/DatePicker/utils.d.ts.map +1 -0
  114. package/dist/ui/DatePicker/utils.js +316 -0
  115. package/dist/ui/LinkedScroll/index.d.ts +78 -0
  116. package/dist/ui/LinkedScroll/index.d.ts.map +1 -0
  117. package/dist/ui/LinkedScroll/index.js +470 -0
  118. package/dist/ui/LoadingSpinner/index.d.ts +8 -0
  119. package/dist/ui/LoadingSpinner/index.d.ts.map +1 -0
  120. package/dist/ui/LoadingSpinner/index.js +122 -0
  121. package/dist/ui/Picker/actionBar.d.ts +14 -0
  122. package/dist/ui/Picker/actionBar.d.ts.map +1 -0
  123. package/dist/ui/Picker/actionBar.js +28 -0
  124. package/dist/ui/Picker/index.d.ts +5 -0
  125. package/dist/ui/Picker/index.d.ts.map +1 -0
  126. package/dist/ui/Picker/index.js +412 -0
  127. package/dist/ui/Picker/types.d.ts +80 -0
  128. package/dist/ui/Picker/types.d.ts.map +1 -0
  129. package/dist/ui/Picker/types.js +2 -0
  130. package/dist/ui/Picker/utils.d.ts +27 -0
  131. package/dist/ui/Picker/utils.d.ts.map +1 -0
  132. package/dist/ui/Picker/utils.js +182 -0
  133. package/dist/ui/Radio/index.d.ts +95 -0
  134. package/dist/ui/Radio/index.d.ts.map +1 -0
  135. package/dist/ui/Radio/index.js +633 -0
  136. package/dist/ui/Sheet/index.d.ts +12 -0
  137. package/dist/ui/Sheet/index.d.ts.map +1 -0
  138. package/dist/ui/Sheet/index.js +832 -0
  139. package/dist/ui/Sheet/nativeBottom.d.ts +52 -0
  140. package/dist/ui/Sheet/nativeBottom.d.ts.map +1 -0
  141. package/dist/ui/Sheet/nativeBottom.js +442 -0
  142. package/dist/ui/Sheet/nativeBottom.web.d.ts +18 -0
  143. package/dist/ui/Sheet/nativeBottom.web.d.ts.map +1 -0
  144. package/dist/ui/Sheet/nativeBottom.web.js +46 -0
  145. package/dist/ui/Sheet/slots.d.ts +5 -0
  146. package/dist/ui/Sheet/slots.d.ts.map +1 -0
  147. package/dist/ui/Sheet/slots.js +40 -0
  148. package/dist/ui/Sheet/types.d.ts +131 -0
  149. package/dist/ui/Sheet/types.d.ts.map +1 -0
  150. package/dist/ui/Sheet/types.js +2 -0
  151. package/dist/ui/SliderCaptcha/index.d.ts +57 -0
  152. package/dist/ui/SliderCaptcha/index.d.ts.map +1 -0
  153. package/dist/ui/SliderCaptcha/index.js +586 -0
  154. package/dist/ui/Switch/index.d.ts +72 -0
  155. package/dist/ui/Switch/index.d.ts.map +1 -0
  156. package/dist/ui/Switch/index.js +671 -0
  157. package/dist/ui/Text/index.d.ts +41 -0
  158. package/dist/ui/Text/index.d.ts.map +1 -0
  159. package/dist/ui/Text/index.js +325 -0
  160. package/dist/ui/TextInput/TextInputPrimitive.d.ts +8 -0
  161. package/dist/ui/TextInput/TextInputPrimitive.d.ts.map +1 -0
  162. package/dist/ui/TextInput/TextInputPrimitive.js +54 -0
  163. package/dist/ui/TextInput/index.d.ts +89 -0
  164. package/dist/ui/TextInput/index.d.ts.map +1 -0
  165. package/dist/ui/TextInput/index.js +545 -0
  166. package/dist/ui/WheelColumn/ZKitWheelPickerNativeComponent.d.ts +39 -0
  167. package/dist/ui/WheelColumn/ZKitWheelPickerNativeComponent.d.ts.map +1 -0
  168. package/dist/ui/WheelColumn/ZKitWheelPickerNativeComponent.js +60 -0
  169. package/dist/ui/WheelColumn/constants.d.ts +2 -0
  170. package/dist/ui/WheelColumn/constants.d.ts.map +1 -0
  171. package/dist/ui/WheelColumn/constants.js +4 -0
  172. package/dist/ui/WheelColumn/index.d.ts +59 -0
  173. package/dist/ui/WheelColumn/index.d.ts.map +1 -0
  174. package/dist/ui/WheelColumn/index.js +547 -0
  175. package/ios/ZKitWheelPicker.h +18 -0
  176. package/ios/ZKitWheelPicker.mm +230 -0
  177. package/ios/ZKitWheelPickerLabel.h +10 -0
  178. package/ios/ZKitWheelPickerLabel.mm +31 -0
  179. package/ios/ZKitWheelPickerManager.h +5 -0
  180. package/ios/ZKitWheelPickerManager.mm +53 -0
  181. package/package.json +75 -0
  182. package/react-native.config.js +10 -0
  183. package/src/ComponentLibProvider.tsx +56 -0
  184. package/src/assets/animations/spinner.json +1 -0
  185. package/src/assets/icons/check.svg +4 -0
  186. package/src/assets/icons/toast/error.webp +0 -0
  187. package/src/assets/icons/toast/success.webp +0 -0
  188. package/src/assets/icons/toast/warning.webp +0 -0
  189. package/src/config.ts +65 -0
  190. package/src/i18n/I18nProvider.tsx +69 -0
  191. package/src/i18n/locale.ts +108 -0
  192. package/src/i18n/locales/de.ts +67 -0
  193. package/src/i18n/locales/en-US.ts +67 -0
  194. package/src/i18n/locales/index.ts +19 -0
  195. package/src/i18n/locales/ja.ts +67 -0
  196. package/src/i18n/locales/zh-CN.ts +67 -0
  197. package/src/i18n/locales/zh-TW.ts +67 -0
  198. package/src/i18n/types.ts +21 -0
  199. package/src/i18n/useI18n.ts +7 -0
  200. package/src/index.ts +395 -0
  201. package/src/services/ActionDialogService/ActionDialog.tsx +756 -0
  202. package/src/services/ActionDialogService/README.md +146 -0
  203. package/src/services/ActionDialogService/index.tsx +39 -0
  204. package/src/services/ActionDialogService/service.tsx +355 -0
  205. package/src/services/ActionDialogService/shared.ts +204 -0
  206. package/src/services/ActionDialogService/types.ts +197 -0
  207. package/src/services/CardToastService/README.md +128 -0
  208. package/src/services/CardToastService/index.tsx +1284 -0
  209. package/src/services/ImagePreviewService/README.md +67 -0
  210. package/src/services/ImagePreviewService/index.tsx +2148 -0
  211. package/src/services/LoadingService/README.md +128 -0
  212. package/src/services/LoadingService/index.tsx +1113 -0
  213. package/src/services/PermissionPurposeDialogService/README.md +80 -0
  214. package/src/services/PermissionPurposeDialogService/index.tsx +449 -0
  215. package/src/services/PickerService/README.md +154 -0
  216. package/src/services/PickerService/index.tsx +410 -0
  217. package/src/theme/ThemeProvider.tsx +40 -0
  218. package/src/theme/defaultTheme.ts +30 -0
  219. package/src/theme/mergeTheme.ts +16 -0
  220. package/src/theme/types.ts +36 -0
  221. package/src/theme/useTheme.ts +10 -0
  222. package/src/types/svg.d.ts +9 -0
  223. package/src/types/vant-area-data.d.ts +19 -0
  224. package/src/ui/Accordion/README.md +67 -0
  225. package/src/ui/Accordion/index.tsx +1221 -0
  226. package/src/ui/AddressCascader/README.md +144 -0
  227. package/src/ui/AddressCascader/index.tsx +1084 -0
  228. package/src/ui/BetweenTime/README.md +490 -0
  229. package/src/ui/BetweenTime/index.tsx +1001 -0
  230. package/src/ui/Button/README.md +186 -0
  231. package/src/ui/Button/index.tsx +1356 -0
  232. package/src/ui/Checkbox/README.md +211 -0
  233. package/src/ui/Checkbox/index.tsx +1231 -0
  234. package/src/ui/DatePicker/README.md +117 -0
  235. package/src/ui/DatePicker/index.tsx +295 -0
  236. package/src/ui/DatePicker/types.ts +115 -0
  237. package/src/ui/DatePicker/utils.ts +405 -0
  238. package/src/ui/LinkedScroll/README.md +55 -0
  239. package/src/ui/LinkedScroll/index.tsx +809 -0
  240. package/src/ui/LoadingSpinner/index.tsx +104 -0
  241. package/src/ui/Picker/README.md +190 -0
  242. package/src/ui/Picker/actionBar.tsx +70 -0
  243. package/src/ui/Picker/index.tsx +694 -0
  244. package/src/ui/Picker/types.ts +94 -0
  245. package/src/ui/Picker/utils.ts +239 -0
  246. package/src/ui/Radio/README.md +207 -0
  247. package/src/ui/Radio/index.tsx +1117 -0
  248. package/src/ui/Sheet/README.md +82 -0
  249. package/src/ui/Sheet/index.tsx +1163 -0
  250. package/src/ui/Sheet/nativeBottom.tsx +683 -0
  251. package/src/ui/Sheet/nativeBottom.web.tsx +40 -0
  252. package/src/ui/Sheet/slots.tsx +75 -0
  253. package/src/ui/Sheet/types.ts +195 -0
  254. package/src/ui/SliderCaptcha/README.md +61 -0
  255. package/src/ui/SliderCaptcha/index.tsx +816 -0
  256. package/src/ui/Switch/README.md +143 -0
  257. package/src/ui/Switch/index.tsx +1092 -0
  258. package/src/ui/Text/README.md +157 -0
  259. package/src/ui/Text/index.tsx +450 -0
  260. package/src/ui/TextInput/README.md +197 -0
  261. package/src/ui/TextInput/TextInputPrimitive.tsx +44 -0
  262. package/src/ui/TextInput/index.tsx +942 -0
  263. package/src/ui/WheelColumn/README.md +104 -0
  264. package/src/ui/WheelColumn/ZKitWheelPickerNativeComponent.tsx +68 -0
  265. package/src/ui/WheelColumn/constants.ts +1 -0
  266. package/src/ui/WheelColumn/index.tsx +826 -0
  267. package/zkit-ui.podspec +19 -0
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import type { DatePickerProps } from './types';
3
+ export type { DatePickerChangePayload, DatePickerColumn, DatePickerColumnHeaderContext, DatePickerConfirmPayload, DatePickerDisableContext, DatePickerDraftChangePayload, DatePickerHandle, DatePickerInput, DatePickerLabelFormat, DatePickerOption, DatePickerParts, DatePickerPrecision, DatePickerProps, DatePickerRenderContext, DatePickerSelection, DatePickerValue, } from './types';
4
+ export declare const DatePicker: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<import("../Picker").PickerHandle>>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/DatePicker/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuB/B,OAAO,KAAK,EAKV,eAAe,EAEhB,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,GAChB,MAAM,SAAS,CAAC;AAmDjB,eAAO,MAAM,UAAU,0GAkMrB,CAAC"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DatePicker = void 0;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const React = __importStar(require("react"));
39
+ const Text_1 = require("../Text");
40
+ const Picker_1 = require("../Picker");
41
+ const useI18n_1 = require("../../i18n/useI18n");
42
+ const utils_1 = require("./utils");
43
+ function createEmptyRenderContext(precision, pickerContext, placeholder) {
44
+ return {
45
+ value: null,
46
+ date: null,
47
+ precision,
48
+ parts: null,
49
+ values: [],
50
+ label: '',
51
+ labels: [],
52
+ items: [],
53
+ isComplete: false,
54
+ open: pickerContext.open,
55
+ close: pickerContext.close,
56
+ isOpen: pickerContext.isOpen,
57
+ disabled: pickerContext.disabled,
58
+ placeholder,
59
+ };
60
+ }
61
+ function createRenderContext(selection, precision, pickerContext, placeholder) {
62
+ if (!selection)
63
+ return createEmptyRenderContext(precision, pickerContext, placeholder);
64
+ return {
65
+ value: selection.value,
66
+ date: selection.date,
67
+ precision,
68
+ parts: selection.parts,
69
+ values: selection.values,
70
+ label: selection.label,
71
+ labels: selection.labels,
72
+ items: selection.items,
73
+ isComplete: selection.isComplete,
74
+ open: pickerContext.open,
75
+ close: pickerContext.close,
76
+ isOpen: pickerContext.isOpen,
77
+ disabled: pickerContext.disabled,
78
+ placeholder,
79
+ };
80
+ }
81
+ exports.DatePicker = React.forwardRef(function DatePicker({ value: valueProp, defaultValue = null, onChange, open, defaultOpen, onOpenChange, onDismissComplete, precision: precisionProp = 'day', min, max, defaultPickerValue, isDateDisabled, title, placeholder, cancelText, confirmText, emptyText, labelFormat, columnLabels, renderColumnHeader, lazyContent = true, sheetHeight = 'auto', disabled = false, onCancel, onConfirm, onDraftChange, children, }, ref) {
82
+ const { t } = (0, useI18n_1.useI18n)();
83
+ const precision = (0, utils_1.normalizePrecision)(precisionProp);
84
+ const placeholderText = placeholder !== null && placeholder !== void 0 ? placeholder : t('datePicker.placeholder');
85
+ const isValueControlled = valueProp !== undefined;
86
+ const [innerValue, setInnerValue] = React.useState(defaultValue);
87
+ const committedValue = isValueControlled ? valueProp : innerValue;
88
+ const bounds = React.useMemo(() => (0, utils_1.resolveDatePickerBounds)(min, max), [max, min]);
89
+ const options = React.useMemo(() => (0, utils_1.buildDatePickerOptions)({ bounds, precision, isDateDisabled }), [bounds, isDateDisabled, precision]);
90
+ const committedDate = React.useMemo(() => (0, utils_1.resolveCommittedDate)(committedValue, bounds, precision), [bounds, committedValue, precision]);
91
+ const pickerDate = React.useMemo(() => (0, utils_1.resolvePickerDate)(committedDate, defaultPickerValue, bounds, precision), [bounds, committedDate, defaultPickerValue, precision]);
92
+ const pickerValue = React.useMemo(() => (0, utils_1.pathFromDate)(pickerDate, precision), [pickerDate, precision]);
93
+ const committedSelection = React.useMemo(() => committedDate
94
+ ? (0, utils_1.createDatePickerSelectionFromDate)(committedDate, precision, options, labelFormat)
95
+ : null, [committedDate, labelFormat, options, precision]);
96
+ const resolveSelection = React.useCallback((selection) => (0, utils_1.createDatePickerSelection)(selection, precision, labelFormat, selection.label), [labelFormat, precision]);
97
+ const handlePickerChange = React.useCallback((_next, selection) => {
98
+ const nextSelection = resolveSelection(selection);
99
+ if (!nextSelection)
100
+ return;
101
+ if (!isValueControlled) {
102
+ setInnerValue(nextSelection.value);
103
+ }
104
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextSelection.value, nextSelection);
105
+ }, [isValueControlled, onChange, resolveSelection]);
106
+ const handlePickerConfirm = React.useCallback((selection) => {
107
+ const nextSelection = resolveSelection(selection);
108
+ if (!nextSelection)
109
+ return;
110
+ onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm(nextSelection);
111
+ }, [onConfirm, resolveSelection]);
112
+ const handlePickerDraftChange = React.useCallback((selection) => {
113
+ const nextSelection = resolveSelection(selection);
114
+ if (!nextSelection)
115
+ return;
116
+ onDraftChange === null || onDraftChange === void 0 ? void 0 : onDraftChange(nextSelection);
117
+ }, [onDraftChange, resolveSelection]);
118
+ const formatPickerLabel = React.useCallback((selection) => { var _a, _b; return (_b = (_a = (0, utils_1.createDatePickerSelection)(selection, precision, labelFormat)) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : selection.label; }, [labelFormat, precision]);
119
+ const resolvedColumnLabels = React.useMemo(() => {
120
+ var _a, _b, _c;
121
+ return ({
122
+ year: (_a = columnLabels === null || columnLabels === void 0 ? void 0 : columnLabels.year) !== null && _a !== void 0 ? _a : t('datePicker.year'),
123
+ month: (_b = columnLabels === null || columnLabels === void 0 ? void 0 : columnLabels.month) !== null && _b !== void 0 ? _b : t('datePicker.month'),
124
+ day: (_c = columnLabels === null || columnLabels === void 0 ? void 0 : columnLabels.day) !== null && _c !== void 0 ? _c : t('datePicker.day'),
125
+ });
126
+ }, [columnLabels === null || columnLabels === void 0 ? void 0 : columnLabels.day, columnLabels === null || columnLabels === void 0 ? void 0 : columnLabels.month, columnLabels === null || columnLabels === void 0 ? void 0 : columnLabels.year, t]);
127
+ const handleRenderColumnHeader = React.useCallback((context) => {
128
+ const column = utils_1.DATE_PICKER_COLUMNS[context.columnIndex];
129
+ const selectedDate = (0, utils_1.dateFromOption)(context.selectedItem, precision);
130
+ const headerContext = {
131
+ column,
132
+ columnIndex: context.columnIndex,
133
+ columnCount: context.columnCount,
134
+ options: context.options,
135
+ selectedItem: context.selectedItem,
136
+ selectedValue: typeof context.selectedValue === 'number' ? context.selectedValue : undefined,
137
+ selectedLabel: context.selectedLabel,
138
+ selectedDate,
139
+ selectedParts: context.selectedItem
140
+ ? {
141
+ year: context.selectedItem.year,
142
+ month: context.selectedItem.month,
143
+ day: context.selectedItem.day,
144
+ }
145
+ : undefined,
146
+ };
147
+ if (renderColumnHeader)
148
+ return renderColumnHeader(headerContext);
149
+ return ((0, jsx_runtime_1.jsx)(Text_1.Text, { variant: "label", size: "sm", weight: "semibold", tone: "muted", children: resolvedColumnLabels[column] }));
150
+ }, [precision, renderColumnHeader, resolvedColumnLabels]);
151
+ const pickerChildren = React.useMemo(() => {
152
+ if (typeof children !== 'function')
153
+ return children;
154
+ return (pickerContext) => children(createRenderContext(committedSelection, precision, pickerContext, placeholderText));
155
+ }, [children, committedSelection, placeholderText, precision]);
156
+ return ((0, jsx_runtime_1.jsx)(Picker_1.Picker, { ref: ref, options: options, value: pickerValue, onChange: handlePickerChange, valueMode: "path", open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, onDismissComplete: onDismissComplete, title: title !== null && title !== void 0 ? title : t('datePicker.title'), placeholder: placeholderText, cancelText: cancelText, confirmText: confirmText, emptyText: emptyText, formatLabel: formatPickerLabel, renderColumnHeader: handleRenderColumnHeader, maxColumns: (0, utils_1.getColumnCount)(precision), lazyContent: lazyContent, sheetHeight: sheetHeight, disabled: disabled, onCancel: onCancel, onConfirm: handlePickerConfirm, onDraftChange: handlePickerDraftChange, children: pickerChildren }));
157
+ });
@@ -0,0 +1,99 @@
1
+ import type * as React from 'react';
2
+ import type { Dayjs } from 'dayjs';
3
+ import type { PickerHandle, PickerOption } from '../Picker';
4
+ export type DatePickerHandle = PickerHandle;
5
+ export type DatePickerPrecision = 'year' | 'month' | 'day';
6
+ export type DatePickerColumn = DatePickerPrecision;
7
+ export type DatePickerValue = string;
8
+ export type DatePickerInput = DatePickerValue | Date | Dayjs;
9
+ export type DatePickerParts = {
10
+ year: number;
11
+ month?: number;
12
+ day?: number;
13
+ };
14
+ export type DatePickerDisableContext = {
15
+ precision: DatePickerPrecision;
16
+ column: DatePickerColumn;
17
+ parts: DatePickerParts;
18
+ };
19
+ export type DatePickerOption = PickerOption<number> & {
20
+ column: DatePickerColumn;
21
+ year: number;
22
+ month?: number;
23
+ day?: number;
24
+ children?: DatePickerOption[];
25
+ };
26
+ export type DatePickerSelection = {
27
+ value: DatePickerValue;
28
+ date: Dayjs;
29
+ precision: DatePickerPrecision;
30
+ parts: DatePickerParts;
31
+ values: number[];
32
+ label: string;
33
+ labels: string[];
34
+ items: DatePickerOption[];
35
+ columns: DatePickerOption[][];
36
+ indices: number[];
37
+ isComplete: boolean;
38
+ };
39
+ export type DatePickerChangePayload = DatePickerSelection;
40
+ export type DatePickerConfirmPayload = DatePickerSelection;
41
+ export type DatePickerDraftChangePayload = DatePickerSelection;
42
+ export type DatePickerRenderContext = {
43
+ value: DatePickerValue | null;
44
+ date: Dayjs | null;
45
+ precision: DatePickerPrecision;
46
+ parts: DatePickerParts | null;
47
+ values: number[];
48
+ label: string;
49
+ labels: string[];
50
+ items: DatePickerOption[];
51
+ isComplete: boolean;
52
+ open: () => void;
53
+ close: () => void;
54
+ isOpen: boolean;
55
+ disabled: boolean;
56
+ placeholder: string;
57
+ };
58
+ export type DatePickerColumnHeaderContext = {
59
+ column: DatePickerColumn;
60
+ columnIndex: number;
61
+ columnCount: number;
62
+ options: DatePickerOption[];
63
+ selectedItem?: DatePickerOption;
64
+ selectedValue?: number;
65
+ selectedLabel?: string;
66
+ selectedDate?: Dayjs;
67
+ selectedParts?: DatePickerParts;
68
+ };
69
+ export type DatePickerLabelFormat = string | ((selection: DatePickerSelection) => string);
70
+ export type DatePickerProps = {
71
+ value?: DatePickerValue | null;
72
+ defaultValue?: DatePickerValue | null;
73
+ onChange?: (value: DatePickerValue, payload: DatePickerChangePayload) => void;
74
+ open?: boolean;
75
+ defaultOpen?: boolean;
76
+ onOpenChange?: (open: boolean) => void;
77
+ onDismissComplete?: () => void;
78
+ precision?: DatePickerPrecision;
79
+ min?: DatePickerInput;
80
+ max?: DatePickerInput;
81
+ defaultPickerValue?: DatePickerInput;
82
+ isDateDisabled?: (date: Dayjs, context: DatePickerDisableContext) => boolean;
83
+ title?: string;
84
+ placeholder?: string;
85
+ cancelText?: string;
86
+ confirmText?: string;
87
+ emptyText?: string;
88
+ labelFormat?: DatePickerLabelFormat;
89
+ columnLabels?: Partial<Record<DatePickerColumn, string>>;
90
+ renderColumnHeader?: (context: DatePickerColumnHeaderContext) => React.ReactNode;
91
+ lazyContent?: boolean;
92
+ sheetHeight?: number | 'auto';
93
+ disabled?: boolean;
94
+ onCancel?: () => void;
95
+ onConfirm?: (payload: DatePickerConfirmPayload) => void;
96
+ onDraftChange?: (payload: DatePickerDraftChangePayload) => void;
97
+ children?: React.ReactNode | ((context: DatePickerRenderContext) => React.ReactNode);
98
+ };
99
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/DatePicker/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,32 @@
1
+ import dayjs, { type Dayjs } from 'dayjs';
2
+ import type { PickerSelection } from '../Picker';
3
+ import type { DatePickerInput, DatePickerLabelFormat, DatePickerOption, DatePickerParts, DatePickerPrecision, DatePickerSelection, DatePickerValue, DatePickerProps } from './types';
4
+ export declare const DATE_PICKER_COLUMNS: readonly ["year", "month", "day"];
5
+ type DateBounds = {
6
+ min: Dayjs;
7
+ max: Dayjs;
8
+ };
9
+ type ParsedDate = {
10
+ date: Dayjs;
11
+ inputPrecision: DatePickerPrecision;
12
+ };
13
+ type BuildOptionsConfig = {
14
+ bounds: DateBounds;
15
+ precision: DatePickerPrecision;
16
+ isDateDisabled?: DatePickerProps['isDateDisabled'];
17
+ };
18
+ export declare function normalizePrecision(input: DatePickerPrecision | undefined): DatePickerPrecision;
19
+ export declare function getColumnCount(precision: DatePickerPrecision): number;
20
+ export declare function formatDatePickerValue(date: Dayjs, precision: DatePickerPrecision): DatePickerValue;
21
+ export declare function toDatePickerParts(date: Dayjs, precision: DatePickerPrecision): DatePickerParts;
22
+ export declare function pathFromDate(date: Dayjs, precision: DatePickerPrecision): number[];
23
+ export declare function parseDatePickerInput(input: DatePickerInput | null | undefined, fieldName: string): ParsedDate | undefined;
24
+ export declare function resolveDatePickerBounds(min: DatePickerInput | null | undefined, max: DatePickerInput | null | undefined): DateBounds;
25
+ export declare function resolveCommittedDate(value: DatePickerValue | null | undefined, bounds: DateBounds, precision: DatePickerPrecision): dayjs.Dayjs | null;
26
+ export declare function resolvePickerDate(committedDate: Dayjs | null, defaultPickerValue: DatePickerInput | null | undefined, bounds: DateBounds, precision: DatePickerPrecision): dayjs.Dayjs;
27
+ export declare function buildDatePickerOptions(config: BuildOptionsConfig): DatePickerOption[];
28
+ export declare function createDatePickerSelection(pickerSelection: PickerSelection<DatePickerOption>, precision: DatePickerPrecision, labelFormat?: DatePickerLabelFormat, labelOverride?: string): DatePickerSelection | null;
29
+ export declare function createDatePickerSelectionFromDate(date: Dayjs, precision: DatePickerPrecision, options: DatePickerOption[], labelFormat?: DatePickerLabelFormat): DatePickerSelection;
30
+ export declare function dateFromOption(option: DatePickerOption | undefined, precision: DatePickerPrecision): dayjs.Dayjs | undefined;
31
+ export {};
32
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ui/DatePicker/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAEV,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,eAAe,EAChB,MAAM,SAAS,CAAC;AAIjB,eAAO,MAAM,mBAAmB,mCAA0E,CAAC;AAoB3G,KAAK,UAAU,GAAG;IAChB,GAAG,EAAE,KAAK,CAAC;IACX,GAAG,EAAE,KAAK,CAAC;CACZ,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,KAAK,CAAC;IACZ,cAAc,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,cAAc,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;CACpD,CAAC;AAUF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,GAAG,mBAAmB,CAE9F;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,mBAAmB,UAE5D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,GAAG,eAAe,CAElG;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,GAAG,eAAe,CAI9F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAKlF;AAoCD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EACzC,SAAS,EAAE,MAAM,GAChB,UAAU,GAAG,SAAS,CAUxB;AAeD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EACvC,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GACtC,UAAU,CAWZ;AAQD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EACzC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,mBAAmB,sBAK/B;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,KAAK,GAAG,IAAI,EAC3B,kBAAkB,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EACtD,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,mBAAmB,eAO/B;AAmFD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,sBAuBhE;AAuBD,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,eAAe,CAAC,gBAAgB,CAAC,EAClD,SAAS,EAAE,mBAAmB,EAC9B,WAAW,CAAC,EAAE,qBAAqB,EACnC,aAAa,CAAC,EAAE,MAAM,GACrB,mBAAmB,GAAG,IAAI,CAuB5B;AAwBD,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,WAAW,CAAC,EAAE,qBAAqB,GAClC,mBAAmB,CAsBrB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EAAE,SAAS,EAAE,mBAAmB,2BAGlG"}
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DATE_PICKER_COLUMNS = void 0;
7
+ exports.normalizePrecision = normalizePrecision;
8
+ exports.getColumnCount = getColumnCount;
9
+ exports.formatDatePickerValue = formatDatePickerValue;
10
+ exports.toDatePickerParts = toDatePickerParts;
11
+ exports.pathFromDate = pathFromDate;
12
+ exports.parseDatePickerInput = parseDatePickerInput;
13
+ exports.resolveDatePickerBounds = resolveDatePickerBounds;
14
+ exports.resolveCommittedDate = resolveCommittedDate;
15
+ exports.resolvePickerDate = resolvePickerDate;
16
+ exports.buildDatePickerOptions = buildDatePickerOptions;
17
+ exports.createDatePickerSelection = createDatePickerSelection;
18
+ exports.createDatePickerSelectionFromDate = createDatePickerSelectionFromDate;
19
+ exports.dateFromOption = dateFromOption;
20
+ const dayjs_1 = __importDefault(require("dayjs"));
21
+ const customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
22
+ dayjs_1.default.extend(customParseFormat_1.default);
23
+ exports.DATE_PICKER_COLUMNS = ['year', 'month', 'day'];
24
+ const DEFAULT_MIN = (0, dayjs_1.default)('1900-01-01', 'YYYY-MM-DD', true).startOf('day');
25
+ const DEFAULT_MAX = (0, dayjs_1.default)('2100-12-31', 'YYYY-MM-DD', true).endOf('day');
26
+ const VALUE_FORMAT = {
27
+ year: 'YYYY',
28
+ month: 'YYYY-MM',
29
+ day: 'YYYY-MM-DD',
30
+ };
31
+ const PARSE_FORMATS = {
32
+ year: 'YYYY',
33
+ month: ['YYYY-M', 'YYYY-MM'],
34
+ day: ['YYYY-M-D', 'YYYY-MM-DD'],
35
+ };
36
+ const PRECISION_COLUMN_COUNT = {
37
+ year: 1,
38
+ month: 2,
39
+ day: 3,
40
+ };
41
+ function pad2(n) {
42
+ return String(n).padStart(2, '0');
43
+ }
44
+ function isDatePickerPrecision(input) {
45
+ return input === 'year' || input === 'month' || input === 'day';
46
+ }
47
+ function normalizePrecision(input) {
48
+ return isDatePickerPrecision(input) ? input : 'day';
49
+ }
50
+ function getColumnCount(precision) {
51
+ return PRECISION_COLUMN_COUNT[precision];
52
+ }
53
+ function formatDatePickerValue(date, precision) {
54
+ return date.format(VALUE_FORMAT[precision]);
55
+ }
56
+ function toDatePickerParts(date, precision) {
57
+ if (precision === 'year')
58
+ return { year: date.year() };
59
+ if (precision === 'month')
60
+ return { year: date.year(), month: date.month() + 1 };
61
+ return { year: date.year(), month: date.month() + 1, day: date.date() };
62
+ }
63
+ function pathFromDate(date, precision) {
64
+ var _a, _b, _c;
65
+ const parts = toDatePickerParts(date, precision);
66
+ if (precision === 'year')
67
+ return [parts.year];
68
+ if (precision === 'month')
69
+ return [parts.year, (_a = parts.month) !== null && _a !== void 0 ? _a : 1];
70
+ return [parts.year, (_b = parts.month) !== null && _b !== void 0 ? _b : 1, (_c = parts.day) !== null && _c !== void 0 ? _c : 1];
71
+ }
72
+ function normalizeDateByPrecision(date, precision) {
73
+ if (precision === 'year')
74
+ return date.startOf('year');
75
+ if (precision === 'month')
76
+ return date.startOf('month');
77
+ return date.startOf('day');
78
+ }
79
+ function parseStringInput(input, fieldName) {
80
+ const value = input.trim();
81
+ if (!value)
82
+ return undefined;
83
+ const inputPrecision = /^\d{4}$/.test(value)
84
+ ? 'year'
85
+ : /^\d{4}-\d{1,2}$/.test(value)
86
+ ? 'month'
87
+ : /^\d{4}-\d{1,2}-\d{1,2}$/.test(value)
88
+ ? 'day'
89
+ : null;
90
+ if (!inputPrecision) {
91
+ throw new Error(`[zkit-ui][DatePicker] Invalid ${fieldName}: "${input}". Expected YYYY, YYYY-MM, or YYYY-MM-DD.`);
92
+ }
93
+ const format = PARSE_FORMATS[inputPrecision];
94
+ const date = (0, dayjs_1.default)(value, format, true);
95
+ if (!date.isValid()) {
96
+ throw new Error(`[zkit-ui][DatePicker] Invalid ${fieldName}: "${input}".`);
97
+ }
98
+ return { date, inputPrecision };
99
+ }
100
+ function parseDatePickerInput(input, fieldName) {
101
+ if (input == null)
102
+ return undefined;
103
+ if (typeof input === 'string')
104
+ return parseStringInput(input, fieldName);
105
+ const date = dayjs_1.default.isDayjs(input) ? input : (0, dayjs_1.default)(input);
106
+ if (!date.isValid()) {
107
+ throw new Error(`[zkit-ui][DatePicker] Invalid ${fieldName}.`);
108
+ }
109
+ return { date, inputPrecision: 'day' };
110
+ }
111
+ function resolveBoundary(input, kind) {
112
+ const parsed = parseDatePickerInput(input, kind);
113
+ if (!parsed)
114
+ return kind === 'min' ? DEFAULT_MIN : DEFAULT_MAX;
115
+ if (kind === 'min') {
116
+ return normalizeDateByPrecision(parsed.date, parsed.inputPrecision);
117
+ }
118
+ if (parsed.inputPrecision === 'year')
119
+ return parsed.date.endOf('year');
120
+ if (parsed.inputPrecision === 'month')
121
+ return parsed.date.endOf('month');
122
+ return parsed.date.endOf('day');
123
+ }
124
+ function resolveDatePickerBounds(min, max) {
125
+ const bounds = {
126
+ min: resolveBoundary(min, 'min'),
127
+ max: resolveBoundary(max, 'max'),
128
+ };
129
+ if (bounds.min.isAfter(bounds.max)) {
130
+ throw new Error('[zkit-ui][DatePicker] Invalid bounds: min is after max.');
131
+ }
132
+ return bounds;
133
+ }
134
+ function clampToBounds(date, bounds) {
135
+ if (date.isBefore(bounds.min))
136
+ return bounds.min;
137
+ if (date.isAfter(bounds.max))
138
+ return bounds.max;
139
+ return date;
140
+ }
141
+ function resolveCommittedDate(value, bounds, precision) {
142
+ const parsed = parseDatePickerInput(value, 'value');
143
+ if (!parsed)
144
+ return null;
145
+ return normalizeDateByPrecision(clampToBounds(parsed.date, bounds), precision);
146
+ }
147
+ function resolvePickerDate(committedDate, defaultPickerValue, bounds, precision) {
148
+ var _a;
149
+ if (committedDate)
150
+ return committedDate;
151
+ const parsed = parseDatePickerInput(defaultPickerValue, 'defaultPickerValue');
152
+ const seed = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.date) !== null && _a !== void 0 ? _a : (0, dayjs_1.default)();
153
+ return normalizeDateByPrecision(clampToBounds(seed, bounds), precision);
154
+ }
155
+ function optionDate(parts) {
156
+ var _a, _b;
157
+ const month = (_a = parts.month) !== null && _a !== void 0 ? _a : 1;
158
+ const day = (_b = parts.day) !== null && _b !== void 0 ? _b : 1;
159
+ return (0, dayjs_1.default)(`${parts.year}-${pad2(month)}-${pad2(day)}`, 'YYYY-MM-DD', true).startOf('day');
160
+ }
161
+ function createOption(column, parts, disabled = false) {
162
+ var _a, _b;
163
+ const value = column === 'year' ? parts.year : column === 'month' ? (_a = parts.month) !== null && _a !== void 0 ? _a : 1 : (_b = parts.day) !== null && _b !== void 0 ? _b : 1;
164
+ return {
165
+ value,
166
+ label: column === 'year' ? String(value) : pad2(value),
167
+ disabled,
168
+ column,
169
+ year: parts.year,
170
+ month: parts.month,
171
+ day: parts.day,
172
+ };
173
+ }
174
+ function resolveDisabled(date, parts, column, precision, isDateDisabled) {
175
+ return !!(isDateDisabled === null || isDateDisabled === void 0 ? void 0 : isDateDisabled(date, { column, precision, parts }));
176
+ }
177
+ function buildDays(year, month, config) {
178
+ const { bounds, isDateDisabled, precision } = config;
179
+ const isMinMonth = year === bounds.min.year() && month === bounds.min.month() + 1;
180
+ const isMaxMonth = year === bounds.max.year() && month === bounds.max.month() + 1;
181
+ const monthStart = (0, dayjs_1.default)(`${year}-${pad2(month)}-01`, 'YYYY-MM-DD', true);
182
+ const dayMin = isMinMonth ? bounds.min.date() : 1;
183
+ const dayMax = isMaxMonth ? bounds.max.date() : monthStart.daysInMonth();
184
+ const days = [];
185
+ for (let day = dayMin; day <= dayMax; day += 1) {
186
+ const parts = { year, month, day };
187
+ days.push(createOption('day', parts, resolveDisabled(optionDate(parts), parts, 'day', precision, isDateDisabled)));
188
+ }
189
+ return days;
190
+ }
191
+ function buildMonths(year, config) {
192
+ const { bounds, isDateDisabled, precision } = config;
193
+ const isMinYear = year === bounds.min.year();
194
+ const isMaxYear = year === bounds.max.year();
195
+ const monthMin = isMinYear ? bounds.min.month() + 1 : 1;
196
+ const monthMax = isMaxYear ? bounds.max.month() + 1 : 12;
197
+ const months = [];
198
+ for (let month = monthMin; month <= monthMax; month += 1) {
199
+ const parts = { year, month };
200
+ const option = createOption('month', parts, precision === 'month'
201
+ ? resolveDisabled(optionDate(parts), parts, 'month', precision, isDateDisabled)
202
+ : false);
203
+ if (precision === 'day') {
204
+ option.children = buildDays(year, month, config);
205
+ option.disabled = option.children.length > 0 && option.children.every((child) => child.disabled);
206
+ }
207
+ months.push(option);
208
+ }
209
+ return months;
210
+ }
211
+ function buildDatePickerOptions(config) {
212
+ const { bounds, isDateDisabled, precision } = config;
213
+ const years = [];
214
+ for (let year = bounds.min.year(); year <= bounds.max.year(); year += 1) {
215
+ const parts = { year };
216
+ const option = createOption('year', parts, precision === 'year'
217
+ ? resolveDisabled(optionDate(parts), parts, 'year', precision, isDateDisabled)
218
+ : false);
219
+ if (precision !== 'year') {
220
+ option.children = buildMonths(year, config);
221
+ option.disabled = option.children.length > 0 && option.children.every((child) => child.disabled);
222
+ }
223
+ years.push(option);
224
+ }
225
+ return years;
226
+ }
227
+ function numberValues(values) {
228
+ return values.map((value) => Number(value)).filter((value) => Number.isFinite(value));
229
+ }
230
+ function dateFromPath(values, precision) {
231
+ const year = values[0];
232
+ if (!Number.isFinite(year))
233
+ return null;
234
+ const month = precision === 'year' ? 1 : values[1];
235
+ const day = precision === 'day' ? values[2] : 1;
236
+ if (!Number.isFinite(month) || !Number.isFinite(day))
237
+ return null;
238
+ const date = (0, dayjs_1.default)(`${year}-${pad2(month)}-${pad2(day)}`, 'YYYY-MM-DD', true);
239
+ return date.isValid() ? normalizeDateByPrecision(date, precision) : null;
240
+ }
241
+ function resolveSelectionLabel(selection, labelFormat) {
242
+ if (typeof labelFormat === 'function')
243
+ return labelFormat(selection);
244
+ if (typeof labelFormat === 'string' && labelFormat.trim())
245
+ return selection.date.format(labelFormat);
246
+ return selection.value;
247
+ }
248
+ function createDatePickerSelection(pickerSelection, precision, labelFormat, labelOverride) {
249
+ const values = numberValues(pickerSelection.values).slice(0, getColumnCount(precision));
250
+ const date = dateFromPath(values, precision);
251
+ if (!date)
252
+ return null;
253
+ const base = {
254
+ value: formatDatePickerValue(date, precision),
255
+ date,
256
+ precision,
257
+ parts: toDatePickerParts(date, precision),
258
+ values,
259
+ label: '',
260
+ labels: pickerSelection.labels.slice(0, getColumnCount(precision)),
261
+ items: pickerSelection.items.slice(0, getColumnCount(precision)),
262
+ columns: pickerSelection.columns.slice(0, getColumnCount(precision)),
263
+ indices: pickerSelection.indices.slice(0, getColumnCount(precision)),
264
+ isComplete: pickerSelection.isComplete,
265
+ };
266
+ return {
267
+ ...base,
268
+ label: labelOverride !== null && labelOverride !== void 0 ? labelOverride : resolveSelectionLabel(base, labelFormat),
269
+ };
270
+ }
271
+ function findOptionPath(options, values) {
272
+ const items = [];
273
+ const columns = [];
274
+ const indices = [];
275
+ let current = options;
276
+ for (const value of values) {
277
+ columns.push(current);
278
+ const index = current.findIndex((option) => option.value === value);
279
+ if (index < 0)
280
+ break;
281
+ const item = current[index];
282
+ if (!item)
283
+ break;
284
+ items.push(item);
285
+ indices.push(index);
286
+ current = Array.isArray(item.children) ? item.children : [];
287
+ }
288
+ return { items, columns, indices };
289
+ }
290
+ function createDatePickerSelectionFromDate(date, precision, options, labelFormat) {
291
+ const values = pathFromDate(date, precision);
292
+ const { items, columns, indices } = findOptionPath(options, values);
293
+ const labels = values.map((value, index) => (index === 0 ? String(value) : pad2(value)));
294
+ const base = {
295
+ value: formatDatePickerValue(date, precision),
296
+ date,
297
+ precision,
298
+ parts: toDatePickerParts(date, precision),
299
+ values,
300
+ label: '',
301
+ labels,
302
+ items,
303
+ columns,
304
+ indices,
305
+ isComplete: true,
306
+ };
307
+ return {
308
+ ...base,
309
+ label: resolveSelectionLabel(base, labelFormat),
310
+ };
311
+ }
312
+ function dateFromOption(option, precision) {
313
+ if (!option)
314
+ return undefined;
315
+ return normalizeDateByPrecision(optionDate(option), precision);
316
+ }