@coreui/react-pro 4.12.0-alpha.0 → 4.12.0-beta.1

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 (41) hide show
  1. package/README.md +1 -1
  2. package/dist/components/accordion/index.d.ts +1 -1
  3. package/dist/components/calendar/CCalendar.d.ts +4 -4
  4. package/dist/components/date-range-picker/CDateRangePicker.d.ts +1 -1
  5. package/dist/components/multi-select/CMultiSelect.d.ts +2 -2
  6. package/dist/hooks/index.d.ts +2 -1
  7. package/dist/hooks/useColorModes.d.ts +7 -0
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.es.js +134 -274
  10. package/dist/index.es.js.map +1 -1
  11. package/dist/index.js +136 -273
  12. package/dist/index.js.map +1 -1
  13. package/dist/props.d.ts +1 -1
  14. package/package.json +12 -12
  15. package/src/components/accordion/index.ts +1 -7
  16. package/src/components/calendar/CCalendar.tsx +49 -64
  17. package/src/components/calendar/utils.ts +1 -1
  18. package/src/components/date-range-picker/CDateRangePicker.tsx +10 -10
  19. package/src/components/date-range-picker/utils.ts +2 -2
  20. package/src/components/form/CFormSelect.tsx +3 -1
  21. package/src/components/modal/CModal.tsx +2 -0
  22. package/src/components/multi-select/CMultiSelect.tsx +2 -2
  23. package/src/components/popover/CPopover.tsx +0 -1
  24. package/src/components/popover/__tests__/__snapshots__/CPopover.spec.tsx.snap +2 -1
  25. package/src/components/progress/CProgress.tsx +1 -0
  26. package/src/components/sidebar/CSidebar.tsx +2 -2
  27. package/src/components/smart-table/CSmartTable.tsx +22 -10
  28. package/src/components/smart-table/CSmartTableBody.tsx +3 -5
  29. package/src/components/smart-table/CSmartTableHead.tsx +5 -6
  30. package/src/components/spinner/CSpinner.tsx +4 -2
  31. package/src/components/spinner/__tests__/__snapshots__/CSpinner.spec.tsx.snap +2 -2
  32. package/src/components/table/CTable.tsx +2 -1
  33. package/src/components/tooltip/CTooltip.tsx +0 -1
  34. package/src/components/tooltip/__tests__/CTooltip.spec.tsx +1 -1
  35. package/src/hooks/index.ts +2 -1
  36. package/src/hooks/useColorModes.ts +57 -0
  37. package/src/hooks/useForkedRef.ts +1 -1
  38. package/src/index.ts +1 -0
  39. package/src/props.ts +4 -1
  40. package/src/utils/isRTL.ts +1 -1
  41. package/src/components/smart-table/CSmartTableCleaner.tsx +0 -37
@@ -3,7 +3,7 @@
3
3
  exports[`CSpinner customize 1`] = `
4
4
  <div>
5
5
  <h3
6
- class="spinner-grow text-warning spinner-grow-sm bazinga"
6
+ class="spinner-grow spinner-grow-sm text-warning bazinga"
7
7
  role="status"
8
8
  >
9
9
  <span
@@ -18,7 +18,7 @@ exports[`CSpinner customize 1`] = `
18
18
  exports[`loads and displays CSpinner component 1`] = `
19
19
  <div>
20
20
  <div
21
- class="spinner-border text-undefined"
21
+ class="spinner-border"
22
22
  role="status"
23
23
  >
24
24
  <span
@@ -201,7 +201,8 @@ export const CTable = forwardRef<HTMLTableElement, CTableProps>(
201
201
  <CTableRow {...(item._props && { ...item._props })} key={index}>
202
202
  {columnNames &&
203
203
  columnNames.map((colName: string, index: number) => {
204
- return item[colName] ? (
204
+ // eslint-disable-next-line unicorn/no-negated-condition
205
+ return item[colName] !== undefined ? (
205
206
  <CTableDataCell
206
207
  {...(item._cellProps && {
207
208
  ...(item._cellProps['all'] && { ...item._cellProps['all'] }),
@@ -47,7 +47,6 @@ export interface CTooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'con
47
47
  }
48
48
 
49
49
  const getPlacement = (placement: string, element: HTMLDivElement | null): Placement => {
50
- console.log(element)
51
50
  switch (placement) {
52
51
  case 'right': {
53
52
  return isRTL(element) ? 'left' : 'right'
@@ -13,7 +13,7 @@ beforeEach(() => {
13
13
  })
14
14
 
15
15
  afterEach(() => {
16
- container && document.body.removeChild(container)
16
+ container && container.remove()
17
17
  container = null
18
18
  })
19
19
 
@@ -1,4 +1,5 @@
1
+ import { useColorModes } from './useColorModes'
1
2
  import { useForkedRef } from './useForkedRef'
2
3
  import { useStateWithCallback } from './useStateWithCallback'
3
4
 
4
- export { useForkedRef, useStateWithCallback }
5
+ export { useColorModes, useForkedRef, useStateWithCallback }
@@ -0,0 +1,57 @@
1
+ import { useEffect, useState } from 'react'
2
+
3
+ interface UseColorModesOutput {
4
+ getColorMode: () => string
5
+ isColorModeSet: () => boolean
6
+ setColorMode: (mode: string) => void
7
+ }
8
+
9
+ const getStoredTheme = (localStorageItemName: string) => localStorage.getItem(localStorageItemName)
10
+ const setStoredTheme = (localStorageItemName: string, colorMode: string) =>
11
+ localStorage.setItem(localStorageItemName, colorMode)
12
+
13
+ const getPreferredColorScheme = (localStorageItemName: string) => {
14
+ const storedTheme = getStoredTheme(localStorageItemName)
15
+
16
+ if (storedTheme) {
17
+ return storedTheme
18
+ }
19
+
20
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
21
+ }
22
+
23
+ const setTheme = (colorMode: string) => {
24
+ document.documentElement.dataset.coreuiTheme =
25
+ colorMode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches
26
+ ? 'dark'
27
+ : colorMode
28
+
29
+ const event = new Event('ColorSchemeChange')
30
+ document.documentElement.dispatchEvent(event)
31
+ }
32
+
33
+ export const useColorModes = (
34
+ localStorageItemName = 'coreui-react-color-scheme',
35
+ ): UseColorModesOutput => {
36
+ const [colorMode, setColorMode] = useState<string>(getPreferredColorScheme(localStorageItemName))
37
+
38
+ useEffect(() => {
39
+ setStoredTheme(localStorageItemName, colorMode)
40
+ setTheme(colorMode)
41
+ }, [colorMode])
42
+
43
+ useEffect(() => {
44
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
45
+ const storedTheme = getStoredTheme(localStorageItemName)
46
+ if (storedTheme !== 'light' && storedTheme !== 'dark') {
47
+ setTheme(colorMode)
48
+ }
49
+ })
50
+ }, [])
51
+
52
+ return {
53
+ getColorMode: () => colorMode,
54
+ isColorModeSet: () => Boolean(getStoredTheme(localStorageItemName)),
55
+ setColorMode: (mode: string) => setColorMode(mode),
56
+ }
57
+ }
@@ -38,7 +38,7 @@ export function assignRef<RefValueType = any>(
38
38
  } else {
39
39
  try {
40
40
  ref.current = value
41
- } catch (error) {
41
+ } catch {
42
42
  throw new Error(`Cannot assign value "${value}" to ref "${ref}"`)
43
43
  }
44
44
  }
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './components/'
2
+ export * from './hooks/'
package/src/props.ts CHANGED
@@ -68,4 +68,7 @@ export const textColorsPropType = PropTypes.oneOfType([
68
68
  PropTypes.string,
69
69
  ])
70
70
 
71
- export const triggerPropType = PropTypes.oneOf<Triggers>(['hover', 'focus', 'click'])
71
+ export const triggerPropType = PropTypes.oneOfType([
72
+ PropTypes.arrayOf(PropTypes.oneOf<Triggers>(['hover', 'focus', 'click']).isRequired),
73
+ PropTypes.oneOf<Triggers>(['hover', 'focus', 'click']),
74
+ ])
@@ -1,5 +1,5 @@
1
1
  const isRTL = (element?: HTMLElement | HTMLDivElement | null) => {
2
- if (document.documentElement.dir === 'rtl') {
2
+ if (typeof document !== 'undefined' && document.documentElement.dir === 'rtl') {
3
3
  return true
4
4
  }
5
5
 
@@ -1,37 +0,0 @@
1
- import PropTypes from 'prop-types'
2
- import React, { forwardRef, HTMLAttributes, ReactNode } from 'react'
3
-
4
- import { cilFilterX } from '@coreui/icons'
5
-
6
- import CIcon from '@coreui/icons-react'
7
-
8
- interface CSmartTableCleanerProps extends HTMLAttributes<HTMLButtonElement> {
9
- content?: string | ReactNode
10
- isFiltered?: string
11
- }
12
-
13
- export const CSmartTableCleaner = forwardRef<HTMLButtonElement, CSmartTableCleanerProps>(
14
- ({ content = <CIcon width={18} icon={cilFilterX} />, isFiltered, ...rest }, ref) => {
15
- return (
16
- <button
17
- type="button"
18
- className="btn btn-transparent"
19
- {...(!isFiltered && {
20
- disabled: true,
21
- tabIndex: -1,
22
- })}
23
- {...rest}
24
- ref={ref}
25
- >
26
- {content}
27
- </button>
28
- )
29
- },
30
- )
31
-
32
- CSmartTableCleaner.propTypes = {
33
- content: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
34
- isFiltered: PropTypes.string,
35
- }
36
-
37
- CSmartTableCleaner.displayName = 'CSmartTableCleaner'