@popsure/dirty-swan 0.33.0 → 0.33.1
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/esm/App.d.ts +3 -0
- package/dist/esm/_commonjsHelpers-e7f67fd8.js +23 -0
- package/dist/esm/_commonjsHelpers-e7f67fd8.js.map +1 -0
- package/dist/esm/components/autocompleteAddress/index.js +2062 -0
- package/dist/esm/components/autocompleteAddress/index.js.map +1 -0
- package/dist/esm/components/autocompleteAddress/index.stories.js +110 -0
- package/dist/esm/components/autocompleteAddress/index.stories.js.map +1 -0
- package/dist/esm/components/autocompleteAddress/index.test.js +115 -0
- package/dist/esm/components/autocompleteAddress/index.test.js.map +1 -0
- package/dist/esm/components/button/index.js +26 -0
- package/dist/esm/components/button/index.js.map +1 -0
- package/dist/esm/components/cards/cardButton/index.js +6 -0
- package/dist/esm/components/cards/cardButton/index.js.map +1 -0
- package/dist/esm/components/cards/cardWithLeftIcon/index.js +7 -0
- package/dist/esm/components/cards/cardWithLeftIcon/index.js.map +1 -0
- package/dist/esm/components/cards/cardWithTopIcon/index.js +7 -0
- package/dist/esm/components/cards/cardWithTopIcon/index.js.map +1 -0
- package/dist/esm/components/cards/cardWithTopLeftIcon/index.js +7 -0
- package/dist/esm/components/cards/cardWithTopLeftIcon/index.js.map +1 -0
- package/dist/esm/components/cards/index.js +125 -0
- package/dist/esm/components/cards/index.js.map +1 -0
- package/dist/esm/components/cards/infoCard/index.js +7 -0
- package/dist/esm/components/cards/infoCard/index.js.map +1 -0
- package/dist/esm/components/chip/index.js +22 -0
- package/dist/esm/components/chip/index.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/AccordionItem/AccordionItem.js +32 -0
- package/dist/esm/components/comparisonTable/components/AccordionItem/AccordionItem.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/AccordionItem/index.js +8 -0
- package/dist/esm/components/comparisonTable/components/AccordionItem/index.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/Chevron.js +10 -0
- package/dist/esm/components/comparisonTable/components/Chevron.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/Row/index.js +36 -0
- package/dist/esm/components/comparisonTable/components/Row/index.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableArrows/Arrow.js +10 -0
- package/dist/esm/components/comparisonTable/components/TableArrows/Arrow.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableArrows/index.js +24 -0
- package/dist/esm/components/comparisonTable/components/TableArrows/index.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableButton/index.js +15 -0
- package/dist/esm/components/comparisonTable/components/TableButton/index.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableButton/index.test.js +37 -0
- package/dist/esm/components/comparisonTable/components/TableButton/index.test.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableInfoButton/index.js +22 -0
- package/dist/esm/components/comparisonTable/components/TableInfoButton/index.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableRating/StarIcon.js +10 -0
- package/dist/esm/components/comparisonTable/components/TableRating/StarIcon.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableRating/ZapIcon.js +10 -0
- package/dist/esm/components/comparisonTable/components/TableRating/ZapIcon.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableRating/index.js +27 -0
- package/dist/esm/components/comparisonTable/components/TableRating/index.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableRowHeader/index.js +18 -0
- package/dist/esm/components/comparisonTable/components/TableRowHeader/index.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableRowHeader/index.test.js +82 -0
- package/dist/esm/components/comparisonTable/components/TableRowHeader/index.test.js.map +1 -0
- package/dist/esm/components/comparisonTable/components/TableTrueFalse.js +13 -0
- package/dist/esm/components/comparisonTable/components/TableTrueFalse.js.map +1 -0
- package/dist/esm/components/comparisonTable/index.js +1683 -0
- package/dist/esm/components/comparisonTable/index.js.map +1 -0
- package/dist/esm/components/dateSelector/index.js +2180 -0
- package/dist/esm/components/dateSelector/index.js.map +1 -0
- package/dist/esm/components/dateSelector/index.test.js +65 -0
- package/dist/esm/components/dateSelector/index.test.js.map +1 -0
- package/dist/esm/components/downloadButton/index.js +36 -0
- package/dist/esm/components/downloadButton/index.js.map +1 -0
- package/dist/esm/components/downloadButton/index.stories.js +47 -0
- package/dist/esm/components/downloadButton/index.stories.js.map +1 -0
- package/dist/esm/components/input/autoSuggestInput/index.js +2157 -0
- package/dist/esm/components/input/autoSuggestInput/index.js.map +1 -0
- package/dist/esm/components/input/autoSuggestMultiSelect/index.js +41 -0
- package/dist/esm/components/input/autoSuggestMultiSelect/index.js.map +1 -0
- package/dist/esm/components/input/checkbox/index.js +53 -0
- package/dist/esm/components/input/checkbox/index.js.map +1 -0
- package/dist/esm/components/input/checkbox/index.stories.js +153 -0
- package/dist/esm/components/input/checkbox/index.stories.js.map +1 -0
- package/dist/esm/components/input/checkbox/index.test.js +105 -0
- package/dist/esm/components/input/checkbox/index.test.js.map +1 -0
- package/dist/esm/components/input/currency/index.js +63 -0
- package/dist/esm/components/input/currency/index.js.map +1 -0
- package/dist/esm/components/input/currency/index.test.js +209 -0
- package/dist/esm/components/input/currency/index.test.js.map +1 -0
- package/dist/esm/components/input/iban/index.js +33 -0
- package/dist/esm/components/input/iban/index.js.map +1 -0
- package/dist/esm/components/input/index.js +29 -0
- package/dist/esm/components/input/index.js.map +1 -0
- package/dist/esm/components/markdown/index.js +22178 -0
- package/dist/esm/components/markdown/index.js.map +1 -0
- package/dist/esm/components/markdown/index.stories.js +66 -0
- package/dist/esm/components/markdown/index.stories.js.map +1 -0
- package/dist/esm/components/modal/bottomModal/index.js +35 -0
- package/dist/esm/components/modal/bottomModal/index.js.map +1 -0
- package/dist/esm/components/modal/bottomOrRegularModal/index.js +36 -0
- package/dist/esm/components/modal/bottomOrRegularModal/index.js.map +1 -0
- package/dist/esm/components/modal/regularModal/index.js +28 -0
- package/dist/esm/components/modal/regularModal/index.js.map +1 -0
- package/dist/esm/components/multiDropzone/UploadFileCell/index.js +6 -0
- package/dist/esm/components/multiDropzone/UploadFileCell/index.js.map +1 -0
- package/dist/esm/components/multiDropzone/index.js +2862 -0
- package/dist/esm/components/multiDropzone/index.js.map +1 -0
- package/dist/esm/components/multiDropzone/index.test.js +201 -0
- package/dist/esm/components/multiDropzone/index.test.js.map +1 -0
- package/dist/esm/components/segmentedControl/index.js +42 -0
- package/dist/esm/components/segmentedControl/index.js.map +1 -0
- package/dist/esm/components/segmentedControl/index.stories.js +62 -0
- package/dist/esm/components/segmentedControl/index.stories.js.map +1 -0
- package/dist/esm/components/segmentedControl/index.test.js +63 -0
- package/dist/esm/components/segmentedControl/index.test.js.map +1 -0
- package/dist/esm/components/signaturePad/index.js +560 -0
- package/dist/esm/components/signaturePad/index.js.map +1 -0
- package/dist/esm/components/signaturePad/index.stories.js +33 -0
- package/dist/esm/components/signaturePad/index.stories.js.map +1 -0
- package/dist/esm/customRender-4157fcff.js +24102 -0
- package/dist/esm/customRender-4157fcff.js.map +1 -0
- package/dist/esm/extend-expect-46bdce4a.js +7406 -0
- package/dist/esm/extend-expect-46bdce4a.js.map +1 -0
- package/dist/esm/index-1463d5e9.js +382 -0
- package/dist/esm/index-1463d5e9.js.map +1 -0
- package/dist/esm/index-171a0108.js +997 -0
- package/dist/esm/index-171a0108.js.map +1 -0
- package/dist/esm/index-21239ab0.js +237 -0
- package/dist/esm/index-21239ab0.js.map +1 -0
- package/dist/esm/index-47663d39.js +48 -0
- package/dist/esm/index-47663d39.js.map +1 -0
- package/dist/esm/index-6ced5532.js +69 -0
- package/dist/esm/index-6ced5532.js.map +1 -0
- package/dist/esm/index-db2e797f.js +13 -0
- package/dist/esm/index-db2e797f.js.map +1 -0
- package/dist/esm/index-dd80248b.js +91 -0
- package/dist/esm/index-dd80248b.js.map +1 -0
- package/dist/esm/index-e9e37a34.js +62 -0
- package/dist/esm/index-e9e37a34.js.map +1 -0
- package/dist/esm/index-fb46adf9.js +12 -0
- package/dist/esm/index-fb46adf9.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +50 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/components/autocompleteAddress/index.d.ts +20 -0
- package/dist/esm/lib/components/autocompleteAddress/index.stories.d.ts +66 -0
- package/dist/esm/lib/components/autocompleteAddress/index.test.d.ts +1 -0
- package/dist/esm/lib/components/autocompleteAddress/mapStyle.d.ts +2 -0
- package/dist/esm/lib/components/autocompleteAddress/util/index.d.ts +4 -0
- package/dist/esm/lib/components/button/icons/index.d.ts +9 -0
- package/dist/esm/lib/components/button/index.d.ts +13 -0
- package/dist/esm/lib/components/cards/cardButton/index.d.ts +16 -0
- package/dist/esm/lib/components/cards/cardWithLeftIcon/index.d.ts +14 -0
- package/dist/esm/lib/components/cards/cardWithTopIcon/index.d.ts +15 -0
- package/dist/esm/lib/components/cards/cardWithTopLeftIcon/index.d.ts +14 -0
- package/dist/esm/lib/components/cards/icons/index.d.ts +13 -0
- package/dist/esm/lib/components/cards/index.d.ts +16 -0
- package/dist/esm/lib/components/cards/infoCard/index.d.ts +13 -0
- package/dist/esm/lib/components/chip/index.d.ts +6 -0
- package/dist/esm/lib/components/comparisonTable/components/AccordionItem/AccordionItem.d.ts +9 -0
- package/dist/esm/lib/components/comparisonTable/components/AccordionItem/index.d.ts +1 -0
- package/dist/esm/lib/components/comparisonTable/components/Chevron.d.ts +4 -0
- package/dist/esm/lib/components/comparisonTable/components/Row/index.d.ts +11 -0
- package/dist/esm/lib/components/comparisonTable/components/TableArrows/Arrow.d.ts +4 -0
- package/dist/esm/lib/components/comparisonTable/components/TableArrows/index.d.ts +10 -0
- package/dist/esm/lib/components/comparisonTable/components/TableButton/index.d.ts +8 -0
- package/dist/esm/lib/components/comparisonTable/components/TableButton/index.test.d.ts +1 -0
- package/dist/esm/lib/components/comparisonTable/components/TableInfoButton/index.d.ts +5 -0
- package/dist/esm/lib/components/comparisonTable/components/TableRating/StarIcon.d.ts +4 -0
- package/dist/esm/lib/components/comparisonTable/components/TableRating/ZapIcon.d.ts +4 -0
- package/dist/esm/lib/components/comparisonTable/components/TableRating/index.d.ts +7 -0
- package/dist/esm/lib/components/comparisonTable/components/TableRowHeader/index.d.ts +9 -0
- package/dist/esm/lib/components/comparisonTable/components/TableRowHeader/index.test.d.ts +1 -0
- package/dist/esm/lib/components/comparisonTable/components/TableTrueFalse.d.ts +5 -0
- package/dist/esm/lib/components/comparisonTable/hooks/useComparisonTable.d.ts +14 -0
- package/dist/esm/lib/components/comparisonTable/index.d.ts +52 -0
- package/dist/esm/lib/components/dateSelector/index.d.ts +23 -0
- package/dist/esm/lib/components/dateSelector/index.test.d.ts +1 -0
- package/dist/esm/lib/components/downloadButton/index.d.ts +10 -0
- package/dist/esm/lib/components/downloadButton/index.stories.d.ts +36 -0
- package/dist/esm/lib/components/input/autoSuggestInput/index.d.ts +15 -0
- package/dist/esm/lib/components/input/autoSuggestMultiSelect/index.d.ts +11 -0
- package/dist/esm/lib/components/input/checkbox/index.d.ts +17 -0
- package/dist/esm/lib/components/input/checkbox/index.stories.d.ts +64 -0
- package/dist/esm/lib/components/input/checkbox/index.test.d.ts +1 -0
- package/dist/esm/lib/components/input/currency/format/index.d.ts +2 -0
- package/dist/esm/lib/components/input/currency/index.d.ts +7 -0
- package/dist/esm/lib/components/input/currency/index.test.d.ts +1 -0
- package/dist/esm/lib/components/input/iban/formatIban/index.d.ts +1 -0
- package/dist/esm/lib/components/input/iban/index.d.ts +6 -0
- package/dist/esm/lib/components/input/index.d.ts +16 -0
- package/dist/esm/lib/components/markdown/index.d.ts +10 -0
- package/dist/esm/lib/components/markdown/index.stories.d.ts +44 -0
- package/dist/esm/lib/components/modal/bottomModal/index.d.ts +3 -0
- package/dist/esm/lib/components/modal/bottomOrRegularModal/index.d.ts +3 -0
- package/dist/esm/lib/components/modal/hooks/useOnClose.d.ts +9 -0
- package/dist/esm/lib/components/modal/index.d.ts +13 -0
- package/dist/esm/lib/components/modal/regularModal/index.d.ts +3 -0
- package/dist/esm/lib/components/multiDropzone/UploadFileCell/index.d.ts +10 -0
- package/dist/esm/lib/components/multiDropzone/icons/index.d.ts +11 -0
- package/dist/esm/lib/components/multiDropzone/index.d.ts +15 -0
- package/dist/esm/lib/components/multiDropzone/index.test.d.ts +1 -0
- package/dist/esm/lib/components/multiDropzone/types.d.ts +42 -0
- package/dist/esm/lib/components/multiDropzone/utils/index.d.ts +11 -0
- package/dist/esm/lib/components/segmentedControl/index.d.ts +12 -0
- package/dist/esm/lib/components/segmentedControl/index.stories.d.ts +37 -0
- package/dist/esm/lib/components/segmentedControl/index.test.d.ts +1 -0
- package/dist/esm/lib/components/signaturePad/index.d.ts +19 -0
- package/dist/esm/lib/components/signaturePad/index.stories.d.ts +21 -0
- package/dist/esm/lib/hooks/useOnClickOutside.d.ts +2 -0
- package/dist/esm/lib/index.d.ts +22 -0
- package/dist/esm/lib/models/autoSuggestInput/index.d.ts +4 -0
- package/dist/esm/lib/models/download.d.ts +1 -0
- package/dist/esm/lib/scss/private/base/demo.d.ts +5 -0
- package/dist/esm/lib/scss/public/demo.d.ts +2 -0
- package/dist/esm/lib/util/calendarDate/index.d.ts +3 -0
- package/dist/esm/lib/util/formatBytes/index.d.ts +1 -0
- package/dist/esm/lib/util/generateId/index.d.ts +2 -0
- package/dist/esm/lib/util/images/index.d.ts +11 -0
- package/dist/esm/lib/util/images/index.stories.d.ts +12 -0
- package/dist/esm/lib/util/testUtils/customRender.d.ts +7 -0
- package/dist/esm/lib/util/testUtils/index.d.ts +2 -0
- package/dist/esm/lib/util/zeroFill.d.ts +1 -0
- package/dist/esm/mapStyle-1288a869.js +187 -0
- package/dist/esm/mapStyle-1288a869.js.map +1 -0
- package/dist/esm/scss/private/base/demo.js +80 -0
- package/dist/esm/scss/private/base/demo.js.map +1 -0
- package/dist/esm/scss/public/demo.js +290 -0
- package/dist/esm/scss/public/demo.js.map +1 -0
- package/dist/esm/style-inject.es-1f59c1d0.js +29 -0
- package/dist/esm/style-inject.es-1f59c1d0.js.map +1 -0
- package/dist/esm/tslib.es6-5bc94358.js +104 -0
- package/dist/esm/tslib.es6-5bc94358.js.map +1 -0
- package/dist/esm/useOnClose-d818a54f.js +46 -0
- package/dist/esm/useOnClose-d818a54f.js.map +1 -0
- package/dist/esm/util/images/index.stories.js +23 -0
- package/dist/esm/util/images/index.stories.js.map +1 -0
- package/dist/esm/util/testUtils/customRender.js +7 -0
- package/dist/esm/util/testUtils/customRender.js.map +1 -0
- package/package.json +1 -1
- package/src/lib/components/markdown/index.stories.tsx +64 -2
- package/src/global.d.ts +0 -1
- package/src/lib/components/markdown/example.md +0 -78
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Checkbox } from './index.js';
|
|
4
|
+
import { i as images } from '../../../index-db2e797f.js';
|
|
5
|
+
import '../../../tslib.es6-5bc94358.js';
|
|
6
|
+
import '../../../index-e9e37a34.js';
|
|
7
|
+
|
|
8
|
+
var story = {
|
|
9
|
+
title: 'JSX/Inputs/Checkbox',
|
|
10
|
+
component: Checkbox,
|
|
11
|
+
argTypes: {
|
|
12
|
+
options: {
|
|
13
|
+
description: 'Object that contains the possible options for rendering in the input.',
|
|
14
|
+
defaultValue: {
|
|
15
|
+
CAT: {
|
|
16
|
+
title: 'Cat',
|
|
17
|
+
description: 'At least 1'
|
|
18
|
+
},
|
|
19
|
+
DOG: {
|
|
20
|
+
title: 'Dog',
|
|
21
|
+
description: 'At least 2'
|
|
22
|
+
},
|
|
23
|
+
NONE: {
|
|
24
|
+
title: 'None',
|
|
25
|
+
description: 'No pets'
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
value: {
|
|
30
|
+
description: 'Current checked values.',
|
|
31
|
+
},
|
|
32
|
+
onChange: {
|
|
33
|
+
description: 'Function called everytime a value changes.',
|
|
34
|
+
action: true,
|
|
35
|
+
table: {
|
|
36
|
+
category: "Callbacks",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
wide: {
|
|
40
|
+
description: 'Property that defines if options should fill 100% of available horizontal space',
|
|
41
|
+
defaultValue: false
|
|
42
|
+
},
|
|
43
|
+
inlineLayout: {
|
|
44
|
+
description: 'Property that defines if options should show inline instead of block. Check inline checkbox options story for examples.',
|
|
45
|
+
defaultValue: false
|
|
46
|
+
},
|
|
47
|
+
className: {
|
|
48
|
+
description: 'Wrapper classNames for custom styling',
|
|
49
|
+
defaultValue: ''
|
|
50
|
+
},
|
|
51
|
+
optionClassName: {
|
|
52
|
+
description: 'Option classNames for custom styling',
|
|
53
|
+
defaultValue: ''
|
|
54
|
+
},
|
|
55
|
+
labelClassName: {
|
|
56
|
+
description: 'Label classNames for custom styling',
|
|
57
|
+
defaultValue: ''
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var CheckboxStory = function (_a) {
|
|
62
|
+
var onChange = _a.onChange, options = _a.options, wide = _a.wide, className = _a.className, optionClassName = _a.optionClassName, labelClassName = _a.labelClassName, inlineLayout = _a.inlineLayout;
|
|
63
|
+
var _b = useState([]), checkedValues = _b[0], setCheckedValues = _b[1];
|
|
64
|
+
var handleOnChange = function (newValue) {
|
|
65
|
+
setCheckedValues(newValue);
|
|
66
|
+
onChange(newValue);
|
|
67
|
+
};
|
|
68
|
+
return (jsx(Checkbox, { wide: wide, options: options, onChange: handleOnChange, value: checkedValues, className: className, labelClassName: labelClassName, optionClassName: optionClassName, inlineLayout: inlineLayout }, void 0));
|
|
69
|
+
};
|
|
70
|
+
var CheckboxWithCustomWrapperStyles = function (_a) {
|
|
71
|
+
var onChange = _a.onChange;
|
|
72
|
+
var _b = useState([]), checkedValues = _b[0], setCheckedValues = _b[1];
|
|
73
|
+
var handleOnChange = function (newValue) {
|
|
74
|
+
if (newValue === void 0) { newValue = []; }
|
|
75
|
+
setCheckedValues(newValue);
|
|
76
|
+
onChange(newValue);
|
|
77
|
+
};
|
|
78
|
+
return (jsx(Checkbox, { onChange: handleOnChange, value: checkedValues, options: {
|
|
79
|
+
CAT1: 'Cat',
|
|
80
|
+
DOG1: 'Dog',
|
|
81
|
+
}, className: "p32 bg-primary-300 br24 bs-lg" }, void 0));
|
|
82
|
+
};
|
|
83
|
+
var CheckboxWithCustomOptionStyles = function (_a) {
|
|
84
|
+
var onChange = _a.onChange;
|
|
85
|
+
var _b = useState([]), checkedValues = _b[0], setCheckedValues = _b[1];
|
|
86
|
+
var handleOnChange = function (newValue) {
|
|
87
|
+
if (newValue === void 0) { newValue = []; }
|
|
88
|
+
setCheckedValues(newValue);
|
|
89
|
+
onChange(newValue);
|
|
90
|
+
};
|
|
91
|
+
return (jsx(Checkbox, { onChange: handleOnChange, value: checkedValues, options: {
|
|
92
|
+
CAT2: 'Cat',
|
|
93
|
+
DOG2: 'Dog',
|
|
94
|
+
}, optionClassName: "mb32 p24 bg-green-100 br12 bs-lg" }, void 0));
|
|
95
|
+
};
|
|
96
|
+
var CheckboxWithCustomLabelStyles = function (_a) {
|
|
97
|
+
var onChange = _a.onChange;
|
|
98
|
+
var _b = useState([]), checkedValues = _b[0], setCheckedValues = _b[1];
|
|
99
|
+
var handleOnChange = function (newValue) {
|
|
100
|
+
if (newValue === void 0) { newValue = []; }
|
|
101
|
+
setCheckedValues(newValue);
|
|
102
|
+
onChange(newValue);
|
|
103
|
+
};
|
|
104
|
+
return (jsx(Checkbox, { onChange: handleOnChange, value: checkedValues, options: {
|
|
105
|
+
CAT3: 'Cat',
|
|
106
|
+
DOG3: 'Dog',
|
|
107
|
+
}, labelClassName: "bg-grey-900 tc-white" }, void 0));
|
|
108
|
+
};
|
|
109
|
+
var CheckboxWithInlineLayout = function (_a) {
|
|
110
|
+
var onChange = _a.onChange;
|
|
111
|
+
var _b = useState([]), checkedValues = _b[0], setCheckedValues = _b[1];
|
|
112
|
+
var handleOnChange = function (newValue) {
|
|
113
|
+
if (newValue === void 0) { newValue = []; }
|
|
114
|
+
setCheckedValues(newValue);
|
|
115
|
+
onChange(newValue);
|
|
116
|
+
};
|
|
117
|
+
return (jsx(Checkbox, { onChange: handleOnChange, value: checkedValues, options: {
|
|
118
|
+
CAT4: 'Cat',
|
|
119
|
+
DOG4: 'Dog',
|
|
120
|
+
FISHER: 'Fish',
|
|
121
|
+
RABBIT: 'Rabbit',
|
|
122
|
+
RAT: 'Rat',
|
|
123
|
+
ANOTHER: 'Other',
|
|
124
|
+
}, optionClassName: "w30", inlineLayout: true, wide: true }, void 0));
|
|
125
|
+
};
|
|
126
|
+
var CheckboxWithCustomLabel = function (_a) {
|
|
127
|
+
var onChange = _a.onChange; _a.wide; _a.className; _a.optionClassName; _a.inlineLayout;
|
|
128
|
+
var _b = useState([]), checkedValues = _b[0], setCheckedValues = _b[1];
|
|
129
|
+
var handleOnChange = function (newValue) {
|
|
130
|
+
if (newValue === void 0) { newValue = []; }
|
|
131
|
+
setCheckedValues(newValue);
|
|
132
|
+
onChange(newValue);
|
|
133
|
+
};
|
|
134
|
+
return (jsx(Checkbox, { options: {
|
|
135
|
+
BIGDOG: {
|
|
136
|
+
icon: function () { return jsx("img", { src: images.bigDog, alt: '' }, void 0); },
|
|
137
|
+
title: 'Dog',
|
|
138
|
+
},
|
|
139
|
+
FISH: {
|
|
140
|
+
icon: function () { return jsx("img", { src: images.brokenAquarium, alt: '' }, void 0); },
|
|
141
|
+
title: 'Fish',
|
|
142
|
+
},
|
|
143
|
+
OTHER: {
|
|
144
|
+
icon: function () { return jsx("img", { src: images.brokenGlass, alt: '' }, void 0); },
|
|
145
|
+
title: 'Other',
|
|
146
|
+
}
|
|
147
|
+
}, onChange: handleOnChange, value: checkedValues, optionClassName: "w30", inlineLayout: true }, void 0));
|
|
148
|
+
};
|
|
149
|
+
CheckboxStory.storyName = 'Checkbox';
|
|
150
|
+
|
|
151
|
+
export default story;
|
|
152
|
+
export { CheckboxStory, CheckboxWithCustomLabel, CheckboxWithCustomLabelStyles, CheckboxWithCustomOptionStyles, CheckboxWithCustomWrapperStyles, CheckboxWithInlineLayout };
|
|
153
|
+
//# sourceMappingURL=index.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.stories.js","sources":["../../../../../../src/lib/components/input/checkbox/index.stories.tsx"],"sourcesContent":["\nimport { useState } from 'react';\nimport { Checkbox, CheckboxProps } from '.';\nimport { images } from '../../../util/images';\n\nconst story = {\n title: 'JSX/Inputs/Checkbox',\n component: Checkbox,\n argTypes: {\n options: {\n description: 'Object that contains the possible options for rendering in the input.',\n defaultValue: {\n CAT:{\n title: 'Cat',\n description: 'At least 1'\n },\n DOG:{\n title: 'Dog',\n description: 'At least 2'\n },\n NONE:{\n title: 'None',\n description: 'No pets'\n }\n }\n },\n value: {\n description: 'Current checked values.',\n },\n onChange: {\n description: 'Function called everytime a value changes.',\n action: true,\n table: {\n category: \"Callbacks\",\n },\n },\n wide: {\n description: 'Property that defines if options should fill 100% of available horizontal space',\n defaultValue: false\n },\n inlineLayout: {\n description: 'Property that defines if options should show inline instead of block. Check inline checkbox options story for examples.',\n defaultValue: false\n },\n className: {\n description: 'Wrapper classNames for custom styling',\n defaultValue: ''\n },\n optionClassName: {\n description: 'Option classNames for custom styling',\n defaultValue: ''\n },\n labelClassName: {\n description: 'Label classNames for custom styling',\n defaultValue: ''\n },\n }\n};\n\nexport const CheckboxStory = ({ \n onChange,\n options,\n wide,\n className,\n optionClassName,\n labelClassName,\n inlineLayout,\n}: CheckboxProps<string>) => {\n const [checkedValues, setCheckedValues] = useState<string[]>([]);\n\n const handleOnChange = (newValue: string[]) => {\n setCheckedValues(newValue);\n onChange(newValue);\n }\n\n return (\n <Checkbox \n wide={wide}\n options={options} \n onChange={handleOnChange}\n value={checkedValues}\n className={className}\n labelClassName={labelClassName}\n optionClassName={optionClassName}\n inlineLayout={inlineLayout}\n />\n );\n}\n\nexport const CheckboxWithCustomWrapperStyles = ({ onChange }: CheckboxProps<string>) => {\n const [checkedValues, setCheckedValues] = useState<string[]>([]);\n\n const handleOnChange = (newValue: string[] = []) => {\n setCheckedValues(newValue);\n onChange(newValue);\n }\n\n return (\n <Checkbox \n onChange={handleOnChange}\n value={checkedValues}\n options={{\n CAT1: 'Cat',\n DOG1: 'Dog',\n }} \n className=\"p32 bg-primary-300 br24 bs-lg\"\n />\n );\n}\n\nexport const CheckboxWithCustomOptionStyles = ({ onChange }: CheckboxProps<string>) => {\n const [checkedValues, setCheckedValues] = useState<string[]>([]);\n\n const handleOnChange = (newValue: string[] = []) => {\n setCheckedValues(newValue);\n onChange(newValue);\n }\n\n return (\n <Checkbox \n onChange={handleOnChange}\n value={checkedValues}\n options={{\n CAT2: 'Cat',\n DOG2: 'Dog',\n }} \n optionClassName=\"mb32 p24 bg-green-100 br12 bs-lg\"\n />\n );\n}\n\nexport const CheckboxWithCustomLabelStyles = ({ onChange }: CheckboxProps<string>) => {\n const [checkedValues, setCheckedValues] = useState<string[]>([]);\n\n const handleOnChange = (newValue: string[] = []) => {\n setCheckedValues(newValue);\n onChange(newValue);\n }\n\n return (\n <Checkbox \n onChange={handleOnChange}\n value={checkedValues}\n options={{\n CAT3: 'Cat',\n DOG3: 'Dog',\n }} \n labelClassName=\"bg-grey-900 tc-white\"\n />\n );\n}\n\nexport const CheckboxWithInlineLayout = ({ onChange }: CheckboxProps<string>) => {\n const [checkedValues, setCheckedValues] = useState<string[]>([]);\n\n const handleOnChange = (newValue: string[] = []) => {\n setCheckedValues(newValue);\n onChange(newValue);\n }\n\n return (\n <Checkbox \n onChange={handleOnChange}\n value={checkedValues}\n options={{\n CAT4: 'Cat',\n DOG4: 'Dog',\n FISHER: 'Fish',\n RABBIT: 'Rabbit',\n RAT: 'Rat',\n ANOTHER: 'Other',\n }} \n optionClassName=\"w30\"\n inlineLayout\n wide\n />\n );\n}\n\nexport const CheckboxWithCustomLabel = ({ onChange, wide, className, optionClassName, inlineLayout }: CheckboxProps<string>) => {\n const [checkedValues, setCheckedValues] = useState<string[]>([]);\n\n const handleOnChange = (newValue: string[] = []) => {\n setCheckedValues(newValue);\n onChange(newValue);\n }\n\n return (\n <Checkbox \n options={{\n BIGDOG: {\n icon: () => <img src={images.bigDog} alt='' />,\n title: 'Dog',\n },\n FISH:{\n icon: () => <img src={images.brokenAquarium} alt='' />,\n title: 'Fish',\n },\n OTHER:{\n icon: () => <img src={images.brokenGlass} alt='' />,\n title: 'Other',\n }\n }} \n onChange={handleOnChange}\n value={checkedValues}\n optionClassName=\"w30\"\n inlineLayout\n />\n );\n}\n\nCheckboxStory.storyName = 'Checkbox';\n\nexport default story;\n"],"names":["_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { b as __awaiter, c as __generator } from '../../../tslib.es6-5bc94358.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { c as customRender } from '../../../customRender-4157fcff.js';
|
|
4
|
+
import { Checkbox } from './index.js';
|
|
5
|
+
import 'react';
|
|
6
|
+
import 'react-dom';
|
|
7
|
+
import '../../../_commonjsHelpers-e7f67fd8.js';
|
|
8
|
+
import 'react-dom/test-utils';
|
|
9
|
+
import '../../../index-e9e37a34.js';
|
|
10
|
+
|
|
11
|
+
var mockOnChange = jest.fn();
|
|
12
|
+
var setup = function (onChange, value) {
|
|
13
|
+
var utils = customRender(jsx(Checkbox, { options: {
|
|
14
|
+
CAT: 'Cat',
|
|
15
|
+
DOG: 'Dog',
|
|
16
|
+
NONE: 'None',
|
|
17
|
+
}, onChange: onChange, value: value }, void 0));
|
|
18
|
+
return utils;
|
|
19
|
+
};
|
|
20
|
+
describe('Checkbox component', function () {
|
|
21
|
+
it('Should render options', function () {
|
|
22
|
+
var getByText = setup(mockOnChange).getByText;
|
|
23
|
+
expect(getByText('Cat')).toBeInTheDocument();
|
|
24
|
+
expect(getByText('Dog')).toBeInTheDocument();
|
|
25
|
+
expect(getByText('None')).toBeInTheDocument();
|
|
26
|
+
});
|
|
27
|
+
it('Should call onchange on selecting an option', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
28
|
+
var _a, getByTestId, user;
|
|
29
|
+
return __generator(this, function (_b) {
|
|
30
|
+
switch (_b.label) {
|
|
31
|
+
case 0:
|
|
32
|
+
_a = setup(mockOnChange), getByTestId = _a.getByTestId, user = _a.user;
|
|
33
|
+
return [4 /*yield*/, user.click(getByTestId('checkbox-DOG'))];
|
|
34
|
+
case 1:
|
|
35
|
+
_b.sent();
|
|
36
|
+
expect(mockOnChange).toBeCalledWith(["DOG"]);
|
|
37
|
+
return [2 /*return*/];
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}); });
|
|
41
|
+
it('Should render checked items when value is passed', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
42
|
+
var getByTestId;
|
|
43
|
+
return __generator(this, function (_a) {
|
|
44
|
+
getByTestId = setup(mockOnChange, ['CAT']).getByTestId;
|
|
45
|
+
expect(getByTestId('checkbox-input-CAT')).toBeChecked();
|
|
46
|
+
return [2 /*return*/];
|
|
47
|
+
});
|
|
48
|
+
}); });
|
|
49
|
+
it('Should call onchange with NONE and removing other items on selecting NONE option', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
50
|
+
var _a, getByTestId, user;
|
|
51
|
+
return __generator(this, function (_b) {
|
|
52
|
+
switch (_b.label) {
|
|
53
|
+
case 0:
|
|
54
|
+
_a = setup(mockOnChange, ['CAT', 'DOG']), getByTestId = _a.getByTestId, user = _a.user;
|
|
55
|
+
return [4 /*yield*/, user.click(getByTestId('checkbox-NONE'))];
|
|
56
|
+
case 1:
|
|
57
|
+
_b.sent();
|
|
58
|
+
expect(mockOnChange).toBeCalledWith(["NONE"]);
|
|
59
|
+
return [2 /*return*/];
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}); });
|
|
63
|
+
it('Should call onchange empty when removing NONE option', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
64
|
+
var _a, getByTestId, user;
|
|
65
|
+
return __generator(this, function (_b) {
|
|
66
|
+
switch (_b.label) {
|
|
67
|
+
case 0:
|
|
68
|
+
_a = setup(mockOnChange, ['NONE']), getByTestId = _a.getByTestId, user = _a.user;
|
|
69
|
+
return [4 /*yield*/, user.click(getByTestId('checkbox-NONE'))];
|
|
70
|
+
case 1:
|
|
71
|
+
_b.sent();
|
|
72
|
+
expect(mockOnChange).toBeCalledWith([]);
|
|
73
|
+
return [2 /*return*/];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}); });
|
|
77
|
+
it('Should render custom description', function () {
|
|
78
|
+
var getByText = customRender(jsx(Checkbox, { options: {
|
|
79
|
+
CAT: {
|
|
80
|
+
title: 'Cat',
|
|
81
|
+
description: 'Cat description'
|
|
82
|
+
},
|
|
83
|
+
}, onChange: mockOnChange }, void 0)).getByText;
|
|
84
|
+
expect(getByText('Cat description')).toBeInTheDocument();
|
|
85
|
+
});
|
|
86
|
+
it('Should render custom icon', function () {
|
|
87
|
+
var getByText = customRender(jsx(Checkbox, { options: {
|
|
88
|
+
CAT: {
|
|
89
|
+
title: 'Cat',
|
|
90
|
+
icon: function () { return 'ICON'; }
|
|
91
|
+
},
|
|
92
|
+
}, onChange: mockOnChange }, void 0)).getByText;
|
|
93
|
+
expect(getByText('ICON')).toBeInTheDocument();
|
|
94
|
+
});
|
|
95
|
+
it('Should render custom icon with selected', function () {
|
|
96
|
+
var getByText = customRender(jsx(Checkbox, { options: {
|
|
97
|
+
CAT: {
|
|
98
|
+
title: 'Cat',
|
|
99
|
+
icon: function (selected) { return selected ? 'SELECTED-ICON' : 'ICON'; }
|
|
100
|
+
},
|
|
101
|
+
}, onChange: mockOnChange, value: ['CAT'] }, void 0)).getByText;
|
|
102
|
+
expect(getByText('SELECTED-ICON')).toBeInTheDocument();
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sources":["../../../../../../src/lib/components/input/checkbox/index.test.tsx"],"sourcesContent":["import { render } from '../../../util/testUtils';\n\nimport { Checkbox, CheckboxProps } from '.';\n\nconst mockOnChange = jest.fn();\n\nconst setup = (onChange: CheckboxProps<string>['onChange'], value?: string[]) => {\n const utils = render(\n <Checkbox\n options={{\n CAT: 'Cat',\n DOG: 'Dog',\n NONE: 'None',\n }}\n onChange={onChange}\n value={value}\n />\n );\n\n return utils;\n};\n\ndescribe('Checkbox component', () => {\n it('Should render options', () => {\n const { getByText } = setup(mockOnChange);\n\n expect(getByText('Cat')).toBeInTheDocument();\n expect(getByText('Dog')).toBeInTheDocument();\n expect(getByText('None')).toBeInTheDocument();\n });\n\n it('Should call onchange on selecting an option', async () => {\n const { getByTestId, user } = setup(mockOnChange);\n\n await user.click(getByTestId('checkbox-DOG'));\n\n expect(mockOnChange).toBeCalledWith([\"DOG\"]);\n });\n\n it('Should render checked items when value is passed', async () => {\n const { getByTestId } = setup(mockOnChange, ['CAT']);\n\n expect(getByTestId('checkbox-input-CAT')).toBeChecked();\n });\n\n it('Should call onchange with NONE and removing other items on selecting NONE option', async () => {\n const { getByTestId, user } = setup(mockOnChange, ['CAT', 'DOG']);\n\n await user.click(getByTestId('checkbox-NONE'));\n\n expect(mockOnChange).toBeCalledWith([\"NONE\"]);\n });\n\n it('Should call onchange empty when removing NONE option', async () => {\n const { getByTestId, user } = setup(mockOnChange, ['NONE']);\n\n await user.click(getByTestId('checkbox-NONE'));\n\n expect(mockOnChange).toBeCalledWith([]);\n });\n\n it('Should render custom description', () => {\n const { getByText } = render(\n <Checkbox\n options={{\n CAT: {\n title: 'Cat',\n description: 'Cat description'\n },\n }}\n onChange={mockOnChange}\n />\n );\n\n expect(getByText('Cat description')).toBeInTheDocument();\n });\n\n it('Should render custom icon', () => {\n const { getByText } = render(\n <Checkbox\n options={{\n CAT: {\n title: 'Cat',\n icon: () => 'ICON'\n },\n }}\n onChange={mockOnChange}\n />\n );\n\n expect(getByText('ICON')).toBeInTheDocument();\n });\n\n it('Should render custom icon with selected', () => {\n const { getByText } = render(\n <Checkbox\n options={{\n CAT: {\n title: 'Cat',\n icon: (selected) => selected ? 'SELECTED-ICON' : 'ICON'\n },\n }}\n onChange={mockOnChange}\n value={['CAT']}\n />\n );\n\n expect(getByText('SELECTED-ICON')).toBeInTheDocument();\n });\n});\n"],"names":["render","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { a as __rest, _ as __assign } from '../../../tslib.es6-5bc94358.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useRef, useState, useEffect } from 'react';
|
|
4
|
+
import Input from '../index.js';
|
|
5
|
+
import '../../../index-e9e37a34.js';
|
|
6
|
+
import '../../../index-fb46adf9.js';
|
|
7
|
+
import '../../../style-inject.es-1f59c1d0.js';
|
|
8
|
+
|
|
9
|
+
var formatInput = function (input) {
|
|
10
|
+
var decimalSeparator = input.includes(',') ? ',' : '.';
|
|
11
|
+
var parts = input.split(decimalSeparator);
|
|
12
|
+
var floor = parts[0];
|
|
13
|
+
var ceiling = parts[1];
|
|
14
|
+
parts[0] = floor.replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
|
|
15
|
+
if (ceiling) {
|
|
16
|
+
parts[1] = ceiling.slice(0, Math.min(ceiling.length, 2));
|
|
17
|
+
}
|
|
18
|
+
return parts.join('.');
|
|
19
|
+
};
|
|
20
|
+
function reverseFormatInput(input) {
|
|
21
|
+
return Number(input.replace(/,/, '.').replace(/\s/g, ''));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var CurrencyInput = function (_a) {
|
|
25
|
+
var value = _a.value, onChange = _a.onChange; _a.type; var props = __rest(_a, ["value", "onChange", "type"]);
|
|
26
|
+
var inputRef = useRef(null);
|
|
27
|
+
var _b = useState(null), cursor = _b[0], setCursor = _b[1];
|
|
28
|
+
var _c = useState(''), shadowValue = _c[0], setShadowValue = _c[1];
|
|
29
|
+
var formattedShadowValue = formatInput(shadowValue
|
|
30
|
+
.replace(/ /g, '') // remove all whitespace
|
|
31
|
+
.replace(',', '.') // change commas to dot for decimal separator
|
|
32
|
+
.replace('.', 'DECIMAL_SEPARATOR') // Gymnastic to remove all the but the first decimal separators 🤸
|
|
33
|
+
.replace(/\./g, '')
|
|
34
|
+
.replace('DECIMAL_SEPARATOR', '.') // End of the Gymnastic 🤸
|
|
35
|
+
.replace(/[^\d\\.]/g, '') // remove all non decimal and dot
|
|
36
|
+
);
|
|
37
|
+
useEffect(function () {
|
|
38
|
+
if (value && value !== reverseFormatInput(shadowValue)) {
|
|
39
|
+
setShadowValue(formatInput(value.toString()));
|
|
40
|
+
}
|
|
41
|
+
// eslint-disable-next-line
|
|
42
|
+
}, [value]);
|
|
43
|
+
useEffect(function () {
|
|
44
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(reverseFormatInput(shadowValue));
|
|
45
|
+
// eslint-disable-next-line
|
|
46
|
+
}, [shadowValue]);
|
|
47
|
+
useEffect(function () {
|
|
48
|
+
if (!inputRef.current || !cursor) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
var cursorDiff = String(formattedShadowValue).length - String(shadowValue).length;
|
|
52
|
+
var newCursor = cursorDiff + cursor;
|
|
53
|
+
inputRef.current.selectionStart = newCursor;
|
|
54
|
+
inputRef.current.selectionEnd = newCursor;
|
|
55
|
+
}, [cursor, formattedShadowValue, shadowValue]);
|
|
56
|
+
return (jsx(Input, __assign({ prefix: "\u20AC", ref: inputRef, type: "string", value: formattedShadowValue, onChange: function (e) {
|
|
57
|
+
setCursor(e.target.selectionStart);
|
|
58
|
+
setShadowValue(e.target.value);
|
|
59
|
+
} }, props), void 0));
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export default CurrencyInput;
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/lib/components/input/currency/format/index.ts","../../../../../../src/lib/components/input/currency/index.tsx"],"sourcesContent":["export const formatInput = (input: string): string => {\n const decimalSeparator = input.includes(',') ? ',' : '.';\n const parts = input.split(decimalSeparator);\n const floor = parts[0];\n const ceiling = parts[1];\n parts[0] = floor.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\n if (ceiling) {\n parts[1] = ceiling.slice(0, Math.min(ceiling.length, 2));\n }\n return parts.join('.');\n};\n\nexport function reverseFormatInput(input: string): number {\n return Number(input.replace(/,/, '.').replace(/\\s/g, ''));\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { formatInput, reverseFormatInput } from './format';\nimport Input, { InputProps } from '..';\n\nconst CurrencyInput = ({\n value,\n onChange,\n type,\n ...props\n}: {\n value?: number;\n placeholder?: string;\n onChange?: (value: number) => void;\n} & Omit<InputProps, 'onChange' | 'value' | 'ref'>) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [cursor, setCursor] = useState<number | null>(null);\n const [shadowValue, setShadowValue] = useState('');\n\n const formattedShadowValue = formatInput(\n shadowValue\n .replace(/ /g, '') // remove all whitespace\n .replace(',', '.') // change commas to dot for decimal separator\n .replace('.', 'DECIMAL_SEPARATOR') // Gymnastic to remove all the but the first decimal separators 🤸\n .replace(/\\./g, '')\n .replace('DECIMAL_SEPARATOR', '.') // End of the Gymnastic 🤸\n .replace(/[^\\d\\\\.]/g, '') // remove all non decimal and dot\n );\n\n useEffect(() => {\n if (value && value !== reverseFormatInput(shadowValue)) {\n setShadowValue(formatInput(value.toString()));\n }\n // eslint-disable-next-line\n }, [value]);\n\n useEffect(() => {\n onChange?.(reverseFormatInput(shadowValue));\n // eslint-disable-next-line\n }, [shadowValue]);\n\n useEffect(() => {\n if (!inputRef.current || !cursor) {\n return;\n }\n\n const cursorDiff = String(formattedShadowValue).length - String(shadowValue).length;\n const newCursor = cursorDiff + cursor;\n\n inputRef.current.selectionStart = newCursor;\n inputRef.current.selectionEnd = newCursor;\n },[cursor, formattedShadowValue, shadowValue])\n\n return (\n <Input\n prefix=\"€\"\n ref={inputRef}\n type=\"string\"\n value={formattedShadowValue}\n onChange={(e) => {\n setCursor(e.target.selectionStart);\n setShadowValue(e.target.value);\n }}\n {...props}\n />\n );\n};\n\nexport default CurrencyInput;\n"],"names":["_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { b as __awaiter, c as __generator, _ as __assign } from '../../../tslib.es6-5bc94358.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { c as customRender } from '../../../customRender-4157fcff.js';
|
|
4
|
+
import CurrencyInput from './index.js';
|
|
5
|
+
import 'react';
|
|
6
|
+
import 'react-dom';
|
|
7
|
+
import '../../../_commonjsHelpers-e7f67fd8.js';
|
|
8
|
+
import 'react-dom/test-utils';
|
|
9
|
+
import '../index.js';
|
|
10
|
+
import '../../../index-e9e37a34.js';
|
|
11
|
+
import '../../../index-fb46adf9.js';
|
|
12
|
+
import '../../../style-inject.es-1f59c1d0.js';
|
|
13
|
+
|
|
14
|
+
var setup = function () {
|
|
15
|
+
var utils = customRender(jsx(CurrencyInput, {}, void 0));
|
|
16
|
+
var input = utils.getByTestId('ds-input-input');
|
|
17
|
+
return __assign({ input: input }, utils);
|
|
18
|
+
};
|
|
19
|
+
describe('Currency input component', function () {
|
|
20
|
+
it('Should correctly space thousands separators', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
21
|
+
var _a, input, user;
|
|
22
|
+
return __generator(this, function (_b) {
|
|
23
|
+
switch (_b.label) {
|
|
24
|
+
case 0:
|
|
25
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
26
|
+
return [4 /*yield*/, user.type(input, '1234567')];
|
|
27
|
+
case 1:
|
|
28
|
+
_b.sent();
|
|
29
|
+
expect(input.value).toBe('1 234 567');
|
|
30
|
+
return [2 /*return*/];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}); });
|
|
34
|
+
it('Should remove non numerical values', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
35
|
+
var _a, input, user;
|
|
36
|
+
return __generator(this, function (_b) {
|
|
37
|
+
switch (_b.label) {
|
|
38
|
+
case 0:
|
|
39
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
40
|
+
return [4 /*yield*/, user.type(input, '123asdf4567')];
|
|
41
|
+
case 1:
|
|
42
|
+
_b.sent();
|
|
43
|
+
expect(input.value).toBe('1 234 567');
|
|
44
|
+
return [2 /*return*/];
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}); });
|
|
48
|
+
it('Should remove non numerical values', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
49
|
+
var _a, input, user;
|
|
50
|
+
return __generator(this, function (_b) {
|
|
51
|
+
switch (_b.label) {
|
|
52
|
+
case 0:
|
|
53
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
54
|
+
return [4 /*yield*/, user.type(input, '123asdf4567')];
|
|
55
|
+
case 1:
|
|
56
|
+
_b.sent();
|
|
57
|
+
expect(input.value).toBe('1 234 567');
|
|
58
|
+
return [2 /*return*/];
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}); });
|
|
62
|
+
it('Should allow decimal separator', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
63
|
+
var _a, input, user;
|
|
64
|
+
return __generator(this, function (_b) {
|
|
65
|
+
switch (_b.label) {
|
|
66
|
+
case 0:
|
|
67
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
68
|
+
return [4 /*yield*/, user.type(input, '1234567.34')];
|
|
69
|
+
case 1:
|
|
70
|
+
_b.sent();
|
|
71
|
+
expect(input.value).toBe('1 234 567.34');
|
|
72
|
+
return [2 /*return*/];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}); });
|
|
76
|
+
it('Should replace comma decimal seprator with a dot', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
77
|
+
var _a, input, user;
|
|
78
|
+
return __generator(this, function (_b) {
|
|
79
|
+
switch (_b.label) {
|
|
80
|
+
case 0:
|
|
81
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
82
|
+
return [4 /*yield*/, user.type(input, '1234567,34')];
|
|
83
|
+
case 1:
|
|
84
|
+
_b.sent();
|
|
85
|
+
expect(input.value).toBe('1 234 567.34');
|
|
86
|
+
return [2 /*return*/];
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}); });
|
|
90
|
+
it('Should only allow one decimal separator', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
91
|
+
var _a, input, user;
|
|
92
|
+
return __generator(this, function (_b) {
|
|
93
|
+
switch (_b.label) {
|
|
94
|
+
case 0:
|
|
95
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
96
|
+
return [4 /*yield*/, user.type(input, '1234567..34')];
|
|
97
|
+
case 1:
|
|
98
|
+
_b.sent();
|
|
99
|
+
expect(input.value).toBe('1 234 567.34');
|
|
100
|
+
return [2 /*return*/];
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}); });
|
|
104
|
+
it('Should only allow one decimal separator after a sequence of number', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
105
|
+
var _a, input, user;
|
|
106
|
+
return __generator(this, function (_b) {
|
|
107
|
+
switch (_b.label) {
|
|
108
|
+
case 0:
|
|
109
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
110
|
+
return [4 /*yield*/, user.type(input, '1234567..34.4')];
|
|
111
|
+
case 1:
|
|
112
|
+
_b.sent();
|
|
113
|
+
expect(input.value).toBe('1 234 567.34');
|
|
114
|
+
return [2 /*return*/];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}); });
|
|
118
|
+
it('Should have correct selection start when no spaces are added', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
119
|
+
var _a, input, user;
|
|
120
|
+
return __generator(this, function (_b) {
|
|
121
|
+
switch (_b.label) {
|
|
122
|
+
case 0:
|
|
123
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
124
|
+
return [4 /*yield*/, user.type(input, '123')];
|
|
125
|
+
case 1:
|
|
126
|
+
_b.sent();
|
|
127
|
+
// Should be: 123|
|
|
128
|
+
expect(input.selectionStart).toBe(3);
|
|
129
|
+
return [2 /*return*/];
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}); });
|
|
133
|
+
it('Should have correct selection start when spaces are added', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
134
|
+
var _a, input, user;
|
|
135
|
+
return __generator(this, function (_b) {
|
|
136
|
+
switch (_b.label) {
|
|
137
|
+
case 0:
|
|
138
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
139
|
+
return [4 /*yield*/, user.type(input, '1234')];
|
|
140
|
+
case 1:
|
|
141
|
+
_b.sent();
|
|
142
|
+
// Should be: 123 4|
|
|
143
|
+
expect(input.selectionStart).toBe(5);
|
|
144
|
+
return [2 /*return*/];
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}); });
|
|
148
|
+
it('Should have correct selection start when typing in middle of input', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
149
|
+
var _a, input, user;
|
|
150
|
+
return __generator(this, function (_b) {
|
|
151
|
+
switch (_b.label) {
|
|
152
|
+
case 0:
|
|
153
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
154
|
+
return [4 /*yield*/, user.type(input, '123{arrowleft}4')];
|
|
155
|
+
case 1:
|
|
156
|
+
_b.sent();
|
|
157
|
+
// Should be: 1 24|3
|
|
158
|
+
expect(input.selectionStart).toBe(4);
|
|
159
|
+
return [2 /*return*/];
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}); });
|
|
163
|
+
it('Should have correct selection start when typing in beginning of input', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
164
|
+
var _a, input, user;
|
|
165
|
+
return __generator(this, function (_b) {
|
|
166
|
+
switch (_b.label) {
|
|
167
|
+
case 0:
|
|
168
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
169
|
+
return [4 /*yield*/, user.type(input, '123{arrowleft}{arrowleft}{arrowleft}4')];
|
|
170
|
+
case 1:
|
|
171
|
+
_b.sent();
|
|
172
|
+
// Should be: 4 |123
|
|
173
|
+
expect(input.selectionStart).toBe(2);
|
|
174
|
+
return [2 /*return*/];
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}); });
|
|
178
|
+
it('Should have correct selection start when typing in input and has currency values', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
179
|
+
var _a, input, user;
|
|
180
|
+
return __generator(this, function (_b) {
|
|
181
|
+
switch (_b.label) {
|
|
182
|
+
case 0:
|
|
183
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
184
|
+
return [4 /*yield*/, user.type(input, '123.2{arrowleft}{arrowleft}{arrowleft}24')];
|
|
185
|
+
case 1:
|
|
186
|
+
_b.sent();
|
|
187
|
+
// Should be: 12 24|3.2
|
|
188
|
+
expect(input.selectionStart).toBe(5);
|
|
189
|
+
return [2 /*return*/];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}); });
|
|
193
|
+
it('Should have correct selection start when deleting', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
194
|
+
var _a, input, user;
|
|
195
|
+
return __generator(this, function (_b) {
|
|
196
|
+
switch (_b.label) {
|
|
197
|
+
case 0:
|
|
198
|
+
_a = setup(), input = _a.input, user = _a.user;
|
|
199
|
+
return [4 /*yield*/, user.type(input, '12345{arrowleft}{backspace}67')];
|
|
200
|
+
case 1:
|
|
201
|
+
_b.sent();
|
|
202
|
+
// Should be: 123 67|5
|
|
203
|
+
expect(input.selectionStart).toBe(6);
|
|
204
|
+
return [2 /*return*/];
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}); });
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sources":["../../../../../../src/lib/components/input/currency/index.test.tsx"],"sourcesContent":["import { render } from '../../../util/testUtils';\n\nimport CurrencyInput from '.';\n\nconst setup = () => {\n const utils = render(<CurrencyInput />);\n const input = utils.getByTestId('ds-input-input') as HTMLInputElement;\n return {\n input,\n ...utils,\n };\n};\n\ndescribe('Currency input component', () => {\n it('Should correctly space thousands separators', async () => {\n const { input, user } = setup();\n await user.type(input, '1234567');\n expect(input.value).toBe('1 234 567');\n });\n\n it('Should remove non numerical values', async () => {\n const { input, user } = setup();\n await user.type(input, '123asdf4567');\n expect(input.value).toBe('1 234 567');\n });\n\n it('Should remove non numerical values', async () => {\n const { input, user } = setup();\n await user.type(input, '123asdf4567');\n expect(input.value).toBe('1 234 567');\n });\n\n it('Should allow decimal separator', async () => {\n const { input, user } = setup();\n await user.type(input, '1234567.34');\n expect(input.value).toBe('1 234 567.34');\n });\n\n it('Should replace comma decimal seprator with a dot', async () => {\n const { input, user } = setup();\n await user.type(input, '1234567,34');\n expect(input.value).toBe('1 234 567.34');\n });\n\n it('Should only allow one decimal separator', async () => {\n const { input, user } = setup();\n await user.type(input, '1234567..34');\n expect(input.value).toBe('1 234 567.34');\n });\n\n it('Should only allow one decimal separator after a sequence of number', async () => {\n const { input, user } = setup();\n await user.type(input, '1234567..34.4');\n expect(input.value).toBe('1 234 567.34');\n });\n\n it('Should have correct selection start when no spaces are added', async () => {\n const { input, user } = setup();\n\n await user.type(input, '123');\n // Should be: 123|\n expect(input.selectionStart).toBe(3);\n });\n\n it('Should have correct selection start when spaces are added', async () => {\n const { input, user } = setup();\n\n await user.type(input, '1234');\n // Should be: 123 4|\n expect(input.selectionStart).toBe(5);\n });\n\n it('Should have correct selection start when typing in middle of input', async () => {\n const { input, user } = setup();\n\n await user.type(input, '123{arrowleft}4');\n\n // Should be: 1 24|3\n expect(input.selectionStart).toBe(4);\n });\n\n it('Should have correct selection start when typing in beginning of input', async () => {\n const { input, user } = setup();\n\n await user.type(input, '123{arrowleft}{arrowleft}{arrowleft}4');\n\n // Should be: 4 |123\n expect(input.selectionStart).toBe(2);\n });\n\n it('Should have correct selection start when typing in input and has currency values', async () => {\n const { input, user } = setup();\n\n await user.type(input, '123.2{arrowleft}{arrowleft}{arrowleft}24');\n\n // Should be: 12 24|3.2\n expect(input.selectionStart).toBe(5);\n });\n\n it('Should have correct selection start when deleting', async () => {\n const { input, user } = setup();\n\n await user.type(input, '12345{arrowleft}{backspace}67');\n\n // Should be: 123 67|5\n expect(input.selectionStart).toBe(6);\n });\n});\n"],"names":["render","_jsx"],"mappings":";;;;;;;;;;;;;AAIA,IAAM,KAAK,GAAG;IACZ,IAAM,KAAK,GAAGA,YAAM,CAACC,IAAC,aAAa,aAAG,CAAC,CAAC;IACxC,IAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAqB,CAAC;IACtE,kBACE,KAAK,OAAA,IACF,KAAK,EACR;AACJ,CAAC,CAAC;AAEF,QAAQ,CAAC,0BAA0B,EAAE;IACnC,EAAE,CAAC,6CAA6C,EAAE;;;;;oBAC1C,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAChC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAA;;oBAAjC,SAAiC,CAAC;oBAClC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;SACvC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE;;;;;oBACjC,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAChC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,EAAA;;oBAArC,SAAqC,CAAC;oBACtC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;SACvC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE;;;;;oBACjC,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAChC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,EAAA;;oBAArC,SAAqC,CAAC;oBACtC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;SACvC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE;;;;;oBAC7B,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAChC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,EAAA;;oBAApC,SAAoC,CAAC;oBACrC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;;SAC1C,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE;;;;;oBAC/C,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAChC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,EAAA;;oBAApC,SAAoC,CAAC;oBACrC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;;SAC1C,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE;;;;;oBACtC,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAChC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,EAAA;;oBAArC,SAAqC,CAAC;oBACtC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;;SAC1C,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE;;;;;oBACjE,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAChC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,EAAA;;oBAAvC,SAAuC,CAAC;oBACxC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;;SAC1C,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE;;;;;oBAC3D,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAEhC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAA;;oBAA7B,SAA6B,CAAC;;oBAE9B,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;SACtC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE;;;;;oBACxD,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAEhC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAA;;oBAA9B,SAA8B,CAAC;;oBAE/B,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;SACtC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE;;;;;oBACjE,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAEhC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAA;;oBAAzC,SAAyC,CAAC;;oBAG1C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;SACtC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE;;;;;oBACpE,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAEhC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,uCAAuC,CAAC,EAAA;;oBAA/D,SAA+D,CAAC;;oBAGhE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;SACtC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE;;;;;oBAC/E,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAEhC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,0CAA0C,CAAC,EAAA;;oBAAlE,SAAkE,CAAC;;oBAGnE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;SACtC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE;;;;;oBAChD,KAAkB,KAAK,EAAE,EAAvB,KAAK,WAAA,EAAE,IAAI,UAAA,CAAa;oBAEhC,qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,+BAA+B,CAAC,EAAA;;oBAAvD,SAAuD,CAAC;;oBAGxD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;SACtC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { a as __rest, _ as __assign } from '../../../tslib.es6-5bc94358.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import Input from '../index.js';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '../../../index-e9e37a34.js';
|
|
6
|
+
import '../../../index-fb46adf9.js';
|
|
7
|
+
import '../../../style-inject.es-1f59c1d0.js';
|
|
8
|
+
|
|
9
|
+
var IBAN_CHAR_LIMIT = 4;
|
|
10
|
+
var formatIban = function (iban) {
|
|
11
|
+
if (iban) {
|
|
12
|
+
var cleanIban_1 = iban
|
|
13
|
+
.replace(/\s\s+/g, ' ')
|
|
14
|
+
.replace(/[^0-9a-zA-Z]/gi, '')
|
|
15
|
+
.toUpperCase();
|
|
16
|
+
var values_1 = [];
|
|
17
|
+
cleanIban_1.split('').forEach(function (char, idx) {
|
|
18
|
+
if (idx % IBAN_CHAR_LIMIT === 0) {
|
|
19
|
+
values_1.push(cleanIban_1.substring(idx, idx + IBAN_CHAR_LIMIT));
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return values_1.join(' ');
|
|
23
|
+
}
|
|
24
|
+
return '';
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
var IbanInput = function (_a) {
|
|
28
|
+
var value = _a.value, onChange = _a.onChange, props = __rest(_a, ["value", "onChange"]);
|
|
29
|
+
return (jsx(Input, __assign({ value: formatIban(value), onChange: function (e) { return onChange(formatIban(e.target.value)); } }, props), void 0));
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default IbanInput;
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/lib/components/input/iban/formatIban/index.ts","../../../../../../src/lib/components/input/iban/index.tsx"],"sourcesContent":["const IBAN_CHAR_LIMIT = 4;\n\nexport const formatIban = (iban?: string): string => {\n if (iban) {\n const cleanIban = iban\n .replace(/\\s\\s+/g, ' ')\n .replace(/[^0-9a-zA-Z]/gi, '')\n .toUpperCase();\n\n const values: string[] = [];\n\n cleanIban.split('').forEach((char, idx) => {\n if (idx % IBAN_CHAR_LIMIT === 0) {\n values.push(cleanIban.substring(idx, idx + IBAN_CHAR_LIMIT));\n }\n });\n\n return values.join(' ');\n }\n\n return '';\n};\n","import Input, { InputProps } from '..';\n\nimport { formatIban } from './formatIban';\n\nconst IbanInput = ({\n value,\n onChange,\n ...props\n}: {\n value?: string;\n onChange: (value: string) => void;\n} & Omit<InputProps, 'onChange' | 'value' | 'ref'>) => (\n <Input\n value={formatIban(value)}\n onChange={(e) => onChange(formatIban(e.target.value))}\n {...props}\n />\n);\n\nexport default IbanInput;\n"],"names":["_jsx"],"mappings":";;;;;;;;AAAA,IAAM,eAAe,GAAG,CAAC,CAAC;AAEnB,IAAM,UAAU,GAAG,UAAC,IAAa;IACtC,IAAI,IAAI,EAAE;QACR,IAAM,WAAS,GAAG,IAAI;aACnB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;aACtB,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;aAC7B,WAAW,EAAE,CAAC;QAEjB,IAAM,QAAM,GAAa,EAAE,CAAC;QAE5B,WAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,GAAG;YACpC,IAAI,GAAG,GAAG,eAAe,KAAK,CAAC,EAAE;gBAC/B,QAAM,CAAC,IAAI,CAAC,WAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC;aAC9D;SACF,CAAC,CAAC;QAEH,OAAO,QAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACzB;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;;ICjBK,SAAS,GAAG,UAAC,EAO+B;IANhD,IAAA,KAAK,WAAA,EACL,QAAQ,cAAA,EACL,KAAK,cAHS,qBAIlB,CADS;IAI6C,QACrDA,IAAC,KAAK,aACJ,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EACxB,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAA,IACjD,KAAK,UACT,EACH;;;;;"}
|