@pega/cosmos-react-core 10.0.0-build.4.2 → 10.0.0-build.4.21

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 (253) hide show
  1. package/lib/components/AppShell/AppHeader.d.ts.map +1 -1
  2. package/lib/components/AppShell/AppHeader.js +44 -7
  3. package/lib/components/AppShell/AppHeader.js.map +1 -1
  4. package/lib/components/AppShell/AppHeader.styles.d.ts +6 -2
  5. package/lib/components/AppShell/AppHeader.styles.d.ts.map +1 -1
  6. package/lib/components/AppShell/AppHeader.styles.js +36 -18
  7. package/lib/components/AppShell/AppHeader.styles.js.map +1 -1
  8. package/lib/components/AppShell/AppNavigationPanel.js +1 -1
  9. package/lib/components/AppShell/AppNavigationPanel.js.map +1 -1
  10. package/lib/components/AppShell/AppShell.d.ts.map +1 -1
  11. package/lib/components/AppShell/AppShell.js +27 -9
  12. package/lib/components/AppShell/AppShell.js.map +1 -1
  13. package/lib/components/AppShell/AppShellContext.d.ts +1 -0
  14. package/lib/components/AppShell/AppShellContext.d.ts.map +1 -1
  15. package/lib/components/AppShell/AppShellContext.js +1 -0
  16. package/lib/components/AppShell/AppShellContext.js.map +1 -1
  17. package/lib/components/AppShell/AppShellList.js +1 -1
  18. package/lib/components/AppShell/AppShellList.js.map +1 -1
  19. package/lib/components/AppShell/NavigationList.d.ts.map +1 -1
  20. package/lib/components/AppShell/NavigationList.js +3 -2
  21. package/lib/components/AppShell/NavigationList.js.map +1 -1
  22. package/lib/components/AppShell/NavigationListItemWrapper.d.ts.map +1 -1
  23. package/lib/components/AppShell/NavigationListItemWrapper.js +87 -48
  24. package/lib/components/AppShell/NavigationListItemWrapper.js.map +1 -1
  25. package/lib/components/Avatar/Avatar.d.ts +1 -1
  26. package/lib/components/Avatar/Avatar.d.ts.map +1 -1
  27. package/lib/components/Avatar/Avatar.js.map +1 -1
  28. package/lib/components/Badges/Selection.js +1 -1
  29. package/lib/components/Badges/Selection.js.map +1 -1
  30. package/lib/components/ComboBox/ComboBox.d.ts.map +1 -1
  31. package/lib/components/ComboBox/ComboBox.js +3 -6
  32. package/lib/components/ComboBox/ComboBox.js.map +1 -1
  33. package/lib/components/ComboBox/ComboBox.styles.d.ts.map +1 -1
  34. package/lib/components/ComboBox/ComboBox.styles.js +9 -1
  35. package/lib/components/ComboBox/ComboBox.styles.js.map +1 -1
  36. package/lib/components/ComboBox/ComboBoxInput.d.ts +0 -2
  37. package/lib/components/ComboBox/ComboBoxInput.d.ts.map +1 -1
  38. package/lib/components/ComboBox/ComboBoxInput.js +2 -2
  39. package/lib/components/ComboBox/ComboBoxInput.js.map +1 -1
  40. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.d.ts +4 -6
  41. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.d.ts.map +1 -1
  42. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.js +96 -189
  43. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.js.map +1 -1
  44. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.styles.d.ts +190 -0
  45. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.styles.d.ts.map +1 -0
  46. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.styles.js +72 -0
  47. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.styles.js.map +1 -0
  48. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.types.d.ts +0 -2
  49. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.types.d.ts.map +1 -1
  50. package/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.types.js.map +1 -1
  51. package/lib/components/Configuration/Configuration.d.ts.map +1 -1
  52. package/lib/components/Configuration/Configuration.js +3 -1
  53. package/lib/components/Configuration/Configuration.js.map +1 -1
  54. package/lib/components/Currency/CurrencyInput.d.ts.map +1 -1
  55. package/lib/components/Currency/CurrencyInput.js +19 -12
  56. package/lib/components/Currency/CurrencyInput.js.map +1 -1
  57. package/lib/components/Currency/utils.d.ts +8 -0
  58. package/lib/components/Currency/utils.d.ts.map +1 -1
  59. package/lib/components/Currency/utils.js +34 -4
  60. package/lib/components/Currency/utils.js.map +1 -1
  61. package/lib/components/DateTime/DateTimeDisplay.d.ts +2 -2
  62. package/lib/components/DateTime/DateTimeDisplay.d.ts.map +1 -1
  63. package/lib/components/DateTime/DateTimeDisplay.js +29 -4
  64. package/lib/components/DateTime/DateTimeDisplay.js.map +1 -1
  65. package/lib/components/DateTime/Input/DateInput.d.ts.map +1 -1
  66. package/lib/components/DateTime/Input/DateInput.js +7 -7
  67. package/lib/components/DateTime/Input/DateInput.js.map +1 -1
  68. package/lib/components/DateTime/Input/DateRangeInput.d.ts.map +1 -1
  69. package/lib/components/DateTime/Input/DateRangeInput.js +8 -2
  70. package/lib/components/DateTime/Input/DateRangeInput.js.map +1 -1
  71. package/lib/components/DateTime/Input/DateTimeInput.d.ts +1 -1
  72. package/lib/components/DateTime/Input/DateTimeInput.d.ts.map +1 -1
  73. package/lib/components/DateTime/Input/DateTimeInput.js +8 -8
  74. package/lib/components/DateTime/Input/DateTimeInput.js.map +1 -1
  75. package/lib/components/DateTime/Input/MonthInput.js +2 -2
  76. package/lib/components/DateTime/Input/MonthInput.js.map +1 -1
  77. package/lib/components/DateTime/Input/QuarterInput.js +2 -2
  78. package/lib/components/DateTime/Input/QuarterInput.js.map +1 -1
  79. package/lib/components/DateTime/Input/TimeInput.d.ts.map +1 -1
  80. package/lib/components/DateTime/Input/TimeInput.js +3 -3
  81. package/lib/components/DateTime/Input/TimeInput.js.map +1 -1
  82. package/lib/components/DateTime/Input/TimeRangeInput.d.ts.map +1 -1
  83. package/lib/components/DateTime/Input/TimeRangeInput.js +12 -4
  84. package/lib/components/DateTime/Input/TimeRangeInput.js.map +1 -1
  85. package/lib/components/DateTime/Input/WeekInput.d.ts.map +1 -1
  86. package/lib/components/DateTime/Input/WeekInput.js +2 -2
  87. package/lib/components/DateTime/Input/WeekInput.js.map +1 -1
  88. package/lib/components/DateTime/Input/utils.d.ts +6 -0
  89. package/lib/components/DateTime/Input/utils.d.ts.map +1 -1
  90. package/lib/components/DateTime/Input/utils.js +47 -0
  91. package/lib/components/DateTime/Input/utils.js.map +1 -1
  92. package/lib/components/DateTime/utils.d.ts +15 -4
  93. package/lib/components/DateTime/utils.d.ts.map +1 -1
  94. package/lib/components/DateTime/utils.js +24 -3
  95. package/lib/components/DateTime/utils.js.map +1 -1
  96. package/lib/components/Dialog/InfoDialogWrapper.d.ts +4 -0
  97. package/lib/components/Dialog/InfoDialogWrapper.d.ts.map +1 -0
  98. package/lib/components/Dialog/InfoDialogWrapper.js +13 -0
  99. package/lib/components/Dialog/InfoDialogWrapper.js.map +1 -0
  100. package/lib/components/Dialog/TouchDialog.d.ts +5 -0
  101. package/lib/components/Dialog/TouchDialog.d.ts.map +1 -0
  102. package/lib/components/Dialog/TouchDialog.js +85 -0
  103. package/lib/components/Dialog/TouchDialog.js.map +1 -0
  104. package/lib/components/Dialog/TouchDialog.styles.d.ts +7 -0
  105. package/lib/components/Dialog/TouchDialog.styles.d.ts.map +1 -0
  106. package/lib/components/Dialog/TouchDialog.styles.js +62 -0
  107. package/lib/components/Dialog/TouchDialog.styles.js.map +1 -0
  108. package/lib/components/Dialog/TouchDialog.test-ids.d.ts +2 -0
  109. package/lib/components/Dialog/TouchDialog.test-ids.d.ts.map +1 -0
  110. package/lib/components/Dialog/TouchDialog.test-ids.js +3 -0
  111. package/lib/components/Dialog/TouchDialog.test-ids.js.map +1 -0
  112. package/lib/components/Dialog/TouchDialog.types.d.ts +42 -0
  113. package/lib/components/Dialog/TouchDialog.types.d.ts.map +1 -0
  114. package/lib/components/Dialog/TouchDialog.types.js +2 -0
  115. package/lib/components/Dialog/TouchDialog.types.js.map +1 -0
  116. package/lib/components/Dialog/TouchInfoDialog.d.ts +4 -0
  117. package/lib/components/Dialog/TouchInfoDialog.d.ts.map +1 -0
  118. package/lib/components/Dialog/TouchInfoDialog.js +14 -0
  119. package/lib/components/Dialog/TouchInfoDialog.js.map +1 -0
  120. package/lib/components/Dialog/index.d.ts +4 -1
  121. package/lib/components/Dialog/index.d.ts.map +1 -1
  122. package/lib/components/Dialog/index.js +3 -1
  123. package/lib/components/Dialog/index.js.map +1 -1
  124. package/lib/components/FieldGroup/FieldGroup.d.ts +12 -7
  125. package/lib/components/FieldGroup/FieldGroup.d.ts.map +1 -1
  126. package/lib/components/FieldGroup/FieldGroup.js +28 -25
  127. package/lib/components/FieldGroup/FieldGroup.js.map +1 -1
  128. package/lib/components/FieldGroup/FieldGroupList.js +1 -1
  129. package/lib/components/FieldGroup/FieldGroupList.js.map +1 -1
  130. package/lib/components/FieldValueList/FieldValueList.d.ts +3 -1
  131. package/lib/components/FieldValueList/FieldValueList.d.ts.map +1 -1
  132. package/lib/components/FieldValueList/FieldValueList.js +15 -6
  133. package/lib/components/FieldValueList/FieldValueList.js.map +1 -1
  134. package/lib/components/File/CompactList.js +1 -1
  135. package/lib/components/File/CompactList.js.map +1 -1
  136. package/lib/components/File/FileItem.d.ts +38 -0
  137. package/lib/components/File/FileItem.d.ts.map +1 -1
  138. package/lib/components/File/FileItem.js +167 -23
  139. package/lib/components/File/FileItem.js.map +1 -1
  140. package/lib/components/File/FileList.d.ts.map +1 -1
  141. package/lib/components/File/FileList.js +6 -2
  142. package/lib/components/File/FileList.js.map +1 -1
  143. package/lib/components/File/index.d.ts +1 -1
  144. package/lib/components/File/index.d.ts.map +1 -1
  145. package/lib/components/File/index.js.map +1 -1
  146. package/lib/components/File/mimeTypes.json +1 -0
  147. package/lib/components/FormField/FormField.d.ts +9 -1
  148. package/lib/components/FormField/FormField.d.ts.map +1 -1
  149. package/lib/components/FormField/FormField.js +26 -10
  150. package/lib/components/FormField/FormField.js.map +1 -1
  151. package/lib/components/Icon/Icon.d.ts +5 -0
  152. package/lib/components/Icon/Icon.d.ts.map +1 -1
  153. package/lib/components/Icon/Icon.js +44 -4
  154. package/lib/components/Icon/Icon.js.map +1 -1
  155. package/lib/components/Icon/iconNames.d.ts +1 -0
  156. package/lib/components/Icon/iconNames.d.ts.map +1 -1
  157. package/lib/components/Icon/iconNames.js +1 -0
  158. package/lib/components/Icon/iconNames.js.map +1 -1
  159. package/lib/components/Icon/icons/search-solid.icon.d.ts +1 -1
  160. package/lib/components/Icon/icons/search-solid.icon.js +3 -3
  161. package/lib/components/Icon/icons/search-solid.icon.js.map +1 -1
  162. package/lib/components/Icon/streamlineIconNames.d.ts +1 -0
  163. package/lib/components/Icon/streamlineIconNames.d.ts.map +1 -1
  164. package/lib/components/Icon/streamlineIconNames.js +1 -0
  165. package/lib/components/Icon/streamlineIconNames.js.map +1 -1
  166. package/lib/components/Link/Link.d.ts +6 -13
  167. package/lib/components/Link/Link.d.ts.map +1 -1
  168. package/lib/components/Link/Link.js.map +1 -1
  169. package/lib/components/ListToolbar/ListToolbar.d.ts.map +1 -1
  170. package/lib/components/ListToolbar/ListToolbar.js +1 -1
  171. package/lib/components/ListToolbar/ListToolbar.js.map +1 -1
  172. package/lib/components/ListToolbar/PresetMenuPopover.d.ts.map +1 -1
  173. package/lib/components/ListToolbar/PresetMenuPopover.js +16 -5
  174. package/lib/components/ListToolbar/PresetMenuPopover.js.map +1 -1
  175. package/lib/components/MenuButton/MenuButton.d.ts.map +1 -1
  176. package/lib/components/MenuButton/MenuButton.js +33 -7
  177. package/lib/components/MenuButton/MenuButton.js.map +1 -1
  178. package/lib/components/MultiStepForm/FormProgress.styles.d.ts +25 -1
  179. package/lib/components/MultiStepForm/FormProgress.styles.d.ts.map +1 -1
  180. package/lib/components/MultiStepForm/FormProgress.styles.js +168 -5
  181. package/lib/components/MultiStepForm/FormProgress.styles.js.map +1 -1
  182. package/lib/components/MultiStepForm/HorizontalFormProgress.d.ts +2 -2
  183. package/lib/components/MultiStepForm/HorizontalFormProgress.d.ts.map +1 -1
  184. package/lib/components/MultiStepForm/HorizontalFormProgress.js +48 -22
  185. package/lib/components/MultiStepForm/HorizontalFormProgress.js.map +1 -1
  186. package/lib/components/MultiStepForm/MultiStepForm.d.ts.map +1 -1
  187. package/lib/components/MultiStepForm/MultiStepForm.js +2 -2
  188. package/lib/components/MultiStepForm/MultiStepForm.js.map +1 -1
  189. package/lib/components/MultiStepForm/MultiStepForm.types.d.ts +5 -0
  190. package/lib/components/MultiStepForm/MultiStepForm.types.d.ts.map +1 -1
  191. package/lib/components/MultiStepForm/MultiStepForm.types.js.map +1 -1
  192. package/lib/components/MultiStepForm/VerticalFormProgress.d.ts +2 -2
  193. package/lib/components/MultiStepForm/VerticalFormProgress.d.ts.map +1 -1
  194. package/lib/components/MultiStepForm/VerticalFormProgress.js +45 -20
  195. package/lib/components/MultiStepForm/VerticalFormProgress.js.map +1 -1
  196. package/lib/components/MultiStepForm/useFormProgressOverflow.d.ts +1 -1
  197. package/lib/components/MultiStepForm/useFormProgressOverflow.d.ts.map +1 -1
  198. package/lib/components/MultiStepForm/useFormProgressOverflow.js +17 -9
  199. package/lib/components/MultiStepForm/useFormProgressOverflow.js.map +1 -1
  200. package/lib/components/Number/utils.js +1 -1
  201. package/lib/components/Number/utils.js.map +1 -1
  202. package/lib/components/PageTemplates/PageTemplates.js +1 -1
  203. package/lib/components/PageTemplates/PageTemplates.js.map +1 -1
  204. package/lib/components/RadioCheckGroup/RadioCheckGroup.d.ts.map +1 -1
  205. package/lib/components/RadioCheckGroup/RadioCheckGroup.js +1 -1
  206. package/lib/components/RadioCheckGroup/RadioCheckGroup.js.map +1 -1
  207. package/lib/components/SelectionCard/SelectionCard.d.ts +1 -1
  208. package/lib/components/SelectionCard/SelectionCard.d.ts.map +1 -1
  209. package/lib/components/SelectionCard/SelectionCard.js +3 -3
  210. package/lib/components/SelectionCard/SelectionCard.js.map +1 -1
  211. package/lib/components/SelectionCard/SelectionCardDisplay.d.ts +5 -0
  212. package/lib/components/SelectionCard/SelectionCardDisplay.d.ts.map +1 -1
  213. package/lib/components/SelectionCard/SelectionCardDisplay.js +4 -2
  214. package/lib/components/SelectionCard/SelectionCardDisplay.js.map +1 -1
  215. package/lib/components/SpeechToTextButton/SpeechToTextButton.js +1 -1
  216. package/lib/components/SpeechToTextButton/SpeechToTextButton.js.map +1 -1
  217. package/lib/components/SummaryList/SummaryList.d.ts.map +1 -1
  218. package/lib/components/SummaryList/SummaryList.js +8 -4
  219. package/lib/components/SummaryList/SummaryList.js.map +1 -1
  220. package/lib/components/TextArea/TextArea.d.ts.map +1 -1
  221. package/lib/components/TextArea/TextArea.js +7 -21
  222. package/lib/components/TextArea/TextArea.js.map +1 -1
  223. package/lib/components/TextArea/TextArea.styles.d.ts +0 -1
  224. package/lib/components/TextArea/TextArea.styles.d.ts.map +1 -1
  225. package/lib/components/TextArea/TextArea.styles.js +1 -2
  226. package/lib/components/TextArea/TextArea.styles.js.map +1 -1
  227. package/lib/hooks/useI18n.d.ts +13 -9
  228. package/lib/hooks/useI18n.d.ts.map +1 -1
  229. package/lib/i18n/default.d.ts +13 -10
  230. package/lib/i18n/default.d.ts.map +1 -1
  231. package/lib/i18n/default.js +16 -12
  232. package/lib/i18n/default.js.map +1 -1
  233. package/lib/i18n/i18n.d.ts +13 -9
  234. package/lib/i18n/i18n.d.ts.map +1 -1
  235. package/lib/styles/GlobalStyle.d.ts.map +1 -1
  236. package/lib/styles/GlobalStyle.js +3 -3
  237. package/lib/styles/GlobalStyle.js.map +1 -1
  238. package/lib/theme/theme.d.ts +48 -0
  239. package/lib/theme/theme.d.ts.map +1 -1
  240. package/lib/theme/themeDefinition.json +26 -0
  241. package/lib/theme/themeOverrides.schema.json +36 -0
  242. package/lib/theme/themes/aurigaDarkTheme.json +54 -61
  243. package/lib/theme/themes/aurigaTheme.json +49 -56
  244. package/lib/theme/themes/virgoTheme.json +3 -3
  245. package/lib/utils/index.d.ts +1 -0
  246. package/lib/utils/index.d.ts.map +1 -1
  247. package/lib/utils/index.js +1 -0
  248. package/lib/utils/index.js.map +1 -1
  249. package/lib/utils/isTouchDevice.d.ts +3 -0
  250. package/lib/utils/isTouchDevice.d.ts.map +1 -0
  251. package/lib/utils/isTouchDevice.js +4 -0
  252. package/lib/utils/isTouchDevice.js.map +1 -0
  253. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.styles.d.ts","sourceRoot":"","sources":["../../../src/components/ComboBox/ComboBox.styles.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB;;2JA+B/B,CAAC;AAIH,eAAO,MAAM,iBAAiB,6NAoD5B,CAAC;AAIH,eAAO,MAAM,cAAc;;;;mBAkBzB,CAAC"}
1
+ {"version":3,"file":"ComboBox.styles.d.ts","sourceRoot":"","sources":["../../../src/components/ComboBox/ComboBox.styles.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB;;2JA+B/B,CAAC;AAIH,eAAO,MAAM,iBAAiB,6NA4D5B,CAAC;AAIH,eAAO,MAAM,cAAc;;;;mBAkBzB,CAAC"}
@@ -40,8 +40,16 @@ export const StyledDropdownButton = styled(Button)(({ theme }) => {
40
40
  StyledDropdownButton.defaultProps = defaultThemeProp;
41
41
  export const StyledSelectInput = styled.div(({ theme: { base, components } }) => {
42
42
  return css `
43
+ height: ${components.input.height};
44
+ max-height: ${components.input.height};
45
+
46
+ /* Clip overflowing content, but leave room for a focus ring. */
47
+ overflow: clip;
48
+ overflow-clip-margin: 0.3rem;
49
+
43
50
  @media (pointer: coarse) {
44
- min-height: ${base['hit-area']['finger-min']};
51
+ height: ${base['hit-area']['finger-min']};
52
+ max-height: ${base['hit-area']['finger-min']};
45
53
  }
46
54
 
47
55
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.styles.js","sourceRoot":"","sources":["../../../src/components/ComboBox/ComboBox.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/D,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,uBAAuB,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAElF,OAAO,GAAG,CAAA;;;;;;oCAMwB,gBAAgB,MAAM,uBAAuB;;kCAE/C,gBAAgB,MAAM,uBAAuB;;;;;;;iCAO9C,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;;eAElE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;0BACrC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;;8BAE5C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI;;;;;;GAMzF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oBAAoB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;IAC9E,OAAO,GAAG,CAAA;;oBAEQ,IAAI,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC;;;;;;;;cAQpC,cAAc,KAAK,cAAc;;UAErC,UAAU,CAAC,KAAK,CAAC,MAAM,UAAU,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;;;;MAI/E,kBAAkB;oBACJ,UAAU,CAAC,KAAK,CAAC,MAAM;qBACtB,UAAU,CAAC,KAAK,CAAC,MAAM;;;;sBAItB,UAAU,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC;oBACtD,UAAU,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;;;;;;;;;;qBAUjD,UAAU,CAAC,KAAK,CAAC,MAAM,UAAU,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;eACjF,UAAU,CAAC,cAAc,CAAC,CAAC,kBAAkB,CAAC;;wBAErC,IAAI,CAAC,OAAO;;;;;;;;;;;;;;GAcjC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,iBAAiB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE;IAC3D,OAAO,GAAG,CAAA;;;;;;;MAON,aAAa;;;;QAIX,UAAU;QACV,qBAAqB;;;;GAI1B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,cAAc,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { css } from 'styled-components';\n\nimport { defaultThemeProp } from '../../theme';\nimport Button from '../Button';\nimport { StyledFormControl } from '../FormControl';\nimport { StyledPopover } from '../Popover';\nimport { StyledMenu, StyledMenuListWrapper } from '../Menu/Menu.styles';\nimport { StyledBackdrop } from '../Backdrop';\nimport { StyledProgressRing } from '../Progress';\n\nexport const StyledDropdownButton = styled(Button)(({ theme }) => {\n const baseBorderRadius = theme.base['border-radius'];\n const formControlBorderRadius = theme.components['form-control']['border-radius'];\n\n return css`\n align-self: stretch;\n height: auto;\n margin-block: -0.0625rem;\n margin-inline-end: -0.0625rem;\n border-start-start-radius: 0;\n border-start-end-radius: calc(${baseBorderRadius} * ${formControlBorderRadius});\n border-end-start-radius: 0;\n border-end-end-radius: calc(${baseBorderRadius} * ${formControlBorderRadius});\n\n &::after {\n content: '';\n pointer-events: none;\n position: absolute;\n z-index: 1;\n inset-inline-start: calc(${theme.components['form-control']['border-width']} * -1);\n inset-block: 0;\n width: ${theme.components['form-control']['border-width']};\n background-color: ${theme.components['form-control']['border-color']};\n transform: scaleY(0.5);\n transition: transform ${theme.base.animation.speed} ${theme.base.animation.timing.ease};\n }\n\n &:hover::after {\n transform: scaleY(1);\n }\n `;\n});\n\nStyledDropdownButton.defaultProps = defaultThemeProp;\n\nexport const StyledSelectInput = styled.div(({ theme: { base, components } }) => {\n return css`\n @media (pointer: coarse) {\n min-height: ${base['hit-area']['finger-min']};\n }\n\n /*\n FIXME\n :not selectors needed to prevent greedy div selector affecting Progress styles.\n Best if div could be more targeted to specific classes.\n */\n div:not(${StyledBackdrop}, ${StyledBackdrop} div) {\n min-height: calc(\n ${components.input.height} - 2 * ${components['form-control']['border-width']}\n );\n }\n\n ${StyledProgressRing} svg {\n width: calc(${components.input.height} - 0.5rem);\n height: calc(${components.input.height} - 0.5rem);\n }\n\n &:focus-within {\n border-color: ${components['form-control'][':focus']['border-color']};\n box-shadow: ${components['form-control'][':focus']['box-shadow']};\n }\n\n &:hover:not([readonly]):not([disabled]):focus-within {\n border-color: transparent;\n }\n\n input {\n min-width: 0;\n width: 100%;\n height: calc(${components.input.height} - 2 * ${components['form-control']['border-width']});\n color: ${components['form-control']['foreground-color']};\n text-overflow: ellipsis;\n padding-inline: ${base.spacing};\n }\n\n input,\n input:focus {\n border: none;\n outline: none;\n flex-grow: 1;\n background-color: transparent;\n\n &:read-only {\n cursor: default;\n }\n }\n `;\n});\n\nStyledSelectInput.defaultProps = defaultThemeProp;\n\nexport const StyledComboBox = styled(StyledFormControl)(() => {\n return css`\n border: 0;\n\n &:focus {\n z-index: 1;\n }\n\n ${StyledPopover} {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n\n ${StyledMenu},\n ${StyledMenuListWrapper} {\n max-height: inherit;\n }\n }\n `;\n});\n\nStyledComboBox.defaultProps = defaultThemeProp;\n"]}
1
+ {"version":3,"file":"ComboBox.styles.js","sourceRoot":"","sources":["../../../src/components/ComboBox/ComboBox.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/D,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,uBAAuB,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAElF,OAAO,GAAG,CAAA;;;;;;oCAMwB,gBAAgB,MAAM,uBAAuB;;kCAE/C,gBAAgB,MAAM,uBAAuB;;;;;;;iCAO9C,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;;eAElE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;0BACrC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;;8BAE5C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI;;;;;;GAMzF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oBAAoB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;IAC9E,OAAO,GAAG,CAAA;cACE,UAAU,CAAC,KAAK,CAAC,MAAM;kBACnB,UAAU,CAAC,KAAK,CAAC,MAAM;;;;;;;gBAOzB,IAAI,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC;oBAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC;;;;;;;;cAQpC,cAAc,KAAK,cAAc;;UAErC,UAAU,CAAC,KAAK,CAAC,MAAM,UAAU,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;;;;MAI/E,kBAAkB;oBACJ,UAAU,CAAC,KAAK,CAAC,MAAM;qBACtB,UAAU,CAAC,KAAK,CAAC,MAAM;;;;sBAItB,UAAU,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC;oBACtD,UAAU,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;;;;;;;;;;qBAUjD,UAAU,CAAC,KAAK,CAAC,MAAM,UAAU,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;eACjF,UAAU,CAAC,cAAc,CAAC,CAAC,kBAAkB,CAAC;;wBAErC,IAAI,CAAC,OAAO;;;;;;;;;;;;;;GAcjC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,iBAAiB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE;IAC3D,OAAO,GAAG,CAAA;;;;;;;MAON,aAAa;;;;QAIX,UAAU;QACV,qBAAqB;;;;GAI1B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,cAAc,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { css } from 'styled-components';\n\nimport { defaultThemeProp } from '../../theme';\nimport Button from '../Button';\nimport { StyledFormControl } from '../FormControl';\nimport { StyledPopover } from '../Popover';\nimport { StyledMenu, StyledMenuListWrapper } from '../Menu/Menu.styles';\nimport { StyledBackdrop } from '../Backdrop';\nimport { StyledProgressRing } from '../Progress';\n\nexport const StyledDropdownButton = styled(Button)(({ theme }) => {\n const baseBorderRadius = theme.base['border-radius'];\n const formControlBorderRadius = theme.components['form-control']['border-radius'];\n\n return css`\n align-self: stretch;\n height: auto;\n margin-block: -0.0625rem;\n margin-inline-end: -0.0625rem;\n border-start-start-radius: 0;\n border-start-end-radius: calc(${baseBorderRadius} * ${formControlBorderRadius});\n border-end-start-radius: 0;\n border-end-end-radius: calc(${baseBorderRadius} * ${formControlBorderRadius});\n\n &::after {\n content: '';\n pointer-events: none;\n position: absolute;\n z-index: 1;\n inset-inline-start: calc(${theme.components['form-control']['border-width']} * -1);\n inset-block: 0;\n width: ${theme.components['form-control']['border-width']};\n background-color: ${theme.components['form-control']['border-color']};\n transform: scaleY(0.5);\n transition: transform ${theme.base.animation.speed} ${theme.base.animation.timing.ease};\n }\n\n &:hover::after {\n transform: scaleY(1);\n }\n `;\n});\n\nStyledDropdownButton.defaultProps = defaultThemeProp;\n\nexport const StyledSelectInput = styled.div(({ theme: { base, components } }) => {\n return css`\n height: ${components.input.height};\n max-height: ${components.input.height};\n\n /* Clip overflowing content, but leave room for a focus ring. */\n overflow: clip;\n overflow-clip-margin: 0.3rem;\n\n @media (pointer: coarse) {\n height: ${base['hit-area']['finger-min']};\n max-height: ${base['hit-area']['finger-min']};\n }\n\n /*\n FIXME\n :not selectors needed to prevent greedy div selector affecting Progress styles.\n Best if div could be more targeted to specific classes.\n */\n div:not(${StyledBackdrop}, ${StyledBackdrop} div) {\n min-height: calc(\n ${components.input.height} - 2 * ${components['form-control']['border-width']}\n );\n }\n\n ${StyledProgressRing} svg {\n width: calc(${components.input.height} - 0.5rem);\n height: calc(${components.input.height} - 0.5rem);\n }\n\n &:focus-within {\n border-color: ${components['form-control'][':focus']['border-color']};\n box-shadow: ${components['form-control'][':focus']['box-shadow']};\n }\n\n &:hover:not([readonly]):not([disabled]):focus-within {\n border-color: transparent;\n }\n\n input {\n min-width: 0;\n width: 100%;\n height: calc(${components.input.height} - 2 * ${components['form-control']['border-width']});\n color: ${components['form-control']['foreground-color']};\n text-overflow: ellipsis;\n padding-inline: ${base.spacing};\n }\n\n input,\n input:focus {\n border: none;\n outline: none;\n flex-grow: 1;\n background-color: transparent;\n\n &:read-only {\n cursor: default;\n }\n }\n `;\n});\n\nStyledSelectInput.defaultProps = defaultThemeProp;\n\nexport const StyledComboBox = styled(StyledFormControl)(() => {\n return css`\n border: 0;\n\n &:focus {\n z-index: 1;\n }\n\n ${StyledPopover} {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n\n ${StyledMenu},\n ${StyledMenuListWrapper} {\n max-height: inherit;\n }\n }\n `;\n});\n\nStyledComboBox.defaultProps = defaultThemeProp;\n"]}
@@ -15,8 +15,6 @@ interface ComboBoxInputProps extends BaseProps {
15
15
  onSelectedFocus?: MultiSelectInputProps['onSelectedFocus'];
16
16
  /** Callback on selected item pseudo blur */
17
17
  onSelectedBlur?: MultiSelectInputProps['onSelectedBlur'];
18
- /** Pause evaluation of selected item descendants */
19
- pauseDescendantEvaluation?: MultiSelectInputProps['pauseDescendantEvaluation'];
20
18
  }
21
19
  declare const ComboBoxInput: FunctionComponent<ComboBoxInputProps & ForwardProps>;
22
20
  export default ComboBoxInput;
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBoxInput.d.ts","sourceRoot":"","sources":["../../../src/components/ComboBox/ComboBoxInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,OAAO,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,UAAU,kBAAmB,SAAQ,SAAS;IAC5C,IAAI,CAAC,EAAE,cAAc,GAAG,eAAe,CAAC;IACxC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,6CAA6C;IAC7C,eAAe,CAAC,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,4CAA4C;IAC5C,cAAc,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACzD,oDAAoD;IACpD,yBAAyB,CAAC,EAAE,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;CAChF;AAED,QAAA,MAAM,aAAa,EAAE,iBAAiB,CAAC,kBAAkB,GAAG,YAAY,CAmCvE,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ComboBoxInput.d.ts","sourceRoot":"","sources":["../../../src/components/ComboBox/ComboBoxInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,OAAO,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,UAAU,kBAAmB,SAAQ,SAAS;IAC5C,IAAI,CAAC,EAAE,cAAc,GAAG,eAAe,CAAC;IACxC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,6CAA6C;IAC7C,eAAe,CAAC,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,4CAA4C;IAC5C,cAAc,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;CAC1D;AAED,QAAA,MAAM,aAAa,EAAE,iBAAiB,CAAC,kBAAkB,GAAG,YAAY,CAiCvE,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -3,8 +3,8 @@ import { forwardRef } from 'react';
3
3
  import SingleSelectInput from './SingleSelectInput/SingleSelectInput';
4
4
  import MultiSelectInput from './MultiSelectInput/MultiSelectInput';
5
5
  const ComboBoxInput = forwardRef(function ComboBoxInput(props, ref) {
6
- const { value, mode, selected, visual, onRemove, onSelectedFocus, onSelectedBlur, pauseDescendantEvaluation, ...restProps } = props;
7
- return mode === 'multi-select' ? (_jsx(MultiSelectInput, { selected: selected, value: value, ref: ref, onRemove: onRemove, onSelectedBlur: onSelectedBlur, onSelectedFocus: onSelectedFocus, pauseDescendantEvaluation: pauseDescendantEvaluation, ...restProps })) : (_jsx(SingleSelectInput, { ref: ref, selected: selected, value: value, visual: visual, ...restProps }));
6
+ const { value, mode, selected, visual, onRemove, onSelectedFocus, onSelectedBlur, ...restProps } = props;
7
+ return mode === 'multi-select' ? (_jsx(MultiSelectInput, { selected: selected, value: value, ref: ref, onRemove: onRemove, onSelectedBlur: onSelectedBlur, onSelectedFocus: onSelectedFocus, ...restProps })) : (_jsx(SingleSelectInput, { ref: ref, selected: selected, value: value, visual: visual, ...restProps }));
8
8
  });
9
9
  export default ComboBoxInput;
10
10
  //# sourceMappingURL=ComboBoxInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBoxInput.js","sourceRoot":"","sources":["../../../src/components/ComboBox/ComboBoxInput.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAMnC,OAAO,iBAAiB,MAAM,uCAAuC,CAAC;AACtE,OAAO,gBAAgB,MAAM,qCAAqC,CAAC;AAoBnE,MAAM,aAAa,GAAyD,UAAU,CACpF,SAAS,aAAa,CAAC,KAA0C,EAAE,GAA0B;IAC3F,MAAM,EACJ,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IAEV,OAAO,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CAC/B,KAAC,gBAAgB,IACf,QAAQ,EAAE,QAAsB,EAChC,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAChC,yBAAyB,EAAE,yBAAyB,KAChD,SAAS,GACb,CACH,CAAC,CAAC,CAAC,CACF,KAAC,iBAAiB,IAChB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAoB,EAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,KACV,SAAS,GACb,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { forwardRef } from 'react';\nimport type { FunctionComponent, Ref, PropsWithoutRef } from 'react';\n\nimport type { BaseProps, ForwardProps } from '../../types';\nimport type { MenuItemProps } from '../Menu/Menu.types';\n\nimport SingleSelectInput from './SingleSelectInput/SingleSelectInput';\nimport MultiSelectInput from './MultiSelectInput/MultiSelectInput';\nimport type { MultiSelectInputProps } from './MultiSelectInput/MultiSelectInput.types';\nimport type ComboBoxProps from './ComboBox.types';\nimport type { Selected } from './ComboBox.types';\n\ninterface ComboBoxInputProps extends BaseProps {\n mode?: 'multi-select' | 'single-select';\n selected?: Selected | Selected[];\n loading?: boolean;\n value?: ComboBoxProps['value'];\n visual?: ComboBoxProps['visual'];\n onRemove?: (id: MenuItemProps['id'], index: number) => void;\n /** Callback on selected item pseudo focus */\n onSelectedFocus?: MultiSelectInputProps['onSelectedFocus'];\n /** Callback on selected item pseudo blur */\n onSelectedBlur?: MultiSelectInputProps['onSelectedBlur'];\n /** Pause evaluation of selected item descendants */\n pauseDescendantEvaluation?: MultiSelectInputProps['pauseDescendantEvaluation'];\n}\n\nconst ComboBoxInput: FunctionComponent<ComboBoxInputProps & ForwardProps> = forwardRef(\n function ComboBoxInput(props: PropsWithoutRef<ComboBoxInputProps>, ref: Ref<HTMLInputElement>) {\n const {\n value,\n mode,\n selected,\n visual,\n onRemove,\n onSelectedFocus,\n onSelectedBlur,\n pauseDescendantEvaluation,\n ...restProps\n } = props;\n\n return mode === 'multi-select' ? (\n <MultiSelectInput\n selected={selected as Selected[]}\n value={value}\n ref={ref}\n onRemove={onRemove}\n onSelectedBlur={onSelectedBlur}\n onSelectedFocus={onSelectedFocus}\n pauseDescendantEvaluation={pauseDescendantEvaluation}\n {...restProps}\n />\n ) : (\n <SingleSelectInput\n ref={ref}\n selected={selected as Selected}\n value={value}\n visual={visual}\n {...restProps}\n />\n );\n }\n);\n\nexport default ComboBoxInput;\n"]}
1
+ {"version":3,"file":"ComboBoxInput.js","sourceRoot":"","sources":["../../../src/components/ComboBox/ComboBoxInput.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAMnC,OAAO,iBAAiB,MAAM,uCAAuC,CAAC;AACtE,OAAO,gBAAgB,MAAM,qCAAqC,CAAC;AAkBnE,MAAM,aAAa,GAAyD,UAAU,CACpF,SAAS,aAAa,CAAC,KAA0C,EAAE,GAA0B;IAC3F,MAAM,EACJ,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,eAAe,EACf,cAAc,EACd,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IAEV,OAAO,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CAC/B,KAAC,gBAAgB,IACf,QAAQ,EAAE,QAAsB,EAChC,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,KAC5B,SAAS,GACb,CACH,CAAC,CAAC,CAAC,CACF,KAAC,iBAAiB,IAChB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAoB,EAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,KACV,SAAS,GACb,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { forwardRef } from 'react';\nimport type { FunctionComponent, Ref, PropsWithoutRef } from 'react';\n\nimport type { BaseProps, ForwardProps } from '../../types';\nimport type { MenuItemProps } from '../Menu/Menu.types';\n\nimport SingleSelectInput from './SingleSelectInput/SingleSelectInput';\nimport MultiSelectInput from './MultiSelectInput/MultiSelectInput';\nimport type { MultiSelectInputProps } from './MultiSelectInput/MultiSelectInput.types';\nimport type ComboBoxProps from './ComboBox.types';\nimport type { Selected } from './ComboBox.types';\n\ninterface ComboBoxInputProps extends BaseProps {\n mode?: 'multi-select' | 'single-select';\n selected?: Selected | Selected[];\n loading?: boolean;\n value?: ComboBoxProps['value'];\n visual?: ComboBoxProps['visual'];\n onRemove?: (id: MenuItemProps['id'], index: number) => void;\n /** Callback on selected item pseudo focus */\n onSelectedFocus?: MultiSelectInputProps['onSelectedFocus'];\n /** Callback on selected item pseudo blur */\n onSelectedBlur?: MultiSelectInputProps['onSelectedBlur'];\n}\n\nconst ComboBoxInput: FunctionComponent<ComboBoxInputProps & ForwardProps> = forwardRef(\n function ComboBoxInput(props: PropsWithoutRef<ComboBoxInputProps>, ref: Ref<HTMLInputElement>) {\n const {\n value,\n mode,\n selected,\n visual,\n onRemove,\n onSelectedFocus,\n onSelectedBlur,\n ...restProps\n } = props;\n\n return mode === 'multi-select' ? (\n <MultiSelectInput\n selected={selected as Selected[]}\n value={value}\n ref={ref}\n onRemove={onRemove}\n onSelectedBlur={onSelectedBlur}\n onSelectedFocus={onSelectedFocus}\n {...restProps}\n />\n ) : (\n <SingleSelectInput\n ref={ref}\n selected={selected as Selected}\n value={value}\n visual={visual}\n {...restProps}\n />\n );\n }\n);\n\nexport default ComboBoxInput;\n"]}
@@ -1,9 +1,7 @@
1
- import type { FunctionComponent } from 'react';
2
- import type { ForwardProps } from '../../../types';
1
+ import type { WithAttributes } from '../../../types';
2
+ import StyledMultiSelectInput from './MultiSelectInput.styles';
3
3
  import type { MultiSelectInputProps } from './MultiSelectInput.types';
4
- export declare const StyledMultiSelectInput: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>, "ref"> & {
5
- ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
6
- }, never>> & string;
7
- declare const MultiSelectInput: FunctionComponent<MultiSelectInputProps & ForwardProps>;
4
+ export { StyledMultiSelectInput };
5
+ declare const MultiSelectInput: import("react").ForwardRefExoticComponent<Omit<WithAttributes<"input", MultiSelectInputProps>, "ref"> & import("react").RefAttributes<HTMLInputElement>>;
8
6
  export default MultiSelectInput;
9
7
  //# sourceMappingURL=MultiSelectInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectInput.d.ts","sourceRoot":"","sources":["../../../../src/components/ComboBox/MultiSelectInput/MultiSelectInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAmD,MAAM,OAAO,CAAC;AAIhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiBnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,eAAO,MAAM,sBAAsB;;mBAYlC,CAAC;AAQF,QAAA,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,qBAAqB,GAAG,YAAY,CA0U7E,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"MultiSelectInput.d.ts","sourceRoot":"","sources":["../../../../src/components/ComboBox/MultiSelectInput/MultiSelectInput.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAgBrD,OAAO,sBAA8C,MAAM,2BAA2B,CAAC;AACvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAKlC,QAAA,MAAM,gBAAgB,0JA2NpB,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -1,202 +1,115 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { forwardRef, useRef, useCallback, useMemo, useState, useEffect } from 'react';
3
- import styled from 'styled-components';
2
+ import { forwardRef, useRef, useCallback, useMemo, useEffect, useState } from 'react';
4
3
  import Progress from '../../Progress';
5
- import { defaultThemeProp } from '../../../theme';
6
4
  import Selectable from '../../Badges/Selection';
7
5
  import { StyledFormControl } from '../../FormControl';
8
6
  import Flex from '../../Flex';
9
- import { useConsolidatedRef, useActiveDescendant, useDirection, useI18n, useUID } from '../../../hooks';
10
- import { cap, isInstance, getActiveElement } from '../../../utils';
7
+ import { useArrows, useConsolidatedRef, useDirection, useFocusWithin, useI18n, useUID } from '../../../hooks';
8
+ import { isInstance, getActiveElement } from '../../../utils';
11
9
  import VisuallyHiddenText from '../../VisuallyHiddenText';
12
- import { StyledSelectInput } from '../ComboBox.styles';
13
- export const StyledMultiSelectInput = styled(StyledSelectInput) `
14
- cursor: text;
15
-
16
- ul {
17
- list-style: none;
18
- display: contents;
19
- }
20
-
21
- input {
22
- width: 8ch;
23
- height: 1.125rem;
24
- }
25
- `;
26
- StyledMultiSelectInput.defaultProps = defaultThemeProp;
27
- const StyledInputWrapper = styled(Flex) `
28
- position: relative;
29
- `;
10
+ import StyledMultiSelectInput, { StyledSelectionRow } from './MultiSelectInput.styles';
11
+ export { StyledMultiSelectInput };
12
+ const scrollIntoViewOptions = { block: 'nearest', inline: 'nearest' };
13
+ const selectionFocusSelector = '[data-selection-focus]';
30
14
  const MultiSelectInput = forwardRef(function MultiSelectInput(props, ref) {
31
- const { selected = [], loading, value, onRemove, onChange, onKeyDown, suggestion, actions, readOnly, disabled, status, placeholder, autoFocus, pauseDescendantEvaluation, onSelectedFocus, onSelectedBlur, 'aria-controls': ariaControls, required, ...restProps } = props;
15
+ const { selected = [], loading, value, onRemove, onChange, onKeyDown, suggestion, actions, readOnly, disabled, status, placeholder, autoFocus, onSelectedFocus, onSelectedBlur, 'aria-controls': ariaControls, required, ...restProps } = props;
32
16
  const t = useI18n();
17
+ const { start } = useDirection();
33
18
  const id = useUID();
34
19
  const inputRef = useConsolidatedRef(ref);
35
20
  const listRef = useRef(null);
36
- const [focusDescendant, setFocusDescendant] = useState(null);
37
- const [activeItemId, setActiveItemId] = useState(null);
38
- const { start, end } = useDirection();
39
- const uadConfig = useMemo(() => ({
40
- focusEl: inputRef.current,
41
- scope: listRef.current,
42
- selector: ':scope > li',
43
- orientation: 'horizontal',
44
- focusReturnEl: focusDescendant,
45
- clearFocusReturn: () => {
46
- setFocusDescendant(null);
47
- },
48
- pauseDescendantEvaluation,
49
- preventInitialScroll: true,
50
- onClick: (el) => {
51
- el.click();
21
+ const isSelectionFocusedRef = useRef(false);
22
+ const [lastFocusedId, setLastFocusedId] = useState();
23
+ const selectionDescriptionId = `${id}-selectionDescription`;
24
+ // Pin the newest selection to the divider
25
+ const revealNewestSelection = useCallback(() => {
26
+ const el = listRef.current;
27
+ if (el && !isSelectionFocusedRef.current)
28
+ el.scrollLeft = el.scrollWidth;
29
+ }, []);
30
+ // On blur, re-pin the newest selection
31
+ const onSelectionFocusChange = useCallback((isFocused) => {
32
+ isSelectionFocusedRef.current = isFocused;
33
+ if (isFocused)
34
+ onSelectedFocus?.();
35
+ else {
36
+ onSelectedBlur?.();
37
+ revealNewestSelection();
52
38
  }
53
- }), [pauseDescendantEvaluation, selected, focusDescendant]);
54
- const { activeDescendant } = useActiveDescendant(uadConfig, [selected]);
55
- const handleSelectedRemoval = useCallback((selectionId, idx) => {
56
- if (!pauseDescendantEvaluation) {
57
- if (idx === selected.length - 1) {
58
- // If removing last selected item
59
- if (selected.length > 1) {
60
- // If other selected items, focus previous
61
- setFocusDescendant(listRef.current?.querySelectorAll(uadConfig.selector)[idx - 1] ||
62
- null);
63
- }
64
- else {
65
- // Blur selected if final only item removed
66
- onSelectedBlur?.();
67
- }
68
- }
69
- else if (selected.length > 1) {
70
- // If not last item removed and other selected items, focus next
71
- setFocusDescendant(listRef.current?.querySelectorAll(uadConfig.selector)[idx + 1] ||
72
- null);
73
- }
74
- }
75
- onRemove?.(selectionId, idx);
76
- inputRef.current?.focus();
77
- }, [selected, onRemove, onSelectedBlur, uadConfig]);
39
+ }, [onSelectedFocus, onSelectedBlur, revealNewestSelection]);
40
+ const isSelectionFocused = useFocusWithin([listRef], onSelectionFocusChange);
41
+ useArrows(listRef, { selector: selectionFocusSelector, dir: 'left-right', cycle: false, updateTabIndex: false }, [selected.length]);
42
+ // Re-pin the newest selection on selection change (add/remove) and on resize.
78
43
  useEffect(() => {
79
- // Maintain active item & prev. val only as it changes.
80
- if (activeDescendant?.id && activeDescendant.id !== activeItemId) {
81
- setActiveItemId(activeDescendant.id);
82
- }
83
- }, [activeDescendant]);
84
- const onListArrowKeyDown = useCallback((e) => {
85
- // Tab (forward) from within the list: move focus to the input
86
- if (e.key === 'Tab' && !e.shiftKey) {
87
- e.preventDefault();
88
- inputRef.current?.focus();
44
+ const el = listRef.current;
45
+ if (!el)
89
46
  return;
90
- }
91
- // Shift+Tab from within the list: exit the combobox entirely
92
- if (e.key === 'Tab' && e.shiftKey) {
93
- const focusables = Array.from(listRef.current?.querySelectorAll('a, button') ?? []);
94
- const elementsToRestore = inputRef.current
95
- ? [...focusables, inputRef.current]
96
- : focusables;
97
- const previousTabIndexes = elementsToRestore.map(el => ({
98
- el,
99
- tabindex: el.getAttribute('tabindex')
100
- }));
101
- elementsToRestore.forEach(el => el.setAttribute('tabindex', '-1'));
102
- requestAnimationFrame(() => {
103
- previousTabIndexes.forEach(({ el, tabindex }) => {
104
- if (tabindex === null) {
105
- el.removeAttribute('tabindex');
106
- }
107
- else {
108
- el.setAttribute('tabindex', tabindex);
109
- }
110
- });
111
- });
112
- return;
113
- }
114
- if (e.key !== `Arrow${cap(start)}` && e.key !== `Arrow${cap(end)}`)
115
- return;
116
- const items = Array.from(listRef.current?.querySelectorAll(uadConfig.selector) ?? []);
117
- const currentIndex = items.findIndex(item => item === getActiveElement() || item.contains(getActiveElement()));
118
- if (currentIndex === -1)
47
+ revealNewestSelection();
48
+ const observer = new ResizeObserver(revealNewestSelection);
49
+ observer.observe(el);
50
+ return () => observer.disconnect();
51
+ }, [selected.length, revealNewestSelection]);
52
+ // Keep a focused selection visible
53
+ useEffect(() => {
54
+ const el = listRef.current;
55
+ if (!el)
119
56
  return;
120
- e.preventDefault();
121
- e.stopPropagation();
122
- if (e.key === `Arrow${cap(start)}` && currentIndex > 0) {
123
- const prev = items[currentIndex - 1];
124
- const prevLink = prev.querySelector('a');
125
- const focusTarget = isInstance(prevLink, HTMLElement) ? prevLink : prev;
126
- focusTarget.focus();
127
- }
128
- else if (e.key === `Arrow${cap(end)}`) {
129
- if (currentIndex < items.length - 1) {
130
- const next = items[currentIndex + 1];
131
- const nextLink = next.querySelector('a');
132
- const focusTarget = isInstance(nextLink, HTMLElement) ? nextLink : next;
133
- focusTarget.focus();
134
- }
135
- else {
136
- inputRef.current?.focus();
137
- }
138
- }
139
- }, [start, end, uadConfig.selector]);
140
- const onInputKeyDown = useCallback((e) => {
141
- // Shift+Tab: Focus the last selected item's link
142
- if (e.key === 'Tab' && e.shiftKey && selected.length) {
143
- const items = Array.from(listRef.current?.querySelectorAll(uadConfig.selector) ?? []);
144
- const lastItem = items[items.length - 1];
145
- const link = lastItem?.querySelector('a');
146
- if (isInstance(link, HTMLElement)) {
147
- e.preventDefault();
148
- e.stopPropagation();
149
- link.focus();
57
+ const handleFocusIn = (e) => {
58
+ const target = e.target;
59
+ if (!isInstance(target, HTMLElement))
150
60
  return;
61
+ const selection = target.closest('[data-selection]');
62
+ if (!selection)
63
+ return;
64
+ setLastFocusedId(selection.dataset.selection);
65
+ selection.scrollIntoView(scrollIntoViewOptions);
66
+ };
67
+ el.addEventListener('focusin', handleFocusIn);
68
+ return () => el.removeEventListener('focusin', handleFocusIn);
69
+ }, [selected.length]);
70
+ // The selection that owns tab stop: the last focused one if still present, else the newest
71
+ const tabStopId = useMemo(() => {
72
+ if (!Array.isArray(selected))
73
+ return undefined;
74
+ const ids = selected.map(item => item.id.toString());
75
+ return lastFocusedId && ids.includes(lastFocusedId) ? lastFocusedId : ids[ids.length - 1];
76
+ }, [lastFocusedId, selected]);
77
+ useEffect(() => {
78
+ listRef.current?.querySelectorAll('[data-selection]').forEach(selection => {
79
+ const link = selection.querySelector('a[href]');
80
+ const target = link ?? selection;
81
+ const isTabStop = !isSelectionFocused && selection.dataset.selection === tabStopId;
82
+ if (link) {
83
+ selection.removeAttribute('data-selection-focus');
84
+ selection.removeAttribute('tabindex');
85
+ const existingTokens = link.getAttribute('aria-describedby')?.split(/\s+/) ?? [];
86
+ if (!existingTokens.includes(selectionDescriptionId)) {
87
+ link.setAttribute('aria-describedby', [...existingTokens, selectionDescriptionId].join(' '));
88
+ }
151
89
  }
90
+ target.setAttribute('data-selection-focus', '');
91
+ target.tabIndex = isTabStop ? 0 : -1;
92
+ });
93
+ }, [selected, isSelectionFocused, tabStopId, selectionDescriptionId]);
94
+ const handleSelectedRemoval = useCallback((selectionId, idx) => {
95
+ const activeEl = getActiveElement();
96
+ const isInSelectionList = listRef.current?.contains(activeEl) ?? false;
97
+ if (isInSelectionList) {
98
+ // Move focus to an adjacent selection before unmount
99
+ const targetIdx = idx > 0 ? idx - 1 : 1;
100
+ const child = listRef.current?.children[targetIdx];
101
+ const focusTarget = isInstance(child, HTMLElement)
102
+ ? child.querySelector('a[href]') ?? child
103
+ : undefined;
104
+ if (focusTarget)
105
+ focusTarget.focus();
106
+ else
107
+ inputRef.current?.focus();
152
108
  }
153
- if (selected.length &&
154
- inputRef.current?.selectionStart === 0 &&
155
- inputRef.current?.selectionEnd === 0) {
156
- const lastIndex = selected.length - 1;
157
- if (pauseDescendantEvaluation && e.key === `Arrow${cap(start)}`) {
158
- setFocusDescendant(listRef.current?.querySelectorAll(uadConfig.selector)[lastIndex] ||
159
- null);
160
- onSelectedFocus?.();
161
- }
162
- const lastSelectableId = listRef.current?.querySelectorAll(uadConfig.selector)[lastIndex]
163
- ?.id;
164
- const onLastItem = activeItemId === lastSelectableId;
165
- if (!pauseDescendantEvaluation &&
166
- ((onLastItem && e.key === `Arrow${cap(end)}`) || e.key === 'ArrowDown')) {
167
- onSelectedBlur?.();
168
- }
169
- if (['Backspace', 'Delete'].includes(e.key) && !(readOnly || disabled)) {
170
- handleSelectedRemoval(selected[lastIndex].id, lastIndex);
171
- }
172
- }
173
- onKeyDown?.(e);
174
- }, [
175
- pauseDescendantEvaluation,
176
- activeItemId,
177
- onKeyDown,
178
- handleSelectedRemoval,
179
- selected,
180
- readOnly,
181
- disabled,
182
- start,
183
- uadConfig.selector,
184
- onSelectedFocus,
185
- onSelectedBlur
186
- ]);
187
- const ariaDescribedBy = useMemo(() => {
188
- return onChange
189
- ? `${id}-inputDescription ${id}-searchDescription`
190
- : `${id}-inputDescription`;
191
- }, [id]);
192
- const ariaControlsValue = useMemo(() => {
193
- if (!pauseDescendantEvaluation) {
194
- return selected.length > 0 ? id : undefined;
195
- }
196
- return ariaControls;
197
- }, [pauseDescendantEvaluation, selected.length]);
198
- return (_jsxs(Flex, { as: StyledMultiSelectInput, forwardedAs: StyledFormControl, hasSuggestion: status === 'pending' && !!suggestion, container: { alignItems: 'center', justify: 'between' }, readOnly: readOnly, disabled: disabled, status: status, children: [_jsxs(StyledInputWrapper, { container: { alignContent: 'center', wrap: 'wrap', rowGap: 0.5, colGap: 0.25, pad: 0.25 }, item: { grow: 1 }, onClick: (e) => {
199
- // Ignore clicks on selection items
109
+ onRemove?.(selectionId, idx);
110
+ }, [onRemove]);
111
+ return (_jsxs(Flex, { as: StyledMultiSelectInput, forwardedAs: StyledFormControl, hasSuggestion: status === 'pending' && !!suggestion, container: { alignItems: 'center', justify: 'between' }, readOnly: readOnly, disabled: disabled, status: status, children: [_jsxs(Flex, { as: StyledSelectionRow, container: { alignItems: 'center', colGap: 0.25, pad: [0, 0.25, 0, 0] }, item: { grow: 1 }, onClick: (e) => {
112
+ // Ignore clicks on selection items.
200
113
  if (isInstance(e.target, HTMLElement) &&
201
114
  !isInstance(e.target, HTMLInputElement) &&
202
115
  !e.currentTarget.contains(e.target.closest('li'))) {
@@ -206,15 +119,9 @@ const MultiSelectInput = forwardRef(function MultiSelectInput(props, ref) {
206
119
  }
207
120
  }, children: [loading && (_jsx(Progress, { placement: 'local', "aria-label": t('combobox_loading_selected_items'), liveConfig: {
208
121
  contextualLabel: t('combobox_loading_selected_items')
209
- } })), selected.length > 0 && (_jsx("ul", { ref: listRef, id: id, "aria-label": t('selected_items'), onKeyDown: onListArrowKeyDown, children: selected.map((element, idx) => {
210
- return (_jsx(Selectable, { as: 'li', id: element.id.toString(), status: status, contextualLabel: element.text, onRemove: !readOnly && !disabled
211
- ? () => {
212
- handleSelectedRemoval(element.id, idx);
213
- }
214
- : undefined, tabIndex: -1, "aria-label": `${t('remove')} ${element.text}`, "aria-describedby": ariaDescribedBy, children: element.primary ?? element.text }, element.id));
215
- }) })), _jsx(Flex, { item: { grow: 1 }, as: 'input', size: 1, ref: inputRef, value: value,
122
+ } })), selected.length > 0 && (_jsx("ul", { ref: listRef, id: id, "aria-label": t('selected_items'), tabIndex: -1, children: selected.map((element, idx) => (_jsx(Selectable, { as: 'li', "data-selection": element.id.toString(), status: status, contextualLabel: element.text, onRemove: !readOnly && !disabled ? () => handleSelectedRemoval(element.id, idx) : undefined, "aria-label": `${t('remove')} ${element.text}`, "aria-describedby": selectionDescriptionId, children: element.primary ?? element.text }, element.id))) })), !readOnly && (_jsx(Flex, { item: { grow: 1 }, as: 'input', size: 1, ref: inputRef, value: value,
216
123
  // no-op avoids react uncontrolled warning
217
- onChange: onChange || (() => { }), onKeyDown: onInputKeyDown, readOnly: readOnly || !onChange, disabled: disabled, placeholder: selected?.length ? undefined : placeholder, autoComplete: '_off', autoFocus: autoFocus, "aria-controls": ariaControlsValue, "aria-required": !!required, ...restProps })] }), actions, _jsx(VisuallyHiddenText, { id: `${id}-inputDescription`, children: `${t('combobox_open_close')} ` }), _jsx(VisuallyHiddenText, { id: `${id}-searchDescription`, children: t('combobox_search_instructions') })] }));
124
+ onChange: onChange || (() => { }), onKeyDown: onKeyDown, readOnly: !onChange, disabled: disabled, placeholder: selected.length ? undefined : placeholder, autoComplete: '_off', autoFocus: autoFocus, "aria-controls": ariaControls ?? (selected.length > 0 ? id : undefined), "aria-required": !!required, ...restProps }))] }), actions, _jsx(VisuallyHiddenText, { id: selectionDescriptionId, children: `${t('multiselect_instructions', [start])}${!readOnly ? ` ${t('multiselect_tab_to_input')}` : ''}` })] }));
218
125
  });
219
126
  export default MultiSelectInput;
220
127
  //# sourceMappingURL=MultiSelectInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectInput.js","sourceRoot":"","sources":["../../../../src/components/ComboBox/MultiSelectInput/MultiSelectInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useRef, useCallback, useMemo, useState, useEffect } from 'react';\nimport type { FunctionComponent, Ref, PropsWithoutRef, KeyboardEvent, MouseEvent } from 'react';\nimport styled from 'styled-components';\n\nimport Progress from '../../Progress';\nimport type { ForwardProps } from '../../../types';\nimport { defaultThemeProp } from '../../../theme';\nimport Selectable from '../../Badges/Selection';\nimport { StyledFormControl } from '../../FormControl';\nimport Flex from '../../Flex';\nimport {\n useConsolidatedRef,\n useActiveDescendant,\n useDirection,\n useI18n,\n useUID\n} from '../../../hooks';\nimport { cap, isInstance, getActiveElement } from '../../../utils';\nimport VisuallyHiddenText from '../../VisuallyHiddenText';\nimport { StyledSelectInput } from '../ComboBox.styles';\nimport type { Selected } from '../ComboBox.types';\n\nimport type { MultiSelectInputProps } from './MultiSelectInput.types';\n\nexport const StyledMultiSelectInput = styled(StyledSelectInput)`\n cursor: text;\n\n ul {\n list-style: none;\n display: contents;\n }\n\n input {\n width: 8ch;\n height: 1.125rem;\n }\n`;\n\nStyledMultiSelectInput.defaultProps = defaultThemeProp;\n\nconst StyledInputWrapper = styled(Flex)`\n position: relative;\n`;\n\nconst MultiSelectInput: FunctionComponent<MultiSelectInputProps & ForwardProps> = forwardRef(\n function MultiSelectInput(\n props: PropsWithoutRef<MultiSelectInputProps>,\n ref: Ref<HTMLInputElement>\n ) {\n const {\n selected = [],\n loading,\n value,\n onRemove,\n onChange,\n onKeyDown,\n suggestion,\n actions,\n readOnly,\n disabled,\n status,\n placeholder,\n autoFocus,\n pauseDescendantEvaluation,\n onSelectedFocus,\n onSelectedBlur,\n 'aria-controls': ariaControls,\n required,\n ...restProps\n } = props;\n const t = useI18n();\n const id = useUID();\n\n const inputRef = useConsolidatedRef<HTMLInputElement>(ref);\n const listRef = useRef<HTMLUListElement>(null);\n const [focusDescendant, setFocusDescendant] = useState<HTMLElement | null>(null);\n const [activeItemId, setActiveItemId] = useState<string | null>(null);\n const { start, end } = useDirection();\n\n const uadConfig = useMemo(\n () => ({\n focusEl: inputRef.current,\n scope: listRef.current,\n selector: ':scope > li',\n orientation: 'horizontal' as const,\n focusReturnEl: focusDescendant,\n clearFocusReturn: () => {\n setFocusDescendant(null);\n },\n pauseDescendantEvaluation,\n preventInitialScroll: true,\n onClick: (el: HTMLElement) => {\n el.click();\n }\n }),\n [pauseDescendantEvaluation, selected, focusDescendant]\n );\n\n const { activeDescendant } = useActiveDescendant(uadConfig, [selected]);\n\n const handleSelectedRemoval = useCallback(\n (selectionId: Selected['id'], idx: number) => {\n if (!pauseDescendantEvaluation) {\n if (idx === selected.length - 1) {\n // If removing last selected item\n if (selected.length > 1) {\n // If other selected items, focus previous\n setFocusDescendant(\n (listRef.current?.querySelectorAll(uadConfig.selector)[idx - 1] as HTMLElement) ||\n null\n );\n } else {\n // Blur selected if final only item removed\n onSelectedBlur?.();\n }\n } else if (selected.length > 1) {\n // If not last item removed and other selected items, focus next\n setFocusDescendant(\n (listRef.current?.querySelectorAll(uadConfig.selector)[idx + 1] as HTMLElement) ||\n null\n );\n }\n }\n onRemove?.(selectionId, idx);\n inputRef.current?.focus();\n },\n [selected, onRemove, onSelectedBlur, uadConfig]\n );\n\n useEffect(() => {\n // Maintain active item & prev. val only as it changes.\n if (activeDescendant?.id && activeDescendant.id !== activeItemId) {\n setActiveItemId(activeDescendant.id);\n }\n }, [activeDescendant]);\n\n const onListArrowKeyDown = useCallback(\n (e: KeyboardEvent<HTMLUListElement>) => {\n // Tab (forward) from within the list: move focus to the input\n if (e.key === 'Tab' && !e.shiftKey) {\n e.preventDefault();\n inputRef.current?.focus();\n return;\n }\n\n // Shift+Tab from within the list: exit the combobox entirely\n if (e.key === 'Tab' && e.shiftKey) {\n const focusables = Array.from(listRef.current?.querySelectorAll('a, button') ?? []);\n const elementsToRestore = inputRef.current\n ? [...focusables, inputRef.current]\n : focusables;\n const previousTabIndexes = elementsToRestore.map(el => ({\n el,\n tabindex: el.getAttribute('tabindex')\n }));\n elementsToRestore.forEach(el => el.setAttribute('tabindex', '-1'));\n requestAnimationFrame(() => {\n previousTabIndexes.forEach(({ el, tabindex }) => {\n if (tabindex === null) {\n el.removeAttribute('tabindex');\n } else {\n el.setAttribute('tabindex', tabindex);\n }\n });\n });\n return;\n }\n\n if (e.key !== `Arrow${cap(start)}` && e.key !== `Arrow${cap(end)}`) return;\n\n const items = Array.from(\n listRef.current?.querySelectorAll<HTMLLIElement>(uadConfig.selector) ?? []\n );\n const currentIndex = items.findIndex(\n item => item === getActiveElement() || item.contains(getActiveElement())\n );\n if (currentIndex === -1) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n if (e.key === `Arrow${cap(start)}` && currentIndex > 0) {\n const prev = items[currentIndex - 1];\n const prevLink = prev.querySelector('a');\n const focusTarget = isInstance(prevLink, HTMLElement) ? prevLink : prev;\n focusTarget.focus();\n } else if (e.key === `Arrow${cap(end)}`) {\n if (currentIndex < items.length - 1) {\n const next = items[currentIndex + 1];\n const nextLink = next.querySelector('a');\n const focusTarget = isInstance(nextLink, HTMLElement) ? nextLink : next;\n focusTarget.focus();\n } else {\n inputRef.current?.focus();\n }\n }\n },\n [start, end, uadConfig.selector]\n );\n\n const onInputKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n // Shift+Tab: Focus the last selected item's link\n if (e.key === 'Tab' && e.shiftKey && selected.length) {\n const items = Array.from(\n listRef.current?.querySelectorAll<HTMLLIElement>(uadConfig.selector) ?? []\n );\n const lastItem = items[items.length - 1];\n const link = lastItem?.querySelector('a');\n\n if (isInstance(link, HTMLElement)) {\n e.preventDefault();\n e.stopPropagation();\n link.focus();\n return;\n }\n }\n\n if (\n selected.length &&\n inputRef.current?.selectionStart === 0 &&\n inputRef.current?.selectionEnd === 0\n ) {\n const lastIndex = selected.length - 1;\n if (pauseDescendantEvaluation && e.key === `Arrow${cap(start)}`) {\n setFocusDescendant(\n (listRef.current?.querySelectorAll(uadConfig.selector)[lastIndex] as HTMLElement) ||\n null\n );\n onSelectedFocus?.();\n }\n\n const lastSelectableId = listRef.current?.querySelectorAll(uadConfig.selector)[lastIndex]\n ?.id;\n const onLastItem = activeItemId === lastSelectableId;\n\n if (\n !pauseDescendantEvaluation &&\n ((onLastItem && e.key === `Arrow${cap(end)}`) || e.key === 'ArrowDown')\n ) {\n onSelectedBlur?.();\n }\n\n if (['Backspace', 'Delete'].includes(e.key) && !(readOnly || disabled)) {\n handleSelectedRemoval(selected[lastIndex].id, lastIndex);\n }\n }\n onKeyDown?.(e);\n },\n [\n pauseDescendantEvaluation,\n activeItemId,\n onKeyDown,\n handleSelectedRemoval,\n selected,\n readOnly,\n disabled,\n start,\n uadConfig.selector,\n onSelectedFocus,\n onSelectedBlur\n ]\n );\n\n const ariaDescribedBy = useMemo(() => {\n return onChange\n ? `${id}-inputDescription ${id}-searchDescription`\n : `${id}-inputDescription`;\n }, [id]);\n\n const ariaControlsValue = useMemo(() => {\n if (!pauseDescendantEvaluation) {\n return selected.length > 0 ? id : undefined;\n }\n return ariaControls;\n }, [pauseDescendantEvaluation, selected.length]);\n\n return (\n <Flex\n as={StyledMultiSelectInput}\n forwardedAs={StyledFormControl}\n hasSuggestion={status === 'pending' && !!suggestion}\n container={{ alignItems: 'center', justify: 'between' }}\n readOnly={readOnly}\n disabled={disabled}\n status={status}\n >\n <StyledInputWrapper\n container={{ alignContent: 'center', wrap: 'wrap', rowGap: 0.5, colGap: 0.25, pad: 0.25 }}\n item={{ grow: 1 }}\n onClick={(e: MouseEvent<HTMLDivElement>) => {\n // Ignore clicks on selection items\n if (\n isInstance(e.target, HTMLElement) &&\n !isInstance(e.target, HTMLInputElement) &&\n !e.currentTarget.contains(e.target.closest('li'))\n ) {\n e.stopPropagation();\n inputRef.current?.focus();\n inputRef.current?.click();\n }\n }}\n >\n {loading && (\n <Progress\n placement='local'\n aria-label={t('combobox_loading_selected_items')}\n liveConfig={{\n contextualLabel: t('combobox_loading_selected_items')\n }}\n />\n )}\n {selected.length > 0 && (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <ul\n ref={listRef}\n id={id}\n aria-label={t('selected_items')}\n onKeyDown={onListArrowKeyDown}\n >\n {selected.map((element, idx) => {\n return (\n <Selectable\n as='li'\n key={element.id}\n id={element.id.toString()}\n status={status}\n contextualLabel={element.text}\n onRemove={\n !readOnly && !disabled\n ? () => {\n handleSelectedRemoval(element.id, idx);\n }\n : undefined\n }\n tabIndex={-1}\n aria-label={`${t('remove')} ${element.text}`}\n aria-describedby={ariaDescribedBy}\n >\n {element.primary ?? element.text}\n </Selectable>\n );\n })}\n </ul>\n )}\n <Flex\n item={{ grow: 1 }}\n as='input'\n size={1}\n ref={inputRef}\n value={value}\n // no-op avoids react uncontrolled warning\n onChange={onChange || (() => {})}\n onKeyDown={onInputKeyDown}\n readOnly={readOnly || !onChange}\n disabled={disabled}\n placeholder={selected?.length ? undefined : placeholder}\n autoComplete='_off'\n autoFocus={autoFocus}\n aria-controls={ariaControlsValue}\n aria-required={!!required}\n {...restProps}\n />\n </StyledInputWrapper>\n {actions}\n <VisuallyHiddenText id={`${id}-inputDescription`}>\n {`${t('combobox_open_close')} `}\n </VisuallyHiddenText>\n <VisuallyHiddenText id={`${id}-searchDescription`}>\n {t('combobox_search_instructions')}\n </VisuallyHiddenText>\n </Flex>\n );\n }\n);\n\nexport default MultiSelectInput;\n"]}
1
+ {"version":3,"file":"MultiSelectInput.js","sourceRoot":"","sources":["../../../../src/components/ComboBox/MultiSelectInput/MultiSelectInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useRef, useCallback, useMemo, useEffect, useState } from 'react';\nimport type { MouseEvent } from 'react';\n\nimport Progress from '../../Progress';\nimport type { WithAttributes } from '../../../types';\nimport Selectable from '../../Badges/Selection';\nimport { StyledFormControl } from '../../FormControl';\nimport Flex from '../../Flex';\nimport {\n useArrows,\n useConsolidatedRef,\n useDirection,\n useFocusWithin,\n useI18n,\n useUID\n} from '../../../hooks';\nimport { isInstance, getActiveElement } from '../../../utils';\nimport VisuallyHiddenText from '../../VisuallyHiddenText';\nimport type { Selected } from '../ComboBox.types';\n\nimport StyledMultiSelectInput, { StyledSelectionRow } from './MultiSelectInput.styles';\nimport type { MultiSelectInputProps } from './MultiSelectInput.types';\n\nexport { StyledMultiSelectInput };\n\nconst scrollIntoViewOptions: ScrollIntoViewOptions = { block: 'nearest', inline: 'nearest' };\nconst selectionFocusSelector = '[data-selection-focus]';\n\nconst MultiSelectInput = forwardRef<\n HTMLInputElement,\n WithAttributes<'input', MultiSelectInputProps>\n>(function MultiSelectInput(props, ref) {\n const {\n selected = [],\n loading,\n value,\n onRemove,\n onChange,\n onKeyDown,\n suggestion,\n actions,\n readOnly,\n disabled,\n status,\n placeholder,\n autoFocus,\n onSelectedFocus,\n onSelectedBlur,\n 'aria-controls': ariaControls,\n required,\n ...restProps\n } = props;\n const t = useI18n();\n const { start } = useDirection();\n const id = useUID();\n\n const inputRef = useConsolidatedRef<HTMLInputElement>(ref);\n const listRef = useRef<HTMLUListElement>(null);\n const isSelectionFocusedRef = useRef(false);\n const [lastFocusedId, setLastFocusedId] = useState<string>();\n const selectionDescriptionId = `${id}-selectionDescription`;\n\n // Pin the newest selection to the divider\n const revealNewestSelection = useCallback(() => {\n const el = listRef.current;\n if (el && !isSelectionFocusedRef.current) el.scrollLeft = el.scrollWidth;\n }, []);\n\n // On blur, re-pin the newest selection\n const onSelectionFocusChange = useCallback(\n (isFocused: boolean) => {\n isSelectionFocusedRef.current = isFocused;\n if (isFocused) onSelectedFocus?.();\n else {\n onSelectedBlur?.();\n revealNewestSelection();\n }\n },\n [onSelectedFocus, onSelectedBlur, revealNewestSelection]\n );\n const isSelectionFocused = useFocusWithin([listRef], onSelectionFocusChange);\n\n useArrows(\n listRef,\n { selector: selectionFocusSelector, dir: 'left-right', cycle: false, updateTabIndex: false },\n [selected.length]\n );\n\n // Re-pin the newest selection on selection change (add/remove) and on resize.\n useEffect(() => {\n const el = listRef.current;\n if (!el) return;\n revealNewestSelection();\n const observer = new ResizeObserver(revealNewestSelection);\n observer.observe(el);\n return () => observer.disconnect();\n }, [selected.length, revealNewestSelection]);\n\n // Keep a focused selection visible\n useEffect(() => {\n const el = listRef.current;\n if (!el) return;\n const handleFocusIn = (e: FocusEvent) => {\n const target = e.target;\n if (!isInstance(target, HTMLElement)) return;\n const selection = target.closest<HTMLElement>('[data-selection]');\n if (!selection) return;\n setLastFocusedId(selection.dataset.selection);\n selection.scrollIntoView(scrollIntoViewOptions);\n };\n el.addEventListener('focusin', handleFocusIn);\n return () => el.removeEventListener('focusin', handleFocusIn);\n }, [selected.length]);\n\n // The selection that owns tab stop: the last focused one if still present, else the newest\n const tabStopId = useMemo(() => {\n if (!Array.isArray(selected)) return undefined;\n const ids = selected.map(item => item.id.toString());\n return lastFocusedId && ids.includes(lastFocusedId) ? lastFocusedId : ids[ids.length - 1];\n }, [lastFocusedId, selected]);\n\n useEffect(() => {\n listRef.current?.querySelectorAll<HTMLElement>('[data-selection]').forEach(selection => {\n const link = selection.querySelector<HTMLElement>('a[href]');\n const target = link ?? selection;\n const isTabStop = !isSelectionFocused && selection.dataset.selection === tabStopId;\n if (link) {\n selection.removeAttribute('data-selection-focus');\n selection.removeAttribute('tabindex');\n const existingTokens = link.getAttribute('aria-describedby')?.split(/\\s+/) ?? [];\n if (!existingTokens.includes(selectionDescriptionId)) {\n link.setAttribute(\n 'aria-describedby',\n [...existingTokens, selectionDescriptionId].join(' ')\n );\n }\n }\n target.setAttribute('data-selection-focus', '');\n target.tabIndex = isTabStop ? 0 : -1;\n });\n }, [selected, isSelectionFocused, tabStopId, selectionDescriptionId]);\n\n const handleSelectedRemoval = useCallback(\n (selectionId: Selected['id'], idx: number) => {\n const activeEl = getActiveElement();\n const isInSelectionList = listRef.current?.contains(activeEl) ?? false;\n\n if (isInSelectionList) {\n // Move focus to an adjacent selection before unmount\n const targetIdx = idx > 0 ? idx - 1 : 1;\n const child = listRef.current?.children[targetIdx];\n const focusTarget = isInstance(child, HTMLElement)\n ? child.querySelector<HTMLElement>('a[href]') ?? child\n : undefined;\n if (focusTarget) focusTarget.focus();\n else inputRef.current?.focus();\n }\n\n onRemove?.(selectionId, idx);\n },\n [onRemove]\n );\n\n return (\n <Flex\n as={StyledMultiSelectInput}\n forwardedAs={StyledFormControl}\n hasSuggestion={status === 'pending' && !!suggestion}\n container={{ alignItems: 'center', justify: 'between' }}\n readOnly={readOnly}\n disabled={disabled}\n status={status}\n >\n <Flex\n as={StyledSelectionRow}\n container={{ alignItems: 'center', colGap: 0.25, pad: [0, 0.25, 0, 0] }}\n item={{ grow: 1 }}\n onClick={(e: MouseEvent<HTMLDivElement>) => {\n // Ignore clicks on selection items.\n if (\n isInstance(e.target, HTMLElement) &&\n !isInstance(e.target, HTMLInputElement) &&\n !e.currentTarget.contains(e.target.closest('li'))\n ) {\n e.stopPropagation();\n inputRef.current?.focus();\n inputRef.current?.click();\n }\n }}\n >\n {loading && (\n <Progress\n placement='local'\n aria-label={t('combobox_loading_selected_items')}\n liveConfig={{\n contextualLabel: t('combobox_loading_selected_items')\n }}\n />\n )}\n {selected.length > 0 && (\n <ul ref={listRef} id={id} aria-label={t('selected_items')} tabIndex={-1}>\n {selected.map((element, idx) => (\n <Selectable\n as='li'\n key={element.id}\n data-selection={element.id.toString()}\n status={status}\n contextualLabel={element.text}\n onRemove={\n !readOnly && !disabled ? () => handleSelectedRemoval(element.id, idx) : undefined\n }\n aria-label={`${t('remove')} ${element.text}`}\n aria-describedby={selectionDescriptionId}\n >\n {element.primary ?? element.text}\n </Selectable>\n ))}\n </ul>\n )}\n {!readOnly && (\n <Flex\n item={{ grow: 1 }}\n as='input'\n size={1}\n ref={inputRef}\n value={value}\n // no-op avoids react uncontrolled warning\n onChange={onChange || (() => {})}\n onKeyDown={onKeyDown}\n readOnly={!onChange}\n disabled={disabled}\n placeholder={selected.length ? undefined : placeholder}\n autoComplete='_off'\n autoFocus={autoFocus}\n aria-controls={ariaControls ?? (selected.length > 0 ? id : undefined)}\n aria-required={!!required}\n {...restProps}\n />\n )}\n </Flex>\n {actions}\n\n <VisuallyHiddenText id={selectionDescriptionId}>\n {`${t('multiselect_instructions', [start])}${!readOnly ? ` ${t('multiselect_tab_to_input')}` : ''}`}\n </VisuallyHiddenText>\n </Flex>\n );\n});\n\nexport default MultiSelectInput;\n"]}