@coreui/react-pro 4.9.0-next.0 → 4.9.0-next.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.
- package/README.md +1 -1
- package/dist/components/alert/CAlert.d.ts +1 -1
- package/dist/components/avatar/CAvatar.d.ts +1 -1
- package/dist/components/badge/CBadge.d.ts +1 -1
- package/dist/components/button/CButton.d.ts +1 -1
- package/dist/components/calendar/utils.d.ts +0 -1
- package/dist/components/callout/CCallout.d.ts +1 -1
- package/dist/components/card/CCard.d.ts +1 -1
- package/dist/components/date-range-picker/CDateRangePicker.d.ts +1 -1
- package/dist/components/date-range-picker/utils.d.ts +1 -0
- package/dist/components/dropdown/CDropdown.d.ts +1 -1
- package/dist/components/dropdown/CDropdownToggle.d.ts +1 -1
- package/dist/components/form/CFormCheck.d.ts +1 -1
- package/dist/components/list-group/CListGroupItem.d.ts +4 -5
- package/dist/components/multi-select/CMultiSelect.d.ts +1 -13
- package/dist/components/multi-select/CMultiSelectNativeSelect.d.ts +1 -1
- package/dist/components/multi-select/CMultiSelectOptions.d.ts +1 -1
- package/dist/components/multi-select/CMultiSelectSelection.d.ts +1 -1
- package/dist/components/multi-select/types.d.ts +14 -0
- package/dist/components/multi-select/utils.d.ts +6 -0
- package/dist/components/navbar/CNavbar.d.ts +1 -1
- package/dist/components/picker/CPicker.d.ts +1 -1
- package/dist/components/placeholder/CPlaceholder.d.ts +1 -1
- package/dist/components/popover/CPopover.d.ts +1 -1
- package/dist/components/progress/CProgressBar.d.ts +1 -1
- package/dist/components/smart-table/CSmartTableHead.d.ts +1 -1
- package/dist/components/smart-table/CSmartTableInterface.d.ts +8 -0
- package/dist/components/smart-table/types.d.ts +1 -1
- package/dist/components/spinner/CSpinner.d.ts +1 -1
- package/dist/components/table/CTable.d.ts +2 -18
- package/dist/components/table/CTableBody.d.ts +1 -1
- package/dist/components/table/CTableDataCell.d.ts +1 -1
- package/dist/components/table/CTableFoot.d.ts +1 -1
- package/dist/components/table/CTableHead.d.ts +1 -1
- package/dist/components/table/CTableHeaderCell.d.ts +1 -1
- package/dist/components/table/CTableRow.d.ts +1 -1
- package/dist/components/table/types.d.ts +17 -0
- package/dist/components/table/utils.d.ts +5 -0
- package/dist/components/toast/CToast.d.ts +1 -1
- package/dist/components/toast/CToastClose.d.ts +1 -1
- package/dist/components/tooltip/CTooltip.d.ts +1 -1
- package/dist/components/virtual-scroller/CVirtualScroller.d.ts +0 -8
- package/dist/components/widgets/CWidgetStatsA.d.ts +1 -1
- package/dist/components/widgets/CWidgetStatsB.d.ts +1 -1
- package/dist/components/widgets/CWidgetStatsC.d.ts +1 -1
- package/dist/components/widgets/CWidgetStatsD.d.ts +1 -1
- package/dist/components/widgets/CWidgetStatsF.d.ts +1 -1
- package/dist/index.es.js +216 -225
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +216 -225
- package/dist/index.js.map +1 -1
- package/dist/props.d.ts +8 -0
- package/dist/types.d.ts +7 -0
- package/dist/utils/index.d.ts +1 -3
- package/package.json +1 -1
- package/src/components/accordion/CAccordionBody.tsx +1 -0
- package/src/components/accordion/CAccordionCollapse.tsx +1 -0
- package/src/components/alert/CAlert.tsx +2 -1
- package/src/components/avatar/CAvatar.tsx +2 -8
- package/src/components/backdrop/CBackdrop.tsx +1 -1
- package/src/components/badge/CBadge.tsx +2 -10
- package/src/components/button/CButton.tsx +3 -1
- package/src/components/calendar/utils.ts +0 -46
- package/src/components/callout/CCallout.tsx +2 -1
- package/src/components/card/CCard.tsx +2 -1
- package/src/components/date-range-picker/CDateRangePicker.tsx +2 -2
- package/src/components/date-range-picker/utils.ts +49 -0
- package/src/components/dropdown/CDropdown.tsx +2 -1
- package/src/components/dropdown/CDropdownItem.tsx +1 -2
- package/src/components/dropdown/CDropdownMenu.tsx +2 -1
- package/src/components/dropdown/CDropdownToggle.tsx +5 -4
- package/src/components/form/CFormCheck.tsx +3 -3
- package/src/components/form/CFormControlValidation.tsx +0 -1
- package/src/components/form/CFormControlWrapper.tsx +0 -1
- package/src/components/form/CFormInput.tsx +8 -4
- package/src/components/form/CFormRange.tsx +1 -2
- package/src/components/form/CFormSelect.tsx +1 -2
- package/src/components/form/CFormTextarea.tsx +1 -2
- package/src/components/list-group/CListGroupItem.tsx +8 -8
- package/src/components/list-group/CListGroupItem.tsx~HEAD +3 -1
- package/src/components/modal/CModal.tsx +2 -2
- package/src/components/modal/CModalHeader.tsx +3 -2
- package/src/components/multi-select/CMultiSelect.tsx +15 -74
- package/src/components/multi-select/CMultiSelectNativeSelect.tsx +1 -1
- package/src/components/multi-select/CMultiSelectOptions.tsx +2 -2
- package/src/components/multi-select/CMultiSelectSelection.tsx +1 -1
- package/src/components/multi-select/types.ts +15 -0
- package/src/components/multi-select/utils.ts +92 -0
- package/src/components/nav/CNavItem.tsx +1 -0
- package/src/components/nav/CNavLink.tsx +3 -3
- package/src/components/navbar/CNavbar.tsx +2 -1
- package/src/components/offcanvas/COffcanvas.tsx +4 -3
- package/src/components/picker/CPicker.tsx +1 -1
- package/src/components/placeholder/CPlaceholder.tsx +2 -1
- package/src/components/popover/CPopover.tsx +2 -1
- package/src/components/progress/CProgress.tsx +1 -0
- package/src/components/progress/CProgressBar.tsx +2 -1
- package/src/components/sidebar/CSidebar.tsx +2 -1
- package/src/components/smart-table/CSmartTable.tsx +1 -1
- package/src/components/smart-table/CSmartTableBody.tsx +82 -81
- package/src/components/smart-table/CSmartTableHead.tsx +5 -2
- package/src/components/smart-table/CSmartTableInterface.tsx +8 -0
- package/src/components/smart-table/{utils.tsx → utils.ts} +1 -1
- package/src/components/spinner/CSpinner.tsx +2 -1
- package/src/components/table/CTable.tsx +25 -59
- package/src/components/table/CTableBody.tsx +2 -1
- package/src/components/table/CTableDataCell.tsx +2 -1
- package/src/components/table/CTableFoot.tsx +2 -1
- package/src/components/table/CTableHead.tsx +2 -1
- package/src/components/table/CTableHeaderCell.tsx +2 -1
- package/src/components/table/CTableRow.tsx +2 -1
- package/src/components/table/types.ts +20 -0
- package/src/components/table/utils.ts +29 -0
- package/src/components/tabs/CTabPane.tsx +1 -0
- package/src/components/time-picker/CTimePicker.tsx +2 -4
- package/src/components/toast/CToast.tsx +3 -3
- package/src/components/toast/CToastClose.tsx +2 -2
- package/src/components/toast/CToaster.tsx +2 -1
- package/src/components/tooltip/CTooltip.tsx +3 -2
- package/src/components/virtual-scroller/CVirtualScroller.tsx +31 -54
- package/src/components/widgets/CWidgetStatsA.tsx +3 -3
- package/src/components/widgets/CWidgetStatsB.tsx +4 -4
- package/src/components/widgets/CWidgetStatsC.tsx +4 -4
- package/src/components/widgets/CWidgetStatsD.tsx +4 -5
- package/src/components/widgets/CWidgetStatsE.tsx +1 -2
- package/src/components/widgets/CWidgetStatsF.tsx +3 -4
- package/src/{components/Types.tsx → props.ts} +1 -68
- package/src/types.ts +68 -0
- package/src/utils/index.ts +1 -3
- package/src/components/multi-select/CMultiSelectCleaner.tsx +0 -18
- package/src/utils/getNextSibling.ts +0 -18
- package/src/utils/getPreviousSibling.ts +0 -18
- package/src/components/smart-table/{types.tsx → types.ts} +1 -1
|
@@ -2,7 +2,8 @@ import React, { forwardRef, TdHTMLAttributes, ThHTMLAttributes } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { colorPropType } from '../../props'
|
|
6
|
+
import type { Colors } from '../../types'
|
|
6
7
|
|
|
7
8
|
export interface CTableDataCellProps
|
|
8
9
|
extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'>,
|
|
@@ -2,7 +2,8 @@ import PropTypes from 'prop-types'
|
|
|
2
2
|
import React, { forwardRef, HTMLAttributes } from 'react'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { colorPropType } from '../../props'
|
|
6
|
+
import type { Colors } from '../../types'
|
|
6
7
|
|
|
7
8
|
export interface CTableFootProps extends HTMLAttributes<HTMLTableSectionElement> {
|
|
8
9
|
/**
|
|
@@ -2,7 +2,8 @@ import React, { forwardRef, HTMLAttributes } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { colorPropType } from '../../props'
|
|
6
|
+
import type { Colors } from '../../types'
|
|
6
7
|
|
|
7
8
|
export interface CTableHeadProps extends HTMLAttributes<HTMLTableSectionElement> {
|
|
8
9
|
/**
|
|
@@ -2,7 +2,8 @@ import React, { forwardRef, ThHTMLAttributes } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { colorPropType } from '../../props'
|
|
6
|
+
import type { Colors } from '../../types'
|
|
6
7
|
|
|
7
8
|
export interface CTableHeaderCellProps extends ThHTMLAttributes<HTMLTableCellElement> {
|
|
8
9
|
/**
|
|
@@ -2,7 +2,8 @@ import React, { forwardRef, HTMLAttributes } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { colorPropType } from '../../props'
|
|
6
|
+
import type { Colors } from '../../types'
|
|
6
7
|
|
|
7
8
|
export interface CTableRowProps extends HTMLAttributes<HTMLTableRowElement> {
|
|
8
9
|
/**
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CTableDataCellProps } from '../table/CTableDataCell'
|
|
2
|
+
import { CTableHeaderCellProps } from '../table/CTableHeaderCell'
|
|
3
|
+
import { CTableRowProps } from '../table/CTableRow'
|
|
4
|
+
|
|
5
|
+
export type Column = {
|
|
6
|
+
label?: string
|
|
7
|
+
key: string
|
|
8
|
+
_style?: any
|
|
9
|
+
_props?: CTableHeaderCellProps
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type FooterItem = {
|
|
13
|
+
label?: string
|
|
14
|
+
_props?: CTableDataCellProps
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type Item = {
|
|
18
|
+
[key: string]: number | string | any
|
|
19
|
+
_props?: CTableRowProps
|
|
20
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Column, Item } from './types'
|
|
2
|
+
|
|
3
|
+
export const pretifyName = (name: string) => {
|
|
4
|
+
return name
|
|
5
|
+
.replace(/[-_.]/g, ' ')
|
|
6
|
+
.replace(/ +/g, ' ')
|
|
7
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
8
|
+
.split(' ')
|
|
9
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
10
|
+
.join(' ')
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const getColumnLabel = (column: Column | string) =>
|
|
14
|
+
typeof column === 'object'
|
|
15
|
+
? column.label !== undefined
|
|
16
|
+
? column.label
|
|
17
|
+
: pretifyName(column.key)
|
|
18
|
+
: pretifyName(column)
|
|
19
|
+
|
|
20
|
+
export const getColumnNames = (columns: (string | Column)[] | undefined, items?: Item[]) =>
|
|
21
|
+
columns
|
|
22
|
+
? columns.map((column: Column | string) => {
|
|
23
|
+
if (typeof column === 'object') return column.key
|
|
24
|
+
else return column
|
|
25
|
+
})
|
|
26
|
+
: items && getColumnNamesFromItems(items)
|
|
27
|
+
|
|
28
|
+
export const getColumnNamesFromItems = (items: Item[]) =>
|
|
29
|
+
Object.keys(items[0] || {}).filter((el) => el.charAt(0) !== '_')
|
|
@@ -4,6 +4,7 @@ import classNames from 'classnames'
|
|
|
4
4
|
import { Transition } from 'react-transition-group'
|
|
5
5
|
|
|
6
6
|
import { useForkedRef } from '../../hooks'
|
|
7
|
+
|
|
7
8
|
export interface CTabPaneProps extends HTMLAttributes<HTMLDivElement> {
|
|
8
9
|
/**
|
|
9
10
|
* A string of all className you want applied to the base component.
|
|
@@ -127,15 +127,13 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
|
|
|
127
127
|
hour12: false,
|
|
128
128
|
})
|
|
129
129
|
|
|
130
|
-
useEffect(() => {
|
|
131
|
-
setLocalizedTimePartials(getLocalizedTimePartials(locale, ampm))
|
|
132
|
-
}, [date])
|
|
133
|
-
|
|
134
130
|
useEffect(() => {
|
|
135
131
|
setDate(convertTimeToDate(time))
|
|
136
132
|
}, [time])
|
|
137
133
|
|
|
138
134
|
useEffect(() => {
|
|
135
|
+
setLocalizedTimePartials(getLocalizedTimePartials(locale, ampm))
|
|
136
|
+
|
|
139
137
|
if (inputRef.current) {
|
|
140
138
|
inputRef.current.value = date
|
|
141
139
|
? date.toLocaleTimeString(locale, {
|
|
@@ -6,13 +6,13 @@ import React, {
|
|
|
6
6
|
useRef,
|
|
7
7
|
useState,
|
|
8
8
|
} from 'react'
|
|
9
|
-
import { Transition } from 'react-transition-group'
|
|
10
9
|
import PropTypes from 'prop-types'
|
|
11
10
|
import classNames from 'classnames'
|
|
12
|
-
|
|
13
|
-
import { Colors, colorPropType } from '../Types'
|
|
11
|
+
import { Transition } from 'react-transition-group'
|
|
14
12
|
|
|
15
13
|
import { useForkedRef } from '../../hooks'
|
|
14
|
+
import { colorPropType } from '../../props'
|
|
15
|
+
import type { Colors } from '../../types'
|
|
16
16
|
|
|
17
17
|
export interface CToastProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
18
18
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React, { ElementType, forwardRef, useContext } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import { CToastContext } from './CToast'
|
|
4
|
-
import { CCloseButton, CCloseButtonProps } from '../close-button/CCloseButton'
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
import { CButtonProps } from '../button/CButton'
|
|
6
|
+
import { CCloseButton, CCloseButtonProps } from '../close-button/CCloseButton'
|
|
7
7
|
|
|
8
8
|
type CombineButtonProps = CCloseButtonProps & CButtonProps
|
|
9
9
|
export interface CToastCloseProps extends CombineButtonProps {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React, { forwardRef, HTMLAttributes, useEffect, useState, useRef, ReactElement } from 'react'
|
|
2
|
-
import PropTypes from 'prop-types'
|
|
3
2
|
import { createPortal } from 'react-dom'
|
|
3
|
+
import PropTypes from 'prop-types'
|
|
4
4
|
import classNames from 'classnames'
|
|
5
|
+
|
|
5
6
|
export interface CToasterProps extends HTMLAttributes<HTMLDivElement> {
|
|
6
7
|
/**
|
|
7
8
|
* A string of all className you want applied to the base component.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import React, { FC, HTMLAttributes, ReactNode, useEffect, useRef, useState } from 'react'
|
|
2
2
|
import { createPortal } from 'react-dom'
|
|
3
|
-
import classNames from 'classnames'
|
|
4
3
|
import PropTypes from 'prop-types'
|
|
4
|
+
import classNames from 'classnames'
|
|
5
5
|
import { usePopper } from 'react-popper'
|
|
6
6
|
import { Transition } from 'react-transition-group'
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { triggerPropType } from '../../props'
|
|
9
|
+
import type { Triggers } from '../../types'
|
|
9
10
|
|
|
10
11
|
export interface CTooltipProps extends HTMLAttributes<HTMLDivElement> {
|
|
11
12
|
/**
|
|
@@ -9,14 +9,6 @@ export interface CVirtualScrollerProps extends Omit<HTMLAttributes<HTMLDivElemen
|
|
|
9
9
|
* A string of all className you want applied to the base component.
|
|
10
10
|
*/
|
|
11
11
|
className?: string
|
|
12
|
-
/**
|
|
13
|
-
* Single item height.
|
|
14
|
-
*/
|
|
15
|
-
itemHeight?: number | 'auto'
|
|
16
|
-
/**
|
|
17
|
-
* Number of items.
|
|
18
|
-
*/
|
|
19
|
-
itemsNumber?: number
|
|
20
12
|
/**
|
|
21
13
|
* Event fires when the component has been scrolled.
|
|
22
14
|
*/
|
|
@@ -28,23 +20,20 @@ export interface CVirtualScrollerProps extends Omit<HTMLAttributes<HTMLDivElemen
|
|
|
28
20
|
}
|
|
29
21
|
|
|
30
22
|
export const CVirtualScroller = forwardRef<HTMLDivElement, CVirtualScrollerProps>(
|
|
31
|
-
({ children, className,
|
|
23
|
+
({ children, className, visibleItems, onScroll }, ref) => {
|
|
32
24
|
const virtualScrollRef = useRef<HTMLDivElement>(null)
|
|
33
25
|
const virtualScrollContentRef = useRef<HTMLDivElement>(null)
|
|
34
26
|
const forkedRef = useForkedRef(ref, virtualScrollRef)
|
|
35
27
|
|
|
36
|
-
const [
|
|
37
|
-
const [
|
|
38
|
-
const [
|
|
28
|
+
const [buffer, setBuffer] = useState(Math.floor(visibleItems / 2))
|
|
29
|
+
const [currentItemIndex, setCurrentItemIndex] = useState(1)
|
|
30
|
+
const [itemHeight, setItemHeight] = useState(0)
|
|
31
|
+
const [itemsNumber, setItemsNumber] = useState(React.Children.count(children))
|
|
39
32
|
const [viewportPadding, setViewportPadding] = useState(0)
|
|
40
33
|
const [viewportHeight, setViewportHeight] = useState(
|
|
41
|
-
visibleItems *
|
|
34
|
+
visibleItems * itemHeight + 2 * viewportPadding,
|
|
42
35
|
)
|
|
43
|
-
const [maxHeight, setMaxHeight] = useState(
|
|
44
|
-
const [topPadding, setTopPadding] = useState(0)
|
|
45
|
-
const [bottomPadding, setBottomPadding] = useState(0)
|
|
46
|
-
|
|
47
|
-
const [contentHeight, setContentHeight] = useState(0)
|
|
36
|
+
const [maxHeight, setMaxHeight] = useState(itemsNumber * itemHeight + 2 * viewportPadding)
|
|
48
37
|
|
|
49
38
|
useEffect(() => {
|
|
50
39
|
virtualScrollRef.current && virtualScrollRef.current.scrollTop
|
|
@@ -58,33 +47,20 @@ export const CVirtualScroller = forwardRef<HTMLDivElement, CVirtualScrollerProps
|
|
|
58
47
|
}, [children, itemsNumber])
|
|
59
48
|
|
|
60
49
|
useEffect(() => {
|
|
61
|
-
setViewportHeight(visibleItems *
|
|
62
|
-
}, [viewportPadding, visibleItems,
|
|
50
|
+
setViewportHeight(visibleItems * itemHeight + 2 * viewportPadding)
|
|
51
|
+
}, [viewportPadding, visibleItems, itemHeight])
|
|
63
52
|
|
|
64
53
|
useEffect(() => {
|
|
65
|
-
setMaxHeight(
|
|
54
|
+
setMaxHeight(itemsNumber * itemHeight + 2 * viewportPadding)
|
|
66
55
|
virtualScrollRef.current && virtualScrollRef.current.scrollTop
|
|
67
|
-
|
|
68
|
-
}, [_itemsNumber, _itemHeight])
|
|
56
|
+
}, [itemsNumber, itemHeight])
|
|
69
57
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
1 +
|
|
74
|
-
Math.max(Math.floor(scrollTop / _itemHeight), 0) -
|
|
75
|
-
Math.min(
|
|
76
|
-
Math.floor(visibleItems / 2) - (Math.floor(visibleItems / 2) - currentItemIndex) - 1,
|
|
77
|
-
Math.floor(visibleItems / 2),
|
|
78
|
-
),
|
|
79
|
-
1,
|
|
80
|
-
),
|
|
81
|
-
_itemsNumber - visibleItems + 1,
|
|
82
|
-
)
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
setBuffer(Math.floor(visibleItems / 2))
|
|
60
|
+
}, [visibleItems])
|
|
83
61
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
setTopPadding(Math.max(_currentItemIndex * _itemHeight - _itemHeight, 0))
|
|
87
|
-
setBottomPadding(Math.max(maxHeight - topPadding - contentHeight, 0))
|
|
62
|
+
const handleScroll = (scrollTop: number) => {
|
|
63
|
+
const _currentItemIndex = itemHeight && Math.max(Math.ceil(scrollTop / itemHeight), 1)
|
|
88
64
|
setCurrentItemIndex(_currentItemIndex)
|
|
89
65
|
onScroll && onScroll(_currentItemIndex)
|
|
90
66
|
}
|
|
@@ -103,23 +79,31 @@ export const CVirtualScroller = forwardRef<HTMLDivElement, CVirtualScrollerProps
|
|
|
103
79
|
overflowY: 'auto',
|
|
104
80
|
}}
|
|
105
81
|
>
|
|
106
|
-
<div
|
|
107
|
-
|
|
82
|
+
<div
|
|
83
|
+
className="virtual-scroller-content"
|
|
84
|
+
style={{
|
|
85
|
+
height: maxHeight,
|
|
86
|
+
}}
|
|
87
|
+
ref={virtualScrollContentRef}
|
|
88
|
+
>
|
|
108
89
|
{React.Children.map(children, (child, index) => {
|
|
109
|
-
const _index = index + 1
|
|
110
90
|
if (
|
|
111
91
|
React.isValidElement(child) &&
|
|
112
|
-
|
|
113
|
-
|
|
92
|
+
index + 1 > Math.max(currentItemIndex - buffer, 0) &&
|
|
93
|
+
index + 1 <= currentItemIndex + visibleItems + buffer
|
|
114
94
|
) {
|
|
115
95
|
return React.cloneElement(child as React.ReactElement<any>, {
|
|
116
96
|
className: classNames(child.props.className, {
|
|
117
97
|
'virtual-scroller-item-preload':
|
|
118
|
-
|
|
98
|
+
index + 1 > currentItemIndex + visibleItems || index + 1 < currentItemIndex,
|
|
119
99
|
}),
|
|
120
100
|
key: index,
|
|
101
|
+
style: {
|
|
102
|
+
...(currentItemIndex > buffer && {
|
|
103
|
+
transform: `translateY(${(currentItemIndex - buffer) * itemHeight}px)`,
|
|
104
|
+
}),
|
|
105
|
+
},
|
|
121
106
|
ref: (node: HTMLElement) =>
|
|
122
|
-
itemHeight === 'auto' &&
|
|
123
107
|
node &&
|
|
124
108
|
node.offsetHeight &&
|
|
125
109
|
setItemHeight(
|
|
@@ -132,19 +116,12 @@ export const CVirtualScroller = forwardRef<HTMLDivElement, CVirtualScrollerProps
|
|
|
132
116
|
return
|
|
133
117
|
})}
|
|
134
118
|
</div>
|
|
135
|
-
<div
|
|
136
|
-
style={{
|
|
137
|
-
height: bottomPadding,
|
|
138
|
-
}}
|
|
139
|
-
/>
|
|
140
119
|
</div>
|
|
141
120
|
)
|
|
142
121
|
},
|
|
143
122
|
)
|
|
144
123
|
|
|
145
124
|
CVirtualScroller.propTypes = {
|
|
146
|
-
itemHeight: PropTypes.number,
|
|
147
|
-
itemsNumber: PropTypes.number,
|
|
148
125
|
onScroll: PropTypes.func,
|
|
149
126
|
visibleItems: PropTypes.number.isRequired,
|
|
150
127
|
}
|
|
@@ -2,10 +2,10 @@ import React, { forwardRef, HTMLAttributes, ReactNode } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { CCard, CCardBody } from '../card'
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { colorPropType } from '../../props'
|
|
8
|
+
import type { Colors } from '../../types'
|
|
9
9
|
|
|
10
10
|
export interface CWidgetStatsAProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
11
11
|
/**
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React, { forwardRef, HTMLAttributes, ReactNode } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { CCard } from '../card/CCard'
|
|
7
|
-
import { CCardBody } from '../card/CCardBody'
|
|
4
|
+
import { CCard, CCardBody } from '../card'
|
|
8
5
|
import { CProgress, CProgressProps } from '../progress/CProgress'
|
|
9
6
|
|
|
7
|
+
import { colorPropType } from '../../props'
|
|
8
|
+
import type { Colors } from '../../types'
|
|
9
|
+
|
|
10
10
|
export interface CWidgetStatsBProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
11
11
|
/**
|
|
12
12
|
* A string of all className you want applied to the base component.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React, { forwardRef, HTMLAttributes, ReactNode } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { CCard } from '../card/CCard'
|
|
7
|
-
import { CCardBody } from '../card/CCardBody'
|
|
4
|
+
import { CCard, CCardBody } from '../card'
|
|
8
5
|
import { CProgress, CProgressProps } from '../progress/CProgress'
|
|
9
6
|
|
|
7
|
+
import { colorPropType } from '../../props'
|
|
8
|
+
import type { Colors } from '../../types'
|
|
9
|
+
|
|
10
10
|
export interface CWidgetStatsCProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
11
11
|
/**
|
|
12
12
|
* A string of all className you want applied to the base component.
|
|
@@ -2,13 +2,12 @@ import React, { forwardRef, HTMLAttributes, ReactNode } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
import { CCard } from '../card/CCard'
|
|
8
|
-
import { CCardBody } from '../card/CCardBody'
|
|
9
|
-
import { CCardHeader } from '../card/CCardHeader'
|
|
5
|
+
import { CCard, CCardBody, CCardHeader } from '../card'
|
|
10
6
|
import { CCol } from '../grid/CCol'
|
|
11
7
|
|
|
8
|
+
import { colorPropType } from '../../props'
|
|
9
|
+
import type { Colors } from '../../types'
|
|
10
|
+
|
|
12
11
|
type Value = {
|
|
13
12
|
title?: string | ReactNode
|
|
14
13
|
value?: number | string | ReactNode
|
|
@@ -2,8 +2,7 @@ import React, { forwardRef, HTMLAttributes, ReactNode } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import { CCard } from '../card
|
|
6
|
-
import { CCardBody } from '../card/CCardBody'
|
|
5
|
+
import { CCard, CCardBody } from '../card'
|
|
7
6
|
|
|
8
7
|
export interface CWidgetStatsEProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
9
8
|
/**
|
|
@@ -2,11 +2,10 @@ import React, { forwardRef, HTMLAttributes, ReactNode } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { CCard, CCardBody, CCardFooter } from '../card'
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { CCardFooter } from '../card/CCardFooter'
|
|
7
|
+
import { colorPropType } from '../../props'
|
|
8
|
+
import type { Colors } from '../../types'
|
|
10
9
|
|
|
11
10
|
export interface CWidgetStatsFProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
12
11
|
/**
|
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
import PropTypes from 'prop-types'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export type Colors =
|
|
6
|
-
| 'primary'
|
|
7
|
-
| 'secondary'
|
|
8
|
-
| 'success'
|
|
9
|
-
| 'danger'
|
|
10
|
-
| 'warning'
|
|
11
|
-
| 'info'
|
|
12
|
-
| 'dark'
|
|
13
|
-
| 'light'
|
|
14
|
-
| string
|
|
3
|
+
import type { Placements, Triggers } from './types'
|
|
15
4
|
|
|
16
5
|
export const colorPropType = PropTypes.oneOfType([
|
|
17
6
|
PropTypes.oneOf([
|
|
@@ -27,16 +16,6 @@ export const colorPropType = PropTypes.oneOfType([
|
|
|
27
16
|
PropTypes.string,
|
|
28
17
|
])
|
|
29
18
|
|
|
30
|
-
export type Gradients =
|
|
31
|
-
| 'primary-gradient'
|
|
32
|
-
| 'secondary-gradient'
|
|
33
|
-
| 'success-gradient'
|
|
34
|
-
| 'danger-gradient'
|
|
35
|
-
| 'warning-gradient'
|
|
36
|
-
| 'info-gradient'
|
|
37
|
-
| 'dark-gradient'
|
|
38
|
-
| 'light-gradient'
|
|
39
|
-
|
|
40
19
|
export const gradientsPropType = PropTypes.oneOf([
|
|
41
20
|
'primary-gradient',
|
|
42
21
|
'secondary-gradient',
|
|
@@ -48,24 +27,6 @@ export const gradientsPropType = PropTypes.oneOf([
|
|
|
48
27
|
'light-gradient',
|
|
49
28
|
])
|
|
50
29
|
|
|
51
|
-
export type Placements =
|
|
52
|
-
| 'auto'
|
|
53
|
-
| 'auto-start'
|
|
54
|
-
| 'auto-end'
|
|
55
|
-
| 'top-end'
|
|
56
|
-
| 'top'
|
|
57
|
-
| 'top-start'
|
|
58
|
-
| 'bottom-end'
|
|
59
|
-
| 'bottom'
|
|
60
|
-
| 'bottom-start'
|
|
61
|
-
| 'right-start'
|
|
62
|
-
| 'right'
|
|
63
|
-
| 'right-end'
|
|
64
|
-
| 'left-start'
|
|
65
|
-
| 'left'
|
|
66
|
-
| 'left-end'
|
|
67
|
-
| undefined
|
|
68
|
-
|
|
69
30
|
export const placementPropType = PropTypes.oneOf<Placements>([
|
|
70
31
|
'auto',
|
|
71
32
|
'auto-start',
|
|
@@ -84,20 +45,6 @@ export const placementPropType = PropTypes.oneOf<Placements>([
|
|
|
84
45
|
'left-end',
|
|
85
46
|
])
|
|
86
47
|
|
|
87
|
-
export type Shapes =
|
|
88
|
-
| 'rounded'
|
|
89
|
-
| 'rounded-top'
|
|
90
|
-
| 'rounded-end'
|
|
91
|
-
| 'rounded-bottom'
|
|
92
|
-
| 'rounded-start'
|
|
93
|
-
| 'rounded-circle'
|
|
94
|
-
| 'rounded-pill'
|
|
95
|
-
| 'rounded-0'
|
|
96
|
-
| 'rounded-1'
|
|
97
|
-
| 'rounded-2'
|
|
98
|
-
| 'rounded-3'
|
|
99
|
-
| string
|
|
100
|
-
|
|
101
48
|
export const shapePropType = PropTypes.oneOfType([
|
|
102
49
|
PropTypes.oneOf([
|
|
103
50
|
'rounded',
|
|
@@ -115,24 +62,10 @@ export const shapePropType = PropTypes.oneOfType([
|
|
|
115
62
|
PropTypes.string,
|
|
116
63
|
])
|
|
117
64
|
|
|
118
|
-
export type TextColors =
|
|
119
|
-
| Colors
|
|
120
|
-
| 'white'
|
|
121
|
-
| 'muted'
|
|
122
|
-
| 'high-emphasis'
|
|
123
|
-
| 'medium-emphasis'
|
|
124
|
-
| 'disabled'
|
|
125
|
-
| 'high-emphasis-inverse'
|
|
126
|
-
| 'medium-emphasis-inverse'
|
|
127
|
-
| 'disabled-inverse'
|
|
128
|
-
| string
|
|
129
|
-
|
|
130
65
|
export const textColorsPropType = PropTypes.oneOfType([
|
|
131
66
|
colorPropType,
|
|
132
67
|
PropTypes.oneOf(['white', 'muted']),
|
|
133
68
|
PropTypes.string,
|
|
134
69
|
])
|
|
135
70
|
|
|
136
|
-
export type Triggers = 'hover' | 'focus' | 'click'
|
|
137
|
-
|
|
138
71
|
export const triggerPropType = PropTypes.oneOf<Triggers>(['hover', 'focus', 'click'])
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type Breakpoints = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'
|
|
2
|
+
|
|
3
|
+
export type Colors =
|
|
4
|
+
| 'primary'
|
|
5
|
+
| 'secondary'
|
|
6
|
+
| 'success'
|
|
7
|
+
| 'danger'
|
|
8
|
+
| 'warning'
|
|
9
|
+
| 'info'
|
|
10
|
+
| 'dark'
|
|
11
|
+
| 'light'
|
|
12
|
+
| string
|
|
13
|
+
|
|
14
|
+
export type Gradients =
|
|
15
|
+
| 'primary-gradient'
|
|
16
|
+
| 'secondary-gradient'
|
|
17
|
+
| 'success-gradient'
|
|
18
|
+
| 'danger-gradient'
|
|
19
|
+
| 'warning-gradient'
|
|
20
|
+
| 'info-gradient'
|
|
21
|
+
| 'dark-gradient'
|
|
22
|
+
| 'light-gradient'
|
|
23
|
+
|
|
24
|
+
export type Placements =
|
|
25
|
+
| 'auto'
|
|
26
|
+
| 'auto-start'
|
|
27
|
+
| 'auto-end'
|
|
28
|
+
| 'top-end'
|
|
29
|
+
| 'top'
|
|
30
|
+
| 'top-start'
|
|
31
|
+
| 'bottom-end'
|
|
32
|
+
| 'bottom'
|
|
33
|
+
| 'bottom-start'
|
|
34
|
+
| 'right-start'
|
|
35
|
+
| 'right'
|
|
36
|
+
| 'right-end'
|
|
37
|
+
| 'left-start'
|
|
38
|
+
| 'left'
|
|
39
|
+
| 'left-end'
|
|
40
|
+
| undefined
|
|
41
|
+
|
|
42
|
+
export type Shapes =
|
|
43
|
+
| 'rounded'
|
|
44
|
+
| 'rounded-top'
|
|
45
|
+
| 'rounded-end'
|
|
46
|
+
| 'rounded-bottom'
|
|
47
|
+
| 'rounded-start'
|
|
48
|
+
| 'rounded-circle'
|
|
49
|
+
| 'rounded-pill'
|
|
50
|
+
| 'rounded-0'
|
|
51
|
+
| 'rounded-1'
|
|
52
|
+
| 'rounded-2'
|
|
53
|
+
| 'rounded-3'
|
|
54
|
+
| string
|
|
55
|
+
|
|
56
|
+
export type TextColors =
|
|
57
|
+
| Colors
|
|
58
|
+
| 'white'
|
|
59
|
+
| 'muted'
|
|
60
|
+
| 'high-emphasis'
|
|
61
|
+
| 'medium-emphasis'
|
|
62
|
+
| 'disabled'
|
|
63
|
+
| 'high-emphasis-inverse'
|
|
64
|
+
| 'medium-emphasis-inverse'
|
|
65
|
+
| 'disabled-inverse'
|
|
66
|
+
| string
|
|
67
|
+
|
|
68
|
+
export type Triggers = 'hover' | 'focus' | 'click'
|
package/src/utils/index.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import getNextSibling from './getNextSibling'
|
|
2
|
-
import getPreviousSibling from './getPreviousSibling'
|
|
3
1
|
import isInViewport from './isInViewport'
|
|
4
2
|
import isObjectInArray from './isObjectInArray'
|
|
5
3
|
|
|
6
|
-
export {
|
|
4
|
+
export { isInViewport, isObjectInArray }
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// TODO: check if component property is necessary.
|
|
2
|
-
|
|
3
|
-
import React, { forwardRef, HTMLAttributes } from 'react'
|
|
4
|
-
|
|
5
|
-
export const CMultiSelectCleaner = forwardRef<HTMLButtonElement, HTMLAttributes<HTMLButtonElement>>(
|
|
6
|
-
(props, ref) => {
|
|
7
|
-
return (
|
|
8
|
-
<button
|
|
9
|
-
type="button"
|
|
10
|
-
className="form-multi-select-selection-cleaner"
|
|
11
|
-
{...props}
|
|
12
|
-
ref={ref}
|
|
13
|
-
></button>
|
|
14
|
-
)
|
|
15
|
-
},
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
CMultiSelectCleaner.displayName = 'CMultiSelectCleaner'
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
const getNextSibling = (elem: HTMLElement, selector?: string) => {
|
|
2
|
-
// Get the next sibling element
|
|
3
|
-
let sibling = elem.nextElementSibling
|
|
4
|
-
|
|
5
|
-
// If there's no selector, return the first sibling
|
|
6
|
-
if (!selector) return sibling
|
|
7
|
-
|
|
8
|
-
// If the sibling matches our selector, use it
|
|
9
|
-
// If not, jump to the next sibling and continue the loop
|
|
10
|
-
while (sibling) {
|
|
11
|
-
if (sibling.matches(selector)) return sibling
|
|
12
|
-
sibling = sibling.nextElementSibling
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default getNextSibling
|