react-native-system-ui 1.0.0 → 1.0.2

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 (210) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +51 -53
  3. package/dist/cjs/components/area/Area.js +22 -22
  4. package/dist/cjs/components/avatar/Avatar.js +23 -23
  5. package/dist/cjs/components/badge/Badge.js +56 -61
  6. package/dist/cjs/components/button/Button.js +87 -92
  7. package/dist/cjs/components/button/ButtonGroup.js +4 -4
  8. package/dist/cjs/components/calendar/Calendar.js +28 -28
  9. package/dist/cjs/components/cascader/Cascader.js +206 -212
  10. package/dist/cjs/components/cell/Cell.js +54 -51
  11. package/dist/cjs/components/cell/CellGroup.js +26 -25
  12. package/dist/cjs/components/checkbox/Checkbox.js +1 -0
  13. package/dist/cjs/components/checkbox/CheckboxGroup.js +20 -19
  14. package/dist/cjs/components/circle/Circle.js +66 -54
  15. package/dist/cjs/components/collapse/Collapse.js +18 -18
  16. package/dist/cjs/components/config-provider/ConfigProvider.js +5 -5
  17. package/dist/cjs/components/count-down/CountDown.js +17 -17
  18. package/dist/cjs/components/datetime-picker/DatetimePicker.js +34 -35
  19. package/dist/cjs/components/dialog/Dialog.js +16 -10
  20. package/dist/cjs/components/dialog/imperative.js +8 -14
  21. package/dist/cjs/components/dialog/tokens.js +1 -0
  22. package/dist/cjs/components/divider/Divider.js +48 -51
  23. package/dist/cjs/components/empty/Empty.js +30 -25
  24. package/dist/cjs/components/error-boundary/ErrorBoundary.js +3 -2
  25. package/dist/cjs/components/flex/Flex.js +27 -27
  26. package/dist/cjs/components/flex/FlexItem.js +1 -0
  27. package/dist/cjs/components/form/Form.js +94 -93
  28. package/dist/cjs/components/form/FormItem.js +60 -54
  29. package/dist/cjs/components/form/FormList.js +35 -35
  30. package/dist/cjs/components/grid/Grid.js +48 -48
  31. package/dist/cjs/components/grid/GridItem.js +9 -2
  32. package/dist/cjs/components/image/Image.js +25 -24
  33. package/dist/cjs/components/image/tokens.js +3 -1
  34. package/dist/cjs/components/image-preview/ImagePreview.js +38 -28
  35. package/dist/cjs/components/image-preview/tokens.js +3 -1
  36. package/dist/cjs/components/input/Input.js +16 -19
  37. package/dist/cjs/components/loading/Loading.js +27 -27
  38. package/dist/cjs/components/nav-bar/NavBar.js +21 -18
  39. package/dist/cjs/components/nav-bar/tokens.js +3 -1
  40. package/dist/cjs/components/notice-bar/NoticeBar.js +7 -3
  41. package/dist/cjs/components/notice-bar/tokens.js +3 -1
  42. package/dist/cjs/components/notify/Notify.js +2 -1
  43. package/dist/cjs/components/notify/imperative.js +17 -17
  44. package/dist/cjs/components/notify/tokens.js +1 -0
  45. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +217 -201
  46. package/dist/cjs/components/number-keyboard/tokens.js +7 -1
  47. package/dist/cjs/components/overlay/Overlay.js +15 -15
  48. package/dist/cjs/components/password-input/PasswordInput.js +49 -49
  49. package/dist/cjs/components/picker/Picker.js +50 -58
  50. package/dist/cjs/components/popup/Popup.js +10 -10
  51. package/dist/cjs/components/popup/tokens.js +1 -0
  52. package/dist/cjs/components/portal/Portal.js +3 -4
  53. package/dist/cjs/components/progress/Progress.js +94 -95
  54. package/dist/cjs/components/progress/tokens.js +1 -0
  55. package/dist/cjs/components/radio/Radio.js +67 -63
  56. package/dist/cjs/components/radio/RadioGroup.js +6 -6
  57. package/dist/cjs/components/safe-area-view/SafeAreaView.js +7 -7
  58. package/dist/cjs/components/search/Search.js +28 -28
  59. package/dist/cjs/components/selector/Selector.js +19 -26
  60. package/dist/cjs/components/share-sheet/ShareSheet.js +8 -2
  61. package/dist/cjs/components/share-sheet/tokens.js +3 -1
  62. package/dist/cjs/components/sidebar/Sidebar.js +22 -16
  63. package/dist/cjs/components/sidebar/SidebarItem.js +9 -8
  64. package/dist/cjs/components/sidebar/tokens.js +3 -1
  65. package/dist/cjs/components/skeleton/Skeleton.js +43 -42
  66. package/dist/cjs/components/slider/Slider.js +1 -1
  67. package/dist/cjs/components/space/Space.js +45 -41
  68. package/dist/cjs/components/space/tokens.js +7 -1
  69. package/dist/cjs/components/stepper/Stepper.js +17 -15
  70. package/dist/cjs/components/stepper/tokens.js +1 -0
  71. package/dist/cjs/components/swiper/Swiper.js +10 -7
  72. package/dist/cjs/components/swiper/SwiperPagIndicator.js +3 -2
  73. package/dist/cjs/components/switch/Switch.js +23 -23
  74. package/dist/cjs/components/tabbar/Tabbar.js +26 -26
  75. package/dist/cjs/components/tabbar/TabbarItem.js +6 -0
  76. package/dist/cjs/components/tabs/Tabs.js +143 -153
  77. package/dist/cjs/components/tabs/tokens.js +3 -1
  78. package/dist/cjs/components/tag/Tag.js +38 -38
  79. package/dist/cjs/components/toast/Toast.js +7 -3
  80. package/dist/cjs/components/toast/tokens.js +1 -0
  81. package/dist/cjs/components/typography/Typography.js +23 -21
  82. package/dist/cjs/components/water-mark/WaterMark.js +65 -65
  83. package/dist/cjs/design-system/Text.js +38 -0
  84. package/dist/cjs/design-system/createComponentTokensHook.js +2 -2
  85. package/dist/cjs/design-system/index.js +7 -0
  86. package/dist/cjs/design-system/mergeTokensOverride.js +1 -4
  87. package/dist/cjs/hooks/useControllableValue.js +11 -11
  88. package/dist/cjs/hooks/useCountDown.js +18 -18
  89. package/dist/cjs/platform/measure.js +4 -2
  90. package/dist/cjs/utils/color.js +2 -7
  91. package/dist/cjs/utils/compare.js +3 -3
  92. package/dist/cjs/utils/date.js +2 -2
  93. package/dist/cjs/utils/deepMerge.js +5 -5
  94. package/dist/cjs/utils/hairline.js +1 -0
  95. package/dist/cjs/utils/render.js +2 -8
  96. package/dist/cjs/utils/validate.js +2 -4
  97. package/dist/es/components/action-sheet/ActionSheet.js +51 -53
  98. package/dist/es/components/area/Area.js +22 -22
  99. package/dist/es/components/avatar/Avatar.js +23 -23
  100. package/dist/es/components/badge/Badge.js +56 -61
  101. package/dist/es/components/button/Button.js +87 -92
  102. package/dist/es/components/button/ButtonGroup.js +4 -4
  103. package/dist/es/components/calendar/Calendar.js +28 -28
  104. package/dist/es/components/cascader/Cascader.js +206 -212
  105. package/dist/es/components/cell/Cell.js +55 -52
  106. package/dist/es/components/cell/CellGroup.js +26 -25
  107. package/dist/es/components/checkbox/Checkbox.js +1 -0
  108. package/dist/es/components/checkbox/CheckboxGroup.js +20 -19
  109. package/dist/es/components/circle/Circle.js +66 -54
  110. package/dist/es/components/collapse/Collapse.js +18 -18
  111. package/dist/es/components/config-provider/ConfigProvider.js +5 -5
  112. package/dist/es/components/count-down/CountDown.js +17 -17
  113. package/dist/es/components/datetime-picker/DatetimePicker.js +34 -35
  114. package/dist/es/components/dialog/Dialog.js +16 -10
  115. package/dist/es/components/dialog/imperative.js +8 -14
  116. package/dist/es/components/dialog/tokens.js +1 -0
  117. package/dist/es/components/divider/Divider.js +48 -51
  118. package/dist/es/components/empty/Empty.js +30 -25
  119. package/dist/es/components/error-boundary/ErrorBoundary.js +3 -2
  120. package/dist/es/components/flex/Flex.js +27 -27
  121. package/dist/es/components/flex/FlexItem.js +1 -0
  122. package/dist/es/components/form/Form.js +95 -94
  123. package/dist/es/components/form/FormItem.js +60 -54
  124. package/dist/es/components/form/FormList.js +35 -35
  125. package/dist/es/components/grid/Grid.js +48 -48
  126. package/dist/es/components/grid/GridItem.js +10 -3
  127. package/dist/es/components/image/Image.js +25 -24
  128. package/dist/es/components/image/tokens.js +3 -1
  129. package/dist/es/components/image-preview/ImagePreview.js +39 -29
  130. package/dist/es/components/image-preview/tokens.js +3 -1
  131. package/dist/es/components/input/Input.js +16 -19
  132. package/dist/es/components/loading/Loading.js +27 -27
  133. package/dist/es/components/nav-bar/NavBar.js +21 -18
  134. package/dist/es/components/nav-bar/tokens.js +3 -1
  135. package/dist/es/components/notice-bar/NoticeBar.js +7 -3
  136. package/dist/es/components/notice-bar/tokens.js +3 -1
  137. package/dist/es/components/notify/Notify.js +2 -1
  138. package/dist/es/components/notify/imperative.js +17 -17
  139. package/dist/es/components/notify/tokens.js +1 -0
  140. package/dist/es/components/number-keyboard/NumberKeyboard.js +217 -201
  141. package/dist/es/components/number-keyboard/tokens.js +7 -1
  142. package/dist/es/components/overlay/Overlay.js +15 -15
  143. package/dist/es/components/password-input/PasswordInput.js +49 -49
  144. package/dist/es/components/picker/Picker.js +50 -58
  145. package/dist/es/components/popup/Popup.js +10 -10
  146. package/dist/es/components/popup/tokens.js +1 -0
  147. package/dist/es/components/portal/Portal.js +3 -4
  148. package/dist/es/components/progress/Progress.js +94 -95
  149. package/dist/es/components/progress/tokens.js +1 -0
  150. package/dist/es/components/radio/Radio.js +67 -63
  151. package/dist/es/components/radio/RadioGroup.js +6 -6
  152. package/dist/es/components/safe-area-view/SafeAreaView.js +7 -7
  153. package/dist/es/components/search/Search.js +28 -28
  154. package/dist/es/components/selector/Selector.js +19 -26
  155. package/dist/es/components/share-sheet/ShareSheet.js +8 -2
  156. package/dist/es/components/share-sheet/tokens.js +3 -1
  157. package/dist/es/components/sidebar/Sidebar.js +22 -16
  158. package/dist/es/components/sidebar/SidebarItem.js +9 -8
  159. package/dist/es/components/sidebar/tokens.js +3 -1
  160. package/dist/es/components/skeleton/Skeleton.js +43 -42
  161. package/dist/es/components/slider/Slider.js +3 -3
  162. package/dist/es/components/space/Space.js +45 -41
  163. package/dist/es/components/space/tokens.js +7 -1
  164. package/dist/es/components/stepper/Stepper.js +17 -15
  165. package/dist/es/components/stepper/tokens.js +1 -0
  166. package/dist/es/components/swiper/Swiper.js +11 -8
  167. package/dist/es/components/swiper/SwiperPagIndicator.js +3 -2
  168. package/dist/es/components/switch/Switch.js +23 -23
  169. package/dist/es/components/tabbar/Tabbar.js +26 -26
  170. package/dist/es/components/tabbar/TabbarItem.js +6 -0
  171. package/dist/es/components/tabs/Tabs.js +144 -154
  172. package/dist/es/components/tabs/tokens.js +3 -1
  173. package/dist/es/components/tag/Tag.js +38 -38
  174. package/dist/es/components/toast/Toast.js +7 -3
  175. package/dist/es/components/toast/tokens.js +1 -0
  176. package/dist/es/components/typography/Typography.js +23 -21
  177. package/dist/es/components/water-mark/WaterMark.js +65 -65
  178. package/dist/es/design-system/Text.js +19 -0
  179. package/dist/es/design-system/createComponentTokensHook.js +2 -2
  180. package/dist/es/design-system/index.js +1 -0
  181. package/dist/es/design-system/mergeTokensOverride.js +1 -4
  182. package/dist/es/hooks/useControllableValue.js +11 -11
  183. package/dist/es/hooks/useCountDown.js +18 -18
  184. package/dist/es/platform/measure.js +4 -2
  185. package/dist/es/utils/color.js +1 -4
  186. package/dist/es/utils/compare.js +3 -3
  187. package/dist/es/utils/date.js +2 -2
  188. package/dist/es/utils/deepMerge.js +5 -5
  189. package/dist/es/utils/hairline.js +1 -0
  190. package/dist/es/utils/render.js +1 -1
  191. package/dist/es/utils/validate.js +1 -2
  192. package/dist/types/components/dialog/tokens.d.ts +1 -0
  193. package/dist/types/components/image-preview/tokens.d.ts +1 -0
  194. package/dist/types/components/nav-bar/tokens.d.ts +1 -1
  195. package/dist/types/components/notice-bar/tokens.d.ts +1 -0
  196. package/dist/types/components/number-keyboard/tokens.d.ts +5 -0
  197. package/dist/types/components/picker/Picker.d.ts +1 -1
  198. package/dist/types/components/popup/tokens.d.ts +1 -0
  199. package/dist/types/components/share-sheet/tokens.d.ts +1 -0
  200. package/dist/types/components/stepper/tokens.d.ts +1 -0
  201. package/dist/types/components/tabs/tokens.d.ts +1 -0
  202. package/dist/types/components/toast/tokens.d.ts +1 -0
  203. package/dist/types/design-system/Text.d.ts +3 -0
  204. package/dist/types/design-system/index.d.ts +1 -0
  205. package/dist/types/hooks/useCountDown.d.ts +1 -1
  206. package/dist/types/utils/color.d.ts +0 -2
  207. package/dist/types/utils/date.d.ts +1 -1
  208. package/dist/types/utils/render.d.ts +1 -1
  209. package/dist/types/utils/validate.d.ts +0 -1
  210. package/package.json +17 -3
@@ -13,15 +13,17 @@ import { useLocale } from '../config-provider/useLocale';
13
13
  import { SafeAreaView } from '../safe-area-view';
14
14
  import { useNumberKeyboardTokens } from './tokens';
15
15
  const registry = new Set();
16
- const NUMBER_KEYS = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
17
- const ZERO_KEY = '0';
16
+ const NUM_KEYS = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
17
+ const ZERO = '0';
18
+ const RE_NUM_LIKE = /^\d+$|^\.$|^x$/i;
18
19
  const shuffle = list => {
19
- const newList = [...list];
20
- for (let i = newList.length - 1; i > 0; i -= 1) {
20
+ const n = [...list];
21
+ for (let i = n.length - 1; i > 0; i--) {
21
22
  const j = Math.floor(Math.random() * (i + 1));
22
- [newList[i], newList[j]] = [newList[j], newList[i]];
23
+ [n[i], n[j]] = [n[j], n[i]];
23
24
  }
24
- return newList;
25
+ ;
26
+ return n;
25
27
  };
26
28
  const NumberKeyboard = /*#__PURE__*/React.memo(props => {
27
29
  const {
@@ -42,8 +44,8 @@ const NumberKeyboard = /*#__PURE__*/React.memo(props => {
42
44
  onBlur,
43
45
  onHide,
44
46
  onShow,
45
- value: _value,
46
- defaultValue: _defaultValue,
47
+ value: _v,
48
+ defaultValue: _dv,
47
49
  maxlength: maxlengthProp,
48
50
  blurOnClose = true,
49
51
  safeAreaInsetBottom = true,
@@ -63,7 +65,8 @@ const NumberKeyboard = /*#__PURE__*/React.memo(props => {
63
65
  radii,
64
66
  shadow,
65
67
  sizing,
66
- spacing
68
+ spacing,
69
+ typography
67
70
  } = tokens;
68
71
  const [value, setValue] = useControllableValue(props, {
69
72
  defaultValue: '',
@@ -71,37 +74,39 @@ const NumberKeyboard = /*#__PURE__*/React.memo(props => {
71
74
  defaultValuePropName: 'defaultValue',
72
75
  trigger: 'onChange'
73
76
  });
74
- const currentValue = value ?? '';
75
- const parsedMaxLength = parseNumberLike(maxlengthProp, undefined);
76
- const maxLength = parsedMaxLength !== undefined && Number.isFinite(parsedMaxLength) && parsedMaxLength >= 0 ? Math.floor(parsedMaxLength) : undefined;
77
- const valueRef = useRef(currentValue),
78
- maxLengthRef = useRef(maxLength),
79
- onCloseRef = useRef(onClose),
80
- onBlurRef = useRef(onBlur),
81
- onShowRef = useRef(onShow),
82
- onHideRef = useRef(onHide),
83
- onDeleteRef = useRef(onDelete),
84
- onInputRef = useRef(onInput);
85
- valueRef.current = currentValue;
86
- maxLengthRef.current = maxLength;
77
+ const curVal = value ?? '';
78
+ const maxLen = (() => {
79
+ const p = parseNumberLike(maxlengthProp, undefined);
80
+ return p != null && Number.isFinite(p) && p >= 0 ? Math.floor(p) : undefined;
81
+ })();
82
+ const valRef = useRef(curVal);
83
+ const maxRef = useRef(maxLen);
84
+ const onCloseRef = useRef(onClose);
85
+ const onBlurRef = useRef(onBlur);
86
+ const onShowRef = useRef(onShow);
87
+ const onHideRef = useRef(onHide);
88
+ const onDelRef = useRef(onDelete);
89
+ const onInpRef = useRef(onInput);
90
+ valRef.current = curVal;
91
+ maxRef.current = maxLen;
87
92
  onCloseRef.current = onClose;
88
93
  onBlurRef.current = onBlur;
89
94
  onShowRef.current = onShow;
90
95
  onHideRef.current = onHide;
91
- onDeleteRef.current = onDelete;
92
- onInputRef.current = onInput;
96
+ onDelRef.current = onDelete;
97
+ onInpRef.current = onInput;
93
98
  const isCustom = theme === 'custom';
94
- const defaultCloseText = locale?.vanNumberKeyboard?.close ?? 'Done';
95
- const closeText = isCustom ? closeButtonText ?? defaultCloseText : closeButtonText;
99
+ const defClose = locale?.vanNumberKeyboard?.close ?? 'Done';
100
+ const closeTxt = isCustom ? closeButtonText ?? defClose : closeButtonText;
96
101
  const handleClose = useCallback(() => {
97
102
  onCloseRef.current?.();
98
103
  if (blurOnClose) onBlurRef.current?.();
99
104
  }, [blurOnClose]);
100
- const prevVisible = useRef(visible);
105
+ const prevVis = useRef(visible);
101
106
  useEffect(() => {
102
- if (visible && !prevVisible.current) onShowRef.current?.();
103
- if (!visible && prevVisible.current) onHideRef.current?.();
104
- prevVisible.current = visible;
107
+ if (visible && !prevVis.current) onShowRef.current?.();
108
+ if (!visible && prevVis.current) onHideRef.current?.();
109
+ prevVis.current = visible;
105
110
  }, [visible]);
106
111
  useEffect(() => {
107
112
  if (visible) {
@@ -115,91 +120,94 @@ const NumberKeyboard = /*#__PURE__*/React.memo(props => {
115
120
  };
116
121
  }, [visible, handleClose]);
117
122
  const keys = useMemo(() => {
118
- const shouldShuffle = randomKeyOrder && visible;
119
- const numberKeys = shouldShuffle ? shuffle(NUMBER_KEYS) : NUMBER_KEYS;
120
- const matrix = numberKeys.map(text => ({
121
- text,
123
+ const sh = randomKeyOrder && visible;
124
+ const nK = sh ? shuffle(NUM_KEYS) : NUM_KEYS;
125
+ const mat = nK.map(t => ({
126
+ text: t,
122
127
  type: ''
123
128
  }));
124
129
  if (isCustom) {
125
- const extraKeys = Array.isArray(extraKey) ? extraKey : extraKey ? [extraKey] : [];
126
- if (extraKeys.length === 1) matrix.push({
127
- text: ZERO_KEY,
130
+ const e = Array.isArray(extraKey) ? extraKey : extraKey ? [extraKey] : [];
131
+ if (e.length === 1) mat.push({
132
+ text: ZERO,
128
133
  type: '',
129
134
  wider: true
130
135
  }, {
131
- text: extraKeys[0],
136
+ text: e[0],
132
137
  type: 'extra'
133
- });else if (extraKeys.length >= 2) matrix.push({
134
- text: extraKeys[0],
138
+ });else if (e.length >= 2) mat.push({
139
+ text: e[0],
135
140
  type: 'extra'
136
141
  }, {
137
- text: ZERO_KEY,
142
+ text: ZERO,
138
143
  type: ''
139
144
  }, {
140
- text: extraKeys[1],
145
+ text: e[1],
141
146
  type: 'extra'
142
- });else matrix.push({
143
- text: ZERO_KEY,
147
+ });else mat.push({
148
+ text: ZERO,
144
149
  type: ''
145
150
  });
146
- return matrix;
151
+ return mat;
147
152
  }
148
- const nextExtra = Array.isArray(extraKey) ? extraKey[0] ?? '' : extraKey ?? '';
149
- matrix.push({
150
- text: nextExtra,
153
+ const nE = Array.isArray(extraKey) ? extraKey[0] ?? '' : extraKey ?? '';
154
+ mat.push({
155
+ text: nE,
151
156
  type: 'extra'
152
- });
153
- matrix.push({
154
- text: ZERO_KEY,
157
+ }, {
158
+ text: ZERO,
155
159
  type: ''
156
- });
157
- matrix.push({
160
+ }, {
158
161
  type: showDeleteKey ? 'delete' : '',
159
162
  text: showDeleteKey ? undefined : ''
160
163
  });
161
- return matrix;
164
+ return mat;
162
165
  }, [extraKey, isCustom, randomKeyOrder, showDeleteKey, visible]);
163
166
  const handleInput = useCallback((text, type) => {
164
167
  if (type === 'delete') {
165
- const currentValue = valueRef.current;
166
- if (!currentValue) return;
167
- onDeleteRef.current?.();
168
- setValue(currentValue.slice(0, -1));
168
+ const c = valRef.current;
169
+ if (!c) return;
170
+ onDelRef.current?.();
171
+ setValue(c.slice(0, -1));
169
172
  return;
170
173
  }
171
174
  if (type === 'close' || type === 'extra' && !text) {
172
175
  handleClose();
173
176
  return;
174
177
  }
178
+ ;
175
179
  if (!text) return;
176
- const currentValue = valueRef.current,
177
- currentMaxLength = maxLengthRef.current;
178
- if (currentMaxLength !== undefined && currentValue.length >= currentMaxLength) return;
179
- onInputRef.current?.(text);
180
- setValue(`${currentValue}${text}`);
180
+ const c = valRef.current;
181
+ const m = maxRef.current;
182
+ if (m !== undefined && c.length >= m) return;
183
+ onInpRef.current?.(text);
184
+ setValue(`${c}${text}`);
181
185
  }, [handleClose, setValue]);
182
- const windowShadow = useMemo(() => createPlatformShadow(shadow), [shadow.color, shadow.elevation, shadow.offsetY, shadow.opacity, shadow.radius]);
183
- const renderKey = useCallback((key, index, isCustomTheme = false, fullWidth = false, customHeight) => {
184
- const isPlaceholder = key.type === '' && !key.text;
185
- const disabled = isPlaceholder || isCustomTheme && closeButtonLoading;
186
- const onPress = disabled ? undefined : () => handleInput(key.text, key.type);
187
- const background = isCustomTheme ? colors.closeBackground : colors.keyBackground;
188
- const activeBackground = isCustomTheme ? colors.closeActiveBackground : colors.keyActiveBackground;
189
- const inactiveTextColor = isCustomTheme ? colors.closeText : colors.keyText;
190
- const pressedTextColor = isCustomTheme ? colors.closeText : colors.keyTextActive;
191
- const keyHeight = customHeight ?? (isCustomTheme ? sizing.closeHeight : sizing.keyHeight);
192
- const auxFontSize = Math.round(sizing.fontSize * 0.64);
193
- const textFontSize = key.type === 'close' || key.type === 'extra' || key.type === 'delete' ? auxFontSize : sizing.fontSize;
194
- const keyText = key.text ?? '';
195
- const contentNode = key.type === 'delete' ? deleteRender?.() ?? deleteButtonText ?? '' : key.type === 'extra' ? extraKeyRender ? extraKeyRender(keyText) : keyText || '⌨︎' : key.type === 'close' ? closeText ?? defaultCloseText : numberKeyRender ? numberKeyRender(keyText) : keyText;
186
+ const winShadow = useMemo(() => createPlatformShadow(shadow), [shadow.color, shadow.elevation, shadow.offsetY, shadow.opacity, shadow.radius]);
187
+ const renderKey = useCallback((key, index, isClose = false, fullW = false, customH) => {
188
+ const kt = key.type;
189
+ const isPh = kt === '' && !key.text;
190
+ const dis = isPh || isClose && closeButtonLoading;
191
+ const onP = dis ? undefined : () => handleInput(key.text, kt);
192
+ const bg = isClose ? colors.closeBackground : colors.keyBackground;
193
+ const aBg = isClose ? colors.closeActiveBackground : colors.keyActiveBackground;
194
+ const tInact = isClose ? colors.closeText : colors.keyText;
195
+ const tPress = isClose ? colors.closeText : colors.keyTextActive;
196
+ const kH = customH ?? (isClose ? sizing.closeHeight : sizing.keyHeight);
197
+ const auxFs = sizing.auxFontSize ?? Math.round(sizing.fontSize * 0.64);
198
+ const defIconFs = sizing.defaultIconFontSize ?? sizing.fontSize;
199
+ const kTxt = key.text ?? '';
200
+ const cnt = kt === 'delete' ? deleteRender?.() ?? deleteButtonText ?? '⌫' : kt === 'extra' ? extraKeyRender ? extraKeyRender(kTxt) : kTxt || '⌨︎' : kt === 'close' ? closeTxt ?? defClose : numberKeyRender ? numberKeyRender(kTxt) : kTxt;
201
+ const isDefIcon = kt === 'delete' && deleteRender == null && deleteButtonText == null || kt === 'extra' && !extraKeyRender && !kTxt;
202
+ const isNumLike = kt === 'extra' && typeof cnt === 'string' && RE_NUM_LIKE.test(cnt);
203
+ const tFs = kt === '' ? sizing.fontSize : isDefIcon ? defIconFs : isNumLike ? sizing.fontSize : auxFs;
196
204
  return /*#__PURE__*/React.createElement(Pressable, {
197
- key: `${key.type}-${index}-${key.text ?? index}`,
198
- onPress: onPress,
199
- disabled: disabled,
205
+ key: `${kt}-${index}-${key.text ?? index}`,
206
+ onPress: onP,
207
+ disabled: dis,
200
208
  style: [{
201
- opacity: isPlaceholder ? 1 : disabled ? 0.6 : 1
202
- }, fullWidth ? {
209
+ opacity: isPh ? 1 : dis ? 0.6 : 1
210
+ }, fullW ? {
203
211
  width: '100%',
204
212
  flexBasis: 'auto',
205
213
  flexGrow: 0,
@@ -210,184 +218,192 @@ const NumberKeyboard = /*#__PURE__*/React.memo(props => {
210
218
  flexShrink: 1,
211
219
  minWidth: 0
212
220
  }],
213
- accessible: !isPlaceholder,
214
- accessibilityRole: isPlaceholder ? undefined : 'button',
215
- accessibilityLabel: isPlaceholder ? undefined : key.type === 'delete' ? 'delete' : key.type === 'close' ? closeText ?? 'close' : key.type === 'extra' ? keyText || 'collapse' : keyText,
216
- accessibilityState: isPlaceholder ? undefined : {
217
- disabled: !!disabled
221
+ accessible: !isPh,
222
+ accessibilityRole: isPh ? undefined : 'button',
223
+ accessibilityLabel: isPh ? undefined : kt === 'delete' ? 'delete' : kt === 'close' ? closeTxt ?? 'close' : kt === 'extra' ? kTxt || 'collapse' : kTxt,
224
+ accessibilityState: isPh ? undefined : {
225
+ disabled: !!dis
218
226
  },
219
- accessibilityElementsHidden: isPlaceholder,
220
- importantForAccessibility: isPlaceholder ? 'no-hide-descendants' : undefined
227
+ accessibilityElementsHidden: isPh,
228
+ importantForAccessibility: isPh ? 'no-hide-descendants' : undefined
221
229
  }, ({
222
230
  pressed
223
231
  }) => {
224
- const isPressed = pressed && !disabled;
225
- const keyBackground = disabled ? colors.keyBackground : isPressed ? activeBackground : background;
226
- const textColor = isPressed ? pressedTextColor : inactiveTextColor;
232
+ const isP = pressed && !dis;
233
+ const kBg = dis ? colors.keyBackground : isP ? aBg : bg;
234
+ const tClr = isP ? tPress : tInact;
227
235
  return /*#__PURE__*/React.createElement(View, {
228
236
  style: [S.k, {
229
- height: keyHeight,
230
- backgroundColor: keyBackground,
237
+ height: kH,
238
+ backgroundColor: kBg,
231
239
  borderRadius: radii.key
232
240
  }]
233
- }, isCustomTheme && closeButtonLoading ? /*#__PURE__*/React.createElement(Loading, {
241
+ }, isClose && closeButtonLoading ? /*#__PURE__*/React.createElement(Loading, {
234
242
  size: 18,
235
- color: textColor
236
- }) : isRenderable(contentNode) ? renderTextOrNode(contentNode, [S.kT, {
237
- color: textColor,
238
- fontSize: textFontSize
243
+ color: tClr
244
+ }) : isRenderable(cnt) ? renderTextOrNode(cnt, [S.kTxt, {
245
+ color: tClr,
246
+ fontFamily: typography.fontFamily,
247
+ fontSize: tFs
239
248
  }]) : null);
240
249
  });
241
- }, [closeButtonLoading, colors.closeActiveBackground, colors.closeBackground, colors.closeText, colors.keyActiveBackground, colors.keyBackground, colors.keyText, colors.keyTextActive, deleteButtonText, deleteRender, extraKeyRender, handleInput, numberKeyRender, radii.key, sizing.closeHeight, sizing.fontSize, sizing.keyHeight, closeText]);
242
- const animatedValue = useRef(new Animated.Value(visible ? 1 : 0)).current;
243
- const animationRef = useRef(null);
244
- const animationSequence = useRef(0);
245
- const [contentHeight, setContentHeight] = useState(0);
250
+ }, [closeButtonLoading, colors.closeActiveBackground, colors.closeBackground, colors.closeText, colors.keyActiveBackground, colors.keyBackground, colors.keyText, colors.keyTextActive, defClose, deleteButtonText, deleteRender, extraKeyRender, handleInput, numberKeyRender, radii.key, sizing.auxFontSize, sizing.closeHeight, sizing.defaultIconFontSize, sizing.fontSize, sizing.keyHeight, typography.fontFamily, closeTxt]);
251
+ const animVal = useRef(new Animated.Value(visible ? 1 : 0)).current;
252
+ const animRef = useRef(null);
253
+ const seqRef = useRef(0);
254
+ const [contentH, setContentH] = useState(0);
246
255
  const [shouldRender, setShouldRender] = useState(visible);
247
- const effectiveDuration = reducedMotion ? 0 : transition === false ? 0 : transitionDuration;
256
+ const effD = reducedMotion ? 0 : transition === false ? 0 : transitionDuration;
248
257
  useEffect(() => {
249
- animationSequence.current += 1;
250
- const currentSequence = animationSequence.current;
258
+ seqRef.current += 1;
259
+ const seq = seqRef.current;
251
260
  if (visible) setShouldRender(true);
252
- animationRef.current?.stop();
253
- const animation = Animated.timing(animatedValue, {
261
+ animRef.current?.stop();
262
+ const a = Animated.timing(animVal, {
254
263
  toValue: visible ? 1 : 0,
255
- duration: effectiveDuration,
264
+ duration: effD,
256
265
  useNativeDriver: nativeDriverEnabled,
257
266
  easing: visible ? Easing.out(Easing.cubic) : Easing.in(Easing.cubic),
258
267
  isInteraction: false
259
268
  });
260
- animationRef.current = animation;
261
- animation.start(({
269
+ animRef.current = a;
270
+ a.start(({
262
271
  finished
263
272
  }) => {
264
- if (finished && !visible && animationSequence.current === currentSequence) setShouldRender(false);
273
+ if (finished && !visible && seqRef.current === seq) setShouldRender(false);
265
274
  });
266
275
  return () => {
267
- animationRef.current?.stop();
268
- animationRef.current = null;
276
+ animRef.current?.stop();
277
+ animRef.current = null;
269
278
  };
270
- }, [animatedValue, visible, effectiveDuration]);
271
- const translateY = animatedValue.interpolate({
279
+ }, [animVal, visible, effD]);
280
+ const translateY = animVal.interpolate({
272
281
  inputRange: [0, 1],
273
- outputRange: [contentHeight || 320, 0]
282
+ outputRange: [contentH || 320, 0]
274
283
  });
275
- const handleLayout = useCallback(e => {
284
+ const onLayout = useCallback(e => {
276
285
  const {
277
286
  height
278
287
  } = e.nativeEvent.layout;
279
- setContentHeight(prev => Math.abs(height - prev) > 0.5 ? height : prev);
288
+ setContentH(prev => Math.abs(height - prev) > 0.5 ? height : prev);
280
289
  }, []);
281
- const hasHeader = !isCustom && (title || closeButtonText);
282
- const doubleKeyHeight = sizing.keyHeight * 2 + spacing.keyGap;
290
+ const hasHdr = !isCustom && (title || closeButtonText);
291
+ const dblH = sizing.keyHeight * 2 + spacing.keyGap;
283
292
  const memoized = useMemo(() => {
284
- const headerPaddingStyle = {
285
- paddingHorizontal: spacing.titlePadding
293
+ const kg = spacing.keyGap;
294
+ const ph = spacing.paddingHorizontal;
295
+ const tp = spacing.titlePadding;
296
+ const hP = {
297
+ paddingHorizontal: tp
286
298
  };
287
- const defaultContainerStyle = [S.dR, {
299
+ const dC = [S.dRow, {
288
300
  flexDirection: 'column',
289
301
  flexWrap: 'nowrap',
290
- paddingHorizontal: spacing.paddingHorizontal,
291
- paddingTop: spacing.keyGap,
292
- paddingBottom: spacing.keyGap,
293
- gap: spacing.keyGap
302
+ paddingHorizontal: ph,
303
+ paddingTop: kg,
304
+ paddingBottom: kg,
305
+ gap: kg
294
306
  }];
295
- const defaultLineStyle = {
307
+ const dL = {
296
308
  flexDirection: 'row',
297
- gap: spacing.keyGap
309
+ gap: kg
298
310
  };
299
- const customRowStyle = [S.cR, {
300
- paddingHorizontal: spacing.paddingHorizontal,
301
- paddingTop: hasHeader ? 0 : spacing.keyGap,
302
- paddingBottom: spacing.keyGap,
311
+ const cR = [S.cRow, {
312
+ paddingHorizontal: ph,
313
+ paddingTop: hasHdr ? 0 : kg,
314
+ paddingBottom: kg,
303
315
  width: '100%'
304
316
  }];
305
- const customMatrixStyle = [S.cM, {
317
+ const cM = [S.cMat, {
306
318
  flexDirection: 'column',
307
319
  flexWrap: 'nowrap',
308
- gap: spacing.keyGap
320
+ gap: kg
309
321
  }];
310
- const customSideStyle = [S.cS, {
311
- gap: spacing.keyGap,
312
- marginLeft: spacing.keyGap
322
+ const cS = [S.cSide, {
323
+ gap: kg,
324
+ marginLeft: kg
313
325
  }];
314
- const entries = keys.map((key, i) => ({
315
- key,
326
+ const ents = keys.map((k, i) => ({
327
+ key: k,
316
328
  index: i
317
329
  }));
318
- const defaultLines = [];
319
- for (let i = 0; i < entries.length; i += 3) defaultLines.push(entries.slice(i, i + 3));
320
- const defaultNode = /*#__PURE__*/React.createElement(View, {
321
- style: defaultContainerStyle
322
- }, defaultLines.map((line, li) => /*#__PURE__*/React.createElement(View, {
330
+ const dLns = [];
331
+ for (let i = 0; i < ents.length; i += 3) dLns.push(ents.slice(i, i + 3));
332
+ const dN = /*#__PURE__*/React.createElement(View, {
333
+ style: dC
334
+ }, dLns.map((line, li) => /*#__PURE__*/React.createElement(View, {
323
335
  key: `l-${li}`,
324
- style: defaultLineStyle
325
- }, line.map(item => renderKey(item.key, item.index)))));
326
- const customLines = [];
327
- for (let i = 0; i < 9 && i < entries.length; i += 3) customLines.push(entries.slice(i, i + 3));
328
- const tailKeys = entries.slice(9);
329
- if (tailKeys.length === 1) customLines.push([{
336
+ style: dL
337
+ }, line.map(it => renderKey(it.key, it.index)))));
338
+ const cLns = [];
339
+ for (let i = 0; i < 9 && i < ents.length; i += 3) cLns.push(ents.slice(i, i + 3));
340
+ const tl = ents.slice(9);
341
+ if (tl.length === 1) cLns.push([{
330
342
  key: {
331
343
  type: ''
332
344
  },
333
345
  index: 1000001
334
- }, tailKeys[0], {
346
+ }, tl[0], {
335
347
  key: {
336
348
  type: ''
337
349
  },
338
350
  index: 1000002
339
- }]);else if (tailKeys.length) customLines.push(tailKeys);
340
- const customMatrixNode = /*#__PURE__*/React.createElement(View, {
341
- style: customMatrixStyle
342
- }, customLines.map((line, li) => /*#__PURE__*/React.createElement(View, {
351
+ }]);else if (tl.length) cLns.push(tl);
352
+ const cMN = /*#__PURE__*/React.createElement(View, {
353
+ style: cM
354
+ }, cLns.map((line, li) => /*#__PURE__*/React.createElement(View, {
343
355
  key: `cl-${li}`,
344
- style: defaultLineStyle
345
- }, line.map(item => renderKey(item.key, item.index)))));
346
- const deleteNode = showDeleteKey && renderKey({
356
+ style: dL
357
+ }, line.map(it => renderKey(it.key, it.index)))));
358
+ const delN = showDeleteKey && renderKey({
347
359
  type: 'delete'
348
- }, 999, false, true, doubleKeyHeight);
349
- const closeNode = renderKey({
360
+ }, 999, false, true, dblH);
361
+ const closeN = renderKey({
350
362
  type: 'close'
351
- }, 1000, true, true, doubleKeyHeight);
352
- const headerNode = hasHeader ? /*#__PURE__*/React.createElement(View, {
353
- style: [S.h, headerPaddingStyle]
363
+ }, 1000, true, true, dblH);
364
+ const tS = {
365
+ color: colors.title,
366
+ fontFamily: typography.fontFamily,
367
+ fontSize: sizing.titleFontSize
368
+ };
369
+ const closeStyle = {
370
+ color: colors.title,
371
+ fontFamily: typography.fontFamily,
372
+ fontSize: sizing.auxFontSize ?? Math.round(sizing.fontSize * 0.64)
373
+ };
374
+ const hN = hasHdr ? /*#__PURE__*/React.createElement(View, {
375
+ style: [S.hdr, hP]
354
376
  }, /*#__PURE__*/React.createElement(Text, {
355
- style: [S.t, S.tO, {
356
- color: colors.title,
357
- fontSize: sizing.titleFontSize
358
- }],
377
+ style: [S.tBold, S.tCenter, tS],
359
378
  numberOfLines: 1
360
- }, title), closeText && /*#__PURE__*/React.createElement(Pressable, {
379
+ }, title), closeTxt && /*#__PURE__*/React.createElement(Pressable, {
361
380
  onPress: handleClose,
362
- style: S.hC,
381
+ style: S.hdrClose,
363
382
  accessibilityRole: "button",
364
- accessibilityLabel: closeText
383
+ accessibilityLabel: closeTxt
365
384
  }, /*#__PURE__*/React.createElement(Text, {
366
- style: {
367
- color: colors.title
368
- }
369
- }, closeText))) : null;
370
- const bodyNode = isCustom ? /*#__PURE__*/React.createElement(View, {
371
- style: customRowStyle
372
- }, customMatrixNode, /*#__PURE__*/React.createElement(View, {
373
- style: customSideStyle
374
- }, deleteNode, closeNode)) : defaultNode;
375
- const safeAreaNode = safeAreaInsetBottom && /*#__PURE__*/React.createElement(SafeAreaView, {
376
- edge: "bottom"
377
- });
385
+ style: closeStyle
386
+ }, closeTxt))) : null;
387
+ const bN = isCustom ? /*#__PURE__*/React.createElement(View, {
388
+ style: cR
389
+ }, cMN, /*#__PURE__*/React.createElement(View, {
390
+ style: cS
391
+ }, delN, closeN)) : dN;
378
392
  return {
379
- headerNode,
380
- bodyNode,
381
- safeAreaNode
393
+ headerNode: hN,
394
+ bodyNode: bN,
395
+ safeAreaNode: safeAreaInsetBottom && /*#__PURE__*/React.createElement(SafeAreaView, {
396
+ edge: "bottom"
397
+ })
382
398
  };
383
- }, [handleClose, colors.title, doubleKeyHeight, extraKeyRender, hasHeader, isCustom, keys, renderKey, closeText, safeAreaInsetBottom, sizing.titleFontSize, spacing.keyGap, spacing.paddingHorizontal, spacing.titlePadding, title]);
399
+ }, [handleClose, colors.title, dblH, hasHdr, isCustom, keys, renderKey, closeTxt, safeAreaInsetBottom, sizing.auxFontSize, sizing.fontSize, sizing.titleFontSize, spacing.keyGap, spacing.paddingHorizontal, spacing.titlePadding, typography.fontFamily, title, showDeleteKey]);
384
400
  if (!shouldRender && !visible) return null;
385
401
  return /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(Animated.View, _extends({}, rest, {
386
402
  pointerEvents: visible ? 'auto' : 'none',
387
403
  renderToHardwareTextureAndroid: true,
388
404
  shouldRasterizeIOS: true,
389
- onLayout: handleLayout,
390
- style: [S.w, windowShadow, style, {
405
+ onLayout: onLayout,
406
+ style: [S.wrap, winShadow, style, {
391
407
  transform: [{
392
408
  translateY
393
409
  }],
@@ -396,29 +412,29 @@ const NumberKeyboard = /*#__PURE__*/React.memo(props => {
396
412
  }), memoized.headerNode, memoized.bodyNode, memoized.safeAreaNode));
397
413
  });
398
414
  const S = StyleSheet.create({
399
- w: {
415
+ wrap: {
400
416
  position: 'absolute',
401
417
  left: 0,
402
418
  right: 0,
403
419
  bottom: 0
404
420
  },
405
- h: {
421
+ hdr: {
406
422
  flexDirection: 'row',
407
423
  alignItems: 'center',
408
424
  justifyContent: 'flex-end',
409
425
  height: 44,
410
426
  position: 'relative'
411
427
  },
412
- t: {
428
+ tBold: {
413
429
  fontWeight: '600'
414
430
  },
415
- tO: {
431
+ tCenter: {
416
432
  position: 'absolute',
417
433
  left: 12,
418
434
  right: 12,
419
435
  textAlign: 'center'
420
436
  },
421
- hC: {
437
+ hdrClose: {
422
438
  minWidth: 56,
423
439
  alignItems: 'flex-end'
424
440
  },
@@ -426,23 +442,23 @@ const S = StyleSheet.create({
426
442
  justifyContent: 'center',
427
443
  alignItems: 'center'
428
444
  },
429
- kT: {
445
+ kTxt: {
430
446
  includeFontPadding: false,
431
447
  textAlign: 'center'
432
448
  },
433
- dR: {
449
+ dRow: {
434
450
  flexDirection: 'row',
435
451
  flexWrap: 'wrap'
436
452
  },
437
- cR: {
453
+ cRow: {
438
454
  flexDirection: 'row'
439
455
  },
440
- cM: {
456
+ cMat: {
441
457
  flex: 3,
442
458
  flexDirection: 'row',
443
459
  flexWrap: 'wrap'
444
460
  },
445
- cS: {
461
+ cSide: {
446
462
  flex: 1,
447
463
  flexDirection: 'column',
448
464
  justifyContent: 'flex-start'
@@ -4,7 +4,8 @@ const createTokens = foundations => {
4
4
  palette,
5
5
  spacing,
6
6
  radii,
7
- fontSize
7
+ fontSize,
8
+ typography
8
9
  } = foundations;
9
10
  const onPrimary = palette.primary.foreground ?? '#ffffff';
10
11
  return {
@@ -30,8 +31,13 @@ const createTokens = foundations => {
30
31
  keyHeight: 54,
31
32
  closeHeight: 44,
32
33
  fontSize: 28,
34
+ defaultIconFontSize: 30,
35
+ auxFontSize: 18,
33
36
  titleFontSize: fontSize.md
34
37
  },
38
+ typography: {
39
+ fontFamily: typography.fontFamily
40
+ },
35
41
  radii: {
36
42
  key: radii.xs
37
43
  },