@cerberus-design/react 0.13.2-next-46f23d2 → 0.13.2-next-9b3d27e

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 (120) hide show
  1. package/build/legacy/_tsup-dts-rollup.d.cts +297 -1
  2. package/build/legacy/components/Accordion.cjs.map +1 -1
  3. package/build/legacy/components/AccordionItemGroup.cjs.map +1 -1
  4. package/build/legacy/components/Admonition.cjs +3 -0
  5. package/build/legacy/components/Admonition.cjs.map +1 -1
  6. package/build/legacy/components/Avatar.cjs +3 -0
  7. package/build/legacy/components/Avatar.cjs.map +1 -1
  8. package/build/legacy/components/Checkbox.cjs +3 -0
  9. package/build/legacy/components/Checkbox.cjs.map +1 -1
  10. package/build/legacy/components/DatePicker.client.cjs +525 -0
  11. package/build/legacy/components/DatePicker.client.cjs.map +1 -0
  12. package/build/legacy/components/DatePicker.server.cjs +364 -0
  13. package/build/legacy/components/DatePicker.server.cjs.map +1 -0
  14. package/build/legacy/components/FileStatus.cjs +3 -0
  15. package/build/legacy/components/FileStatus.cjs.map +1 -1
  16. package/build/legacy/components/FileUploader.cjs +3 -0
  17. package/build/legacy/components/FileUploader.cjs.map +1 -1
  18. package/build/legacy/components/Input.cjs +3 -0
  19. package/build/legacy/components/Input.cjs.map +1 -1
  20. package/build/legacy/components/Notification.cjs +3 -0
  21. package/build/legacy/components/Notification.cjs.map +1 -1
  22. package/build/legacy/components/Select.cjs +3 -0
  23. package/build/legacy/components/Select.cjs.map +1 -1
  24. package/build/legacy/components/Tag.cjs +3 -0
  25. package/build/legacy/components/Tag.cjs.map +1 -1
  26. package/build/legacy/components/Toggle.cjs +3 -0
  27. package/build/legacy/components/Toggle.cjs.map +1 -1
  28. package/build/legacy/config/cerbIcons.cjs +3 -0
  29. package/build/legacy/config/cerbIcons.cjs.map +1 -1
  30. package/build/legacy/config/defineIcons.cjs +3 -0
  31. package/build/legacy/config/defineIcons.cjs.map +1 -1
  32. package/build/legacy/context/confirm-modal.cjs +3 -0
  33. package/build/legacy/context/confirm-modal.cjs.map +1 -1
  34. package/build/legacy/context/cta-modal.cjs +3 -0
  35. package/build/legacy/context/cta-modal.cjs.map +1 -1
  36. package/build/legacy/context/notification-center.cjs +3 -0
  37. package/build/legacy/context/notification-center.cjs.map +1 -1
  38. package/build/legacy/context/prompt-modal.cjs +3 -0
  39. package/build/legacy/context/prompt-modal.cjs.map +1 -1
  40. package/build/legacy/hooks/useDate.cjs +8 -0
  41. package/build/legacy/hooks/useDate.cjs.map +1 -1
  42. package/build/legacy/index.cjs +909 -613
  43. package/build/legacy/index.cjs.map +1 -1
  44. package/build/modern/_tsup-dts-rollup.d.ts +297 -1
  45. package/build/modern/{chunk-ZTYKIWYQ.js → chunk-34E3UFFB.js} +1 -1
  46. package/build/modern/chunk-34E3UFFB.js.map +1 -0
  47. package/build/modern/{chunk-CZND26FC.js → chunk-3BM6MZ4A.js} +8 -1
  48. package/build/modern/{chunk-CZND26FC.js.map → chunk-3BM6MZ4A.js.map} +1 -1
  49. package/build/modern/{chunk-67KLFLNR.js → chunk-4IMOKN2D.js} +3 -3
  50. package/build/modern/{chunk-XNX3OTJK.js → chunk-5KHU6MM5.js} +7 -1
  51. package/build/modern/chunk-5KHU6MM5.js.map +1 -0
  52. package/build/modern/{chunk-C3HYHH3H.js → chunk-BU5JK37R.js} +2 -2
  53. package/build/modern/{chunk-UBN2CZLV.js → chunk-DDOTCGGA.js} +2 -2
  54. package/build/modern/{chunk-CMDPTXHB.js → chunk-ECKJGCNH.js} +6 -6
  55. package/build/modern/{chunk-W3YI64C5.js → chunk-F4LTOZAN.js} +2 -2
  56. package/build/modern/{chunk-SVFZJYLV.js → chunk-F7EWTOML.js} +2 -2
  57. package/build/modern/{chunk-CSMPRYNC.js → chunk-F7XWOSN3.js} +2 -2
  58. package/build/modern/{chunk-NF5WV3OW.js → chunk-FRWNAVDM.js} +6 -6
  59. package/build/modern/{chunk-42RVVWGM.js → chunk-G7AGKII3.js} +11 -11
  60. package/build/modern/{chunk-RET4YOBV.js → chunk-GI6CSUU4.js} +6 -6
  61. package/build/modern/{chunk-35L6DOHE.js → chunk-HP4ZN473.js} +2 -2
  62. package/build/modern/chunk-IP5VFOPZ.js +132 -0
  63. package/build/modern/chunk-IP5VFOPZ.js.map +1 -0
  64. package/build/modern/{chunk-RHHFH6JJ.js → chunk-M73ECA25.js} +2 -2
  65. package/build/modern/{chunk-OFAATLPF.js → chunk-O7QVCF3H.js} +3 -3
  66. package/build/modern/chunk-QX4V5V74.js +169 -0
  67. package/build/modern/chunk-QX4V5V74.js.map +1 -0
  68. package/build/modern/{chunk-3DGV4ESI.js → chunk-S25RHYZV.js} +2 -2
  69. package/build/modern/{chunk-PGXJJDPH.js → chunk-W2LSPRQ3.js} +2 -2
  70. package/build/modern/{chunk-MRH2EO3L.js → chunk-XVU2NQCW.js} +2 -2
  71. package/build/modern/components/Accordion.js +1 -1
  72. package/build/modern/components/AccordionItemGroup.js +2 -2
  73. package/build/modern/components/Admonition.js +4 -4
  74. package/build/modern/components/Avatar.js +3 -3
  75. package/build/modern/components/Checkbox.js +3 -3
  76. package/build/modern/components/DatePicker.client.js +32 -0
  77. package/build/modern/components/DatePicker.client.js.map +1 -0
  78. package/build/modern/components/DatePicker.server.js +31 -0
  79. package/build/modern/components/DatePicker.server.js.map +1 -0
  80. package/build/modern/components/FileStatus.js +5 -5
  81. package/build/modern/components/FileUploader.js +4 -4
  82. package/build/modern/components/Input.js +3 -3
  83. package/build/modern/components/Notification.js +3 -3
  84. package/build/modern/components/Select.js +3 -3
  85. package/build/modern/components/Tag.js +3 -3
  86. package/build/modern/components/Toggle.js +3 -3
  87. package/build/modern/config/cerbIcons.js +1 -1
  88. package/build/modern/config/defineIcons.js +2 -2
  89. package/build/modern/context/confirm-modal.js +5 -5
  90. package/build/modern/context/cta-modal.js +5 -5
  91. package/build/modern/context/notification-center.js +4 -4
  92. package/build/modern/context/prompt-modal.js +8 -8
  93. package/build/modern/hooks/useDate.js +3 -1
  94. package/build/modern/index.js +110 -68
  95. package/build/modern/index.js.map +1 -1
  96. package/package.json +2 -2
  97. package/src/components/Accordion.tsx +0 -1
  98. package/src/components/DatePicker.client.tsx +364 -0
  99. package/src/components/DatePicker.server.tsx +229 -0
  100. package/src/config/cerbIcons.ts +9 -0
  101. package/src/hooks/useDate.ts +12 -0
  102. package/src/index.ts +2 -0
  103. package/build/modern/chunk-XNX3OTJK.js.map +0 -1
  104. package/build/modern/chunk-ZTYKIWYQ.js.map +0 -1
  105. /package/build/modern/{chunk-67KLFLNR.js.map → chunk-4IMOKN2D.js.map} +0 -0
  106. /package/build/modern/{chunk-C3HYHH3H.js.map → chunk-BU5JK37R.js.map} +0 -0
  107. /package/build/modern/{chunk-UBN2CZLV.js.map → chunk-DDOTCGGA.js.map} +0 -0
  108. /package/build/modern/{chunk-CMDPTXHB.js.map → chunk-ECKJGCNH.js.map} +0 -0
  109. /package/build/modern/{chunk-W3YI64C5.js.map → chunk-F4LTOZAN.js.map} +0 -0
  110. /package/build/modern/{chunk-SVFZJYLV.js.map → chunk-F7EWTOML.js.map} +0 -0
  111. /package/build/modern/{chunk-CSMPRYNC.js.map → chunk-F7XWOSN3.js.map} +0 -0
  112. /package/build/modern/{chunk-NF5WV3OW.js.map → chunk-FRWNAVDM.js.map} +0 -0
  113. /package/build/modern/{chunk-42RVVWGM.js.map → chunk-G7AGKII3.js.map} +0 -0
  114. /package/build/modern/{chunk-RET4YOBV.js.map → chunk-GI6CSUU4.js.map} +0 -0
  115. /package/build/modern/{chunk-35L6DOHE.js.map → chunk-HP4ZN473.js.map} +0 -0
  116. /package/build/modern/{chunk-RHHFH6JJ.js.map → chunk-M73ECA25.js.map} +0 -0
  117. /package/build/modern/{chunk-OFAATLPF.js.map → chunk-O7QVCF3H.js.map} +0 -0
  118. /package/build/modern/{chunk-3DGV4ESI.js.map → chunk-S25RHYZV.js.map} +0 -0
  119. /package/build/modern/{chunk-PGXJJDPH.js.map → chunk-W2LSPRQ3.js.map} +0 -0
  120. /package/build/modern/{chunk-MRH2EO3L.js.map → chunk-XVU2NQCW.js.map} +0 -0
@@ -0,0 +1,364 @@
1
+ 'use client'
2
+
3
+ import {
4
+ DatePicker as ArkDP,
5
+ type DatePickerContentProps,
6
+ type DatePickerInputProps,
7
+ type DatePickerRootProps,
8
+ type DatePickerViewProps,
9
+ type DateValue,
10
+ } from '@ark-ui/react'
11
+ import { Portal } from './Portal'
12
+ import { useCallback } from 'react'
13
+ import { datePicker } from '@cerberus/styled-system/recipes'
14
+ import { cx } from '@cerberus/styled-system/css'
15
+ import { useFieldContext } from '../context/field'
16
+ import {
17
+ DatePickerTrigger,
18
+ DatePickerView,
19
+ DatePickerContext,
20
+ DatePickerViewControlGroup,
21
+ DatePickerTable,
22
+ DatePickerTableHeader,
23
+ DatePickerTableCellTrigger,
24
+ DatePickerTableCell,
25
+ } from './DatePicker.server'
26
+ import { formatISOToMilitary } from '../hooks/useDate'
27
+
28
+ /**
29
+ * This module contains the DatePicker client family components.
30
+ * @module DatePicker:client
31
+ */
32
+
33
+ // We are not exposing this to the public API
34
+ const datePickerStyles = datePicker()
35
+
36
+ /**
37
+ * The main context provider for the DatePicker family components.
38
+ * @definition [Date Picker docs](https://cerberus.digitalu.design/react/date-picker)
39
+ * @example
40
+ * ```tsx
41
+ * <Field>
42
+ * <DatePicker name="start_date">
43
+ * <DatePickerLabel>Start date</DatePickerLabel>
44
+ * <DatePickerInput />
45
+ * <DatePickerCalendar />
46
+ * </DatePicker>
47
+ * </Field>
48
+ * ```
49
+ */
50
+ export function DatePicker(props: DatePickerRootProps) {
51
+ const states = useFieldContext()
52
+
53
+ // TODO: Fix this format bug
54
+ // There is a bug with the Root component that causes random date selection onBlur after the first selection if the format prop is used.
55
+ const handleFormat = useCallback((value: DateValue) => {
56
+ return formatISOToMilitary(value.toString())
57
+ }, [])
58
+
59
+ return (
60
+ <ArkDP.Root
61
+ {...props}
62
+ {...states}
63
+ format={handleFormat}
64
+ positioning={{
65
+ placement: 'bottom-start',
66
+ }}
67
+ />
68
+ )
69
+ }
70
+
71
+ /**
72
+ * The input component for the DatePicker.
73
+ * @definition [Date Picker docs](https://cerberus.digitalu.design/react/date-picker)
74
+ * @example
75
+ * ```tsx
76
+ * <Field>
77
+ * <DatePicker name="start_date">
78
+ * <DatePickerLabel>Start date</DatePickerLabel>
79
+ * <DatePickerInput />
80
+ * <DatePickerCalendar />
81
+ * </DatePicker>
82
+ * </Field>
83
+ * ```
84
+ */
85
+ export function DatePickerInput(props: DatePickerInputProps) {
86
+ const { invalid, ...fieldStates } = useFieldContext()
87
+ return (
88
+ <ArkDP.Control className={datePickerStyles.control}>
89
+ <DatePickerTrigger />
90
+ <ArkDP.Input
91
+ {...props}
92
+ {...fieldStates}
93
+ {...(invalid && { 'aria-invalid': true })}
94
+ className={cx(props.className, datePickerStyles.input)}
95
+ placeholder={props.placeholder ?? 'DD MMM YYYY'}
96
+ maxLength={11}
97
+ />
98
+ </ArkDP.Control>
99
+ )
100
+ }
101
+
102
+ /**
103
+ * The input component for the DatePicker that uses ranges.
104
+ * @definition [Date Picker docs](https://cerberus.digitalu.design/react/date-picker)
105
+ * @example
106
+ * ```tsx
107
+ * <Field>
108
+ * <DatePicker name="start_date" selection="range">
109
+ * <DatePickerLabel>Start date</DatePickerLabel>
110
+ * <RangePickerInput />
111
+ * <DatePickerCalendar />
112
+ * </DatePicker>
113
+ * </Field>
114
+ * ```
115
+ */
116
+ export function RangePickerInput(props: DatePickerInputProps) {
117
+ const { invalid, ...fieldStates } = useFieldContext()
118
+ return (
119
+ <ArkDP.Control data-range className={datePickerStyles.control}>
120
+ <DatePickerTrigger />
121
+ <ArkDP.Input
122
+ {...props}
123
+ {...fieldStates}
124
+ {...(invalid && { 'aria-invalid': true })}
125
+ data-range-input
126
+ className={cx(props.className, datePickerStyles.input)}
127
+ placeholder={props.placeholder ?? 'DD MMM YYYY'}
128
+ maxLength={11}
129
+ index={0}
130
+ />
131
+ <ArkDP.Input
132
+ {...props}
133
+ {...fieldStates}
134
+ {...(invalid && { 'aria-invalid': true })}
135
+ data-range-input
136
+ data-range-end-input
137
+ className={cx(props.className, datePickerStyles.input)}
138
+ placeholder={props.placeholder ?? 'DD MMM YYYY'}
139
+ maxLength={11}
140
+ index={1}
141
+ />
142
+ </ArkDP.Control>
143
+ )
144
+ }
145
+
146
+ /**
147
+ * The content component for the DatePicker which contains the calendar.
148
+ * @definition [Date Picker docs](https://cerberus.digitalu.design/react/date-picker)
149
+ * @example
150
+ * ```tsx
151
+ * <Field>
152
+ * <DatePicker name="start_date">
153
+ * <DatePickerLabel>Start date</DatePickerLabel>
154
+ * <DatePickerInput />
155
+ * <DatePickerCalendar />
156
+ * </DatePicker>
157
+ * </Field>
158
+ * ```
159
+ */
160
+ export function DatePickerContent(props: DatePickerContentProps) {
161
+ const { children, ...contentProps } = props
162
+ return (
163
+ <Portal>
164
+ <ArkDP.Positioner className={datePickerStyles.positioner}>
165
+ <ArkDP.Content
166
+ {...contentProps}
167
+ className={cx(contentProps.className, datePickerStyles.content)}
168
+ >
169
+ {children}
170
+ </ArkDP.Content>
171
+ </ArkDP.Positioner>
172
+ </Portal>
173
+ )
174
+ }
175
+
176
+ /**
177
+ * The day view component for the DatePicker.
178
+ * @definition [Date Picker docs](https://cerberus.digitalu.design/react/date-picker)
179
+ * @example
180
+ * ```tsx
181
+ * <Field>
182
+ * <DatePicker name="start_date">
183
+ * <DatePickerLabel>Start date</DatePickerLabel>
184
+ * <DatePickerInput />
185
+ * <DatePickerCalendar />
186
+ * </DatePicker>
187
+ * </Field>
188
+ * ```
189
+ */
190
+ export function DatePickerDayView(props: Omit<DatePickerViewProps, 'view'>) {
191
+ function isToday(date: ArkDP.DateValue): boolean {
192
+ const today = new Date()
193
+ const formatted = today.toISOString().split('T')[0]
194
+ const arkDate = `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`
195
+ return formatted === arkDate
196
+ }
197
+
198
+ function isPastDay(date: ArkDP.DateValue): boolean {
199
+ const today = new Date()
200
+ const arkDate = `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`
201
+ return new Date(arkDate) < today
202
+ }
203
+
204
+ function getDayValue(date: ArkDP.DateValue): 'today' | 'past' | 'future' {
205
+ if (isToday(date)) return 'today'
206
+ if (isPastDay(date)) return 'past'
207
+ return 'future'
208
+ }
209
+
210
+ return (
211
+ <DatePickerView {...props} view="day">
212
+ <DatePickerContext>
213
+ {(datePicker) => (
214
+ <>
215
+ <DatePickerViewControlGroup />
216
+
217
+ <DatePickerTable>
218
+ <ArkDP.TableHead>
219
+ <ArkDP.TableRow>
220
+ {datePicker.weekDays.map((weekDay, id) => (
221
+ <DatePickerTableHeader key={id}>
222
+ {weekDay.narrow}
223
+ </DatePickerTableHeader>
224
+ ))}
225
+ </ArkDP.TableRow>
226
+ </ArkDP.TableHead>
227
+
228
+ <ArkDP.TableBody>
229
+ {datePicker.weeks.map((week, id) => (
230
+ <ArkDP.TableRow key={id}>
231
+ {week.map((day, id) => (
232
+ <DatePickerTableCell key={id} value={day}>
233
+ <DatePickerTableCellTrigger
234
+ data-date={getDayValue(day)}
235
+ >
236
+ {day.day}
237
+ </DatePickerTableCellTrigger>
238
+ </DatePickerTableCell>
239
+ ))}
240
+ </ArkDP.TableRow>
241
+ ))}
242
+ </ArkDP.TableBody>
243
+ </DatePickerTable>
244
+ </>
245
+ )}
246
+ </DatePickerContext>
247
+ </DatePickerView>
248
+ )
249
+ }
250
+
251
+ /**
252
+ * The month view component for the DatePicker.
253
+ * @definition [Date Picker docs](https://cerberus.digitalu.design/react/date-picker)
254
+ * @example
255
+ * ```tsx
256
+ * <Field>
257
+ * <DatePicker name="start_date">
258
+ * <DatePickerLabel>Start date</DatePickerLabel>
259
+ * <DatePickerInput />
260
+ * <DatePickerCalendar />
261
+ * </DatePicker>
262
+ * </Field>
263
+ * ```
264
+ */
265
+ export function DatePickerMonthView(props: Omit<DatePickerViewProps, 'view'>) {
266
+ return (
267
+ <ArkDP.View {...props} view="month">
268
+ <ArkDP.Context>
269
+ {(datePicker) => (
270
+ <>
271
+ <DatePickerViewControlGroup />
272
+
273
+ <DatePickerTable>
274
+ <ArkDP.TableBody>
275
+ {datePicker
276
+ .getMonthsGrid({ columns: 4, format: 'short' })
277
+ .map((months, id) => (
278
+ <ArkDP.TableRow key={id}>
279
+ {months.map((month, id) => (
280
+ <DatePickerTableCell key={id} value={month.value}>
281
+ <DatePickerTableCellTrigger>
282
+ {month.label}
283
+ </DatePickerTableCellTrigger>
284
+ </DatePickerTableCell>
285
+ ))}
286
+ </ArkDP.TableRow>
287
+ ))}
288
+ </ArkDP.TableBody>
289
+ </DatePickerTable>
290
+ </>
291
+ )}
292
+ </ArkDP.Context>
293
+ </ArkDP.View>
294
+ )
295
+ }
296
+
297
+ /**
298
+ * The year view component for the DatePicker.
299
+ * @definition [Date Picker docs](https://cerberus.digitalu.design/react/date-picker)
300
+ * @example
301
+ * ```tsx
302
+ * <Field>
303
+ * <DatePicker name="start_date">
304
+ * <DatePickerLabel>Start date</DatePickerLabel>
305
+ * <DatePickerInput />
306
+ * <DatePickerCalendar />
307
+ * </DatePicker>
308
+ * </Field>
309
+ * ```
310
+ */
311
+ export function DatePickerYearView(props: Omit<DatePickerViewProps, 'view'>) {
312
+ return (
313
+ <ArkDP.View {...props} view="year">
314
+ <ArkDP.Context>
315
+ {(datePicker) => (
316
+ <>
317
+ <DatePickerViewControlGroup />
318
+
319
+ <DatePickerTable>
320
+ <ArkDP.TableBody>
321
+ {datePicker.getYearsGrid({ columns: 4 }).map((years, id) => (
322
+ <ArkDP.TableRow key={id}>
323
+ {years.map((year, id) => (
324
+ <DatePickerTableCell key={id} value={year.value}>
325
+ <DatePickerTableCellTrigger>
326
+ {year.label}
327
+ </DatePickerTableCellTrigger>
328
+ </DatePickerTableCell>
329
+ ))}
330
+ </ArkDP.TableRow>
331
+ ))}
332
+ </ArkDP.TableBody>
333
+ </DatePickerTable>
334
+ </>
335
+ )}
336
+ </ArkDP.Context>
337
+ </ArkDP.View>
338
+ )
339
+ }
340
+
341
+ /**
342
+ * An abstraction of the DatePicker content components that contain the
343
+ * different calendar views and controls.
344
+ * @definition [Date Picker docs](https://cerberus.digitalu.design/react/date-picker)
345
+ * @example
346
+ * ```tsx
347
+ * <Field>
348
+ * <DatePicker name="start_date">
349
+ * <DatePickerLabel>Start date</DatePickerLabel>
350
+ * <DatePickerInput />
351
+ * <DatePickerCalendar />
352
+ * </DatePicker>
353
+ * </Field>
354
+ * ```
355
+ */
356
+ export function DatePickerCalendar() {
357
+ return (
358
+ <DatePickerContent>
359
+ <DatePickerDayView />
360
+ <DatePickerMonthView />
361
+ <DatePickerYearView />
362
+ </DatePickerContent>
363
+ )
364
+ }
@@ -0,0 +1,229 @@
1
+ import {
2
+ DatePicker as ArkDP,
3
+ type DatePickerLabelProps,
4
+ type DatePickerTableCellProps,
5
+ type DatePickerTableCellTriggerProps,
6
+ type DatePickerTableHeaderProps,
7
+ type DatePickerTableProps,
8
+ type DatePickerTriggerProps,
9
+ type DatePickerViewControlProps,
10
+ } from '@ark-ui/react'
11
+ import { css, cx } from '@cerberus/styled-system/css'
12
+ import { datePicker, iconButton, label } from '@cerberus/styled-system/recipes'
13
+ import { $cerberusIcons } from '../config/defineIcons'
14
+ import { IconButton } from './IconButton'
15
+ import { Button } from './Button'
16
+
17
+ /**
18
+ * This module contains the DatePicker server family components.
19
+ * @module DatePicker
20
+ */
21
+
22
+ // We are not exposing this to the public API
23
+ const datePickerStyles = datePicker()
24
+
25
+ /**
26
+ * The label component for the DatePicker.
27
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
28
+ * @example
29
+ * ```tsx
30
+ * <DatePickerLabel>
31
+ * <DatePickerLabel.Label>...</DatePickerLabel.Label>
32
+ * </DatePickerLabel>
33
+ * ```
34
+ */
35
+ export function DatePickerLabel(props: DatePickerLabelProps) {
36
+ const { className, ...arkProps } = props
37
+ return (
38
+ <ArkDP.Label
39
+ {...arkProps}
40
+ className={cx(
41
+ className,
42
+ label({
43
+ size: 'sm',
44
+ }),
45
+ )}
46
+ />
47
+ )
48
+ }
49
+
50
+ /**
51
+ * The trigger component for the DatePicker which opens the calendar.
52
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
53
+ * @example
54
+ * ```tsx
55
+ * <DatePickerTrigger />
56
+ * ```
57
+ */
58
+ export function DatePickerTrigger(props: DatePickerTriggerProps) {
59
+ const { calendar: CalendarIcon } = $cerberusIcons
60
+ return (
61
+ <ArkDP.Trigger
62
+ {...props}
63
+ className={cx(
64
+ props.className,
65
+ iconButton({
66
+ size: 'sm',
67
+ usage: 'ghost',
68
+ }),
69
+ datePickerStyles.trigger,
70
+ )}
71
+ >
72
+ <CalendarIcon />
73
+ </ArkDP.Trigger>
74
+ )
75
+ }
76
+
77
+ /**
78
+ * The control component for the DatePicker which wraps the triggers to switch
79
+ * between calendar views.
80
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
81
+ * @example
82
+ * ```tsx
83
+ * <DatePickerViewControl>
84
+ * <PrevTrigger />
85
+ * <ViewTrigger />
86
+ * <NextTrigger />
87
+ * </DatePickerViewControl>
88
+ * ```
89
+ */
90
+ export function DatePickerViewControl(props: DatePickerViewControlProps) {
91
+ return (
92
+ <ArkDP.Control
93
+ {...props}
94
+ className={cx(props.className, datePickerStyles.viewControl)}
95
+ />
96
+ )
97
+ }
98
+
99
+ /**
100
+ * An abstraction of the DatePicker control that contains the prev, view, and
101
+ * next triggers which control the calendar output.
102
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
103
+ * @example
104
+ * ```tsx
105
+ * <DatePickerViewControlGroup />
106
+ * ```
107
+ */
108
+ export function DatePickerViewControlGroup(props: DatePickerViewControlProps) {
109
+ const { calendarPrev: PrevIcon, calendarNext: NextIcon } = $cerberusIcons
110
+ return (
111
+ <DatePickerViewControl {...props}>
112
+ <ArkDP.PrevTrigger asChild>
113
+ <IconButton ariaLabel="Previous" size="sm">
114
+ <PrevIcon />
115
+ </IconButton>
116
+ </ArkDP.PrevTrigger>
117
+
118
+ <ArkDP.ViewTrigger asChild>
119
+ <Button
120
+ className={css({
121
+ h: '2rem',
122
+ paddingInline: 'md',
123
+ })}
124
+ shape="rounded"
125
+ size="sm"
126
+ usage="ghost"
127
+ >
128
+ <ArkDP.RangeText />
129
+ </Button>
130
+ </ArkDP.ViewTrigger>
131
+
132
+ <ArkDP.NextTrigger asChild>
133
+ <IconButton ariaLabel="Next" size="sm">
134
+ <NextIcon />
135
+ </IconButton>
136
+ </ArkDP.NextTrigger>
137
+ </DatePickerViewControl>
138
+ )
139
+ }
140
+
141
+ /**
142
+ * The table component for the DatePicker.
143
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
144
+ * @example
145
+ * ```tsx
146
+ * <DatePickerTable />
147
+ * ```
148
+ */
149
+ export function DatePickerTable(props: DatePickerTableProps) {
150
+ return (
151
+ <ArkDP.Table
152
+ {...props}
153
+ className={cx(props.className, datePickerStyles.table)}
154
+ />
155
+ )
156
+ }
157
+
158
+ /**
159
+ * The header component for the DatePicker table.
160
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
161
+ * @example
162
+ * ```tsx
163
+ * <DatePickerTableHeader />
164
+ * ```
165
+ */
166
+ export function DatePickerTableHeader(props: DatePickerTableHeaderProps) {
167
+ return (
168
+ <ArkDP.TableHeader
169
+ {...props}
170
+ className={cx(props.className, datePickerStyles.tableHeader)}
171
+ />
172
+ )
173
+ }
174
+
175
+ /**
176
+ * The cell component for the DatePicker table.
177
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
178
+ * @example
179
+ * ```tsx
180
+ * <DatePickerTableCell />
181
+ * ```
182
+ */
183
+ export function DatePickerTableCell(props: DatePickerTableCellProps) {
184
+ return (
185
+ <ArkDP.TableCell
186
+ {...props}
187
+ className={cx(props.className, datePickerStyles.tableCell)}
188
+ />
189
+ )
190
+ }
191
+
192
+ /**
193
+ * The cell component for the DatePicker table.
194
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
195
+ * @example
196
+ * ```tsx
197
+ * <DatePickerTableCell />
198
+ * ```
199
+ */
200
+ export function DatePickerTableCellTrigger(
201
+ props: DatePickerTableCellTriggerProps,
202
+ ) {
203
+ return (
204
+ <ArkDP.TableCellTrigger
205
+ {...props}
206
+ className={cx(props.className, datePickerStyles.tableCellTrigger)}
207
+ />
208
+ )
209
+ }
210
+
211
+ /**
212
+ * The view container which wraps the control and content components.
213
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
214
+ * @example
215
+ * ```tsx
216
+ * <DatePickerView />
217
+ * ```
218
+ */
219
+ export const DatePickerView = ArkDP.View
220
+
221
+ /**
222
+ * The context component for the DatePicker which provides the DatePicker state.
223
+ * @definition [datePicker docs](https://cerberus.digitalu.design/react/date-picker)
224
+ * @example
225
+ * ```tsx
226
+ * <DatePickerContext />
227
+ * ```
228
+ */
229
+ export const DatePickerContext = ArkDP.Context
@@ -1,7 +1,10 @@
1
1
  import {
2
+ Calendar,
2
3
  Checkmark,
3
4
  CheckmarkOutline,
4
5
  ChevronDown,
6
+ ChevronLeft,
7
+ ChevronRight,
5
8
  Close,
6
9
  CloudUpload,
7
10
  Information,
@@ -21,6 +24,9 @@ export type IconType = CarbonIconType | ElementType
21
24
 
22
25
  export interface DefinedIcons {
23
26
  avatar?: IconType
27
+ calendar?: IconType
28
+ calendarPrev?: IconType
29
+ calendarNext?: IconType
24
30
  checkbox?: IconType
25
31
  close?: IconType
26
32
  confirmModal?: IconType
@@ -42,6 +48,9 @@ export interface DefinedIcons {
42
48
 
43
49
  export const defaultIcons: DefinedIcons = {
44
50
  avatar: UserFilled,
51
+ calendar: Calendar,
52
+ calendarPrev: ChevronLeft,
53
+ calendarNext: ChevronRight,
45
54
  checkbox: CheckmarkIcon,
46
55
  close: Close,
47
56
  confirmModal: Information,
@@ -129,6 +129,18 @@ export function formatMilitaryDate(input: string): string {
129
129
  return [day, month, year].filter(Boolean).join(' ')
130
130
  }
131
131
 
132
+ /**
133
+ * Formats a date string to US Military format.
134
+ * @param date The date string to format (i.e., '2024-01-01')
135
+ * @returns The formatted date string in US Military format (DD MMM YYYY)
136
+ */
137
+ export function formatISOToMilitary(date: string): string {
138
+ const [year, month, day] = date.split('-')
139
+ const monthIndex = parseInt(month, 10) - 1
140
+ const monthStr = MONTHS[monthIndex]
141
+ return `${day} ${monthStr} ${year}`
142
+ }
143
+
132
144
  /**
133
145
  * Date formatting options
134
146
  * @example
package/src/index.ts CHANGED
@@ -12,6 +12,8 @@ export * from './components/Avatar'
12
12
  export * from './components/Button'
13
13
  export * from './components/Checkbox'
14
14
  export * from './components/CircularProgress'
15
+ export * from './components/DatePicker.client'
16
+ export * from './components/DatePicker.server'
15
17
  export * from './components/Droppable'
16
18
  export * from './components/FieldMessage'
17
19
  export * from './components/FeatureFlag'
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/config/cerbIcons.ts"],"sourcesContent":["import {\n Checkmark,\n CheckmarkOutline,\n ChevronDown,\n Close,\n CloudUpload,\n Information,\n Restart,\n TrashCan,\n UserFilled,\n Warning,\n WarningAlt,\n WarningFilled,\n type CarbonIconType,\n} from '@cerberus/icons'\nimport type { ElementType } from 'react'\nimport { CheckmarkIcon, IndeterminateIcon } from './icons/checkbox.icons'\nimport { AnimatingUploadIcon } from '../components/AnimatingUploadIcon'\n\nexport type IconType = CarbonIconType | ElementType\n\nexport interface DefinedIcons {\n avatar?: IconType\n checkbox?: IconType\n close?: IconType\n confirmModal?: IconType\n delete?: IconType\n promptModal?: IconType\n waitingFileUploader?: IconType\n fileUploader?: IconType\n indeterminate?: IconType\n infoNotification?: IconType\n successNotification?: IconType\n warningNotification?: IconType\n dangerNotification?: IconType\n invalid: IconType\n invalidAlt?: IconType\n redo?: IconType\n selectArrow?: IconType\n toggleChecked?: IconType\n}\n\nexport const defaultIcons: DefinedIcons = {\n avatar: UserFilled,\n checkbox: CheckmarkIcon,\n close: Close,\n confirmModal: Information,\n delete: TrashCan,\n promptModal: Information,\n waitingFileUploader: CloudUpload,\n fileUploader: AnimatingUploadIcon,\n indeterminate: IndeterminateIcon,\n infoNotification: Information,\n successNotification: CheckmarkOutline,\n warningNotification: WarningAlt,\n dangerNotification: WarningFilled,\n invalid: WarningFilled,\n invalidAlt: Warning,\n redo: Restart,\n selectArrow: ChevronDown,\n toggleChecked: Checkmark,\n}\n"],"mappings":";;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AA4BA,IAAM,eAA6B;AAAA,EACxC,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,eAAe;AACjB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/Accordion.tsx"],"sourcesContent":["import { Accordion as ArkAccordion } from '@ark-ui/react'\nimport { ChevronDown } from '@cerberus/icons'\nimport { cx } from '@cerberus/styled-system/css'\nimport {\n accordion,\n type AccordionVariantProps,\n} from '@cerberus/styled-system/recipes'\n\nexport type AccordionProps = ArkAccordion.RootProps & AccordionVariantProps\n\n/**\n * The context provider for the Accordion family.\n * @definition [ARK docs](https://ark-ui.com/react/docs/components/accordion)\n * @definition [Accordion docs](https://cerberus.digitalu.design/react/accordion)\n * @example\n * ```tsx\n * <Accordion>\n * <AccordionItemGroup heading=\"Item 1 heading\" value=\"one\">\n * This is the content\n * </AccordionItemGroup>\n * </Accordion>\n * ```\n */\nexport function Accordion(props: AccordionProps) {\n const { size, className, ...rootProps } = props\n const styles = accordion({ size })\n return (\n <ArkAccordion.Root\n collapsible\n className={cx(className, styles.root)}\n {...rootProps}\n />\n )\n}\n\ntype AccordionItemProps = ArkAccordion.ItemProps & AccordionVariantProps\n\n/**\n * The item for the Accordion component.\n * @definition [ARK docs](https://ark-ui.com/react/docs/components/accordion)\n * @definition [Accordion docs](https://cerberus.digitalu.design/react/accordion)\n * @example\n * ```tsx\n * <Accordion>\n * <AccordionItem value=\"one\">\n * <AccordionTrigger>\n * Accordion Item 1\n * <AccordionIndicator />\n * </AccordionTrigger>\n * <AccordionContent>Accordion Item 1 content</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * ```\n */\nexport function AccordionItem(props: AccordionItemProps) {\n const { size, ...itemProps } = props\n const styles = accordion({ size })\n return (\n <ArkAccordion.Item\n {...itemProps}\n className={cx(itemProps.className, styles.item)}\n />\n )\n}\n\nexport type AccordionItemTriggerProps = ArkAccordion.ItemTriggerProps &\n AccordionVariantProps\n\n/**\n * The trigger for the Accordion component.\n * @definition [ARK docs](https://ark-ui.com/react/docs/components/accordion)\n * @definition [Accordion docs](https://cerberus.digitalu.design/react/accordion)\n * @example\n * ```tsx\n * <Accordion>\n * <AccordionItem value=\"one\">\n * <AccordionTrigger>\n * Accordion Item 1\n * <AccordionIndicator />\n * </AccordionTrigger>\n * <AccordionContent>Accordion Item 1 content</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * ```\n */\nexport function AccordionItemTrigger(props: AccordionItemTriggerProps) {\n const { size, ...triggerProps } = props\n const styles = accordion({ size })\n return (\n <ArkAccordion.ItemTrigger\n {...triggerProps}\n className={cx(triggerProps.className, styles.itemTrigger)}\n />\n )\n}\n\nexport type AccordionItemIndicatorProps = ArkAccordion.ItemIndicatorProps &\n AccordionVariantProps\n\n/**\n * The indicator for the Accordion component.\n * @definition [ARK docs](https://ark-ui.com/react/docs/components/accordion)\n * @definition [Accordion docs](https://cerberus.digitalu.design/react/accordion)\n * @example\n * ```tsx\n * <Accordion>\n * <AccordionItem value=\"one\">\n * <AccordionTrigger>\n * Accordion Item 1\n * <AccordionIndicator />\n * </AccordionTrigger>\n * <AccordionContent>Accordion Item 1 content</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * ```\n * */\nexport function AccordionItemIndicator(props: AccordionItemIndicatorProps) {\n const { size, ...indicatorProps } = props\n const styles = accordion({ size })\n const iconSize = size === 'sm' ? 16 : '24'\n\n return (\n <ArkAccordion.ItemIndicator\n {...indicatorProps}\n className={cx(indicatorProps.className, styles.itemIndicator)}\n >\n <ChevronDown size={iconSize} />\n </ArkAccordion.ItemIndicator>\n )\n}\n\nexport type AccordionItemContentProps = ArkAccordion.ItemContentProps &\n AccordionVariantProps\n\n/**\n * The content for the Accordion component.\n * @definition [ARK docs](https://ark-ui.com/react/docs/components/accordion)\n * @definition [Accordion docs](https://cerberus.digitalu.design/react/accordion)\n * @example\n * ```tsx\n * <Accordion>\n * <AccordionItem value=\"one\">\n * <AccordionTrigger>\n * Accordion Item 1\n * <AccordionIndicator />\n * </AccordionTrigger>\n * <AccordionContent>Accordion Item 1 content</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n * ```\n * */\nexport function AccordionItemContent(props: AccordionItemContentProps) {\n const { size, ...contentProps } = props\n const styles = accordion({ size })\n return (\n <ArkAccordion.ItemContent\n {...contentProps}\n className={cx(contentProps.className, styles.itemContent)}\n />\n )\n}\n"],"mappings":";AAAA,SAAS,aAAa,oBAAoB;AAC1C,SAAS,mBAAmB;AAC5B,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,OAEK;AAqBH;AAJG,SAAS,UAAU,OAAuB;AAC/C,QAAM,EAAE,MAAM,WAAW,GAAG,UAAU,IAAI;AAC1C,QAAM,SAAS,UAAU,EAAE,KAAK,CAAC;AACjC,SACE;AAAA,IAAC,aAAa;AAAA,IAAb;AAAA,MACC,aAAW;AAAA,MACX,WAAW,GAAG,WAAW,OAAO,IAAI;AAAA,MACnC,GAAG;AAAA;AAAA,EACN;AAEJ;AAqBO,SAAS,cAAc,OAA2B;AACvD,QAAM,EAAE,MAAM,GAAG,UAAU,IAAI;AAC/B,QAAM,SAAS,UAAU,EAAE,KAAK,CAAC;AACjC,SACE;AAAA,IAAC,aAAa;AAAA,IAAb;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,GAAG,UAAU,WAAW,OAAO,IAAI;AAAA;AAAA,EAChD;AAEJ;AAsBO,SAAS,qBAAqB,OAAkC;AACrE,QAAM,EAAE,MAAM,GAAG,aAAa,IAAI;AAClC,QAAM,SAAS,UAAU,EAAE,KAAK,CAAC;AACjC,SACE;AAAA,IAAC,aAAa;AAAA,IAAb;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,GAAG,aAAa,WAAW,OAAO,WAAW;AAAA;AAAA,EAC1D;AAEJ;AAsBO,SAAS,uBAAuB,OAAoC;AACzE,QAAM,EAAE,MAAM,GAAG,eAAe,IAAI;AACpC,QAAM,SAAS,UAAU,EAAE,KAAK,CAAC;AACjC,QAAM,WAAW,SAAS,OAAO,KAAK;AAEtC,SACE;AAAA,IAAC,aAAa;AAAA,IAAb;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,GAAG,eAAe,WAAW,OAAO,aAAa;AAAA,MAE5D,8BAAC,eAAY,MAAM,UAAU;AAAA;AAAA,EAC/B;AAEJ;AAsBO,SAAS,qBAAqB,OAAkC;AACrE,QAAM,EAAE,MAAM,GAAG,aAAa,IAAI;AAClC,QAAM,SAAS,UAAU,EAAE,KAAK,CAAC;AACjC,SACE;AAAA,IAAC,aAAa;AAAA,IAAb;AAAA,MACE,GAAG;AAAA,MACJ,WAAW,GAAG,aAAa,WAAW,OAAO,WAAW;AAAA;AAAA,EAC1D;AAEJ;","names":[]}