@openedx/paragon 22.13.0 → 22.14.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 (251) hide show
  1. package/dist/Alert/_variables.scss +2 -1
  2. package/dist/Annotation/index.js.map +1 -1
  3. package/dist/Annotation/index.scss +6 -5
  4. package/dist/Avatar/index.js.map +1 -1
  5. package/dist/AvatarButton/index.js.map +1 -1
  6. package/dist/Breadcrumb/index.js.map +1 -1
  7. package/dist/Bubble/index.js +1 -0
  8. package/dist/Bubble/index.js.map +1 -1
  9. package/dist/Bubble/index.scss +3 -2
  10. package/dist/Button/deprecated/index.js.map +1 -1
  11. package/dist/Button/index.scss +19 -18
  12. package/dist/Card/CardCarousel/CardCarouselHeader.js +2 -2
  13. package/dist/Card/CardCarousel/CardCarouselHeader.js.map +1 -1
  14. package/dist/Card/CardFooter.js.map +1 -1
  15. package/dist/Card/CardHeader.js +1 -1
  16. package/dist/Card/CardHeader.js.map +1 -1
  17. package/dist/Card/CardImageCap.js.map +1 -1
  18. package/dist/Card/CardStatus.js.map +1 -1
  19. package/dist/Card/_variables.scss +3 -2
  20. package/dist/Card/index.js.map +1 -1
  21. package/dist/Card/index.scss +10 -9
  22. package/dist/Chip/ChipIcon.d.ts +1 -1
  23. package/dist/Chip/index.js +1 -0
  24. package/dist/Chip/index.js.map +1 -1
  25. package/dist/ChipCarousel/index.js.map +1 -1
  26. package/dist/Collapsible/index.js.map +1 -1
  27. package/dist/ColorPicker/index.js +1 -1
  28. package/dist/ColorPicker/index.js.map +1 -1
  29. package/dist/ColorPicker/index.scss +2 -1
  30. package/dist/DataTable/CollapsibleButtonGroup.js +2 -2
  31. package/dist/DataTable/CollapsibleButtonGroup.js.map +1 -1
  32. package/dist/DataTable/DropdownFilters.js +1 -1
  33. package/dist/DataTable/DropdownFilters.js.map +1 -1
  34. package/dist/DataTable/TableRow.js.map +1 -1
  35. package/dist/DataTable/filters/CheckboxFilter.js.map +1 -1
  36. package/dist/DataTable/filters/DropdownFilter.js.map +1 -1
  37. package/dist/DataTable/filters/MultiSelectDropdownFilter.js.map +1 -1
  38. package/dist/DataTable/filters/TextFilter.js.map +1 -1
  39. package/dist/DataTable/index.scss +14 -13
  40. package/dist/DataTable/utils/getVisibleColumns.js +1 -1
  41. package/dist/DataTable/utils/getVisibleColumns.js.map +1 -1
  42. package/dist/Dropdown/_variables.scss +2 -1
  43. package/dist/Dropdown/deprecated/DropdownMenu.js +15 -19
  44. package/dist/Dropdown/deprecated/DropdownMenu.js.map +1 -1
  45. package/dist/Dropdown/deprecated/index.js +1 -1
  46. package/dist/Dropdown/deprecated/index.js.map +1 -1
  47. package/dist/Dropdown/index.js.map +1 -1
  48. package/dist/Dropzone/DefaultContent.js.map +1 -1
  49. package/dist/Dropzone/UploadProgress.js.map +1 -1
  50. package/dist/Dropzone/index.scss +3 -2
  51. package/dist/Fieldset/index.js.map +1 -1
  52. package/dist/Form/FormAutosuggest.js +1 -1
  53. package/dist/Form/FormAutosuggest.js.map +1 -1
  54. package/dist/Form/FormControl.js.map +1 -1
  55. package/dist/Form/FormControlDecorator.js.map +1 -1
  56. package/dist/Form/FormGroupContext.d.ts +1 -1
  57. package/dist/Form/FormGroupContext.js.map +1 -1
  58. package/dist/Form/FormText.js.map +1 -1
  59. package/dist/Form/_index.scss +9 -7
  60. package/dist/Form/_variables.scss +4 -2
  61. package/dist/Form/fieldUtils.js.map +1 -1
  62. package/dist/Hyperlink/index.js +1 -0
  63. package/dist/Hyperlink/index.js.map +1 -1
  64. package/dist/Hyperlink/index.scss +3 -1
  65. package/dist/Icon/index.js.map +1 -1
  66. package/dist/IconButton/index.d.ts +13 -8
  67. package/dist/IconButton/index.js.map +1 -1
  68. package/dist/IconButtonToggle/index.js.map +1 -1
  69. package/dist/IconButtonToggle/index.scss +3 -1
  70. package/dist/Input/index.js.map +1 -1
  71. package/dist/InputSelect/index.js.map +1 -1
  72. package/dist/Layout/index.js.map +1 -1
  73. package/dist/ListBox/index.js.map +1 -1
  74. package/dist/ListBoxOption/index.js.map +1 -1
  75. package/dist/Menu/SelectMenu.js +1 -1
  76. package/dist/Menu/SelectMenu.js.map +1 -1
  77. package/dist/Menu/index.js +1 -1
  78. package/dist/Menu/index.js.map +1 -1
  79. package/dist/Modal/ModalContext.d.ts +1 -1
  80. package/dist/Modal/ModalDialog.d.ts +1 -1
  81. package/dist/Modal/ModalDialog.js.map +1 -1
  82. package/dist/Modal/ModalDialogBody.js +1 -1
  83. package/dist/Modal/ModalDialogBody.js.map +1 -1
  84. package/dist/Modal/ModalDialogHeroBackground.js.map +1 -1
  85. package/dist/Modal/ModalLayer.d.ts +3 -3
  86. package/dist/Modal/ModalLayer.js.map +1 -1
  87. package/dist/Modal/ModalPopup.js.map +1 -1
  88. package/dist/Modal/_ModalDialog.scss +3 -1
  89. package/dist/Modal/index.js +3 -1
  90. package/dist/Modal/index.js.map +1 -1
  91. package/dist/Modal/index.scss +3 -5
  92. package/dist/Nav/_mixins.scss +3 -1
  93. package/dist/Overlay/index.d.ts +2 -2
  94. package/dist/PageBanner/index.js.map +1 -1
  95. package/dist/PageBanner/index.scss +2 -1
  96. package/dist/Pagination/PaginationContext.js.map +1 -1
  97. package/dist/Pagination/index.js.map +1 -1
  98. package/dist/Popover/_variables.scss +2 -1
  99. package/dist/Popover/index.js.map +1 -1
  100. package/dist/ProductTour/Checkpoint.scss +9 -8
  101. package/dist/ProductTour/index.js +1 -1
  102. package/dist/ProductTour/index.js.map +1 -1
  103. package/dist/ProgressBar/index.js.map +1 -1
  104. package/dist/Scrollable/index.js +1 -1
  105. package/dist/Scrollable/index.js.map +1 -1
  106. package/dist/SearchField/SearchFieldAdvanced.js.map +1 -1
  107. package/dist/SearchField/index.scss +2 -1
  108. package/dist/SelectableBox/SelectableBoxSet.js.map +1 -1
  109. package/dist/Sheet/index.js.map +1 -1
  110. package/dist/Stack/index.js.map +1 -1
  111. package/dist/StatefulButton/index.js.map +1 -1
  112. package/dist/StatusAlert/index.js.map +1 -1
  113. package/dist/Stepper/StepperHeader.js +1 -1
  114. package/dist/Stepper/StepperHeader.js.map +1 -1
  115. package/dist/Stepper/StepperHeaderStep.js.map +1 -1
  116. package/dist/Sticky/index.js.map +1 -1
  117. package/dist/Table/_variables.scss +2 -1
  118. package/dist/Tabs/deprecated/index.js.map +1 -1
  119. package/dist/Tabs/index.js +1 -1
  120. package/dist/Tabs/index.js.map +1 -1
  121. package/dist/Toast/ToastContainer.scss +1 -1
  122. package/dist/Toast/index.scss +2 -2
  123. package/dist/Truncate/index.js +1 -1
  124. package/dist/Truncate/index.js.map +1 -1
  125. package/dist/ValidationFormGroup/index.js.map +1 -1
  126. package/dist/asInput/index.js.map +1 -1
  127. package/dist/hooks/{useArrowKeyNavigation.js → useArrowKeyNavigationHook.js} +5 -1
  128. package/dist/hooks/useArrowKeyNavigationHook.js.map +1 -0
  129. package/dist/hooks/{useIndexOfLastVisibleChild.js → useIndexOfLastVisibleChildHook.js} +5 -1
  130. package/dist/hooks/useIndexOfLastVisibleChildHook.js.map +1 -0
  131. package/dist/hooks/{useIsVisible.js → useIsVisibleHook.js} +1 -1
  132. package/dist/hooks/useIsVisibleHook.js.map +1 -0
  133. package/dist/hooks/{useToggle.js → useToggleHook.js} +5 -1
  134. package/dist/hooks/useToggleHook.js.map +1 -0
  135. package/dist/hooks/{useWindowSize.js → useWindowSizeHook.js} +1 -1
  136. package/dist/hooks/useWindowSizeHook.js.map +1 -0
  137. package/dist/index.d.ts +5 -5
  138. package/dist/index.js +5 -5
  139. package/dist/paragon.css +1 -45
  140. package/dist/utils/newId.js.map +1 -1
  141. package/dist/withDeprecatedProps.js.map +1 -1
  142. package/icons/node_modules/@svgr/babel-plugin-add-jsx-attribute/CHANGELOG.md +50 -0
  143. package/icons/node_modules/@svgr/babel-plugin-add-jsx-attribute/LICENSE +7 -0
  144. package/icons/node_modules/@svgr/babel-plugin-add-jsx-attribute/README.md +37 -0
  145. package/icons/node_modules/@svgr/babel-plugin-add-jsx-attribute/dist/index.d.ts +20 -0
  146. package/icons/node_modules/@svgr/babel-plugin-add-jsx-attribute/dist/index.js +79 -0
  147. package/icons/node_modules/@svgr/babel-plugin-add-jsx-attribute/dist/index.js.map +1 -0
  148. package/icons/node_modules/@svgr/babel-plugin-add-jsx-attribute/package.json +40 -0
  149. package/icons/node_modules/@svgr/babel-plugin-add-jsx-attribute/tsconfig.json +4 -0
  150. package/icons/package.json +1 -1
  151. package/package.json +12 -19
  152. package/scss/core/_exports.module.scss +7 -6
  153. package/scss/core/_functions.scss +9 -7
  154. package/scss/core/_typography.scss +2 -1
  155. package/scss/core/_utilities.scss +2 -1
  156. package/scss/core/_variables.scss +98 -95
  157. package/src/Alert/_variables.scss +2 -1
  158. package/src/Annotation/index.scss +6 -5
  159. package/src/Breadcrumb/Breadcrumb.test.jsx +3 -2
  160. package/src/Bubble/index.scss +3 -2
  161. package/src/Bubble/index.tsx +1 -0
  162. package/src/Button/deprecated/Button.test.jsx +6 -4
  163. package/src/Button/index.scss +19 -18
  164. package/src/Card/CardCarousel/tests/CardCarouselControls.test.jsx +6 -4
  165. package/src/Card/_variables.scss +3 -2
  166. package/src/Card/index.scss +10 -9
  167. package/src/Chip/index.tsx +1 -0
  168. package/src/Collapsible/Collapsible.test.jsx +15 -7
  169. package/src/ColorPicker/ColorPicker.test.jsx +9 -16
  170. package/src/ColorPicker/index.jsx +1 -1
  171. package/src/ColorPicker/index.scss +2 -1
  172. package/src/DataTable/CollapsibleButtonGroup.jsx +2 -2
  173. package/src/DataTable/DropdownFilters.jsx +1 -1
  174. package/src/DataTable/dataviews.mdx +1 -8
  175. package/src/DataTable/index.scss +14 -13
  176. package/src/DataTable/selection/tests/ControlledSelectHeader.test.jsx +6 -4
  177. package/src/DataTable/tests/BulkActions.test.jsx +2 -4
  178. package/src/DataTable/tests/DataViewToggle.test.jsx +3 -7
  179. package/src/DataTable/tests/DropdownFilters.test.jsx +1 -1
  180. package/src/DataTable/tests/TableActions.test.jsx +1 -1
  181. package/src/Dropdown/_variables.scss +2 -1
  182. package/src/Dropdown/deprecated/Dropdown.test.jsx +43 -27
  183. package/src/Dropzone/README.md +3 -3
  184. package/src/Dropzone/index.scss +3 -2
  185. package/src/Dropzone/tests/__snapshots__/Dropzone.test.jsx.snap +10 -1
  186. package/src/Form/FormAutosuggest.jsx +1 -1
  187. package/src/Form/FormGroupContext.tsx +1 -1
  188. package/src/Form/_index.scss +9 -7
  189. package/src/Form/_variables.scss +4 -2
  190. package/src/Form/tests/FormAutosuggest.test.jsx +76 -57
  191. package/src/Form/tests/FormCheckboxSet.test.jsx +3 -2
  192. package/src/Form/tests/FormControl.test.jsx +9 -6
  193. package/src/Form/tests/FormRadioSet.test.jsx +3 -2
  194. package/src/Hyperlink/index.scss +3 -1
  195. package/src/Hyperlink/index.tsx +1 -0
  196. package/src/IconButtonToggle/IconButtonToggle.test.jsx +3 -2
  197. package/src/IconButtonToggle/index.scss +3 -1
  198. package/src/ListBox/ListBox.test.jsx +8 -4
  199. package/src/Menu/Menu.test.jsx +15 -10
  200. package/src/Menu/SelectMenu.jsx +1 -1
  201. package/src/Menu/index.jsx +1 -1
  202. package/src/Modal/ModalDialogBody.jsx +1 -1
  203. package/src/Modal/_ModalDialog.scss +3 -1
  204. package/src/Modal/index.jsx +2 -0
  205. package/src/Modal/index.scss +3 -5
  206. package/src/Modal/tests/ModalLayer.test.tsx +3 -2
  207. package/src/Nav/_mixins.scss +3 -1
  208. package/src/OverflowScroll/data/tests/useOverflowScroll.test.jsx +1 -2
  209. package/src/OverflowScroll/data/tests/useOverflowScrollActions.test.jsx +1 -1
  210. package/src/OverflowScroll/data/tests/useOverflowScrollElementAttributes.test.jsx +1 -1
  211. package/src/OverflowScroll/data/tests/useOverflowScrollEventListeners.test.jsx +1 -2
  212. package/src/PageBanner/index.scss +2 -1
  213. package/src/Pagination/Pagination.test.jsx +36 -28
  214. package/src/Popover/_variables.scss +2 -1
  215. package/src/ProductTour/Checkpoint.scss +9 -8
  216. package/src/ProductTour/Checkpoint.test.jsx +3 -2
  217. package/src/ProductTour/ProductTour.test.jsx +11 -24
  218. package/src/ProductTour/index.jsx +1 -1
  219. package/src/Scrollable/Scrollable.test.jsx +2 -2
  220. package/src/Scrollable/index.jsx +1 -1
  221. package/src/SearchField/index.scss +2 -1
  222. package/src/SelectableBox/tests/SelectableBox.test.jsx +3 -2
  223. package/src/StatusAlert/StatusAlert.test.jsx +6 -2
  224. package/src/Stepper/StepperHeader.jsx +1 -1
  225. package/src/Stepper/tests/Stepper.test.jsx +1 -1
  226. package/src/Table/_variables.scss +2 -1
  227. package/src/Tabs/Tabs.test.jsx +1 -1
  228. package/src/Tabs/deprecated/Tabs.test.jsx +6 -4
  229. package/src/Tabs/index.jsx +1 -1
  230. package/src/Toast/ToastContainer.scss +1 -1
  231. package/src/Toast/index.scss +2 -2
  232. package/src/Truncate/index.jsx +1 -1
  233. package/src/hooks/tests/useToggle.test.tsx +1 -1
  234. package/src/hooks/{useArrowKeyNavigation.tsx → useArrowKeyNavigationHook.tsx} +4 -0
  235. package/src/hooks/{useIndexOfLastVisibleChild.tsx → useIndexOfLastVisibleChildHook.tsx} +4 -0
  236. package/src/hooks/{useToggle.tsx → useToggleHook.tsx} +4 -0
  237. package/src/index.d.ts +5 -5
  238. package/src/index.js +5 -5
  239. package/dist/hooks/useArrowKeyNavigation.js.map +0 -1
  240. package/dist/hooks/useIndexOfLastVisibleChild.js.map +0 -1
  241. package/dist/hooks/useIsVisible.js.map +0 -1
  242. package/dist/hooks/useToggle.js.map +0 -1
  243. package/dist/hooks/useWindowSize.js.map +0 -1
  244. package/src/DataTable/tests/utils.js +0 -9
  245. /package/dist/hooks/{useArrowKeyNavigation.d.ts → useArrowKeyNavigationHook.d.ts} +0 -0
  246. /package/dist/hooks/{useIndexOfLastVisibleChild.d.ts → useIndexOfLastVisibleChildHook.d.ts} +0 -0
  247. /package/dist/hooks/{useIsVisible.d.ts → useIsVisibleHook.d.ts} +0 -0
  248. /package/dist/hooks/{useToggle.d.ts → useToggleHook.d.ts} +0 -0
  249. /package/dist/hooks/{useWindowSize.d.ts → useWindowSizeHook.d.ts} +0 -0
  250. /package/src/hooks/{useIsVisible.tsx → useIsVisibleHook.tsx} +0 -0
  251. /package/src/hooks/{useWindowSize.tsx → useWindowSizeHook.tsx} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"FormAutosuggest.js","names":["React","useEffect","useState","useRef","forwardRef","useImperativeHandle","PropTypes","v4","uuidv4","useIntl","requiredWhen","KeyboardArrowUp","KeyboardArrowDown","Icon","FormGroupContextProvider","useFormGroupContext","FormControl","FormControlFeedback","IconButton","Spinner","useArrowKeyNavigation","messages","FormAutosuggest","_ref","ref","children","arrowKeyNavigationSelector","ignoredArrowKeysNames","screenReaderText","value","isLoading","isValueRequired","valueRequiredErrorMessageText","isSelectionRequired","selectionRequiredErrorMessageText","hasCustomError","customErrorMessageText","onChange","helpMessage","props","intl","formControlRef","parentRef","selectors","ignoredKeys","isDropdownExpanded","setIsDropdownExpanded","isActive","setIsActive","hasValue","setHasValue","hasSelection","setHasSelection","displayValue","setDisplayValue","userProvidedText","dropdownItems","setDropdownItems","activeMenuItemId","setActiveMenuItemId","isValid","setIsValid","errorMessage","setErrorMessage","handleMenuItemFocus","menuItemId","collapseDropdown","handleItemSelect","e","onClick","selectedValue","currentTarget","getAttribute","selectedId","id","selectionValue","selectionId","getItems","strToFind","arguments","length","undefined","childrenOpt","Children","map","child","childChildren","rest","cloneElement","onFocus","filter","opt","toLowerCase","includes","expandDropdown","toggleDropdown","iconToggle","createElement","className","tabIndex","src","iconAs","size","variant","alt","formatMessage","iconButtonClosed","iconButtonOpened","enterControl","updateErrorStateAndErrorMessage","leaveControl","keyDownHandler","key","preventDefault","current","focus","handleDocumentClick","contains","target","document","addEventListener","removeEventListener","handleTextboxClick","handleTextInput","filteredItems","matchingDropdownItem","find","o","getControlProps","controlProps","controlId","isInvalid","toString","role","autoComplete","trailingElement","type","name","animation","defaultProps","floatingLabel","placeholder","readOnly","propTypes","string","arrayOf","bool","func","shape","node"],"sources":["../../src/Form/FormAutosuggest.jsx"],"sourcesContent":["import React, {\n useEffect, useState, useRef, forwardRef, useImperativeHandle,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useIntl } from 'react-intl';\nimport { requiredWhen } from '../utils/propTypes';\nimport { KeyboardArrowUp, KeyboardArrowDown } from '../../icons';\nimport Icon from '../Icon';\nimport { FormGroupContextProvider, useFormGroupContext } from './FormGroupContext';\nimport FormControl from './FormControl';\nimport FormControlFeedback from './FormControlFeedback';\nimport IconButton from '../IconButton';\nimport Spinner from '../Spinner';\nimport useArrowKeyNavigation from '../hooks/useArrowKeyNavigation';\nimport messages from './messages';\n\nconst FormAutosuggest = forwardRef(\n (\n {\n children,\n arrowKeyNavigationSelector,\n ignoredArrowKeysNames,\n screenReaderText,\n value,\n isLoading,\n isValueRequired,\n valueRequiredErrorMessageText,\n isSelectionRequired,\n selectionRequiredErrorMessageText,\n hasCustomError,\n customErrorMessageText,\n onChange,\n helpMessage,\n ...props\n },\n ref,\n ) => {\n const intl = useIntl();\n const formControlRef = useRef();\n const parentRef = useArrowKeyNavigation({\n selectors: arrowKeyNavigationSelector,\n ignoredKeys: ignoredArrowKeysNames,\n });\n const [isDropdownExpanded, setIsDropdownExpanded] = useState(false);\n const [isActive, setIsActive] = useState(false);\n const [hasValue, setHasValue] = useState(false);\n const [hasSelection, setHasSelection] = useState(false);\n const [displayValue, setDisplayValue] = useState(value?.userProvidedText || '');\n const [dropdownItems, setDropdownItems] = useState([]);\n const [activeMenuItemId, setActiveMenuItemId] = useState(null);\n const [isValid, setIsValid] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n\n const handleMenuItemFocus = (menuItemId) => {\n setActiveMenuItemId(menuItemId);\n };\n\n const collapseDropdown = () => {\n setDropdownItems([]);\n setIsDropdownExpanded(false);\n setActiveMenuItemId(null);\n };\n\n const handleItemSelect = (e, onClick) => {\n const selectedValue = e.currentTarget.getAttribute('data-value');\n const selectedId = e.currentTarget.id;\n\n setHasValue(true);\n setHasSelection(true);\n setDisplayValue(selectedValue);\n\n if (onChange && (!value || (value && selectedValue !== value.selectionValue))) {\n onChange({\n userProvidedText: selectedValue,\n selectionValue: selectedValue,\n selectionId: selectedId,\n });\n }\n\n collapseDropdown();\n\n if (onClick) {\n onClick(e);\n }\n };\n\n function getItems(strToFind = '') {\n let childrenOpt = React.Children.map(children, (child) => {\n const { children: childChildren, onClick, ...rest } = child.props;\n const menuItemId = child.props.id ?? uuidv4();\n\n return React.cloneElement(child, {\n ...rest,\n children: childChildren,\n 'data-value': childChildren,\n onClick: (e) => handleItemSelect(e, onClick),\n id: menuItemId,\n onFocus: () => handleMenuItemFocus(menuItemId),\n });\n });\n\n if (strToFind.length > 0) {\n childrenOpt = childrenOpt\n .filter((opt) => (opt.props.children.toLowerCase().includes(strToFind.toLowerCase())));\n }\n\n return childrenOpt;\n }\n\n const expandDropdown = () => {\n setDropdownItems(getItems(displayValue));\n setIsValid(true);\n setErrorMessage('');\n setIsDropdownExpanded(true);\n };\n\n const toggleDropdown = () => {\n if (isDropdownExpanded) {\n collapseDropdown();\n } else {\n expandDropdown();\n }\n };\n\n const iconToggle = (\n <IconButton\n className=\"pgn__form-autosuggest__icon-button\"\n data-testid=\"autosuggest-iconbutton\"\n tabIndex=\"-1\"\n src={isDropdownExpanded ? KeyboardArrowUp : KeyboardArrowDown}\n iconAs={Icon}\n size=\"sm\"\n variant=\"secondary\"\n alt={isDropdownExpanded\n ? intl.formatMessage(messages.iconButtonClosed)\n : intl.formatMessage(messages.iconButtonOpened)}\n onClick={toggleDropdown}\n />\n );\n\n const enterControl = () => {\n setIsActive(true);\n };\n\n const updateErrorStateAndErrorMessage = () => {\n if (hasCustomError) {\n setIsValid(false);\n setErrorMessage(customErrorMessageText);\n return;\n }\n\n if (isValueRequired && !hasValue) {\n setIsValid(false);\n setErrorMessage(valueRequiredErrorMessageText);\n return;\n }\n\n if (hasValue && isSelectionRequired && !hasSelection) {\n setIsValid(false);\n setErrorMessage(selectionRequiredErrorMessageText);\n return;\n }\n\n setIsValid(true);\n setErrorMessage('');\n };\n\n useImperativeHandle(ref, () => ({\n // expose updateErrorStateAndErrorMessage so consumers can trigger validation\n // when changing the value of the control externally\n updateErrorStateAndErrorMessage,\n }));\n\n const leaveControl = () => {\n setIsActive(false);\n collapseDropdown();\n updateErrorStateAndErrorMessage();\n };\n\n const keyDownHandler = e => {\n if (!isActive) {\n return;\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n\n if (formControlRef) {\n formControlRef.current.focus();\n }\n\n collapseDropdown();\n return;\n }\n\n if (e.key === 'Tab') {\n leaveControl();\n }\n };\n\n const handleDocumentClick = (e) => {\n if (parentRef.current && !parentRef.current.contains(e.target) && isActive) {\n leaveControl();\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', keyDownHandler);\n document.addEventListener('click', handleDocumentClick, true);\n\n return () => {\n document.removeEventListener('click', handleDocumentClick, true);\n document.removeEventListener('keydown', keyDownHandler);\n };\n });\n\n useEffect(() => {\n setDisplayValue(value ? value.userProvidedText ?? '' : '');\n setHasValue(!!value && !!value.userProvidedText);\n setHasSelection(!!value && !!value.selectionValue);\n }, [value]);\n\n const handleTextboxClick = () => {\n expandDropdown();\n };\n\n const handleTextInput = (e) => {\n const userProvidedText = e.target.value;\n\n // If the user has removed all text from the textbox\n if (!userProvidedText.length) {\n // reset to a \"no text, nothing selected\" state\n setDisplayValue('');\n setHasValue(false);\n setHasSelection(false);\n\n // clear and close the dropdown\n setDropdownItems([]);\n collapseDropdown();\n\n // if the consumer has provided an onChange handler\n if (onChange) {\n // send a default empty object\n onChange({\n userProvidedText: '',\n selectionValue: '',\n selectionId: '',\n });\n }\n return;\n }\n\n // the user has entered text, we have a value\n setHasValue(true);\n\n // filter dropdown based on entered text\n const filteredItems = getItems(userProvidedText);\n setDropdownItems(filteredItems);\n\n // check for matches in the dropdown\n const matchingDropdownItem = filteredItems.find((o) => (\n o.props.children.toLowerCase() === userProvidedText.toLowerCase()\n ));\n\n // if we didn't find a match\n if (!matchingDropdownItem) {\n // no match means no selection\n setHasSelection(false);\n\n // set the text in the state\n setDisplayValue(userProvidedText);\n\n // if the consumer has provided an onChange handler\n if (onChange) {\n // send an object with the user provided text only\n onChange({\n userProvidedText,\n selectionValue: '',\n selectionId: '',\n });\n }\n return;\n }\n\n // we found a match, we have a selection!\n setHasSelection(true);\n\n // set the display value based on the item in the dropdown\n // this matters because we match case insensitively\n setDisplayValue(matchingDropdownItem.props.children);\n\n // if the consumer has provided an onChange handler\n if (onChange) {\n // send an object with the selected item values\n onChange({\n userProvidedText: matchingDropdownItem.props.children,\n selectionValue: matchingDropdownItem.props.children,\n selectionId: matchingDropdownItem.props.id,\n });\n }\n };\n\n const { getControlProps } = useFormGroupContext();\n const controlProps = getControlProps(props);\n\n return (\n <div className=\"pgn__form-autosuggest__wrapper\" ref={parentRef} onFocus={enterControl}>\n <div aria-live=\"assertive\" className=\"sr-only\" data-testid=\"autosuggest-screen-reader-options-count\">\n {`${dropdownItems.length} options found`}\n </div>\n <FormGroupContextProvider\n controlId={controlProps.id}\n isInvalid={!isValid}\n >\n <FormControl\n ref={formControlRef}\n aria-expanded={(dropdownItems.length > 0).toString()}\n aria-owns=\"pgn__form-autosuggest__dropdown-box\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n value={displayValue}\n aria-invalid={errorMessage}\n aria-activedescendant={activeMenuItemId}\n onChange={handleTextInput}\n onClick={handleTextboxClick}\n trailingElement={iconToggle}\n data-testid=\"autosuggest-textbox-input\"\n {...controlProps}\n />\n\n {helpMessage && isValid && (\n <FormControlFeedback type=\"default\">\n {helpMessage}\n </FormControlFeedback>\n )}\n\n {!isValid && (\n <FormControlFeedback type=\"invalid\" feedback-for={controlProps.name}>\n {errorMessage}\n </FormControlFeedback>\n )}\n </FormGroupContextProvider>\n <ul\n id=\"pgn__form-autosuggest__dropdown-box\"\n className=\"pgn__form-autosuggest__dropdown\"\n role=\"listbox\"\n >\n {isLoading ? (\n <div className=\"pgn__form-autosuggest__dropdown-loading\">\n <Spinner\n animation=\"border\"\n variant=\"dark\"\n screenReaderText={screenReaderText}\n data-testid=\"autosuggest-loading-spinner\"\n />\n </div>\n ) : dropdownItems.length > 0 && dropdownItems}\n </ul>\n </div>\n );\n },\n);\n\nFormAutosuggest.defaultProps = {\n arrowKeyNavigationSelector: 'a:not(:disabled),li:not(:disabled, .btn-icon),input:not(:disabled)',\n ignoredArrowKeysNames: ['ArrowRight', 'ArrowLeft'],\n isLoading: false,\n className: null,\n floatingLabel: null,\n onChange: null,\n helpMessage: '',\n placeholder: '',\n value: null,\n isValueRequired: false,\n valueRequiredErrorMessageText: null,\n isSelectionRequired: false,\n selectionRequiredErrorMessageText: null,\n hasCustomError: false,\n customErrorMessageText: null,\n readOnly: false,\n children: null,\n name: 'form-autosuggest',\n screenReaderText: 'loading',\n};\n\nFormAutosuggest.propTypes = {\n /**\n * Specifies the CSS selector string that indicates to which elements\n * the user can navigate using the arrow keys\n */\n arrowKeyNavigationSelector: PropTypes.string,\n /** Specifies ignored hook keys. */\n ignoredArrowKeysNames: PropTypes.arrayOf(PropTypes.string),\n /** Specifies loading state. */\n isLoading: PropTypes.bool,\n /** Specifies class name to append to the base element. */\n className: PropTypes.string,\n /** Specifies floating label to display for the input component. */\n floatingLabel: PropTypes.string,\n /** Specifies onChange event handler. */\n onChange: PropTypes.func,\n /** Specifies help information for the user. */\n helpMessage: PropTypes.string,\n /** Specifies the placeholder text for the input. */\n placeholder: PropTypes.string,\n /** Specifies values for the input. */\n value: PropTypes.shape({\n userProvidedText: PropTypes.string,\n selectionValue: PropTypes.string,\n selectionId: PropTypes.string,\n }),\n /** Specifies if empty values trigger an error state */\n isValueRequired: PropTypes.bool,\n /** Informs user they must input a value. */\n valueRequiredErrorMessageText: requiredWhen(PropTypes.string, 'isValueRequired'),\n /** Specifies if freeform values trigger an error state */\n isSelectionRequired: PropTypes.bool,\n /** Informs user they must make a selection. */\n selectionRequiredErrorMessageText: requiredWhen(PropTypes.string, 'isSelectionRequired'),\n /** Specifies the control is in a consumer provided error state */\n hasCustomError: PropTypes.bool,\n /** Informs user of other errors. */\n customErrorMessageText: requiredWhen(PropTypes.string, 'hasCustomError'),\n /** Specifies the name of the base input element. */\n name: PropTypes.string,\n /** Selected list item is read-only. */\n readOnly: PropTypes.bool,\n /** Specifies the content of the `FormAutosuggest`. */\n children: PropTypes.node,\n /** Specifies the screen reader text */\n screenReaderText: PropTypes.string,\n};\n\nexport default FormAutosuggest;\n"],"mappings":"AAAA,OAAOA,KAAK,IACVC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,UAAU,EAAEC,mBAAmB,QACvD,OAAO;AACd,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,EAAE,IAAIC,MAAM,QAAQ,MAAM;AACnC,SAASC,OAAO,QAAQ,YAAY;AACpC,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,eAAe,EAAEC,iBAAiB,QAAQ,aAAa;AAChE,OAAOC,IAAI,MAAM,SAAS;AAC1B,SAASC,wBAAwB,EAAEC,mBAAmB,QAAQ,oBAAoB;AAClF,OAAOC,WAAW,MAAM,eAAe;AACvC,OAAOC,mBAAmB,MAAM,uBAAuB;AACvD,OAAOC,UAAU,MAAM,eAAe;AACtC,OAAOC,OAAO,MAAM,YAAY;AAChC,OAAOC,qBAAqB,MAAM,gCAAgC;AAClE,OAAOC,QAAQ,MAAM,YAAY;AAEjC,MAAMC,eAAe,gBAAGlB,UAAU,CAChC,CAAAmB,IAAA,EAkBEC,GAAG,KACA;EAAA,IAlBH;IACEC,QAAQ;IACRC,0BAA0B;IAC1BC,qBAAqB;IACrBC,gBAAgB;IAChBC,KAAK;IACLC,SAAS;IACTC,eAAe;IACfC,6BAA6B;IAC7BC,mBAAmB;IACnBC,iCAAiC;IACjCC,cAAc;IACdC,sBAAsB;IACtBC,QAAQ;IACRC,WAAW;IACX,GAAGC;EACL,CAAC,GAAAhB,IAAA;EAGD,MAAMiB,IAAI,GAAG/B,OAAO,CAAC,CAAC;EACtB,MAAMgC,cAAc,GAAGtC,MAAM,CAAC,CAAC;EAC/B,MAAMuC,SAAS,GAAGtB,qBAAqB,CAAC;IACtCuB,SAAS,EAAEjB,0BAA0B;IACrCkB,WAAW,EAAEjB;EACf,CAAC,CAAC;EACF,MAAM,CAACkB,kBAAkB,EAAEC,qBAAqB,CAAC,GAAG5C,QAAQ,CAAC,KAAK,CAAC;EACnE,MAAM,CAAC6C,QAAQ,EAAEC,WAAW,CAAC,GAAG9C,QAAQ,CAAC,KAAK,CAAC;EAC/C,MAAM,CAAC+C,QAAQ,EAAEC,WAAW,CAAC,GAAGhD,QAAQ,CAAC,KAAK,CAAC;EAC/C,MAAM,CAACiD,YAAY,EAAEC,eAAe,CAAC,GAAGlD,QAAQ,CAAC,KAAK,CAAC;EACvD,MAAM,CAACmD,YAAY,EAAEC,eAAe,CAAC,GAAGpD,QAAQ,CAAC2B,KAAK,EAAE0B,gBAAgB,IAAI,EAAE,CAAC;EAC/E,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGvD,QAAQ,CAAC,EAAE,CAAC;EACtD,MAAM,CAACwD,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGzD,QAAQ,CAAC,IAAI,CAAC;EAC9D,MAAM,CAAC0D,OAAO,EAAEC,UAAU,CAAC,GAAG3D,QAAQ,CAAC,IAAI,CAAC;EAC5C,MAAM,CAAC4D,YAAY,EAAEC,eAAe,CAAC,GAAG7D,QAAQ,CAAC,EAAE,CAAC;EAEpD,MAAM8D,mBAAmB,GAAIC,UAAU,IAAK;IAC1CN,mBAAmB,CAACM,UAAU,CAAC;EACjC,CAAC;EAED,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;IAC7BT,gBAAgB,CAAC,EAAE,CAAC;IACpBX,qBAAqB,CAAC,KAAK,CAAC;IAC5Ba,mBAAmB,CAAC,IAAI,CAAC;EAC3B,CAAC;EAED,MAAMQ,gBAAgB,GAAGA,CAACC,CAAC,EAAEC,OAAO,KAAK;IACvC,MAAMC,aAAa,GAAGF,CAAC,CAACG,aAAa,CAACC,YAAY,CAAC,YAAY,CAAC;IAChE,MAAMC,UAAU,GAAGL,CAAC,CAACG,aAAa,CAACG,EAAE;IAErCxB,WAAW,CAAC,IAAI,CAAC;IACjBE,eAAe,CAAC,IAAI,CAAC;IACrBE,eAAe,CAACgB,aAAa,CAAC;IAE9B,IAAIjC,QAAQ,KAAK,CAACR,KAAK,IAAKA,KAAK,IAAIyC,aAAa,KAAKzC,KAAK,CAAC8C,cAAe,CAAC,EAAE;MAC7EtC,QAAQ,CAAC;QACPkB,gBAAgB,EAAEe,aAAa;QAC/BK,cAAc,EAAEL,aAAa;QAC7BM,WAAW,EAAEH;MACf,CAAC,CAAC;IACJ;IAEAP,gBAAgB,CAAC,CAAC;IAElB,IAAIG,OAAO,EAAE;MACXA,OAAO,CAACD,CAAC,CAAC;IACZ;EACF,CAAC;EAED,SAASS,QAAQA,CAAA,EAAiB;IAAA,IAAhBC,SAAS,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;IAC9B,IAAIG,WAAW,GAAGlF,KAAK,CAACmF,QAAQ,CAACC,GAAG,CAAC3D,QAAQ,EAAG4D,KAAK,IAAK;MACxD,MAAM;QAAE5D,QAAQ,EAAE6D,aAAa;QAAEjB,OAAO;QAAE,GAAGkB;MAAK,CAAC,GAAGF,KAAK,CAAC9C,KAAK;MACjE,MAAM0B,UAAU,GAAGoB,KAAK,CAAC9C,KAAK,CAACmC,EAAE,IAAIlE,MAAM,CAAC,CAAC;MAE7C,oBAAOR,KAAK,CAACwF,YAAY,CAACH,KAAK,EAAE;QAC/B,GAAGE,IAAI;QACP9D,QAAQ,EAAE6D,aAAa;QACvB,YAAY,EAAEA,aAAa;QAC3BjB,OAAO,EAAGD,CAAC,IAAKD,gBAAgB,CAACC,CAAC,EAAEC,OAAO,CAAC;QAC5CK,EAAE,EAAET,UAAU;QACdwB,OAAO,EAAEA,CAAA,KAAMzB,mBAAmB,CAACC,UAAU;MAC/C,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAIa,SAAS,CAACE,MAAM,GAAG,CAAC,EAAE;MACxBE,WAAW,GAAGA,WAAW,CACtBQ,MAAM,CAAEC,GAAG,IAAMA,GAAG,CAACpD,KAAK,CAACd,QAAQ,CAACmE,WAAW,CAAC,CAAC,CAACC,QAAQ,CAACf,SAAS,CAACc,WAAW,CAAC,CAAC,CAAE,CAAC;IAC1F;IAEA,OAAOV,WAAW;EACpB;EAEA,MAAMY,cAAc,GAAGA,CAAA,KAAM;IAC3BrC,gBAAgB,CAACoB,QAAQ,CAACxB,YAAY,CAAC,CAAC;IACxCQ,UAAU,CAAC,IAAI,CAAC;IAChBE,eAAe,CAAC,EAAE,CAAC;IACnBjB,qBAAqB,CAAC,IAAI,CAAC;EAC7B,CAAC;EAED,MAAMiD,cAAc,GAAGA,CAAA,KAAM;IAC3B,IAAIlD,kBAAkB,EAAE;MACtBqB,gBAAgB,CAAC,CAAC;IACpB,CAAC,MAAM;MACL4B,cAAc,CAAC,CAAC;IAClB;EACF,CAAC;EAED,MAAME,UAAU,gBACdhG,KAAA,CAAAiG,aAAA,CAAC/E,UAAU;IACTgF,SAAS,EAAC,oCAAoC;IAC9C,eAAY,wBAAwB;IACpCC,QAAQ,EAAC,IAAI;IACbC,GAAG,EAAEvD,kBAAkB,GAAGlC,eAAe,GAAGC,iBAAkB;IAC9DyF,MAAM,EAAExF,IAAK;IACbyF,IAAI,EAAC,IAAI;IACTC,OAAO,EAAC,WAAW;IACnBC,GAAG,EAAE3D,kBAAkB,GACnBL,IAAI,CAACiE,aAAa,CAACpF,QAAQ,CAACqF,gBAAgB,CAAC,GAC7ClE,IAAI,CAACiE,aAAa,CAACpF,QAAQ,CAACsF,gBAAgB,CAAE;IAClDtC,OAAO,EAAE0B;EAAe,CACzB,CACF;EAED,MAAMa,YAAY,GAAGA,CAAA,KAAM;IACzB5D,WAAW,CAAC,IAAI,CAAC;EACnB,CAAC;EAED,MAAM6D,+BAA+B,GAAGA,CAAA,KAAM;IAC5C,IAAI1E,cAAc,EAAE;MAClB0B,UAAU,CAAC,KAAK,CAAC;MACjBE,eAAe,CAAC3B,sBAAsB,CAAC;MACvC;IACF;IAEA,IAAIL,eAAe,IAAI,CAACkB,QAAQ,EAAE;MAChCY,UAAU,CAAC,KAAK,CAAC;MACjBE,eAAe,CAAC/B,6BAA6B,CAAC;MAC9C;IACF;IAEA,IAAIiB,QAAQ,IAAIhB,mBAAmB,IAAI,CAACkB,YAAY,EAAE;MACpDU,UAAU,CAAC,KAAK,CAAC;MACjBE,eAAe,CAAC7B,iCAAiC,CAAC;MAClD;IACF;IAEA2B,UAAU,CAAC,IAAI,CAAC;IAChBE,eAAe,CAAC,EAAE,CAAC;EACrB,CAAC;EAED1D,mBAAmB,CAACmB,GAAG,EAAE,OAAO;IAC9B;IACA;IACAqF;EACF,CAAC,CAAC,CAAC;EAEH,MAAMC,YAAY,GAAGA,CAAA,KAAM;IACzB9D,WAAW,CAAC,KAAK,CAAC;IAClBkB,gBAAgB,CAAC,CAAC;IAClB2C,+BAA+B,CAAC,CAAC;EACnC,CAAC;EAED,MAAME,cAAc,GAAG3C,CAAC,IAAI;IAC1B,IAAI,CAACrB,QAAQ,EAAE;MACb;IACF;IAEA,IAAIqB,CAAC,CAAC4C,GAAG,KAAK,QAAQ,EAAE;MACtB5C,CAAC,CAAC6C,cAAc,CAAC,CAAC;MAElB,IAAIxE,cAAc,EAAE;QAClBA,cAAc,CAACyE,OAAO,CAACC,KAAK,CAAC,CAAC;MAChC;MAEAjD,gBAAgB,CAAC,CAAC;MAClB;IACF;IAEA,IAAIE,CAAC,CAAC4C,GAAG,KAAK,KAAK,EAAE;MACnBF,YAAY,CAAC,CAAC;IAChB;EACF,CAAC;EAED,MAAMM,mBAAmB,GAAIhD,CAAC,IAAK;IACjC,IAAI1B,SAAS,CAACwE,OAAO,IAAI,CAACxE,SAAS,CAACwE,OAAO,CAACG,QAAQ,CAACjD,CAAC,CAACkD,MAAM,CAAC,IAAIvE,QAAQ,EAAE;MAC1E+D,YAAY,CAAC,CAAC;IAChB;EACF,CAAC;EAED7G,SAAS,CAAC,MAAM;IACdsH,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAET,cAAc,CAAC;IACpDQ,QAAQ,CAACC,gBAAgB,CAAC,OAAO,EAAEJ,mBAAmB,EAAE,IAAI,CAAC;IAE7D,OAAO,MAAM;MACXG,QAAQ,CAACE,mBAAmB,CAAC,OAAO,EAAEL,mBAAmB,EAAE,IAAI,CAAC;MAChEG,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEV,cAAc,CAAC;IACzD,CAAC;EACH,CAAC,CAAC;EAEF9G,SAAS,CAAC,MAAM;IACdqD,eAAe,CAACzB,KAAK,GAAGA,KAAK,CAAC0B,gBAAgB,IAAI,EAAE,GAAG,EAAE,CAAC;IAC1DL,WAAW,CAAC,CAAC,CAACrB,KAAK,IAAI,CAAC,CAACA,KAAK,CAAC0B,gBAAgB,CAAC;IAChDH,eAAe,CAAC,CAAC,CAACvB,KAAK,IAAI,CAAC,CAACA,KAAK,CAAC8C,cAAc,CAAC;EACpD,CAAC,EAAE,CAAC9C,KAAK,CAAC,CAAC;EAEX,MAAM6F,kBAAkB,GAAGA,CAAA,KAAM;IAC/B5B,cAAc,CAAC,CAAC;EAClB,CAAC;EAED,MAAM6B,eAAe,GAAIvD,CAAC,IAAK;IAC7B,MAAMb,gBAAgB,GAAGa,CAAC,CAACkD,MAAM,CAACzF,KAAK;;IAEvC;IACA,IAAI,CAAC0B,gBAAgB,CAACyB,MAAM,EAAE;MAC9B;MACE1B,eAAe,CAAC,EAAE,CAAC;MACnBJ,WAAW,CAAC,KAAK,CAAC;MAClBE,eAAe,CAAC,KAAK,CAAC;;MAEtB;MACAK,gBAAgB,CAAC,EAAE,CAAC;MACpBS,gBAAgB,CAAC,CAAC;;MAElB;MACA,IAAI7B,QAAQ,EAAE;QACd;QACEA,QAAQ,CAAC;UACPkB,gBAAgB,EAAE,EAAE;UACpBoB,cAAc,EAAE,EAAE;UAClBC,WAAW,EAAE;QACf,CAAC,CAAC;MACJ;MACA;IACF;;IAEA;IACA1B,WAAW,CAAC,IAAI,CAAC;;IAEjB;IACA,MAAM0E,aAAa,GAAG/C,QAAQ,CAACtB,gBAAgB,CAAC;IAChDE,gBAAgB,CAACmE,aAAa,CAAC;;IAE/B;IACA,MAAMC,oBAAoB,GAAGD,aAAa,CAACE,IAAI,CAAEC,CAAC,IAChDA,CAAC,CAACxF,KAAK,CAACd,QAAQ,CAACmE,WAAW,CAAC,CAAC,KAAKrC,gBAAgB,CAACqC,WAAW,CAAC,CACjE,CAAC;;IAEF;IACA,IAAI,CAACiC,oBAAoB,EAAE;MAC3B;MACEzE,eAAe,CAAC,KAAK,CAAC;;MAEtB;MACAE,eAAe,CAACC,gBAAgB,CAAC;;MAEjC;MACA,IAAIlB,QAAQ,EAAE;QACd;QACEA,QAAQ,CAAC;UACPkB,gBAAgB;UAChBoB,cAAc,EAAE,EAAE;UAClBC,WAAW,EAAE;QACf,CAAC,CAAC;MACJ;MACA;IACF;;IAEA;IACAxB,eAAe,CAAC,IAAI,CAAC;;IAErB;IACA;IACAE,eAAe,CAACuE,oBAAoB,CAACtF,KAAK,CAACd,QAAQ,CAAC;;IAEpD;IACA,IAAIY,QAAQ,EAAE;MACd;MACEA,QAAQ,CAAC;QACPkB,gBAAgB,EAAEsE,oBAAoB,CAACtF,KAAK,CAACd,QAAQ;QACrDkD,cAAc,EAAEkD,oBAAoB,CAACtF,KAAK,CAACd,QAAQ;QACnDmD,WAAW,EAAEiD,oBAAoB,CAACtF,KAAK,CAACmC;MAC1C,CAAC,CAAC;IACJ;EACF,CAAC;EAED,MAAM;IAAEsD;EAAgB,CAAC,GAAGjH,mBAAmB,CAAC,CAAC;EACjD,MAAMkH,YAAY,GAAGD,eAAe,CAACzF,KAAK,CAAC;EAE3C,oBACEvC,KAAA,CAAAiG,aAAA;IAAKC,SAAS,EAAC,gCAAgC;IAAC1E,GAAG,EAAEkB,SAAU;IAAC+C,OAAO,EAAEmB;EAAa,gBACpF5G,KAAA,CAAAiG,aAAA;IAAK,aAAU,WAAW;IAACC,SAAS,EAAC,SAAS;IAAC,eAAY;EAAyC,GAChG,GAAE1C,aAAa,CAACwB,MAAO,gBACtB,CAAC,eACNhF,KAAA,CAAAiG,aAAA,CAACnF,wBAAwB;IACvBoH,SAAS,EAAED,YAAY,CAACvD,EAAG;IAC3ByD,SAAS,EAAE,CAACvE;EAAQ,gBAEpB5D,KAAA,CAAAiG,aAAA,CAACjF,WAAW;IACVQ,GAAG,EAAEiB,cAAe;IACpB,iBAAe,CAACe,aAAa,CAACwB,MAAM,GAAG,CAAC,EAAEoD,QAAQ,CAAC,CAAE;IACrD,aAAU,qCAAqC;IAC/CC,IAAI,EAAC,UAAU;IACf,qBAAkB,MAAM;IACxBC,YAAY,EAAC,KAAK;IAClBzG,KAAK,EAAEwB,YAAa;IACpB,gBAAcS,YAAa;IAC3B,yBAAuBJ,gBAAiB;IACxCrB,QAAQ,EAAEsF,eAAgB;IAC1BtD,OAAO,EAAEqD,kBAAmB;IAC5Ba,eAAe,EAAEvC,UAAW;IAC5B,eAAY,2BAA2B;IAAA,GACnCiC;EAAY,CACjB,CAAC,EAED3F,WAAW,IAAIsB,OAAO,iBACvB5D,KAAA,CAAAiG,aAAA,CAAChF,mBAAmB;IAACuH,IAAI,EAAC;EAAS,GAChClG,WACkB,CACpB,EAEA,CAACsB,OAAO,iBACT5D,KAAA,CAAAiG,aAAA,CAAChF,mBAAmB;IAACuH,IAAI,EAAC,SAAS;IAAC,gBAAcP,YAAY,CAACQ;EAAK,GACjE3E,YACkB,CAEG,CAAC,eAC3B9D,KAAA,CAAAiG,aAAA;IACEvB,EAAE,EAAC,qCAAqC;IACxCwB,SAAS,EAAC,iCAAiC;IAC3CmC,IAAI,EAAC;EAAS,GAEbvG,SAAS,gBACR9B,KAAA,CAAAiG,aAAA;IAAKC,SAAS,EAAC;EAAyC,gBACtDlG,KAAA,CAAAiG,aAAA,CAAC9E,OAAO;IACNuH,SAAS,EAAC,QAAQ;IAClBnC,OAAO,EAAC,MAAM;IACd3E,gBAAgB,EAAEA,gBAAiB;IACnC,eAAY;EAA6B,CAC1C,CACE,CAAC,GACJ4B,aAAa,CAACwB,MAAM,GAAG,CAAC,IAAIxB,aAC9B,CACD,CAAC;AAEV,CACF,CAAC;AAEDlC,eAAe,CAACqH,YAAY,GAAG;EAC7BjH,0BAA0B,EAAE,oEAAoE;EAChGC,qBAAqB,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;EAClDG,SAAS,EAAE,KAAK;EAChBoE,SAAS,EAAE,IAAI;EACf0C,aAAa,EAAE,IAAI;EACnBvG,QAAQ,EAAE,IAAI;EACdC,WAAW,EAAE,EAAE;EACfuG,WAAW,EAAE,EAAE;EACfhH,KAAK,EAAE,IAAI;EACXE,eAAe,EAAE,KAAK;EACtBC,6BAA6B,EAAE,IAAI;EACnCC,mBAAmB,EAAE,KAAK;EAC1BC,iCAAiC,EAAE,IAAI;EACvCC,cAAc,EAAE,KAAK;EACrBC,sBAAsB,EAAE,IAAI;EAC5B0G,QAAQ,EAAE,KAAK;EACfrH,QAAQ,EAAE,IAAI;EACdgH,IAAI,EAAE,kBAAkB;EACxB7G,gBAAgB,EAAE;AACpB,CAAC;AAEDN,eAAe,CAACyH,SAAS,GAAG;EAC1B;AACF;AACA;AACA;EACErH,0BAA0B,EAAEpB,SAAS,CAAC0I,MAAM;EAC5C;EACArH,qBAAqB,EAAErB,SAAS,CAAC2I,OAAO,CAAC3I,SAAS,CAAC0I,MAAM,CAAC;EAC1D;EACAlH,SAAS,EAAExB,SAAS,CAAC4I,IAAI;EACzB;EACAhD,SAAS,EAAE5F,SAAS,CAAC0I,MAAM;EAC3B;EACAJ,aAAa,EAAEtI,SAAS,CAAC0I,MAAM;EAC/B;EACA3G,QAAQ,EAAE/B,SAAS,CAAC6I,IAAI;EACxB;EACA7G,WAAW,EAAEhC,SAAS,CAAC0I,MAAM;EAC7B;EACAH,WAAW,EAAEvI,SAAS,CAAC0I,MAAM;EAC7B;EACAnH,KAAK,EAAEvB,SAAS,CAAC8I,KAAK,CAAC;IACrB7F,gBAAgB,EAAEjD,SAAS,CAAC0I,MAAM;IAClCrE,cAAc,EAAErE,SAAS,CAAC0I,MAAM;IAChCpE,WAAW,EAAEtE,SAAS,CAAC0I;EACzB,CAAC,CAAC;EACF;EACAjH,eAAe,EAAEzB,SAAS,CAAC4I,IAAI;EAC/B;EACAlH,6BAA6B,EAAEtB,YAAY,CAACJ,SAAS,CAAC0I,MAAM,EAAE,iBAAiB,CAAC;EAChF;EACA/G,mBAAmB,EAAE3B,SAAS,CAAC4I,IAAI;EACnC;EACAhH,iCAAiC,EAAExB,YAAY,CAACJ,SAAS,CAAC0I,MAAM,EAAE,qBAAqB,CAAC;EACxF;EACA7G,cAAc,EAAE7B,SAAS,CAAC4I,IAAI;EAC9B;EACA9G,sBAAsB,EAAE1B,YAAY,CAACJ,SAAS,CAAC0I,MAAM,EAAE,gBAAgB,CAAC;EACxE;EACAP,IAAI,EAAEnI,SAAS,CAAC0I,MAAM;EACtB;EACAF,QAAQ,EAAExI,SAAS,CAAC4I,IAAI;EACxB;EACAzH,QAAQ,EAAEnB,SAAS,CAAC+I,IAAI;EACxB;EACAzH,gBAAgB,EAAEtB,SAAS,CAAC0I;AAC9B,CAAC;AAED,eAAe1H,eAAe","ignoreList":[]}
1
+ {"version":3,"file":"FormAutosuggest.js","names":["React","useEffect","useState","useRef","forwardRef","useImperativeHandle","PropTypes","v4","uuidv4","useIntl","requiredWhen","KeyboardArrowUp","KeyboardArrowDown","Icon","FormGroupContextProvider","useFormGroupContext","FormControl","FormControlFeedback","IconButton","Spinner","useArrowKeyNavigation","messages","FormAutosuggest","_ref","ref","children","arrowKeyNavigationSelector","ignoredArrowKeysNames","screenReaderText","value","isLoading","isValueRequired","valueRequiredErrorMessageText","isSelectionRequired","selectionRequiredErrorMessageText","hasCustomError","customErrorMessageText","onChange","helpMessage","props","intl","formControlRef","parentRef","selectors","ignoredKeys","isDropdownExpanded","setIsDropdownExpanded","isActive","setIsActive","hasValue","setHasValue","hasSelection","setHasSelection","displayValue","setDisplayValue","userProvidedText","dropdownItems","setDropdownItems","activeMenuItemId","setActiveMenuItemId","isValid","setIsValid","errorMessage","setErrorMessage","handleMenuItemFocus","menuItemId","collapseDropdown","handleItemSelect","e","onClick","selectedValue","currentTarget","getAttribute","selectedId","id","selectionValue","selectionId","getItems","strToFind","arguments","length","undefined","childrenOpt","Children","map","child","childChildren","rest","cloneElement","onFocus","filter","opt","toLowerCase","includes","expandDropdown","toggleDropdown","iconToggle","createElement","className","tabIndex","src","iconAs","size","variant","alt","formatMessage","iconButtonClosed","iconButtonOpened","enterControl","updateErrorStateAndErrorMessage","leaveControl","keyDownHandler","key","preventDefault","current","focus","handleDocumentClick","contains","target","document","addEventListener","removeEventListener","handleTextboxClick","handleTextInput","filteredItems","matchingDropdownItem","find","o","getControlProps","controlProps","controlId","isInvalid","toString","role","autoComplete","trailingElement","type","name","animation","defaultProps","floatingLabel","placeholder","readOnly","propTypes","string","arrayOf","bool","func","shape","node"],"sources":["../../src/Form/FormAutosuggest.jsx"],"sourcesContent":["import React, {\n useEffect, useState, useRef, forwardRef, useImperativeHandle,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useIntl } from 'react-intl';\nimport { requiredWhen } from '../utils/propTypes';\nimport { KeyboardArrowUp, KeyboardArrowDown } from '../../icons';\nimport Icon from '../Icon';\nimport { FormGroupContextProvider, useFormGroupContext } from './FormGroupContext';\nimport FormControl from './FormControl';\nimport FormControlFeedback from './FormControlFeedback';\nimport IconButton from '../IconButton';\nimport Spinner from '../Spinner';\nimport useArrowKeyNavigation from '../hooks/useArrowKeyNavigationHook';\nimport messages from './messages';\n\nconst FormAutosuggest = forwardRef(\n (\n {\n children,\n arrowKeyNavigationSelector,\n ignoredArrowKeysNames,\n screenReaderText,\n value,\n isLoading,\n isValueRequired,\n valueRequiredErrorMessageText,\n isSelectionRequired,\n selectionRequiredErrorMessageText,\n hasCustomError,\n customErrorMessageText,\n onChange,\n helpMessage,\n ...props\n },\n ref,\n ) => {\n const intl = useIntl();\n const formControlRef = useRef();\n const parentRef = useArrowKeyNavigation({\n selectors: arrowKeyNavigationSelector,\n ignoredKeys: ignoredArrowKeysNames,\n });\n const [isDropdownExpanded, setIsDropdownExpanded] = useState(false);\n const [isActive, setIsActive] = useState(false);\n const [hasValue, setHasValue] = useState(false);\n const [hasSelection, setHasSelection] = useState(false);\n const [displayValue, setDisplayValue] = useState(value?.userProvidedText || '');\n const [dropdownItems, setDropdownItems] = useState([]);\n const [activeMenuItemId, setActiveMenuItemId] = useState(null);\n const [isValid, setIsValid] = useState(true);\n const [errorMessage, setErrorMessage] = useState('');\n\n const handleMenuItemFocus = (menuItemId) => {\n setActiveMenuItemId(menuItemId);\n };\n\n const collapseDropdown = () => {\n setDropdownItems([]);\n setIsDropdownExpanded(false);\n setActiveMenuItemId(null);\n };\n\n const handleItemSelect = (e, onClick) => {\n const selectedValue = e.currentTarget.getAttribute('data-value');\n const selectedId = e.currentTarget.id;\n\n setHasValue(true);\n setHasSelection(true);\n setDisplayValue(selectedValue);\n\n if (onChange && (!value || (value && selectedValue !== value.selectionValue))) {\n onChange({\n userProvidedText: selectedValue,\n selectionValue: selectedValue,\n selectionId: selectedId,\n });\n }\n\n collapseDropdown();\n\n if (onClick) {\n onClick(e);\n }\n };\n\n function getItems(strToFind = '') {\n let childrenOpt = React.Children.map(children, (child) => {\n const { children: childChildren, onClick, ...rest } = child.props;\n const menuItemId = child.props.id ?? uuidv4();\n\n return React.cloneElement(child, {\n ...rest,\n children: childChildren,\n 'data-value': childChildren,\n onClick: (e) => handleItemSelect(e, onClick),\n id: menuItemId,\n onFocus: () => handleMenuItemFocus(menuItemId),\n });\n });\n\n if (strToFind.length > 0) {\n childrenOpt = childrenOpt\n .filter((opt) => (opt.props.children.toLowerCase().includes(strToFind.toLowerCase())));\n }\n\n return childrenOpt;\n }\n\n const expandDropdown = () => {\n setDropdownItems(getItems(displayValue));\n setIsValid(true);\n setErrorMessage('');\n setIsDropdownExpanded(true);\n };\n\n const toggleDropdown = () => {\n if (isDropdownExpanded) {\n collapseDropdown();\n } else {\n expandDropdown();\n }\n };\n\n const iconToggle = (\n <IconButton\n className=\"pgn__form-autosuggest__icon-button\"\n data-testid=\"autosuggest-iconbutton\"\n tabIndex=\"-1\"\n src={isDropdownExpanded ? KeyboardArrowUp : KeyboardArrowDown}\n iconAs={Icon}\n size=\"sm\"\n variant=\"secondary\"\n alt={isDropdownExpanded\n ? intl.formatMessage(messages.iconButtonClosed)\n : intl.formatMessage(messages.iconButtonOpened)}\n onClick={toggleDropdown}\n />\n );\n\n const enterControl = () => {\n setIsActive(true);\n };\n\n const updateErrorStateAndErrorMessage = () => {\n if (hasCustomError) {\n setIsValid(false);\n setErrorMessage(customErrorMessageText);\n return;\n }\n\n if (isValueRequired && !hasValue) {\n setIsValid(false);\n setErrorMessage(valueRequiredErrorMessageText);\n return;\n }\n\n if (hasValue && isSelectionRequired && !hasSelection) {\n setIsValid(false);\n setErrorMessage(selectionRequiredErrorMessageText);\n return;\n }\n\n setIsValid(true);\n setErrorMessage('');\n };\n\n useImperativeHandle(ref, () => ({\n // expose updateErrorStateAndErrorMessage so consumers can trigger validation\n // when changing the value of the control externally\n updateErrorStateAndErrorMessage,\n }));\n\n const leaveControl = () => {\n setIsActive(false);\n collapseDropdown();\n updateErrorStateAndErrorMessage();\n };\n\n const keyDownHandler = e => {\n if (!isActive) {\n return;\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n\n if (formControlRef) {\n formControlRef.current.focus();\n }\n\n collapseDropdown();\n return;\n }\n\n if (e.key === 'Tab') {\n leaveControl();\n }\n };\n\n const handleDocumentClick = (e) => {\n if (parentRef.current && !parentRef.current.contains(e.target) && isActive) {\n leaveControl();\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', keyDownHandler);\n document.addEventListener('click', handleDocumentClick, true);\n\n return () => {\n document.removeEventListener('click', handleDocumentClick, true);\n document.removeEventListener('keydown', keyDownHandler);\n };\n });\n\n useEffect(() => {\n setDisplayValue(value ? value.userProvidedText ?? '' : '');\n setHasValue(!!value && !!value.userProvidedText);\n setHasSelection(!!value && !!value.selectionValue);\n }, [value]);\n\n const handleTextboxClick = () => {\n expandDropdown();\n };\n\n const handleTextInput = (e) => {\n const userProvidedText = e.target.value;\n\n // If the user has removed all text from the textbox\n if (!userProvidedText.length) {\n // reset to a \"no text, nothing selected\" state\n setDisplayValue('');\n setHasValue(false);\n setHasSelection(false);\n\n // clear and close the dropdown\n setDropdownItems([]);\n collapseDropdown();\n\n // if the consumer has provided an onChange handler\n if (onChange) {\n // send a default empty object\n onChange({\n userProvidedText: '',\n selectionValue: '',\n selectionId: '',\n });\n }\n return;\n }\n\n // the user has entered text, we have a value\n setHasValue(true);\n\n // filter dropdown based on entered text\n const filteredItems = getItems(userProvidedText);\n setDropdownItems(filteredItems);\n\n // check for matches in the dropdown\n const matchingDropdownItem = filteredItems.find((o) => (\n o.props.children.toLowerCase() === userProvidedText.toLowerCase()\n ));\n\n // if we didn't find a match\n if (!matchingDropdownItem) {\n // no match means no selection\n setHasSelection(false);\n\n // set the text in the state\n setDisplayValue(userProvidedText);\n\n // if the consumer has provided an onChange handler\n if (onChange) {\n // send an object with the user provided text only\n onChange({\n userProvidedText,\n selectionValue: '',\n selectionId: '',\n });\n }\n return;\n }\n\n // we found a match, we have a selection!\n setHasSelection(true);\n\n // set the display value based on the item in the dropdown\n // this matters because we match case insensitively\n setDisplayValue(matchingDropdownItem.props.children);\n\n // if the consumer has provided an onChange handler\n if (onChange) {\n // send an object with the selected item values\n onChange({\n userProvidedText: matchingDropdownItem.props.children,\n selectionValue: matchingDropdownItem.props.children,\n selectionId: matchingDropdownItem.props.id,\n });\n }\n };\n\n const { getControlProps } = useFormGroupContext();\n const controlProps = getControlProps(props);\n\n return (\n <div className=\"pgn__form-autosuggest__wrapper\" ref={parentRef} onFocus={enterControl}>\n <div aria-live=\"assertive\" className=\"sr-only\" data-testid=\"autosuggest-screen-reader-options-count\">\n {`${dropdownItems.length} options found`}\n </div>\n <FormGroupContextProvider\n controlId={controlProps.id}\n isInvalid={!isValid}\n >\n <FormControl\n ref={formControlRef}\n aria-expanded={(dropdownItems.length > 0).toString()}\n aria-owns=\"pgn__form-autosuggest__dropdown-box\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n value={displayValue}\n aria-invalid={errorMessage}\n aria-activedescendant={activeMenuItemId}\n onChange={handleTextInput}\n onClick={handleTextboxClick}\n trailingElement={iconToggle}\n data-testid=\"autosuggest-textbox-input\"\n {...controlProps}\n />\n\n {helpMessage && isValid && (\n <FormControlFeedback type=\"default\">\n {helpMessage}\n </FormControlFeedback>\n )}\n\n {!isValid && (\n <FormControlFeedback type=\"invalid\" feedback-for={controlProps.name}>\n {errorMessage}\n </FormControlFeedback>\n )}\n </FormGroupContextProvider>\n <ul\n id=\"pgn__form-autosuggest__dropdown-box\"\n className=\"pgn__form-autosuggest__dropdown\"\n role=\"listbox\"\n >\n {isLoading ? (\n <div className=\"pgn__form-autosuggest__dropdown-loading\">\n <Spinner\n animation=\"border\"\n variant=\"dark\"\n screenReaderText={screenReaderText}\n data-testid=\"autosuggest-loading-spinner\"\n />\n </div>\n ) : dropdownItems.length > 0 && dropdownItems}\n </ul>\n </div>\n );\n },\n);\n\nFormAutosuggest.defaultProps = {\n arrowKeyNavigationSelector: 'a:not(:disabled),li:not(:disabled, .btn-icon),input:not(:disabled)',\n ignoredArrowKeysNames: ['ArrowRight', 'ArrowLeft'],\n isLoading: false,\n className: null,\n floatingLabel: null,\n onChange: null,\n helpMessage: '',\n placeholder: '',\n value: null,\n isValueRequired: false,\n valueRequiredErrorMessageText: null,\n isSelectionRequired: false,\n selectionRequiredErrorMessageText: null,\n hasCustomError: false,\n customErrorMessageText: null,\n readOnly: false,\n children: null,\n name: 'form-autosuggest',\n screenReaderText: 'loading',\n};\n\nFormAutosuggest.propTypes = {\n /**\n * Specifies the CSS selector string that indicates to which elements\n * the user can navigate using the arrow keys\n */\n arrowKeyNavigationSelector: PropTypes.string,\n /** Specifies ignored hook keys. */\n ignoredArrowKeysNames: PropTypes.arrayOf(PropTypes.string),\n /** Specifies loading state. */\n isLoading: PropTypes.bool,\n /** Specifies class name to append to the base element. */\n className: PropTypes.string,\n /** Specifies floating label to display for the input component. */\n floatingLabel: PropTypes.string,\n /** Specifies onChange event handler. */\n onChange: PropTypes.func,\n /** Specifies help information for the user. */\n helpMessage: PropTypes.string,\n /** Specifies the placeholder text for the input. */\n placeholder: PropTypes.string,\n /** Specifies values for the input. */\n value: PropTypes.shape({\n userProvidedText: PropTypes.string,\n selectionValue: PropTypes.string,\n selectionId: PropTypes.string,\n }),\n /** Specifies if empty values trigger an error state */\n isValueRequired: PropTypes.bool,\n /** Informs user they must input a value. */\n valueRequiredErrorMessageText: requiredWhen(PropTypes.string, 'isValueRequired'),\n /** Specifies if freeform values trigger an error state */\n isSelectionRequired: PropTypes.bool,\n /** Informs user they must make a selection. */\n selectionRequiredErrorMessageText: requiredWhen(PropTypes.string, 'isSelectionRequired'),\n /** Specifies the control is in a consumer provided error state */\n hasCustomError: PropTypes.bool,\n /** Informs user of other errors. */\n customErrorMessageText: requiredWhen(PropTypes.string, 'hasCustomError'),\n /** Specifies the name of the base input element. */\n name: PropTypes.string,\n /** Selected list item is read-only. */\n readOnly: PropTypes.bool,\n /** Specifies the content of the `FormAutosuggest`. */\n children: PropTypes.node,\n /** Specifies the screen reader text */\n screenReaderText: PropTypes.string,\n};\n\nexport default FormAutosuggest;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"FormControl.js","names":["React","useCallback","useEffect","PropTypes","classNames","RBFormControl","IMaskInput","useFormGroupContext","FormControlFeedback","FormControlDecoratorGroup","callAllHandlers","useHasValue","FormControl","forwardRef","_ref","ref","as","className","controlClassName","leadingElement","trailingElement","floatingLabel","autoResize","onChange","inputMask","props","isInvalid","isValid","getControlProps","formGroupContext","inputRef","useRef","resolvedRef","size","hasValue","checkInputEventValue","defaultValue","value","handleResize","current","initialHeight","offsets","offsetHeight","clientHeight","style","height","scrollHeight","controlProps","onBlur","handleOnChange","e","createElement","mask","SIZE_CHOICES","Feedback","Description","propTypes","string","elementType","func","oneOfType","number","id","oneOf","node","plaintext","bool","defaultProps","undefined"],"sources":["../../src/Form/FormControl.jsx"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport RBFormControl from 'react-bootstrap/FormControl';\nimport { IMaskInput } from 'react-imask';\nimport { useFormGroupContext } from './FormGroupContext';\nimport FormControlFeedback from './FormControlFeedback';\nimport FormControlDecoratorGroup from './FormControlDecoratorGroup';\n\nimport { callAllHandlers, useHasValue } from './fieldUtils';\n\nconst FormControl = React.forwardRef(({\n as,\n className,\n controlClassName,\n leadingElement,\n trailingElement,\n floatingLabel,\n autoResize,\n onChange,\n inputMask,\n ...props\n}, ref) => {\n const {\n isInvalid,\n isValid,\n getControlProps,\n ...formGroupContext\n } = useFormGroupContext();\n const inputRef = React.useRef();\n const resolvedRef = ref || inputRef;\n const size = props.size || formGroupContext.size;\n\n const [hasValue, checkInputEventValue] = useHasValue({\n defaultValue: props.defaultValue,\n value: props.value,\n });\n\n const handleResize = useCallback(() => {\n if (as === 'textarea' && autoResize) {\n if (!resolvedRef.current.initialHeight && !resolvedRef.current.offsets) {\n resolvedRef.current.initialHeight = resolvedRef.current.offsetHeight;\n resolvedRef.current.offsets = resolvedRef.current.offsetHeight - resolvedRef.current.clientHeight;\n }\n resolvedRef.current.style.height = `${resolvedRef.current.initialHeight}px`;\n resolvedRef.current.style.height = `${resolvedRef.current.scrollHeight + resolvedRef.current.offsets}px`;\n }\n }, [as, autoResize, resolvedRef]);\n\n useEffect(() => {\n handleResize();\n }, [handleResize]);\n\n const controlProps = getControlProps({\n ...props,\n // eslint-disable-next-line react/prop-types\n onBlur: callAllHandlers(checkInputEventValue, props.onBlur),\n });\n\n const handleOnChange = (e) => {\n handleResize();\n if (onChange) {\n onChange(e);\n }\n };\n\n return (\n <FormControlDecoratorGroup\n size={size}\n leadingElement={leadingElement}\n trailingElement={trailingElement}\n floatingLabel={floatingLabel}\n className={className}\n >\n <RBFormControl\n as={inputMask ? IMaskInput : as}\n ref={resolvedRef}\n size={size}\n isInvalid={isInvalid}\n isValid={isValid}\n className={classNames(controlClassName, {\n 'has-value': hasValue,\n })}\n onChange={handleOnChange}\n mask={inputMask}\n {...controlProps}\n />\n </FormControlDecoratorGroup>\n );\n});\n\nconst SIZE_CHOICES = ['sm', 'lg'];\n\nFormControl.Feedback = FormControlFeedback;\nFormControl.Description = FormControlFeedback;\n\nFormControl.propTypes = {\n /** Specifies class name to append to the base element. */\n className: PropTypes.string,\n /** Specifies base element for the control component. */\n as: PropTypes.elementType,\n /** Specifies function that is triggered on input value change. */\n onChange: PropTypes.func,\n /** Specifies default value of the input component. */\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /** Specifies current value of the input component. */\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /** Specifies id of the control component. */\n id: PropTypes.string,\n /** Specifies class name for the control component. */\n controlClassName: PropTypes.string,\n /** Specifies size for the control component. */\n size: PropTypes.oneOf(SIZE_CHOICES),\n /** Specifies leading element to display for the input component. */\n leadingElement: PropTypes.node,\n /** Specifies trailing element to display for the input component. */\n trailingElement: PropTypes.node,\n /** Specifies floating label to display for the input component. */\n floatingLabel: PropTypes.node,\n /** Specifies whether to render input as plain text. */\n plaintext: PropTypes.bool,\n /** Specifies whether to display control in valid state, this affects styling. */\n isValid: PropTypes.bool,\n /** Specifies whether to display control in invalid state, this affects styling. */\n isInvalid: PropTypes.bool,\n /** Only for `as=\"textarea\"`. Specifies whether the input can be resized according to the height of content. */\n autoResize: PropTypes.bool,\n /** Specifies what format to use for the input mask. */\n inputMask: PropTypes.string,\n};\n\nFormControl.defaultProps = {\n as: 'input',\n className: undefined,\n id: undefined,\n controlClassName: undefined,\n onChange: undefined,\n defaultValue: undefined,\n value: undefined,\n size: undefined,\n leadingElement: undefined,\n trailingElement: undefined,\n floatingLabel: undefined,\n plaintext: false,\n isValid: undefined,\n isInvalid: undefined,\n autoResize: false,\n inputMask: undefined,\n};\n\nexport default FormControl;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FormControl.js","names":["React","useCallback","useEffect","PropTypes","classNames","RBFormControl","IMaskInput","useFormGroupContext","FormControlFeedback","FormControlDecoratorGroup","callAllHandlers","useHasValue","FormControl","forwardRef","_ref","ref","as","className","controlClassName","leadingElement","trailingElement","floatingLabel","autoResize","onChange","inputMask","props","isInvalid","isValid","getControlProps","formGroupContext","inputRef","useRef","resolvedRef","size","hasValue","checkInputEventValue","defaultValue","value","handleResize","current","initialHeight","offsets","offsetHeight","clientHeight","style","height","scrollHeight","controlProps","onBlur","handleOnChange","e","createElement","mask","SIZE_CHOICES","Feedback","Description","propTypes","string","elementType","func","oneOfType","number","id","oneOf","node","plaintext","bool","defaultProps","undefined"],"sources":["../../src/Form/FormControl.jsx"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport RBFormControl from 'react-bootstrap/FormControl';\nimport { IMaskInput } from 'react-imask';\nimport { useFormGroupContext } from './FormGroupContext';\nimport FormControlFeedback from './FormControlFeedback';\nimport FormControlDecoratorGroup from './FormControlDecoratorGroup';\n\nimport { callAllHandlers, useHasValue } from './fieldUtils';\n\nconst FormControl = React.forwardRef(({\n as,\n className,\n controlClassName,\n leadingElement,\n trailingElement,\n floatingLabel,\n autoResize,\n onChange,\n inputMask,\n ...props\n}, ref) => {\n const {\n isInvalid,\n isValid,\n getControlProps,\n ...formGroupContext\n } = useFormGroupContext();\n const inputRef = React.useRef();\n const resolvedRef = ref || inputRef;\n const size = props.size || formGroupContext.size;\n\n const [hasValue, checkInputEventValue] = useHasValue({\n defaultValue: props.defaultValue,\n value: props.value,\n });\n\n const handleResize = useCallback(() => {\n if (as === 'textarea' && autoResize) {\n if (!resolvedRef.current.initialHeight && !resolvedRef.current.offsets) {\n resolvedRef.current.initialHeight = resolvedRef.current.offsetHeight;\n resolvedRef.current.offsets = resolvedRef.current.offsetHeight - resolvedRef.current.clientHeight;\n }\n resolvedRef.current.style.height = `${resolvedRef.current.initialHeight}px`;\n resolvedRef.current.style.height = `${resolvedRef.current.scrollHeight + resolvedRef.current.offsets}px`;\n }\n }, [as, autoResize, resolvedRef]);\n\n useEffect(() => {\n handleResize();\n }, [handleResize]);\n\n const controlProps = getControlProps({\n ...props,\n // eslint-disable-next-line react/prop-types\n onBlur: callAllHandlers(checkInputEventValue, props.onBlur),\n });\n\n const handleOnChange = (e) => {\n handleResize();\n if (onChange) {\n onChange(e);\n }\n };\n\n return (\n <FormControlDecoratorGroup\n size={size}\n leadingElement={leadingElement}\n trailingElement={trailingElement}\n floatingLabel={floatingLabel}\n className={className}\n >\n <RBFormControl\n as={inputMask ? IMaskInput : as}\n ref={resolvedRef}\n size={size}\n isInvalid={isInvalid}\n isValid={isValid}\n className={classNames(controlClassName, {\n 'has-value': hasValue,\n })}\n onChange={handleOnChange}\n mask={inputMask}\n {...controlProps}\n />\n </FormControlDecoratorGroup>\n );\n});\n\nconst SIZE_CHOICES = ['sm', 'lg'];\n\nFormControl.Feedback = FormControlFeedback;\nFormControl.Description = FormControlFeedback;\n\nFormControl.propTypes = {\n /** Specifies class name to append to the base element. */\n className: PropTypes.string,\n /** Specifies base element for the control component. */\n as: PropTypes.elementType,\n /** Specifies function that is triggered on input value change. */\n onChange: PropTypes.func,\n /** Specifies default value of the input component. */\n defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /** Specifies current value of the input component. */\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /** Specifies id of the control component. */\n id: PropTypes.string,\n /** Specifies class name for the control component. */\n controlClassName: PropTypes.string,\n /** Specifies size for the control component. */\n size: PropTypes.oneOf(SIZE_CHOICES),\n /** Specifies leading element to display for the input component. */\n leadingElement: PropTypes.node,\n /** Specifies trailing element to display for the input component. */\n trailingElement: PropTypes.node,\n /** Specifies floating label to display for the input component. */\n floatingLabel: PropTypes.node,\n /** Specifies whether to render input as plain text. */\n plaintext: PropTypes.bool,\n /** Specifies whether to display control in valid state, this affects styling. */\n isValid: PropTypes.bool,\n /** Specifies whether to display control in invalid state, this affects styling. */\n isInvalid: PropTypes.bool,\n /** Only for `as=\"textarea\"`. Specifies whether the input can be resized according to the height of content. */\n autoResize: PropTypes.bool,\n /** Specifies what format to use for the input mask. */\n inputMask: PropTypes.string,\n};\n\nFormControl.defaultProps = {\n as: 'input',\n className: undefined,\n id: undefined,\n controlClassName: undefined,\n onChange: undefined,\n defaultValue: undefined,\n value: undefined,\n size: undefined,\n leadingElement: undefined,\n trailingElement: undefined,\n floatingLabel: undefined,\n plaintext: false,\n isValid: undefined,\n isInvalid: undefined,\n autoResize: false,\n inputMask: undefined,\n};\n\nexport default FormControl;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"FormControlDecorator.js","names":["React","PropTypes","FormControlDecorator","_ref","children","location","createElement","className","propTypes","node","isRequired","oneOf","defaultProps"],"sources":["../../src/Form/FormControlDecorator.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction FormControlDecorator({ children, location }) {\n return (\n <div className={`pgn__form-control-decorator pgn__form-control-decorator-${location}`}>\n {children}\n </div>\n );\n}\n\nFormControlDecorator.propTypes = {\n children: PropTypes.node.isRequired,\n location: PropTypes.oneOf(['leading', 'trailing']),\n};\n\nFormControlDecorator.defaultProps = {\n location: 'leading',\n};\n\nexport default FormControlDecorator;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAElC,SAASC,oBAAoBA,CAAAC,IAAA,EAAyB;EAAA,IAAxB;IAAEC,QAAQ;IAAEC;EAAS,CAAC,GAAAF,IAAA;EAClD,oBACEH,KAAA,CAAAM,aAAA;IAAKC,SAAS,EAAG,2DAA0DF,QAAS;EAAE,GACnFD,QACE,CAAC;AAEV;AAEAF,oBAAoB,CAACM,SAAS,GAAG;EAC/BJ,QAAQ,EAAEH,SAAS,CAACQ,IAAI,CAACC,UAAU;EACnCL,QAAQ,EAAEJ,SAAS,CAACU,KAAK,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC;AACnD,CAAC;AAEDT,oBAAoB,CAACU,YAAY,GAAG;EAClCP,QAAQ,EAAE;AACZ,CAAC;AAED,eAAeH,oBAAoB","ignoreList":[]}
1
+ {"version":3,"file":"FormControlDecorator.js","names":["React","PropTypes","FormControlDecorator","_ref","children","location","createElement","className","propTypes","node","isRequired","oneOf","defaultProps"],"sources":["../../src/Form/FormControlDecorator.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction FormControlDecorator({ children, location }) {\n return (\n <div className={`pgn__form-control-decorator pgn__form-control-decorator-${location}`}>\n {children}\n </div>\n );\n}\n\nFormControlDecorator.propTypes = {\n children: PropTypes.node.isRequired,\n location: PropTypes.oneOf(['leading', 'trailing']),\n};\n\nFormControlDecorator.defaultProps = {\n location: 'leading',\n};\n\nexport default FormControlDecorator;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAElC,SAASC,oBAAoBA,CAAAC,IAAA,EAAyB;EAAA,IAAxB;IAAEC,QAAQ;IAAEC;EAAS,CAAC,GAAAF,IAAA;EAClD,oBACEH,KAAA,CAAAM,aAAA;IAAKC,SAAS,EAAE,2DAA2DF,QAAQ;EAAG,GACnFD,QACE,CAAC;AAEV;AAEAF,oBAAoB,CAACM,SAAS,GAAG;EAC/BJ,QAAQ,EAAEH,SAAS,CAACQ,IAAI,CAACC,UAAU;EACnCL,QAAQ,EAAEJ,SAAS,CAACU,KAAK,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC;AACnD,CAAC;AAEDT,oBAAoB,CAACU,YAAY,GAAG;EAClCP,QAAQ,EAAE;AACZ,CAAC;AAED,eAAeH,oBAAoB","ignoreList":[]}
@@ -20,5 +20,5 @@ declare function FormGroupContextProvider({ children, controlId: explicitControl
20
20
  isInvalid?: boolean;
21
21
  isValid?: boolean;
22
22
  size?: typeof FORM_CONTROL_SIZES.SMALL | typeof FORM_CONTROL_SIZES.LARGE;
23
- }): React.JSX.Element;
23
+ }): import("react/jsx-runtime").JSX.Element;
24
24
  export { FormGroupContext, FormGroupContextProvider, useFormGroupContext, };
@@ -1 +1 @@
1
- {"version":3,"file":"FormGroupContext.js","names":["React","useState","useEffect","useMemo","useCallback","classNames","newId","useIdList","omitUndefinedProperties","identityFn","props","noop","FormGroupContext","createContext","getControlProps","useSetIsControlGroupEffect","getLabelProps","getDescriptorProps","hasFormGroupProvider","useFormGroupContext","useContext","useStateEffect","initialState","state","setState","useSetStateEffect","newState","FormGroupContextProvider","_ref","children","controlId","explicitControlId","isInvalid","isValid","size","describedByIds","registerDescriptorId","labelledByIds","registerLabelerId","isControlGroup","controlProps","labelledByIdsForControl","undefined","id","labelProps","htmlFor","descriptorProps","contextValue","createElement","Provider","value"],"sources":["../../src/Form/FormGroupContext.tsx"],"sourcesContent":["import React, {\n useState, useEffect, useMemo, useCallback,\n} from 'react';\nimport classNames from 'classnames';\nimport { newId } from '../utils';\nimport { useIdList, omitUndefinedProperties } from './fieldUtils';\nimport { FORM_CONTROL_SIZES } from './constants';\n\nconst identityFn = (props: Record<string, any>) => props;\nconst noop = () => {};\n\ninterface FormGroupContextData {\n getControlProps: (props: Record<string, any>) => Record<string, any>;\n getLabelProps: (props: React.ComponentPropsWithoutRef<'label'>) => React.ComponentPropsWithoutRef<'label'>;\n getDescriptorProps: (props: Record<string, any>) => Record<string, any>;\n useSetIsControlGroupEffect: (isControlGroup: boolean) => void;\n isControlGroup?: boolean;\n controlId?: string;\n isInvalid?: boolean;\n isValid?: boolean;\n size?: string;\n hasFormGroupProvider?: boolean;\n}\n\nconst FormGroupContext = React.createContext<FormGroupContextData>({\n getControlProps: identityFn,\n useSetIsControlGroupEffect: noop,\n getLabelProps: identityFn,\n getDescriptorProps: identityFn,\n hasFormGroupProvider: false,\n});\n\nconst useFormGroupContext = () => React.useContext(FormGroupContext);\n\nfunction useStateEffect<ValueType extends any>(\n initialState: ValueType,\n): [value: ValueType, setter: (v: ValueType) => void] {\n const [state, setState] = useState(initialState);\n const useSetStateEffect = (newState: ValueType) => {\n useEffect(() => setState(newState), [newState]);\n };\n return [state, useSetStateEffect];\n}\n\nfunction FormGroupContextProvider({\n children,\n controlId: explicitControlId,\n isInvalid,\n isValid,\n size,\n}: {\n children: React.ReactNode;\n controlId?: string;\n isInvalid?: boolean;\n isValid?: boolean;\n size?: typeof FORM_CONTROL_SIZES.SMALL | typeof FORM_CONTROL_SIZES.LARGE;\n}) {\n const controlId = useMemo(() => explicitControlId || newId('form-field'), [explicitControlId]);\n const [describedByIds, registerDescriptorId] = useIdList(controlId);\n const [labelledByIds, registerLabelerId] = useIdList(controlId);\n const [isControlGroup, useSetIsControlGroupEffect] = useStateEffect(false);\n\n const getControlProps = useCallback((controlProps) => {\n // labelledByIds from the list above should only be added to a control\n // if it the control is a group. We prefer adding a condition here because:\n // - Hooks cannot be called inside conditionals\n // - The getLabelProps function below is forced to generate an id\n // whether it is needed or not.\n // - This is what allows consumers of Paragon to use <Form.Label>\n // interchangeably between ControlGroup type controls and regular Controls\n const labelledByIdsForControl = isControlGroup ? labelledByIds : undefined;\n return omitUndefinedProperties({\n ...controlProps,\n 'aria-describedby': classNames(controlProps['aria-describedby'], describedByIds) || undefined,\n 'aria-labelledby': classNames(controlProps['aria-labelledby'], labelledByIdsForControl) || undefined,\n id: controlId,\n });\n }, [\n isControlGroup,\n describedByIds,\n labelledByIds,\n controlId,\n ]);\n\n const getLabelProps = (labelProps: React.ComponentPropsWithoutRef<'label'>) => {\n const id = registerLabelerId(labelProps?.id);\n if (isControlGroup) {\n return { ...labelProps, id };\n }\n return { ...labelProps, htmlFor: controlId };\n };\n\n const getDescriptorProps = (descriptorProps: Record<string, any>) => {\n const id = registerDescriptorId(descriptorProps?.id);\n return { ...descriptorProps, id };\n };\n\n const contextValue: FormGroupContextData = {\n getControlProps,\n getLabelProps,\n getDescriptorProps,\n useSetIsControlGroupEffect,\n isControlGroup,\n controlId,\n isInvalid,\n isValid,\n size,\n hasFormGroupProvider: true,\n };\n\n return (\n <FormGroupContext.Provider value={contextValue}>\n {children}\n </FormGroupContext.Provider>\n );\n}\n\nexport {\n FormGroupContext,\n FormGroupContextProvider,\n useFormGroupContext,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FormGroupContext.js","names":["React","useState","useEffect","useMemo","useCallback","classNames","newId","useIdList","omitUndefinedProperties","identityFn","props","noop","FormGroupContext","createContext","getControlProps","useSetIsControlGroupEffect","getLabelProps","getDescriptorProps","hasFormGroupProvider","useFormGroupContext","useContext","useStateEffect","initialState","state","setState","useSetStateEffect","newState","FormGroupContextProvider","_ref","children","controlId","explicitControlId","isInvalid","isValid","size","describedByIds","registerDescriptorId","labelledByIds","registerLabelerId","isControlGroup","controlProps","labelledByIdsForControl","undefined","id","labelProps","htmlFor","descriptorProps","contextValue","createElement","Provider","value"],"sources":["../../src/Form/FormGroupContext.tsx"],"sourcesContent":["import React, {\n useState, useEffect, useMemo, useCallback,\n} from 'react';\nimport classNames from 'classnames';\nimport { newId } from '../utils';\nimport { useIdList, omitUndefinedProperties } from './fieldUtils';\nimport { FORM_CONTROL_SIZES } from './constants';\n\nconst identityFn = (props: Record<string, any>) => props;\nconst noop = () => {};\n\ninterface FormGroupContextData {\n getControlProps: (props: Record<string, any>) => Record<string, any>;\n getLabelProps: (props: React.ComponentPropsWithoutRef<'label'>) => React.ComponentPropsWithoutRef<'label'>;\n getDescriptorProps: (props: Record<string, any>) => Record<string, any>;\n useSetIsControlGroupEffect: (isControlGroup: boolean) => void;\n isControlGroup?: boolean;\n controlId?: string;\n isInvalid?: boolean;\n isValid?: boolean;\n size?: string;\n hasFormGroupProvider?: boolean;\n}\n\nconst FormGroupContext = React.createContext<FormGroupContextData>({\n getControlProps: identityFn,\n useSetIsControlGroupEffect: noop,\n getLabelProps: identityFn,\n getDescriptorProps: identityFn,\n hasFormGroupProvider: false,\n});\n\nconst useFormGroupContext = () => React.useContext(FormGroupContext);\n\nfunction useStateEffect<ValueType extends any>(\n initialState: ValueType,\n): [value: ValueType, setter: (v: ValueType) => void] {\n const [state, setState] = useState(initialState);\n const useSetStateEffect = (newState: ValueType) => {\n useEffect(() => setState(newState), [newState]);\n };\n return [state, useSetStateEffect];\n}\n\nfunction FormGroupContextProvider({\n children,\n controlId: explicitControlId,\n isInvalid,\n isValid,\n size,\n}: {\n children: React.ReactNode;\n controlId?: string;\n isInvalid?: boolean;\n isValid?: boolean;\n size?: typeof FORM_CONTROL_SIZES.SMALL | typeof FORM_CONTROL_SIZES.LARGE;\n}) {\n const controlId = useMemo(() => explicitControlId || newId('form-field'), [explicitControlId]);\n const [describedByIds, registerDescriptorId] = useIdList(controlId);\n const [labelledByIds, registerLabelerId] = useIdList(controlId);\n const [isControlGroup, useSetIsControlGroupEffect] = useStateEffect(false);\n\n const getControlProps = useCallback((controlProps: Record<string, any>) => {\n // labelledByIds from the list above should only be added to a control\n // if it the control is a group. We prefer adding a condition here because:\n // - Hooks cannot be called inside conditionals\n // - The getLabelProps function below is forced to generate an id\n // whether it is needed or not.\n // - This is what allows consumers of Paragon to use <Form.Label>\n // interchangeably between ControlGroup type controls and regular Controls\n const labelledByIdsForControl = isControlGroup ? labelledByIds : undefined;\n return omitUndefinedProperties({\n ...controlProps,\n 'aria-describedby': classNames(controlProps['aria-describedby'], describedByIds) || undefined,\n 'aria-labelledby': classNames(controlProps['aria-labelledby'], labelledByIdsForControl) || undefined,\n id: controlId,\n });\n }, [\n isControlGroup,\n describedByIds,\n labelledByIds,\n controlId,\n ]);\n\n const getLabelProps = (labelProps: React.ComponentPropsWithoutRef<'label'>) => {\n const id = registerLabelerId(labelProps?.id);\n if (isControlGroup) {\n return { ...labelProps, id };\n }\n return { ...labelProps, htmlFor: controlId };\n };\n\n const getDescriptorProps = (descriptorProps: Record<string, any>) => {\n const id = registerDescriptorId(descriptorProps?.id);\n return { ...descriptorProps, id };\n };\n\n const contextValue: FormGroupContextData = {\n getControlProps,\n getLabelProps,\n getDescriptorProps,\n useSetIsControlGroupEffect,\n isControlGroup,\n controlId,\n isInvalid,\n isValid,\n size,\n hasFormGroupProvider: true,\n };\n\n return (\n <FormGroupContext.Provider value={contextValue}>\n {children}\n </FormGroupContext.Provider>\n );\n}\n\nexport {\n FormGroupContext,\n FormGroupContextProvider,\n useFormGroupContext,\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IACVC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,WAAW,QACpC,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,KAAK,QAAQ,UAAU;AAChC,SAASC,SAAS,EAAEC,uBAAuB,QAAQ,cAAc;AAGjE,MAAMC,UAAU,GAAIC,KAA0B,IAAKA,KAAK;AACxD,MAAMC,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AAerB,MAAMC,gBAAgB,gBAAGZ,KAAK,CAACa,aAAa,CAAuB;EACjEC,eAAe,EAAEL,UAAU;EAC3BM,0BAA0B,EAAEJ,IAAI;EAChCK,aAAa,EAAEP,UAAU;EACzBQ,kBAAkB,EAAER,UAAU;EAC9BS,oBAAoB,EAAE;AACxB,CAAC,CAAC;AAEF,MAAMC,mBAAmB,GAAGA,CAAA,KAAMnB,KAAK,CAACoB,UAAU,CAACR,gBAAgB,CAAC;AAEpE,SAASS,cAAcA,CACrBC,YAAuB,EAC6B;EACpD,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGvB,QAAQ,CAACqB,YAAY,CAAC;EAChD,MAAMG,iBAAiB,GAAIC,QAAmB,IAAK;IACjDxB,SAAS,CAAC,MAAMsB,QAAQ,CAACE,QAAQ,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EACjD,CAAC;EACD,OAAO,CAACH,KAAK,EAAEE,iBAAiB,CAAC;AACnC;AAEA,SAASE,wBAAwBA,CAAAC,IAAA,EAY9B;EAAA,IAZ+B;IAChCC,QAAQ;IACRC,SAAS,EAAEC,iBAAiB;IAC5BC,SAAS;IACTC,OAAO;IACPC;EAOF,CAAC,GAAAN,IAAA;EACC,MAAME,SAAS,GAAG3B,OAAO,CAAC,MAAM4B,iBAAiB,IAAIzB,KAAK,CAAC,YAAY,CAAC,EAAE,CAACyB,iBAAiB,CAAC,CAAC;EAC9F,MAAM,CAACI,cAAc,EAAEC,oBAAoB,CAAC,GAAG7B,SAAS,CAACuB,SAAS,CAAC;EACnE,MAAM,CAACO,aAAa,EAAEC,iBAAiB,CAAC,GAAG/B,SAAS,CAACuB,SAAS,CAAC;EAC/D,MAAM,CAACS,cAAc,EAAExB,0BAA0B,CAAC,GAAGM,cAAc,CAAC,KAAK,CAAC;EAE1E,MAAMP,eAAe,GAAGV,WAAW,CAAEoC,YAAiC,IAAK;IACzE;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAMC,uBAAuB,GAAGF,cAAc,GAAGF,aAAa,GAAGK,SAAS;IAC1E,OAAOlC,uBAAuB,CAAC;MAC7B,GAAGgC,YAAY;MACf,kBAAkB,EAAEnC,UAAU,CAACmC,YAAY,CAAC,kBAAkB,CAAC,EAAEL,cAAc,CAAC,IAAIO,SAAS;MAC7F,iBAAiB,EAAErC,UAAU,CAACmC,YAAY,CAAC,iBAAiB,CAAC,EAAEC,uBAAuB,CAAC,IAAIC,SAAS;MACpGC,EAAE,EAAEb;IACN,CAAC,CAAC;EACJ,CAAC,EAAE,CACDS,cAAc,EACdJ,cAAc,EACdE,aAAa,EACbP,SAAS,CACV,CAAC;EAEF,MAAMd,aAAa,GAAI4B,UAAmD,IAAK;IAC7E,MAAMD,EAAE,GAAGL,iBAAiB,CAACM,UAAU,EAAED,EAAE,CAAC;IAC5C,IAAIJ,cAAc,EAAE;MAClB,OAAO;QAAE,GAAGK,UAAU;QAAED;MAAG,CAAC;IAC9B;IACA,OAAO;MAAE,GAAGC,UAAU;MAAEC,OAAO,EAAEf;IAAU,CAAC;EAC9C,CAAC;EAED,MAAMb,kBAAkB,GAAI6B,eAAoC,IAAK;IACnE,MAAMH,EAAE,GAAGP,oBAAoB,CAACU,eAAe,EAAEH,EAAE,CAAC;IACpD,OAAO;MAAE,GAAGG,eAAe;MAAEH;IAAG,CAAC;EACnC,CAAC;EAED,MAAMI,YAAkC,GAAG;IACzCjC,eAAe;IACfE,aAAa;IACbC,kBAAkB;IAClBF,0BAA0B;IAC1BwB,cAAc;IACdT,SAAS;IACTE,SAAS;IACTC,OAAO;IACPC,IAAI;IACJhB,oBAAoB,EAAE;EACxB,CAAC;EAED,oBACElB,KAAA,CAAAgD,aAAA,CAACpC,gBAAgB,CAACqC,QAAQ;IAACC,KAAK,EAAEH;EAAa,GAC5ClB,QACwB,CAAC;AAEhC;AAEA,SACEjB,gBAAgB,EAChBe,wBAAwB,EACxBR,mBAAmB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"FormText.js","names":["React","PropTypes","classNames","Icon","Check","Close","Cancel","CheckCircle","RadioButtonUnchecked","WarningFilled","FORM_TEXT_TYPES","FORM_TEXT_ICONS","DEFAULT","VALID","INVALID","WARNING","CRITERIA_EMPTY","CRITERIA_VALID","CRITERIA_INVALID","resolveTextType","_ref","isInvalid","isValid","FormTextIcon","_ref2","type","customIcon","typeIcon","createElement","src","propTypes","oneOf","Object","values","node","defaultProps","undefined","FormText","_ref3","children","icon","muted","hasIcon","props","className","FORM_TEXT_TYPE_CHOICES","isRequired","string","bool"],"sources":["../../src/Form/FormText.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Icon from '../Icon';\nimport {\n Check, Close, Cancel, CheckCircle, RadioButtonUnchecked, WarningFilled,\n} from '../../icons';\n\nimport { FORM_TEXT_TYPES } from './constants';\n\nconst FORM_TEXT_ICONS = {\n [FORM_TEXT_TYPES.DEFAULT]: null,\n [FORM_TEXT_TYPES.VALID]: Check,\n [FORM_TEXT_TYPES.INVALID]: Close,\n [FORM_TEXT_TYPES.WARNING]: WarningFilled,\n [FORM_TEXT_TYPES.CRITERIA_EMPTY]: RadioButtonUnchecked,\n [FORM_TEXT_TYPES.CRITERIA_VALID]: CheckCircle,\n [FORM_TEXT_TYPES.CRITERIA_INVALID]: Cancel,\n};\n\nconst resolveTextType = ({ isInvalid, isValid }) => {\n if (isValid) {\n return FORM_TEXT_TYPES.VALID;\n }\n if (isInvalid) {\n return FORM_TEXT_TYPES.INVALID;\n }\n return FORM_TEXT_TYPES.DEFAULT;\n};\n\nfunction FormTextIcon({ type, customIcon }) {\n if (customIcon) {\n return customIcon;\n }\n\n const typeIcon = FORM_TEXT_ICONS[type];\n if (typeIcon) {\n return <Icon src={typeIcon} />;\n }\n\n return null;\n}\n\nFormTextIcon.propTypes = {\n type: PropTypes.oneOf(Object.values(FORM_TEXT_TYPES)),\n customIcon: PropTypes.node,\n};\n\nFormTextIcon.defaultProps = {\n type: undefined,\n customIcon: undefined,\n};\n\nfunction FormText({\n children, type, icon, muted, hasIcon, ...props\n}) {\n const className = classNames(\n props.className,\n 'pgn__form-text',\n `pgn__form-text-${type}`,\n {\n 'text-muted': muted,\n },\n );\n\n return (\n <div {...props} className={className}>\n {hasIcon && <FormTextIcon customIcon={icon} type={type} />}\n <div>\n {children}\n </div>\n </div>\n );\n}\n\nconst FORM_TEXT_TYPE_CHOICES = [\n 'default',\n 'valid',\n 'invalid',\n 'warning',\n 'criteria-empty',\n 'criteria-valid',\n 'criteria-invalid',\n];\n\nFormText.propTypes = {\n /** Specifies contents of the component. */\n children: PropTypes.node.isRequired,\n /** Specifies class name to append to the base element. */\n className: PropTypes.string,\n /** Specifies whether to show an icon next to the text. */\n hasIcon: PropTypes.bool,\n /** Specifies text type, this affects styling. */\n type: PropTypes.oneOf(FORM_TEXT_TYPE_CHOICES),\n /** Specifies icon to show, will only be shown if `hasIcon` prop is set to `true`. */\n icon: PropTypes.node,\n /** Specifies whether to show text with muted styling. */\n muted: PropTypes.bool,\n};\n\nFormText.defaultProps = {\n hasIcon: true,\n type: 'default',\n icon: undefined,\n className: undefined,\n muted: false,\n};\n\nexport default FormText;\nexport {\n FORM_TEXT_TYPES,\n FORM_TEXT_ICONS,\n FormTextIcon,\n resolveTextType,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FormText.js","names":["React","PropTypes","classNames","Icon","Check","Close","Cancel","CheckCircle","RadioButtonUnchecked","WarningFilled","FORM_TEXT_TYPES","FORM_TEXT_ICONS","DEFAULT","VALID","INVALID","WARNING","CRITERIA_EMPTY","CRITERIA_VALID","CRITERIA_INVALID","resolveTextType","_ref","isInvalid","isValid","FormTextIcon","_ref2","type","customIcon","typeIcon","createElement","src","propTypes","oneOf","Object","values","node","defaultProps","undefined","FormText","_ref3","children","icon","muted","hasIcon","props","className","FORM_TEXT_TYPE_CHOICES","isRequired","string","bool"],"sources":["../../src/Form/FormText.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Icon from '../Icon';\nimport {\n Check, Close, Cancel, CheckCircle, RadioButtonUnchecked, WarningFilled,\n} from '../../icons';\n\nimport { FORM_TEXT_TYPES } from './constants';\n\nconst FORM_TEXT_ICONS = {\n [FORM_TEXT_TYPES.DEFAULT]: null,\n [FORM_TEXT_TYPES.VALID]: Check,\n [FORM_TEXT_TYPES.INVALID]: Close,\n [FORM_TEXT_TYPES.WARNING]: WarningFilled,\n [FORM_TEXT_TYPES.CRITERIA_EMPTY]: RadioButtonUnchecked,\n [FORM_TEXT_TYPES.CRITERIA_VALID]: CheckCircle,\n [FORM_TEXT_TYPES.CRITERIA_INVALID]: Cancel,\n};\n\nconst resolveTextType = ({ isInvalid, isValid }) => {\n if (isValid) {\n return FORM_TEXT_TYPES.VALID;\n }\n if (isInvalid) {\n return FORM_TEXT_TYPES.INVALID;\n }\n return FORM_TEXT_TYPES.DEFAULT;\n};\n\nfunction FormTextIcon({ type, customIcon }) {\n if (customIcon) {\n return customIcon;\n }\n\n const typeIcon = FORM_TEXT_ICONS[type];\n if (typeIcon) {\n return <Icon src={typeIcon} />;\n }\n\n return null;\n}\n\nFormTextIcon.propTypes = {\n type: PropTypes.oneOf(Object.values(FORM_TEXT_TYPES)),\n customIcon: PropTypes.node,\n};\n\nFormTextIcon.defaultProps = {\n type: undefined,\n customIcon: undefined,\n};\n\nfunction FormText({\n children, type, icon, muted, hasIcon, ...props\n}) {\n const className = classNames(\n props.className,\n 'pgn__form-text',\n `pgn__form-text-${type}`,\n {\n 'text-muted': muted,\n },\n );\n\n return (\n <div {...props} className={className}>\n {hasIcon && <FormTextIcon customIcon={icon} type={type} />}\n <div>\n {children}\n </div>\n </div>\n );\n}\n\nconst FORM_TEXT_TYPE_CHOICES = [\n 'default',\n 'valid',\n 'invalid',\n 'warning',\n 'criteria-empty',\n 'criteria-valid',\n 'criteria-invalid',\n];\n\nFormText.propTypes = {\n /** Specifies contents of the component. */\n children: PropTypes.node.isRequired,\n /** Specifies class name to append to the base element. */\n className: PropTypes.string,\n /** Specifies whether to show an icon next to the text. */\n hasIcon: PropTypes.bool,\n /** Specifies text type, this affects styling. */\n type: PropTypes.oneOf(FORM_TEXT_TYPE_CHOICES),\n /** Specifies icon to show, will only be shown if `hasIcon` prop is set to `true`. */\n icon: PropTypes.node,\n /** Specifies whether to show text with muted styling. */\n muted: PropTypes.bool,\n};\n\nFormText.defaultProps = {\n hasIcon: true,\n type: 'default',\n icon: undefined,\n className: undefined,\n muted: false,\n};\n\nexport default FormText;\nexport {\n FORM_TEXT_TYPES,\n FORM_TEXT_ICONS,\n FormTextIcon,\n resolveTextType,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,5 @@
1
+ @use "sass:map";
2
+ @use "sass:string";
1
3
  @import "variables";
2
4
  @import "~bootstrap/scss/forms";
3
5
  @import "~bootstrap/scss/input-group";
@@ -60,7 +62,7 @@ $select-icon-padding: .5625rem !default;
60
62
  }
61
63
  }
62
64
 
63
- @media (min-width: map-get($grid-breakpoints, "sm")) {
65
+ @media (min-width: map.get($grid-breakpoints, "sm")) {
64
66
  margin-inline-end: $custom-control-gutter;
65
67
  }
66
68
 
@@ -306,7 +308,7 @@ $select-icon-padding: .5625rem !default;
306
308
  text-align: right;
307
309
  }
308
310
 
309
- &:not(:focus):not(.has-value) {
311
+ &:not(:focus, .has-value) {
310
312
  color: transparent;
311
313
  }
312
314
 
@@ -318,17 +320,17 @@ $select-icon-padding: .5625rem !default;
318
320
  }
319
321
  }
320
322
 
321
- .form-control:not(:focus):not(.has-value) {
323
+ .form-control:not(:focus, .has-value) {
322
324
  &::placeholder,
323
325
  &::-webkit-datetime-edit {
324
326
  opacity: 0;
325
327
  }
326
328
  }
327
329
 
328
- select.form-control:not(.has-value):not(:focus) {
330
+ select.form-control:not(.has-value, :focus) {
329
331
  // color: rgba(0,0,0,0); Force the rgba syntax to appear in the output rather
330
332
  // than transparent. IE11 does not understand color: transparent here.
331
- color: unquote("rgba(0,0,0,0)");
333
+ color: string.unquote("rgba(0,0,0,0)");
332
334
  }
333
335
  }
334
336
 
@@ -545,7 +547,7 @@ select.form-control {
545
547
  .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
546
548
  .input-group.has-validation > .input-group-append:nth-last-child(n+3) > .btn,
547
549
  .input-group.has-validation > .input-group-append:nth-last-child(n+3) > .input-group-text,
548
- .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
550
+ .input-group > .input-group-append:last-child > .btn:not(:last-child, .dropdown-toggle),
549
551
  .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
550
552
  [dir="rtl"] & {
551
553
  border-radius: 0 $input-border-radius $input-border-radius 0;
@@ -588,7 +590,7 @@ select.form-control {
588
590
  .pgn__form-autosuggest__dropdown {
589
591
  @include pgn-box-shadow(1, "centered");
590
592
 
591
- @media (min-width: map-get($grid-breakpoints, "sm")) {
593
+ @media (min-width: map.get($grid-breakpoints, "sm")) {
592
594
  margin-inline-end: $custom-control-gutter;
593
595
  }
594
596
 
@@ -1,3 +1,5 @@
1
+ @use "sass:color";
2
+ @use "sass:map";
1
3
  $input-padding-y: $input-btn-padding-y !default;
2
4
  $input-padding-x: $input-btn-padding-x !default;
3
5
  $input-font-family: $input-btn-font-family !default;
@@ -198,7 +200,7 @@ $custom-range-thumb-border-radius: 1rem !default;
198
200
  $custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;
199
201
  $custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;
200
202
  $custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge
201
- $custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;
203
+ $custom-range-thumb-active-bg: color.adjust($component-active-bg, $lightness: 35%) !default;
202
204
  $custom-range-thumb-disabled-bg: theme-color("gray", "default") !default;
203
205
 
204
206
  $custom-file-height: $input-height !default;
@@ -238,7 +240,7 @@ $form-feedback-icon-invalid: str-replace(url("data:image/svg+xml,%3csvg x
238
240
 
239
241
  $form-validation-states: () !default;
240
242
  // stylelint-disable-next-line scss/dollar-variable-default
241
- $form-validation-states: map-merge(
243
+ $form-validation-states: map.merge(
242
244
  (
243
245
  "valid": (
244
246
  "color": $form-feedback-valid-color,
@@ -1 +1 @@
1
- {"version":3,"file":"fieldUtils.js","names":["classNames","useState","useEffect","newId","omitUndefinedProperties","obj","arguments","length","undefined","Object","entries","reduce","acc","_ref","key","value","callAllHandlers","_len","handlers","Array","_key","unifiedEventHandler","event","filter","handler","forEach","useHasValue","_ref2","defaultValue","hasUncontrolledValue","setHasUncontrolledValue","hasValue","handleInputEvent","e","target","useIdList","uniqueIdPrefix","initialList","idList","setIdList","addId","idToAdd","oldIdList","getNewId","removeId","idToRemove","id","useRegisteredId","explicitlyRegisteredId","registeredId","setRegisteredId","mergeAttributeValues","_len2","values","_key2","mergedValues"],"sources":["../../src/Form/fieldUtils.ts"],"sourcesContent":["import classNames from 'classnames';\nimport { useState, useEffect } from 'react';\nimport { newId } from '../utils';\n\nconst omitUndefinedProperties = (obj = {}) => Object.entries(obj)\n .reduce((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = value;\n }\n return acc;\n }, {} as Record<string, any>);\n\nconst callAllHandlers = <EventType extends Object>(...handlers: ((event: EventType) => void)[]) => {\n const unifiedEventHandler = (event: EventType) => {\n handlers\n .filter(handler => typeof handler === 'function')\n .forEach(handler => handler(event));\n };\n return unifiedEventHandler;\n};\n\nconst useHasValue = <ValueType>({ defaultValue, value }: { defaultValue?: ValueType, value?: ValueType }) => {\n const [hasUncontrolledValue, setHasUncontrolledValue] = useState(!!defaultValue || defaultValue === 0);\n const hasValue = !!value || value === 0 || hasUncontrolledValue;\n const handleInputEvent = (e: React.ChangeEvent<HTMLInputElement>) => setHasUncontrolledValue(!!e.target.value);\n return [hasValue, handleInputEvent];\n};\n\nconst useIdList = (\n uniqueIdPrefix: string,\n initialList?: string[],\n): [idList: string[], useRegisteredId: (id: string | undefined) => string | undefined] => {\n const [idList, setIdList] = useState(initialList || []);\n const addId = (idToAdd: string) => {\n setIdList(oldIdList => [...oldIdList, idToAdd]);\n return idToAdd;\n };\n const getNewId = () => {\n const idToAdd = newId(`${uniqueIdPrefix}-`);\n return addId(idToAdd);\n };\n const removeId = (idToRemove: string | undefined) => {\n setIdList(oldIdList => oldIdList.filter(id => id !== idToRemove));\n };\n\n const useRegisteredId = (explicitlyRegisteredId: string | undefined) => {\n const [registeredId, setRegisteredId] = useState(explicitlyRegisteredId);\n useEffect(() => {\n if (explicitlyRegisteredId) {\n addId(explicitlyRegisteredId);\n } else if (!registeredId) {\n setRegisteredId(getNewId());\n }\n return () => removeId(registeredId);\n }, [registeredId, explicitlyRegisteredId]);\n return registeredId;\n };\n\n return [idList, useRegisteredId];\n};\n\nconst mergeAttributeValues = (...values: (string | undefined)[]) => {\n const mergedValues = classNames(values);\n return mergedValues || undefined;\n};\n\nexport {\n callAllHandlers,\n useHasValue,\n mergeAttributeValues,\n useIdList,\n omitUndefinedProperties,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"fieldUtils.js","names":["classNames","useState","useEffect","newId","omitUndefinedProperties","obj","arguments","length","undefined","Object","entries","reduce","acc","_ref","key","value","callAllHandlers","_len","handlers","Array","_key","unifiedEventHandler","event","filter","handler","forEach","useHasValue","_ref2","defaultValue","hasUncontrolledValue","setHasUncontrolledValue","hasValue","handleInputEvent","e","target","useIdList","uniqueIdPrefix","initialList","idList","setIdList","addId","idToAdd","oldIdList","getNewId","removeId","idToRemove","id","useRegisteredId","explicitlyRegisteredId","registeredId","setRegisteredId","mergeAttributeValues","_len2","values","_key2","mergedValues"],"sources":["../../src/Form/fieldUtils.ts"],"sourcesContent":["import classNames from 'classnames';\nimport { useState, useEffect } from 'react';\nimport { newId } from '../utils';\n\nconst omitUndefinedProperties = (obj = {}) => Object.entries(obj)\n .reduce((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = value;\n }\n return acc;\n }, {} as Record<string, any>);\n\nconst callAllHandlers = <EventType extends Object>(...handlers: ((event: EventType) => void)[]) => {\n const unifiedEventHandler = (event: EventType) => {\n handlers\n .filter(handler => typeof handler === 'function')\n .forEach(handler => handler(event));\n };\n return unifiedEventHandler;\n};\n\nconst useHasValue = <ValueType>({ defaultValue, value }: { defaultValue?: ValueType, value?: ValueType }) => {\n const [hasUncontrolledValue, setHasUncontrolledValue] = useState(!!defaultValue || defaultValue === 0);\n const hasValue = !!value || value === 0 || hasUncontrolledValue;\n const handleInputEvent = (e: React.ChangeEvent<HTMLInputElement>) => setHasUncontrolledValue(!!e.target.value);\n return [hasValue, handleInputEvent];\n};\n\nconst useIdList = (\n uniqueIdPrefix: string,\n initialList?: string[],\n): [idList: string[], useRegisteredId: (id: string | undefined) => string | undefined] => {\n const [idList, setIdList] = useState(initialList || []);\n const addId = (idToAdd: string) => {\n setIdList(oldIdList => [...oldIdList, idToAdd]);\n return idToAdd;\n };\n const getNewId = () => {\n const idToAdd = newId(`${uniqueIdPrefix}-`);\n return addId(idToAdd);\n };\n const removeId = (idToRemove: string | undefined) => {\n setIdList(oldIdList => oldIdList.filter(id => id !== idToRemove));\n };\n\n const useRegisteredId = (explicitlyRegisteredId: string | undefined) => {\n const [registeredId, setRegisteredId] = useState(explicitlyRegisteredId);\n useEffect(() => {\n if (explicitlyRegisteredId) {\n addId(explicitlyRegisteredId);\n } else if (!registeredId) {\n setRegisteredId(getNewId());\n }\n return () => removeId(registeredId);\n }, [registeredId, explicitlyRegisteredId]);\n return registeredId;\n };\n\n return [idList, useRegisteredId];\n};\n\nconst mergeAttributeValues = (...values: (string | undefined)[]) => {\n const mergedValues = classNames(values);\n return mergedValues || undefined;\n};\n\nexport {\n callAllHandlers,\n useHasValue,\n mergeAttributeValues,\n useIdList,\n omitUndefinedProperties,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -80,6 +80,7 @@ Hyperlink.propTypes = {
80
80
  /** specifies the URL */
81
81
  destination: PropTypes.string.isRequired,
82
82
  /** Content of the hyperlink */
83
+ // @ts-ignore
83
84
  children: PropTypes.node.isRequired,
84
85
  /** Custom class names for the hyperlink */
85
86
  className: PropTypes.string,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","PropTypes","classNames","Launch","Icon","HYPER_LINK_EXTERNAL_LINK_ALT_TEXT","HYPER_LINK_EXTERNAL_LINK_TITLE","Hyperlink","forwardRef","_ref","ref","className","destination","children","target","onClick","externalLinkAlternativeText","externalLinkTitle","variant","isInline","showLaunchIcon","attrs","externalLinkIcon","generateRel","rel","includes","createElement","title","src","screenReaderText","style","height","width","href","defaultProps","undefined","propTypes","string","isRequired","node","oneOf","func","bool"],"sources":["../../src/Hyperlink/index.tsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Launch } from '../../icons';\nimport Icon from '../Icon';\n\nexport const HYPER_LINK_EXTERNAL_LINK_ALT_TEXT = 'in a new tab';\nexport const HYPER_LINK_EXTERNAL_LINK_TITLE = 'Opens in a new tab';\n\ninterface Props extends Omit<React.ComponentPropsWithRef<'a'>, 'href' | 'target'> {\n /** specifies the URL */\n destination: string;\n /** Content of the hyperlink */\n children: React.ReactNode;\n /** Custom class names for the hyperlink */\n className?: string;\n /** Alt text for the icon indicating that this link opens in a new tab, if target=\"_blank\". e.g. _(\"in a new tab\") */\n externalLinkAlternativeText?: string;\n /** Tooltip text for the \"opens in new tab\" icon, if target=\"_blank\". e.g. _(\"Opens in a new tab\"). */\n externalLinkTitle?: string;\n /** type of hyperlink */\n variant?: 'default' | 'muted' | 'brand';\n /** Display the link with an underline. By default, it is only underlined on hover. */\n isInline?: boolean;\n /** specify if we need to show launch Icon. By default, it will be visible. */\n showLaunchIcon?: boolean;\n target?: '_blank' | '_self';\n}\n\nconst Hyperlink = React.forwardRef<HTMLAnchorElement, Props>(({\n className,\n destination,\n children,\n target,\n onClick,\n externalLinkAlternativeText,\n externalLinkTitle,\n variant,\n isInline,\n showLaunchIcon,\n ...attrs\n}, ref) => {\n let externalLinkIcon;\n\n if (target === '_blank') {\n const generateRel = () => {\n let { rel } = attrs;\n if (!rel) {\n return 'noopener noreferrer';\n }\n if (!rel.includes('noopener')) {\n rel += ' noopener';\n }\n if (!rel.includes('noreferrer')) {\n rel += ' noreferrer';\n }\n return rel;\n };\n\n // Add this rel attribute to prevent Reverse Tabnabbing\n attrs.rel = generateRel();\n if (showLaunchIcon) {\n externalLinkIcon = (\n <span\n className=\"pgn__hyperlink__external-icon\"\n title={externalLinkTitle}\n >\n <Icon\n src={Launch}\n screenReaderText={externalLinkAlternativeText}\n style={{ height: '1em', width: '1em' }}\n data-testid=\"hyperlink-icon\"\n />\n </span>\n );\n }\n }\n\n return (\n <a\n ref={ref}\n className={classNames(\n 'pgn__hyperlink',\n `${variant}-link`,\n {\n 'standalone-link': !isInline,\n 'inline-link': isInline,\n },\n className,\n )}\n href={destination}\n target={target}\n onClick={onClick}\n {...attrs}\n >\n {children}\n {externalLinkIcon}\n </a>\n );\n});\n\nHyperlink.defaultProps = {\n className: undefined,\n target: '_self',\n onClick: () => {},\n externalLinkAlternativeText: HYPER_LINK_EXTERNAL_LINK_ALT_TEXT,\n externalLinkTitle: HYPER_LINK_EXTERNAL_LINK_TITLE,\n variant: 'default',\n isInline: false,\n showLaunchIcon: true,\n};\n\nHyperlink.propTypes = {\n /** specifies the URL */\n destination: PropTypes.string.isRequired,\n /** Content of the hyperlink */\n children: PropTypes.node.isRequired,\n /** Custom class names for the hyperlink */\n className: PropTypes.string,\n /** specifies where the link should open. The default behavior is `_self`, which means that the URL will be\n * loaded into the same browsing context as the current one.\n * If the target is `_blank` (opening a new window) `rel='noopener'` will be added to the anchor tag to prevent\n * any potential [reverse tabnabbing attack](https://www.owasp.org/index.php/Reverse_Tabnabbing).\n */\n target: PropTypes.oneOf(['_blank', '_self']),\n /** specifies the callback function when the link is clicked */\n onClick: PropTypes.func,\n /** Alt text for the icon indicating that this link opens in a new tab, if target=\"_blank\". e.g. _(\"in a new tab\") */\n externalLinkAlternativeText: PropTypes.string,\n /** Tooltip text for the \"opens in new tab\" icon, if target=\"_blank\". e.g. _(\"Opens in a new tab\"). */\n externalLinkTitle: PropTypes.string,\n /** type of hyperlink */\n variant: PropTypes.oneOf(['default', 'muted', 'brand']),\n /** Display the link with an underline. By default, it is only underlined on hover. */\n isInline: PropTypes.bool,\n /** specify if we need to show launch Icon. By default, it will be visible. */\n showLaunchIcon: PropTypes.bool,\n};\n\nexport default Hyperlink;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","PropTypes","classNames","Launch","Icon","HYPER_LINK_EXTERNAL_LINK_ALT_TEXT","HYPER_LINK_EXTERNAL_LINK_TITLE","Hyperlink","forwardRef","_ref","ref","className","destination","children","target","onClick","externalLinkAlternativeText","externalLinkTitle","variant","isInline","showLaunchIcon","attrs","externalLinkIcon","generateRel","rel","includes","createElement","title","src","screenReaderText","style","height","width","href","defaultProps","undefined","propTypes","string","isRequired","node","oneOf","func","bool"],"sources":["../../src/Hyperlink/index.tsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Launch } from '../../icons';\nimport Icon from '../Icon';\n\nexport const HYPER_LINK_EXTERNAL_LINK_ALT_TEXT = 'in a new tab';\nexport const HYPER_LINK_EXTERNAL_LINK_TITLE = 'Opens in a new tab';\n\ninterface Props extends Omit<React.ComponentPropsWithRef<'a'>, 'href' | 'target'> {\n /** specifies the URL */\n destination: string;\n /** Content of the hyperlink */\n children: React.ReactNode;\n /** Custom class names for the hyperlink */\n className?: string;\n /** Alt text for the icon indicating that this link opens in a new tab, if target=\"_blank\". e.g. _(\"in a new tab\") */\n externalLinkAlternativeText?: string;\n /** Tooltip text for the \"opens in new tab\" icon, if target=\"_blank\". e.g. _(\"Opens in a new tab\"). */\n externalLinkTitle?: string;\n /** type of hyperlink */\n variant?: 'default' | 'muted' | 'brand';\n /** Display the link with an underline. By default, it is only underlined on hover. */\n isInline?: boolean;\n /** specify if we need to show launch Icon. By default, it will be visible. */\n showLaunchIcon?: boolean;\n target?: '_blank' | '_self';\n}\n\nconst Hyperlink = React.forwardRef<HTMLAnchorElement, Props>(({\n className,\n destination,\n children,\n target,\n onClick,\n externalLinkAlternativeText,\n externalLinkTitle,\n variant,\n isInline,\n showLaunchIcon,\n ...attrs\n}, ref) => {\n let externalLinkIcon;\n\n if (target === '_blank') {\n const generateRel = () => {\n let { rel } = attrs;\n if (!rel) {\n return 'noopener noreferrer';\n }\n if (!rel.includes('noopener')) {\n rel += ' noopener';\n }\n if (!rel.includes('noreferrer')) {\n rel += ' noreferrer';\n }\n return rel;\n };\n\n // Add this rel attribute to prevent Reverse Tabnabbing\n attrs.rel = generateRel();\n if (showLaunchIcon) {\n externalLinkIcon = (\n <span\n className=\"pgn__hyperlink__external-icon\"\n title={externalLinkTitle}\n >\n <Icon\n src={Launch}\n screenReaderText={externalLinkAlternativeText}\n style={{ height: '1em', width: '1em' }}\n data-testid=\"hyperlink-icon\"\n />\n </span>\n );\n }\n }\n\n return (\n <a\n ref={ref}\n className={classNames(\n 'pgn__hyperlink',\n `${variant}-link`,\n {\n 'standalone-link': !isInline,\n 'inline-link': isInline,\n },\n className,\n )}\n href={destination}\n target={target}\n onClick={onClick}\n {...attrs}\n >\n {children}\n {externalLinkIcon}\n </a>\n );\n});\n\nHyperlink.defaultProps = {\n className: undefined,\n target: '_self',\n onClick: () => {},\n externalLinkAlternativeText: HYPER_LINK_EXTERNAL_LINK_ALT_TEXT,\n externalLinkTitle: HYPER_LINK_EXTERNAL_LINK_TITLE,\n variant: 'default',\n isInline: false,\n showLaunchIcon: true,\n};\n\nHyperlink.propTypes = {\n /** specifies the URL */\n destination: PropTypes.string.isRequired,\n /** Content of the hyperlink */\n // @ts-ignore\n children: PropTypes.node.isRequired,\n /** Custom class names for the hyperlink */\n className: PropTypes.string,\n /** specifies where the link should open. The default behavior is `_self`, which means that the URL will be\n * loaded into the same browsing context as the current one.\n * If the target is `_blank` (opening a new window) `rel='noopener'` will be added to the anchor tag to prevent\n * any potential [reverse tabnabbing attack](https://www.owasp.org/index.php/Reverse_Tabnabbing).\n */\n target: PropTypes.oneOf(['_blank', '_self']),\n /** specifies the callback function when the link is clicked */\n onClick: PropTypes.func,\n /** Alt text for the icon indicating that this link opens in a new tab, if target=\"_blank\". e.g. _(\"in a new tab\") */\n externalLinkAlternativeText: PropTypes.string,\n /** Tooltip text for the \"opens in new tab\" icon, if target=\"_blank\". e.g. _(\"Opens in a new tab\"). */\n externalLinkTitle: PropTypes.string,\n /** type of hyperlink */\n variant: PropTypes.oneOf(['default', 'muted', 'brand']),\n /** Display the link with an underline. By default, it is only underlined on hover. */\n isInline: PropTypes.bool,\n /** specify if we need to show launch Icon. By default, it will be visible. */\n showLaunchIcon: PropTypes.bool,\n};\n\nexport default Hyperlink;\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,11 @@
1
+ @use "sass:map";
2
+
1
3
  .pgn__hyperlink {
2
4
  display: inline-flex;
3
5
  align-items: center;
4
6
  text-align: start;
5
7
 
6
8
  &__external-icon {
7
- margin-inline-start: map_get($spacers, 2);
9
+ margin-inline-start: map.get($spacers, 2);
8
10
  }
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","PropTypes","classNames","newId","withDeprecatedProps","DeprTypes","Icon","_ref","src","Component","id","className","hidden","screenReaderText","svgAttrs","size","attrs","hasAriaLabel","mergedSvgProps","undefined","createElement","role","focusable","Fragment","propTypes","elementType","shape","string","oneOf","bool","oneOfType","element","defaultProps","deprType","FORMAT","expect","value","transform","Array","isArray","join","message"],"sources":["../../src/Icon/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport newId from '../utils/newId';\nimport withDeprecatedProps, { DeprTypes } from '../withDeprecatedProps';\n\n/**\n * An svg with an \"img\" role must satisfy the following a11y requirements\n * - It needs a text alternative in the form of aria-label, aria-labelledby, or screen-reader only text.\n * - If no label is desired, aria-label will be set to an empty string and aria-hidden to \"true\".\n * - focusable is set to false on the svg in all cases as a workaround for an ie11 bug\n */\n\nfunction Icon({\n src: Component,\n id,\n className,\n hidden,\n screenReaderText,\n svgAttrs,\n size,\n ...attrs\n}) {\n if (Component) {\n // If no aria label is specified, hide this icon from screenreaders\n const hasAriaLabel = svgAttrs['aria-label'] || svgAttrs['aria-labelledby'];\n\n const mergedSvgProps = { ...svgAttrs };\n\n if (!hasAriaLabel) {\n mergedSvgProps['aria-label'] = undefined;\n mergedSvgProps['aria-hidden'] = true;\n }\n\n return (\n <span\n className={classNames('pgn__icon', { [`pgn__icon__${size}`]: !!size }, className)}\n id={id}\n {...attrs}\n >\n <Component\n role=\"img\"\n focusable={false}\n {...mergedSvgProps}\n />\n {screenReaderText && (\n <span className=\"sr-only\">\n {screenReaderText}\n </span>\n )}\n </span>\n );\n }\n\n return (\n <>\n <span\n id={id || newId('Icon')}\n className={className}\n aria-hidden={hidden}\n />\n {screenReaderText && (\n <span className=\"sr-only\">\n {screenReaderText}\n </span>\n )}\n </>\n );\n}\n\nIcon.propTypes = {\n /**\n * An icon component to render.\n * Example import of a Paragon icon component: `import { Check } from '@openedx/paragon/icons';`\n */\n src: PropTypes.elementType,\n /** HTML element attributes to pass through to the underlying svg element */\n svgAttrs: PropTypes.shape({\n 'aria-label': PropTypes.string,\n 'aria-labelledby': PropTypes.string,\n }),\n /**\n * the `id` property of the Icon element, by default this value is generated\n * with the `newId` function with the `prefix` of `Icon`.\n */\n id: PropTypes.string,\n /** The size of the icon. */\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg']),\n /** A class name that will define what the Icon looks like. */\n className: PropTypes.string,\n /**\n * a boolean that determines the value of `aria-hidden` attribute on the Icon span,\n * this value is `true` by default.\n */\n hidden: PropTypes.bool,\n /**\n * a string or an element that will be used on a secondary span leveraging the `sr-only` style\n * for screenreader only text, this value is `undefined` by default. This value is recommended for use unless\n * the Icon is being used in a way that is purely decorative or provides no additional context for screen\n * reader users. This field should be thought of the same way an `alt` attribute would be used for `image` tags.\n */\n screenReaderText: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n};\n\nIcon.defaultProps = {\n src: null,\n svgAttrs: {},\n id: undefined,\n hidden: true,\n screenReaderText: undefined,\n size: undefined,\n className: undefined,\n};\n\nexport default withDeprecatedProps(Icon, 'Icon', {\n className: {\n deprType: DeprTypes.FORMAT,\n expect: value => typeof value === 'string',\n transform: value => (Array.isArray(value) ? value.join(' ') : value),\n message: 'It should be a string.',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","PropTypes","classNames","newId","withDeprecatedProps","DeprTypes","Icon","_ref","src","Component","id","className","hidden","screenReaderText","svgAttrs","size","attrs","hasAriaLabel","mergedSvgProps","undefined","createElement","role","focusable","Fragment","propTypes","elementType","shape","string","oneOf","bool","oneOfType","element","defaultProps","deprType","FORMAT","expect","value","transform","Array","isArray","join","message"],"sources":["../../src/Icon/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport newId from '../utils/newId';\nimport withDeprecatedProps, { DeprTypes } from '../withDeprecatedProps';\n\n/**\n * An svg with an \"img\" role must satisfy the following a11y requirements\n * - It needs a text alternative in the form of aria-label, aria-labelledby, or screen-reader only text.\n * - If no label is desired, aria-label will be set to an empty string and aria-hidden to \"true\".\n * - focusable is set to false on the svg in all cases as a workaround for an ie11 bug\n */\n\nfunction Icon({\n src: Component,\n id,\n className,\n hidden,\n screenReaderText,\n svgAttrs,\n size,\n ...attrs\n}) {\n if (Component) {\n // If no aria label is specified, hide this icon from screenreaders\n const hasAriaLabel = svgAttrs['aria-label'] || svgAttrs['aria-labelledby'];\n\n const mergedSvgProps = { ...svgAttrs };\n\n if (!hasAriaLabel) {\n mergedSvgProps['aria-label'] = undefined;\n mergedSvgProps['aria-hidden'] = true;\n }\n\n return (\n <span\n className={classNames('pgn__icon', { [`pgn__icon__${size}`]: !!size }, className)}\n id={id}\n {...attrs}\n >\n <Component\n role=\"img\"\n focusable={false}\n {...mergedSvgProps}\n />\n {screenReaderText && (\n <span className=\"sr-only\">\n {screenReaderText}\n </span>\n )}\n </span>\n );\n }\n\n return (\n <>\n <span\n id={id || newId('Icon')}\n className={className}\n aria-hidden={hidden}\n />\n {screenReaderText && (\n <span className=\"sr-only\">\n {screenReaderText}\n </span>\n )}\n </>\n );\n}\n\nIcon.propTypes = {\n /**\n * An icon component to render.\n * Example import of a Paragon icon component: `import { Check } from '@openedx/paragon/icons';`\n */\n src: PropTypes.elementType,\n /** HTML element attributes to pass through to the underlying svg element */\n svgAttrs: PropTypes.shape({\n 'aria-label': PropTypes.string,\n 'aria-labelledby': PropTypes.string,\n }),\n /**\n * the `id` property of the Icon element, by default this value is generated\n * with the `newId` function with the `prefix` of `Icon`.\n */\n id: PropTypes.string,\n /** The size of the icon. */\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg']),\n /** A class name that will define what the Icon looks like. */\n className: PropTypes.string,\n /**\n * a boolean that determines the value of `aria-hidden` attribute on the Icon span,\n * this value is `true` by default.\n */\n hidden: PropTypes.bool,\n /**\n * a string or an element that will be used on a secondary span leveraging the `sr-only` style\n * for screenreader only text, this value is `undefined` by default. This value is recommended for use unless\n * the Icon is being used in a way that is purely decorative or provides no additional context for screen\n * reader users. This field should be thought of the same way an `alt` attribute would be used for `image` tags.\n */\n screenReaderText: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n};\n\nIcon.defaultProps = {\n src: null,\n svgAttrs: {},\n id: undefined,\n hidden: true,\n screenReaderText: undefined,\n size: undefined,\n className: undefined,\n};\n\nexport default withDeprecatedProps(Icon, 'Icon', {\n className: {\n deprType: DeprTypes.FORMAT,\n expect: value => typeof value === 'string',\n transform: value => (Array.isArray(value) ? value.join(' ') : value),\n message: 'It should be a string.',\n },\n});\n"],"mappings":"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","ignoreList":[]}