@oneblink/apps-react 2.3.0-beta.1 → 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 (459) 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 -7
  177. package/dist/components/renderer/ProgressBar.js +6 -6
  178. package/dist/components/renderer/ToggleAllCheckbox.d.ts +13 -13
  179. package/dist/components/renderer/ToggleAllCheckbox.js +26 -26
  180. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +10 -10
  181. package/dist/components/renderer/attachments/AttachmentStatus.js +36 -36
  182. package/dist/components/renderer/attachments/FileCard.d.ts +19 -19
  183. package/dist/components/renderer/attachments/FileCard.js +60 -59
  184. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  185. package/dist/components/renderer/attachments/FileCardContent.d.ts +5 -5
  186. package/dist/components/renderer/attachments/FileCardContent.js +10 -10
  187. package/dist/components/renderer/attachments/Files.d.ts +14 -0
  188. package/dist/components/renderer/attachments/Files.js +27 -0
  189. package/dist/components/renderer/attachments/Files.js.map +1 -0
  190. package/dist/components/renderer/attachments/ImagePreviewUnavailable.d.ts +4 -4
  191. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +11 -11
  192. package/dist/components/renderer/attachments/ProgressBar.d.ts +8 -6
  193. package/dist/components/renderer/attachments/ProgressBar.js +33 -12
  194. package/dist/components/renderer/attachments/ProgressBar.js.map +1 -1
  195. package/dist/components/renderer/attachments/UploadingAttachment.d.ts +4 -0
  196. package/dist/components/renderer/attachments/UploadingAttachment.js +13 -0
  197. package/dist/components/renderer/attachments/UploadingAttachment.js.map +1 -0
  198. package/dist/form-elements/ComplianceButton.d.ts +10 -10
  199. package/dist/form-elements/ComplianceButton.js +11 -11
  200. package/dist/form-elements/FormElementABN.d.ts +14 -14
  201. package/dist/form-elements/FormElementABN.js +155 -155
  202. package/dist/form-elements/FormElementAutocomplete.d.ts +19 -19
  203. package/dist/form-elements/FormElementAutocomplete.js +81 -81
  204. package/dist/form-elements/FormElementBSB.d.ts +18 -18
  205. package/dist/form-elements/FormElementBSB.js +100 -100
  206. package/dist/form-elements/FormElementBarcodeScanner.d.ts +14 -14
  207. package/dist/form-elements/FormElementBarcodeScanner.js +306 -306
  208. package/dist/form-elements/FormElementBoolean.d.ts +14 -14
  209. package/dist/form-elements/FormElementBoolean.js +16 -16
  210. package/dist/form-elements/FormElementCalculation.d.ts +11 -11
  211. package/dist/form-elements/FormElementCalculation.js +179 -179
  212. package/dist/form-elements/FormElementCamera.d.ts +15 -15
  213. package/dist/form-elements/FormElementCamera.js +227 -226
  214. package/dist/form-elements/FormElementCamera.js.map +1 -1
  215. package/dist/form-elements/FormElementCaptcha.d.ts +12 -12
  216. package/dist/form-elements/FormElementCaptcha.js +14 -14
  217. package/dist/form-elements/FormElementCheckBoxes.d.ts +15 -15
  218. package/dist/form-elements/FormElementCheckBoxes.js +64 -64
  219. package/dist/form-elements/FormElementCivicaNameRecord.d.ts +8 -8
  220. package/dist/form-elements/FormElementCivicaNameRecord.js +51 -51
  221. package/dist/form-elements/FormElementCivicaStreetName.d.ts +15 -15
  222. package/dist/form-elements/FormElementCivicaStreetName.js +38 -38
  223. package/dist/form-elements/FormElementCompliance.d.ts +22 -22
  224. package/dist/form-elements/FormElementCompliance.js +129 -129
  225. package/dist/form-elements/FormElementDate.d.ts +14 -14
  226. package/dist/form-elements/FormElementDate.js +74 -74
  227. package/dist/form-elements/FormElementDateTime.d.ts +14 -14
  228. package/dist/form-elements/FormElementDateTime.js +67 -67
  229. package/dist/form-elements/FormElementEmail.d.ts +14 -14
  230. package/dist/form-elements/FormElementEmail.js +22 -22
  231. package/dist/form-elements/FormElementFile.d.ts +13 -13
  232. package/dist/form-elements/FormElementFile.js +31 -31
  233. package/dist/form-elements/FormElementFiles/FormElementFile.d.ts +13 -0
  234. package/dist/form-elements/FormElementFiles/FormElementFile.js +32 -0
  235. package/dist/form-elements/FormElementFiles/FormElementFile.js.map +1 -0
  236. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.d.ts +10 -0
  237. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js +11 -0
  238. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js.map +1 -0
  239. package/dist/form-elements/FormElementFiles/FormElementFiles.d.ts +15 -0
  240. package/dist/form-elements/FormElementFiles/FormElementFiles.js +17 -0
  241. package/dist/form-elements/FormElementFiles/FormElementFiles.js.map +1 -0
  242. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.d.ts +7 -0
  243. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js +11 -0
  244. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js.map +1 -0
  245. package/dist/form-elements/FormElementFiles/index.d.ts +17 -0
  246. package/dist/form-elements/FormElementFiles/index.js +18 -0
  247. package/dist/form-elements/FormElementFiles/index.js.map +1 -0
  248. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.d.ts +18 -0
  249. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js +61 -0
  250. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js.map +1 -0
  251. package/dist/form-elements/FormElementFiles.d.ts +15 -15
  252. package/dist/form-elements/FormElementFiles.js +42 -42
  253. package/dist/form-elements/FormElementForm.d.ts +17 -17
  254. package/dist/form-elements/FormElementForm.js +63 -63
  255. package/dist/form-elements/FormElementFreshdeskDependentField.d.ts +8 -8
  256. package/dist/form-elements/FormElementFreshdeskDependentField.js +15 -15
  257. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +15 -15
  258. package/dist/form-elements/FormElementGeoscapeAddress.js +62 -62
  259. package/dist/form-elements/FormElementHTML.d.ts +8 -8
  260. package/dist/form-elements/FormElementHTML.js +15 -15
  261. package/dist/form-elements/FormElementHeading.d.ts +8 -8
  262. package/dist/form-elements/FormElementHeading.js +23 -23
  263. package/dist/form-elements/FormElementImage.d.ts +8 -8
  264. package/dist/form-elements/FormElementImage.js +6 -6
  265. package/dist/form-elements/FormElementLocation.d.ts +20 -20
  266. package/dist/form-elements/FormElementLocation.js +204 -204
  267. package/dist/form-elements/FormElementNumber.d.ts +14 -14
  268. package/dist/form-elements/FormElementNumber.js +72 -72
  269. package/dist/form-elements/FormElementPointAddress.d.ts +15 -15
  270. package/dist/form-elements/FormElementPointAddress.js +69 -69
  271. package/dist/form-elements/FormElementRadio.d.ts +15 -15
  272. package/dist/form-elements/FormElementRadio.js +41 -41
  273. package/dist/form-elements/FormElementRepeatableSet.d.ts +19 -19
  274. package/dist/form-elements/FormElementRepeatableSet.js +126 -126
  275. package/dist/form-elements/FormElementSection.d.ts +8 -8
  276. package/dist/form-elements/FormElementSection.js +69 -69
  277. package/dist/form-elements/FormElementSelect.d.ts +15 -15
  278. package/dist/form-elements/FormElementSelect.js +44 -44
  279. package/dist/form-elements/FormElementSignature.d.ts +15 -15
  280. package/dist/form-elements/FormElementSignature.js +138 -140
  281. package/dist/form-elements/FormElementSignature.js.map +1 -1
  282. package/dist/form-elements/FormElementSummary.d.ts +11 -11
  283. package/dist/form-elements/FormElementSummary.js +159 -159
  284. package/dist/form-elements/FormElementTelephone.d.ts +14 -14
  285. package/dist/form-elements/FormElementTelephone.js +22 -22
  286. package/dist/form-elements/FormElementText.d.ts +14 -14
  287. package/dist/form-elements/FormElementText.js +29 -29
  288. package/dist/form-elements/FormElementTextarea.d.ts +14 -14
  289. package/dist/form-elements/FormElementTextarea.js +30 -30
  290. package/dist/form-elements/FormElementTime.d.ts +14 -14
  291. package/dist/form-elements/FormElementTime.js +53 -53
  292. package/dist/form-elements/OptionButton.d.ts +11 -11
  293. package/dist/form-elements/OptionButton.js +9 -9
  294. package/dist/hooks/attachments/useAttachment.d.ts +12 -12
  295. package/dist/hooks/attachments/useAttachment.js +242 -242
  296. package/dist/hooks/attachments/useAttachmentBlobs.d.ts +19 -19
  297. package/dist/hooks/attachments/useAttachmentBlobs.js +23 -23
  298. package/dist/hooks/attachments/useAttachmentObjectURLs.d.ts +24 -0
  299. package/dist/hooks/attachments/useAttachmentObjectURLs.js +37 -0
  300. package/dist/hooks/attachments/useAttachmentObjectURLs.js.map +1 -0
  301. package/dist/hooks/attachments/useAttachments.d.ts +10 -10
  302. package/dist/hooks/attachments/useAttachments.js +69 -69
  303. package/dist/hooks/attachments/useLocalAttachmentBlobs.d.ts +24 -0
  304. package/dist/hooks/attachments/useLocalAttachmentBlobs.js +40 -0
  305. package/dist/hooks/attachments/useLocalAttachmentBlobs.js.map +1 -0
  306. package/dist/hooks/useAbnLookupAuthenticationGuid.d.ts +3 -3
  307. package/dist/hooks/useAbnLookupAuthenticationGuid.js +5 -5
  308. package/dist/hooks/useAuth.d.ts +15 -15
  309. package/dist/hooks/useAuth.js +42 -42
  310. package/dist/hooks/useBooleanState.d.ts +5 -5
  311. package/dist/hooks/useBooleanState.js +8 -8
  312. package/dist/hooks/useButtonsConfiguration.d.ts +45 -0
  313. package/dist/hooks/useButtonsConfiguration.js +6 -0
  314. package/dist/hooks/useButtonsConfiguration.js.map +1 -0
  315. package/dist/hooks/useCaptchaSiteKey.d.ts +3 -3
  316. package/dist/hooks/useCaptchaSiteKey.js +5 -5
  317. package/dist/hooks/useChangeEffect.d.ts +1 -0
  318. package/dist/hooks/useChangeEffect.js +14 -0
  319. package/dist/hooks/useChangeEffect.js.map +1 -0
  320. package/dist/hooks/useClickOutsideElement.d.ts +3 -3
  321. package/dist/hooks/useClickOutsideElement.js +14 -14
  322. package/dist/hooks/useConditionalLogic.d.ts +6 -6
  323. package/dist/hooks/useConditionalLogic.js +22 -22
  324. package/dist/hooks/useConditionallyShowOptionCallback.d.ts +5 -0
  325. package/dist/hooks/useConditionallyShowOptionCallback.js +20 -0
  326. package/dist/hooks/useConditionallyShowOptionCallback.js.map +1 -0
  327. package/dist/hooks/useContrastColor.d.ts +2 -2
  328. package/dist/hooks/useContrastColor.js +12 -12
  329. package/dist/hooks/useCustomValidation.d.ts +1 -0
  330. package/dist/hooks/useCustomValidation.js +9 -0
  331. package/dist/hooks/useCustomValidation.js.map +1 -0
  332. package/dist/hooks/useDynamicOptionsLoaderEffect.d.ts +7 -0
  333. package/dist/hooks/useDynamicOptionsLoaderEffect.js +45 -0
  334. package/dist/hooks/useDynamicOptionsLoaderEffect.js.map +1 -0
  335. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +7 -7
  336. package/dist/hooks/useDynamicOptionsLoaderState.js +44 -44
  337. package/dist/hooks/useExecutedLookupCallback.d.ts +12 -12
  338. package/dist/hooks/useExecutedLookupCallback.js +15 -15
  339. package/dist/hooks/useFlatpickr.d.ts +10 -10
  340. package/dist/hooks/useFlatpickr.js +73 -73
  341. package/dist/hooks/useFlatpickrGuid.d.ts +7 -7
  342. package/dist/hooks/useFlatpickrGuid.js +11 -11
  343. package/dist/hooks/useFlattenElementsContext.d.ts +2 -2
  344. package/dist/hooks/useFlattenElementsContext.js +7 -7
  345. package/dist/hooks/useFormDefinition.d.ts +4 -4
  346. package/dist/hooks/useFormDefinition.js +9 -9
  347. package/dist/hooks/useFormElementOptions.d.ts +9 -9
  348. package/dist/hooks/useFormElementOptions.js +35 -35
  349. package/dist/hooks/useFormIsReadOnly.d.ts +3 -3
  350. package/dist/hooks/useFormIsReadOnly.js +5 -5
  351. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +24 -24
  352. package/dist/hooks/useFormSubmissionAutoSaveState.js +145 -145
  353. package/dist/hooks/useFormSubmissionModelContext.d.ts +15 -15
  354. package/dist/hooks/useFormSubmissionModelContext.js +32 -32
  355. package/dist/hooks/useFormSubmissionState.d.ts +10 -10
  356. package/dist/hooks/useFormSubmissionState.js +13 -13
  357. package/dist/hooks/useFormValidation.d.ts +7 -7
  358. package/dist/hooks/useFormValidation.js +29 -29
  359. package/dist/hooks/useGoogleMapsApiKey.d.ts +3 -3
  360. package/dist/hooks/useGoogleMapsApiKey.js +5 -5
  361. package/dist/hooks/useInfiniteScrollDataLoad.d.ts +30 -30
  362. package/dist/hooks/useInfiniteScrollDataLoad.js +124 -124
  363. package/dist/hooks/useInjectPages.d.ts +7 -7
  364. package/dist/hooks/useInjectPages.js +5 -5
  365. package/dist/hooks/useIsHovering.d.ts +5 -5
  366. package/dist/hooks/useIsHovering.js +12 -12
  367. package/dist/hooks/useIsMounted.d.ts +3 -3
  368. package/dist/hooks/useIsMounted.js +11 -11
  369. package/dist/hooks/useIsOffline.d.ts +6 -6
  370. package/dist/hooks/useIsOffline.js +26 -26
  371. package/dist/hooks/useIsPageVisible.d.ts +9 -9
  372. package/dist/hooks/useIsPageVisible.js +8 -8
  373. package/dist/hooks/useLegacyElements.d.ts +16 -0
  374. package/dist/hooks/useLegacyElements.js +55 -0
  375. package/dist/hooks/useLegacyElements.js.map +1 -0
  376. package/dist/hooks/useLoadDataState.d.ts +15 -15
  377. package/dist/hooks/useLoadDataState.js +54 -54
  378. package/dist/hooks/useLogin.d.ts +46 -46
  379. package/dist/hooks/useLogin.js +295 -295
  380. package/dist/hooks/useLookupNotification.d.ts +9 -9
  381. package/dist/hooks/useLookupNotification.js +10 -10
  382. package/dist/hooks/useLookups.d.ts +5 -5
  383. package/dist/hooks/useLookups.js +62 -62
  384. package/dist/hooks/useNullableState.d.ts +2 -2
  385. package/dist/hooks/useNullableState.js +6 -6
  386. package/dist/hooks/usePages.d.ts +24 -24
  387. package/dist/hooks/usePages.js +141 -141
  388. package/dist/hooks/useQuery.d.ts +2 -2
  389. package/dist/hooks/useQuery.js +7 -7
  390. package/dist/hooks/useSubmissionIdIsValid.d.ts +3 -3
  391. package/dist/hooks/useSubmissionIdIsValid.js +19 -19
  392. package/dist/hooks/useToggleAll.d.ts +6 -0
  393. package/dist/hooks/useToggleAll.js +24 -0
  394. package/dist/hooks/useToggleAll.js.map +1 -0
  395. package/dist/hooks/useToggleComplianceChildren.d.ts +3 -3
  396. package/dist/hooks/useToggleComplianceChildren.js +13 -13
  397. package/dist/index.d.ts +23 -23
  398. package/dist/index.js +23 -23
  399. package/dist/services/attachments.d.ts +10 -10
  400. package/dist/services/attachments.js +72 -72
  401. package/dist/services/barcode-readers/quagger.d.ts +1 -1
  402. package/dist/services/barcode-readers/quagger.js +34 -34
  403. package/dist/services/blob-utils.d.ts +5 -5
  404. package/dist/services/blob-utils.js +73 -73
  405. package/dist/services/checkBsbsAreInvalid.d.ts +3 -3
  406. package/dist/services/checkBsbsAreInvalid.js +40 -40
  407. package/dist/services/checkIfAttachmentsAreUploading.d.ts +3 -3
  408. package/dist/services/checkIfAttachmentsAreUploading.js +57 -57
  409. package/dist/services/checkIfAttachmentsExist.d.ts +5 -5
  410. package/dist/services/checkIfAttachmentsExist.js +144 -144
  411. package/dist/services/checkIfBsbsAreValidating.d.ts +3 -3
  412. package/dist/services/checkIfBsbsAreValidating.js +40 -40
  413. package/dist/services/clean-form-elements-ctrl-model.d.ts +4 -0
  414. package/dist/services/clean-form-elements-ctrl-model.js +166 -0
  415. package/dist/services/clean-form-elements-ctrl-model.js.map +1 -0
  416. package/dist/services/cleanFormSubmissionModel.d.ts +6 -6
  417. package/dist/services/cleanFormSubmissionModel.js +203 -203
  418. package/dist/services/conditionally-show-element.d.ts +11 -0
  419. package/dist/services/conditionally-show-element.js +92 -0
  420. package/dist/services/conditionally-show-element.js.map +1 -0
  421. package/dist/services/conditionally-show-option.d.ts +3 -0
  422. package/dist/services/conditionally-show-option.js +135 -0
  423. package/dist/services/conditionally-show-option.js.map +1 -0
  424. package/dist/services/defaultCoordinates.d.ts +5 -5
  425. package/dist/services/defaultCoordinates.js +8 -8
  426. package/dist/services/download-file.d.ts +3 -3
  427. package/dist/services/download-file.js +90 -90
  428. package/dist/services/drawTimestampOnCanvas.d.ts +1 -1
  429. package/dist/services/drawTimestampOnCanvas.js +22 -22
  430. package/dist/services/flattenFormElements.d.ts +2 -0
  431. package/dist/services/flattenFormElements.js +13 -0
  432. package/dist/services/flattenFormElements.js.map +1 -0
  433. package/dist/services/form-validation.d.ts +10 -10
  434. package/dist/services/form-validation.js +561 -561
  435. package/dist/services/generate-default-data.d.ts +13 -13
  436. package/dist/services/generate-default-data.js +494 -494
  437. package/dist/services/generateCivicaNameRecordElements.d.ts +2 -2
  438. package/dist/services/generateCivicaNameRecordElements.js +140 -140
  439. package/dist/services/generateFreshdeskDependentFieldElements.d.ts +2 -2
  440. package/dist/services/generateFreshdeskDependentFieldElements.js +69 -69
  441. package/dist/services/getCorrectDateFromDateOnlyString.d.ts +2 -0
  442. package/dist/services/getCorrectDateFromDateOnlyString.js +4 -0
  443. package/dist/services/getCorrectDateFromDateOnlyString.js.map +1 -0
  444. package/dist/services/sanitize-html.d.ts +2 -2
  445. package/dist/services/sanitize-html.js +20 -20
  446. package/dist/services/scrolling-service.d.ts +7 -7
  447. package/dist/services/scrolling-service.js +38 -38
  448. package/dist/services/utils-service.d.ts +5 -5
  449. package/dist/services/utils-service.js +16 -16
  450. package/dist/styles/boolean.scss +12 -0
  451. package/dist/styles/ob-file.scss +63 -0
  452. package/dist/styles/progress.scss +0 -7
  453. package/dist/styles.css +0 -7
  454. package/dist/styles.css.map +1 -1
  455. package/dist/types/attachments.d.ts +19 -19
  456. package/dist/types/attachments.js +1 -1
  457. package/dist/types/form.d.ts +40 -40
  458. package/dist/types/form.js +2 -2
  459. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { FormTypes } from '@oneblink/types';
3
+ interface Props {
4
+ form: FormTypes.Form;
5
+ }
6
+ declare function FormStoreContainer({ form }: Props): JSX.Element;
7
+ declare const _default: React.MemoExoticComponent<typeof FormStoreContainer>;
8
+ export default _default;
@@ -0,0 +1,55 @@
1
+ import * as React from 'react';
2
+ import LoadingWithMessage from './components/LoadingWithMessage';
3
+ import ErrorMessage from './components/ErrorMessage';
4
+ import FormStore from './components/formStore/FormStore';
5
+ import { formStoreService } from '@oneblink/apps';
6
+ import WarningIcon from '@mui/icons-material/Warning';
7
+ import useLoadDataState from './hooks/useLoadDataState';
8
+ import { Box, Button, Container, Grid, Typography } from '@mui/material';
9
+ import LargeIconMessage from './components/messages/LargeIconMessage';
10
+ import { ListItem, UnorderedList } from './components/Lists';
11
+ import useLegacyFormElements from './hooks/useLegacyElements';
12
+ function FormStoreContainer({ form }) {
13
+ const fetchFormStoreDefinition = React.useCallback((abortSignal) => {
14
+ return formStoreService.getFormStoreDefinition(form.id, abortSignal);
15
+ }, [form.id]);
16
+ const [formStoreDefinitionState, onTryAgain] = useLoadDataState(fetchFormStoreDefinition);
17
+ const { formElementsUsingLegacyStorage, formElementsUsingLegacyNames } = useLegacyFormElements((form === null || form === void 0 ? void 0 : form.elements) || []);
18
+ if (formStoreDefinitionState.status === 'LOADING') {
19
+ return React.createElement(LoadingWithMessage, null);
20
+ }
21
+ if (formStoreDefinitionState.status === 'ERROR') {
22
+ return (React.createElement(React.Fragment, null,
23
+ React.createElement(ErrorMessage, { title: "Error Retrieving Form Definition", gutterTop: true }, formStoreDefinitionState.error.message),
24
+ React.createElement(Grid, { container: true, justifyContent: "center" },
25
+ React.createElement(Button, { variant: "outlined", color: "primary", onClick: () => onTryAgain() }, "Try Again"))));
26
+ }
27
+ if (formElementsUsingLegacyStorage.length ||
28
+ formElementsUsingLegacyNames.length) {
29
+ return (React.createElement(React.Fragment, null,
30
+ React.createElement(LargeIconMessage, { IconComponent: WarningIcon, title: "Incompatible Form Elements", variant: "warning", gutterTop: true, gutterBottom: true }, "This Form has Element(s) that are incompatible with Data Manager. If you would like to be able to view submissions for this Form, please follow the instructions below to ensure your Form is compatible."),
31
+ React.createElement(Container, { maxWidth: "sm" },
32
+ !!formElementsUsingLegacyStorage.length && (React.createElement(React.Fragment, null,
33
+ React.createElement(Typography, { variant: "body2" },
34
+ "The following Element(s) are using the ",
35
+ React.createElement("b", null, "Embedded"),
36
+ " storage type. Please update them to use either the Private or Public storage type."),
37
+ React.createElement(Box, { marginBottom: 1 },
38
+ React.createElement(UnorderedList, null, formElementsUsingLegacyStorage.map(({ name, label }, index) => (React.createElement(ListItem, { key: index },
39
+ React.createElement("b", null, label),
40
+ ' ',
41
+ React.createElement(Typography, { component: "span", variant: "body2", color: "textSecondary" }, name)))))))),
42
+ !!formElementsUsingLegacyNames.length && (React.createElement(React.Fragment, null,
43
+ React.createElement(Typography, { variant: "body2" },
44
+ "This following Element(s) have a ",
45
+ React.createElement("b", null, "Name"),
46
+ " property with unsupported characters. Please update them to have only letters, numbers, underscores and dashes."),
47
+ React.createElement(UnorderedList, null, formElementsUsingLegacyNames.map(({ name, label }, index) => (React.createElement(ListItem, { key: index },
48
+ React.createElement("b", null, label),
49
+ ' ',
50
+ React.createElement(Typography, { component: "span", variant: "body2", color: "textSecondary" }, name))))))))));
51
+ }
52
+ return (React.createElement(FormStore, { form: form, formElements: formStoreDefinitionState.result.formElements }));
53
+ }
54
+ export default React.memo(FormStoreContainer);
55
+ //# sourceMappingURL=OneBlinkFormStoreView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OneBlinkFormStoreView.js","sourceRoot":"","sources":["../src/OneBlinkFormStoreView.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport LoadingWithMessage from './components/LoadingWithMessage'\nimport ErrorMessage from './components/ErrorMessage'\nimport FormStore from './components/formStore/FormStore'\nimport { formStoreService } from '@oneblink/apps'\nimport WarningIcon from '@mui/icons-material/Warning'\nimport useLoadDataState from './hooks/useLoadDataState'\nimport { Box, Button, Container, Grid, Typography } from '@mui/material'\nimport LargeIconMessage from './components/messages/LargeIconMessage'\nimport { ListItem, UnorderedList } from './components/Lists'\nimport useLegacyFormElements from './hooks/useLegacyElements'\nimport { FormTypes } from '@oneblink/types'\n\ninterface Props {\n form: FormTypes.Form\n}\nfunction FormStoreContainer({ form }: Props) {\n const fetchFormStoreDefinition = React.useCallback(\n (abortSignal?: AbortSignal) => {\n return formStoreService.getFormStoreDefinition(form.id, abortSignal)\n },\n [form.id],\n )\n const [formStoreDefinitionState, onTryAgain] = useLoadDataState(\n fetchFormStoreDefinition,\n )\n\n const { formElementsUsingLegacyStorage, formElementsUsingLegacyNames } =\n useLegacyFormElements(form?.elements || [])\n\n if (formStoreDefinitionState.status === 'LOADING') {\n return <LoadingWithMessage />\n }\n\n if (formStoreDefinitionState.status === 'ERROR') {\n return (\n <>\n <ErrorMessage title=\"Error Retrieving Form Definition\" gutterTop>\n {formStoreDefinitionState.error.message}\n </ErrorMessage>\n <Grid container justifyContent=\"center\">\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => onTryAgain()}\n >\n Try Again\n </Button>\n </Grid>\n </>\n )\n }\n\n if (\n formElementsUsingLegacyStorage.length ||\n formElementsUsingLegacyNames.length\n ) {\n return (\n <>\n <LargeIconMessage\n IconComponent={WarningIcon}\n title=\"Incompatible Form Elements\"\n variant=\"warning\"\n gutterTop\n gutterBottom\n >\n This Form has Element(s) that are incompatible with Data Manager. If\n you would like to be able to view submissions for this Form, please\n follow the instructions below to ensure your Form is compatible.\n </LargeIconMessage>\n <Container maxWidth=\"sm\">\n {!!formElementsUsingLegacyStorage.length && (\n <>\n <Typography variant=\"body2\">\n The following Element(s) are using the <b>Embedded</b> storage\n type. Please update them to use either the Private or Public\n storage type.\n </Typography>\n <Box marginBottom={1}>\n <UnorderedList>\n {formElementsUsingLegacyStorage.map(\n ({ name, label }, index) => (\n <ListItem key={index}>\n <b>{label}</b>{' '}\n <Typography\n component=\"span\"\n variant=\"body2\"\n color=\"textSecondary\"\n >\n {name}\n </Typography>\n </ListItem>\n ),\n )}\n </UnorderedList>\n </Box>\n </>\n )}\n {!!formElementsUsingLegacyNames.length && (\n <>\n <Typography variant=\"body2\">\n This following Element(s) have a <b>Name</b> property with\n unsupported characters. Please update them to have only letters,\n numbers, underscores and dashes.\n </Typography>\n <UnorderedList>\n {formElementsUsingLegacyNames.map(({ name, label }, index) => (\n <ListItem key={index}>\n <b>{label}</b>{' '}\n <Typography\n component=\"span\"\n variant=\"body2\"\n color=\"textSecondary\"\n >\n {name}\n </Typography>\n </ListItem>\n ))}\n </UnorderedList>\n </>\n )}\n </Container>\n </>\n )\n }\n\n return (\n <FormStore\n form={form}\n formElements={formStoreDefinitionState.result.formElements}\n />\n )\n}\n\nexport default React.memo(FormStoreContainer)\n"]}
@@ -1,11 +1,11 @@
1
- import * as React from 'react';
2
- import { FormTypes } from '@oneblink/types';
3
- import { FormSubmissionModel } from './types/form';
4
- declare type Props = {
5
- form: FormTypes.Form;
6
- initialSubmission?: FormSubmissionModel;
7
- googleMapsApiKey?: string;
8
- };
9
- declare function OneBlinkReadOnlyForm({ form, initialSubmission, ...rest }: Props): JSX.Element;
10
- declare const _default: React.MemoExoticComponent<typeof OneBlinkReadOnlyForm>;
11
- export default _default;
1
+ import * as React from 'react';
2
+ import { FormTypes } from '@oneblink/types';
3
+ import { FormSubmissionModel } from './types/form';
4
+ declare type Props = {
5
+ form: FormTypes.Form;
6
+ initialSubmission?: FormSubmissionModel;
7
+ googleMapsApiKey?: string;
8
+ };
9
+ declare function OneBlinkReadOnlyForm({ form, initialSubmission, ...rest }: Props): JSX.Element;
10
+ declare const _default: React.MemoExoticComponent<typeof OneBlinkReadOnlyForm>;
11
+ export default _default;
@@ -1,49 +1,49 @@
1
- import * as React from 'react';
2
- import OneBlinkFormBase from './OneBlinkFormBase';
3
- import useFormSubmissionState from './hooks/useFormSubmissionState';
4
- function recursivelySetReadOnly(elements) {
5
- const newElements = elements
6
- .filter((element) => element.type !== 'captcha')
7
- .map((element) => {
8
- if ((element.type === 'form' ||
9
- element.type === 'section' ||
10
- element.type === 'page' ||
11
- element.type === 'repeatableSet') &&
12
- Array.isArray(element.elements)) {
13
- return {
14
- ...element,
15
- elements: recursivelySetReadOnly(element.elements) || [],
16
- };
17
- }
18
- if (element.type !== 'section' &&
19
- element.type !== 'heading' &&
20
- element.type !== 'page' &&
21
- element.type !== 'html' &&
22
- element.type !== 'captcha' &&
23
- element.type !== 'image' &&
24
- element.type !== 'calculation' &&
25
- element.type !== 'summary' &&
26
- element.type !== 'form' &&
27
- element.type !== 'infoPage') {
28
- return {
29
- ...element,
30
- readOnly: true,
31
- };
32
- }
33
- return element;
34
- });
35
- return newElements;
36
- }
37
- function OneBlinkReadOnlyForm({ form, initialSubmission, ...rest }) {
38
- const [{ submission, definition }, setFormSubmission] = useFormSubmissionState(form, initialSubmission);
39
- const readOnlyDefinition = React.useMemo(() => {
40
- return {
41
- ...definition,
42
- elements: recursivelySetReadOnly(definition.elements || []),
43
- };
44
- }, [definition]);
45
- const noop = React.useCallback(() => { }, []);
46
- return (React.createElement(OneBlinkFormBase, { definition: readOnlyDefinition, submission: submission, disabled: true, isReadOnly: true, onCancel: noop, onSubmit: noop, setFormSubmission: setFormSubmission, ...rest }));
47
- }
48
- export default React.memo(OneBlinkReadOnlyForm);
1
+ import * as React from 'react';
2
+ import OneBlinkFormBase from './OneBlinkFormBase';
3
+ import useFormSubmissionState from './hooks/useFormSubmissionState';
4
+ function recursivelySetReadOnly(elements) {
5
+ const newElements = elements
6
+ .filter((element) => element.type !== 'captcha')
7
+ .map((element) => {
8
+ if ((element.type === 'form' ||
9
+ element.type === 'section' ||
10
+ element.type === 'page' ||
11
+ element.type === 'repeatableSet') &&
12
+ Array.isArray(element.elements)) {
13
+ return {
14
+ ...element,
15
+ elements: recursivelySetReadOnly(element.elements) || [],
16
+ };
17
+ }
18
+ if (element.type !== 'section' &&
19
+ element.type !== 'heading' &&
20
+ element.type !== 'page' &&
21
+ element.type !== 'html' &&
22
+ element.type !== 'captcha' &&
23
+ element.type !== 'image' &&
24
+ element.type !== 'calculation' &&
25
+ element.type !== 'summary' &&
26
+ element.type !== 'form' &&
27
+ element.type !== 'infoPage') {
28
+ return {
29
+ ...element,
30
+ readOnly: true,
31
+ };
32
+ }
33
+ return element;
34
+ });
35
+ return newElements;
36
+ }
37
+ function OneBlinkReadOnlyForm({ form, initialSubmission, ...rest }) {
38
+ const [{ submission, definition }, setFormSubmission] = useFormSubmissionState(form, initialSubmission);
39
+ const readOnlyDefinition = React.useMemo(() => {
40
+ return {
41
+ ...definition,
42
+ elements: recursivelySetReadOnly(definition.elements || []),
43
+ };
44
+ }, [definition]);
45
+ const noop = React.useCallback(() => { }, []);
46
+ return (React.createElement(OneBlinkFormBase, { definition: readOnlyDefinition, submission: submission, disabled: true, isReadOnly: true, onCancel: noop, onSubmit: noop, setFormSubmission: setFormSubmission, ...rest }));
47
+ }
48
+ export default React.memo(OneBlinkReadOnlyForm);
49
49
  //# sourceMappingURL=OneBlinkReadOnlyForm.js.map
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ declare function AnnotationModal({ imageSrc, onClose, onSave, }: {
3
+ imageSrc: string;
4
+ onClose: () => void;
5
+ onSave: (newValue: string) => void;
6
+ }): JSX.Element;
7
+ declare const _default: React.MemoExoticComponent<typeof AnnotationModal>;
8
+ export default _default;
@@ -0,0 +1,104 @@
1
+ import * as React from 'react';
2
+ import clsx from 'clsx';
3
+ import SignatureCanvas from 'react-signature-canvas';
4
+ import useBooleanState from '../hooks/useBooleanState';
5
+ import scrollingService from '../services/scrolling-service';
6
+ const annotationButtonColours = [
7
+ '#000000',
8
+ '#ffffff',
9
+ '#f44336',
10
+ '#e91e63',
11
+ '#9c27b0',
12
+ '#673ab7',
13
+ '#3f51b5',
14
+ '#2196f3',
15
+ '#03a9f4',
16
+ '#00bcd4',
17
+ '#009688',
18
+ '#4caf50',
19
+ '#8bc34a',
20
+ '#cddc39',
21
+ '#ffee58',
22
+ '#ffca28',
23
+ '#ffa726',
24
+ '#ff5722',
25
+ ];
26
+ function AnnotationModal({ imageSrc, onClose, onSave, }) {
27
+ const annotationContentElementRef = React.useRef(null);
28
+ const bmSignaturePadRef = React.useRef(null);
29
+ const signatureCanvasRef = React.useRef(null);
30
+ const [isDirty, setDirty] = useBooleanState(false);
31
+ const [penColour, setPenColour] = React.useState(annotationButtonColours[0]);
32
+ const handleCancelAnnotation = React.useCallback(() => {
33
+ if (signatureCanvasRef.current) {
34
+ console.log('Clearing annotation...');
35
+ signatureCanvasRef.current.clear();
36
+ }
37
+ onClose();
38
+ }, [onClose]);
39
+ const handleSaveAnnotation = React.useCallback(() => {
40
+ if (signatureCanvasRef.current) {
41
+ onSave(signatureCanvasRef.current.toDataURL());
42
+ }
43
+ }, [onSave]);
44
+ // SETTING CANVAS FROM PASSED VALUE
45
+ React.useEffect(() => {
46
+ const annotationContentElement = annotationContentElementRef.current;
47
+ const bmSignaturePadElement = bmSignaturePadRef.current;
48
+ const signatureCanvas = signatureCanvasRef.current;
49
+ if (!annotationContentElement ||
50
+ !bmSignaturePadElement ||
51
+ !signatureCanvas ||
52
+ typeof imageSrc !== 'string') {
53
+ return;
54
+ }
55
+ const canvasElement = signatureCanvas.getCanvas();
56
+ // Disable scrolling to allow for smooth drawing
57
+ scrollingService.disableScrolling();
58
+ const maxWidth = annotationContentElement.clientWidth;
59
+ const maxHeight = annotationContentElement.clientHeight;
60
+ const i = new Image();
61
+ i.onload = function () {
62
+ const imageWidth = i.width;
63
+ const imageHeight = i.height;
64
+ let canvasWidth = imageWidth;
65
+ let canvasHeight = imageHeight;
66
+ if (imageWidth > maxWidth || imageHeight > maxHeight) {
67
+ const widthRatio = maxWidth / imageWidth;
68
+ const heightRatio = maxHeight / imageHeight;
69
+ const ratio = Math.min(widthRatio, heightRatio);
70
+ canvasWidth = ratio * imageWidth;
71
+ canvasHeight = ratio * imageHeight;
72
+ }
73
+ bmSignaturePadElement.style.width = `${canvasWidth}px`;
74
+ bmSignaturePadElement.style.height = `${canvasHeight}px`;
75
+ bmSignaturePadElement.style.backgroundSize = 'cover';
76
+ bmSignaturePadElement.style.backgroundImage = `url(${imageSrc})`;
77
+ canvasElement.width = canvasWidth;
78
+ canvasElement.height = canvasHeight;
79
+ };
80
+ console.log('imageSrc', imageSrc);
81
+ i.src = imageSrc;
82
+ return () => {
83
+ scrollingService.enableScrolling();
84
+ };
85
+ }, [imageSrc]);
86
+ return (React.createElement("div", { className: "modal is-active" },
87
+ React.createElement("div", { className: "modal-background-faded" }),
88
+ React.createElement("div", { className: "ob-annotation" },
89
+ React.createElement("div", { className: "ob-annotation__buttons ob-annotation__buttons-colours" }, annotationButtonColours.map((colour, index) => {
90
+ return (React.createElement("button", { key: index, type: "button", className: clsx('button ob-annotation__button ob-annotation__button-colour cypress-annotation-colour-button', {
91
+ 'is-selected': penColour === colour,
92
+ }), onClick: () => setPenColour(colour), style: { backgroundColor: colour } }));
93
+ })),
94
+ React.createElement("div", { ref: annotationContentElementRef, className: "ob-annotation__content" },
95
+ React.createElement("div", { ref: bmSignaturePadRef, className: "ob-annotation__signature-pad cypress-annotation-signature-pad" },
96
+ React.createElement(SignatureCanvas, { ref: signatureCanvasRef, clearOnResize: false,
97
+ // @ts-expect-error ???
98
+ onEnd: setDirty, penColor: penColour }))),
99
+ React.createElement("div", { className: "ob-annotation__buttons ob-annotation__buttons-actions" },
100
+ React.createElement("button", { type: "button", className: "button is-light ob-button ob-annotation__button ob-annotation__button-action cypress-annotation-cancel-button", onClick: handleCancelAnnotation }, "Cancel"),
101
+ React.createElement("button", { type: "button", className: "button is-primary ob-button ob-annotation__button ob-annotation__button-action cypress-annotation-save-button", disabled: !isDirty, onClick: handleSaveAnnotation }, "Save")))));
102
+ }
103
+ export default React.memo(AnnotationModal);
104
+ //# sourceMappingURL=AnnotationModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationModal.js","sourceRoot":"","sources":["../../src/components/AnnotationModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport SignatureCanvas from 'react-signature-canvas'\n\nimport useBooleanState from '../hooks/useBooleanState'\nimport scrollingService from '../services/scrolling-service'\n\nconst annotationButtonColours = [\n '#000000',\n '#ffffff',\n '#f44336',\n '#e91e63',\n '#9c27b0',\n '#673ab7',\n '#3f51b5',\n '#2196f3',\n '#03a9f4',\n '#00bcd4',\n '#009688',\n '#4caf50',\n '#8bc34a',\n '#cddc39',\n '#ffee58',\n '#ffca28',\n '#ffa726',\n '#ff5722',\n]\n\nfunction AnnotationModal({\n imageSrc,\n onClose,\n onSave,\n}: {\n imageSrc: string\n onClose: () => void\n onSave: (newValue: string) => void\n}) {\n const annotationContentElementRef = React.useRef<HTMLDivElement>(null)\n const bmSignaturePadRef = React.useRef<HTMLDivElement>(null)\n const signatureCanvasRef = React.useRef<SignatureCanvas>(null)\n\n const [isDirty, setDirty] = useBooleanState(false)\n const [penColour, setPenColour] = React.useState(annotationButtonColours[0])\n\n const handleCancelAnnotation = React.useCallback(() => {\n if (signatureCanvasRef.current) {\n console.log('Clearing annotation...')\n signatureCanvasRef.current.clear()\n }\n onClose()\n }, [onClose])\n\n const handleSaveAnnotation = React.useCallback(() => {\n if (signatureCanvasRef.current) {\n onSave(signatureCanvasRef.current.toDataURL())\n }\n }, [onSave])\n\n // SETTING CANVAS FROM PASSED VALUE\n React.useEffect(() => {\n const annotationContentElement = annotationContentElementRef.current\n const bmSignaturePadElement = bmSignaturePadRef.current\n const signatureCanvas = signatureCanvasRef.current\n if (\n !annotationContentElement ||\n !bmSignaturePadElement ||\n !signatureCanvas ||\n typeof imageSrc !== 'string'\n ) {\n return\n }\n const canvasElement = signatureCanvas.getCanvas()\n\n // Disable scrolling to allow for smooth drawing\n scrollingService.disableScrolling()\n\n const maxWidth = annotationContentElement.clientWidth\n const maxHeight = annotationContentElement.clientHeight\n\n const i = new Image()\n i.onload = function () {\n const imageWidth = i.width\n const imageHeight = i.height\n let canvasWidth = imageWidth\n let canvasHeight = imageHeight\n\n if (imageWidth > maxWidth || imageHeight > maxHeight) {\n const widthRatio = maxWidth / imageWidth\n const heightRatio = maxHeight / imageHeight\n const ratio = Math.min(widthRatio, heightRatio)\n\n canvasWidth = ratio * imageWidth\n canvasHeight = ratio * imageHeight\n }\n\n bmSignaturePadElement.style.width = `${canvasWidth}px`\n bmSignaturePadElement.style.height = `${canvasHeight}px`\n bmSignaturePadElement.style.backgroundSize = 'cover'\n bmSignaturePadElement.style.backgroundImage = `url(${imageSrc})`\n canvasElement.width = canvasWidth\n canvasElement.height = canvasHeight\n }\n console.log('imageSrc', imageSrc)\n i.src = imageSrc\n\n return () => {\n scrollingService.enableScrolling()\n }\n }, [imageSrc])\n\n return (\n <div className=\"modal is-active\">\n <div className=\"modal-background-faded\"></div>\n <div className=\"ob-annotation\">\n <div className=\"ob-annotation__buttons ob-annotation__buttons-colours\">\n {annotationButtonColours.map((colour, index) => {\n return (\n <button\n key={index}\n type=\"button\"\n className={clsx(\n 'button ob-annotation__button ob-annotation__button-colour cypress-annotation-colour-button',\n {\n 'is-selected': penColour === colour,\n },\n )}\n onClick={() => setPenColour(colour)}\n style={{ backgroundColor: colour }}\n />\n )\n })}\n </div>\n <div\n ref={annotationContentElementRef}\n className=\"ob-annotation__content\"\n >\n <div\n ref={bmSignaturePadRef}\n className=\"ob-annotation__signature-pad cypress-annotation-signature-pad\"\n >\n <SignatureCanvas\n ref={signatureCanvasRef}\n clearOnResize={false}\n // @ts-expect-error ???\n onEnd={setDirty}\n penColor={penColour}\n />\n </div>\n </div>\n <div className=\"ob-annotation__buttons ob-annotation__buttons-actions\">\n <button\n type=\"button\"\n className=\"button is-light ob-button ob-annotation__button ob-annotation__button-action cypress-annotation-cancel-button\"\n onClick={handleCancelAnnotation}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"button is-primary ob-button ob-annotation__button ob-annotation__button-action cypress-annotation-save-button\"\n disabled={!isDirty}\n onClick={handleSaveAnnotation}\n >\n Save\n </button>\n </div>\n </div>\n </div>\n )\n}\n\nexport default React.memo(AnnotationModal)\n"]}
@@ -0,0 +1,26 @@
1
+ /// <reference types="react" />
2
+ declare type AutocompleteOption<T> = {
3
+ label: string;
4
+ value: string;
5
+ data?: T;
6
+ };
7
+ declare type Props<T> = {
8
+ id: string;
9
+ label: string;
10
+ value: unknown | undefined;
11
+ placeholder: string | undefined;
12
+ required: boolean | undefined;
13
+ disabled: boolean | undefined;
14
+ isLoading?: boolean;
15
+ hasError?: boolean;
16
+ validationMessage: string | undefined;
17
+ displayValidationMessage: boolean;
18
+ searchDebounceMs: number;
19
+ searchMinCharacters: number;
20
+ onChangeValue: (newValue: string | undefined, data?: T) => Promise<void> | void;
21
+ onChangeLabel: (newLabel: string) => void;
22
+ onSearch: (label: string, abortSignal: AbortSignal) => Promise<AutocompleteOption<T>[]>;
23
+ };
24
+ declare function AutocompleteDropdown<T>({ id, label, value, placeholder, required, disabled, validationMessage, displayValidationMessage, searchDebounceMs, searchMinCharacters, isLoading, hasError, onChangeValue, onChangeLabel, onSearch, }: Props<T>): JSX.Element;
25
+ declare const _default: typeof AutocompleteDropdown;
26
+ export default _default;
@@ -0,0 +1,174 @@
1
+ import * as React from 'react';
2
+ import clsx from 'clsx';
3
+ import useBooleanState from '../hooks/useBooleanState';
4
+ import { Sentry } from '@oneblink/apps';
5
+ function AutocompleteDropdown({ id, label, value, placeholder, required, disabled, validationMessage, displayValidationMessage, searchDebounceMs, searchMinCharacters, isLoading, hasError, onChangeValue, onChangeLabel, onSearch, }) {
6
+ const optionsContainerElement = React.useRef(null);
7
+ const [isDirty, setIsDirty] = React.useState(false);
8
+ const [currentFocusedOptionIndex, setCurrentFocusedOptionIndex] = React.useState(0);
9
+ const [options, setOptions] = React.useState([]);
10
+ const [error, setError] = React.useState(null);
11
+ const [isFetchingOptions, setIsFetchingOptions] = React.useState(false);
12
+ const [isOpen, onOpen, onClose] = useBooleanState(false);
13
+ const onSelectOption = React.useCallback((option) => {
14
+ onChangeLabel(option.label);
15
+ onChangeValue(option.value, option.data);
16
+ onClose();
17
+ }, [onChangeLabel, onChangeValue, onClose]);
18
+ const handleClickOption = React.useCallback((event, option) => {
19
+ console.log('Selected element option in autocomplete', option);
20
+ event.preventDefault();
21
+ event.stopPropagation();
22
+ onSelectOption(option);
23
+ }, [onSelectOption]);
24
+ const onFocus = React.useCallback(() => {
25
+ setCurrentFocusedOptionIndex(0);
26
+ onOpen();
27
+ }, [onOpen]);
28
+ // When moving away from the input, if this is no value remove
29
+ // the label to show the user they have not selected a value
30
+ const handleBlur = React.useCallback(() => {
31
+ setIsDirty(true);
32
+ setError(null);
33
+ onClose();
34
+ if (!value && Array.isArray(options)) {
35
+ // If there is no option currently selected but the typed in label
36
+ // matches an option's label, set that option as the value, otherwise remove label
37
+ if (label) {
38
+ const lowerCase = label.toLowerCase();
39
+ const option = options.find((option) => option.label.toLowerCase() === lowerCase);
40
+ if (option) {
41
+ console.log('Setting value after blurring away from autocomplete');
42
+ onSelectOption(option);
43
+ return;
44
+ }
45
+ }
46
+ console.log('Removing label after blurring away from autocomplete');
47
+ onChangeLabel('');
48
+ }
49
+ }, [label, onChangeLabel, onClose, onSelectOption, options, value]);
50
+ const onKeyDown = React.useCallback((event) => {
51
+ if (!options) {
52
+ return;
53
+ }
54
+ const enterPressed = event.keyCode === 13;
55
+ const upArrowPressed = event.keyCode === 38;
56
+ const downArrowPressed = event.keyCode === 40;
57
+ if (!upArrowPressed && !downArrowPressed && !enterPressed) {
58
+ return;
59
+ }
60
+ event.preventDefault();
61
+ const previousFocusedOptionIndex = currentFocusedOptionIndex;
62
+ let nextFocusedOptionIndex = currentFocusedOptionIndex;
63
+ if (upArrowPressed) {
64
+ nextFocusedOptionIndex = Math.max(0, currentFocusedOptionIndex - 1);
65
+ }
66
+ else if (downArrowPressed) {
67
+ nextFocusedOptionIndex = Math.min(options.length - 1, currentFocusedOptionIndex + 1);
68
+ }
69
+ else if (enterPressed) {
70
+ const option = options[nextFocusedOptionIndex];
71
+ if (option) {
72
+ onSelectOption(option);
73
+ }
74
+ }
75
+ // If the index has changed, need to ensure the active option is visible
76
+ if (previousFocusedOptionIndex !== nextFocusedOptionIndex &&
77
+ optionsContainerElement.current) {
78
+ const activeStepElement = optionsContainerElement.current.querySelector(`.ob-autocomplete__drop-down-item-${nextFocusedOptionIndex}`);
79
+ if (activeStepElement) {
80
+ activeStepElement.scrollIntoView({
81
+ behavior: 'smooth',
82
+ block: 'nearest',
83
+ inline: 'start',
84
+ });
85
+ }
86
+ setCurrentFocusedOptionIndex(nextFocusedOptionIndex);
87
+ }
88
+ }, [currentFocusedOptionIndex, options, onSelectOption]);
89
+ const handleChangeLabel = React.useCallback((e) => {
90
+ const newLabel = e.target.value;
91
+ onOpen();
92
+ setCurrentFocusedOptionIndex(0);
93
+ // Remove value when changing label
94
+ onChangeValue(undefined);
95
+ onChangeLabel(newLabel);
96
+ }, [onChangeLabel, onChangeValue, onOpen]);
97
+ React.useEffect(() => {
98
+ setError(null);
99
+ if (!isOpen || label.length < searchMinCharacters) {
100
+ setIsFetchingOptions(false);
101
+ return;
102
+ }
103
+ setIsFetchingOptions(true);
104
+ let ignore = false;
105
+ const abortController = new AbortController();
106
+ const timeoutId = setTimeout(async () => {
107
+ let newOptions = [];
108
+ let newError = null;
109
+ try {
110
+ newOptions = await onSearch(label, abortController.signal);
111
+ }
112
+ catch (error) {
113
+ // Cancelling will throw an error.
114
+ if (!abortController.signal.aborted) {
115
+ console.warn('Error while fetching autocomplete options', error);
116
+ Sentry.captureException(error);
117
+ newError = error;
118
+ }
119
+ }
120
+ if (!ignore) {
121
+ setError(newError);
122
+ setOptions(newOptions);
123
+ setIsFetchingOptions(false);
124
+ }
125
+ }, searchDebounceMs);
126
+ return () => {
127
+ ignore = true;
128
+ clearTimeout(timeoutId);
129
+ abortController.abort();
130
+ };
131
+ }, [isOpen, label, onSearch, searchDebounceMs, searchMinCharacters]);
132
+ const isShowingLoading = isFetchingOptions || !!isLoading;
133
+ const isShowingValid = !isShowingLoading && value !== undefined;
134
+ const isShowingError = !isShowingLoading && !!hasError;
135
+ return (React.createElement(React.Fragment, null,
136
+ React.createElement("div", { className: clsx('dropdown', {
137
+ 'is-active': isOpen && Array.isArray(options),
138
+ }) },
139
+ React.createElement("div", { className: "field" },
140
+ React.createElement("div", { className: clsx('cypress-autocomplete-field-control control is-expanded', {
141
+ 'is-loading': isShowingLoading,
142
+ 'has-icons-right': isShowingValid || isShowingError,
143
+ }) },
144
+ React.createElement("input", { type: "text", placeholder: placeholder, id: id, autoComplete: "off", className: "cypress-autocomplete-control input ob-input", required: required, value: label, disabled: disabled, onFocus: onFocus, onBlur: handleBlur, onKeyDown: onKeyDown, onChange: handleChangeLabel }),
145
+ isShowingValid && (React.createElement("span", { className: " ob-input-icon icon is-small is-right" },
146
+ React.createElement("i", { className: "material-icons is-size-5 has-text-success" }, "check"))),
147
+ isShowingError && (React.createElement("span", { className: " ob-input-icon icon is-small is-right" },
148
+ React.createElement("i", { className: "material-icons is-size-5 has-text-danger" }, "error"))))),
149
+ React.createElement("div", { className: "dropdown-menu" },
150
+ React.createElement("div", { ref: optionsContainerElement, className: "ob-autocomplete__dropdown-content dropdown-content cypress-autocomplete-dropdown-content" }, error ? (React.createElement("a", { className: "dropdown-item cypress-autocomplete-error ob-autocomplete__drop-down-item-error" },
151
+ React.createElement("span", { className: "has-text-danger" }, error.message))) : label.length < searchMinCharacters ? (React.createElement("a", { className: "dropdown-item cypress-max-characters ob-autocomplete__drop-down-item-max-characters" },
152
+ React.createElement("i", null,
153
+ "Enter at least ",
154
+ searchMinCharacters,
155
+ " character(s) to search"))) : isShowingLoading ? (React.createElement("a", { className: "dropdown-item cypress-searching-options ob-autocomplete__drop-down-item-searching" },
156
+ React.createElement("i", null, "Searching..."))) : options && options.length ? (options.map((option, index) => (React.createElement("a", { key: option.value, className: clsx(`dropdown-item cypress-autocomplete-dropdown-item ob-autocomplete__drop-down-item-${index}`, {
157
+ 'is-active': currentFocusedOptionIndex === index,
158
+ }), onMouseDown: (e) => handleClickOption(e, option), dangerouslySetInnerHTML: {
159
+ __html: highlightLabel(option.label, label),
160
+ } })))) : (React.createElement("a", { className: "dropdown-item cypress-no-matches-found ob-autocomplete__drop-down-item-no-matches" },
161
+ React.createElement("i", null, "No matches found")))))),
162
+ (isDirty || displayValidationMessage) &&
163
+ !!validationMessage &&
164
+ !isShowingLoading && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
165
+ React.createElement("div", { className: "has-text-danger ob-error__text cypress-validation-message" }, validationMessage)))));
166
+ }
167
+ export default React.memo(AutocompleteDropdown);
168
+ function highlightLabel(text, phrase) {
169
+ if (phrase) {
170
+ text = text.replace(new RegExp('(' + phrase + ')', 'gi'), '<b>$1</b>');
171
+ }
172
+ return text;
173
+ }
174
+ //# sourceMappingURL=AutocompleteDropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutocompleteDropdown.js","sourceRoot":"","sources":["../../src/components/AutocompleteDropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\n\nimport useBooleanState from '../hooks/useBooleanState'\nimport { Sentry } from '@oneblink/apps'\n\ntype AutocompleteOption<T> = {\n label: string\n value: string\n data?: T\n}\n\ntype Props<T> = {\n id: string\n label: string\n value: unknown | undefined\n placeholder: string | undefined\n required: boolean | undefined\n disabled: boolean | undefined\n isLoading?: boolean\n hasError?: boolean\n validationMessage: string | undefined\n displayValidationMessage: boolean\n searchDebounceMs: number\n searchMinCharacters: number\n onChangeValue: (\n newValue: string | undefined,\n data?: T,\n ) => Promise<void> | void\n onChangeLabel: (newLabel: string) => void\n onSearch: (\n label: string,\n abortSignal: AbortSignal,\n ) => Promise<AutocompleteOption<T>[]>\n}\n\nfunction AutocompleteDropdown<T>({\n id,\n label,\n value,\n placeholder,\n required,\n disabled,\n validationMessage,\n displayValidationMessage,\n searchDebounceMs,\n searchMinCharacters,\n isLoading,\n hasError,\n onChangeValue,\n onChangeLabel,\n onSearch,\n}: Props<T>) {\n const optionsContainerElement = React.useRef<HTMLDivElement>(null)\n const [isDirty, setIsDirty] = React.useState(false)\n const [currentFocusedOptionIndex, setCurrentFocusedOptionIndex] =\n React.useState(0)\n const [options, setOptions] = React.useState<AutocompleteOption<T>[]>([])\n const [error, setError] = React.useState<Error | null>(null)\n const [isFetchingOptions, setIsFetchingOptions] = React.useState(false)\n const [isOpen, onOpen, onClose] = useBooleanState(false)\n\n const onSelectOption = React.useCallback(\n (option: AutocompleteOption<T>) => {\n onChangeLabel(option.label)\n onChangeValue(option.value, option.data)\n onClose()\n },\n [onChangeLabel, onChangeValue, onClose],\n )\n\n const handleClickOption = React.useCallback(\n (event, option: AutocompleteOption<T>) => {\n console.log('Selected element option in autocomplete', option)\n\n event.preventDefault()\n event.stopPropagation()\n\n onSelectOption(option)\n },\n [onSelectOption],\n )\n\n const onFocus = React.useCallback(() => {\n setCurrentFocusedOptionIndex(0)\n onOpen()\n }, [onOpen])\n\n // When moving away from the input, if this is no value remove\n // the label to show the user they have not selected a value\n const handleBlur = React.useCallback(() => {\n setIsDirty(true)\n setError(null)\n onClose()\n\n if (!value && Array.isArray(options)) {\n // If there is no option currently selected but the typed in label\n // matches an option's label, set that option as the value, otherwise remove label\n if (label) {\n const lowerCase = label.toLowerCase()\n const option = options.find(\n (option) => option.label.toLowerCase() === lowerCase,\n )\n if (option) {\n console.log('Setting value after blurring away from autocomplete')\n onSelectOption(option)\n return\n }\n }\n console.log('Removing label after blurring away from autocomplete')\n onChangeLabel('')\n }\n }, [label, onChangeLabel, onClose, onSelectOption, options, value])\n\n const onKeyDown = React.useCallback(\n (event) => {\n if (!options) {\n return\n }\n const enterPressed = event.keyCode === 13\n const upArrowPressed = event.keyCode === 38\n const downArrowPressed = event.keyCode === 40\n if (!upArrowPressed && !downArrowPressed && !enterPressed) {\n return\n }\n\n event.preventDefault()\n\n const previousFocusedOptionIndex = currentFocusedOptionIndex\n let nextFocusedOptionIndex = currentFocusedOptionIndex\n if (upArrowPressed) {\n nextFocusedOptionIndex = Math.max(0, currentFocusedOptionIndex - 1)\n } else if (downArrowPressed) {\n nextFocusedOptionIndex = Math.min(\n options.length - 1,\n currentFocusedOptionIndex + 1,\n )\n } else if (enterPressed) {\n const option = options[nextFocusedOptionIndex]\n if (option) {\n onSelectOption(option)\n }\n }\n\n // If the index has changed, need to ensure the active option is visible\n if (\n previousFocusedOptionIndex !== nextFocusedOptionIndex &&\n optionsContainerElement.current\n ) {\n const activeStepElement = optionsContainerElement.current.querySelector(\n `.ob-autocomplete__drop-down-item-${nextFocusedOptionIndex}`,\n )\n if (activeStepElement) {\n activeStepElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n })\n }\n setCurrentFocusedOptionIndex(nextFocusedOptionIndex)\n }\n },\n [currentFocusedOptionIndex, options, onSelectOption],\n )\n\n const handleChangeLabel = React.useCallback(\n (e) => {\n const newLabel = e.target.value\n onOpen()\n setCurrentFocusedOptionIndex(0)\n\n // Remove value when changing label\n onChangeValue(undefined)\n onChangeLabel(newLabel)\n },\n [onChangeLabel, onChangeValue, onOpen],\n )\n\n React.useEffect(() => {\n setError(null)\n\n if (!isOpen || label.length < searchMinCharacters) {\n setIsFetchingOptions(false)\n return\n }\n\n setIsFetchingOptions(true)\n\n let ignore = false\n const abortController = new AbortController()\n\n const timeoutId = setTimeout(async () => {\n let newOptions: AutocompleteOption<T>[] = []\n let newError = null\n\n try {\n newOptions = await onSearch(label, abortController.signal)\n } catch (error) {\n // Cancelling will throw an error.\n if (!abortController.signal.aborted) {\n console.warn('Error while fetching autocomplete options', error)\n Sentry.captureException(error)\n newError = error as Error\n }\n }\n if (!ignore) {\n setError(newError)\n setOptions(newOptions)\n setIsFetchingOptions(false)\n }\n }, searchDebounceMs)\n\n return () => {\n ignore = true\n clearTimeout(timeoutId)\n abortController.abort()\n }\n }, [isOpen, label, onSearch, searchDebounceMs, searchMinCharacters])\n\n const isShowingLoading = isFetchingOptions || !!isLoading\n const isShowingValid = !isShowingLoading && value !== undefined\n const isShowingError = !isShowingLoading && !!hasError\n\n return (\n <>\n <div\n className={clsx('dropdown', {\n 'is-active': isOpen && Array.isArray(options),\n })}\n >\n <div className=\"field\">\n <div\n className={clsx(\n 'cypress-autocomplete-field-control control is-expanded',\n {\n 'is-loading': isShowingLoading,\n 'has-icons-right': isShowingValid || isShowingError,\n },\n )}\n >\n <input\n type=\"text\"\n placeholder={placeholder}\n id={id}\n autoComplete=\"off\"\n className=\"cypress-autocomplete-control input ob-input\"\n required={required}\n value={label}\n disabled={disabled}\n onFocus={onFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n onChange={handleChangeLabel}\n />\n {isShowingValid && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <i className=\"material-icons is-size-5 has-text-success\">\n check\n </i>\n </span>\n )}\n {isShowingError && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <i className=\"material-icons is-size-5 has-text-danger\">\n error\n </i>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"dropdown-menu\">\n <div\n ref={optionsContainerElement}\n className=\"ob-autocomplete__dropdown-content dropdown-content cypress-autocomplete-dropdown-content\"\n >\n {error ? (\n <a className=\"dropdown-item cypress-autocomplete-error ob-autocomplete__drop-down-item-error\">\n <span className=\"has-text-danger\">{error.message}</span>\n </a>\n ) : label.length < searchMinCharacters ? (\n <a className=\"dropdown-item cypress-max-characters ob-autocomplete__drop-down-item-max-characters\">\n <i>\n Enter at least {searchMinCharacters} character(s) to search\n </i>\n </a>\n ) : isShowingLoading ? (\n <a className=\"dropdown-item cypress-searching-options ob-autocomplete__drop-down-item-searching\">\n <i>Searching...</i>\n </a>\n ) : options && options.length ? (\n options.map((option, index) => (\n <a\n key={option.value}\n className={clsx(\n `dropdown-item cypress-autocomplete-dropdown-item ob-autocomplete__drop-down-item-${index}`,\n {\n 'is-active': currentFocusedOptionIndex === index,\n },\n )}\n onMouseDown={(e) => handleClickOption(e, option)}\n dangerouslySetInnerHTML={{\n __html: highlightLabel(option.label, label),\n }}\n />\n ))\n ) : (\n <a className=\"dropdown-item cypress-no-matches-found ob-autocomplete__drop-down-item-no-matches\">\n <i>No matches found</i>\n </a>\n )}\n </div>\n </div>\n </div>\n\n {(isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isShowingLoading && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </>\n )\n}\n\nexport default React.memo(AutocompleteDropdown) as typeof AutocompleteDropdown\n\nfunction highlightLabel(text: string, phrase: string) {\n if (phrase) {\n text = text.replace(new RegExp('(' + phrase + ')', 'gi'), '<b>$1</b>')\n }\n\n return text\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ declare type Props = {
3
+ text: string;
4
+ className?: string;
5
+ isInputButton?: boolean;
6
+ };
7
+ declare function CopyToClipboardButton({ className, text, isInputButton }: Props): JSX.Element;
8
+ declare const _default: React.MemoExoticComponent<typeof CopyToClipboardButton>;
9
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import utilsService from '../services/utils-service';
3
+ function CopyToClipboardButton({ className, text, isInputButton }) {
4
+ const copy = React.useCallback(() => {
5
+ utilsService.copyToClipboard(text);
6
+ }, [text]);
7
+ return (React.createElement("button", { onClick: copy, className: className, type: "button" },
8
+ React.createElement("span", null),
9
+ React.createElement("span", { className: "icon" },
10
+ React.createElement("i", { className: "material-icons" }, "file_copy")),
11
+ React.createElement("span", { className: isInputButton ? 'is-hidden-mobile' : undefined }, "\u00A0Copy")));
12
+ }
13
+ export default React.memo(CopyToClipboardButton);
14
+ //# sourceMappingURL=CopyToClipboardButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopyToClipboardButton.js","sourceRoot":"","sources":["../../src/components/CopyToClipboardButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,YAAY,MAAM,2BAA2B,CAAA;AAQpD,SAAS,qBAAqB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAS;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAClC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACV,OAAO,CACL,gCAAQ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,QAAQ;QACxD,iCAAa;QACb,8BAAM,SAAS,EAAC,MAAM;YACpB,2BAAG,SAAS,EAAC,gBAAgB,gBAAc,CACtC;QACP,8BAAM,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,iBAExD,CACA,CACV,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\n\nimport utilsService from '../services/utils-service'\n\ntype Props = {\n text: string\n className?: string\n isInputButton?: boolean\n}\n\nfunction CopyToClipboardButton({ className, text, isInputButton }: Props) {\n const copy = React.useCallback(() => {\n utilsService.copyToClipboard(text)\n }, [text])\n return (\n <button onClick={copy} className={className} type=\"button\">\n <span></span>\n <span className=\"icon\">\n <i className=\"material-icons\">file_copy</i>\n </span>\n <span className={isInputButton ? 'is-hidden-mobile' : undefined}>\n &nbsp;Copy\n </span>\n </button>\n )\n}\n\nexport default React.memo(CopyToClipboardButton)\n"]}