@coreui/react-pro 4.1.4 → 4.2.0-rc.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 (162) hide show
  1. package/README.md +1 -1
  2. package/dist/components/Types.d.ts +1 -1
  3. package/dist/components/accordion/index.d.ts +7 -0
  4. package/dist/components/alert/index.d.ts +4 -0
  5. package/dist/components/avatar/index.d.ts +2 -0
  6. package/dist/components/backdrop/index.d.ts +2 -0
  7. package/dist/components/badge/index.d.ts +2 -0
  8. package/dist/components/breadcrumb/index.d.ts +3 -0
  9. package/dist/components/button/index.d.ts +2 -0
  10. package/dist/components/button-group/index.d.ts +3 -0
  11. package/dist/components/calendar/CCalendar.d.ts +113 -0
  12. package/dist/components/callout/index.d.ts +2 -0
  13. package/dist/components/card/index.d.ts +12 -0
  14. package/dist/components/carousel/index.d.ts +4 -0
  15. package/dist/components/close-button/index.d.ts +2 -0
  16. package/dist/components/collapse/index.d.ts +2 -0
  17. package/dist/components/datepicker/CDatePicker.d.ts +13 -0
  18. package/dist/components/datepicker/index.d.ts +2 -0
  19. package/dist/components/daterangepicker/CDateRangePicker.d.ts +65 -0
  20. package/dist/components/daterangepicker/index.d.ts +2 -0
  21. package/dist/components/dropdown/CDropdown.d.ts +10 -1
  22. package/dist/components/dropdown/CDropdownToggle.d.ts +4 -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 +2 -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 +78 -0
  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/timepicker/CTimePicker.d.ts +45 -0
  59. package/dist/components/timepicker/CTimePickerRollCol.d.ts +11 -0
  60. package/dist/components/timepicker/index.d.ts +2 -0
  61. package/dist/components/toast/index.d.ts +6 -0
  62. package/dist/components/tooltip/CTooltip.d.ts +2 -2
  63. package/dist/components/tooltip/index.d.ts +2 -0
  64. package/dist/index.d.ts +0 -125
  65. package/dist/index.es.js +3268 -1339
  66. package/dist/index.es.js.map +1 -1
  67. package/dist/index.js +3513 -1582
  68. package/dist/index.js.map +1 -1
  69. package/dist/utils/calendar.d.ts +23 -0
  70. package/dist/utils/hooks/useStateWithCallback.d.ts +2 -1
  71. package/dist/utils/time.d.ts +21 -0
  72. package/package.json +12 -11
  73. package/src/components/Types.tsx +2 -2
  74. package/src/components/accordion/CAccordionButton.tsx +2 -1
  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 +559 -0
  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/CDatePicker.tsx +50 -0
  97. package/src/components/datepicker/__tests__/CDatePicker.spec.tsx +9 -0
  98. package/src/components/datepicker/__tests__/__snapshots__/CDatePicker.spec.tsx.snap +617 -0
  99. package/src/components/datepicker/index.ts +3 -0
  100. package/src/components/daterangepicker/CDateRangePicker.tsx +432 -0
  101. package/src/components/daterangepicker/__tests__/CDateRangePicker.spec.tsx +9 -0
  102. package/src/components/daterangepicker/__tests__/__snapshots__/CDateRangePicker.spec.tsx.snap +1201 -0
  103. package/src/components/daterangepicker/index.ts +3 -0
  104. package/src/components/dropdown/CDropdown.tsx +19 -24
  105. package/src/components/dropdown/CDropdownItem.tsx +1 -1
  106. package/src/components/dropdown/CDropdownMenu.tsx +55 -3
  107. package/src/components/dropdown/CDropdownToggle.tsx +28 -5
  108. package/src/components/dropdown/index.ts +17 -0
  109. package/src/components/footer/index.ts +3 -0
  110. package/src/components/form/CForm.tsx +2 -2
  111. package/src/components/form/CFormCheck.tsx +32 -7
  112. package/src/components/form/CFormControlValidation.tsx +97 -0
  113. package/src/components/form/CFormControlWrapper.tsx +85 -0
  114. package/src/components/form/CFormInput.tsx +47 -18
  115. package/src/components/form/CFormRange.tsx +18 -4
  116. package/src/components/form/CFormSelect.tsx +60 -32
  117. package/src/components/form/CFormTextarea.tsx +45 -17
  118. package/src/components/form/index.ts +29 -0
  119. package/src/components/grid/index.ts +5 -0
  120. package/src/components/header/index.ts +8 -0
  121. package/src/components/image/index.ts +3 -0
  122. package/src/components/index.ts +41 -0
  123. package/src/components/link/index.ts +3 -0
  124. package/src/components/list-group/index.ts +4 -0
  125. package/src/components/loading-button/index.ts +3 -0
  126. package/src/components/modal/CModal.tsx +3 -2
  127. package/src/components/modal/index.ts +9 -0
  128. package/src/components/multi-select/CMultiSelect.tsx +45 -38
  129. package/src/components/multi-select/index.ts +3 -0
  130. package/src/components/nav/CNavGroup.tsx +1 -0
  131. package/src/components/nav/index.ts +8 -0
  132. package/src/components/navbar/index.ts +7 -0
  133. package/src/components/offcanvas/COffcanvas.tsx +1 -0
  134. package/src/components/offcanvas/index.ts +6 -0
  135. package/src/components/pagination/index.ts +5 -0
  136. package/src/components/picker/CPicker.tsx +207 -0
  137. package/src/components/picker/__tests__/CPicker.spec.tsx +9 -0
  138. package/src/components/picker/__tests__/__snapshots__/CPicker.spec.tsx.snap +23 -0
  139. package/src/components/placeholder/index.ts +3 -0
  140. package/src/components/popover/CPopover.tsx +78 -70
  141. package/src/components/popover/index.ts +3 -0
  142. package/src/components/progress/index.ts +4 -0
  143. package/src/components/sidebar/index.ts +8 -0
  144. package/src/components/smart-table/index.ts +3 -0
  145. package/src/components/spinner/index.ts +3 -0
  146. package/src/components/table/index.ts +19 -0
  147. package/src/components/tabs/CTabPane.tsx +7 -3
  148. package/src/components/tabs/index.ts +4 -0
  149. package/src/components/timepicker/CTimePicker.tsx +313 -0
  150. package/src/components/timepicker/CTimePickerRollCol.tsx +63 -0
  151. package/src/components/timepicker/__tests__/CTimePicker.spec.tsx +9 -0
  152. package/src/components/timepicker/index.ts +3 -0
  153. package/src/components/toast/CToast.tsx +6 -1
  154. package/src/components/toast/index.ts +7 -0
  155. package/src/components/tooltip/CTooltip.tsx +68 -60
  156. package/src/components/tooltip/index.ts +3 -0
  157. package/src/index.ts +0 -252
  158. package/src/utils/calendar.ts +270 -0
  159. package/src/utils/hooks/useStateWithCallback.ts +6 -3
  160. package/src/utils/time.ts +84 -0
  161. package/dist/components/dropdown/CDropdownToggleCustom.d.ts +0 -15
  162. package/src/components/dropdown/CDropdownToggleCustom.tsx +0 -81
package/src/index.ts CHANGED
@@ -1,253 +1 @@
1
- import { CAccordion } from './components/accordion/CAccordion'
2
- import { CAccordionBody } from './components/accordion/CAccordionBody'
3
- import { CAccordionButton } from './components/accordion/CAccordionButton'
4
- import { CAccordionCollapse } from './components/accordion/CAccordionCollapse'
5
- import { CAccordionHeader } from './components/accordion/CAccordionHeader'
6
- import { CAccordionItem } from './components/accordion/CAccordionItem'
7
- import { CAlert } from './components/alert/CAlert'
8
- import { CAlertHeading } from './components/alert/CAlertHeading'
9
- import { CAlertLink } from './components/alert/CAlertLink'
10
- import { CAvatar } from './components/avatar/CAvatar'
11
- import { CBadge } from './components/badge/CBadge'
12
- import { CBackdrop } from './components/backdrop/CBackdrop'
13
- import { CBreadcrumb } from './components/breadcrumb/CBreadcrumb'
14
- import { CBreadcrumbItem } from './components/breadcrumb/CBreadcrumbItem'
15
- import { CButton } from './components/button/CButton'
16
- import { CButtonGroup } from './components/button-group/CButtonGroup'
17
- import { CButtonToolbar } from './components/button-group/CButtonToolbar'
18
- import { CCallout } from './components/callout/CCallout'
19
- import { CCard } from './components/card/CCard'
20
- import { CCardBody } from './components/card/CCardBody'
21
- import { CCardFooter } from './components/card/CCardFooter'
22
- import { CCardGroup } from './components/card/CCardGroup'
23
- import { CCardHeader } from './components/card/CCardHeader'
24
- import { CCardImage } from './components/card/CCardImage'
25
- import { CCardImageOverlay } from './components/card/CCardImageOverlay'
26
- import { CCardLink } from './components/card/CCardLink'
27
- import { CCardSubtitle } from './components/card/CCardSubtitle'
28
- import { CCardText } from './components/card/CCardText'
29
- import { CCardTitle } from './components/card/CCardTitle'
30
- import { CCarousel } from './components/carousel/CCarousel'
31
- import { CCarouselCaption } from './components/carousel/CCarouselCaption'
32
- import { CCarouselItem } from './components/carousel/CCarouselItem'
33
- import { CCollapse } from './components/collapse/CCollapse'
34
- import { CCloseButton } from './components/close-button/CCloseButton'
35
- import { CDropdown } from './components/dropdown/CDropdown'
36
- import { CDropdownDivider } from './components/dropdown/CDropdownDivider'
37
- import { CDropdownHeader } from './components/dropdown/CDropdownHeader'
38
- import { CDropdownItem } from './components/dropdown/CDropdownItem'
39
- import { CDropdownItemPlain } from './components/dropdown/CDropdownItemPlain'
40
- import { CDropdownMenu } from './components/dropdown/CDropdownMenu'
41
- import { CDropdownToggle } from './components/dropdown/CDropdownToggle'
42
- import { CDropdownToggleCustom } from './components/dropdown/CDropdownToggleCustom'
43
- import { CCol } from './components/grid/CCol'
44
- import { CContainer } from './components/grid/CContainer'
45
- import { CRow } from './components/grid/CRow'
46
- import { CFooter } from './components/footer/CFooter'
47
- import { CForm } from './components/form/CForm'
48
- import { CFormCheck } from './components/form/CFormCheck'
49
- import { CFormFeedback } from './components/form/CFormFeedback'
50
- import { CFormFloating } from './components/form/CFormFloating'
51
- import { CFormInput } from './components/form/CFormInput'
52
- import { CFormLabel } from './components/form/CFormLabel'
53
- import { CFormRange } from './components/form/CFormRange'
54
- import { CFormSelect } from './components/form/CFormSelect'
55
- import { CFormSwitch } from './components/form/CFormSwitch'
56
- import { CFormText } from './components/form/CFormText'
57
- import { CFormTextarea } from './components/form/CFormTextarea'
58
- import { CInputGroup } from './components/form/CInputGroup'
59
- import { CInputGroupText } from './components/form/CInputGroupText'
60
- import { CHeader } from './components/header/CHeader'
61
- import { CHeaderBrand } from './components/header/CHeaderBrand'
62
- import { CHeaderDivider } from './components/header/CHeaderDivider'
63
- import { CHeaderNav } from './components/header/CHeaderNav'
64
- import { CHeaderText } from './components/header/CHeaderText'
65
- import { CHeaderToggler } from './components/header/CHeaderToggler'
66
- import { CImage } from './components/image/CImage'
67
- import { CLink } from './components/link/CLink'
68
- import { CListGroup } from './components/list-group/CListGroup'
69
- import { CListGroupItem } from './components/list-group/CListGroupItem'
70
- import { CLoadingButton } from './components/loading-button/CLoadingButton'
71
- import { CModal } from './components/modal/CModal'
72
- import { CModalBody } from './components/modal/CModalBody'
73
- import { CModalContent } from './components/modal/CModalContent'
74
- import { CModalDialog } from './components/modal/CModalDialog'
75
- import { CModalFooter } from './components/modal/CModalFooter'
76
- import { CModalHeader } from './components/modal/CModalHeader'
77
- import { CModalTitle } from './components/modal/CModalTitle'
78
- import { CMultiSelect } from './components/multi-select/CMultiSelect'
79
- import { CNav } from './components/nav/CNav'
80
- import { CNavGroupItems } from './components/nav/CNavGroupItems'
81
- import { CNavGroup } from './components/nav/CNavGroup'
82
- import { CNavItem } from './components/nav/CNavItem'
83
- import { CNavLink } from './components/nav/CNavLink'
84
- import { CNavTitle } from './components/nav/CNavTitle'
85
- import { CNavbar } from './components/navbar/CNavbar'
86
- import { CNavbarBrand } from './components/navbar/CNavbarBrand'
87
- import { CNavbarNav } from './components/navbar/CNavbarNav'
88
- import { CNavbarText } from './components/navbar/CNavbarText'
89
- import { CNavbarToggler } from './components/navbar/CNavbarToggler'
90
- import { CPagination } from './components/pagination/CPagination'
91
- import { CPaginationItem } from './components/pagination/CPaginationItem'
92
- import { CSmartPagination } from './components/pagination/CSmartPagination'
93
- import { CPlaceholder } from './components/placeholder/CPlaceholder'
94
- import { CPopover } from './components/popover/CPopover'
95
- import { CProgress } from './components/progress/CProgress'
96
- import { CProgressBar } from './components/progress/CProgressBar'
97
- import { CSidebar } from './components/sidebar/CSidebar'
98
- import { COffcanvas } from './components/offcanvas/COffcanvas'
99
- import { COffcanvasBody } from './components/offcanvas/COffcanvasBody'
100
- import { COffcanvasHeader } from './components/offcanvas/COffcanvasHeader'
101
- import { COffcanvasTitle } from './components/offcanvas/COffcanvasTitle'
102
- import { CSidebarBrand } from './components/sidebar/CSidebarBrand'
103
- import { CSidebarFooter } from './components/sidebar/CSidebarFooter'
104
- import { CSidebarToggler } from './components/sidebar/CSidebarToggler'
105
- import { CSidebarHeader } from './components/sidebar/CSidebarHeader'
106
- import { CSidebarNav } from './components/sidebar/CSidebarNav'
107
- import { CSmartTable } from './components/smart-table/CSmartTable'
108
- import { CSpinner } from './components/spinner/CSpinner'
109
- import { CTable } from './components/table/CTable'
110
- import { CTableBody } from './components/table/CTableBody'
111
- import { CTableCaption } from './components/table/CTableCaption'
112
- import { CTableDataCell } from './components/table/CTableDataCell'
113
- import { CTableFoot } from './components/table/CTableFoot'
114
- import { CTableHead } from './components/table/CTableHead'
115
- import { CTableHeaderCell } from './components/table/CTableHeaderCell'
116
- import { CTableRow } from './components/table/CTableRow'
117
- import { CTabContent } from './components/tabs/CTabContent'
118
- import { CTabPane } from './components/tabs/CTabPane'
119
- import { CToast } from './components/toast/CToast'
120
- import { CToastBody } from './components/toast/CToastBody'
121
- import { CToastClose } from './components/toast/CToastClose'
122
- import { CToastHeader } from './components/toast/CToastHeader'
123
- import { CToaster } from './components/toast/CToaster'
124
- import { CTooltip } from './components/tooltip/CTooltip'
125
-
126
- export {
127
- CAccordion,
128
- CAccordionBody,
129
- CAccordionButton,
130
- CAccordionCollapse,
131
- CAccordionHeader,
132
- CAccordionItem,
133
- CAlert,
134
- CAlertHeading,
135
- CAlertLink,
136
- CAvatar,
137
- CBadge,
138
- CBackdrop,
139
- CBreadcrumb,
140
- CBreadcrumbItem,
141
- CButton,
142
- CButtonGroup,
143
- CButtonToolbar,
144
- CCallout,
145
- CCard,
146
- CCardBody,
147
- CCardFooter,
148
- CCardHeader,
149
- CCardImage,
150
- CCardImageOverlay,
151
- CCardLink,
152
- CCardSubtitle,
153
- CCardText,
154
- CCardTitle,
155
- CCarousel,
156
- CCarouselCaption,
157
- CCarouselItem,
158
- CCloseButton,
159
- CCollapse,
160
- CDropdown,
161
- CDropdownDivider,
162
- CDropdownHeader,
163
- CDropdownItem,
164
- CDropdownItemPlain,
165
- CDropdownMenu,
166
- CDropdownToggle,
167
- CDropdownToggleCustom,
168
- CCol,
169
- CContainer,
170
- CRow,
171
- CFooter,
172
- CCardGroup,
173
- CForm,
174
- CFormCheck,
175
- CFormFeedback,
176
- CFormFloating,
177
- CFormInput,
178
- CFormLabel,
179
- CFormRange,
180
- CFormSelect,
181
- CFormSwitch,
182
- CFormText,
183
- CFormTextarea,
184
- CImage,
185
- CInputGroup,
186
- CInputGroupText,
187
- CHeader,
188
- CHeaderBrand,
189
- CHeaderDivider,
190
- CHeaderNav,
191
- CHeaderText,
192
- CHeaderToggler,
193
- CLink,
194
- CListGroup,
195
- CListGroupItem,
196
- CLoadingButton,
197
- CModal,
198
- CModalBody,
199
- CModalContent,
200
- CModalDialog,
201
- CModalFooter,
202
- CModalHeader,
203
- CModalTitle,
204
- CMultiSelect,
205
- CNav,
206
- CNavGroup,
207
- CNavGroupItems,
208
- CNavItem,
209
- CNavLink,
210
- CNavTitle,
211
- CNavbar,
212
- CNavbarBrand,
213
- CNavbarNav,
214
- CNavbarText,
215
- CNavbarToggler,
216
- CPagination,
217
- CPaginationItem,
218
- CPlaceholder,
219
- CPopover,
220
- CProgress,
221
- CProgressBar,
222
- COffcanvas,
223
- COffcanvasBody,
224
- COffcanvasHeader,
225
- COffcanvasTitle,
226
- CSmartPagination,
227
- CSidebar,
228
- CSidebarBrand,
229
- CSidebarFooter,
230
- CSidebarToggler,
231
- CSidebarHeader,
232
- CSidebarNav,
233
- CSmartTable,
234
- CSpinner,
235
- CTable,
236
- CTableBody,
237
- CTableCaption,
238
- CTableDataCell,
239
- CTableFoot,
240
- CTableHead,
241
- CTableHeaderCell,
242
- CTableRow,
243
- CTabContent,
244
- CTabPane,
245
- CToast,
246
- CToastBody,
247
- CToastClose,
248
- CToastHeader,
249
- CToaster,
250
- CTooltip,
251
- }
252
-
253
1
  export * from './components/'
@@ -0,0 +1,270 @@
1
+ export const convertToLocalDate = (d: Date, locale: string, options = {}) =>
2
+ d.toLocaleDateString(locale, options)
3
+
4
+ export const convertToLocalTime = (d: Date, locale: string, options = {}) =>
5
+ d.toLocaleTimeString(locale, options)
6
+
7
+ export const createGroupsInArray = (arr: any[], numberOfGroups: number) => {
8
+ const perGroup = Math.ceil(arr.length / numberOfGroups)
9
+ return new Array(numberOfGroups)
10
+ .fill('')
11
+ .map((_, i) => arr.slice(i * perGroup, (i + 1) * perGroup))
12
+ }
13
+
14
+ export const getCurrentYear = () => new Date().getFullYear()
15
+
16
+ export const getCurrentMonth = () => new Date().getMonth()
17
+
18
+ export const getLocalDateFromString = (string: string, locale: string, time?: boolean) => {
19
+ const date = new Date(2013, 11, 31, 17, 19, 22)
20
+ let regex = time ? date.toLocaleString(locale) : date.toLocaleDateString(locale)
21
+ regex = regex
22
+ .replace('2013', '(?<year>[0-9]{2,4})')
23
+ .replace('12', '(?<month>[0-9]{1,2})')
24
+ .replace('31', '(?<day>[0-9]{1,2})')
25
+
26
+ if (time) {
27
+ regex = regex
28
+ .replace('5', '(?<hour>[0-9]{1,2})')
29
+ .replace('17', '(?<hour>[0-9]{1,2})')
30
+ .replace('19', '(?<minute>[0-9]{1,2})')
31
+ .replace('22', '(?<second>[0-9]{1,2})')
32
+ .replace('PM', '(?<ampm>[A-Z]{2})')
33
+ }
34
+
35
+ const rgx = RegExp(`${regex}`)
36
+ const partials = string.match(rgx)
37
+
38
+ if (partials === null) return
39
+
40
+ const newDate =
41
+ partials.groups &&
42
+ (time
43
+ ? new Date(
44
+ Number(partials.groups['year']),
45
+ Number(partials.groups['month']) - 1,
46
+ Number(partials.groups['day']),
47
+ partials.groups['ampm']
48
+ ? partials.groups['ampm'] === 'PM'
49
+ ? Number(partials.groups['hour']) + 12
50
+ : Number(partials.groups['hour'])
51
+ : Number(partials.groups['hour']),
52
+ Number(partials.groups['minute']),
53
+ Number(partials.groups['second']),
54
+ )
55
+ : new Date(
56
+ Number(partials.groups['year']),
57
+ Number(partials.groups['month']) - 1,
58
+ Number(partials.groups['day']),
59
+ ))
60
+
61
+ return newDate
62
+ }
63
+
64
+ export const getMonthName = (month: number, locale: string) => {
65
+ const d = new Date()
66
+ d.setDate(1)
67
+ d.setMonth(month)
68
+ return d.toLocaleString(locale, { month: 'long' })
69
+ }
70
+
71
+ export const getMonthsNames = (locale: string) => {
72
+ const months = []
73
+ const d = new Date()
74
+ d.setDate(1)
75
+
76
+ for (let i = 0; i < 12; i++) {
77
+ d.setMonth(i)
78
+ months.push(d.toLocaleString(locale, { month: 'short' }))
79
+ }
80
+
81
+ return months
82
+ }
83
+
84
+ export const getYears = (year: number) => {
85
+ const years = []
86
+ for (let _year = year - 6; _year < year + 6; _year++) {
87
+ years.push(_year)
88
+ }
89
+
90
+ return years
91
+ }
92
+
93
+ const getLeadingDays = (year: number, month: number, firstDayOfWeek: number) => {
94
+ // 0: sunday
95
+ // 1: monday
96
+ const dates = []
97
+ const d = new Date(year, month)
98
+ const y = d.getFullYear()
99
+ const m = d.getMonth()
100
+ const firstWeekday = new Date(y, m, 1).getDay()
101
+ let leadingDays = 6 - (6 - firstWeekday) - firstDayOfWeek
102
+
103
+ if (firstDayOfWeek) {
104
+ leadingDays = leadingDays < 0 ? 7 + leadingDays : leadingDays
105
+ }
106
+
107
+ for (let i = leadingDays * -1; i < 0; i++) {
108
+ dates.push({
109
+ date: new Date(y, m, i + 1),
110
+ month: 'previous',
111
+ })
112
+ }
113
+
114
+ return dates
115
+ }
116
+
117
+ const getMonthDays = (year: number, month: number) => {
118
+ const dates = []
119
+ const lastDay = new Date(year, month + 1, 0).getDate()
120
+ for (let i = 1; i <= lastDay; i++) {
121
+ dates.push({
122
+ date: new Date(year, month, i),
123
+ month: 'current',
124
+ })
125
+ }
126
+ return dates
127
+ }
128
+
129
+ const getTrailingDays = (
130
+ year: number,
131
+ month: number,
132
+ leadingDays: { date: Date; month: string }[],
133
+ monthDays: { date: Date; month: string }[],
134
+ ) => {
135
+ const dates = []
136
+ const days = 42 - (leadingDays.length + monthDays.length)
137
+ for (let i = 1; i <= days; i++) {
138
+ dates.push({
139
+ date: new Date(year, month + 1, i),
140
+ month: 'next',
141
+ })
142
+ }
143
+ return dates
144
+ }
145
+
146
+ export const getMonthDetails = (year: number, month: number, firstDayOfWeek: number) => {
147
+ const daysPrevMonth = getLeadingDays(year, month, firstDayOfWeek)
148
+ const daysThisMonth = getMonthDays(year, month)
149
+ const daysNextMonth = getTrailingDays(year, month, daysPrevMonth, daysThisMonth)
150
+ const days = [...daysPrevMonth, ...daysThisMonth, ...daysNextMonth]
151
+
152
+ const weeks: { date: Date; month: string }[][] = []
153
+
154
+ days.forEach((day, index) => {
155
+ if (index % 7 === 0 || weeks.length === 0) {
156
+ weeks.push([])
157
+ }
158
+ weeks[weeks.length - 1].push(day)
159
+ })
160
+
161
+ return weeks
162
+ }
163
+
164
+ export const isDisableDateInRange = (
165
+ startDate?: Date | null,
166
+ endDate?: Date | null,
167
+ dates?: Date[] | Date[][],
168
+ ) => {
169
+ if (startDate && endDate) {
170
+ const date = new Date(startDate)
171
+ let disabled = false
172
+
173
+ while (date < endDate) {
174
+ date.setDate(date.getDate() + 1)
175
+ if (isDateDisabled(date, null, null, dates)) {
176
+ disabled = true
177
+ break
178
+ }
179
+ }
180
+
181
+ return disabled
182
+ }
183
+
184
+ return false
185
+ }
186
+
187
+ export const isDateDisabled = (
188
+ date: Date,
189
+ min?: Date | null,
190
+ max?: Date | null,
191
+ dates?: Date[] | Date[][],
192
+ ) => {
193
+ let disabled
194
+ if (dates) {
195
+ dates.forEach((_date: Date | Date[]) => {
196
+ if (Array.isArray(_date)) {
197
+ if (isDateInRange(date, _date[0], _date[1])) {
198
+ disabled = true
199
+ }
200
+ }
201
+ if (_date instanceof Date) {
202
+ if (isSameDateAs(date, _date)) {
203
+ disabled = true
204
+ }
205
+ }
206
+ })
207
+ }
208
+ if (min && date < min) {
209
+ disabled = true
210
+ }
211
+
212
+ if (max && date > max) {
213
+ disabled = true
214
+ }
215
+ return disabled
216
+ }
217
+
218
+ export const isDateInRange = (date: Date, start: Date | null, end: Date | null) => {
219
+ return start && end && start <= date && date <= end
220
+ }
221
+
222
+ export const isDateSelected = (date: Date, start: Date | null, end: Date | null) => {
223
+ return (start && isSameDateAs(start, date)) || (end && isSameDateAs(end, date))
224
+ }
225
+
226
+ export const isEndDate = (date: Date, start: Date | null, end: Date | null) => {
227
+ return start && end && isSameDateAs(end, date) && start < end
228
+ }
229
+
230
+ export const isLastDayOfMonth = (date: Date) => {
231
+ const test = new Date(date.getTime())
232
+ const month = test.getMonth()
233
+
234
+ test.setDate(test.getDate() + 1)
235
+ return test.getMonth() !== month
236
+ }
237
+
238
+ export const isSameDateAs = (date: Date | null, date2: Date | null) => {
239
+ if (date instanceof Date && date2 instanceof Date) {
240
+ return (
241
+ date.getDate() === date2.getDate() &&
242
+ date.getMonth() === date2.getMonth() &&
243
+ date.getFullYear() === date2.getFullYear()
244
+ )
245
+ }
246
+
247
+ if (date === null && date2 === null) {
248
+ return true
249
+ }
250
+
251
+ return false
252
+ }
253
+
254
+ export const isStartDate = (date: Date, start: Date | null, end: Date | null) => {
255
+ return start && end && isSameDateAs(start, date) && start < end
256
+ }
257
+
258
+ export const isToday = (date: Date) => {
259
+ const today = new Date()
260
+ return (
261
+ date.getDate() === today.getDate() &&
262
+ date.getMonth() === today.getMonth() &&
263
+ date.getFullYear() === today.getFullYear()
264
+ )
265
+ }
266
+
267
+ export const isValidDate = (date: string) => {
268
+ const d = new Date(date)
269
+ return d instanceof Date && d.getTime()
270
+ }
@@ -1,7 +1,10 @@
1
- import { useEffect, useState } from 'react'
1
+ import { Dispatch, SetStateAction, useEffect, useState } from 'react'
2
2
 
3
- export const useStateWithCallback = (initialState: any, callback: any) => {
3
+ export const useStateWithCallback = <S>(
4
+ initialState: S,
5
+ handler?: (prevState: S) => void,
6
+ ): [S, Dispatch<SetStateAction<S>>] => {
4
7
  const [state, setState] = useState(initialState)
5
- useEffect(() => callback(state), [state, callback])
8
+ handler && useEffect(() => handler(state), [state])
6
9
  return [state, setState]
7
10
  }
@@ -0,0 +1,84 @@
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 convertTimeToDate = (time: Date | string | null | undefined) =>
17
+ time ? (time instanceof Date ? new Date(time) : new Date(`1970-01-01 ${time}`)) : null
18
+
19
+ export const getAmPm = (date: Date, locale: string) => {
20
+ if (date.toLocaleTimeString(locale).includes('AM')) {
21
+ return 'am'
22
+ }
23
+ if (date.toLocaleTimeString(locale).includes('PM')) {
24
+ return 'pm'
25
+ }
26
+ return date.getHours() >= 12 ? 'pm' : 'am'
27
+ }
28
+
29
+ export const getListOfHours = (locale: string) =>
30
+ Array.from({ length: isAmPm(locale) ? 12 : 24 }, (_, i) => {
31
+ return {
32
+ value: isAmPm(locale) ? i + 1 : i,
33
+ label: (isAmPm(locale) ? i + 1 : i).toLocaleString(locale),
34
+ }
35
+ })
36
+
37
+ export const getListOfMinutes = (locale: string, valueAsString = false) =>
38
+ Array.from({ length: 60 }, (_, i) => {
39
+ const d = new Date()
40
+ d.setMinutes(i)
41
+ return {
42
+ value: valueAsString ? i.toString() : i,
43
+ label: d
44
+ .toLocaleTimeString(locale, {
45
+ hour: '2-digit',
46
+ hour12: false,
47
+ minute: '2-digit',
48
+ second: '2-digit',
49
+ })
50
+ .split(':')[1],
51
+ }
52
+ })
53
+
54
+ export const getListOfSeconds = (locale: string, valueAsString = false) =>
55
+ Array.from({ length: 60 }, (_, i) => {
56
+ const d = new Date()
57
+ d.setSeconds(i)
58
+ return {
59
+ value: valueAsString ? i.toString() : i,
60
+ label: d
61
+ .toLocaleTimeString(locale, {
62
+ hour: '2-digit',
63
+ hour12: false,
64
+ minute: '2-digit',
65
+ second: '2-digit',
66
+ })
67
+ .split(':')[2],
68
+ }
69
+ })
70
+
71
+ export const getSelectedHour = (date: Date | null, locale: string) =>
72
+ date ? (isAmPm(locale) ? convert24hTo12h(date.getHours()) : date.getHours()) : ''
73
+
74
+ export const getSelectedMinutes = (date: Date | null) => (date ? date.getMinutes() : '')
75
+
76
+ export const getSelectedSeconds = (date: Date | null) => (date ? date.getSeconds() : '')
77
+
78
+ export const isAmPm = (locale: string) =>
79
+ ['am', 'AM', 'pm', 'PM'].some((el) => new Date().toLocaleString(locale).includes(el))
80
+
81
+ export const isValidTime = (time: string) => {
82
+ const d = new Date(`1970-01-01 ${time}`)
83
+ return d instanceof Date && d.getTime()
84
+ }
@@ -1,15 +0,0 @@
1
- import { FC, HTMLAttributes } from 'react';
2
- import { Triggers } from '../Types';
3
- export interface CDropdownToggleCustomProps extends HTMLAttributes<HTMLDivElement> {
4
- /**
5
- * Toggle the disabled state for the component.
6
- */
7
- disabled?: boolean;
8
- /**
9
- * Sets which event handlers you’d like provided to your toggle prop. You can specify one trigger or an array of them.
10
- *
11
- * @type 'hover' | 'focus' | 'click'
12
- */
13
- trigger?: Triggers | Triggers[];
14
- }
15
- export declare const CDropdownToggleCustom: FC<CDropdownToggleCustomProps>;