@nocios/crudify-components 2.0.81 → 2.0.88

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 (394) hide show
  1. package/README.md +21 -0
  2. package/dist/api-jcCTCqPD.d.mts +61 -0
  3. package/dist/api-jcCTCqPD.d.ts +61 -0
  4. package/dist/chunk-4I767MRM.mjs +142 -0
  5. package/dist/chunk-5V5ILPP3.js +1 -0
  6. package/dist/chunk-BJEDX2HU.js +142 -0
  7. package/dist/chunk-GZOB4JDB.js +1 -0
  8. package/dist/chunk-ODKXUEH5.js +1 -0
  9. package/dist/chunk-U335FNUD.mjs +1 -0
  10. package/dist/chunk-YRU7AXYV.mjs +1 -0
  11. package/dist/chunk-Z75DRSTN.mjs +1 -0
  12. package/dist/{errorTranslation-BEWwDbCH.d.ts → errorTranslation-BdqG-dXD.d.ts} +97 -26
  13. package/dist/{errorTranslation-DsGZon0M.d.mts → errorTranslation-BxJmBGx0.d.mts} +97 -26
  14. package/dist/hooks.d.mts +3 -4
  15. package/dist/hooks.d.ts +3 -4
  16. package/dist/hooks.js +1 -1
  17. package/dist/hooks.mjs +1 -1
  18. package/dist/{index-ZcF6nJt4.d.mts → index-Cx9P3ZCG.d.mts} +96 -27
  19. package/dist/{index-Dnmttf62.d.ts → index-rHtWMls-.d.ts} +96 -27
  20. package/dist/index.d.mts +366 -118
  21. package/dist/index.d.ts +366 -118
  22. package/dist/index.js +2 -2
  23. package/dist/index.mjs +2 -2
  24. package/dist/public-policies.d.mts +7 -0
  25. package/dist/public-policies.d.ts +7 -0
  26. package/dist/public-policies.js +1 -0
  27. package/dist/public-policies.mjs +1 -0
  28. package/dist/utils.d.mts +71 -3
  29. package/dist/utils.d.ts +71 -3
  30. package/dist/utils.js +1 -1
  31. package/dist/utils.mjs +1 -1
  32. package/package.json +44 -42
  33. package/.github/workflows/ci.yml +0 -70
  34. package/.husky/pre-commit +0 -26
  35. package/.husky/pre-push +0 -30
  36. package/.nvmrc +0 -1
  37. package/.prettierignore +0 -18
  38. package/.prettierrc +0 -9
  39. package/.scannerwork/.sonar_lock +0 -0
  40. package/.scannerwork/report-task.txt +0 -6
  41. package/README_DEPTH.md +0 -1237
  42. package/coverage/base.css +0 -224
  43. package/coverage/block-navigation.js +0 -87
  44. package/coverage/components/CrudiaAutoGenerate.tsx.html +0 -616
  45. package/coverage/components/CrudiaFileField/CrudiaFileField.tsx.html +0 -1312
  46. package/coverage/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +0 -355
  47. package/coverage/components/CrudiaFileField/components/DropZone.tsx.html +0 -523
  48. package/coverage/components/CrudiaFileField/components/FileItemRow.tsx.html +0 -835
  49. package/coverage/components/CrudiaFileField/components/FileThumbnail.tsx.html +0 -1585
  50. package/coverage/components/CrudiaFileField/components/index.html +0 -176
  51. package/coverage/components/CrudiaFileField/components/index.ts.html +0 -115
  52. package/coverage/components/CrudiaFileField/hooks/index.html +0 -146
  53. package/coverage/components/CrudiaFileField/hooks/index.ts.html +0 -112
  54. package/coverage/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +0 -433
  55. package/coverage/components/CrudiaFileField/hooks/useDragDrop.ts.html +0 -409
  56. package/coverage/components/CrudiaFileField/index.html +0 -131
  57. package/coverage/components/CrudiaFileField/index.ts.html +0 -112
  58. package/coverage/components/CrudiaFileField/utils/formatters.ts.html +0 -169
  59. package/coverage/components/CrudiaFileField/utils/icons.tsx.html +0 -253
  60. package/coverage/components/CrudiaFileField/utils/index.html +0 -146
  61. package/coverage/components/CrudiaFileField/utils/index.ts.html +0 -103
  62. package/coverage/components/CrudiaMarkdownField.tsx.html +0 -676
  63. package/coverage/components/CrudifyInitializer.tsx.html +0 -712
  64. package/coverage/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +0 -640
  65. package/coverage/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +0 -730
  66. package/coverage/components/CrudifyLogin/Forms/LoginForm.tsx.html +0 -892
  67. package/coverage/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +0 -1219
  68. package/coverage/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +0 -289
  69. package/coverage/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +0 -202
  70. package/coverage/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +0 -346
  71. package/coverage/components/CrudifyLogin/Forms/components/index.html +0 -161
  72. package/coverage/components/CrudifyLogin/Forms/components/index.ts.html +0 -106
  73. package/coverage/components/CrudifyLogin/Forms/index.html +0 -176
  74. package/coverage/components/CrudifyLogin/Forms/index.ts.html +0 -145
  75. package/coverage/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +0 -268
  76. package/coverage/components/CrudifyLogin/Forms/utils/index.html +0 -161
  77. package/coverage/components/CrudifyLogin/Forms/utils/index.ts.html +0 -121
  78. package/coverage/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +0 -496
  79. package/coverage/components/CrudifyLogin/Forms/utils/validation.ts.html +0 -307
  80. package/coverage/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +0 -268
  81. package/coverage/components/CrudifyLogin/components/index.html +0 -116
  82. package/coverage/components/CrudifyLogin/context/CrudifyProvider.tsx.html +0 -409
  83. package/coverage/components/CrudifyLogin/context/I18nProvider.tsx.html +0 -430
  84. package/coverage/components/CrudifyLogin/context/LoginStateProvider.tsx.html +0 -1261
  85. package/coverage/components/CrudifyLogin/context/index.html +0 -161
  86. package/coverage/components/CrudifyLogin/context/index.ts.html +0 -91
  87. package/coverage/components/CrudifyLogin/hooks/index.html +0 -131
  88. package/coverage/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +0 -463
  89. package/coverage/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +0 -391
  90. package/coverage/components/CrudifyLogin/index.html +0 -116
  91. package/coverage/components/CrudifyLogin/index.tsx.html +0 -466
  92. package/coverage/components/CrudifyLogin/utils/index.html +0 -116
  93. package/coverage/components/CrudifyLogin/utils/secureStorage.ts.html +0 -859
  94. package/coverage/components/GlobalNotificationProvider.tsx.html +0 -844
  95. package/coverage/components/LoginComponent.tsx.html +0 -676
  96. package/coverage/components/PasswordRequirements/index.html +0 -116
  97. package/coverage/components/PasswordRequirements/index.tsx.html +0 -232
  98. package/coverage/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +0 -1078
  99. package/coverage/components/PublicPolicies/FieldSelector/index.html +0 -131
  100. package/coverage/components/PublicPolicies/FieldSelector/index.ts.html +0 -88
  101. package/coverage/components/PublicPolicies/Policies.tsx.html +0 -625
  102. package/coverage/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +0 -886
  103. package/coverage/components/PublicPolicies/PolicyItem/index.html +0 -131
  104. package/coverage/components/PublicPolicies/PolicyItem/index.ts.html +0 -88
  105. package/coverage/components/PublicPolicies/constants.ts.html +0 -106
  106. package/coverage/components/PublicPolicies/index.html +0 -146
  107. package/coverage/components/PublicPolicies/index.ts.html +0 -88
  108. package/coverage/components/Routing/AuthRoute.tsx.html +0 -382
  109. package/coverage/components/Routing/GuestRoute.tsx.html +0 -352
  110. package/coverage/components/Routing/ProtectedRoute.tsx.html +0 -316
  111. package/coverage/components/Routing/index.html +0 -161
  112. package/coverage/components/Routing/index.ts.html +0 -109
  113. package/coverage/components/SessionLoadingScreen/index.html +0 -116
  114. package/coverage/components/SessionLoadingScreen/index.tsx.html +0 -379
  115. package/coverage/components/SessionTimeIndicator/index.html +0 -116
  116. package/coverage/components/SessionTimeIndicator/index.tsx.html +0 -523
  117. package/coverage/components/UserProfile/UserProfileDisplay.tsx.html +0 -931
  118. package/coverage/components/UserProfile/index.html +0 -131
  119. package/coverage/components/UserProfile/index.ts.html +0 -88
  120. package/coverage/components/index.html +0 -191
  121. package/coverage/components/index.ts.html +0 -178
  122. package/coverage/core/CrossTabSyncManager.ts.html +0 -853
  123. package/coverage/core/CrudifyInitializationManager.ts.html +0 -1279
  124. package/coverage/core/SessionManager.ts.html +0 -3064
  125. package/coverage/core/index.html +0 -146
  126. package/coverage/coverage-final.json +0 -117
  127. package/coverage/favicon.png +0 -0
  128. package/coverage/hooks/index.html +0 -191
  129. package/coverage/hooks/index.ts.html +0 -136
  130. package/coverage/hooks/useAuth.ts.html +0 -529
  131. package/coverage/hooks/useAutoGenerate.ts.html +0 -571
  132. package/coverage/hooks/useCrudifyWithNotifications/constants.ts.html +0 -247
  133. package/coverage/hooks/useCrudifyWithNotifications/hooks/index.html +0 -116
  134. package/coverage/hooks/useCrudifyWithNotifications/hooks/useCrudOperations.ts.html +0 -820
  135. package/coverage/hooks/useCrudifyWithNotifications/index.html +0 -146
  136. package/coverage/hooks/useCrudifyWithNotifications/index.ts.html +0 -118
  137. package/coverage/hooks/useCrudifyWithNotifications/useCrudifyWithNotifications.ts.html +0 -565
  138. package/coverage/hooks/useCrudifyWithNotifications/utils/errorMessageResolver.ts.html +0 -847
  139. package/coverage/hooks/useCrudifyWithNotifications/utils/index.html +0 -146
  140. package/coverage/hooks/useCrudifyWithNotifications/utils/notificationFilters.ts.html +0 -313
  141. package/coverage/hooks/useCrudifyWithNotifications/utils/successMessageResolver.ts.html +0 -265
  142. package/coverage/hooks/useData.ts.html +0 -829
  143. package/coverage/hooks/useFileUpload/index.html +0 -131
  144. package/coverage/hooks/useFileUpload/index.ts.html +0 -112
  145. package/coverage/hooks/useFileUpload/services/index.html +0 -131
  146. package/coverage/hooks/useFileUpload/services/index.ts.html +0 -106
  147. package/coverage/hooks/useFileUpload/services/uploadService.ts.html +0 -610
  148. package/coverage/hooks/useFileUpload/useFileUpload.ts.html +0 -2092
  149. package/coverage/hooks/useFileUpload/utils/fileUtils.ts.html +0 -271
  150. package/coverage/hooks/useFileUpload/utils/index.html +0 -161
  151. package/coverage/hooks/useFileUpload/utils/index.ts.html +0 -109
  152. package/coverage/hooks/useFileUpload/utils/mimeTypes.ts.html +0 -235
  153. package/coverage/hooks/useFileUpload/utils/validation.ts.html +0 -403
  154. package/coverage/hooks/useSession/constants.ts.html +0 -217
  155. package/coverage/hooks/useSession/hooks/index.html +0 -176
  156. package/coverage/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +0 -331
  157. package/coverage/hooks/useSession/hooks/useCrossTabSync.ts.html +0 -535
  158. package/coverage/hooks/useSession/hooks/useSessionActions.ts.html +0 -664
  159. package/coverage/hooks/useSession/hooks/useSessionState.ts.html +0 -295
  160. package/coverage/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +0 -535
  161. package/coverage/hooks/useSession/index.html +0 -161
  162. package/coverage/hooks/useSession/index.ts.html +0 -127
  163. package/coverage/hooks/useSession/types.ts.html +0 -427
  164. package/coverage/hooks/useSession/useSession.ts.html +0 -526
  165. package/coverage/hooks/useSession/utils/index.html +0 -131
  166. package/coverage/hooks/useSession/utils/initializeSession.ts.html +0 -424
  167. package/coverage/hooks/useSession/utils/tokenUtils.ts.html +0 -298
  168. package/coverage/hooks/useUserData.ts.html +0 -1210
  169. package/coverage/hooks/useUserProfile.ts.html +0 -820
  170. package/coverage/index.html +0 -656
  171. package/coverage/lcov-report/base.css +0 -224
  172. package/coverage/lcov-report/block-navigation.js +0 -87
  173. package/coverage/lcov-report/components/CrudiaAutoGenerate.tsx.html +0 -616
  174. package/coverage/lcov-report/components/CrudiaFileField/CrudiaFileField.tsx.html +0 -1312
  175. package/coverage/lcov-report/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +0 -355
  176. package/coverage/lcov-report/components/CrudiaFileField/components/DropZone.tsx.html +0 -523
  177. package/coverage/lcov-report/components/CrudiaFileField/components/FileItemRow.tsx.html +0 -835
  178. package/coverage/lcov-report/components/CrudiaFileField/components/FileThumbnail.tsx.html +0 -1585
  179. package/coverage/lcov-report/components/CrudiaFileField/components/index.html +0 -176
  180. package/coverage/lcov-report/components/CrudiaFileField/components/index.ts.html +0 -115
  181. package/coverage/lcov-report/components/CrudiaFileField/hooks/index.html +0 -146
  182. package/coverage/lcov-report/components/CrudiaFileField/hooks/index.ts.html +0 -112
  183. package/coverage/lcov-report/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +0 -433
  184. package/coverage/lcov-report/components/CrudiaFileField/hooks/useDragDrop.ts.html +0 -409
  185. package/coverage/lcov-report/components/CrudiaFileField/index.html +0 -131
  186. package/coverage/lcov-report/components/CrudiaFileField/index.ts.html +0 -112
  187. package/coverage/lcov-report/components/CrudiaFileField/utils/formatters.ts.html +0 -169
  188. package/coverage/lcov-report/components/CrudiaFileField/utils/icons.tsx.html +0 -253
  189. package/coverage/lcov-report/components/CrudiaFileField/utils/index.html +0 -146
  190. package/coverage/lcov-report/components/CrudiaFileField/utils/index.ts.html +0 -103
  191. package/coverage/lcov-report/components/CrudiaMarkdownField.tsx.html +0 -676
  192. package/coverage/lcov-report/components/CrudifyInitializer.tsx.html +0 -712
  193. package/coverage/lcov-report/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +0 -640
  194. package/coverage/lcov-report/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +0 -730
  195. package/coverage/lcov-report/components/CrudifyLogin/Forms/LoginForm.tsx.html +0 -892
  196. package/coverage/lcov-report/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +0 -1219
  197. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +0 -289
  198. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +0 -202
  199. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +0 -346
  200. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/index.html +0 -161
  201. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/index.ts.html +0 -106
  202. package/coverage/lcov-report/components/CrudifyLogin/Forms/index.html +0 -176
  203. package/coverage/lcov-report/components/CrudifyLogin/Forms/index.ts.html +0 -145
  204. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +0 -268
  205. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/index.html +0 -161
  206. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/index.ts.html +0 -121
  207. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +0 -496
  208. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/validation.ts.html +0 -307
  209. package/coverage/lcov-report/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +0 -268
  210. package/coverage/lcov-report/components/CrudifyLogin/components/index.html +0 -116
  211. package/coverage/lcov-report/components/CrudifyLogin/context/CrudifyProvider.tsx.html +0 -409
  212. package/coverage/lcov-report/components/CrudifyLogin/context/I18nProvider.tsx.html +0 -430
  213. package/coverage/lcov-report/components/CrudifyLogin/context/LoginStateProvider.tsx.html +0 -1261
  214. package/coverage/lcov-report/components/CrudifyLogin/context/index.html +0 -161
  215. package/coverage/lcov-report/components/CrudifyLogin/context/index.ts.html +0 -91
  216. package/coverage/lcov-report/components/CrudifyLogin/hooks/index.html +0 -131
  217. package/coverage/lcov-report/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +0 -463
  218. package/coverage/lcov-report/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +0 -391
  219. package/coverage/lcov-report/components/CrudifyLogin/index.html +0 -116
  220. package/coverage/lcov-report/components/CrudifyLogin/index.tsx.html +0 -466
  221. package/coverage/lcov-report/components/CrudifyLogin/utils/index.html +0 -116
  222. package/coverage/lcov-report/components/CrudifyLogin/utils/secureStorage.ts.html +0 -859
  223. package/coverage/lcov-report/components/GlobalNotificationProvider.tsx.html +0 -844
  224. package/coverage/lcov-report/components/LoginComponent.tsx.html +0 -676
  225. package/coverage/lcov-report/components/PasswordRequirements/index.html +0 -116
  226. package/coverage/lcov-report/components/PasswordRequirements/index.tsx.html +0 -232
  227. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +0 -1078
  228. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/index.html +0 -131
  229. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/index.ts.html +0 -88
  230. package/coverage/lcov-report/components/PublicPolicies/Policies.tsx.html +0 -625
  231. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +0 -886
  232. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/index.html +0 -131
  233. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/index.ts.html +0 -88
  234. package/coverage/lcov-report/components/PublicPolicies/constants.ts.html +0 -106
  235. package/coverage/lcov-report/components/PublicPolicies/index.html +0 -146
  236. package/coverage/lcov-report/components/PublicPolicies/index.ts.html +0 -88
  237. package/coverage/lcov-report/components/Routing/AuthRoute.tsx.html +0 -382
  238. package/coverage/lcov-report/components/Routing/GuestRoute.tsx.html +0 -352
  239. package/coverage/lcov-report/components/Routing/ProtectedRoute.tsx.html +0 -316
  240. package/coverage/lcov-report/components/Routing/index.html +0 -161
  241. package/coverage/lcov-report/components/Routing/index.ts.html +0 -109
  242. package/coverage/lcov-report/components/SessionLoadingScreen/index.html +0 -116
  243. package/coverage/lcov-report/components/SessionLoadingScreen/index.tsx.html +0 -379
  244. package/coverage/lcov-report/components/SessionTimeIndicator/index.html +0 -116
  245. package/coverage/lcov-report/components/SessionTimeIndicator/index.tsx.html +0 -523
  246. package/coverage/lcov-report/components/UserProfile/UserProfileDisplay.tsx.html +0 -931
  247. package/coverage/lcov-report/components/UserProfile/index.html +0 -131
  248. package/coverage/lcov-report/components/UserProfile/index.ts.html +0 -88
  249. package/coverage/lcov-report/components/index.html +0 -191
  250. package/coverage/lcov-report/components/index.ts.html +0 -178
  251. package/coverage/lcov-report/core/CrossTabSyncManager.ts.html +0 -853
  252. package/coverage/lcov-report/core/CrudifyInitializationManager.ts.html +0 -1279
  253. package/coverage/lcov-report/core/SessionManager.ts.html +0 -3064
  254. package/coverage/lcov-report/core/index.html +0 -146
  255. package/coverage/lcov-report/favicon.png +0 -0
  256. package/coverage/lcov-report/hooks/index.html +0 -191
  257. package/coverage/lcov-report/hooks/index.ts.html +0 -136
  258. package/coverage/lcov-report/hooks/useAuth.ts.html +0 -529
  259. package/coverage/lcov-report/hooks/useAutoGenerate.ts.html +0 -571
  260. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/constants.ts.html +0 -247
  261. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/hooks/index.html +0 -116
  262. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/hooks/useCrudOperations.ts.html +0 -820
  263. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/index.html +0 -146
  264. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/index.ts.html +0 -118
  265. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/useCrudifyWithNotifications.ts.html +0 -565
  266. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/errorMessageResolver.ts.html +0 -847
  267. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/index.html +0 -146
  268. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/notificationFilters.ts.html +0 -313
  269. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/successMessageResolver.ts.html +0 -265
  270. package/coverage/lcov-report/hooks/useData.ts.html +0 -829
  271. package/coverage/lcov-report/hooks/useFileUpload/index.html +0 -131
  272. package/coverage/lcov-report/hooks/useFileUpload/index.ts.html +0 -112
  273. package/coverage/lcov-report/hooks/useFileUpload/services/index.html +0 -131
  274. package/coverage/lcov-report/hooks/useFileUpload/services/index.ts.html +0 -106
  275. package/coverage/lcov-report/hooks/useFileUpload/services/uploadService.ts.html +0 -610
  276. package/coverage/lcov-report/hooks/useFileUpload/useFileUpload.ts.html +0 -2092
  277. package/coverage/lcov-report/hooks/useFileUpload/utils/fileUtils.ts.html +0 -271
  278. package/coverage/lcov-report/hooks/useFileUpload/utils/index.html +0 -161
  279. package/coverage/lcov-report/hooks/useFileUpload/utils/index.ts.html +0 -109
  280. package/coverage/lcov-report/hooks/useFileUpload/utils/mimeTypes.ts.html +0 -235
  281. package/coverage/lcov-report/hooks/useFileUpload/utils/validation.ts.html +0 -403
  282. package/coverage/lcov-report/hooks/useSession/constants.ts.html +0 -217
  283. package/coverage/lcov-report/hooks/useSession/hooks/index.html +0 -176
  284. package/coverage/lcov-report/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +0 -331
  285. package/coverage/lcov-report/hooks/useSession/hooks/useCrossTabSync.ts.html +0 -535
  286. package/coverage/lcov-report/hooks/useSession/hooks/useSessionActions.ts.html +0 -664
  287. package/coverage/lcov-report/hooks/useSession/hooks/useSessionState.ts.html +0 -295
  288. package/coverage/lcov-report/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +0 -535
  289. package/coverage/lcov-report/hooks/useSession/index.html +0 -161
  290. package/coverage/lcov-report/hooks/useSession/index.ts.html +0 -127
  291. package/coverage/lcov-report/hooks/useSession/types.ts.html +0 -427
  292. package/coverage/lcov-report/hooks/useSession/useSession.ts.html +0 -526
  293. package/coverage/lcov-report/hooks/useSession/utils/index.html +0 -131
  294. package/coverage/lcov-report/hooks/useSession/utils/initializeSession.ts.html +0 -424
  295. package/coverage/lcov-report/hooks/useSession/utils/tokenUtils.ts.html +0 -298
  296. package/coverage/lcov-report/hooks/useUserData.ts.html +0 -1210
  297. package/coverage/lcov-report/hooks/useUserProfile.ts.html +0 -820
  298. package/coverage/lcov-report/index.html +0 -656
  299. package/coverage/lcov-report/prettify.css +0 -1
  300. package/coverage/lcov-report/prettify.js +0 -2
  301. package/coverage/lcov-report/providers/CrudifyThemeProvider.tsx.html +0 -316
  302. package/coverage/lcov-report/providers/SessionProvider.tsx.html +0 -1120
  303. package/coverage/lcov-report/providers/TranslationsProvider.tsx.html +0 -1756
  304. package/coverage/lcov-report/providers/index.html +0 -146
  305. package/coverage/lcov-report/services/credentialsEventBus.ts.html +0 -319
  306. package/coverage/lcov-report/services/crudifyAdminWrapper.ts.html +0 -754
  307. package/coverage/lcov-report/services/index.html +0 -146
  308. package/coverage/lcov-report/services/translationService.ts.html +0 -1558
  309. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  310. package/coverage/lcov-report/sorter.js +0 -210
  311. package/coverage/lcov-report/translations/critical.ts.html +0 -1216
  312. package/coverage/lcov-report/translations/index.html +0 -116
  313. package/coverage/lcov-report/types/index.html +0 -116
  314. package/coverage/lcov-report/types/password.ts.html +0 -178
  315. package/coverage/lcov-report/utils/authErrorDetector.ts.html +0 -793
  316. package/coverage/lcov-report/utils/authEventBus.ts.html +0 -454
  317. package/coverage/lcov-report/utils/configResolver.ts.html +0 -460
  318. package/coverage/lcov-report/utils/cookieSync.ts.html +0 -595
  319. package/coverage/lcov-report/utils/errorHandler.ts.html +0 -1480
  320. package/coverage/lcov-report/utils/errorTranslation.ts.html +0 -868
  321. package/coverage/lcov-report/utils/index.html +0 -341
  322. package/coverage/lcov-report/utils/index.ts.html +0 -193
  323. package/coverage/lcov-report/utils/jwtUtils.ts.html +0 -325
  324. package/coverage/lcov-report/utils/logger.ts.html +0 -952
  325. package/coverage/lcov-report/utils/navigationTracker.ts.html +0 -562
  326. package/coverage/lcov-report/utils/passwordValidation.ts.html +0 -259
  327. package/coverage/lcov-report/utils/preAuthCheck.ts.html +0 -442
  328. package/coverage/lcov-report/utils/redirectSecurity.ts.html +0 -733
  329. package/coverage/lcov-report/utils/tenantConfig.ts.html +0 -712
  330. package/coverage/lcov-report/utils/tokenStorage.ts.html +0 -1825
  331. package/coverage/lcov-report/utils/webCrypto.ts.html +0 -490
  332. package/coverage/lcov.info +0 -23367
  333. package/coverage/prettify.css +0 -1
  334. package/coverage/prettify.js +0 -2
  335. package/coverage/providers/CrudifyThemeProvider.tsx.html +0 -316
  336. package/coverage/providers/SessionProvider.tsx.html +0 -1120
  337. package/coverage/providers/TranslationsProvider.tsx.html +0 -1756
  338. package/coverage/providers/index.html +0 -146
  339. package/coverage/services/credentialsEventBus.ts.html +0 -319
  340. package/coverage/services/crudifyAdminWrapper.ts.html +0 -754
  341. package/coverage/services/index.html +0 -146
  342. package/coverage/services/translationService.ts.html +0 -1558
  343. package/coverage/sort-arrow-sprite.png +0 -0
  344. package/coverage/sorter.js +0 -210
  345. package/coverage/translations/critical.ts.html +0 -1216
  346. package/coverage/translations/index.html +0 -116
  347. package/coverage/types/index.html +0 -116
  348. package/coverage/types/password.ts.html +0 -178
  349. package/coverage/utils/authErrorDetector.ts.html +0 -793
  350. package/coverage/utils/authEventBus.ts.html +0 -454
  351. package/coverage/utils/configResolver.ts.html +0 -460
  352. package/coverage/utils/cookieSync.ts.html +0 -595
  353. package/coverage/utils/errorHandler.ts.html +0 -1480
  354. package/coverage/utils/errorTranslation.ts.html +0 -868
  355. package/coverage/utils/index.html +0 -341
  356. package/coverage/utils/index.ts.html +0 -193
  357. package/coverage/utils/jwtUtils.ts.html +0 -325
  358. package/coverage/utils/logger.ts.html +0 -952
  359. package/coverage/utils/navigationTracker.ts.html +0 -562
  360. package/coverage/utils/passwordValidation.ts.html +0 -259
  361. package/coverage/utils/preAuthCheck.ts.html +0 -442
  362. package/coverage/utils/redirectSecurity.ts.html +0 -733
  363. package/coverage/utils/tenantConfig.ts.html +0 -712
  364. package/coverage/utils/tokenStorage.ts.html +0 -1825
  365. package/coverage/utils/webCrypto.ts.html +0 -490
  366. package/dist/CrudiaMarkdownField-DM6NR8zw.d.mts +0 -343
  367. package/dist/CrudiaMarkdownField-UJaiSq9_.d.ts +0 -343
  368. package/dist/GlobalNotificationProvider-Cx540WKg.d.mts +0 -96
  369. package/dist/GlobalNotificationProvider-Cx540WKg.d.ts +0 -96
  370. package/dist/chunk-2DXLCBOT.mjs +0 -1
  371. package/dist/chunk-DYRZIARH.js +0 -1
  372. package/dist/chunk-GCSJXEGT.mjs +0 -1
  373. package/dist/chunk-GJUZD5ZN.js +0 -1
  374. package/dist/chunk-K47I475N.js +0 -1
  375. package/dist/chunk-OCYZGEM5.mjs +0 -1
  376. package/dist/chunk-PI7HPRDB.js +0 -1
  377. package/dist/chunk-QVEUGJBY.mjs +0 -1
  378. package/dist/chunk-UROR7G7N.mjs +0 -1
  379. package/dist/chunk-XFT47DEL.js +0 -1
  380. package/dist/components.d.mts +0 -24
  381. package/dist/components.d.ts +0 -24
  382. package/dist/components.js +0 -1
  383. package/dist/components.mjs +0 -1
  384. package/dist/tenantConfig-DxpfrAof.d.mts +0 -318
  385. package/dist/tenantConfig-DxpfrAof.d.ts +0 -318
  386. package/eslint.config.mjs +0 -140
  387. package/scripts/bump-version.cjs +0 -23
  388. package/sonar-project.properties +0 -23
  389. package/tests/helpers/mockFactories.ts +0 -218
  390. package/tests/helpers/testUtils.tsx +0 -154
  391. package/tests/hooks/useSession/testUtils.tsx +0 -212
  392. package/tests/setup.ts +0 -139
  393. package/tests/vitest.d.ts +0 -1
  394. package/vitest.config.ts +0 -40
@@ -1,1312 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for components/CrudiaFileField/CrudiaFileField.tsx</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">components/CrudiaFileField</a> CrudiaFileField.tsx</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">97.31% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>398/409</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">87.75% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>43/49</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">80% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>4/5</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">97.31% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>398/409</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
476
- <span class="cline-any cline-yes">1x</span>
477
- <span class="cline-any cline-yes">1x</span>
478
- <span class="cline-any cline-yes">1x</span>
479
- <span class="cline-any cline-yes">1x</span>
480
- <span class="cline-any cline-yes">1x</span>
481
- <span class="cline-any cline-yes">1x</span>
482
- <span class="cline-any cline-yes">1x</span>
483
- <span class="cline-any cline-yes">1x</span>
484
- <span class="cline-any cline-yes">1x</span>
485
- <span class="cline-any cline-yes">1x</span>
486
- <span class="cline-any cline-yes">1x</span>
487
- <span class="cline-any cline-yes">1x</span>
488
- <span class="cline-any cline-yes">1x</span>
489
- <span class="cline-any cline-yes">1x</span>
490
- <span class="cline-any cline-yes">1x</span>
491
- <span class="cline-any cline-yes">1x</span>
492
- <span class="cline-any cline-yes">1x</span>
493
- <span class="cline-any cline-yes">1x</span>
494
- <span class="cline-any cline-yes">1x</span>
495
- <span class="cline-any cline-yes">1x</span>
496
- <span class="cline-any cline-yes">1x</span>
497
- <span class="cline-any cline-yes">1x</span>
498
- <span class="cline-any cline-yes">1x</span>
499
- <span class="cline-any cline-yes">1x</span>
500
- <span class="cline-any cline-yes">1x</span>
501
- <span class="cline-any cline-yes">1x</span>
502
- <span class="cline-any cline-yes">1x</span>
503
- <span class="cline-any cline-yes">1x</span>
504
- <span class="cline-any cline-yes">1x</span>
505
- <span class="cline-any cline-yes">1x</span>
506
- <span class="cline-any cline-yes">1x</span>
507
- <span class="cline-any cline-yes">1x</span>
508
- <span class="cline-any cline-yes">1x</span>
509
- <span class="cline-any cline-yes">1x</span>
510
- <span class="cline-any cline-yes">1x</span>
511
- <span class="cline-any cline-yes">33x</span>
512
- <span class="cline-any cline-yes">33x</span>
513
- <span class="cline-any cline-yes">1x</span>
514
- <span class="cline-any cline-yes">1x</span>
515
- <span class="cline-any cline-yes">1x</span>
516
- <span class="cline-any cline-yes">1x</span>
517
- <span class="cline-any cline-yes">1x</span>
518
- <span class="cline-any cline-yes">1x</span>
519
- <span class="cline-any cline-yes">1x</span>
520
- <span class="cline-any cline-yes">1x</span>
521
- <span class="cline-any cline-yes">1x</span>
522
- <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-yes">1x</span>
524
- <span class="cline-any cline-yes">1x</span>
525
- <span class="cline-any cline-yes">1x</span>
526
- <span class="cline-any cline-yes">1x</span>
527
- <span class="cline-any cline-yes">1x</span>
528
- <span class="cline-any cline-yes">1x</span>
529
- <span class="cline-any cline-yes">1x</span>
530
- <span class="cline-any cline-yes">1x</span>
531
- <span class="cline-any cline-yes">1x</span>
532
- <span class="cline-any cline-yes">1x</span>
533
- <span class="cline-any cline-yes">1x</span>
534
- <span class="cline-any cline-yes">1x</span>
535
- <span class="cline-any cline-yes">1x</span>
536
- <span class="cline-any cline-yes">1x</span>
537
- <span class="cline-any cline-yes">1x</span>
538
- <span class="cline-any cline-yes">1x</span>
539
- <span class="cline-any cline-yes">1x</span>
540
- <span class="cline-any cline-yes">1x</span>
541
- <span class="cline-any cline-yes">1x</span>
542
- <span class="cline-any cline-yes">1x</span>
543
- <span class="cline-any cline-yes">1x</span>
544
- <span class="cline-any cline-yes">1x</span>
545
- <span class="cline-any cline-yes">1x</span>
546
- <span class="cline-any cline-yes">1x</span>
547
- <span class="cline-any cline-yes">108x</span>
548
- <span class="cline-any cline-yes">108x</span>
549
- <span class="cline-any cline-yes">108x</span>
550
- <span class="cline-any cline-yes">108x</span>
551
- <span class="cline-any cline-yes">108x</span>
552
- <span class="cline-any cline-yes">108x</span>
553
- <span class="cline-any cline-yes">108x</span>
554
- <span class="cline-any cline-yes">108x</span>
555
- <span class="cline-any cline-yes">108x</span>
556
- <span class="cline-any cline-yes">108x</span>
557
- <span class="cline-any cline-yes">108x</span>
558
- <span class="cline-any cline-yes">108x</span>
559
- <span class="cline-any cline-yes">108x</span>
560
- <span class="cline-any cline-yes">108x</span>
561
- <span class="cline-any cline-yes">108x</span>
562
- <span class="cline-any cline-yes">108x</span>
563
- <span class="cline-any cline-yes">108x</span>
564
- <span class="cline-any cline-yes">108x</span>
565
- <span class="cline-any cline-yes">108x</span>
566
- <span class="cline-any cline-yes">108x</span>
567
- <span class="cline-any cline-yes">108x</span>
568
- <span class="cline-any cline-yes">108x</span>
569
- <span class="cline-any cline-yes">108x</span>
570
- <span class="cline-any cline-yes">108x</span>
571
- <span class="cline-any cline-yes">108x</span>
572
- <span class="cline-any cline-yes">108x</span>
573
- <span class="cline-any cline-yes">108x</span>
574
- <span class="cline-any cline-yes">108x</span>
575
- <span class="cline-any cline-yes">108x</span>
576
- <span class="cline-any cline-yes">108x</span>
577
- <span class="cline-any cline-yes">108x</span>
578
- <span class="cline-any cline-yes">108x</span>
579
- <span class="cline-any cline-yes">108x</span>
580
- <span class="cline-any cline-yes">108x</span>
581
- <span class="cline-any cline-yes">108x</span>
582
- <span class="cline-any cline-yes">108x</span>
583
- <span class="cline-any cline-yes">108x</span>
584
- <span class="cline-any cline-yes">108x</span>
585
- <span class="cline-any cline-yes">108x</span>
586
- <span class="cline-any cline-yes">37x</span>
587
- <span class="cline-any cline-yes">28x</span>
588
- <span class="cline-any cline-yes">28x</span>
589
- <span class="cline-any cline-yes">28x</span>
590
- <span class="cline-any cline-yes">28x</span>
591
- <span class="cline-any cline-yes">28x</span>
592
- <span class="cline-any cline-no">&nbsp;</span>
593
- <span class="cline-any cline-no">&nbsp;</span>
594
- <span class="cline-any cline-yes">28x</span>
595
- <span class="cline-any cline-yes">37x</span>
596
- <span class="cline-any cline-yes">37x</span>
597
- <span class="cline-any cline-yes">37x</span>
598
- <span class="cline-any cline-yes">108x</span>
599
- <span class="cline-any cline-yes">108x</span>
600
- <span class="cline-any cline-yes">108x</span>
601
- <span class="cline-any cline-yes">108x</span>
602
- <span class="cline-any cline-yes">108x</span>
603
- <span class="cline-any cline-yes">108x</span>
604
- <span class="cline-any cline-yes">108x</span>
605
- <span class="cline-any cline-yes">108x</span>
606
- <span class="cline-any cline-yes">108x</span>
607
- <span class="cline-any cline-yes">108x</span>
608
- <span class="cline-any cline-yes">108x</span>
609
- <span class="cline-any cline-yes">108x</span>
610
- <span class="cline-any cline-yes">108x</span>
611
- <span class="cline-any cline-yes">108x</span>
612
- <span class="cline-any cline-yes">108x</span>
613
- <span class="cline-any cline-yes">108x</span>
614
- <span class="cline-any cline-yes">108x</span>
615
- <span class="cline-any cline-yes">108x</span>
616
- <span class="cline-any cline-yes">108x</span>
617
- <span class="cline-any cline-yes">108x</span>
618
- <span class="cline-any cline-yes">108x</span>
619
- <span class="cline-any cline-yes">108x</span>
620
- <span class="cline-any cline-yes">108x</span>
621
- <span class="cline-any cline-yes">108x</span>
622
- <span class="cline-any cline-yes">108x</span>
623
- <span class="cline-any cline-yes">108x</span>
624
- <span class="cline-any cline-yes">108x</span>
625
- <span class="cline-any cline-yes">108x</span>
626
- <span class="cline-any cline-no">&nbsp;</span>
627
- <span class="cline-any cline-yes">108x</span>
628
- <span class="cline-any cline-yes">108x</span>
629
- <span class="cline-any cline-yes">108x</span>
630
- <span class="cline-any cline-yes">108x</span>
631
- <span class="cline-any cline-yes">108x</span>
632
- <span class="cline-any cline-yes">108x</span>
633
- <span class="cline-any cline-yes">108x</span>
634
- <span class="cline-any cline-yes">108x</span>
635
- <span class="cline-any cline-yes">108x</span>
636
- <span class="cline-any cline-yes">108x</span>
637
- <span class="cline-any cline-yes">108x</span>
638
- <span class="cline-any cline-yes">108x</span>
639
- <span class="cline-any cline-yes">108x</span>
640
- <span class="cline-any cline-yes">22x</span>
641
- <span class="cline-any cline-yes">22x</span>
642
- <span class="cline-any cline-yes">22x</span>
643
- <span class="cline-any cline-yes">22x</span>
644
- <span class="cline-any cline-yes">22x</span>
645
- <span class="cline-any cline-yes">22x</span>
646
- <span class="cline-any cline-no">&nbsp;</span>
647
- <span class="cline-any cline-yes">22x</span>
648
- <span class="cline-any cline-yes">22x</span>
649
- <span class="cline-any cline-yes">22x</span>
650
- <span class="cline-any cline-yes">22x</span>
651
- <span class="cline-any cline-yes">108x</span>
652
- <span class="cline-any cline-yes">108x</span>
653
- <span class="cline-any cline-yes">108x</span>
654
- <span class="cline-any cline-yes">108x</span>
655
- <span class="cline-any cline-yes">66x</span>
656
- <span class="cline-any cline-yes">108x</span>
657
- <span class="cline-any cline-yes">108x</span>
658
- <span class="cline-any cline-yes">108x</span>
659
- <span class="cline-any cline-yes">108x</span>
660
- <span class="cline-any cline-yes">108x</span>
661
- <span class="cline-any cline-yes">108x</span>
662
- <span class="cline-any cline-yes">108x</span>
663
- <span class="cline-any cline-yes">1x</span>
664
- <span class="cline-any cline-yes">1x</span>
665
- <span class="cline-any cline-yes">1x</span>
666
- <span class="cline-any cline-yes">1x</span>
667
- <span class="cline-any cline-yes">1x</span>
668
- <span class="cline-any cline-yes">1x</span>
669
- <span class="cline-any cline-yes">1x</span>
670
- <span class="cline-any cline-yes">1x</span>
671
- <span class="cline-any cline-yes">1x</span>
672
- <span class="cline-any cline-yes">1x</span>
673
- <span class="cline-any cline-yes">1x</span>
674
- <span class="cline-any cline-yes">108x</span>
675
- <span class="cline-any cline-yes">108x</span>
676
- <span class="cline-any cline-yes">108x</span>
677
- <span class="cline-any cline-yes">108x</span>
678
- <span class="cline-any cline-yes">108x</span>
679
- <span class="cline-any cline-yes">108x</span>
680
- <span class="cline-any cline-yes">108x</span>
681
- <span class="cline-any cline-yes">108x</span>
682
- <span class="cline-any cline-yes">108x</span>
683
- <span class="cline-any cline-yes">108x</span>
684
- <span class="cline-any cline-yes">108x</span>
685
- <span class="cline-any cline-yes">108x</span>
686
- <span class="cline-any cline-yes">108x</span>
687
- <span class="cline-any cline-yes">108x</span>
688
- <span class="cline-any cline-yes">108x</span>
689
- <span class="cline-any cline-yes">108x</span>
690
- <span class="cline-any cline-no">&nbsp;</span>
691
- <span class="cline-any cline-no">&nbsp;</span>
692
- <span class="cline-any cline-yes">108x</span>
693
- <span class="cline-any cline-yes">108x</span>
694
- <span class="cline-any cline-yes">108x</span>
695
- <span class="cline-any cline-yes">108x</span>
696
- <span class="cline-any cline-yes">108x</span>
697
- <span class="cline-any cline-yes">108x</span>
698
- <span class="cline-any cline-yes">108x</span>
699
- <span class="cline-any cline-yes">108x</span>
700
- <span class="cline-any cline-yes">108x</span>
701
- <span class="cline-any cline-yes">108x</span>
702
- <span class="cline-any cline-yes">108x</span>
703
- <span class="cline-any cline-yes">108x</span>
704
- <span class="cline-any cline-yes">108x</span>
705
- <span class="cline-any cline-yes">5x</span>
706
- <span class="cline-any cline-yes">5x</span>
707
- <span class="cline-any cline-yes">5x</span>
708
- <span class="cline-any cline-yes">5x</span>
709
- <span class="cline-any cline-yes">5x</span>
710
- <span class="cline-any cline-yes">5x</span>
711
- <span class="cline-any cline-yes">5x</span>
712
- <span class="cline-any cline-yes">5x</span>
713
- <span class="cline-any cline-yes">5x</span>
714
- <span class="cline-any cline-yes">5x</span>
715
- <span class="cline-any cline-yes">108x</span>
716
- <span class="cline-any cline-yes">108x</span>
717
- <span class="cline-any cline-yes">108x</span>
718
- <span class="cline-any cline-yes">108x</span>
719
- <span class="cline-any cline-yes">108x</span>
720
- <span class="cline-any cline-yes">108x</span>
721
- <span class="cline-any cline-yes">108x</span>
722
- <span class="cline-any cline-yes">108x</span>
723
- <span class="cline-any cline-yes">108x</span>
724
- <span class="cline-any cline-no">&nbsp;</span>
725
- <span class="cline-any cline-no">&nbsp;</span>
726
- <span class="cline-any cline-no">&nbsp;</span>
727
- <span class="cline-any cline-yes">108x</span>
728
- <span class="cline-any cline-yes">108x</span>
729
- <span class="cline-any cline-yes">108x</span>
730
- <span class="cline-any cline-yes">108x</span>
731
- <span class="cline-any cline-yes">108x</span>
732
- <span class="cline-any cline-yes">108x</span>
733
- <span class="cline-any cline-yes">108x</span>
734
- <span class="cline-any cline-yes">108x</span>
735
- <span class="cline-any cline-yes">6x</span>
736
- <span class="cline-any cline-yes">6x</span>
737
- <span class="cline-any cline-yes">6x</span>
738
- <span class="cline-any cline-yes">3x</span>
739
- <span class="cline-any cline-yes">3x</span>
740
- <span class="cline-any cline-yes">3x</span>
741
- <span class="cline-any cline-yes">6x</span>
742
- <span class="cline-any cline-yes">6x</span>
743
- <span class="cline-any cline-yes">108x</span>
744
- <span class="cline-any cline-yes">108x</span>
745
- <span class="cline-any cline-yes">108x</span>
746
- <span class="cline-any cline-yes">108x</span>
747
- <span class="cline-any cline-yes">108x</span>
748
- <span class="cline-any cline-yes">108x</span>
749
- <span class="cline-any cline-yes">108x</span>
750
- <span class="cline-any cline-yes">108x</span>
751
- <span class="cline-any cline-yes">108x</span>
752
- <span class="cline-any cline-yes">108x</span>
753
- <span class="cline-any cline-yes">108x</span>
754
- <span class="cline-any cline-yes">108x</span>
755
- <span class="cline-any cline-yes">108x</span>
756
- <span class="cline-any cline-yes">108x</span>
757
- <span class="cline-any cline-yes">108x</span>
758
- <span class="cline-any cline-yes">108x</span>
759
- <span class="cline-any cline-yes">108x</span>
760
- <span class="cline-any cline-yes">108x</span>
761
- <span class="cline-any cline-yes">108x</span>
762
- <span class="cline-any cline-yes">108x</span>
763
- <span class="cline-any cline-yes">108x</span>
764
- <span class="cline-any cline-yes">108x</span>
765
- <span class="cline-any cline-yes">108x</span>
766
- <span class="cline-any cline-yes">108x</span>
767
- <span class="cline-any cline-yes">108x</span>
768
- <span class="cline-any cline-yes">102x</span>
769
- <span class="cline-any cline-yes">108x</span>
770
- <span class="cline-any cline-yes">108x</span>
771
- <span class="cline-any cline-yes">108x</span>
772
- <span class="cline-any cline-yes">108x</span>
773
- <span class="cline-any cline-yes">108x</span>
774
- <span class="cline-any cline-yes">66x</span>
775
- <span class="cline-any cline-yes">2x</span>
776
- <span class="cline-any cline-yes">2x</span>
777
- <span class="cline-any cline-yes">64x</span>
778
- <span class="cline-any cline-yes">66x</span>
779
- <span class="cline-any cline-no">&nbsp;</span>
780
- <span class="cline-any cline-no">&nbsp;</span>
781
- <span class="cline-any cline-yes">64x</span>
782
- <span class="cline-any cline-yes">64x</span>
783
- <span class="cline-any cline-yes">66x</span>
784
- <span class="cline-any cline-yes">108x</span>
785
- <span class="cline-any cline-yes">108x</span>
786
- <span class="cline-any cline-yes">108x</span>
787
- <span class="cline-any cline-yes">108x</span>
788
- <span class="cline-any cline-yes">108x</span>
789
- <span class="cline-any cline-yes">108x</span>
790
- <span class="cline-any cline-yes">6x</span>
791
- <span class="cline-any cline-yes">6x</span>
792
- <span class="cline-any cline-yes">6x</span>
793
- <span class="cline-any cline-yes">6x</span>
794
- <span class="cline-any cline-yes">6x</span>
795
- <span class="cline-any cline-yes">6x</span>
796
- <span class="cline-any cline-yes">6x</span>
797
- <span class="cline-any cline-yes">6x</span>
798
- <span class="cline-any cline-yes">6x</span>
799
- <span class="cline-any cline-yes">6x</span>
800
- <span class="cline-any cline-yes">6x</span>
801
- <span class="cline-any cline-yes">108x</span>
802
- <span class="cline-any cline-yes">108x</span>
803
- <span class="cline-any cline-yes">108x</span>
804
- <span class="cline-any cline-yes">108x</span>
805
- <span class="cline-any cline-yes">108x</span>
806
- <span class="cline-any cline-yes">108x</span>
807
- <span class="cline-any cline-yes">108x</span>
808
- <span class="cline-any cline-yes">108x</span>
809
- <span class="cline-any cline-yes">108x</span>
810
- <span class="cline-any cline-yes">108x</span>
811
- <span class="cline-any cline-yes">108x</span>
812
- <span class="cline-any cline-yes">108x</span>
813
- <span class="cline-any cline-yes">108x</span>
814
- <span class="cline-any cline-yes">108x</span>
815
- <span class="cline-any cline-yes">108x</span>
816
- <span class="cline-any cline-yes">108x</span>
817
- <span class="cline-any cline-yes">66x</span>
818
- <span class="cline-any cline-yes">66x</span>
819
- <span class="cline-any cline-yes">66x</span>
820
- <span class="cline-any cline-yes">66x</span>
821
- <span class="cline-any cline-yes">66x</span>
822
- <span class="cline-any cline-yes">66x</span>
823
- <span class="cline-any cline-yes">66x</span>
824
- <span class="cline-any cline-yes">66x</span>
825
- <span class="cline-any cline-yes">66x</span>
826
- <span class="cline-any cline-yes">66x</span>
827
- <span class="cline-any cline-yes">66x</span>
828
- <span class="cline-any cline-yes">108x</span>
829
- <span class="cline-any cline-yes">108x</span>
830
- <span class="cline-any cline-yes">108x</span>
831
- <span class="cline-any cline-yes">108x</span>
832
- <span class="cline-any cline-yes">39x</span>
833
- <span class="cline-any cline-yes">39x</span>
834
- <span class="cline-any cline-yes">39x</span>
835
- <span class="cline-any cline-yes">39x</span>
836
- <span class="cline-any cline-yes">39x</span>
837
- <span class="cline-any cline-yes">39x</span>
838
- <span class="cline-any cline-yes">39x</span>
839
- <span class="cline-any cline-yes">39x</span>
840
- <span class="cline-any cline-yes">39x</span>
841
- <span class="cline-any cline-yes">39x</span>
842
- <span class="cline-any cline-yes">39x</span>
843
- <span class="cline-any cline-yes">39x</span>
844
- <span class="cline-any cline-yes">39x</span>
845
- <span class="cline-any cline-yes">108x</span>
846
- <span class="cline-any cline-yes">108x</span>
847
- <span class="cline-any cline-yes">108x</span>
848
- <span class="cline-any cline-yes">108x</span>
849
- <span class="cline-any cline-yes">10x</span>
850
- <span class="cline-any cline-yes">10x</span>
851
- <span class="cline-any cline-yes">10x</span>
852
- <span class="cline-any cline-yes">10x</span>
853
- <span class="cline-any cline-yes">10x</span>
854
- <span class="cline-any cline-yes">10x</span>
855
- <span class="cline-any cline-yes">108x</span>
856
- <span class="cline-any cline-yes">108x</span>
857
- <span class="cline-any cline-yes">108x</span>
858
- <span class="cline-any cline-yes">108x</span>
859
- <span class="cline-any cline-yes">6x</span>
860
- <span class="cline-any cline-yes">6x</span>
861
- <span class="cline-any cline-yes">6x</span>
862
- <span class="cline-any cline-yes">6x</span>
863
- <span class="cline-any cline-yes">6x</span>
864
- <span class="cline-any cline-yes">108x</span>
865
- <span class="cline-any cline-yes">108x</span>
866
- <span class="cline-any cline-yes">108x</span>
867
- <span class="cline-any cline-yes">108x</span>
868
- <span class="cline-any cline-yes">108x</span>
869
- <span class="cline-any cline-yes">108x</span>
870
- <span class="cline-any cline-yes">108x</span>
871
- <span class="cline-any cline-yes">108x</span>
872
- <span class="cline-any cline-yes">108x</span>
873
- <span class="cline-any cline-yes">108x</span>
874
- <span class="cline-any cline-yes">108x</span>
875
- <span class="cline-any cline-yes">108x</span>
876
- <span class="cline-any cline-yes">108x</span>
877
- <span class="cline-any cline-yes">108x</span>
878
- <span class="cline-any cline-yes">108x</span>
879
- <span class="cline-any cline-yes">108x</span>
880
- <span class="cline-any cline-yes">108x</span>
881
- <span class="cline-any cline-yes">108x</span>
882
- <span class="cline-any cline-yes">1x</span>
883
- <span class="cline-any cline-yes">1x</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
885
- * File field component with:
886
- * - Drag &amp; drop
887
- * - File preview
888
- * - Progress bar during upload
889
- * - Delete files (soft delete)
890
- * - Type and size validation
891
- * - Single/multiple support
892
- */
893
- &nbsp;
894
- import React, { useCallback, useRef } from 'react';
895
- import { logger } from '../../utils/logger';
896
- import Box from '@mui/material/Box';
897
- import Typography from '@mui/material/Typography';
898
- import CircularProgress from '@mui/material/CircularProgress';
899
- import List from '@mui/material/List';
900
- import FormHelperText from '@mui/material/FormHelperText';
901
- import { useFileUpload, type FileItem, type UseFileUploadOptions } from '../../hooks/useFileUpload';
902
- import { useTranslations } from '../../providers/TranslationsProvider';
903
- &nbsp;
904
- // Import types from dedicated types file
905
- import type { CrudiaFileFieldProps } from './types';
906
- &nbsp;
907
- // Import utilities
908
- import { sanitizeHelperTextHtml } from './utils/formatters';
909
- &nbsp;
910
- // Import extracted hooks
911
- import { useDragDrop, useDeleteConfirmation } from './hooks';
912
- &nbsp;
913
- // Import extracted components
914
- import { FileItemRow, DropZone, DeleteConfirmationDialog } from './components';
915
- &nbsp;
916
- // Re-export types for backwards compatibility
917
- export type { CrudiaFileFieldDeletionHandlers, CrudiaFileFieldProps } from './types';
918
- &nbsp;
919
- const hasCompletedFilePath = (file: FileItem): file is FileItem &amp; { filePath: string } =&gt; {
920
- return file.status === 'completed' &amp;&amp; typeof file.filePath === 'string' &amp;&amp; file.filePath.length &gt; 0;
921
- };
922
- &nbsp;
923
- /**
924
- * Main file field component
925
- *
926
- * @example
927
- * ```tsx
928
- * // Basic usage - single file
929
- * &lt;CrudiaFileField
930
- * label="Document"
931
- * accept={["application/pdf"]}
932
- * onChange={(filePaths) =&gt; setFormData({ ...formData, document: filePaths[0] })}
933
- * /&gt;
934
- *
935
- * // Multiple files with limits
936
- * &lt;CrudiaFileField
937
- * label="Images"
938
- * accept={["image/png", "image/jpeg"]}
939
- * multiple
940
- * maxFiles={5}
941
- * minFiles={1}
942
- * maxFileSize={5 * 1024 * 1024}
943
- * onChange={(filePaths) =&gt; setFormData({ ...formData, images: filePaths })}
944
- * /&gt;
945
- *
946
- * // With initial files (edit mode)
947
- * &lt;CrudiaFileField
948
- * label="Attachments"
949
- * multiple
950
- * initialFiles={existingFiles}
951
- * onChange={handleFilesChange}
952
- * /&gt;
953
- * ```
954
- */
955
- export const CrudiaFileField: React.FC&lt;CrudiaFileFieldProps&gt; = ({
956
- label,
957
- accept,
958
- maxFileSize = 10 * 1024 * 1024,
959
- multiple = false,
960
- maxFiles,
961
- minFiles = 0,
962
- required = false,
963
- disabled = false,
964
- error: externalError = false,
965
- helperText: externalHelperText,
966
- onChange,
967
- onValidation,
968
- initialFiles,
969
- placeholder,
970
- showFileList = true,
971
- visibility = 'private',
972
- showPreview: _showPreview = true,
973
- baseUrl,
974
- onDeletionHandlersReady,
975
- mode = 'create',
976
- name,
977
- containerRef,
978
- }) =&gt; {
979
- const { t } = useTranslations();
980
- const inputRef = useRef&lt;HTMLInputElement&gt;(null);
981
- &nbsp;
982
- // Calculate effective file limit
983
- const effectiveMaxFiles = multiple ? maxFiles : 1;
984
- const effectiveMinFiles = required ? Math.max(minFiles, 1) : minFiles;
985
- &nbsp;
986
- // Configure hook options
987
- const uploadOptions: UseFileUploadOptions = {
988
- acceptedTypes: accept,
989
- maxFileSize,
990
- maxFiles: effectiveMaxFiles,
991
- minFiles: effectiveMinFiles,
992
- visibility,
993
- mode,
994
- onFilesChange: (files) =&gt; {
995
- const filePaths = files.filter(hasCompletedFilePath).map((f) =&gt; {
996
- const path = f.filePath;
997
- // Return only the relative path (without baseUrl)
998
- // baseUrl is only used for displaying/downloading, not for saving
999
- // Ensure path starts with /
1000
- if (path.startsWith('/')) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1001
- <span class="cstat-no" title="statement not covered" > return path;</span>
1002
- <span class="cstat-no" title="statement not covered" > }</span>
1003
- return `/${path}`;
1004
- });
1005
- onChange?.(filePaths);
1006
- },
1007
- };
1008
- &nbsp;
1009
- const {
1010
- files,
1011
- isUploading,
1012
- addFiles,
1013
- removeFile,
1014
- restoreFile,
1015
- retryUpload,
1016
- isValid,
1017
- validationError,
1018
- validationErrorKey,
1019
- validationErrorParams,
1020
- initializeFiles,
1021
- markAsTouched,
1022
- isSubmitted,
1023
- markAsSubmitted,
1024
- commitDeletions,
1025
- restorePendingDeletions,
1026
- hasPendingDeletions,
1027
- deleteFileImmediately,
1028
- activeFileCount,
1029
- waitForUploads,
1030
- completedFilePaths,
1031
- } = useFileUpload(uploadOptions);
1032
- &nbsp;
1033
- // Create a stable callback to get completed file paths
1034
- const getCompletedFilePaths = useCallback(() =&gt; {
1035
- <span class="cstat-no" title="statement not covered" > return completedFilePaths;</span>
1036
- }, [completedFilePaths]);
1037
- &nbsp;
1038
- // Track if we've already initialized to avoid re-initializing on every render
1039
- const hasInitializedRef = useRef(false);
1040
- const initializationInProgressRef = useRef(false);
1041
- &nbsp;
1042
- // Initialize existing files - handles async loading of initialFiles
1043
- // Pass baseUrl so the hook can extract relative paths from full URLs
1044
- React.useEffect(() =&gt; {
1045
- const shouldInitialize =
1046
- initialFiles &amp;&amp; initialFiles.length &gt; 0 &amp;&amp; !hasInitializedRef.current &amp;&amp; !initializationInProgressRef.current;
1047
- &nbsp;
1048
- if (shouldInitialize) {
1049
- initializationInProgressRef.current = true;
1050
- &nbsp;
1051
- try {
1052
- initializeFiles(initialFiles, baseUrl);
1053
- hasInitializedRef.current = true;
1054
- <span class="branch-0 cbranch-no" title="branch not covered" > } catch (error) {</span>
1055
- <span class="cstat-no" title="statement not covered" > logger.error('Failed to initialize files', { error });</span>
1056
- } finally {
1057
- initializationInProgressRef.current = false;
1058
- }
1059
- }
1060
- }, [initialFiles, initializeFiles, baseUrl]);
1061
- &nbsp;
1062
- // Notify validation
1063
- React.useEffect(() =&gt; {
1064
- onValidation?.(isValid, validationError);
1065
- }, [isValid, validationError, onValidation]);
1066
- &nbsp;
1067
- // Notify deletion handlers when ready
1068
- // This effect intentionally runs when any handler/state changes
1069
- // to keep the consumer updated with the latest values
1070
- React.useEffect(() =&gt; {
1071
- if (onDeletionHandlersReady) {
1072
- onDeletionHandlersReady({
1073
- commitDeletions,
1074
- restorePendingDeletions,
1075
- hasPendingDeletions,
1076
- markAsSubmitted,
1077
- isValid,
1078
- isUploading,
1079
- waitForUploads,
1080
- getCompletedFilePaths,
1081
- });
1082
- }
1083
- }, [
1084
- onDeletionHandlersReady,
1085
- commitDeletions,
1086
- restorePendingDeletions,
1087
- hasPendingDeletions,
1088
- markAsSubmitted,
1089
- isValid,
1090
- isUploading,
1091
- waitForUploads,
1092
- getCompletedFilePaths,
1093
- ]);
1094
- &nbsp;
1095
- // Use extracted drag &amp; drop hook
1096
- const { isDragging, handleDragOver, handleDragLeave, handleDrop } = useDragDrop({
1097
- disabled,
1098
- onFilesDropped: <span class="fstat-no" title="function not covered" >(files) =&gt; {</span>
1099
- <span class="cstat-no" title="statement not covered" > void addFiles(files);</span>
1100
- <span class="cstat-no" title="statement not covered" > },</span>
1101
- onInteraction: markAsTouched,
1102
- });
1103
- &nbsp;
1104
- // Use extracted delete confirmation hook
1105
- const deleteConfirmation = useDeleteConfirmation({
1106
- deleteFileImmediately,
1107
- });
1108
- &nbsp;
1109
- /**
1110
- * Handles file selection from input
1111
- */
1112
- const handleFileSelect = useCallback(
1113
- (event: React.ChangeEvent&lt;HTMLInputElement&gt;) =&gt; {
1114
- markAsTouched();
1115
- const selectedFiles = event.target.files;
1116
- if (selectedFiles &amp;&amp; selectedFiles.length &gt; 0) {
1117
- addFiles(selectedFiles);
1118
- }
1119
- // Reset input to allow selecting the same file
1120
- if (inputRef.current) {
1121
- inputRef.current.value = '';
1122
- }
1123
- },
1124
- [addFiles, markAsTouched]
1125
- );
1126
- &nbsp;
1127
- /**
1128
- * Opens file selector
1129
- * Note: We don't call markAsTouched() here to avoid showing errors prematurely
1130
- * Errors should only show after user interaction with files or form submission
1131
- */
1132
- const handleClick = useCallback(() =&gt; {
1133
- <span class="cstat-no" title="statement not covered" > if (!disabled) {</span>
1134
- <span class="cstat-no" title="statement not covered" > inputRef.current?.click();</span>
1135
- <span class="cstat-no" title="statement not covered" > }</span>
1136
- }, [disabled]);
1137
- &nbsp;
1138
- /**
1139
- * Handle remove click - shows confirmation for immediate deletions
1140
- * or marks as pendingDeletion for existing files in edit mode
1141
- */
1142
- const handleRemoveClick = useCallback(
1143
- async (fileId: string) =&gt; {
1144
- const result = await removeFile(fileId);
1145
- &nbsp;
1146
- if (result.needsConfirmation) {
1147
- // Show confirmation dialog
1148
- deleteConfirmation.openConfirmation(fileId);
1149
- }
1150
- // If no confirmation needed, file was marked as pendingDeletion
1151
- },
1152
- [removeFile, deleteConfirmation]
1153
- );
1154
- &nbsp;
1155
- /**
1156
- * Generates accept string for input
1157
- */
1158
- const acceptString = accept?.join(',') ?? '';
1159
- &nbsp;
1160
- /**
1161
- * Determines whether to show drop zone
1162
- * Don't show when disabled (readonly mode only shows file list)
1163
- * Use activeFileCount to allow uploading when files are pending deletion
1164
- */
1165
- const showDropZone = !disabled &amp;&amp; (multiple || activeFileCount === 0);
1166
- &nbsp;
1167
- /**
1168
- * Determines final error text
1169
- * - External errors always show
1170
- * - Internal validation errors only show after form submission (isSubmitted)
1171
- * - NOT when just clicking the dropzone (isTouched)
1172
- */
1173
- const showInternalValidationError = <span class="branch-0 cbranch-no" title="branch not covered" >isSubmitted &amp;&amp; !isValid;</span>
1174
- const hasError = externalError || showInternalValidationError;
1175
- const finalHelperText =
1176
- externalHelperText ||
1177
- (<span class="branch-0 cbranch-no" title="branch not covered" >showInternalValidationError &amp;&amp; <span class="branch-0 cbranch-no" title="branch not covered" >validationErrorKey ? t</span>(validationErrorKey, validationErrorParams) : n</span>ull);
1178
- &nbsp;
1179
- /**
1180
- * Generates placeholder text
1181
- */
1182
- const getPlaceholderText = (): string =&gt; {
1183
- if (placeholder) {
1184
- return placeholder;
1185
- }
1186
- &nbsp;
1187
- if (isDragging) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1188
- <span class="cstat-no" title="statement not covered" > return t('base.file.dropHere');</span>
1189
- <span class="cstat-no" title="statement not covered" > }</span>
1190
- &nbsp;
1191
- return t('base.file.dragOrClick');
1192
- };
1193
- &nbsp;
1194
- return (
1195
- &lt;div ref={containerRef}&gt;
1196
- &lt;Box sx={{ width: '100%' }}&gt;
1197
- {/* Label */}
1198
- {label &amp;&amp; (
1199
- &lt;Typography
1200
- variant="body2"
1201
- sx={{
1202
- mb: 1,
1203
- fontWeight: 500,
1204
- color: hasError ? 'error.main' : 'text.primary',
1205
- }}
1206
- &gt;
1207
- {label}
1208
- {required &amp;&amp; &lt;span style={{ color: 'red' }}&gt; *&lt;/span&gt;}
1209
- &lt;/Typography&gt;
1210
- )}
1211
- &nbsp;
1212
- {/* Hidden input */}
1213
- &lt;input
1214
- ref={inputRef}
1215
- type="file"
1216
- name={name}
1217
- accept={acceptString}
1218
- multiple={multiple}
1219
- onChange={handleFileSelect}
1220
- disabled={disabled}
1221
- style={{ display: 'none' }}
1222
- /&gt;
1223
- &nbsp;
1224
- {/* Drop Zone */}
1225
- {showDropZone &amp;&amp; (
1226
- &lt;DropZone
1227
- isDragging={isDragging}
1228
- disabled={disabled}
1229
- hasError={hasError}
1230
- placeholder={getPlaceholderText()}
1231
- accept={accept}
1232
- onClick={handleClick}
1233
- onDragOver={handleDragOver}
1234
- onDragLeave={handleDragLeave}
1235
- onDrop={handleDrop}
1236
- /&gt;
1237
- )}
1238
- &nbsp;
1239
- {/* File list with thumbnails - works in all modes (edit and readonly) */}
1240
- {showFileList &amp;&amp; files.length &gt; 0 &amp;&amp; (
1241
- &lt;List dense sx={{ mt: 1, p: 0 }}&gt;
1242
- {files.map((file) =&gt; (
1243
- &lt;FileItemRow
1244
- key={file.id}
1245
- file={file}
1246
- baseUrl={baseUrl}
1247
- disabled={disabled}
1248
- onRemove={handleRemoveClick}
1249
- onRestore={restoreFile}
1250
- onRetry={retryUpload}
1251
- /&gt;
1252
- ))}
1253
- &lt;/List&gt;
1254
- )}
1255
- &nbsp;
1256
- {/* Upload progress indicator */}
1257
- {isUploading &amp;&amp; (
1258
- &lt;Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mt: 1 }}&gt;
1259
- &lt;CircularProgress size={16} /&gt;
1260
- &lt;Typography variant="caption" color="text.secondary"&gt;
1261
- {t('base.file.uploading')}
1262
- &lt;/Typography&gt;
1263
- &lt;/Box&gt;
1264
- )}
1265
- &nbsp;
1266
- {/* Helper text / Error - renders HTML safely for formatting like &lt;b&gt; tags */}
1267
- {finalHelperText &amp;&amp; (
1268
- &lt;FormHelperText
1269
- error={hasError}
1270
- sx={{ mt: 0.5 }}
1271
- dangerouslySetInnerHTML={{ __html: sanitizeHelperTextHtml(finalHelperText) }}
1272
- /&gt;
1273
- )}
1274
- &nbsp;
1275
- {/* Delete confirmation dialog */}
1276
- &lt;DeleteConfirmationDialog
1277
- open={deleteConfirmation.isOpen}
1278
- isDeleting={deleteConfirmation.isDeleting}
1279
- onConfirm={deleteConfirmation.handleConfirm}
1280
- onCancel={deleteConfirmation.handleCancel}
1281
- title={t('base.file.confirmDelete.title')}
1282
- message={t('base.file.confirmDelete.message')}
1283
- cancelText={t('base.file.confirmDelete.cancel')}
1284
- confirmText={t('base.file.confirmDelete.confirm')}
1285
- deletingText={t('base.file.deleting')}
1286
- /&gt;
1287
- &lt;/Box&gt;
1288
- &lt;/div&gt;
1289
- );
1290
- };
1291
- &nbsp;
1292
- export default CrudiaFileField;
1293
- &nbsp;</pre></td></tr></table></pre>
1294
-
1295
- <div class='push'></div><!-- for sticky footer -->
1296
- </div><!-- /wrapper -->
1297
- <div class='footer quiet pad2 space-top1 center small'>
1298
- Code coverage generated by
1299
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1300
- at 2026-02-07T06:55:20.952Z
1301
- </div>
1302
- <script src="../../prettify.js"></script>
1303
- <script>
1304
- window.onload = function () {
1305
- prettyPrint();
1306
- };
1307
- </script>
1308
- <script src="../../sorter.js"></script>
1309
- <script src="../../block-navigation.js"></script>
1310
- </body>
1311
- </html>
1312
-