@oneblink/apps-react 2.2.0 → 2.3.0-beta.2

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 (464) hide show
  1. package/dist/OneBlinkAutoSaveForm.d.ts +10 -10
  2. package/dist/OneBlinkAutoSaveForm.js +28 -28
  3. package/dist/OneBlinkForm.d.ts +11 -11
  4. package/dist/OneBlinkForm.js +11 -11
  5. package/dist/OneBlinkFormBase.d.ts +28 -28
  6. package/dist/OneBlinkFormBase.js +472 -472
  7. package/dist/OneBlinkFormStoreView.d.ts +8 -0
  8. package/dist/OneBlinkFormStoreView.js +55 -0
  9. package/dist/OneBlinkFormStoreView.js.map +1 -0
  10. package/dist/OneBlinkReadOnlyForm.d.ts +11 -11
  11. package/dist/OneBlinkReadOnlyForm.js +48 -48
  12. package/dist/components/AnnotationModal.d.ts +8 -0
  13. package/dist/components/AnnotationModal.js +104 -0
  14. package/dist/components/AnnotationModal.js.map +1 -0
  15. package/dist/components/AutocompleteDropdown.d.ts +26 -0
  16. package/dist/components/AutocompleteDropdown.js +174 -0
  17. package/dist/components/AutocompleteDropdown.js.map +1 -0
  18. package/dist/components/CopyToClipboardButton.d.ts +9 -0
  19. package/dist/components/CopyToClipboardButton.js +14 -0
  20. package/dist/components/CopyToClipboardButton.js.map +1 -0
  21. package/dist/components/CopyToClipboardIconButton.d.ts +10 -10
  22. package/dist/components/CopyToClipboardIconButton.js +32 -32
  23. package/dist/components/CustomAccordion.d.ts +27 -27
  24. package/dist/components/CustomAccordion.js +37 -37
  25. package/dist/components/CustomisableButtonInner.d.ts +7 -0
  26. package/dist/components/CustomisableButtonInner.js +9 -0
  27. package/dist/components/CustomisableButtonInner.js.map +1 -0
  28. package/dist/components/ErrorMessage.d.ts +13 -0
  29. package/dist/components/ErrorMessage.js +13 -0
  30. package/dist/components/ErrorMessage.js.map +1 -0
  31. package/dist/components/ErrorSnackbar.d.ts +8 -8
  32. package/dist/components/ErrorSnackbar.js +25 -25
  33. package/dist/components/FormElementLabelContainer.d.ts +12 -0
  34. package/dist/components/FormElementLabelContainer.js +16 -0
  35. package/dist/components/FormElementLabelContainer.js.map +1 -0
  36. package/dist/components/FormElementOptions.d.ts +9 -0
  37. package/dist/components/FormElementOptions.js +15 -0
  38. package/dist/components/FormElementOptions.js.map +1 -0
  39. package/dist/components/Lists.d.ts +25 -25
  40. package/dist/components/Lists.js +44 -44
  41. package/dist/components/LoadingWithMessage.d.ts +6 -6
  42. package/dist/components/LoadingWithMessage.js +11 -11
  43. package/dist/components/LookupButton.d.ts +10 -0
  44. package/dist/components/LookupButton.js +30 -0
  45. package/dist/components/LookupButton.js.map +1 -0
  46. package/dist/components/LookupNotification.d.ts +12 -0
  47. package/dist/components/LookupNotification.js +231 -0
  48. package/dist/components/LookupNotification.js.map +1 -0
  49. package/dist/components/Modal.d.ts +14 -0
  50. package/dist/components/Modal.js +15 -0
  51. package/dist/components/Modal.js.map +1 -0
  52. package/dist/components/NoResourcesYet.d.ts +12 -0
  53. package/dist/components/NoResourcesYet.js +7 -0
  54. package/dist/components/NoResourcesYet.js.map +1 -0
  55. package/dist/components/OnLoading.d.ts +10 -0
  56. package/dist/components/OnLoading.js +12 -0
  57. package/dist/components/OnLoading.js.map +1 -0
  58. package/dist/components/OneBlinkAppsErrorOriginalMessage.d.ts +7 -0
  59. package/dist/components/OneBlinkAppsErrorOriginalMessage.js +13 -0
  60. package/dist/components/OneBlinkAppsErrorOriginalMessage.js.map +1 -0
  61. package/dist/components/OneBlinkFormElements.d.ts +19 -0
  62. package/dist/components/OneBlinkFormElements.js +196 -0
  63. package/dist/components/OneBlinkFormElements.js.map +1 -0
  64. package/dist/components/PageFormElements.d.ts +17 -0
  65. package/dist/components/PageFormElements.js +49 -0
  66. package/dist/components/PageFormElements.js.map +1 -0
  67. package/dist/components/ToggleAllCheckbox.d.ts +13 -0
  68. package/dist/components/ToggleAllCheckbox.js +27 -0
  69. package/dist/components/ToggleAllCheckbox.js.map +1 -0
  70. package/dist/components/attachments/AttachmentStatus.d.ts +12 -0
  71. package/dist/components/attachments/AttachmentStatus.js +35 -0
  72. package/dist/components/attachments/AttachmentStatus.js.map +1 -0
  73. package/dist/components/attachments/FileCard.d.ts +18 -0
  74. package/dist/components/attachments/FileCard.js +58 -0
  75. package/dist/components/attachments/FileCard.js.map +1 -0
  76. package/dist/components/attachments/FileCardContent.d.ts +5 -0
  77. package/dist/components/attachments/FileCardContent.js +11 -0
  78. package/dist/components/attachments/FileCardContent.js.map +1 -0
  79. package/dist/components/attachments/Files.d.ts +14 -0
  80. package/dist/components/attachments/Files.js +27 -0
  81. package/dist/components/attachments/Files.js.map +1 -0
  82. package/dist/components/attachments/ImagePreviewUnavailable.d.ts +4 -0
  83. package/dist/components/attachments/ImagePreviewUnavailable.js +12 -0
  84. package/dist/components/attachments/ImagePreviewUnavailable.js.map +1 -0
  85. package/dist/components/attachments/UploadingAttachment.d.ts +4 -0
  86. package/dist/components/attachments/UploadingAttachment.js +13 -0
  87. package/dist/components/attachments/UploadingAttachment.js.map +1 -0
  88. package/dist/components/formStore/ColumnsConfigurationButton.d.ts +10 -0
  89. package/dist/components/formStore/ColumnsConfigurationButton.js +29 -0
  90. package/dist/components/formStore/ColumnsConfigurationButton.js.map +1 -0
  91. package/dist/components/formStore/DownloadSubmissionDataButton.d.ts +13 -0
  92. package/dist/components/formStore/DownloadSubmissionDataButton.js +45 -0
  93. package/dist/components/formStore/DownloadSubmissionDataButton.js.map +1 -0
  94. package/dist/components/formStore/FormStore.d.ts +9 -0
  95. package/dist/components/formStore/FormStore.js +103 -0
  96. package/dist/components/formStore/FormStore.js.map +1 -0
  97. package/dist/components/formStore/FormStoreTableProvider.d.ts +6 -6
  98. package/dist/components/formStore/FormStoreTableProvider.js +90 -90
  99. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.d.ts +5 -5
  100. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js +19 -19
  101. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.d.ts +5 -5
  102. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js +66 -66
  103. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.d.ts +5 -5
  104. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +86 -86
  105. package/dist/components/formStore/OneBlinkFormStoreProvider.d.ts +8 -8
  106. package/dist/components/formStore/OneBlinkFormStoreProvider.js +24 -24
  107. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.d.ts +5 -5
  108. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js +11 -11
  109. package/dist/components/formStore/OneBlinkFormStoreTable.d.ts +4 -4
  110. package/dist/components/formStore/OneBlinkFormStoreTable.js +194 -194
  111. package/dist/components/formStore/display/ElementDisplay.d.ts +23 -23
  112. package/dist/components/formStore/display/ElementDisplay.js +77 -77
  113. package/dist/components/formStore/display/FormStoreIcon.d.ts +2 -2
  114. package/dist/components/formStore/display/FormStoreIcon.js +2 -2
  115. package/dist/components/formStore/table/ActionedByTableCell.d.ts +11 -11
  116. package/dist/components/formStore/table/ActionedByTableCell.js +43 -43
  117. package/dist/components/formStore/table/ColumnFilters.d.ts +9 -9
  118. package/dist/components/formStore/table/ColumnFilters.js +179 -179
  119. package/dist/components/formStore/table/FormElementTableCell.d.ts +10 -10
  120. package/dist/components/formStore/table/FormElementTableCell.js +228 -228
  121. package/dist/components/formStore/table/HeaderCellMoreButton.d.ts +9 -9
  122. package/dist/components/formStore/table/HeaderCellMoreButton.js +48 -48
  123. package/dist/components/formStore/table/RepeatableSetCell.d.ts +8 -8
  124. package/dist/components/formStore/table/RepeatableSetCell.js +62 -62
  125. package/dist/components/formStore/table/RepeatableSetCellAccordion.d.ts +9 -9
  126. package/dist/components/formStore/table/RepeatableSetCellAccordion.js +11 -11
  127. package/dist/components/formStore/table/TableCellCopyButton.d.ts +7 -7
  128. package/dist/components/formStore/table/TableCellCopyButton.js +27 -27
  129. package/dist/components/formStore/table/generateColumns.d.ts +24 -24
  130. package/dist/components/formStore/table/generateColumns.js +290 -290
  131. package/dist/components/formStore/table/index.d.ts +17 -0
  132. package/dist/components/formStore/table/index.js +194 -0
  133. package/dist/components/formStore/table/index.js.map +1 -0
  134. package/dist/components/formStore/table/useFormStoreTable.d.ts +52 -52
  135. package/dist/components/formStore/table/useFormStoreTable.js +157 -157
  136. package/dist/components/formStore/useFormStoreTableContext.d.ts +44 -44
  137. package/dist/components/formStore/useFormStoreTableContext.js +9 -9
  138. package/dist/components/messages/ErrorMessage.d.ts +12 -12
  139. package/dist/components/messages/ErrorMessage.js +12 -12
  140. package/dist/components/messages/LargeIconMessage.d.ts +18 -18
  141. package/dist/components/messages/LargeIconMessage.js +33 -33
  142. package/dist/components/messages/NoResourcesYet.d.ts +11 -11
  143. package/dist/components/messages/NoResourcesYet.js +6 -6
  144. package/dist/components/pickers/V4CompatibleDatePicker.d.ts +32 -32
  145. package/dist/components/pickers/V4CompatibleDatePicker.js +70 -70
  146. package/dist/components/pickers/V4CompatibleDateTimePicker.d.ts +32 -32
  147. package/dist/components/pickers/V4CompatibleDateTimePicker.js +70 -70
  148. package/dist/components/pickers/V4CompatibleTimePicker.d.ts +28 -28
  149. package/dist/components/pickers/V4CompatibleTimePicker.js +53 -53
  150. package/dist/components/renderer/AnnotationModal.d.ts +8 -8
  151. package/dist/components/renderer/AnnotationModal.js +101 -101
  152. package/dist/components/renderer/AutocompleteDropdown.d.ts +26 -26
  153. package/dist/components/renderer/AutocompleteDropdown.js +175 -175
  154. package/dist/components/renderer/CopyToClipboardButton.d.ts +8 -8
  155. package/dist/components/renderer/CopyToClipboardButton.js +13 -13
  156. package/dist/components/renderer/CustomisableButtonInner.d.ts +7 -7
  157. package/dist/components/renderer/CustomisableButtonInner.js +8 -8
  158. package/dist/components/renderer/FormElementLabelContainer.d.ts +12 -12
  159. package/dist/components/renderer/FormElementLabelContainer.js +15 -15
  160. package/dist/components/renderer/FormElementOptions.d.ts +9 -9
  161. package/dist/components/renderer/FormElementOptions.js +14 -14
  162. package/dist/components/renderer/LookupButton.d.ts +10 -10
  163. package/dist/components/renderer/LookupButton.js +29 -29
  164. package/dist/components/renderer/LookupNotification.d.ts +12 -12
  165. package/dist/components/renderer/LookupNotification.js +230 -230
  166. package/dist/components/renderer/Modal.d.ts +14 -14
  167. package/dist/components/renderer/Modal.js +14 -14
  168. package/dist/components/renderer/OnLoading.d.ts +10 -10
  169. package/dist/components/renderer/OnLoading.js +11 -11
  170. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.d.ts +7 -7
  171. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +12 -12
  172. package/dist/components/renderer/OneBlinkFormElements.d.ts +19 -19
  173. package/dist/components/renderer/OneBlinkFormElements.js +202 -202
  174. package/dist/components/renderer/PageFormElements.d.ts +17 -17
  175. package/dist/components/renderer/PageFormElements.js +48 -48
  176. package/dist/components/renderer/ProgressBar.d.ts +7 -0
  177. package/dist/components/renderer/ProgressBar.js +7 -0
  178. package/dist/components/renderer/ProgressBar.js.map +1 -0
  179. package/dist/components/renderer/ToggleAllCheckbox.d.ts +13 -13
  180. package/dist/components/renderer/ToggleAllCheckbox.js +26 -26
  181. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +10 -10
  182. package/dist/components/renderer/attachments/AttachmentStatus.js +36 -30
  183. package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
  184. package/dist/components/renderer/attachments/FileCard.d.ts +19 -18
  185. package/dist/components/renderer/attachments/FileCard.js +60 -57
  186. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  187. package/dist/components/renderer/attachments/FileCardContent.d.ts +5 -5
  188. package/dist/components/renderer/attachments/FileCardContent.js +10 -10
  189. package/dist/components/renderer/attachments/Files.d.ts +14 -0
  190. package/dist/components/renderer/attachments/Files.js +27 -0
  191. package/dist/components/renderer/attachments/Files.js.map +1 -0
  192. package/dist/components/renderer/attachments/ImagePreviewUnavailable.d.ts +4 -4
  193. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +11 -11
  194. package/dist/components/renderer/attachments/ProgressBar.d.ts +8 -0
  195. package/dist/components/renderer/attachments/ProgressBar.js +34 -0
  196. package/dist/components/renderer/attachments/ProgressBar.js.map +1 -0
  197. package/dist/components/renderer/attachments/UploadingAttachment.d.ts +4 -4
  198. package/dist/components/renderer/attachments/UploadingAttachment.js +12 -12
  199. package/dist/form-elements/ComplianceButton.d.ts +10 -10
  200. package/dist/form-elements/ComplianceButton.js +11 -11
  201. package/dist/form-elements/FormElementABN.d.ts +14 -14
  202. package/dist/form-elements/FormElementABN.js +155 -155
  203. package/dist/form-elements/FormElementAutocomplete.d.ts +19 -19
  204. package/dist/form-elements/FormElementAutocomplete.js +81 -81
  205. package/dist/form-elements/FormElementBSB.d.ts +18 -18
  206. package/dist/form-elements/FormElementBSB.js +100 -100
  207. package/dist/form-elements/FormElementBarcodeScanner.d.ts +14 -14
  208. package/dist/form-elements/FormElementBarcodeScanner.js +306 -306
  209. package/dist/form-elements/FormElementBoolean.d.ts +14 -14
  210. package/dist/form-elements/FormElementBoolean.js +16 -16
  211. package/dist/form-elements/FormElementCalculation.d.ts +11 -11
  212. package/dist/form-elements/FormElementCalculation.js +179 -179
  213. package/dist/form-elements/FormElementCamera.d.ts +15 -15
  214. package/dist/form-elements/FormElementCamera.js +227 -220
  215. package/dist/form-elements/FormElementCamera.js.map +1 -1
  216. package/dist/form-elements/FormElementCaptcha.d.ts +12 -12
  217. package/dist/form-elements/FormElementCaptcha.js +14 -14
  218. package/dist/form-elements/FormElementCheckBoxes.d.ts +15 -15
  219. package/dist/form-elements/FormElementCheckBoxes.js +64 -64
  220. package/dist/form-elements/FormElementCivicaNameRecord.d.ts +8 -8
  221. package/dist/form-elements/FormElementCivicaNameRecord.js +51 -51
  222. package/dist/form-elements/FormElementCivicaStreetName.d.ts +15 -15
  223. package/dist/form-elements/FormElementCivicaStreetName.js +38 -38
  224. package/dist/form-elements/FormElementCompliance.d.ts +22 -22
  225. package/dist/form-elements/FormElementCompliance.js +129 -129
  226. package/dist/form-elements/FormElementDate.d.ts +14 -14
  227. package/dist/form-elements/FormElementDate.js +74 -74
  228. package/dist/form-elements/FormElementDateTime.d.ts +14 -14
  229. package/dist/form-elements/FormElementDateTime.js +67 -67
  230. package/dist/form-elements/FormElementEmail.d.ts +14 -14
  231. package/dist/form-elements/FormElementEmail.js +22 -22
  232. package/dist/form-elements/FormElementFile.d.ts +13 -13
  233. package/dist/form-elements/FormElementFile.js +31 -31
  234. package/dist/form-elements/FormElementFile.js.map +1 -1
  235. package/dist/form-elements/FormElementFiles/FormElementFile.d.ts +13 -0
  236. package/dist/form-elements/FormElementFiles/FormElementFile.js +32 -0
  237. package/dist/form-elements/FormElementFiles/FormElementFile.js.map +1 -0
  238. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.d.ts +10 -0
  239. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js +11 -0
  240. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js.map +1 -0
  241. package/dist/form-elements/FormElementFiles/FormElementFiles.d.ts +15 -0
  242. package/dist/form-elements/FormElementFiles/FormElementFiles.js +17 -0
  243. package/dist/form-elements/FormElementFiles/FormElementFiles.js.map +1 -0
  244. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.d.ts +7 -0
  245. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js +11 -0
  246. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js.map +1 -0
  247. package/dist/form-elements/FormElementFiles/index.d.ts +17 -0
  248. package/dist/form-elements/FormElementFiles/index.js +18 -0
  249. package/dist/form-elements/FormElementFiles/index.js.map +1 -0
  250. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.d.ts +18 -0
  251. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js +61 -0
  252. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js.map +1 -0
  253. package/dist/form-elements/FormElementFiles.d.ts +15 -15
  254. package/dist/form-elements/FormElementFiles.js +42 -42
  255. package/dist/form-elements/FormElementForm.d.ts +17 -17
  256. package/dist/form-elements/FormElementForm.js +63 -63
  257. package/dist/form-elements/FormElementFreshdeskDependentField.d.ts +8 -8
  258. package/dist/form-elements/FormElementFreshdeskDependentField.js +15 -15
  259. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +15 -15
  260. package/dist/form-elements/FormElementGeoscapeAddress.js +62 -62
  261. package/dist/form-elements/FormElementHTML.d.ts +8 -8
  262. package/dist/form-elements/FormElementHTML.js +15 -15
  263. package/dist/form-elements/FormElementHeading.d.ts +8 -8
  264. package/dist/form-elements/FormElementHeading.js +23 -23
  265. package/dist/form-elements/FormElementImage.d.ts +8 -8
  266. package/dist/form-elements/FormElementImage.js +6 -6
  267. package/dist/form-elements/FormElementLocation.d.ts +20 -20
  268. package/dist/form-elements/FormElementLocation.js +204 -204
  269. package/dist/form-elements/FormElementNumber.d.ts +14 -14
  270. package/dist/form-elements/FormElementNumber.js +72 -72
  271. package/dist/form-elements/FormElementPointAddress.d.ts +15 -15
  272. package/dist/form-elements/FormElementPointAddress.js +69 -69
  273. package/dist/form-elements/FormElementRadio.d.ts +15 -15
  274. package/dist/form-elements/FormElementRadio.js +41 -41
  275. package/dist/form-elements/FormElementRepeatableSet.d.ts +19 -19
  276. package/dist/form-elements/FormElementRepeatableSet.js +126 -126
  277. package/dist/form-elements/FormElementSection.d.ts +8 -8
  278. package/dist/form-elements/FormElementSection.js +69 -69
  279. package/dist/form-elements/FormElementSelect.d.ts +15 -15
  280. package/dist/form-elements/FormElementSelect.js +44 -44
  281. package/dist/form-elements/FormElementSignature.d.ts +15 -15
  282. package/dist/form-elements/FormElementSignature.js +138 -135
  283. package/dist/form-elements/FormElementSignature.js.map +1 -1
  284. package/dist/form-elements/FormElementSummary.d.ts +11 -11
  285. package/dist/form-elements/FormElementSummary.js +159 -159
  286. package/dist/form-elements/FormElementTelephone.d.ts +14 -14
  287. package/dist/form-elements/FormElementTelephone.js +22 -22
  288. package/dist/form-elements/FormElementText.d.ts +14 -14
  289. package/dist/form-elements/FormElementText.js +29 -29
  290. package/dist/form-elements/FormElementTextarea.d.ts +14 -14
  291. package/dist/form-elements/FormElementTextarea.js +30 -30
  292. package/dist/form-elements/FormElementTime.d.ts +14 -14
  293. package/dist/form-elements/FormElementTime.js +53 -53
  294. package/dist/form-elements/OptionButton.d.ts +11 -11
  295. package/dist/form-elements/OptionButton.js +9 -9
  296. package/dist/hooks/attachments/useAttachment.d.ts +12 -11
  297. package/dist/hooks/attachments/useAttachment.js +242 -235
  298. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  299. package/dist/hooks/attachments/useAttachmentBlobs.d.ts +19 -19
  300. package/dist/hooks/attachments/useAttachmentBlobs.js +23 -23
  301. package/dist/hooks/attachments/useAttachmentObjectURLs.d.ts +24 -0
  302. package/dist/hooks/attachments/useAttachmentObjectURLs.js +37 -0
  303. package/dist/hooks/attachments/useAttachmentObjectURLs.js.map +1 -0
  304. package/dist/hooks/attachments/useAttachments.d.ts +10 -10
  305. package/dist/hooks/attachments/useAttachments.js +69 -69
  306. package/dist/hooks/attachments/useLocalAttachmentBlobs.d.ts +24 -0
  307. package/dist/hooks/attachments/useLocalAttachmentBlobs.js +40 -0
  308. package/dist/hooks/attachments/useLocalAttachmentBlobs.js.map +1 -0
  309. package/dist/hooks/useAbnLookupAuthenticationGuid.d.ts +3 -3
  310. package/dist/hooks/useAbnLookupAuthenticationGuid.js +5 -5
  311. package/dist/hooks/useAuth.d.ts +15 -15
  312. package/dist/hooks/useAuth.js +42 -42
  313. package/dist/hooks/useBooleanState.d.ts +5 -5
  314. package/dist/hooks/useBooleanState.js +8 -8
  315. package/dist/hooks/useButtonsConfiguration.d.ts +45 -0
  316. package/dist/hooks/useButtonsConfiguration.js +6 -0
  317. package/dist/hooks/useButtonsConfiguration.js.map +1 -0
  318. package/dist/hooks/useCaptchaSiteKey.d.ts +3 -3
  319. package/dist/hooks/useCaptchaSiteKey.js +5 -5
  320. package/dist/hooks/useChangeEffect.d.ts +1 -0
  321. package/dist/hooks/useChangeEffect.js +14 -0
  322. package/dist/hooks/useChangeEffect.js.map +1 -0
  323. package/dist/hooks/useClickOutsideElement.d.ts +3 -3
  324. package/dist/hooks/useClickOutsideElement.js +14 -14
  325. package/dist/hooks/useConditionalLogic.d.ts +6 -6
  326. package/dist/hooks/useConditionalLogic.js +22 -22
  327. package/dist/hooks/useConditionallyShowOptionCallback.d.ts +5 -0
  328. package/dist/hooks/useConditionallyShowOptionCallback.js +20 -0
  329. package/dist/hooks/useConditionallyShowOptionCallback.js.map +1 -0
  330. package/dist/hooks/useContrastColor.d.ts +2 -2
  331. package/dist/hooks/useContrastColor.js +12 -12
  332. package/dist/hooks/useCustomValidation.d.ts +1 -0
  333. package/dist/hooks/useCustomValidation.js +9 -0
  334. package/dist/hooks/useCustomValidation.js.map +1 -0
  335. package/dist/hooks/useDynamicOptionsLoaderEffect.d.ts +7 -0
  336. package/dist/hooks/useDynamicOptionsLoaderEffect.js +45 -0
  337. package/dist/hooks/useDynamicOptionsLoaderEffect.js.map +1 -0
  338. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +7 -7
  339. package/dist/hooks/useDynamicOptionsLoaderState.js +44 -44
  340. package/dist/hooks/useExecutedLookupCallback.d.ts +12 -12
  341. package/dist/hooks/useExecutedLookupCallback.js +15 -15
  342. package/dist/hooks/useFlatpickr.d.ts +10 -10
  343. package/dist/hooks/useFlatpickr.js +73 -73
  344. package/dist/hooks/useFlatpickrGuid.d.ts +7 -7
  345. package/dist/hooks/useFlatpickrGuid.js +11 -11
  346. package/dist/hooks/useFlattenElementsContext.d.ts +2 -2
  347. package/dist/hooks/useFlattenElementsContext.js +7 -7
  348. package/dist/hooks/useFormDefinition.d.ts +4 -4
  349. package/dist/hooks/useFormDefinition.js +9 -9
  350. package/dist/hooks/useFormElementOptions.d.ts +9 -9
  351. package/dist/hooks/useFormElementOptions.js +35 -35
  352. package/dist/hooks/useFormIsReadOnly.d.ts +3 -3
  353. package/dist/hooks/useFormIsReadOnly.js +5 -5
  354. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +24 -24
  355. package/dist/hooks/useFormSubmissionAutoSaveState.js +145 -145
  356. package/dist/hooks/useFormSubmissionModelContext.d.ts +15 -15
  357. package/dist/hooks/useFormSubmissionModelContext.js +32 -32
  358. package/dist/hooks/useFormSubmissionState.d.ts +10 -10
  359. package/dist/hooks/useFormSubmissionState.js +13 -13
  360. package/dist/hooks/useFormValidation.d.ts +7 -7
  361. package/dist/hooks/useFormValidation.js +29 -29
  362. package/dist/hooks/useGoogleMapsApiKey.d.ts +3 -3
  363. package/dist/hooks/useGoogleMapsApiKey.js +5 -5
  364. package/dist/hooks/useInfiniteScrollDataLoad.d.ts +30 -30
  365. package/dist/hooks/useInfiniteScrollDataLoad.js +124 -124
  366. package/dist/hooks/useInjectPages.d.ts +7 -7
  367. package/dist/hooks/useInjectPages.js +5 -5
  368. package/dist/hooks/useIsHovering.d.ts +5 -5
  369. package/dist/hooks/useIsHovering.js +12 -12
  370. package/dist/hooks/useIsMounted.d.ts +3 -3
  371. package/dist/hooks/useIsMounted.js +11 -11
  372. package/dist/hooks/useIsOffline.d.ts +6 -6
  373. package/dist/hooks/useIsOffline.js +26 -26
  374. package/dist/hooks/useIsPageVisible.d.ts +9 -9
  375. package/dist/hooks/useIsPageVisible.js +8 -8
  376. package/dist/hooks/useLegacyElements.d.ts +16 -0
  377. package/dist/hooks/useLegacyElements.js +55 -0
  378. package/dist/hooks/useLegacyElements.js.map +1 -0
  379. package/dist/hooks/useLoadDataState.d.ts +15 -15
  380. package/dist/hooks/useLoadDataState.js +54 -54
  381. package/dist/hooks/useLogin.d.ts +46 -46
  382. package/dist/hooks/useLogin.js +295 -295
  383. package/dist/hooks/useLookupNotification.d.ts +9 -9
  384. package/dist/hooks/useLookupNotification.js +10 -10
  385. package/dist/hooks/useLookups.d.ts +5 -5
  386. package/dist/hooks/useLookups.js +62 -62
  387. package/dist/hooks/useNullableState.d.ts +2 -2
  388. package/dist/hooks/useNullableState.js +6 -6
  389. package/dist/hooks/usePages.d.ts +24 -24
  390. package/dist/hooks/usePages.js +141 -141
  391. package/dist/hooks/useQuery.d.ts +2 -2
  392. package/dist/hooks/useQuery.js +7 -7
  393. package/dist/hooks/useSubmissionIdIsValid.d.ts +3 -3
  394. package/dist/hooks/useSubmissionIdIsValid.js +19 -19
  395. package/dist/hooks/useToggleAll.d.ts +6 -0
  396. package/dist/hooks/useToggleAll.js +24 -0
  397. package/dist/hooks/useToggleAll.js.map +1 -0
  398. package/dist/hooks/useToggleComplianceChildren.d.ts +3 -3
  399. package/dist/hooks/useToggleComplianceChildren.js +13 -13
  400. package/dist/index.d.ts +23 -22
  401. package/dist/index.js +23 -22
  402. package/dist/index.js.map +1 -1
  403. package/dist/services/attachments.d.ts +10 -10
  404. package/dist/services/attachments.js +72 -72
  405. package/dist/services/barcode-readers/quagger.d.ts +1 -1
  406. package/dist/services/barcode-readers/quagger.js +34 -34
  407. package/dist/services/blob-utils.d.ts +5 -5
  408. package/dist/services/blob-utils.js +73 -73
  409. package/dist/services/checkBsbsAreInvalid.d.ts +3 -3
  410. package/dist/services/checkBsbsAreInvalid.js +40 -40
  411. package/dist/services/checkIfAttachmentsAreUploading.d.ts +3 -3
  412. package/dist/services/checkIfAttachmentsAreUploading.js +57 -57
  413. package/dist/services/checkIfAttachmentsExist.d.ts +5 -5
  414. package/dist/services/checkIfAttachmentsExist.js +144 -144
  415. package/dist/services/checkIfBsbsAreValidating.d.ts +3 -3
  416. package/dist/services/checkIfBsbsAreValidating.js +40 -40
  417. package/dist/services/clean-form-elements-ctrl-model.d.ts +4 -0
  418. package/dist/services/clean-form-elements-ctrl-model.js +166 -0
  419. package/dist/services/clean-form-elements-ctrl-model.js.map +1 -0
  420. package/dist/services/cleanFormSubmissionModel.d.ts +6 -6
  421. package/dist/services/cleanFormSubmissionModel.js +203 -203
  422. package/dist/services/conditionally-show-element.d.ts +11 -0
  423. package/dist/services/conditionally-show-element.js +92 -0
  424. package/dist/services/conditionally-show-element.js.map +1 -0
  425. package/dist/services/conditionally-show-option.d.ts +3 -0
  426. package/dist/services/conditionally-show-option.js +135 -0
  427. package/dist/services/conditionally-show-option.js.map +1 -0
  428. package/dist/services/defaultCoordinates.d.ts +5 -5
  429. package/dist/services/defaultCoordinates.js +8 -8
  430. package/dist/services/download-file.d.ts +3 -3
  431. package/dist/services/download-file.js +90 -90
  432. package/dist/services/drawTimestampOnCanvas.d.ts +1 -1
  433. package/dist/services/drawTimestampOnCanvas.js +22 -22
  434. package/dist/services/flattenFormElements.d.ts +2 -0
  435. package/dist/services/flattenFormElements.js +13 -0
  436. package/dist/services/flattenFormElements.js.map +1 -0
  437. package/dist/services/form-validation.d.ts +10 -10
  438. package/dist/services/form-validation.js +561 -561
  439. package/dist/services/generate-default-data.d.ts +13 -13
  440. package/dist/services/generate-default-data.js +494 -494
  441. package/dist/services/generateCivicaNameRecordElements.d.ts +2 -2
  442. package/dist/services/generateCivicaNameRecordElements.js +140 -140
  443. package/dist/services/generateFreshdeskDependentFieldElements.d.ts +2 -2
  444. package/dist/services/generateFreshdeskDependentFieldElements.js +69 -69
  445. package/dist/services/getCorrectDateFromDateOnlyString.d.ts +2 -0
  446. package/dist/services/getCorrectDateFromDateOnlyString.js +4 -0
  447. package/dist/services/getCorrectDateFromDateOnlyString.js.map +1 -0
  448. package/dist/services/sanitize-html.d.ts +2 -2
  449. package/dist/services/sanitize-html.js +20 -20
  450. package/dist/services/scrolling-service.d.ts +7 -7
  451. package/dist/services/scrolling-service.js +38 -38
  452. package/dist/services/utils-service.d.ts +5 -5
  453. package/dist/services/utils-service.js +16 -16
  454. package/dist/styles/boolean.scss +12 -0
  455. package/dist/styles/ob-file.scss +63 -0
  456. package/dist/styles/progress.scss +8 -0
  457. package/dist/styles.css +7 -0
  458. package/dist/styles.css.map +1 -1
  459. package/dist/styles.scss +1 -0
  460. package/dist/types/attachments.d.ts +19 -19
  461. package/dist/types/attachments.js +1 -1
  462. package/dist/types/form.d.ts +40 -40
  463. package/dist/types/form.js +2 -2
  464. package/package.json +2 -2
@@ -1,307 +1,307 @@
1
- import * as React from 'react';
2
- import clsx from 'clsx';
3
- import jsQR from 'jsqr';
4
- import OnLoading from '../components/renderer/OnLoading';
5
- import CopyToClipboardButton from '../components/renderer/CopyToClipboardButton';
6
- import quaggaReader from '../services/barcode-readers/quagger.js';
7
- import useBooleanState from '../hooks/useBooleanState';
8
- import LookupButton from '../components/renderer/LookupButton';
9
- import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
10
- import { Sentry } from '@oneblink/apps';
11
- import useLookupNotification from '../hooks/useLookupNotification';
12
- const MS_BETWEEN_IMAGE_PROCESSING = 10;
13
- const fadedSquareWidthInPixels = 200;
14
- const fadedSquareHeightInPixels = 150;
15
- const redLineHeightInPixels = 1;
16
- function FormElementBarcodeScanner({ id, element, value, onChange, validationMessage, displayValidationMessage, }) {
17
- const [isDirty, setIsDirty] = useBooleanState(false);
18
- const [isCameraOpen, startBarcodeScanner, stopBarcodeScanner] = useBooleanState(false);
19
- const [error, setError] = React.useState(null);
20
- const { onLookup } = useLookupNotification();
21
- const handleScan = React.useCallback((newValue) => {
22
- setIsDirty();
23
- onChange(element, newValue);
24
- stopBarcodeScanner();
25
- onLookup(newValue);
26
- }, [element, onChange, onLookup, setIsDirty, stopBarcodeScanner]);
27
- const openBarcodeScanner = React.useCallback(() => {
28
- if (window.cordova) {
29
- setError(null);
30
- // @ts-expect-error ???
31
- window.cordova.plugins.barcodeScanner.scan(
32
- // @ts-expect-error ???
33
- (result) => {
34
- if (!result.cancelled) {
35
- handleScan(result.text);
36
- }
37
- },
38
- // @ts-expect-error ???
39
- (error) => {
40
- setError(new Error(`An error has occurred: "${error}". Please click "Cancel" below to try again. If the problem persists, please contact support.`));
41
- }, {
42
- showFlipCameraButton: true,
43
- showTorchButton: true,
44
- });
45
- }
46
- else {
47
- startBarcodeScanner();
48
- }
49
- }, [handleScan, startBarcodeScanner]);
50
- const text = typeof value === 'string' ? value : '';
51
- return (React.createElement("div", { className: "cypress-barcode-scanner-element" },
52
- React.createElement(FormElementLabelContainer, { className: "ob-barcode-scanner", element: element, id: id, required: element.required },
53
- error && (React.createElement("figure", { className: "ob-figure" },
54
- React.createElement("div", { className: "figure-content has-text-centered" },
55
- React.createElement("div", null,
56
- React.createElement("h4", { className: "title is-4" }, "Whoops..."),
57
- React.createElement("p", null, error.message))))),
58
- isCameraOpen ? (React.createElement(BarcodeScanner, { element: element, onScan: handleScan, onClose: stopBarcodeScanner })) : (React.createElement("div", null,
59
- React.createElement("div", { className: "field has-addons" },
60
- React.createElement("div", { className: "control is-expanded has-icons-right" },
61
- React.createElement("input", { type: "text", placeholder: element.placeholderValue, id: id, name: element.name, className: "input ob-input cypress-barcode-scanner-control has-margin-bottom-8", value: text, onChange: (e) => onChange(element, e.target.value || undefined), required: element.required, disabled: element.readOnly, onBlur: setIsDirty }),
62
- React.createElement("span", { className: "ob-input-icon icon is-small is-right" },
63
- React.createElement("i", { className: "material-icons is-size-5" }, "document_scanner"))),
64
- !!element.readOnly && !!value && (React.createElement("div", { className: "control" },
65
- React.createElement(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }))),
66
- React.createElement(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage })),
67
- React.createElement("button", { type: "button", className: "button ob-button ob-button__open is-primary cypress-start-scan-barcode-button", disabled: element.readOnly, onClick: openBarcodeScanner }, "Scan Barcode"))),
68
- (isDirty || displayValidationMessage) && !!validationMessage && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
69
- React.createElement("div", { className: "has-text-danger ob-error__text cypress-validation-message" }, validationMessage))))));
70
- }
71
- export default React.memo(FormElementBarcodeScanner);
72
- function BarcodeScanner({ element, onScan, onClose }) {
73
- const videoElementRef = React.useRef(null);
74
- const figureElementRef = React.useRef(null);
75
- const [{ isLoading = false, selectedDeviceId, error }, setState] = React.useState({
76
- isLoading: true,
77
- selectedDeviceId: undefined,
78
- error: undefined,
79
- });
80
- const [camera, setCamera] = React.useState(null);
81
- const setError = React.useCallback((error) => {
82
- setState({
83
- error,
84
- isLoading: false,
85
- selectedDeviceId: undefined,
86
- });
87
- }, []);
88
- // Create timeout using $timeout outside of the scan function so
89
- // so that we can cancel it when navigating away from screen
90
- const scanImageForBarcode = React.useCallback((videoElement, waitInMS, options, checkStop) => {
91
- const restrictedBarcodeTypes = element.restrictedBarcodeTypes || [];
92
- // Using $timeout here instead of $interval as we dont know
93
- // exactly how long each processing of the image will take.
94
- setTimeout(async () => {
95
- if (checkStop())
96
- return;
97
- const canvasElement = document.createElement('canvas');
98
- canvasElement.width = options.sourceWidth;
99
- canvasElement.height = options.sourceHeight;
100
- const canvasContext = canvasElement.getContext('2d');
101
- if (canvasContext) {
102
- canvasContext.drawImage(videoElement, options.sourceX, options.sourceY, canvasElement.width, canvasElement.height, 0, 0, canvasElement.width, canvasElement.height);
103
- if (!element.restrictBarcodeTypes ||
104
- (element.restrictedBarcodeTypes || []).indexOf('qr_reader') > -1) {
105
- const imageData = canvasContext.getImageData(0, 0, canvasElement.width, canvasElement.height);
106
- const code = jsQR(imageData.data, imageData.width, imageData.height, {
107
- inversionAttempts: 'dontInvert',
108
- });
109
- if (code) {
110
- return onScan(code.data);
111
- }
112
- }
113
- }
114
- if (!element.restrictBarcodeTypes ||
115
- !(restrictedBarcodeTypes.length === 1 &&
116
- restrictedBarcodeTypes[0] === 'qr_reader')) {
117
- const base64Image = canvasElement.toDataURL('image/png');
118
- const quaggaResult = await quaggaReader(base64Image, restrictedBarcodeTypes);
119
- if (quaggaResult) {
120
- return onScan(quaggaResult);
121
- }
122
- }
123
- if (checkStop())
124
- return;
125
- scanImageForBarcode(videoElement, MS_BETWEEN_IMAGE_PROCESSING, options, checkStop);
126
- }, waitInMS);
127
- }, [element.restrictBarcodeTypes, element.restrictedBarcodeTypes, onScan]);
128
- const switchCamera = React.useCallback(() => {
129
- if (!camera) {
130
- return;
131
- }
132
- // We will just be rotating between the available camera.
133
- const nextDeviceIndex = camera.availableDevices.findIndex((mediaDeviceInfo) => mediaDeviceInfo.deviceId === camera.activeDeviceId) + 1;
134
- const nextDevice = camera.availableDevices[nextDeviceIndex] || camera.availableDevices[0];
135
- setState({
136
- error: undefined,
137
- isLoading: true,
138
- selectedDeviceId: nextDevice.deviceId,
139
- });
140
- }, [camera]);
141
- React.useEffect(() => {
142
- if (!videoElementRef.current) {
143
- return;
144
- }
145
- const newCamera = new HTML5Camera(videoElementRef.current);
146
- setCamera(newCamera);
147
- return () => {
148
- newCamera.close();
149
- };
150
- }, []);
151
- React.useEffect(() => {
152
- if (!camera ||
153
- error ||
154
- // If attempting to open the device that is currently open,
155
- // we will not attempt to open again.
156
- (selectedDeviceId && camera.activeDeviceId === selectedDeviceId)) {
157
- return;
158
- }
159
- let ignore = false;
160
- (async () => {
161
- try {
162
- const videoElement = videoElementRef.current;
163
- const figureElement = figureElementRef.current;
164
- if (!videoElement || !figureElement) {
165
- return;
166
- }
167
- console.log('Opening camera with:', selectedDeviceId || 'UNKNOWN');
168
- await camera.open(selectedDeviceId);
169
- if (ignore) {
170
- return;
171
- }
172
- setState({
173
- error: undefined,
174
- isLoading: false,
175
- selectedDeviceId,
176
- });
177
- // @ts-expect-error ???
178
- const fadedSquareElement = figureElement.getElementsByClassName('ob-barcode-scanner__square')[0];
179
- // @ts-expect-error ???
180
- const redLineElement = figureElement.getElementsByClassName('ob-barcode-scanner__line')[0];
181
- console.log('videoElement Width pixels', videoElement.clientWidth);
182
- console.log('videoElement Height pixels', videoElement.clientHeight);
183
- console.log('videoElement Width', videoElement.videoWidth);
184
- console.log('videoElement Height', videoElement.videoHeight);
185
- // Faded Square needs its values set in pixels
186
- const fadedSquareLeftInPixels = (videoElement.clientWidth - fadedSquareWidthInPixels) / 2;
187
- console.log('fadedSquareLeftInPixels', fadedSquareLeftInPixels);
188
- const fadedSquareTopInPixels = (videoElement.clientHeight - fadedSquareHeightInPixels) / 2;
189
- console.log('fadedSquareTopInPixels', fadedSquareTopInPixels);
190
- fadedSquareElement.style.borderBottom = `${fadedSquareTopInPixels}px`;
191
- fadedSquareElement.style.borderTop = `${fadedSquareTopInPixels}px`;
192
- fadedSquareElement.style.borderLeft = `${fadedSquareLeftInPixels}px`;
193
- fadedSquareElement.style.borderRight = `${fadedSquareLeftInPixels}px`;
194
- fadedSquareElement.style.borderColor = 'rgba(0, 0, 0, 0.25)';
195
- fadedSquareElement.style.borderStyle = 'solid';
196
- redLineElement.style.height = `${redLineHeightInPixels}px`;
197
- redLineElement.style.top = `${(videoElement.clientHeight - redLineHeightInPixels) / 2}px`;
198
- redLineElement.style.left = `${fadedSquareLeftInPixels}px`;
199
- redLineElement.style.right = `${fadedSquareLeftInPixels}px`;
200
- // Need to calculate the actual width, which is not in pixels
201
- const ratio = videoElement.videoWidth / videoElement.clientWidth;
202
- console.log('pixel to video Ratio', ratio);
203
- const left = ratio * fadedSquareLeftInPixels;
204
- console.log('left in video measurement', left);
205
- const top = ratio * fadedSquareTopInPixels;
206
- console.log('top in video measurement', top);
207
- const fadedSquareWidth = fadedSquareWidthInPixels * ratio;
208
- console.log('red square in video measurement', fadedSquareWidth);
209
- // Wait a little before scanning the first image
210
- // to prevent image processing staring before
211
- // camera is ready.
212
- scanImageForBarcode(videoElement, 250, {
213
- sourceX: left,
214
- sourceY: top,
215
- sourceWidth: fadedSquareWidth,
216
- sourceHeight: fadedSquareWidth,
217
- }, () => ignore);
218
- }
219
- catch (error) {
220
- if (ignore) {
221
- return;
222
- }
223
- console.warn('Error while attempting to open camera', error);
224
- Sentry.captureException(error);
225
- switch (error.name) {
226
- case 'NotSupportedError': {
227
- setError(new Error('Your browser does not support accessing your camera. Please click "Cancel" below and type in the barcode value manually.'));
228
- break;
229
- }
230
- case 'NotAllowedError': {
231
- setError(new Error('Cannot scan for barcodes without granting the application access to the camera. Please click "Cancel" below to try again.'));
232
- break;
233
- }
234
- default: {
235
- setError(new Error('An unknown error has occurred, please click "Cancel" below to try again. If the problem persists, please contact support.'));
236
- }
237
- }
238
- }
239
- })();
240
- return () => {
241
- ignore = true;
242
- };
243
- }, [camera, error, scanImageForBarcode, selectedDeviceId, setError]);
244
- return (React.createElement("div", null,
245
- React.createElement("figure", { className: "ob-figure", ref: figureElementRef },
246
- React.createElement("div", { className: "figure-content has-text-centered" },
247
- isLoading && React.createElement(OnLoading, { small: true }),
248
- !!error && (React.createElement("div", null,
249
- React.createElement("h4", { className: "title is-4" }, "Whoops..."),
250
- React.createElement("p", null, error.message))),
251
- React.createElement("div", { className: clsx('is-relative', {
252
- 'is-hidden': isLoading || error,
253
- }) },
254
- React.createElement("div", { className: "ob-barcode-scanner__square" }),
255
- React.createElement("div", { className: "ob-barcode-scanner__line" }),
256
- React.createElement("video", { ref: videoElementRef, autoPlay: true, playsInline: true, className: "ob-barcode-scanner__video" })))),
257
- React.createElement("div", { className: "buttons ob-buttons" },
258
- React.createElement("button", { type: "button", className: "button ob-button ob-button__cancel is-light cypress-cancel-scan-barcode-button", onClick: onClose }, "Cancel"),
259
- ((camera === null || camera === void 0 ? void 0 : camera.availableDevices.length) || 1) > 1 && (React.createElement("button", { type: "button", className: "button ob-button ob-button__switch-camera is-primary cypress-switch-camera-button", onClick: switchCamera }, "Switch Camera")))));
260
- }
261
- class HTML5Camera {
262
- constructor(htmlVideoElement) {
263
- this.htmlVideoElement = htmlVideoElement;
264
- this.availableDevices = [];
265
- this.mediaStream = undefined;
266
- }
267
- get activeDeviceId() {
268
- var _a;
269
- if (this.mediaStream) {
270
- const [activeMediaStreamTrack] = this.mediaStream.getTracks();
271
- return (_a = activeMediaStreamTrack === null || activeMediaStreamTrack === void 0 ? void 0 : activeMediaStreamTrack.getSettings()) === null || _a === void 0 ? void 0 : _a.deviceId;
272
- }
273
- }
274
- async open(deviceId) {
275
- if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
276
- const error = new Error();
277
- error.name = 'NotSupportedError';
278
- throw error;
279
- }
280
- this.close();
281
- const constraints = {
282
- video: {
283
- facingMode: deviceId ? undefined : 'environment',
284
- deviceId: deviceId ? { exact: deviceId } : undefined,
285
- },
286
- };
287
- const mediaStream = await navigator.mediaDevices.getUserMedia(constraints);
288
- this.mediaStream = mediaStream;
289
- this.htmlVideoElement.srcObject = mediaStream;
290
- if (!this.availableDevices.length) {
291
- const availableDevices = await navigator.mediaDevices.enumerateDevices();
292
- this.availableDevices = availableDevices.filter((mediaDeviceInfo) => mediaDeviceInfo.kind === 'videoinput' && !!mediaDeviceInfo.deviceId);
293
- }
294
- await new Promise((resolve) => this.htmlVideoElement.addEventListener('canplay', resolve, {
295
- once: true,
296
- }));
297
- }
298
- close() {
299
- if (this.mediaStream) {
300
- this.mediaStream.getTracks().forEach((track) => {
301
- track.stop();
302
- });
303
- this.mediaStream = undefined;
304
- }
305
- }
306
- }
1
+ import * as React from 'react';
2
+ import clsx from 'clsx';
3
+ import jsQR from 'jsqr';
4
+ import OnLoading from '../components/renderer/OnLoading';
5
+ import CopyToClipboardButton from '../components/renderer/CopyToClipboardButton';
6
+ import quaggaReader from '../services/barcode-readers/quagger.js';
7
+ import useBooleanState from '../hooks/useBooleanState';
8
+ import LookupButton from '../components/renderer/LookupButton';
9
+ import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
10
+ import { Sentry } from '@oneblink/apps';
11
+ import useLookupNotification from '../hooks/useLookupNotification';
12
+ const MS_BETWEEN_IMAGE_PROCESSING = 10;
13
+ const fadedSquareWidthInPixels = 200;
14
+ const fadedSquareHeightInPixels = 150;
15
+ const redLineHeightInPixels = 1;
16
+ function FormElementBarcodeScanner({ id, element, value, onChange, validationMessage, displayValidationMessage, }) {
17
+ const [isDirty, setIsDirty] = useBooleanState(false);
18
+ const [isCameraOpen, startBarcodeScanner, stopBarcodeScanner] = useBooleanState(false);
19
+ const [error, setError] = React.useState(null);
20
+ const { onLookup } = useLookupNotification();
21
+ const handleScan = React.useCallback((newValue) => {
22
+ setIsDirty();
23
+ onChange(element, newValue);
24
+ stopBarcodeScanner();
25
+ onLookup(newValue);
26
+ }, [element, onChange, onLookup, setIsDirty, stopBarcodeScanner]);
27
+ const openBarcodeScanner = React.useCallback(() => {
28
+ if (window.cordova) {
29
+ setError(null);
30
+ // @ts-expect-error ???
31
+ window.cordova.plugins.barcodeScanner.scan(
32
+ // @ts-expect-error ???
33
+ (result) => {
34
+ if (!result.cancelled) {
35
+ handleScan(result.text);
36
+ }
37
+ },
38
+ // @ts-expect-error ???
39
+ (error) => {
40
+ setError(new Error(`An error has occurred: "${error}". Please click "Cancel" below to try again. If the problem persists, please contact support.`));
41
+ }, {
42
+ showFlipCameraButton: true,
43
+ showTorchButton: true,
44
+ });
45
+ }
46
+ else {
47
+ startBarcodeScanner();
48
+ }
49
+ }, [handleScan, startBarcodeScanner]);
50
+ const text = typeof value === 'string' ? value : '';
51
+ return (React.createElement("div", { className: "cypress-barcode-scanner-element" },
52
+ React.createElement(FormElementLabelContainer, { className: "ob-barcode-scanner", element: element, id: id, required: element.required },
53
+ error && (React.createElement("figure", { className: "ob-figure" },
54
+ React.createElement("div", { className: "figure-content has-text-centered" },
55
+ React.createElement("div", null,
56
+ React.createElement("h4", { className: "title is-4" }, "Whoops..."),
57
+ React.createElement("p", null, error.message))))),
58
+ isCameraOpen ? (React.createElement(BarcodeScanner, { element: element, onScan: handleScan, onClose: stopBarcodeScanner })) : (React.createElement("div", null,
59
+ React.createElement("div", { className: "field has-addons" },
60
+ React.createElement("div", { className: "control is-expanded has-icons-right" },
61
+ React.createElement("input", { type: "text", placeholder: element.placeholderValue, id: id, name: element.name, className: "input ob-input cypress-barcode-scanner-control has-margin-bottom-8", value: text, onChange: (e) => onChange(element, e.target.value || undefined), required: element.required, disabled: element.readOnly, onBlur: setIsDirty }),
62
+ React.createElement("span", { className: "ob-input-icon icon is-small is-right" },
63
+ React.createElement("i", { className: "material-icons is-size-5" }, "document_scanner"))),
64
+ !!element.readOnly && !!value && (React.createElement("div", { className: "control" },
65
+ React.createElement(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }))),
66
+ React.createElement(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage })),
67
+ React.createElement("button", { type: "button", className: "button ob-button ob-button__open is-primary cypress-start-scan-barcode-button", disabled: element.readOnly, onClick: openBarcodeScanner }, "Scan Barcode"))),
68
+ (isDirty || displayValidationMessage) && !!validationMessage && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
69
+ React.createElement("div", { className: "has-text-danger ob-error__text cypress-validation-message" }, validationMessage))))));
70
+ }
71
+ export default React.memo(FormElementBarcodeScanner);
72
+ function BarcodeScanner({ element, onScan, onClose }) {
73
+ const videoElementRef = React.useRef(null);
74
+ const figureElementRef = React.useRef(null);
75
+ const [{ isLoading = false, selectedDeviceId, error }, setState] = React.useState({
76
+ isLoading: true,
77
+ selectedDeviceId: undefined,
78
+ error: undefined,
79
+ });
80
+ const [camera, setCamera] = React.useState(null);
81
+ const setError = React.useCallback((error) => {
82
+ setState({
83
+ error,
84
+ isLoading: false,
85
+ selectedDeviceId: undefined,
86
+ });
87
+ }, []);
88
+ // Create timeout using $timeout outside of the scan function so
89
+ // so that we can cancel it when navigating away from screen
90
+ const scanImageForBarcode = React.useCallback((videoElement, waitInMS, options, checkStop) => {
91
+ const restrictedBarcodeTypes = element.restrictedBarcodeTypes || [];
92
+ // Using $timeout here instead of $interval as we dont know
93
+ // exactly how long each processing of the image will take.
94
+ setTimeout(async () => {
95
+ if (checkStop())
96
+ return;
97
+ const canvasElement = document.createElement('canvas');
98
+ canvasElement.width = options.sourceWidth;
99
+ canvasElement.height = options.sourceHeight;
100
+ const canvasContext = canvasElement.getContext('2d');
101
+ if (canvasContext) {
102
+ canvasContext.drawImage(videoElement, options.sourceX, options.sourceY, canvasElement.width, canvasElement.height, 0, 0, canvasElement.width, canvasElement.height);
103
+ if (!element.restrictBarcodeTypes ||
104
+ (element.restrictedBarcodeTypes || []).indexOf('qr_reader') > -1) {
105
+ const imageData = canvasContext.getImageData(0, 0, canvasElement.width, canvasElement.height);
106
+ const code = jsQR(imageData.data, imageData.width, imageData.height, {
107
+ inversionAttempts: 'dontInvert',
108
+ });
109
+ if (code) {
110
+ return onScan(code.data);
111
+ }
112
+ }
113
+ }
114
+ if (!element.restrictBarcodeTypes ||
115
+ !(restrictedBarcodeTypes.length === 1 &&
116
+ restrictedBarcodeTypes[0] === 'qr_reader')) {
117
+ const base64Image = canvasElement.toDataURL('image/png');
118
+ const quaggaResult = await quaggaReader(base64Image, restrictedBarcodeTypes);
119
+ if (quaggaResult) {
120
+ return onScan(quaggaResult);
121
+ }
122
+ }
123
+ if (checkStop())
124
+ return;
125
+ scanImageForBarcode(videoElement, MS_BETWEEN_IMAGE_PROCESSING, options, checkStop);
126
+ }, waitInMS);
127
+ }, [element.restrictBarcodeTypes, element.restrictedBarcodeTypes, onScan]);
128
+ const switchCamera = React.useCallback(() => {
129
+ if (!camera) {
130
+ return;
131
+ }
132
+ // We will just be rotating between the available camera.
133
+ const nextDeviceIndex = camera.availableDevices.findIndex((mediaDeviceInfo) => mediaDeviceInfo.deviceId === camera.activeDeviceId) + 1;
134
+ const nextDevice = camera.availableDevices[nextDeviceIndex] || camera.availableDevices[0];
135
+ setState({
136
+ error: undefined,
137
+ isLoading: true,
138
+ selectedDeviceId: nextDevice.deviceId,
139
+ });
140
+ }, [camera]);
141
+ React.useEffect(() => {
142
+ if (!videoElementRef.current) {
143
+ return;
144
+ }
145
+ const newCamera = new HTML5Camera(videoElementRef.current);
146
+ setCamera(newCamera);
147
+ return () => {
148
+ newCamera.close();
149
+ };
150
+ }, []);
151
+ React.useEffect(() => {
152
+ if (!camera ||
153
+ error ||
154
+ // If attempting to open the device that is currently open,
155
+ // we will not attempt to open again.
156
+ (selectedDeviceId && camera.activeDeviceId === selectedDeviceId)) {
157
+ return;
158
+ }
159
+ let ignore = false;
160
+ (async () => {
161
+ try {
162
+ const videoElement = videoElementRef.current;
163
+ const figureElement = figureElementRef.current;
164
+ if (!videoElement || !figureElement) {
165
+ return;
166
+ }
167
+ console.log('Opening camera with:', selectedDeviceId || 'UNKNOWN');
168
+ await camera.open(selectedDeviceId);
169
+ if (ignore) {
170
+ return;
171
+ }
172
+ setState({
173
+ error: undefined,
174
+ isLoading: false,
175
+ selectedDeviceId,
176
+ });
177
+ // @ts-expect-error ???
178
+ const fadedSquareElement = figureElement.getElementsByClassName('ob-barcode-scanner__square')[0];
179
+ // @ts-expect-error ???
180
+ const redLineElement = figureElement.getElementsByClassName('ob-barcode-scanner__line')[0];
181
+ console.log('videoElement Width pixels', videoElement.clientWidth);
182
+ console.log('videoElement Height pixels', videoElement.clientHeight);
183
+ console.log('videoElement Width', videoElement.videoWidth);
184
+ console.log('videoElement Height', videoElement.videoHeight);
185
+ // Faded Square needs its values set in pixels
186
+ const fadedSquareLeftInPixels = (videoElement.clientWidth - fadedSquareWidthInPixels) / 2;
187
+ console.log('fadedSquareLeftInPixels', fadedSquareLeftInPixels);
188
+ const fadedSquareTopInPixels = (videoElement.clientHeight - fadedSquareHeightInPixels) / 2;
189
+ console.log('fadedSquareTopInPixels', fadedSquareTopInPixels);
190
+ fadedSquareElement.style.borderBottom = `${fadedSquareTopInPixels}px`;
191
+ fadedSquareElement.style.borderTop = `${fadedSquareTopInPixels}px`;
192
+ fadedSquareElement.style.borderLeft = `${fadedSquareLeftInPixels}px`;
193
+ fadedSquareElement.style.borderRight = `${fadedSquareLeftInPixels}px`;
194
+ fadedSquareElement.style.borderColor = 'rgba(0, 0, 0, 0.25)';
195
+ fadedSquareElement.style.borderStyle = 'solid';
196
+ redLineElement.style.height = `${redLineHeightInPixels}px`;
197
+ redLineElement.style.top = `${(videoElement.clientHeight - redLineHeightInPixels) / 2}px`;
198
+ redLineElement.style.left = `${fadedSquareLeftInPixels}px`;
199
+ redLineElement.style.right = `${fadedSquareLeftInPixels}px`;
200
+ // Need to calculate the actual width, which is not in pixels
201
+ const ratio = videoElement.videoWidth / videoElement.clientWidth;
202
+ console.log('pixel to video Ratio', ratio);
203
+ const left = ratio * fadedSquareLeftInPixels;
204
+ console.log('left in video measurement', left);
205
+ const top = ratio * fadedSquareTopInPixels;
206
+ console.log('top in video measurement', top);
207
+ const fadedSquareWidth = fadedSquareWidthInPixels * ratio;
208
+ console.log('red square in video measurement', fadedSquareWidth);
209
+ // Wait a little before scanning the first image
210
+ // to prevent image processing staring before
211
+ // camera is ready.
212
+ scanImageForBarcode(videoElement, 250, {
213
+ sourceX: left,
214
+ sourceY: top,
215
+ sourceWidth: fadedSquareWidth,
216
+ sourceHeight: fadedSquareWidth,
217
+ }, () => ignore);
218
+ }
219
+ catch (error) {
220
+ if (ignore) {
221
+ return;
222
+ }
223
+ console.warn('Error while attempting to open camera', error);
224
+ Sentry.captureException(error);
225
+ switch (error.name) {
226
+ case 'NotSupportedError': {
227
+ setError(new Error('Your browser does not support accessing your camera. Please click "Cancel" below and type in the barcode value manually.'));
228
+ break;
229
+ }
230
+ case 'NotAllowedError': {
231
+ setError(new Error('Cannot scan for barcodes without granting the application access to the camera. Please click "Cancel" below to try again.'));
232
+ break;
233
+ }
234
+ default: {
235
+ setError(new Error('An unknown error has occurred, please click "Cancel" below to try again. If the problem persists, please contact support.'));
236
+ }
237
+ }
238
+ }
239
+ })();
240
+ return () => {
241
+ ignore = true;
242
+ };
243
+ }, [camera, error, scanImageForBarcode, selectedDeviceId, setError]);
244
+ return (React.createElement("div", null,
245
+ React.createElement("figure", { className: "ob-figure", ref: figureElementRef },
246
+ React.createElement("div", { className: "figure-content has-text-centered" },
247
+ isLoading && React.createElement(OnLoading, { small: true }),
248
+ !!error && (React.createElement("div", null,
249
+ React.createElement("h4", { className: "title is-4" }, "Whoops..."),
250
+ React.createElement("p", null, error.message))),
251
+ React.createElement("div", { className: clsx('is-relative', {
252
+ 'is-hidden': isLoading || error,
253
+ }) },
254
+ React.createElement("div", { className: "ob-barcode-scanner__square" }),
255
+ React.createElement("div", { className: "ob-barcode-scanner__line" }),
256
+ React.createElement("video", { ref: videoElementRef, autoPlay: true, playsInline: true, className: "ob-barcode-scanner__video" })))),
257
+ React.createElement("div", { className: "buttons ob-buttons" },
258
+ React.createElement("button", { type: "button", className: "button ob-button ob-button__cancel is-light cypress-cancel-scan-barcode-button", onClick: onClose }, "Cancel"),
259
+ ((camera === null || camera === void 0 ? void 0 : camera.availableDevices.length) || 1) > 1 && (React.createElement("button", { type: "button", className: "button ob-button ob-button__switch-camera is-primary cypress-switch-camera-button", onClick: switchCamera }, "Switch Camera")))));
260
+ }
261
+ class HTML5Camera {
262
+ constructor(htmlVideoElement) {
263
+ this.htmlVideoElement = htmlVideoElement;
264
+ this.availableDevices = [];
265
+ this.mediaStream = undefined;
266
+ }
267
+ get activeDeviceId() {
268
+ var _a;
269
+ if (this.mediaStream) {
270
+ const [activeMediaStreamTrack] = this.mediaStream.getTracks();
271
+ return (_a = activeMediaStreamTrack === null || activeMediaStreamTrack === void 0 ? void 0 : activeMediaStreamTrack.getSettings()) === null || _a === void 0 ? void 0 : _a.deviceId;
272
+ }
273
+ }
274
+ async open(deviceId) {
275
+ if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
276
+ const error = new Error();
277
+ error.name = 'NotSupportedError';
278
+ throw error;
279
+ }
280
+ this.close();
281
+ const constraints = {
282
+ video: {
283
+ facingMode: deviceId ? undefined : 'environment',
284
+ deviceId: deviceId ? { exact: deviceId } : undefined,
285
+ },
286
+ };
287
+ const mediaStream = await navigator.mediaDevices.getUserMedia(constraints);
288
+ this.mediaStream = mediaStream;
289
+ this.htmlVideoElement.srcObject = mediaStream;
290
+ if (!this.availableDevices.length) {
291
+ const availableDevices = await navigator.mediaDevices.enumerateDevices();
292
+ this.availableDevices = availableDevices.filter((mediaDeviceInfo) => mediaDeviceInfo.kind === 'videoinput' && !!mediaDeviceInfo.deviceId);
293
+ }
294
+ await new Promise((resolve) => this.htmlVideoElement.addEventListener('canplay', resolve, {
295
+ once: true,
296
+ }));
297
+ }
298
+ close() {
299
+ if (this.mediaStream) {
300
+ this.mediaStream.getTracks().forEach((track) => {
301
+ track.stop();
302
+ });
303
+ this.mediaStream = undefined;
304
+ }
305
+ }
306
+ }
307
307
  //# sourceMappingURL=FormElementBarcodeScanner.js.map