@momo-kits/auto-complete 0.0.66-alpha.11 → 0.0.66-alpha.13

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 (2) hide show
  1. package/AutoComplete.js +374 -343
  2. package/package.json +1 -1
package/AutoComplete.js CHANGED
@@ -1,392 +1,423 @@
1
1
  /* eslint-disable no-extra-boolean-cast */
2
2
  /* eslint-disable no-param-reassign */
3
- import React, {Component} from 'react';
3
+ import React, { Component } from 'react';
4
4
  import {
5
- findNodeHandle,
6
- StyleSheet,
7
- UIManager,
8
- View,
9
- Platform,
5
+ findNodeHandle,
6
+ StyleSheet,
7
+ UIManager,
8
+ View,
9
+ Platform,
10
10
  } from 'react-native';
11
- import {debounce, get} from 'lodash';
11
+ import { debounce, get } from 'lodash';
12
12
  import PropTypes from 'prop-types';
13
13
  import {
14
- ValueUtil,
15
- NumberUtils,
16
- Colors,
17
- Text,
18
- RNGestureHandler,
14
+ ValueUtil,
15
+ NumberUtils,
16
+ Colors,
17
+ Text,
18
+ RNGestureHandler,
19
19
  } from '@momo-kits/core';
20
20
 
21
- const {TouchableOpacity} = RNGestureHandler;
21
+ const { TouchableOpacity } = RNGestureHandler;
22
22
  export default class AutoComplete extends Component {
23
- constructor(props) {
24
- super(props);
25
- this.hashmapRefs = {};
26
- this.hashmapPosition = {};
27
- this.hashmapInputValue = {};
28
- this.selectedItem = null;
29
- this.childrenWithProps = null;
30
- }
23
+ constructor(props) {
24
+ super(props);
25
+ this.hashmapRefs = {};
26
+ this.hashmapPosition = {};
27
+ this.hashmapInputValue = {};
28
+ this.selectedItem = null;
29
+ this.childrenWithProps = null;
30
+ }
31
31
 
32
- /**
33
- * func measure all component have keyAutoComplete to get it's position
34
- */
35
- measure() {
36
- try {
37
- Object.keys(this.hashmapRefs)?.forEach(key => {
38
- const node = findNodeHandle(this.hashmapRefs[key]);
39
- if (node) {
40
- if (Platform.OS === 'android') {
41
- UIManager.measureLayoutRelativeToParent(
42
- node,
43
- e => {
44
- console.error(e);
45
- },
46
- (x, y, width, height) => {
47
- this.hashmapPosition[key] = {
48
- x,
49
- y: y + height,
50
- width,
51
- };
52
- },
53
- );
54
- } else {
55
- UIManager.measure(node, (x, y, width, height) => {
56
- this.hashmapPosition[key] = {
57
- x,
58
- y: y + height,
59
- width,
60
- };
61
- });
62
- }
32
+ /**
33
+ * func measure all component have keyAutoComplete to get it's position
34
+ */
35
+ measure() {
36
+ try {
37
+ Object.keys(this.hashmapRefs)
38
+ ?.forEach((key) => {
39
+ const node = findNodeHandle(this.hashmapRefs[key]);
40
+ if (node) {
41
+ if (Platform.OS === 'android') {
42
+ UIManager.measureLayoutRelativeToParent(
43
+ node,
44
+ (e) => {
45
+ console.error(e);
46
+ },
47
+ (x, y, width, height) => {
48
+ this.hashmapPosition[key] = {
49
+ x,
50
+ y: y + height,
51
+ width,
52
+ };
53
+ },
54
+ );
55
+ } else {
56
+ UIManager.measure(node, (x, y, width, height) => {
57
+ this.hashmapPosition[key] = {
58
+ x,
59
+ y: y + height,
60
+ width,
61
+ };
62
+ });
63
+ }
64
+ }
65
+ });
66
+ } catch (e) {
67
+ console.log(`try catch :: ${e}`);
63
68
  }
64
- });
65
- } catch (e) {
66
- console.log(`try catch :: ${e}`);
67
69
  }
68
- }
69
70
 
70
- componentDidMount() {
71
- // setTimeout to fix async
72
- setTimeout(() => {
73
- this.measure();
74
- }, 500);
75
- }
71
+ componentDidMount() {
72
+ // setTimeout to fix async
73
+ setTimeout(() => {
74
+ this.measure();
75
+ }, 500);
76
+ }
76
77
 
77
- getValueByKey = (key, value) => {
78
- const splitKey = key.split('-');
79
- return splitKey.length > 1
80
- ? splitKey.reduce(
81
- (result, item, index) =>
82
- (result =
83
- result +
84
- value[item] +
85
- (index === splitKey.length - 1 ? '' : !!value[item] ? ' ' : '')),
86
- '',
87
- )
88
- : key === 'phone'
89
- ? NumberUtils.formatPhoneNumberVN(value[key])
90
- : value[key];
91
- };
78
+ getValueByKey = (key, value) => {
79
+ const splitKey = key.split('-');
80
+ return splitKey.length > 1
81
+ ? splitKey.reduce(
82
+ (result, item, index) =>
83
+ (result =
84
+ result +
85
+ value[item] +
86
+ (index === splitKey.length - 1
87
+ ? ''
88
+ : !!value[item]
89
+ ? ' '
90
+ : '')),
91
+ '',
92
+ )
93
+ : key === 'phone'
94
+ ? NumberUtils.formatPhoneNumberVN(value[key])
95
+ : value[key];
96
+ };
92
97
 
93
- /**
94
- * loop all child components
95
- * @param {'Children'} components ;
96
- */
97
- cloneChildren(components) {
98
- if (components) {
99
- return React.Children.map(components, child => {
100
- if (!child?.props) return child;
101
- if (
102
- child?.props?.children &&
103
- React.Children.count(child?.props?.children) > 0 &&
104
- child.type.name !== Text
105
- ) {
106
- // component have children -> clone it and all it's children
107
- return React.cloneElement(child, {
108
- children: this.cloneChildren(child.props.children),
109
- });
110
- }
98
+ /**
99
+ * loop all child components
100
+ * @param {'Children'} components ;
101
+ */
102
+ cloneChildren(components) {
103
+ if (components) {
104
+ return React.Children.map(components, (child) => {
105
+ if (!child?.props) return child;
106
+ if (
107
+ child?.props?.children &&
108
+ React.Children.count(child?.props?.children) > 0 &&
109
+ child.type.name !== Text
110
+ ) {
111
+ // component have children -> clone it and all it's children
112
+ return React.cloneElement(child, {
113
+ children: this.cloneChildren(child.props.children),
114
+ });
115
+ }
111
116
 
112
- const {onChangeText, keyAutoComplete, onFocus, onEndEditing} =
113
- child.props;
114
- if (keyAutoComplete) {
115
- // Update props when component have keyAutoComplete
116
- if (this.selectedItem) {
117
- this.hashmapInputValue[keyAutoComplete] = this.getValueByKey(
118
- keyAutoComplete,
119
- this.selectedItem,
120
- ); // this.selectedItem[keyAutoComplete];
121
- return React.cloneElement(child, {
122
- ref: view => (this.hashmapRefs[keyAutoComplete] = view),
123
- onChangeText: text =>
124
- this.changeTextHandle(child, text, onChangeText),
125
- onFocus: e => this.focusHandle(e, child, onFocus),
126
- // value: this.getValueByKey(keyAutoComplete, this.selectedItem),
127
- onEndEditing: e => this.endFocusHandle(e, onEndEditing),
117
+ const {
118
+ onChangeText,
119
+ keyAutoComplete,
120
+ onFocus,
121
+ onEndEditing
122
+ } =
123
+ child.props;
124
+ if (keyAutoComplete) {
125
+ // Update props when component have keyAutoComplete
126
+ if (this.selectedItem) {
127
+ this.hashmapInputValue[keyAutoComplete] =
128
+ this.getValueByKey(
129
+ keyAutoComplete,
130
+ this.selectedItem,
131
+ ); // this.selectedItem[keyAutoComplete];
132
+ return React.cloneElement(child, {
133
+ ref: (view) =>
134
+ (this.hashmapRefs[keyAutoComplete] = view),
135
+ onChangeText: (text) =>
136
+ this.changeTextHandle(
137
+ child,
138
+ text,
139
+ onChangeText,
140
+ ),
141
+ onFocus: (e) => this.focusHandle(e, child, onFocus),
142
+ // value: this.getValueByKey(keyAutoComplete, this.selectedItem),
143
+ onEndEditing: (e) =>
144
+ this.endFocusHandle(e, onEndEditing),
145
+ });
146
+ }
147
+ return React.cloneElement(child, {
148
+ ref: (view) =>
149
+ (this.hashmapRefs[keyAutoComplete] = view),
150
+ onChangeText: (text) =>
151
+ this.changeTextHandle(child, text, onChangeText),
152
+ onFocus: (e) => this.focusHandle(e, child, onFocus),
153
+ onEndEditing: (e) =>
154
+ this.endFocusHandle(e, onEndEditing),
155
+ });
156
+ }
157
+ return child;
128
158
  });
129
- }
130
- return React.cloneElement(child, {
131
- ref: view => (this.hashmapRefs[keyAutoComplete] = view),
132
- onChangeText: text =>
133
- this.changeTextHandle(child, text, onChangeText),
134
- onFocus: e => this.focusHandle(e, child, onFocus),
135
- onEndEditing: e => this.endFocusHandle(e, onEndEditing),
136
- });
137
159
  }
138
- return child;
139
- });
140
- }
141
-
142
- return components;
143
- }
144
160
 
145
- render() {
146
- const {style = {}} = this.props;
147
- const suggest = get(this.state, 'suggest', {});
148
- const childrenWithProps = this.cloneChildren(
149
- get(this.props, 'children', null),
150
- );
151
- return (
152
- <View style={[{zIndex: 1}, style]}>
153
- {childrenWithProps}
154
- {this.renderSuggest(suggest)}
155
- </View>
156
- );
157
- }
158
-
159
- querySearch = (child, text) => {
160
- const keyAutoComplete = get(child.props, 'keyAutoComplete', '');
161
- const isShowAutoComplete = get(child.props, 'isShowAutoComplete', true);
162
- const {data} = this.props;
163
- const dataOutput =
164
- data && data.length > 0 && this.filter(data, keyAutoComplete, text);
165
- if (this.hashmapRefs[keyAutoComplete]) {
166
- this.setState({
167
- suggest: {
168
- data: dataOutput,
169
- position: this.hashmapPosition[keyAutoComplete],
170
- isShowAutoComplete,
171
- },
172
- });
161
+ return components;
173
162
  }
174
- };
175
163
 
176
- changeTextHandle = (child, text, onChangeText) => {
177
- this.querySearch(child, text);
178
- if (onChangeText && typeof onChangeText === 'function') {
179
- onChangeText(text);
180
- }
181
- };
182
-
183
- focusHandle = (e, child, onFocus) => {
184
- let text = '';
185
- if (child && typeof child.getText === 'function') {
186
- text = child.getText();
164
+ render() {
165
+ const { style = {} } = this.props;
166
+ const suggest = get(this.state, 'suggest', {});
167
+ const childrenWithProps = this.cloneChildren(
168
+ get(this.props, 'children', null),
169
+ );
170
+ return (
171
+ <View style={[{ zIndex: 1 }, style]}>
172
+ {childrenWithProps}
173
+ {this.renderSuggest(suggest)}
174
+ </View>
175
+ );
187
176
  }
188
177
 
189
- this.querySearch(child, text);
178
+ querySearch = (child, text) => {
179
+ const keyAutoComplete = get(child.props, 'keyAutoComplete', '');
180
+ const isShowAutoComplete = get(child.props, 'isShowAutoComplete', true);
181
+ const { data } = this.props;
182
+ const dataOutput =
183
+ data && data.length > 0 && this.filter(data, keyAutoComplete, text);
184
+ if (this.hashmapRefs[keyAutoComplete]) {
185
+ this.setState({
186
+ suggest: {
187
+ data: dataOutput,
188
+ position: this.hashmapPosition[keyAutoComplete],
189
+ isShowAutoComplete,
190
+ },
191
+ });
192
+ }
193
+ };
190
194
 
191
- if (onFocus && typeof onFocus === 'function') {
192
- onFocus(e);
193
- }
194
- };
195
+ changeTextHandle = (child, text, onChangeText) => {
196
+ this.querySearch(child, text);
197
+ if (onChangeText && typeof onChangeText === 'function') {
198
+ onChangeText(text);
199
+ }
200
+ };
195
201
 
196
- endFocusHandle = (e, onEndEditing) => {
197
- if (this.isShowingSuggest()) {
198
- this.hideSuggest();
199
- }
200
- if (onEndEditing && typeof onEndEditing === 'function') {
201
- onEndEditing(e);
202
- }
203
- };
202
+ focusHandle = (e, child, onFocus) => {
203
+ let text = '';
204
+ if (child && typeof child.getText === 'function') {
205
+ text = child.getText();
206
+ }
204
207
 
205
- filter = (data, key, query) => {
206
- if (!data || !key) {
207
- return null;
208
- }
209
- if (query === '') {
210
- return data;
211
- }
208
+ this.querySearch(child, text);
212
209
 
213
- return data.filter(item => {
214
- const valueStr = item ? this.getValueByKey(key, item) : '';
215
- const valueStrFormated = ValueUtil.removeAlias(valueStr)
216
- .toLowerCase()
217
- .trim()
218
- .replace(/\s/g, '');
219
- const queryFormated = ValueUtil.removeAlias(query)
220
- .toLowerCase()
221
- .trim()
222
- .replace(/\s/g, '');
223
- return valueStrFormated.indexOf(queryFormated) !== -1;
224
- });
225
- };
210
+ if (onFocus && typeof onFocus === 'function') {
211
+ onFocus(e);
212
+ }
213
+ };
226
214
 
227
- renderSuggest(suggest) {
228
- const {numSuggest} = this.props;
229
- if (
230
- suggest &&
231
- suggest.data &&
232
- suggest.data.length > 0 &&
233
- suggest.isShowAutoComplete
234
- ) {
235
- const {x = 0, y = 0, width = 0} = suggest.position || {};
236
- const sliceData = suggest.data.slice(0, numSuggest);
215
+ endFocusHandle = (e, onEndEditing) => {
216
+ if (this.isShowingSuggest()) {
217
+ this.hideSuggest();
218
+ }
219
+ if (onEndEditing && typeof onEndEditing === 'function') {
220
+ onEndEditing(e);
221
+ }
222
+ };
237
223
 
238
- return (
239
- <View
240
- style={[
241
- styles.containerSuggest,
242
- {
243
- left: x,
244
- top: y,
245
- width,
246
- },
247
- ]}>
248
- {sliceData.map((item, index) => (
249
- <View key={index.toString()}>
250
- {this.renderItem({
251
- item,
252
- index,
253
- })}
254
- {index !== sliceData.length - 1 && this.renderSeparator()}
255
- </View>
256
- ))}
257
- </View>
258
- );
259
- }
260
- return null;
261
- }
224
+ filter = (data, key, query) => {
225
+ if (!data || !key) {
226
+ return null;
227
+ }
228
+ if (query === '') {
229
+ return data;
230
+ }
262
231
 
263
- renderItem = ({item, index}) => {
264
- const {renderSuggestItem} = this.props;
265
- return (
266
- <TouchableOpacity onPress={() => this.onPressItemSuggest(item)}>
267
- {renderSuggestItem && typeof renderSuggestItem === 'function'
268
- ? renderSuggestItem({
269
- item,
270
- index,
271
- })
272
- : this.renderSuggestItemDefault({
273
- item,
274
- index,
275
- })}
276
- </TouchableOpacity>
277
- );
278
- };
232
+ return data.filter((item) => {
233
+ const valueStr = item ? this.getValueByKey(key, item) : '';
234
+ const valueStrFormated = ValueUtil.removeAlias(valueStr)
235
+ .toLowerCase()
236
+ .trim()
237
+ .replace(/\s/g, '');
238
+ const queryFormated = ValueUtil.removeAlias(query)
239
+ .toLowerCase()
240
+ .trim()
241
+ .replace(/\s/g, '');
242
+ return valueStrFormated.indexOf(queryFormated) !== -1;
243
+ });
244
+ };
279
245
 
280
- renderSeparator = () => <View style={styles.separator} />;
246
+ renderSuggest(suggest) {
247
+ const { numSuggest } = this.props;
248
+ if (
249
+ suggest &&
250
+ suggest.data &&
251
+ suggest.data.length > 0 &&
252
+ suggest.isShowAutoComplete
253
+ ) {
254
+ const {
255
+ x = 0,
256
+ y = 0,
257
+ width = 0
258
+ } = suggest.position || {};
259
+ const sliceData = suggest.data.slice(0, numSuggest);
281
260
 
282
- renderSuggestItemDefault = ({item}) => {
283
- const {title, value} = item;
284
- return (
285
- <View style={[styles.viewSuggest]}>
286
- <Text.Title>{title}</Text.Title>
287
- <Text.Title>{value}</Text.Title>
288
- </View>
289
- );
290
- };
261
+ return (
262
+ <View
263
+ style={[
264
+ styles.containerSuggest,
265
+ {
266
+ left: x,
267
+ top: y,
268
+ width,
269
+ },
270
+ ]}>
271
+ {sliceData.map((item, index) => (
272
+ <View key={index.toString()}>
273
+ {this.renderItem({
274
+ item,
275
+ index
276
+ })}
277
+ {index !== sliceData.length - 1 &&
278
+ this.renderSeparator()}
279
+ </View>
280
+ ))}
281
+ </View>
282
+ );
283
+ }
284
+ return null;
285
+ }
291
286
 
292
- onPressItemSuggest = item => {
293
- this.selectedItem = item;
294
- // Loop hashRef to update value of child
295
- Object.keys(this.hashmapRefs).forEach(key => {
296
- if (
297
- this.hashmapRefs?.[key]?.setText &&
298
- typeof this.hashmapRefs?.[key]?.setText === 'function'
299
- ) {
300
- this.hashmapRefs[key]?.setText(
301
- this.getValueByKey(key, this.selectedItem),
287
+ renderItem = ({
288
+ item,
289
+ index
290
+ }) => {
291
+ const { renderSuggestItem } = this.props;
292
+ return (
293
+ <TouchableOpacity onPress={() => this.onPressItemSuggest(item, index)}>
294
+ {renderSuggestItem && typeof renderSuggestItem === 'function'
295
+ ? renderSuggestItem({
296
+ item,
297
+ index
298
+ })
299
+ : this.renderSuggestItemDefault({
300
+ item,
301
+ index
302
+ })}
303
+ </TouchableOpacity>
302
304
  );
303
- }
304
- if (
305
- this.hashmapRefs?.[key]?.setValue &&
306
- typeof this.hashmapRefs?.[key]?.setValue === 'function'
307
- ) {
308
- this.hashmapRefs?.[key]?.setValue(
309
- this.getValueByKey(key, this.selectedItem),
305
+ };
306
+
307
+ renderSeparator = () => <View style={styles.separator}/>;
308
+
309
+ renderSuggestItemDefault = ({ item }) => {
310
+ const {
311
+ title,
312
+ value
313
+ } = item;
314
+ return (
315
+ <View style={[styles.viewSuggest]}>
316
+ <Text.Title>{title}</Text.Title>
317
+ <Text.Title>{value}</Text.Title>
318
+ </View>
310
319
  );
311
- }
312
- });
320
+ };
313
321
 
314
- const {onSelected} = this.props;
315
- this.setState(
316
- {
317
- suggest: {},
318
- },
319
- () => {
320
- if (onSelected && typeof onSelected === 'function') {
321
- onSelected(item);
322
- }
323
- this.selectedItem = null;
324
- },
325
- );
326
- };
322
+ onPressItemSuggest = (item) => {
323
+ this.selectedItem = item;
324
+ // Loop hashRef to update value of child
325
+ Object.keys(this.hashmapRefs)
326
+ .forEach((key) => {
327
+ if (
328
+ this.hashmapRefs[key].setText &&
329
+ typeof this.hashmapRefs[key].setText === 'function'
330
+ ) {
331
+ this.hashmapRefs[key].setText(
332
+ this.getValueByKey(key, this.selectedItem),
333
+ );
334
+ }
335
+ if (
336
+ this.hashmapRefs[key].setValue &&
337
+ typeof this.hashmapRefs[key].setValue === 'function'
338
+ ) {
339
+ this.hashmapRefs[key].setValue(
340
+ this.getValueByKey(key, this.selectedItem),
341
+ );
342
+ }
343
+ });
327
344
 
328
- isShowingSuggest = () => {
329
- const {suggest} = this.state;
330
- return suggest && suggest.data && suggest.data.length > 0;
331
- };
345
+ const { onSelected } = this.props;
346
+ this.setState(
347
+ {
348
+ suggest: {},
349
+ },
350
+ () => {
351
+ if (onSelected && typeof onSelected === 'function') {
352
+ onSelected(item);
353
+ }
354
+ this.selectedItem = null;
355
+ },
356
+ );
357
+ };
332
358
 
333
- hideSuggest = () => {
334
- this.setState(
335
- {
336
- suggest: {},
337
- },
338
- () => {
339
- this.selectedItem = null;
340
- },
341
- );
342
- };
359
+ isShowingSuggest = () => {
360
+ const { suggest } = this.state;
361
+ return suggest && suggest.data && suggest.data.length > 0;
362
+ };
363
+
364
+ hideSuggest = () => {
365
+ this.setState(
366
+ {
367
+ suggest: {},
368
+ },
369
+ () => {
370
+ this.selectedItem = null;
371
+ },
372
+ );
373
+ };
343
374
  }
344
375
 
345
376
  const styles = StyleSheet.create({
346
- viewSuggest: {
347
- flexDirection: 'row',
348
- justifyContent: 'space-between',
349
- alignItems: 'center',
350
- paddingVertical: 5,
351
- },
352
- containerSuggest: {
353
- backgroundColor: 'white',
354
- paddingVertical: 10,
355
- paddingHorizontal: 12,
356
- position: 'absolute',
357
- maxHeight: 240,
358
- borderColor: '#DADADA',
359
- borderRadius: 4,
360
- borderWidth: 1,
361
- shadowColor: '#000000',
362
- shadowOffset: {
363
- width: 0,
364
- height: 1,
377
+ viewSuggest: {
378
+ flexDirection: 'row',
379
+ justifyContent: 'space-between',
380
+ alignItems: 'center',
381
+ paddingVertical: 5,
382
+ },
383
+ containerSuggest: {
384
+ backgroundColor: 'white',
385
+ paddingVertical: 10,
386
+ paddingHorizontal: 12,
387
+ position: 'absolute',
388
+ maxHeight: 240,
389
+ borderColor: '#DADADA',
390
+ borderRadius: 4,
391
+ borderWidth: 1,
392
+ shadowColor: '#000000',
393
+ shadowOffset: {
394
+ width: 0,
395
+ height: 1,
396
+ },
397
+ shadowRadius: 1,
398
+ elevation: 2,
399
+ shadowOpacity: 0.5,
400
+ },
401
+ separator: {
402
+ height: 1,
403
+ width: '100%',
404
+ backgroundColor: Colors.placeholder,
405
+ marginVertical: 10,
365
406
  },
366
- shadowRadius: 1,
367
- elevation: 2,
368
- shadowOpacity: 0.5,
369
- },
370
- separator: {
371
- height: 1,
372
- width: '100%',
373
- backgroundColor: Colors.placeholder,
374
- marginVertical: 10,
375
- },
376
407
  });
377
408
 
378
409
  AutoComplete.propTypes = {
379
- style: PropTypes.oneOfType([
380
- PropTypes.array,
381
- PropTypes.object,
382
- PropTypes.number,
383
- ]),
384
- data: PropTypes.arrayOf(PropTypes.object).isRequired,
385
- renderSuggestItem: PropTypes.func,
386
- onSelected: PropTypes.func.isRequired,
387
- numSuggest: PropTypes.number,
410
+ style: PropTypes.oneOfType([
411
+ PropTypes.array,
412
+ PropTypes.object,
413
+ PropTypes.number,
414
+ ]),
415
+ data: PropTypes.arrayOf(PropTypes.object).isRequired,
416
+ renderSuggestItem: PropTypes.func,
417
+ onSelected: PropTypes.func.isRequired,
418
+ numSuggest: PropTypes.number,
388
419
  };
389
420
 
390
421
  AutoComplete.defaultProps = {
391
- numSuggest: 2,
422
+ numSuggest: 2,
392
423
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/auto-complete",
3
- "version": "0.0.66-alpha.11",
3
+ "version": "0.0.66-alpha.13",
4
4
  "private": false,
5
5
  "main": "index.js",
6
6
  "dependencies": {},