@toptal/picasso-number-input 4.0.21-alpha-cps-1474-fix-timepicker-size-84ffa85d4.8 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist-package/src/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist-package/src/NumberInput/NumberInput.js +5 -2
- package/dist-package/src/NumberInput/NumberInput.js.map +1 -1
- package/package.json +12 -13
- package/src/NumberInput/NumberInput.tsx +11 -1
- package/src/NumberInput/story/WithEndAdornment.example.tsx +26 -0
- package/src/NumberInput/story/index.jsx +6 -1
- package/src/NumberInput/test.tsx +33 -0
- package/LICENSE +0 -20
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../../src/NumberInput/NumberInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAA6B,MAAM,OAAO,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAI1E,OAAO,KAAK,EAAE,KAAK,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAKjF,MAAM,WAAW,KACf,SAAQ,IAAI,CACR,iBAAiB,CAAC,kBAAkB,CAAC,EACrC,cAAc,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAC/C,EACD,SAAS;IACX,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,yCAAyC;IACzC,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IAC/D,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB;AAED,eAAO,MAAM,WAAW,
|
1
|
+
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../../src/NumberInput/NumberInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAA6B,MAAM,OAAO,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAI1E,OAAO,KAAK,EAAE,KAAK,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAKjF,MAAM,WAAW,KACf,SAAQ,IAAI,CACR,iBAAiB,CAAC,kBAAkB,CAAC,EACrC,cAAc,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAC/C,EACD,SAAS;IACX,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,yCAAyC;IACzC,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IAC/D,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB;AAED,eAAO,MAAM,WAAW,gFA4FvB,CAAA;AAeD,eAAe,WAAW,CAAA"}
|
@@ -16,9 +16,12 @@ import { useCombinedRefs } from '@toptal/picasso-utils';
|
|
16
16
|
import { twJoin } from '@toptal/picasso-tailwind-merge';
|
17
17
|
import { NumberInputEndAdornment } from '../NumberInputEndAdornment';
|
18
18
|
export const NumberInput = forwardRef(function NumberInput(props, ref) {
|
19
|
-
const { step = 1, min = -Infinity, max = Infinity, hideControls, enableChangeOnMouseWheel, value, onChange, disabled, status, onResetClick, enableReset, width, icon, size, testIds, highlight } = props, rest = __rest(props, ["step", "min", "max", "hideControls", "enableChangeOnMouseWheel", "value", "onChange", "disabled", "status", "onResetClick", "enableReset", "width", "icon", "size", "testIds", "highlight"]);
|
19
|
+
const { step = 1, min = -Infinity, max = Infinity, hideControls, enableChangeOnMouseWheel, value, onChange, disabled, status, onResetClick, enableReset, endAdornment: customEndAdornment = null, width, icon, size, testIds, highlight } = props, rest = __rest(props, ["step", "min", "max", "hideControls", "enableChangeOnMouseWheel", "value", "onChange", "disabled", "status", "onResetClick", "enableReset", "endAdornment", "width", "icon", "size", "testIds", "highlight"]);
|
20
20
|
const inputRef = useCombinedRefs(ref, useRef(null));
|
21
|
-
const
|
21
|
+
const defaultEndAdornment = (React.createElement(NumberInputEndAdornment, { step: step, min: min, max: max, value: value, disabled: disabled, size: size, inputRef: inputRef }));
|
22
|
+
const endAdornment = hideControls ? (customEndAdornment) : (React.createElement(React.Fragment, null,
|
23
|
+
customEndAdornment,
|
24
|
+
defaultEndAdornment));
|
22
25
|
const startAdornment = icon ? (React.createElement(InputAdornment, { position: 'start', disablePointerEvents: true }, icon)) : null;
|
23
26
|
return (React.createElement(OutlinedInput, { classes: {
|
24
27
|
root: 'pr-0 cursor-text',
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"NumberInput.js","sourceRoot":"","sources":["../../../src/NumberInput/NumberInput.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AAEvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AA6BpE,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CACnC,SAAS,WAAW,CAAC,KAAK,EAAE,GAAG;IAC7B,MAAM,EACJ,IAAI,GAAG,CAAC,EACR,GAAG,GAAG,CAAC,QAAQ,EACf,GAAG,GAAG,QAAQ,EACd,YAAY,EACZ,wBAAwB,EACxB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,WAAW,EACX,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,KAEP,KAAK,EADJ,IAAI,UACL,KAAK,
|
1
|
+
{"version":3,"file":"NumberInput.js","sourceRoot":"","sources":["../../../src/NumberInput/NumberInput.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@toptal/picasso-number-input",
|
3
|
-
"version": "4.0
|
3
|
+
"version": "4.1.0",
|
4
4
|
"description": "Toptal UI components library - NumberInput",
|
5
5
|
"publishConfig": {
|
6
6
|
"access": "public"
|
@@ -22,34 +22,33 @@
|
|
22
22
|
},
|
23
23
|
"homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
|
24
24
|
"dependencies": {
|
25
|
-
"@toptal/picasso-container": "3.1.
|
26
|
-
"@toptal/picasso-form": "6.1.
|
27
|
-
"@toptal/picasso-icons": "1.11.
|
28
|
-
"@toptal/picasso-input-adornment": "3.0.
|
29
|
-
"@toptal/picasso-outlined-input": "4.0.
|
30
|
-
"@toptal/picasso-shared": "15.0.
|
31
|
-
"@toptal/picasso-utils": "3.0.
|
25
|
+
"@toptal/picasso-container": "3.1.1",
|
26
|
+
"@toptal/picasso-form": "6.1.7",
|
27
|
+
"@toptal/picasso-icons": "1.11.0",
|
28
|
+
"@toptal/picasso-input-adornment": "3.0.8",
|
29
|
+
"@toptal/picasso-outlined-input": "4.0.16",
|
30
|
+
"@toptal/picasso-shared": "15.0.0",
|
31
|
+
"@toptal/picasso-utils": "3.0.0"
|
32
32
|
},
|
33
33
|
"sideEffects": [
|
34
34
|
"**/styles.ts",
|
35
35
|
"**/styles.js"
|
36
36
|
],
|
37
37
|
"peerDependencies": {
|
38
|
-
"@toptal/picasso-tailwind": ">=2.7",
|
39
38
|
"@toptal/picasso-tailwind-merge": "^2.0.0",
|
39
|
+
"@toptal/picasso-tailwind": ">=2.7",
|
40
40
|
"react": ">=16.12.0 < 19.0.0"
|
41
41
|
},
|
42
42
|
"exports": {
|
43
43
|
".": "./dist-package/src/index.js"
|
44
44
|
},
|
45
45
|
"devDependencies": {
|
46
|
-
"@toptal/picasso-tailwind-merge": "2.0.
|
47
|
-
"@toptal/picasso-test-utils": "1.1.
|
46
|
+
"@toptal/picasso-tailwind-merge": "2.0.2",
|
47
|
+
"@toptal/picasso-test-utils": "1.1.1"
|
48
48
|
},
|
49
49
|
"files": [
|
50
50
|
"dist-package/**",
|
51
51
|
"!dist-package/tsconfig.tsbuildinfo",
|
52
52
|
"src"
|
53
|
-
]
|
54
|
-
"gitHead": "84ffa85d463ab6735259eb67d2794bc5094e0f42"
|
53
|
+
]
|
55
54
|
}
|
@@ -50,6 +50,7 @@ export const NumberInput = forwardRef<HTMLInputElement, Props>(
|
|
50
50
|
status,
|
51
51
|
onResetClick,
|
52
52
|
enableReset,
|
53
|
+
endAdornment: customEndAdornment = null,
|
53
54
|
width,
|
54
55
|
icon,
|
55
56
|
size,
|
@@ -63,7 +64,7 @@ export const NumberInput = forwardRef<HTMLInputElement, Props>(
|
|
63
64
|
useRef<HTMLInputElement>(null)
|
64
65
|
)
|
65
66
|
|
66
|
-
const
|
67
|
+
const defaultEndAdornment = (
|
67
68
|
<NumberInputEndAdornment
|
68
69
|
step={step}
|
69
70
|
min={min}
|
@@ -75,6 +76,15 @@ export const NumberInput = forwardRef<HTMLInputElement, Props>(
|
|
75
76
|
/>
|
76
77
|
)
|
77
78
|
|
79
|
+
const endAdornment = hideControls ? (
|
80
|
+
customEndAdornment
|
81
|
+
) : (
|
82
|
+
<>
|
83
|
+
{customEndAdornment}
|
84
|
+
{defaultEndAdornment}
|
85
|
+
</>
|
86
|
+
)
|
87
|
+
|
78
88
|
const startAdornment = icon ? (
|
79
89
|
<InputAdornment position='start' disablePointerEvents>
|
80
90
|
{icon}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import type { ChangeEventHandler } from 'react'
|
2
|
+
import React, { useState } from 'react'
|
3
|
+
import { NumberInput, Container, Typography } from '@toptal/picasso'
|
4
|
+
|
5
|
+
const WithEndAdornmentExample = () => {
|
6
|
+
const [value, setValue] = useState('1')
|
7
|
+
|
8
|
+
const handleChange: ChangeEventHandler<HTMLInputElement> = event => {
|
9
|
+
setValue(event.target.value)
|
10
|
+
}
|
11
|
+
|
12
|
+
return (
|
13
|
+
<Container>
|
14
|
+
<NumberInput
|
15
|
+
value={value}
|
16
|
+
onChange={handleChange}
|
17
|
+
step='5'
|
18
|
+
max='100'
|
19
|
+
min='-100'
|
20
|
+
endAdornment={<Typography color='dark-grey'>$/hr</Typography>}
|
21
|
+
/>
|
22
|
+
</Container>
|
23
|
+
)
|
24
|
+
}
|
25
|
+
|
26
|
+
export default WithEndAdornmentExample
|
@@ -4,7 +4,7 @@ import PicassoBook from '~/.storybook/components/PicassoBook'
|
|
4
4
|
const page = PicassoBook.section('Forms').createPage(
|
5
5
|
'NumberInput',
|
6
6
|
`Input component for numbers
|
7
|
-
|
7
|
+
|
8
8
|
${PicassoBook.createSourceLink(__filename)}
|
9
9
|
`
|
10
10
|
)
|
@@ -35,6 +35,11 @@ page
|
|
35
35
|
'With Icon',
|
36
36
|
'base/NumberInput'
|
37
37
|
)
|
38
|
+
.addExample(
|
39
|
+
'NumberInput/story/WithEndAdornment.example.tsx',
|
40
|
+
'With End Adornment',
|
41
|
+
'base/NumberInput'
|
42
|
+
)
|
38
43
|
.addExample(
|
39
44
|
'NumberInput/story/Sizes.example.tsx',
|
40
45
|
'Sizes',
|
package/src/NumberInput/test.tsx
CHANGED
@@ -22,6 +22,8 @@ const NumberInputRenderer = (
|
|
22
22
|
value={value}
|
23
23
|
onChange={handleChange}
|
24
24
|
status={props.status}
|
25
|
+
endAdornment={props.endAdornment}
|
26
|
+
hideControls={props.hideControls}
|
25
27
|
testIds={props.testIds}
|
26
28
|
/>
|
27
29
|
)
|
@@ -150,4 +152,35 @@ describe('NumberInput', () => {
|
|
150
152
|
expect(validIcon).not.toBeVisible()
|
151
153
|
})
|
152
154
|
})
|
155
|
+
|
156
|
+
describe('end adornment', () => {
|
157
|
+
describe('when endAdornment is passed', () => {
|
158
|
+
it('renders endAdornment with control buttons', () => {
|
159
|
+
const testProps: NumberInputProps = {
|
160
|
+
value: '10',
|
161
|
+
endAdornment: <div data-testid='custom-end-adornment' />,
|
162
|
+
}
|
163
|
+
|
164
|
+
const { getByTestId, getAllByRole } = renderNumberInput(testProps)
|
165
|
+
|
166
|
+
expect(getByTestId('custom-end-adornment')).toBeVisible()
|
167
|
+
expect(getAllByRole('button')).toHaveLength(2)
|
168
|
+
})
|
169
|
+
})
|
170
|
+
|
171
|
+
describe('when endAdornment is passed and controls are hidden', () => {
|
172
|
+
it('renders endAdornment without control buttons', () => {
|
173
|
+
const testProps: NumberInputProps = {
|
174
|
+
value: '10',
|
175
|
+
endAdornment: <div data-testid='custom-end-adornment' />,
|
176
|
+
hideControls: true,
|
177
|
+
}
|
178
|
+
|
179
|
+
const { getByTestId, queryAllByRole } = renderNumberInput(testProps)
|
180
|
+
|
181
|
+
expect(getByTestId('custom-end-adornment')).toBeVisible()
|
182
|
+
expect(queryAllByRole('button')).toHaveLength(0)
|
183
|
+
})
|
184
|
+
})
|
185
|
+
})
|
153
186
|
})
|
package/LICENSE
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
MIT License
|
2
|
-
|
3
|
-
Copyright (c) 2021-2022 Toptal, LLC
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
-
this software and associated documentation files (the “Software”), to deal in
|
7
|
-
the Software without restriction, including without limitation the rights to
|
8
|
-
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
-
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
-
subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
13
|
-
copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
-
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
-
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
-
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
-
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|