@fjyueke/bify-mcp 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 (210) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +248 -0
  5. package/metaData/components/action-sheet/api.md +74 -0
  6. package/metaData/components/action-sheet/doc.md +243 -0
  7. package/metaData/components/action-sheet/example/index.tsx +116 -0
  8. package/metaData/components/area-picker/api.md +25 -0
  9. package/metaData/components/area-picker/doc.md +132 -0
  10. package/metaData/components/area-picker/example/index.tsx +60 -0
  11. package/metaData/components/avatar/api.md +19 -0
  12. package/metaData/components/avatar/doc.md +170 -0
  13. package/metaData/components/avatar/example/index.tsx +76 -0
  14. package/metaData/components/back-top/api.md +21 -0
  15. package/metaData/components/back-top/doc.md +142 -0
  16. package/metaData/components/back-top/example/index.tsx +96 -0
  17. package/metaData/components/backdrop/api.md +20 -0
  18. package/metaData/components/backdrop/doc.md +98 -0
  19. package/metaData/components/backdrop/example/index.tsx +33 -0
  20. package/metaData/components/badge/api.md +10 -0
  21. package/metaData/components/badge/doc.md +169 -0
  22. package/metaData/components/badge/example/index.tsx +81 -0
  23. package/metaData/components/button/api.md +31 -0
  24. package/metaData/components/button/doc.md +235 -0
  25. package/metaData/components/button/example/index.tsx +235 -0
  26. package/metaData/components/calendar/api.md +62 -0
  27. package/metaData/components/calendar/doc.md +516 -0
  28. package/metaData/components/calendar/example/index.tsx +501 -0
  29. package/metaData/components/cascader/api.md +55 -0
  30. package/metaData/components/cascader/doc.md +358 -0
  31. package/metaData/components/cascader/example/index.tsx +159 -0
  32. package/metaData/components/cell/api.md +37 -0
  33. package/metaData/components/cell/doc.md +158 -0
  34. package/metaData/components/cell/example/index.tsx +44 -0
  35. package/metaData/components/checkbox/api.md +35 -0
  36. package/metaData/components/checkbox/doc.md +203 -0
  37. package/metaData/components/checkbox/example/index.tsx +94 -0
  38. package/metaData/components/circle/api.md +17 -0
  39. package/metaData/components/circle/doc.md +123 -0
  40. package/metaData/components/circle/example/index.tsx +81 -0
  41. package/metaData/components/collapse/api.md +31 -0
  42. package/metaData/components/collapse/doc.md +142 -0
  43. package/metaData/components/collapse/example/index.tsx +81 -0
  44. package/metaData/components/config-provider/api.md +7 -0
  45. package/metaData/components/config-provider/doc.md +193 -0
  46. package/metaData/components/config-provider/example/index.tsx +54 -0
  47. package/metaData/components/countdown/api.md +46 -0
  48. package/metaData/components/countdown/doc.md +167 -0
  49. package/metaData/components/countdown/example/index.tsx +70 -0
  50. package/metaData/components/datetime-picker/api.md +25 -0
  51. package/metaData/components/datetime-picker/doc.md +317 -0
  52. package/metaData/components/datetime-picker/example/index.tsx +265 -0
  53. package/metaData/components/dialog/api.md +66 -0
  54. package/metaData/components/dialog/doc.md +292 -0
  55. package/metaData/components/dialog/example/index.tsx +138 -0
  56. package/metaData/components/divider/api.md +15 -0
  57. package/metaData/components/divider/doc.md +108 -0
  58. package/metaData/components/divider/example/index.tsx +45 -0
  59. package/metaData/components/dropdown-menu/api.md +37 -0
  60. package/metaData/components/dropdown-menu/doc.md +279 -0
  61. package/metaData/components/dropdown-menu/example/index.tsx +182 -0
  62. package/metaData/components/empty/api.md +20 -0
  63. package/metaData/components/empty/doc.md +126 -0
  64. package/metaData/components/empty/example/index.tsx +66 -0
  65. package/metaData/components/field/api.md +10 -0
  66. package/metaData/components/field/doc.md +274 -0
  67. package/metaData/components/field/example/index.tsx +203 -0
  68. package/metaData/components/fixed-nav/api.md +21 -0
  69. package/metaData/components/fixed-nav/doc.md +196 -0
  70. package/metaData/components/fixed-nav/example/index.tsx +80 -0
  71. package/metaData/components/fixed-view/api.md +10 -0
  72. package/metaData/components/fixed-view/doc.md +25 -0
  73. package/metaData/components/fixed-view/example/index.tsx +12 -0
  74. package/metaData/components/flex/api.md +18 -0
  75. package/metaData/components/flex/doc.md +103 -0
  76. package/metaData/components/flex/example/index.tsx +58 -0
  77. package/metaData/components/floating-bubble/api.md +18 -0
  78. package/metaData/components/floating-bubble/doc.md +94 -0
  79. package/metaData/components/floating-bubble/example/index.tsx +55 -0
  80. package/metaData/components/floating-panel/api.md +19 -0
  81. package/metaData/components/floating-panel/doc.md +174 -0
  82. package/metaData/components/floating-panel/example/index.tsx +131 -0
  83. package/metaData/components/form/api.md +124 -0
  84. package/metaData/components/form/doc.md +759 -0
  85. package/metaData/components/form/example/index.tsx +222 -0
  86. package/metaData/components/grid/api.md +28 -0
  87. package/metaData/components/grid/doc.md +167 -0
  88. package/metaData/components/grid/example/index.tsx +80 -0
  89. package/metaData/components/image/api.md +42 -0
  90. package/metaData/components/image/doc.md +117 -0
  91. package/metaData/components/image/example/index.tsx +76 -0
  92. package/metaData/components/index-list/api.md +39 -0
  93. package/metaData/components/index-list/doc.md +176 -0
  94. package/metaData/components/index-list/example/index.tsx +110 -0
  95. package/metaData/components/list/api.md +30 -0
  96. package/metaData/components/list/doc.md +317 -0
  97. package/metaData/components/list/example/index.tsx +218 -0
  98. package/metaData/components/loading/api.md +10 -0
  99. package/metaData/components/loading/doc.md +113 -0
  100. package/metaData/components/loading/example/index.tsx +47 -0
  101. package/metaData/components/navbar/api.md +26 -0
  102. package/metaData/components/navbar/doc.md +85 -0
  103. package/metaData/components/navbar/example/index.tsx +28 -0
  104. package/metaData/components/notice-bar/api.md +28 -0
  105. package/metaData/components/notice-bar/doc.md +154 -0
  106. package/metaData/components/notice-bar/example/index.tsx +107 -0
  107. package/metaData/components/notify/api.md +28 -0
  108. package/metaData/components/notify/doc.md +140 -0
  109. package/metaData/components/notify/example/index.tsx +89 -0
  110. package/metaData/components/number-keyboard/api.md +21 -0
  111. package/metaData/components/number-keyboard/doc.md +247 -0
  112. package/metaData/components/number-keyboard/example/index.tsx +201 -0
  113. package/metaData/components/pagination/api.md +18 -0
  114. package/metaData/components/pagination/doc.md +113 -0
  115. package/metaData/components/pagination/example/index.tsx +73 -0
  116. package/metaData/components/password-input/api.md +25 -0
  117. package/metaData/components/password-input/doc.md +126 -0
  118. package/metaData/components/password-input/example/index.tsx +124 -0
  119. package/metaData/components/picker/api.md +61 -0
  120. package/metaData/components/picker/doc.md +336 -0
  121. package/metaData/components/picker/example/index.tsx +232 -0
  122. package/metaData/components/popup/api.md +48 -0
  123. package/metaData/components/popup/doc.md +150 -0
  124. package/metaData/components/popup/example/index.tsx +214 -0
  125. package/metaData/components/progress/api.md +11 -0
  126. package/metaData/components/progress/doc.md +105 -0
  127. package/metaData/components/progress/example/index.tsx +58 -0
  128. package/metaData/components/pull-refresh/api.md +18 -0
  129. package/metaData/components/pull-refresh/doc.md +198 -0
  130. package/metaData/components/pull-refresh/example/index.tsx +153 -0
  131. package/metaData/components/radio/api.md +26 -0
  132. package/metaData/components/radio/doc.md +201 -0
  133. package/metaData/components/radio/example/index.tsx +103 -0
  134. package/metaData/components/rate/api.md +23 -0
  135. package/metaData/components/rate/doc.md +122 -0
  136. package/metaData/components/rate/example/index.tsx +36 -0
  137. package/metaData/components/rolling-text/api.md +23 -0
  138. package/metaData/components/rolling-text/doc.md +153 -0
  139. package/metaData/components/rolling-text/example/index.tsx +150 -0
  140. package/metaData/components/safe-area/api.md +8 -0
  141. package/metaData/components/safe-area/doc.md +30 -0
  142. package/metaData/components/safe-area/example/index.tsx +16 -0
  143. package/metaData/components/search/api.md +35 -0
  144. package/metaData/components/search/doc.md +185 -0
  145. package/metaData/components/search/example/index.tsx +101 -0
  146. package/metaData/components/share-sheet/api.md +48 -0
  147. package/metaData/components/share-sheet/doc.md +215 -0
  148. package/metaData/components/share-sheet/example/index.tsx +143 -0
  149. package/metaData/components/sidebar/api.md +28 -0
  150. package/metaData/components/sidebar/doc.md +122 -0
  151. package/metaData/components/sidebar/example/index.tsx +58 -0
  152. package/metaData/components/signature/api.md +19 -0
  153. package/metaData/components/signature/doc.md +115 -0
  154. package/metaData/components/signature/example/index.tsx +56 -0
  155. package/metaData/components/skeleton/api.md +45 -0
  156. package/metaData/components/skeleton/doc.md +131 -0
  157. package/metaData/components/skeleton/example/index.tsx +80 -0
  158. package/metaData/components/slider/api.md +28 -0
  159. package/metaData/components/slider/doc.md +151 -0
  160. package/metaData/components/slider/example/index.tsx +54 -0
  161. package/metaData/components/space/api.md +12 -0
  162. package/metaData/components/space/doc.md +125 -0
  163. package/metaData/components/space/example/index.tsx +75 -0
  164. package/metaData/components/stepper/api.md +37 -0
  165. package/metaData/components/stepper/doc.md +152 -0
  166. package/metaData/components/stepper/example/index.tsx +45 -0
  167. package/metaData/components/steps/api.md +9 -0
  168. package/metaData/components/steps/doc.md +143 -0
  169. package/metaData/components/steps/example/index.tsx +93 -0
  170. package/metaData/components/sticky/api.md +16 -0
  171. package/metaData/components/sticky/doc.md +87 -0
  172. package/metaData/components/sticky/example/index.tsx +62 -0
  173. package/metaData/components/swipe-cell/api.md +19 -0
  174. package/metaData/components/swipe-cell/doc.md +105 -0
  175. package/metaData/components/swipe-cell/example/index.tsx +62 -0
  176. package/metaData/components/swiper/api.md +22 -0
  177. package/metaData/components/swiper/doc.md +228 -0
  178. package/metaData/components/swiper/example/index.tsx +118 -0
  179. package/metaData/components/switch/api.md +17 -0
  180. package/metaData/components/switch/doc.md +110 -0
  181. package/metaData/components/switch/example/index.tsx +57 -0
  182. package/metaData/components/tabbar/api.md +27 -0
  183. package/metaData/components/tabbar/doc.md +160 -0
  184. package/metaData/components/tabbar/example/index.tsx +99 -0
  185. package/metaData/components/tabs/api.md +36 -0
  186. package/metaData/components/tabs/doc.md +307 -0
  187. package/metaData/components/tabs/example/index.tsx +231 -0
  188. package/metaData/components/tag/api.md +17 -0
  189. package/metaData/components/tag/doc.md +162 -0
  190. package/metaData/components/tag/example/index.tsx +84 -0
  191. package/metaData/components/text-ellipsis/api.md +26 -0
  192. package/metaData/components/text-ellipsis/doc.md +135 -0
  193. package/metaData/components/text-ellipsis/example/index.tsx +44 -0
  194. package/metaData/components/timeline/api.md +20 -0
  195. package/metaData/components/timeline/doc.md +210 -0
  196. package/metaData/components/timeline/example/index.tsx +145 -0
  197. package/metaData/components/toast/api.md +39 -0
  198. package/metaData/components/toast/doc.md +256 -0
  199. package/metaData/components/toast/example/index.tsx +136 -0
  200. package/metaData/components/tree-select/api.md +19 -0
  201. package/metaData/components/tree-select/doc.md +185 -0
  202. package/metaData/components/tree-select/example/index.tsx +112 -0
  203. package/metaData/components/uploader/api.md +32 -0
  204. package/metaData/components/uploader/doc.md +340 -0
  205. package/metaData/components/uploader/example/index.tsx +222 -0
  206. package/metaData/components/watermark/api.md +18 -0
  207. package/metaData/components/watermark/doc.md +97 -0
  208. package/metaData/components/watermark/example/index.tsx +62 -0
  209. package/metaData/components-index.json +274 -0
  210. package/package.json +56 -0
@@ -0,0 +1,516 @@
1
+ # Calendar 日历
2
+
3
+ ### 介绍
4
+
5
+ 日历组件用于选择日期或日期区间。如要以弹层形式展示, 请使用 poppable,不要手动嵌套
6
+
7
+ ### 引入
8
+
9
+ ```tsx
10
+ import { Calendar } from "@fjyueke/bify-core"
11
+ ```
12
+
13
+ ## 代码演示
14
+
15
+ ### 选择单个日期
16
+
17
+ 下面演示了结合单元格来使用日历组件的用法,日期选择完成后会触发 `onConfirm` 事件。
18
+
19
+ ```tsx
20
+ function formatFullDate(date?: Date) {
21
+ if (date) {
22
+ return `${date.getFullYear()}/${formatDate(date)}`
23
+ }
24
+ }
25
+
26
+ function SingleCalendar() {
27
+ const [open, setOpen] = useState(false)
28
+ const [value, setValue] = useState<Date>()
29
+ const [formatValue, setFormatValue] = useState<string>()
30
+
31
+ return (
32
+ <>
33
+ <Cell title="选择单个日期" isLink children={formatValue} onClick={() => setOpen(true)} />
34
+ <Calendar
35
+ type="single"
36
+ value={value}
37
+ poppable
38
+ showPopup={open}
39
+ onClose={setOpen}
40
+ onChange={setValue}
41
+ onConfirm={(newValue) => {
42
+ setOpen(false)
43
+ setFormatValue(formatFullDate(newValue))
44
+ }}
45
+ ></Calendar>
46
+ </>
47
+ )
48
+ }
49
+ ```
50
+
51
+ ### 选择多个日期
52
+
53
+ 设置 `type` 为 `multiple` 后可以选择多个日期,此时 `onConfirm` 事件处理 value 数组结构,数组包含若干个选中的日期。
54
+
55
+ ```tsx
56
+ function formatMultiple(dates: Date[]) {
57
+ if (dates.length) {
58
+ return `选择了 ${dates.length} 个日期`
59
+ }
60
+ }
61
+
62
+ function MultipleCalendar() {
63
+ const [open, setOpen] = useState(false)
64
+ const [value, setValue] = useState<Date[]>()
65
+ const [formatValue, setFormatValue] = useState<string>()
66
+
67
+ return (
68
+ <>
69
+ <Cell title="选择多个日期" isLink children={formatValue} onClick={() => setOpen(true)} />
70
+ <Calendar
71
+ type="multiple"
72
+ value={value}
73
+ poppable
74
+ showPopup={open}
75
+ onClose={setOpen}
76
+ onChange={setValue}
77
+ onConfirm={(newValue) => {
78
+ setFormatValue(formatMultiple(newValue))
79
+ setOpen(false)
80
+ }}
81
+ ></Calendar>
82
+ </>
83
+ )
84
+ }
85
+ ```
86
+
87
+ ### 选择日期区间
88
+
89
+ 设置 `type` 为 `range` 后可以选择日期区间,此时 `onConfirm` 事件处理 value 数组结构,数组第一项为开始时间,第二项为结束时间。
90
+
91
+ ```tsx
92
+ function formatRange(dateRange: Date[]) {
93
+ if (dateRange.length) {
94
+ const [start, end] = dateRange
95
+ return `${formatDate(start)} - ${formatDate(end)}`
96
+ }
97
+ }
98
+
99
+ function RangeCalendar() {
100
+ const [open, setOpen] = useState(false)
101
+ const [value, setValue] = useState<Date[]>()
102
+ const [formatValue, setFormatValue] = useState<string>()
103
+
104
+ return (
105
+ <>
106
+ <Cell title="选择日期区间" isLink children={formatValue} onClick={() => setOpen(true)} />
107
+ <Calendar
108
+ type="range"
109
+ value={value}
110
+ onChange={setValue}
111
+ poppable
112
+ showPopup={open}
113
+ onClose={setOpen}
114
+ onConfirm={(newValue) => {
115
+ setFormatValue(formatRange(newValue))
116
+ setOpen(false)
117
+ }}
118
+ ></Calendar>
119
+ </>
120
+ )
121
+ }
122
+ ```
123
+
124
+ ### 快捷选择
125
+
126
+ 将 `showConfirm` 设置为 `false` 可以隐藏确认按钮,这种情况下选择完成后会立即触发 confirm 事件。
127
+
128
+ ```tsx
129
+ function SingleQuicklyCalendar() {
130
+ const [open, setOpen] = useState(false)
131
+ const [value, setValue] = useState<Date>()
132
+ const [formatValue, setFormatValue] = useState<string>()
133
+
134
+ return (
135
+ <>
136
+ <Cell title="选择单个日期" isLink children={formatValue} onClick={() => setOpen(true)} />
137
+ <Calendar
138
+ type="single"
139
+ value={value}
140
+ onChange={setValue}
141
+ poppable
142
+ showPopup={open}
143
+ showConfirm={false}
144
+ onClose={setOpen}
145
+ onConfirm={(newValue) => {
146
+ setFormatValue(formatFullDate(newValue))
147
+ setOpen(false)
148
+ }}
149
+ />
150
+ </>
151
+ )
152
+ }
153
+ ```
154
+
155
+ ### 自定义颜色
156
+
157
+ 通过 `css` 可以自定义日历的颜色,对选中日期和底部按钮生效。
158
+
159
+ ```tsx
160
+ <Calendar style={{ "--calendar-active-color": "red" }} />
161
+ ```
162
+
163
+ ### 自定义日期范围
164
+
165
+ 通过 `min` 和 `max` 定义日历的范围。
166
+
167
+ ```tsx
168
+ function CustomRangeCalendar() {
169
+ const [minDate] = useState(new Date(2010, 0, 1))
170
+ const [maxDate] = useState(new Date(2010, 0, 31))
171
+ const [open, setOpen] = useState(false)
172
+ const [value, setValue] = useState<Date[]>()
173
+ const [formatValue, setFormatValue] = useState<string>()
174
+
175
+ return (
176
+ <>
177
+ <Cell title="自定义日期范围" isLink children={formatValue} onClick={() => setOpen(true)} />
178
+ <Calendar
179
+ type="range"
180
+ min={minDate}
181
+ max={maxDate}
182
+ value={value}
183
+ onChange={setValue}
184
+ poppable
185
+ showPopup={open}
186
+ onClose={setOpen}
187
+ onConfirm={(newValue) => {
188
+ setFormatValue(formatRange(newValue))
189
+ setOpen(false)
190
+ }}
191
+ ></Calendar>
192
+ </>
193
+ )
194
+ }
195
+ ```
196
+
197
+ ### 自定义按钮文字
198
+
199
+ 通过 `confirmText` 设置按钮文字,通过 `confirmDisabledText` 设置按钮禁用时的文字。
200
+
201
+ ```tsx
202
+ function CustomConfirmCalendar() {
203
+ const [open, setOpen] = useState(false)
204
+ const [value, setValue] = useState<Date[]>()
205
+ const [formatValue, setFormatValue] = useState<string>()
206
+
207
+ return (
208
+ <>
209
+ <Cell title="自定义按钮" isLink children={formatValue} onClick={() => setOpen(true)} />
210
+ <Calendar
211
+ type="range"
212
+ value={value}
213
+ onChange={(newValue) => {
214
+ setValue(newValue)
215
+ }}
216
+ poppable
217
+ showPopup={open}
218
+ confirmDisabledText="请选择结束时间"
219
+ onClose={setOpen}
220
+ onConfirm={(newValue) => {
221
+ setFormatValue(formatRange(newValue))
222
+ setOpen(false)
223
+ }}
224
+ ></Calendar>
225
+ </>
226
+ )
227
+ }
228
+ ```
229
+
230
+ ### 自定义日期文案
231
+
232
+ 通过传入 `formatter` 函数来对日历上每一格的内容进行格式化。
233
+
234
+ ```tsx
235
+ const dayFormatter = (day: Calendar.DayObject) => {
236
+ if (!day.value) {
237
+ return day
238
+ }
239
+
240
+ const month = day.value.getMonth() + 1
241
+ const date = day.value.getDate()
242
+
243
+ if (month === 5) {
244
+ if (date === 1) {
245
+ day.top = "劳动节"
246
+ } else if (date === 4) {
247
+ day.top = "青年节"
248
+ } else if (date === 11) {
249
+ day.children = "今天"
250
+ }
251
+ }
252
+
253
+ if (day.type === "start") {
254
+ day.bottom = "入店"
255
+ } else if (day.type === "end") {
256
+ day.bottom = "离店"
257
+ } else if (day.type === "active") {
258
+ day.bottom = "入店/离店"
259
+ }
260
+
261
+ return day
262
+ }
263
+
264
+ function CustomDayCalendar() {
265
+ const [open, setOpen] = useState(false)
266
+ const [minDate] = useState(new Date(2010, 4, 1))
267
+ const [maxDate] = useState(new Date(2010, 4, 31))
268
+ const [value, setValue] = useState<Date[]>()
269
+ const [formatValue, setFormatValue] = useState<string>()
270
+
271
+ return (
272
+ <>
273
+ <Cell title="自定义日期文案" isLink children={formatValue} onClick={() => setOpen(true)} />
274
+ <Calendar
275
+ type="range"
276
+ min={minDate}
277
+ max={maxDate}
278
+ formatter={dayFormatter}
279
+ value={value}
280
+ onChange={setValue}
281
+ poppable
282
+ showPopup={open}
283
+ onClose={setOpen}
284
+ onConfirm={(newValue) => {
285
+ setFormatValue(formatRange(newValue))
286
+ setOpen(false)
287
+ }}
288
+ ></Calendar>
289
+ </>
290
+ )
291
+ }
292
+ ```
293
+
294
+ ### 自定义弹出位置
295
+
296
+ 通过 `placement` 属性自定义弹出层的弹出位置,可选值为 `top`、`left`、`right`。
297
+
298
+ ```tsx
299
+ function CustomPositionCalendar() {
300
+ const [open, setOpen] = useState(false)
301
+ const [value, setValue] = useState<Date>()
302
+ const [formatValue, setFormatValue] = useState<string>()
303
+
304
+ return (
305
+ <>
306
+ <Cell title="自定义弹出位置" isLink children={formatValue} onClick={() => setOpen(true)} />
307
+ <Calendar
308
+ popupPlacement="right"
309
+ type="single"
310
+ value={value}
311
+ onChange={setValue}
312
+ poppable
313
+ showPopup={open}
314
+ onClose={setOpen}
315
+ onConfirm={(newValue) => {
316
+ setFormatValue(formatFullDate(newValue))
317
+ setOpen(false)
318
+ }}
319
+ ></Calendar>
320
+ </>
321
+ )
322
+ }
323
+ ```
324
+
325
+ ### 自定义周起始日
326
+
327
+ 通过 `firstDayOfWeek` 属性设置一周从哪天开始。
328
+
329
+ ```tsx
330
+ function CustomFirstDayOfWeekCalendar() {
331
+ const [open, setOpen] = useState(false)
332
+ const [value, setValue] = useState<Date>()
333
+ const [formatValue, setFormatValue] = useState<string>()
334
+
335
+ return (
336
+ <>
337
+ <Cell title="自定义周起始日" isLink children={formatValue} onClick={() => setOpen(true)} />
338
+ <Calendar
339
+ popupCloseIcon={false}
340
+ popupRounded={false}
341
+ type="single"
342
+ value={value}
343
+ onChange={setValue}
344
+ poppable
345
+ showPopup={open}
346
+ onClose={setOpen}
347
+ firstDayOfWeek={1}
348
+ onConfirm={(newValue) => {
349
+ setFormatValue(formatFullDate(newValue))
350
+ setOpen(false)
351
+ }}
352
+ ></Calendar>
353
+ </>
354
+ )
355
+ }
356
+ ```
357
+
358
+ ### 平铺展示
359
+
360
+ 将 `poppable` 设置为 `false`,日历会直接展示在页面内,而不是以弹层的形式出现。
361
+
362
+ ```tsx
363
+ function TiledCalendar() {
364
+ const [minDate] = useState(new Date(2012, 1, 10))
365
+ const [maxDate] = useState(new Date(2012, 10, 20))
366
+ const [value, setValue] = useState<Date>()
367
+ return (
368
+ <Calendar
369
+ style={{ height: "500px" }}
370
+ title="日历"
371
+ min={minDate}
372
+ max={maxDate}
373
+ value={value}
374
+ onChange={setValue}
375
+ />
376
+ )
377
+ }
378
+ ```
379
+
380
+ ### 手动控制 Footer DOM
381
+
382
+ 通过 `Calendar.Footer` `Calendar.Button` 手动控制 Footer DOM。
383
+
384
+ ```tsx
385
+ function CustomConfirmCalendar() {
386
+ const [open, setOpen] = useState(false)
387
+ const [value, setValue] = useState<Date[]>()
388
+ const [confirm, setConfirm] = useState("请选择结束时间")
389
+ const [formatValue, setFormatValue] = useState<string>()
390
+
391
+ return (
392
+ <>
393
+ <Cell title="自定义按钮" isLink children={formatValue} onClick={() => setOpen(true)} />
394
+ <Calendar
395
+ type="range"
396
+ value={value}
397
+ onChange={(newValue) => {
398
+ setValue(newValue)
399
+ setConfirm(newValue.length === 2 ? "完成" : "请选择结束时间")
400
+ }}
401
+ poppable
402
+ showPopup={open}
403
+ onClose={setOpen}
404
+ onConfirm={(newValue) => {
405
+ setFormatValue(formatRange(newValue))
406
+ setOpen(false)
407
+ }}
408
+ >
409
+ <Calendar.Footer>
410
+ <Calendar.Button type="confirm">{confirm}</Calendar.Button>
411
+ </Calendar.Footer>
412
+ </Calendar>
413
+ </>
414
+ )
415
+ }
416
+ ```
417
+
418
+ ## API
419
+
420
+ ### Props
421
+
422
+ | 参数 | 说明 | 类型 | 默认值 |
423
+ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------- |
424
+ | type | 选择类型:<br>`single` 表示选择单个日期,<br>`multiple` 表示选择多个日期,<br>`range` 表示选择日期区间 | _string_ | `single` |
425
+ | defaultValue | 默认选中的日期,`type` 为 `multiple` 或 `range` 时为数组,传入 `null` 表示默认不选择 | _Date \| Date[] \| null_ | 今天 |
426
+ | value | 选中的日期,`type` 为 `multiple` 或 `range` 时为数组,传入 `null` 表示默认不选择 | _Date \| Date[] \| null_ | 今天 |
427
+ | formatter | 日期格式化函数 | _(day: Calendar.DayObject) => Calendar.DayObject_ | - |
428
+ | title | 日历标题 | _ReactNode_ | `日期选择` |
429
+ | showSubtitle<br> `v0.1.1-alpha.6` | 是否展示日历副标题(年月) | _boolean_ | `true` |
430
+ | subtitle | 自定义日历副标题 | _ReactNode\|((date: Date) => ReactNode)_ | (date) => \`${date.getFullYear()}年${date.getMonth() + 1}月\` |
431
+ | watermark | 是否显示月份背景水印 | _boolean_ | `true` |
432
+ | min | 可选择的最小日期 | _Date_ | 当前日期 |
433
+ | max | 可选择的最大日期 | _Date_ | 当前日期的六个月后 |
434
+ | poppable <br> `v0.1.1-alpha.6` | 是否以弹层的形式展示日历 | _boolean_ | `false` |
435
+ | showPopup <br> `v0.1.1-alpha.6` | 是否显示日历弹窗, poppable: true 时生效 | _boolean_ | `false` |
436
+ | popupPlacement | 弹出位置,可选值为 `left` `right` `top` , poppable: true 时生效 | _string_ | `bottom` |
437
+ | popupRound | 是否显示圆角弹窗, poppable: true 时生效 | _boolean_ | `true` |
438
+ | popupCloseIcon | 弹框是否显示关闭图标, poppable: true 时生效 | _boolean_ | `true` |
439
+ | readonly | 是否为只读状态,只读状态下不能选择日期 | _boolean_ | `false` |
440
+ | showConfirm <br> `v0.1.1-alpha.6` | 是否展示确认按钮 | _boolean_ | `true` |
441
+ | confirmText <br> `v0.1.1-alpha.6` | 确认按钮的文字 | _ReactNode_ | `确认` |
442
+ | confirmDisabledText <br> `v0.1.1-alpha.6` | 确认按钮处于禁用状态时的文字 | _ReactNode_ | `确认` |
443
+ | firstDayOfWeek | 设置周起始日 | _0-6_ | `0` |
444
+
445
+ ### Calendar.DayObject 数据结构
446
+
447
+ 日历中的每个日期都对应一个 Day 对象,通过`formatter`属性可以自定义 Day 对象的内容
448
+
449
+ | 键名 | 说明 | 类型 |
450
+ | --------- | ------------------------------------------------------------- | -------- |
451
+ | value | 日期对应的 Date 对象 | _Date_ |
452
+ | type | 日期类型,可选值为 `active` `start` `middle` `end` `disabled` | _string_ |
453
+ | children | 中间显示的文字 | _string_ |
454
+ | top | 上方的提示信息 | _string_ |
455
+ | bottom | 下方的提示信息 | _string_ |
456
+ | className | 额外类名 | _string_ |
457
+
458
+ ### Events
459
+
460
+ | 事件名 | 说明 | 回调参数 |
461
+ | ---------------------------- | ----------------------------------------------------------------------- | ----------------------- |
462
+ | onChange | 点击并选中任意日期时触发 | _value: Date \| Date[]_ |
463
+ | onConfirm | 日期选择完成后触发,若使用 `Calendar.Button` 组件,则点击确认按钮后触发 | _value: Date \| Date[]_ |
464
+ | onClose <br>`v0.1.1-alpha.6` | 关闭弹层时出发 | _visible: boolean_ |
465
+
466
+ ### Calendar.Footer Props
467
+
468
+ | 参数 | 说明 | 类型 | 默认值 |
469
+ | -------- | -------- | ---------- | ------ |
470
+ | children | 底部内容 | _ReactNoe_ | - |
471
+
472
+ ### Calendar.Button Props
473
+
474
+ | 参数 | 说明 | 类型 | 默认值 |
475
+ | ------------------- | ---------------------------- | ----------- | --------- |
476
+ | children | 按钮内容 | _ReactNoe_ | 确认 |
477
+ | type | 按钮类型 | _confirm_ | `confirm` |
478
+ | confirmText | 确认按钮的文字 | _ReactNode_ | - |
479
+ | confirmDisabledText | 确认按钮处于禁用状态时的文字 | _ReactNode_ | - |
480
+
481
+ ## 主题定制
482
+
483
+ ### 样式变量
484
+
485
+ 组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider](/components/config-provider/) 组件。
486
+
487
+ | 名称 | 默认值 | 描述 |
488
+ | ------------------------------------------ | -------------------------------------------------- | ---- |
489
+ | --calendar-active-color | _var(--blue, $blue)_ | - |
490
+ | --calendar-background-color | _var(--white)_ | - |
491
+ | --calendar-header-box-shadow | _0 2px * $hd 10px * $hd rgba(125, 126, 128, 0.16)_ | - |
492
+ | --calendar-header-title-height | _44px \* $hd_ | - |
493
+ | --calendar-header-title-font-size | _var(--font-size-lg)_ | - |
494
+ | --calendar-header-subtitle-font-size | _var(--font-size-md)_ | - |
495
+ | --calendar-weekdays-height | _30px \* $hd_ | - |
496
+ | --calendar-weekdays-font-size | _var(--font-size-sm)_ | - |
497
+ | --calendar-month-title-font-size | _var(--font-size-md)_ | - |
498
+ | --calendar-month-watermark-color | _rgba(242, 243, 245, 0.8)_ | - |
499
+ | --calendar-month-watermark-font-size | _160px \* $hd_ | - |
500
+ | --calendar-range-edge-color | _var(--white)_ | - |
501
+ | --calendar-range-edge-background-color | _var(--calendar-active-color)_ | - |
502
+ | --calendar-range-middle-color | _var(--calendar-active-color)_ | - |
503
+ | --calendar-range-middle-background-opacity | _0.1_ | - |
504
+ | --calendar-day-height | _64px \* $hd_ | - |
505
+ | --calendar-day-font-size | _var(--font-size-lg)_ | - |
506
+ | --calendar-day-disabled-color | _var(--gray-5)_ | - |
507
+ | --calendar-active-day-size | _54px \* $hd_ | - |
508
+ | --calendar-active-day-color | _var(--white)_ | - |
509
+ | --calendar-active-day-background-color | _var(--calendar-active-color)_ | - |
510
+ | --calendar-active-day-border-radius | _var(--border-radius-md)_ | - |
511
+ | --calendar-day-info-font-size | _var(--font-size-xs)_ | - |
512
+ | --calendar-day-info-line-height | _var(--line-height-xs)_ | - |
513
+ | --calendar-confirm-button-height | _36px \* $hd_ | - |
514
+ | --calendar-confirm-button-margin | _7px \* $hd 0_ | - |
515
+ | --calendar-confirm-button-color | _var(--calendar-active-color)_ | - |
516
+ | --calendar-footer-padding | _0 var(--padding-md)_ | - |