@veracity/vui 2.5.1 → 2.6.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/dist/cjs/box/box.js +3 -4
- package/dist/cjs/box/box.types.d.ts +2 -0
- package/dist/cjs/box/box.types.d.ts.map +1 -1
- package/dist/cjs/button/button.types.d.ts +1 -1
- package/dist/cjs/button/button.types.d.ts.map +1 -1
- package/dist/cjs/buttonGroup/buttonGroup.d.ts.map +1 -1
- package/dist/cjs/buttonGroup/buttonGroup.js +0 -4
- package/dist/cjs/core/links.d.ts.map +1 -1
- package/dist/cjs/core/links.js +3 -6
- package/dist/cjs/dialog/dialog.js +2 -2
- package/dist/cjs/dialog/dialogCloseButton.d.ts.map +1 -1
- package/dist/cjs/dialog/dialogCloseButton.js +1 -1
- package/dist/cjs/footer/footer.d.ts.map +1 -1
- package/dist/cjs/footer/footer.js +51 -7
- package/dist/cjs/footer/footer.types.d.ts +1 -0
- package/dist/cjs/footer/footer.types.d.ts.map +1 -1
- package/dist/cjs/footer/footerColumn.d.ts.map +1 -1
- package/dist/cjs/footer/footerColumn.js +1 -1
- package/dist/cjs/footer/footerContent.d.ts.map +1 -1
- package/dist/cjs/footer/footerContent.js +1 -1
- package/dist/cjs/footer/footerLink.js +1 -1
- package/dist/cjs/footer/footerSlimColumn.d.ts +5 -0
- package/dist/cjs/footer/footerSlimColumn.d.ts.map +1 -0
- package/dist/cjs/footer/footerSlimColumn.js +28 -0
- package/dist/cjs/footer/footerTrademark.d.ts +1 -0
- package/dist/cjs/footer/footerTrademark.d.ts.map +1 -1
- package/dist/cjs/footer/footerTrademark.js +5 -3
- package/dist/cjs/footer/theme.d.ts +38 -2
- package/dist/cjs/footer/theme.d.ts.map +1 -1
- package/dist/cjs/footer/theme.js +38 -2
- package/dist/cjs/header/headerAccount.d.ts.map +1 -1
- package/dist/cjs/header/headerAccount.js +1 -1
- package/dist/cjs/header/headerAccountUserInfo.d.ts.map +1 -1
- package/dist/cjs/header/headerAccountUserInfo.js +1 -3
- package/dist/cjs/header/headerDivider.js +1 -1
- package/dist/cjs/header/headerMobileToggle.d.ts.map +1 -1
- package/dist/cjs/header/headerMobileToggle.js +1 -1
- package/dist/cjs/header/headerServices.d.ts.map +1 -1
- package/dist/cjs/header/headerServices.js +1 -1
- package/dist/cjs/heading/heading.d.ts +1 -1
- package/dist/cjs/heading/heading.d.ts.map +1 -1
- package/dist/cjs/heading/heading.js +1 -1
- package/dist/cjs/icons/baseIcons/cub/cubCircleFB.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleFB.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleFB.js +7 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleLinkedIn.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleLinkedIn.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleLinkedIn.js +8 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleTwitter.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleTwitter.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleTwitter.js +8 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleYoutube.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleYoutube.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/cub/cubCircleYoutube.js +7 -0
- package/dist/cjs/icons/baseIcons/icons.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/icons.d.ts.map +1 -1
- package/dist/cjs/icons/baseIcons/icons.js +16 -8
- package/dist/cjs/icons/baseIcons/types.d.ts +1 -1
- package/dist/cjs/icons/baseIcons/types.d.ts.map +1 -1
- package/dist/cjs/input/input.d.ts +1 -0
- package/dist/cjs/input/input.d.ts.map +1 -1
- package/dist/cjs/input/input.js +40 -31
- package/dist/cjs/input/input.types.d.ts +2 -2
- package/dist/cjs/input/input.types.d.ts.map +1 -1
- package/dist/cjs/input/inputInput.d.ts.map +1 -1
- package/dist/cjs/input/inputInput.js +1 -1
- package/dist/cjs/link/link.types.d.ts +1 -1
- package/dist/cjs/link/link.types.d.ts.map +1 -1
- package/dist/cjs/link/theme.d.ts +20 -22
- package/dist/cjs/link/theme.d.ts.map +1 -1
- package/dist/cjs/link/theme.js +25 -31
- package/dist/cjs/list/list.d.ts.map +1 -1
- package/dist/cjs/list/list.js +2 -2
- package/dist/cjs/list/list.types.d.ts +2 -2
- package/dist/cjs/list/list.types.d.ts.map +1 -1
- package/dist/cjs/list/listHeading.d.ts.map +1 -1
- package/dist/cjs/list/listHeading.js +1 -1
- package/dist/cjs/list/listItem.d.ts.map +1 -1
- package/dist/cjs/list/listItem.js +2 -3
- package/dist/cjs/list/theme.d.ts +40 -35
- package/dist/cjs/list/theme.d.ts.map +1 -1
- package/dist/cjs/list/theme.js +44 -45
- package/dist/cjs/logo/Logo.d.ts +1 -1
- package/dist/cjs/logo/Logo.d.ts.map +1 -1
- package/dist/cjs/logo/Logo.js +1 -1
- package/dist/cjs/menu/menuList.js +1 -1
- package/dist/cjs/modal/modal.d.ts.map +1 -1
- package/dist/cjs/modal/modal.js +1 -1
- package/dist/cjs/modal/modalBackdrop.d.ts.map +1 -1
- package/dist/cjs/modal/modalBackdrop.js +5 -4
- package/dist/cjs/select/select.d.ts +1 -1
- package/dist/cjs/select/select.d.ts.map +1 -1
- package/dist/cjs/select/select.js +40 -3
- package/dist/cjs/select/select.types.d.ts +2 -0
- package/dist/cjs/select/select.types.d.ts.map +1 -1
- package/dist/cjs/select/selectButton.d.ts.map +1 -1
- package/dist/cjs/select/selectButton.js +1 -1
- package/dist/cjs/sidemenu/consts.d.ts +0 -4
- package/dist/cjs/sidemenu/consts.d.ts.map +1 -1
- package/dist/cjs/sidemenu/consts.js +1 -5
- package/dist/cjs/sidemenu/sidemenu.d.ts.map +1 -1
- package/dist/cjs/sidemenu/sidemenu.js +5 -7
- package/dist/cjs/system/effects.d.ts +1 -0
- package/dist/cjs/system/effects.d.ts.map +1 -1
- package/dist/cjs/tabs/consts.d.ts +10 -0
- package/dist/cjs/tabs/consts.d.ts.map +1 -0
- package/dist/cjs/tabs/consts.js +17 -0
- package/dist/cjs/tabs/tab.d.ts.map +1 -1
- package/dist/cjs/tabs/tab.js +1 -4
- package/dist/cjs/tabs/tabs.d.ts +1 -1
- package/dist/cjs/tabs/tabs.js +1 -1
- package/dist/cjs/tabs/tabs.types.d.ts +1 -0
- package/dist/cjs/tabs/tabs.types.d.ts.map +1 -1
- package/dist/cjs/tabs/tabsNavBar.d.ts.map +1 -1
- package/dist/cjs/tabs/tabsNavBar.js +6 -10
- package/dist/cjs/theme/components.d.ts +89 -45
- package/dist/cjs/theme/components.d.ts.map +1 -1
- package/dist/cjs/theme/defaultTheme.d.ts +90 -45
- package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
- package/dist/cjs/theme/foundations/index.d.ts +1 -0
- package/dist/cjs/theme/foundations/index.d.ts.map +1 -1
- package/dist/cjs/theme/foundations/shadows.d.ts +1 -0
- package/dist/cjs/theme/foundations/shadows.d.ts.map +1 -1
- package/dist/cjs/theme/foundations/shadows.js +3 -1
- package/dist/cjs/theme/types.d.ts +1 -0
- package/dist/cjs/theme/types.d.ts.map +1 -1
- package/dist/cjs/utils/styles.d.ts +10 -0
- package/dist/cjs/utils/styles.d.ts.map +1 -1
- package/dist/cjs/utils/styles.js +55 -2
- package/dist/esm/box/box.js +3 -4
- package/dist/esm/box/box.types.d.ts +2 -0
- package/dist/esm/box/box.types.d.ts.map +1 -1
- package/dist/esm/button/button.types.d.ts +1 -1
- package/dist/esm/button/button.types.d.ts.map +1 -1
- package/dist/esm/buttonGroup/buttonGroup.d.ts.map +1 -1
- package/dist/esm/buttonGroup/buttonGroup.js +0 -4
- package/dist/esm/core/links.d.ts.map +1 -1
- package/dist/esm/core/links.js +3 -6
- package/dist/esm/dialog/dialog.js +2 -2
- package/dist/esm/dialog/dialogCloseButton.d.ts.map +1 -1
- package/dist/esm/dialog/dialogCloseButton.js +1 -1
- package/dist/esm/footer/footer.d.ts.map +1 -1
- package/dist/esm/footer/footer.js +51 -8
- package/dist/esm/footer/footer.types.d.ts +1 -0
- package/dist/esm/footer/footer.types.d.ts.map +1 -1
- package/dist/esm/footer/footerColumn.d.ts.map +1 -1
- package/dist/esm/footer/footerColumn.js +1 -1
- package/dist/esm/footer/footerContent.d.ts.map +1 -1
- package/dist/esm/footer/footerContent.js +1 -1
- package/dist/esm/footer/footerLink.js +1 -1
- package/dist/esm/footer/footerSlimColumn.d.ts +5 -0
- package/dist/esm/footer/footerSlimColumn.d.ts.map +1 -0
- package/dist/esm/footer/footerSlimColumn.js +12 -0
- package/dist/esm/footer/footerTrademark.d.ts +1 -0
- package/dist/esm/footer/footerTrademark.d.ts.map +1 -1
- package/dist/esm/footer/footerTrademark.js +4 -2
- package/dist/esm/footer/theme.d.ts +38 -2
- package/dist/esm/footer/theme.d.ts.map +1 -1
- package/dist/esm/footer/theme.js +38 -2
- package/dist/esm/header/headerAccount.d.ts.map +1 -1
- package/dist/esm/header/headerAccount.js +1 -1
- package/dist/esm/header/headerAccountUserInfo.d.ts.map +1 -1
- package/dist/esm/header/headerAccountUserInfo.js +1 -3
- package/dist/esm/header/headerDivider.js +1 -1
- package/dist/esm/header/headerMobileToggle.d.ts.map +1 -1
- package/dist/esm/header/headerMobileToggle.js +1 -1
- package/dist/esm/header/headerServices.d.ts.map +1 -1
- package/dist/esm/header/headerServices.js +1 -1
- package/dist/esm/heading/heading.d.ts +1 -1
- package/dist/esm/heading/heading.d.ts.map +1 -1
- package/dist/esm/heading/heading.js +1 -1
- package/dist/esm/icons/baseIcons/cub/cubCircleFB.d.ts +4 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleFB.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleFB.js +5 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleLinkedIn.d.ts +4 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleLinkedIn.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleLinkedIn.js +6 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleTwitter.d.ts +4 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleTwitter.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleTwitter.js +6 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleYoutube.d.ts +4 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleYoutube.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/cub/cubCircleYoutube.js +5 -0
- package/dist/esm/icons/baseIcons/icons.d.ts +4 -0
- package/dist/esm/icons/baseIcons/icons.d.ts.map +1 -1
- package/dist/esm/icons/baseIcons/icons.js +4 -0
- package/dist/esm/icons/baseIcons/types.d.ts +1 -1
- package/dist/esm/icons/baseIcons/types.d.ts.map +1 -1
- package/dist/esm/input/input.d.ts +1 -0
- package/dist/esm/input/input.d.ts.map +1 -1
- package/dist/esm/input/input.js +40 -31
- package/dist/esm/input/input.types.d.ts +2 -2
- package/dist/esm/input/input.types.d.ts.map +1 -1
- package/dist/esm/input/inputInput.d.ts.map +1 -1
- package/dist/esm/input/inputInput.js +1 -1
- package/dist/esm/link/link.types.d.ts +1 -1
- package/dist/esm/link/link.types.d.ts.map +1 -1
- package/dist/esm/link/theme.d.ts +20 -22
- package/dist/esm/link/theme.d.ts.map +1 -1
- package/dist/esm/link/theme.js +25 -31
- package/dist/esm/list/list.d.ts.map +1 -1
- package/dist/esm/list/list.js +2 -2
- package/dist/esm/list/list.types.d.ts +2 -2
- package/dist/esm/list/list.types.d.ts.map +1 -1
- package/dist/esm/list/listHeading.d.ts.map +1 -1
- package/dist/esm/list/listHeading.js +1 -1
- package/dist/esm/list/listItem.d.ts.map +1 -1
- package/dist/esm/list/listItem.js +2 -3
- package/dist/esm/list/theme.d.ts +40 -35
- package/dist/esm/list/theme.d.ts.map +1 -1
- package/dist/esm/list/theme.js +44 -45
- package/dist/esm/logo/Logo.d.ts +1 -1
- package/dist/esm/logo/Logo.d.ts.map +1 -1
- package/dist/esm/logo/Logo.js +1 -1
- package/dist/esm/menu/menuList.js +1 -1
- package/dist/esm/modal/modal.d.ts.map +1 -1
- package/dist/esm/modal/modal.js +1 -1
- package/dist/esm/modal/modalBackdrop.d.ts.map +1 -1
- package/dist/esm/modal/modalBackdrop.js +6 -5
- package/dist/esm/select/select.d.ts +1 -1
- package/dist/esm/select/select.d.ts.map +1 -1
- package/dist/esm/select/select.js +16 -3
- package/dist/esm/select/select.types.d.ts +2 -0
- package/dist/esm/select/select.types.d.ts.map +1 -1
- package/dist/esm/select/selectButton.d.ts.map +1 -1
- package/dist/esm/select/selectButton.js +1 -1
- package/dist/esm/sidemenu/consts.d.ts +0 -4
- package/dist/esm/sidemenu/consts.d.ts.map +1 -1
- package/dist/esm/sidemenu/consts.js +0 -4
- package/dist/esm/sidemenu/sidemenu.d.ts.map +1 -1
- package/dist/esm/sidemenu/sidemenu.js +6 -8
- package/dist/esm/system/effects.d.ts +1 -0
- package/dist/esm/system/effects.d.ts.map +1 -1
- package/dist/esm/tabs/consts.d.ts +10 -0
- package/dist/esm/tabs/consts.d.ts.map +1 -0
- package/dist/esm/tabs/consts.js +14 -0
- package/dist/esm/tabs/tab.d.ts.map +1 -1
- package/dist/esm/tabs/tab.js +1 -4
- package/dist/esm/tabs/tabs.d.ts +1 -1
- package/dist/esm/tabs/tabs.js +1 -1
- package/dist/esm/tabs/tabs.types.d.ts +1 -0
- package/dist/esm/tabs/tabs.types.d.ts.map +1 -1
- package/dist/esm/tabs/tabsNavBar.d.ts.map +1 -1
- package/dist/esm/tabs/tabsNavBar.js +5 -9
- package/dist/esm/theme/components.d.ts +89 -45
- package/dist/esm/theme/components.d.ts.map +1 -1
- package/dist/esm/theme/defaultTheme.d.ts +90 -45
- package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
- package/dist/esm/theme/foundations/index.d.ts +1 -0
- package/dist/esm/theme/foundations/index.d.ts.map +1 -1
- package/dist/esm/theme/foundations/shadows.d.ts +1 -0
- package/dist/esm/theme/foundations/shadows.d.ts.map +1 -1
- package/dist/esm/theme/foundations/shadows.js +3 -1
- package/dist/esm/theme/types.d.ts +1 -0
- package/dist/esm/theme/types.d.ts.map +1 -1
- package/dist/esm/utils/styles.d.ts +10 -0
- package/dist/esm/utils/styles.d.ts.map +1 -1
- package/dist/esm/utils/styles.js +50 -1
- package/package.json +1 -1
- package/src/box/box.tsx +5 -5
- package/src/box/box.types.ts +2 -0
- package/src/button/button.types.ts +1 -1
- package/src/buttonGroup/buttonGroup.tsx +0 -4
- package/src/core/links.tsx +3 -8
- package/src/dialog/dialog.tsx +2 -2
- package/src/dialog/dialogCloseButton.tsx +1 -3
- package/src/footer/footer.tsx +100 -22
- package/src/footer/footer.types.ts +1 -0
- package/src/footer/footerColumn.tsx +3 -2
- package/src/footer/footerContent.tsx +2 -1
- package/src/footer/footerLink.tsx +1 -1
- package/src/footer/footerSlimColumn.tsx +30 -0
- package/src/footer/footerTrademark.tsx +5 -4
- package/src/footer/theme.ts +40 -2
- package/src/header/headerAccount.tsx +1 -2
- package/src/header/headerAccountUserInfo.tsx +1 -7
- package/src/header/headerDivider.tsx +1 -1
- package/src/header/headerMobileToggle.tsx +0 -1
- package/src/header/headerServices.tsx +1 -8
- package/src/heading/heading.tsx +1 -1
- package/src/icons/baseIcons/cub/cubCircleFB.ts +8 -0
- package/src/icons/baseIcons/cub/cubCircleLinkedIn.ts +9 -0
- package/src/icons/baseIcons/cub/cubCircleTwitter.ts +9 -0
- package/src/icons/baseIcons/cub/cubCircleYoutube.ts +8 -0
- package/src/icons/baseIcons/icons.ts +4 -0
- package/src/icons/baseIcons/types.ts +4 -0
- package/src/input/input.tsx +69 -46
- package/src/input/input.types.ts +2 -2
- package/src/input/inputInput.tsx +1 -0
- package/src/link/link.types.ts +1 -1
- package/src/link/theme.ts +26 -39
- package/src/list/list.tsx +2 -5
- package/src/list/list.types.ts +2 -2
- package/src/list/listHeading.tsx +0 -1
- package/src/list/listItem.tsx +2 -2
- package/src/list/theme.ts +43 -49
- package/src/logo/Logo.tsx +1 -1
- package/src/menu/menuList.tsx +1 -1
- package/src/modal/modal.tsx +3 -1
- package/src/modal/modalBackdrop.tsx +15 -5
- package/src/select/select.tsx +32 -3
- package/src/select/select.types.ts +2 -0
- package/src/select/selectButton.tsx +0 -1
- package/src/sidemenu/consts.ts +0 -5
- package/src/sidemenu/sidemenu.tsx +6 -8
- package/src/system/effects.ts +1 -0
- package/src/tabs/consts.ts +17 -0
- package/src/tabs/tab.tsx +5 -8
- package/src/tabs/tabs.tsx +1 -1
- package/src/tabs/tabs.types.ts +1 -0
- package/src/tabs/tabsNavBar.tsx +13 -14
- package/src/theme/foundations/shadows.ts +3 -1
- package/src/theme/types.ts +1 -0
- package/src/utils/styles.ts +57 -1
package/src/select/select.tsx
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { useEffect, useState } from 'react'
|
|
2
2
|
|
|
3
|
+
import { Box } from '../box'
|
|
4
|
+
import { Input } from '../input'
|
|
3
5
|
import { Popover } from '../popover'
|
|
4
6
|
import { __DEV__ } from '../utils'
|
|
5
7
|
import { SelectProvider } from './context'
|
|
6
|
-
import { SelectProps } from './select.types'
|
|
8
|
+
import { SelectOptionData, SelectProps } from './select.types'
|
|
7
9
|
import SelectButton from './selectButton'
|
|
8
10
|
import SelectContent from './selectContent'
|
|
9
11
|
import SelectGroup from './selectGroup'
|
|
@@ -29,6 +31,7 @@ export function Select(props: SelectProps) {
|
|
|
29
31
|
placeholder = 'Please select',
|
|
30
32
|
readOnly,
|
|
31
33
|
selectButton,
|
|
34
|
+
showOptionsFilter,
|
|
32
35
|
size,
|
|
33
36
|
value,
|
|
34
37
|
variant,
|
|
@@ -41,6 +44,9 @@ export function Select(props: SelectProps) {
|
|
|
41
44
|
console.error('<Select /> is used with isMultiple but its value is not an array: ', value)
|
|
42
45
|
}
|
|
43
46
|
|
|
47
|
+
const [query, setQuery] = useState<string>('')
|
|
48
|
+
const [filteredOptions, setFilteredOptions] = useState(options)
|
|
49
|
+
|
|
44
50
|
const context = {
|
|
45
51
|
disabled,
|
|
46
52
|
isInvalid,
|
|
@@ -53,6 +59,16 @@ export function Select(props: SelectProps) {
|
|
|
53
59
|
variant,
|
|
54
60
|
...selectProps
|
|
55
61
|
}
|
|
62
|
+
const onQueryChange = (e: any) => {
|
|
63
|
+
setQuery(e.target.value?.toLowerCase())
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const filterOptions = (i: SelectOptionData) =>
|
|
67
|
+
!showOptionsFilter || !query?.length ? true : i?.text?.toLowerCase()?.includes(query)
|
|
68
|
+
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
setFilteredOptions(options?.filter(filterOptions))
|
|
71
|
+
}, [query])
|
|
56
72
|
|
|
57
73
|
return (
|
|
58
74
|
<SelectProvider value={context}>
|
|
@@ -60,9 +76,22 @@ export function Select(props: SelectProps) {
|
|
|
60
76
|
<>
|
|
61
77
|
{selectButton ?? <SelectButton />}
|
|
62
78
|
<SelectContent>
|
|
79
|
+
{showOptionsFilter && (
|
|
80
|
+
<Box mr={2}>
|
|
81
|
+
<Input
|
|
82
|
+
iconLeft="culFilterAlt"
|
|
83
|
+
m={1}
|
|
84
|
+
mt={0}
|
|
85
|
+
onChange={onQueryChange}
|
|
86
|
+
placeholder="Filter…"
|
|
87
|
+
size="sm"
|
|
88
|
+
value={query}
|
|
89
|
+
/>
|
|
90
|
+
</Box>
|
|
91
|
+
)}
|
|
63
92
|
<SelectGroup maxH={maxHeight} tabIndex={1000}>
|
|
64
93
|
{children ??
|
|
65
|
-
|
|
94
|
+
filteredOptions?.map?.(option => <SelectOption key={option.value} title={option.text} {...option} />)}
|
|
66
95
|
</SelectGroup>
|
|
67
96
|
</SelectContent>
|
|
68
97
|
</>
|
|
@@ -38,6 +38,8 @@ export type SelectProps = ThemingProps<'Select'> &
|
|
|
38
38
|
readOnly?: boolean
|
|
39
39
|
/** Custom select button slot. */
|
|
40
40
|
selectButton?: ReactNode
|
|
41
|
+
/** Displays a filter input to limit the number of options. */
|
|
42
|
+
showOptionsFilter?: boolean
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export type SelectOptionData = {
|
package/src/sidemenu/consts.ts
CHANGED
|
@@ -5,7 +5,7 @@ import Button from '../button'
|
|
|
5
5
|
import { styled, useStyleConfig, vui, VuiComponent } from '../core'
|
|
6
6
|
import Icon from '../icon'
|
|
7
7
|
import { cs, filterUndefined } from '../utils'
|
|
8
|
-
import { border, expandedWidth
|
|
8
|
+
import { border, expandedWidth } from './consts'
|
|
9
9
|
import { SidemenuProvider } from './context'
|
|
10
10
|
import { SidemenuItemProps, SidemenuProps } from './sidemenu.types'
|
|
11
11
|
import SidemenuItem from './sidemenuItem'
|
|
@@ -32,13 +32,11 @@ export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
|
|
|
32
32
|
setIsExpandedInternal(isExpanded)
|
|
33
33
|
}, [isExpanded])
|
|
34
34
|
|
|
35
|
-
const
|
|
36
|
-
setIsExpandedInternal(!isExpandedInternal)
|
|
37
|
-
}
|
|
35
|
+
const onToggle = () => setIsExpandedInternal(!isExpandedInternal)
|
|
38
36
|
|
|
39
37
|
const w = isExpandedInternal ? width : expandedWidth
|
|
40
|
-
const icon = isExpandedInternal ? '
|
|
41
|
-
const
|
|
38
|
+
const icon = `falArrow${isExpandedInternal ? 'Left' : 'Right'}`
|
|
39
|
+
const justifyContent = isExpandedInternal ? 'flex-end' : 'center'
|
|
42
40
|
|
|
43
41
|
return (
|
|
44
42
|
<SidemenuProvider value={context}>
|
|
@@ -49,8 +47,8 @@ export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
|
|
|
49
47
|
: children}
|
|
50
48
|
</Box>
|
|
51
49
|
<Box borderTop={border} className="vui-sidemenu-bottom" w="100%">
|
|
52
|
-
<Button borderRadius={0} onClick={
|
|
53
|
-
<Icon name={icon}
|
|
50
|
+
<Button borderRadius={0} justifyContent={justifyContent} onClick={onToggle} variant="tertiaryDark" w="100%">
|
|
51
|
+
<Icon name={icon} />
|
|
54
52
|
</Button>
|
|
55
53
|
</Box>
|
|
56
54
|
</SidemenuBase>
|
package/src/system/effects.ts
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Dict } from '../utils'
|
|
2
|
+
|
|
3
|
+
export const tabsColors = {
|
|
4
|
+
activeBg: 'skyBlue.main',
|
|
5
|
+
border: 'sandstone.main',
|
|
6
|
+
color: 'sandstone.10',
|
|
7
|
+
hover: 'skyBlue.hover',
|
|
8
|
+
main: 'seaBlue.main'
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const iconSizeMapper: Dict = {
|
|
12
|
+
sm: 'xs',
|
|
13
|
+
md: 'sm',
|
|
14
|
+
lg: 'md',
|
|
15
|
+
xl: 'lg',
|
|
16
|
+
xxl: 'xl'
|
|
17
|
+
}
|
package/src/tabs/tab.tsx
CHANGED
|
@@ -11,13 +11,10 @@ export const TabBase = styled.divBox`
|
|
|
11
11
|
/**
|
|
12
12
|
* Implements a Tab component
|
|
13
13
|
*/
|
|
14
|
-
export const Tab = vui<'div', TabProps>((
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
</TabBase>
|
|
20
|
-
)
|
|
21
|
-
})
|
|
14
|
+
export const Tab = vui<'div', TabProps>(({ children, className }, ref) => (
|
|
15
|
+
<TabBase className={cs('vui-tab', className)} ref={ref}>
|
|
16
|
+
{children}
|
|
17
|
+
</TabBase>
|
|
18
|
+
))
|
|
22
19
|
|
|
23
20
|
export default Tab
|
package/src/tabs/tabs.tsx
CHANGED
|
@@ -13,7 +13,7 @@ export const TabsBase = styled.divBox<TabsProps>`
|
|
|
13
13
|
`
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* Implements Tabs navigation to switch between views.
|
|
16
|
+
* Implements Tabs navigation to switch between views. Implements Tabs navigation to switch between views. **Do not use as a top menu in a page!**
|
|
17
17
|
*/
|
|
18
18
|
export const Tabs = vui<'div', TabsProps>((props, ref) => {
|
|
19
19
|
const { activeTabId, showBorder = true, children, className, size, onTabClick, ...rest } = props
|
package/src/tabs/tabs.types.ts
CHANGED
package/src/tabs/tabsNavBar.tsx
CHANGED
|
@@ -5,16 +5,11 @@ import { vui } from '../core'
|
|
|
5
5
|
import { Icon } from '../icon'
|
|
6
6
|
import { List, ListItem } from '../list'
|
|
7
7
|
import { cs, Dict } from '../utils'
|
|
8
|
-
import {
|
|
8
|
+
import { iconSizeMapper, tabsColors } from './consts'
|
|
9
|
+
import { NavBarIconSize, TabNavBarProps, TabProps } from './tabs.types'
|
|
9
10
|
import theme from './theme'
|
|
10
11
|
|
|
11
|
-
const
|
|
12
|
-
sm: 'xs',
|
|
13
|
-
md: 'sm',
|
|
14
|
-
lg: 'md',
|
|
15
|
-
xl: 'lg',
|
|
16
|
-
xxl: 'xl'
|
|
17
|
-
}
|
|
12
|
+
const { activeBg, border, color, hover, main } = tabsColors
|
|
18
13
|
|
|
19
14
|
export const TabsNavBar = vui<'div', TabNavBarProps>((props, ref) => {
|
|
20
15
|
const { tabs, onNavItemClick, activeNavItem, animationDirection, showBorder, size = 'md' } = props
|
|
@@ -28,9 +23,11 @@ export const TabsNavBar = vui<'div', TabNavBarProps>((props, ref) => {
|
|
|
28
23
|
const py = sizes[size ?? 'md'].tabsNavBar.py
|
|
29
24
|
const iconMarginRight = size === 'xxl' ? '16px' : '8px'
|
|
30
25
|
|
|
26
|
+
const isActive = (tab: TabProps) => !tab.disabled && tab.id === activeNavItem
|
|
27
|
+
|
|
31
28
|
return (
|
|
32
29
|
<List
|
|
33
|
-
borderBottom={showBorder ?
|
|
30
|
+
borderBottom={showBorder ? `1px solid ${border}` : 'none'}
|
|
34
31
|
className={cs('vui-tabsNavBar')}
|
|
35
32
|
display="flex"
|
|
36
33
|
isInteractive
|
|
@@ -40,14 +37,16 @@ export const TabsNavBar = vui<'div', TabNavBarProps>((props, ref) => {
|
|
|
40
37
|
>
|
|
41
38
|
{tabs?.map?.(tab => (
|
|
42
39
|
<ListItem
|
|
43
|
-
activeBg=
|
|
40
|
+
activeBg={tab.disabled ? undefined : activeBg}
|
|
41
|
+
bg="white"
|
|
44
42
|
className={`vui-tabsNavBarItem vui-tabsNavBarItem-${tab?.id}`}
|
|
45
|
-
color=
|
|
43
|
+
color={isActive(tab) ? main : color}
|
|
46
44
|
disabled={tab.disabled}
|
|
47
45
|
display="inline-flex"
|
|
48
46
|
fontSize={fontSize}
|
|
47
|
+
fontWeight={500}
|
|
49
48
|
h={h}
|
|
50
|
-
hoverBg=
|
|
49
|
+
hoverBg={tab.disabled ? undefined : hover}
|
|
51
50
|
key={tab.id}
|
|
52
51
|
onClick={() => onNavItemClick?.(tab.id || 0)}
|
|
53
52
|
position="relative"
|
|
@@ -58,10 +57,10 @@ export const TabsNavBar = vui<'div', TabNavBarProps>((props, ref) => {
|
|
|
58
57
|
{!!tab.icon && <Icon mr={iconMarginRight} name={tab.icon} size={iconSize} />}
|
|
59
58
|
{tab.title}
|
|
60
59
|
</Box>
|
|
61
|
-
{
|
|
60
|
+
{isActive(tab) && (
|
|
62
61
|
<Box
|
|
63
62
|
animation={animationDirection}
|
|
64
|
-
bg=
|
|
63
|
+
bg={main}
|
|
65
64
|
bottom="-1px"
|
|
66
65
|
h={borderWidth}
|
|
67
66
|
left={0}
|
|
@@ -3,6 +3,7 @@ import { grey } from './colors'
|
|
|
3
3
|
|
|
4
4
|
const greyLight = hexToRGBA(grey[80], 0.4)
|
|
5
5
|
const greyDark = hexToRGBA(grey[80], 0.6)
|
|
6
|
+
const modal = hexToRGBA('#000000', 0.15)
|
|
6
7
|
|
|
7
8
|
export default {
|
|
8
9
|
'0': `0 0 0 0 #fff`,
|
|
@@ -21,5 +22,6 @@ export default {
|
|
|
21
22
|
l1: `-2px 0 5px 0 ${greyLight}`,
|
|
22
23
|
l2: `-4px 0 12px 0 ${greyLight}`,
|
|
23
24
|
l3: `-7px 0 20px 0 ${greyDark}`,
|
|
24
|
-
l4: `-12px 0 30px 0 ${greyDark}
|
|
25
|
+
l4: `-12px 0 30px 0 ${greyDark}`,
|
|
26
|
+
modal: `0 12px 30px 0 ${modal}`
|
|
25
27
|
}
|
package/src/theme/types.ts
CHANGED
|
@@ -4,6 +4,7 @@ export type Animation = keyof VuiTheme['animations']
|
|
|
4
4
|
export type Border = keyof VuiTheme['borders']
|
|
5
5
|
export type Color = keyof VuiTheme['colors']
|
|
6
6
|
export type Component = keyof VuiTheme['components']
|
|
7
|
+
export type Elevation = keyof VuiTheme['shadows']
|
|
7
8
|
export type Font = keyof VuiTheme['fonts']
|
|
8
9
|
export type FontSize = keyof VuiTheme['fontSizes']
|
|
9
10
|
export type FontWeight = keyof VuiTheme['fontWeights']
|
package/src/utils/styles.ts
CHANGED
|
@@ -5,6 +5,17 @@ export function cs(...classNames: any[]) {
|
|
|
5
5
|
return classNames.filter(Boolean).join(' ')
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
/** Parses HSL color code. */
|
|
9
|
+
export function parseHSL(color: string) {
|
|
10
|
+
const regexp = /hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g
|
|
11
|
+
const res = regexp?.exec?.(color)?.slice?.(1)
|
|
12
|
+
return { h: Number(res?.[0]) || 0, s: Number(res?.[1]) || 0, l: Number(res?.[2]) || 0 }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Builds RGBA string. */
|
|
16
|
+
export const buildRGBA = (r: number, g: number, b: number, alpha?: number) =>
|
|
17
|
+
alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`
|
|
18
|
+
|
|
8
19
|
/** Converts hex color value to rgb with optional alpha property. */
|
|
9
20
|
export function hexToRGBA(hex: string, alpha?: number) {
|
|
10
21
|
let hexStr = hex
|
|
@@ -21,7 +32,52 @@ export function hexToRGBA(hex: string, alpha?: number) {
|
|
|
21
32
|
const g = parseInt(hexStr.slice(2, 4), 16)
|
|
22
33
|
const b = parseInt(hexStr.slice(4, 6), 16)
|
|
23
34
|
|
|
24
|
-
return
|
|
35
|
+
return buildRGBA(r, g, b, alpha)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Converts hsl color value to rgb with optional alpha property. */
|
|
39
|
+
export function HSLToRGBA(h: number, s: number, l: number, alpha?: number) {
|
|
40
|
+
s /= 100
|
|
41
|
+
l /= 100
|
|
42
|
+
|
|
43
|
+
const c = (1 - Math.abs(2 * l - 1)) * s,
|
|
44
|
+
x = c * (1 - Math.abs(((h / 60) % 2) - 1)),
|
|
45
|
+
m = l - c / 2
|
|
46
|
+
|
|
47
|
+
let r = 0,
|
|
48
|
+
g = 0,
|
|
49
|
+
b = 0
|
|
50
|
+
|
|
51
|
+
if (0 <= h && h < 60) {
|
|
52
|
+
r = c
|
|
53
|
+
g = x
|
|
54
|
+
b = 0
|
|
55
|
+
} else if (60 <= h && h < 120) {
|
|
56
|
+
r = x
|
|
57
|
+
g = c
|
|
58
|
+
b = 0
|
|
59
|
+
} else if (120 <= h && h < 180) {
|
|
60
|
+
r = 0
|
|
61
|
+
g = c
|
|
62
|
+
b = x
|
|
63
|
+
} else if (180 <= h && h < 240) {
|
|
64
|
+
r = 0
|
|
65
|
+
g = x
|
|
66
|
+
b = c
|
|
67
|
+
} else if (240 <= h && h < 300) {
|
|
68
|
+
r = x
|
|
69
|
+
g = 0
|
|
70
|
+
b = c
|
|
71
|
+
} else if (300 <= h && h < 360) {
|
|
72
|
+
r = c
|
|
73
|
+
g = 0
|
|
74
|
+
b = x
|
|
75
|
+
}
|
|
76
|
+
r = Math.round((r + m) * 255)
|
|
77
|
+
g = Math.round((g + m) * 255)
|
|
78
|
+
b = Math.round((b + m) * 255)
|
|
79
|
+
|
|
80
|
+
return buildRGBA(r, g, b, alpha)
|
|
25
81
|
}
|
|
26
82
|
|
|
27
83
|
/** Styling to add ellipsis for long texts. */
|