@veracity/vui 2.24.0-beta.1 → 2.24.0-beta.3

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 (94) hide show
  1. package/dist/cjs/dragAndDrop/dragAndDrop.d.ts.map +1 -1
  2. package/dist/cjs/dragAndDrop/dragAndDrop.js +3 -3
  3. package/dist/cjs/dragAndDrop/dragAndDrop.js.map +1 -1
  4. package/dist/cjs/dragAndDrop/dragAndDrop.types.d.ts +6 -4
  5. package/dist/cjs/dragAndDrop/dragAndDrop.types.d.ts.map +1 -1
  6. package/dist/cjs/index.d.ts +1 -0
  7. package/dist/cjs/index.d.ts.map +1 -1
  8. package/dist/cjs/index.js +1 -0
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/range/consts.d.ts +6 -0
  11. package/dist/cjs/range/consts.d.ts.map +1 -0
  12. package/dist/cjs/range/consts.js +9 -0
  13. package/dist/cjs/range/consts.js.map +1 -0
  14. package/dist/cjs/range/index.d.ts +4 -0
  15. package/dist/cjs/range/index.d.ts.map +1 -0
  16. package/dist/cjs/range/index.js +25 -0
  17. package/dist/cjs/range/index.js.map +1 -0
  18. package/dist/cjs/range/range.d.ts +5 -0
  19. package/dist/cjs/range/range.d.ts.map +1 -0
  20. package/dist/cjs/range/range.js +60 -0
  21. package/dist/cjs/range/range.js.map +1 -0
  22. package/dist/cjs/range/range.types.d.ts +26 -0
  23. package/dist/cjs/range/range.types.d.ts.map +1 -0
  24. package/dist/cjs/range/range.types.js +3 -0
  25. package/dist/cjs/range/range.types.js.map +1 -0
  26. package/dist/cjs/range/theme.d.ts +37 -0
  27. package/dist/cjs/range/theme.d.ts.map +1 -0
  28. package/dist/cjs/range/theme.js +44 -0
  29. package/dist/cjs/range/theme.js.map +1 -0
  30. package/dist/cjs/theme/components.d.ts +35 -0
  31. package/dist/cjs/theme/components.d.ts.map +1 -1
  32. package/dist/cjs/theme/components.js +30 -28
  33. package/dist/cjs/theme/components.js.map +1 -1
  34. package/dist/cjs/theme/defaultTheme.d.ts +35 -0
  35. package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
  36. package/dist/cjs/tooltip/tooltip.d.ts.map +1 -1
  37. package/dist/cjs/tooltip/tooltip.js +2 -2
  38. package/dist/cjs/tooltip/tooltip.js.map +1 -1
  39. package/dist/cjs/tooltip/tooltip.types.d.ts +2 -0
  40. package/dist/cjs/tooltip/tooltip.types.d.ts.map +1 -1
  41. package/dist/esm/dragAndDrop/dragAndDrop.d.ts.map +1 -1
  42. package/dist/esm/dragAndDrop/dragAndDrop.js +3 -3
  43. package/dist/esm/dragAndDrop/dragAndDrop.js.map +1 -1
  44. package/dist/esm/dragAndDrop/dragAndDrop.types.d.ts +6 -4
  45. package/dist/esm/dragAndDrop/dragAndDrop.types.d.ts.map +1 -1
  46. package/dist/esm/index.d.ts +1 -0
  47. package/dist/esm/index.d.ts.map +1 -1
  48. package/dist/esm/index.js +1 -0
  49. package/dist/esm/index.js.map +1 -1
  50. package/dist/esm/range/consts.d.ts +6 -0
  51. package/dist/esm/range/consts.d.ts.map +1 -0
  52. package/dist/esm/range/consts.js +6 -0
  53. package/dist/esm/range/consts.js.map +1 -0
  54. package/dist/esm/range/index.d.ts +4 -0
  55. package/dist/esm/range/index.d.ts.map +1 -0
  56. package/dist/esm/range/index.js +4 -0
  57. package/dist/esm/range/index.js.map +1 -0
  58. package/dist/esm/range/range.d.ts +5 -0
  59. package/dist/esm/range/range.d.ts.map +1 -0
  60. package/dist/esm/range/range.js +43 -0
  61. package/dist/esm/range/range.js.map +1 -0
  62. package/dist/esm/range/range.types.d.ts +26 -0
  63. package/dist/esm/range/range.types.d.ts.map +1 -0
  64. package/dist/esm/range/range.types.js +2 -0
  65. package/dist/esm/range/range.types.js.map +1 -0
  66. package/dist/esm/range/theme.d.ts +37 -0
  67. package/dist/esm/range/theme.d.ts.map +1 -0
  68. package/dist/esm/range/theme.js +42 -0
  69. package/dist/esm/range/theme.js.map +1 -0
  70. package/dist/esm/theme/components.d.ts +35 -0
  71. package/dist/esm/theme/components.d.ts.map +1 -1
  72. package/dist/esm/theme/components.js +2 -0
  73. package/dist/esm/theme/components.js.map +1 -1
  74. package/dist/esm/theme/defaultTheme.d.ts +35 -0
  75. package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
  76. package/dist/esm/tooltip/tooltip.d.ts.map +1 -1
  77. package/dist/esm/tooltip/tooltip.js +2 -2
  78. package/dist/esm/tooltip/tooltip.js.map +1 -1
  79. package/dist/esm/tooltip/tooltip.types.d.ts +2 -0
  80. package/dist/esm/tooltip/tooltip.types.d.ts.map +1 -1
  81. package/dist/tsconfig.legacy.tsbuildinfo +1 -1
  82. package/dist/tsconfig.tsbuildinfo +1 -1
  83. package/package.json +3 -1
  84. package/src/dragAndDrop/dragAndDrop.tsx +4 -3
  85. package/src/dragAndDrop/dragAndDrop.types.ts +6 -4
  86. package/src/index.ts +1 -0
  87. package/src/range/consts.ts +5 -0
  88. package/src/range/index.ts +3 -0
  89. package/src/range/range.tsx +107 -0
  90. package/src/range/range.types.ts +28 -0
  91. package/src/range/theme.ts +47 -0
  92. package/src/theme/components.ts +2 -0
  93. package/src/tooltip/tooltip.tsx +3 -1
  94. package/src/tooltip/tooltip.types.ts +2 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veracity/vui",
3
- "version": "2.24.0-beta.1",
3
+ "version": "2.24.0-beta.3",
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",
@@ -26,6 +26,7 @@
26
26
  "@xstyled/system": "2.5.0",
27
27
  "@xstyled/util": "2.2.3",
28
28
  "react-focus-lock": "2.9.7",
29
+ "react-slider": "2.0.6",
29
30
  "styled-components": "5.3.11",
30
31
  "tippy.js": "6.3.7"
31
32
  },
@@ -33,6 +34,7 @@
33
34
  "@types/node": "^20.11.16",
34
35
  "@types/react": "^18.2.55",
35
36
  "@types/react-dom": "^18.2.19",
37
+ "@types/react-slider": "^1.3.6",
36
38
  "@veracity/eslint-config": "*",
37
39
  "@veracity/prettier-config": "*",
38
40
  "@veracity/tsconfig": "*",
@@ -25,7 +25,8 @@ export const DragAndDrop = vui<'label', DragAndDropProps>((props, ref) => {
25
25
  accept,
26
26
  className,
27
27
  icon = defaultIcon,
28
- isFolderUpload,
28
+ selectFolderOnClick,
29
+ selectFolderOnDrop,
29
30
  onFilesAdded,
30
31
  multiple = true,
31
32
  text = defaultText,
@@ -89,7 +90,7 @@ export const DragAndDrop = vui<'label', DragAndDropProps>((props, ref) => {
89
90
  e.preventDefault()
90
91
  if (disabled) return undefined
91
92
 
92
- if (isFolderUpload) {
93
+ if (selectFolderOnDrop) {
93
94
  const items = e.dataTransfer.items
94
95
  getFilesWebkitDataTransferItems(items).then(files => files?.length && onFilesAdded?.(files))
95
96
  return undefined
@@ -127,7 +128,7 @@ export const DragAndDrop = vui<'label', DragAndDropProps>((props, ref) => {
127
128
  ref={fileInput}
128
129
  style={{ display: 'none' }}
129
130
  type={inputType}
130
- {...(isFolderUpload && { webkitdirectory: 'true', directory: 'true' })}
131
+ {...(selectFolderOnClick && { webkitdirectory: 'true', directory: 'true' })}
131
132
  />
132
133
  </DragAndDropBase>
133
134
  )
@@ -4,15 +4,17 @@ import { ThemingProps } from '../theme'
4
4
 
5
5
  export type DragAndDropProps = Omit<BoxProps, 'variant'> &
6
6
  ThemingProps<'DragAndDrop'> & {
7
- /** A string that defines the file types the file input should accept. This string is a comma-separated list of [unique file type specifiers](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers). */
7
+ /** Defines the file types the file input should accept. This string is a comma-separated list of [unique file type specifiers](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers). */
8
8
  accept?: string
9
9
  /** Disabled. @default `false` */
10
10
  disabled?: boolean
11
11
  /** The message icon. @default `falCloudUpload` */
12
12
  icon?: IconProp
13
- /** Allow folder upload @default `false` */
14
- isFolderUpload?: boolean
15
- /** Allows to select multiple files when the drop zone is clicked.. @default `true` */
13
+ /** Allows folder selection using click @default `false` */
14
+ selectFolderOnClick?: boolean
15
+ /** Allows folder selection using drag and drop @default `false` */
16
+ selectFolderOnDrop?: boolean
17
+ /** Allows to select multiple files when the drop zone is clicked @default `true` */
16
18
  multiple?: boolean
17
19
  /** The message text. @default `Click or drag files to this area` */
18
20
  text?: string
package/src/index.ts CHANGED
@@ -41,6 +41,7 @@ export * from './portal'
41
41
  export * from './progress'
42
42
  export * from './progressCircular'
43
43
  export * from './radio'
44
+ export * from './range'
44
45
  export * from './select'
45
46
  export * from './sidemenu'
46
47
  export * from './skeleton'
@@ -0,0 +1,5 @@
1
+ export const rangeColors = {
2
+ main: 'seaBlue.28',
3
+ track: 'sandstone.79',
4
+ disabled: 'sandstone.55',
5
+ } as const
@@ -0,0 +1,3 @@
1
+ export * from './range'
2
+ export { default } from './range'
3
+ export * from './range.types'
@@ -0,0 +1,107 @@
1
+ import ReactSlider from 'react-slider'
2
+
3
+ import { Box } from '../box'
4
+ import { styled, useStyleConfig, vui } from '../core'
5
+ import { Tooltip } from '../tooltip'
6
+ import { cs, filterUndefined } from '../utils'
7
+ import { rangeColors } from './consts'
8
+ import { RangeProps } from './range.types'
9
+
10
+ const SliderBase = styled(ReactSlider)`
11
+ width: 100%;
12
+ height: 4px;
13
+ cursor: pointer;
14
+ transition-duration: '0s';
15
+
16
+ &[aria-disabled='true'] * {
17
+ pointer-events: none !important;
18
+ color: yellow;
19
+ background-color: yellow;
20
+ }
21
+ `
22
+
23
+ /** Implements a range input. */
24
+ export const Range = vui<'div', RangeProps>((props, ref) => {
25
+ const {
26
+ className,
27
+ value,
28
+ defaultValue = 0,
29
+ disabled,
30
+ min = 0,
31
+ minDistance = 0,
32
+ max = 100,
33
+ step = 1,
34
+ showTooltip = false,
35
+ showValue = false,
36
+ onChange,
37
+ ...rest
38
+ } = props
39
+
40
+ const styles = useStyleConfig('Range', props)
41
+ const aliasedProps = filterUndefined({
42
+ 'aria-disabled': disabled,
43
+ })
44
+ const isSingleValue = typeof value !== 'object'
45
+ const mainColor = disabled ? rangeColors.disabled : rangeColors.main
46
+
47
+ const getTrackColor = (trackProps: any) => {
48
+ const { key } = trackProps
49
+
50
+ if (isSingleValue) return key === 'track-0' ? mainColor : rangeColors.track
51
+
52
+ return key === 'track-2' ? rangeColors.track : key === 'track-1' ? mainColor : rangeColors.track
53
+ }
54
+
55
+ const Thumb = (props: any, state: any) => {
56
+ const content = (
57
+ <Box className="vui-range-thumb" {...styles.thumb} borderColor={mainColor} {...props}>
58
+ {showValue && (
59
+ <Box center className="vui-range-thumb-value" {...styles.thumbValue}>
60
+ {state.valueNow}
61
+ </Box>
62
+ )}
63
+ </Box>
64
+ )
65
+ return showValue ? (
66
+ content
67
+ ) : (
68
+ <Tooltip text={state.valueNow} visible={showTooltip}>
69
+ {content}
70
+ </Tooltip>
71
+ )
72
+ }
73
+
74
+ const Track = (
75
+ props: any,
76
+ state: {
77
+ index: number
78
+ value: number | readonly number[]
79
+ },
80
+ ) => <Box {...styles.track} bg={getTrackColor(props)} className="vui-range-track" {...props} index={state.index} />
81
+
82
+ return (
83
+ <Box
84
+ className={cs('vui-range', isSingleValue ? 'vui-range-single' : 'vui-range-range', className)}
85
+ ref={ref}
86
+ {...styles.container}
87
+ {...aliasedProps}
88
+ {...rest}
89
+ >
90
+ <SliderBase
91
+ className="vui-range-slider"
92
+ defaultValue={defaultValue}
93
+ disabled={disabled}
94
+ max={max}
95
+ min={min}
96
+ minDistance={minDistance}
97
+ onChange={onChange}
98
+ renderThumb={Thumb}
99
+ renderTrack={Track}
100
+ step={step}
101
+ value={value}
102
+ />
103
+ </Box>
104
+ )
105
+ })
106
+
107
+ export default Range
@@ -0,0 +1,28 @@
1
+ import { SystemProps } from '../system'
2
+ import { ThemingProps } from '../theme'
3
+
4
+ export type RangeValue = number | readonly number[]
5
+
6
+ export type RangeProps = SystemProps &
7
+ ThemingProps<'Range'> & {
8
+ /** The default value of the range slider, number or [number, number]. @default 0 */
9
+ defaultValue?: RangeValue
10
+ /** The current value of the range slider, number or [number, number]. */
11
+ value?: RangeValue
12
+ /** Disables the range slider with the right styling */
13
+ disabled?: boolean
14
+ /** The minimum value of the range slider. @default 0 */
15
+ min?: number
16
+ /** The minimum value of the range slider. @default 100 */
17
+ max?: number
18
+ /** The minimum distance between two values in the range slider. @default 0 */
19
+ minDistance?: number
20
+ /** The step increment of the range slider. @default 1 */
21
+ step?: number
22
+ /** Whether to show a tooltip with the current value. @default false */
23
+ showTooltip?: boolean
24
+ /** Whether to show the current value bellow the thumb. @default false */
25
+ showValue?: boolean
26
+ /** Callback function that is called when the value changes. */
27
+ onChange?: (value: RangeValue) => void
28
+ }
@@ -0,0 +1,47 @@
1
+ import { rangeColors } from './consts'
2
+
3
+ const baseStyle = {
4
+ container: {
5
+ w: 1,
6
+ },
7
+ thumb: {
8
+ bg: 'white',
9
+ border: `2px solid ${rangeColors.main}`,
10
+ borderRadius: '24px',
11
+ cursor: 'grab',
12
+ h: '24px',
13
+ lineHeight: '24px',
14
+ w: '24px',
15
+ textAlign: 'center',
16
+ top: '-10px',
17
+ transitionDuration: '0s',
18
+ },
19
+ thumbValue: {
20
+ position: 'absolute',
21
+ top: '24px',
22
+ w: '18px',
23
+ },
24
+ track: {
25
+ bg: rangeColors.main,
26
+ bottom: 0,
27
+ borderRadius: '24px',
28
+ top: 0,
29
+ transitionDuration: '0s',
30
+ },
31
+ }
32
+
33
+ const defaultProps = {}
34
+
35
+ const parts = ['container', 'thumb', 'thumbValue', 'track']
36
+
37
+ const sizes = {}
38
+
39
+ const variants = {}
40
+
41
+ export default {
42
+ baseStyle,
43
+ defaultProps,
44
+ parts,
45
+ sizes,
46
+ variants,
47
+ }
@@ -34,6 +34,7 @@ import Popover from '../popover/theme'
34
34
  import Progress from '../progress/theme'
35
35
  import ProgressCircular from '../progressCircular/theme'
36
36
  import Radio from '../radio/theme'
37
+ import Range from '../range/theme'
37
38
  import Select from '../select/theme'
38
39
  import Sidemenu from '../sidemenu/theme'
39
40
  import Skeleton from '../skeleton/theme'
@@ -93,6 +94,7 @@ export default {
93
94
  Definition,
94
95
  Popover,
95
96
  Radio,
97
+ Range,
96
98
  Select,
97
99
  Sidemenu,
98
100
  Skeleton,
@@ -1,5 +1,5 @@
1
1
  import Tippy from '@tippyjs/react'
2
- import React, { JSXElementConstructor, ReactElement } from 'react'
2
+ import { JSXElementConstructor, ReactElement } from 'react'
3
3
 
4
4
  import Box from '../box'
5
5
  import { useUp, v } from '../core'
@@ -23,6 +23,7 @@ export const Tooltip = (props: TooltipProps) => {
23
23
  maxWidth = '400px',
24
24
  text = 'Tooltip',
25
25
  placement = 'top',
26
+ visible = false,
26
27
  } = props
27
28
 
28
29
  const isDesktop = useUp('md')
@@ -70,6 +71,7 @@ export const Tooltip = (props: TooltipProps) => {
70
71
  },
71
72
  ],
72
73
  }}
74
+ visible={visible || undefined}
73
75
  >
74
76
  {children as ReactElement<any, string | JSXElementConstructor<any>> | undefined}
75
77
  </Tippy>
@@ -26,4 +26,6 @@ export interface TooltipProps extends ChildrenProp {
26
26
  linkText?: string
27
27
  /** The <Link /> props. */
28
28
  linkProps?: LinkProps
29
+ /** Keeping the tooltip always visible @default false */
30
+ visible?: boolean
29
31
  }