@coreui/react 5.0.0-rc.3 → 5.1.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.
- package/README.md +1 -1
- package/dist/cjs/components/badge/CBadge.d.ts +1 -1
- package/dist/cjs/components/card/CCard.d.ts +1 -1
- package/dist/cjs/components/dropdown/CDropdown.js +2 -1
- package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +1 -1
- package/dist/cjs/components/dropdown/utils.d.ts +0 -1
- package/dist/cjs/components/dropdown/utils.js +0 -13
- package/dist/cjs/components/dropdown/utils.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroup.d.ts +1 -1
- package/dist/cjs/components/nav/CNavGroupItems.d.ts +1 -1
- package/dist/cjs/components/nav/CNavItem.d.ts +1 -1
- package/dist/cjs/components/popover/CPopover.js +41 -40
- package/dist/cjs/components/popover/CPopover.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarBrand.d.ts +1 -1
- package/dist/cjs/components/sidebar/CSidebarNav.d.ts +1 -1
- package/dist/cjs/components/tabs/CTab.d.ts +12 -0
- package/dist/cjs/components/tabs/CTab.js +25 -0
- package/dist/cjs/components/tabs/CTab.js.map +1 -0
- package/dist/cjs/components/tabs/CTabList.d.ts +16 -0
- package/dist/cjs/components/tabs/CTabList.js +54 -0
- package/dist/cjs/components/tabs/CTabList.js.map +1 -0
- package/dist/cjs/components/tabs/CTabPane.d.ts +6 -0
- package/dist/cjs/components/tabs/CTabPane.js +4 -2
- package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
- package/dist/cjs/components/tabs/CTabPanel.d.ts +28 -0
- package/dist/cjs/components/tabs/CTabPanel.js +43 -0
- package/dist/cjs/components/tabs/CTabPanel.js.map +1 -0
- package/dist/cjs/components/tabs/CTabs.d.ts +22 -0
- package/dist/cjs/components/tabs/CTabs.js +28 -0
- package/dist/cjs/components/tabs/CTabs.js.map +1 -0
- package/dist/cjs/components/tabs/index.d.ts +5 -1
- package/dist/cjs/components/tooltip/CTooltip.js +44 -40
- package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
- package/dist/cjs/hooks/usePopper.d.ts +1 -0
- package/dist/cjs/hooks/usePopper.js +11 -4
- package/dist/cjs/hooks/usePopper.js.map +1 -1
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js +1 -2
- package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -1
- package/dist/cjs/node_modules/react-transition-group/esm/Transition.js +1 -2
- package/dist/cjs/node_modules/react-transition-group/esm/Transition.js.map +1 -1
- package/dist/cjs/utils/getNextActiveElement.d.ts +2 -0
- package/dist/cjs/utils/getNextActiveElement.js +19 -0
- package/dist/cjs/utils/getNextActiveElement.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +2 -1
- package/dist/esm/components/badge/CBadge.d.ts +1 -1
- package/dist/esm/components/card/CCard.d.ts +1 -1
- package/dist/esm/components/dropdown/CDropdown.js +2 -1
- package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdownToggle.d.ts +1 -1
- package/dist/esm/components/dropdown/utils.d.ts +0 -1
- package/dist/esm/components/dropdown/utils.js +1 -13
- package/dist/esm/components/dropdown/utils.js.map +1 -1
- package/dist/esm/components/nav/CNavGroup.d.ts +1 -1
- package/dist/esm/components/nav/CNavGroupItems.d.ts +1 -1
- package/dist/esm/components/nav/CNavItem.d.ts +1 -1
- package/dist/esm/components/popover/CPopover.js +41 -40
- package/dist/esm/components/popover/CPopover.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarBrand.d.ts +1 -1
- package/dist/esm/components/sidebar/CSidebarNav.d.ts +1 -1
- package/dist/esm/components/tabs/CTab.d.ts +12 -0
- package/dist/esm/components/tabs/CTab.js +23 -0
- package/dist/esm/components/tabs/CTab.js.map +1 -0
- package/dist/esm/components/tabs/CTabList.d.ts +16 -0
- package/dist/esm/components/tabs/CTabList.js +52 -0
- package/dist/esm/components/tabs/CTabList.js.map +1 -0
- package/dist/esm/components/tabs/CTabPane.d.ts +6 -0
- package/dist/esm/components/tabs/CTabPane.js +4 -2
- package/dist/esm/components/tabs/CTabPane.js.map +1 -1
- package/dist/esm/components/tabs/CTabPanel.d.ts +28 -0
- package/dist/esm/components/tabs/CTabPanel.js +41 -0
- package/dist/esm/components/tabs/CTabPanel.js.map +1 -0
- package/dist/esm/components/tabs/CTabs.d.ts +22 -0
- package/dist/esm/components/tabs/CTabs.js +25 -0
- package/dist/esm/components/tabs/CTabs.js.map +1 -0
- package/dist/esm/components/tabs/index.d.ts +5 -1
- package/dist/esm/components/tooltip/CTooltip.js +44 -40
- package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
- package/dist/esm/hooks/usePopper.d.ts +1 -0
- package/dist/esm/hooks/usePopper.js +11 -4
- package/dist/esm/hooks/usePopper.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/react-transition-group/esm/CSSTransition.js +1 -2
- package/dist/esm/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -1
- package/dist/esm/node_modules/react-transition-group/esm/Transition.js +1 -2
- package/dist/esm/node_modules/react-transition-group/esm/Transition.js.map +1 -1
- package/dist/esm/utils/getNextActiveElement.d.ts +2 -0
- package/dist/esm/utils/getNextActiveElement.js +15 -0
- package/dist/esm/utils/getNextActiveElement.js.map +1 -0
- package/dist/esm/utils/index.d.ts +2 -1
- package/package.json +12 -12
- package/src/components/badge/CBadge.tsx +1 -1
- package/src/components/card/CCard.tsx +1 -1
- package/src/components/dropdown/CDropdown.tsx +2 -2
- package/src/components/dropdown/CDropdownToggle.tsx +1 -1
- package/src/components/dropdown/utils.ts +0 -22
- package/src/components/nav/CNavGroup.tsx +1 -1
- package/src/components/nav/CNavGroupItems.tsx +1 -1
- package/src/components/nav/CNavItem.tsx +1 -1
- package/src/components/popover/CPopover.tsx +51 -66
- package/src/components/sidebar/CSidebarBrand.tsx +1 -1
- package/src/components/sidebar/CSidebarNav.tsx +1 -1
- package/src/components/tabs/CTab.tsx +56 -0
- package/src/components/tabs/CTabList.tsx +92 -0
- package/src/components/tabs/CTabPane.tsx +9 -2
- package/src/components/tabs/CTabPanel.tsx +98 -0
- package/src/components/tabs/CTabs.tsx +54 -0
- package/src/components/tabs/index.ts +5 -1
- package/src/components/tooltip/CTooltip.tsx +55 -66
- package/src/hooks/usePopper.ts +15 -5
- package/src/utils/getNextActiveElement.ts +23 -0
- package/src/utils/index.ts +2 -0
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
import { CTab } from './CTab'
|
|
1
2
|
import { CTabContent } from './CTabContent'
|
|
2
3
|
import { CTabPane } from './CTabPane'
|
|
4
|
+
import { CTabPanel } from './CTabPanel'
|
|
5
|
+
import { CTabList } from './CTabList'
|
|
6
|
+
import { CTabs } from './CTabs'
|
|
3
7
|
|
|
4
|
-
export { CTabContent, CTabPane }
|
|
8
|
+
export { CTab, CTabContent, CTabList, CTabPane, CTabPanel, CTabs }
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import React, { forwardRef, HTMLAttributes, ReactNode, useRef, useEffect, useState } from 'react'
|
|
2
2
|
import classNames from 'classnames'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
|
-
import { Transition } from 'react-transition-group'
|
|
5
4
|
|
|
6
5
|
import { CConditionalPortal } from '../conditional-portal'
|
|
7
6
|
import { useForkedRef, usePopper } from '../../hooks'
|
|
8
7
|
import { fallbackPlacementsPropType, triggerPropType } from '../../props'
|
|
9
8
|
import type { Placements, Triggers } from '../../types'
|
|
10
|
-
import {
|
|
9
|
+
import { executeAfterTransition, getRTLPlacement } from '../../utils'
|
|
11
10
|
|
|
12
11
|
export interface CTooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {
|
|
13
12
|
/**
|
|
@@ -95,7 +94,8 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
|
|
|
95
94
|
const forkedRef = useForkedRef(ref, tooltipRef)
|
|
96
95
|
const uID = useRef(`tooltip${Math.floor(Math.random() * 1_000_000)}`)
|
|
97
96
|
|
|
98
|
-
const { initPopper, destroyPopper } = usePopper()
|
|
97
|
+
const { initPopper, destroyPopper, updatePopper } = usePopper()
|
|
98
|
+
const [mounted, setMounted] = useState(false)
|
|
99
99
|
const [_visible, setVisible] = useState(visible)
|
|
100
100
|
|
|
101
101
|
const _delay = typeof delay === 'number' ? { show: delay, hide: delay } : delay
|
|
@@ -128,14 +128,43 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
|
|
|
128
128
|
setVisible(visible)
|
|
129
129
|
}, [visible])
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
if (
|
|
133
|
-
|
|
134
|
-
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
if (_visible) {
|
|
133
|
+
setMounted(true)
|
|
134
|
+
|
|
135
|
+
if (tooltipRef.current) {
|
|
136
|
+
tooltipRef.current.classList.remove('fade', 'show')
|
|
137
|
+
destroyPopper()
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
setTimeout(() => {
|
|
141
|
+
if (togglerRef.current && tooltipRef.current) {
|
|
142
|
+
if (animation) {
|
|
143
|
+
tooltipRef.current.classList.add('fade')
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
initPopper(togglerRef.current, tooltipRef.current, popperConfig)
|
|
147
|
+
tooltipRef.current.classList.add('show')
|
|
148
|
+
onShow && onShow()
|
|
149
|
+
}
|
|
150
|
+
}, _delay.show)
|
|
135
151
|
}
|
|
136
152
|
|
|
137
|
-
|
|
138
|
-
|
|
153
|
+
return () => {
|
|
154
|
+
if (tooltipRef.current) {
|
|
155
|
+
tooltipRef.current.classList.remove('show')
|
|
156
|
+
onHide && onHide()
|
|
157
|
+
executeAfterTransition(() => {
|
|
158
|
+
destroyPopper()
|
|
159
|
+
setMounted(false)
|
|
160
|
+
}, tooltipRef.current)
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}, [_visible])
|
|
164
|
+
|
|
165
|
+
useEffect(() => {
|
|
166
|
+
updatePopper()
|
|
167
|
+
}, [content])
|
|
139
168
|
|
|
140
169
|
return (
|
|
141
170
|
<>
|
|
@@ -145,70 +174,30 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
|
|
|
145
174
|
}),
|
|
146
175
|
ref: togglerRef,
|
|
147
176
|
...((trigger === 'click' || trigger.includes('click')) && {
|
|
148
|
-
onClick: () =>
|
|
177
|
+
onClick: () => setVisible(!_visible),
|
|
149
178
|
}),
|
|
150
179
|
...((trigger === 'focus' || trigger.includes('focus')) && {
|
|
151
|
-
onFocus: () =>
|
|
152
|
-
onBlur: () =>
|
|
180
|
+
onFocus: () => setVisible(true),
|
|
181
|
+
onBlur: () => setVisible(false),
|
|
153
182
|
}),
|
|
154
183
|
...((trigger === 'hover' || trigger.includes('hover')) && {
|
|
155
|
-
onMouseEnter: () =>
|
|
156
|
-
onMouseLeave: () =>
|
|
184
|
+
onMouseEnter: () => setVisible(true),
|
|
185
|
+
onMouseLeave: () => setVisible(false),
|
|
157
186
|
}),
|
|
158
187
|
})}
|
|
159
188
|
<CConditionalPortal container={container} portal={true}>
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (togglerRef.current && tooltipRef.current) {
|
|
173
|
-
tooltipRef.current.style.display = 'initial'
|
|
174
|
-
}
|
|
175
|
-
}}
|
|
176
|
-
onExit={onHide}
|
|
177
|
-
onExited={() => {
|
|
178
|
-
destroyPopper()
|
|
179
|
-
}}
|
|
180
|
-
timeout={{
|
|
181
|
-
enter: 0,
|
|
182
|
-
exit: tooltipRef.current
|
|
183
|
-
? getTransitionDurationFromElement(tooltipRef.current) + 50
|
|
184
|
-
: 200,
|
|
185
|
-
}}
|
|
186
|
-
unmountOnExit
|
|
187
|
-
>
|
|
188
|
-
{(state) => (
|
|
189
|
-
<div
|
|
190
|
-
className={classNames(
|
|
191
|
-
'tooltip',
|
|
192
|
-
'bs-tooltip-auto',
|
|
193
|
-
{
|
|
194
|
-
fade: animation,
|
|
195
|
-
show: state === 'entered',
|
|
196
|
-
},
|
|
197
|
-
className,
|
|
198
|
-
)}
|
|
199
|
-
id={uID.current}
|
|
200
|
-
ref={forkedRef}
|
|
201
|
-
role="tooltip"
|
|
202
|
-
style={{
|
|
203
|
-
display: 'none',
|
|
204
|
-
}}
|
|
205
|
-
{...rest}
|
|
206
|
-
>
|
|
207
|
-
<div className="tooltip-arrow"></div>
|
|
208
|
-
<div className="tooltip-inner">{content}</div>
|
|
209
|
-
</div>
|
|
210
|
-
)}
|
|
211
|
-
</Transition>
|
|
189
|
+
{mounted && (
|
|
190
|
+
<div
|
|
191
|
+
className={classNames('tooltip', 'bs-tooltip-auto', className)}
|
|
192
|
+
id={uID.current}
|
|
193
|
+
ref={forkedRef}
|
|
194
|
+
role="tooltip"
|
|
195
|
+
{...rest}
|
|
196
|
+
>
|
|
197
|
+
<div className="tooltip-arrow"></div>
|
|
198
|
+
<div className="tooltip-inner">{content}</div>
|
|
199
|
+
</div>
|
|
200
|
+
)}
|
|
212
201
|
</CConditionalPortal>
|
|
213
202
|
</>
|
|
214
203
|
)
|
package/src/hooks/usePopper.ts
CHANGED
|
@@ -2,12 +2,11 @@ import { useRef } from 'react'
|
|
|
2
2
|
import { createPopper } from '@popperjs/core'
|
|
3
3
|
import type { Instance, Options } from '@popperjs/core'
|
|
4
4
|
|
|
5
|
-
import { executeAfterTransition } from '../utils'
|
|
6
|
-
|
|
7
5
|
interface UsePopperOutput {
|
|
8
6
|
popper: Instance | undefined
|
|
9
7
|
initPopper: (reference: HTMLElement, popper: HTMLElement, options: Partial<Options>) => void
|
|
10
8
|
destroyPopper: () => void
|
|
9
|
+
updatePopper: (options?: Partial<Options>) => void
|
|
11
10
|
}
|
|
12
11
|
|
|
13
12
|
export const usePopper = (): UsePopperOutput => {
|
|
@@ -23,17 +22,28 @@ export const usePopper = (): UsePopperOutput => {
|
|
|
23
22
|
const popperInstance = _popper.current
|
|
24
23
|
|
|
25
24
|
if (popperInstance && el.current) {
|
|
26
|
-
|
|
27
|
-
popperInstance.destroy()
|
|
28
|
-
}, el.current)
|
|
25
|
+
popperInstance.destroy()
|
|
29
26
|
}
|
|
30
27
|
|
|
31
28
|
_popper.current = undefined
|
|
32
29
|
}
|
|
33
30
|
|
|
31
|
+
const updatePopper = (options?: Partial<Options>) => {
|
|
32
|
+
const popperInstance = _popper.current
|
|
33
|
+
|
|
34
|
+
if (popperInstance && options) {
|
|
35
|
+
popperInstance.setOptions(options)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (popperInstance) {
|
|
39
|
+
popperInstance.update()
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
34
43
|
return {
|
|
35
44
|
popper: _popper.current,
|
|
36
45
|
initPopper,
|
|
37
46
|
destroyPopper,
|
|
47
|
+
updatePopper,
|
|
38
48
|
}
|
|
39
49
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const getNextActiveElement = (
|
|
2
|
+
list: HTMLElement[],
|
|
3
|
+
activeElement: HTMLElement,
|
|
4
|
+
shouldGetNext: boolean,
|
|
5
|
+
isCycleAllowed: boolean,
|
|
6
|
+
) => {
|
|
7
|
+
const listLength = list.length
|
|
8
|
+
let index = list.indexOf(activeElement)
|
|
9
|
+
|
|
10
|
+
if (index === -1) {
|
|
11
|
+
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
index += shouldGetNext ? 1 : -1
|
|
15
|
+
|
|
16
|
+
if (isCycleAllowed) {
|
|
17
|
+
index = (index + listLength) % listLength
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return list[Math.max(0, Math.min(index, listLength - 1))]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default getNextActiveElement
|
package/src/utils/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import executeAfterTransition from './executeAfterTransition'
|
|
2
|
+
import getNextActiveElement from './getNextActiveElement'
|
|
2
3
|
import getRTLPlacement from './getRTLPlacement'
|
|
3
4
|
import getTransitionDurationFromElement from './getTransitionDurationFromElement'
|
|
4
5
|
import isInViewport from './isInViewport'
|
|
@@ -6,6 +7,7 @@ import isRTL from './isRTL'
|
|
|
6
7
|
|
|
7
8
|
export {
|
|
8
9
|
executeAfterTransition,
|
|
10
|
+
getNextActiveElement,
|
|
9
11
|
getRTLPlacement,
|
|
10
12
|
getTransitionDurationFromElement,
|
|
11
13
|
isInViewport,
|