flipper-ui 0.25.2 → 0.25.5

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.
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ interface PinInputGridProps {
3
+ pin: Array<number | undefined>;
4
+ setPin: (pin: Array<number | undefined>) => void;
5
+ onPinChanged: (pinEntry: number | undefined, index: number) => void;
6
+ pinLength: number;
7
+ validationResult: boolean | undefined;
8
+ isValidating: boolean;
9
+ size: 'small' | 'large';
10
+ style?: React.CSSProperties;
11
+ inputProps?: React.CSSProperties;
12
+ variant?: 'outlined' | 'standard';
13
+ }
14
+ declare const PinInput: React.FC<PinInputGridProps>;
15
+ export default PinInput;
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
19
+
20
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
21
+
22
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
23
+
24
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
25
+
26
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
27
+
28
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
29
+
30
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
31
+
32
+ function _templateObject() {
33
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n width: auto;\n justify-content: center;\n"]);
34
+
35
+ _templateObject = function _templateObject() {
36
+ return data;
37
+ };
38
+
39
+ return data;
40
+ }
41
+
42
+ var Container = _styledComponents["default"].div(_templateObject());
43
+
44
+ var removeValuesFromArray = function removeValuesFromArray(valuesArray, value) {
45
+ var valueIndex = valuesArray.findIndex(function (entry) {
46
+ return entry === value;
47
+ });
48
+
49
+ if (valueIndex === -1) {
50
+ return;
51
+ }
52
+
53
+ valuesArray.splice(valueIndex, 1);
54
+ };
55
+
56
+ var PIN_MIN_VALUE = 0;
57
+ var PIN_MAX_VALUE = 9;
58
+ var BACKSPACE_KEY = 'Backspace';
59
+
60
+ var PinInput = function PinInput(_ref) {
61
+ var pinLength = _ref.pinLength,
62
+ pin = _ref.pin,
63
+ setPin = _ref.setPin,
64
+ onPinChanged = _ref.onPinChanged,
65
+ validationResult = _ref.validationResult,
66
+ isValidating = _ref.isValidating,
67
+ size = _ref.size,
68
+ styleProps = _ref.style,
69
+ inputProps = _ref.inputProps,
70
+ variant = _ref.variant;
71
+ var inputRefs = (0, _react.useRef)([]);
72
+
73
+ var changePinFocus = function changePinFocus(pinIndex) {
74
+ var ref = inputRefs.current[pinIndex];
75
+
76
+ if (ref) {
77
+ ref.focus();
78
+ }
79
+ };
80
+
81
+ (0, _react.useEffect)(function () {
82
+ changePinFocus(0);
83
+ }, [isValidating]);
84
+
85
+ var onPaste = function onPaste(event) {
86
+ var pastedValue = event.clipboardData.getData('text/plain');
87
+ var splitValues = pastedValue.split('');
88
+ var intValues = [];
89
+
90
+ var _iterator = _createForOfIteratorHelper(splitValues),
91
+ _step;
92
+
93
+ try {
94
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
95
+ var value = _step.value;
96
+ intValues.push(parseInt(value));
97
+ }
98
+ } catch (err) {
99
+ _iterator.e(err);
100
+ } finally {
101
+ _iterator.f();
102
+ }
103
+
104
+ setPin(intValues);
105
+ changePinFocus(intValues.length - 1);
106
+ };
107
+
108
+ var _onChange = function onChange(event, index) {
109
+ if (event.target.value.length > 1) {
110
+ return;
111
+ }
112
+
113
+ var previousValue = event.target.defaultValue;
114
+ var valuesArray = event.target.value.split('');
115
+ removeValuesFromArray(valuesArray, previousValue);
116
+ var value = valuesArray.pop();
117
+
118
+ if (!value) {
119
+ return;
120
+ }
121
+
122
+ var pinNumber = Number(value.trim());
123
+
124
+ if (isNaN(pinNumber) || value.length === 0) {
125
+ return;
126
+ }
127
+
128
+ if (pinNumber >= PIN_MIN_VALUE && pinNumber <= PIN_MAX_VALUE) {
129
+ onPinChanged(pinNumber, index);
130
+
131
+ if (index < pinLength - 1) {
132
+ changePinFocus(index + 1);
133
+ }
134
+ }
135
+ };
136
+
137
+ var _onKeyDown = function onKeyDown(event, index) {
138
+ var keyboardKeyCode = event.nativeEvent.code;
139
+
140
+ if (keyboardKeyCode !== BACKSPACE_KEY) {
141
+ return;
142
+ }
143
+
144
+ if (pin[index] === undefined) {
145
+ changePinFocus(index - 1);
146
+ } else {
147
+ onPinChanged(undefined, index);
148
+ }
149
+ };
150
+
151
+ var useStyleProps = function useStyleProps() {
152
+ var style = _objectSpread({
153
+ width: size === 'small' ? '40px' : '40px',
154
+ height: size === 'small' ? '30px' : '40px',
155
+ marginInline: size === 'small' ? '5px' : '10px'
156
+ }, styleProps);
157
+
158
+ return style;
159
+ };
160
+
161
+ var useInputProps = function useInputProps() {
162
+ var style = _objectSpread({
163
+ width: size === 'small' ? '40px' : '45px',
164
+ textAlign: 'center',
165
+ fontWeight: 'bold',
166
+ fontSize: size === 'small' ? '16px' : '20px',
167
+ padding: 'auto'
168
+ }, inputProps);
169
+
170
+ return style;
171
+ };
172
+
173
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(Container, null, Array.from({
174
+ length: pinLength
175
+ }, function (_, index) {
176
+ return /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
177
+ disabled: isValidating,
178
+ variant: variant || 'outlined',
179
+ onKeyDown: function onKeyDown(event) {
180
+ return _onKeyDown(event, index);
181
+ },
182
+ onPaste: onPaste,
183
+ color: "primary",
184
+ error: validationResult,
185
+ style: useStyleProps(),
186
+ InputProps: {
187
+ style: useInputProps()
188
+ },
189
+ inputRef: function inputRef(el) {
190
+ inputRefs.current[index] = el;
191
+ },
192
+ key: index,
193
+ onChange: function onChange(event) {
194
+ _onChange(event, index);
195
+ },
196
+ value: pin[index] || ''
197
+ });
198
+ })));
199
+ };
200
+
201
+ var _default = PinInput;
202
+ exports["default"] = _default;
@@ -30,6 +30,7 @@ export interface TextFieldProps extends DefaultProps {
30
30
  onClear?: () => void;
31
31
  onHelperClick?: () => void;
32
32
  onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
33
+ onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;
33
34
  onBlur?: (event: FocusEvent<HTMLInputElement>) => void;
34
35
  onKeyUp?: (event: KeyboardEvent) => void;
35
36
  onKeyDown?: (event: KeyboardEvent) => void;
package/index.d.ts CHANGED
@@ -57,3 +57,4 @@ export { default as Tooltip } from './core/Tooltip';
57
57
  export { default as Tree } from './core/Tree';
58
58
  export { default as Typography } from './core/Typography';
59
59
  export { default as Zoom } from './core/Zoom';
60
+ export { default as PinInput } from './core/PinInput';
package/index.js CHANGED
@@ -359,6 +359,12 @@ Object.defineProperty(exports, "Zoom", {
359
359
  return _Zoom["default"];
360
360
  }
361
361
  });
362
+ Object.defineProperty(exports, "PinInput", {
363
+ enumerable: true,
364
+ get: function get() {
365
+ return _PinInput["default"];
366
+ }
367
+ });
362
368
 
363
369
  var _Advertise = _interopRequireDefault(require("./core/Advertise"));
364
370
 
@@ -476,4 +482,6 @@ var _Tree = _interopRequireDefault(require("./core/Tree"));
476
482
 
477
483
  var _Typography = _interopRequireDefault(require("./core/Typography"));
478
484
 
479
- var _Zoom = _interopRequireDefault(require("./core/Zoom"));
485
+ var _Zoom = _interopRequireDefault(require("./core/Zoom"));
486
+
487
+ var _PinInput = _interopRequireDefault(require("./core/PinInput"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flipper-ui",
3
- "version": "0.25.2",
3
+ "version": "0.25.5",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "homepage": "https://flipper-ui.vercel.app",
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.Large = exports.Default = exports["default"] = void 0;
11
+
12
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _PinInput = _interopRequireDefault(require("../core/PinInput"));
21
+
22
+ var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
23
+
24
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
25
+
26
+ function _templateObject2() {
27
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n width: auto;\n justify-content: center;\n margin-top: 3rem;\n"]);
28
+
29
+ _templateObject2 = function _templateObject2() {
30
+ return data;
31
+ };
32
+
33
+ return data;
34
+ }
35
+
36
+ function _templateObject() {
37
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n width: auto;\n justify-content: center;\n margin-bottom: 2rem;\n"]);
38
+
39
+ _templateObject = function _templateObject() {
40
+ return data;
41
+ };
42
+
43
+ return data;
44
+ }
45
+
46
+ var _default = {
47
+ title: 'PinInput',
48
+ component: _PinInput["default"]
49
+ };
50
+ exports["default"] = _default;
51
+
52
+ var ValidateContainer = _styledComponents["default"].div(_templateObject());
53
+
54
+ var ButtonContainer = _styledComponents["default"].div(_templateObject2());
55
+
56
+ var PIN_LENGTH = 6;
57
+
58
+ var Default = function Default() {
59
+ var _useState = (0, _react.useState)(new Array(PIN_LENGTH)),
60
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
61
+ pin = _useState2[0],
62
+ setPin = _useState2[1];
63
+
64
+ var onPinChanged = function onPinChanged(pinEntry, index) {
65
+ var newPin = (0, _toConsumableArray2["default"])(pin);
66
+ newPin[index] = pinEntry;
67
+ setPin(newPin);
68
+ };
69
+
70
+ var _useState3 = (0, _react.useState)(false),
71
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
72
+ hasError = _useState4[0],
73
+ setHasError = _useState4[1];
74
+
75
+ var _useState5 = (0, _react.useState)(false),
76
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
77
+ isValidating = _useState6[0],
78
+ setIsValidating = _useState6[1];
79
+
80
+ var handleValidation = function handleValidation() {
81
+ setIsValidating(true);
82
+
83
+ if (pin.join('') !== '123123') {
84
+ setHasError(true);
85
+ setPin(new Array(PIN_LENGTH));
86
+ } else {
87
+ setHasError(false);
88
+ alert('PIN is correct');
89
+ }
90
+
91
+ setIsValidating(false);
92
+ };
93
+
94
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(ValidateContainer, null, /*#__PURE__*/_react["default"].createElement("span", null, "Valid pin: 123123")), /*#__PURE__*/_react["default"].createElement(_PinInput["default"], {
95
+ pin: pin,
96
+ setPin: setPin,
97
+ onPinChanged: onPinChanged,
98
+ pinLength: PIN_LENGTH,
99
+ validationResult: hasError,
100
+ isValidating: isValidating,
101
+ size: "small",
102
+ variant: "outlined"
103
+ }), /*#__PURE__*/_react["default"].createElement(ButtonContainer, null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
104
+ onClick: function onClick() {
105
+ handleValidation();
106
+ }
107
+ }, "Validate")));
108
+ };
109
+
110
+ exports.Default = Default;
111
+
112
+ var Large = function Large() {
113
+ var _useState7 = (0, _react.useState)(new Array(PIN_LENGTH)),
114
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
115
+ pin = _useState8[0],
116
+ setPin = _useState8[1];
117
+
118
+ var onPinChanged = function onPinChanged(pinEntry, index) {
119
+ var newPin = (0, _toConsumableArray2["default"])(pin);
120
+ newPin[index] = pinEntry;
121
+ setPin(newPin);
122
+ };
123
+
124
+ var _useState9 = (0, _react.useState)(false),
125
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
126
+ hasError = _useState10[0],
127
+ setHasError = _useState10[1];
128
+
129
+ var _useState11 = (0, _react.useState)(false),
130
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
131
+ isValidating = _useState12[0],
132
+ setIsValidating = _useState12[1];
133
+
134
+ var handleValidation = function handleValidation() {
135
+ setIsValidating(true);
136
+
137
+ if (pin.join('') !== '123123') {
138
+ setPin(new Array(PIN_LENGTH));
139
+ setHasError(true);
140
+ } else {
141
+ setHasError(false);
142
+ alert('PIN is correct');
143
+ }
144
+
145
+ setIsValidating(false);
146
+ };
147
+
148
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(ValidateContainer, null, /*#__PURE__*/_react["default"].createElement("span", null, "Valid pin: 123123")), /*#__PURE__*/_react["default"].createElement(_PinInput["default"], {
149
+ pin: pin,
150
+ setPin: setPin,
151
+ onPinChanged: onPinChanged,
152
+ pinLength: PIN_LENGTH,
153
+ validationResult: hasError,
154
+ isValidating: isValidating,
155
+ size: "large"
156
+ }), /*#__PURE__*/_react["default"].createElement(ButtonContainer, null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
157
+ onClick: function onClick() {
158
+ handleValidation();
159
+ }
160
+ }, "Validate")));
161
+ };
162
+
163
+ exports.Large = Large;