@transferwise/components 46.162.2 → 46.163.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.
Files changed (92) hide show
  1. package/build/Chips/Chip/Chip.js +11 -4
  2. package/build/Chips/Chip/Chip.js.map +1 -1
  3. package/build/Chips/Chip/Chip.mjs +11 -4
  4. package/build/Chips/Chip/Chip.mjs.map +1 -1
  5. package/build/Typeahead/Typeahead.js +17 -4
  6. package/build/Typeahead/Typeahead.js.map +1 -1
  7. package/build/Typeahead/Typeahead.mjs +17 -4
  8. package/build/Typeahead/Typeahead.mjs.map +1 -1
  9. package/build/Typeahead/TypeaheadInput/TypeaheadInput.js +2 -0
  10. package/build/Typeahead/TypeaheadInput/TypeaheadInput.js.map +1 -1
  11. package/build/Typeahead/TypeaheadInput/TypeaheadInput.mjs +2 -0
  12. package/build/Typeahead/TypeaheadInput/TypeaheadInput.mjs.map +1 -1
  13. package/build/i18n/es.json +1 -0
  14. package/build/i18n/es.json.js +1 -0
  15. package/build/i18n/es.json.js.map +1 -1
  16. package/build/i18n/es.json.mjs +1 -0
  17. package/build/i18n/es.json.mjs.map +1 -1
  18. package/build/i18n/hu.json +1 -0
  19. package/build/i18n/hu.json.js +1 -0
  20. package/build/i18n/hu.json.js.map +1 -1
  21. package/build/i18n/hu.json.mjs +1 -0
  22. package/build/i18n/hu.json.mjs.map +1 -1
  23. package/build/i18n/id.json +1 -0
  24. package/build/i18n/id.json.js +1 -0
  25. package/build/i18n/id.json.js.map +1 -1
  26. package/build/i18n/id.json.mjs +1 -0
  27. package/build/i18n/id.json.mjs.map +1 -1
  28. package/build/i18n/it.json +1 -0
  29. package/build/i18n/it.json.js +1 -0
  30. package/build/i18n/it.json.js.map +1 -1
  31. package/build/i18n/it.json.mjs +1 -0
  32. package/build/i18n/it.json.mjs.map +1 -1
  33. package/build/i18n/ja.json +1 -0
  34. package/build/i18n/ja.json.js +1 -0
  35. package/build/i18n/ja.json.js.map +1 -1
  36. package/build/i18n/ja.json.mjs +1 -0
  37. package/build/i18n/ja.json.mjs.map +1 -1
  38. package/build/i18n/nl.json +1 -0
  39. package/build/i18n/nl.json.js +1 -0
  40. package/build/i18n/nl.json.js.map +1 -1
  41. package/build/i18n/nl.json.mjs +1 -0
  42. package/build/i18n/nl.json.mjs.map +1 -1
  43. package/build/i18n/pl.json +1 -0
  44. package/build/i18n/pl.json.js +1 -0
  45. package/build/i18n/pl.json.js.map +1 -1
  46. package/build/i18n/pl.json.mjs +1 -0
  47. package/build/i18n/pl.json.mjs.map +1 -1
  48. package/build/i18n/ro.json +1 -0
  49. package/build/i18n/ro.json.js +1 -0
  50. package/build/i18n/ro.json.js.map +1 -1
  51. package/build/i18n/ro.json.mjs +1 -0
  52. package/build/i18n/ro.json.mjs.map +1 -1
  53. package/build/i18n/uk.json +1 -0
  54. package/build/i18n/uk.json.js +1 -0
  55. package/build/i18n/uk.json.js.map +1 -1
  56. package/build/i18n/uk.json.mjs +1 -0
  57. package/build/i18n/uk.json.mjs.map +1 -1
  58. package/build/i18n/zh-HK.json +1 -0
  59. package/build/i18n/zh-HK.json.js +1 -0
  60. package/build/i18n/zh-HK.json.js.map +1 -1
  61. package/build/i18n/zh-HK.json.mjs +1 -0
  62. package/build/i18n/zh-HK.json.mjs.map +1 -1
  63. package/build/main.css +3 -0
  64. package/build/styles/Typeahead/Typeahead.css +3 -0
  65. package/build/styles/main.css +3 -0
  66. package/build/types/Chips/Chip/Chip.d.ts +3 -1
  67. package/build/types/Chips/Chip/Chip.d.ts.map +1 -1
  68. package/build/types/Typeahead/Typeahead.d.ts +2 -0
  69. package/build/types/Typeahead/Typeahead.d.ts.map +1 -1
  70. package/build/types/Typeahead/TypeaheadInput/TypeaheadInput.d.ts +1 -1
  71. package/build/types/Typeahead/TypeaheadInput/TypeaheadInput.d.ts.map +1 -1
  72. package/package.json +4 -4
  73. package/src/Chips/Chip/Chip.test.tsx +34 -0
  74. package/src/Chips/Chip/Chip.tsx +11 -3
  75. package/src/Typeahead/Typeahead.css +3 -0
  76. package/src/Typeahead/Typeahead.less +4 -0
  77. package/src/Typeahead/Typeahead.test.tsx +73 -0
  78. package/src/Typeahead/Typeahead.tsx +18 -3
  79. package/src/Typeahead/TypeaheadInput/TypeaheadInput.tsx +6 -1
  80. package/src/Typeahead/_stories/Typeahead.story.tsx +1 -0
  81. package/src/Typeahead/_stories/Typeahead.test.story.tsx +41 -0
  82. package/src/i18n/es.json +1 -0
  83. package/src/i18n/hu.json +1 -0
  84. package/src/i18n/id.json +1 -0
  85. package/src/i18n/it.json +1 -0
  86. package/src/i18n/ja.json +1 -0
  87. package/src/i18n/nl.json +1 -0
  88. package/src/i18n/pl.json +1 -0
  89. package/src/i18n/ro.json +1 -0
  90. package/src/i18n/uk.json +1 -0
  91. package/src/i18n/zh-HK.json +1 -0
  92. package/src/main.css +3 -0
@@ -34,6 +34,7 @@ const Chip = ({
34
34
  onRemove,
35
35
  onClick,
36
36
  onKeyPress,
37
+ disabled = false,
37
38
  className = undefined,
38
39
  'aria-label': ariaLabel,
39
40
  'aria-checked': ariaChecked,
@@ -41,8 +42,10 @@ const Chip = ({
41
42
  closeButton
42
43
  }) => {
43
44
  const isActionable = onClick || onKeyPress;
45
+ const isInteractive = isActionable && !disabled;
44
46
  const defaultRole = isActionable ? 'button' : undefined;
45
- const tabIndex = isActionable ? 0 : -1;
47
+ const chipRole = role ?? defaultRole;
48
+ const tabIndex = isInteractive ? 0 : -1;
46
49
  const closeButtonReference = React.useRef(null);
47
50
  const previousCloseButtonShown = React.useRef(undefined);
48
51
  React.useEffect(() => {
@@ -52,12 +55,15 @@ const Chip = ({
52
55
  previousCloseButtonShown.current = closeButtonReference.current != null;
53
56
  }, [onRemove]);
54
57
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
55
- role: role ?? defaultRole,
58
+ role: chipRole,
56
59
  tabIndex: tabIndex,
57
60
  "aria-label": ariaLabel,
58
61
  "aria-checked": ariaChecked,
59
- className: clsx.clsx('np-chip', 'd-flex', 'align-items-center', 'justify-content-between', onRemove ? 'np-chip--removable' : '', className),
60
- ...(isActionable && {
62
+ "aria-disabled": chipRole && disabled ? true : undefined,
63
+ className: clsx.clsx('np-chip', 'd-flex', 'align-items-center', 'justify-content-between', onRemove ? 'np-chip--removable' : '', {
64
+ disabled
65
+ }, className),
66
+ ...(isInteractive && {
61
67
  onClick,
62
68
  onKeyPress
63
69
  }),
@@ -71,6 +77,7 @@ const Chip = ({
71
77
  "aria-label": closeButton?.['aria-label'],
72
78
  size: "sm",
73
79
  filled: true,
80
+ isDisabled: disabled,
74
81
  onClick: onRemove
75
82
  }) : null]
76
83
  }, value);
@@ -1 +1 @@
1
- {"version":3,"file":"Chip.js","sources":["../../../src/Chips/Chip/Chip.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useEffect, useRef } from 'react';\n\nimport Body from '../../Body';\nimport { AriaLabelProperty, CommonProps, Typography } from '../../common';\nimport { CloseButton } from '../../common/CloseButton/CloseButton';\n\nexport type ChipValue = string | number;\n\nexport type ChipProps<T extends ChipValue = ChipValue> = {\n value?: T;\n label: string;\n onRemove?: () => void;\n onClick?: () => void;\n onKeyPress?: () => void;\n closeButton?: AriaLabelProperty;\n 'aria-checked'?: boolean;\n role?: string;\n} & AriaLabelProperty &\n CommonProps;\n\nconst Chip = <T extends ChipValue = ChipValue>({\n label,\n value,\n onRemove,\n onClick,\n onKeyPress,\n className = undefined,\n 'aria-label': ariaLabel,\n 'aria-checked': ariaChecked,\n role,\n closeButton,\n}: ChipProps<T>) => {\n const isActionable = onClick || onKeyPress;\n const defaultRole = isActionable ? 'button' : undefined;\n const tabIndex = isActionable ? 0 : -1;\n\n const closeButtonReference = useRef<HTMLButtonElement>(null);\n const previousCloseButtonShown = useRef<boolean | undefined>(undefined);\n useEffect(() => {\n if (closeButtonReference.current != null && previousCloseButtonShown.current === false) {\n closeButtonReference.current?.focus();\n }\n previousCloseButtonShown.current = closeButtonReference.current != null;\n }, [onRemove]);\n\n return (\n <div\n key={value}\n role={role ?? defaultRole}\n tabIndex={tabIndex}\n aria-label={ariaLabel}\n aria-checked={ariaChecked}\n className={clsx(\n 'np-chip',\n 'd-flex',\n 'align-items-center',\n 'justify-content-between',\n onRemove ? 'np-chip--removable' : '',\n className,\n )}\n {...(isActionable && { onClick, onKeyPress })}\n >\n <Body aria-hidden={!!onRemove} type={Typography.BODY_DEFAULT_BOLD}>\n {label}\n </Body>\n {onRemove ? (\n <CloseButton\n ref={closeButtonReference}\n className=\"btn-unstyled\"\n aria-label={closeButton?.['aria-label']}\n size=\"sm\"\n filled\n onClick={onRemove}\n />\n ) : null}\n </div>\n );\n};\n\nexport default Chip;\n"],"names":["Chip","label","value","onRemove","onClick","onKeyPress","className","undefined","ariaLabel","ariaChecked","role","closeButton","isActionable","defaultRole","tabIndex","closeButtonReference","useRef","previousCloseButtonShown","useEffect","current","focus","_jsxs","clsx","children","_jsx","Body","type","Typography","BODY_DEFAULT_BOLD","CloseButton","ref","size","filled"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAMA,IAAI,GAAGA,CAAkC;EAC7CC,KAAK;EACLC,KAAK;EACLC,QAAQ;EACRC,OAAO;EACPC,UAAU;AACVC,EAAAA,SAAS,GAAGC,SAAS;AACrB,EAAA,YAAY,EAAEC,SAAS;AACvB,EAAA,cAAc,EAAEC,WAAW;EAC3BC,IAAI;AACJC,EAAAA;AAAW,CACE,KAAI;AACjB,EAAA,MAAMC,YAAY,GAAGR,OAAO,IAAIC,UAAU;AAC1C,EAAA,MAAMQ,WAAW,GAAGD,YAAY,GAAG,QAAQ,GAAGL,SAAS;AACvD,EAAA,MAAMO,QAAQ,GAAGF,YAAY,GAAG,CAAC,GAAG,EAAE;AAEtC,EAAA,MAAMG,oBAAoB,GAAGC,YAAM,CAAoB,IAAI,CAAC;AAC5D,EAAA,MAAMC,wBAAwB,GAAGD,YAAM,CAAsBT,SAAS,CAAC;AACvEW,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIH,oBAAoB,CAACI,OAAO,IAAI,IAAI,IAAIF,wBAAwB,CAACE,OAAO,KAAK,KAAK,EAAE;AACtFJ,MAAAA,oBAAoB,CAACI,OAAO,EAAEC,KAAK,EAAE;AACvC,IAAA;AACAH,IAAAA,wBAAwB,CAACE,OAAO,GAAGJ,oBAAoB,CAACI,OAAO,IAAI,IAAI;AACzE,EAAA,CAAC,EAAE,CAAChB,QAAQ,CAAC,CAAC;AAEd,EAAA,oBACEkB,eAAA,CAAA,KAAA,EAAA;IAEEX,IAAI,EAAEA,IAAI,IAAIG,WAAY;AAC1BC,IAAAA,QAAQ,EAAEA,QAAS;AACnB,IAAA,YAAA,EAAYN,SAAU;AACtB,IAAA,cAAA,EAAcC,WAAY;AAC1BH,IAAAA,SAAS,EAAEgB,SAAI,CACb,SAAS,EACT,QAAQ,EACR,oBAAoB,EACpB,yBAAyB,EACzBnB,QAAQ,GAAG,oBAAoB,GAAG,EAAE,EACpCG,SAAS,CACT;AAAA,IAAA,IACGM,YAAY,IAAI;MAAER,OAAO;AAAEC,MAAAA;KAAY,CAAA;IAAAkB,QAAA,EAAA,cAE5CC,cAAA,CAACC,YAAI,EAAA;MAAC,aAAA,EAAa,CAAC,CAACtB,QAAS;MAACuB,IAAI,EAAEC,qBAAU,CAACC,iBAAkB;AAAAL,MAAAA,QAAA,EAC/DtB;AAAK,KACF,CACN,EAACE,QAAQ,gBACPqB,cAAA,CAACK,uBAAW,EAAA;AACVC,MAAAA,GAAG,EAAEf,oBAAqB;AAC1BT,MAAAA,SAAS,EAAC,cAAc;MACxB,YAAA,EAAYK,WAAW,GAAG,YAAY,CAAE;AACxCoB,MAAAA,IAAI,EAAC,IAAI;MACTC,MAAM,EAAA,IAAA;AACN5B,MAAAA,OAAO,EAAED;KAAS,CAClB,GACA,IAAI;AAAA,GAAA,EA3BHD,KA4BF,CAAC;AAEV;;"}
1
+ {"version":3,"file":"Chip.js","sources":["../../../src/Chips/Chip/Chip.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useEffect, useRef } from 'react';\n\nimport Body from '../../Body';\nimport { AriaLabelProperty, CommonProps, Typography } from '../../common';\nimport { CloseButton } from '../../common/CloseButton/CloseButton';\n\nexport type ChipValue = string | number;\n\nexport type ChipProps<T extends ChipValue = ChipValue> = {\n value?: T;\n label: string;\n onRemove?: () => void;\n onClick?: () => void;\n onKeyPress?: () => void;\n /** @default false */\n disabled?: boolean;\n closeButton?: AriaLabelProperty;\n 'aria-checked'?: boolean;\n role?: string;\n} & AriaLabelProperty &\n CommonProps;\n\nconst Chip = <T extends ChipValue = ChipValue>({\n label,\n value,\n onRemove,\n onClick,\n onKeyPress,\n disabled = false,\n className = undefined,\n 'aria-label': ariaLabel,\n 'aria-checked': ariaChecked,\n role,\n closeButton,\n}: ChipProps<T>) => {\n const isActionable = onClick || onKeyPress;\n const isInteractive = isActionable && !disabled;\n const defaultRole = isActionable ? 'button' : undefined;\n const chipRole = role ?? defaultRole;\n const tabIndex = isInteractive ? 0 : -1;\n\n const closeButtonReference = useRef<HTMLButtonElement>(null);\n const previousCloseButtonShown = useRef<boolean | undefined>(undefined);\n useEffect(() => {\n if (closeButtonReference.current != null && previousCloseButtonShown.current === false) {\n closeButtonReference.current?.focus();\n }\n previousCloseButtonShown.current = closeButtonReference.current != null;\n }, [onRemove]);\n\n return (\n <div\n key={value}\n role={chipRole}\n tabIndex={tabIndex}\n aria-label={ariaLabel}\n aria-checked={ariaChecked}\n aria-disabled={chipRole && disabled ? true : undefined}\n className={clsx(\n 'np-chip',\n 'd-flex',\n 'align-items-center',\n 'justify-content-between',\n onRemove ? 'np-chip--removable' : '',\n { disabled },\n className,\n )}\n {...(isInteractive && { onClick, onKeyPress })}\n >\n <Body aria-hidden={!!onRemove} type={Typography.BODY_DEFAULT_BOLD}>\n {label}\n </Body>\n {onRemove ? (\n <CloseButton\n ref={closeButtonReference}\n className=\"btn-unstyled\"\n aria-label={closeButton?.['aria-label']}\n size=\"sm\"\n filled\n isDisabled={disabled}\n onClick={onRemove}\n />\n ) : null}\n </div>\n );\n};\n\nexport default Chip;\n"],"names":["Chip","label","value","onRemove","onClick","onKeyPress","disabled","className","undefined","ariaLabel","ariaChecked","role","closeButton","isActionable","isInteractive","defaultRole","chipRole","tabIndex","closeButtonReference","useRef","previousCloseButtonShown","useEffect","current","focus","_jsxs","clsx","children","_jsx","Body","type","Typography","BODY_DEFAULT_BOLD","CloseButton","ref","size","filled","isDisabled"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAMA,IAAI,GAAGA,CAAkC;EAC7CC,KAAK;EACLC,KAAK;EACLC,QAAQ;EACRC,OAAO;EACPC,UAAU;AACVC,EAAAA,QAAQ,GAAG,KAAK;AAChBC,EAAAA,SAAS,GAAGC,SAAS;AACrB,EAAA,YAAY,EAAEC,SAAS;AACvB,EAAA,cAAc,EAAEC,WAAW;EAC3BC,IAAI;AACJC,EAAAA;AAAW,CACE,KAAI;AACjB,EAAA,MAAMC,YAAY,GAAGT,OAAO,IAAIC,UAAU;AAC1C,EAAA,MAAMS,aAAa,GAAGD,YAAY,IAAI,CAACP,QAAQ;AAC/C,EAAA,MAAMS,WAAW,GAAGF,YAAY,GAAG,QAAQ,GAAGL,SAAS;AACvD,EAAA,MAAMQ,QAAQ,GAAGL,IAAI,IAAII,WAAW;AACpC,EAAA,MAAME,QAAQ,GAAGH,aAAa,GAAG,CAAC,GAAG,EAAE;AAEvC,EAAA,MAAMI,oBAAoB,GAAGC,YAAM,CAAoB,IAAI,CAAC;AAC5D,EAAA,MAAMC,wBAAwB,GAAGD,YAAM,CAAsBX,SAAS,CAAC;AACvEa,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIH,oBAAoB,CAACI,OAAO,IAAI,IAAI,IAAIF,wBAAwB,CAACE,OAAO,KAAK,KAAK,EAAE;AACtFJ,MAAAA,oBAAoB,CAACI,OAAO,EAAEC,KAAK,EAAE;AACvC,IAAA;AACAH,IAAAA,wBAAwB,CAACE,OAAO,GAAGJ,oBAAoB,CAACI,OAAO,IAAI,IAAI;AACzE,EAAA,CAAC,EAAE,CAACnB,QAAQ,CAAC,CAAC;AAEd,EAAA,oBACEqB,eAAA,CAAA,KAAA,EAAA;AAEEb,IAAAA,IAAI,EAAEK,QAAS;AACfC,IAAAA,QAAQ,EAAEA,QAAS;AACnB,IAAA,YAAA,EAAYR,SAAU;AACtB,IAAA,cAAA,EAAcC,WAAY;AAC1B,IAAA,eAAA,EAAeM,QAAQ,IAAIV,QAAQ,GAAG,IAAI,GAAGE,SAAU;AACvDD,IAAAA,SAAS,EAAEkB,SAAI,CACb,SAAS,EACT,QAAQ,EACR,oBAAoB,EACpB,yBAAyB,EACzBtB,QAAQ,GAAG,oBAAoB,GAAG,EAAE,EACpC;AAAEG,MAAAA;KAAU,EACZC,SAAS,CACT;AAAA,IAAA,IACGO,aAAa,IAAI;MAAEV,OAAO;AAAEC,MAAAA;KAAY,CAAA;IAAAqB,QAAA,EAAA,cAE7CC,cAAA,CAACC,YAAI,EAAA;MAAC,aAAA,EAAa,CAAC,CAACzB,QAAS;MAAC0B,IAAI,EAAEC,qBAAU,CAACC,iBAAkB;AAAAL,MAAAA,QAAA,EAC/DzB;AAAK,KACF,CACN,EAACE,QAAQ,gBACPwB,cAAA,CAACK,uBAAW,EAAA;AACVC,MAAAA,GAAG,EAAEf,oBAAqB;AAC1BX,MAAAA,SAAS,EAAC,cAAc;MACxB,YAAA,EAAYK,WAAW,GAAG,YAAY,CAAE;AACxCsB,MAAAA,IAAI,EAAC,IAAI;MACTC,MAAM,EAAA,IAAA;AACNC,MAAAA,UAAU,EAAE9B,QAAS;AACrBF,MAAAA,OAAO,EAAED;KAAS,CAClB,GACA,IAAI;AAAA,GAAA,EA9BHD,KA+BF,CAAC;AAEV;;"}
@@ -30,6 +30,7 @@ const Chip = ({
30
30
  onRemove,
31
31
  onClick,
32
32
  onKeyPress,
33
+ disabled = false,
33
34
  className = undefined,
34
35
  'aria-label': ariaLabel,
35
36
  'aria-checked': ariaChecked,
@@ -37,8 +38,10 @@ const Chip = ({
37
38
  closeButton
38
39
  }) => {
39
40
  const isActionable = onClick || onKeyPress;
41
+ const isInteractive = isActionable && !disabled;
40
42
  const defaultRole = isActionable ? 'button' : undefined;
41
- const tabIndex = isActionable ? 0 : -1;
43
+ const chipRole = role ?? defaultRole;
44
+ const tabIndex = isInteractive ? 0 : -1;
42
45
  const closeButtonReference = useRef(null);
43
46
  const previousCloseButtonShown = useRef(undefined);
44
47
  useEffect(() => {
@@ -48,12 +51,15 @@ const Chip = ({
48
51
  previousCloseButtonShown.current = closeButtonReference.current != null;
49
52
  }, [onRemove]);
50
53
  return /*#__PURE__*/jsxs("div", {
51
- role: role ?? defaultRole,
54
+ role: chipRole,
52
55
  tabIndex: tabIndex,
53
56
  "aria-label": ariaLabel,
54
57
  "aria-checked": ariaChecked,
55
- className: clsx('np-chip', 'd-flex', 'align-items-center', 'justify-content-between', onRemove ? 'np-chip--removable' : '', className),
56
- ...(isActionable && {
58
+ "aria-disabled": chipRole && disabled ? true : undefined,
59
+ className: clsx('np-chip', 'd-flex', 'align-items-center', 'justify-content-between', onRemove ? 'np-chip--removable' : '', {
60
+ disabled
61
+ }, className),
62
+ ...(isInteractive && {
57
63
  onClick,
58
64
  onKeyPress
59
65
  }),
@@ -67,6 +73,7 @@ const Chip = ({
67
73
  "aria-label": closeButton?.['aria-label'],
68
74
  size: "sm",
69
75
  filled: true,
76
+ isDisabled: disabled,
70
77
  onClick: onRemove
71
78
  }) : null]
72
79
  }, value);
@@ -1 +1 @@
1
- {"version":3,"file":"Chip.mjs","sources":["../../../src/Chips/Chip/Chip.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useEffect, useRef } from 'react';\n\nimport Body from '../../Body';\nimport { AriaLabelProperty, CommonProps, Typography } from '../../common';\nimport { CloseButton } from '../../common/CloseButton/CloseButton';\n\nexport type ChipValue = string | number;\n\nexport type ChipProps<T extends ChipValue = ChipValue> = {\n value?: T;\n label: string;\n onRemove?: () => void;\n onClick?: () => void;\n onKeyPress?: () => void;\n closeButton?: AriaLabelProperty;\n 'aria-checked'?: boolean;\n role?: string;\n} & AriaLabelProperty &\n CommonProps;\n\nconst Chip = <T extends ChipValue = ChipValue>({\n label,\n value,\n onRemove,\n onClick,\n onKeyPress,\n className = undefined,\n 'aria-label': ariaLabel,\n 'aria-checked': ariaChecked,\n role,\n closeButton,\n}: ChipProps<T>) => {\n const isActionable = onClick || onKeyPress;\n const defaultRole = isActionable ? 'button' : undefined;\n const tabIndex = isActionable ? 0 : -1;\n\n const closeButtonReference = useRef<HTMLButtonElement>(null);\n const previousCloseButtonShown = useRef<boolean | undefined>(undefined);\n useEffect(() => {\n if (closeButtonReference.current != null && previousCloseButtonShown.current === false) {\n closeButtonReference.current?.focus();\n }\n previousCloseButtonShown.current = closeButtonReference.current != null;\n }, [onRemove]);\n\n return (\n <div\n key={value}\n role={role ?? defaultRole}\n tabIndex={tabIndex}\n aria-label={ariaLabel}\n aria-checked={ariaChecked}\n className={clsx(\n 'np-chip',\n 'd-flex',\n 'align-items-center',\n 'justify-content-between',\n onRemove ? 'np-chip--removable' : '',\n className,\n )}\n {...(isActionable && { onClick, onKeyPress })}\n >\n <Body aria-hidden={!!onRemove} type={Typography.BODY_DEFAULT_BOLD}>\n {label}\n </Body>\n {onRemove ? (\n <CloseButton\n ref={closeButtonReference}\n className=\"btn-unstyled\"\n aria-label={closeButton?.['aria-label']}\n size=\"sm\"\n filled\n onClick={onRemove}\n />\n ) : null}\n </div>\n );\n};\n\nexport default Chip;\n"],"names":["Chip","label","value","onRemove","onClick","onKeyPress","className","undefined","ariaLabel","ariaChecked","role","closeButton","isActionable","defaultRole","tabIndex","closeButtonReference","useRef","previousCloseButtonShown","useEffect","current","focus","_jsxs","clsx","children","_jsx","Body","type","Typography","BODY_DEFAULT_BOLD","CloseButton","ref","size","filled"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAMA,IAAI,GAAGA,CAAkC;EAC7CC,KAAK;EACLC,KAAK;EACLC,QAAQ;EACRC,OAAO;EACPC,UAAU;AACVC,EAAAA,SAAS,GAAGC,SAAS;AACrB,EAAA,YAAY,EAAEC,SAAS;AACvB,EAAA,cAAc,EAAEC,WAAW;EAC3BC,IAAI;AACJC,EAAAA;AAAW,CACE,KAAI;AACjB,EAAA,MAAMC,YAAY,GAAGR,OAAO,IAAIC,UAAU;AAC1C,EAAA,MAAMQ,WAAW,GAAGD,YAAY,GAAG,QAAQ,GAAGL,SAAS;AACvD,EAAA,MAAMO,QAAQ,GAAGF,YAAY,GAAG,CAAC,GAAG,EAAE;AAEtC,EAAA,MAAMG,oBAAoB,GAAGC,MAAM,CAAoB,IAAI,CAAC;AAC5D,EAAA,MAAMC,wBAAwB,GAAGD,MAAM,CAAsBT,SAAS,CAAC;AACvEW,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIH,oBAAoB,CAACI,OAAO,IAAI,IAAI,IAAIF,wBAAwB,CAACE,OAAO,KAAK,KAAK,EAAE;AACtFJ,MAAAA,oBAAoB,CAACI,OAAO,EAAEC,KAAK,EAAE;AACvC,IAAA;AACAH,IAAAA,wBAAwB,CAACE,OAAO,GAAGJ,oBAAoB,CAACI,OAAO,IAAI,IAAI;AACzE,EAAA,CAAC,EAAE,CAAChB,QAAQ,CAAC,CAAC;AAEd,EAAA,oBACEkB,IAAA,CAAA,KAAA,EAAA;IAEEX,IAAI,EAAEA,IAAI,IAAIG,WAAY;AAC1BC,IAAAA,QAAQ,EAAEA,QAAS;AACnB,IAAA,YAAA,EAAYN,SAAU;AACtB,IAAA,cAAA,EAAcC,WAAY;AAC1BH,IAAAA,SAAS,EAAEgB,IAAI,CACb,SAAS,EACT,QAAQ,EACR,oBAAoB,EACpB,yBAAyB,EACzBnB,QAAQ,GAAG,oBAAoB,GAAG,EAAE,EACpCG,SAAS,CACT;AAAA,IAAA,IACGM,YAAY,IAAI;MAAER,OAAO;AAAEC,MAAAA;KAAY,CAAA;IAAAkB,QAAA,EAAA,cAE5CC,GAAA,CAACC,IAAI,EAAA;MAAC,aAAA,EAAa,CAAC,CAACtB,QAAS;MAACuB,IAAI,EAAEC,UAAU,CAACC,iBAAkB;AAAAL,MAAAA,QAAA,EAC/DtB;AAAK,KACF,CACN,EAACE,QAAQ,gBACPqB,GAAA,CAACK,WAAW,EAAA;AACVC,MAAAA,GAAG,EAAEf,oBAAqB;AAC1BT,MAAAA,SAAS,EAAC,cAAc;MACxB,YAAA,EAAYK,WAAW,GAAG,YAAY,CAAE;AACxCoB,MAAAA,IAAI,EAAC,IAAI;MACTC,MAAM,EAAA,IAAA;AACN5B,MAAAA,OAAO,EAAED;KAAS,CAClB,GACA,IAAI;AAAA,GAAA,EA3BHD,KA4BF,CAAC;AAEV;;"}
1
+ {"version":3,"file":"Chip.mjs","sources":["../../../src/Chips/Chip/Chip.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useEffect, useRef } from 'react';\n\nimport Body from '../../Body';\nimport { AriaLabelProperty, CommonProps, Typography } from '../../common';\nimport { CloseButton } from '../../common/CloseButton/CloseButton';\n\nexport type ChipValue = string | number;\n\nexport type ChipProps<T extends ChipValue = ChipValue> = {\n value?: T;\n label: string;\n onRemove?: () => void;\n onClick?: () => void;\n onKeyPress?: () => void;\n /** @default false */\n disabled?: boolean;\n closeButton?: AriaLabelProperty;\n 'aria-checked'?: boolean;\n role?: string;\n} & AriaLabelProperty &\n CommonProps;\n\nconst Chip = <T extends ChipValue = ChipValue>({\n label,\n value,\n onRemove,\n onClick,\n onKeyPress,\n disabled = false,\n className = undefined,\n 'aria-label': ariaLabel,\n 'aria-checked': ariaChecked,\n role,\n closeButton,\n}: ChipProps<T>) => {\n const isActionable = onClick || onKeyPress;\n const isInteractive = isActionable && !disabled;\n const defaultRole = isActionable ? 'button' : undefined;\n const chipRole = role ?? defaultRole;\n const tabIndex = isInteractive ? 0 : -1;\n\n const closeButtonReference = useRef<HTMLButtonElement>(null);\n const previousCloseButtonShown = useRef<boolean | undefined>(undefined);\n useEffect(() => {\n if (closeButtonReference.current != null && previousCloseButtonShown.current === false) {\n closeButtonReference.current?.focus();\n }\n previousCloseButtonShown.current = closeButtonReference.current != null;\n }, [onRemove]);\n\n return (\n <div\n key={value}\n role={chipRole}\n tabIndex={tabIndex}\n aria-label={ariaLabel}\n aria-checked={ariaChecked}\n aria-disabled={chipRole && disabled ? true : undefined}\n className={clsx(\n 'np-chip',\n 'd-flex',\n 'align-items-center',\n 'justify-content-between',\n onRemove ? 'np-chip--removable' : '',\n { disabled },\n className,\n )}\n {...(isInteractive && { onClick, onKeyPress })}\n >\n <Body aria-hidden={!!onRemove} type={Typography.BODY_DEFAULT_BOLD}>\n {label}\n </Body>\n {onRemove ? (\n <CloseButton\n ref={closeButtonReference}\n className=\"btn-unstyled\"\n aria-label={closeButton?.['aria-label']}\n size=\"sm\"\n filled\n isDisabled={disabled}\n onClick={onRemove}\n />\n ) : null}\n </div>\n );\n};\n\nexport default Chip;\n"],"names":["Chip","label","value","onRemove","onClick","onKeyPress","disabled","className","undefined","ariaLabel","ariaChecked","role","closeButton","isActionable","isInteractive","defaultRole","chipRole","tabIndex","closeButtonReference","useRef","previousCloseButtonShown","useEffect","current","focus","_jsxs","clsx","children","_jsx","Body","type","Typography","BODY_DEFAULT_BOLD","CloseButton","ref","size","filled","isDisabled"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAMA,IAAI,GAAGA,CAAkC;EAC7CC,KAAK;EACLC,KAAK;EACLC,QAAQ;EACRC,OAAO;EACPC,UAAU;AACVC,EAAAA,QAAQ,GAAG,KAAK;AAChBC,EAAAA,SAAS,GAAGC,SAAS;AACrB,EAAA,YAAY,EAAEC,SAAS;AACvB,EAAA,cAAc,EAAEC,WAAW;EAC3BC,IAAI;AACJC,EAAAA;AAAW,CACE,KAAI;AACjB,EAAA,MAAMC,YAAY,GAAGT,OAAO,IAAIC,UAAU;AAC1C,EAAA,MAAMS,aAAa,GAAGD,YAAY,IAAI,CAACP,QAAQ;AAC/C,EAAA,MAAMS,WAAW,GAAGF,YAAY,GAAG,QAAQ,GAAGL,SAAS;AACvD,EAAA,MAAMQ,QAAQ,GAAGL,IAAI,IAAII,WAAW;AACpC,EAAA,MAAME,QAAQ,GAAGH,aAAa,GAAG,CAAC,GAAG,EAAE;AAEvC,EAAA,MAAMI,oBAAoB,GAAGC,MAAM,CAAoB,IAAI,CAAC;AAC5D,EAAA,MAAMC,wBAAwB,GAAGD,MAAM,CAAsBX,SAAS,CAAC;AACvEa,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIH,oBAAoB,CAACI,OAAO,IAAI,IAAI,IAAIF,wBAAwB,CAACE,OAAO,KAAK,KAAK,EAAE;AACtFJ,MAAAA,oBAAoB,CAACI,OAAO,EAAEC,KAAK,EAAE;AACvC,IAAA;AACAH,IAAAA,wBAAwB,CAACE,OAAO,GAAGJ,oBAAoB,CAACI,OAAO,IAAI,IAAI;AACzE,EAAA,CAAC,EAAE,CAACnB,QAAQ,CAAC,CAAC;AAEd,EAAA,oBACEqB,IAAA,CAAA,KAAA,EAAA;AAEEb,IAAAA,IAAI,EAAEK,QAAS;AACfC,IAAAA,QAAQ,EAAEA,QAAS;AACnB,IAAA,YAAA,EAAYR,SAAU;AACtB,IAAA,cAAA,EAAcC,WAAY;AAC1B,IAAA,eAAA,EAAeM,QAAQ,IAAIV,QAAQ,GAAG,IAAI,GAAGE,SAAU;AACvDD,IAAAA,SAAS,EAAEkB,IAAI,CACb,SAAS,EACT,QAAQ,EACR,oBAAoB,EACpB,yBAAyB,EACzBtB,QAAQ,GAAG,oBAAoB,GAAG,EAAE,EACpC;AAAEG,MAAAA;KAAU,EACZC,SAAS,CACT;AAAA,IAAA,IACGO,aAAa,IAAI;MAAEV,OAAO;AAAEC,MAAAA;KAAY,CAAA;IAAAqB,QAAA,EAAA,cAE7CC,GAAA,CAACC,IAAI,EAAA;MAAC,aAAA,EAAa,CAAC,CAACzB,QAAS;MAAC0B,IAAI,EAAEC,UAAU,CAACC,iBAAkB;AAAAL,MAAAA,QAAA,EAC/DzB;AAAK,KACF,CACN,EAACE,QAAQ,gBACPwB,GAAA,CAACK,WAAW,EAAA;AACVC,MAAAA,GAAG,EAAEf,oBAAqB;AAC1BX,MAAAA,SAAS,EAAC,cAAc;MACxB,YAAA,EAAYK,WAAW,GAAG,YAAY,CAAE;AACxCsB,MAAAA,IAAI,EAAC,IAAI;MACTC,MAAM,EAAA,IAAA;AACNC,MAAAA,UAAU,EAAE9B,QAAS;AACrBF,MAAAA,OAAO,EAAED;KAAS,CAClB,GACA,IAAI;AAAA,GAAA,EA9BHD,KA+BF,CAAC;AAEV;;"}
@@ -67,6 +67,7 @@ class Typeahead extends React.Component {
67
67
  autoFocus: false,
68
68
  chipSeparators: [],
69
69
  clearable: true,
70
+ disabled: false,
70
71
  initialValue: [],
71
72
  inputAutoComplete: 'new-password',
72
73
  minQueryLength: DEFAULT_MIN_QUERY_LENGTH,
@@ -117,6 +118,11 @@ class Typeahead extends React.Component {
117
118
  });
118
119
  }
119
120
  }
121
+ componentDidUpdate(previousProps) {
122
+ if (this.props.disabled && !previousProps.disabled) {
123
+ this.hideMenu();
124
+ }
125
+ }
120
126
  componentWillUnmount() {
121
127
  this.handleSearchDebounced.cancel();
122
128
  }
@@ -372,6 +378,9 @@ class Typeahead extends React.Component {
372
378
  }
373
379
  };
374
380
  renderChip = (option, idx) => {
381
+ const {
382
+ disabled
383
+ } = this.props;
375
384
  const valid = this.props.validateChip?.(option);
376
385
  return /*#__PURE__*/jsxRuntime.jsx(Chip.default, {
377
386
  label: option.label,
@@ -379,7 +388,8 @@ class Typeahead extends React.Component {
379
388
  'has-error': !valid,
380
389
  'np-chip--valid': valid
381
390
  }),
382
- onRemove: () => this.removeChip(option)
391
+ disabled: disabled,
392
+ onRemove: disabled ? undefined : () => this.removeChip(option)
383
393
  }, idx);
384
394
  };
385
395
  renderMenu = ({
@@ -437,6 +447,7 @@ class Typeahead extends React.Component {
437
447
  addon,
438
448
  name,
439
449
  clearable,
450
+ disabled,
440
451
  allowNew,
441
452
  footer,
442
453
  showSuggestions,
@@ -456,8 +467,8 @@ class Typeahead extends React.Component {
456
467
  optionsShown,
457
468
  keyboardFocusedOptionIndex
458
469
  } = this.state;
459
- const clearButton = clearable && (query || selected.length > 0);
460
- const dropdownOpen = optionsShown && showSuggestions && query.length >= minQueryLength;
470
+ const clearButton = !disabled && clearable && (query || selected.length > 0);
471
+ const dropdownOpen = !disabled && optionsShown && showSuggestions && query.length >= minQueryLength;
461
472
  const menu = this.renderMenu({
462
473
  footer,
463
474
  options,
@@ -503,13 +514,15 @@ class Typeahead extends React.Component {
503
514
  }),
504
515
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
505
516
  className: clsx.clsx(`input-group input-group-${size}`, {
506
- 'input-group--has-error': hasError
517
+ 'input-group--has-error': hasError,
518
+ disabled
507
519
  }),
508
520
  children: [addon && /*#__PURE__*/jsxRuntime.jsx("span", {
509
521
  className: "input-group-addon input-group-addon--search",
510
522
  children: addon
511
523
  }), /*#__PURE__*/jsxRuntime.jsx(TypeaheadInput.default, {
512
524
  autoFocus,
525
+ disabled,
513
526
  multiple,
514
527
  dropdownOpen,
515
528
  placeholder,
@@ -1 +1 @@
1
- {"version":3,"file":"Typeahead.js","sources":["../../src/Typeahead/Typeahead.tsx"],"sourcesContent":["import { Cross as CrossIcon } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport { DebouncedFunc } from 'lodash';\nimport clamp from 'lodash.clamp';\nimport debounce from 'lodash.debounce';\nimport React, { Component, ReactNode } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../common/injectIntl';\n\nimport { Chip } from '../Chips';\nimport {\n Size,\n Sentiment,\n SizeMedium,\n SizeLarge,\n addClickClassToDocumentOnIos,\n removeClickClassFromDocumentOnIos,\n stopPropagation,\n} from '../common';\nimport { InlinePrompt, InlinePromptProps } from '../Prompt';\nimport { withInputAttributes, WithInputAttributesProps } from '../Inputs/contexts';\n\nimport TypeaheadInput from './TypeaheadInput/TypeaheadInput';\nimport TypeaheadOption from './TypeaheadOption/TypeaheadOption';\nimport messages from './Typeahead.messages';\n\nconst DEFAULT_MIN_QUERY_LENGTH = 3;\nconst SEARCH_DELAY = 200;\n\nexport type TypeaheadOption<T = string> = {\n label: string;\n note?: string;\n secondary?: string;\n value?: T;\n clearQueryOnSelect?: boolean;\n keepFocusOnSelect?: boolean;\n};\n\nexport interface TypeaheadProps<T> extends Partial<WrappedComponentProps> {\n id: string;\n name: string;\n addon?: ReactNode;\n /**\n * @deprecated Use [`Field`](?path=/docs/forms-field--docs) component and its `message` and `sentiment` props instead.\n * @deprecated `error`, `info` and `success` are deprecated as alert types and will be soon removed.\n */\n alert?: {\n message: InlinePromptProps['children'];\n type?:\n | InlinePromptProps['sentiment']\n | `${Sentiment.ERROR}`\n | `${Sentiment.INFO}`\n | `${Sentiment.SUCCESS}`;\n };\n /** @default false */\n allowNew?: boolean;\n /** @default true */\n autoFillOnBlur?: boolean;\n /** @default false */\n autoFocus?: boolean;\n /** @default [] */\n chipSeparators?: readonly string[];\n /** @default true */\n clearable?: boolean;\n footer?: ReactNode;\n /** @default [] */\n initialValue?: readonly TypeaheadOption<T>[];\n /** @default 'new-password' */\n inputAutoComplete?: string;\n maxHeight?: number;\n /** @default 3 */\n minQueryLength?: number;\n placeholder?: string;\n /** @default false */\n multiple?: boolean;\n options: readonly TypeaheadOption<T>[];\n /** @default 200 */\n searchDelay?: number;\n /** @default true */\n showSuggestions?: boolean;\n /** @default true */\n showNewEntry?: boolean;\n /** @default 'md' */\n size?: SizeMedium | SizeLarge;\n onBlur?: () => void;\n onChange: (options: TypeaheadOption<T>[]) => void;\n onFocus?: () => void;\n onInputChange?: (query: string) => void;\n onSearch?: (query: string) => void;\n validateChip?: (chip: TypeaheadOption<T>) => boolean;\n}\n\ntype TypeaheadPropsWithInputAttributes<T> = TypeaheadProps<T> &\n Partial<WithInputAttributesProps> &\n WrappedComponentProps;\n\ntype TypeaheadState<T> = {\n selected: readonly TypeaheadOption<T>[];\n keyboardFocusedOptionIndex: number | null;\n errorState: boolean;\n query: string;\n optionsShown: boolean;\n isFocused: boolean;\n};\n\nclass Typeahead<T> extends Component<TypeaheadPropsWithInputAttributes<T>, TypeaheadState<T>> {\n declare props: TypeaheadPropsWithInputAttributes<T> &\n Required<Pick<TypeaheadPropsWithInputAttributes<T>, keyof typeof Typeahead.defaultProps>>;\n\n static defaultProps = {\n allowNew: false,\n autoFillOnBlur: true,\n autoFocus: false,\n chipSeparators: [],\n clearable: true,\n initialValue: [],\n inputAutoComplete: 'new-password',\n minQueryLength: DEFAULT_MIN_QUERY_LENGTH,\n multiple: false,\n searchDelay: SEARCH_DELAY,\n showSuggestions: true,\n showNewEntry: true,\n size: Size.MEDIUM,\n validateChip: () => true,\n } satisfies Partial<TypeaheadProps<unknown>>;\n optionRefs: (React.RefObject<HTMLLIElement> | null)[];\n\n constructor(props: TypeaheadPropsWithInputAttributes<T>) {\n super(props);\n const { searchDelay, initialValue, multiple } = this.props;\n this.handleSearchDebounced = debounce(this.handleSearch, searchDelay);\n const initialQuery = !multiple && initialValue.length > 0 ? initialValue[0].label : '';\n this.state = {\n selected: initialValue,\n errorState: false,\n query: initialQuery,\n keyboardFocusedOptionIndex: null,\n optionsShown: false,\n isFocused: false,\n };\n this.optionRefs = [] as (React.RefObject<HTMLLIElement> | null)[];\n }\n\n handleSearchDebounced: DebouncedFunc<Typeahead<T>['handleSearch']>;\n\n UNSAFE_componentWillReceiveProps(nextProps: TypeaheadPropsWithInputAttributes<T>) {\n if (nextProps.multiple !== this.props.multiple) {\n this.setState((previousState) => {\n const { selected } = previousState;\n if (!nextProps.multiple && selected.length > 0) {\n return {\n query: selected[0].label,\n selected: [selected[0]],\n };\n }\n return {\n selected: previousState.selected,\n query: '',\n };\n });\n }\n }\n\n componentWillUnmount() {\n this.handleSearchDebounced.cancel();\n }\n\n handleOnFocus = () => {\n this.showMenu();\n this.props.onFocus?.();\n };\n\n onOptionSelected = (event: React.MouseEvent, item: TypeaheadOption<T>) => {\n event.preventDefault();\n this.selectItem(item);\n };\n\n handleOnChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { optionsShown, selected } = this.state;\n const { multiple, onInputChange } = this.props;\n\n if (!optionsShown) {\n this.showMenu();\n }\n\n const query = event.target.value;\n\n if (!multiple && selected.length > 0) {\n this.updateSelectedValue([]);\n }\n\n this.setState({ query }, () => {\n this.handleSearchDebounced(query);\n if (onInputChange) {\n onInputChange(query);\n }\n });\n };\n\n handleOnPaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const { allowNew, multiple, chipSeparators } = this.props;\n const { selected } = this.state;\n\n if (allowNew && multiple && chipSeparators.length > 0) {\n event.preventDefault();\n const value = event.clipboardData.getData('text');\n if (value) {\n const regex = new RegExp(chipSeparators.join('|'));\n const pastedChips = value\n .split(regex)\n .map((label) => ({ label: label.trim() }))\n .filter((chip) => chip.label);\n\n this.updateSelectedValue([...selected, ...pastedChips]);\n }\n }\n };\n\n handleOnKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n const { showSuggestions, allowNew, multiple, chipSeparators } = this.props;\n const { query, selected } = this.state;\n const chipsMode = !showSuggestions && allowNew && multiple;\n\n if (chipsMode && ['Enter', 'Tab', ...chipSeparators].includes(event.key) && query.trim()) {\n event.preventDefault();\n this.selectItem({ label: query });\n } else if (!this.handleOptionNavigation(event)) {\n switch (event.key) {\n case 'Backspace':\n if (multiple && !query && selected.length > 0) {\n this.updateSelectedValue(selected.slice(0, -1));\n }\n break;\n default:\n break;\n }\n }\n };\n\n handleOptionListKeyDown: React.KeyboardEventHandler<HTMLUListElement> = (event) => {\n this.handleOptionNavigation(event);\n };\n\n handleOptionNavigation(event: React.KeyboardEvent<HTMLElement>) {\n const { allowNew, options } = this.props;\n const { keyboardFocusedOptionIndex, query } = this.state;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocusedOption(1);\n return true;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocusedOption(-1);\n return true;\n case 'Enter':\n event.preventDefault();\n if (keyboardFocusedOptionIndex != null && options[keyboardFocusedOptionIndex]) {\n this.selectItem(options[keyboardFocusedOptionIndex]);\n } else if (allowNew && query.trim()) {\n this.selectItem({ label: query });\n }\n return true;\n default:\n return false;\n }\n }\n moveFocusedOption(offset: number) {\n this.setState((previousState) => {\n const { keyboardFocusedOptionIndex } = previousState;\n const { options } = this.props;\n let index = 0;\n if (keyboardFocusedOptionIndex !== null) {\n index = clamp(keyboardFocusedOptionIndex + offset, 0, options.length - 1);\n }\n const optionRef = this.optionRefs[index];\n if (optionRef?.current) {\n optionRef.current.scrollIntoView({ block: 'nearest' });\n }\n return {\n keyboardFocusedOptionIndex: index,\n };\n });\n }\n\n setFocusedOption = (index: number) => {\n this.setState({ keyboardFocusedOptionIndex: index });\n };\n\n selectItem = (item: TypeaheadOption<T>) => {\n const { multiple } = this.props;\n let selected = [...this.state.selected];\n let query;\n if (multiple) {\n selected.push(item);\n query = '';\n } else {\n selected = [item];\n query = item.label;\n }\n\n this.updateSelectedValue(selected);\n\n if (!item.keepFocusOnSelect) {\n this.hideMenu();\n }\n\n if (item.clearQueryOnSelect) {\n query = '';\n }\n\n this.setState({\n query,\n });\n };\n\n handleSearch = (query: string) => {\n const { onSearch } = this.props;\n if (onSearch) {\n onSearch(query);\n }\n\n this.setState((previousState) => ({\n keyboardFocusedOptionIndex: previousState.keyboardFocusedOptionIndex === null ? null : 0,\n }));\n };\n\n handleDocumentClick = () => {\n if (this.state.optionsShown) {\n this.hideMenu();\n const { allowNew, onBlur, autoFillOnBlur } = this.props;\n const { query } = this.state;\n this.setState({\n isFocused: false,\n });\n if (allowNew && autoFillOnBlur && query.trim()) {\n this.selectItem({ label: query });\n }\n\n if (onBlur) {\n onBlur();\n }\n }\n };\n\n showMenu = () => {\n this.setState(\n {\n isFocused: true,\n optionsShown: true,\n },\n () => {\n addClickClassToDocumentOnIos();\n document.addEventListener('click', this.handleDocumentClick, false);\n },\n );\n };\n\n hideMenu = () => {\n this.setState(\n {\n optionsShown: false,\n keyboardFocusedOptionIndex: null,\n },\n () => {\n removeClickClassFromDocumentOnIos();\n document.removeEventListener('click', this.handleDocumentClick, false);\n },\n );\n };\n\n updateSelectedValue = (selected: readonly TypeaheadOption<T>[]) => {\n const { onChange, validateChip } = this.props;\n\n const errorState = selected.some((chip) => !validateChip(chip));\n this.setState({ selected, errorState }, () => {\n onChange([...selected]);\n });\n };\n\n clear = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n if (this.state.selected.length > 0) {\n this.updateSelectedValue([]);\n }\n\n this.setState({\n query: '',\n });\n };\n\n removeChip = (option: TypeaheadOption<T>) => {\n const { selected } = this.state;\n\n if (selected.length > 0) {\n this.updateSelectedValue([...selected.filter((selectedOption) => selectedOption !== option)]);\n }\n };\n\n renderChip = (option: TypeaheadOption<T>, idx: number): ReactNode => {\n const valid = this.props.validateChip?.(option);\n\n return (\n <Chip\n key={idx}\n label={option.label}\n className={clsx('m-t-1', {\n 'has-error': !valid,\n 'np-chip--valid': valid,\n })}\n onRemove={() => this.removeChip(option)}\n />\n );\n };\n\n renderMenu = ({\n footer,\n options,\n id,\n keyboardFocusedOptionIndex,\n query,\n allowNew,\n showNewEntry,\n dropdownOpen,\n }: Pick<\n TypeaheadPropsWithInputAttributes<T>,\n 'footer' | 'options' | 'id' | 'allowNew' | 'showNewEntry'\n > &\n Pick<TypeaheadState<T>, 'keyboardFocusedOptionIndex' | 'query'> & {\n dropdownOpen: boolean;\n }) => {\n const optionsToRender = [...options];\n if (\n allowNew &&\n query.trim() &&\n options.every((option) => option.label.trim().toUpperCase() !== query.trim().toUpperCase()) &&\n showNewEntry\n ) {\n optionsToRender.push({\n label: query,\n });\n }\n return (\n <div className={clsx('dropdown btn-group btn-block', { open: dropdownOpen })}>\n {(!!optionsToRender.length || footer) && (\n <ul\n className=\"dropdown-menu\"\n id={`menu-${id}`}\n role=\"listbox\"\n aria-label={this.props?.intl?.formatMessage(messages.suggestionsLabel)}\n tabIndex={0}\n onKeyDown={this.handleOptionListKeyDown}\n >\n {optionsToRender.map((option, idx) => {\n const ref = React.createRef<HTMLLIElement>();\n this.optionRefs[idx] = ref;\n return (\n <TypeaheadOption\n key={`${option.label}${idx.toString()}`}\n ref={ref}\n query={query}\n option={option}\n selected={keyboardFocusedOptionIndex === idx}\n id={`${id}-${idx}`}\n onMouseEnter={() => this.setFocusedOption(idx)}\n onClick={(event) => {\n this.onOptionSelected(event, option);\n }}\n />\n );\n })}\n {footer}\n </ul>\n )}\n </div>\n );\n };\n\n render() {\n const {\n inputAttributes,\n id: idProp,\n placeholder,\n multiple,\n size,\n addon,\n name,\n clearable,\n allowNew,\n footer,\n showSuggestions,\n showNewEntry,\n options,\n minQueryLength,\n autoFocus,\n maxHeight,\n alert,\n inputAutoComplete,\n } = this.props;\n const id = idProp ?? inputAttributes?.id;\n\n const { errorState, query, selected, optionsShown, keyboardFocusedOptionIndex } = this.state;\n\n const clearButton = clearable && (query || selected.length > 0);\n\n const dropdownOpen = optionsShown && showSuggestions && query.length >= minQueryLength;\n\n const menu = this.renderMenu({\n footer,\n options,\n id,\n keyboardFocusedOptionIndex,\n query,\n allowNew,\n showNewEntry,\n dropdownOpen,\n });\n\n const alertType = (() => {\n if (!alert?.type || alert.type === Sentiment.INFO) {\n return Sentiment.NEUTRAL;\n }\n if (alert.type === Sentiment.ERROR) {\n return Sentiment.NEGATIVE;\n }\n if (alert.type === Sentiment.SUCCESS) {\n return Sentiment.POSITIVE;\n }\n return alert.type;\n })();\n const hasError = errorState || (alert && alertType === Sentiment.NEGATIVE);\n const displayAlert = (!errorState && alert) || (alert && alertType === Sentiment.NEGATIVE);\n const hasWarning = displayAlert && alertType === Sentiment.WARNING;\n const hasInfo = displayAlert && alertType === Sentiment.NEUTRAL;\n return (\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */\n <div\n role=\"group\"\n {...inputAttributes}\n id={id}\n className={clsx('typeahead', `typeahead-${size}`, {\n 'typeahead--has-value': selected.length > 0,\n 'typeahead--empty': selected.length === 0,\n 'typeahead--multiple': multiple,\n open: dropdownOpen,\n })}\n onClick={stopPropagation}\n >\n <div\n className={clsx('form-group', 'form-group--typeahead', {\n 'has-error': hasError,\n 'has-warning': hasWarning,\n 'has-info': hasInfo,\n })}\n >\n <div\n className={clsx(`input-group input-group-${size}`, {\n 'input-group--has-error': hasError,\n })}\n >\n {addon && <span className=\"input-group-addon input-group-addon--search\">{addon}</span>}\n\n <TypeaheadInput\n {...{\n autoFocus,\n multiple,\n dropdownOpen,\n placeholder,\n selected,\n maxHeight,\n }}\n id={id}\n name={name}\n value={query}\n typeaheadId={id}\n renderChip={this.renderChip}\n autoComplete={inputAutoComplete}\n ariaActivedescendant={\n keyboardFocusedOptionIndex !== null && options[keyboardFocusedOptionIndex]\n ? `option-${id}-${keyboardFocusedOptionIndex}`\n : undefined\n }\n onChange={this.handleOnChange}\n onKeyDown={this.handleOnKeyDown}\n onFocus={this.handleOnFocus}\n onPaste={this.handleOnPaste}\n />\n\n {clearButton && (\n <div className=\"input-group-addon\">\n <button\n type=\"button\"\n className=\"btn-unstyled\"\n aria-label={this.props?.intl?.formatMessage(messages.clearLabel)}\n onClick={this.clear}\n >\n <CrossIcon />\n </button>\n </div>\n )}\n </div>\n {displayAlert ? (\n <InlinePrompt sentiment={alertType} className=\"typeahead--prompt\" width=\"full\">\n {alert.message}\n </InlinePrompt>\n ) : (\n menu\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default injectIntl(withInputAttributes(Typeahead, { nonLabelable: true })) as <T>(\n props: TypeaheadProps<T>,\n) => React.ReactElement;\n"],"names":["DEFAULT_MIN_QUERY_LENGTH","SEARCH_DELAY","Typeahead","Component","defaultProps","allowNew","autoFillOnBlur","autoFocus","chipSeparators","clearable","initialValue","inputAutoComplete","minQueryLength","multiple","searchDelay","showSuggestions","showNewEntry","size","Size","MEDIUM","validateChip","optionRefs","constructor","props","handleSearchDebounced","debounce","handleSearch","initialQuery","length","label","state","selected","errorState","query","keyboardFocusedOptionIndex","optionsShown","isFocused","UNSAFE_componentWillReceiveProps","nextProps","setState","previousState","componentWillUnmount","cancel","handleOnFocus","showMenu","onFocus","onOptionSelected","event","item","preventDefault","selectItem","handleOnChange","onInputChange","target","value","updateSelectedValue","handleOnPaste","clipboardData","getData","regex","RegExp","join","pastedChips","split","map","trim","filter","chip","handleOnKeyDown","chipsMode","includes","key","handleOptionNavigation","slice","handleOptionListKeyDown","options","moveFocusedOption","offset","index","clamp","optionRef","current","scrollIntoView","block","setFocusedOption","push","keepFocusOnSelect","hideMenu","clearQueryOnSelect","onSearch","handleDocumentClick","onBlur","addClickClassToDocumentOnIos","document","addEventListener","removeClickClassFromDocumentOnIos","removeEventListener","onChange","some","clear","removeChip","option","selectedOption","renderChip","idx","valid","_jsx","Chip","className","clsx","onRemove","renderMenu","footer","id","dropdownOpen","optionsToRender","every","toUpperCase","open","children","_jsxs","role","intl","formatMessage","messages","suggestionsLabel","tabIndex","onKeyDown","ref","React","createRef","TypeaheadOption","onMouseEnter","onClick","toString","render","inputAttributes","idProp","placeholder","addon","name","maxHeight","alert","clearButton","menu","alertType","type","Sentiment","INFO","NEUTRAL","ERROR","NEGATIVE","SUCCESS","POSITIVE","hasError","displayAlert","hasWarning","WARNING","hasInfo","stopPropagation","TypeaheadInput","typeaheadId","autoComplete","ariaActivedescendant","undefined","onPaste","clearLabel","CrossIcon","InlinePrompt","sentiment","width","message","injectIntl","withInputAttributes","nonLabelable"],"mappings":"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"}
1
+ {"version":3,"file":"Typeahead.js","sources":["../../src/Typeahead/Typeahead.tsx"],"sourcesContent":["import { Cross as CrossIcon } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport { DebouncedFunc } from 'lodash';\nimport clamp from 'lodash.clamp';\nimport debounce from 'lodash.debounce';\nimport React, { Component, ReactNode } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../common/injectIntl';\n\nimport { Chip } from '../Chips';\nimport {\n Size,\n Sentiment,\n SizeMedium,\n SizeLarge,\n addClickClassToDocumentOnIos,\n removeClickClassFromDocumentOnIos,\n stopPropagation,\n} from '../common';\nimport { InlinePrompt, InlinePromptProps } from '../Prompt';\nimport { withInputAttributes, WithInputAttributesProps } from '../Inputs/contexts';\n\nimport TypeaheadInput from './TypeaheadInput/TypeaheadInput';\nimport TypeaheadOption from './TypeaheadOption/TypeaheadOption';\nimport messages from './Typeahead.messages';\n\nconst DEFAULT_MIN_QUERY_LENGTH = 3;\nconst SEARCH_DELAY = 200;\n\nexport type TypeaheadOption<T = string> = {\n label: string;\n note?: string;\n secondary?: string;\n value?: T;\n clearQueryOnSelect?: boolean;\n keepFocusOnSelect?: boolean;\n};\n\nexport interface TypeaheadProps<T> extends Partial<WrappedComponentProps> {\n id: string;\n name: string;\n addon?: ReactNode;\n /**\n * @deprecated Use [`Field`](?path=/docs/forms-field--docs) component and its `message` and `sentiment` props instead.\n * @deprecated `error`, `info` and `success` are deprecated as alert types and will be soon removed.\n */\n alert?: {\n message: InlinePromptProps['children'];\n type?:\n | InlinePromptProps['sentiment']\n | `${Sentiment.ERROR}`\n | `${Sentiment.INFO}`\n | `${Sentiment.SUCCESS}`;\n };\n /** @default false */\n allowNew?: boolean;\n /** @default true */\n autoFillOnBlur?: boolean;\n /** @default false */\n autoFocus?: boolean;\n /** @default [] */\n chipSeparators?: readonly string[];\n /** @default true */\n clearable?: boolean;\n /** @default false */\n disabled?: boolean;\n footer?: ReactNode;\n /** @default [] */\n initialValue?: readonly TypeaheadOption<T>[];\n /** @default 'new-password' */\n inputAutoComplete?: string;\n maxHeight?: number;\n /** @default 3 */\n minQueryLength?: number;\n placeholder?: string;\n /** @default false */\n multiple?: boolean;\n options: readonly TypeaheadOption<T>[];\n /** @default 200 */\n searchDelay?: number;\n /** @default true */\n showSuggestions?: boolean;\n /** @default true */\n showNewEntry?: boolean;\n /** @default 'md' */\n size?: SizeMedium | SizeLarge;\n onBlur?: () => void;\n onChange: (options: TypeaheadOption<T>[]) => void;\n onFocus?: () => void;\n onInputChange?: (query: string) => void;\n onSearch?: (query: string) => void;\n validateChip?: (chip: TypeaheadOption<T>) => boolean;\n}\n\ntype TypeaheadPropsWithInputAttributes<T> = TypeaheadProps<T> &\n Partial<WithInputAttributesProps> &\n WrappedComponentProps;\n\ntype TypeaheadState<T> = {\n selected: readonly TypeaheadOption<T>[];\n keyboardFocusedOptionIndex: number | null;\n errorState: boolean;\n query: string;\n optionsShown: boolean;\n isFocused: boolean;\n};\n\nclass Typeahead<T> extends Component<TypeaheadPropsWithInputAttributes<T>, TypeaheadState<T>> {\n declare props: TypeaheadPropsWithInputAttributes<T> &\n Required<Pick<TypeaheadPropsWithInputAttributes<T>, keyof typeof Typeahead.defaultProps>>;\n\n static defaultProps = {\n allowNew: false,\n autoFillOnBlur: true,\n autoFocus: false,\n chipSeparators: [],\n clearable: true,\n disabled: false,\n initialValue: [],\n inputAutoComplete: 'new-password',\n minQueryLength: DEFAULT_MIN_QUERY_LENGTH,\n multiple: false,\n searchDelay: SEARCH_DELAY,\n showSuggestions: true,\n showNewEntry: true,\n size: Size.MEDIUM,\n validateChip: () => true,\n } satisfies Partial<TypeaheadProps<unknown>>;\n optionRefs: (React.RefObject<HTMLLIElement> | null)[];\n\n constructor(props: TypeaheadPropsWithInputAttributes<T>) {\n super(props);\n const { searchDelay, initialValue, multiple } = this.props;\n this.handleSearchDebounced = debounce(this.handleSearch, searchDelay);\n const initialQuery = !multiple && initialValue.length > 0 ? initialValue[0].label : '';\n this.state = {\n selected: initialValue,\n errorState: false,\n query: initialQuery,\n keyboardFocusedOptionIndex: null,\n optionsShown: false,\n isFocused: false,\n };\n this.optionRefs = [] as (React.RefObject<HTMLLIElement> | null)[];\n }\n\n handleSearchDebounced: DebouncedFunc<Typeahead<T>['handleSearch']>;\n\n UNSAFE_componentWillReceiveProps(nextProps: TypeaheadPropsWithInputAttributes<T>) {\n if (nextProps.multiple !== this.props.multiple) {\n this.setState((previousState) => {\n const { selected } = previousState;\n if (!nextProps.multiple && selected.length > 0) {\n return {\n query: selected[0].label,\n selected: [selected[0]],\n };\n }\n return {\n selected: previousState.selected,\n query: '',\n };\n });\n }\n }\n\n componentDidUpdate(previousProps: TypeaheadPropsWithInputAttributes<T>) {\n if (this.props.disabled && !previousProps.disabled) {\n this.hideMenu();\n }\n }\n\n componentWillUnmount() {\n this.handleSearchDebounced.cancel();\n }\n\n handleOnFocus = () => {\n this.showMenu();\n this.props.onFocus?.();\n };\n\n onOptionSelected = (event: React.MouseEvent, item: TypeaheadOption<T>) => {\n event.preventDefault();\n this.selectItem(item);\n };\n\n handleOnChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { optionsShown, selected } = this.state;\n const { multiple, onInputChange } = this.props;\n\n if (!optionsShown) {\n this.showMenu();\n }\n\n const query = event.target.value;\n\n if (!multiple && selected.length > 0) {\n this.updateSelectedValue([]);\n }\n\n this.setState({ query }, () => {\n this.handleSearchDebounced(query);\n if (onInputChange) {\n onInputChange(query);\n }\n });\n };\n\n handleOnPaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const { allowNew, multiple, chipSeparators } = this.props;\n const { selected } = this.state;\n\n if (allowNew && multiple && chipSeparators.length > 0) {\n event.preventDefault();\n const value = event.clipboardData.getData('text');\n if (value) {\n const regex = new RegExp(chipSeparators.join('|'));\n const pastedChips = value\n .split(regex)\n .map((label) => ({ label: label.trim() }))\n .filter((chip) => chip.label);\n\n this.updateSelectedValue([...selected, ...pastedChips]);\n }\n }\n };\n\n handleOnKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n const { showSuggestions, allowNew, multiple, chipSeparators } = this.props;\n const { query, selected } = this.state;\n const chipsMode = !showSuggestions && allowNew && multiple;\n\n if (chipsMode && ['Enter', 'Tab', ...chipSeparators].includes(event.key) && query.trim()) {\n event.preventDefault();\n this.selectItem({ label: query });\n } else if (!this.handleOptionNavigation(event)) {\n switch (event.key) {\n case 'Backspace':\n if (multiple && !query && selected.length > 0) {\n this.updateSelectedValue(selected.slice(0, -1));\n }\n break;\n default:\n break;\n }\n }\n };\n\n handleOptionListKeyDown: React.KeyboardEventHandler<HTMLUListElement> = (event) => {\n this.handleOptionNavigation(event);\n };\n\n handleOptionNavigation(event: React.KeyboardEvent<HTMLElement>) {\n const { allowNew, options } = this.props;\n const { keyboardFocusedOptionIndex, query } = this.state;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocusedOption(1);\n return true;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocusedOption(-1);\n return true;\n case 'Enter':\n event.preventDefault();\n if (keyboardFocusedOptionIndex != null && options[keyboardFocusedOptionIndex]) {\n this.selectItem(options[keyboardFocusedOptionIndex]);\n } else if (allowNew && query.trim()) {\n this.selectItem({ label: query });\n }\n return true;\n default:\n return false;\n }\n }\n moveFocusedOption(offset: number) {\n this.setState((previousState) => {\n const { keyboardFocusedOptionIndex } = previousState;\n const { options } = this.props;\n let index = 0;\n if (keyboardFocusedOptionIndex !== null) {\n index = clamp(keyboardFocusedOptionIndex + offset, 0, options.length - 1);\n }\n const optionRef = this.optionRefs[index];\n if (optionRef?.current) {\n optionRef.current.scrollIntoView({ block: 'nearest' });\n }\n return {\n keyboardFocusedOptionIndex: index,\n };\n });\n }\n\n setFocusedOption = (index: number) => {\n this.setState({ keyboardFocusedOptionIndex: index });\n };\n\n selectItem = (item: TypeaheadOption<T>) => {\n const { multiple } = this.props;\n let selected = [...this.state.selected];\n let query;\n if (multiple) {\n selected.push(item);\n query = '';\n } else {\n selected = [item];\n query = item.label;\n }\n\n this.updateSelectedValue(selected);\n\n if (!item.keepFocusOnSelect) {\n this.hideMenu();\n }\n\n if (item.clearQueryOnSelect) {\n query = '';\n }\n\n this.setState({\n query,\n });\n };\n\n handleSearch = (query: string) => {\n const { onSearch } = this.props;\n if (onSearch) {\n onSearch(query);\n }\n\n this.setState((previousState) => ({\n keyboardFocusedOptionIndex: previousState.keyboardFocusedOptionIndex === null ? null : 0,\n }));\n };\n\n handleDocumentClick = () => {\n if (this.state.optionsShown) {\n this.hideMenu();\n const { allowNew, onBlur, autoFillOnBlur } = this.props;\n const { query } = this.state;\n this.setState({\n isFocused: false,\n });\n if (allowNew && autoFillOnBlur && query.trim()) {\n this.selectItem({ label: query });\n }\n\n if (onBlur) {\n onBlur();\n }\n }\n };\n\n showMenu = () => {\n this.setState(\n {\n isFocused: true,\n optionsShown: true,\n },\n () => {\n addClickClassToDocumentOnIos();\n document.addEventListener('click', this.handleDocumentClick, false);\n },\n );\n };\n\n hideMenu = () => {\n this.setState(\n {\n optionsShown: false,\n keyboardFocusedOptionIndex: null,\n },\n () => {\n removeClickClassFromDocumentOnIos();\n document.removeEventListener('click', this.handleDocumentClick, false);\n },\n );\n };\n\n updateSelectedValue = (selected: readonly TypeaheadOption<T>[]) => {\n const { onChange, validateChip } = this.props;\n\n const errorState = selected.some((chip) => !validateChip(chip));\n this.setState({ selected, errorState }, () => {\n onChange([...selected]);\n });\n };\n\n clear = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n if (this.state.selected.length > 0) {\n this.updateSelectedValue([]);\n }\n\n this.setState({\n query: '',\n });\n };\n\n removeChip = (option: TypeaheadOption<T>) => {\n const { selected } = this.state;\n\n if (selected.length > 0) {\n this.updateSelectedValue([...selected.filter((selectedOption) => selectedOption !== option)]);\n }\n };\n\n renderChip = (option: TypeaheadOption<T>, idx: number): ReactNode => {\n const { disabled } = this.props;\n const valid = this.props.validateChip?.(option);\n\n return (\n <Chip\n key={idx}\n label={option.label}\n className={clsx('m-t-1', {\n 'has-error': !valid,\n 'np-chip--valid': valid,\n })}\n disabled={disabled}\n onRemove={disabled ? undefined : () => this.removeChip(option)}\n />\n );\n };\n\n renderMenu = ({\n footer,\n options,\n id,\n keyboardFocusedOptionIndex,\n query,\n allowNew,\n showNewEntry,\n dropdownOpen,\n }: Pick<\n TypeaheadPropsWithInputAttributes<T>,\n 'footer' | 'options' | 'id' | 'allowNew' | 'showNewEntry'\n > &\n Pick<TypeaheadState<T>, 'keyboardFocusedOptionIndex' | 'query'> & {\n dropdownOpen: boolean;\n }) => {\n const optionsToRender = [...options];\n if (\n allowNew &&\n query.trim() &&\n options.every((option) => option.label.trim().toUpperCase() !== query.trim().toUpperCase()) &&\n showNewEntry\n ) {\n optionsToRender.push({\n label: query,\n });\n }\n return (\n <div className={clsx('dropdown btn-group btn-block', { open: dropdownOpen })}>\n {(!!optionsToRender.length || footer) && (\n <ul\n className=\"dropdown-menu\"\n id={`menu-${id}`}\n role=\"listbox\"\n aria-label={this.props?.intl?.formatMessage(messages.suggestionsLabel)}\n tabIndex={0}\n onKeyDown={this.handleOptionListKeyDown}\n >\n {optionsToRender.map((option, idx) => {\n const ref = React.createRef<HTMLLIElement>();\n this.optionRefs[idx] = ref;\n return (\n <TypeaheadOption\n key={`${option.label}${idx.toString()}`}\n ref={ref}\n query={query}\n option={option}\n selected={keyboardFocusedOptionIndex === idx}\n id={`${id}-${idx}`}\n onMouseEnter={() => this.setFocusedOption(idx)}\n onClick={(event) => {\n this.onOptionSelected(event, option);\n }}\n />\n );\n })}\n {footer}\n </ul>\n )}\n </div>\n );\n };\n\n render() {\n const {\n inputAttributes,\n id: idProp,\n placeholder,\n multiple,\n size,\n addon,\n name,\n clearable,\n disabled,\n allowNew,\n footer,\n showSuggestions,\n showNewEntry,\n options,\n minQueryLength,\n autoFocus,\n maxHeight,\n alert,\n inputAutoComplete,\n } = this.props;\n const id = idProp ?? inputAttributes?.id;\n\n const { errorState, query, selected, optionsShown, keyboardFocusedOptionIndex } = this.state;\n\n const clearButton = !disabled && clearable && (query || selected.length > 0);\n\n const dropdownOpen =\n !disabled && optionsShown && showSuggestions && query.length >= minQueryLength;\n\n const menu = this.renderMenu({\n footer,\n options,\n id,\n keyboardFocusedOptionIndex,\n query,\n allowNew,\n showNewEntry,\n dropdownOpen,\n });\n\n const alertType = (() => {\n if (!alert?.type || alert.type === Sentiment.INFO) {\n return Sentiment.NEUTRAL;\n }\n if (alert.type === Sentiment.ERROR) {\n return Sentiment.NEGATIVE;\n }\n if (alert.type === Sentiment.SUCCESS) {\n return Sentiment.POSITIVE;\n }\n return alert.type;\n })();\n const hasError = errorState || (alert && alertType === Sentiment.NEGATIVE);\n const displayAlert = (!errorState && alert) || (alert && alertType === Sentiment.NEGATIVE);\n const hasWarning = displayAlert && alertType === Sentiment.WARNING;\n const hasInfo = displayAlert && alertType === Sentiment.NEUTRAL;\n return (\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */\n <div\n role=\"group\"\n {...inputAttributes}\n id={id}\n className={clsx('typeahead', `typeahead-${size}`, {\n 'typeahead--has-value': selected.length > 0,\n 'typeahead--empty': selected.length === 0,\n 'typeahead--multiple': multiple,\n open: dropdownOpen,\n })}\n onClick={stopPropagation}\n >\n <div\n className={clsx('form-group', 'form-group--typeahead', {\n 'has-error': hasError,\n 'has-warning': hasWarning,\n 'has-info': hasInfo,\n })}\n >\n <div\n className={clsx(`input-group input-group-${size}`, {\n 'input-group--has-error': hasError,\n disabled,\n })}\n >\n {addon && <span className=\"input-group-addon input-group-addon--search\">{addon}</span>}\n\n <TypeaheadInput\n {...{\n autoFocus,\n disabled,\n multiple,\n dropdownOpen,\n placeholder,\n selected,\n maxHeight,\n }}\n id={id}\n name={name}\n value={query}\n typeaheadId={id}\n renderChip={this.renderChip}\n autoComplete={inputAutoComplete}\n ariaActivedescendant={\n keyboardFocusedOptionIndex !== null && options[keyboardFocusedOptionIndex]\n ? `option-${id}-${keyboardFocusedOptionIndex}`\n : undefined\n }\n onChange={this.handleOnChange}\n onKeyDown={this.handleOnKeyDown}\n onFocus={this.handleOnFocus}\n onPaste={this.handleOnPaste}\n />\n\n {clearButton && (\n <div className=\"input-group-addon\">\n <button\n type=\"button\"\n className=\"btn-unstyled\"\n aria-label={this.props?.intl?.formatMessage(messages.clearLabel)}\n onClick={this.clear}\n >\n <CrossIcon />\n </button>\n </div>\n )}\n </div>\n {displayAlert ? (\n <InlinePrompt sentiment={alertType} className=\"typeahead--prompt\" width=\"full\">\n {alert.message}\n </InlinePrompt>\n ) : (\n menu\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default injectIntl(withInputAttributes(Typeahead, { nonLabelable: true })) as <T>(\n props: TypeaheadProps<T>,\n) => React.ReactElement;\n"],"names":["DEFAULT_MIN_QUERY_LENGTH","SEARCH_DELAY","Typeahead","Component","defaultProps","allowNew","autoFillOnBlur","autoFocus","chipSeparators","clearable","disabled","initialValue","inputAutoComplete","minQueryLength","multiple","searchDelay","showSuggestions","showNewEntry","size","Size","MEDIUM","validateChip","optionRefs","constructor","props","handleSearchDebounced","debounce","handleSearch","initialQuery","length","label","state","selected","errorState","query","keyboardFocusedOptionIndex","optionsShown","isFocused","UNSAFE_componentWillReceiveProps","nextProps","setState","previousState","componentDidUpdate","previousProps","hideMenu","componentWillUnmount","cancel","handleOnFocus","showMenu","onFocus","onOptionSelected","event","item","preventDefault","selectItem","handleOnChange","onInputChange","target","value","updateSelectedValue","handleOnPaste","clipboardData","getData","regex","RegExp","join","pastedChips","split","map","trim","filter","chip","handleOnKeyDown","chipsMode","includes","key","handleOptionNavigation","slice","handleOptionListKeyDown","options","moveFocusedOption","offset","index","clamp","optionRef","current","scrollIntoView","block","setFocusedOption","push","keepFocusOnSelect","clearQueryOnSelect","onSearch","handleDocumentClick","onBlur","addClickClassToDocumentOnIos","document","addEventListener","removeClickClassFromDocumentOnIos","removeEventListener","onChange","some","clear","removeChip","option","selectedOption","renderChip","idx","valid","_jsx","Chip","className","clsx","onRemove","undefined","renderMenu","footer","id","dropdownOpen","optionsToRender","every","toUpperCase","open","children","_jsxs","role","intl","formatMessage","messages","suggestionsLabel","tabIndex","onKeyDown","ref","React","createRef","TypeaheadOption","onMouseEnter","onClick","toString","render","inputAttributes","idProp","placeholder","addon","name","maxHeight","alert","clearButton","menu","alertType","type","Sentiment","INFO","NEUTRAL","ERROR","NEGATIVE","SUCCESS","POSITIVE","hasError","displayAlert","hasWarning","WARNING","hasInfo","stopPropagation","TypeaheadInput","typeaheadId","autoComplete","ariaActivedescendant","onPaste","clearLabel","CrossIcon","InlinePrompt","sentiment","width","message","injectIntl","withInputAttributes","nonLabelable"],"mappings":"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"}
@@ -57,6 +57,7 @@ class Typeahead extends Component {
57
57
  autoFocus: false,
58
58
  chipSeparators: [],
59
59
  clearable: true,
60
+ disabled: false,
60
61
  initialValue: [],
61
62
  inputAutoComplete: 'new-password',
62
63
  minQueryLength: DEFAULT_MIN_QUERY_LENGTH,
@@ -107,6 +108,11 @@ class Typeahead extends Component {
107
108
  });
108
109
  }
109
110
  }
111
+ componentDidUpdate(previousProps) {
112
+ if (this.props.disabled && !previousProps.disabled) {
113
+ this.hideMenu();
114
+ }
115
+ }
110
116
  componentWillUnmount() {
111
117
  this.handleSearchDebounced.cancel();
112
118
  }
@@ -362,6 +368,9 @@ class Typeahead extends Component {
362
368
  }
363
369
  };
364
370
  renderChip = (option, idx) => {
371
+ const {
372
+ disabled
373
+ } = this.props;
365
374
  const valid = this.props.validateChip?.(option);
366
375
  return /*#__PURE__*/jsx(Chip, {
367
376
  label: option.label,
@@ -369,7 +378,8 @@ class Typeahead extends Component {
369
378
  'has-error': !valid,
370
379
  'np-chip--valid': valid
371
380
  }),
372
- onRemove: () => this.removeChip(option)
381
+ disabled: disabled,
382
+ onRemove: disabled ? undefined : () => this.removeChip(option)
373
383
  }, idx);
374
384
  };
375
385
  renderMenu = ({
@@ -427,6 +437,7 @@ class Typeahead extends Component {
427
437
  addon,
428
438
  name,
429
439
  clearable,
440
+ disabled,
430
441
  allowNew,
431
442
  footer,
432
443
  showSuggestions,
@@ -446,8 +457,8 @@ class Typeahead extends Component {
446
457
  optionsShown,
447
458
  keyboardFocusedOptionIndex
448
459
  } = this.state;
449
- const clearButton = clearable && (query || selected.length > 0);
450
- const dropdownOpen = optionsShown && showSuggestions && query.length >= minQueryLength;
460
+ const clearButton = !disabled && clearable && (query || selected.length > 0);
461
+ const dropdownOpen = !disabled && optionsShown && showSuggestions && query.length >= minQueryLength;
451
462
  const menu = this.renderMenu({
452
463
  footer,
453
464
  options,
@@ -493,13 +504,15 @@ class Typeahead extends Component {
493
504
  }),
494
505
  children: [/*#__PURE__*/jsxs("div", {
495
506
  className: clsx(`input-group input-group-${size}`, {
496
- 'input-group--has-error': hasError
507
+ 'input-group--has-error': hasError,
508
+ disabled
497
509
  }),
498
510
  children: [addon && /*#__PURE__*/jsx("span", {
499
511
  className: "input-group-addon input-group-addon--search",
500
512
  children: addon
501
513
  }), /*#__PURE__*/jsx(TypeaheadInput, {
502
514
  autoFocus,
515
+ disabled,
503
516
  multiple,
504
517
  dropdownOpen,
505
518
  placeholder,