@veracity/vui 2.9.0 → 2.10.0-beta.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 (188) hide show
  1. package/dist/cjs/accordion/accordionItem.d.ts.map +1 -1
  2. package/dist/cjs/avatar/theme.js +1 -1
  3. package/dist/cjs/button/button.js +1 -1
  4. package/dist/cjs/core/vuiProvider/globalStyle.d.ts.map +1 -1
  5. package/dist/cjs/core/vuiProvider/globalStyle.js +6 -1
  6. package/dist/cjs/header/headerAccount.d.ts.map +1 -1
  7. package/dist/cjs/header/headerAccount.js +1 -1
  8. package/dist/cjs/header/headerAccountUserInfo.js +1 -1
  9. package/dist/cjs/header/headerMobileToggle.d.ts.map +1 -1
  10. package/dist/cjs/header/headerMobileToggle.js +1 -1
  11. package/dist/cjs/header/headerNotifications.d.ts.map +1 -1
  12. package/dist/cjs/header/headerNotifications.js +1 -1
  13. package/dist/cjs/header/headerServices.d.ts.map +1 -1
  14. package/dist/cjs/header/headerServices.js +1 -1
  15. package/dist/cjs/input/input.d.ts.map +1 -1
  16. package/dist/cjs/input/input.js +6 -2
  17. package/dist/cjs/list/list.types.d.ts +2 -0
  18. package/dist/cjs/list/list.types.d.ts.map +1 -1
  19. package/dist/cjs/list/theme.d.ts +20 -0
  20. package/dist/cjs/list/theme.d.ts.map +1 -1
  21. package/dist/cjs/list/theme.js +21 -1
  22. package/dist/cjs/popover/popover.d.ts.map +1 -1
  23. package/dist/cjs/popover/popover.js +2 -2
  24. package/dist/cjs/popover/popover.types.d.ts +3 -0
  25. package/dist/cjs/popover/popover.types.d.ts.map +1 -1
  26. package/dist/cjs/popover/usePopover.d.ts.map +1 -1
  27. package/dist/cjs/popover/usePopover.js +2 -2
  28. package/dist/cjs/progressCircular/progressCircular.d.ts.map +1 -1
  29. package/dist/cjs/progressCircular/progressCircular.js +1 -1
  30. package/dist/cjs/radio/radio.d.ts.map +1 -1
  31. package/dist/cjs/radio/radio.js +2 -1
  32. package/dist/cjs/select/select.d.ts.map +1 -1
  33. package/dist/cjs/select/select.js +2 -2
  34. package/dist/cjs/select/useSelect.types.d.ts +3 -0
  35. package/dist/cjs/select/useSelect.types.d.ts.map +1 -1
  36. package/dist/cjs/sidemenu/consts.d.ts +0 -1
  37. package/dist/cjs/sidemenu/consts.d.ts.map +1 -1
  38. package/dist/cjs/sidemenu/consts.js +1 -2
  39. package/dist/cjs/sidemenu/sidemenu.d.ts +1 -1
  40. package/dist/cjs/sidemenu/sidemenu.d.ts.map +1 -1
  41. package/dist/cjs/sidemenu/sidemenu.js +7 -6
  42. package/dist/cjs/sidemenu/sidemenuItem.d.ts.map +1 -1
  43. package/dist/cjs/sidemenu/sidemenuItem.js +5 -3
  44. package/dist/cjs/sidemenu/sidemenuTop.d.ts.map +1 -1
  45. package/dist/cjs/sidemenu/sidemenuTop.js +2 -2
  46. package/dist/cjs/sidemenu/theme.d.ts +42 -3
  47. package/dist/cjs/sidemenu/theme.d.ts.map +1 -1
  48. package/dist/cjs/sidemenu/theme.js +43 -3
  49. package/dist/cjs/switch/consts.d.ts +2 -0
  50. package/dist/cjs/switch/consts.d.ts.map +1 -1
  51. package/dist/cjs/switch/consts.js +2 -0
  52. package/dist/cjs/switch/switchButton.d.ts.map +1 -1
  53. package/dist/cjs/switch/switchButton.js +1 -2
  54. package/dist/cjs/table/tableSortIcon.js +1 -1
  55. package/dist/cjs/table/useTable.d.ts.map +1 -1
  56. package/dist/cjs/table/useTable.js +9 -3
  57. package/dist/cjs/theme/components.d.ts +62 -3
  58. package/dist/cjs/theme/components.d.ts.map +1 -1
  59. package/dist/cjs/theme/defaultTheme.d.ts +63 -3
  60. package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
  61. package/dist/cjs/theme/foundations/colors.d.ts +2 -0
  62. package/dist/cjs/theme/foundations/colors.d.ts.map +1 -1
  63. package/dist/cjs/theme/foundations/colors.js +1 -0
  64. package/dist/cjs/theme/foundations/index.d.ts +1 -0
  65. package/dist/cjs/theme/foundations/index.d.ts.map +1 -1
  66. package/dist/cjs/tree/tree.js +1 -1
  67. package/dist/cjs/tree/treeItem.d.ts.map +1 -1
  68. package/dist/cjs/tree/treeItem.js +6 -2
  69. package/dist/cjs/tutorial/tutorial.types.d.ts +3 -3
  70. package/dist/cjs/tutorial/tutorial.types.d.ts.map +1 -1
  71. package/dist/cjs/tutorial/tutorialCard.d.ts.map +1 -1
  72. package/dist/cjs/tutorial/tutorialCard.js +1 -4
  73. package/dist/cjs/utils/array.d.ts.map +1 -1
  74. package/dist/cjs/utils/array.js +2 -0
  75. package/dist/cjs/utils/types.d.ts +2 -1
  76. package/dist/cjs/utils/types.d.ts.map +1 -1
  77. package/dist/esm/accordion/accordionItem.d.ts.map +1 -1
  78. package/dist/esm/avatar/theme.js +1 -1
  79. package/dist/esm/button/button.js +1 -1
  80. package/dist/esm/core/vuiProvider/globalStyle.d.ts.map +1 -1
  81. package/dist/esm/core/vuiProvider/globalStyle.js +6 -1
  82. package/dist/esm/header/headerAccount.d.ts.map +1 -1
  83. package/dist/esm/header/headerAccount.js +1 -1
  84. package/dist/esm/header/headerAccountUserInfo.js +1 -1
  85. package/dist/esm/header/headerMobileToggle.d.ts.map +1 -1
  86. package/dist/esm/header/headerMobileToggle.js +1 -1
  87. package/dist/esm/header/headerNotifications.d.ts.map +1 -1
  88. package/dist/esm/header/headerNotifications.js +1 -1
  89. package/dist/esm/header/headerServices.d.ts.map +1 -1
  90. package/dist/esm/header/headerServices.js +1 -1
  91. package/dist/esm/input/input.d.ts.map +1 -1
  92. package/dist/esm/input/input.js +6 -2
  93. package/dist/esm/list/list.types.d.ts +2 -0
  94. package/dist/esm/list/list.types.d.ts.map +1 -1
  95. package/dist/esm/list/theme.d.ts +20 -0
  96. package/dist/esm/list/theme.d.ts.map +1 -1
  97. package/dist/esm/list/theme.js +21 -1
  98. package/dist/esm/popover/popover.d.ts.map +1 -1
  99. package/dist/esm/popover/popover.js +2 -2
  100. package/dist/esm/popover/popover.types.d.ts +3 -0
  101. package/dist/esm/popover/popover.types.d.ts.map +1 -1
  102. package/dist/esm/popover/usePopover.d.ts.map +1 -1
  103. package/dist/esm/popover/usePopover.js +2 -1
  104. package/dist/esm/progressCircular/progressCircular.d.ts.map +1 -1
  105. package/dist/esm/progressCircular/progressCircular.js +1 -1
  106. package/dist/esm/radio/radio.d.ts.map +1 -1
  107. package/dist/esm/radio/radio.js +2 -1
  108. package/dist/esm/select/select.d.ts.map +1 -1
  109. package/dist/esm/select/select.js +2 -2
  110. package/dist/esm/select/useSelect.types.d.ts +3 -0
  111. package/dist/esm/select/useSelect.types.d.ts.map +1 -1
  112. package/dist/esm/sidemenu/consts.d.ts +0 -1
  113. package/dist/esm/sidemenu/consts.d.ts.map +1 -1
  114. package/dist/esm/sidemenu/consts.js +0 -1
  115. package/dist/esm/sidemenu/sidemenu.d.ts +1 -1
  116. package/dist/esm/sidemenu/sidemenu.d.ts.map +1 -1
  117. package/dist/esm/sidemenu/sidemenu.js +8 -7
  118. package/dist/esm/sidemenu/sidemenuItem.d.ts.map +1 -1
  119. package/dist/esm/sidemenu/sidemenuItem.js +6 -4
  120. package/dist/esm/sidemenu/sidemenuTop.d.ts.map +1 -1
  121. package/dist/esm/sidemenu/sidemenuTop.js +3 -3
  122. package/dist/esm/sidemenu/theme.d.ts +42 -3
  123. package/dist/esm/sidemenu/theme.d.ts.map +1 -1
  124. package/dist/esm/sidemenu/theme.js +43 -3
  125. package/dist/esm/switch/consts.d.ts +2 -0
  126. package/dist/esm/switch/consts.d.ts.map +1 -1
  127. package/dist/esm/switch/consts.js +2 -0
  128. package/dist/esm/switch/switchButton.d.ts.map +1 -1
  129. package/dist/esm/switch/switchButton.js +1 -2
  130. package/dist/esm/table/tableSortIcon.js +1 -1
  131. package/dist/esm/table/useTable.d.ts.map +1 -1
  132. package/dist/esm/table/useTable.js +9 -3
  133. package/dist/esm/theme/components.d.ts +62 -3
  134. package/dist/esm/theme/components.d.ts.map +1 -1
  135. package/dist/esm/theme/defaultTheme.d.ts +63 -3
  136. package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
  137. package/dist/esm/theme/foundations/colors.d.ts +2 -0
  138. package/dist/esm/theme/foundations/colors.d.ts.map +1 -1
  139. package/dist/esm/theme/foundations/colors.js +1 -0
  140. package/dist/esm/theme/foundations/index.d.ts +1 -0
  141. package/dist/esm/theme/foundations/index.d.ts.map +1 -1
  142. package/dist/esm/tree/tree.js +1 -1
  143. package/dist/esm/tree/treeItem.d.ts.map +1 -1
  144. package/dist/esm/tree/treeItem.js +7 -3
  145. package/dist/esm/tutorial/tutorial.types.d.ts +3 -3
  146. package/dist/esm/tutorial/tutorial.types.d.ts.map +1 -1
  147. package/dist/esm/tutorial/tutorialCard.d.ts.map +1 -1
  148. package/dist/esm/tutorial/tutorialCard.js +1 -4
  149. package/dist/esm/utils/array.d.ts.map +1 -1
  150. package/dist/esm/utils/array.js +2 -0
  151. package/dist/esm/utils/types.d.ts +2 -1
  152. package/dist/esm/utils/types.d.ts.map +1 -1
  153. package/package.json +1 -1
  154. package/src/accordion/accordionItem.tsx +0 -1
  155. package/src/avatar/theme.ts +1 -1
  156. package/src/button/button.tsx +2 -2
  157. package/src/core/vuiProvider/globalStyle.tsx +6 -1
  158. package/src/header/headerAccount.tsx +1 -0
  159. package/src/header/headerAccountUserInfo.tsx +1 -1
  160. package/src/header/headerMobileToggle.tsx +1 -0
  161. package/src/header/headerNotifications.tsx +1 -2
  162. package/src/header/headerServices.tsx +1 -0
  163. package/src/input/input.tsx +9 -2
  164. package/src/list/list.types.ts +2 -0
  165. package/src/list/theme.ts +21 -1
  166. package/src/popover/popover.tsx +2 -3
  167. package/src/popover/popover.types.ts +4 -0
  168. package/src/popover/usePopover.ts +2 -0
  169. package/src/progressCircular/progressCircular.tsx +1 -0
  170. package/src/radio/radio.tsx +25 -9
  171. package/src/select/select.tsx +3 -1
  172. package/src/select/useSelect.types.ts +3 -0
  173. package/src/sidemenu/consts.ts +0 -2
  174. package/src/sidemenu/sidemenu.tsx +26 -7
  175. package/src/sidemenu/sidemenuItem.tsx +10 -8
  176. package/src/sidemenu/sidemenuTop.tsx +3 -4
  177. package/src/sidemenu/theme.ts +43 -3
  178. package/src/switch/consts.ts +3 -1
  179. package/src/switch/switchButton.tsx +1 -2
  180. package/src/table/tableSortIcon.tsx +1 -1
  181. package/src/table/useTable.ts +12 -4
  182. package/src/theme/foundations/colors.ts +1 -0
  183. package/src/tree/tree.tsx +1 -1
  184. package/src/tree/treeItem.tsx +8 -2
  185. package/src/tutorial/tutorial.types.ts +3 -3
  186. package/src/tutorial/tutorialCard.tsx +1 -4
  187. package/src/utils/array.ts +1 -0
  188. package/src/utils/types.ts +3 -1
@@ -1,3 +1,5 @@
1
+ import { TippyProps } from '@tippyjs/react'
2
+
1
3
  import { BoxProps } from '../box'
2
4
  import { SystemProps } from '../system'
3
5
  import { RenderProps } from '../utils'
@@ -11,6 +13,8 @@ export type PopoverProps = UsePopoverProps & {
11
13
  children?: PopoverRenderProps
12
14
  /** Mounts provided content only when popover is opened for performance. @default true */
13
15
  isLazy?: boolean
16
+ /** Object with any Tippy props. */
17
+ options?: Partial<TippyProps>
14
18
  }
15
19
 
16
20
  export type PopoverRenderProps = RenderProps<{
@@ -40,6 +40,7 @@ export default function usePopover(props: UsePopoverProps = {}) {
40
40
 
41
41
  const tippyOptions: Partial<TippyProps> = useMemo(() => {
42
42
  const {
43
+ aria,
43
44
  offset: optionsOffset,
44
45
  onHidden,
45
46
  onHide,
@@ -50,6 +51,7 @@ export default function usePopover(props: UsePopoverProps = {}) {
50
51
  } = options ?? {}
51
52
 
52
53
  return {
54
+ aria,
53
55
  arrow: false,
54
56
  duration: [200, 150],
55
57
  hideOnClick: !isControlled ? closeOnBlur : false,
@@ -50,6 +50,7 @@ export const ProgressCircular = vui<'div', ProgressCircularProps>((props, ref) =
50
50
  aria-valuemin={0}
51
51
  aria-valuenow={progress}
52
52
  height={styles.width}
53
+ role="meter"
53
54
  version="1.1"
54
55
  viewBox="0 0 100 100"
55
56
  width={styles.width}
@@ -82,6 +82,7 @@ export const Radio = vui<'span', RadioProps>((props, ref) => {
82
82
  value,
83
83
  ...rest
84
84
  } = omitThemingProps(mergedProps)
85
+
85
86
  const [isChecked, setIsChecked] = useState(defaultIsChecked ?? checked ?? defaultChecked)
86
87
  const styles = useStyleConfig('Radio', mergedProps)
87
88
  const { color: controlColor, hoverColor, ...controlStyles } = styles.control
@@ -125,15 +126,30 @@ export const Radio = vui<'span', RadioProps>((props, ref) => {
125
126
  mr={controlMr}
126
127
  {...controlStyles}
127
128
  >
128
- <RadioInput
129
- aria-label="input-radio"
130
- className="vui-radioInput"
131
- onChange={handleOnChange}
132
- ref={inputRef}
133
- type="radio"
134
- {...{ checked, defaultChecked, disabled, id, name, required, value }}
135
- {...inputProps}
136
- />
129
+ {checked !== undefined && (
130
+ <RadioInput
131
+ aria-label="input-radio"
132
+ className="vui-radioInput"
133
+ onChange={handleOnChange}
134
+ ref={inputRef}
135
+ type="radio"
136
+ {...{ checked, disabled, id, name, required, value }}
137
+ {...inputProps}
138
+ />
139
+ )}
140
+
141
+ {checked === undefined && (
142
+ <RadioInput
143
+ aria-label="input-radio"
144
+ className="vui-radioInput"
145
+ onChange={handleOnChange}
146
+ ref={inputRef}
147
+ type="radio"
148
+ {...{ defaultChecked, disabled, id, name, required, value }}
149
+ {...inputProps}
150
+ />
151
+ )}
152
+
137
153
  <Icon className="vui-radioIcon" h="100%" name={icon} w="100%" />
138
154
  </RadioControl>
139
155
 
@@ -31,6 +31,7 @@ export function Select(props: SelectProps) {
31
31
  placeholder = 'Please select',
32
32
  readOnly,
33
33
  selectButton,
34
+ selectButtonProps,
34
35
  showOptionsFilter,
35
36
  size,
36
37
  value,
@@ -55,6 +56,7 @@ export function Select(props: SelectProps) {
55
56
  options,
56
57
  placeholder,
57
58
  readOnly,
59
+
58
60
  size,
59
61
  variant,
60
62
  ...selectProps
@@ -74,7 +76,7 @@ export function Select(props: SelectProps) {
74
76
  <SelectProvider value={context}>
75
77
  <Popover matchWidth {...rest}>
76
78
  <>
77
- {selectButton ?? <SelectButton />}
79
+ {selectButton ?? <SelectButton {...selectButtonProps} />}
78
80
  <SelectContent>
79
81
  {showOptionsFilter && (
80
82
  <Box mr={2}>
@@ -1,5 +1,6 @@
1
1
  import { ReactNode } from 'react'
2
2
 
3
+ import { ButtonProps } from '../button'
3
4
  import { ChangeEvent } from '../utils'
4
5
  import { SelectOptionData, SelectValue } from './select.types'
5
6
 
@@ -14,6 +15,8 @@ export type UseSelectProps = {
14
15
  options?: SelectOptionData[]
15
16
  /** Select children elements for dynamic handling */
16
17
  children?: ReactNode
18
+ /** Props added to the select button */
19
+ selectButtonProps?: ButtonProps
17
20
  /**
18
21
  * Callback triggered when an option is selected.
19
22
  *
@@ -1,3 +1 @@
1
- export const border = '1px solid lightgray'
2
-
3
1
  export const expandedWidth = 64
@@ -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 } from './consts'
8
+ import { expandedWidth } from './consts'
9
9
  import { SidemenuProvider } from './context'
10
10
  import { SidemenuItemProps, SidemenuProps } from './sidemenu.types'
11
11
  import SidemenuItem from './sidemenuItem'
@@ -19,12 +19,17 @@ export const SidemenuBase = styled.divBox`
19
19
  overflow: hidden;
20
20
  `
21
21
 
22
- /** [Beta] A collapsible side menu for navigation. */
22
+ /** A collapsible side menu for navigation. */
23
23
  export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
24
- const { children, className, items, isExpanded = false, width = 280, ...rest } = props
24
+ const { children, className, items, isExpanded = false, size, variant, width = 280, ...rest } = props
25
25
  const styles = useStyleConfig('Sidemenu', props)
26
26
  const [isExpandedInternal, setIsExpandedInternal] = useState(isExpanded)
27
- const context = useMemo(() => filterUndefined({ isExpandedInternal }), [isExpandedInternal])
27
+ const context = useMemo(
28
+ () => filterUndefined({ size, variant, isExpandedInternal }),
29
+ [size, variant, isExpandedInternal]
30
+ )
31
+
32
+ const isDark = variant === 'dark'
28
33
 
29
34
  const aliasedProps = filterUndefined<SidemenuProps>({})
30
35
 
@@ -40,14 +45,28 @@ export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
40
45
 
41
46
  return (
42
47
  <SidemenuProvider value={context}>
43
- <SidemenuBase className={cs('vui-sidemenu', className)} ref={ref} w={w} {...styles} {...aliasedProps} {...rest}>
48
+ <SidemenuBase
49
+ className={cs('vui-sidemenu', className)}
50
+ ref={ref}
51
+ w={w}
52
+ {...styles.container}
53
+ {...aliasedProps}
54
+ {...rest}
55
+ >
44
56
  <Box flexDirection="column" flexGrow={1} overflowX="hidden" overflowY="auto" w="100%">
45
57
  {items
46
58
  ? items?.map?.((item: SidemenuItemProps, key: number) => <SidemenuItem key={key} {...item} />)
47
59
  : children}
48
60
  </Box>
49
- <Box borderTop={border} className="vui-sidemenu-bottom" w="100%">
50
- <Button borderRadius={0} justifyContent={justifyContent} onClick={onToggle} variant="tertiaryDark" w="100%">
61
+ <Box className="vui-sidemenu-bottom" w="100%" {...styles.bottom}>
62
+ <Button
63
+ borderRadius={0}
64
+ justifyContent={justifyContent}
65
+ minH={size === 'lg' ? '56px' : '40px'}
66
+ onClick={onToggle}
67
+ variant={isDark ? 'tertiaryLight' : 'tertiaryDark'}
68
+ w="100%"
69
+ >
51
70
  <Icon name={icon} />
52
71
  </Button>
53
72
  </Box>
@@ -2,7 +2,7 @@ import React, { MouseEvent, useState } from 'react'
2
2
 
3
3
  import Box from '../box'
4
4
  import Button from '../button'
5
- import { omitThemingProps, vui, VuiComponent } from '../core'
5
+ import { omitThemingProps, useStyleConfig, vui, VuiComponent } from '../core'
6
6
  import Icon from '../icon'
7
7
  import T from '../t'
8
8
  import { cs } from '../utils'
@@ -12,10 +12,10 @@ import { SidemenuItemProps } from './sidemenu.types'
12
12
  /** A menu item. */
13
13
  export const SidemenuItem = vui<'button', SidemenuItemProps>((props, ref) => {
14
14
  const { className, children, icon, iconSize = 'md', isActive, onClick, title, ...rest } = omitThemingProps(props)
15
-
16
15
  const [displayChildren, setDisplayChildren] = useState(true)
17
-
18
- const { isExpandedInternal } = useSidemenuContext()
16
+ const { variant, size, isExpandedInternal } = useSidemenuContext()
17
+ const styles = useStyleConfig('Sidemenu', useSidemenuContext)
18
+ const isDark = variant === 'dark'
19
19
 
20
20
  const innerContent = isExpandedInternal ? (
21
21
  <Box centerV px={2} py={1} w="100%" whiteSpace="pre">
@@ -41,16 +41,18 @@ export const SidemenuItem = vui<'button', SidemenuItemProps>((props, ref) => {
41
41
  <Button
42
42
  alignItems="center"
43
43
  border="none"
44
- borderLeft="3px solid black"
45
- borderLeftColor={isActive ? 'blue.80' : 'transparent'}
44
+ borderLeft="3px solid transparent"
45
+ borderLeftColor={isActive ? (isDark ? 'digiGreen.main' : 'seaBlue.main') : undefined}
46
46
  borderRadius={0}
47
47
  className={cs('vui-sidemenu-item', className)}
48
48
  h="auto"
49
49
  justifyContent="space-between"
50
50
  onClick={() => onClick?.()}
51
51
  p={0}
52
- variant="tertiaryDark"
52
+ variant={isDark ? 'tertiaryLight' : 'tertiaryDark'}
53
53
  w="100%"
54
+ {...styles.item}
55
+ minH={size === 'lg' ? '56px' : '40px'}
54
56
  {...rest}
55
57
  >
56
58
  {innerContent}
@@ -61,7 +63,7 @@ export const SidemenuItem = vui<'button', SidemenuItemProps>((props, ref) => {
61
63
  mr={1}
62
64
  onClick={toggle}
63
65
  size="sm"
64
- variant="tertiaryDark"
66
+ variant={isDark ? 'tertiaryLight' : 'tertiaryDark'}
65
67
  />
66
68
  )}
67
69
  </Button>
@@ -1,22 +1,21 @@
1
1
  import React from 'react'
2
2
 
3
3
  import { Box } from '../box'
4
- import { omitThemingProps } from '../core'
4
+ import { omitThemingProps, useStyleConfig } from '../core'
5
5
  import { cs } from '../utils'
6
- import { border } from './consts'
7
6
  import { useSidemenuContext } from './context'
8
7
  import { SidemenuTopProps } from './sidemenu.types'
9
8
 
10
9
  /** Top container. */
11
10
  export const SidemenuTop = (props: SidemenuTopProps) => {
12
11
  const { className, leftSlot, rightSlot, ...rest } = omitThemingProps(props)
13
-
12
+ const styles = useStyleConfig('Sidemenu', props)
14
13
  const { isExpandedInternal } = useSidemenuContext()
15
14
 
16
15
  if (!leftSlot && !rightSlot) return null
17
16
 
18
17
  return (
19
- <Box borderBottom={border} className={cs('vui-sidemenu-top', className)} mb={1} w="100%" {...rest}>
18
+ <Box className={cs('vui-sidemenu-top', className)} mb={1} w="100%" {...styles.sidemenuTop} {...rest}>
20
19
  {!!leftSlot && leftSlot}
21
20
  {!!rightSlot && isExpandedInternal && rightSlot}
22
21
  </Box>
@@ -1,14 +1,54 @@
1
1
  const baseStyle = {}
2
2
 
3
- const defaultProps = {}
3
+ const defaultProps = {
4
+ size: 'md',
5
+ variant: 'light'
6
+ }
4
7
 
5
- const sizes = {}
8
+ const parts = ['container', 'item', 'sidemenuTop', 'bottom']
6
9
 
7
- const variants = {}
10
+ const sizes = {
11
+ md: {
12
+ item: {
13
+ minH: '40px'
14
+ }
15
+ },
16
+ lg: {
17
+ item: {
18
+ minH: '56px'
19
+ }
20
+ }
21
+ }
22
+ const variants = {
23
+ light: {
24
+ container: {},
25
+ bottom: {
26
+ borderTop: '1px solid lightgray'
27
+ },
28
+ sidemenuTop: {
29
+ borderBottom: '1px solid lightgray'
30
+ },
31
+ item: {}
32
+ },
33
+ dark: {
34
+ container: {
35
+ bg: 'darkBlue.main',
36
+ color: 'white'
37
+ },
38
+ bottom: {
39
+ borderTop: '1px solid black'
40
+ },
41
+ sidemenuTop: {
42
+ borderBottom: '1px solid black'
43
+ },
44
+ item: {}
45
+ }
46
+ }
8
47
 
9
48
  export default {
10
49
  baseStyle,
11
50
  defaultProps,
51
+ parts,
12
52
  sizes,
13
53
  variants
14
54
  }
@@ -1,7 +1,9 @@
1
1
  export const switchColors = {
2
2
  main: 'seaBlue.main',
3
3
  hover: 'seaBlue.40',
4
- disabled: 'sandstone.main',
4
+ offBg: 'sandstone.55', // on/off state of the switch
5
+ offBgContrast: 'sandstone.45', // on/off state of the switch
6
+ disabled: 'sandstone.main', // 79: the non-clickable state
5
7
  disabledBg: 'sandstone.95',
6
8
  green: 'landGreen.main',
7
9
  red: 'energyRed.main'
@@ -112,7 +112,6 @@ export const SwitchButton = vui<'span', SwitchButtonProps>((props, ref) => {
112
112
  const labelOffset = `${thumbStyles.h - hDiff + 4}px`
113
113
 
114
114
  const aliasedProps = filterUndefined({
115
- 'aria-checked': isChecked ? true : false,
116
115
  'aria-disabled': disabled,
117
116
  'data-focused': isFocused ? true : false
118
117
  })
@@ -123,7 +122,7 @@ export const SwitchButton = vui<'span', SwitchButtonProps>((props, ref) => {
123
122
  })
124
123
 
125
124
  const trackAliasedProps = filterUndefined({
126
- bg: isChecked ? trackStyles.bg : switchColors.disabled,
125
+ bg: isChecked ? trackStyles.bg : innerLabelOff ? switchColors.offBgContrast : switchColors.offBg,
127
126
  pl: isChecked ? 1 : labelOffset,
128
127
  pr: isChecked ? labelOffset : 1,
129
128
  ring: !disabled ? (isFocused ? trackStyles.ring : 0) : 3
@@ -11,7 +11,7 @@ export const TableSortIcon = vui<'svg', TableSortIconProps>((props, ref) => {
11
11
  const { className, order, ...rest } = props
12
12
  const styles = useStyleConfig('Table', useTableContext())
13
13
  const rotate = order === 'asc' ? 180 : 0
14
- const pathFill = order !== undefined ? ['seaBlue.main', 'sandstone.main'] : 'sandstone.main'
14
+ const pathFill = order ? ['seaBlue.main', 'sandstone.main'] : 'sandstone.main'
15
15
 
16
16
  return (
17
17
  <Icon
@@ -1,17 +1,25 @@
1
- import { useCallbackRef, useControlled } from '../utils'
1
+ import { SortOrder, useCallbackRef, useControlled } from '../utils'
2
2
  import { UseTableProps } from './useTable.types'
3
3
 
4
+ const sortOrders: SortOrder[] = ['asc', 'desc', null]
5
+ const defaultSortOrder: SortOrder = sortOrders[0]
6
+
7
+ function getNextOrder(order: SortOrder) {
8
+ const next = sortOrders.indexOf(order) + 1
9
+ return sortOrders[next] !== undefined ? sortOrders[next] : defaultSortOrder
10
+ }
11
+
4
12
  /** Handles controlled/uncontrolled sort of the Table rows. */
5
13
  export default function useTable(props: UseTableProps) {
6
- const { defaultSort = { key: '', order: 'asc' }, onSortChange: onSortChangeProp, sort: sortProp } = props
14
+ const { defaultSort = { key: '', order: defaultSortOrder }, onSortChange: onSortChangeProp, sort: value } = props
7
15
  const [sort, onChange, { isControlled }] = useControlled({
8
16
  defaultValue: defaultSort,
9
17
  onChange: onSortChangeProp,
10
- value: sortProp
18
+ value
11
19
  })
12
20
 
13
21
  const onSortChange = useCallbackRef((key: string) => {
14
- const order = sort.key === key ? (sort.order === 'asc' ? 'desc' : 'asc') : 'asc'
22
+ const order = sort.key === key ? getNextOrder(sort.order) : defaultSortOrder
15
23
  onChange({ key, order })
16
24
  })
17
25
 
@@ -225,6 +225,7 @@ export const seaBlue = {
225
225
  }
226
226
 
227
227
  export const sandstone = {
228
+ 97: 'hsl(40, 3%, 97%)',
228
229
  95: 'hsl(40, 3%, 95%)',
229
230
  90: 'hsl(40, 3%, 90%)',
230
231
  85: 'hsl(40, 3%, 85%)',
package/src/tree/tree.tsx CHANGED
@@ -85,7 +85,7 @@ export const Tree = vui<'div', TreeProps>((props, ref) => {
85
85
  return (
86
86
  <TreeProvider value={context}>
87
87
  <TreeBase className={cs('vui-tree', className)} ref={ref} {...styles.container} {...rest}>
88
- <List w={1}>
88
+ <List role="tree" w={1}>
89
89
  {itemsInternal?.map(({ id, isActive, ...props }, index: number) => {
90
90
  return (
91
91
  <TreeItem
@@ -3,7 +3,7 @@ import React, { useEffect, useState } from 'react'
3
3
  import { Box } from '../box'
4
4
  import { styled, useStyleConfig, vui } from '../core'
5
5
  import { List } from '../list'
6
- import { cs, isArray, isReactText, vuiColorToRGBA } from '../utils'
6
+ import { cs, filterUndefined, isArray, isReactText, vuiColorToRGBA } from '../utils'
7
7
  import { useTreeContext } from './context'
8
8
  import { TreeItemProps } from './tree.types'
9
9
  import TreeIcon from './treeIcon'
@@ -130,6 +130,11 @@ export const TreeItem = vui<'li', TreeItemProps>((props, ref) => {
130
130
  textMl += 3.8
131
131
  }
132
132
 
133
+ const aliasedProps = filterUndefined({
134
+ 'aria-expanded': isCollapsable ? !collapsedInternal : undefined,
135
+ role: 'treeitem'
136
+ })
137
+
133
138
  // hoverBg cannot be styled directly from theme, it has to be JS manipulated because of event propagation
134
139
  return (
135
140
  <TreeItemBase
@@ -156,6 +161,7 @@ export const TreeItem = vui<'li', TreeItemProps>((props, ref) => {
156
161
  : bg
157
162
  }
158
163
  hoverBg={undefined}
164
+ {...aliasedProps}
159
165
  {...rest}
160
166
  >
161
167
  <>
@@ -178,7 +184,7 @@ export const TreeItem = vui<'li', TreeItemProps>((props, ref) => {
178
184
  </Box>
179
185
 
180
186
  {isCollapsable && !collapsedInternal && (
181
- <List w={1}>
187
+ <List role="tree" w={1}>
182
188
  {children ??
183
189
  (isArray<TreeItemProps>(items)
184
190
  ? items.map(({ key, propagatedPL, ...props }, index) => {
@@ -19,11 +19,11 @@ export type TutorialProps = {
19
19
  className?: string
20
20
  /** An id for further handling with localStorage */
21
21
  id: string
22
- /** Invoked once the action button clicked. */
22
+ /** Invoked once the action button is clicked. */
23
23
  onAction?: () => void
24
- /** Invoked once the dismiss button clicked. */
24
+ /** Invoked once the dismiss button is clicked. */
25
25
  onDismiss?: () => void
26
- /** Invoked once the finish button clicked. */
26
+ /** Invoked once the finish button is clicked. */
27
27
  onFinish?: () => void
28
28
  /** Popover placement */
29
29
  placement?: Placement
@@ -123,10 +123,7 @@ export function TutorialCard({
123
123
  )}
124
124
  {!!onAction && (
125
125
  <Button mr={6} onClick={onAction} variant="primaryLight">
126
- <>
127
- {actionLabel}
128
- {onAction}
129
- </>
126
+ {actionLabel}
130
127
  </Button>
131
128
  )}
132
129
  </Box>
@@ -6,6 +6,7 @@ export function compareBy<T extends object, K extends keyof T>(key: K, order: So
6
6
  const ord = order === 'asc' ? 1 : -1
7
7
 
8
8
  return (item1: T, item2: T) => {
9
+ if (order === null) return 0
9
10
  const a = item1[key]
10
11
  const b = item2[key]
11
12
 
@@ -63,7 +63,9 @@ export type RenderProps<P> = React.ReactNode | ((props: P) => React.ReactNode)
63
63
  /** Merges props definitions, overriding source keys */
64
64
  export type RightJoinProps<SourceProps, OverrideProps> = Omit<SourceProps, keyof OverrideProps> & OverrideProps
65
65
 
66
+ export type SortOrder = 'asc' | 'desc' | null
67
+
66
68
  export type Sort<T = string> = {
67
69
  key: T
68
- order: 'asc' | 'desc'
70
+ order: SortOrder
69
71
  }