@feathery/react 2.6.8 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/dist/Form/components/{AIExtractionToast/ExtractionItem.d.ts → ActionToast/ToastItem.d.ts} +6 -6
  2. package/dist/Form/components/ActionToast/ToastItem.d.ts.map +1 -0
  3. package/dist/Form/components/{AIExtractionToast → ActionToast}/icons.d.ts +7 -7
  4. package/dist/Form/components/ActionToast/icons.d.ts.map +1 -0
  5. package/dist/Form/components/ActionToast/index.d.ts +8 -0
  6. package/dist/Form/components/ActionToast/index.d.ts.map +1 -0
  7. package/dist/Form/components/{AIExtractionToast → ActionToast}/useAIExtractionToast.d.ts +72 -64
  8. package/dist/Form/components/ActionToast/useAIExtractionToast.d.ts.map +1 -0
  9. package/dist/Form/components/ActionToast/useEnvelopeGenerationToast.d.ts +20 -0
  10. package/dist/Form/components/ActionToast/useEnvelopeGenerationToast.d.ts.map +1 -0
  11. package/dist/Form/components/DevNavBar.d.ts +1 -1
  12. package/dist/Form/components/ReactPortal.d.ts +2 -2
  13. package/dist/Form/definitions.d.ts +40 -40
  14. package/dist/Form/grid/CalendlyEmbed.d.ts +1 -1
  15. package/dist/Form/grid/Container/index.d.ts +19 -19
  16. package/dist/Form/grid/Element/index.d.ts +2 -2
  17. package/dist/Form/grid/Element/utils/address.d.ts +3 -3
  18. package/dist/Form/grid/Element/utils/utils.d.ts +13 -13
  19. package/dist/Form/grid/StyledContainer/hooks/index.d.ts +20 -20
  20. package/dist/Form/grid/StyledContainer/hooks/useFixedContainer.d.ts +1 -1
  21. package/dist/Form/grid/StyledContainer/index.d.ts +21 -21
  22. package/dist/Form/grid/StyledContainer/styles.d.ts +5 -5
  23. package/dist/Form/grid/StyledContainer/transform.d.ts +4 -4
  24. package/dist/Form/grid/StyledContainer/utils.d.ts +44 -44
  25. package/dist/Form/grid/index.d.ts +2 -2
  26. package/dist/Form/hooks/useCheckButtonAction.d.ts +6 -6
  27. package/dist/Form/hooks/useTrackUserInteraction.d.ts +2 -2
  28. package/dist/Form/index.d.ts +52 -52
  29. package/dist/Form/index.d.ts.map +1 -1
  30. package/dist/Form/logic.d.ts +10 -10
  31. package/dist/Form/tests/testMocks.d.ts +6 -6
  32. package/dist/auth/LoginError.d.ts +3 -3
  33. package/dist/auth/LoginForm.d.ts +29 -29
  34. package/dist/auth/internal/AuthIntegrationInterface.d.ts +31 -31
  35. package/dist/auth/internal/useFormAuth.d.ts +10 -10
  36. package/dist/auth/internal/utils.d.ts +13 -13
  37. package/dist/auth/useAuthClient.d.ts +2 -2
  38. package/dist/auth/utils.d.ts +1 -1
  39. package/dist/elements/basic/ButtonElement.d.ts +2 -2
  40. package/dist/elements/basic/ImageElement.d.ts +3 -3
  41. package/dist/elements/basic/ProgressBarElement/components/SegmentBar.d.ts +2 -2
  42. package/dist/elements/basic/ProgressBarElement/components/SmoothBar.d.ts +2 -2
  43. package/dist/elements/basic/ProgressBarElement/index.d.ts +2 -2
  44. package/dist/elements/basic/TextElement.d.ts +2 -2
  45. package/dist/elements/basic/VideoElement.d.ts +2 -2
  46. package/dist/elements/components/ErrorInput.d.ts +2 -2
  47. package/dist/elements/components/FormControl.d.ts +10 -10
  48. package/dist/elements/components/FormOff.d.ts +10 -10
  49. package/dist/elements/components/InlineTooltip.d.ts +11 -11
  50. package/dist/elements/components/LoaderContainer.d.ts +10 -10
  51. package/dist/elements/components/Lottie.d.ts +2 -2
  52. package/dist/elements/components/Overlay.d.ts +15 -15
  53. package/dist/elements/components/Placeholder.d.ts +1 -1
  54. package/dist/elements/components/QuikFormViewer/transforms/form.d.ts +1 -1
  55. package/dist/elements/components/QuikFormViewer/transforms/header.d.ts +1 -1
  56. package/dist/elements/components/QuikFormViewer/transforms/sidebar.d.ts +6 -6
  57. package/dist/elements/components/QuikFormViewer.d.ts +9 -9
  58. package/dist/elements/components/Spinner.d.ts +4 -4
  59. package/dist/elements/components/TextHoverTooltip.d.ts +8 -8
  60. package/dist/elements/components/TextNodes.d.ts +4 -4
  61. package/dist/elements/components/Tooltip.d.ts +7 -7
  62. package/dist/elements/components/Watermark.d.ts +1 -1
  63. package/dist/elements/components/data/countries.d.ts +14 -14
  64. package/dist/elements/components/data/states/ae.d.ts +5 -5
  65. package/dist/elements/components/data/states/au.d.ts +5 -5
  66. package/dist/elements/components/data/states/br.d.ts +5 -5
  67. package/dist/elements/components/data/states/ca.d.ts +5 -5
  68. package/dist/elements/components/data/states/cl.d.ts +5 -5
  69. package/dist/elements/components/data/states/cn.d.ts +5 -5
  70. package/dist/elements/components/data/states/co.d.ts +5 -5
  71. package/dist/elements/components/data/states/eg.d.ts +5 -5
  72. package/dist/elements/components/data/states/es.d.ts +5 -5
  73. package/dist/elements/components/data/states/gb.d.ts +5 -5
  74. package/dist/elements/components/data/states/gt.d.ts +5 -5
  75. package/dist/elements/components/data/states/hk.d.ts +5 -5
  76. package/dist/elements/components/data/states/id.d.ts +5 -5
  77. package/dist/elements/components/data/states/ie.d.ts +5 -5
  78. package/dist/elements/components/data/states/in.d.ts +5 -5
  79. package/dist/elements/components/data/states/index.d.ts +6 -6
  80. package/dist/elements/components/data/states/it.d.ts +5 -5
  81. package/dist/elements/components/data/states/jp.d.ts +5 -5
  82. package/dist/elements/components/data/states/kr.d.ts +5 -5
  83. package/dist/elements/components/data/states/mx.d.ts +5 -5
  84. package/dist/elements/components/data/states/my.d.ts +5 -5
  85. package/dist/elements/components/data/states/ng.d.ts +5 -5
  86. package/dist/elements/components/data/states/nz.d.ts +5 -5
  87. package/dist/elements/components/data/states/pa.d.ts +5 -5
  88. package/dist/elements/components/data/states/pe.d.ts +5 -5
  89. package/dist/elements/components/data/states/ph.d.ts +5 -5
  90. package/dist/elements/components/data/states/pt.d.ts +5 -5
  91. package/dist/elements/components/data/states/ro.d.ts +5 -5
  92. package/dist/elements/components/data/states/ru.d.ts +5 -5
  93. package/dist/elements/components/data/states/th.d.ts +5 -5
  94. package/dist/elements/components/data/states/us.d.ts +9 -9
  95. package/dist/elements/components/data/states/za.d.ts +5 -5
  96. package/dist/elements/components/icons/Close.d.ts +6 -6
  97. package/dist/elements/components/icons/DiagonalArrow.d.ts +5 -5
  98. package/dist/elements/components/icons/DownloadIcon.d.ts +4 -4
  99. package/dist/elements/components/icons/FileUpload.d.ts +1 -1
  100. package/dist/elements/components/icons/FormClosed.d.ts +5 -5
  101. package/dist/elements/components/icons/Heart.d.ts +1 -1
  102. package/dist/elements/components/icons/Help.d.ts +4 -4
  103. package/dist/elements/components/icons/HideEyeIcon.d.ts +5 -5
  104. package/dist/elements/components/icons/LeftChevron.d.ts +1 -1
  105. package/dist/elements/components/icons/RatingStar.d.ts +1 -1
  106. package/dist/elements/components/icons/RightChevron.d.ts +1 -1
  107. package/dist/elements/components/icons/ShowEyeIcon.d.ts +5 -5
  108. package/dist/elements/components/icons/Warning.d.ts +5 -5
  109. package/dist/elements/components/icons/index.d.ts +11 -11
  110. package/dist/elements/components/skeletons/FieldSkeleton.d.ts +7 -7
  111. package/dist/elements/components/useBorder.d.ts +21 -21
  112. package/dist/elements/components/useTextEdit.d.ts +6 -5
  113. package/dist/elements/components/useTextEdit.d.ts.map +1 -1
  114. package/dist/elements/fields/AddressLine1Field/index.d.ts +4 -4
  115. package/dist/elements/fields/AddressLine1Field/tests/test-utils.d.ts +34 -34
  116. package/dist/elements/fields/AddressLine1Field/utils.d.ts +2 -2
  117. package/dist/elements/fields/ButtonGroupField/index.d.ts +2 -2
  118. package/dist/elements/fields/ButtonGroupField/tests/test-utils.d.ts +46 -46
  119. package/dist/elements/fields/CheckboxField/index.d.ts +5 -5
  120. package/dist/elements/fields/CheckboxField/tests/test-utils.d.ts +20 -20
  121. package/dist/elements/fields/CheckboxGroupField/index.d.ts +2 -2
  122. package/dist/elements/fields/CheckboxGroupField/tests/test-utils.d.ts +60 -60
  123. package/dist/elements/fields/ColorPickerField/index.d.ts +2 -2
  124. package/dist/elements/fields/ColorPickerField/tests/test-utils.d.ts +21 -21
  125. package/dist/elements/fields/CustomField/Status.d.ts +8 -8
  126. package/dist/elements/fields/CustomField/index.d.ts +3 -3
  127. package/dist/elements/fields/CustomField/template.d.ts +1 -1
  128. package/dist/elements/fields/CustomField/useCustomComponentIframe.d.ts +15 -15
  129. package/dist/elements/fields/DateSelectorField/index.d.ts +22 -22
  130. package/dist/elements/fields/DateSelectorField/index.d.ts.map +1 -1
  131. package/dist/elements/fields/DateSelectorField/styles.d.ts +4 -4
  132. package/dist/elements/fields/DateSelectorField/tests/test-utils.d.ts +74 -74
  133. package/dist/elements/fields/DateSelectorField/useDateLocale.d.ts +7 -7
  134. package/dist/elements/fields/DateSelectorField/utils.d.ts +3 -3
  135. package/dist/elements/fields/DropdownField/index.d.ts +1 -1
  136. package/dist/elements/fields/DropdownField/tests/test-utils.d.ts +28 -28
  137. package/dist/elements/fields/DropdownMultiField/DropdownMultiFieldSelectComponents.d.ts +8 -8
  138. package/dist/elements/fields/DropdownMultiField/createDropdownSelect.d.ts +190 -190
  139. package/dist/elements/fields/DropdownMultiField/index.d.ts +1 -1
  140. package/dist/elements/fields/DropdownMultiField/optionNormalization.d.ts +9 -9
  141. package/dist/elements/fields/DropdownMultiField/selectStyles.d.ts +12 -12
  142. package/dist/elements/fields/DropdownMultiField/tests/test-utils.d.ts +47 -47
  143. package/dist/elements/fields/DropdownMultiField/types.d.ts +49 -49
  144. package/dist/elements/fields/DropdownMultiField/useCollapsedSelectionManager.d.ts +46 -46
  145. package/dist/elements/fields/DropdownMultiField/useCollapsedValuesMeasurement.d.ts +19 -19
  146. package/dist/elements/fields/DropdownMultiField/useDropdownInteractions.d.ts +46 -46
  147. package/dist/elements/fields/DropdownMultiField/useDropdownOptions.d.ts +24 -24
  148. package/dist/elements/fields/DropdownMultiField/useSelectProps.d.ts +112 -112
  149. package/dist/elements/fields/FileUploadField/index.d.ts +2 -2
  150. package/dist/elements/fields/FileUploadField/tests/test-utils.d.ts +10 -10
  151. package/dist/elements/fields/MatrixField/index.d.ts +2 -2
  152. package/dist/elements/fields/MatrixField/tests/test-utils.d.ts +67 -67
  153. package/dist/elements/fields/PasswordField/index.d.ts +4 -4
  154. package/dist/elements/fields/PasswordField/tests/test-utils.d.ts +30 -30
  155. package/dist/elements/fields/PaymentMethodField.d.ts +4 -4
  156. package/dist/elements/fields/PhoneField/CountryDropdown.d.ts +3 -3
  157. package/dist/elements/fields/PhoneField/exampleNumbers.d.ts +2 -2
  158. package/dist/elements/fields/PhoneField/index.d.ts +4 -4
  159. package/dist/elements/fields/PhoneField/tests/test-utils.d.ts +86 -86
  160. package/dist/elements/fields/PhoneField/timeZoneCountries.d.ts +4 -4
  161. package/dist/elements/fields/PhoneField/validation.d.ts +3 -3
  162. package/dist/elements/fields/PinInputField/index.d.ts +2 -2
  163. package/dist/elements/fields/PinInputField/tests/test-utils.d.ts +79 -79
  164. package/dist/elements/fields/PinInputField/useOTPListener.d.ts +1 -1
  165. package/dist/elements/fields/QRScanner/constants.d.ts +14 -14
  166. package/dist/elements/fields/QRScanner/hooks/use-device-rotation.d.ts +11 -11
  167. package/dist/elements/fields/QRScanner/index.d.ts +2 -2
  168. package/dist/elements/fields/QRScanner/qrLoader.d.ts +2 -2
  169. package/dist/elements/fields/QRScanner/utils/local-storage.d.ts +5 -5
  170. package/dist/elements/fields/QRScanner/utils/select-camera.d.ts +9 -9
  171. package/dist/elements/fields/QRScanner/utils/supports-zoom.d.ts +8 -8
  172. package/dist/elements/fields/RadioButtonGroupField/index.d.ts +2 -2
  173. package/dist/elements/fields/RadioButtonGroupField/tests/test-utils.d.ts +55 -55
  174. package/dist/elements/fields/RatingField/index.d.ts +1 -1
  175. package/dist/elements/fields/RatingField/tests/test-utils.d.ts +22 -22
  176. package/dist/elements/fields/SignatureField/components/SignatureCanvas.d.ts +22 -22
  177. package/dist/elements/fields/SignatureField/components/SignatureModal.d.ts +12 -12
  178. package/dist/elements/fields/SignatureField/components/utils.d.ts +10 -10
  179. package/dist/elements/fields/SignatureField/index.d.ts +3 -3
  180. package/dist/elements/fields/SignatureField/translation.d.ts +17 -17
  181. package/dist/elements/fields/SliderField/index.d.ts +1 -1
  182. package/dist/elements/fields/SliderField/styles.d.ts +3 -3
  183. package/dist/elements/fields/SliderField/tests/test-utils.d.ts +22 -22
  184. package/dist/elements/fields/TextArea/index.d.ts +4 -4
  185. package/dist/elements/fields/TextArea/tests/test-utils.d.ts +10 -10
  186. package/dist/elements/fields/TextField/TextAutocomplete.d.ts +15 -15
  187. package/dist/elements/fields/TextField/index.d.ts +4 -4
  188. package/dist/elements/fields/TextField/index.d.ts.map +1 -1
  189. package/dist/elements/fields/TextField/tests/test-utils.d.ts +10 -10
  190. package/dist/elements/fields/index.d.ts +27 -26
  191. package/dist/elements/fields/index.d.ts.map +1 -1
  192. package/dist/elements/fields/shared/tests/field-test-utils.d.ts +51 -51
  193. package/dist/elements/index.d.ts +36 -36
  194. package/dist/elements/styles.d.ts +64 -64
  195. package/dist/elements/utils/fieldNormalization.d.ts +12 -12
  196. package/dist/fthry_FormControl.CPHJNRoq.js +16 -0
  197. package/dist/fthry_InlineTooltip.AGcWhuhV.js +53 -0
  198. package/dist/fthry_Overlay.X0blINpo.js +228 -0
  199. package/dist/fthry_PaymentMethodField.DrAgJBPV.js +928 -0
  200. package/dist/fthry_Placeholder.DLtEoCLC.js +14 -0
  201. package/dist/fthry_ShowEyeIcon.CkEvtp1W.js +13 -0
  202. package/dist/fthry_index.BFrZ_89I.js +251 -0
  203. package/dist/fthry_index.BVM6mIvX.js +73 -0
  204. package/dist/fthry_index.B_soCJRW.js +1193 -0
  205. package/dist/fthry_index.BrWMLV_p.js +35 -0
  206. package/dist/fthry_index.CFbW8L20.js +42 -0
  207. package/dist/fthry_index.CWt9W3bv.js +95 -0
  208. package/dist/fthry_index.Cfk_0HTE.js +2000 -0
  209. package/dist/fthry_index.CjUraQwq.js +888 -0
  210. package/dist/fthry_index.D99W7p5a.js +293 -0
  211. package/dist/fthry_index.DAGDZi5r.js +97 -0
  212. package/dist/fthry_index.DV1PqB3d.js +138 -0
  213. package/dist/fthry_index.DWyfWu2d.js +216 -0
  214. package/dist/fthry_index.DaFYDmA_.js +15921 -0
  215. package/dist/fthry_index.DghPMqyH.js +8166 -0
  216. package/dist/fthry_index.DodXvrXD.js +98 -0
  217. package/dist/fthry_index.DohTu1v2.js +46 -0
  218. package/dist/fthry_index.F6BXSHA5.js +61120 -0
  219. package/dist/fthry_index.KRksei8j.js +513 -0
  220. package/dist/fthry_index.dYsdCe_k.js +1427 -0
  221. package/dist/fthry_index.lC0Xyh-d.js +1162 -0
  222. package/dist/fthry_index.mE9gZkgT.js +55 -0
  223. package/dist/fthry_index.rtVAtURz.js +1452 -0
  224. package/dist/fthry_index.uvWVc7KJ.js +131 -0
  225. package/dist/fthry_input.Bfzc5hmV.js +3779 -0
  226. package/dist/fthry_script.cAr9Z1Ke.js +157 -0
  227. package/dist/fthry_styles.yVoSvBEy.js +1654 -0
  228. package/dist/fthry_useElementSize.D3n9DgQ-.js +51 -0
  229. package/dist/fthry_useSalesforceSync.prWuB8V7.js +44 -0
  230. package/dist/fthry_webfontloader.DyMoLGZ3.js +57 -0
  231. package/dist/hooks/router.d.ts +14 -14
  232. package/dist/hooks/useElementSize.d.ts +7 -7
  233. package/dist/hooks/useLoader.d.ts +35 -35
  234. package/dist/hooks/useMounted.d.ts +2 -2
  235. package/dist/hooks/usePollFuserData.d.ts +1 -1
  236. package/dist/hooks/usePrevious.d.ts +2 -2
  237. package/dist/hooks/useSalesforceSync.d.ts +10 -10
  238. package/dist/index.d.ts +150 -149
  239. package/dist/index.d.ts.map +1 -1
  240. package/dist/index.js +9 -1
  241. package/dist/integrations/alloy.d.ts +2 -2
  242. package/dist/integrations/amplitude.d.ts +1 -1
  243. package/dist/integrations/argyle.d.ts +2 -2
  244. package/dist/integrations/calendly.d.ts +2 -2
  245. package/dist/integrations/firebase.d.ts +42 -42
  246. package/dist/integrations/flinks/index.d.ts +10 -10
  247. package/dist/integrations/flinks/utils.d.ts +12 -12
  248. package/dist/integrations/googleAnalytics.d.ts +3 -3
  249. package/dist/integrations/googleTagManager.d.ts +1 -1
  250. package/dist/integrations/heap.d.ts +2 -2
  251. package/dist/integrations/intercom.d.ts +2 -2
  252. package/dist/integrations/mixpanel.d.ts +2 -2
  253. package/dist/integrations/persona.d.ts +2 -2
  254. package/dist/integrations/plaid.d.ts +2 -2
  255. package/dist/integrations/recaptcha.d.ts +2 -2
  256. package/dist/integrations/rudderstack.d.ts +3 -3
  257. package/dist/integrations/schwab.d.ts +1 -1
  258. package/dist/integrations/segment.d.ts +1 -1
  259. package/dist/integrations/stripe/Cart.d.ts +19 -19
  260. package/dist/integrations/stripe/SimplifiedProduct.d.ts +39 -39
  261. package/dist/integrations/stripe/index.d.ts +1 -1
  262. package/dist/integrations/stripe/stripe.d.ts +97 -97
  263. package/dist/integrations/stytch.d.ts +19 -19
  264. package/dist/integrations/trustedform.d.ts +2 -2
  265. package/dist/integrations/utils.d.ts +14 -14
  266. package/dist/setupTests.d.ts +1 -1
  267. package/dist/types/Form.d.ts +80 -80
  268. package/dist/utils/DangerouslySetHTMLContent.d.ts +2 -2
  269. package/dist/utils/ShadowDomHtmlContent.d.ts +8 -8
  270. package/dist/utils/array.d.ts +11 -11
  271. package/dist/utils/browser.d.ts +23 -23
  272. package/dist/utils/callbackQueue.d.ts +10 -10
  273. package/dist/utils/document.d.ts +1 -1
  274. package/dist/utils/elementActions.d.ts +55 -55
  275. package/dist/utils/entities/Collaborator.d.ts +14 -14
  276. package/dist/utils/entities/Field.d.ts +129 -129
  277. package/dist/utils/error.d.ts +13 -13
  278. package/dist/utils/featheryClient/index.d.ts +103 -103
  279. package/dist/utils/featheryClient/integrationClient.d.ts +114 -114
  280. package/dist/utils/featheryClient/utils.d.ts +1 -1
  281. package/dist/utils/fieldHelperFunctions.d.ts +70 -70
  282. package/dist/utils/formContext.d.ts +104 -104
  283. package/dist/utils/formHelperFunctions.d.ts +44 -44
  284. package/dist/utils/hideAndRepeats.d.ts +27 -27
  285. package/dist/utils/hydration.d.ts +14 -14
  286. package/dist/utils/image.d.ts +39 -39
  287. package/dist/utils/init.d.ts +59 -59
  288. package/dist/utils/init.d.ts.map +1 -1
  289. package/dist/utils/interactionState.d.ts +4 -4
  290. package/dist/utils/internalState.d.ts +91 -91
  291. package/dist/utils/logic.d.ts +50 -50
  292. package/dist/utils/offlineRequestHandler.d.ts +94 -94
  293. package/dist/utils/polyfills.d.ts +2 -2
  294. package/dist/utils/primitives.d.ts +14 -14
  295. package/dist/utils/random.d.ts +1 -1
  296. package/dist/utils/repeat.d.ts +38 -38
  297. package/dist/utils/sensitiveActions.d.ts +7 -7
  298. package/dist/utils/stepHelperFunctions.d.ts +22 -22
  299. package/dist/utils/styles.d.ts +5 -5
  300. package/dist/utils/validation.d.ts +58 -58
  301. package/package.json +18 -5
  302. package/umd/466.e3456c8b3407ad04ba56.js +1 -0
  303. package/umd/{DateSelectorField.b98c0ecb80f56e65cc69.js → DateSelectorField.bd5646949de71f571d04.js} +1 -1
  304. package/umd/{TextField.a3d8d42f6f8236d00f83.js → TextField.5a5296fe3ea60c4459f2.js} +1 -1
  305. package/umd/index.js +1 -1
  306. package/dist/Form/components/AIExtractionToast/ExtractionItem.d.ts.map +0 -1
  307. package/dist/Form/components/AIExtractionToast/icons.d.ts.map +0 -1
  308. package/dist/Form/components/AIExtractionToast/index.d.ts +0 -9
  309. package/dist/Form/components/AIExtractionToast/index.d.ts.map +0 -1
  310. package/dist/Form/components/AIExtractionToast/useAIExtractionToast.d.ts.map +0 -1
  311. package/umd/796.e66d52ea21ef09c4eeaa.js +0 -1
@@ -0,0 +1,888 @@
1
+ import { l as featheryWindow, j as jsxs, a as __assign, b as jsx, _ as __read, u as useBorder, h as hoverStylesGuard, ah as isNum } from './fthry_index.F6BXSHA5.js';
2
+ import { useRef, useCallback, useEffect, useState } from 'react';
3
+ import 'react/jsx-runtime';
4
+ import 'react-dom/client';
5
+ import 'stream';
6
+ import 'events';
7
+ import 'buffer';
8
+ import 'util';
9
+ import 'react-dom';
10
+
11
+ /**!
12
+ * hotkeys-js v3.9.3
13
+ * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
14
+ *
15
+ * Copyright (c) 2022 kenny wong <wowohoo@qq.com>
16
+ * http://jaywcjlove.github.io/hotkeys
17
+ * Licensed under the MIT license
18
+ */
19
+
20
+ var isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false; // 绑定事件
21
+
22
+ function addEvent(object, event, method, useCapture) {
23
+ if (object.addEventListener) {
24
+ object.addEventListener(event, method, useCapture);
25
+ } else if (object.attachEvent) {
26
+ object.attachEvent("on".concat(event), function () {
27
+ method(window.event);
28
+ });
29
+ }
30
+ } // 修饰键转换成对应的键码
31
+
32
+
33
+ function getMods(modifier, key) {
34
+ var mods = key.slice(0, key.length - 1);
35
+
36
+ for (var i = 0; i < mods.length; i++) {
37
+ mods[i] = modifier[mods[i].toLowerCase()];
38
+ }
39
+
40
+ return mods;
41
+ } // 处理传的key字符串转换成数组
42
+
43
+
44
+ function getKeys(key) {
45
+ if (typeof key !== 'string') key = '';
46
+ key = key.replace(/\s/g, ''); // 匹配任何空白字符,包括空格、制表符、换页符等等
47
+
48
+ var keys = key.split(','); // 同时设置多个快捷键,以','分割
49
+
50
+ var index = keys.lastIndexOf(''); // 快捷键可能包含',',需特殊处理
51
+
52
+ for (; index >= 0;) {
53
+ keys[index - 1] += ',';
54
+ keys.splice(index, 1);
55
+ index = keys.lastIndexOf('');
56
+ }
57
+
58
+ return keys;
59
+ } // 比较修饰键的数组
60
+
61
+
62
+ function compareArray(a1, a2) {
63
+ var arr1 = a1.length >= a2.length ? a1 : a2;
64
+ var arr2 = a1.length >= a2.length ? a2 : a1;
65
+ var isIndex = true;
66
+
67
+ for (var i = 0; i < arr1.length; i++) {
68
+ if (arr2.indexOf(arr1[i]) === -1) isIndex = false;
69
+ }
70
+
71
+ return isIndex;
72
+ }
73
+
74
+ var _keyMap = {
75
+ backspace: 8,
76
+ tab: 9,
77
+ clear: 12,
78
+ enter: 13,
79
+ return: 13,
80
+ esc: 27,
81
+ escape: 27,
82
+ space: 32,
83
+ left: 37,
84
+ up: 38,
85
+ right: 39,
86
+ down: 40,
87
+ del: 46,
88
+ delete: 46,
89
+ ins: 45,
90
+ insert: 45,
91
+ home: 36,
92
+ end: 35,
93
+ pageup: 33,
94
+ pagedown: 34,
95
+ capslock: 20,
96
+ num_0: 96,
97
+ num_1: 97,
98
+ num_2: 98,
99
+ num_3: 99,
100
+ num_4: 100,
101
+ num_5: 101,
102
+ num_6: 102,
103
+ num_7: 103,
104
+ num_8: 104,
105
+ num_9: 105,
106
+ num_multiply: 106,
107
+ num_add: 107,
108
+ num_enter: 108,
109
+ num_subtract: 109,
110
+ num_decimal: 110,
111
+ num_divide: 111,
112
+ '⇪': 20,
113
+ ',': 188,
114
+ '.': 190,
115
+ '/': 191,
116
+ '`': 192,
117
+ '-': isff ? 173 : 189,
118
+ '=': isff ? 61 : 187,
119
+ ';': isff ? 59 : 186,
120
+ '\'': 222,
121
+ '[': 219,
122
+ ']': 221,
123
+ '\\': 220
124
+ }; // Modifier Keys
125
+
126
+ var _modifier = {
127
+ // shiftKey
128
+ '⇧': 16,
129
+ shift: 16,
130
+ // altKey
131
+ '⌥': 18,
132
+ alt: 18,
133
+ option: 18,
134
+ // ctrlKey
135
+ '⌃': 17,
136
+ ctrl: 17,
137
+ control: 17,
138
+ // metaKey
139
+ '⌘': 91,
140
+ cmd: 91,
141
+ command: 91
142
+ };
143
+ var modifierMap = {
144
+ 16: 'shiftKey',
145
+ 18: 'altKey',
146
+ 17: 'ctrlKey',
147
+ 91: 'metaKey',
148
+ shiftKey: 16,
149
+ ctrlKey: 17,
150
+ altKey: 18,
151
+ metaKey: 91
152
+ };
153
+ var _mods = {
154
+ 16: false,
155
+ 18: false,
156
+ 17: false,
157
+ 91: false
158
+ };
159
+ var _handlers = {}; // F1~F12 special key
160
+
161
+ for (var k = 1; k < 20; k++) {
162
+ _keyMap["f".concat(k)] = 111 + k;
163
+ }
164
+
165
+ var _downKeys = []; // 记录摁下的绑定键
166
+
167
+ var winListendFocus = false; // window是否已经监听了focus事件
168
+
169
+ var _scope = 'all'; // 默认热键范围
170
+
171
+ var elementHasBindEvent = []; // 已绑定事件的节点记录
172
+ // 返回键码
173
+
174
+ var code = function code(x) {
175
+ return _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);
176
+ }; // 设置获取当前范围(默认为'所有')
177
+
178
+
179
+ function setScope(scope) {
180
+ _scope = scope || 'all';
181
+ } // 获取当前范围
182
+
183
+
184
+ function getScope() {
185
+ return _scope || 'all';
186
+ } // 获取摁下绑定键的键值
187
+
188
+
189
+ function getPressedKeyCodes() {
190
+ return _downKeys.slice(0);
191
+ } // 表单控件控件判断 返回 Boolean
192
+ // hotkey is effective only when filter return true
193
+
194
+
195
+ function filter(event) {
196
+ var target = event.target || event.srcElement;
197
+ var tagName = target.tagName;
198
+ var flag = true; // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>
199
+
200
+ if (target.isContentEditable || (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {
201
+ flag = false;
202
+ }
203
+
204
+ return flag;
205
+ } // 判断摁下的键是否为某个键,返回true或者false
206
+
207
+
208
+ function isPressed(keyCode) {
209
+ if (typeof keyCode === 'string') {
210
+ keyCode = code(keyCode); // 转换成键码
211
+ }
212
+
213
+ return _downKeys.indexOf(keyCode) !== -1;
214
+ } // 循环删除handlers中的所有 scope(范围)
215
+
216
+
217
+ function deleteScope(scope, newScope) {
218
+ var handlers;
219
+ var i; // 没有指定scope,获取scope
220
+
221
+ if (!scope) scope = getScope();
222
+
223
+ for (var key in _handlers) {
224
+ if (Object.prototype.hasOwnProperty.call(_handlers, key)) {
225
+ handlers = _handlers[key];
226
+
227
+ for (i = 0; i < handlers.length;) {
228
+ if (handlers[i].scope === scope) handlers.splice(i, 1);else i++;
229
+ }
230
+ }
231
+ } // 如果scope被删除,将scope重置为all
232
+
233
+
234
+ if (getScope() === scope) setScope(newScope || 'all');
235
+ } // 清除修饰键
236
+
237
+
238
+ function clearModifier(event) {
239
+ var key = event.keyCode || event.which || event.charCode;
240
+
241
+ var i = _downKeys.indexOf(key); // 从列表中清除按压过的键
242
+
243
+
244
+ if (i >= 0) {
245
+ _downKeys.splice(i, 1);
246
+ } // 特殊处理 cmmand 键,在 cmmand 组合快捷键 keyup 只执行一次的问题
247
+
248
+
249
+ if (event.key && event.key.toLowerCase() === 'meta') {
250
+ _downKeys.splice(0, _downKeys.length);
251
+ } // 修饰键 shiftKey altKey ctrlKey (command||metaKey) 清除
252
+
253
+
254
+ if (key === 93 || key === 224) key = 91;
255
+
256
+ if (key in _mods) {
257
+ _mods[key] = false; // 将修饰键重置为false
258
+
259
+ for (var k in _modifier) {
260
+ if (_modifier[k] === key) hotkeys[k] = false;
261
+ }
262
+ }
263
+ }
264
+
265
+ function unbind(keysInfo) {
266
+ // unbind(), unbind all keys
267
+ if (!keysInfo) {
268
+ Object.keys(_handlers).forEach(function (key) {
269
+ return delete _handlers[key];
270
+ });
271
+ } else if (Array.isArray(keysInfo)) {
272
+ // support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])
273
+ keysInfo.forEach(function (info) {
274
+ if (info.key) eachUnbind(info);
275
+ });
276
+ } else if (typeof keysInfo === 'object') {
277
+ // support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})
278
+ if (keysInfo.key) eachUnbind(keysInfo);
279
+ } else if (typeof keysInfo === 'string') {
280
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
281
+ args[_key - 1] = arguments[_key];
282
+ }
283
+
284
+ // support old method
285
+ // eslint-disable-line
286
+ var scope = args[0],
287
+ method = args[1];
288
+
289
+ if (typeof scope === 'function') {
290
+ method = scope;
291
+ scope = '';
292
+ }
293
+
294
+ eachUnbind({
295
+ key: keysInfo,
296
+ scope: scope,
297
+ method: method,
298
+ splitKey: '+'
299
+ });
300
+ }
301
+ } // 解除绑定某个范围的快捷键
302
+
303
+
304
+ var eachUnbind = function eachUnbind(_ref) {
305
+ var key = _ref.key,
306
+ scope = _ref.scope,
307
+ method = _ref.method,
308
+ _ref$splitKey = _ref.splitKey,
309
+ splitKey = _ref$splitKey === void 0 ? '+' : _ref$splitKey;
310
+ var multipleKeys = getKeys(key);
311
+ multipleKeys.forEach(function (originKey) {
312
+ var unbindKeys = originKey.split(splitKey);
313
+ var len = unbindKeys.length;
314
+ var lastKey = unbindKeys[len - 1];
315
+ var keyCode = lastKey === '*' ? '*' : code(lastKey);
316
+ if (!_handlers[keyCode]) return; // 判断是否传入范围,没有就获取范围
317
+
318
+ if (!scope) scope = getScope();
319
+ var mods = len > 1 ? getMods(_modifier, unbindKeys) : [];
320
+ _handlers[keyCode] = _handlers[keyCode].filter(function (record) {
321
+ // 通过函数判断,是否解除绑定,函数相等直接返回
322
+ var isMatchingMethod = method ? record.method === method : true;
323
+ return !(isMatchingMethod && record.scope === scope && compareArray(record.mods, mods));
324
+ });
325
+ });
326
+ }; // 对监听对应快捷键的回调函数进行处理
327
+
328
+
329
+ function eventHandler(event, handler, scope, element) {
330
+ if (handler.element !== element) {
331
+ return;
332
+ }
333
+
334
+ var modifiersMatch; // 看它是否在当前范围
335
+
336
+ if (handler.scope === scope || handler.scope === 'all') {
337
+ // 检查是否匹配修饰符(如果有返回true)
338
+ modifiersMatch = handler.mods.length > 0;
339
+
340
+ for (var y in _mods) {
341
+ if (Object.prototype.hasOwnProperty.call(_mods, y)) {
342
+ if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {
343
+ modifiersMatch = false;
344
+ }
345
+ }
346
+ } // 调用处理程序,如果是修饰键不做处理
347
+
348
+
349
+ if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {
350
+ if (handler.method(event, handler) === false) {
351
+ if (event.preventDefault) event.preventDefault();else event.returnValue = false;
352
+ if (event.stopPropagation) event.stopPropagation();
353
+ if (event.cancelBubble) event.cancelBubble = true;
354
+ }
355
+ }
356
+ }
357
+ } // 处理keydown事件
358
+
359
+
360
+ function dispatch(event, element) {
361
+ var asterisk = _handlers['*'];
362
+ var key = event.keyCode || event.which || event.charCode; // 表单控件过滤 默认表单控件不触发快捷键
363
+
364
+ if (!hotkeys.filter.call(this, event)) return; // Gecko(Firefox)的command键值224,在Webkit(Chrome)中保持一致
365
+ // Webkit左右 command 键值不一样
366
+
367
+ if (key === 93 || key === 224) key = 91;
368
+ /**
369
+ * Collect bound keys
370
+ * If an Input Method Editor is processing key input and the event is keydown, return 229.
371
+ * https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229
372
+ * http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html
373
+ */
374
+
375
+ if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);
376
+ /**
377
+ * Jest test cases are required.
378
+ * ===============================
379
+ */
380
+
381
+ ['ctrlKey', 'altKey', 'shiftKey', 'metaKey'].forEach(function (keyName) {
382
+ var keyNum = modifierMap[keyName];
383
+
384
+ if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {
385
+ _downKeys.push(keyNum);
386
+ } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {
387
+ _downKeys.splice(_downKeys.indexOf(keyNum), 1);
388
+ } else if (keyName === 'metaKey' && event[keyName] && _downKeys.length === 3) {
389
+ /**
390
+ * Fix if Command is pressed:
391
+ * ===============================
392
+ */
393
+ if (!(event.ctrlKey || event.shiftKey || event.altKey)) {
394
+ _downKeys = _downKeys.slice(_downKeys.indexOf(keyNum));
395
+ }
396
+ }
397
+ });
398
+ /**
399
+ * -------------------------------
400
+ */
401
+
402
+ if (key in _mods) {
403
+ _mods[key] = true; // 将特殊字符的key注册到 hotkeys 上
404
+
405
+ for (var k in _modifier) {
406
+ if (_modifier[k] === key) hotkeys[k] = true;
407
+ }
408
+
409
+ if (!asterisk) return;
410
+ } // 将 modifierMap 里面的修饰键绑定到 event 中
411
+
412
+
413
+ for (var e in _mods) {
414
+ if (Object.prototype.hasOwnProperty.call(_mods, e)) {
415
+ _mods[e] = event[modifierMap[e]];
416
+ }
417
+ }
418
+ /**
419
+ * https://github.com/jaywcjlove/hotkeys/pull/129
420
+ * This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.
421
+ * An example of this is ctrl+alt+m on a Swedish keyboard which is used to type μ.
422
+ * Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate
423
+ */
424
+
425
+
426
+ if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {
427
+ if (_downKeys.indexOf(17) === -1) {
428
+ _downKeys.push(17);
429
+ }
430
+
431
+ if (_downKeys.indexOf(18) === -1) {
432
+ _downKeys.push(18);
433
+ }
434
+
435
+ _mods[17] = true;
436
+ _mods[18] = true;
437
+ } // 获取范围 默认为 `all`
438
+
439
+
440
+ var scope = getScope(); // 对任何快捷键都需要做的处理
441
+
442
+ if (asterisk) {
443
+ for (var i = 0; i < asterisk.length; i++) {
444
+ if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {
445
+ eventHandler(event, asterisk[i], scope, element);
446
+ }
447
+ }
448
+ } // key 不在 _handlers 中返回
449
+
450
+
451
+ if (!(key in _handlers)) return;
452
+
453
+ for (var _i = 0; _i < _handlers[key].length; _i++) {
454
+ if (event.type === 'keydown' && _handlers[key][_i].keydown || event.type === 'keyup' && _handlers[key][_i].keyup) {
455
+ if (_handlers[key][_i].key) {
456
+ var record = _handlers[key][_i];
457
+ var splitKey = record.splitKey;
458
+ var keyShortcut = record.key.split(splitKey);
459
+ var _downKeysCurrent = []; // 记录当前按键键值
460
+
461
+ for (var a = 0; a < keyShortcut.length; a++) {
462
+ _downKeysCurrent.push(code(keyShortcut[a]));
463
+ }
464
+
465
+ if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {
466
+ // 找到处理内容
467
+ eventHandler(event, record, scope, element);
468
+ }
469
+ }
470
+ }
471
+ }
472
+ } // 判断 element 是否已经绑定事件
473
+
474
+
475
+ function isElementBind(element) {
476
+ return elementHasBindEvent.indexOf(element) > -1;
477
+ }
478
+
479
+ function hotkeys(key, option, method) {
480
+ _downKeys = [];
481
+ var keys = getKeys(key); // 需要处理的快捷键列表
482
+
483
+ var mods = [];
484
+ var scope = 'all'; // scope默认为all,所有范围都有效
485
+
486
+ var element = document; // 快捷键事件绑定节点
487
+
488
+ var i = 0;
489
+ var keyup = false;
490
+ var keydown = true;
491
+ var splitKey = '+';
492
+ var capture = false; // 对为设定范围的判断
493
+
494
+ if (method === undefined && typeof option === 'function') {
495
+ method = option;
496
+ }
497
+
498
+ if (Object.prototype.toString.call(option) === '[object Object]') {
499
+ if (option.scope) scope = option.scope; // eslint-disable-line
500
+
501
+ if (option.element) element = option.element; // eslint-disable-line
502
+
503
+ if (option.keyup) keyup = option.keyup; // eslint-disable-line
504
+
505
+ if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line
506
+
507
+ if (option.capture !== undefined) capture = option.capture; // eslint-disable-line
508
+
509
+ if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line
510
+ }
511
+
512
+ if (typeof option === 'string') scope = option; // 对于每个快捷键进行处理
513
+
514
+ for (; i < keys.length; i++) {
515
+ key = keys[i].split(splitKey); // 按键列表
516
+
517
+ mods = []; // 如果是组合快捷键取得组合快捷键
518
+
519
+ if (key.length > 1) mods = getMods(_modifier, key); // 将非修饰键转化为键码
520
+
521
+ key = key[key.length - 1];
522
+ key = key === '*' ? '*' : code(key); // *表示匹配所有快捷键
523
+ // 判断key是否在_handlers中,不在就赋一个空数组
524
+
525
+ if (!(key in _handlers)) _handlers[key] = [];
526
+
527
+ _handlers[key].push({
528
+ keyup: keyup,
529
+ keydown: keydown,
530
+ scope: scope,
531
+ mods: mods,
532
+ shortcut: keys[i],
533
+ method: method,
534
+ key: keys[i],
535
+ splitKey: splitKey,
536
+ element: element
537
+ });
538
+ } // 在全局document上设置快捷键
539
+
540
+
541
+ if (typeof element !== 'undefined' && !isElementBind(element) && window) {
542
+ elementHasBindEvent.push(element);
543
+ addEvent(element, 'keydown', function (e) {
544
+ dispatch(e, element);
545
+ }, capture);
546
+
547
+ if (!winListendFocus) {
548
+ winListendFocus = true;
549
+ addEvent(window, 'focus', function () {
550
+ _downKeys = [];
551
+ }, capture);
552
+ }
553
+
554
+ addEvent(element, 'keyup', function (e) {
555
+ dispatch(e, element);
556
+ clearModifier(e);
557
+ }, capture);
558
+ }
559
+ }
560
+
561
+ function trigger(shortcut) {
562
+ var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';
563
+ Object.keys(_handlers).forEach(function (key) {
564
+ var data = _handlers[key].find(function (item) {
565
+ return item.scope === scope && item.shortcut === shortcut;
566
+ });
567
+
568
+ if (data && data.method) {
569
+ data.method();
570
+ }
571
+ });
572
+ }
573
+
574
+ var _api = {
575
+ setScope: setScope,
576
+ getScope: getScope,
577
+ deleteScope: deleteScope,
578
+ getPressedKeyCodes: getPressedKeyCodes,
579
+ isPressed: isPressed,
580
+ filter: filter,
581
+ trigger: trigger,
582
+ unbind: unbind,
583
+ keyMap: _keyMap,
584
+ modifier: _modifier,
585
+ modifierMap: modifierMap
586
+ };
587
+
588
+ for (var a in _api) {
589
+ if (Object.prototype.hasOwnProperty.call(_api, a)) {
590
+ hotkeys[a] = _api[a];
591
+ }
592
+ }
593
+
594
+ if (typeof window !== 'undefined') {
595
+ var _hotkeys = window.hotkeys;
596
+
597
+ hotkeys.noConflict = function (deep) {
598
+ if (deep && window.hotkeys === hotkeys) {
599
+ window.hotkeys = _hotkeys;
600
+ }
601
+
602
+ return hotkeys;
603
+ };
604
+
605
+ window.hotkeys = hotkeys;
606
+ }
607
+
608
+ hotkeys.filter = function () {
609
+ return true;
610
+ };
611
+
612
+ var tagFilter = function tagFilter(_ref, enableOnTags) {
613
+ var target = _ref.target;
614
+ var targetTagName = target && target.tagName;
615
+ return Boolean(targetTagName && enableOnTags && enableOnTags.includes(targetTagName));
616
+ };
617
+
618
+ var isKeyboardEventTriggeredByInput = function isKeyboardEventTriggeredByInput(ev) {
619
+ return tagFilter(ev, ['INPUT', 'TEXTAREA', 'SELECT']);
620
+ };
621
+
622
+ function useHotkeys(keys, callback, options, deps) {
623
+ if (options instanceof Array) {
624
+ deps = options;
625
+ options = undefined;
626
+ }
627
+
628
+ var _ref2 = options || {},
629
+ enableOnTags = _ref2.enableOnTags,
630
+ filter = _ref2.filter,
631
+ keyup = _ref2.keyup,
632
+ keydown = _ref2.keydown,
633
+ _ref2$filterPreventDe = _ref2.filterPreventDefault,
634
+ filterPreventDefault = _ref2$filterPreventDe === void 0 ? true : _ref2$filterPreventDe,
635
+ _ref2$enabled = _ref2.enabled,
636
+ enabled = _ref2$enabled === void 0 ? true : _ref2$enabled,
637
+ _ref2$enableOnContent = _ref2.enableOnContentEditable,
638
+ enableOnContentEditable = _ref2$enableOnContent === void 0 ? false : _ref2$enableOnContent;
639
+
640
+ var ref = useRef(null); // The return value of this callback determines if the browsers default behavior is prevented.
641
+
642
+ var memoisedCallback = useCallback(function (keyboardEvent, hotkeysEvent) {
643
+ var _keyboardEvent$target;
644
+
645
+ if (filter && !filter(keyboardEvent)) {
646
+ return !filterPreventDefault;
647
+ } // Check whether the hotkeys was triggered inside an input and that input is enabled or if it was triggered by a content editable tag and it is enabled.
648
+
649
+
650
+ if (isKeyboardEventTriggeredByInput(keyboardEvent) && !tagFilter(keyboardEvent, enableOnTags) || (_keyboardEvent$target = keyboardEvent.target) != null && _keyboardEvent$target.isContentEditable && !enableOnContentEditable) {
651
+ return true;
652
+ }
653
+
654
+ if (ref.current === null || document.activeElement === ref.current) {
655
+ callback(keyboardEvent, hotkeysEvent);
656
+ return true;
657
+ }
658
+
659
+ return false;
660
+ }, deps ? [ref, enableOnTags, filter].concat(deps) : [ref, enableOnTags, filter]);
661
+ useEffect(function () {
662
+ if (!enabled) {
663
+ hotkeys.unbind(keys, memoisedCallback);
664
+ return;
665
+ } // In this case keydown is likely undefined, so we set it to false, since hotkeys needs the `keydown` key to have a value.
666
+
667
+
668
+ if (keyup && keydown !== true) {
669
+ options.keydown = false;
670
+ }
671
+
672
+ hotkeys(keys, options || {}, memoisedCallback);
673
+ return function () {
674
+ return hotkeys.unbind(keys, memoisedCallback);
675
+ };
676
+ }, [memoisedCallback, keys, enabled]);
677
+ return ref;
678
+ }
679
+
680
+ hotkeys.isPressed;
681
+
682
+ function useOTPListener(onOTP) {
683
+ var onOTPRef = useRef(onOTP);
684
+ useEffect(function () {
685
+ onOTPRef.current = onOTP;
686
+ }, [onOTP]);
687
+ useEffect(function () {
688
+ // not supported on user's browser
689
+ if (!('OTPCredential' in featheryWindow())) {
690
+ console.log('WebOTP API not supported');
691
+ return;
692
+ }
693
+ // cancelable signal on unmount
694
+ var abortController = new AbortController();
695
+ // Invoke the WebOTP API and listen to otp sms
696
+ navigator.credentials
697
+ .get({
698
+ otp: { transport: ['sms'] },
699
+ signal: abortController.signal
700
+ })
701
+ .then(function (otp) {
702
+ onOTPRef.current(otp.code);
703
+ })
704
+ .catch(function (err) {
705
+ console.log(err);
706
+ });
707
+ return function () {
708
+ abortController.abort();
709
+ };
710
+ }, []);
711
+ }
712
+
713
+ function SingleOtpInput(_a) {
714
+ var index = _a.index, focus = _a.focus, value = _a.value, onChange = _a.onChange, onEnter = _a.onEnter, onInput = _a.onInput, paste = _a.paste, onPaste = _a.onPaste, onFocus = _a.onFocus, onBlur = _a.onBlur, element = _a.element, responsiveStyles = _a.responsiveStyles, inlineError = _a.inlineError, changeCodeAtFocus = _a.changeCodeAtFocus, focusPrevInput = _a.focusPrevInput, focusNextInput = _a.focusNextInput, isFocused = _a.isFocused, disabled = _a.disabled, autoComplete = _a.autoComplete;
715
+ var input = useRef(null);
716
+ useEffect(function () {
717
+ var inputEl = input.current;
718
+ // Check if focusedInput changed
719
+ // Prevent calling function if input already in focus
720
+ if (inputEl && focus) {
721
+ inputEl.focus();
722
+ inputEl.select();
723
+ if (paste) {
724
+ inputEl.selectionStart = inputEl.selectionEnd;
725
+ }
726
+ }
727
+ }, [focus, input]);
728
+ var _b = useBorder({
729
+ element: element,
730
+ error: inlineError,
731
+ breakpoint: responsiveStyles.getMobileBreakpoint()
732
+ }), borderStyles = _b.borderStyles, customBorder = _b.customBorder;
733
+ // Handle cases of backspace, delete, left arrow, right arrow, space
734
+ useHotkeys('enter, backspace, delete, left, right, space', function (e, handler) {
735
+ if (!isFocused)
736
+ return;
737
+ switch (handler.key) {
738
+ case 'enter':
739
+ e.preventDefault();
740
+ if (focus)
741
+ onEnter(e);
742
+ break;
743
+ case 'backspace':
744
+ e.preventDefault();
745
+ changeCodeAtFocus('');
746
+ focusPrevInput();
747
+ break;
748
+ case 'delete':
749
+ e.preventDefault();
750
+ changeCodeAtFocus('');
751
+ break;
752
+ case 'left':
753
+ e.preventDefault();
754
+ focusPrevInput();
755
+ break;
756
+ case 'right':
757
+ e.preventDefault();
758
+ focusNextInput();
759
+ break;
760
+ case 'space':
761
+ e.preventDefault();
762
+ break;
763
+ }
764
+ }, {
765
+ enableOnTags: ['INPUT']
766
+ });
767
+ return (jsxs("div", __assign({ css: __assign(__assign(__assign({ position: 'relative', display: 'flex', alignItems: 'center', marginLeft: index === 0 ? 0 : '8px' }, responsiveStyles.getTarget('sub-fc')), (disabled ? responsiveStyles.getTarget('disabled') : {})), { '&:hover': hoverStylesGuard(disabled
768
+ ? {}
769
+ : __assign(__assign({}, responsiveStyles.getTarget('hover')), borderStyles.hover)), '&&': focus
770
+ ? __assign(__assign({}, responsiveStyles.getTarget('active')), borderStyles.active) : {} }) }, { children: [customBorder, jsx("input", { id: "".concat(element.servar.key, "-").concat(index), name: element.servar.key, "aria-label": "".concat(index === 0 ? 'Please enter verification code. ' : '', "Digit ").concat(index + 1), css: __assign({ position: 'relative', textAlign: 'center', outline: 'none', border: 'none', background: 'none', height: '100%', width: '100%' }, responsiveStyles.getTarget('field')),
771
+ // Many modern browsers do not support autocomplete="off".
772
+ // In order to avoid the autoComplete, use autocomplete="new-password"
773
+ // @See: https://developer.mozilla.org/en-US/docs/Web/Security/Practical_implementation_guides/Turning_off_form_autocompletion
774
+ autoComplete: autoComplete === 'on' ? 'one-time-code' : 'new-password', inputMode: 'numeric', disabled: disabled, ref: input, value: value || '', onChange: onChange, onInput: onInput, onPaste: onPaste, onFocus: onFocus, onBlur: onBlur })] })));
775
+ }
776
+ var convertValueToRaw = function (value) { return value.toString().split(''); };
777
+ function OtpInput(_a) {
778
+ var element = _a.element, responsiveStyles = _a.responsiveStyles, autoFocus = _a.autoFocus, onChange = _a.onChange, onEnter = _a.onEnter, value = _a.value, disabled = _a.disabled, autoComplete = _a.autoComplete, inlineError = _a.inlineError;
779
+ var _b = __read(useState(autoFocus ? 0 : -1), 2), activeInput = _b[0], setActiveInput = _b[1];
780
+ var _c = __read(useState(false), 2), pasted = _c[0], setPasted = _c[1];
781
+ var _d = __read(useState(convertValueToRaw(value)), 2), rawValue = _d[0], setRawValue = _d[1];
782
+ useEffect(function () {
783
+ if (value !== rawValue)
784
+ setRawValue(convertValueToRaw(value));
785
+ }, [value]);
786
+ // Helper to return OTP from input
787
+ var handleOtpChange = function (otp) {
788
+ setRawValue(otp);
789
+ onChange(otp.filter(Boolean).join(''));
790
+ };
791
+ var isInputValueValid = function (value) {
792
+ // @ts-expect-error TS(2554): Expected 1 arguments, but got 2.
793
+ return isNum(value) && value.trim().length === 1;
794
+ };
795
+ var numInputs = element.servar.max_length;
796
+ // Focus on input by index
797
+ var focusInput = function (input) {
798
+ setActiveInput(Math.max(Math.min(numInputs - 1, input), 0));
799
+ };
800
+ // Focus on next input
801
+ var focusNextInput = function () {
802
+ focusInput(activeInput + 1);
803
+ };
804
+ // Focus on previous input
805
+ var focusPrevInput = function () {
806
+ focusInput(activeInput - 1);
807
+ };
808
+ // Change OTP value at focused input
809
+ var changeCodeAtFocus = function (value) {
810
+ var newVal = JSON.parse(JSON.stringify(rawValue));
811
+ newVal[activeInput] = value[0];
812
+ handleOtpChange(newVal);
813
+ };
814
+ var handleMultipleValues = function (vals) {
815
+ if (vals.some(function (val) { return isNaN(parseInt(val, 10)); }))
816
+ return;
817
+ var newVal = JSON.parse(JSON.stringify(rawValue));
818
+ var nextActiveInput = activeInput;
819
+ // Paste data from focused input onwards
820
+ for (var pos = 0; pos < numInputs; ++pos) {
821
+ if (pos >= activeInput && vals.length > 0) {
822
+ newVal[pos] = vals.shift();
823
+ nextActiveInput++;
824
+ }
825
+ }
826
+ setActiveInput(nextActiveInput);
827
+ focusInput(nextActiveInput);
828
+ handleOtpChange(newVal);
829
+ };
830
+ var handleSMSOTP = function (otpCode) {
831
+ var splitCode = otpCode.slice(0, numInputs - activeInput).split('');
832
+ handleMultipleValues(splitCode);
833
+ if (activeInput + splitCode.length >= numInputs) {
834
+ setPasted(true);
835
+ }
836
+ };
837
+ useOTPListener(handleSMSOTP);
838
+ // Handle pasted OTP
839
+ var handleOnPaste = function (e) {
840
+ e.preventDefault();
841
+ // Get pastedData in an array of max size (num of inputs - current position)
842
+ var pastedData = e.clipboardData
843
+ .getData('text/plain')
844
+ .slice(0, numInputs - activeInput)
845
+ .split('');
846
+ var inputLength = pastedData.length;
847
+ handleMultipleValues(pastedData);
848
+ if (activeInput + inputLength >= numInputs) {
849
+ setPasted(true);
850
+ }
851
+ };
852
+ var handleOnChange = function (e) {
853
+ var value = e.target.value;
854
+ handleMultipleValues(value.split(''));
855
+ };
856
+ // The content may not have changed, but some input took place hence change the focus
857
+ var handleOnInput = function (e) {
858
+ if (isInputValueValid(e.target.value)) {
859
+ focusNextInput();
860
+ }
861
+ };
862
+ var renderInputs = function () {
863
+ var inputs = [];
864
+ var _loop_1 = function (i) {
865
+ var lastInput = i === numInputs - 1;
866
+ inputs.push(jsx(SingleOtpInput, { index: i, focus: activeInput === i, value: rawValue[i], onChange: handleOnChange, onEnter: lastInput ? onEnter : function () { }, onInput: handleOnInput, paste: pasted, onPaste: handleOnPaste, onFocus: function (e) {
867
+ setActiveInput(i);
868
+ setPasted(false);
869
+ e.target.select();
870
+ }, onBlur: function () { return setActiveInput(-1); }, element: element, responsiveStyles: responsiveStyles, inlineError: inlineError, changeCodeAtFocus: changeCodeAtFocus, focusPrevInput: focusPrevInput, focusNextInput: focusNextInput, isFocused: activeInput > -1, disabled: disabled, autoComplete: autoComplete }, "".concat(element.servar.key, "-").concat(i)));
871
+ };
872
+ for (var i = 0; i < numInputs; i++) {
873
+ _loop_1(i);
874
+ }
875
+ return inputs;
876
+ };
877
+ return (jsx("div", __assign({ css: __assign({ display: 'flex', flexDirection: 'row' }, responsiveStyles.getTarget('fc')) }, { children: renderInputs() })));
878
+ }
879
+ function PinInputField(_a) {
880
+ var element = _a.element, responsiveStyles = _a.responsiveStyles, fieldLabel = _a.fieldLabel, inlineError = _a.inlineError, _b = _a.autoFocus, autoFocus = _b === void 0 ? false : _b, _c = _a.fieldVal, fieldVal = _c === void 0 ? '' : _c, editMode = _a.editMode, _d = _a.onChange, onChange = _d === void 0 ? function () { } : _d, _e = _a.onEnter, onEnter = _e === void 0 ? function () { } : _e, _f = _a.elementProps, elementProps = _f === void 0 ? {} : _f, _g = _a.disabled, disabled = _g === void 0 ? false : _g, autoComplete = _a.autoComplete, children = _a.children;
881
+ return (jsxs("div", __assign({ style: {
882
+ display: 'flex',
883
+ position: 'relative',
884
+ pointerEvents: editMode ? 'none' : 'auto'
885
+ } }, elementProps, { children: [children, fieldLabel, jsx(OtpInput, { autoFocus: autoFocus, value: fieldVal, responsiveStyles: responsiveStyles, element: element, onChange: onChange, onEnter: onEnter, inlineError: inlineError, disabled: disabled, autoComplete: autoComplete })] })));
886
+ }
887
+
888
+ export { PinInputField as default };