@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.
- package/dist/cjs/dragAndDrop/dragAndDrop.d.ts.map +1 -1
- package/dist/cjs/dragAndDrop/dragAndDrop.js +3 -3
- package/dist/cjs/dragAndDrop/dragAndDrop.js.map +1 -1
- package/dist/cjs/dragAndDrop/dragAndDrop.types.d.ts +6 -4
- package/dist/cjs/dragAndDrop/dragAndDrop.types.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/range/consts.d.ts +6 -0
- package/dist/cjs/range/consts.d.ts.map +1 -0
- package/dist/cjs/range/consts.js +9 -0
- package/dist/cjs/range/consts.js.map +1 -0
- package/dist/cjs/range/index.d.ts +4 -0
- package/dist/cjs/range/index.d.ts.map +1 -0
- package/dist/cjs/range/index.js +25 -0
- package/dist/cjs/range/index.js.map +1 -0
- package/dist/cjs/range/range.d.ts +5 -0
- package/dist/cjs/range/range.d.ts.map +1 -0
- package/dist/cjs/range/range.js +60 -0
- package/dist/cjs/range/range.js.map +1 -0
- package/dist/cjs/range/range.types.d.ts +26 -0
- package/dist/cjs/range/range.types.d.ts.map +1 -0
- package/dist/cjs/range/range.types.js +3 -0
- package/dist/cjs/range/range.types.js.map +1 -0
- package/dist/cjs/range/theme.d.ts +37 -0
- package/dist/cjs/range/theme.d.ts.map +1 -0
- package/dist/cjs/range/theme.js +44 -0
- package/dist/cjs/range/theme.js.map +1 -0
- package/dist/cjs/theme/components.d.ts +35 -0
- package/dist/cjs/theme/components.d.ts.map +1 -1
- package/dist/cjs/theme/components.js +30 -28
- package/dist/cjs/theme/components.js.map +1 -1
- package/dist/cjs/theme/defaultTheme.d.ts +35 -0
- package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
- package/dist/cjs/tooltip/tooltip.d.ts.map +1 -1
- package/dist/cjs/tooltip/tooltip.js +2 -2
- package/dist/cjs/tooltip/tooltip.js.map +1 -1
- package/dist/cjs/tooltip/tooltip.types.d.ts +2 -0
- package/dist/cjs/tooltip/tooltip.types.d.ts.map +1 -1
- package/dist/esm/dragAndDrop/dragAndDrop.d.ts.map +1 -1
- package/dist/esm/dragAndDrop/dragAndDrop.js +3 -3
- package/dist/esm/dragAndDrop/dragAndDrop.js.map +1 -1
- package/dist/esm/dragAndDrop/dragAndDrop.types.d.ts +6 -4
- package/dist/esm/dragAndDrop/dragAndDrop.types.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/range/consts.d.ts +6 -0
- package/dist/esm/range/consts.d.ts.map +1 -0
- package/dist/esm/range/consts.js +6 -0
- package/dist/esm/range/consts.js.map +1 -0
- package/dist/esm/range/index.d.ts +4 -0
- package/dist/esm/range/index.d.ts.map +1 -0
- package/dist/esm/range/index.js +4 -0
- package/dist/esm/range/index.js.map +1 -0
- package/dist/esm/range/range.d.ts +5 -0
- package/dist/esm/range/range.d.ts.map +1 -0
- package/dist/esm/range/range.js +43 -0
- package/dist/esm/range/range.js.map +1 -0
- package/dist/esm/range/range.types.d.ts +26 -0
- package/dist/esm/range/range.types.d.ts.map +1 -0
- package/dist/esm/range/range.types.js +2 -0
- package/dist/esm/range/range.types.js.map +1 -0
- package/dist/esm/range/theme.d.ts +37 -0
- package/dist/esm/range/theme.d.ts.map +1 -0
- package/dist/esm/range/theme.js +42 -0
- package/dist/esm/range/theme.js.map +1 -0
- package/dist/esm/theme/components.d.ts +35 -0
- package/dist/esm/theme/components.d.ts.map +1 -1
- package/dist/esm/theme/components.js +2 -0
- package/dist/esm/theme/components.js.map +1 -1
- package/dist/esm/theme/defaultTheme.d.ts +35 -0
- package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
- package/dist/esm/tooltip/tooltip.d.ts.map +1 -1
- package/dist/esm/tooltip/tooltip.js +2 -2
- package/dist/esm/tooltip/tooltip.js.map +1 -1
- package/dist/esm/tooltip/tooltip.types.d.ts +2 -0
- package/dist/esm/tooltip/tooltip.types.d.ts.map +1 -1
- package/dist/tsconfig.legacy.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/src/dragAndDrop/dragAndDrop.tsx +4 -3
- package/src/dragAndDrop/dragAndDrop.types.ts +6 -4
- package/src/index.ts +1 -0
- package/src/range/consts.ts +5 -0
- package/src/range/index.ts +3 -0
- package/src/range/range.tsx +107 -0
- package/src/range/range.types.ts +28 -0
- package/src/range/theme.ts +47 -0
- package/src/theme/components.ts +2 -0
- package/src/tooltip/tooltip.tsx +3 -1
- 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.
|
|
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
|
-
|
|
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 (
|
|
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
|
-
{...(
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
14
|
-
|
|
15
|
-
/** Allows
|
|
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
|
@@ -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
|
+
}
|
package/src/theme/components.ts
CHANGED
|
@@ -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,
|
package/src/tooltip/tooltip.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Tippy from '@tippyjs/react'
|
|
2
|
-
import
|
|
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>
|