@spscommerce/ds-react 5.0.0 → 5.1.0

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.
package/lib/index.es.js CHANGED
@@ -1013,7 +1013,8 @@ const propTypes$1H = __spreadProps(__spreadValues(__spreadValues(__spreadValues(
1013
1013
  selectedOption: propTypes$1L.exports.any,
1014
1014
  specialAction: fun(),
1015
1015
  ignoreWidthStyles: propTypes$1L.exports.bool,
1016
- loading: propTypes$1L.exports.bool
1016
+ loading: propTypes$1L.exports.bool,
1017
+ filterByTextAndCaptionKey: propTypes$1L.exports.bool
1017
1018
  });
1018
1019
  async function updateOptions(props2, searchState, searchStatePatch, setOptionList, setAnyOptionHasIcon, promiseRef) {
1019
1020
  const options = typeof props2.options === "function" ? props2.options(searchState.value) : props2.options || [];
@@ -1036,7 +1037,13 @@ async function updateOptions(props2, searchState, searchStatePatch, setOptionLis
1036
1037
  }
1037
1038
  if (searchState.value) {
1038
1039
  searchStatePatch({ replacementPattern: new RegExp(searchState.value, "ig") });
1039
- newOpts = newOpts.filter((o) => new RegExp(searchState.value, "i").test(o.text));
1040
+ newOpts = newOpts.filter((o) => {
1041
+ const regEx = new RegExp(searchState.value, "i");
1042
+ if (props2.filterByTextAndCaptionKey) {
1043
+ return regEx.test(o.text) || regEx.test(o.caption);
1044
+ }
1045
+ return regEx.test(o.text);
1046
+ });
1040
1047
  } else {
1041
1048
  searchStatePatch({ replacementPattern: null });
1042
1049
  }
@@ -1303,7 +1310,8 @@ const SpsOptionList = React.forwardRef((props2, ref2) => {
1303
1310
  selectedOption,
1304
1311
  specialAction,
1305
1312
  unsafelyReplaceClassName,
1306
- loading
1313
+ loading,
1314
+ filterByTextAndCaptionKey
1307
1315
  } = _a, rest = __objRest(_a, [
1308
1316
  "captionKey",
1309
1317
  "comparisonKey",
@@ -1336,7 +1344,8 @@ const SpsOptionList = React.forwardRef((props2, ref2) => {
1336
1344
  "selectedOption",
1337
1345
  "specialAction",
1338
1346
  "unsafelyReplaceClassName",
1339
- "loading"
1347
+ "loading",
1348
+ "filterByTextAndCaptionKey"
1340
1349
  ]);
1341
1350
  const specialActionOption = React.useMemo(() => specialAction ? new SpsOptionListOption(specialAction, {
1342
1351
  textKey: "label",
@@ -1585,7 +1594,11 @@ const SpsOptionList = React.forwardRef((props2, ref2) => {
1585
1594
  }
1586
1595
  }), option.caption && /* @__PURE__ */ React.createElement("div", {
1587
1596
  className: "sps-option-list__option-caption"
1588
- }, option.caption));
1597
+ }, /* @__PURE__ */ React.createElement("span", {
1598
+ dangerouslySetInnerHTML: {
1599
+ __html: option.caption.replace(searchState.replacementPattern, "<u>$&</u>")
1600
+ }
1601
+ })));
1589
1602
  })), specialActionOption && specialAction.label && /* @__PURE__ */ React.createElement("a", {
1590
1603
  className: clsx("sps-option-list__option", "sps-option-list__special-action", highlightedOptionIndex === optionList.length && "sps-option-list__option--highlighted"),
1591
1604
  href: specialActionOption.href,
@@ -29367,7 +29380,8 @@ const propsDoc$N = {
29367
29380
  value: "any",
29368
29381
  zeroState: "string",
29369
29382
  autoFixWidth: "boolean",
29370
- loading: "boolean"
29383
+ loading: "boolean",
29384
+ filterByTextAndCaptionKey: "boolean"
29371
29385
  };
29372
29386
  const propTypes$P = __spreadProps(__spreadValues({}, spsGlobalPropTypes), {
29373
29387
  action: fun(),
@@ -29392,7 +29406,8 @@ const propTypes$P = __spreadProps(__spreadValues({}, spsGlobalPropTypes), {
29392
29406
  value: propTypes$1L.exports.any,
29393
29407
  zeroState: propTypes$1L.exports.string,
29394
29408
  autoFixWidth: propTypes$1L.exports.bool,
29395
- loading: propTypes$1L.exports.bool
29409
+ loading: propTypes$1L.exports.bool,
29410
+ filterByTextAndCaptionKey: propTypes$1L.exports.bool
29396
29411
  });
29397
29412
  const SpsSelect = React.forwardRef((props2, ref2) => {
29398
29413
  const _a = props2, {
@@ -29417,7 +29432,8 @@ const SpsSelect = React.forwardRef((props2, ref2) => {
29417
29432
  unsafelyReplaceClassName,
29418
29433
  value: valueProp,
29419
29434
  zeroState,
29420
- loading
29435
+ loading,
29436
+ filterByTextAndCaptionKey
29421
29437
  } = _a, rest = __objRest(_a, [
29422
29438
  "action",
29423
29439
  "autoFixWidth",
@@ -29440,7 +29456,8 @@ const SpsSelect = React.forwardRef((props2, ref2) => {
29440
29456
  "unsafelyReplaceClassName",
29441
29457
  "value",
29442
29458
  "zeroState",
29443
- "loading"
29459
+ "loading",
29460
+ "filterByTextAndCaptionKey"
29444
29461
  ]);
29445
29462
  const meta = formMeta || formControl2;
29446
29463
  const { wrapperId, controlId } = useFormControlId(id2, meta);
@@ -29598,6 +29615,7 @@ const SpsSelect = React.forwardRef((props2, ref2) => {
29598
29615
  specialAction: action,
29599
29616
  tall: tallOptionList,
29600
29617
  textKey,
29618
+ filterByTextAndCaptionKey,
29601
29619
  optionRole: "option",
29602
29620
  valueKey,
29603
29621
  onOptionListChanged: handleOptionListChanged,
@@ -52,6 +52,7 @@ export declare const propTypes: {
52
52
  specialAction: PropTypes.Requireable<SpsActionMethod>;
53
53
  ignoreWidthStyles: PropTypes.Requireable<boolean>;
54
54
  loading: PropTypes.Requireable<boolean>;
55
+ filterByTextAndCaptionKey: PropTypes.Requireable<boolean>;
55
56
  hideInlineSearch: PropTypes.Requireable<boolean>;
56
57
  onSearchChange: PropTypes.Requireable<ChangeEventHandler<Element>>;
57
58
  search: PropTypes.Requireable<string>;
@@ -24,13 +24,14 @@ declare const propTypes: {
24
24
  zeroState: PropTypes.Requireable<string>;
25
25
  autoFixWidth: PropTypes.Requireable<boolean>;
26
26
  loading: PropTypes.Requireable<boolean>;
27
+ filterByTextAndCaptionKey: PropTypes.Requireable<boolean>;
27
28
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
28
29
  className: PropTypes.Requireable<string>;
29
30
  "data-testid": PropTypes.Requireable<string>;
30
31
  unsafelyReplaceClassName: PropTypes.Requireable<string>;
31
32
  };
32
33
  export declare type SpsSelectProps = PropTypes.InferTS<typeof propTypes, HTMLDivElement>;
33
- export declare const SpsSelect: React.ForwardRefExoticComponent<Pick<SpsSelectProps, "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "cite" | "classID" | "cols" | "colSpan" | "content" | "controls" | "coords" | "crossOrigin" | "data" | "dateTime" | "default" | "defer" | "disabled" | "download" | "encType" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "height" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "label" | "list" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "multiple" | "muted" | "name" | "nonce" | "noValidate" | "open" | "optimum" | "pattern" | "placeholder" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "size" | "sizes" | "span" | "src" | "srcDoc" | "srcLang" | "srcSet" | "start" | "step" | "summary" | "target" | "type" | "useMap" | "value" | "width" | "wmode" | "wrap" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key" | "data-testid" | "unsafelyReplaceClassName" | "formMeta" | "formControl" | "loading" | "searchDebounce" | "searchPlaceholder" | "captionKey" | "comparisonKey" | "options" | "textKey" | "valueKey" | "zeroState" | "tallOptionList" | "notClearable" | "autoFixWidth"> & React.RefAttributes<{
34
+ export declare const SpsSelect: React.ForwardRefExoticComponent<Pick<SpsSelectProps, "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "cite" | "classID" | "cols" | "colSpan" | "content" | "controls" | "coords" | "crossOrigin" | "data" | "dateTime" | "default" | "defer" | "disabled" | "download" | "encType" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "height" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "label" | "list" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "multiple" | "muted" | "name" | "nonce" | "noValidate" | "open" | "optimum" | "pattern" | "placeholder" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "size" | "sizes" | "span" | "src" | "srcDoc" | "srcLang" | "srcSet" | "start" | "step" | "summary" | "target" | "type" | "useMap" | "value" | "width" | "wmode" | "wrap" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key" | "data-testid" | "unsafelyReplaceClassName" | "formMeta" | "formControl" | "loading" | "filterByTextAndCaptionKey" | "searchDebounce" | "searchPlaceholder" | "captionKey" | "comparisonKey" | "options" | "textKey" | "valueKey" | "zeroState" | "tallOptionList" | "notClearable" | "autoFixWidth"> & React.RefAttributes<{
34
35
  focus: () => void;
35
36
  }>>;
36
37
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spscommerce/ds-react",
3
3
  "description": "SPS Design System React components",
4
- "version": "5.0.0",
4
+ "version": "5.1.0",
5
5
  "author": "SPS Commerce",
6
6
  "license": "UNLICENSED",
7
7
  "repository": "https://github.com/spscommerce/design-system/tree/main/packages/@spscommerce/ds-react",
@@ -28,10 +28,10 @@
28
28
  },
29
29
  "peerDependencies": {
30
30
  "@react-stately/collections": "^3.3.3",
31
- "@spscommerce/ds-colors": "5.0.0",
32
- "@spscommerce/ds-shared": "5.0.0",
33
- "@spscommerce/positioning": "5.0.0",
34
- "@spscommerce/utils": "5.0.0",
31
+ "@spscommerce/ds-colors": "5.1.0",
32
+ "@spscommerce/ds-shared": "5.1.0",
33
+ "@spscommerce/positioning": "5.1.0",
34
+ "@spscommerce/utils": "5.1.0",
35
35
  "moment": "^2.25.3",
36
36
  "moment-timezone": "^0.5.28",
37
37
  "react": "^16.9.0",
@@ -39,10 +39,10 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@react-stately/collections": "^3.3.3",
42
- "@spscommerce/ds-colors": "5.0.0",
43
- "@spscommerce/ds-shared": "5.0.0",
44
- "@spscommerce/positioning": "5.0.0",
45
- "@spscommerce/utils": "5.0.0",
42
+ "@spscommerce/ds-colors": "5.1.0",
43
+ "@spscommerce/ds-shared": "5.1.0",
44
+ "@spscommerce/positioning": "5.1.0",
45
+ "@spscommerce/utils": "5.1.0",
46
46
  "@testing-library/jest-dom": "^4.2.4",
47
47
  "@testing-library/react": "^9.3.2",
48
48
  "@types/prop-types": "^15.7.1",