@bacon-pos/ui 0.1.0 → 0.2.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.
Files changed (63) hide show
  1. package/README.md +4 -3
  2. package/lib/commonjs/components/CodeField/CodeField.js +127 -0
  3. package/lib/commonjs/components/CodeField/CodeField.js.map +1 -0
  4. package/lib/commonjs/components/CodeField/CodeField.stories.js +76 -0
  5. package/lib/commonjs/components/CodeField/CodeField.stories.js.map +1 -0
  6. package/lib/commonjs/components/CodeField/CodeField.test.js +79 -0
  7. package/lib/commonjs/components/CodeField/CodeField.test.js.map +1 -0
  8. package/lib/commonjs/components/CodeField/index.js +13 -0
  9. package/lib/commonjs/components/CodeField/index.js.map +1 -0
  10. package/lib/commonjs/components/Spinner/Spinner.js +114 -0
  11. package/lib/commonjs/components/Spinner/Spinner.js.map +1 -0
  12. package/lib/commonjs/components/Spinner/Spinner.stories.js +72 -0
  13. package/lib/commonjs/components/Spinner/Spinner.stories.js.map +1 -0
  14. package/lib/commonjs/components/Spinner/Spinner.test.js +34 -0
  15. package/lib/commonjs/components/Spinner/Spinner.test.js.map +1 -0
  16. package/lib/commonjs/components/Spinner/index.js +13 -0
  17. package/lib/commonjs/components/Spinner/index.js.map +1 -0
  18. package/lib/commonjs/components/index.js +33 -11
  19. package/lib/commonjs/components/index.js.map +1 -1
  20. package/lib/module/components/CodeField/CodeField.js +125 -0
  21. package/lib/module/components/CodeField/CodeField.js.map +1 -0
  22. package/lib/module/components/CodeField/CodeField.stories.js +72 -0
  23. package/lib/module/components/CodeField/CodeField.stories.js.map +1 -0
  24. package/lib/module/components/CodeField/CodeField.test.js +78 -0
  25. package/lib/module/components/CodeField/CodeField.test.js.map +1 -0
  26. package/lib/module/components/CodeField/index.js +4 -0
  27. package/lib/module/components/CodeField/index.js.map +1 -0
  28. package/lib/module/components/Spinner/Spinner.js +109 -0
  29. package/lib/module/components/Spinner/Spinner.js.map +1 -0
  30. package/lib/module/components/Spinner/Spinner.stories.js +68 -0
  31. package/lib/module/components/Spinner/Spinner.stories.js.map +1 -0
  32. package/lib/module/components/Spinner/Spinner.test.js +33 -0
  33. package/lib/module/components/Spinner/Spinner.test.js.map +1 -0
  34. package/lib/module/components/Spinner/index.js +4 -0
  35. package/lib/module/components/Spinner/index.js.map +1 -0
  36. package/lib/module/components/index.js +2 -0
  37. package/lib/module/components/index.js.map +1 -1
  38. package/lib/typescript/commonjs/components/CodeField/CodeField.d.ts +40 -0
  39. package/lib/typescript/commonjs/components/CodeField/CodeField.d.ts.map +1 -0
  40. package/lib/typescript/commonjs/components/CodeField/index.d.ts +2 -0
  41. package/lib/typescript/commonjs/components/CodeField/index.d.ts.map +1 -0
  42. package/lib/typescript/commonjs/components/Spinner/Spinner.d.ts +31 -0
  43. package/lib/typescript/commonjs/components/Spinner/Spinner.d.ts.map +1 -0
  44. package/lib/typescript/commonjs/components/Spinner/index.d.ts +2 -0
  45. package/lib/typescript/commonjs/components/Spinner/index.d.ts.map +1 -0
  46. package/lib/typescript/commonjs/components/index.d.ts +2 -0
  47. package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
  48. package/lib/typescript/module/components/CodeField/CodeField.d.ts +40 -0
  49. package/lib/typescript/module/components/CodeField/CodeField.d.ts.map +1 -0
  50. package/lib/typescript/module/components/CodeField/index.d.ts +2 -0
  51. package/lib/typescript/module/components/CodeField/index.d.ts.map +1 -0
  52. package/lib/typescript/module/components/Spinner/Spinner.d.ts +31 -0
  53. package/lib/typescript/module/components/Spinner/Spinner.d.ts.map +1 -0
  54. package/lib/typescript/module/components/Spinner/index.d.ts +2 -0
  55. package/lib/typescript/module/components/Spinner/index.d.ts.map +1 -0
  56. package/lib/typescript/module/components/index.d.ts +2 -0
  57. package/lib/typescript/module/components/index.d.ts.map +1 -1
  58. package/package.json +14 -16
  59. package/src/components/CodeField/CodeField.tsx +160 -0
  60. package/src/components/CodeField/index.ts +1 -0
  61. package/src/components/Spinner/Spinner.tsx +128 -0
  62. package/src/components/Spinner/index.ts +1 -0
  63. package/src/components/index.ts +2 -0
package/README.md CHANGED
@@ -229,8 +229,9 @@ Built from the Figma design system (colors, typography, ~150 icons, inputs,
229
229
  etc.). Current components: `Button`, `IconButton`, `LinkButton`, `Input`, `Card`,
230
230
  `ProductCard`, `Surface`, `Text`, `Icon` (167 icons — 24px outline + fill + 20px
231
231
  optical set), plus multicolor `Logo` (Visa/Mastercard) and `Flag` (US/BR) brand
232
- assets, `QuantityStepper`, `CodeInput` (PIN), `Chip` + `ChipGroup` (single/multi
233
- select), `Avatar` (photo or initials), and form controls `Checkbox`, `Radio`,
234
- `Switch` (each standalone or with a positionable `label`). The Figma
232
+ assets, `QuantityStepper`, `CodeInput` (PIN), `CodeField` (segmented code),
233
+ `Spinner`, `Chip` + `ChipGroup` (single/multi select), `Avatar` (photo or
234
+ initials), and form controls `Checkbox`, `Radio`, `Switch` (each standalone or
235
+ with a positionable `label`). The Figma
235
236
  "loader" is an animated ring, not an icon — use RN's `ActivityIndicator`
236
237
  (Button/LinkButton already do).
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CodeField = CodeField;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _index = require("../../theme/index.js");
10
+ var _Text = require("../Text/Text.js");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ /** Removes the browser's default focus outline on web (no-op on native). */const WEB_NO_OUTLINE = {
13
+ outlineStyle: 'none',
14
+ outlineWidth: 0
15
+ };
16
+ /** Chars to strip per mode (applied after upper-casing). */
17
+ const DISALLOWED = {
18
+ numeric: /[^0-9]/g,
19
+ alpha: /[^A-Z]/g,
20
+ alphanumeric: /[^A-Z0-9]/g
21
+ };
22
+ /**
23
+ * Code field — a row of boxes for entering a code (numeric / alpha /
24
+ * alphanumeric, always upper-cased). Backed by a single hidden input, so paste,
25
+ * backspace-to-previous and type-to-next all work natively. The active cell
26
+ * shows the lime focus ring. Cell size, gap, font and font size are configurable.
27
+ */
28
+ function CodeField({
29
+ value,
30
+ onChangeText,
31
+ length = 6,
32
+ mode = 'numeric',
33
+ onComplete,
34
+ disabled = false,
35
+ autoFocus = false,
36
+ cellWidth = 126,
37
+ cellHeight = 58,
38
+ gap = 24,
39
+ fontFamily,
40
+ fontSize = 18,
41
+ accessibilityLabel = 'Code',
42
+ style
43
+ }) {
44
+ const theme = (0, _index.useTheme)();
45
+ const inputRef = (0, _react.useRef)(null);
46
+ const [focused, setFocused] = (0, _react.useState)(false);
47
+ const handleChange = text => {
48
+ const next = text.toUpperCase().replace(DISALLOWED[mode], '').slice(0, length);
49
+ onChangeText(next);
50
+ if (next.length === length) onComplete?.(next);
51
+ };
52
+ const activeIndex = Math.min(value.length, length - 1);
53
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
54
+ onPress: () => inputRef.current?.focus(),
55
+ disabled: disabled,
56
+ style: [{
57
+ position: 'relative',
58
+ alignSelf: 'flex-start'
59
+ }, style],
60
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
61
+ style: {
62
+ flexDirection: 'row',
63
+ gap
64
+ },
65
+ children: Array.from({
66
+ length
67
+ }).map((_, i) => {
68
+ const isActive = focused && i === activeIndex && !disabled;
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
70
+ testID: "code-field-cell",
71
+ style: {
72
+ width: cellWidth,
73
+ height: cellHeight,
74
+ borderRadius: theme.radii.pill,
75
+ borderWidth: 1,
76
+ borderColor: isActive ? theme.colors.border.focus : theme.colors.border.default,
77
+ backgroundColor: disabled ? theme.colors.disabled.background : theme.colors.background.default,
78
+ alignItems: 'center',
79
+ justifyContent: 'center',
80
+ opacity: disabled ? 0.6 : 1,
81
+ ...(isActive ? {
82
+ boxShadow: [{
83
+ offsetX: 0,
84
+ offsetY: 0,
85
+ blurRadius: 0,
86
+ spreadDistance: 6,
87
+ color: 'rgba(201,255,0,0.15)'
88
+ }]
89
+ } : null)
90
+ },
91
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.Text, {
92
+ color: disabled ? 'tertiary' : 'primary',
93
+ style: {
94
+ fontFamily: fontFamily ?? theme.fontFamily.regular,
95
+ fontSize,
96
+ lineHeight: Math.round(fontSize * 1.45)
97
+ },
98
+ children: value[i] ?? ''
99
+ })
100
+ }, i);
101
+ })
102
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
103
+ ref: inputRef,
104
+ value: value,
105
+ onChangeText: handleChange,
106
+ onFocus: () => setFocused(true),
107
+ onBlur: () => setFocused(false),
108
+ keyboardType: mode === 'numeric' ? 'number-pad' : 'default',
109
+ autoCapitalize: "characters",
110
+ autoCorrect: false,
111
+ maxLength: length,
112
+ editable: !disabled,
113
+ caretHidden: true,
114
+ autoFocus: autoFocus,
115
+ accessibilityLabel: accessibilityLabel,
116
+ style: [{
117
+ position: 'absolute',
118
+ top: 0,
119
+ left: 0,
120
+ right: 0,
121
+ bottom: 0,
122
+ opacity: 0
123
+ }, WEB_NO_OUTLINE]
124
+ })]
125
+ });
126
+ }
127
+ //# sourceMappingURL=CodeField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_index","_Text","_jsxRuntime","WEB_NO_OUTLINE","outlineStyle","outlineWidth","DISALLOWED","numeric","alpha","alphanumeric","CodeField","value","onChangeText","length","mode","onComplete","disabled","autoFocus","cellWidth","cellHeight","gap","fontFamily","fontSize","accessibilityLabel","style","theme","useTheme","inputRef","useRef","focused","setFocused","useState","handleChange","text","next","toUpperCase","replace","slice","activeIndex","Math","min","jsxs","Pressable","onPress","current","focus","position","alignSelf","children","jsx","View","flexDirection","Array","from","map","_","i","isActive","testID","width","height","borderRadius","radii","pill","borderWidth","borderColor","colors","border","default","backgroundColor","background","alignItems","justifyContent","opacity","boxShadow","offsetX","offsetY","blurRadius","spreadDistance","color","Text","regular","lineHeight","round","TextInput","ref","onFocus","onBlur","keyboardType","autoCapitalize","autoCorrect","maxLength","editable","caretHidden","top","left","right","bottom"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/CodeField/CodeField.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.Disabled = exports.Default = exports.Compact = exports.Alphanumeric = exports.Alpha = void 0;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _CodeField = require("./CodeField.js");
10
+ var _Text = require("../Text/Text.js");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ const meta = {
13
+ title: 'Components/CodeField',
14
+ component: _CodeField.CodeField
15
+ };
16
+ var _default = exports.default = meta;
17
+ function Demo(props) {
18
+ const [value, setValue] = (0, _react.useState)('');
19
+ const [done, setDone] = (0, _react.useState)('');
20
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
21
+ style: {
22
+ gap: 8,
23
+ alignItems: 'flex-start'
24
+ },
25
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CodeField.CodeField, {
26
+ value: value,
27
+ onChangeText: setValue,
28
+ onComplete: setDone,
29
+ ...props
30
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Text.Text, {
31
+ variant: "caption",
32
+ color: "secondary",
33
+ children: ["value: \"", value, "\"", done ? ` · complete: ${done}` : '']
34
+ })]
35
+ });
36
+ }
37
+
38
+ // Figma defaults (wide desktop cells).
39
+ const Default = exports.Default = {
40
+ render: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
41
+ length: 4
42
+ })
43
+ };
44
+ // Compact cells for mobile.
45
+ const Compact = exports.Compact = {
46
+ render: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
47
+ length: 6,
48
+ cellWidth: 48,
49
+ gap: 8
50
+ })
51
+ };
52
+ const Alphanumeric = exports.Alphanumeric = {
53
+ render: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
54
+ length: 6,
55
+ mode: "alphanumeric",
56
+ cellWidth: 48,
57
+ gap: 8
58
+ })
59
+ };
60
+ const Alpha = exports.Alpha = {
61
+ render: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
62
+ length: 5,
63
+ mode: "alpha",
64
+ cellWidth: 48,
65
+ gap: 8
66
+ })
67
+ };
68
+ const Disabled = exports.Disabled = {
69
+ render: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(Demo, {
70
+ length: 4,
71
+ cellWidth: 48,
72
+ gap: 8,
73
+ disabled: true
74
+ })
75
+ };
76
+ //# sourceMappingURL=CodeField.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_CodeField","_Text","_jsxRuntime","meta","title","component","CodeField","_default","exports","default","Demo","props","value","setValue","useState","done","setDone","jsxs","View","style","gap","alignItems","children","jsx","onChangeText","onComplete","Text","variant","color","Default","render","length","Compact","cellWidth","Alphanumeric","mode","Alpha","Disabled","disabled"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/CodeField/CodeField.stories.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAAoC,IAAAI,WAAA,GAAAJ,OAAA;AAEpC,MAAMK,IAAI,GAAG;EACXC,KAAK,EAAE,sBAAsB;EAC7BC,SAAS,EAAEC;AACb,CAAkC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEpBN,IAAI;AAGnB,SAASO,IAAIA,CAACC,KAQb,EAAE;EACD,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAC,eAAQ,EAAC,EAAE,CAAC;EACtC,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAG,IAAAF,eAAQ,EAAC,EAAE,CAAC;EACpC,oBACE,IAAAZ,WAAA,CAAAe,IAAA,EAAClB,YAAA,CAAAmB,IAAI;IAACC,KAAK,EAAE;MAAEC,GAAG,EAAE,CAAC;MAAEC,UAAU,EAAE;IAAa,CAAE;IAAAC,QAAA,gBAChD,IAAApB,WAAA,CAAAqB,GAAA,EAACvB,UAAA,CAAAM,SAAS;MAACM,KAAK,EAAEA,KAAM;MAACY,YAAY,EAAEX,QAAS;MAACY,UAAU,EAAET,OAAQ;MAAA,GAAKL;IAAK,CAAG,CAAC,eACnF,IAAAT,WAAA,CAAAe,IAAA,EAAChB,KAAA,CAAAyB,IAAI;MAACC,OAAO,EAAC,SAAS;MAACC,KAAK,EAAC,WAAW;MAAAN,QAAA,GAAC,WAChC,EAACV,KAAK,EAAC,IAAC,EAACG,IAAI,GAAG,gBAAgBA,IAAI,EAAE,GAAG,EAAE;IAAA,CAC/C,CAAC;EAAA,CACH,CAAC;AAEX;;AAEA;AACO,MAAMc,OAAc,GAAArB,OAAA,CAAAqB,OAAA,GAAG;EAAEC,MAAM,EAAEA,CAAA,kBAAM,IAAA5B,WAAA,CAAAqB,GAAA,EAACb,IAAI;IAACqB,MAAM,EAAE;EAAE,CAAE;AAAE,CAAC;AACnE;AACO,MAAMC,OAAc,GAAAxB,OAAA,CAAAwB,OAAA,GAAG;EAAEF,MAAM,EAAEA,CAAA,kBAAM,IAAA5B,WAAA,CAAAqB,GAAA,EAACb,IAAI;IAACqB,MAAM,EAAE,CAAE;IAACE,SAAS,EAAE,EAAG;IAACb,GAAG,EAAE;EAAE,CAAE;AAAE,CAAC;AACnF,MAAMc,YAAmB,GAAA1B,OAAA,CAAA0B,YAAA,GAAG;EACjCJ,MAAM,EAAEA,CAAA,kBAAM,IAAA5B,WAAA,CAAAqB,GAAA,EAACb,IAAI;IAACqB,MAAM,EAAE,CAAE;IAACI,IAAI,EAAC,cAAc;IAACF,SAAS,EAAE,EAAG;IAACb,GAAG,EAAE;EAAE,CAAE;AAC7E,CAAC;AACM,MAAMgB,KAAY,GAAA5B,OAAA,CAAA4B,KAAA,GAAG;EAAEN,MAAM,EAAEA,CAAA,kBAAM,IAAA5B,WAAA,CAAAqB,GAAA,EAACb,IAAI;IAACqB,MAAM,EAAE,CAAE;IAACI,IAAI,EAAC,OAAO;IAACF,SAAS,EAAE,EAAG;IAACb,GAAG,EAAE;EAAE,CAAE;AAAE,CAAC;AAC9F,MAAMiB,QAAe,GAAA7B,OAAA,CAAA6B,QAAA,GAAG;EAAEP,MAAM,EAAEA,CAAA,kBAAM,IAAA5B,WAAA,CAAAqB,GAAA,EAACb,IAAI;IAACqB,MAAM,EAAE,CAAE;IAACE,SAAS,EAAE,EAAG;IAACb,GAAG,EAAE,CAAE;IAACkB,QAAQ;EAAA,CAAE;AAAE,CAAC","ignoreList":[]}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _reactNative = require("@testing-library/react-native");
5
+ var _CodeField = require("./CodeField.js");
6
+ var _index = require("../../theme/index.js");
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ function renderWithTheme(ui) {
10
+ return (0, _reactNative.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_index.ThemeProvider, {
11
+ children: ui
12
+ }));
13
+ }
14
+ describe('CodeField', () => {
15
+ it('renders one cell per length', () => {
16
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CodeField.CodeField, {
17
+ value: "",
18
+ onChangeText: () => {},
19
+ length: 4
20
+ }));
21
+ expect(_reactNative.screen.getAllByTestId('code-field-cell')).toHaveLength(4);
22
+ });
23
+ it('numeric mode keeps digits only', () => {
24
+ const onChangeText = jest.fn();
25
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CodeField.CodeField, {
26
+ value: "",
27
+ onChangeText: onChangeText,
28
+ mode: "numeric",
29
+ length: 4
30
+ }));
31
+ _reactNative.fireEvent.changeText(_reactNative.screen.getByLabelText('Code'), '12ab34');
32
+ expect(onChangeText).toHaveBeenCalledWith('1234');
33
+ });
34
+ it('alphanumeric mode upper-cases and strips symbols', () => {
35
+ const onChangeText = jest.fn();
36
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CodeField.CodeField, {
37
+ value: "",
38
+ onChangeText: onChangeText,
39
+ mode: "alphanumeric",
40
+ length: 6
41
+ }));
42
+ _reactNative.fireEvent.changeText(_reactNative.screen.getByLabelText('Code'), 'a1-b2!');
43
+ expect(onChangeText).toHaveBeenCalledWith('A1B2');
44
+ });
45
+ it('alpha mode strips digits', () => {
46
+ const onChangeText = jest.fn();
47
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CodeField.CodeField, {
48
+ value: "",
49
+ onChangeText: onChangeText,
50
+ mode: "alpha",
51
+ length: 4
52
+ }));
53
+ _reactNative.fireEvent.changeText(_reactNative.screen.getByLabelText('Code'), 'a1b2c3');
54
+ expect(onChangeText).toHaveBeenCalledWith('ABC');
55
+ });
56
+ it('caps a pasted value to length and fires onComplete', () => {
57
+ const onChangeText = jest.fn();
58
+ const onComplete = jest.fn();
59
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CodeField.CodeField, {
60
+ value: "",
61
+ onChangeText: onChangeText,
62
+ onComplete: onComplete,
63
+ length: 4
64
+ }));
65
+ _reactNative.fireEvent.changeText(_reactNative.screen.getByLabelText('Code'), '123456');
66
+ expect(onChangeText).toHaveBeenCalledWith('1234');
67
+ expect(onComplete).toHaveBeenCalledWith('1234');
68
+ });
69
+ it('shows entered characters in the cells', () => {
70
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CodeField.CodeField, {
71
+ value: "12",
72
+ onChangeText: () => {},
73
+ length: 4
74
+ }));
75
+ expect(_reactNative.screen.getByText('1')).toBeTruthy();
76
+ expect(_reactNative.screen.getByText('2')).toBeTruthy();
77
+ });
78
+ });
79
+ //# sourceMappingURL=CodeField.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_CodeField","_index","_jsxRuntime","e","__esModule","default","renderWithTheme","ui","render","jsx","ThemeProvider","children","describe","it","CodeField","value","onChangeText","length","expect","screen","getAllByTestId","toHaveLength","jest","fn","mode","fireEvent","changeText","getByLabelText","toHaveBeenCalledWith","onComplete","getByText","toBeTruthy"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/CodeField/CodeField.test.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "CodeField", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _CodeField.CodeField;
10
+ }
11
+ });
12
+ var _CodeField = require("./CodeField.js");
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_CodeField","require"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/CodeField/index.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA","ignoreList":[]}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Spinner = Spinner;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _reactNativeSvg = _interopRequireWildcard(require("react-native-svg"));
10
+ var _index = require("../../theme/index.js");
11
+ var _Text = require("../Text/Text.js");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ /** Diameters per size — `xl` matches the Figma spinner (164, 12px ring). */
15
+ const SIZES = {
16
+ xs: 24,
17
+ sm: 40,
18
+ md: 64,
19
+ lg: 96,
20
+ xl: 164
21
+ };
22
+ /**
23
+ * Spinner — an infinitely rotating ring (react-native-svg + Animated, native
24
+ * driver for smooth motion). Configurable size, color, thickness and an
25
+ * optional label (top/bottom, with adjustable gap and font size).
26
+ */
27
+ function Spinner({
28
+ size = 'md',
29
+ color,
30
+ thickness,
31
+ label,
32
+ labelPosition = 'bottom',
33
+ gap = 8,
34
+ labelSize = 16,
35
+ labelColor,
36
+ duration = 900,
37
+ style,
38
+ accessibilityLabel
39
+ }) {
40
+ const theme = (0, _index.useTheme)();
41
+ const diameter = SIZES[size];
42
+ const stroke = thickness ?? Math.max(2, Math.round(diameter * 0.073));
43
+ const arcColor = color ?? theme.colors.action.primary;
44
+ const radius = (diameter - stroke) / 2;
45
+ const circumference = 2 * Math.PI * radius;
46
+ const rotation = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
47
+ (0, _react.useEffect)(() => {
48
+ rotation.setValue(0);
49
+ const loop = _reactNative.Animated.loop(_reactNative.Animated.timing(rotation, {
50
+ toValue: 1,
51
+ duration,
52
+ easing: _reactNative.Easing.linear,
53
+ // Native driver loops smoothly on iOS/Android; on web (react-native-web)
54
+ // a native-driven loop only runs once, so drive it on the JS thread there.
55
+ useNativeDriver: _reactNative.Platform.OS !== 'web'
56
+ }));
57
+ loop.start();
58
+ return () => loop.stop();
59
+ }, [rotation, duration]);
60
+ const spin = rotation.interpolate({
61
+ inputRange: [0, 1],
62
+ outputRange: ['0deg', '360deg']
63
+ });
64
+ const labelStyle = {
65
+ fontSize: labelSize,
66
+ lineHeight: Math.round(labelSize * 1.4),
67
+ ...(labelPosition === 'top' ? {} : null)
68
+ };
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
70
+ accessibilityRole: "progressbar",
71
+ accessibilityLabel: accessibilityLabel ?? label,
72
+ style: [{
73
+ alignItems: 'center',
74
+ gap,
75
+ flexDirection: labelPosition === 'top' ? 'column-reverse' : 'column'
76
+ }, style],
77
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
78
+ style: {
79
+ width: diameter,
80
+ height: diameter,
81
+ transform: [{
82
+ rotate: spin
83
+ }]
84
+ },
85
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSvg.default, {
86
+ width: diameter,
87
+ height: diameter,
88
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Circle, {
89
+ cx: diameter / 2,
90
+ cy: diameter / 2,
91
+ r: radius,
92
+ stroke: arcColor,
93
+ strokeWidth: stroke,
94
+ fill: "none",
95
+ opacity: 0.2
96
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Circle, {
97
+ cx: diameter / 2,
98
+ cy: diameter / 2,
99
+ r: radius,
100
+ stroke: arcColor,
101
+ strokeWidth: stroke,
102
+ fill: "none",
103
+ strokeLinecap: "round",
104
+ strokeDasharray: [circumference * 0.7, circumference * 0.3]
105
+ })]
106
+ })
107
+ }), label ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.Text, {
108
+ color: labelColor ?? 'secondary',
109
+ style: labelStyle,
110
+ children: label
111
+ }) : null]
112
+ });
113
+ }
114
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_reactNativeSvg","_interopRequireWildcard","_index","_Text","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SIZES","xs","sm","md","lg","xl","Spinner","size","color","thickness","label","labelPosition","gap","labelSize","labelColor","duration","style","accessibilityLabel","theme","useTheme","diameter","stroke","Math","max","round","arcColor","colors","action","primary","radius","circumference","PI","rotation","useRef","Animated","Value","current","useEffect","setValue","loop","timing","toValue","easing","Easing","linear","useNativeDriver","Platform","OS","start","stop","spin","interpolate","inputRange","outputRange","labelStyle","fontSize","lineHeight","jsxs","View","accessibilityRole","alignItems","flexDirection","children","jsx","width","height","transform","rotate","Circle","cx","cy","strokeWidth","fill","opacity","strokeLinecap","strokeDasharray","Text"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Spinner/Spinner.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.XL = exports.WithLabel = exports.Sizes = exports.LabelTop = exports.Default = exports.CustomColor = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _Spinner = require("./Spinner.js");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ const meta = {
11
+ title: 'Components/Spinner',
12
+ component: _Spinner.Spinner,
13
+ args: {
14
+ size: 'md'
15
+ },
16
+ argTypes: {
17
+ size: {
18
+ control: 'inline-radio',
19
+ options: ['xs', 'sm', 'md', 'lg', 'xl']
20
+ },
21
+ labelPosition: {
22
+ control: 'inline-radio',
23
+ options: ['top', 'bottom']
24
+ }
25
+ }
26
+ };
27
+ var _default = exports.default = meta;
28
+ const Default = exports.Default = {};
29
+ const WithLabel = exports.WithLabel = {
30
+ args: {
31
+ label: 'Wait a moment please...'
32
+ }
33
+ };
34
+ const LabelTop = exports.LabelTop = {
35
+ args: {
36
+ label: 'Loading',
37
+ labelPosition: 'top'
38
+ }
39
+ };
40
+ const XL = exports.XL = {
41
+ args: {
42
+ size: 'xl',
43
+ label: 'Wait a moment please...'
44
+ }
45
+ };
46
+ const CustomColor = exports.CustomColor = {
47
+ args: {
48
+ size: 'lg',
49
+ color: '#FF003A'
50
+ }
51
+ };
52
+ const Sizes = exports.Sizes = {
53
+ render: () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
54
+ style: {
55
+ flexDirection: 'row',
56
+ alignItems: 'center',
57
+ gap: 24
58
+ },
59
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.Spinner, {
60
+ size: "xs"
61
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.Spinner, {
62
+ size: "sm"
63
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.Spinner, {
64
+ size: "md"
65
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.Spinner, {
66
+ size: "lg"
67
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.Spinner, {
68
+ size: "xl"
69
+ })]
70
+ })
71
+ };
72
+ //# sourceMappingURL=Spinner.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_Spinner","_jsxRuntime","meta","title","component","Spinner","args","size","argTypes","control","options","labelPosition","_default","exports","default","Default","WithLabel","label","LabelTop","XL","CustomColor","color","Sizes","render","jsxs","View","style","flexDirection","alignItems","gap","children","jsx"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Spinner/Spinner.stories.tsx"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAAoC,IAAAE,WAAA,GAAAF,OAAA;AAEpC,MAAMG,IAAI,GAAG;EACXC,KAAK,EAAE,oBAAoB;EAC3BC,SAAS,EAAEC,gBAAO;EAClBC,IAAI,EAAE;IAAEC,IAAI,EAAE;EAAK,CAAC;EACpBC,QAAQ,EAAE;IACRD,IAAI,EAAE;MAAEE,OAAO,EAAE,cAAc;MAAEC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAAE,CAAC;IAC1EC,aAAa,EAAE;MAAEF,OAAO,EAAE,cAAc;MAAEC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ;IAAE;EACvE;AACF,CAAgC;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAElBZ,IAAI;AAGZ,MAAMa,OAAc,GAAAF,OAAA,CAAAE,OAAA,GAAG,CAAC,CAAC;AACzB,MAAMC,SAAgB,GAAAH,OAAA,CAAAG,SAAA,GAAG;EAAEV,IAAI,EAAE;IAAEW,KAAK,EAAE;EAA0B;AAAE,CAAC;AACvE,MAAMC,QAAe,GAAAL,OAAA,CAAAK,QAAA,GAAG;EAAEZ,IAAI,EAAE;IAAEW,KAAK,EAAE,SAAS;IAAEN,aAAa,EAAE;EAAM;AAAE,CAAC;AAC5E,MAAMQ,EAAS,GAAAN,OAAA,CAAAM,EAAA,GAAG;EAAEb,IAAI,EAAE;IAAEC,IAAI,EAAE,IAAI;IAAEU,KAAK,EAAE;EAA0B;AAAE,CAAC;AAC5E,MAAMG,WAAkB,GAAAP,OAAA,CAAAO,WAAA,GAAG;EAAEd,IAAI,EAAE;IAAEC,IAAI,EAAE,IAAI;IAAEc,KAAK,EAAE;EAAU;AAAE,CAAC;AAErE,MAAMC,KAAY,GAAAT,OAAA,CAAAS,KAAA,GAAG;EAC1BC,MAAM,EAAEA,CAAA,kBACN,IAAAtB,WAAA,CAAAuB,IAAA,EAAC1B,YAAA,CAAA2B,IAAI;IAACC,KAAK,EAAE;MAAEC,aAAa,EAAE,KAAK;MAAEC,UAAU,EAAE,QAAQ;MAAEC,GAAG,EAAE;IAAG,CAAE;IAAAC,QAAA,gBACnE,IAAA7B,WAAA,CAAA8B,GAAA,EAAC/B,QAAA,CAAAK,OAAO;MAACE,IAAI,EAAC;IAAI,CAAE,CAAC,eACrB,IAAAN,WAAA,CAAA8B,GAAA,EAAC/B,QAAA,CAAAK,OAAO;MAACE,IAAI,EAAC;IAAI,CAAE,CAAC,eACrB,IAAAN,WAAA,CAAA8B,GAAA,EAAC/B,QAAA,CAAAK,OAAO;MAACE,IAAI,EAAC;IAAI,CAAE,CAAC,eACrB,IAAAN,WAAA,CAAA8B,GAAA,EAAC/B,QAAA,CAAAK,OAAO;MAACE,IAAI,EAAC;IAAI,CAAE,CAAC,eACrB,IAAAN,WAAA,CAAA8B,GAAA,EAAC/B,QAAA,CAAAK,OAAO;MAACE,IAAI,EAAC;IAAI,CAAE,CAAC;EAAA,CACjB;AAEV,CAAC","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _reactNative = require("@testing-library/react-native");
5
+ var _Spinner = require("./Spinner.js");
6
+ var _index = require("../../theme/index.js");
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ function renderWithTheme(ui) {
10
+ return (0, _reactNative.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_index.ThemeProvider, {
11
+ children: ui
12
+ }));
13
+ }
14
+ describe('Spinner', () => {
15
+ it('renders with a progressbar role', () => {
16
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.Spinner, {
17
+ accessibilityLabel: "Loading"
18
+ }));
19
+ expect(_reactNative.screen.getByLabelText('Loading')).toBeTruthy();
20
+ });
21
+ it('renders its label', () => {
22
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.Spinner, {
23
+ label: "Wait a moment please..."
24
+ }));
25
+ expect(_reactNative.screen.getByText('Wait a moment please...')).toBeTruthy();
26
+ });
27
+ it('renders without a label when none is given', () => {
28
+ renderWithTheme(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.Spinner, {
29
+ accessibilityLabel: "Loading"
30
+ }));
31
+ expect(_reactNative.screen.queryByText('Loading')).toBeNull();
32
+ });
33
+ });
34
+ //# sourceMappingURL=Spinner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_Spinner","_index","_jsxRuntime","e","__esModule","default","renderWithTheme","ui","render","jsx","ThemeProvider","children","describe","it","Spinner","accessibilityLabel","expect","screen","getByLabelText","toBeTruthy","label","getByText","queryByText","toBeNull"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Spinner/Spinner.test.tsx"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAA4C,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE5C,SAASG,eAAeA,CAACC,EAAsB,EAAE;EAC/C,OAAO,IAAAC,mBAAM,eAAC,IAAAN,WAAA,CAAAO,GAAA,EAACR,MAAA,CAAAS,aAAa;IAAAC,QAAA,EAAEJ;EAAE,CAAgB,CAAC,CAAC;AACpD;AAEAK,QAAQ,CAAC,SAAS,EAAE,MAAM;EACxBC,EAAE,CAAC,iCAAiC,EAAE,MAAM;IAC1CP,eAAe,cAAC,IAAAJ,WAAA,CAAAO,GAAA,EAACT,QAAA,CAAAc,OAAO;MAACC,kBAAkB,EAAC;IAAS,CAAE,CAAC,CAAC;IACzDC,MAAM,CAACC,mBAAM,CAACC,cAAc,CAAC,SAAS,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;EACvD,CAAC,CAAC;EAEFN,EAAE,CAAC,mBAAmB,EAAE,MAAM;IAC5BP,eAAe,cAAC,IAAAJ,WAAA,CAAAO,GAAA,EAACT,QAAA,CAAAc,OAAO;MAACM,KAAK,EAAC;IAAyB,CAAE,CAAC,CAAC;IAC5DJ,MAAM,CAACC,mBAAM,CAACI,SAAS,CAAC,yBAAyB,CAAC,CAAC,CAACF,UAAU,CAAC,CAAC;EAClE,CAAC,CAAC;EAEFN,EAAE,CAAC,4CAA4C,EAAE,MAAM;IACrDP,eAAe,cAAC,IAAAJ,WAAA,CAAAO,GAAA,EAACT,QAAA,CAAAc,OAAO;MAACC,kBAAkB,EAAC;IAAS,CAAE,CAAC,CAAC;IACzDC,MAAM,CAACC,mBAAM,CAACK,WAAW,CAAC,SAAS,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAClD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Spinner", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Spinner.Spinner;
10
+ }
11
+ });
12
+ var _Spinner = require("./Spinner.js");
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_Spinner","require"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Spinner/index.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA","ignoreList":[]}