wz-h5-design 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 (241) hide show
  1. package/README.md +51 -0
  2. package/dist/Button/index.js +84 -0
  3. package/dist/Button/index.umd.cjs +1 -0
  4. package/dist/Button/style/index.css +1 -0
  5. package/dist/Button/style/index.js +1 -0
  6. package/dist/Button/style.css +1 -0
  7. package/dist/Card/index.js +32 -0
  8. package/dist/Card/index.umd.cjs +1 -0
  9. package/dist/Card/style/index.css +1 -0
  10. package/dist/Card/style/index.js +1 -0
  11. package/dist/Card/style.css +1 -0
  12. package/dist/Cascader/index.js +94 -0
  13. package/dist/Cascader/index.umd.cjs +1 -0
  14. package/dist/Cascader/style/index.css +1 -0
  15. package/dist/Cascader/style/index.js +1 -0
  16. package/dist/Cascader/style.css +1 -0
  17. package/dist/Cell/index.js +135 -0
  18. package/dist/Cell/index.umd.cjs +6 -0
  19. package/dist/Cell/style/index.css +1 -0
  20. package/dist/Cell/style/index.js +1 -0
  21. package/dist/Cell/style.css +1 -0
  22. package/dist/CheckList/index.js +34 -0
  23. package/dist/CheckList/index.umd.cjs +1 -0
  24. package/dist/CheckList/style/index.css +1 -0
  25. package/dist/CheckList/style/index.js +1 -0
  26. package/dist/CheckList/style.css +1 -0
  27. package/dist/Checkbox/index.js +84 -0
  28. package/dist/Checkbox/index.umd.cjs +1 -0
  29. package/dist/Checkbox/style/index.css +1 -0
  30. package/dist/Checkbox/style/index.js +1 -0
  31. package/dist/Checkbox/style.css +1 -0
  32. package/dist/Collapse/index.js +72 -0
  33. package/dist/Collapse/index.umd.cjs +1 -0
  34. package/dist/Collapse/style/index.css +1 -0
  35. package/dist/Collapse/style/index.js +1 -0
  36. package/dist/Collapse/style.css +1 -0
  37. package/dist/DatePicker/index.js +154 -0
  38. package/dist/DatePicker/index.umd.cjs +1 -0
  39. package/dist/DatePicker/style/index.css +1 -0
  40. package/dist/DatePicker/style/index.js +1 -0
  41. package/dist/DatePicker/style.css +1 -0
  42. package/dist/DateRangePicker/index.js +220 -0
  43. package/dist/DateRangePicker/index.umd.cjs +1 -0
  44. package/dist/DateRangePicker/style/index.css +1 -0
  45. package/dist/DateRangePicker/style/index.js +1 -0
  46. package/dist/DateRangePicker/style.css +1 -0
  47. package/dist/Dialog/index.js +216 -0
  48. package/dist/Dialog/index.umd.cjs +6 -0
  49. package/dist/Dialog/style/index.css +1 -0
  50. package/dist/Dialog/style/index.js +1 -0
  51. package/dist/Dialog/style.css +1 -0
  52. package/dist/Divider/index.js +27 -0
  53. package/dist/Divider/index.umd.cjs +1 -0
  54. package/dist/Divider/style/index.css +1 -0
  55. package/dist/Divider/style/index.js +1 -0
  56. package/dist/Divider/style.css +1 -0
  57. package/dist/DropDownMenu/index.js +111 -0
  58. package/dist/DropDownMenu/index.umd.cjs +1 -0
  59. package/dist/DropDownMenu/style/index.css +1 -0
  60. package/dist/DropDownMenu/style/index.js +1 -0
  61. package/dist/DropDownMenu/style.css +1 -0
  62. package/dist/Flex/index.js +85 -0
  63. package/dist/Flex/index.umd.cjs +1 -0
  64. package/dist/Flex/style/index.css +1 -0
  65. package/dist/Flex/style/index.js +1 -0
  66. package/dist/Flex/style.css +1 -0
  67. package/dist/Grid/index.js +54 -0
  68. package/dist/Grid/index.umd.cjs +1 -0
  69. package/dist/Grid/style/index.css +1 -0
  70. package/dist/Grid/style/index.js +1 -0
  71. package/dist/Grid/style.css +1 -0
  72. package/dist/GridView/index.js +90 -0
  73. package/dist/GridView/index.umd.cjs +1 -0
  74. package/dist/GridView/style/index.css +1 -0
  75. package/dist/GridView/style/index.js +1 -0
  76. package/dist/GridView/style.css +1 -0
  77. package/dist/Icon/index.js +31 -0
  78. package/dist/Icon/index.umd.cjs +1 -0
  79. package/dist/Icon/style/index.css +1 -0
  80. package/dist/Icon/style/index.js +1 -0
  81. package/dist/Icon/style.css +1 -0
  82. package/dist/Input/index.js +148 -0
  83. package/dist/Input/index.umd.cjs +1 -0
  84. package/dist/Input/style/index.css +1 -0
  85. package/dist/Input/style/index.js +1 -0
  86. package/dist/Input/style.css +1 -0
  87. package/dist/NavBar/index.js +175 -0
  88. package/dist/NavBar/index.umd.cjs +6 -0
  89. package/dist/NavBar/style/index.css +1 -0
  90. package/dist/NavBar/style/index.js +1 -0
  91. package/dist/NavBar/style.css +1 -0
  92. package/dist/Popup/index.js +124 -0
  93. package/dist/Popup/index.umd.cjs +1 -0
  94. package/dist/Popup/style/index.css +1 -0
  95. package/dist/Popup/style/index.js +1 -0
  96. package/dist/Popup/style.css +1 -0
  97. package/dist/Radio/index.js +82 -0
  98. package/dist/Radio/index.umd.cjs +1 -0
  99. package/dist/Radio/style/index.css +1 -0
  100. package/dist/Radio/style/index.js +1 -0
  101. package/dist/Radio/style.css +1 -0
  102. package/dist/Search/index.js +158 -0
  103. package/dist/Search/index.umd.cjs +1 -0
  104. package/dist/Search/style/index.css +1 -0
  105. package/dist/Search/style/index.js +1 -0
  106. package/dist/Search/style.css +1 -0
  107. package/dist/Stepper/index.js +140 -0
  108. package/dist/Stepper/index.umd.cjs +1 -0
  109. package/dist/Stepper/style/index.css +1 -0
  110. package/dist/Stepper/style/index.js +1 -0
  111. package/dist/Stepper/style.css +1 -0
  112. package/dist/Switch/index.js +53 -0
  113. package/dist/Switch/index.umd.cjs +1 -0
  114. package/dist/Switch/style/index.css +1 -0
  115. package/dist/Switch/style/index.js +1 -0
  116. package/dist/Switch/style.css +1 -0
  117. package/dist/Tabbar/index.js +159 -0
  118. package/dist/Tabbar/index.umd.cjs +6 -0
  119. package/dist/Tabbar/style/index.css +1 -0
  120. package/dist/Tabbar/style/index.js +1 -0
  121. package/dist/Tabbar/style.css +1 -0
  122. package/dist/Tabs/index.js +50 -0
  123. package/dist/Tabs/index.umd.cjs +1 -0
  124. package/dist/Tabs/style/index.css +1 -0
  125. package/dist/Tabs/style/index.js +1 -0
  126. package/dist/Tabs/style.css +1 -0
  127. package/dist/Tag/index.js +96 -0
  128. package/dist/Tag/index.umd.cjs +6 -0
  129. package/dist/Tag/style/index.css +1 -0
  130. package/dist/Tag/style/index.js +1 -0
  131. package/dist/Tag/style.css +1 -0
  132. package/dist/TimePicker/index.js +201 -0
  133. package/dist/TimePicker/index.umd.cjs +1 -0
  134. package/dist/TimePicker/style/index.css +1 -0
  135. package/dist/TimePicker/style/index.js +1 -0
  136. package/dist/TimePicker/style.css +1 -0
  137. package/dist/Tip/index.js +104 -0
  138. package/dist/Tip/index.umd.cjs +6 -0
  139. package/dist/Tip/style/index.css +1 -0
  140. package/dist/Tip/style/index.js +1 -0
  141. package/dist/Tip/style.css +1 -0
  142. package/dist/Toast/index.js +183 -0
  143. package/dist/Toast/index.umd.cjs +6 -0
  144. package/dist/Toast/style/index.css +1 -0
  145. package/dist/Toast/style/index.js +1 -0
  146. package/dist/Toast/style.css +1 -0
  147. package/dist/Tooltip/index.js +172 -0
  148. package/dist/Tooltip/index.umd.cjs +6 -0
  149. package/dist/Tooltip/style/index.css +1 -0
  150. package/dist/Tooltip/style/index.js +1 -0
  151. package/dist/Tooltip/style.css +1 -0
  152. package/dist/assets/fonts/qitu/iconfont.css +140 -0
  153. package/dist/assets/fonts/qitu/iconfont.ttf +0 -0
  154. package/dist/assets/fonts/qitu/iconfont.woff +0 -0
  155. package/dist/assets/fonts/qitu/iconfont.woff2 +0 -0
  156. package/dist/assets/fonts/qituyonghu/iconfont.css +64 -0
  157. package/dist/assets/fonts/qituyonghu/iconfont.ttf +0 -0
  158. package/dist/assets/fonts/qituyonghu/iconfont.woff +0 -0
  159. package/dist/assets/fonts/qituyonghu/iconfont.woff2 +0 -0
  160. package/dist/assets/fonts/wzdaili/iconfont.css +71 -0
  161. package/dist/assets/fonts/wzdaili/iconfont.ttf +0 -0
  162. package/dist/assets/fonts/wzdaili/iconfont.woff +0 -0
  163. package/dist/assets/fonts/wzdaili/iconfont.woff2 +0 -0
  164. package/dist/assets/fonts/wzyonghu/iconfont.css +97 -0
  165. package/dist/assets/fonts/wzyonghu/iconfont.ttf +0 -0
  166. package/dist/assets/fonts/wzyonghu/iconfont.woff +0 -0
  167. package/dist/assets/fonts/wzyonghu/iconfont.woff2 +0 -0
  168. package/dist/assets/fonts/yunying/iconfont.css +303 -0
  169. package/dist/assets/fonts/yunying/iconfont.ttf +0 -0
  170. package/dist/assets/fonts/yunying/iconfont.woff +0 -0
  171. package/dist/assets/fonts/yunying/iconfont.woff2 +0 -0
  172. package/dist/style.css +1 -0
  173. package/dist/types/components/Button/Button.d.ts +16 -0
  174. package/dist/types/components/Button/index.d.ts +5 -0
  175. package/dist/types/components/Card/Card.d.ts +15 -0
  176. package/dist/types/components/Card/index.d.ts +3 -0
  177. package/dist/types/components/Cascader/Cascader.d.ts +14 -0
  178. package/dist/types/components/Cascader/index.d.ts +3 -0
  179. package/dist/types/components/Cell/Cell.d.ts +24 -0
  180. package/dist/types/components/Cell/CellGroup.d.ts +8 -0
  181. package/dist/types/components/Cell/index.d.ts +8 -0
  182. package/dist/types/components/CheckList/CheckList.d.ts +11 -0
  183. package/dist/types/components/CheckList/index.d.ts +3 -0
  184. package/dist/types/components/Checkbox/Checkbox.d.ts +62 -0
  185. package/dist/types/components/Checkbox/index.d.ts +3 -0
  186. package/dist/types/components/Collapse/Collapse.d.ts +17 -0
  187. package/dist/types/components/Collapse/index.d.ts +3 -0
  188. package/dist/types/components/DatePicker/DatePicker.d.ts +13 -0
  189. package/dist/types/components/DatePicker/index.d.ts +3 -0
  190. package/dist/types/components/DateRangePicker/DateRangePicker.d.ts +13 -0
  191. package/dist/types/components/DateRangePicker/index.d.ts +3 -0
  192. package/dist/types/components/Dialog/Dialog.d.ts +16 -0
  193. package/dist/types/components/Dialog/imperative.d.ts +8 -0
  194. package/dist/types/components/Dialog/index.d.ts +8 -0
  195. package/dist/types/components/Divider/Divider.d.ts +11 -0
  196. package/dist/types/components/Divider/index.d.ts +3 -0
  197. package/dist/types/components/DropDownMenu/DropdownMenu.d.ts +19 -0
  198. package/dist/types/components/DropDownMenu/index.d.ts +2 -0
  199. package/dist/types/components/Flex/Flex.d.ts +25 -0
  200. package/dist/types/components/Flex/index.d.ts +3 -0
  201. package/dist/types/components/Grid/Grid.d.ts +22 -0
  202. package/dist/types/components/Grid/index.d.ts +3 -0
  203. package/dist/types/components/GridView/GridView.d.ts +59 -0
  204. package/dist/types/components/GridView/index.d.ts +2 -0
  205. package/dist/types/components/Icon/Icon.d.ts +12 -0
  206. package/dist/types/components/Icon/icon-data.d.ts +42 -0
  207. package/dist/types/components/Icon/index.d.ts +3 -0
  208. package/dist/types/components/Input/Input.d.ts +17 -0
  209. package/dist/types/components/Input/index.d.ts +3 -0
  210. package/dist/types/components/NavBar/NavBar.d.ts +20 -0
  211. package/dist/types/components/NavBar/index.d.ts +3 -0
  212. package/dist/types/components/Popup/Popup.d.ts +23 -0
  213. package/dist/types/components/Popup/index.d.ts +3 -0
  214. package/dist/types/components/Radio/Radio.d.ts +62 -0
  215. package/dist/types/components/Radio/index.d.ts +3 -0
  216. package/dist/types/components/Search/Search.d.ts +26 -0
  217. package/dist/types/components/Search/index.d.ts +3 -0
  218. package/dist/types/components/Stepper/Stepper.d.ts +22 -0
  219. package/dist/types/components/Stepper/index.d.ts +3 -0
  220. package/dist/types/components/Switch/Switch.d.ts +16 -0
  221. package/dist/types/components/Switch/index.d.ts +3 -0
  222. package/dist/types/components/Tabbar/Tabbar.d.ts +39 -0
  223. package/dist/types/components/Tabbar/index.d.ts +3 -0
  224. package/dist/types/components/Tabs/Tabs.d.ts +25 -0
  225. package/dist/types/components/Tabs/index.d.ts +3 -0
  226. package/dist/types/components/Tag/Tag.d.ts +39 -0
  227. package/dist/types/components/Tag/index.d.ts +3 -0
  228. package/dist/types/components/TimePicker/TimePicker.d.ts +12 -0
  229. package/dist/types/components/TimePicker/index.d.ts +3 -0
  230. package/dist/types/components/Tip/Tip.d.ts +32 -0
  231. package/dist/types/components/Tip/index.d.ts +3 -0
  232. package/dist/types/components/Toast/Toast.d.ts +11 -0
  233. package/dist/types/components/Toast/index.d.ts +15 -0
  234. package/dist/types/components/Tooltip/Tooltip.d.ts +17 -0
  235. package/dist/types/components/Tooltip/index.d.ts +3 -0
  236. package/dist/types/components/index.d.ts +31 -0
  237. package/dist/types/index.d.ts +7 -0
  238. package/dist/types/utils/color.d.ts +1 -0
  239. package/dist/wz-h5-design.es.js +2449 -0
  240. package/dist/wz-h5-design.umd.js +6 -0
  241. package/package.json +84 -0
@@ -0,0 +1 @@
1
+ .wz-checkbox-group{flex-direction:column;gap:12px;display:inline-flex}.wz-checkbox-group.wz-checkbox-group--horizontal{flex-direction:row;align-items:center}.wz-checkbox-wrapper{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;outline:none;align-items:center;padding:8px 0;font-family:"Alibaba PuHuiTi 2.0",Alibaba-PuHuiTi-Regular,PingFang SC,Microsoft YaHei,Arial,sans-serif;transition:all .2s ease-in-out;display:inline-flex;position:relative}.wz-checkbox-wrapper.wz-checkbox--small .wz-checkbox-inner{width:16px;height:16px}.wz-checkbox-wrapper.wz-checkbox--small .wz-checkbox-label{margin-left:8px;font-size:13px}.wz-checkbox-wrapper.wz-checkbox--medium .wz-checkbox-inner{width:18px;height:18px}.wz-checkbox-wrapper.wz-checkbox--medium .wz-checkbox-label{margin-left:12px;font-size:14px}.wz-checkbox-wrapper.wz-checkbox--large .wz-checkbox-inner{width:20px;height:20px}.wz-checkbox-wrapper.wz-checkbox--large .wz-checkbox-label{margin-left:16px;font-size:16px}.wz-checkbox-wrapper.wz-checkbox--disabled{cursor:not-allowed;opacity:.6}.wz-checkbox-wrapper.wz-checkbox--disabled .wz-checkbox-inner{background-color:#f5f7fa;border-color:#e4e7ed}.wz-checkbox-wrapper.wz-checkbox--disabled .wz-checkbox-label{color:#c0c4cc}.wz-checkbox-input{opacity:0;z-index:-1;width:0;height:0;margin:0;padding:0;position:absolute}.wz-checkbox-inner{background-color:#fff;border:1.5px solid #dcdfe6;border-radius:2px;transition:all .2s cubic-bezier(.4,0,.2,1);display:inline-block;position:relative;box-shadow:0 1px 2px #0000000d}.wz-checkbox-inner:after{content:"";opacity:0;pointer-events:none;border:2px solid #fff;border-width:0 2px 2px 0;width:6px;height:12px;transition:all .2s cubic-bezier(.4,0,.2,1);display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-60%)scale(.7)rotate(45deg)}.wz-checkbox-input:checked+.wz-checkbox-inner{border-color:var(--wz-primary-color,#22c94d);background-color:var(--wz-primary-color,#22c94d);box-shadow:0 2px 4px #22c94d33}.wz-checkbox-input:checked+.wz-checkbox-inner:after{opacity:1;transform:translate(-50%,-60%)scale(1)rotate(45deg)}.wz-checkbox-input:focus+.wz-checkbox-inner{border-color:var(--wz-primary-color,#22c94d);box-shadow:0 0 0 3px #22c94d26}.wz-checkbox-wrapper:hover .wz-checkbox-inner{border-color:var(--wz-primary-color,#22c94d);box-shadow:0 2px 4px #22c94d1a}.wz-checkbox-label{color:#333;font-family:"Alibaba PuHuiTi 2.0",Alibaba-PuHuiTi-Regular,PingFang SC,Microsoft YaHei,Arial,sans-serif;line-height:1.5;transition:color .2s}.wz-checkbox-wrapper:hover .wz-checkbox-label{color:var(--wz-primary-color,#22c94d)}@media screen and (max-width:767px){.wz-checkbox-group{gap:8px}.wz-checkbox-wrapper.wz-checkbox--small .wz-checkbox-label{font-size:14px}.wz-checkbox-wrapper.wz-checkbox--medium .wz-checkbox-label{font-size:15px}.wz-checkbox-wrapper.wz-checkbox--large .wz-checkbox-label{font-size:16px}}
@@ -0,0 +1,72 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ const Collapse = ({
4
+ title,
5
+ extra,
6
+ children,
7
+ defaultExpanded = false,
8
+ expanded,
9
+ onChange,
10
+ style,
11
+ className = "",
12
+ headerStyle,
13
+ headerClassName = "",
14
+ contentStyle,
15
+ contentClassName = ""
16
+ }) => {
17
+ const [innerExpanded, setInnerExpanded] = useState(defaultExpanded);
18
+ const isControlled = expanded !== void 0;
19
+ const isExpanded = isControlled ? expanded : innerExpanded;
20
+ const handleToggle = () => {
21
+ if (!isControlled) {
22
+ setInnerExpanded(!isExpanded);
23
+ }
24
+ onChange == null ? void 0 : onChange(!isExpanded);
25
+ };
26
+ return /* @__PURE__ */ jsxs("div", { className: `wz-collapse${className ? " " + className : ""}`, style, children: [
27
+ /* @__PURE__ */ jsxs(
28
+ "div",
29
+ {
30
+ className: `wz-collapse-header ${headerClassName}`,
31
+ onClick: handleToggle,
32
+ style: headerStyle,
33
+ children: [
34
+ /* @__PURE__ */ jsx("div", { className: "wz-collapse-title", children: title }),
35
+ /* @__PURE__ */ jsx("div", { className: "wz-collapse-extra", onClick: (e) => e.stopPropagation(), children: extra }),
36
+ /* @__PURE__ */ jsx(
37
+ "svg",
38
+ {
39
+ className: `wz-collapse-arrow${isExpanded ? " expanded" : ""}`,
40
+ width: "20",
41
+ height: "20",
42
+ viewBox: "0 0 20 20",
43
+ style: { transition: "transform 0.2s", transform: isExpanded ? "rotate(90deg)" : "rotate(0deg)" },
44
+ children: /* @__PURE__ */ jsx(
45
+ "polyline",
46
+ {
47
+ points: "7,5 13,10 7,15",
48
+ fill: "none",
49
+ stroke: "#888",
50
+ strokeWidth: "2",
51
+ strokeLinecap: "round",
52
+ strokeLinejoin: "round"
53
+ }
54
+ )
55
+ }
56
+ )
57
+ ]
58
+ }
59
+ ),
60
+ /* @__PURE__ */ jsx(
61
+ "div",
62
+ {
63
+ className: `wz-collapse-content${isExpanded ? " expanded" : ""} ${contentClassName}`,
64
+ style: contentStyle,
65
+ children
66
+ }
67
+ )
68
+ ] });
69
+ };
70
+ export {
71
+ Collapse as default
72
+ };
@@ -0,0 +1 @@
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react/jsx-runtime"),require("react")):"function"==typeof define&&define.amd?define(["react/jsx-runtime","react"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Collapse=t(e.jsxRuntime,e.React)}(this,(function(e,t){"use strict";return({title:s,extra:l,children:n,defaultExpanded:a=!1,expanded:o,onChange:i,style:r,className:d="",headerStyle:c,headerClassName:p="",contentStyle:u,contentClassName:x=""})=>{const[h,f]=t.useState(a),m=void 0!==o,j=m?o:h;return e.jsxs("div",{className:"wz-collapse"+(d?" "+d:""),style:r,children:[e.jsxs("div",{className:`wz-collapse-header ${p}`,onClick:()=>{m||f(!j),null==i||i(!j)},style:c,children:[e.jsx("div",{className:"wz-collapse-title",children:s}),e.jsx("div",{className:"wz-collapse-extra",onClick:e=>e.stopPropagation(),children:l}),e.jsx("svg",{className:"wz-collapse-arrow"+(j?" expanded":""),width:"20",height:"20",viewBox:"0 0 20 20",style:{transition:"transform 0.2s",transform:j?"rotate(90deg)":"rotate(0deg)"},children:e.jsx("polyline",{points:"7,5 13,10 7,15",fill:"none",stroke:"#888",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})]}),e.jsx("div",{className:`wz-collapse-content${j?" expanded":""} ${x}`,style:u,children:n})]})}}));
@@ -0,0 +1 @@
1
+ .wz-collapse{background:#fff;border-radius:8px;overflow:hidden}.wz-collapse-header{cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;outline:none;align-items:center;padding:12px 16px;display:flex;position:relative}.wz-collapse-title{color:#333;flex:1;font-size:15px;font-weight:500}.wz-collapse-extra{color:#999;margin-right:12px;font-size:13px}.wz-collapse-arrow{color:#999;transition:transform .2s}.wz-collapse-arrow.expanded{transform:rotate(90deg)}.wz-collapse-content{max-height:0;transition:max-height .2s;overflow:hidden}.wz-collapse-content.expanded{max-height:1000px}
@@ -0,0 +1 @@
1
+ import './index.css';
@@ -0,0 +1 @@
1
+ .wz-collapse{background:#fff;border-radius:8px;overflow:hidden}.wz-collapse-header{cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;outline:none;align-items:center;padding:12px 16px;display:flex;position:relative}.wz-collapse-title{color:#333;flex:1;font-size:15px;font-weight:500}.wz-collapse-extra{color:#999;margin-right:12px;font-size:13px}.wz-collapse-arrow{color:#999;transition:transform .2s}.wz-collapse-arrow.expanded{transform:rotate(90deg)}.wz-collapse-content{max-height:0;transition:max-height .2s;overflow:hidden}.wz-collapse-content.expanded{max-height:1000px}
@@ -0,0 +1,154 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import React, { useMemo, useState, useRef, useLayoutEffect } from "react";
3
+ const getYearList = (min, max) => {
4
+ const arr = [];
5
+ for (let i = min; i <= max; i++) arr.push(i.toString());
6
+ return arr;
7
+ };
8
+ const getMonthList = () => Array.from({ length: 12 }, (_, i) => (i + 1).toString().padStart(2, "0"));
9
+ const getDayList = (year, month) => {
10
+ const days = new Date(year, month, 0).getDate();
11
+ return Array.from({ length: days }, (_, i) => (i + 1).toString().padStart(2, "0"));
12
+ };
13
+ const DatePicker = ({
14
+ value,
15
+ onChange,
16
+ min = "1970-01-01",
17
+ max = "2100-12-31",
18
+ columns = ["year", "month", "day"],
19
+ itemHeight = 48,
20
+ className = "",
21
+ style
22
+ }) => {
23
+ const today = /* @__PURE__ */ new Date();
24
+ const [initYear, initMonth, initDay] = value ? value.split("-").map(Number) : [today.getFullYear(), today.getMonth() + 1, today.getDate()];
25
+ const minYear = Number(min.split("-")[0]);
26
+ const maxYear = Number(max.split("-")[0]);
27
+ const yearList = useMemo(() => getYearList(minYear, maxYear), [minYear, maxYear]);
28
+ const [year, setYear] = useState(initYear);
29
+ const [month, setMonth] = useState(initMonth);
30
+ const [day, setDay] = useState(initDay);
31
+ const monthList = getMonthList();
32
+ const dayList = getDayList(year, month);
33
+ const yearRef = useRef(null);
34
+ const monthRef = useRef(null);
35
+ const dayRef = useRef(null);
36
+ const startY = useRef(0);
37
+ const startScroll = useRef(0);
38
+ const isDragging = useRef(false);
39
+ const dragType = useRef(null);
40
+ useLayoutEffect(() => {
41
+ if (yearRef.current) yearRef.current.scrollTo({ top: (year - minYear) * itemHeight, behavior: "auto" });
42
+ }, [year, itemHeight, minYear]);
43
+ useLayoutEffect(() => {
44
+ if (monthRef.current) monthRef.current.scrollTo({ top: (month - 1) * itemHeight, behavior: "auto" });
45
+ }, [month, itemHeight]);
46
+ useLayoutEffect(() => {
47
+ if (dayRef.current) dayRef.current.scrollTo({ top: (day - 1) * itemHeight, behavior: "auto" });
48
+ }, [day, itemHeight]);
49
+ const handleTouchStart = (type) => (e) => {
50
+ var _a, _b, _c;
51
+ isDragging.current = true;
52
+ dragType.current = type;
53
+ startY.current = e.touches[0].clientY;
54
+ let scrollTop = 0;
55
+ if (type === "year") scrollTop = ((_a = yearRef.current) == null ? void 0 : _a.scrollTop) || 0;
56
+ if (type === "month") scrollTop = ((_b = monthRef.current) == null ? void 0 : _b.scrollTop) || 0;
57
+ if (type === "day") scrollTop = ((_c = dayRef.current) == null ? void 0 : _c.scrollTop) || 0;
58
+ startScroll.current = scrollTop;
59
+ };
60
+ const handleTouchMove = (e) => {
61
+ if (!isDragging.current || !dragType.current) return;
62
+ const deltaY = e.touches[0].clientY - startY.current;
63
+ if (dragType.current === "year" && yearRef.current) yearRef.current.scrollTop = startScroll.current - deltaY;
64
+ if (dragType.current === "month" && monthRef.current) monthRef.current.scrollTop = startScroll.current - deltaY;
65
+ if (dragType.current === "day" && dayRef.current) dayRef.current.scrollTop = startScroll.current - deltaY;
66
+ };
67
+ const handleTouchEnd = () => {
68
+ if (!isDragging.current || !dragType.current) return;
69
+ if (dragType.current === "year" && yearRef.current) {
70
+ const idx = Math.round(yearRef.current.scrollTop / itemHeight);
71
+ setYear(Number(yearList[idx]));
72
+ onChange == null ? void 0 : onChange(`${yearList[idx]}-${month.toString().padStart(2, "0")}-${day.toString().padStart(2, "0")}`);
73
+ }
74
+ if (dragType.current === "month" && monthRef.current) {
75
+ const idx = Math.round(monthRef.current.scrollTop / itemHeight);
76
+ setMonth(Number(monthList[idx]));
77
+ onChange == null ? void 0 : onChange(`${year}-${monthList[idx]}-${day.toString().padStart(2, "0")}`);
78
+ }
79
+ if (dragType.current === "day" && dayRef.current) {
80
+ const idx = Math.round(dayRef.current.scrollTop / itemHeight);
81
+ setDay(Number(dayList[idx]));
82
+ onChange == null ? void 0 : onChange(`${year}-${month.toString().padStart(2, "0")}-${dayList[idx]}`);
83
+ }
84
+ isDragging.current = false;
85
+ dragType.current = null;
86
+ };
87
+ const handleScroll = (type) => () => {
88
+ if (isDragging.current) return;
89
+ if (type === "year" && yearRef.current) {
90
+ const idx = Math.round(yearRef.current.scrollTop / itemHeight);
91
+ setYear(Number(yearList[idx]));
92
+ onChange == null ? void 0 : onChange(`${yearList[idx]}-${month.toString().padStart(2, "0")}-${day.toString().padStart(2, "0")}`);
93
+ }
94
+ if (type === "month" && monthRef.current) {
95
+ const idx = Math.round(monthRef.current.scrollTop / itemHeight);
96
+ setMonth(Number(monthList[idx]));
97
+ onChange == null ? void 0 : onChange(`${year}-${monthList[idx]}-${day.toString().padStart(2, "0")}`);
98
+ }
99
+ if (type === "day" && dayRef.current) {
100
+ const idx = Math.round(dayRef.current.scrollTop / itemHeight);
101
+ setDay(Number(dayList[idx]));
102
+ onChange == null ? void 0 : onChange(`${year}-${month.toString().padStart(2, "0")}-${dayList[idx]}`);
103
+ }
104
+ };
105
+ React.useEffect(() => {
106
+ if (value) {
107
+ const [y, m, d] = value.split("-").map(Number);
108
+ setYear(y);
109
+ setMonth(m);
110
+ setDay(d);
111
+ if (yearRef.current) yearRef.current.scrollTo({ top: (y - minYear) * itemHeight, behavior: "auto" });
112
+ if (monthRef.current) monthRef.current.scrollTo({ top: (m - 1) * itemHeight, behavior: "auto" });
113
+ if (dayRef.current) dayRef.current.scrollTo({ top: (d - 1) * itemHeight, behavior: "auto" });
114
+ }
115
+ }, [value]);
116
+ const renderColumn = (options, current, ref, type) => /* @__PURE__ */ jsxs(
117
+ "div",
118
+ {
119
+ className: "wz-date-picker-list",
120
+ ref,
121
+ style: { height: itemHeight * 3 },
122
+ onTouchStart: handleTouchStart(type),
123
+ onTouchMove: handleTouchMove,
124
+ onTouchEnd: handleTouchEnd,
125
+ onScroll: handleScroll(type),
126
+ children: [
127
+ /* @__PURE__ */ jsx("div", { style: { height: itemHeight } }),
128
+ options.map((opt, idx) => /* @__PURE__ */ jsx(
129
+ "div",
130
+ {
131
+ className: `wz-date-picker-item${idx === current ? " active" : ""}`,
132
+ style: { height: itemHeight },
133
+ children: type === "year" ? `${opt}年` : type === "month" ? `${opt}月` : `${opt}日`
134
+ },
135
+ opt
136
+ )),
137
+ /* @__PURE__ */ jsx("div", { style: { height: itemHeight } })
138
+ ]
139
+ }
140
+ );
141
+ return /* @__PURE__ */ jsxs("div", { className: `wz-date-picker ${className}`, style, children: [
142
+ /* @__PURE__ */ jsx("div", { className: "wz-date-picker-mask wz-date-picker-mask-top", style: { height: itemHeight } }),
143
+ /* @__PURE__ */ jsx("div", { className: "wz-date-picker-indicator", style: { height: itemHeight } }),
144
+ /* @__PURE__ */ jsxs("div", { className: "wz-date-picker-columns", children: [
145
+ columns.includes("year") && renderColumn(yearList, year - minYear, yearRef, "year"),
146
+ columns.includes("month") && renderColumn(monthList, month - 1, monthRef, "month"),
147
+ columns.includes("day") && renderColumn(dayList, day - 1, dayRef, "day")
148
+ ] }),
149
+ /* @__PURE__ */ jsx("div", { className: "wz-date-picker-mask wz-date-picker-mask-bottom", style: { height: itemHeight } })
150
+ ] });
151
+ };
152
+ export {
153
+ DatePicker as default
154
+ };
@@ -0,0 +1 @@
1
+ !function(t,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("react/jsx-runtime"),require("react")):"function"==typeof define&&define.amd?define(["react/jsx-runtime","react"],r):(t="undefined"!=typeof globalThis?globalThis:t||self).DatePicker=r(t.jsxRuntime,t.React)}(this,(function(t,r){"use strict";return({value:e,onChange:n,min:u="1970-01-01",max:c="2100-12-31",columns:o=["year","month","day"],itemHeight:a=48,className:l="",style:s})=>{const i=new Date,[d,h,p]=e?e.split("-").map(Number):[i.getFullYear(),i.getMonth()+1,i.getDate()],m=Number(u.split("-")[0]),f=Number(c.split("-")[0]),y=r.useMemo((()=>((t,r)=>{const e=[];for(let n=t;n<=r;n++)e.push(n.toString());return e})(m,f)),[m,f]),[g,S]=r.useState(d),[T,v]=r.useState(h),[$,b]=r.useState(p),N=Array.from({length:12},((t,r)=>(r+1).toString().padStart(2,"0"))),x=((t,r)=>{const e=new Date(t,r,0).getDate();return Array.from({length:e},((t,r)=>(r+1).toString().padStart(2,"0")))})(g,T),k=r.useRef(null),j=r.useRef(null),w=r.useRef(null),z=r.useRef(0),M=r.useRef(0),R=r.useRef(!1),D=r.useRef(null);r.useLayoutEffect((()=>{k.current&&k.current.scrollTo({top:(g-m)*a,behavior:"auto"})}),[g,a,m]),r.useLayoutEffect((()=>{j.current&&j.current.scrollTo({top:(T-1)*a,behavior:"auto"})}),[T,a]),r.useLayoutEffect((()=>{w.current&&w.current.scrollTo({top:($-1)*a,behavior:"auto"})}),[$,a]);const E=t=>r=>{var e,n,u;R.current=!0,D.current=t,z.current=r.touches[0].clientY;let c=0;"year"===t&&(c=(null==(e=k.current)?void 0:e.scrollTop)||0),"month"===t&&(c=(null==(n=j.current)?void 0:n.scrollTop)||0),"day"===t&&(c=(null==(u=w.current)?void 0:u.scrollTop)||0),M.current=c},L=t=>{if(!R.current||!D.current)return;const r=t.touches[0].clientY-z.current;"year"===D.current&&k.current&&(k.current.scrollTop=M.current-r),"month"===D.current&&j.current&&(j.current.scrollTop=M.current-r),"day"===D.current&&w.current&&(w.current.scrollTop=M.current-r)},Y=()=>{if(R.current&&D.current){if("year"===D.current&&k.current){const t=Math.round(k.current.scrollTop/a);S(Number(y[t])),null==n||n(`${y[t]}-${T.toString().padStart(2,"0")}-${$.toString().padStart(2,"0")}`)}if("month"===D.current&&j.current){const t=Math.round(j.current.scrollTop/a);v(Number(N[t])),null==n||n(`${g}-${N[t]}-${$.toString().padStart(2,"0")}`)}if("day"===D.current&&w.current){const t=Math.round(w.current.scrollTop/a);b(Number(x[t])),null==n||n(`${g}-${T.toString().padStart(2,"0")}-${x[t]}`)}R.current=!1,D.current=null}},q=t=>()=>{if(!R.current){if("year"===t&&k.current){const t=Math.round(k.current.scrollTop/a);S(Number(y[t])),null==n||n(`${y[t]}-${T.toString().padStart(2,"0")}-${$.toString().padStart(2,"0")}`)}if("month"===t&&j.current){const t=Math.round(j.current.scrollTop/a);v(Number(N[t])),null==n||n(`${g}-${N[t]}-${$.toString().padStart(2,"0")}`)}if("day"===t&&w.current){const t=Math.round(w.current.scrollTop/a);b(Number(x[t])),null==n||n(`${g}-${T.toString().padStart(2,"0")}-${x[t]}`)}}};r.useEffect((()=>{if(e){const[t,r,n]=e.split("-").map(Number);S(t),v(r),b(n),k.current&&k.current.scrollTo({top:(t-m)*a,behavior:"auto"}),j.current&&j.current.scrollTo({top:(r-1)*a,behavior:"auto"}),w.current&&w.current.scrollTo({top:(n-1)*a,behavior:"auto"})}}),[e]);const A=(r,e,n,u)=>t.jsxs("div",{className:"wz-date-picker-list",ref:n,style:{height:3*a},onTouchStart:E(u),onTouchMove:L,onTouchEnd:Y,onScroll:q(u),children:[t.jsx("div",{style:{height:a}}),r.map(((r,n)=>t.jsx("div",{className:"wz-date-picker-item"+(n===e?" active":""),style:{height:a},children:"year"===u?`${r}年`:"month"===u?`${r}月`:`${r}日`},r))),t.jsx("div",{style:{height:a}})]});return t.jsxs("div",{className:`wz-date-picker ${l}`,style:s,children:[t.jsx("div",{className:"wz-date-picker-mask wz-date-picker-mask-top",style:{height:a}}),t.jsx("div",{className:"wz-date-picker-indicator",style:{height:a}}),t.jsxs("div",{className:"wz-date-picker-columns",children:[o.includes("year")&&A(y,g-m,k,"year"),o.includes("month")&&A(N,T-1,j,"month"),o.includes("day")&&A(x,$-1,w,"day")]}),t.jsx("div",{className:"wz-date-picker-mask wz-date-picker-mask-bottom",style:{height:a}})]})}}));
@@ -0,0 +1 @@
1
+ .wz-date-picker{background:var(--wz-date-picker-bg,#f5f5f5);-webkit-user-select:none;user-select:none;touch-action:pan-y;width:100%;position:relative;overflow:hidden}.wz-date-picker-columns{flex-direction:row;width:100%;height:100%;display:flex}.wz-date-picker-list{-webkit-overflow-scrolling:touch;scrollbar-width:none;z-index:2;flex:1 1 0;min-width:0;position:relative;overflow-y:scroll}.wz-date-picker-list::-webkit-scrollbar{display:none}.wz-date-picker-item{color:var(--wz-date-picker-item-color,#bbb);background:0 0;justify-content:center;align-items:center;font-family:"阿里巴巴普惠体 2.0";font-size:20px;font-weight:600;transition:color .2s;display:flex}.wz-date-picker-item.active{color:var(--wz-date-picker-active-color,#000)}.wz-date-picker-mask{z-index:3;pointer-events:none;position:absolute;left:0;right:0}.wz-date-picker-mask-top{background:linear-gradient(to bottom,var(--wz-date-picker-bg,#f5f5f5)20%,#f5f5f500);top:0}.wz-date-picker-mask-bottom{background:linear-gradient(to top,var(--wz-date-picker-bg,#f5f5f5)20%,#f5f5f500);bottom:0}.wz-date-picker-indicator{z-index:1;pointer-events:none;border-radius:var(--wz-date-picker-radius,10px);background:var(--wz-date-picker-active-bg,#fff);position:absolute;top:50%;left:10px;right:10px;transform:translateY(-50%)}
@@ -0,0 +1 @@
1
+ import './index.css';
@@ -0,0 +1 @@
1
+ .wz-date-picker{background:var(--wz-date-picker-bg,#f5f5f5);-webkit-user-select:none;user-select:none;touch-action:pan-y;width:100%;position:relative;overflow:hidden}.wz-date-picker-columns{flex-direction:row;width:100%;height:100%;display:flex}.wz-date-picker-list{-webkit-overflow-scrolling:touch;scrollbar-width:none;z-index:2;flex:1 1 0;min-width:0;position:relative;overflow-y:scroll}.wz-date-picker-list::-webkit-scrollbar{display:none}.wz-date-picker-item{color:var(--wz-date-picker-item-color,#bbb);background:0 0;justify-content:center;align-items:center;font-family:"阿里巴巴普惠体 2.0";font-size:20px;font-weight:600;transition:color .2s;display:flex}.wz-date-picker-item.active{color:var(--wz-date-picker-active-color,#000)}.wz-date-picker-mask{z-index:3;pointer-events:none;position:absolute;left:0;right:0}.wz-date-picker-mask-top{background:linear-gradient(to bottom,var(--wz-date-picker-bg,#f5f5f5)20%,#f5f5f500);top:0}.wz-date-picker-mask-bottom{background:linear-gradient(to top,var(--wz-date-picker-bg,#f5f5f5)20%,#f5f5f500);bottom:0}.wz-date-picker-indicator{z-index:1;pointer-events:none;border-radius:var(--wz-date-picker-radius,10px);background:var(--wz-date-picker-active-bg,#fff);position:absolute;top:50%;left:10px;right:10px;transform:translateY(-50%)}
@@ -0,0 +1,220 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import React, { useMemo, useState, useRef, useLayoutEffect } from "react";
3
+ const getYearList = (min, max) => {
4
+ const arr = [];
5
+ for (let i = min; i <= max; i++) arr.push(i.toString());
6
+ return arr;
7
+ };
8
+ const getMonthList = () => Array.from({ length: 12 }, (_, i) => (i + 1).toString().padStart(2, "0"));
9
+ const getDayList = (year, month) => {
10
+ const days = new Date(year, month, 0).getDate();
11
+ return Array.from({ length: days }, (_, i) => (i + 1).toString().padStart(2, "0"));
12
+ };
13
+ const DatePicker = ({
14
+ value,
15
+ onChange,
16
+ min = "1970-01-01",
17
+ max = "2100-12-31",
18
+ columns = ["year", "month", "day"],
19
+ itemHeight = 48,
20
+ className = "",
21
+ style
22
+ }) => {
23
+ const today = /* @__PURE__ */ new Date();
24
+ const [initYear, initMonth, initDay] = value ? value.split("-").map(Number) : [today.getFullYear(), today.getMonth() + 1, today.getDate()];
25
+ const minYear = Number(min.split("-")[0]);
26
+ const maxYear = Number(max.split("-")[0]);
27
+ const yearList = useMemo(() => getYearList(minYear, maxYear), [minYear, maxYear]);
28
+ const [year, setYear] = useState(initYear);
29
+ const [month, setMonth] = useState(initMonth);
30
+ const [day, setDay] = useState(initDay);
31
+ const monthList = getMonthList();
32
+ const dayList = getDayList(year, month);
33
+ const yearRef = useRef(null);
34
+ const monthRef = useRef(null);
35
+ const dayRef = useRef(null);
36
+ const startY = useRef(0);
37
+ const startScroll = useRef(0);
38
+ const isDragging = useRef(false);
39
+ const dragType = useRef(null);
40
+ useLayoutEffect(() => {
41
+ if (yearRef.current) yearRef.current.scrollTo({ top: (year - minYear) * itemHeight, behavior: "auto" });
42
+ }, [year, itemHeight, minYear]);
43
+ useLayoutEffect(() => {
44
+ if (monthRef.current) monthRef.current.scrollTo({ top: (month - 1) * itemHeight, behavior: "auto" });
45
+ }, [month, itemHeight]);
46
+ useLayoutEffect(() => {
47
+ if (dayRef.current) dayRef.current.scrollTo({ top: (day - 1) * itemHeight, behavior: "auto" });
48
+ }, [day, itemHeight]);
49
+ const handleTouchStart = (type) => (e) => {
50
+ var _a, _b, _c;
51
+ isDragging.current = true;
52
+ dragType.current = type;
53
+ startY.current = e.touches[0].clientY;
54
+ let scrollTop = 0;
55
+ if (type === "year") scrollTop = ((_a = yearRef.current) == null ? void 0 : _a.scrollTop) || 0;
56
+ if (type === "month") scrollTop = ((_b = monthRef.current) == null ? void 0 : _b.scrollTop) || 0;
57
+ if (type === "day") scrollTop = ((_c = dayRef.current) == null ? void 0 : _c.scrollTop) || 0;
58
+ startScroll.current = scrollTop;
59
+ };
60
+ const handleTouchMove = (e) => {
61
+ if (!isDragging.current || !dragType.current) return;
62
+ const deltaY = e.touches[0].clientY - startY.current;
63
+ if (dragType.current === "year" && yearRef.current) yearRef.current.scrollTop = startScroll.current - deltaY;
64
+ if (dragType.current === "month" && monthRef.current) monthRef.current.scrollTop = startScroll.current - deltaY;
65
+ if (dragType.current === "day" && dayRef.current) dayRef.current.scrollTop = startScroll.current - deltaY;
66
+ };
67
+ const handleTouchEnd = () => {
68
+ if (!isDragging.current || !dragType.current) return;
69
+ if (dragType.current === "year" && yearRef.current) {
70
+ const idx = Math.round(yearRef.current.scrollTop / itemHeight);
71
+ setYear(Number(yearList[idx]));
72
+ onChange == null ? void 0 : onChange(`${yearList[idx]}-${month.toString().padStart(2, "0")}-${day.toString().padStart(2, "0")}`);
73
+ }
74
+ if (dragType.current === "month" && monthRef.current) {
75
+ const idx = Math.round(monthRef.current.scrollTop / itemHeight);
76
+ setMonth(Number(monthList[idx]));
77
+ onChange == null ? void 0 : onChange(`${year}-${monthList[idx]}-${day.toString().padStart(2, "0")}`);
78
+ }
79
+ if (dragType.current === "day" && dayRef.current) {
80
+ const idx = Math.round(dayRef.current.scrollTop / itemHeight);
81
+ setDay(Number(dayList[idx]));
82
+ onChange == null ? void 0 : onChange(`${year}-${month.toString().padStart(2, "0")}-${dayList[idx]}`);
83
+ }
84
+ isDragging.current = false;
85
+ dragType.current = null;
86
+ };
87
+ const handleScroll = (type) => () => {
88
+ if (isDragging.current) return;
89
+ if (type === "year" && yearRef.current) {
90
+ const idx = Math.round(yearRef.current.scrollTop / itemHeight);
91
+ setYear(Number(yearList[idx]));
92
+ onChange == null ? void 0 : onChange(`${yearList[idx]}-${month.toString().padStart(2, "0")}-${day.toString().padStart(2, "0")}`);
93
+ }
94
+ if (type === "month" && monthRef.current) {
95
+ const idx = Math.round(monthRef.current.scrollTop / itemHeight);
96
+ setMonth(Number(monthList[idx]));
97
+ onChange == null ? void 0 : onChange(`${year}-${monthList[idx]}-${day.toString().padStart(2, "0")}`);
98
+ }
99
+ if (type === "day" && dayRef.current) {
100
+ const idx = Math.round(dayRef.current.scrollTop / itemHeight);
101
+ setDay(Number(dayList[idx]));
102
+ onChange == null ? void 0 : onChange(`${year}-${month.toString().padStart(2, "0")}-${dayList[idx]}`);
103
+ }
104
+ };
105
+ React.useEffect(() => {
106
+ if (value) {
107
+ const [y, m, d] = value.split("-").map(Number);
108
+ setYear(y);
109
+ setMonth(m);
110
+ setDay(d);
111
+ if (yearRef.current) yearRef.current.scrollTo({ top: (y - minYear) * itemHeight, behavior: "auto" });
112
+ if (monthRef.current) monthRef.current.scrollTo({ top: (m - 1) * itemHeight, behavior: "auto" });
113
+ if (dayRef.current) dayRef.current.scrollTo({ top: (d - 1) * itemHeight, behavior: "auto" });
114
+ }
115
+ }, [value]);
116
+ const renderColumn = (options, current, ref, type) => /* @__PURE__ */ jsxs(
117
+ "div",
118
+ {
119
+ className: "wz-date-picker-list",
120
+ ref,
121
+ style: { height: itemHeight * 3 },
122
+ onTouchStart: handleTouchStart(type),
123
+ onTouchMove: handleTouchMove,
124
+ onTouchEnd: handleTouchEnd,
125
+ onScroll: handleScroll(type),
126
+ children: [
127
+ /* @__PURE__ */ jsx("div", { style: { height: itemHeight } }),
128
+ options.map((opt, idx) => /* @__PURE__ */ jsx(
129
+ "div",
130
+ {
131
+ className: `wz-date-picker-item${idx === current ? " active" : ""}`,
132
+ style: { height: itemHeight },
133
+ children: type === "year" ? `${opt}年` : type === "month" ? `${opt}月` : `${opt}日`
134
+ },
135
+ opt
136
+ )),
137
+ /* @__PURE__ */ jsx("div", { style: { height: itemHeight } })
138
+ ]
139
+ }
140
+ );
141
+ return /* @__PURE__ */ jsxs("div", { className: `wz-date-picker ${className}`, style, children: [
142
+ /* @__PURE__ */ jsx("div", { className: "wz-date-picker-mask wz-date-picker-mask-top", style: { height: itemHeight } }),
143
+ /* @__PURE__ */ jsx("div", { className: "wz-date-picker-indicator", style: { height: itemHeight } }),
144
+ /* @__PURE__ */ jsxs("div", { className: "wz-date-picker-columns", children: [
145
+ columns.includes("year") && renderColumn(yearList, year - minYear, yearRef, "year"),
146
+ columns.includes("month") && renderColumn(monthList, month - 1, monthRef, "month"),
147
+ columns.includes("day") && renderColumn(dayList, day - 1, dayRef, "day")
148
+ ] }),
149
+ /* @__PURE__ */ jsx("div", { className: "wz-date-picker-mask wz-date-picker-mask-bottom", style: { height: itemHeight } })
150
+ ] });
151
+ };
152
+ const DateRangePicker = ({
153
+ value,
154
+ onChange,
155
+ min = "1970-01-01",
156
+ max = "2100-12-31",
157
+ startLabel = "开始时间",
158
+ endLabel = "结束时间",
159
+ className = "",
160
+ style
161
+ }) => {
162
+ const todayStr = React.useMemo(() => {
163
+ const today = /* @__PURE__ */ new Date();
164
+ const y = today.getFullYear();
165
+ const m = (today.getMonth() + 1).toString().padStart(2, "0");
166
+ const d = today.getDate().toString().padStart(2, "0");
167
+ return `${y}-${m}-${d}`;
168
+ }, []);
169
+ const [innerValue, setInnerValue] = useState(value || [todayStr, todayStr]);
170
+ const range = value || innerValue;
171
+ const [active, setActive] = useState("start");
172
+ const handleSelect = (val) => {
173
+ if (active === "start") {
174
+ const newRange = [val, range[1] && range[1] >= val ? range[1] : val];
175
+ setInnerValue(newRange);
176
+ onChange == null ? void 0 : onChange(newRange);
177
+ } else {
178
+ const newRange = [range[0], val && val >= range[0] ? val : range[0]];
179
+ setInnerValue(newRange);
180
+ onChange == null ? void 0 : onChange(newRange);
181
+ }
182
+ };
183
+ return /* @__PURE__ */ jsxs("div", { className: `wz-date-range-picker ${className}`, style, children: [
184
+ /* @__PURE__ */ jsxs("div", { className: "wz-date-range-picker-label-row", children: [
185
+ /* @__PURE__ */ jsx("div", { className: "wz-date-range-picker-label", children: startLabel }),
186
+ /* @__PURE__ */ jsx("div", { className: "wz-date-range-picker-label", children: endLabel })
187
+ ] }),
188
+ /* @__PURE__ */ jsxs("div", { className: "wz-date-range-picker-row", children: [
189
+ /* @__PURE__ */ jsx("div", { className: "wz-date-range-picker-col", children: /* @__PURE__ */ jsx(
190
+ "div",
191
+ {
192
+ className: `wz-date-range-picker-value${active === "start" ? " active" : ""}`,
193
+ onClick: () => setActive("start"),
194
+ children: range[0] || "请选择"
195
+ }
196
+ ) }),
197
+ /* @__PURE__ */ jsx("div", { className: "wz-date-range-picker-sep", children: "至" }),
198
+ /* @__PURE__ */ jsx("div", { className: "wz-date-range-picker-col", children: /* @__PURE__ */ jsx(
199
+ "div",
200
+ {
201
+ className: `wz-date-range-picker-value${active === "end" ? " active" : ""}`,
202
+ onClick: () => setActive("end"),
203
+ children: range[1] || "请选择"
204
+ }
205
+ ) })
206
+ ] }),
207
+ /* @__PURE__ */ jsx("div", { className: "wz-date-range-picker-picker", children: /* @__PURE__ */ jsx(
208
+ DatePicker,
209
+ {
210
+ value: active === "start" ? range[0] : range[1],
211
+ onChange: handleSelect,
212
+ min,
213
+ max
214
+ }
215
+ ) })
216
+ ] });
217
+ };
218
+ export {
219
+ DateRangePicker as default
220
+ };
@@ -0,0 +1 @@
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react/jsx-runtime"),require("react")):"function"==typeof define&&define.amd?define(["react/jsx-runtime","react"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).DateRangePicker=t(e.jsxRuntime,e.React)}(this,(function(e,t){"use strict";const r=({value:r,onChange:n,min:a="1970-01-01",max:c="2100-12-31",columns:s=["year","month","day"],itemHeight:l=48,className:o="",style:u})=>{const i=new Date,[d,p,h]=r?r.split("-").map(Number):[i.getFullYear(),i.getMonth()+1,i.getDate()],m=Number(a.split("-")[0]),g=Number(c.split("-")[0]),f=t.useMemo((()=>((e,t)=>{const r=[];for(let n=e;n<=t;n++)r.push(n.toString());return r})(m,g)),[m,g]),[v,y]=t.useState(d),[S,N]=t.useState(p),[x,k]=t.useState(h),$=Array.from({length:12},((e,t)=>(t+1).toString().padStart(2,"0"))),b=((e,t)=>{const r=new Date(e,t,0).getDate();return Array.from({length:r},((e,t)=>(t+1).toString().padStart(2,"0")))})(v,S),j=t.useRef(null),w=t.useRef(null),T=t.useRef(null),z=t.useRef(0),M=t.useRef(0),R=t.useRef(!1),D=t.useRef(null);t.useLayoutEffect((()=>{j.current&&j.current.scrollTo({top:(v-m)*l,behavior:"auto"})}),[v,l,m]),t.useLayoutEffect((()=>{w.current&&w.current.scrollTo({top:(S-1)*l,behavior:"auto"})}),[S,l]),t.useLayoutEffect((()=>{T.current&&T.current.scrollTo({top:(x-1)*l,behavior:"auto"})}),[x,l]);const C=e=>t=>{var r,n,a;R.current=!0,D.current=e,z.current=t.touches[0].clientY;let c=0;"year"===e&&(c=(null==(r=j.current)?void 0:r.scrollTop)||0),"month"===e&&(c=(null==(n=w.current)?void 0:n.scrollTop)||0),"day"===e&&(c=(null==(a=T.current)?void 0:a.scrollTop)||0),M.current=c},E=e=>{if(!R.current||!D.current)return;const t=e.touches[0].clientY-z.current;"year"===D.current&&j.current&&(j.current.scrollTop=M.current-t),"month"===D.current&&w.current&&(w.current.scrollTop=M.current-t),"day"===D.current&&T.current&&(T.current.scrollTop=M.current-t)},L=()=>{if(R.current&&D.current){if("year"===D.current&&j.current){const e=Math.round(j.current.scrollTop/l);y(Number(f[e])),null==n||n(`${f[e]}-${S.toString().padStart(2,"0")}-${x.toString().padStart(2,"0")}`)}if("month"===D.current&&w.current){const e=Math.round(w.current.scrollTop/l);N(Number($[e])),null==n||n(`${v}-${$[e]}-${x.toString().padStart(2,"0")}`)}if("day"===D.current&&T.current){const e=Math.round(T.current.scrollTop/l);k(Number(b[e])),null==n||n(`${v}-${S.toString().padStart(2,"0")}-${b[e]}`)}R.current=!1,D.current=null}},Y=e=>()=>{if(!R.current){if("year"===e&&j.current){const e=Math.round(j.current.scrollTop/l);y(Number(f[e])),null==n||n(`${f[e]}-${S.toString().padStart(2,"0")}-${x.toString().padStart(2,"0")}`)}if("month"===e&&w.current){const e=Math.round(w.current.scrollTop/l);N(Number($[e])),null==n||n(`${v}-${$[e]}-${x.toString().padStart(2,"0")}`)}if("day"===e&&T.current){const e=Math.round(T.current.scrollTop/l);k(Number(b[e])),null==n||n(`${v}-${S.toString().padStart(2,"0")}-${b[e]}`)}}};t.useEffect((()=>{if(r){const[e,t,n]=r.split("-").map(Number);y(e),N(t),k(n),j.current&&j.current.scrollTo({top:(e-m)*l,behavior:"auto"}),w.current&&w.current.scrollTo({top:(t-1)*l,behavior:"auto"}),T.current&&T.current.scrollTo({top:(n-1)*l,behavior:"auto"})}}),[r]);const q=(t,r,n,a)=>e.jsxs("div",{className:"wz-date-picker-list",ref:n,style:{height:3*l},onTouchStart:C(a),onTouchMove:E,onTouchEnd:L,onScroll:Y(a),children:[e.jsx("div",{style:{height:l}}),t.map(((t,n)=>e.jsx("div",{className:"wz-date-picker-item"+(n===r?" active":""),style:{height:l},children:"year"===a?`${t}年`:"month"===a?`${t}月`:`${t}日`},t))),e.jsx("div",{style:{height:l}})]});return e.jsxs("div",{className:`wz-date-picker ${o}`,style:u,children:[e.jsx("div",{className:"wz-date-picker-mask wz-date-picker-mask-top",style:{height:l}}),e.jsx("div",{className:"wz-date-picker-indicator",style:{height:l}}),e.jsxs("div",{className:"wz-date-picker-columns",children:[s.includes("year")&&q(f,v-m,j,"year"),s.includes("month")&&q($,S-1,w,"month"),s.includes("day")&&q(b,x-1,T,"day")]}),e.jsx("div",{className:"wz-date-picker-mask wz-date-picker-mask-bottom",style:{height:l}})]})};return({value:n,onChange:a,min:c="1970-01-01",max:s="2100-12-31",startLabel:l="开始时间",endLabel:o="结束时间",className:u="",style:i})=>{const d=t.useMemo((()=>{const e=new Date;return`${e.getFullYear()}-${(e.getMonth()+1).toString().padStart(2,"0")}-${e.getDate().toString().padStart(2,"0")}`}),[]),[p,h]=t.useState(n||[d,d]),m=n||p,[g,f]=t.useState("start");return e.jsxs("div",{className:`wz-date-range-picker ${u}`,style:i,children:[e.jsxs("div",{className:"wz-date-range-picker-label-row",children:[e.jsx("div",{className:"wz-date-range-picker-label",children:l}),e.jsx("div",{className:"wz-date-range-picker-label",children:o})]}),e.jsxs("div",{className:"wz-date-range-picker-row",children:[e.jsx("div",{className:"wz-date-range-picker-col",children:e.jsx("div",{className:"wz-date-range-picker-value"+("start"===g?" active":""),onClick:()=>f("start"),children:m[0]||"请选择"})}),e.jsx("div",{className:"wz-date-range-picker-sep",children:"至"}),e.jsx("div",{className:"wz-date-range-picker-col",children:e.jsx("div",{className:"wz-date-range-picker-value"+("end"===g?" active":""),onClick:()=>f("end"),children:m[1]||"请选择"})})]}),e.jsx("div",{className:"wz-date-range-picker-picker",children:e.jsx(r,{value:"start"===g?m[0]:m[1],onChange:e=>{if("start"===g){const t=[e,m[1]&&m[1]>=e?m[1]:e];h(t),null==a||a(t)}else{const t=[m[0],e&&e>=m[0]?e:m[0]];h(t),null==a||a(t)}},min:c,max:s})})]})}}));
@@ -0,0 +1 @@
1
+ .wz-date-range-picker-row{justify-content:center;align-items:center;gap:16px;display:flex}.wz-date-range-picker-col{flex-direction:column;flex:1;align-items:center;display:flex}.wz-date-range-picker-label-row{justify-content:space-between;column-gap:65px;margin-bottom:8px;display:flex}.wz-date-range-picker-label{text-align:center;color:#333;flex:1;font-size:15px}.wz-date-range-picker-value{color:#bbb;text-align:center;cursor:pointer;background:#fff;border:1.5px solid #0000;border-radius:8px;min-width:100%;height:44px;font-size:16px;line-height:44px;transition:all .2s}.wz-date-range-picker-value.active{color:#0599f7;background:#eaf6ff;border-color:#0599f7;font-weight:700}.wz-date-range-picker-sep{color:#333;align-items:center;height:44px;margin:0 8px;font-size:14px;display:flex}.wz-date-range-picker-picker{margin-top:8px}
@@ -0,0 +1 @@
1
+ import './index.css';
@@ -0,0 +1 @@
1
+ .wz-date-range-picker-row{justify-content:center;align-items:center;gap:16px;display:flex}.wz-date-range-picker-col{flex-direction:column;flex:1;align-items:center;display:flex}.wz-date-range-picker-label-row{justify-content:space-between;column-gap:65px;margin-bottom:8px;display:flex}.wz-date-range-picker-label{text-align:center;color:#333;flex:1;font-size:15px}.wz-date-range-picker-value{color:#bbb;text-align:center;cursor:pointer;background:#fff;border:1.5px solid #0000;border-radius:8px;min-width:100%;height:44px;font-size:16px;line-height:44px;transition:all .2s}.wz-date-range-picker-value.active{color:#0599f7;background:#eaf6ff;border-color:#0599f7;font-weight:700}.wz-date-range-picker-sep{color:#333;align-items:center;height:44px;margin:0 8px;font-size:14px;display:flex}.wz-date-range-picker-picker{margin-top:8px}.wz-date-picker{background:var(--wz-date-picker-bg,#f5f5f5);-webkit-user-select:none;user-select:none;touch-action:pan-y;width:100%;position:relative;overflow:hidden}.wz-date-picker-columns{flex-direction:row;width:100%;height:100%;display:flex}.wz-date-picker-list{-webkit-overflow-scrolling:touch;scrollbar-width:none;z-index:2;flex:1 1 0;min-width:0;position:relative;overflow-y:scroll}.wz-date-picker-list::-webkit-scrollbar{display:none}.wz-date-picker-item{color:var(--wz-date-picker-item-color,#bbb);background:0 0;justify-content:center;align-items:center;font-family:"阿里巴巴普惠体 2.0";font-size:20px;font-weight:600;transition:color .2s;display:flex}.wz-date-picker-item.active{color:var(--wz-date-picker-active-color,#000)}.wz-date-picker-mask{z-index:3;pointer-events:none;position:absolute;left:0;right:0}.wz-date-picker-mask-top{background:linear-gradient(to bottom,var(--wz-date-picker-bg,#f5f5f5)20%,#f5f5f500);top:0}.wz-date-picker-mask-bottom{background:linear-gradient(to top,var(--wz-date-picker-bg,#f5f5f5)20%,#f5f5f500);bottom:0}.wz-date-picker-indicator{z-index:1;pointer-events:none;border-radius:var(--wz-date-picker-radius,10px);background:var(--wz-date-picker-active-bg,#fff);position:absolute;top:50%;left:10px;right:10px;transform:translateY(-50%)}