@veracity/vui 2.21.3 → 2.22.0-rc.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 (63) hide show
  1. package/dist/cjs/button/theme.d.ts +1 -217
  2. package/dist/cjs/button/theme.d.ts.map +1 -1
  3. package/dist/cjs/button/theme.js +19 -15
  4. package/dist/cjs/button/theme.js.map +1 -1
  5. package/dist/cjs/buttonGroup/buttonGroup.js +6 -6
  6. package/dist/cjs/buttonGroup/buttonGroup.js.map +1 -1
  7. package/dist/cjs/select/select.d.ts +6 -6
  8. package/dist/cjs/select/select.d.ts.map +1 -1
  9. package/dist/cjs/select/select.js +4 -3
  10. package/dist/cjs/select/select.js.map +1 -1
  11. package/dist/cjs/select/select.types.d.ts +2 -0
  12. package/dist/cjs/select/select.types.d.ts.map +1 -1
  13. package/dist/cjs/select/selectGroup.js +1 -1
  14. package/dist/cjs/select/selectGroup.js.map +1 -1
  15. package/dist/cjs/select/selectOption.js +1 -1
  16. package/dist/cjs/select/selectOption.js.map +1 -1
  17. package/dist/cjs/select/useSelect.d.ts +2 -1
  18. package/dist/cjs/select/useSelect.d.ts.map +1 -1
  19. package/dist/cjs/select/useSelect.js +8 -4
  20. package/dist/cjs/select/useSelect.js.map +1 -1
  21. package/dist/cjs/select/useSelect.types.d.ts +2 -0
  22. package/dist/cjs/select/useSelect.types.d.ts.map +1 -1
  23. package/dist/cjs/theme/components.d.ts +1 -217
  24. package/dist/cjs/theme/components.d.ts.map +1 -1
  25. package/dist/cjs/theme/defaultTheme.d.ts +1 -217
  26. package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
  27. package/dist/esm/button/theme.d.ts +1 -217
  28. package/dist/esm/button/theme.d.ts.map +1 -1
  29. package/dist/esm/button/theme.js +22 -15
  30. package/dist/esm/button/theme.js.map +1 -1
  31. package/dist/esm/buttonGroup/buttonGroup.js +6 -6
  32. package/dist/esm/buttonGroup/buttonGroup.js.map +1 -1
  33. package/dist/esm/select/select.d.ts +6 -6
  34. package/dist/esm/select/select.d.ts.map +1 -1
  35. package/dist/esm/select/select.js +4 -3
  36. package/dist/esm/select/select.js.map +1 -1
  37. package/dist/esm/select/select.types.d.ts +2 -0
  38. package/dist/esm/select/select.types.d.ts.map +1 -1
  39. package/dist/esm/select/selectGroup.js +1 -1
  40. package/dist/esm/select/selectGroup.js.map +1 -1
  41. package/dist/esm/select/selectOption.js +1 -1
  42. package/dist/esm/select/selectOption.js.map +1 -1
  43. package/dist/esm/select/useSelect.d.ts +2 -1
  44. package/dist/esm/select/useSelect.d.ts.map +1 -1
  45. package/dist/esm/select/useSelect.js +6 -4
  46. package/dist/esm/select/useSelect.js.map +1 -1
  47. package/dist/esm/select/useSelect.types.d.ts +2 -0
  48. package/dist/esm/select/useSelect.types.d.ts.map +1 -1
  49. package/dist/esm/theme/components.d.ts +1 -217
  50. package/dist/esm/theme/components.d.ts.map +1 -1
  51. package/dist/esm/theme/defaultTheme.d.ts +1 -217
  52. package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
  53. package/dist/tsconfig.legacy.tsbuildinfo +1 -1
  54. package/dist/tsconfig.tsbuildinfo +1 -1
  55. package/package.json +1 -1
  56. package/src/button/theme.ts +25 -16
  57. package/src/buttonGroup/buttonGroup.tsx +7 -7
  58. package/src/select/select.tsx +6 -5
  59. package/src/select/select.types.ts +2 -0
  60. package/src/select/selectGroup.tsx +1 -1
  61. package/src/select/selectOption.tsx +1 -1
  62. package/src/select/useSelect.tsx +16 -6
  63. package/src/select/useSelect.types.ts +2 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veracity/vui",
3
- "version": "2.21.3",
3
+ "version": "2.22.0-rc.0",
4
4
  "description": "Veracity UI is a React component library crafted for use within Veracity applications and pages. Based on Styled Components and @xstyled.",
5
5
  "module": "./dist/esm/index.js",
6
6
  "main": "./dist/cjs/index.js",
@@ -59,7 +59,7 @@ const sizes = {
59
59
  },
60
60
  }
61
61
 
62
- const variants = {
62
+ const variants: Record<string, Record<string, Record<string, string>>> = {
63
63
  primaryDark: {
64
64
  container: {
65
65
  bg: 'buttonTypePrimaryDefaultBackgroundColorDark',
@@ -274,21 +274,30 @@ const variants = {
274
274
  color: 'landGreen.30',
275
275
  },
276
276
  },
277
- // buttonGroupRounded is an internal variant, used in buttonGroup;
278
- buttonGroupRounded: {
279
- container: {
280
- bg: 'white',
281
- borderColor: 'sandstone.79',
282
- color: 'sandstone.10',
283
- hoverBg: 'seaBlue.20',
284
- hoverBorderColor: 'buttonTypePrimaryHoverBorderColorDark',
285
- hoverColor: 'white',
286
- activeBg: 'seaBlue.35',
287
- activeBorderColor: 'buttonTypePrimaryActiveBorderColorDark',
288
- activeColor: 'white',
289
- borderRadius: 'round',
290
- marginRight: '22px',
291
- },
277
+ }
278
+
279
+ // buttonGroupDefault is an internal variant, used in ButtonGroup; based on secondaryDark
280
+ variants.buttonGroupDefault = {
281
+ container: {
282
+ ...variants.secondaryDark.container,
283
+ borderColor: 'sandstone.60',
284
+ },
285
+ }
286
+
287
+ // buttonGroupRounded is an internal variant
288
+ variants.buttonGroupRounded = {
289
+ container: {
290
+ bg: 'white',
291
+ borderColor: 'sandstone.79',
292
+ color: 'sandstone.10',
293
+ hoverBg: 'seaBlue.20',
294
+ hoverBorderColor: 'buttonTypePrimaryHoverBorderColorDark',
295
+ hoverColor: 'white',
296
+ activeBg: 'seaBlue.35',
297
+ activeBorderColor: 'buttonTypePrimaryActiveBorderColorDark',
298
+ activeColor: 'white',
299
+ borderRadius: 'round',
300
+ marginRight: '22px',
292
301
  },
293
302
  }
294
303
 
@@ -1,4 +1,4 @@
1
- import React, { useMemo } from 'react'
1
+ import { useMemo } from 'react'
2
2
 
3
3
  import { styled, th, vui } from '../core'
4
4
  import { activeClassName, cs, filterUndefined } from '../utils'
@@ -39,12 +39,12 @@ export const ButtonGroupBase = styled.divBox<{ innerBorderColor: string }>`
39
39
 
40
40
  //
41
41
  > .${activeClassName}.vui-button-variant-secondaryDark {
42
- background-color: ${p => th.color('skyBlue.90')};
42
+ background-color: ${th.color('skyBlue.90')};
43
43
  }
44
44
 
45
45
  > .${activeClassName}.vui-button-variant-buttonGroupRounded {
46
- background-color: ${p => th.color('seaBlue.main')};
47
- color: ${p => th.color('white')};
46
+ background-color: ${th.color('seaBlue.main')};
47
+ color: ${th.color('white')};
48
48
  }
49
49
 
50
50
  > .vui-button-variant-buttonGroupRounded {
@@ -52,11 +52,11 @@ export const ButtonGroupBase = styled.divBox<{ innerBorderColor: string }>`
52
52
  }
53
53
 
54
54
  > .${activeClassName}.vui-button-variant-buttonGroupRounded:hover {
55
- background-color: ${p => th.color('seaBlue.20')};
55
+ background-color: ${th.color('seaBlue.20')};
56
56
  }
57
57
 
58
58
  > .${activeClassName}.vui-button-variant-buttonGroupRounded:active {
59
- background-color: ${p => th.color('seaBlue.35')};
59
+ background-color: ${th.color('seaBlue.35')};
60
60
  }
61
61
  `
62
62
 
@@ -72,7 +72,7 @@ export const ButtonGroup = vui<'div', ButtonGroupProps>((props, ref) => {
72
72
  filterUndefined({
73
73
  disabled,
74
74
  size,
75
- variant: variant === 'default' ? 'secondaryDark' : 'buttonGroupRounded',
75
+ variant: variant === 'default' ? 'buttonGroupDefault' : 'buttonGroupRounded',
76
76
  }),
77
77
  [disabled, size, variant],
78
78
  )
@@ -1,13 +1,12 @@
1
1
  import { useEffect, useId, useState } from 'react'
2
2
 
3
3
  import { Box } from '../box'
4
- import { useStyleConfig } from '../core'
5
4
  import { Input } from '../input'
6
5
  import { helpTextSize } from '../input/consts'
7
6
  import HelpText from '../input/helpText'
8
7
  import { Popover } from '../popover'
9
8
  import { __DEV__ } from '../utils'
10
- import { SelectProvider, useSelectContext } from './context'
9
+ import { SelectProvider } from './context'
11
10
  import { SelectOptionData, SelectProps } from './select.types'
12
11
  import SelectButton from './selectButton'
13
12
  import SelectContent from './selectContent'
@@ -40,6 +39,7 @@ export function Select(props: SelectProps) {
40
39
  onChange,
41
40
  options,
42
41
  placeholder = 'Please select',
42
+ selectedText,
43
43
  readOnly,
44
44
  selectButton,
45
45
  selectButtonProps,
@@ -50,7 +50,7 @@ export function Select(props: SelectProps) {
50
50
  ...rest
51
51
  } = props
52
52
 
53
- const selectProps = useSelect({ defaultValue, isMultiple, onChange, value, options, children })
53
+ const selectProps = useSelect({ defaultValue, isMultiple, onChange, value, options, selectedText, children })
54
54
 
55
55
  if (__DEV__ && isMultiple && !Array.isArray(selectProps.value)) {
56
56
  console.error('<Select /> is used with isMultiple but its value is not an array: ', value)
@@ -69,6 +69,7 @@ export function Select(props: SelectProps) {
69
69
  name,
70
70
  options,
71
71
  placeholder,
72
+ selectedText,
72
73
  readOnly,
73
74
  size,
74
75
  variant,
@@ -97,7 +98,7 @@ export function Select(props: SelectProps) {
97
98
  <Popover matchWidth {...rest}>
98
99
  <>
99
100
  {selectButton ?? <SelectButton {...selectButtonProps} />}
100
- <SelectContent>
101
+ <SelectContent overflow="hidden">
101
102
  {showOptionsFilter && (
102
103
  <Box mr={2}>
103
104
  <Input
@@ -112,7 +113,7 @@ export function Select(props: SelectProps) {
112
113
  />
113
114
  </Box>
114
115
  )}
115
- <SelectGroup maxH={maxHeight} tabIndex={1000}>
116
+ <SelectGroup maxH={maxHeight} overflowY="auto" tabIndex={1000}>
116
117
  {children ??
117
118
  filteredOptions?.map?.(option => (
118
119
  <SelectOption closeOnScroll={closeOnScroll} key={option.value} title={option.text} {...option} />
@@ -48,6 +48,8 @@ export type SelectProps = ThemingProps<'Select'> &
48
48
  options?: SelectOptionData[]
49
49
  /** Displayed inside the trigger when no value is selected. */
50
50
  placeholder?: string
51
+ /** Displayed inside the trigger when value(s) selected. */
52
+ selectedText?: string
51
53
  /** Select cannot be opened and is styled accordingly. */
52
54
  readOnly?: boolean
53
55
  /** Custom select button slot. */
@@ -11,7 +11,7 @@ export const SelectGroup = vui<'ul', SelectGroupProps>((props, ref) => {
11
11
  const { className, ...rest } = props
12
12
  const styles = useStyleConfig('Select', useSelectContext())
13
13
 
14
- return <List className={cs('vui-selectGroup', className)} ref={ref} {...styles.group} {...rest} />
14
+ return <List className={cs('vui-selectGroup', 'vui-allowScroll', className)} ref={ref} {...styles.group} {...rest} />
15
15
  }) as VuiComponent<'ul', SelectGroupProps> & {
16
16
  Divider: typeof ListDivider
17
17
  Heading: typeof ListHeading
@@ -39,7 +39,7 @@ export const SelectOption = vui<'li', SelectOptionProps>((props, ref) => {
39
39
 
40
40
  const onKeyDown = useCallbackRef((e: KeyboardEvent<HTMLLIElement>) => e.key === 'Enter' && onClick(e))
41
41
 
42
- const onScroll = (e: Event) => !(e.target as HTMLElement)?.className?.includes('vui-selectContent') && hide()
42
+ const onScroll = (e: Event) => !(e.target as HTMLElement)?.className?.includes('vui-allowScroll') && hide()
43
43
 
44
44
  // Hiding the popover on scroll
45
45
  useEffect(() => {
@@ -4,7 +4,7 @@ import { ChangeEvent, toggleItem, useCallbackRef } from '../utils'
4
4
  import { SelectOptionData, SelectValue } from './select.types'
5
5
  import { UseSelectProps } from './useSelect.types'
6
6
 
7
- const getValueText = (value: SelectValue, options: SelectOptionData[]) => {
7
+ export const getOptionText = (value: SelectValue, options: SelectOptionData[]) => {
8
8
  const option = options?.find((o: SelectOptionData) => o?.value === value)
9
9
 
10
10
  return option?.text || value
@@ -12,7 +12,15 @@ const getValueText = (value: SelectValue, options: SelectOptionData[]) => {
12
12
 
13
13
  /** Handles controlled/uncontrolled value state. Supports single and multiple values. */
14
14
  export default function useSelect(props: UseSelectProps) {
15
- const { defaultValue, isMultiple, onChange: onChangeProp, value: valueProp, options = [], children } = props
15
+ const {
16
+ defaultValue,
17
+ isMultiple,
18
+ onChange: onChangeProp,
19
+ value: valueProp,
20
+ options = [],
21
+ selectedText,
22
+ children,
23
+ } = props
16
24
 
17
25
  // Not using useControlled here, because we need custom value setter when uncontrolled
18
26
  const [stateValue, setStateValue] = useState(defaultValue)
@@ -38,11 +46,13 @@ export default function useSelect(props: UseSelectProps) {
38
46
  const valueText =
39
47
  isMultiple && Array.isArray(value)
40
48
  ? value[0]
41
- ? `${getValueText(value[0], [...options, ...dynamicOptions])}${
42
- value.length > 1 ? ` (+${value.length - 1})` : ''
43
- }`
49
+ ? selectedText && value.length > 1
50
+ ? selectedText
51
+ : `${getOptionText(value[0], [...options, ...dynamicOptions])}${
52
+ value.length > 1 ? ` (+${value.length - 1})` : ''
53
+ }`
44
54
  : undefined
45
- : getValueText(value as SelectValue, [...options, ...dynamicOptions])
55
+ : getOptionText(value as SelectValue, [...options, ...dynamicOptions])
46
56
 
47
57
  return { onChange, value, valueText }
48
58
  }
@@ -17,6 +17,8 @@ export type UseSelectProps = {
17
17
  children?: ReactNode
18
18
  /** Props added to the select button */
19
19
  selectButtonProps?: ButtonProps
20
+ /** Displayed inside the trigger when multiple options selected. */
21
+ selectedText?: string
20
22
  /**
21
23
  * Callback triggered when an option is selected.
22
24
  *