@coreui/react-pro 4.2.0-beta.0 → 4.2.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 (163) hide show
  1. package/README.md +1 -1
  2. package/dist/components/accordion/index.d.ts +7 -0
  3. package/dist/components/alert/index.d.ts +4 -0
  4. package/dist/components/avatar/index.d.ts +2 -0
  5. package/dist/components/backdrop/index.d.ts +2 -0
  6. package/dist/components/badge/index.d.ts +2 -0
  7. package/dist/components/breadcrumb/index.d.ts +3 -0
  8. package/dist/components/button/index.d.ts +2 -0
  9. package/dist/components/button-group/index.d.ts +3 -0
  10. package/dist/components/calendar/CCalendar.d.ts +36 -12
  11. package/dist/components/callout/index.d.ts +2 -0
  12. package/dist/components/card/index.d.ts +12 -0
  13. package/dist/components/carousel/index.d.ts +4 -0
  14. package/dist/components/close-button/index.d.ts +2 -0
  15. package/dist/components/collapse/index.d.ts +2 -0
  16. package/dist/components/date-picker/CDatePicker.d.ts +13 -0
  17. package/dist/components/date-picker/index.d.ts +2 -0
  18. package/dist/components/date-range-picker/CDateRangePicker.d.ts +93 -0
  19. package/dist/components/date-range-picker/index.d.ts +2 -0
  20. package/dist/components/datepicker/index.d.ts +2 -0
  21. package/dist/components/daterangepicker/CDateRangePicker.d.ts +26 -11
  22. package/dist/components/daterangepicker/index.d.ts +2 -0
  23. package/dist/components/dropdown/index.d.ts +8 -0
  24. package/dist/components/footer/index.d.ts +2 -0
  25. package/dist/components/form/CForm.d.ts +2 -2
  26. package/dist/components/form/CFormCheck.d.ts +2 -1
  27. package/dist/components/form/CFormControlValidation.d.ts +46 -0
  28. package/dist/components/form/CFormControlWrapper.d.ts +31 -0
  29. package/dist/components/form/CFormInput.d.ts +6 -9
  30. package/dist/components/form/CFormRange.d.ts +7 -1
  31. package/dist/components/form/CFormSelect.d.ts +3 -10
  32. package/dist/components/form/CFormTextarea.d.ts +2 -9
  33. package/dist/components/form/index.d.ts +14 -0
  34. package/dist/components/grid/index.d.ts +4 -0
  35. package/dist/components/header/index.d.ts +7 -0
  36. package/dist/components/image/index.d.ts +2 -0
  37. package/dist/components/index.d.ts +41 -0
  38. package/dist/components/link/index.d.ts +2 -0
  39. package/dist/components/list-group/index.d.ts +3 -0
  40. package/dist/components/loading-button/index.d.ts +2 -0
  41. package/dist/components/modal/CModal.d.ts +3 -0
  42. package/dist/components/modal/index.d.ts +8 -0
  43. package/dist/components/multi-select/index.d.ts +2 -0
  44. package/dist/components/nav/index.d.ts +7 -0
  45. package/dist/components/navbar/index.d.ts +6 -0
  46. package/dist/components/offcanvas/index.d.ts +5 -0
  47. package/dist/components/pagination/index.d.ts +4 -0
  48. package/dist/components/picker/CPicker.d.ts +52 -7
  49. package/dist/components/placeholder/index.d.ts +2 -0
  50. package/dist/components/popover/CPopover.d.ts +2 -2
  51. package/dist/components/popover/index.d.ts +2 -0
  52. package/dist/components/progress/index.d.ts +3 -0
  53. package/dist/components/sidebar/index.d.ts +7 -0
  54. package/dist/components/smart-table/index.d.ts +2 -0
  55. package/dist/components/spinner/index.d.ts +2 -0
  56. package/dist/components/table/index.d.ts +9 -0
  57. package/dist/components/tabs/index.d.ts +3 -0
  58. package/dist/components/time-picker/CTimePicker.d.ts +45 -0
  59. package/dist/components/time-picker/CTimePickerRollCol.d.ts +11 -0
  60. package/dist/components/time-picker/index.d.ts +2 -0
  61. package/dist/components/timepicker/CTimePicker.d.ts +9 -13
  62. package/dist/components/timepicker/index.d.ts +2 -0
  63. package/dist/components/toast/index.d.ts +6 -0
  64. package/dist/components/tooltip/CTooltip.d.ts +6 -2
  65. package/dist/components/tooltip/index.d.ts +2 -0
  66. package/dist/index.d.ts +0 -128
  67. package/dist/index.es.js +8368 -5764
  68. package/dist/index.es.js.map +1 -1
  69. package/dist/index.js +8367 -5764
  70. package/dist/index.js.map +1 -1
  71. package/dist/{components/calendar/CCalendar.utils.d.ts → utils/calendar.d.ts} +5 -2
  72. package/dist/utils/hooks/useStateWithCallback.d.ts +2 -1
  73. package/dist/utils/time.d.ts +21 -0
  74. package/package.json +14 -11
  75. package/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.tsx.snap +2 -0
  76. package/src/components/accordion/__tests__/__snapshots__/CAccordionHeader.spec.tsx.snap +2 -0
  77. package/src/components/accordion/index.ts +15 -0
  78. package/src/components/alert/CAlert.tsx +14 -3
  79. package/src/components/alert/index.ts +5 -0
  80. package/src/components/avatar/index.ts +3 -0
  81. package/src/components/backdrop/CBackdrop.tsx +10 -3
  82. package/src/components/backdrop/index.ts +3 -0
  83. package/src/components/badge/index.ts +3 -0
  84. package/src/components/breadcrumb/index.ts +4 -0
  85. package/src/components/button/index.ts +3 -0
  86. package/src/components/button-group/index.ts +4 -0
  87. package/src/components/calendar/CCalendar.tsx +221 -131
  88. package/src/components/calendar/__tests__/CCalendar.spec.tsx +9 -0
  89. package/src/components/calendar/__tests__/__snapshots__/CCalendar.spec.tsx.snap +573 -0
  90. package/src/components/callout/index.ts +3 -0
  91. package/src/components/card/index.ts +25 -0
  92. package/src/components/carousel/index.ts +5 -0
  93. package/src/components/close-button/index.ts +3 -0
  94. package/src/components/collapse/CCollapse.tsx +1 -0
  95. package/src/components/collapse/index.ts +3 -0
  96. package/src/components/{datepicker → date-picker}/CDatePicker.tsx +3 -2
  97. package/src/components/date-picker/__tests__/CDatePicker.spec.tsx +9 -0
  98. package/src/components/date-picker/__tests__/__snapshots__/CDatePicker.spec.tsx.snap +617 -0
  99. package/src/components/date-picker/index.ts +3 -0
  100. package/src/components/date-range-picker/CDateRangePicker.tsx +495 -0
  101. package/src/components/date-range-picker/__tests__/CDateRangePicker.spec.tsx +9 -0
  102. package/src/components/date-range-picker/__tests__/__snapshots__/CDateRangePicker.spec.tsx.snap +1201 -0
  103. package/src/components/date-range-picker/index.ts +3 -0
  104. package/src/components/dropdown/CDropdownItem.tsx +1 -1
  105. package/src/components/dropdown/CDropdownMenu.tsx +14 -14
  106. package/src/components/dropdown/index.ts +17 -0
  107. package/src/components/footer/index.ts +3 -0
  108. package/src/components/form/CForm.tsx +2 -2
  109. package/src/components/form/CFormCheck.tsx +32 -7
  110. package/src/components/form/CFormControlValidation.tsx +97 -0
  111. package/src/components/form/CFormControlWrapper.tsx +85 -0
  112. package/src/components/form/CFormInput.tsx +75 -19
  113. package/src/components/form/CFormRange.tsx +18 -4
  114. package/src/components/form/CFormSelect.tsx +60 -32
  115. package/src/components/form/CFormTextarea.tsx +45 -17
  116. package/src/components/form/index.ts +29 -0
  117. package/src/components/grid/index.ts +5 -0
  118. package/src/components/header/index.ts +8 -0
  119. package/src/components/image/index.ts +3 -0
  120. package/src/components/index.ts +41 -0
  121. package/src/components/link/index.ts +3 -0
  122. package/src/components/list-group/index.ts +4 -0
  123. package/src/components/loading-button/index.ts +3 -0
  124. package/src/components/modal/CModal.tsx +3 -2
  125. package/src/components/modal/index.ts +9 -0
  126. package/src/components/multi-select/CMultiSelect.tsx +46 -38
  127. package/src/components/multi-select/index.ts +3 -0
  128. package/src/components/nav/CNavGroup.tsx +1 -0
  129. package/src/components/nav/index.ts +8 -0
  130. package/src/components/navbar/index.ts +7 -0
  131. package/src/components/offcanvas/COffcanvas.tsx +1 -0
  132. package/src/components/offcanvas/index.ts +6 -0
  133. package/src/components/pagination/index.ts +5 -0
  134. package/src/components/picker/CPicker.tsx +104 -32
  135. package/src/components/picker/__tests__/CPicker.spec.tsx +9 -0
  136. package/src/components/picker/__tests__/__snapshots__/CPicker.spec.tsx.snap +23 -0
  137. package/src/components/placeholder/index.ts +3 -0
  138. package/src/components/popover/CPopover.tsx +59 -57
  139. package/src/components/popover/index.ts +3 -0
  140. package/src/components/progress/index.ts +4 -0
  141. package/src/components/sidebar/index.ts +8 -0
  142. package/src/components/smart-table/CSmartTable.tsx +2 -2
  143. package/src/components/smart-table/index.ts +3 -0
  144. package/src/components/spinner/index.ts +3 -0
  145. package/src/components/table/index.ts +19 -0
  146. package/src/components/tabs/CTabPane.tsx +7 -3
  147. package/src/components/tabs/index.ts +4 -0
  148. package/src/components/{timepicker → time-picker}/CTimePicker.tsx +71 -98
  149. package/src/components/{timepicker → time-picker}/CTimePickerRollCol.tsx +7 -1
  150. package/src/components/time-picker/__tests__/CTimePicker.spec.tsx +9 -0
  151. package/src/components/time-picker/index.ts +3 -0
  152. package/src/components/toast/CToast.tsx +6 -1
  153. package/src/components/toast/index.ts +7 -0
  154. package/src/components/tooltip/CTooltip.tsx +63 -45
  155. package/src/components/tooltip/index.ts +3 -0
  156. package/src/index.ts +0 -258
  157. package/src/{components/calendar/CCalendar.utils.ts → utils/calendar.ts} +97 -10
  158. package/src/utils/hooks/useStateWithCallback.ts +6 -3
  159. package/src/utils/time.ts +84 -0
  160. package/dist/components/dropdown/CDropdownToggleCustom.d.ts +0 -15
  161. package/dist/components/timepicker/CTimePicker.utils.d.ts +0 -4
  162. package/src/components/daterangepicker/CDateRangePicker.tsx +0 -366
  163. package/src/components/timepicker/CTimePicker.utils.ts +0 -27
@@ -1,366 +0,0 @@
1
- import React, { forwardRef, ReactNode, useEffect, useRef, useState } from 'react'
2
- import PropTypes from 'prop-types'
3
- import classNames from 'classnames'
4
- import { isMobile } from 'react-device-detect'
5
-
6
- import { CCalendar, CCalendarProps } from '../calendar/CCalendar'
7
- import { CPicker, CPickerProps } from './../picker/CPicker'
8
- import { CTimePicker } from './../timepicker/CTimePicker'
9
- import { convertToLocalDate } from '../calendar/CCalendar.utils'
10
- import { CButton } from '../button/CButton'
11
- import { CFormInput } from '../form/CFormInput'
12
- import { CInputGroup } from '../form/CInputGroup'
13
- import { CInputGroupText } from '../form/CInputGroupText'
14
-
15
- export interface CDateRangePickerProps
16
- extends Omit<CPickerProps, 'autoClose' | 'component' | 'dark' | 'placeholder' | 'variant'>,
17
- Omit<CCalendarProps, 'onCalendarCellHover' | 'onCalendarDateChange'> {
18
- /**
19
- * The number of calendars that render on desktop devices.
20
- */
21
- calendars?: number
22
- /**
23
- * Enables selection cleaner element.
24
- */
25
- cleaner?: boolean
26
- /**
27
- * Cleaner icon.
28
- */
29
- cleanerIcon?: ReactNode | boolean
30
- /**
31
- * Default input icon.
32
- */
33
- defaultIcon?: ReactNode | boolean
34
- /**
35
- * Default icon between date input fields.
36
- */
37
- infixIcon?: ReactNode | boolean
38
- /**
39
- * Toggle the readonly state for the component.
40
- */
41
- inputReadOnly?: boolean
42
- /**
43
- * Specifies short hints that are visible in start date and end date inputs.
44
- */
45
- placeholder?: string | string[]
46
- /**
47
- * @ignore
48
- */
49
- range?: boolean
50
- /**
51
- * Predefined date ranges the user can select from.
52
- */
53
- ranges?: object
54
- /**
55
- * Size the component small or large.
56
- */
57
- size?: 'sm' | 'lg'
58
- /**
59
- * Provide an additional time selection by adding select boxes to choose times.
60
- */
61
- timepicker?: boolean
62
- }
63
-
64
- export const CDateRangePicker = forwardRef<HTMLDivElement | HTMLLIElement, CDateRangePickerProps>(
65
- (
66
- {
67
- calendars = 2,
68
- className,
69
- cleaner = true,
70
- cleanerIcon,
71
- calendarDate,
72
- disabled,
73
- disabledDates,
74
- endDate,
75
- defaultIcon,
76
- infixIcon,
77
- inputReadOnly,
78
- locale = typeof navigator === 'undefined' ? 'en-US' : navigator.language,
79
- maxDate,
80
- minDate,
81
- onEndDateChange,
82
- onHide,
83
- onStartDateChange,
84
- onShow,
85
- placeholder = ['Start date', 'End date'],
86
- range = true,
87
- ranges,
88
- size,
89
- startDate,
90
- timepicker,
91
- toggler,
92
- visible,
93
- ...rest
94
- },
95
- ref,
96
- ) => {
97
- const inputStartRef = useRef<HTMLInputElement>(null)
98
- const inputEndRef = useRef<HTMLInputElement>(null)
99
- const [_visible, setVisible] = useState(visible)
100
- const [_startDate, setStartDate] = useState<Date | null>(startDate ? new Date(startDate) : null)
101
- const [_endDate, setEndDate] = useState<Date | null>(endDate ? new Date(endDate) : null)
102
- const [inputHoverValue, setInputHoverValue] = useState<Date | null>(null)
103
- const [inputToHoverValue, setInputToHoverValue] = useState<Date | null>(null)
104
- const [selectEndDate, setSelectEndDate] = useState(false)
105
- const [_calendarDate, setCalendarDate] = useState<Date>(
106
- calendarDate ? new Date(calendarDate) : new Date(),
107
- )
108
-
109
- useEffect(() => {
110
- startDate && setCalendarDate(new Date(startDate))
111
- }, [startDate])
112
-
113
- useEffect(() => {
114
- endDate && setCalendarDate(new Date(endDate))
115
- }, [endDate])
116
-
117
- useEffect(() => {
118
- _visible && onShow && onShow()
119
- !_visible && onHide && onHide()
120
- }, [_visible])
121
-
122
- useEffect(() => {
123
- if (inputStartRef.current) {
124
- if (inputHoverValue) {
125
- inputStartRef.current.value = convertToLocalDate(inputHoverValue, locale)
126
- return
127
- }
128
- if (_startDate) {
129
- inputStartRef.current.value = timepicker
130
- ? _startDate.toLocaleString(locale)
131
- : _startDate.toLocaleDateString(locale)
132
- return
133
- }
134
- inputStartRef.current.value = ''
135
- }
136
- }, [inputHoverValue, _startDate])
137
-
138
- useEffect(() => {
139
- if (inputEndRef.current) {
140
- if (inputToHoverValue) {
141
- inputEndRef.current.value = convertToLocalDate(inputToHoverValue, locale)
142
- return
143
- }
144
- if (_endDate) {
145
- inputEndRef.current.value = timepicker
146
- ? _endDate.toLocaleString(locale)
147
- : _endDate.toLocaleDateString(locale)
148
- return
149
- }
150
- inputEndRef.current.value = ''
151
- }
152
- }, [inputToHoverValue, _endDate])
153
-
154
- const handleCalendarDateChange = (date: Date, difference?: number) => {
155
- difference
156
- ? setCalendarDate(new Date(date.getFullYear(), date.getMonth() - difference, 1))
157
- : setCalendarDate(date)
158
- }
159
-
160
- const handleStartDateChange = (date: Date | null) => {
161
- setStartDate(date)
162
- range && setSelectEndDate(true)
163
- onStartDateChange && onStartDateChange(date)
164
- setInputHoverValue(null)
165
- }
166
-
167
- const handleEndDateChange = (date: Date | null) => {
168
- setEndDate(date)
169
- setSelectEndDate(false)
170
- onEndDateChange && onEndDateChange(date)
171
- setInputToHoverValue(null)
172
-
173
- if (timepicker !== true) {
174
- _startDate !== null && setVisible(false)
175
- }
176
- }
177
-
178
- const handleCalendarCellHover = (date: Date | null) => {
179
- selectEndDate ? setInputToHoverValue(date) : setInputHoverValue(date)
180
- }
181
-
182
- const handleClear = (event: React.MouseEvent<HTMLElement>) => {
183
- event.stopPropagation()
184
- setStartDate(null)
185
- setEndDate(null)
186
- setInputHoverValue(null)
187
- setInputToHoverValue(null)
188
- }
189
-
190
- const _className = classNames('date-picker', className)
191
-
192
- const InputGroup = () => (
193
- <CInputGroup className="picker-input-group" size={size}>
194
- <CFormInput
195
- className={classNames({
196
- hover: inputHoverValue,
197
- })}
198
- disabled={disabled}
199
- placeholder={Array.isArray(placeholder) ? placeholder[0] : placeholder}
200
- readOnly={inputReadOnly}
201
- onClick={() => setSelectEndDate(false)}
202
- ref={inputStartRef}
203
- />
204
- {range && infixIcon !== false && (
205
- <CInputGroupText>
206
- {infixIcon ? (
207
- infixIcon
208
- ) : (
209
- <span className="picker-input-group-icon date-picker-arrow-icon" />
210
- )}
211
- </CInputGroupText>
212
- )}
213
- {range && (
214
- <CFormInput
215
- className={classNames({
216
- hover: inputToHoverValue,
217
- })}
218
- disabled={disabled}
219
- placeholder={placeholder[1]}
220
- readOnly={inputReadOnly}
221
- onClick={() => setSelectEndDate(true)}
222
- ref={inputEndRef}
223
- />
224
- )}
225
- {(defaultIcon !== false || cleaner) && (
226
- <CInputGroupText>
227
- {defaultIcon !== false && (
228
- <span className="picker-input-group-indicator">
229
- {defaultIcon ? (
230
- defaultIcon
231
- ) : (
232
- <span className="picker-input-group-icon date-picker-input-icon" />
233
- )}
234
- </span>
235
- )}
236
- {cleaner && _startDate && (
237
- <span
238
- className="picker-input-group-cleaner"
239
- role="button"
240
- onClick={(event) => handleClear(event)}
241
- >
242
- {cleanerIcon ? (
243
- cleanerIcon
244
- ) : (
245
- <span className="picker-input-group-icon date-picker-cleaner-icon" />
246
- )}
247
- </span>
248
- )}
249
- </CInputGroupText>
250
- )}
251
- </CInputGroup>
252
- )
253
-
254
- return (
255
- <CPicker
256
- className={_className}
257
- disabled={disabled}
258
- footer={timepicker}
259
- toggler={toggler ? toggler : InputGroup()}
260
- onCancelClick={() => {
261
- handleStartDateChange(startDate ? new Date(startDate) : null)
262
- handleEndDateChange(endDate ? new Date(endDate) : null)
263
- }}
264
- visible={_visible}
265
- {...rest}
266
- ref={ref}
267
- >
268
- <div className="date-picker-body">
269
- {ranges && (
270
- <div className="date-picker-ranges">
271
- {Object.keys(ranges).map((key: string, index: number) => (
272
- <CButton
273
- color="secondary"
274
- key={index}
275
- onClick={() => {
276
- setStartDate(ranges[key][0])
277
- setEndDate(ranges[key][1])
278
- }}
279
- variant="ghost"
280
- >
281
- {key}
282
- </CButton>
283
- ))}
284
- </div>
285
- )}
286
- <div className="date-picker-calendars">
287
- {[...Array(isMobile ? 1 : calendars)].map((_, index) => (
288
- <div className="date-picker-calendar" key={index}>
289
- <CCalendar
290
- calendarDate={
291
- new Date(_calendarDate.getFullYear(), _calendarDate.getMonth() + index, 1)
292
- }
293
- disabledDates={disabledDates}
294
- endDate={_endDate}
295
- locale={locale}
296
- maxDate={maxDate}
297
- minDate={minDate}
298
- range={range}
299
- selectEndDate={selectEndDate}
300
- startDate={_startDate}
301
- onCalendarCellHover={(date) => handleCalendarCellHover(date)}
302
- onCalendarDateChange={(date) => handleCalendarDateChange(date, index)}
303
- onStartDateChange={(date) => handleStartDateChange(date)}
304
- onEndDateChange={(date) => handleEndDateChange(date)}
305
- />
306
- {!isMobile && timepicker && (index === 0 || calendars - index === 1) && (
307
- <CTimePicker
308
- container="inline"
309
- disabled={
310
- index === 0
311
- ? _startDate === null
312
- ? true
313
- : false
314
- : _endDate === null
315
- ? true
316
- : false
317
- }
318
- locale={locale}
319
- onChange={(_, __, date) =>
320
- index === 0 ? handleStartDateChange(date) : handleEndDateChange(date)
321
- }
322
- value={index === 0 ? _startDate : _endDate}
323
- variant="select"
324
- />
325
- )}
326
- {isMobile && timepicker && (
327
- <>
328
- <CTimePicker
329
- container="inline"
330
- disabled={_startDate === null ? true : false}
331
- locale={locale}
332
- onChange={(_, __, date) => handleStartDateChange(date)}
333
- value={_startDate}
334
- variant="select"
335
- />
336
- <CTimePicker
337
- container="inline"
338
- disabled={_endDate === null ? true : false}
339
- locale={locale}
340
- onChange={(_, __, date) => handleEndDateChange(date)}
341
- value={_endDate}
342
- variant="select"
343
- />
344
- </>
345
- )}
346
- </div>
347
- ))}
348
- </div>
349
- </div>
350
- </CPicker>
351
- )
352
- },
353
- )
354
-
355
- CDateRangePicker.displayName = 'CDateRangePicker'
356
-
357
- CDateRangePicker.propTypes = {
358
- ...CCalendar.propTypes,
359
- ...CPicker.propTypes,
360
- calendars: PropTypes.number,
361
- inputReadOnly: PropTypes.bool,
362
- placeholder: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.any)]),
363
- range: PropTypes.bool,
364
- ranges: PropTypes.object,
365
- timepicker: PropTypes.bool,
366
- }
@@ -1,27 +0,0 @@
1
- export const convert12hTo24h = (abbr: 'am' | 'pm', hour: number) => {
2
- if (abbr === 'am' && hour === 12) {
3
- return 0
4
- }
5
- if (abbr === 'am') {
6
- return hour
7
- }
8
- if (abbr === 'pm' && hour === 12) {
9
- return 12
10
- }
11
- return hour + 12
12
- }
13
-
14
- export const convert24hTo12h = (hour: number) => hour % 12 || 12
15
-
16
- export const getAmPm = (date: Date, locale: string) => {
17
- if (date.toLocaleTimeString(locale).includes('AM')) {
18
- return 'am'
19
- }
20
- if (date.toLocaleTimeString(locale).includes('PM')) {
21
- return 'pm'
22
- }
23
- return date.getHours() >= 12 ? 'pm' : 'am'
24
- }
25
-
26
- export const isAmPm = (locale: string) =>
27
- ['am', 'AM', 'pm', 'PM'].some((el) => new Date().toLocaleString(locale).includes(el))