@elliemae/ds-controlled-form 3.0.0-next.12 → 3.0.0-next.16

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 (203) hide show
  1. package/dist/cjs/autocomplete/Autocomplete.js +5 -6
  2. package/dist/cjs/autocomplete/Autocomplete.js.map +2 -2
  3. package/dist/cjs/autocomplete/AutocompleteCTX.js +3 -14
  4. package/dist/cjs/autocomplete/AutocompleteCTX.js.map +2 -2
  5. package/dist/cjs/autocomplete/AutocompleteDataTestids.js +1 -7
  6. package/dist/cjs/autocomplete/AutocompleteDataTestids.js.map +2 -2
  7. package/dist/cjs/autocomplete/config/useAutocomplete.js +23 -11
  8. package/dist/cjs/autocomplete/config/useAutocomplete.js.map +3 -3
  9. package/dist/cjs/autocomplete/parts/container/Container.js +27 -17
  10. package/dist/cjs/autocomplete/parts/container/Container.js.map +2 -2
  11. package/dist/cjs/autocomplete/parts/container/styled.js +0 -5
  12. package/dist/cjs/autocomplete/parts/container/styled.js.map +2 -2
  13. package/dist/cjs/autocomplete/parts/{controls → container}/useKeyboardNavigation.js +18 -24
  14. package/dist/cjs/autocomplete/parts/container/useKeyboardNavigation.js.map +7 -0
  15. package/dist/cjs/autocomplete/parts/menu-list/MenuList.js +5 -25
  16. package/dist/cjs/autocomplete/parts/menu-list/MenuList.js.map +2 -2
  17. package/dist/cjs/autocomplete/parts/menu-list/styled.js +2 -4
  18. package/dist/cjs/autocomplete/parts/menu-list/styled.js.map +2 -2
  19. package/dist/cjs/autocomplete/parts/menu-list/useItemRenderer.js +33 -35
  20. package/dist/cjs/autocomplete/parts/menu-list/useItemRenderer.js.map +2 -2
  21. package/dist/cjs/autocomplete/react-desc-prop-types.js +4 -9
  22. package/dist/cjs/autocomplete/react-desc-prop-types.js.map +2 -2
  23. package/dist/cjs/autocomplete/sharedTypes.js.map +1 -1
  24. package/dist/cjs/autocomplete/{config/constants.js → tests/utils.js} +27 -13
  25. package/dist/cjs/autocomplete/tests/utils.js.map +7 -0
  26. package/dist/cjs/autocomplete/utils/listHelper.js +8 -12
  27. package/dist/cjs/autocomplete/utils/listHelper.js.map +2 -2
  28. package/dist/cjs/combobox/config/useComboBox.js +7 -1
  29. package/dist/cjs/combobox/config/useComboBox.js.map +2 -2
  30. package/dist/cjs/combobox/config/useCorrectOptions.js +10 -29
  31. package/dist/cjs/combobox/config/useCorrectOptions.js.map +2 -2
  32. package/dist/cjs/combobox/parts/A11yFocusedOption.js +3 -3
  33. package/dist/cjs/combobox/parts/A11yFocusedOption.js.map +2 -2
  34. package/dist/cjs/combobox/parts/controls/Controls.js +3 -1
  35. package/dist/cjs/combobox/parts/controls/Controls.js.map +2 -2
  36. package/dist/cjs/combobox/parts/controls-input/ControlsInput.js +2 -1
  37. package/dist/cjs/combobox/parts/controls-input/ControlsInput.js.map +2 -2
  38. package/dist/cjs/combobox/parts/controls-input/styled.js +3 -0
  39. package/dist/cjs/combobox/parts/controls-input/styled.js.map +2 -2
  40. package/dist/cjs/combobox/parts/controls-input/useControlsInput.js +4 -5
  41. package/dist/cjs/combobox/parts/controls-input/useControlsInput.js.map +2 -2
  42. package/dist/cjs/combobox/parts/controls-input/useKeyboardNavigation.js +32 -29
  43. package/dist/cjs/combobox/parts/controls-input/useKeyboardNavigation.js.map +2 -2
  44. package/dist/cjs/combobox/parts/controls-input/useMaskedOnChange.js +8 -5
  45. package/dist/cjs/combobox/parts/controls-input/useMaskedOnChange.js.map +2 -2
  46. package/dist/cjs/combobox/parts/header-list/useHeaderListHandlers.js +4 -4
  47. package/dist/cjs/combobox/parts/header-list/useHeaderListHandlers.js.map +2 -2
  48. package/dist/cjs/combobox/parts/menu-list/MenuList.js +13 -10
  49. package/dist/cjs/combobox/parts/menu-list/MenuList.js.map +2 -2
  50. package/dist/cjs/combobox/parts/menu-list/styled.js +2 -1
  51. package/dist/cjs/combobox/parts/menu-list/styled.js.map +2 -2
  52. package/dist/cjs/combobox/parts/menu-list/useItemRenderer.js +7 -7
  53. package/dist/cjs/combobox/parts/menu-list/useItemRenderer.js.map +2 -2
  54. package/dist/cjs/combobox/parts/menu-list/useMenuListSetFocusOption.js +7 -7
  55. package/dist/cjs/combobox/parts/menu-list/useMenuListSetFocusOption.js.map +2 -2
  56. package/dist/cjs/combobox/react-desc-prop-types.js +2 -1
  57. package/dist/cjs/combobox/react-desc-prop-types.js.map +2 -2
  58. package/dist/cjs/combobox/utils/listHelper.js +34 -11
  59. package/dist/cjs/combobox/utils/listHelper.js.map +2 -2
  60. package/dist/cjs/mask-hook/hooks/index.js +1 -1
  61. package/dist/cjs/mask-hook/hooks/index.js.map +1 -1
  62. package/dist/cjs/mask-hook/hooks/useNumberMask.js +5 -0
  63. package/dist/cjs/mask-hook/hooks/useNumberMask.js.map +2 -2
  64. package/dist/cjs/mask-hook/hooks/usePhoneMask.js +7 -2
  65. package/dist/cjs/mask-hook/hooks/usePhoneMask.js.map +2 -2
  66. package/dist/cjs/mask-hook/hooks/useSSNMask.js +5 -0
  67. package/dist/cjs/mask-hook/hooks/useSSNMask.js.map +2 -2
  68. package/dist/cjs/mask-hook/hooks/{useZipCode.js → useZipCodeMask.js} +13 -8
  69. package/dist/cjs/mask-hook/hooks/{useZipCode.js.map → useZipCodeMask.js.map} +3 -3
  70. package/dist/esm/autocomplete/Autocomplete.js +2 -3
  71. package/dist/esm/autocomplete/Autocomplete.js.map +2 -2
  72. package/dist/esm/autocomplete/AutocompleteCTX.js +3 -14
  73. package/dist/esm/autocomplete/AutocompleteCTX.js.map +2 -2
  74. package/dist/esm/autocomplete/AutocompleteDataTestids.js +1 -7
  75. package/dist/esm/autocomplete/AutocompleteDataTestids.js.map +2 -2
  76. package/dist/esm/autocomplete/config/useAutocomplete.js +24 -12
  77. package/dist/esm/autocomplete/config/useAutocomplete.js.map +3 -3
  78. package/dist/esm/autocomplete/parts/container/Container.js +28 -18
  79. package/dist/esm/autocomplete/parts/container/Container.js.map +2 -2
  80. package/dist/esm/autocomplete/parts/container/styled.js +0 -5
  81. package/dist/esm/autocomplete/parts/container/styled.js.map +2 -2
  82. package/dist/esm/autocomplete/parts/{controls → container}/useKeyboardNavigation.js +18 -24
  83. package/dist/esm/autocomplete/parts/container/useKeyboardNavigation.js.map +7 -0
  84. package/dist/esm/autocomplete/parts/menu-list/MenuList.js +6 -26
  85. package/dist/esm/autocomplete/parts/menu-list/MenuList.js.map +2 -2
  86. package/dist/esm/autocomplete/parts/menu-list/styled.js +2 -4
  87. package/dist/esm/autocomplete/parts/menu-list/styled.js.map +2 -2
  88. package/dist/esm/autocomplete/parts/menu-list/useItemRenderer.js +33 -35
  89. package/dist/esm/autocomplete/parts/menu-list/useItemRenderer.js.map +2 -2
  90. package/dist/esm/autocomplete/react-desc-prop-types.js +4 -9
  91. package/dist/esm/autocomplete/react-desc-prop-types.js.map +2 -2
  92. package/dist/esm/autocomplete/tests/utils.js +27 -0
  93. package/dist/esm/autocomplete/tests/utils.js.map +7 -0
  94. package/dist/esm/autocomplete/utils/listHelper.js +8 -12
  95. package/dist/esm/autocomplete/utils/listHelper.js.map +2 -2
  96. package/dist/esm/combobox/config/useComboBox.js +7 -1
  97. package/dist/esm/combobox/config/useComboBox.js.map +2 -2
  98. package/dist/esm/combobox/config/useCorrectOptions.js +11 -30
  99. package/dist/esm/combobox/config/useCorrectOptions.js.map +2 -2
  100. package/dist/esm/combobox/parts/A11yFocusedOption.js +3 -3
  101. package/dist/esm/combobox/parts/A11yFocusedOption.js.map +2 -2
  102. package/dist/esm/combobox/parts/controls/Controls.js +3 -1
  103. package/dist/esm/combobox/parts/controls/Controls.js.map +2 -2
  104. package/dist/esm/combobox/parts/controls-input/ControlsInput.js +2 -1
  105. package/dist/esm/combobox/parts/controls-input/ControlsInput.js.map +2 -2
  106. package/dist/esm/combobox/parts/controls-input/styled.js +3 -0
  107. package/dist/esm/combobox/parts/controls-input/styled.js.map +2 -2
  108. package/dist/esm/combobox/parts/controls-input/useControlsInput.js +4 -5
  109. package/dist/esm/combobox/parts/controls-input/useControlsInput.js.map +2 -2
  110. package/dist/esm/combobox/parts/controls-input/useKeyboardNavigation.js +32 -29
  111. package/dist/esm/combobox/parts/controls-input/useKeyboardNavigation.js.map +2 -2
  112. package/dist/esm/combobox/parts/controls-input/useMaskedOnChange.js +8 -5
  113. package/dist/esm/combobox/parts/controls-input/useMaskedOnChange.js.map +2 -2
  114. package/dist/esm/combobox/parts/header-list/useHeaderListHandlers.js +4 -4
  115. package/dist/esm/combobox/parts/header-list/useHeaderListHandlers.js.map +2 -2
  116. package/dist/esm/combobox/parts/menu-list/MenuList.js +13 -10
  117. package/dist/esm/combobox/parts/menu-list/MenuList.js.map +2 -2
  118. package/dist/esm/combobox/parts/menu-list/styled.js +2 -1
  119. package/dist/esm/combobox/parts/menu-list/styled.js.map +2 -2
  120. package/dist/esm/combobox/parts/menu-list/useItemRenderer.js +7 -7
  121. package/dist/esm/combobox/parts/menu-list/useItemRenderer.js.map +2 -2
  122. package/dist/esm/combobox/parts/menu-list/useMenuListSetFocusOption.js +7 -7
  123. package/dist/esm/combobox/parts/menu-list/useMenuListSetFocusOption.js.map +2 -2
  124. package/dist/esm/combobox/react-desc-prop-types.js +2 -1
  125. package/dist/esm/combobox/react-desc-prop-types.js.map +2 -2
  126. package/dist/esm/combobox/utils/listHelper.js +34 -11
  127. package/dist/esm/combobox/utils/listHelper.js.map +2 -2
  128. package/dist/esm/mask-hook/hooks/index.js +1 -1
  129. package/dist/esm/mask-hook/hooks/index.js.map +1 -1
  130. package/dist/esm/mask-hook/hooks/useNumberMask.js +5 -0
  131. package/dist/esm/mask-hook/hooks/useNumberMask.js.map +2 -2
  132. package/dist/esm/mask-hook/hooks/usePhoneMask.js +7 -2
  133. package/dist/esm/mask-hook/hooks/usePhoneMask.js.map +2 -2
  134. package/dist/esm/mask-hook/hooks/useSSNMask.js +5 -0
  135. package/dist/esm/mask-hook/hooks/useSSNMask.js.map +2 -2
  136. package/dist/esm/mask-hook/hooks/{useZipCode.js → useZipCodeMask.js} +10 -5
  137. package/dist/esm/mask-hook/hooks/{useZipCode.js.map → useZipCodeMask.js.map} +3 -3
  138. package/package.json +15 -15
  139. package/dist/cjs/autocomplete/config/constants.js.map +0 -7
  140. package/dist/cjs/autocomplete/config/useGetPropsWithDefault.js +0 -37
  141. package/dist/cjs/autocomplete/config/useGetPropsWithDefault.js.map +0 -7
  142. package/dist/cjs/autocomplete/index.d.js +0 -27
  143. package/dist/cjs/autocomplete/index.d.js.map +0 -7
  144. package/dist/cjs/autocomplete/parts/a11y-messages/MultiAllyMessages.js +0 -50
  145. package/dist/cjs/autocomplete/parts/a11y-messages/MultiAllyMessages.js.map +0 -7
  146. package/dist/cjs/autocomplete/parts/a11y-messages/SingleAllyMessages.js +0 -48
  147. package/dist/cjs/autocomplete/parts/a11y-messages/SingleAllyMessages.js.map +0 -7
  148. package/dist/cjs/autocomplete/parts/a11y-messages/index.js +0 -37
  149. package/dist/cjs/autocomplete/parts/a11y-messages/index.js.map +0 -7
  150. package/dist/cjs/autocomplete/parts/a11y-messages/styled.js +0 -41
  151. package/dist/cjs/autocomplete/parts/a11y-messages/styled.js.map +0 -7
  152. package/dist/cjs/autocomplete/parts/controls/Controls.js +0 -72
  153. package/dist/cjs/autocomplete/parts/controls/Controls.js.map +0 -7
  154. package/dist/cjs/autocomplete/parts/controls/index.js +0 -35
  155. package/dist/cjs/autocomplete/parts/controls/index.js.map +0 -7
  156. package/dist/cjs/autocomplete/parts/controls/styled.js +0 -108
  157. package/dist/cjs/autocomplete/parts/controls/styled.js.map +0 -7
  158. package/dist/cjs/autocomplete/parts/controls/useControlsInput.js +0 -62
  159. package/dist/cjs/autocomplete/parts/controls/useControlsInput.js.map +0 -7
  160. package/dist/cjs/autocomplete/parts/controls/useKeyboardNavigation.js.map +0 -7
  161. package/dist/cjs/autocomplete/parts/controls/useMaskedOnChange.js +0 -48
  162. package/dist/cjs/autocomplete/parts/controls/useMaskedOnChange.js.map +0 -7
  163. package/dist/cjs/autocomplete/parts/menu-list/useMenuList.js +0 -82
  164. package/dist/cjs/autocomplete/parts/menu-list/useMenuList.js.map +0 -7
  165. package/dist/cjs/autocomplete/propTypes.js +0 -56
  166. package/dist/cjs/autocomplete/propTypes.js.map +0 -7
  167. package/dist/cjs/autocomplete/utils/hooks/useKeyboardNavigation.js +0 -108
  168. package/dist/cjs/autocomplete/utils/hooks/useKeyboardNavigation.js.map +0 -7
  169. package/dist/cjs/autocomplete/utils/hooks/useOnElementResize.js +0 -56
  170. package/dist/cjs/autocomplete/utils/hooks/useOnElementResize.js.map +0 -7
  171. package/dist/esm/autocomplete/config/constants.js +0 -13
  172. package/dist/esm/autocomplete/config/constants.js.map +0 -7
  173. package/dist/esm/autocomplete/config/useGetPropsWithDefault.js +0 -8
  174. package/dist/esm/autocomplete/config/useGetPropsWithDefault.js.map +0 -7
  175. package/dist/esm/autocomplete/index.d.js +0 -2
  176. package/dist/esm/autocomplete/index.d.js.map +0 -7
  177. package/dist/esm/autocomplete/parts/a11y-messages/MultiAllyMessages.js +0 -21
  178. package/dist/esm/autocomplete/parts/a11y-messages/MultiAllyMessages.js.map +0 -7
  179. package/dist/esm/autocomplete/parts/a11y-messages/SingleAllyMessages.js +0 -19
  180. package/dist/esm/autocomplete/parts/a11y-messages/SingleAllyMessages.js.map +0 -7
  181. package/dist/esm/autocomplete/parts/a11y-messages/index.js +0 -8
  182. package/dist/esm/autocomplete/parts/a11y-messages/index.js.map +0 -7
  183. package/dist/esm/autocomplete/parts/a11y-messages/styled.js +0 -12
  184. package/dist/esm/autocomplete/parts/a11y-messages/styled.js.map +0 -7
  185. package/dist/esm/autocomplete/parts/controls/Controls.js +0 -43
  186. package/dist/esm/autocomplete/parts/controls/Controls.js.map +0 -7
  187. package/dist/esm/autocomplete/parts/controls/index.js +0 -6
  188. package/dist/esm/autocomplete/parts/controls/index.js.map +0 -7
  189. package/dist/esm/autocomplete/parts/controls/styled.js +0 -79
  190. package/dist/esm/autocomplete/parts/controls/styled.js.map +0 -7
  191. package/dist/esm/autocomplete/parts/controls/useControlsInput.js +0 -33
  192. package/dist/esm/autocomplete/parts/controls/useControlsInput.js.map +0 -7
  193. package/dist/esm/autocomplete/parts/controls/useKeyboardNavigation.js.map +0 -7
  194. package/dist/esm/autocomplete/parts/controls/useMaskedOnChange.js +0 -19
  195. package/dist/esm/autocomplete/parts/controls/useMaskedOnChange.js.map +0 -7
  196. package/dist/esm/autocomplete/parts/menu-list/useMenuList.js +0 -53
  197. package/dist/esm/autocomplete/parts/menu-list/useMenuList.js.map +0 -7
  198. package/dist/esm/autocomplete/propTypes.js +0 -27
  199. package/dist/esm/autocomplete/propTypes.js.map +0 -7
  200. package/dist/esm/autocomplete/utils/hooks/useKeyboardNavigation.js +0 -79
  201. package/dist/esm/autocomplete/utils/hooks/useKeyboardNavigation.js.map +0 -7
  202. package/dist/esm/autocomplete/utils/hooks/useOnElementResize.js +0 -27
  203. package/dist/esm/autocomplete/utils/hooks/useOnElementResize.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/combobox/react-desc-prop-types.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { globalAttributesPropTypes, PropTypes } from '@elliemae/ds-props-helpers';\nimport { DSMaskT } from '../mask-hook';\nexport function noop<T extends unknown[]>(..._args: T): void {}\n\nexport declare namespace DSComboboxT {\n export interface CommonItemOptions {\n dsId: string;\n disabled?: boolean;\n render?: React.ComponentType<unknown>;\n }\n export interface ItemSeparatorOptions extends CommonItemOptions {\n type: 'separator';\n }\n\n export interface ItemSectionOptions extends CommonItemOptions {\n type: 'section';\n label: string;\n }\n\n export interface ItemOption extends CommonItemOptions {\n value: string;\n label: string;\n type: 'option';\n }\n\n export interface ItemCreatableOption extends CommonItemOptions {\n label: string;\n type: 'creatable';\n }\n\n export type OptionTypes = ItemOption | ItemSectionOptions | ItemSeparatorOptions | ItemCreatableOption;\n\n export type SelectedOptionsT = ItemOption[] | ItemOption | null;\n export interface PropsOptional {\n inputMinWidth?: number;\n menuMinWidth?: number;\n menuMaxHeight?: number;\n placeholder?: string;\n autoFocus?: boolean;\n onCreate?: (label: string) => void;\n onFilter?: (value: string) => void;\n onMenuOpen?: () => void;\n onMenuClose?: () => void;\n onCancel?: () => void;\n onBlur?: () => void;\n onSelectAll?: (suggestedValue: OptionTypes[] | [], event: React.MouseEvent | React.KeyboardEvent) => null;\n onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>, value: ItemOption) => void;\n }\n\n export interface RequiredProps {\n options: OptionTypes[];\n selectedValues: SelectedOptionsT;\n onChange: (\n suggestedValue: ItemOption | OptionTypes[] | null,\n selectedOption: ItemOption,\n event: React.MouseEvent | React.KeyboardEvent,\n ) => void;\n }\n export interface DefaultProps {\n startPlacementPreference: string;\n placementOrderPreference: string[];\n hasError: boolean;\n inline: boolean;\n withoutPortal: boolean;\n zIndex: number;\n disabled: boolean;\n innerRef: React.RefObject<HTMLInputElement>;\n useMask: DSMaskT.Hook | typeof noop;\n }\n\n export interface Props extends Partial<DefaultProps>, RequiredProps, PropsOptional {}\n\n export interface InternalProps extends DefaultProps, RequiredProps, PropsOptional {}\n}\n\nexport const ComboboxPropTypes = {\n ...globalAttributesPropTypes,\n placeholder: PropTypes.string.description(\"input's placeholder value\").defaultValue(''),\n options: PropTypes.oneOfType([PropTypes.array, PropTypes.object])\n .isRequired.description('List of options')\n .defaultValue([]),\n selectedValues: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.object), PropTypes.object]).isRequired.description(\n 'Array of option or single option selected',\n ),\n disabled: PropTypes.bool.description('wheter or not the input is disabled').defaultValue('false'),\n autoFocus: PropTypes.bool.description('Whether the combo box uses auto focus or not').defaultValue('false'),\n hasError: PropTypes.bool.description('Whether the combo box has error or not').defaultValue('false'),\n onChange: PropTypes.func.isRequired\n .description('function triggered when an option is selected it will send the options selected')\n .defaultValue('() => {}'),\n onFilter: PropTypes.func.description('function triggered when user type in the combobox input').defaultValue(''),\n onCreate: PropTypes.func\n .description(\n 'function triggered when user select \"create\" a new item whenever is not a match in the all option list',\n )\n .defaultValue(''),\n onCancel: PropTypes.func.description('function triggered when user press ESC key').defaultValue('() => {}'),\n onMenuOpen: PropTypes.func.description('function triggered when user open the menu list').defaultValue('() => {}'),\n onMenuClose: PropTypes.func.description('function triggered when user close the menu list').defaultValue('() => {}'),\n inputMinWidth: PropTypes.any.description('Minimum width for the combo box input controller').defaultValue(undefined),\n menuMinWidth: PropTypes.any.description('Minimum width for the dropdown menu').defaultValue(undefined),\n menuMaxHeight: PropTypes.any.description('Maximum height for the dropdown menu').defaultValue(undefined),\n withoutPortal: PropTypes.bool\n .description('Whether the combobox menu is rendered in a portal or not')\n .defaultValue(false),\n zIndex: PropTypes.number.description('The z-index of the combobox menu').defaultValue(10),\n innerRef: PropTypes.object.description('ref to the components container'),\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;ACGA;AAEO,iBAAsC,OAAgB;AAAA;AAyEtD,MAAM,oBAAoB,iCAC5B,4BAD4B;AAAA,EAE/B,aAAa,UAAU,OAAO,YAAY,6BAA6B,aAAa;AAAA,EACpF,SAAS,UAAU,UAAU,CAAC,UAAU,OAAO,UAAU,SACtD,WAAW,YAAY,mBACvB,aAAa;AAAA,EAChB,gBAAgB,UAAU,UAAU,CAAC,UAAU,QAAQ,UAAU,SAAS,UAAU,SAAS,WAAW,YACtG;AAAA,EAEF,UAAU,UAAU,KAAK,YAAY,uCAAuC,aAAa;AAAA,EACzF,WAAW,UAAU,KAAK,YAAY,gDAAgD,aAAa;AAAA,EACnG,UAAU,UAAU,KAAK,YAAY,0CAA0C,aAAa;AAAA,EAC5F,UAAU,UAAU,KAAK,WACtB,YAAY,mFACZ,aAAa;AAAA,EAChB,UAAU,UAAU,KAAK,YAAY,2DAA2D,aAAa;AAAA,EAC7G,UAAU,UAAU,KACjB,YACC,0GAED,aAAa;AAAA,EAChB,UAAU,UAAU,KAAK,YAAY,8CAA8C,aAAa;AAAA,EAChG,YAAY,UAAU,KAAK,YAAY,mDAAmD,aAAa;AAAA,EACvG,aAAa,UAAU,KAAK,YAAY,oDAAoD,aAAa;AAAA,EACzG,eAAe,UAAU,IAAI,YAAY,oDAAoD,aAAa;AAAA,EAC1G,cAAc,UAAU,IAAI,YAAY,uCAAuC,aAAa;AAAA,EAC5F,eAAe,UAAU,IAAI,YAAY,wCAAwC,aAAa;AAAA,EAC9F,eAAe,UAAU,KACtB,YAAY,4DACZ,aAAa;AAAA,EAChB,QAAQ,UAAU,OAAO,YAAY,oCAAoC,aAAa;AAAA,EACtF,UAAU,UAAU,OAAO,YAAY;AAAA;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { globalAttributesPropTypes, PropTypes } from '@elliemae/ds-props-helpers';\nimport { DSMaskT } from '../mask-hook';\nexport function noop<T extends unknown[]>(..._args: T): void {}\n\nexport declare namespace DSComboboxT {\n export interface CommonItemOptions {\n dsId: string;\n disabled?: boolean;\n render?: React.ComponentType<unknown>;\n }\n export interface ItemSeparatorOptions extends CommonItemOptions {\n type: 'separator';\n }\n\n export interface ItemSectionOptions extends CommonItemOptions {\n type: 'section';\n label: string;\n }\n\n export interface ItemOption extends CommonItemOptions {\n value: string;\n label: string;\n type: 'option';\n }\n\n export interface ItemCreatableOption extends CommonItemOptions {\n label: string;\n type: 'creatable';\n }\n\n export type OptionTypes = ItemOption | ItemSectionOptions | ItemSeparatorOptions | ItemCreatableOption;\n\n export type SelectedOptionsT = ItemOption[] | ItemOption | null;\n export interface PropsOptional {\n inputMinWidth?: number;\n menuMinWidth?: number;\n menuMaxHeight?: number;\n placeholder?: string;\n autoFocus?: boolean;\n filteredOptions: OptionTypes[];\n onCreate?: (label: string) => void;\n onFilter?: (newOptions: OptionTypes[], inputValue: string) => void;\n onMenuOpen?: () => void;\n onMenuClose?: () => void;\n onCancel?: () => void;\n onBlur?: () => void;\n onSelectAll?: (suggestedValue: OptionTypes[] | [], event: React.MouseEvent | React.KeyboardEvent) => null;\n onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>, value: ItemOption) => void;\n }\n\n export interface RequiredProps {\n allOptions: OptionTypes[];\n selectedValues: SelectedOptionsT;\n onChange: (\n suggestedValue: ItemOption | OptionTypes[] | null,\n selectedOption: ItemOption,\n event: React.MouseEvent | React.KeyboardEvent,\n ) => void;\n }\n export interface DefaultProps {\n startPlacementPreference: string;\n placementOrderPreference: string[];\n hasError: boolean;\n inline: boolean;\n withoutPortal: boolean;\n zIndex: number;\n disabled: boolean;\n innerRef: React.RefObject<HTMLInputElement>;\n useMask: DSMaskT.Hook | typeof noop;\n }\n\n export interface Props extends Partial<DefaultProps>, RequiredProps, PropsOptional {}\n\n export interface InternalProps extends DefaultProps, RequiredProps, PropsOptional {}\n}\n\nexport const ComboboxPropTypes = {\n ...globalAttributesPropTypes,\n placeholder: PropTypes.string.description(\"input's placeholder value\").defaultValue(''),\n allOptions: PropTypes.oneOfType([PropTypes.array, PropTypes.object])\n .isRequired.description('List of original options')\n .defaultValue([]),\n filteredOptions: PropTypes.oneOfType([PropTypes.array, PropTypes.object])\n .description('List of filtered options to show in the menu based on the current internal input filter value')\n .defaultValue([]),\n selectedValues: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.object), PropTypes.object]).isRequired.description(\n 'Array of option or single option selected',\n ),\n disabled: PropTypes.bool.description('wheter or not the input is disabled').defaultValue('false'),\n autoFocus: PropTypes.bool.description('Whether the combo box uses auto focus or not').defaultValue('false'),\n hasError: PropTypes.bool.description('Whether the combo box has error or not').defaultValue('false'),\n onChange: PropTypes.func.isRequired\n .description('function triggered when an option is selected it will send the options selected')\n .defaultValue('() => {}'),\n onFilter: PropTypes.func.description('function triggered when user type in the combobox input').defaultValue(''),\n onCreate: PropTypes.func\n .description(\n 'function triggered when user select \"create\" a new item whenever is not a match in the all option list',\n )\n .defaultValue(''),\n onCancel: PropTypes.func.description('function triggered when user press ESC key').defaultValue('() => {}'),\n onMenuOpen: PropTypes.func.description('function triggered when user open the menu list').defaultValue('() => {}'),\n onMenuClose: PropTypes.func.description('function triggered when user close the menu list').defaultValue('() => {}'),\n inputMinWidth: PropTypes.any.description('Minimum width for the combo box input controller').defaultValue(undefined),\n menuMinWidth: PropTypes.any.description('Minimum width for the dropdown menu').defaultValue(undefined),\n menuMaxHeight: PropTypes.any.description('Maximum height for the dropdown menu').defaultValue(undefined),\n withoutPortal: PropTypes.bool\n .description('Whether the combobox menu is rendered in a portal or not')\n .defaultValue(false),\n zIndex: PropTypes.number.description('The z-index of the combobox menu').defaultValue(10),\n innerRef: PropTypes.object.description('ref to the components container'),\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;ACGA;AAEO,iBAAsC,OAAgB;AAAA;AA0EtD,MAAM,oBAAoB,iCAC5B,4BAD4B;AAAA,EAE/B,aAAa,UAAU,OAAO,YAAY,6BAA6B,aAAa;AAAA,EACpF,YAAY,UAAU,UAAU,CAAC,UAAU,OAAO,UAAU,SACzD,WAAW,YAAY,4BACvB,aAAa;AAAA,EAChB,iBAAiB,UAAU,UAAU,CAAC,UAAU,OAAO,UAAU,SAC9D,YAAY,iGACZ,aAAa;AAAA,EAChB,gBAAgB,UAAU,UAAU,CAAC,UAAU,QAAQ,UAAU,SAAS,UAAU,SAAS,WAAW,YACtG;AAAA,EAEF,UAAU,UAAU,KAAK,YAAY,uCAAuC,aAAa;AAAA,EACzF,WAAW,UAAU,KAAK,YAAY,gDAAgD,aAAa;AAAA,EACnG,UAAU,UAAU,KAAK,YAAY,0CAA0C,aAAa;AAAA,EAC5F,UAAU,UAAU,KAAK,WACtB,YAAY,mFACZ,aAAa;AAAA,EAChB,UAAU,UAAU,KAAK,YAAY,2DAA2D,aAAa;AAAA,EAC7G,UAAU,UAAU,KACjB,YACC,0GAED,aAAa;AAAA,EAChB,UAAU,UAAU,KAAK,YAAY,8CAA8C,aAAa;AAAA,EAChG,YAAY,UAAU,KAAK,YAAY,mDAAmD,aAAa;AAAA,EACvG,aAAa,UAAU,KAAK,YAAY,oDAAoD,aAAa;AAAA,EACzG,eAAe,UAAU,IAAI,YAAY,oDAAoD,aAAa;AAAA,EAC1G,cAAc,UAAU,IAAI,YAAY,uCAAuC,aAAa;AAAA,EAC5F,eAAe,UAAU,IAAI,YAAY,wCAAwC,aAAa;AAAA,EAC9F,eAAe,UAAU,KACtB,YAAY,4DACZ,aAAa;AAAA,EAChB,QAAQ,UAAU,OAAO,YAAY,oCAAoC,aAAa;AAAA,EACtF,UAAU,UAAU,OAAO,YAAY;AAAA;",
6
6
  "names": []
7
7
  }
@@ -19,14 +19,18 @@ const findInCircularList = (list, from, criteria, step = 1) => {
19
19
  }
20
20
  return from;
21
21
  };
22
+ const getLastValueSelected = (selectedValues) => {
23
+ if (Array.isArray(selectedValues)) {
24
+ return selectedValues[selectedValues.length - 1];
25
+ }
26
+ return selectedValues;
27
+ };
22
28
  const getFirstOption = (options, selectedValues, inputValue) => {
23
29
  if (!inputValue) {
24
- if (Array.isArray(selectedValues) && selectedValues.length > 0) {
25
- return selectedValues[selectedValues.length - 1].dsId;
26
- }
27
- if (selectedValues?.dsId) {
28
- return selectedValues.dsId;
29
- }
30
+ const lastValue = getLastValueSelected(selectedValues);
31
+ console.log(lastValue, "lastValue");
32
+ if (lastValue)
33
+ return lastValue.dsId;
30
34
  }
31
35
  for (let i = 0; i < options.length; i += 1)
32
36
  if (!["section", "separator"].includes(options[i].type) && !options[i].disabled) {
@@ -47,14 +51,32 @@ const getSuggestedValueOnChange = (selectedOption, selectedValues) => {
47
51
  }
48
52
  return selectedOption;
49
53
  };
50
- const getLastValueSelected = (selectedValues) => {
51
- if (Array.isArray(selectedValues)) {
52
- return selectedValues[selectedValues.length - 1];
54
+ const filterOptions = (inputValue, options) => options.filter((option) => option.type === MENU_OPTION_TYPES.OPTION && option.label.toLowerCase().includes(inputValue.toLowerCase()));
55
+ const selectedValuesWithSections = (optionsToParse, multiSelectedValue) => {
56
+ const items = [];
57
+ if (optionsToParse)
58
+ optionsToParse.forEach((option) => {
59
+ if (option.type === MENU_OPTION_TYPES.OPTION && isSelected(multiSelectedValue, option)) {
60
+ items.push(option);
61
+ }
62
+ if (option.type === MENU_OPTION_TYPES.SECTION) {
63
+ if (items[items.length - 1]?.type === MENU_OPTION_TYPES.SECTION) {
64
+ items[items.length - 1] = option;
65
+ } else {
66
+ items.push(option);
67
+ }
68
+ }
69
+ });
70
+ if (items[items.length - 1]?.type === MENU_OPTION_TYPES.SECTION) {
71
+ items.pop();
53
72
  }
54
- return selectedValues;
73
+ return items;
55
74
  };
75
+ const getFilteredOptionsSelected = (filteredOption, selectedValues) => filteredOption.filter((option) => option.type === MENU_OPTION_TYPES.OPTION && isSelected(selectedValues, option));
56
76
  export {
77
+ filterOptions,
57
78
  findInCircularList,
79
+ getFilteredOptionsSelected,
58
80
  getFirstOption,
59
81
  getLastValueSelected,
60
82
  getOptions,
@@ -62,6 +84,7 @@ export {
62
84
  getSuggestedValueOnChange,
63
85
  isSelected,
64
86
  isSelectedValueEmpty,
65
- isSelectedValueMultiple
87
+ isSelectedValueMultiple,
88
+ selectedValuesWithSections
66
89
  };
67
90
  //# sourceMappingURL=listHelper.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/combobox/utils/listHelper.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { DSComboboxT } from '../react-desc-prop-types';\nimport { MENU_OPTION_TYPES } from '../constants';\nimport { isOption } from '../sharedTypes';\nexport const getSelectableOptions = (options: Array<DSComboboxT.OptionTypes>): Array<DSComboboxT.OptionTypes> =>\n options.filter((option) => option.type === MENU_OPTION_TYPES.OPTION && !option.disabled);\n\nexport const getOptions = (options: Array<DSComboboxT.OptionTypes>): Array<DSComboboxT.OptionTypes> =>\n options.filter((option) => option.type === MENU_OPTION_TYPES.OPTION);\n\nexport const isSelectedValueEmpty = (value: DSComboboxT.SelectedOptionsT): boolean =>\n Array.isArray(value) ? value.length === 0 : !value;\n\nexport const isSelectedValueMultiple = (value: DSComboboxT.SelectedOptionsT): boolean => Array.isArray(value);\n\nexport const isSelected = (value: DSComboboxT.SelectedOptionsT, activeOption: DSComboboxT.ItemOption): boolean => {\n if (isSelectedValueMultiple(value)) {\n const multiValue = value as DSComboboxT.ItemOption[];\n return multiValue.some((item) => item?.value === activeOption?.value);\n }\n const singleValue = value as DSComboboxT.ItemOption;\n return singleValue?.value === activeOption.value;\n};\n\nexport const findInCircularList = (\n list: DSComboboxT.OptionTypes[],\n from: number,\n criteria: (item: DSComboboxT.OptionTypes) => boolean,\n step = 1,\n // eslint-disable-next-line max-params\n): number => {\n for (\n let i = (from + step + list.length) % list.length;\n i !== from && from > -1;\n i = (i + step + list.length) % list.length\n ) {\n if (criteria(list[i])) return i;\n }\n return from; // return same item\n};\n\nexport const getFirstOption = (\n options: DSComboboxT.OptionTypes[],\n selectedValues: DSComboboxT.SelectedOptionsT,\n inputValue: string,\n): string => {\n if (!inputValue) {\n if (Array.isArray(selectedValues) && selectedValues.length > 0) {\n return selectedValues[selectedValues.length - 1].dsId;\n }\n if (selectedValues?.dsId) {\n return selectedValues.dsId;\n }\n }\n\n for (let i = 0; i < options.length; i += 1)\n if (!['section', 'separator'].includes(options[i].type) && !options[i].disabled) {\n return options[i].dsId;\n }\n return '';\n};\n\nexport const getSuggestedValueOnChange = (\n selectedOption: DSComboboxT.ItemOption,\n selectedValues: DSComboboxT.SelectedOptionsT,\n) => {\n if (Array.isArray(selectedValues)) {\n const isFound = selectedValues.find((item) => item.type === 'option' && item.value === selectedOption.value);\n if (isFound) {\n return selectedValues.filter((item) => item.type === 'option' && item.value !== selectedOption.value);\n }\n return [...selectedValues, selectedOption];\n }\n if (selectedValues && selectedValues.dsId === selectedOption.dsId) {\n return null;\n }\n return selectedOption;\n};\n\nexport const getLastValueSelected = (selectedValues: DSComboboxT.SelectedOptionsT) => {\n if (Array.isArray(selectedValues)) {\n return selectedValues[selectedValues.length - 1];\n }\n return selectedValues;\n};\n"],
5
- "mappings": "AAAA;ACCA;AAEO,MAAM,uBAAuB,CAAC,YACnC,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,kBAAkB,UAAU,CAAC,OAAO;AAE1E,MAAM,aAAa,CAAC,YACzB,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,kBAAkB;AAExD,MAAM,uBAAuB,CAAC,UACnC,MAAM,QAAQ,SAAS,MAAM,WAAW,IAAI,CAAC;AAExC,MAAM,0BAA0B,CAAC,UAAiD,MAAM,QAAQ;AAEhG,MAAM,aAAa,CAAC,OAAqC,iBAAkD;AAChH,MAAI,wBAAwB,QAAQ;AAClC,UAAM,aAAa;AACnB,WAAO,WAAW,KAAK,CAAC,SAAS,MAAM,UAAU,cAAc;AAAA;AAEjE,QAAM,cAAc;AACpB,SAAO,aAAa,UAAU,aAAa;AAAA;AAGtC,MAAM,qBAAqB,CAChC,MACA,MACA,UACA,OAAO,MAEI;AACX,WACM,IAAK,QAAO,OAAO,KAAK,UAAU,KAAK,QAC3C,MAAM,QAAQ,OAAO,IACrB,IAAK,KAAI,OAAO,KAAK,UAAU,KAAK,QACpC;AACA,QAAI,SAAS,KAAK;AAAK,aAAO;AAAA;AAEhC,SAAO;AAAA;AAGF,MAAM,iBAAiB,CAC5B,SACA,gBACA,eACW;AACX,MAAI,CAAC,YAAY;AACf,QAAI,MAAM,QAAQ,mBAAmB,eAAe,SAAS,GAAG;AAC9D,aAAO,eAAe,eAAe,SAAS,GAAG;AAAA;AAEnD,QAAI,gBAAgB,MAAM;AACxB,aAAO,eAAe;AAAA;AAAA;AAI1B,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,QAAI,CAAC,CAAC,WAAW,aAAa,SAAS,QAAQ,GAAG,SAAS,CAAC,QAAQ,GAAG,UAAU;AAC/E,aAAO,QAAQ,GAAG;AAAA;AAEtB,SAAO;AAAA;AAGF,MAAM,4BAA4B,CACvC,gBACA,mBACG;AACH,MAAI,MAAM,QAAQ,iBAAiB;AACjC,UAAM,UAAU,eAAe,KAAK,CAAC,SAAS,KAAK,SAAS,YAAY,KAAK,UAAU,eAAe;AACtG,QAAI,SAAS;AACX,aAAO,eAAe,OAAO,CAAC,SAAS,KAAK,SAAS,YAAY,KAAK,UAAU,eAAe;AAAA;AAEjG,WAAO,CAAC,GAAG,gBAAgB;AAAA;AAE7B,MAAI,kBAAkB,eAAe,SAAS,eAAe,MAAM;AACjE,WAAO;AAAA;AAET,SAAO;AAAA;AAGF,MAAM,uBAAuB,CAAC,mBAAiD;AACpF,MAAI,MAAM,QAAQ,iBAAiB;AACjC,WAAO,eAAe,eAAe,SAAS;AAAA;AAEhD,SAAO;AAAA;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { DSComboboxT } from '../react-desc-prop-types';\nimport { MENU_OPTION_TYPES } from '../constants';\nexport const getSelectableOptions = (options: Array<DSComboboxT.OptionTypes>): Array<DSComboboxT.OptionTypes> =>\n options.filter((option) => option.type === MENU_OPTION_TYPES.OPTION && !option.disabled);\n\nexport const getOptions = (options: Array<DSComboboxT.OptionTypes>): Array<DSComboboxT.OptionTypes> =>\n options.filter((option) => option.type === MENU_OPTION_TYPES.OPTION);\n\nexport const isSelectedValueEmpty = (value: DSComboboxT.SelectedOptionsT): boolean =>\n Array.isArray(value) ? value.length === 0 : !value;\n\nexport const isSelectedValueMultiple = (value: DSComboboxT.SelectedOptionsT): boolean => Array.isArray(value);\n\nexport const isSelected = (value: DSComboboxT.SelectedOptionsT, activeOption: DSComboboxT.ItemOption): boolean => {\n if (isSelectedValueMultiple(value)) {\n const multiValue = value as DSComboboxT.ItemOption[];\n return multiValue.some((item) => item?.value === activeOption?.value);\n }\n const singleValue = value as DSComboboxT.ItemOption;\n return singleValue?.value === activeOption.value;\n};\n\nexport const findInCircularList = (\n list: DSComboboxT.OptionTypes[],\n from: number,\n criteria: (item: DSComboboxT.OptionTypes) => boolean,\n step = 1,\n // eslint-disable-next-line max-params\n): number => {\n for (\n let i = (from + step + list.length) % list.length;\n i !== from && from > -1;\n i = (i + step + list.length) % list.length\n ) {\n if (criteria(list[i])) return i;\n }\n return from; // return same item\n};\n\nexport const getLastValueSelected = (selectedValues: DSComboboxT.SelectedOptionsT) => {\n if (Array.isArray(selectedValues)) {\n return selectedValues[selectedValues.length - 1];\n }\n return selectedValues;\n};\n\nexport const getFirstOption = (\n options: DSComboboxT.OptionTypes[],\n selectedValues: DSComboboxT.SelectedOptionsT,\n inputValue: string,\n): string => {\n if (!inputValue) {\n const lastValue = getLastValueSelected(selectedValues);\n console.log(lastValue, 'lastValue');\n if (lastValue) return lastValue.dsId;\n }\n\n for (let i = 0; i < options.length; i += 1)\n if (!['section', 'separator'].includes(options[i].type) && !options[i].disabled) {\n return options[i].dsId;\n }\n return '';\n};\n\nexport const getSuggestedValueOnChange = (\n selectedOption: DSComboboxT.ItemOption,\n selectedValues: DSComboboxT.SelectedOptionsT,\n) => {\n if (Array.isArray(selectedValues)) {\n const isFound = selectedValues.find((item) => item.type === 'option' && item.value === selectedOption.value);\n if (isFound) {\n return selectedValues.filter((item) => item.type === 'option' && item.value !== selectedOption.value);\n }\n return [...selectedValues, selectedOption];\n }\n if (selectedValues && selectedValues.dsId === selectedOption.dsId) {\n return null;\n }\n return selectedOption;\n};\n\nexport const filterOptions = (inputValue: string, options: DSComboboxT.OptionTypes[]) =>\n options.filter(\n (option) =>\n option.type === MENU_OPTION_TYPES.OPTION && option.label.toLowerCase().includes(inputValue.toLowerCase()),\n );\n\nexport const selectedValuesWithSections = (\n optionsToParse: DSComboboxT.OptionTypes[],\n multiSelectedValue: DSComboboxT.ItemOption[],\n) => {\n const items = [] as DSComboboxT.OptionTypes[];\n\n if (optionsToParse)\n optionsToParse.forEach((option) => {\n // const isSelectedValue = multiSelectedValue.find((item) => item?.dsId === option.dsId);\n if (option.type === MENU_OPTION_TYPES.OPTION && isSelected(multiSelectedValue, option)) {\n items.push(option);\n }\n\n if (option.type === MENU_OPTION_TYPES.SECTION) {\n if (items[items.length - 1]?.type === MENU_OPTION_TYPES.SECTION) {\n items[items.length - 1] = option;\n } else {\n items.push(option);\n }\n }\n });\n if (items[items.length - 1]?.type === MENU_OPTION_TYPES.SECTION) {\n items.pop();\n }\n\n return items;\n};\n\nexport const getFilteredOptionsSelected = (\n filteredOption: DSComboboxT.OptionTypes[],\n selectedValues: DSComboboxT.ItemOption[],\n) => filteredOption.filter((option) => option.type === MENU_OPTION_TYPES.OPTION && isSelected(selectedValues, option));\n"],
5
+ "mappings": "AAAA;ACCA;AACO,MAAM,uBAAuB,CAAC,YACnC,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,kBAAkB,UAAU,CAAC,OAAO;AAE1E,MAAM,aAAa,CAAC,YACzB,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,kBAAkB;AAExD,MAAM,uBAAuB,CAAC,UACnC,MAAM,QAAQ,SAAS,MAAM,WAAW,IAAI,CAAC;AAExC,MAAM,0BAA0B,CAAC,UAAiD,MAAM,QAAQ;AAEhG,MAAM,aAAa,CAAC,OAAqC,iBAAkD;AAChH,MAAI,wBAAwB,QAAQ;AAClC,UAAM,aAAa;AACnB,WAAO,WAAW,KAAK,CAAC,SAAS,MAAM,UAAU,cAAc;AAAA;AAEjE,QAAM,cAAc;AACpB,SAAO,aAAa,UAAU,aAAa;AAAA;AAGtC,MAAM,qBAAqB,CAChC,MACA,MACA,UACA,OAAO,MAEI;AACX,WACM,IAAK,QAAO,OAAO,KAAK,UAAU,KAAK,QAC3C,MAAM,QAAQ,OAAO,IACrB,IAAK,KAAI,OAAO,KAAK,UAAU,KAAK,QACpC;AACA,QAAI,SAAS,KAAK;AAAK,aAAO;AAAA;AAEhC,SAAO;AAAA;AAGF,MAAM,uBAAuB,CAAC,mBAAiD;AACpF,MAAI,MAAM,QAAQ,iBAAiB;AACjC,WAAO,eAAe,eAAe,SAAS;AAAA;AAEhD,SAAO;AAAA;AAGF,MAAM,iBAAiB,CAC5B,SACA,gBACA,eACW;AACX,MAAI,CAAC,YAAY;AACf,UAAM,YAAY,qBAAqB;AACvC,YAAQ,IAAI,WAAW;AACvB,QAAI;AAAW,aAAO,UAAU;AAAA;AAGlC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,QAAI,CAAC,CAAC,WAAW,aAAa,SAAS,QAAQ,GAAG,SAAS,CAAC,QAAQ,GAAG,UAAU;AAC/E,aAAO,QAAQ,GAAG;AAAA;AAEtB,SAAO;AAAA;AAGF,MAAM,4BAA4B,CACvC,gBACA,mBACG;AACH,MAAI,MAAM,QAAQ,iBAAiB;AACjC,UAAM,UAAU,eAAe,KAAK,CAAC,SAAS,KAAK,SAAS,YAAY,KAAK,UAAU,eAAe;AACtG,QAAI,SAAS;AACX,aAAO,eAAe,OAAO,CAAC,SAAS,KAAK,SAAS,YAAY,KAAK,UAAU,eAAe;AAAA;AAEjG,WAAO,CAAC,GAAG,gBAAgB;AAAA;AAE7B,MAAI,kBAAkB,eAAe,SAAS,eAAe,MAAM;AACjE,WAAO;AAAA;AAET,SAAO;AAAA;AAGF,MAAM,gBAAgB,CAAC,YAAoB,YAChD,QAAQ,OACN,CAAC,WACC,OAAO,SAAS,kBAAkB,UAAU,OAAO,MAAM,cAAc,SAAS,WAAW;AAG1F,MAAM,6BAA6B,CACxC,gBACA,uBACG;AACH,QAAM,QAAQ;AAEd,MAAI;AACF,mBAAe,QAAQ,CAAC,WAAW;AAEjC,UAAI,OAAO,SAAS,kBAAkB,UAAU,WAAW,oBAAoB,SAAS;AACtF,cAAM,KAAK;AAAA;AAGb,UAAI,OAAO,SAAS,kBAAkB,SAAS;AAC7C,YAAI,MAAM,MAAM,SAAS,IAAI,SAAS,kBAAkB,SAAS;AAC/D,gBAAM,MAAM,SAAS,KAAK;AAAA,eACrB;AACL,gBAAM,KAAK;AAAA;AAAA;AAAA;AAInB,MAAI,MAAM,MAAM,SAAS,IAAI,SAAS,kBAAkB,SAAS;AAC/D,UAAM;AAAA;AAGR,SAAO;AAAA;AAGF,MAAM,6BAA6B,CACxC,gBACA,mBACG,eAAe,OAAO,CAAC,WAAW,OAAO,SAAS,kBAAkB,UAAU,WAAW,gBAAgB;",
6
6
  "names": []
7
7
  }
@@ -2,5 +2,5 @@ import * as React from "react";
2
2
  export * from "./usePhoneMask";
3
3
  export * from "./useNumberMask";
4
4
  export * from "./useSSNMask";
5
- export * from "./useZipCode";
5
+ export * from "./useZipCodeMask";
6
6
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/mask-hook/hooks/index.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export * from './usePhoneMask';\nexport * from './useNumberMask';\nexport * from './useSSNMask';\nexport * from './useZipCode';\n"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export * from './usePhoneMask';\nexport * from './useNumberMask';\nexport * from './useSSNMask';\nexport * from './useZipCodeMask';\n"],
5
5
  "mappings": "AAAA;ACAA;AACA;AACA;AACA;",
6
6
  "names": []
7
7
  }
@@ -129,10 +129,15 @@ const useNumberMask = (props) => {
129
129
  onBlur
130
130
  };
131
131
  };
132
+ const getNumberMaskedValue = (value, opts) => {
133
+ const [maskedValue] = conformValue(value, value.length - 1, "", opts);
134
+ return maskedValue;
135
+ };
132
136
  const UseNumberMaskWithSchema = describe(useNumberMask);
133
137
  UseNumberMaskWithSchema.propTypes = DSMaskNumberHookPropsTypes;
134
138
  export {
135
139
  UseNumberMaskWithSchema,
140
+ getNumberMaskedValue,
136
141
  useNumberMask
137
142
  };
138
143
  //# sourceMappingURL=useNumberMask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/mask-hook/hooks/useNumberMask.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React, { useCallback, useRef, useState } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { setCursorPosition } from '../utils';\nimport { DSMaskNumberHookDefaultProps, DSMaskNumberHookPropsTypes, DSMaskT } from '../react-desc-prop-types';\n\nconst addThousandsSeparator = (n: string, separator: string) => n.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n\nconst conformValue = (\n rawValue: string,\n cursorPos: number,\n lastKeyCode: string,\n opts: DSMaskT.NumberHookArgs,\n): [string, number] => {\n const { includeThousandsSeparator, allowNegative, prefix, suffix, decimalPlaces, decimalRequired } = opts;\n const THOUSANDSSEPARATOR = ',';\n\n let dotIdx = -1;\n // allow minus sign before and after the preffix\n let finalPrefix = [prefix.length, 0].includes(rawValue.indexOf('-')) && allowNegative ? '-' : '';\n\n let maskedValue = rawValue.split('').filter((char, idx) => {\n // we take only the first dot\n const validChar = (char >= '0' && char <= '9') || (char === '.' && dotIdx === -1 && decimalPlaces);\n if (char === '.' && validChar) dotIdx = idx;\n return validChar;\n });\n\n if (prefix && maskedValue.length) finalPrefix += prefix;\n\n // REMOVE FOLLOWING ZEROS IN INTEGER PART AFTER LEADER ZERO NUMBER\n while (maskedValue.length >= 2 && maskedValue[0] === '0' && maskedValue[1] !== '.') {\n maskedValue = maskedValue.splice(1);\n }\n dotIdx = maskedValue.findIndex((char) => char === '.');\n\n let integer = maskedValue.slice(0, dotIdx !== -1 ? dotIdx : maskedValue.length);\n const decimal = maskedValue.slice(dotIdx, dotIdx + decimalPlaces + 1);\n // ADDING THOUSANDS SEPARATOR\n if (includeThousandsSeparator) {\n integer = addThousandsSeparator(integer.join(''), THOUSANDSSEPARATOR).split('');\n }\n\n // MERGIN INT AND DECIMAL IF NECCESSARY\n if (dotIdx !== -1 && !(lastKeyCode === 'Backspace' && decimal.length === 1)) {\n if (integer.length) {\n maskedValue = [...integer, ...decimal];\n } else {\n // if theres no integer add a zero to the left of the dot to cover .23 => 0.23 case\n maskedValue = ['0', ...decimal];\n }\n } else {\n // If decimal is required we add a dot after integer if exists\n maskedValue = decimalRequired && integer.length ? [...integer, '.'] : integer;\n }\n\n // remove orphans prefix for example \"-$\"\n if (lastKeyCode === 'Backspace' && maskedValue.length === 0) {\n finalPrefix = '';\n }\n\n // SET REAL CURSOR POSITION AFTER ADDING DOT and COMMAS SEPARATORS\n let maskedPos = 0;\n\n // 0 leading case we move the cursor to continue typing\n if (maskedValue[maskedPos] === '0' && cursorPos === 1 + prefix.length) maskedPos += 1;\n\n for (let i = 0; i < cursorPos; i += 1) {\n if (maskedValue[maskedPos] === THOUSANDSSEPARATOR) maskedPos += 1;\n if (maskedValue[maskedPos] === rawValue[i]) maskedPos += 1;\n }\n\n maskedPos += finalPrefix.length;\n\n const finalSuffix = maskedValue.length ? suffix : '';\n\n const maskedValueString = finalPrefix + maskedValue.join('') + finalSuffix;\n return [maskedValueString, maskedPos];\n};\n\nexport const useNumberMask: DSMaskT.NumberHook = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskNumberHookDefaultProps);\n useValidateTypescriptPropTypes(propsWithDefault, DSMaskNumberHookPropsTypes);\n\n const {\n valueSetter,\n onChange: userOnChange,\n onKeyDown: userOnKeyDown,\n onBlur: userOnBlur,\n ...opts\n } = propsWithDefault;\n\n const lastKeyCode = useRef('Unidentified');\n\n const scheduleAfterRender = useCallbackAfterRender();\n\n // Some times, the value of the mask is not gonna change (user types invalid char for example)\n // This makes the input to go from \"correct\" -> \"incorrect\" -> \"correct\"\n // But since the input is controlled, the input does not re-render\n // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async\n // Solution for this is to trigger a re-render, we do this with a set state call in the on change event\n const [, setKey] = useState(0);\n\n const onBlur: React.FocusEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const maskedValue = e.target.value;\n const dotIdx = maskedValue.indexOf('.');\n const minusIndex = maskedValue.indexOf('-');\n const { decimalRequired, decimalPlaces, suffix } = opts;\n if (decimalRequired) {\n if (dotIdx > -1) {\n const decimal = maskedValue.slice(dotIdx + 1);\n let zerosRest = '';\n while (decimal.length + zerosRest.length !== decimalPlaces) {\n zerosRest += '0';\n }\n valueSetter(maskedValue + zerosRest);\n }\n } else if (maskedValue.length - suffix.length - 1 === dotIdx) {\n // removing orphans dots\n valueSetter(maskedValue.replace('.', ''));\n } else if (maskedValue.length - 1 === minusIndex) {\n // removing orphans minus\n valueSetter(maskedValue.replace('-', ''));\n }\n if (userOnBlur) userOnBlur(e);\n },\n [userOnBlur, valueSetter, opts],\n );\n\n const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n lastKeyCode.current = e.code;\n if (userOnKeyDown) userOnKeyDown(e);\n },\n [userOnKeyDown],\n );\n\n const onChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const [mask, cursorPos] = conformValue(\n e.target.value,\n e.target.selectionEnd ?? 0,\n lastKeyCode.current,\n opts as DSMaskT.NumberHookArgs,\n );\n valueSetter((prevMask) => {\n // Here we need to update the key\n if (mask === prevMask) setKey((key) => key + 1);\n\n return mask;\n });\n if (userOnChange) userOnChange(e, mask);\n scheduleAfterRender(() => setCursorPosition(e.target, cursorPos));\n },\n [valueSetter, scheduleAfterRender, userOnChange, opts],\n );\n\n return {\n onKeyDown,\n onChange,\n onBlur,\n };\n};\n\nexport const UseNumberMaskWithSchema = describe(useNumberMask);\nUseNumberMaskWithSchema.propTypes = DSMaskNumberHookPropsTypes;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React, { useCallback, useRef, useState } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { setCursorPosition } from '../utils';\nimport { DSMaskNumberHookDefaultProps, DSMaskNumberHookPropsTypes, DSMaskT } from '../react-desc-prop-types';\n\nconst addThousandsSeparator = (n: string, separator: string) => n.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n\nconst conformValue = (\n rawValue: string,\n cursorPos: number,\n lastKeyCode: string,\n opts: DSMaskT.NumberHookArgs,\n): [string, number] => {\n const { includeThousandsSeparator, allowNegative, prefix, suffix, decimalPlaces, decimalRequired } = opts;\n const THOUSANDSSEPARATOR = ',';\n\n let dotIdx = -1;\n // allow minus sign before and after the preffix\n let finalPrefix = [prefix.length, 0].includes(rawValue.indexOf('-')) && allowNegative ? '-' : '';\n\n let maskedValue = rawValue.split('').filter((char, idx) => {\n // we take only the first dot\n const validChar = (char >= '0' && char <= '9') || (char === '.' && dotIdx === -1 && decimalPlaces);\n if (char === '.' && validChar) dotIdx = idx;\n return validChar;\n });\n\n if (prefix && maskedValue.length) finalPrefix += prefix;\n\n // REMOVE FOLLOWING ZEROS IN INTEGER PART AFTER LEADER ZERO NUMBER\n while (maskedValue.length >= 2 && maskedValue[0] === '0' && maskedValue[1] !== '.') {\n maskedValue = maskedValue.splice(1);\n }\n dotIdx = maskedValue.findIndex((char) => char === '.');\n\n let integer = maskedValue.slice(0, dotIdx !== -1 ? dotIdx : maskedValue.length);\n const decimal = maskedValue.slice(dotIdx, dotIdx + decimalPlaces + 1);\n // ADDING THOUSANDS SEPARATOR\n if (includeThousandsSeparator) {\n integer = addThousandsSeparator(integer.join(''), THOUSANDSSEPARATOR).split('');\n }\n\n // MERGIN INT AND DECIMAL IF NECCESSARY\n if (dotIdx !== -1 && !(lastKeyCode === 'Backspace' && decimal.length === 1)) {\n if (integer.length) {\n maskedValue = [...integer, ...decimal];\n } else {\n // if theres no integer add a zero to the left of the dot to cover .23 => 0.23 case\n maskedValue = ['0', ...decimal];\n }\n } else {\n // If decimal is required we add a dot after integer if exists\n maskedValue = decimalRequired && integer.length ? [...integer, '.'] : integer;\n }\n\n // remove orphans prefix for example \"-$\"\n if (lastKeyCode === 'Backspace' && maskedValue.length === 0) {\n finalPrefix = '';\n }\n\n // SET REAL CURSOR POSITION AFTER ADDING DOT and COMMAS SEPARATORS\n let maskedPos = 0;\n\n // 0 leading case we move the cursor to continue typing\n if (maskedValue[maskedPos] === '0' && cursorPos === 1 + prefix.length) maskedPos += 1;\n\n for (let i = 0; i < cursorPos; i += 1) {\n if (maskedValue[maskedPos] === THOUSANDSSEPARATOR) maskedPos += 1;\n if (maskedValue[maskedPos] === rawValue[i]) maskedPos += 1;\n }\n\n maskedPos += finalPrefix.length;\n\n const finalSuffix = maskedValue.length ? suffix : '';\n\n const maskedValueString = finalPrefix + maskedValue.join('') + finalSuffix;\n return [maskedValueString, maskedPos];\n};\n\nexport const useNumberMask: DSMaskT.NumberHook = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskNumberHookDefaultProps);\n useValidateTypescriptPropTypes(propsWithDefault, DSMaskNumberHookPropsTypes);\n\n const {\n valueSetter,\n onChange: userOnChange,\n onKeyDown: userOnKeyDown,\n onBlur: userOnBlur,\n ...opts\n } = propsWithDefault;\n\n const lastKeyCode = useRef('Unidentified');\n\n const scheduleAfterRender = useCallbackAfterRender();\n\n // Some times, the value of the mask is not gonna change (user types invalid char for example)\n // This makes the input to go from \"correct\" -> \"incorrect\" -> \"correct\"\n // But since the input is controlled, the input does not re-render\n // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async\n // Solution for this is to trigger a re-render, we do this with a set state call in the on change event\n const [, setKey] = useState(0);\n\n const onBlur: React.FocusEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const maskedValue = e.target.value;\n const dotIdx = maskedValue.indexOf('.');\n const minusIndex = maskedValue.indexOf('-');\n const { decimalRequired, decimalPlaces, suffix } = opts;\n if (decimalRequired) {\n if (dotIdx > -1) {\n const decimal = maskedValue.slice(dotIdx + 1);\n let zerosRest = '';\n while (decimal.length + zerosRest.length !== decimalPlaces) {\n zerosRest += '0';\n }\n valueSetter(maskedValue + zerosRest);\n }\n } else if (maskedValue.length - suffix.length - 1 === dotIdx) {\n // removing orphans dots\n valueSetter(maskedValue.replace('.', ''));\n } else if (maskedValue.length - 1 === minusIndex) {\n // removing orphans minus\n valueSetter(maskedValue.replace('-', ''));\n }\n if (userOnBlur) userOnBlur(e);\n },\n [userOnBlur, valueSetter, opts],\n );\n\n const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n lastKeyCode.current = e.code;\n if (userOnKeyDown) userOnKeyDown(e);\n },\n [userOnKeyDown],\n );\n\n const onChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const [mask, cursorPos] = conformValue(\n e.target.value,\n e.target.selectionEnd ?? 0,\n lastKeyCode.current,\n opts as DSMaskT.NumberHookArgs,\n );\n valueSetter((prevMask) => {\n // Here we need to update the key\n if (mask === prevMask) setKey((key) => key + 1);\n\n return mask;\n });\n if (userOnChange) userOnChange(e, mask);\n scheduleAfterRender(() => setCursorPosition(e.target, cursorPos));\n },\n [valueSetter, scheduleAfterRender, userOnChange, opts],\n );\n\n return {\n onKeyDown,\n onChange,\n onBlur,\n };\n};\n\nexport const getNumberMaskedValue = (value: string, opts: DSMaskT.NumberHookArgs) => {\n const [maskedValue] = conformValue(value, value.length - 1, '', opts);\n return maskedValue;\n};\n\nexport const UseNumberMaskWithSchema = describe(useNumberMask);\nUseNumberMaskWithSchema.propTypes = DSMaskNumberHookPropsTypes;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -22,12 +22,12 @@ import { DSMaskPhoneHookPropsTypes, DSMaskPhoneHookDefaultProps } from "../react
22
22
  const phoneSpecialChars = [
23
23
  ["(", 0],
24
24
  [") ", 4],
25
- ["-", 9]
25
+ [" - ", 9]
26
26
  ];
27
27
  const internationalPhoneSpecialChars = [
28
28
  ["+1 (", 0],
29
29
  [") ", 7],
30
- ["-", 12]
30
+ [" - ", 12]
31
31
  ];
32
32
  const conformValue = (rawValue, cursorPos, lastKeyCode, opts) => {
33
33
  const characters = rawValue.split("");
@@ -72,10 +72,15 @@ const usePhoneMask = (props) => {
72
72
  onChange
73
73
  };
74
74
  };
75
+ const getPhoneMaskedValue = (value, opts) => {
76
+ const [maskedValue] = conformValue(value, value.length - 1, "", opts);
77
+ return maskedValue;
78
+ };
75
79
  const UsePhoneMaskWithSchema = describe(usePhoneMask);
76
80
  UsePhoneMaskWithSchema.propTypes = DSMaskPhoneHookPropsTypes;
77
81
  export {
78
82
  UsePhoneMaskWithSchema,
83
+ getPhoneMaskedValue,
79
84
  usePhoneMask
80
85
  };
81
86
  //# sourceMappingURL=usePhoneMask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/mask-hook/hooks/usePhoneMask.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\nimport React, { useCallback, useRef, useState } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { addSpecialCharacters, getPartialMaskedPos, setCursorPosition } from '../utils';\nimport { DSMaskPhoneHookPropsTypes, DSMaskPhoneHookDefaultProps, DSMaskT } from '../react-desc-prop-types';\n\nconst phoneSpecialChars: [string, number][] = [\n ['(', 0],\n [') ', 4],\n ['-', 9],\n];\n\nconst internationalPhoneSpecialChars: [string, number][] = [\n ['+1 (', 0],\n [') ', 7],\n ['-', 12],\n];\n\nconst conformValue = (\n rawValue: string,\n cursorPos: number,\n lastKeyCode: string,\n opts: Partial<DSMaskT.PhoneHookArgs>,\n) => {\n const characters = rawValue.split('');\n // Work with digits only\n const { isInternational } = opts;\n let maskedValue = characters.filter((char, idx, array) => {\n if (isInternational && idx === 1 && char === '1' && array[0] === '+') {\n return false;\n }\n return char >= '0' && char <= '9';\n });\n // We can't have zeros at the start of the array\n while (maskedValue.length && maskedValue[0] === '0') maskedValue.splice(0, 1);\n\n // We only consider first 10 digits\n maskedValue = maskedValue.slice(0, 10);\n\n const maskedPos = getPartialMaskedPos(rawValue, maskedValue, cursorPos);\n\n return addSpecialCharacters(\n maskedValue,\n isInternational ? internationalPhoneSpecialChars : phoneSpecialChars,\n maskedPos,\n lastKeyCode,\n );\n};\n\nexport const usePhoneMask: DSMaskT.Hook = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskPhoneHookDefaultProps);\n useValidateTypescriptPropTypes(propsWithDefault, DSMaskPhoneHookPropsTypes);\n const { valueSetter, onChange: userOnChange, onKeyDown: userOnKeyDown, onBlur, ...opts } = propsWithDefault;\n\n const lastKeyCode = useRef('Unidentified');\n\n const scheduleAfterRender = useCallbackAfterRender();\n\n // Some times, the value of the mask is not gonna change (user types invalid char for example)\n // This makes the input to go from \"correct\" -> \"incorrect\" -> \"correct\"\n // But since the input is controlled, the input does not re-render\n // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async\n // Solution for this is to trigger a re-render, we do this with a set state call in the on change event\n const [, setKey] = useState(0);\n\n const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n lastKeyCode.current = e.code;\n if (userOnKeyDown) userOnKeyDown(e);\n },\n [userOnKeyDown],\n );\n\n const onChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const [mask, cursorPos] = conformValue(e.target.value, e.target.selectionEnd ?? 0, lastKeyCode.current, opts);\n\n valueSetter((prevMask) => {\n // Here we need to update the key\n if (mask === prevMask) setKey((key) => key + 1);\n return mask;\n });\n\n if (userOnChange) userOnChange(e, mask);\n\n scheduleAfterRender(() => setCursorPosition(e.target, cursorPos));\n },\n [valueSetter, scheduleAfterRender, opts, userOnChange],\n );\n\n return {\n onKeyDown,\n onChange,\n };\n};\n\nexport const UsePhoneMaskWithSchema = describe(usePhoneMask);\nUsePhoneMaskWithSchema.propTypes = DSMaskPhoneHookPropsTypes;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;AAAA;ACCA;AACA;AACA;AACA;AACA;AAEA,MAAM,oBAAwC;AAAA,EAC5C,CAAC,KAAK;AAAA,EACN,CAAC,MAAM;AAAA,EACP,CAAC,KAAK;AAAA;AAGR,MAAM,iCAAqD;AAAA,EACzD,CAAC,QAAQ;AAAA,EACT,CAAC,MAAM;AAAA,EACP,CAAC,KAAK;AAAA;AAGR,MAAM,eAAe,CACnB,UACA,WACA,aACA,SACG;AACH,QAAM,aAAa,SAAS,MAAM;AAElC,QAAM,EAAE,oBAAoB;AAC5B,MAAI,cAAc,WAAW,OAAO,CAAC,MAAM,KAAK,UAAU;AACxD,QAAI,mBAAmB,QAAQ,KAAK,SAAS,OAAO,MAAM,OAAO,KAAK;AACpE,aAAO;AAAA;AAET,WAAO,QAAQ,OAAO,QAAQ;AAAA;AAGhC,SAAO,YAAY,UAAU,YAAY,OAAO;AAAK,gBAAY,OAAO,GAAG;AAG3E,gBAAc,YAAY,MAAM,GAAG;AAEnC,QAAM,YAAY,oBAAoB,UAAU,aAAa;AAE7D,SAAO,qBACL,aACA,kBAAkB,iCAAiC,mBACnD,WACA;AAAA;AAIG,MAAM,eAA6B,CAAC,UAAU;AACnD,QAAM,mBAAmB,6BAA6B,OAAO;AAC7D,iCAA+B,kBAAkB;AACjD,QAA2F,uBAAnF,eAAa,UAAU,cAAc,WAAW,eAAe,WAAoB,IAAT,iBAAS,IAAT,CAA1E,eAAa,YAAwB,aAA0B;AAEvE,QAAM,cAAc,OAAO;AAE3B,QAAM,sBAAsB;AAO5B,QAAM,CAAC,EAAE,UAAU,SAAS;AAE5B,QAAM,YAA0D,YAC9D,CAAC,MAAM;AACL,gBAAY,UAAU,EAAE;AACxB,QAAI;AAAe,oBAAc;AAAA,KAEnC,CAAC;AAGH,QAAM,WAAuD,YAC3D,CAAC,MAAM;AACL,UAAM,CAAC,MAAM,aAAa,aAAa,EAAE,OAAO,OAAO,EAAE,OAAO,gBAAgB,GAAG,YAAY,SAAS;AAExG,gBAAY,CAAC,aAAa;AAExB,UAAI,SAAS;AAAU,eAAO,CAAC,QAAQ,MAAM;AAC7C,aAAO;AAAA;AAGT,QAAI;AAAc,mBAAa,GAAG;AAElC,wBAAoB,MAAM,kBAAkB,EAAE,QAAQ;AAAA,KAExD,CAAC,aAAa,qBAAqB,MAAM;AAG3C,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAIG,MAAM,yBAAyB,SAAS;AAC/C,uBAAuB,YAAY;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\nimport React, { useCallback, useRef, useState } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { addSpecialCharacters, getPartialMaskedPos, setCursorPosition } from '../utils';\nimport { DSMaskPhoneHookPropsTypes, DSMaskPhoneHookDefaultProps, DSMaskT } from '../react-desc-prop-types';\n\nconst phoneSpecialChars: [string, number][] = [\n ['(', 0],\n [') ', 4],\n [' - ', 9],\n];\n\nconst internationalPhoneSpecialChars: [string, number][] = [\n ['+1 (', 0],\n [') ', 7],\n [' - ', 12],\n];\n\nconst conformValue = (\n rawValue: string,\n cursorPos: number,\n lastKeyCode: string,\n opts: Partial<DSMaskT.PhoneHookArgs>,\n) => {\n const characters = rawValue.split('');\n // Work with digits only\n const { isInternational } = opts;\n let maskedValue = characters.filter((char, idx, array) => {\n if (isInternational && idx === 1 && char === '1' && array[0] === '+') {\n return false;\n }\n return char >= '0' && char <= '9';\n });\n // We can't have zeros at the start of the array\n while (maskedValue.length && maskedValue[0] === '0') maskedValue.splice(0, 1);\n\n // We only consider first 10 digits\n maskedValue = maskedValue.slice(0, 10);\n\n const maskedPos = getPartialMaskedPos(rawValue, maskedValue, cursorPos);\n\n return addSpecialCharacters(\n maskedValue,\n isInternational ? internationalPhoneSpecialChars : phoneSpecialChars,\n maskedPos,\n lastKeyCode,\n );\n};\n\nexport const usePhoneMask: DSMaskT.Hook = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskPhoneHookDefaultProps);\n useValidateTypescriptPropTypes(propsWithDefault, DSMaskPhoneHookPropsTypes);\n const { valueSetter, onChange: userOnChange, onKeyDown: userOnKeyDown, onBlur, ...opts } = propsWithDefault;\n\n const lastKeyCode = useRef('Unidentified');\n\n const scheduleAfterRender = useCallbackAfterRender();\n\n // Some times, the value of the mask is not gonna change (user types invalid char for example)\n // This makes the input to go from \"correct\" -> \"incorrect\" -> \"correct\"\n // But since the input is controlled, the input does not re-render\n // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async\n // Solution for this is to trigger a re-render, we do this with a set state call in the on change event\n const [, setKey] = useState(0);\n\n const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n lastKeyCode.current = e.code;\n if (userOnKeyDown) userOnKeyDown(e);\n },\n [userOnKeyDown],\n );\n\n const onChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const [mask, cursorPos] = conformValue(e.target.value, e.target.selectionEnd ?? 0, lastKeyCode.current, opts);\n\n valueSetter((prevMask) => {\n // Here we need to update the key\n if (mask === prevMask) setKey((key) => key + 1);\n return mask;\n });\n\n if (userOnChange) userOnChange(e, mask);\n\n scheduleAfterRender(() => setCursorPosition(e.target, cursorPos));\n },\n [valueSetter, scheduleAfterRender, opts, userOnChange],\n );\n\n return {\n onKeyDown,\n onChange,\n };\n};\n\nexport const getPhoneMaskedValue = (value: string, opts: Partial<DSMaskT.PhoneHookArgs>) => {\n const [maskedValue] = conformValue(value, value.length - 1, '', opts);\n return maskedValue;\n};\n\nexport const UsePhoneMaskWithSchema = describe(usePhoneMask);\nUsePhoneMaskWithSchema.propTypes = DSMaskPhoneHookPropsTypes;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAAA;ACCA;AACA;AACA;AACA;AACA;AAEA,MAAM,oBAAwC;AAAA,EAC5C,CAAC,KAAK;AAAA,EACN,CAAC,MAAM;AAAA,EACP,CAAC,OAAO;AAAA;AAGV,MAAM,iCAAqD;AAAA,EACzD,CAAC,QAAQ;AAAA,EACT,CAAC,MAAM;AAAA,EACP,CAAC,OAAO;AAAA;AAGV,MAAM,eAAe,CACnB,UACA,WACA,aACA,SACG;AACH,QAAM,aAAa,SAAS,MAAM;AAElC,QAAM,EAAE,oBAAoB;AAC5B,MAAI,cAAc,WAAW,OAAO,CAAC,MAAM,KAAK,UAAU;AACxD,QAAI,mBAAmB,QAAQ,KAAK,SAAS,OAAO,MAAM,OAAO,KAAK;AACpE,aAAO;AAAA;AAET,WAAO,QAAQ,OAAO,QAAQ;AAAA;AAGhC,SAAO,YAAY,UAAU,YAAY,OAAO;AAAK,gBAAY,OAAO,GAAG;AAG3E,gBAAc,YAAY,MAAM,GAAG;AAEnC,QAAM,YAAY,oBAAoB,UAAU,aAAa;AAE7D,SAAO,qBACL,aACA,kBAAkB,iCAAiC,mBACnD,WACA;AAAA;AAIG,MAAM,eAA6B,CAAC,UAAU;AACnD,QAAM,mBAAmB,6BAA6B,OAAO;AAC7D,iCAA+B,kBAAkB;AACjD,QAA2F,uBAAnF,eAAa,UAAU,cAAc,WAAW,eAAe,WAAoB,IAAT,iBAAS,IAAT,CAA1E,eAAa,YAAwB,aAA0B;AAEvE,QAAM,cAAc,OAAO;AAE3B,QAAM,sBAAsB;AAO5B,QAAM,CAAC,EAAE,UAAU,SAAS;AAE5B,QAAM,YAA0D,YAC9D,CAAC,MAAM;AACL,gBAAY,UAAU,EAAE;AACxB,QAAI;AAAe,oBAAc;AAAA,KAEnC,CAAC;AAGH,QAAM,WAAuD,YAC3D,CAAC,MAAM;AACL,UAAM,CAAC,MAAM,aAAa,aAAa,EAAE,OAAO,OAAO,EAAE,OAAO,gBAAgB,GAAG,YAAY,SAAS;AAExG,gBAAY,CAAC,aAAa;AAExB,UAAI,SAAS;AAAU,eAAO,CAAC,QAAQ,MAAM;AAC7C,aAAO;AAAA;AAGT,QAAI;AAAc,mBAAa,GAAG;AAElC,wBAAoB,MAAM,kBAAkB,EAAE,QAAQ;AAAA,KAExD,CAAC,aAAa,qBAAqB,MAAM;AAG3C,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAIG,MAAM,sBAAsB,CAAC,OAAe,SAAyC;AAC1F,QAAM,CAAC,eAAe,aAAa,OAAO,MAAM,SAAS,GAAG,IAAI;AAChE,SAAO;AAAA;AAGF,MAAM,yBAAyB,SAAS;AAC/C,uBAAuB,YAAY;",
6
6
  "names": []
7
7
  }
@@ -44,10 +44,15 @@ const useSSNMask = (props) => {
44
44
  onChange
45
45
  };
46
46
  };
47
+ const getSSNMaskedValue = (value) => {
48
+ const [maskedValue] = conformValue(value, value.length - 1, "");
49
+ return maskedValue;
50
+ };
47
51
  const UseSSNMaskWithSchema = describe(useSSNMask);
48
52
  UseSSNMaskWithSchema.propTypes = DSMaskHookPropsTypes;
49
53
  export {
50
54
  UseSSNMaskWithSchema,
55
+ getSSNMaskedValue,
51
56
  useSSNMask
52
57
  };
53
58
  //# sourceMappingURL=useSSNMask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/mask-hook/hooks/useSSNMask.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useCallback, useRef, useState } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { addSpecialCharacters, getPartialMaskedPos, setCursorPosition } from '../utils';\nimport { DSMaskHookDefaultProps, DSMaskHookPropsTypes, DSMaskT } from '../react-desc-prop-types';\n\nconst ssnSpecialChars: [string, number][] = [\n ['-', 3],\n ['-', 6],\n];\n\nconst conformValue = (rawValue: string, cursorPos: number, lastKeyCode: string) => {\n // Work with digits only\n let maskedValue = rawValue.split('').filter((char) => char >= '0' && char <= '9');\n\n // We can't have zeros at the start of the array\n while (maskedValue.length && maskedValue[0] === '0') maskedValue.splice(0, 1);\n\n // We only consider first 9 digits\n maskedValue = maskedValue.slice(0, 9);\n\n const maskedPos = getPartialMaskedPos(rawValue, maskedValue, cursorPos);\n\n return addSpecialCharacters(maskedValue, ssnSpecialChars, maskedPos, lastKeyCode);\n};\n\nexport const useSSNMask: DSMaskT.Hook = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskHookDefaultProps);\n useValidateTypescriptPropTypes(propsWithDefault, DSMaskHookPropsTypes);\n\n const { valueSetter, onChange: userOnChange, onKeyDown: userOnKeyDown } = propsWithDefault;\n\n const lastKeyCode = useRef('Unidentified');\n\n const scheduleAfterRender = useCallbackAfterRender();\n\n // Some times, the value of the mask is not gonna change (user types invalid char for example)\n // This makes the input to go from \"correct\" -> \"incorrect\" -> \"correct\"\n // But since the input is controlled, the input does not re-render\n // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async\n // Solution for this is to trigger a re-render, we do this with a set state call in the on change event\n const [, setKey] = useState(0);\n\n const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n lastKeyCode.current = e.code;\n if (userOnKeyDown) userOnKeyDown(e);\n },\n [userOnKeyDown],\n );\n\n const onChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const [mask, cursorPos] = conformValue(e.target.value, e.target.selectionEnd ?? 0, lastKeyCode.current);\n valueSetter((prevMask) => {\n // Here we need to update the key\n if (mask === prevMask) setKey((key) => key + 1);\n\n return mask;\n });\n if (userOnChange) userOnChange(e, mask);\n scheduleAfterRender(() => setCursorPosition(e.target, cursorPos));\n },\n [valueSetter, scheduleAfterRender, userOnChange],\n );\n\n return {\n onKeyDown,\n onChange,\n };\n};\n\nexport const UseSSNMaskWithSchema = describe(useSSNMask);\nUseSSNMaskWithSchema.propTypes = DSMaskHookPropsTypes;\n"],
5
- "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AAEA,MAAM,kBAAsC;AAAA,EAC1C,CAAC,KAAK;AAAA,EACN,CAAC,KAAK;AAAA;AAGR,MAAM,eAAe,CAAC,UAAkB,WAAmB,gBAAwB;AAEjF,MAAI,cAAc,SAAS,MAAM,IAAI,OAAO,CAAC,SAAS,QAAQ,OAAO,QAAQ;AAG7E,SAAO,YAAY,UAAU,YAAY,OAAO;AAAK,gBAAY,OAAO,GAAG;AAG3E,gBAAc,YAAY,MAAM,GAAG;AAEnC,QAAM,YAAY,oBAAoB,UAAU,aAAa;AAE7D,SAAO,qBAAqB,aAAa,iBAAiB,WAAW;AAAA;AAGhE,MAAM,aAA2B,CAAC,UAAU;AACjD,QAAM,mBAAmB,6BAA6B,OAAO;AAC7D,iCAA+B,kBAAkB;AAEjD,QAAM,EAAE,aAAa,UAAU,cAAc,WAAW,kBAAkB;AAE1E,QAAM,cAAc,OAAO;AAE3B,QAAM,sBAAsB;AAO5B,QAAM,CAAC,EAAE,UAAU,SAAS;AAE5B,QAAM,YAA0D,YAC9D,CAAC,MAAM;AACL,gBAAY,UAAU,EAAE;AACxB,QAAI;AAAe,oBAAc;AAAA,KAEnC,CAAC;AAGH,QAAM,WAAuD,YAC3D,CAAC,MAAM;AACL,UAAM,CAAC,MAAM,aAAa,aAAa,EAAE,OAAO,OAAO,EAAE,OAAO,gBAAgB,GAAG,YAAY;AAC/F,gBAAY,CAAC,aAAa;AAExB,UAAI,SAAS;AAAU,eAAO,CAAC,QAAQ,MAAM;AAE7C,aAAO;AAAA;AAET,QAAI;AAAc,mBAAa,GAAG;AAClC,wBAAoB,MAAM,kBAAkB,EAAE,QAAQ;AAAA,KAExD,CAAC,aAAa,qBAAqB;AAGrC,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAIG,MAAM,uBAAuB,SAAS;AAC7C,qBAAqB,YAAY;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useCallback, useRef, useState } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { addSpecialCharacters, getPartialMaskedPos, setCursorPosition } from '../utils';\nimport { DSMaskHookDefaultProps, DSMaskHookPropsTypes, DSMaskT } from '../react-desc-prop-types';\n\nconst ssnSpecialChars: [string, number][] = [\n ['-', 3],\n ['-', 6],\n];\n\nconst conformValue = (rawValue: string, cursorPos: number, lastKeyCode: string) => {\n // Work with digits only\n let maskedValue = rawValue.split('').filter((char) => char >= '0' && char <= '9');\n\n // We can't have zeros at the start of the array\n while (maskedValue.length && maskedValue[0] === '0') maskedValue.splice(0, 1);\n\n // We only consider first 9 digits\n maskedValue = maskedValue.slice(0, 9);\n\n const maskedPos = getPartialMaskedPos(rawValue, maskedValue, cursorPos);\n\n return addSpecialCharacters(maskedValue, ssnSpecialChars, maskedPos, lastKeyCode);\n};\n\nexport const useSSNMask: DSMaskT.Hook = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskHookDefaultProps);\n useValidateTypescriptPropTypes(propsWithDefault, DSMaskHookPropsTypes);\n\n const { valueSetter, onChange: userOnChange, onKeyDown: userOnKeyDown } = propsWithDefault;\n\n const lastKeyCode = useRef('Unidentified');\n\n const scheduleAfterRender = useCallbackAfterRender();\n\n // Some times, the value of the mask is not gonna change (user types invalid char for example)\n // This makes the input to go from \"correct\" -> \"incorrect\" -> \"correct\"\n // But since the input is controlled, the input does not re-render\n // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async\n // Solution for this is to trigger a re-render, we do this with a set state call in the on change event\n const [, setKey] = useState(0);\n\n const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n lastKeyCode.current = e.code;\n if (userOnKeyDown) userOnKeyDown(e);\n },\n [userOnKeyDown],\n );\n\n const onChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const [mask, cursorPos] = conformValue(e.target.value, e.target.selectionEnd ?? 0, lastKeyCode.current);\n valueSetter((prevMask) => {\n // Here we need to update the key\n if (mask === prevMask) setKey((key) => key + 1);\n\n return mask;\n });\n if (userOnChange) userOnChange(e, mask);\n scheduleAfterRender(() => setCursorPosition(e.target, cursorPos));\n },\n [valueSetter, scheduleAfterRender, userOnChange],\n );\n\n return {\n onKeyDown,\n onChange,\n };\n};\n\nexport const getSSNMaskedValue = (value: string) => {\n const [maskedValue] = conformValue(value, value.length - 1, '');\n return maskedValue;\n};\n\nexport const UseSSNMaskWithSchema = describe(useSSNMask);\nUseSSNMaskWithSchema.propTypes = DSMaskHookPropsTypes;\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AAEA,MAAM,kBAAsC;AAAA,EAC1C,CAAC,KAAK;AAAA,EACN,CAAC,KAAK;AAAA;AAGR,MAAM,eAAe,CAAC,UAAkB,WAAmB,gBAAwB;AAEjF,MAAI,cAAc,SAAS,MAAM,IAAI,OAAO,CAAC,SAAS,QAAQ,OAAO,QAAQ;AAG7E,SAAO,YAAY,UAAU,YAAY,OAAO;AAAK,gBAAY,OAAO,GAAG;AAG3E,gBAAc,YAAY,MAAM,GAAG;AAEnC,QAAM,YAAY,oBAAoB,UAAU,aAAa;AAE7D,SAAO,qBAAqB,aAAa,iBAAiB,WAAW;AAAA;AAGhE,MAAM,aAA2B,CAAC,UAAU;AACjD,QAAM,mBAAmB,6BAA6B,OAAO;AAC7D,iCAA+B,kBAAkB;AAEjD,QAAM,EAAE,aAAa,UAAU,cAAc,WAAW,kBAAkB;AAE1E,QAAM,cAAc,OAAO;AAE3B,QAAM,sBAAsB;AAO5B,QAAM,CAAC,EAAE,UAAU,SAAS;AAE5B,QAAM,YAA0D,YAC9D,CAAC,MAAM;AACL,gBAAY,UAAU,EAAE;AACxB,QAAI;AAAe,oBAAc;AAAA,KAEnC,CAAC;AAGH,QAAM,WAAuD,YAC3D,CAAC,MAAM;AACL,UAAM,CAAC,MAAM,aAAa,aAAa,EAAE,OAAO,OAAO,EAAE,OAAO,gBAAgB,GAAG,YAAY;AAC/F,gBAAY,CAAC,aAAa;AAExB,UAAI,SAAS;AAAU,eAAO,CAAC,QAAQ,MAAM;AAE7C,aAAO;AAAA;AAET,QAAI;AAAc,mBAAa,GAAG;AAClC,wBAAoB,MAAM,kBAAkB,EAAE,QAAQ;AAAA,KAExD,CAAC,aAAa,qBAAqB;AAGrC,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAIG,MAAM,oBAAoB,CAAC,UAAkB;AAClD,QAAM,CAAC,eAAe,aAAa,OAAO,MAAM,SAAS,GAAG;AAC5D,SAAO;AAAA;AAGF,MAAM,uBAAuB,SAAS;AAC7C,qBAAqB,YAAY;",
6
6
  "names": []
7
7
  }
@@ -7,11 +7,11 @@ import { DSMaskHookDefaultProps, DSMaskHookPropsTypes } from "../react-desc-prop
7
7
  const zipCodeSpecialChars = [["-", 5]];
8
8
  const conformValue = (rawValue, cursorPos, lastKeyCode) => {
9
9
  let maskedValue = rawValue.split("").filter((char) => char >= "0" && char <= "9");
10
- maskedValue = maskedValue.slice(0, 6);
10
+ maskedValue = maskedValue.slice(0, 9);
11
11
  const maskedPos = getPartialMaskedPos(rawValue, maskedValue, cursorPos);
12
12
  return addSpecialCharacters(maskedValue, zipCodeSpecialChars, maskedPos, lastKeyCode);
13
13
  };
14
- const useZipCode = (props) => {
14
+ const useZipCodeMask = (props) => {
15
15
  const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskHookDefaultProps);
16
16
  useValidateTypescriptPropTypes(propsWithDefault, DSMaskHookPropsTypes);
17
17
  const { valueSetter, onChange: userOnChange, onKeyDown: userOnKeyDown } = propsWithDefault;
@@ -39,10 +39,15 @@ const useZipCode = (props) => {
39
39
  onChange
40
40
  };
41
41
  };
42
- const UseZipCodeMaskWithSchema = describe(useZipCode);
42
+ const getUseZipMaskedValue = (value) => {
43
+ const [maskedValue] = conformValue(value, value.length - 1, "");
44
+ return maskedValue;
45
+ };
46
+ const UseZipCodeMaskWithSchema = describe(useZipCodeMask);
43
47
  UseZipCodeMaskWithSchema.propTypes = DSMaskHookPropsTypes;
44
48
  export {
45
49
  UseZipCodeMaskWithSchema,
46
- useZipCode
50
+ getUseZipMaskedValue,
51
+ useZipCodeMask
47
52
  };
48
- //# sourceMappingURL=useZipCode.js.map
53
+ //# sourceMappingURL=useZipCodeMask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/mask-hook/hooks/useZipCode.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useCallback, useRef, useState } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { addSpecialCharacters, getPartialMaskedPos, setCursorPosition } from '../utils';\nimport { DSMaskHookDefaultProps, DSMaskHookPropsTypes, DSMaskT } from '../react-desc-prop-types';\n\nconst zipCodeSpecialChars: [string, number][] = [['-', 5]];\n\nconst conformValue = (rawValue: string, cursorPos: number, lastKeyCode: string) => {\n // Work with digits only\n let maskedValue = rawValue.split('').filter((char) => char >= '0' && char <= '9');\n\n // We only consider first 5 digits\n maskedValue = maskedValue.slice(0, 6);\n\n const maskedPos = getPartialMaskedPos(rawValue, maskedValue, cursorPos);\n\n return addSpecialCharacters(maskedValue, zipCodeSpecialChars, maskedPos, lastKeyCode);\n};\n\nexport const useZipCode: DSMaskT.Hook = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskHookDefaultProps);\n useValidateTypescriptPropTypes(propsWithDefault, DSMaskHookPropsTypes);\n\n const { valueSetter, onChange: userOnChange, onKeyDown: userOnKeyDown } = propsWithDefault;\n\n const lastKeyCode = useRef('Unidentified');\n\n const scheduleAfterRender = useCallbackAfterRender();\n\n // Some times, the value of the mask is not gonna change (user types invalid char for example)\n // This makes the input to go from \"correct\" -> \"incorrect\" -> \"correct\"\n // But since the input is controlled, the input does not re-render\n // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async\n // Solution for this is to trigger a re-render, we do this with a set state call in the on change event\n const [, setKey] = useState(0);\n\n const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n lastKeyCode.current = e.code;\n if (userOnKeyDown) userOnKeyDown(e);\n },\n [userOnKeyDown],\n );\n\n const onChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const [mask, cursorPos] = conformValue(e.target.value, e.target.selectionEnd ?? 0, lastKeyCode.current);\n valueSetter((prevMask) => {\n // Here we need to update the key\n if (mask === prevMask) setKey((key) => key + 1);\n\n return mask;\n });\n if (userOnChange) userOnChange(e, mask);\n scheduleAfterRender(() => setCursorPosition(e.target, cursorPos));\n },\n [valueSetter, scheduleAfterRender, userOnChange],\n );\n\n return {\n onKeyDown,\n onChange,\n };\n};\n\nexport const UseZipCodeMaskWithSchema = describe(useZipCode);\nUseZipCodeMaskWithSchema.propTypes = DSMaskHookPropsTypes;\n"],
5
- "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AAEA,MAAM,sBAA0C,CAAC,CAAC,KAAK;AAEvD,MAAM,eAAe,CAAC,UAAkB,WAAmB,gBAAwB;AAEjF,MAAI,cAAc,SAAS,MAAM,IAAI,OAAO,CAAC,SAAS,QAAQ,OAAO,QAAQ;AAG7E,gBAAc,YAAY,MAAM,GAAG;AAEnC,QAAM,YAAY,oBAAoB,UAAU,aAAa;AAE7D,SAAO,qBAAqB,aAAa,qBAAqB,WAAW;AAAA;AAGpE,MAAM,aAA2B,CAAC,UAAU;AACjD,QAAM,mBAAmB,6BAA6B,OAAO;AAC7D,iCAA+B,kBAAkB;AAEjD,QAAM,EAAE,aAAa,UAAU,cAAc,WAAW,kBAAkB;AAE1E,QAAM,cAAc,OAAO;AAE3B,QAAM,sBAAsB;AAO5B,QAAM,CAAC,EAAE,UAAU,SAAS;AAE5B,QAAM,YAA0D,YAC9D,CAAC,MAAM;AACL,gBAAY,UAAU,EAAE;AACxB,QAAI;AAAe,oBAAc;AAAA,KAEnC,CAAC;AAGH,QAAM,WAAuD,YAC3D,CAAC,MAAM;AACL,UAAM,CAAC,MAAM,aAAa,aAAa,EAAE,OAAO,OAAO,EAAE,OAAO,gBAAgB,GAAG,YAAY;AAC/F,gBAAY,CAAC,aAAa;AAExB,UAAI,SAAS;AAAU,eAAO,CAAC,QAAQ,MAAM;AAE7C,aAAO;AAAA;AAET,QAAI;AAAc,mBAAa,GAAG;AAClC,wBAAoB,MAAM,kBAAkB,EAAE,QAAQ;AAAA,KAExD,CAAC,aAAa,qBAAqB;AAGrC,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAIG,MAAM,2BAA2B,SAAS;AACjD,yBAAyB,YAAY;",
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/mask-hook/hooks/useZipCodeMask.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useCallback, useRef, useState } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { addSpecialCharacters, getPartialMaskedPos, setCursorPosition } from '../utils';\nimport { DSMaskHookDefaultProps, DSMaskHookPropsTypes, DSMaskT } from '../react-desc-prop-types';\n\nconst zipCodeSpecialChars: [string, number][] = [['-', 5]];\n\nconst conformValue = (rawValue: string, cursorPos: number, lastKeyCode: string) => {\n // Work with digits only\n let maskedValue = rawValue.split('').filter((char) => char >= '0' && char <= '9');\n\n // We only consider first 9 digits\n maskedValue = maskedValue.slice(0, 9);\n\n const maskedPos = getPartialMaskedPos(rawValue, maskedValue, cursorPos);\n\n return addSpecialCharacters(maskedValue, zipCodeSpecialChars, maskedPos, lastKeyCode);\n};\n\nexport const useZipCodeMask: DSMaskT.Hook = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault(props, DSMaskHookDefaultProps);\n useValidateTypescriptPropTypes(propsWithDefault, DSMaskHookPropsTypes);\n const { valueSetter, onChange: userOnChange, onKeyDown: userOnKeyDown } = propsWithDefault;\n\n const lastKeyCode = useRef('Unidentified');\n const scheduleAfterRender = useCallbackAfterRender();\n\n // Some times, the value of the mask is not gonna change (user types invalid char for example)\n // This makes the input to go from \"correct\" -> \"incorrect\" -> \"correct\"\n // But since the input is controlled, the input does not re-render\n // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async\n // Solution for this is to trigger a re-render, we do this with a set state call in the on change event\n const [, setKey] = useState(0);\n\n const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n lastKeyCode.current = e.code;\n if (userOnKeyDown) userOnKeyDown(e);\n },\n [userOnKeyDown],\n );\n\n const onChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n const [mask, cursorPos] = conformValue(e.target.value, e.target.selectionEnd ?? 0, lastKeyCode.current);\n valueSetter((prevMask) => {\n // Here we need to update the key\n if (mask === prevMask) setKey((key) => key + 1);\n\n return mask;\n });\n if (userOnChange) userOnChange(e, mask);\n scheduleAfterRender(() => setCursorPosition(e.target, cursorPos));\n },\n [valueSetter, scheduleAfterRender, userOnChange],\n );\n\n return {\n onKeyDown,\n onChange,\n };\n};\n\nexport const getUseZipMaskedValue = (value: string) => {\n const [maskedValue] = conformValue(value, value.length - 1, '');\n return maskedValue;\n};\n\nexport const UseZipCodeMaskWithSchema = describe(useZipCodeMask);\nUseZipCodeMaskWithSchema.propTypes = DSMaskHookPropsTypes;\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AAEA,MAAM,sBAA0C,CAAC,CAAC,KAAK;AAEvD,MAAM,eAAe,CAAC,UAAkB,WAAmB,gBAAwB;AAEjF,MAAI,cAAc,SAAS,MAAM,IAAI,OAAO,CAAC,SAAS,QAAQ,OAAO,QAAQ;AAG7E,gBAAc,YAAY,MAAM,GAAG;AAEnC,QAAM,YAAY,oBAAoB,UAAU,aAAa;AAE7D,SAAO,qBAAqB,aAAa,qBAAqB,WAAW;AAAA;AAGpE,MAAM,iBAA+B,CAAC,UAAU;AACrD,QAAM,mBAAmB,6BAA6B,OAAO;AAC7D,iCAA+B,kBAAkB;AACjD,QAAM,EAAE,aAAa,UAAU,cAAc,WAAW,kBAAkB;AAE1E,QAAM,cAAc,OAAO;AAC3B,QAAM,sBAAsB;AAO5B,QAAM,CAAC,EAAE,UAAU,SAAS;AAE5B,QAAM,YAA0D,YAC9D,CAAC,MAAM;AACL,gBAAY,UAAU,EAAE;AACxB,QAAI;AAAe,oBAAc;AAAA,KAEnC,CAAC;AAGH,QAAM,WAAuD,YAC3D,CAAC,MAAM;AACL,UAAM,CAAC,MAAM,aAAa,aAAa,EAAE,OAAO,OAAO,EAAE,OAAO,gBAAgB,GAAG,YAAY;AAC/F,gBAAY,CAAC,aAAa;AAExB,UAAI,SAAS;AAAU,eAAO,CAAC,QAAQ,MAAM;AAE7C,aAAO;AAAA;AAET,QAAI;AAAc,mBAAa,GAAG;AAClC,wBAAoB,MAAM,kBAAkB,EAAE,QAAQ;AAAA,KAExD,CAAC,aAAa,qBAAqB;AAGrC,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAIG,MAAM,uBAAuB,CAAC,UAAkB;AACrD,QAAM,CAAC,eAAe,aAAa,OAAO,MAAM,SAAS,GAAG;AAC5D,SAAO;AAAA;AAGF,MAAM,2BAA2B,SAAS;AACjD,yBAAyB,YAAY;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-controlled-form",
3
- "version": "3.0.0-next.12",
3
+ "version": "3.0.0-next.16",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Controlled Form Controllers",
6
6
  "files": [
@@ -59,20 +59,20 @@
59
59
  "indent": 4
60
60
  },
61
61
  "dependencies": {
62
- "@elliemae/ds-button": "3.0.0-next.12",
63
- "@elliemae/ds-circular-progress-indicator": "3.0.0-next.12",
64
- "@elliemae/ds-common": "3.0.0-next.12",
65
- "@elliemae/ds-form": "3.0.0-next.12",
66
- "@elliemae/ds-form-layout-blocks": "3.0.0-next.12",
67
- "@elliemae/ds-grid": "3.0.0-next.12",
68
- "@elliemae/ds-icons": "3.0.0-next.12",
69
- "@elliemae/ds-pills": "3.0.0-next.12",
70
- "@elliemae/ds-popperjs": "3.0.0-next.12",
71
- "@elliemae/ds-props-helpers": "3.0.0-next.12",
72
- "@elliemae/ds-system": "3.0.0-next.12",
73
- "@elliemae/ds-tooltip": "3.0.0-next.12",
74
- "@elliemae/ds-truncated-tooltip-text": "3.0.0-next.12",
75
- "@elliemae/ds-utilities": "3.0.0-next.12",
62
+ "@elliemae/ds-button": "3.0.0-next.16",
63
+ "@elliemae/ds-circular-progress-indicator": "3.0.0-next.16",
64
+ "@elliemae/ds-common": "3.0.0-next.16",
65
+ "@elliemae/ds-form": "3.0.0-next.16",
66
+ "@elliemae/ds-form-layout-blocks": "3.0.0-next.16",
67
+ "@elliemae/ds-grid": "3.0.0-next.16",
68
+ "@elliemae/ds-icons": "3.0.0-next.16",
69
+ "@elliemae/ds-pills": "3.0.0-next.16",
70
+ "@elliemae/ds-popperjs": "3.0.0-next.16",
71
+ "@elliemae/ds-props-helpers": "3.0.0-next.16",
72
+ "@elliemae/ds-system": "3.0.0-next.16",
73
+ "@elliemae/ds-tooltip": "3.0.0-next.16",
74
+ "@elliemae/ds-truncated-tooltip-text": "3.0.0-next.16",
75
+ "@elliemae/ds-utilities": "3.0.0-next.16",
76
76
  "prop-types": "~15.8.1",
77
77
  "react-desc": "~4.1.3",
78
78
  "react-popper": "~2.2.5",
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/autocomplete/config/constants.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["export const DATA_TESTID = {\n COMBOBOX_MENU_LIST: 'autocomplete-menu-list',\n COMBOBOX_CLEAR_BTN: 'autocomplete-clear-btn',\n COMBOBOX_ALL_BTN: 'autocomplete-all-btn',\n COMBOBOX_DROPDOWN_BTN: 'autocomplete-dropdown-btn',\n COMBOBOX_OPTION: 'autocomplete-option',\n COMBOBOX: 'autocomplete',\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,cAAc;AAAA,EACzB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,UAAU;AAAA;",
6
- "names": []
7
- }
@@ -1,37 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __reExport = (target, module2, copyDefault, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
17
- }
18
- return target;
19
- };
20
- var __toESM = (module2, isNodeMode) => {
21
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
- };
23
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
- return (module2, temp) => {
25
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
- };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
- var useGetPropsWithDefault_exports = {};
29
- __export(useGetPropsWithDefault_exports, {
30
- useGetAutocompleteWithDefaultsProps: () => useGetAutocompleteWithDefaultsProps
31
- });
32
- var React = __toESM(require("react"));
33
- var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
34
- var import_AutocompleteCTX = require("../AutocompleteCTX");
35
- const useGetAutocompleteWithDefaultsProps = (props) => (0, import_ds_props_helpers.useMemoMergePropsWithDefault)(props, import_AutocompleteCTX.defaultProps);
36
- module.exports = __toCommonJS(useGetPropsWithDefault_exports);
37
- //# sourceMappingURL=useGetPropsWithDefault.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/autocomplete/config/useGetPropsWithDefault.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import { useMemoMergePropsWithDefault } from '@elliemae/ds-props-helpers';\nimport { defaultProps } from '../AutocompleteCTX';\nimport { AutocompletePropsT } from '../index.d';\n// we have to merge the \"default\" nested default values with what the user gives us...\nexport const useGetAutocompleteWithDefaultsProps = (props: Partial<AutocompletePropsT>): AutocompletePropsT =>\n useMemoMergePropsWithDefault(props, defaultProps);\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,8BAA6C;AAC7C,6BAA6B;AAGtB,MAAM,sCAAsC,CAAC,UAClD,0DAA6B,OAAO;",
6
- "names": []
7
- }
@@ -1,27 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __reExport = (target, module2, copyDefault, desc) => {
9
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
10
- for (let key of __getOwnPropNames(module2))
11
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
12
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
13
- }
14
- return target;
15
- };
16
- var __toESM = (module2, isNodeMode) => {
17
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
18
- };
19
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
20
- return (module2, temp) => {
21
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
22
- };
23
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
24
- var index_d_exports = {};
25
- var React = __toESM(require("react"));
26
- module.exports = __toCommonJS(index_d_exports);
27
- //# sourceMappingURL=index.d.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/autocomplete/index.d.ts", "../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React from 'react';\nimport { useVirtual } from 'react-virtual';\nimport { LayoutProps } from 'styled-system';\n\ninterface CommonCBItemOptions {\n dsId: string;\n render?: React.ComponentType<unknown>;\n}\n\nexport interface CBOptionT extends CommonCBItemOptions {\n value: string | undefined;\n label: string;\n type: 'option';\n disabled?: boolean;\n}\n\nexport interface AutocompletePropsT {\n placeholder?: string;\n options: CBOptionT[];\n selectedValues: string | '';\n isLoading?: boolean;\n hasError?: boolean;\n autoFocus?: boolean;\n startPlacementPreference: string;\n placementOrderPreference: string[];\n inputMinWidth?: LayoutProps['minWidth'];\n menuMinWidth?: LayoutProps['minWidth'];\n menuMaxHeight?: LayoutProps['maxHeight'];\n onKeyDown: (e: KeyboardEvent<Element>, value: CBOptionT | undefined) => void;\n onChange: (value: CBItemValue) => void;\n onFilter: (value: string) => void;\n onMenuOpen?: () => void;\n}\n\nexport interface AutocompleteContextT {\n props: AutocompletePropsT;\n virtualListHelpers?: ReturnType<typeof useVirtual>;\n showPopover: boolean;\n setShowPopover: React.Dispatch<React.SetStateAction<boolean>>;\n referenceElement: HTMLElement | null;\n setReferenceElement: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\n scrollOptionIntoView: (dsId: string, opts?: any) => void;\n inputRef: React.RefObject<HTMLInputElement>;\n listRef: React.RefObject<HTMLDivElement>;\n wrapperListRef: React.RefObject<HTMLDivElement>;\n selectedOptionsRef: React.RefObject<HTMLDivElement>;\n controlsWrapperRef: React.RefObject<HTMLDivElement>;\n focusOptionIdx: string;\n setCurrentOption: React.Dispatch<React.SetStateAction<string>>;\n}\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;ACAA,YAAuB;",
6
- "names": []
7
- }
@@ -1,50 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __reExport = (target, module2, copyDefault, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
17
- }
18
- return target;
19
- };
20
- var __toESM = (module2, isNodeMode) => {
21
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
- };
23
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
- return (module2, temp) => {
25
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
- };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
- var MultiAllyMessages_exports = {};
29
- __export(MultiAllyMessages_exports, {
30
- MultiAllyMessages: () => MultiAllyMessages
31
- });
32
- var React = __toESM(require("react"));
33
- var import_react = __toESM(require("react"));
34
- var import_AutocompleteCTX = require("../../AutocompleteCTX");
35
- var import_listHelper = require("../../utils/listHelper");
36
- var import_styled = require("./styled");
37
- const MultiAllyMessages = () => {
38
- const {
39
- props: { options, selectedValues }
40
- } = (0, import_react.useContext)(import_AutocompleteCTX.AutocompleteContext);
41
- const selectableOptions = (0, import_listHelper.getSelectableOptions)(options);
42
- const multipleSelectedValues = selectedValues;
43
- return /* @__PURE__ */ import_react.default.createElement(import_styled.StyledA11ySelectedValues, {
44
- "aria-live": "polite",
45
- "aria-atomic": "false",
46
- "aria-relevant": "additions text"
47
- }, `Options selected: ${multipleSelectedValues.map((item) => item.label).join(", ")}. ${multipleSelectedValues.length} of ${selectableOptions.length}`);
48
- };
49
- module.exports = __toCommonJS(MultiAllyMessages_exports);
50
- //# sourceMappingURL=MultiAllyMessages.js.map