@dnb/eufemia 10.58.0 → 10.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/cjs/components/dialog/style/dnb-dialog.css +2 -1
  3. package/cjs/components/dialog/style/dnb-dialog.min.css +1 -1
  4. package/cjs/components/dialog/style/dnb-dialog.scss +2 -1
  5. package/cjs/components/form-label/FormLabel.js +13 -10
  6. package/cjs/components/form-label/FormLabel.js.map +1 -1
  7. package/cjs/components/height-animation/HeightAnimation.d.ts +1 -1
  8. package/cjs/components/height-animation/HeightAnimation.js.map +1 -1
  9. package/cjs/components/height-animation/HeightAnimationDocs.js +2 -2
  10. package/cjs/components/height-animation/HeightAnimationDocs.js.map +1 -1
  11. package/cjs/components/pagination/Pagination.d.ts +1 -1
  12. package/cjs/components/upload/Upload.js +2 -1
  13. package/cjs/components/upload/Upload.js.map +1 -1
  14. package/cjs/components/upload/UploadDocs.js +5 -0
  15. package/cjs/components/upload/UploadDocs.js.map +1 -1
  16. package/cjs/components/upload/UploadFileList.js +80 -12
  17. package/cjs/components/upload/UploadFileList.js.map +1 -1
  18. package/cjs/components/upload/UploadFileListCell.d.ts +5 -1
  19. package/cjs/components/upload/UploadFileListCell.js +9 -8
  20. package/cjs/components/upload/UploadFileListCell.js.map +1 -1
  21. package/cjs/components/upload/UploadFileListLink.d.ts +13 -0
  22. package/cjs/components/upload/UploadFileListLink.js +66 -0
  23. package/cjs/components/upload/UploadFileListLink.js.map +1 -0
  24. package/cjs/components/upload/types.d.ts +8 -2
  25. package/cjs/components/upload/types.js.map +1 -1
  26. package/cjs/extensions/forms/DataContext/Provider/Provider.js +17 -9
  27. package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  28. package/cjs/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  29. package/cjs/extensions/forms/Field/Upload/Upload.js +22 -8
  30. package/cjs/extensions/forms/Field/Upload/Upload.js.map +1 -1
  31. package/cjs/extensions/forms/Form/Element/Element.js +1 -1
  32. package/cjs/extensions/forms/Form/Element/Element.js.map +1 -1
  33. package/cjs/extensions/forms/Form/InfoOverlay/InfoOverlay.d.ts +36 -0
  34. package/cjs/extensions/forms/Form/InfoOverlay/InfoOverlay.js +132 -0
  35. package/cjs/extensions/forms/Form/InfoOverlay/InfoOverlay.js.map +1 -0
  36. package/cjs/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.d.ts +3 -0
  37. package/cjs/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.js +68 -0
  38. package/cjs/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.js.map +1 -0
  39. package/cjs/extensions/forms/Form/InfoOverlay/index.d.ts +2 -0
  40. package/cjs/extensions/forms/Form/InfoOverlay/index.js +27 -0
  41. package/cjs/extensions/forms/Form/InfoOverlay/index.js.map +1 -0
  42. package/cjs/extensions/forms/Form/InfoOverlay/setContent.d.ts +4 -0
  43. package/cjs/extensions/forms/Form/InfoOverlay/setContent.js +14 -0
  44. package/cjs/extensions/forms/Form/InfoOverlay/setContent.js.map +1 -0
  45. package/cjs/extensions/forms/Form/Section/Section.js.map +1 -1
  46. package/cjs/extensions/forms/Form/Section/style/themes/ui.js +1 -1
  47. package/cjs/extensions/forms/Form/Section/style/themes/ui.js.map +1 -1
  48. package/cjs/extensions/forms/Form/Visibility/Visibility.d.ts +8 -4
  49. package/cjs/extensions/forms/Form/Visibility/Visibility.js +18 -2
  50. package/cjs/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  51. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.d.ts +1 -0
  52. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.js +11 -1
  53. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  54. package/cjs/extensions/forms/Form/index.d.ts +1 -0
  55. package/cjs/extensions/forms/Form/index.js +7 -0
  56. package/cjs/extensions/forms/Form/index.js.map +1 -1
  57. package/cjs/extensions/forms/Value/Upload/Upload.d.ts +3 -2
  58. package/cjs/extensions/forms/Value/Upload/Upload.js +18 -10
  59. package/cjs/extensions/forms/Value/Upload/Upload.js.map +1 -1
  60. package/cjs/extensions/forms/Value/Upload/UploadDocs.d.ts +2 -1
  61. package/cjs/extensions/forms/Value/Upload/UploadDocs.js +8 -3
  62. package/cjs/extensions/forms/Value/Upload/UploadDocs.js.map +1 -1
  63. package/cjs/extensions/forms/Wizard/Container/WizardContainer.js +2 -3
  64. package/cjs/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  65. package/cjs/extensions/forms/Wizard/style/dnb-wizard-layout.css +1 -1
  66. package/cjs/extensions/forms/Wizard/style/dnb-wizard-layout.min.css +1 -1
  67. package/cjs/extensions/forms/Wizard/style/dnb-wizard-layout.scss +1 -1
  68. package/cjs/extensions/forms/constants/locales/en-GB.d.ts +12 -0
  69. package/cjs/extensions/forms/constants/locales/en-GB.js +12 -0
  70. package/cjs/extensions/forms/constants/locales/en-GB.js.map +1 -1
  71. package/cjs/extensions/forms/constants/locales/en-US.d.ts +12 -0
  72. package/cjs/extensions/forms/constants/locales/index.d.ts +24 -0
  73. package/cjs/extensions/forms/constants/locales/nb-NO.d.ts +12 -0
  74. package/cjs/extensions/forms/constants/locales/nb-NO.js +12 -0
  75. package/cjs/extensions/forms/constants/locales/nb-NO.js.map +1 -1
  76. package/cjs/extensions/forms/style/dnb-forms.css +1 -1
  77. package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
  78. package/cjs/fragments/drawer-list/DrawerListProvider.js +58 -21
  79. package/cjs/fragments/drawer-list/DrawerListProvider.js.map +1 -1
  80. package/cjs/shared/Eufemia.d.ts +1 -1
  81. package/cjs/shared/Eufemia.js +2 -2
  82. package/cjs/shared/Eufemia.js.map +1 -1
  83. package/cjs/shared/helpers/useSharedState.d.ts +14 -6
  84. package/cjs/shared/helpers/useSharedState.js +52 -27
  85. package/cjs/shared/helpers/useSharedState.js.map +1 -1
  86. package/cjs/shared/locales/en-GB.js +1 -1
  87. package/cjs/shared/locales/en-GB.js.map +1 -1
  88. package/cjs/shared/locales/nb-NO.js +1 -1
  89. package/cjs/shared/locales/nb-NO.js.map +1 -1
  90. package/cjs/style/core/scopes.scss +1 -1
  91. package/cjs/style/dnb-ui-basis.css +1 -1
  92. package/cjs/style/dnb-ui-basis.min.css +1 -1
  93. package/cjs/style/dnb-ui-body.css +1 -1
  94. package/cjs/style/dnb-ui-body.min.css +1 -1
  95. package/cjs/style/dnb-ui-components.css +3 -2
  96. package/cjs/style/dnb-ui-components.min.css +2 -2
  97. package/cjs/style/dnb-ui-core.css +1 -1
  98. package/cjs/style/dnb-ui-core.min.css +1 -1
  99. package/cjs/style/dnb-ui-extensions.css +1 -1
  100. package/cjs/style/dnb-ui-extensions.min.css +1 -1
  101. package/cjs/style/dnb-ui-forms.css +1 -1
  102. package/cjs/style/dnb-ui-forms.min.css +1 -1
  103. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +4 -3
  104. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
  105. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +1 -1
  106. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  107. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -1
  108. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +1 -1
  109. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  110. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.scss +1 -1
  111. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +4 -3
  112. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
  113. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +1 -1
  114. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  115. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -1
  116. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +1 -1
  117. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  118. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.scss +1 -1
  119. package/cjs/style/themes/theme-ui/ui-theme-components.css +4 -3
  120. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +2 -2
  121. package/cjs/style/themes/theme-ui/ui-theme-extensions.css +1 -1
  122. package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  123. package/cjs/style/themes/theme-ui/ui-theme-extensions.scss +1 -1
  124. package/cjs/style/themes/theme-ui/ui-theme-forms.css +1 -1
  125. package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  126. package/cjs/style/themes/theme-ui/ui-theme-forms.scss +1 -1
  127. package/components/dialog/style/dnb-dialog.css +2 -1
  128. package/components/dialog/style/dnb-dialog.min.css +1 -1
  129. package/components/dialog/style/dnb-dialog.scss +2 -1
  130. package/components/form-label/FormLabel.js +13 -10
  131. package/components/form-label/FormLabel.js.map +1 -1
  132. package/components/height-animation/HeightAnimation.d.ts +1 -1
  133. package/components/height-animation/HeightAnimation.js.map +1 -1
  134. package/components/height-animation/HeightAnimationDocs.js +2 -2
  135. package/components/height-animation/HeightAnimationDocs.js.map +1 -1
  136. package/components/pagination/Pagination.d.ts +1 -1
  137. package/components/upload/Upload.js +2 -1
  138. package/components/upload/Upload.js.map +1 -1
  139. package/components/upload/UploadDocs.js +5 -0
  140. package/components/upload/UploadDocs.js.map +1 -1
  141. package/components/upload/UploadFileList.js +77 -12
  142. package/components/upload/UploadFileList.js.map +1 -1
  143. package/components/upload/UploadFileListCell.d.ts +5 -1
  144. package/components/upload/UploadFileListCell.js +9 -8
  145. package/components/upload/UploadFileListCell.js.map +1 -1
  146. package/components/upload/UploadFileListLink.d.ts +13 -0
  147. package/components/upload/UploadFileListLink.js +56 -0
  148. package/components/upload/UploadFileListLink.js.map +1 -0
  149. package/components/upload/types.d.ts +8 -2
  150. package/components/upload/types.js.map +1 -1
  151. package/es/components/dialog/style/dnb-dialog.css +2 -1
  152. package/es/components/dialog/style/dnb-dialog.min.css +1 -1
  153. package/es/components/dialog/style/dnb-dialog.scss +2 -1
  154. package/es/components/form-label/FormLabel.js +13 -10
  155. package/es/components/form-label/FormLabel.js.map +1 -1
  156. package/es/components/height-animation/HeightAnimation.d.ts +1 -1
  157. package/es/components/height-animation/HeightAnimation.js.map +1 -1
  158. package/es/components/height-animation/HeightAnimationDocs.js +2 -2
  159. package/es/components/height-animation/HeightAnimationDocs.js.map +1 -1
  160. package/es/components/pagination/Pagination.d.ts +1 -1
  161. package/es/components/upload/Upload.js +2 -1
  162. package/es/components/upload/Upload.js.map +1 -1
  163. package/es/components/upload/UploadDocs.js +5 -0
  164. package/es/components/upload/UploadDocs.js.map +1 -1
  165. package/es/components/upload/UploadFileList.js +77 -12
  166. package/es/components/upload/UploadFileList.js.map +1 -1
  167. package/es/components/upload/UploadFileListCell.d.ts +5 -1
  168. package/es/components/upload/UploadFileListCell.js +9 -8
  169. package/es/components/upload/UploadFileListCell.js.map +1 -1
  170. package/es/components/upload/UploadFileListLink.d.ts +13 -0
  171. package/es/components/upload/UploadFileListLink.js +56 -0
  172. package/es/components/upload/UploadFileListLink.js.map +1 -0
  173. package/es/components/upload/types.d.ts +8 -2
  174. package/es/components/upload/types.js.map +1 -1
  175. package/es/extensions/forms/DataContext/Provider/Provider.js +17 -9
  176. package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  177. package/es/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  178. package/es/extensions/forms/Field/Upload/Upload.js +18 -7
  179. package/es/extensions/forms/Field/Upload/Upload.js.map +1 -1
  180. package/es/extensions/forms/Form/Element/Element.js +1 -1
  181. package/es/extensions/forms/Form/Element/Element.js.map +1 -1
  182. package/es/extensions/forms/Form/InfoOverlay/InfoOverlay.d.ts +36 -0
  183. package/es/extensions/forms/Form/InfoOverlay/InfoOverlay.js +122 -0
  184. package/es/extensions/forms/Form/InfoOverlay/InfoOverlay.js.map +1 -0
  185. package/es/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.d.ts +3 -0
  186. package/es/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.js +60 -0
  187. package/es/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.js.map +1 -0
  188. package/es/extensions/forms/Form/InfoOverlay/index.d.ts +2 -0
  189. package/es/extensions/forms/Form/InfoOverlay/index.js +3 -0
  190. package/es/extensions/forms/Form/InfoOverlay/index.js.map +1 -0
  191. package/es/extensions/forms/Form/InfoOverlay/setContent.d.ts +4 -0
  192. package/es/extensions/forms/Form/InfoOverlay/setContent.js +8 -0
  193. package/es/extensions/forms/Form/InfoOverlay/setContent.js.map +1 -0
  194. package/es/extensions/forms/Form/Section/Section.js.map +1 -1
  195. package/es/extensions/forms/Form/Section/style/themes/ui.js +1 -1
  196. package/es/extensions/forms/Form/Section/style/themes/ui.js.map +1 -1
  197. package/es/extensions/forms/Form/Visibility/Visibility.d.ts +8 -4
  198. package/es/extensions/forms/Form/Visibility/Visibility.js +16 -2
  199. package/es/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  200. package/es/extensions/forms/Form/Visibility/VisibilityDocs.d.ts +1 -0
  201. package/es/extensions/forms/Form/Visibility/VisibilityDocs.js +9 -0
  202. package/es/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  203. package/es/extensions/forms/Form/index.d.ts +1 -0
  204. package/es/extensions/forms/Form/index.js +1 -0
  205. package/es/extensions/forms/Form/index.js.map +1 -1
  206. package/es/extensions/forms/Value/Upload/Upload.d.ts +3 -2
  207. package/es/extensions/forms/Value/Upload/Upload.js +18 -10
  208. package/es/extensions/forms/Value/Upload/Upload.js.map +1 -1
  209. package/es/extensions/forms/Value/Upload/UploadDocs.d.ts +2 -1
  210. package/es/extensions/forms/Value/Upload/UploadDocs.js +5 -1
  211. package/es/extensions/forms/Value/Upload/UploadDocs.js.map +1 -1
  212. package/es/extensions/forms/Wizard/Container/WizardContainer.js +2 -3
  213. package/es/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  214. package/es/extensions/forms/Wizard/style/dnb-wizard-layout.css +1 -1
  215. package/es/extensions/forms/Wizard/style/dnb-wizard-layout.min.css +1 -1
  216. package/es/extensions/forms/Wizard/style/dnb-wizard-layout.scss +1 -1
  217. package/es/extensions/forms/constants/locales/en-GB.d.ts +12 -0
  218. package/es/extensions/forms/constants/locales/en-GB.js +12 -0
  219. package/es/extensions/forms/constants/locales/en-GB.js.map +1 -1
  220. package/es/extensions/forms/constants/locales/en-US.d.ts +12 -0
  221. package/es/extensions/forms/constants/locales/index.d.ts +24 -0
  222. package/es/extensions/forms/constants/locales/nb-NO.d.ts +12 -0
  223. package/es/extensions/forms/constants/locales/nb-NO.js +12 -0
  224. package/es/extensions/forms/constants/locales/nb-NO.js.map +1 -1
  225. package/es/extensions/forms/style/dnb-forms.css +1 -1
  226. package/es/extensions/forms/style/dnb-forms.min.css +1 -1
  227. package/es/fragments/drawer-list/DrawerListProvider.js +57 -21
  228. package/es/fragments/drawer-list/DrawerListProvider.js.map +1 -1
  229. package/es/shared/Eufemia.d.ts +1 -1
  230. package/es/shared/Eufemia.js +2 -2
  231. package/es/shared/Eufemia.js.map +1 -1
  232. package/es/shared/helpers/useSharedState.d.ts +14 -6
  233. package/es/shared/helpers/useSharedState.js +51 -28
  234. package/es/shared/helpers/useSharedState.js.map +1 -1
  235. package/es/shared/locales/en-GB.js +1 -1
  236. package/es/shared/locales/en-GB.js.map +1 -1
  237. package/es/shared/locales/nb-NO.js +1 -1
  238. package/es/shared/locales/nb-NO.js.map +1 -1
  239. package/es/style/core/scopes.scss +1 -1
  240. package/es/style/dnb-ui-basis.css +1 -1
  241. package/es/style/dnb-ui-basis.min.css +1 -1
  242. package/es/style/dnb-ui-body.css +1 -1
  243. package/es/style/dnb-ui-body.min.css +1 -1
  244. package/es/style/dnb-ui-components.css +3 -2
  245. package/es/style/dnb-ui-components.min.css +2 -2
  246. package/es/style/dnb-ui-core.css +1 -1
  247. package/es/style/dnb-ui-core.min.css +1 -1
  248. package/es/style/dnb-ui-extensions.css +1 -1
  249. package/es/style/dnb-ui-extensions.min.css +1 -1
  250. package/es/style/dnb-ui-forms.css +1 -1
  251. package/es/style/dnb-ui-forms.min.css +1 -1
  252. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +4 -3
  253. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
  254. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +1 -1
  255. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  256. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -1
  257. package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +1 -1
  258. package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  259. package/es/style/themes/theme-eiendom/eiendom-theme-forms.scss +1 -1
  260. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +4 -3
  261. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
  262. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +1 -1
  263. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  264. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -1
  265. package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +1 -1
  266. package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  267. package/es/style/themes/theme-sbanken/sbanken-theme-forms.scss +1 -1
  268. package/es/style/themes/theme-ui/ui-theme-components.css +4 -3
  269. package/es/style/themes/theme-ui/ui-theme-components.min.css +2 -2
  270. package/es/style/themes/theme-ui/ui-theme-extensions.css +1 -1
  271. package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  272. package/es/style/themes/theme-ui/ui-theme-extensions.scss +1 -1
  273. package/es/style/themes/theme-ui/ui-theme-forms.css +1 -1
  274. package/es/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  275. package/es/style/themes/theme-ui/ui-theme-forms.scss +1 -1
  276. package/esm/dnb-ui-basis.min.mjs +1 -1
  277. package/esm/dnb-ui-components.min.mjs +1 -1
  278. package/esm/dnb-ui-elements.min.mjs +1 -1
  279. package/esm/dnb-ui-extensions.min.mjs +3 -3
  280. package/esm/dnb-ui-lib.min.mjs +1 -1
  281. package/extensions/forms/DataContext/Provider/Provider.js +17 -9
  282. package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  283. package/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  284. package/extensions/forms/Field/Upload/Upload.js +23 -9
  285. package/extensions/forms/Field/Upload/Upload.js.map +1 -1
  286. package/extensions/forms/Form/Element/Element.js +1 -1
  287. package/extensions/forms/Form/Element/Element.js.map +1 -1
  288. package/extensions/forms/Form/InfoOverlay/InfoOverlay.d.ts +36 -0
  289. package/extensions/forms/Form/InfoOverlay/InfoOverlay.js +122 -0
  290. package/extensions/forms/Form/InfoOverlay/InfoOverlay.js.map +1 -0
  291. package/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.d.ts +3 -0
  292. package/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.js +60 -0
  293. package/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.js.map +1 -0
  294. package/extensions/forms/Form/InfoOverlay/index.d.ts +2 -0
  295. package/extensions/forms/Form/InfoOverlay/index.js +3 -0
  296. package/extensions/forms/Form/InfoOverlay/index.js.map +1 -0
  297. package/extensions/forms/Form/InfoOverlay/setContent.d.ts +4 -0
  298. package/extensions/forms/Form/InfoOverlay/setContent.js +8 -0
  299. package/extensions/forms/Form/InfoOverlay/setContent.js.map +1 -0
  300. package/extensions/forms/Form/Section/Section.js.map +1 -1
  301. package/extensions/forms/Form/Section/style/themes/ui.js +1 -1
  302. package/extensions/forms/Form/Section/style/themes/ui.js.map +1 -1
  303. package/extensions/forms/Form/Visibility/Visibility.d.ts +8 -4
  304. package/extensions/forms/Form/Visibility/Visibility.js +16 -2
  305. package/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  306. package/extensions/forms/Form/Visibility/VisibilityDocs.d.ts +1 -0
  307. package/extensions/forms/Form/Visibility/VisibilityDocs.js +9 -0
  308. package/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  309. package/extensions/forms/Form/index.d.ts +1 -0
  310. package/extensions/forms/Form/index.js +1 -0
  311. package/extensions/forms/Form/index.js.map +1 -1
  312. package/extensions/forms/Value/Upload/Upload.d.ts +3 -2
  313. package/extensions/forms/Value/Upload/Upload.js +18 -10
  314. package/extensions/forms/Value/Upload/Upload.js.map +1 -1
  315. package/extensions/forms/Value/Upload/UploadDocs.d.ts +2 -1
  316. package/extensions/forms/Value/Upload/UploadDocs.js +5 -1
  317. package/extensions/forms/Value/Upload/UploadDocs.js.map +1 -1
  318. package/extensions/forms/Wizard/Container/WizardContainer.js +2 -3
  319. package/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  320. package/extensions/forms/Wizard/style/dnb-wizard-layout.css +1 -1
  321. package/extensions/forms/Wizard/style/dnb-wizard-layout.min.css +1 -1
  322. package/extensions/forms/Wizard/style/dnb-wizard-layout.scss +1 -1
  323. package/extensions/forms/constants/locales/en-GB.d.ts +12 -0
  324. package/extensions/forms/constants/locales/en-GB.js +12 -0
  325. package/extensions/forms/constants/locales/en-GB.js.map +1 -1
  326. package/extensions/forms/constants/locales/en-US.d.ts +12 -0
  327. package/extensions/forms/constants/locales/index.d.ts +24 -0
  328. package/extensions/forms/constants/locales/nb-NO.d.ts +12 -0
  329. package/extensions/forms/constants/locales/nb-NO.js +12 -0
  330. package/extensions/forms/constants/locales/nb-NO.js.map +1 -1
  331. package/extensions/forms/style/dnb-forms.css +1 -1
  332. package/extensions/forms/style/dnb-forms.min.css +1 -1
  333. package/fragments/drawer-list/DrawerListProvider.js +58 -21
  334. package/fragments/drawer-list/DrawerListProvider.js.map +1 -1
  335. package/package.json +1 -1
  336. package/shared/Eufemia.d.ts +1 -1
  337. package/shared/Eufemia.js +2 -2
  338. package/shared/Eufemia.js.map +1 -1
  339. package/shared/helpers/useSharedState.d.ts +14 -6
  340. package/shared/helpers/useSharedState.js +52 -27
  341. package/shared/helpers/useSharedState.js.map +1 -1
  342. package/shared/locales/en-GB.js +1 -1
  343. package/shared/locales/en-GB.js.map +1 -1
  344. package/shared/locales/nb-NO.js +1 -1
  345. package/shared/locales/nb-NO.js.map +1 -1
  346. package/style/core/scopes.scss +1 -1
  347. package/style/dnb-ui-basis.css +1 -1
  348. package/style/dnb-ui-basis.min.css +1 -1
  349. package/style/dnb-ui-body.css +1 -1
  350. package/style/dnb-ui-body.min.css +1 -1
  351. package/style/dnb-ui-components.css +3 -2
  352. package/style/dnb-ui-components.min.css +2 -2
  353. package/style/dnb-ui-core.css +1 -1
  354. package/style/dnb-ui-core.min.css +1 -1
  355. package/style/dnb-ui-extensions.css +1 -1
  356. package/style/dnb-ui-extensions.min.css +1 -1
  357. package/style/dnb-ui-forms.css +1 -1
  358. package/style/dnb-ui-forms.min.css +1 -1
  359. package/style/themes/theme-eiendom/eiendom-theme-components.css +4 -3
  360. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
  361. package/style/themes/theme-eiendom/eiendom-theme-extensions.css +1 -1
  362. package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  363. package/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -1
  364. package/style/themes/theme-eiendom/eiendom-theme-forms.css +1 -1
  365. package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  366. package/style/themes/theme-eiendom/eiendom-theme-forms.scss +1 -1
  367. package/style/themes/theme-sbanken/sbanken-theme-components.css +4 -3
  368. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
  369. package/style/themes/theme-sbanken/sbanken-theme-extensions.css +1 -1
  370. package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  371. package/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -1
  372. package/style/themes/theme-sbanken/sbanken-theme-forms.css +1 -1
  373. package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  374. package/style/themes/theme-sbanken/sbanken-theme-forms.scss +1 -1
  375. package/style/themes/theme-ui/ui-theme-components.css +4 -3
  376. package/style/themes/theme-ui/ui-theme-components.min.css +2 -2
  377. package/style/themes/theme-ui/ui-theme-extensions.css +1 -1
  378. package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  379. package/style/themes/theme-ui/ui-theme-extensions.scss +1 -1
  380. package/style/themes/theme-ui/ui-theme-forms.css +1 -1
  381. package/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  382. package/style/themes/theme-ui/ui-theme-forms.scss +1 -1
  383. package/umd/dnb-ui-basis.min.js +1 -1
  384. package/umd/dnb-ui-components.min.js +1 -1
  385. package/umd/dnb-ui-elements.min.js +1 -1
  386. package/umd/dnb-ui-extensions.min.js +5 -5
  387. package/umd/dnb-ui-lib.min.js +1 -1
  388. /package/cjs/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.css → dnb-form-section-theme-sbanken.css} +0 -0
  389. /package/cjs/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.min.css → dnb-form-section-theme-sbanken.min.css} +0 -0
  390. /package/cjs/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.scss → dnb-form-section-theme-sbanken.scss} +0 -0
  391. /package/cjs/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.css → dnb-form-section-theme-ui.css} +0 -0
  392. /package/cjs/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.min.css → dnb-form-section-theme-ui.min.css} +0 -0
  393. /package/cjs/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.scss → dnb-form-section-theme-ui.scss} +0 -0
  394. /package/es/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.css → dnb-form-section-theme-sbanken.css} +0 -0
  395. /package/es/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.min.css → dnb-form-section-theme-sbanken.min.css} +0 -0
  396. /package/es/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.scss → dnb-form-section-theme-sbanken.scss} +0 -0
  397. /package/es/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.css → dnb-form-section-theme-ui.css} +0 -0
  398. /package/es/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.min.css → dnb-form-section-theme-ui.min.css} +0 -0
  399. /package/es/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.scss → dnb-form-section-theme-ui.scss} +0 -0
  400. /package/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.css → dnb-form-section-theme-sbanken.css} +0 -0
  401. /package/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.min.css → dnb-form-section-theme-sbanken.min.css} +0 -0
  402. /package/extensions/forms/Form/Section/style/themes/{dnb-section-theme-sbanken.scss → dnb-form-section-theme-sbanken.scss} +0 -0
  403. /package/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.css → dnb-form-section-theme-ui.css} +0 -0
  404. /package/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.min.css → dnb-form-section-theme-ui.min.css} +0 -0
  405. /package/extensions/forms/Form/Section/style/themes/{dnb-section-theme-ui.scss → dnb-form-section-theme-ui.scss} +0 -0
@@ -6,7 +6,7 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
6
6
  const _excluded = ["id", "className", "width", "value", "label", "labelDescription", "help", "htmlAttributes", "handleChange", "handleFocus", "handleBlur", "fileHandler"];
7
7
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
8
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9
- import React, { useCallback, useEffect, useMemo } from 'react';
9
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
10
10
  import classnames from 'classnames';
11
11
  import FieldBlock from '../../FieldBlock';
12
12
  import { useFieldProps, useTranslation as useFormsTranslation } from '../../hooks';
@@ -75,12 +75,17 @@ function UploadComponent(props) {
75
75
  filesAmountLimit = 100,
76
76
  fileMaxSize = 5,
77
77
  skeleton,
78
- onFileDelete
78
+ onFileDelete,
79
+ onFileClick
79
80
  } = rest;
80
81
  const {
81
82
  files: fileContext,
82
83
  setFiles
83
84
  } = useUpload(id);
85
+ const filesRef = useRef();
86
+ useEffect(() => {
87
+ filesRef.current = fileContext;
88
+ }, [fileContext]);
84
89
  useEffect(() => {
85
90
  const hasInvalidFiles = value === null || value === void 0 ? void 0 : value.some(({
86
91
  file
@@ -89,19 +94,24 @@ function UploadComponent(props) {
89
94
  setFiles(value);
90
95
  }
91
96
  }, [setFiles, value]);
92
- const handleChangeAsync = useCallback(async files => {
97
+ const handleChangeAsync = useCallback(async existingFiles => {
93
98
  const existingFileIds = (fileContext === null || fileContext === void 0 ? void 0 : fileContext.map(file => file.id)) || [];
94
- const newFiles = files.filter(file => !existingFileIds.includes(file.id));
99
+ const newFiles = existingFiles.filter(file => !existingFileIds.includes(file.id));
95
100
  if (newFiles.length > 0) {
96
101
  setFiles([...fileContext, ...updateFileLoadingState(newFiles, {
97
102
  isLoading: true
98
103
  })]);
99
- const uploadedFiles = updateFileLoadingState(await fileHandler(newFiles), {
104
+ const incomingFiles = await fileHandler(newFiles);
105
+ const uploadedFiles = updateFileLoadingState(incomingFiles, {
100
106
  isLoading: false
101
107
  });
102
- handleChange([...fileContext, ...uploadedFiles]);
108
+ const indexOfFirstNewFile = filesRef.current.findIndex(({
109
+ id
110
+ }) => id === newFiles[0].id);
111
+ const updatedFiles = [...filesRef.current.slice(0, indexOfFirstNewFile), ...uploadedFiles, ...filesRef.current.slice(indexOfFirstNewFile + newFiles.length)];
112
+ handleChange(updatedFiles);
103
113
  } else {
104
- handleChange(files);
114
+ handleChange(existingFiles);
105
115
  }
106
116
  }, [fileContext, setFiles, fileHandler, handleChange]);
107
117
  const changeHandler = useCallback(({
@@ -132,6 +142,7 @@ function UploadComponent(props) {
132
142
  skeleton: skeleton,
133
143
  onChange: changeHandler,
134
144
  onFileDelete: onFileDelete,
145
+ onFileClick: onFileClick,
135
146
  title: label !== null && label !== void 0 ? label : title,
136
147
  text: help ? React.createElement(React.Fragment, null, labelDescription !== null && labelDescription !== void 0 ? labelDescription : text, React.createElement(HelpButtonInline, {
137
148
  contentId: `${id}-help`,
@@ -1 +1 @@
1
- {"version":3,"file":"Upload.js","names":["React","useCallback","useEffect","useMemo","classnames","FieldBlock","useFieldProps","useTranslation","useFormsTranslation","Upload","useUpload","pickSpacingProps","HelpButtonInline","HelpButtonInlineContent","useSharedTranslation","FormError","validateRequired","value","required","isChanged","error","hasError","some","file","errorMessage","hasFiles","length","undefined","updateFileLoadingState","files","isLoading","map","_objectSpread","UploadComponent","props","sharedTr","formsTr","errorMessages","errorRequired","preparedProps","_useFieldProps","executeOnChangeRegardlessOfError","id","className","width","widthProp","label","labelDescription","help","htmlAttributes","handleChange","handleFocus","handleBlur","fileHandler","rest","_objectWithoutProperties","_excluded","title","text","acceptedFileTypes","filesAmountLimit","fileMaxSize","skeleton","onFileDelete","fileContext","setFiles","hasInvalidFiles","name","handleChangeAsync","existingFileIds","newFiles","filter","includes","uploadedFiles","changeHandler","fieldBlockProps","forId","labelSrOnly","createElement","_extends","onChange","Fragment","contentId","left","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/Upload/Upload.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from 'react'\nimport classnames from 'classnames'\nimport FieldBlock, {\n Props as FieldBlockProps,\n FieldBlockWidth,\n} from '../../FieldBlock'\nimport {\n useFieldProps,\n useTranslation as useFormsTranslation,\n} from '../../hooks'\nimport { FieldProps } from '../../types'\nimport Upload, {\n UploadFile,\n UploadFileNative,\n UploadProps,\n} from '../../../../components/Upload'\nimport useUpload from '../../../../components/upload/useUpload'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport HelpButtonInline, {\n HelpButtonInlineContent,\n} from '../../../../components/help-button/HelpButtonInline'\nimport { useTranslation as useSharedTranslation } from '../../../../shared'\nimport { SpacingProps } from '../../../../shared/types'\nimport { FormError } from '../../utils'\n\nexport type UploadValue = Array<UploadFile | UploadFileNative>\nexport type Props = Omit<\n FieldProps<UploadValue, UploadValue | undefined>,\n 'name'\n> &\n SpacingProps & {\n width?: Omit<FieldBlockWidth, 'medium' | 'small'>\n } & Pick<\n Partial<UploadProps>,\n | 'title'\n | 'text'\n | 'acceptedFileTypes'\n | 'filesAmountLimit'\n | 'fileMaxSize'\n | 'onFileDelete'\n | 'skeleton'\n > & {\n fileHandler?: (\n newFiles: UploadValue\n ) => UploadValue | Promise<UploadValue>\n }\n\nconst validateRequired = (\n value: UploadValue,\n { required, isChanged, error }\n) => {\n const hasError = value?.some((file) => file.errorMessage)\n if (hasError) {\n return new FormError('Upload.errorInvalidFiles')\n }\n\n const hasFiles = value?.length > 0\n if (required && ((!isChanged && !hasFiles) || !hasFiles)) {\n return error\n }\n\n return undefined\n}\n\nconst updateFileLoadingState = (\n files: UploadValue,\n { isLoading } = { isLoading: false }\n) => {\n return files.map((file) => ({ ...file, isLoading }))\n}\n\nfunction UploadComponent(props: Props) {\n const sharedTr = useSharedTranslation().Upload\n const formsTr = useFormsTranslation().Upload\n\n const errorMessages = useMemo(\n () => ({\n 'Field.errorRequired': formsTr.errorRequired,\n }),\n [formsTr.errorRequired]\n )\n\n const preparedProps = {\n errorMessages,\n validateRequired,\n ...props,\n }\n\n const {\n id,\n className,\n width: widthProp = 'stretch',\n value,\n label,\n labelDescription,\n help,\n htmlAttributes,\n handleChange,\n handleFocus,\n handleBlur,\n fileHandler,\n ...rest\n } = useFieldProps(preparedProps, {\n executeOnChangeRegardlessOfError: true,\n })\n\n // Upload props\n const {\n title = sharedTr.title,\n text = sharedTr.text,\n acceptedFileTypes = ['pdf', 'png', 'jpg', 'jpeg'],\n filesAmountLimit = 100,\n fileMaxSize = 5,\n skeleton,\n onFileDelete,\n } = rest\n\n const { files: fileContext, setFiles } = useUpload(id)\n\n useEffect(() => {\n // Files stored in session storage will not have a property (due to serialization).\n const hasInvalidFiles = value?.some(({ file }) => !file?.name)\n if (!hasInvalidFiles) {\n setFiles(value)\n }\n }, [setFiles, value])\n\n const handleChangeAsync = useCallback(\n async (files: UploadValue) => {\n // Filter out existing files\n const existingFileIds = fileContext?.map((file) => file.id) || []\n const newFiles = files.filter(\n (file) => !existingFileIds.includes(file.id)\n )\n\n if (newFiles.length > 0) {\n // Set loading\n setFiles([\n ...fileContext,\n ...updateFileLoadingState(newFiles, { isLoading: true }),\n ])\n\n const uploadedFiles = updateFileLoadingState(\n await fileHandler(newFiles),\n { isLoading: false }\n )\n\n // Set error, if any\n handleChange([...fileContext, ...uploadedFiles])\n } else {\n handleChange(files)\n }\n },\n [fileContext, setFiles, fileHandler, handleChange]\n )\n\n const changeHandler = useCallback(\n ({ files }: { files: UploadValue }) => {\n // Prevents the form-status from showing up\n handleBlur()\n handleFocus()\n\n if (fileHandler) {\n handleChangeAsync(files)\n } else {\n handleChange(files)\n }\n },\n [handleBlur, handleFocus, fileHandler, handleChangeAsync, handleChange]\n )\n\n const width = widthProp as FieldBlockWidth\n const fieldBlockProps: FieldBlockProps = {\n id,\n forId: `${id}-input`,\n labelSrOnly: true,\n className: classnames('dnb-forms-field-upload', className),\n width,\n help: undefined,\n ...pickSpacingProps(props),\n }\n\n return (\n <FieldBlock {...fieldBlockProps}>\n <Upload\n id={id}\n acceptedFileTypes={acceptedFileTypes}\n filesAmountLimit={filesAmountLimit}\n fileMaxSize={fileMaxSize}\n skeleton={skeleton}\n onChange={changeHandler}\n onFileDelete={onFileDelete}\n title={label ?? title}\n text={\n help ? (\n <>\n {labelDescription ?? text}\n <HelpButtonInline\n contentId={`${id}-help`}\n left={text ? 'x-small' : false}\n help={help}\n />\n </>\n ) : (\n labelDescription ?? text\n )\n }\n {...htmlAttributes}\n >\n {help && (\n <HelpButtonInlineContent contentId={`${id}-help`} help={help} />\n )}\n </Upload>\n </FieldBlock>\n )\n}\n\nexport default UploadComponent\n\nUploadComponent._supportsSpacingProps = true\n"],"mappings":"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"}
1
+ {"version":3,"file":"Upload.js","names":["React","useCallback","useEffect","useMemo","useRef","classnames","FieldBlock","useFieldProps","useTranslation","useFormsTranslation","Upload","useUpload","pickSpacingProps","HelpButtonInline","HelpButtonInlineContent","useSharedTranslation","FormError","validateRequired","value","required","isChanged","error","hasError","some","file","errorMessage","hasFiles","length","undefined","updateFileLoadingState","files","isLoading","map","_objectSpread","UploadComponent","props","sharedTr","formsTr","errorMessages","errorRequired","preparedProps","_useFieldProps","executeOnChangeRegardlessOfError","id","className","width","widthProp","label","labelDescription","help","htmlAttributes","handleChange","handleFocus","handleBlur","fileHandler","rest","_objectWithoutProperties","_excluded","title","text","acceptedFileTypes","filesAmountLimit","fileMaxSize","skeleton","onFileDelete","onFileClick","fileContext","setFiles","filesRef","current","hasInvalidFiles","name","handleChangeAsync","existingFiles","existingFileIds","newFiles","filter","includes","incomingFiles","uploadedFiles","indexOfFirstNewFile","findIndex","updatedFiles","slice","changeHandler","fieldBlockProps","forId","labelSrOnly","createElement","_extends","onChange","Fragment","contentId","left","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/Upload/Upload.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef } from 'react'\nimport classnames from 'classnames'\nimport FieldBlock, {\n Props as FieldBlockProps,\n FieldBlockWidth,\n} from '../../FieldBlock'\nimport {\n useFieldProps,\n useTranslation as useFormsTranslation,\n} from '../../hooks'\nimport { FieldProps } from '../../types'\nimport Upload, {\n UploadFile,\n UploadFileNative,\n UploadProps,\n} from '../../../../components/Upload'\nimport useUpload from '../../../../components/upload/useUpload'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport HelpButtonInline, {\n HelpButtonInlineContent,\n} from '../../../../components/help-button/HelpButtonInline'\nimport { useTranslation as useSharedTranslation } from '../../../../shared'\nimport { SpacingProps } from '../../../../shared/types'\nimport { FormError } from '../../utils'\n\nexport type UploadValue = Array<UploadFile | UploadFileNative>\nexport type Props = Omit<\n FieldProps<UploadValue, UploadValue | undefined>,\n 'name'\n> &\n SpacingProps & {\n width?: Omit<FieldBlockWidth, 'medium' | 'small'>\n } & Pick<\n Partial<UploadProps>,\n | 'title'\n | 'text'\n | 'acceptedFileTypes'\n | 'filesAmountLimit'\n | 'fileMaxSize'\n | 'onFileDelete'\n | 'onFileClick'\n | 'skeleton'\n | 'download'\n > & {\n fileHandler?: (\n newFiles: UploadValue\n ) => UploadValue | Promise<UploadValue>\n }\n\nconst validateRequired = (\n value: UploadValue,\n { required, isChanged, error }\n) => {\n const hasError = value?.some((file) => file.errorMessage)\n if (hasError) {\n return new FormError('Upload.errorInvalidFiles')\n }\n\n const hasFiles = value?.length > 0\n if (required && ((!isChanged && !hasFiles) || !hasFiles)) {\n return error\n }\n\n return undefined\n}\n\nconst updateFileLoadingState = (\n files: UploadValue,\n { isLoading } = { isLoading: false }\n) => {\n return files.map((file) => ({ ...file, isLoading }))\n}\n\nfunction UploadComponent(props: Props) {\n const sharedTr = useSharedTranslation().Upload\n const formsTr = useFormsTranslation().Upload\n\n const errorMessages = useMemo(\n () => ({\n 'Field.errorRequired': formsTr.errorRequired,\n }),\n [formsTr.errorRequired]\n )\n\n const preparedProps = {\n errorMessages,\n validateRequired,\n ...props,\n }\n\n const {\n id,\n className,\n width: widthProp = 'stretch',\n value,\n label,\n labelDescription,\n help,\n htmlAttributes,\n handleChange,\n handleFocus,\n handleBlur,\n fileHandler,\n ...rest\n } = useFieldProps(preparedProps, {\n executeOnChangeRegardlessOfError: true,\n })\n\n // Upload props\n const {\n title = sharedTr.title,\n text = sharedTr.text,\n acceptedFileTypes = ['pdf', 'png', 'jpg', 'jpeg'],\n filesAmountLimit = 100,\n fileMaxSize = 5,\n skeleton,\n onFileDelete,\n onFileClick,\n } = rest\n\n const { files: fileContext, setFiles } = useUpload(id)\n\n const filesRef = useRef<Array<UploadFile>>()\n\n useEffect(() => {\n filesRef.current = fileContext\n }, [fileContext])\n\n useEffect(() => {\n // Files stored in session storage will not have a property (due to serialization).\n const hasInvalidFiles = value?.some(({ file }) => !file?.name)\n if (!hasInvalidFiles) {\n setFiles(value)\n }\n }, [setFiles, value])\n\n const handleChangeAsync = useCallback(\n async (existingFiles: UploadValue) => {\n // Filter out existing files\n const existingFileIds = fileContext?.map((file) => file.id) || []\n const newFiles = existingFiles.filter(\n (file) => !existingFileIds.includes(file.id)\n )\n\n if (newFiles.length > 0) {\n // Set loading\n setFiles([\n ...fileContext,\n ...updateFileLoadingState(newFiles, { isLoading: true }),\n ])\n\n const incomingFiles = await fileHandler(newFiles)\n\n const uploadedFiles = updateFileLoadingState(incomingFiles, {\n isLoading: false,\n })\n\n const indexOfFirstNewFile = filesRef.current.findIndex(\n ({ id }) => id === newFiles[0].id\n )\n\n const updatedFiles = [\n ...filesRef.current.slice(0, indexOfFirstNewFile),\n ...uploadedFiles,\n ...filesRef.current.slice(indexOfFirstNewFile + newFiles.length),\n ]\n\n // Set error, if any\n handleChange(updatedFiles)\n } else {\n handleChange(existingFiles)\n }\n },\n [fileContext, setFiles, fileHandler, handleChange]\n )\n\n const changeHandler = useCallback(\n ({ files }: { files: UploadValue }) => {\n // Prevents the form-status from showing up\n handleBlur()\n handleFocus()\n\n if (fileHandler) {\n handleChangeAsync(files)\n } else {\n handleChange(files)\n }\n },\n [handleBlur, handleFocus, fileHandler, handleChangeAsync, handleChange]\n )\n\n const width = widthProp as FieldBlockWidth\n const fieldBlockProps: FieldBlockProps = {\n id,\n forId: `${id}-input`,\n labelSrOnly: true,\n className: classnames('dnb-forms-field-upload', className),\n width,\n help: undefined,\n ...pickSpacingProps(props),\n }\n\n return (\n <FieldBlock {...fieldBlockProps}>\n <Upload\n id={id}\n acceptedFileTypes={acceptedFileTypes}\n filesAmountLimit={filesAmountLimit}\n fileMaxSize={fileMaxSize}\n skeleton={skeleton}\n onChange={changeHandler}\n onFileDelete={onFileDelete}\n onFileClick={onFileClick}\n title={label ?? title}\n text={\n help ? (\n <>\n {labelDescription ?? text}\n <HelpButtonInline\n contentId={`${id}-help`}\n left={text ? 'x-small' : false}\n help={help}\n />\n </>\n ) : (\n labelDescription ?? text\n )\n }\n {...htmlAttributes}\n >\n {help && (\n <HelpButtonInlineContent contentId={`${id}-help`} help={help} />\n )}\n </Upload>\n </FieldBlock>\n )\n}\n\nexport default UploadComponent\n\nUploadComponent._supportsSpacingProps = true\n"],"mappings":"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"}
@@ -57,7 +57,7 @@ export default function FormElement(props) {
57
57
  key: key,
58
58
  state: key,
59
59
  id: `${id}-form-status-${key}`,
60
- className: "dnb-forms-status",
60
+ className: "dnb-forms-form__status-message",
61
61
  show: Boolean(value),
62
62
  no_animation: false,
63
63
  shellSpace: {
@@ -1 +1 @@
1
- {"version":3,"file":"Element.js","names":["React","useCallback","useContext","useRef","classnames","DataContext","Space","useId","FormStatus","combineLabelledBy","FormElement","props","id","dataContext","submitState","restHandlerProps","states","Object","entries","filter","value","_ref","_objectSpread","children","className","onSubmit","restProps","_objectWithoutProperties","_excluded","hasElementRef","current","onSubmitHandler","event","preventDefault","formElement","target","hasContext","formElementRef","handleSubmit","createElement","_extends","element","map","key","undefined","state","show","Boolean","no_animation","shellSpace","top","String"],"sources":["../../../../../../src/extensions/forms/Form/Element/Element.tsx"],"sourcesContent":["import React, { useCallback, useContext, useRef } from 'react'\nimport classnames from 'classnames'\nimport DataContext from '../../DataContext/Context'\nimport Space from '../../../../components/space/Space'\nimport useId from '../../../../shared/helpers/useId'\nimport type { SpacingProps } from '../../../../shared/types'\nimport { FormStatus } from '../../../../components'\nimport { combineLabelledBy } from '../../../../shared/component-helper'\n\nexport type Props = Omit<\n React.HTMLProps<HTMLFormElement>,\n 'ref' | 'autoComplete'\n> &\n SpacingProps\n\nexport default function FormElement(props: Props) {\n const id = useId()\n const dataContext = useContext(DataContext)\n const { submitState, restHandlerProps } = dataContext || {}\n const states = Object.entries(submitState || {}).filter(\n ([, value]) => value\n )\n\n const { children, className, onSubmit, ...restProps } = {\n ...restHandlerProps,\n ...props,\n } as Props\n\n /**\n * Set to true,\n * this way we prevent \"handleSubmit\" to be called twice when the SubmitButton is pressed.\n */\n const hasElementRef = useRef(false)\n if (!dataContext.hasElementRef) {\n dataContext.hasElementRef = hasElementRef\n }\n dataContext.hasElementRef.current = true\n\n const onSubmitHandler = useCallback(\n (event: React.SyntheticEvent<HTMLFormElement>) => {\n event?.preventDefault()\n\n const formElement = event.target as HTMLFormElement\n\n if (dataContext.hasContext) {\n dataContext.formElementRef.current = formElement\n dataContext.handleSubmit()\n }\n\n if (typeof onSubmit === 'function') {\n onSubmit(event)\n }\n },\n [dataContext, onSubmit]\n )\n\n return (\n <Space\n element=\"form\"\n className={classnames('dnb-forms-form', className)}\n onSubmit={onSubmitHandler}\n aria-labelledby={\n combineLabelledBy(\n restProps,\n states.map(([key]) => {\n return `${id}-form-status-${key}`\n })\n ) || undefined\n }\n {...restProps}\n >\n {children}\n\n {['error', 'warning', 'info'].map((key) => {\n const value = submitState?.[key]\n return (\n <FormStatus\n key={key}\n state={key}\n id={`${id}-form-status-${key}`}\n className=\"dnb-forms-status\"\n show={Boolean(value)}\n no_animation={false}\n shellSpace={{ top: 'small' }}\n >\n {String(value?.['message'] || value || '')}\n </FormStatus>\n )\n })}\n </Space>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Element.js","names":["React","useCallback","useContext","useRef","classnames","DataContext","Space","useId","FormStatus","combineLabelledBy","FormElement","props","id","dataContext","submitState","restHandlerProps","states","Object","entries","filter","value","_ref","_objectSpread","children","className","onSubmit","restProps","_objectWithoutProperties","_excluded","hasElementRef","current","onSubmitHandler","event","preventDefault","formElement","target","hasContext","formElementRef","handleSubmit","createElement","_extends","element","map","key","undefined","state","show","Boolean","no_animation","shellSpace","top","String"],"sources":["../../../../../../src/extensions/forms/Form/Element/Element.tsx"],"sourcesContent":["import React, { useCallback, useContext, useRef } from 'react'\nimport classnames from 'classnames'\nimport DataContext from '../../DataContext/Context'\nimport Space from '../../../../components/space/Space'\nimport useId from '../../../../shared/helpers/useId'\nimport type { SpacingProps } from '../../../../shared/types'\nimport { FormStatus } from '../../../../components'\nimport { combineLabelledBy } from '../../../../shared/component-helper'\n\nexport type Props = Omit<\n React.HTMLProps<HTMLFormElement>,\n 'ref' | 'autoComplete'\n> &\n SpacingProps\n\nexport default function FormElement(props: Props) {\n const id = useId()\n const dataContext = useContext(DataContext)\n const { submitState, restHandlerProps } = dataContext || {}\n const states = Object.entries(submitState || {}).filter(\n ([, value]) => value\n )\n\n const { children, className, onSubmit, ...restProps } = {\n ...restHandlerProps,\n ...props,\n } as Props\n\n /**\n * Set to true,\n * this way we prevent \"handleSubmit\" to be called twice when the SubmitButton is pressed.\n */\n const hasElementRef = useRef(false)\n if (!dataContext.hasElementRef) {\n dataContext.hasElementRef = hasElementRef\n }\n dataContext.hasElementRef.current = true\n\n const onSubmitHandler = useCallback(\n (event: React.SyntheticEvent<HTMLFormElement>) => {\n event?.preventDefault()\n\n const formElement = event.target as HTMLFormElement\n\n if (dataContext.hasContext) {\n dataContext.formElementRef.current = formElement\n dataContext.handleSubmit()\n }\n\n if (typeof onSubmit === 'function') {\n onSubmit(event)\n }\n },\n [dataContext, onSubmit]\n )\n\n return (\n <Space\n element=\"form\"\n className={classnames('dnb-forms-form', className)}\n onSubmit={onSubmitHandler}\n aria-labelledby={\n combineLabelledBy(\n restProps,\n states.map(([key]) => {\n return `${id}-form-status-${key}`\n })\n ) || undefined\n }\n {...restProps}\n >\n {children}\n\n {['error', 'warning', 'info'].map((key) => {\n const value = submitState?.[key]\n return (\n <FormStatus\n key={key}\n state={key}\n id={`${id}-form-status-${key}`}\n className=\"dnb-forms-form__status-message\"\n show={Boolean(value)}\n no_animation={false}\n shellSpace={{ top: 'small' }}\n >\n {String(value?.['message'] || value || '')}\n </FormStatus>\n )\n })}\n </Space>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import { SharedStateId } from '../../../../shared/helpers/useSharedState';
3
+ import { InfoOverlayContent } from './setContent';
4
+ export type Props = {
5
+ /**
6
+ * The content to show.
7
+ * If not given, the children will be shown.
8
+ * Can be `success`, `error` or a custom content.
9
+ */
10
+ content?: InfoOverlayContent;
11
+ onCancel?: () => void;
12
+ /** Predefined content */
13
+ success?: {
14
+ title?: React.ReactNode;
15
+ description?: React.ReactNode;
16
+ buttonText?: React.ReactNode;
17
+ buttonHref?: string;
18
+ buttonClickHandler?: () => void;
19
+ };
20
+ /** Predefined content */
21
+ error?: {
22
+ title?: React.ReactNode;
23
+ description?: React.ReactNode;
24
+ retryButton?: React.ReactNode;
25
+ cancelButton?: React.ReactNode;
26
+ };
27
+ id?: SharedStateId;
28
+ children: React.ReactNode;
29
+ className?: string;
30
+ };
31
+ declare function InfoOverlay(props: Props): import("react/jsx-runtime").JSX.Element;
32
+ declare namespace InfoOverlay {
33
+ var setContent: typeof import("./setContent").default;
34
+ var _supportsSpacingProps: boolean;
35
+ }
36
+ export default InfoOverlay;
@@ -0,0 +1,122 @@
1
+ "use client";
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
5
+ const _excluded = ["id", "content", "success", "error", "onCancel", "className", "children"];
6
+ import React, { useCallback, useContext, useRef } from 'react';
7
+ import classnames from 'classnames';
8
+ import Visibility from '../Visibility';
9
+ import DataContext from '../../DataContext/Context';
10
+ import { useSharedState } from '../../../../shared/helpers/useSharedState';
11
+ import useMounted from '../../../../shared/helpers/useMounted';
12
+ import setContent from './setContent';
13
+ import { Button, Flex, HeightAnimation, Section } from '../../../../components';
14
+ import { P } from '../../../../elements';
15
+ import { useTranslation } from '../../hooks';
16
+ import MainHeading from '../MainHeading';
17
+ import SubmitButton from '../SubmitButton';
18
+ function InfoOverlay(props) {
19
+ const {
20
+ id: idProp,
21
+ formState
22
+ } = useContext(DataContext);
23
+ const {
24
+ id = idProp,
25
+ content: contentProp,
26
+ success,
27
+ error,
28
+ onCancel,
29
+ className,
30
+ children
31
+ } = props,
32
+ restProps = _objectWithoutProperties(props, _excluded);
33
+ const {
34
+ data
35
+ } = useSharedState(id);
36
+ const {
37
+ content = contentProp
38
+ } = data || {};
39
+ const translations = useTranslation();
40
+ const mountedRef = useMounted();
41
+ const innerRef = useRef(null);
42
+ const onAnimationEnd = useCallback(state => {
43
+ if (mountedRef.current && state === 'opened') {
44
+ var _innerRef$current$foc, _innerRef$current;
45
+ (_innerRef$current$foc = (_innerRef$current = innerRef.current).focus) === null || _innerRef$current$foc === void 0 ? void 0 : _innerRef$current$foc.call(_innerRef$current);
46
+ }
47
+ }, [mountedRef]);
48
+ const currentContentRef = useRef();
49
+ if (content) {
50
+ currentContentRef.current = content;
51
+ }
52
+ const onCancelHandler = useCallback(() => {
53
+ if (id) {
54
+ setContent(id, undefined);
55
+ }
56
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
57
+ }, [id, onCancel]);
58
+ const childrenAreVisible = typeof content !== 'undefined' ? !(content === content) : undefined;
59
+ const statusContentIsVisible = typeof content !== 'undefined' ? content === content : false;
60
+ const status = typeof content === 'string' && !content.includes(' ') ? content : undefined;
61
+ let statusContent = content;
62
+ if (currentContentRef.current === 'success') {
63
+ const tr = translations.InfoOverlaySuccess;
64
+ const {
65
+ title,
66
+ description,
67
+ buttonText,
68
+ buttonHref,
69
+ buttonClickHandler
70
+ } = success || {};
71
+ statusContent = React.createElement(Section, _extends({
72
+ variant: "info",
73
+ innerSpace: {
74
+ top: 'large',
75
+ bottom: 'xx-large'
76
+ }
77
+ }, restProps), React.createElement(Flex.Stack, {
78
+ gap: "large"
79
+ }, React.createElement(MainHeading, null, title !== null && title !== void 0 ? title : tr.title), React.createElement(P, null, description !== null && description !== void 0 ? description : tr.description), React.createElement(Button, {
80
+ href: buttonClickHandler ? undefined : buttonHref !== null && buttonHref !== void 0 ? buttonHref : '/',
81
+ on_click: buttonClickHandler
82
+ }, buttonText !== null && buttonText !== void 0 ? buttonText : tr.buttonText)));
83
+ } else if (currentContentRef.current === 'error') {
84
+ const tr = translations.InfoOverlayError;
85
+ const {
86
+ title,
87
+ description,
88
+ cancelButton,
89
+ retryButton
90
+ } = error || {};
91
+ statusContent = React.createElement(Section, _extends({
92
+ variant: "transparent",
93
+ innerSpace: {
94
+ top: 'large',
95
+ bottom: 'xx-large'
96
+ }
97
+ }, restProps), React.createElement(Flex.Stack, {
98
+ gap: "large"
99
+ }, React.createElement(MainHeading, null, title !== null && title !== void 0 ? title : tr.title), React.createElement(HeightAnimation, null, React.createElement(P, null, formState === 'pending' ? tr.retryingText : description !== null && description !== void 0 ? description : tr.description)), React.createElement(Flex.Horizontal, null, React.createElement(Button, {
100
+ variant: "secondary",
101
+ onClick: onCancelHandler
102
+ }, cancelButton !== null && cancelButton !== void 0 ? cancelButton : tr.cancelButton), React.createElement(SubmitButton, null, retryButton !== null && retryButton !== void 0 ? retryButton : tr.retryButton))));
103
+ }
104
+ return React.createElement("div", {
105
+ className: classnames("dnb-forms-info-overlay dnb-no-focus", className, status && `dnb-forms-info-overlay--${status}`),
106
+ tabIndex: -1,
107
+ ref: innerRef
108
+ }, React.createElement(Visibility, {
109
+ visible: statusContentIsVisible,
110
+ onAnimationEnd: onAnimationEnd,
111
+ animate: true
112
+ }, statusContent), React.createElement(Visibility, {
113
+ visible: childrenAreVisible,
114
+ onAnimationEnd: onAnimationEnd,
115
+ animate: true,
116
+ keepInDOM: true
117
+ }, children));
118
+ }
119
+ InfoOverlay.setContent = setContent;
120
+ InfoOverlay._supportsSpacingProps = true;
121
+ export default InfoOverlay;
122
+ //# sourceMappingURL=InfoOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InfoOverlay.js","names":["React","useCallback","useContext","useRef","classnames","Visibility","DataContext","useSharedState","useMounted","setContent","Button","Flex","HeightAnimation","Section","P","useTranslation","MainHeading","SubmitButton","InfoOverlay","props","id","idProp","formState","content","contentProp","success","error","onCancel","className","children","restProps","_objectWithoutProperties","_excluded","data","translations","mountedRef","innerRef","onAnimationEnd","state","current","_innerRef$current$foc","_innerRef$current","focus","call","currentContentRef","onCancelHandler","undefined","childrenAreVisible","statusContentIsVisible","status","includes","statusContent","tr","InfoOverlaySuccess","title","description","buttonText","buttonHref","buttonClickHandler","createElement","_extends","variant","innerSpace","top","bottom","Stack","gap","href","on_click","InfoOverlayError","cancelButton","retryButton","retryingText","Horizontal","onClick","tabIndex","ref","visible","animate","keepInDOM","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Form/InfoOverlay/InfoOverlay.tsx"],"sourcesContent":["import React, { useCallback, useContext, useRef } from 'react'\nimport classnames from 'classnames'\nimport Visibility from '../Visibility'\nimport DataContext from '../../DataContext/Context'\nimport {\n SharedStateId,\n useSharedState,\n} from '../../../../shared/helpers/useSharedState'\nimport useMounted from '../../../../shared/helpers/useMounted'\nimport setContent, { InfoOverlayContent } from './setContent'\nimport {\n Button,\n Flex,\n HeightAnimation,\n Section,\n} from '../../../../components'\nimport { HeightAnimationAllProps } from '../../../../components/HeightAnimation'\nimport { P } from '../../../../elements'\nimport { useTranslation } from '../../hooks'\nimport MainHeading from '../MainHeading'\nimport SubmitButton from '../SubmitButton'\n\nexport type Props = {\n /**\n * The content to show.\n * If not given, the children will be shown.\n * Can be `success`, `error` or a custom content.\n */\n content?: InfoOverlayContent\n onCancel?: () => void\n\n /** Predefined content */\n success?: {\n title?: React.ReactNode\n description?: React.ReactNode\n buttonText?: React.ReactNode\n buttonHref?: string\n buttonClickHandler?: () => void\n }\n /** Predefined content */\n error?: {\n title?: React.ReactNode\n description?: React.ReactNode\n retryButton?: React.ReactNode\n cancelButton?: React.ReactNode\n }\n\n // Various props\n id?: SharedStateId\n children: React.ReactNode\n className?: string\n}\n\nfunction InfoOverlay(props: Props) {\n const { id: idProp, formState } = useContext(DataContext)\n\n const {\n id = idProp,\n content: contentProp,\n success,\n error,\n onCancel,\n className,\n children,\n ...restProps\n } = props\n\n const { data } = useSharedState<{\n content?: InfoOverlayContent\n }>(id)\n const { content = contentProp } = data || {}\n\n const translations = useTranslation()\n const mountedRef = useMounted()\n const innerRef = useRef<HTMLDivElement>(null)\n const onAnimationEnd: HeightAnimationAllProps['onAnimationEnd'] =\n useCallback(\n (state) => {\n if (mountedRef.current && state === 'opened') {\n innerRef.current.focus?.()\n }\n },\n [mountedRef]\n )\n\n // To keep the content visible while hiding it with the HightAnimation\n const currentContentRef = useRef<InfoOverlayContent>()\n if (content) {\n currentContentRef.current = content\n }\n\n const onCancelHandler = useCallback(() => {\n if (id) {\n setContent(id, undefined)\n }\n onCancel?.()\n }, [id, onCancel])\n\n const childrenAreVisible =\n typeof content !== 'undefined' ? !(content === content) : undefined\n const statusContentIsVisible =\n typeof content !== 'undefined' ? content === content : false\n const status =\n typeof content === 'string' && !content.includes(' ')\n ? content\n : undefined\n\n let statusContent = content\n\n if (currentContentRef.current === 'success') {\n const tr = translations.InfoOverlaySuccess\n const {\n title,\n description,\n buttonText,\n buttonHref,\n buttonClickHandler,\n } = success || {}\n\n statusContent = (\n <Section\n variant=\"info\"\n innerSpace={{ top: 'large', bottom: 'xx-large' }}\n {...restProps}\n >\n <Flex.Stack gap=\"large\">\n <MainHeading>{title ?? tr.title}</MainHeading>\n <P>{description ?? tr.description}</P>\n <Button\n href={buttonClickHandler ? undefined : buttonHref ?? '/'}\n on_click={buttonClickHandler}\n >\n {buttonText ?? tr.buttonText}\n </Button>\n </Flex.Stack>\n </Section>\n )\n } else if (currentContentRef.current === 'error') {\n const tr = translations.InfoOverlayError\n const { title, description, cancelButton, retryButton } = error || {}\n\n statusContent = (\n <Section\n variant=\"transparent\"\n innerSpace={{ top: 'large', bottom: 'xx-large' }}\n {...restProps}\n >\n <Flex.Stack gap=\"large\">\n <MainHeading>{title ?? tr.title}</MainHeading>\n <HeightAnimation>\n <P>\n {formState === 'pending'\n ? tr.retryingText\n : description ?? tr.description}\n </P>\n </HeightAnimation>\n <Flex.Horizontal>\n <Button variant=\"secondary\" onClick={onCancelHandler}>\n {cancelButton ?? tr.cancelButton}\n </Button>\n <SubmitButton>{retryButton ?? tr.retryButton}</SubmitButton>\n </Flex.Horizontal>\n </Flex.Stack>\n </Section>\n )\n }\n\n return (\n <div\n className={classnames(\n 'dnb-forms-info-overlay',\n status && `dnb-forms-info-overlay--${status}`,\n 'dnb-no-focus',\n className\n )}\n tabIndex={-1}\n ref={innerRef}\n >\n <Visibility\n visible={statusContentIsVisible}\n onAnimationEnd={onAnimationEnd}\n animate\n >\n {statusContent}\n </Visibility>\n\n <Visibility\n visible={childrenAreVisible}\n onAnimationEnd={onAnimationEnd}\n animate\n keepInDOM\n >\n {children}\n </Visibility>\n </div>\n )\n}\n\nInfoOverlay.setContent = setContent\nInfoOverlay._supportsSpacingProps = true\n\nexport default InfoOverlay\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { PropertiesTableProps } from '../../../../shared/types';
2
+ export declare const InfoOverlaySuccessProperties: PropertiesTableProps;
3
+ export declare const InfoOverlayErrorProperties: PropertiesTableProps;
@@ -0,0 +1,60 @@
1
+ export const InfoOverlaySuccessProperties = {
2
+ title: {
3
+ doc: 'The title of the component.',
4
+ type: 'React.Node',
5
+ status: 'optional'
6
+ },
7
+ description: {
8
+ doc: 'The description of the component.',
9
+ type: 'React.Node',
10
+ status: 'optional'
11
+ },
12
+ buttonText: {
13
+ doc: 'The text of the button.',
14
+ type: 'React.Node',
15
+ status: 'optional'
16
+ },
17
+ buttonHref: {
18
+ doc: 'The href of the button.',
19
+ type: 'string',
20
+ status: 'optional'
21
+ },
22
+ buttonClickHandler: {
23
+ doc: 'The click handler of the button.',
24
+ type: 'function',
25
+ status: 'optional'
26
+ },
27
+ '[Section](/uilib/components/section/properties)': {
28
+ doc: 'All Section properties.',
29
+ type: 'various',
30
+ status: 'optional'
31
+ }
32
+ };
33
+ export const InfoOverlayErrorProperties = {
34
+ title: {
35
+ doc: 'The title of the component.',
36
+ type: 'React.Node',
37
+ status: 'optional'
38
+ },
39
+ description: {
40
+ doc: 'The description of the component.',
41
+ type: 'React.Node',
42
+ status: 'optional'
43
+ },
44
+ cancelButton: {
45
+ doc: 'The text of the cancel button.',
46
+ type: 'React.Node',
47
+ status: 'optional'
48
+ },
49
+ retryButton: {
50
+ doc: 'The text of the retry button.',
51
+ type: 'React.Node',
52
+ status: 'optional'
53
+ },
54
+ '[Section](/uilib/components/section/properties)': {
55
+ doc: 'All Section properties.',
56
+ type: 'various',
57
+ status: 'optional'
58
+ }
59
+ };
60
+ //# sourceMappingURL=InfoOverlayDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InfoOverlayDocs.js","names":["InfoOverlaySuccessProperties","title","doc","type","status","description","buttonText","buttonHref","buttonClickHandler","InfoOverlayErrorProperties","cancelButton","retryButton"],"sources":["../../../../../../src/extensions/forms/Form/InfoOverlay/InfoOverlayDocs.tsx"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const InfoOverlaySuccessProperties: PropertiesTableProps = {\n title: {\n doc: 'The title of the component.',\n type: 'React.Node',\n status: 'optional',\n },\n description: {\n doc: 'The description of the component.',\n type: 'React.Node',\n status: 'optional',\n },\n buttonText: {\n doc: 'The text of the button.',\n type: 'React.Node',\n status: 'optional',\n },\n buttonHref: {\n doc: 'The href of the button.',\n type: 'string',\n status: 'optional',\n },\n buttonClickHandler: {\n doc: 'The click handler of the button.',\n type: 'function',\n status: 'optional',\n },\n '[Section](/uilib/components/section/properties)': {\n doc: 'All Section properties.',\n type: 'various',\n status: 'optional',\n },\n}\n\nexport const InfoOverlayErrorProperties: PropertiesTableProps = {\n title: {\n doc: 'The title of the component.',\n type: 'React.Node',\n status: 'optional',\n },\n description: {\n doc: 'The description of the component.',\n type: 'React.Node',\n status: 'optional',\n },\n cancelButton: {\n doc: 'The text of the cancel button.',\n type: 'React.Node',\n status: 'optional',\n },\n retryButton: {\n doc: 'The text of the retry button.',\n type: 'React.Node',\n status: 'optional',\n },\n '[Section](/uilib/components/section/properties)': {\n doc: 'All Section properties.',\n type: 'various',\n status: 'optional',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,4BAAkD,GAAG;EAChEC,KAAK,EAAE;IACLC,GAAG,EAAE,6BAA6B;IAClCC,IAAI,EAAE,YAAY;IAClBC,MAAM,EAAE;EACV,CAAC;EACDC,WAAW,EAAE;IACXH,GAAG,EAAE,mCAAmC;IACxCC,IAAI,EAAE,YAAY;IAClBC,MAAM,EAAE;EACV,CAAC;EACDE,UAAU,EAAE;IACVJ,GAAG,EAAE,yBAAyB;IAC9BC,IAAI,EAAE,YAAY;IAClBC,MAAM,EAAE;EACV,CAAC;EACDG,UAAU,EAAE;IACVL,GAAG,EAAE,yBAAyB;IAC9BC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;EACV,CAAC;EACDI,kBAAkB,EAAE;IAClBN,GAAG,EAAE,kCAAkC;IACvCC,IAAI,EAAE,UAAU;IAChBC,MAAM,EAAE;EACV,CAAC;EACD,iDAAiD,EAAE;IACjDF,GAAG,EAAE,yBAAyB;IAC9BC,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE;EACV;AACF,CAAC;AAED,OAAO,MAAMK,0BAAgD,GAAG;EAC9DR,KAAK,EAAE;IACLC,GAAG,EAAE,6BAA6B;IAClCC,IAAI,EAAE,YAAY;IAClBC,MAAM,EAAE;EACV,CAAC;EACDC,WAAW,EAAE;IACXH,GAAG,EAAE,mCAAmC;IACxCC,IAAI,EAAE,YAAY;IAClBC,MAAM,EAAE;EACV,CAAC;EACDM,YAAY,EAAE;IACZR,GAAG,EAAE,gCAAgC;IACrCC,IAAI,EAAE,YAAY;IAClBC,MAAM,EAAE;EACV,CAAC;EACDO,WAAW,EAAE;IACXT,GAAG,EAAE,+BAA+B;IACpCC,IAAI,EAAE,YAAY;IAClBC,MAAM,EAAE;EACV,CAAC;EACD,iDAAiD,EAAE;IACjDF,GAAG,EAAE,yBAAyB;IAC9BC,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE;EACV;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default } from './InfoOverlay';
2
+ export * from './InfoOverlay';
@@ -0,0 +1,3 @@
1
+ export { default } from './InfoOverlay';
2
+ export * from './InfoOverlay';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["default"],"sources":["../../../../../../src/extensions/forms/Form/InfoOverlay/index.ts"],"sourcesContent":["export { default } from './InfoOverlay'\nexport * from './InfoOverlay'\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,eAAe;AACvC,cAAc,eAAe"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { SharedStateId } from '../../../../shared/helpers/useSharedState';
3
+ export type InfoOverlayContent = 'success' | 'error' | React.ReactNode | undefined;
4
+ export default function setContent(id: SharedStateId, content: InfoOverlayContent): void;
@@ -0,0 +1,8 @@
1
+ import { createSharedState } from '../../../../shared/helpers/useSharedState';
2
+ export default function setContent(id, content) {
3
+ const sharedState = createSharedState(id);
4
+ sharedState.extend({
5
+ content
6
+ });
7
+ }
8
+ //# sourceMappingURL=setContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setContent.js","names":["createSharedState","setContent","id","content","sharedState","extend"],"sources":["../../../../../../src/extensions/forms/Form/InfoOverlay/setContent.ts"],"sourcesContent":["import {\n SharedStateId,\n createSharedState,\n} from '../../../../shared/helpers/useSharedState'\n\nexport type InfoOverlayContent =\n | 'success'\n | 'error'\n | React.ReactNode\n | undefined\n\nexport default function setContent(\n id: SharedStateId,\n content: InfoOverlayContent\n) {\n const sharedState = createSharedState(id)\n sharedState.extend({ content })\n}\n"],"mappings":"AAAA,SAEEA,iBAAiB,QACZ,2CAA2C;AAQlD,eAAe,SAASC,UAAUA,CAChCC,EAAiB,EACjBC,OAA2B,EAC3B;EACA,MAAMC,WAAW,GAAGJ,iBAAiB,CAACE,EAAE,CAAC;EACzCE,WAAW,CAACC,MAAM,CAAC;IAAEF;EAAQ,CAAC,CAAC;AACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Section.js","names":["React","useCallback","useContext","useMemo","SectionContext","DataContext","Provider","FieldPropsProvider","SectionContainerProvider","ViewContainer","EditContainer","Toolbar","SectionComponent","props","_path$startsWith","_nestedProps$overwrit","path","overwriteProps","translations","required","data","defaultData","validateInitially","containerMode","onChange","errorPrioritization","children","startsWith","call","Error","hasContext","addOnChangeHandler","nestedPath","nestedProps","handleChange","args","identifier","fieldProps","undefined","createElement","sectionProps","value","_extends","_objectSpread","substring","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Form/Section/Section.tsx"],"sourcesContent":["import React, { useCallback, useContext, useMemo } from 'react'\nimport SectionContext, { SectionContextState } from './SectionContext'\nimport DataContext from '../../DataContext/Context'\nimport Provider from '../../DataContext/Provider/Provider'\nimport FieldPropsProvider from '../../Field/Provider'\nimport SectionContainerProvider from './containers/SectionContainerProvider'\nimport ViewContainer from './ViewContainer'\nimport EditContainer from './EditContainer'\n\nimport type { Props as DataContextProps } from '../../DataContext/Provider'\nimport type { ContainerMode } from './containers/SectionContainer'\nimport type { Path, FieldProps, OnChange } from '../../types'\nimport type { JsonObject } from '../../utils/json-pointer'\nimport type { SharedFieldBlockProps } from '../../FieldBlock'\nimport Toolbar from './Toolbar'\n\nexport type OverwritePropsDefaults = {\n [key: Path]:\n | (FieldProps & SharedFieldBlockProps)\n | OverwritePropsDefaults\n}\nexport type SectionProps<\n overwriteProps = OverwritePropsDefaults,\n Data extends JsonObject = JsonObject,\n> = {\n /**\n * Path to the section.\n * When defined, fields inside the section will get this path as a prefix of their own path.\n */\n path?: Path\n\n /**\n * Overwrite field props for the section.\n */\n overwriteProps?: overwriteProps | OverwritePropsDefaults\n\n /**\n * Makes all fields inside it required.\n */\n required?: boolean\n\n /**\n * If set to `true`, the whole section will be validated initially. All fields will then automatically get `validateInitially` and show their error messages. Can be useful in combination with `containerMode=\"auto\"`.\n */\n validateInitially?: boolean\n\n /**\n * Defines the container mode. Can be `view`, `edit` or `auto`.\n * When set to `auto`, the mode will initially be \"edit\" if fields contain errors.\n * Defaults to `auto`.\n */\n containerMode?: ContainerMode\n\n /**\n * Only for internal use and undocumented for now.\n * Prioritize error techniques for the section.\n * Can be `fieldSchema`, `sectionSchema` or `contextSchema.\n */\n errorPrioritization?: SectionContextState['errorPrioritization']\n} & Pick<\n DataContextProps<Data>,\n 'data' | 'defaultData' | 'onChange' | 'translations'\n>\n\nexport type LocalProps<overwriteProps = OverwritePropsDefaults> =\n SectionProps<overwriteProps> & {\n children: React.ReactNode\n }\n\nfunction SectionComponent<overwriteProps = OverwritePropsDefaults>(\n props: LocalProps<overwriteProps>\n) {\n const {\n path,\n overwriteProps,\n translations,\n required,\n data,\n defaultData,\n validateInitially,\n containerMode = 'auto',\n onChange,\n errorPrioritization = ['contextSchema'],\n children,\n } = props\n\n if (path && !path.startsWith?.('/')) {\n throw new Error(`path=\"${path}\" must start with a slash`)\n }\n\n const { hasContext, addOnChangeHandler } = useContext(DataContext)\n\n const { path: nestedPath, props: nestedProps } =\n useContext(SectionContext) || {}\n\n const handleChange = useCallback<OnChange>(\n (...args) => onChange?.(...args),\n [onChange]\n )\n addOnChangeHandler?.(handleChange)\n\n const identifier = useMemo(() => {\n return `${nestedPath && nestedPath !== '/' ? nestedPath : ''}${\n path || ''\n }`\n }, [path, nestedPath])\n const fieldProps = required ? { required: true } : undefined\n\n if (!hasContext) {\n return (\n <Provider data={data} defaultData={defaultData}>\n <SectionComponent {...props} />\n </Provider>\n )\n }\n\n const sectionProps = props as SectionProps\n\n return (\n <SectionContext.Provider\n value={{\n path: identifier,\n errorPrioritization,\n props: sectionProps,\n }}\n >\n <SectionContainerProvider\n validateInitially={validateInitially}\n containerMode={containerMode}\n >\n <FieldPropsProvider\n overwriteProps={{\n ...overwriteProps,\n ...(nestedProps?.overwriteProps?.[\n path.substring(1)\n ] as OverwritePropsDefaults),\n }}\n translations={translations}\n {...fieldProps}\n >\n {children}\n </FieldPropsProvider>\n </SectionContainerProvider>\n </SectionContext.Provider>\n )\n}\n\nSectionComponent.Toolbar = Toolbar\nSectionComponent.ViewContainer = ViewContainer\nSectionComponent.EditContainer = EditContainer\n\nSectionComponent._supportsSpacingProps = undefined\nexport default SectionComponent\n"],"mappings":"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"}
1
+ {"version":3,"file":"Section.js","names":["React","useCallback","useContext","useMemo","SectionContext","DataContext","Provider","FieldPropsProvider","SectionContainerProvider","ViewContainer","EditContainer","Toolbar","SectionComponent","props","_path$startsWith","_nestedProps$overwrit","path","overwriteProps","translations","required","data","defaultData","validateInitially","containerMode","onChange","errorPrioritization","children","startsWith","call","Error","hasContext","addOnChangeHandler","nestedPath","nestedProps","handleChange","args","identifier","fieldProps","undefined","createElement","sectionProps","value","_extends","_objectSpread","substring","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Form/Section/Section.tsx"],"sourcesContent":["import React, { useCallback, useContext, useMemo } from 'react'\nimport SectionContext, { SectionContextState } from './SectionContext'\nimport DataContext from '../../DataContext/Context'\nimport Provider from '../../DataContext/Provider/Provider'\nimport FieldPropsProvider from '../../Field/Provider'\nimport SectionContainerProvider from './containers/SectionContainerProvider'\nimport ViewContainer from './ViewContainer'\nimport EditContainer from './EditContainer'\nimport Toolbar from './Toolbar'\n\nimport type { Props as DataContextProps } from '../../DataContext/Provider'\nimport type { ContainerMode } from './containers/SectionContainer'\nimport type { Path, FieldProps, OnChange } from '../../types'\nimport type { JsonObject } from '../../utils/json-pointer'\nimport type { SharedFieldBlockProps } from '../../FieldBlock'\n\nexport type OverwritePropsDefaults = {\n [key: Path]:\n | (FieldProps & SharedFieldBlockProps)\n | OverwritePropsDefaults\n}\nexport type SectionProps<\n overwriteProps = OverwritePropsDefaults,\n Data extends JsonObject = JsonObject,\n> = {\n /**\n * Path to the section.\n * When defined, fields inside the section will get this path as a prefix of their own path.\n */\n path?: Path\n\n /**\n * Overwrite field props for the section.\n */\n overwriteProps?: overwriteProps | OverwritePropsDefaults\n\n /**\n * Makes all fields inside it required.\n */\n required?: boolean\n\n /**\n * If set to `true`, the whole section will be validated initially. All fields will then automatically get `validateInitially` and show their error messages. Can be useful in combination with `containerMode=\"auto\"`.\n */\n validateInitially?: boolean\n\n /**\n * Defines the container mode. Can be `view`, `edit` or `auto`.\n * When set to `auto`, the mode will initially be \"edit\" if fields contain errors.\n * Defaults to `auto`.\n */\n containerMode?: ContainerMode\n\n /**\n * Only for internal use and undocumented for now.\n * Prioritize error techniques for the section.\n * Can be `fieldSchema`, `sectionSchema` or `contextSchema.\n */\n errorPrioritization?: SectionContextState['errorPrioritization']\n} & Pick<\n DataContextProps<Data>,\n 'data' | 'defaultData' | 'onChange' | 'translations'\n>\n\nexport type LocalProps<overwriteProps = OverwritePropsDefaults> =\n SectionProps<overwriteProps> & {\n children: React.ReactNode\n }\n\nfunction SectionComponent<overwriteProps = OverwritePropsDefaults>(\n props: LocalProps<overwriteProps>\n) {\n const {\n path,\n overwriteProps,\n translations,\n required,\n data,\n defaultData,\n validateInitially,\n containerMode = 'auto',\n onChange,\n errorPrioritization = ['contextSchema'],\n children,\n } = props\n\n if (path && !path.startsWith?.('/')) {\n throw new Error(`path=\"${path}\" must start with a slash`)\n }\n\n const { hasContext, addOnChangeHandler } = useContext(DataContext)\n\n const { path: nestedPath, props: nestedProps } =\n useContext(SectionContext) || {}\n\n const handleChange = useCallback<OnChange>(\n (...args) => onChange?.(...args),\n [onChange]\n )\n addOnChangeHandler?.(handleChange)\n\n const identifier = useMemo(() => {\n return `${nestedPath && nestedPath !== '/' ? nestedPath : ''}${\n path || ''\n }`\n }, [path, nestedPath])\n const fieldProps = required ? { required: true } : undefined\n\n if (!hasContext) {\n return (\n <Provider data={data} defaultData={defaultData}>\n <SectionComponent {...props} />\n </Provider>\n )\n }\n\n const sectionProps = props as SectionProps\n\n return (\n <SectionContext.Provider\n value={{\n path: identifier,\n errorPrioritization,\n props: sectionProps,\n }}\n >\n <SectionContainerProvider\n validateInitially={validateInitially}\n containerMode={containerMode}\n >\n <FieldPropsProvider\n overwriteProps={{\n ...overwriteProps,\n ...(nestedProps?.overwriteProps?.[\n path.substring(1)\n ] as OverwritePropsDefaults),\n }}\n translations={translations}\n {...fieldProps}\n >\n {children}\n </FieldPropsProvider>\n </SectionContainerProvider>\n </SectionContext.Provider>\n )\n}\n\nSectionComponent.Toolbar = Toolbar\nSectionComponent.ViewContainer = ViewContainer\nSectionComponent.EditContainer = EditContainer\n\nSectionComponent._supportsSpacingProps = undefined\nexport default SectionComponent\n"],"mappings":"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"}
@@ -1 +1 @@
1
- import "./dnb-section-theme-ui.min.css";
1
+ import "./dnb-form-section-theme-ui.min.css";
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","names":[],"sources":["../../../../../../../../src/extensions/forms/Form/Section/style/themes/ui.js"],"sourcesContent":["/**\n * Imports the default theme\n *\n */\n\nimport './dnb-section-theme-ui.scss'\n"],"mappings":"AAKA,OAAO,gCAA6B"}
1
+ {"version":3,"file":"ui.js","names":[],"sources":["../../../../../../../../src/extensions/forms/Form/Section/style/themes/ui.js"],"sourcesContent":["/**\n * Imports the default theme\n *\n */\n\nimport './dnb-form-section-theme-ui.scss'\n"],"mappings":"AAKA,OAAO,qCAAkC"}
@@ -1,5 +1,5 @@
1
1
  import React, { AriaAttributes } from 'react';
2
- import { HeightAnimationProps } from '../../../../components/HeightAnimation';
2
+ import { HeightAnimationAllProps } from '../../../../components/HeightAnimation';
3
3
  import type { Path, UseFieldProps } from '../../types';
4
4
  import type { DataAttributes } from '../../hooks/useFieldProps';
5
5
  import { FilterData } from '../../DataContext';
@@ -60,18 +60,22 @@ export type Props = {
60
60
  animate?: boolean;
61
61
  /** Keep the content in the DOM, even if it's not visible */
62
62
  keepInDOM?: boolean;
63
+ /** Callback for when the content gets visible. */
64
+ onVisible?: HeightAnimationAllProps['onOpen'];
65
+ /** Callback for when animation has ended */
66
+ onAnimationEnd?: HeightAnimationAllProps['onAnimationEnd'];
63
67
  /** To compensate for CSS gap between the rows, so animation does not jump during the animation. Provide a CSS unit or `auto`. Defaults to `null`. */
64
- compensateForGap?: HeightAnimationProps['compensateForGap'];
68
+ compensateForGap?: HeightAnimationAllProps['compensateForGap'];
65
69
  /** When visibility is hidden, and `keepInDOM` is true, pass these props to the children */
66
70
  fieldPropsWhenHidden?: UseFieldProps & DataAttributes & AriaAttributes;
67
- element?: HeightAnimationProps['element'];
71
+ element?: HeightAnimationAllProps['element'];
68
72
  children: React.ReactNode;
69
73
  /** @deprecated Use `visibleWhen` instead */
70
74
  pathValue?: string;
71
75
  /** @deprecated Use `visibleWhen` instead */
72
76
  whenValue?: unknown;
73
77
  };
74
- declare function Visibility({ visible, pathDefined, pathUndefined, pathTruthy, pathFalsy, pathTrue, pathFalse, pathValue, whenValue, visibleWhen, visibleWhenNot, inferData, filterData, animate, keepInDOM, compensateForGap, fieldPropsWhenHidden, children, ...rest }: Props): import("react/jsx-runtime").JSX.Element;
78
+ declare function Visibility({ visible, pathDefined, pathUndefined, pathTruthy, pathFalsy, pathTrue, pathFalse, pathValue, whenValue, visibleWhen, visibleWhenNot, inferData, filterData, onVisible, onAnimationEnd, animate, keepInDOM, compensateForGap, fieldPropsWhenHidden, children, ...rest }: Props): import("react/jsx-runtime").JSX.Element;
75
79
  declare namespace Visibility {
76
80
  var _supportsSpacingProps: string;
77
81
  }
@@ -1,9 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
- const _excluded = ["visible", "pathDefined", "pathUndefined", "pathTruthy", "pathFalsy", "pathTrue", "pathFalse", "pathValue", "whenValue", "visibleWhen", "visibleWhenNot", "inferData", "filterData", "animate", "keepInDOM", "compensateForGap", "fieldPropsWhenHidden", "children"];
4
- import React from 'react';
3
+ const _excluded = ["visible", "pathDefined", "pathUndefined", "pathTruthy", "pathFalsy", "pathTrue", "pathFalse", "pathValue", "whenValue", "visibleWhen", "visibleWhenNot", "inferData", "filterData", "onVisible", "onAnimationEnd", "animate", "keepInDOM", "compensateForGap", "fieldPropsWhenHidden", "children"];
4
+ import React, { useCallback } from 'react';
5
5
  import { warn } from '../../../../shared/helpers';
6
6
  import useMountEffect from '../../../../shared/helpers/useMountEffect';
7
+ import useMounted from '../../../../shared/helpers/useMounted';
7
8
  import HeightAnimation from '../../../../components/HeightAnimation';
8
9
  import FieldProvider from '../../Field/Provider';
9
10
  import useVisibility from './useVisibility';
@@ -23,6 +24,8 @@ function Visibility(_ref) {
23
24
  visibleWhenNot,
24
25
  inferData,
25
26
  filterData,
27
+ onVisible,
28
+ onAnimationEnd,
26
29
  animate,
27
30
  keepInDOM,
28
31
  compensateForGap,
@@ -58,15 +61,26 @@ function Visibility(_ref) {
58
61
  isVisible: open
59
62
  }
60
63
  }, children);
64
+ const mountedRef = useMounted();
65
+ const onOpen = useCallback(state => {
66
+ if (mountedRef.current) {
67
+ onVisible === null || onVisible === void 0 ? void 0 : onVisible(state);
68
+ }
69
+ }, [mountedRef, onVisible]);
61
70
  if (animate) {
62
71
  const props = !open ? fieldPropsWhenHidden : null;
63
72
  return React.createElement(HeightAnimation, _extends({
64
73
  open: open,
74
+ onAnimationEnd: onAnimationEnd,
75
+ onOpen: onOpen,
65
76
  keepInDOM: Boolean(keepInDOM),
66
77
  className: "dnb-forms-visibility",
67
78
  compensateForGap: compensateForGap
68
79
  }, rest), React.createElement(FieldProvider, props, content));
69
80
  }
81
+ if (mountedRef.current) {
82
+ onVisible === null || onVisible === void 0 ? void 0 : onVisible(open);
83
+ }
70
84
  if (keepInDOM) {
71
85
  const props = !open ? fieldPropsWhenHidden : null;
72
86
  return React.createElement("span", {