react-native-ui-lib 7.39.0-snapshot.6532 → 7.39.0-snapshot.6539

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 (144) hide show
  1. package/package.json +1 -5
  2. package/scripts/docs/buildDocsCommon.js +10 -36
  3. package/src/assets/{internal/icons → icons}/index.js +3 -15
  4. package/src/assets/images/index.js +5 -0
  5. package/src/assets/index.js +5 -2
  6. package/src/commons/Constants.d.ts +0 -1
  7. package/src/commons/Constants.js +2 -4
  8. package/src/components/card/index.js +1 -1
  9. package/src/components/checkbox/index.js +1 -1
  10. package/src/components/chip/index.js +1 -1
  11. package/src/components/chipsInput/index.js +2 -2
  12. package/src/components/colorPicker/ColorPickerDialogHeader.js +2 -2
  13. package/src/components/colorPicker/ColorPickerPreview.js +2 -2
  14. package/src/components/colorPicker/index.js +1 -1
  15. package/src/components/colorSwatch/index.js +3 -2
  16. package/src/components/dateTimePicker/index.js +2 -2
  17. package/src/components/hint/index.js +3 -2
  18. package/src/components/image/index.js +1 -1
  19. package/src/components/modal/TopBar.js +1 -1
  20. package/src/components/modal/api/modalTopBar.api.json +1 -1
  21. package/src/components/overlay/index.js +6 -4
  22. package/src/components/picker/PickerItem.js +1 -1
  23. package/src/components/picker/PickerItemsList.js +8 -2
  24. package/src/components/picker/PickerSelectionStatusToolbar.d.ts +8 -0
  25. package/src/components/picker/PickerSelectionStatusToolbar.js +63 -0
  26. package/src/components/picker/helpers/useFieldType.js +2 -2
  27. package/src/components/picker/helpers/usePickerSelection.d.ts +4 -1
  28. package/src/components/picker/helpers/usePickerSelection.js +13 -3
  29. package/src/components/picker/index.d.ts +3 -2
  30. package/src/components/picker/index.js +15 -7
  31. package/src/components/picker/types.d.ts +60 -1
  32. package/src/components/picker/types.js +5 -0
  33. package/src/components/scrollBar/index.js +2 -2
  34. package/src/components/test.api.json +32 -0
  35. package/src/components/textField/ClearButton.js +1 -1
  36. package/src/components/timeline/timeline.api.json +106 -57
  37. package/src/components/toast/index.js +1 -1
  38. package/src/components/wizard/WizardStates.js +4 -3
  39. package/src/incubator/dialog/useDialogContent.js +1 -1
  40. package/src/incubator/slider/Thumb.js +1 -8
  41. package/src/incubator/toast/toast.api.json +1 -1
  42. package/src/index.d.ts +1 -1
  43. package/src/index.js +7 -0
  44. package/src/assets/index.web.d.ts +0 -3
  45. package/src/assets/index.web.js +0 -9
  46. package/src/assets/internal/icons/index.web.d.ts +0 -86
  47. package/src/assets/internal/icons/index.web.js +0 -110
  48. package/src/assets/internal/images/index.js +0 -26
  49. package/src/assets/internal/images/index.web.d.ts +0 -58
  50. package/src/assets/internal/images/index.web.js +0 -74
  51. package/src/assets/internal/index.d.ts +0 -4
  52. package/src/assets/internal/index.js +0 -8
  53. package/src/assets/internal/index.web.d.ts +0 -4
  54. package/src/assets/internal/index.web.js +0 -8
  55. /package/src/assets/{internal/icons/checkSmall.png → icons/check-small.png} +0 -0
  56. /package/src/assets/{internal/icons/checkSmall@1.5x.png → icons/check-small@1.5x.png} +0 -0
  57. /package/src/assets/{internal/icons/checkSmall@2x.png → icons/check-small@2x.png} +0 -0
  58. /package/src/assets/{internal/icons/checkSmall@3x.png → icons/check-small@3x.png} +0 -0
  59. /package/src/assets/{internal/icons/checkSmall@4x.png → icons/check-small@4x.png} +0 -0
  60. /package/src/assets/{internal/icons → icons}/check.png +0 -0
  61. /package/src/assets/{internal/icons → icons}/check@1.5x.png +0 -0
  62. /package/src/assets/{internal/icons → icons}/check@2x.png +0 -0
  63. /package/src/assets/{internal/icons → icons}/check@3x.png +0 -0
  64. /package/src/assets/{internal/icons → icons}/check@4x.png +0 -0
  65. /package/src/assets/{internal/icons → icons}/minusSmall.png +0 -0
  66. /package/src/assets/{internal/icons → icons}/minusSmall@1.5x.png +0 -0
  67. /package/src/assets/{internal/icons → icons}/minusSmall@2x.png +0 -0
  68. /package/src/assets/{internal/icons → icons}/minusSmall@3x.png +0 -0
  69. /package/src/assets/{internal/icons → icons}/minusSmall@4x.png +0 -0
  70. /package/src/assets/{internal/icons → icons}/plusSmall.png +0 -0
  71. /package/src/assets/{internal/icons → icons}/plusSmall@1.5x.png +0 -0
  72. /package/src/assets/{internal/icons → icons}/plusSmall@2x.png +0 -0
  73. /package/src/assets/{internal/icons → icons}/plusSmall@3x.png +0 -0
  74. /package/src/assets/{internal/icons → icons}/plusSmall@4x.png +0 -0
  75. /package/src/assets/{internal/icons → icons}/search.png +0 -0
  76. /package/src/assets/{internal/icons → icons}/search@1.5x.png +0 -0
  77. /package/src/assets/{internal/icons → icons}/search@2x.png +0 -0
  78. /package/src/assets/{internal/icons → icons}/search@3x.png +0 -0
  79. /package/src/assets/{internal/icons → icons}/search@4x.png +0 -0
  80. /package/src/assets/{internal/icons → icons}/x.png +0 -0
  81. /package/src/assets/{internal/icons → icons}/x@2x.png +0 -0
  82. /package/src/assets/{internal/icons → icons}/x@3x.png +0 -0
  83. /package/src/assets/{internal/icons → icons}/xFlat.png +0 -0
  84. /package/src/assets/{internal/icons → icons}/xFlat@1.5x.png +0 -0
  85. /package/src/assets/{internal/icons → icons}/xFlat@2x.png +0 -0
  86. /package/src/assets/{internal/icons → icons}/xFlat@3x.png +0 -0
  87. /package/src/assets/{internal/icons → icons}/xFlat@4x.png +0 -0
  88. /package/src/assets/{internal/icons → icons}/xMedium.png +0 -0
  89. /package/src/assets/{internal/icons → icons}/xMedium@1.5x.png +0 -0
  90. /package/src/assets/{internal/icons → icons}/xMedium@2x.png +0 -0
  91. /package/src/assets/{internal/icons → icons}/xMedium@3x.png +0 -0
  92. /package/src/assets/{internal/icons → icons}/xMedium@4x.png +0 -0
  93. /package/src/assets/{internal/images → images}/gradient.png +0 -0
  94. /package/src/{assets/internal/icons → components/chipsInput/assets}/xSmall.png +0 -0
  95. /package/src/{assets/internal/icons → components/chipsInput/assets}/xSmall@1.5x.png +0 -0
  96. /package/src/{assets/internal/icons → components/chipsInput/assets}/xSmall@2x.png +0 -0
  97. /package/src/{assets/internal/icons → components/chipsInput/assets}/xSmall@3x.png +0 -0
  98. /package/src/{assets/internal/icons → components/chipsInput/assets}/xSmall@4x.png +0 -0
  99. /package/src/{assets/internal/images/transparentSwatch.png → components/colorSwatch/assets/transparentSwatch/TransparentSwatch.png} +0 -0
  100. /package/src/{assets/internal/images/transparentSwatch@1.5x.png → components/colorSwatch/assets/transparentSwatch/TransparentSwatch@1.5x.png} +0 -0
  101. /package/src/{assets/internal/images/transparentSwatch@2x.png → components/colorSwatch/assets/transparentSwatch/TransparentSwatch@2x.png} +0 -0
  102. /package/src/{assets/internal/images/transparentSwatch@3x.png → components/colorSwatch/assets/transparentSwatch/TransparentSwatch@3x.png} +0 -0
  103. /package/src/{assets/internal/images/transparentSwatch@4x.png → components/colorSwatch/assets/transparentSwatch/TransparentSwatch@4x.png} +0 -0
  104. /package/src/{assets/internal/images → components/hint/assets}/hintTipMiddle.png +0 -0
  105. /package/src/{assets/internal/images → components/hint/assets}/hintTipMiddle@1.5x.png +0 -0
  106. /package/src/{assets/internal/images → components/hint/assets}/hintTipMiddle@2x.png +0 -0
  107. /package/src/{assets/internal/images → components/hint/assets}/hintTipMiddle@3x.png +0 -0
  108. /package/src/{assets/internal/images → components/hint/assets}/hintTipMiddle@4x.png +0 -0
  109. /package/src/{assets/internal/images → components/hint/assets}/hintTipSide.png +0 -0
  110. /package/src/{assets/internal/images → components/hint/assets}/hintTipSide@1.5x.png +0 -0
  111. /package/src/{assets/internal/images → components/hint/assets}/hintTipSide@2x.png +0 -0
  112. /package/src/{assets/internal/images → components/hint/assets}/hintTipSide@3x.png +0 -0
  113. /package/src/{assets/internal/images → components/hint/assets}/hintTipSide@4x.png +0 -0
  114. /package/src/{assets/internal/images/gradientOverlayHigh.png → components/overlay/assets/GradientOverlayHigh.png} +0 -0
  115. /package/src/{assets/internal/images/gradientOverlayHigh@1.5x.png → components/overlay/assets/GradientOverlayHigh@1.5x.png} +0 -0
  116. /package/src/{assets/internal/images/gradientOverlayHigh@2x.png → components/overlay/assets/GradientOverlayHigh@2x.png} +0 -0
  117. /package/src/{assets/internal/images/gradientOverlayHigh@3x.png → components/overlay/assets/GradientOverlayHigh@3x.png} +0 -0
  118. /package/src/{assets/internal/images/gradientOverlayHigh@4x.png → components/overlay/assets/GradientOverlayHigh@4x.png} +0 -0
  119. /package/src/{assets/internal/images/gradientOverlayLow.png → components/overlay/assets/GradientOverlayLow.png} +0 -0
  120. /package/src/{assets/internal/images/gradientOverlayLow@1.5x.png → components/overlay/assets/GradientOverlayLow@1.5x.png} +0 -0
  121. /package/src/{assets/internal/images/gradientOverlayLow@2x.png → components/overlay/assets/GradientOverlayLow@2x.png} +0 -0
  122. /package/src/{assets/internal/images/gradientOverlayLow@3x.png → components/overlay/assets/GradientOverlayLow@3x.png} +0 -0
  123. /package/src/{assets/internal/images/gradientOverlayLow@4x.png → components/overlay/assets/GradientOverlayLow@4x.png} +0 -0
  124. /package/src/{assets/internal/images/gradientOverlayMedium.png → components/overlay/assets/GradientOverlayMedium.png} +0 -0
  125. /package/src/{assets/internal/images/gradientOverlayMedium@1.5x.png → components/overlay/assets/GradientOverlayMedium@1.5x.png} +0 -0
  126. /package/src/{assets/internal/images/gradientOverlayMedium@2x.png → components/overlay/assets/GradientOverlayMedium@2x.png} +0 -0
  127. /package/src/{assets/internal/images/gradientOverlayMedium@3x.png → components/overlay/assets/GradientOverlayMedium@3x.png} +0 -0
  128. /package/src/{assets/internal/images/gradientOverlayMedium@4x.png → components/overlay/assets/GradientOverlayMedium@4x.png} +0 -0
  129. /package/src/{assets/internal/icons/chevronDown.png → components/picker/assets/dropdown.png} +0 -0
  130. /package/src/{assets/internal/icons/chevronDown@1.5x.png → components/picker/assets/dropdown@1.5x.png} +0 -0
  131. /package/src/{assets/internal/icons/chevronDown@2x.png → components/picker/assets/dropdown@2x.png} +0 -0
  132. /package/src/{assets/internal/icons/chevronDown@3x.png → components/picker/assets/dropdown@3x.png} +0 -0
  133. /package/src/{assets/internal/icons/chevronDown@4x.png → components/picker/assets/dropdown@4x.png} +0 -0
  134. /package/src/{assets/internal/images → components/scrollBar/assets}/gradientOverlay.png +0 -0
  135. /package/src/{assets/internal/icons → components/wizard/assets}/checkMarkSmall.png +0 -0
  136. /package/src/{assets/internal/icons → components/wizard/assets}/checkMarkSmall@1.5x.png +0 -0
  137. /package/src/{assets/internal/icons → components/wizard/assets}/checkMarkSmall@2x.png +0 -0
  138. /package/src/{assets/internal/icons → components/wizard/assets}/checkMarkSmall@3x.png +0 -0
  139. /package/src/{assets/internal/icons → components/wizard/assets}/checkMarkSmall@4x.png +0 -0
  140. /package/src/{assets/internal/icons → components/wizard/assets}/exclamationSmall.png +0 -0
  141. /package/src/{assets/internal/icons → components/wizard/assets}/exclamationSmall@1.5x.png +0 -0
  142. /package/src/{assets/internal/icons → components/wizard/assets}/exclamationSmall@2x.png +0 -0
  143. /package/src/{assets/internal/icons → components/wizard/assets}/exclamationSmall@3x.png +0 -0
  144. /package/src/{assets/internal/icons → components/wizard/assets}/exclamationSmall@4x.png +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-ui-lib",
3
- "version": "7.39.0-snapshot.6532",
3
+ "version": "7.39.0-snapshot.6539",
4
4
  "main": "src/index.js",
5
5
  "types": "src/index.d.ts",
6
6
  "author": "Ethan Sharabi <ethan.shar@gmail.com>",
@@ -14,7 +14,6 @@
14
14
  "url": "https://github.com/wix/react-native-ui-lib"
15
15
  },
16
16
  "scripts": {
17
- "update-web-assets": "node scripts/assets/extract-dimensions.ts",
18
17
  "start": "watchman watch-del-all && react-native start",
19
18
  "start:web": "npm --prefix webDemo run start",
20
19
  "ios": "react-native run-ios",
@@ -84,7 +83,6 @@
84
83
  "@types/hoist-non-react-statics": "^3.3.1",
85
84
  "@types/jest": "^29.2.1",
86
85
  "@types/lodash": "^4.0.0",
87
- "@types/mime-types": "^2.1.4",
88
86
  "@types/prop-types": "^15.5.3",
89
87
  "@types/react": "18.3.7",
90
88
  "@types/react-native": "0.73.0",
@@ -102,11 +100,9 @@
102
100
  "eslint-plugin-react": "^7.24.0",
103
101
  "eslint-plugin-react-hooks": "^4.0.4",
104
102
  "eslint-plugin-react-native": "^4.0.0",
105
- "image-size": "^2.0.1",
106
103
  "jest": "^29.6.3",
107
104
  "light-date": "^1.2.0",
108
105
  "metro-react-native-babel-preset": "0.73.10",
109
- "mime-types": "^2.1.35",
110
106
  "moment": "^2.24.0",
111
107
  "object-hash": "^3.0.0",
112
108
  "postcss": "^8.4.21",
@@ -7,7 +7,6 @@ const fs = require('fs');
7
7
 
8
8
  const COMPONENTS_DOCS_DIR = './docs/components';
9
9
  const SERVICES_DOCS_DIR = './docs/services';
10
- const FOUNDATION_DOCS_DIR = './docs/foundation';
11
10
 
12
11
  const VALID_COMPONENTS_CATEGORIES = [
13
12
  'foundation',
@@ -31,9 +30,6 @@ const VALID_COMPONENTS_CATEGORIES = [
31
30
 
32
31
  function buildDocs(apiFolders, componentsPreProcess) {
33
32
  let components = readComponentsFromApiFiles(apiFolders);
34
-
35
- logStatistics(components);
36
-
37
33
  components = componentsPreProcess?.(components) ?? components;
38
34
  resetDocsDir();
39
35
  processComponents(components);
@@ -96,22 +92,14 @@ function processComponents(components) {
96
92
  content += `${buildOldDocs(component)}\n`;
97
93
  }
98
94
 
95
+
99
96
  let dirPath;
100
- switch (component.category) {
101
- case 'services': {
102
- dirPath = `${SERVICES_DOCS_DIR}`;
103
- break;
104
- }
105
- case 'foundation': {
106
- dirPath = `${FOUNDATION_DOCS_DIR}`;
107
- break;
108
- }
109
- default: {
110
- const componentParentDir =
111
- componentParentName || isParentComponent ? `/${componentParentName || componentName}` : '';
112
- dirPath = `${COMPONENTS_DOCS_DIR}/${component.category}${componentParentDir}`;
113
- break;
114
- }
97
+ if (component.category === 'services') {
98
+ dirPath = `${SERVICES_DOCS_DIR}`;
99
+ } else {
100
+ const componentParentDir =
101
+ componentParentName || isParentComponent ? `/${componentParentName || componentName}` : '';
102
+ dirPath = `${COMPONENTS_DOCS_DIR}/${component.category}${componentParentDir}`;
115
103
  }
116
104
 
117
105
  if (!fs.existsSync(dirPath)) {
@@ -137,22 +125,6 @@ function generateExtendsLink(extendsLink) {
137
125
  return extendsText;
138
126
  }
139
127
 
140
- function logStatistics(components) {
141
- const groupedComponents = _.countBy(components, 'name');
142
- const duplicateComponents = Object.entries(groupedComponents)
143
- .filter(([_, count]) => count > 1)
144
- .map(([name, count]) => `${name} (${count} times)`);
145
-
146
- if (duplicateComponents.length > 0) {
147
- console.log('Components with multiple occurrences:\n-', duplicateComponents.join('\n- '));
148
- }
149
-
150
- const componentsWithoutSnippet = components.filter(c => !c.snippet).map(c => c.name);
151
- if (componentsWithoutSnippet.length > 0) {
152
- console.log('Components missing snippet:\n-', componentsWithoutSnippet.join('\n- '));
153
- }
154
- }
155
-
156
128
  function buildOldDocs(component) {
157
129
  let content = '';
158
130
  content += `import UILivePreview from '@site/src/components/UILivePreview';\n\n`;
@@ -212,10 +184,12 @@ function buildOldDocs(component) {
212
184
  /* Snippet */
213
185
  if (component.snippet) {
214
186
  content += `### Usage\n`;
215
- content += `<UILivePreview componentName={"${component.name}"} code={\`${component.snippet
187
+ content += `<UILivePreview code={\`${component.snippet
216
188
  ?.map(item => _.replace(item, new RegExp(/\$[1-9]/, 'g'), ''))
217
189
  .join('\n')
218
190
  .toString()}\`}/>\n\n`;
191
+ } else {
192
+ console.warn(`${component.name} does not have a snippet`);
219
193
  }
220
194
 
221
195
  /* Props */
@@ -2,17 +2,8 @@ export const icons = {
2
2
  get check() {
3
3
  return require('./check.png');
4
4
  },
5
- get checkMarkSmall() {
6
- return require('./checkMarkSmall.png');
7
- },
8
5
  get checkSmall() {
9
- return require('./checkSmall.png');
10
- },
11
- get chevronDown() {
12
- return require('./chevronDown.png');
13
- },
14
- get exclamationSmall() {
15
- return require('./exclamationSmall.png');
6
+ return require('./check-small.png');
16
7
  },
17
8
  get minusSmall() {
18
9
  return require('./minusSmall.png');
@@ -26,13 +17,10 @@ export const icons = {
26
17
  get x() {
27
18
  return require('./x.png');
28
19
  },
29
- get xFlat() {
30
- return require('./xFlat.png');
31
- },
32
20
  get xMedium() {
33
21
  return require('./xMedium.png');
34
22
  },
35
- get xSmall() {
36
- return require('./xSmall.png');
23
+ get xFlat() {
24
+ return require('./xFlat.png');
37
25
  }
38
26
  };
@@ -0,0 +1,5 @@
1
+ export const images = {
2
+ get gradient() {
3
+ return require('./gradient.png');
4
+ }
5
+ };
@@ -1,9 +1,12 @@
1
1
  import { Assets } from "./Assets";
2
2
  export default new Assets().loadAssetsGroup('', {
3
+ get icons() {
4
+ return require("./icons").icons;
5
+ },
3
6
  get emojis() {
4
7
  return require("./emojis").emojis;
5
8
  },
6
- get internal() {
7
- return require("./internal").internal;
9
+ get images() {
10
+ return require("./images").images;
8
11
  }
9
12
  });
@@ -47,7 +47,6 @@ declare const constants: {
47
47
  };
48
48
  backspaceKey: string;
49
49
  enterKey: string;
50
- getFontScale: () => number;
51
50
  };
52
51
  export default constants;
53
52
  export declare const _reset: () => void;
@@ -1,4 +1,4 @@
1
- import { Platform, Dimensions, NativeModules, I18nManager, AccessibilityInfo, StatusBar, PixelRatio } from 'react-native';
1
+ import { Platform, Dimensions, NativeModules, I18nManager, AccessibilityInfo, StatusBar } from 'react-native';
2
2
  export let orientations = /*#__PURE__*/function (orientations) {
3
3
  orientations["PORTRAIT"] = "portrait";
4
4
  orientations["LANDSCAPE"] = "landscape";
@@ -166,9 +166,7 @@ const constants = {
166
166
  },
167
167
  /* Keyboard */
168
168
  backspaceKey: 'Backspace',
169
- enterKey: 'Enter',
170
- /* Font scale */
171
- getFontScale: PixelRatio.getFontScale
169
+ enterKey: 'Enter'
172
170
  };
173
171
  setStatusBarHeight();
174
172
  Dimensions.addEventListener('change', updateConstants);
@@ -22,7 +22,7 @@ const DEFAULT_SELECTION_PROPS = {
22
22
  borderWidth: 2,
23
23
  color: Colors.$backgroundPrimaryHeavy,
24
24
  indicatorSize: 20,
25
- icon: Assets.internal.icons.checkSmall,
25
+ icon: Assets.icons.checkSmall,
26
26
  iconColor: Colors.$iconDefaultLight,
27
27
  hideIndicator: false
28
28
  };
@@ -167,7 +167,7 @@ class Checkbox extends Component {
167
167
  }]}>
168
168
  <AnimatedIcon style={[this.styles.selectedIcon, {
169
169
  transform: this.animationStyle.transform
170
- }]} source={indeterminate ? Assets.internal.icons.minusSmall : selectedIcon || Assets.internal.icons.checkSmall} testID={`${testID}.selected`} tintColor={this.getTintColor()} />
170
+ }]} source={indeterminate ? Assets.icons.minusSmall : selectedIcon || Assets.icons.checkSmall} testID={`${testID}.selected`} tintColor={this.getTintColor()} />
171
171
  </Animated.View>}
172
172
  </TouchableOpacity>
173
173
  );
@@ -27,7 +27,7 @@ const Chip = ({
27
27
  containerStyle,
28
28
  onDismiss,
29
29
  dismissColor = Colors.$iconDefault,
30
- dismissIcon = Assets.internal.icons.x,
30
+ dismissIcon = Assets.icons.x,
31
31
  dismissIconStyle,
32
32
  dismissContainerStyle,
33
33
  iconProps,
@@ -5,8 +5,8 @@ import { StyleSheet } from 'react-native';
5
5
  import { Constants } from "../../commons/new";
6
6
  import { useCombinedRefs, useDidUpdate } from "../../hooks";
7
7
  import TextField from "../textField";
8
- import Assets from "../../assets";
9
8
  import Chip from "../chip";
9
+ const removeIcon = require("./assets/xSmall.png");
10
10
  export let ChipsInputChangeReason = /*#__PURE__*/function (ChipsInputChangeReason) {
11
11
  ChipsInputChangeReason["Added"] = "added";
12
12
  ChipsInputChangeReason["Removed"] = "removed";
@@ -85,7 +85,7 @@ const ChipsInput = forwardRef((props, refToForward) => {
85
85
  return <Chip key={index} customValue={index}
86
86
  // resetSpacings
87
87
  // paddingH-s2
88
- marginR-s2 marginB-s2 dismissIcon={Assets.internal.icons.xSmall} recorderTag={'mask'} {...defaultChipProps} {...chip.invalid ? invalidChipProps : undefined} {...chip} onPress={onChipPress} onDismiss={isMarkedForRemoval ? removeMarkedChip : undefined} />;
88
+ marginR-s2 marginB-s2 dismissIcon={removeIcon} recorderTag={'mask'} {...defaultChipProps} {...chip.invalid ? invalidChipProps : undefined} {...chip} onPress={onChipPress} onDismiss={isMarkedForRemoval ? removeMarkedChip : undefined} />;
89
89
  };
90
90
  const chipList = useMemo(() => {
91
91
  return <>
@@ -16,10 +16,10 @@ const ColorPickerDialogHeader = props => {
16
16
  onDonePressed
17
17
  } = props;
18
18
  return <View row spread bg-$backgroundDefault paddingH-20 style={styles.header}>
19
- <Button link iconSource={Assets.internal.icons.x} iconStyle={{
19
+ <Button link iconSource={Assets.icons.x} iconStyle={{
20
20
  tintColor: Colors.$iconDefault
21
21
  }} onPress={onDismiss} accessibilityLabel={_get(accessibilityLabels, 'dismissButton')} testID={`${testID}.dialog.cancel`} />
22
- <Button color={doneButtonColor} disabled={!valid} link iconSource={Assets.internal.icons.check} onPress={onDonePressed} accessibilityLabel={_get(accessibilityLabels, 'doneButton')} testID={`${testID}.dialog.done`} />
22
+ <Button color={doneButtonColor} disabled={!valid} link iconSource={Assets.icons.check} onPress={onDonePressed} accessibilityLabel={_get(accessibilityLabels, 'doneButton')} testID={`${testID}.dialog.done`} />
23
23
  </View>;
24
24
  };
25
25
  export default ColorPickerDialogHeader;
@@ -1,5 +1,5 @@
1
1
  import React, { useRef } from 'react';
2
- import { StyleSheet, TextInput, I18nManager } from 'react-native';
2
+ import { StyleSheet, TextInput, PixelRatio, I18nManager } from 'react-native';
3
3
  import { Colors, Typography } from "../../style";
4
4
  import { BORDER_RADIUS, getHexString, getTextColor } from "./ColorPickerPresenter";
5
5
  import View from "../view";
@@ -19,7 +19,7 @@ const ColorPickerPreview = props => {
19
19
  const textInput = useRef(null);
20
20
  const hex = getHexString(color);
21
21
  const textColor = getTextColor(hex);
22
- const fontScale = Constants.getFontScale();
22
+ const fontScale = PixelRatio.getFontScale();
23
23
  const value = Colors.isTransparent(text) ? '000000' : text;
24
24
  return <View style={[styles.preview, {
25
25
  backgroundColor: hex
@@ -42,7 +42,7 @@ const ColorPicker = props => {
42
42
  <View style={[styles.buttonContainer, {
43
43
  backgroundColor
44
44
  }]}>
45
- <Button color={Colors.$textDefault} outlineColor={Colors.$textDefault} style={styles.button} round outline iconSource={Assets.internal.icons.plusSmall} onPress={showDialog} testID={`${testID}-button`} accessibilityLabel={accessibilityLabels?.addButton} />
45
+ <Button color={Colors.$textDefault} outlineColor={Colors.$textDefault} style={styles.button} round outline iconSource={Assets.icons.plusSmall} onPress={showDialog} testID={`${testID}-button`} accessibilityLabel={accessibilityLabels?.addButton} />
46
46
  </View>
47
47
  <ColorPickerDialog {...props} key={initialColor} visible={show} onDismiss={hideDialog} accessibilityLabels={{
48
48
  dismissButton: accessibilityLabels?.dismissButton,
@@ -6,6 +6,7 @@ import { asBaseComponent, Constants } from "../../commons/new";
6
6
  import View from "../view";
7
7
  import TouchableOpacity from "../touchableOpacity";
8
8
  import Image from "../image";
9
+ const transparentImage = require("./assets/transparentSwatch/TransparentSwatch.png");
9
10
  const DEFAULT_SIZE = Constants.isTablet ? 44 : 36;
10
11
  export const SWATCH_MARGIN = 12;
11
12
  export const SWATCH_SIZE = DEFAULT_SIZE;
@@ -140,10 +141,10 @@ class ColorSwatch extends PureComponent {
140
141
  height: size,
141
142
  borderRadius: size / 2
142
143
  }, style]} onLayout={this.onLayout} {...this.getAccessibilityInfo()}>
143
- {Colors.isTransparent(this.color) && <Image source={Assets.internal.icons.transparentSwatch} style={this.styles.transparentImage} resizeMode={'cover'} />}
144
+ {Colors.isTransparent(this.color) && <Image source={transparentImage} style={this.styles.transparentImage} resizeMode={'cover'} />}
144
145
  {unavailable ? <View style={[this.styles.unavailable, {
145
146
  backgroundColor: tintColor
146
- }]} /> : <Animated.Image source={Assets.internal.icons.check} style={{
147
+ }]} /> : <Animated.Image source={Assets.icons.check} style={{
147
148
  tintColor,
148
149
  opacity: isSelected,
149
150
  transform: [{
@@ -137,10 +137,10 @@ const DateTimePicker = forwardRef((props, ref) => {
137
137
  }, [onDonePressed, toggleExpandableOverlay]);
138
138
  const renderHeader = () => {
139
139
  return <View row spread bg-$backgroundDefault backgroundColor={backgroundColor} paddingH-20 style={[styles.header, headerStyle]} testID={`${testID}.header`}>
140
- <Button link iconSource={Assets.internal.icons.x} iconStyle={{
140
+ <Button link iconSource={Assets.icons.x} iconStyle={{
141
141
  tintColor: Colors.$iconDefault
142
142
  }} testID={`${testID}.cancel`} {...cancelButtonProps} onPress={toggleExpandableOverlay} />
143
- <Button link iconSource={Assets.internal.icons.check} testID={`${testID}.done`} {...confirmButtonProps} onPress={onDonePressed} />
143
+ <Button link iconSource={Assets.icons.check} testID={`${testID}.done`} {...confirmButtonProps} onPress={onDonePressed} />
144
144
  </View>;
145
145
  };
146
146
  const renderDateTimePicker = useCallback(() => {
@@ -6,7 +6,6 @@ import View from "../view";
6
6
  import Image from "../image";
7
7
  import Modal from "../modal";
8
8
  import TouchableOpacity from "../touchableOpacity";
9
- import Assets from "../../assets";
10
9
  import { HintPositions, HintProps, TargetAlignments } from "./types";
11
10
  import useHintVisibility from "./hooks/useHintVisibility";
12
11
  import useHintLayout from "./hooks/useHintLayout";
@@ -15,6 +14,8 @@ import useHintPosition from "./hooks/useHintPosition";
15
14
  import HintMockChildren from "./HintMockChildren";
16
15
  import HintAnchor from "./HintAnchor";
17
16
  import HintBubble from "./HintBubble";
17
+ const sideTip = require("./assets/hintTipSide.png");
18
+ const middleTip = require("./assets/hintTipMiddle.png");
18
19
  const DEFAULT_COLOR = Colors.$backgroundPrimaryHeavy;
19
20
  const DEFAULT_HINT_OFFSET = Spacings.s4;
20
21
  const DEFAULT_EDGE_MARGINS = Spacings.s5;
@@ -124,7 +125,7 @@ const Hint = props => {
124
125
  }
125
126
  };
126
127
  const renderHintTip = () => {
127
- const source = useSideTip ? Assets.internal.images.hintTipSide : Assets.internal.images.hintTipMiddle;
128
+ const source = useSideTip ? sideTip : middleTip;
128
129
  const flipVertically = position === HintPositions.TOP;
129
130
  const flipHorizontally = targetAlignmentOnScreen === TargetAlignments.RIGHT;
130
131
  const flipStyle = {
@@ -156,7 +156,7 @@ class Image extends PureComponent {
156
156
  } = modifiers;
157
157
  return (
158
158
  // @ts-ignore
159
- <ImageView style={[Constants.isWeb && source?.dimensions, tintColor && {
159
+ <ImageView style={[tintColor && {
160
160
  tintColor
161
161
  }, shouldFlipRTL && styles.rtlFlipped, width && {
162
162
  width
@@ -21,7 +21,7 @@ class TopBar extends Component {
21
21
  static displayName = 'Modal.TopBar';
22
22
  static defaultProps = {
23
23
  doneLabel: 'Save',
24
- cancelIcon: Assets.internal.icons.x,
24
+ cancelIcon: Assets.icons.x,
25
25
  doneButtonProps: {},
26
26
  cancelButtonProps: {},
27
27
  includeStatusBar: Constants.isIOS
@@ -29,7 +29,7 @@
29
29
  "name": "cancelIcon",
30
30
  "type": "ImageSource",
31
31
  "description": "Cancel action icon",
32
- "default": "Assets.internal.icons.x"
32
+ "default": "Assets.icons.x"
33
33
  },
34
34
  {"name": "onCancel", "type": "(props?: any) => void", "description": "Cancel action callback"},
35
35
  {
@@ -3,7 +3,9 @@ import React, { PureComponent } from 'react';
3
3
  import { StyleSheet, Image } from 'react-native';
4
4
  import { Colors } from "../../style";
5
5
  import View from "../view";
6
- import Assets from "../../assets";
6
+ const gradientImageLow = require("./assets/GradientOverlayLow.png");
7
+ const gradientImageMed = require("./assets/GradientOverlayMedium.png");
8
+ const gradientImageHigh = require("./assets/GradientOverlayHigh.png");
7
9
  const OVERLY_TYPES = {
8
10
  VERTICAL: 'vertical',
9
11
  TOP: 'top',
@@ -75,11 +77,11 @@ class Overlay extends PureComponent {
75
77
  getImageSource = (type, intensity) => {
76
78
  if (type !== OVERLY_TYPES.SOLID) {
77
79
  if (intensity === OverlayIntensityType.MEDIUM) {
78
- return Assets.internal.images.gradientOverlayMedium;
80
+ return gradientImageMed;
79
81
  } else if (intensity === OverlayIntensityType.HIGH) {
80
- return Assets.internal.images.gradientOverlayHigh;
82
+ return gradientImageHigh;
81
83
  } else {
82
- return Assets.internal.images.gradientOverlayLow;
84
+ return gradientImageLow;
83
85
  }
84
86
  }
85
87
  };
@@ -23,7 +23,7 @@ const PickerItem = props => {
23
23
  label,
24
24
  labelStyle,
25
25
  disabled,
26
- selectedIcon = Assets.internal.icons.check,
26
+ selectedIcon = Assets.icons.check,
27
27
  selectedIconColor = Colors.$iconPrimary,
28
28
  onPress,
29
29
  testID
@@ -15,6 +15,7 @@ import { PickerModes } from "./types";
15
15
  import PickerContext from "./PickerContext";
16
16
  import PickerItem from "./PickerItem";
17
17
  import { Constants } from "../../commons/new";
18
+ import PickerSelectionStatusToolbar from "./PickerSelectionStatusToolbar";
18
19
  const keyExtractor = (_item, index) => index.toString();
19
20
  const PickerItemsList = props => {
20
21
  const {
@@ -35,7 +36,8 @@ const PickerItemsList = props => {
35
36
  testID,
36
37
  showLoader,
37
38
  customLoaderElement,
38
- renderCustomTopElement
39
+ renderCustomTopElement,
40
+ selectionStatus
39
41
  } = props;
40
42
  const context = useContext(PickerContext);
41
43
  const [wheelPickerValue, setWheelPickerValue] = useState(context.value ?? items?.[0]?.value);
@@ -45,7 +47,7 @@ const PickerItemsList = props => {
45
47
  return renderCustomSearch(props);
46
48
  }
47
49
  return <View style={styles.searchInputContainer}>
48
- <Icon style={styles.searchIcon} tintColor={Colors.$iconDefault} source={searchStyle.icon || Assets.internal.icons.search} />
50
+ <Icon style={styles.searchIcon} tintColor={Colors.$iconDefault} source={searchStyle.icon || Assets.icons.search} />
49
51
  <TextInput testID={testID}
50
52
  // ref={r => (this.search = r)}
51
53
  style={[styles.searchInput, {
@@ -130,10 +132,14 @@ const PickerItemsList = props => {
130
132
  <ActivityIndicator />
131
133
  </View>;
132
134
  };
135
+ const renderSelectionStatus = useMemo(() => {
136
+ return <PickerSelectionStatusToolbar {...selectionStatus} availableItems={context?.availableItems} value={context?.value} toggleAllItemsSelection={context?.toggleAllItemsSelection} />;
137
+ }, [selectionStatus, context?.value, context?.availableItems, context?.toggleAllItemsSelection]);
133
138
  const renderContent = () => {
134
139
  return useWheelPicker ? renderWheel() : <>
135
140
  {renderSearchInput()}
136
141
  {renderCustomTopElement?.(context.value)}
142
+ {mode === PickerModes.MULTI && selectionStatus && renderSelectionStatus}
137
143
  {renderList()}
138
144
  </>;
139
145
  };
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { PickerProps, PickerContextProps, PickerMultiValue, ButtonSelectionStatus, CheckboxSelectionStatus } from './types';
3
+ export type PickerSelectionStatusToolbarBaseProps = PickerProps['selectionStatus'] & {
4
+ value?: PickerMultiValue;
5
+ availableItems?: PickerMultiValue;
6
+ };
7
+ export type PickerSelectionStatusToolbarProps = (Partial<PickerContextProps> & (ButtonSelectionStatus & PickerSelectionStatusToolbarBaseProps)) | (Partial<PickerContextProps> & (CheckboxSelectionStatus & PickerSelectionStatusToolbarBaseProps));
8
+ export default function PickerSelectionStatusToolbar(props: PickerSelectionStatusToolbarProps): React.JSX.Element;
@@ -0,0 +1,63 @@
1
+ import React, { useCallback } from 'react';
2
+ import Button from "../button";
3
+ import Checkbox from "../checkbox";
4
+ import View from "../view";
5
+ import Text from "../text";
6
+ import { PickerSelectAllType } from "./types";
7
+ export default function PickerSelectionStatusToolbar(props) {
8
+ const {
9
+ containerStyle,
10
+ getLabel,
11
+ availableItems = [],
12
+ selectAllType = 'none',
13
+ showLabel = true,
14
+ toggleAllItemsSelection,
15
+ value = [],
16
+ renderTopCustomElement,
17
+ renderBottomCustomElement
18
+ } = props;
19
+ const isAllSelected = value.length === availableItems.length;
20
+ const checkboxIndeterminate = value.length > 0 && value.length < availableItems.length;
21
+ const label = getLabel?.({
22
+ selectedCount: value.length,
23
+ value,
24
+ isAllSelected
25
+ }) ?? `${value.length} Selected ${isAllSelected ? '(All)' : ''}`;
26
+ let buttonProps;
27
+ let checkboxProps;
28
+ switch (props.selectAllType) {
29
+ case PickerSelectAllType.button:
30
+ buttonProps = props.buttonProps;
31
+ break;
32
+ case PickerSelectAllType.checkbox:
33
+ checkboxProps = props.checkboxProps;
34
+ break;
35
+ }
36
+ const handlePress = useCallback(() => {
37
+ const newSelectionState = !isAllSelected;
38
+ toggleAllItemsSelection?.(newSelectionState);
39
+ buttonProps?.onPress?.(availableItems);
40
+ checkboxProps?.onValueChange?.(newSelectionState);
41
+ }, [isAllSelected, toggleAllItemsSelection, availableItems, buttonProps, checkboxProps]);
42
+ const renderSelectionStatus = () => {
43
+ if (selectAllType === 'button') {
44
+ return <Button label={isAllSelected ? 'Deselect All' : 'Select All'} link {...buttonProps} onPress={handlePress} />;
45
+ } else if (selectAllType === 'checkbox') {
46
+ return <Checkbox {...checkboxProps} value={value.length > 0} indeterminate={checkboxIndeterminate} onValueChange={handlePress} />;
47
+ }
48
+ };
49
+ const renderLabel = () => {
50
+ if (showLabel) {
51
+ return <Text>{label}</Text>;
52
+ }
53
+ return null;
54
+ };
55
+ return <View>
56
+ {renderTopCustomElement?.()}
57
+ <View row spread centerV paddingH-page style={containerStyle}>
58
+ {renderLabel()}
59
+ {renderSelectionStatus()}
60
+ </View>
61
+ {renderBottomCustomElement?.()}
62
+ </View>;
63
+ }
@@ -4,8 +4,8 @@ import { Typography, Colors } from "../../../style";
4
4
  import View from "../../view";
5
5
  import Text from "../../text";
6
6
  import Icon from "../../icon";
7
- import Assets from "../../../assets";
8
7
  import { PickerFieldTypes } from "../types";
8
+ const dropdown = require("../assets/dropdown.png");
9
9
  const useFieldType = props => {
10
10
  const {
11
11
  fieldType,
@@ -30,7 +30,7 @@ const useFieldType = props => {
30
30
  ...Typography.text70,
31
31
  color: Colors.$textNeutral
32
32
  },
33
- trailingAccessory: trailingAccessory ?? <Icon marginL-s1 source={Assets.internal.icons.chevronDown} />
33
+ trailingAccessory: trailingAccessory ?? <Icon marginL-s1 source={dropdown} />
34
34
  };
35
35
  } else if (fieldType === PickerFieldTypes.settings) {
36
36
  return {
@@ -1,6 +1,6 @@
1
1
  import { RefObject } from 'react';
2
2
  import { PickerProps, PickerValue, PickerSingleValue, PickerMultiValue } from '../types';
3
- interface UsePickerSelectionProps extends Pick<PickerProps, 'migrate' | 'value' | 'onChange' | 'getItemValue' | 'topBarProps' | 'mode'> {
3
+ interface UsePickerSelectionProps extends Pick<PickerProps, 'migrate' | 'value' | 'onChange' | 'getItemValue' | 'topBarProps' | 'mode' | 'items'> {
4
4
  pickerExpandableRef: RefObject<any>;
5
5
  setSearchValue: (searchValue: string) => void;
6
6
  }
@@ -9,5 +9,8 @@ declare const usePickerSelection: (props: UsePickerSelectionProps) => {
9
9
  onDoneSelecting: (item: PickerValue) => void;
10
10
  toggleItemSelection: (item: PickerSingleValue) => void;
11
11
  cancelSelect: () => void;
12
+ setMultiFinalValue: import("react").Dispatch<import("react").SetStateAction<PickerMultiValue>>;
13
+ availableItems: PickerMultiValue;
14
+ toggleAllItemsSelection: (selectAll: boolean) => void;
12
15
  };
13
16
  export default usePickerSelection;
@@ -1,6 +1,6 @@
1
1
  import _xor from "lodash/xor";
2
2
  import _xorBy from "lodash/xorBy";
3
- import { useCallback, useState, useEffect } from 'react';
3
+ import { useCallback, useState, useEffect, useMemo } from 'react';
4
4
  import { PickerModes } from "../types";
5
5
  const usePickerSelection = props => {
6
6
  const {
@@ -11,7 +11,8 @@ const usePickerSelection = props => {
11
11
  pickerExpandableRef,
12
12
  getItemValue,
13
13
  setSearchValue,
14
- mode
14
+ mode,
15
+ items
15
16
  } = props;
16
17
  const [multiDraftValue, setMultiDraftValue] = useState(value);
17
18
  const [multiFinalValue, setMultiFinalValue] = useState(value);
@@ -43,11 +44,20 @@ const usePickerSelection = props => {
43
44
  pickerExpandableRef.current?.closeExpandable?.();
44
45
  topBarProps?.onCancel?.();
45
46
  }, [multiFinalValue, topBarProps]);
47
+ const availableItems = useMemo(() => {
48
+ return items?.filter(item => !item.disabled).map(item => item.value) || [];
49
+ }, [items]);
50
+ const toggleAllItemsSelection = useCallback(selectAll => {
51
+ setMultiDraftValue(selectAll ? availableItems : []);
52
+ }, [availableItems]);
46
53
  return {
47
54
  multiDraftValue,
48
55
  onDoneSelecting,
49
56
  toggleItemSelection,
50
- cancelSelect
57
+ cancelSelect,
58
+ setMultiFinalValue,
59
+ availableItems,
60
+ toggleAllItemsSelection
51
61
  };
52
62
  };
53
63
  export default usePickerSelection;
@@ -1,15 +1,16 @@
1
1
  import React from 'react';
2
2
  import PickerItem from './PickerItem';
3
3
  import { extractPickerItems } from './PickerPresenter';
4
- import { PickerProps, PickerItemProps, PickerValue, PickerModes, PickerFieldTypes, PickerSearchStyle, RenderCustomModalProps, PickerItemsListProps, PickerMethods } from './types';
4
+ import { PickerProps, PickerItemProps, PickerValue, PickerModes, PickerFieldTypes, PickerSearchStyle, RenderCustomModalProps, PickerItemsListProps, PickerMethods, PickerSelectAllType } from './types';
5
5
  type PickerStatics = {
6
6
  Item: typeof PickerItem;
7
7
  modes: typeof PickerModes;
8
8
  fieldTypes: typeof PickerFieldTypes;
9
9
  extractPickerItems: typeof extractPickerItems;
10
+ selectAllType: typeof PickerSelectAllType;
10
11
  };
11
12
  declare const Picker: React.ForwardRefExoticComponent<PickerProps & React.RefAttributes<unknown>>;
12
- export { PickerProps, PickerItemProps, PickerValue, PickerModes, PickerFieldTypes, PickerSearchStyle, RenderCustomModalProps, PickerItemsListProps, PickerMethods };
13
+ export { PickerProps, PickerItemProps, PickerValue, PickerModes, PickerFieldTypes, PickerSearchStyle, RenderCustomModalProps, PickerItemsListProps, PickerMethods, PickerSelectAllType };
13
14
  export { Picker };
14
15
  declare const _default: React.ForwardRefExoticComponent<PickerProps & React.RefAttributes<unknown>> & PickerStatics;
15
16
  export default _default;