@dnb/eufemia 10.51.2 → 10.52.1

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 (603) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/cjs/components/autocomplete/Autocomplete.js +4 -0
  3. package/cjs/components/autocomplete/Autocomplete.js.map +1 -1
  4. package/cjs/components/avatar/style/themes/dnb-avatar-theme-sbanken.css +2 -2
  5. package/cjs/components/avatar/style/themes/dnb-avatar-theme-sbanken.min.css +1 -1
  6. package/cjs/components/avatar/style/themes/dnb-avatar-theme-sbanken.scss +2 -2
  7. package/cjs/components/dialog/style/themes/dnb-dialog-theme-sbanken.css +6 -0
  8. package/cjs/components/dialog/style/themes/dnb-dialog-theme-sbanken.min.css +1 -1
  9. package/cjs/components/dialog/style/themes/dnb-dialog-theme-sbanken.scss +7 -0
  10. package/cjs/components/form-status/FormStatus.d.ts +5 -0
  11. package/cjs/components/icon/Icon.d.ts +2 -1
  12. package/cjs/components/icon/Icon.js.map +1 -1
  13. package/cjs/components/logo/Logo.js.map +1 -1
  14. package/cjs/components/number-format/NumberUtils.d.ts +14 -0
  15. package/cjs/components/number-format/NumberUtils.js +7 -8
  16. package/cjs/components/number-format/NumberUtils.js.map +1 -1
  17. package/cjs/components/skeleton/style/dnb-skeleton.css +3 -1
  18. package/cjs/components/skeleton/style/dnb-skeleton.min.css +1 -1
  19. package/cjs/components/skeleton/style/dnb-skeleton.scss +4 -2
  20. package/cjs/elements/typography/style/themes/dnb-typography-theme-sbanken.scss +21 -2
  21. package/cjs/extensions/forms/DataContext/Context.d.ts +5 -0
  22. package/cjs/extensions/forms/DataContext/Context.js.map +1 -1
  23. package/cjs/extensions/forms/DataContext/Provider/Provider.d.ts +12 -1
  24. package/cjs/extensions/forms/DataContext/Provider/Provider.js +86 -77
  25. package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  26. package/cjs/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.d.ts +6 -1
  27. package/cjs/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js +112 -23
  28. package/cjs/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
  29. package/cjs/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumberDocs.js +5 -0
  30. package/cjs/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumberDocs.js.map +1 -1
  31. package/cjs/extensions/forms/Field/OrganizationNumber/OrganizationNumber.d.ts +3 -1
  32. package/cjs/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js +28 -16
  33. package/cjs/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js.map +1 -1
  34. package/cjs/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.d.ts +2 -0
  35. package/cjs/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.js +25 -0
  36. package/cjs/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.js.map +1 -0
  37. package/cjs/extensions/forms/Field/SelectCountry/SelectCountry.js +4 -3
  38. package/cjs/extensions/forms/Field/SelectCountry/SelectCountry.js.map +1 -1
  39. package/cjs/extensions/forms/Form/Isolation/Isolation.d.ts +4 -0
  40. package/cjs/extensions/forms/Form/Isolation/Isolation.js +26 -0
  41. package/cjs/extensions/forms/Form/Isolation/Isolation.js.map +1 -1
  42. package/cjs/extensions/forms/Form/Isolation/IsolationDocs.js +5 -0
  43. package/cjs/extensions/forms/Form/Isolation/IsolationDocs.js.map +1 -1
  44. package/cjs/extensions/forms/Form/Snapshot/Snapshot.d.ts +12 -0
  45. package/cjs/extensions/forms/Form/Snapshot/Snapshot.js +45 -0
  46. package/cjs/extensions/forms/Form/Snapshot/Snapshot.js.map +1 -0
  47. package/cjs/extensions/forms/Form/Snapshot/SnapshotContext.d.ts +12 -0
  48. package/cjs/extensions/forms/Form/Snapshot/SnapshotContext.js +12 -0
  49. package/cjs/extensions/forms/Form/Snapshot/SnapshotContext.js.map +1 -0
  50. package/cjs/extensions/forms/Form/Snapshot/SnapshotDocs.d.ts +3 -0
  51. package/cjs/extensions/forms/Form/Snapshot/SnapshotDocs.js +17 -0
  52. package/cjs/extensions/forms/Form/Snapshot/SnapshotDocs.js.map +1 -0
  53. package/cjs/extensions/forms/Form/Snapshot/index.d.ts +2 -0
  54. package/cjs/extensions/forms/Form/Snapshot/index.js +27 -0
  55. package/cjs/extensions/forms/Form/Snapshot/index.js.map +1 -0
  56. package/cjs/extensions/forms/Form/SubmitConfirmation/SubmitConfirmation.js +2 -2
  57. package/cjs/extensions/forms/Form/SubmitConfirmation/SubmitConfirmation.js.map +1 -1
  58. package/cjs/extensions/forms/Form/Visibility/Visibility.d.ts +10 -2
  59. package/cjs/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  60. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.js +10 -10
  61. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  62. package/cjs/extensions/forms/Form/Visibility/useVisibility.js +26 -14
  63. package/cjs/extensions/forms/Form/Visibility/useVisibility.js.map +1 -1
  64. package/cjs/extensions/forms/Form/data-context/clearData.js +2 -5
  65. package/cjs/extensions/forms/Form/data-context/clearData.js.map +1 -1
  66. package/cjs/extensions/forms/Form/data-context/getData.js.map +1 -1
  67. package/cjs/extensions/forms/Form/data-context/useData.js +3 -2
  68. package/cjs/extensions/forms/Form/data-context/useData.js.map +1 -1
  69. package/cjs/extensions/forms/Form/data-context/useValidation.js.map +1 -1
  70. package/cjs/extensions/forms/Form/index.d.ts +2 -0
  71. package/cjs/extensions/forms/Form/index.js +14 -0
  72. package/cjs/extensions/forms/Form/index.js.map +1 -1
  73. package/cjs/extensions/forms/Iterate/Array/Array.js +3 -1
  74. package/cjs/extensions/forms/Iterate/Array/Array.js.map +1 -1
  75. package/cjs/extensions/forms/Iterate/Array/ArrayItemArea.js +30 -17
  76. package/cjs/extensions/forms/Iterate/Array/ArrayItemArea.js.map +1 -1
  77. package/cjs/extensions/forms/Iterate/EditContainer/EditContainer.js +5 -6
  78. package/cjs/extensions/forms/Iterate/EditContainer/EditContainer.js.map +1 -1
  79. package/cjs/extensions/forms/Iterate/ItemNo/ItemNo.d.ts +9 -0
  80. package/cjs/extensions/forms/Iterate/ItemNo/ItemNo.js +33 -0
  81. package/cjs/extensions/forms/Iterate/ItemNo/ItemNo.js.map +1 -0
  82. package/cjs/extensions/forms/Iterate/ItemNo/index.d.ts +2 -0
  83. package/cjs/extensions/forms/Iterate/ItemNo/index.js +27 -0
  84. package/cjs/extensions/forms/Iterate/ItemNo/index.js.map +1 -0
  85. package/cjs/extensions/forms/Iterate/IterateItemContext.d.ts +1 -0
  86. package/cjs/extensions/forms/Iterate/IterateItemContext.js.map +1 -1
  87. package/cjs/extensions/forms/Iterate/PushContainer/PushContainer.d.ts +18 -2
  88. package/cjs/extensions/forms/Iterate/PushContainer/PushContainer.js +44 -18
  89. package/cjs/extensions/forms/Iterate/PushContainer/PushContainer.js.map +1 -1
  90. package/cjs/extensions/forms/Iterate/PushContainer/PushContainerDocs.js +24 -1
  91. package/cjs/extensions/forms/Iterate/PushContainer/PushContainerDocs.js.map +1 -1
  92. package/cjs/extensions/forms/Iterate/ViewContainer/ViewContainer.js +5 -6
  93. package/cjs/extensions/forms/Iterate/ViewContainer/ViewContainer.js.map +1 -1
  94. package/cjs/extensions/forms/Iterate/index.d.ts +1 -0
  95. package/cjs/extensions/forms/Iterate/index.js +7 -0
  96. package/cjs/extensions/forms/Iterate/index.js.map +1 -1
  97. package/cjs/extensions/forms/Tools/Log.d.ts +7 -2
  98. package/cjs/extensions/forms/Tools/Log.js +36 -4
  99. package/cjs/extensions/forms/Tools/Log.js.map +1 -1
  100. package/cjs/extensions/forms/Value/Provider/useValueProvider.d.ts +1 -0
  101. package/cjs/extensions/forms/Value/SummaryList/SummaryList.d.ts +4 -2
  102. package/cjs/extensions/forms/Value/SummaryList/SummaryList.js +3 -1
  103. package/cjs/extensions/forms/Value/SummaryList/SummaryList.js.map +1 -1
  104. package/cjs/extensions/forms/Value/SummaryList/SummaryListDocs.js +5 -0
  105. package/cjs/extensions/forms/Value/SummaryList/SummaryListDocs.js.map +1 -1
  106. package/cjs/extensions/forms/Value/ValueDocs.js +5 -0
  107. package/cjs/extensions/forms/Value/ValueDocs.js.map +1 -1
  108. package/cjs/extensions/forms/Wizard/Buttons/Buttons.js +2 -2
  109. package/cjs/extensions/forms/Wizard/Buttons/Buttons.js.map +1 -1
  110. package/cjs/extensions/forms/Wizard/Container/WizardContainer.js +78 -31
  111. package/cjs/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  112. package/cjs/extensions/forms/Wizard/Container/WizardContainerDocs.js +1 -1
  113. package/cjs/extensions/forms/Wizard/Container/WizardContainerDocs.js.map +1 -1
  114. package/cjs/extensions/forms/Wizard/Container/useHandleLayoutEffect.d.ts +1 -2
  115. package/cjs/extensions/forms/Wizard/Container/useHandleLayoutEffect.js +0 -7
  116. package/cjs/extensions/forms/Wizard/Container/useHandleLayoutEffect.js.map +1 -1
  117. package/cjs/extensions/forms/Wizard/Container/useStepAnimation.d.ts +2 -1
  118. package/cjs/extensions/forms/Wizard/Container/useStepAnimation.js +11 -6
  119. package/cjs/extensions/forms/Wizard/Container/useStepAnimation.js.map +1 -1
  120. package/cjs/extensions/forms/Wizard/Context/WizardContext.d.ts +14 -3
  121. package/cjs/extensions/forms/Wizard/Context/WizardContext.js.map +1 -1
  122. package/cjs/extensions/forms/Wizard/Step/Step.js +4 -4
  123. package/cjs/extensions/forms/Wizard/Step/Step.js.map +1 -1
  124. package/cjs/extensions/forms/Wizard/hooks/useStep.js +4 -4
  125. package/cjs/extensions/forms/Wizard/hooks/useStep.js.map +1 -1
  126. package/cjs/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAge.js +77 -58
  127. package/cjs/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAge.js.map +1 -1
  128. package/cjs/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.d.ts +12 -12
  129. package/cjs/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.js +24 -24
  130. package/cjs/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.js.map +1 -1
  131. package/cjs/extensions/forms/constants/locales/en-GB.d.ts +6 -1
  132. package/cjs/extensions/forms/constants/locales/en-GB.js +9 -4
  133. package/cjs/extensions/forms/constants/locales/en-GB.js.map +1 -1
  134. package/cjs/extensions/forms/constants/locales/en-US.d.ts +6 -1
  135. package/cjs/extensions/forms/constants/locales/en-US.js +2 -1
  136. package/cjs/extensions/forms/constants/locales/en-US.js.map +1 -1
  137. package/cjs/extensions/forms/constants/locales/index.d.ts +12 -2
  138. package/cjs/extensions/forms/constants/locales/nb-NO.d.ts +6 -1
  139. package/cjs/extensions/forms/constants/locales/nb-NO.js +9 -4
  140. package/cjs/extensions/forms/constants/locales/nb-NO.js.map +1 -1
  141. package/cjs/extensions/forms/hooks/useDataContext.d.ts +6 -0
  142. package/cjs/extensions/forms/hooks/useDataContext.js +31 -0
  143. package/cjs/extensions/forms/hooks/useDataContext.js.map +1 -0
  144. package/cjs/extensions/forms/hooks/useExternalValue.js +12 -6
  145. package/cjs/extensions/forms/hooks/useExternalValue.js.map +1 -1
  146. package/cjs/extensions/forms/hooks/useFieldProps.js +82 -43
  147. package/cjs/extensions/forms/hooks/useFieldProps.js.map +1 -1
  148. package/cjs/extensions/forms/hooks/useSnapshot.d.ts +9 -0
  149. package/cjs/extensions/forms/hooks/useSnapshot.js +87 -0
  150. package/cjs/extensions/forms/hooks/useSnapshot.js.map +1 -0
  151. package/cjs/extensions/forms/hooks/useValueProps.js +6 -1
  152. package/cjs/extensions/forms/hooks/useValueProps.js.map +1 -1
  153. package/cjs/extensions/forms/types.d.ts +4 -0
  154. package/cjs/extensions/forms/types.js.map +1 -1
  155. package/cjs/extensions/payment-card/style/dnb-payment-card.css +3 -2
  156. package/cjs/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
  157. package/cjs/shared/Eufemia.d.ts +1 -1
  158. package/cjs/shared/Eufemia.js +2 -2
  159. package/cjs/shared/Eufemia.js.map +1 -1
  160. package/cjs/shared/component-helper.js +1 -1
  161. package/cjs/shared/component-helper.js.map +1 -1
  162. package/cjs/style/core/scopes.scss +1 -1
  163. package/cjs/style/dnb-ui-basis.css +1 -1
  164. package/cjs/style/dnb-ui-basis.min.css +1 -1
  165. package/cjs/style/dnb-ui-body.css +1 -1
  166. package/cjs/style/dnb-ui-body.min.css +1 -1
  167. package/cjs/style/dnb-ui-components.css +3 -1
  168. package/cjs/style/dnb-ui-components.min.css +1 -1
  169. package/cjs/style/dnb-ui-core.css +1 -1
  170. package/cjs/style/dnb-ui-core.min.css +1 -1
  171. package/cjs/style/dnb-ui-extensions.css +3 -2
  172. package/cjs/style/dnb-ui-extensions.min.css +1 -1
  173. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +3 -1
  174. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
  175. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -2
  176. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  177. package/cjs/style/themes/theme-eiendom/properties.d.ts +1 -0
  178. package/cjs/style/themes/theme-eiendom/properties.js +3 -2
  179. package/cjs/style/themes/theme-eiendom/properties.js.map +1 -1
  180. package/cjs/style/themes/theme-sbanken/properties.d.ts +1 -0
  181. package/cjs/style/themes/theme-sbanken/properties.js +3 -2
  182. package/cjs/style/themes/theme-sbanken/properties.js.map +1 -1
  183. package/cjs/style/themes/theme-sbanken/properties.scss +9 -8
  184. package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.css +20 -4
  185. package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.min.css +3 -1
  186. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +11 -3
  187. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
  188. package/cjs/style/themes/theme-sbanken/sbanken-theme-elements.css +17 -2
  189. package/cjs/style/themes/theme-sbanken/sbanken-theme-elements.min.css +3 -1
  190. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -2
  191. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  192. package/cjs/style/themes/theme-ui/properties.d.ts +1 -0
  193. package/cjs/style/themes/theme-ui/properties.js +3 -2
  194. package/cjs/style/themes/theme-ui/properties.js.map +1 -1
  195. package/cjs/style/themes/theme-ui/ui-theme-components.css +3 -1
  196. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +1 -1
  197. package/cjs/style/themes/theme-ui/ui-theme-extensions.css +3 -2
  198. package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  199. package/components/autocomplete/Autocomplete.js +4 -0
  200. package/components/autocomplete/Autocomplete.js.map +1 -1
  201. package/components/avatar/style/themes/dnb-avatar-theme-sbanken.css +2 -2
  202. package/components/avatar/style/themes/dnb-avatar-theme-sbanken.min.css +1 -1
  203. package/components/avatar/style/themes/dnb-avatar-theme-sbanken.scss +2 -2
  204. package/components/dialog/style/themes/dnb-dialog-theme-sbanken.css +6 -0
  205. package/components/dialog/style/themes/dnb-dialog-theme-sbanken.min.css +1 -1
  206. package/components/dialog/style/themes/dnb-dialog-theme-sbanken.scss +7 -0
  207. package/components/form-status/FormStatus.d.ts +5 -0
  208. package/components/icon/Icon.d.ts +2 -1
  209. package/components/icon/Icon.js.map +1 -1
  210. package/components/logo/Logo.js.map +1 -1
  211. package/components/number-format/NumberUtils.d.ts +14 -0
  212. package/components/number-format/NumberUtils.js +7 -8
  213. package/components/number-format/NumberUtils.js.map +1 -1
  214. package/components/skeleton/style/dnb-skeleton.css +3 -1
  215. package/components/skeleton/style/dnb-skeleton.min.css +1 -1
  216. package/components/skeleton/style/dnb-skeleton.scss +4 -2
  217. package/elements/typography/style/themes/dnb-typography-theme-sbanken.scss +21 -2
  218. package/es/components/autocomplete/Autocomplete.js +4 -0
  219. package/es/components/autocomplete/Autocomplete.js.map +1 -1
  220. package/es/components/avatar/style/themes/dnb-avatar-theme-sbanken.css +2 -2
  221. package/es/components/avatar/style/themes/dnb-avatar-theme-sbanken.min.css +1 -1
  222. package/es/components/avatar/style/themes/dnb-avatar-theme-sbanken.scss +2 -2
  223. package/es/components/dialog/style/themes/dnb-dialog-theme-sbanken.css +6 -0
  224. package/es/components/dialog/style/themes/dnb-dialog-theme-sbanken.min.css +1 -1
  225. package/es/components/dialog/style/themes/dnb-dialog-theme-sbanken.scss +7 -0
  226. package/es/components/form-status/FormStatus.d.ts +5 -0
  227. package/es/components/icon/Icon.d.ts +2 -1
  228. package/es/components/icon/Icon.js.map +1 -1
  229. package/es/components/logo/Logo.js.map +1 -1
  230. package/es/components/number-format/NumberUtils.d.ts +14 -0
  231. package/es/components/number-format/NumberUtils.js +7 -8
  232. package/es/components/number-format/NumberUtils.js.map +1 -1
  233. package/es/components/skeleton/style/dnb-skeleton.css +3 -1
  234. package/es/components/skeleton/style/dnb-skeleton.min.css +1 -1
  235. package/es/components/skeleton/style/dnb-skeleton.scss +4 -2
  236. package/es/elements/typography/style/themes/dnb-typography-theme-sbanken.scss +21 -2
  237. package/es/extensions/forms/DataContext/Context.d.ts +5 -0
  238. package/es/extensions/forms/DataContext/Context.js.map +1 -1
  239. package/es/extensions/forms/DataContext/Provider/Provider.d.ts +12 -1
  240. package/es/extensions/forms/DataContext/Provider/Provider.js +84 -75
  241. package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  242. package/es/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.d.ts +6 -1
  243. package/es/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js +109 -23
  244. package/es/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
  245. package/es/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumberDocs.js +5 -0
  246. package/es/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumberDocs.js.map +1 -1
  247. package/es/extensions/forms/Field/OrganizationNumber/OrganizationNumber.d.ts +3 -1
  248. package/es/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js +28 -16
  249. package/es/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js.map +1 -1
  250. package/es/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.d.ts +2 -0
  251. package/es/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.js +18 -0
  252. package/es/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.js.map +1 -0
  253. package/es/extensions/forms/Field/SelectCountry/SelectCountry.js +4 -3
  254. package/es/extensions/forms/Field/SelectCountry/SelectCountry.js.map +1 -1
  255. package/es/extensions/forms/Form/Isolation/Isolation.d.ts +4 -0
  256. package/es/extensions/forms/Form/Isolation/Isolation.js +28 -3
  257. package/es/extensions/forms/Form/Isolation/Isolation.js.map +1 -1
  258. package/es/extensions/forms/Form/Isolation/IsolationDocs.js +5 -0
  259. package/es/extensions/forms/Form/Isolation/IsolationDocs.js.map +1 -1
  260. package/es/extensions/forms/Form/Snapshot/Snapshot.d.ts +12 -0
  261. package/es/extensions/forms/Form/Snapshot/Snapshot.js +36 -0
  262. package/es/extensions/forms/Form/Snapshot/Snapshot.js.map +1 -0
  263. package/es/extensions/forms/Form/Snapshot/SnapshotContext.d.ts +12 -0
  264. package/es/extensions/forms/Form/Snapshot/SnapshotContext.js +6 -0
  265. package/es/extensions/forms/Form/Snapshot/SnapshotContext.js.map +1 -0
  266. package/es/extensions/forms/Form/Snapshot/SnapshotDocs.d.ts +3 -0
  267. package/es/extensions/forms/Form/Snapshot/SnapshotDocs.js +9 -0
  268. package/es/extensions/forms/Form/Snapshot/SnapshotDocs.js.map +1 -0
  269. package/es/extensions/forms/Form/Snapshot/index.d.ts +2 -0
  270. package/es/extensions/forms/Form/Snapshot/index.js +3 -0
  271. package/es/extensions/forms/Form/Snapshot/index.js.map +1 -0
  272. package/es/extensions/forms/Form/SubmitConfirmation/SubmitConfirmation.js +2 -2
  273. package/es/extensions/forms/Form/SubmitConfirmation/SubmitConfirmation.js.map +1 -1
  274. package/es/extensions/forms/Form/Visibility/Visibility.d.ts +10 -2
  275. package/es/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  276. package/es/extensions/forms/Form/Visibility/VisibilityDocs.js +10 -10
  277. package/es/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  278. package/es/extensions/forms/Form/Visibility/useVisibility.js +26 -14
  279. package/es/extensions/forms/Form/Visibility/useVisibility.js.map +1 -1
  280. package/es/extensions/forms/Form/data-context/clearData.js +2 -5
  281. package/es/extensions/forms/Form/data-context/clearData.js.map +1 -1
  282. package/es/extensions/forms/Form/data-context/getData.js.map +1 -1
  283. package/es/extensions/forms/Form/data-context/useData.js +1 -0
  284. package/es/extensions/forms/Form/data-context/useData.js.map +1 -1
  285. package/es/extensions/forms/Form/data-context/useValidation.js.map +1 -1
  286. package/es/extensions/forms/Form/index.d.ts +2 -0
  287. package/es/extensions/forms/Form/index.js +2 -0
  288. package/es/extensions/forms/Form/index.js.map +1 -1
  289. package/es/extensions/forms/Iterate/Array/Array.js +3 -1
  290. package/es/extensions/forms/Iterate/Array/Array.js.map +1 -1
  291. package/es/extensions/forms/Iterate/Array/ArrayItemArea.js +31 -18
  292. package/es/extensions/forms/Iterate/Array/ArrayItemArea.js.map +1 -1
  293. package/es/extensions/forms/Iterate/EditContainer/EditContainer.js +5 -6
  294. package/es/extensions/forms/Iterate/EditContainer/EditContainer.js.map +1 -1
  295. package/es/extensions/forms/Iterate/ItemNo/ItemNo.d.ts +9 -0
  296. package/es/extensions/forms/Iterate/ItemNo/ItemNo.js +22 -0
  297. package/es/extensions/forms/Iterate/ItemNo/ItemNo.js.map +1 -0
  298. package/es/extensions/forms/Iterate/ItemNo/index.d.ts +2 -0
  299. package/es/extensions/forms/Iterate/ItemNo/index.js +3 -0
  300. package/es/extensions/forms/Iterate/ItemNo/index.js.map +1 -0
  301. package/es/extensions/forms/Iterate/IterateItemContext.d.ts +1 -0
  302. package/es/extensions/forms/Iterate/IterateItemContext.js.map +1 -1
  303. package/es/extensions/forms/Iterate/PushContainer/PushContainer.d.ts +18 -2
  304. package/es/extensions/forms/Iterate/PushContainer/PushContainer.js +43 -16
  305. package/es/extensions/forms/Iterate/PushContainer/PushContainer.js.map +1 -1
  306. package/es/extensions/forms/Iterate/PushContainer/PushContainerDocs.js +24 -1
  307. package/es/extensions/forms/Iterate/PushContainer/PushContainerDocs.js.map +1 -1
  308. package/es/extensions/forms/Iterate/ViewContainer/ViewContainer.js +5 -6
  309. package/es/extensions/forms/Iterate/ViewContainer/ViewContainer.js.map +1 -1
  310. package/es/extensions/forms/Iterate/index.d.ts +1 -0
  311. package/es/extensions/forms/Iterate/index.js +1 -0
  312. package/es/extensions/forms/Iterate/index.js.map +1 -1
  313. package/es/extensions/forms/Tools/Log.d.ts +7 -2
  314. package/es/extensions/forms/Tools/Log.js +26 -3
  315. package/es/extensions/forms/Tools/Log.js.map +1 -1
  316. package/es/extensions/forms/Value/Provider/useValueProvider.d.ts +1 -0
  317. package/es/extensions/forms/Value/SummaryList/SummaryList.d.ts +4 -2
  318. package/es/extensions/forms/Value/SummaryList/SummaryList.js +3 -1
  319. package/es/extensions/forms/Value/SummaryList/SummaryList.js.map +1 -1
  320. package/es/extensions/forms/Value/SummaryList/SummaryListDocs.js +5 -0
  321. package/es/extensions/forms/Value/SummaryList/SummaryListDocs.js.map +1 -1
  322. package/es/extensions/forms/Value/ValueDocs.js +5 -0
  323. package/es/extensions/forms/Value/ValueDocs.js.map +1 -1
  324. package/es/extensions/forms/Wizard/Buttons/Buttons.js +2 -2
  325. package/es/extensions/forms/Wizard/Buttons/Buttons.js.map +1 -1
  326. package/es/extensions/forms/Wizard/Container/WizardContainer.js +67 -23
  327. package/es/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  328. package/es/extensions/forms/Wizard/Container/WizardContainerDocs.js +1 -1
  329. package/es/extensions/forms/Wizard/Container/WizardContainerDocs.js.map +1 -1
  330. package/es/extensions/forms/Wizard/Container/useHandleLayoutEffect.d.ts +1 -2
  331. package/es/extensions/forms/Wizard/Container/useHandleLayoutEffect.js +0 -6
  332. package/es/extensions/forms/Wizard/Container/useHandleLayoutEffect.js.map +1 -1
  333. package/es/extensions/forms/Wizard/Container/useStepAnimation.d.ts +2 -1
  334. package/es/extensions/forms/Wizard/Container/useStepAnimation.js +12 -7
  335. package/es/extensions/forms/Wizard/Container/useStepAnimation.js.map +1 -1
  336. package/es/extensions/forms/Wizard/Context/WizardContext.d.ts +14 -3
  337. package/es/extensions/forms/Wizard/Context/WizardContext.js.map +1 -1
  338. package/es/extensions/forms/Wizard/Step/Step.js +4 -4
  339. package/es/extensions/forms/Wizard/Step/Step.js.map +1 -1
  340. package/es/extensions/forms/Wizard/hooks/useStep.js +4 -4
  341. package/es/extensions/forms/Wizard/hooks/useStep.js.map +1 -1
  342. package/es/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAge.js +77 -58
  343. package/es/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAge.js.map +1 -1
  344. package/es/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.d.ts +12 -12
  345. package/es/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.js +24 -24
  346. package/es/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.js.map +1 -1
  347. package/es/extensions/forms/constants/locales/en-GB.d.ts +6 -1
  348. package/es/extensions/forms/constants/locales/en-GB.js +9 -4
  349. package/es/extensions/forms/constants/locales/en-GB.js.map +1 -1
  350. package/es/extensions/forms/constants/locales/en-US.d.ts +6 -1
  351. package/es/extensions/forms/constants/locales/en-US.js +2 -1
  352. package/es/extensions/forms/constants/locales/en-US.js.map +1 -1
  353. package/es/extensions/forms/constants/locales/index.d.ts +12 -2
  354. package/es/extensions/forms/constants/locales/nb-NO.d.ts +6 -1
  355. package/es/extensions/forms/constants/locales/nb-NO.js +9 -4
  356. package/es/extensions/forms/constants/locales/nb-NO.js.map +1 -1
  357. package/es/extensions/forms/hooks/useDataContext.d.ts +6 -0
  358. package/es/extensions/forms/hooks/useDataContext.js +24 -0
  359. package/es/extensions/forms/hooks/useDataContext.js.map +1 -0
  360. package/es/extensions/forms/hooks/useExternalValue.js +12 -6
  361. package/es/extensions/forms/hooks/useExternalValue.js.map +1 -1
  362. package/es/extensions/forms/hooks/useFieldProps.js +83 -44
  363. package/es/extensions/forms/hooks/useFieldProps.js.map +1 -1
  364. package/es/extensions/forms/hooks/useSnapshot.d.ts +9 -0
  365. package/es/extensions/forms/hooks/useSnapshot.js +73 -0
  366. package/es/extensions/forms/hooks/useSnapshot.js.map +1 -0
  367. package/es/extensions/forms/hooks/useValueProps.js +6 -1
  368. package/es/extensions/forms/hooks/useValueProps.js.map +1 -1
  369. package/es/extensions/forms/types.d.ts +4 -0
  370. package/es/extensions/forms/types.js.map +1 -1
  371. package/es/extensions/payment-card/style/dnb-payment-card.css +3 -2
  372. package/es/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
  373. package/es/shared/Eufemia.d.ts +1 -1
  374. package/es/shared/Eufemia.js +2 -2
  375. package/es/shared/Eufemia.js.map +1 -1
  376. package/es/shared/component-helper.js +1 -1
  377. package/es/shared/component-helper.js.map +1 -1
  378. package/es/style/core/scopes.scss +1 -1
  379. package/es/style/dnb-ui-basis.css +1 -1
  380. package/es/style/dnb-ui-basis.min.css +1 -1
  381. package/es/style/dnb-ui-body.css +1 -1
  382. package/es/style/dnb-ui-body.min.css +1 -1
  383. package/es/style/dnb-ui-components.css +3 -1
  384. package/es/style/dnb-ui-components.min.css +1 -1
  385. package/es/style/dnb-ui-core.css +1 -1
  386. package/es/style/dnb-ui-core.min.css +1 -1
  387. package/es/style/dnb-ui-extensions.css +3 -2
  388. package/es/style/dnb-ui-extensions.min.css +1 -1
  389. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +3 -1
  390. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
  391. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -2
  392. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  393. package/es/style/themes/theme-eiendom/properties.d.ts +1 -0
  394. package/es/style/themes/theme-eiendom/properties.js +3 -2
  395. package/es/style/themes/theme-eiendom/properties.js.map +1 -1
  396. package/es/style/themes/theme-sbanken/properties.d.ts +1 -0
  397. package/es/style/themes/theme-sbanken/properties.js +3 -2
  398. package/es/style/themes/theme-sbanken/properties.js.map +1 -1
  399. package/es/style/themes/theme-sbanken/properties.scss +9 -8
  400. package/es/style/themes/theme-sbanken/sbanken-theme-basis.css +20 -4
  401. package/es/style/themes/theme-sbanken/sbanken-theme-basis.min.css +3 -1
  402. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +11 -3
  403. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
  404. package/es/style/themes/theme-sbanken/sbanken-theme-elements.css +17 -2
  405. package/es/style/themes/theme-sbanken/sbanken-theme-elements.min.css +3 -1
  406. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -2
  407. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  408. package/es/style/themes/theme-ui/properties.d.ts +1 -0
  409. package/es/style/themes/theme-ui/properties.js +3 -2
  410. package/es/style/themes/theme-ui/properties.js.map +1 -1
  411. package/es/style/themes/theme-ui/ui-theme-components.css +3 -1
  412. package/es/style/themes/theme-ui/ui-theme-components.min.css +1 -1
  413. package/es/style/themes/theme-ui/ui-theme-extensions.css +3 -2
  414. package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  415. package/esm/dnb-ui-basis.min.mjs +1 -1
  416. package/esm/dnb-ui-components.min.mjs +1 -1
  417. package/esm/dnb-ui-elements.min.mjs +1 -1
  418. package/esm/dnb-ui-extensions.min.mjs +2 -2
  419. package/esm/dnb-ui-lib.min.mjs +1 -1
  420. package/extensions/forms/DataContext/Context.d.ts +5 -0
  421. package/extensions/forms/DataContext/Context.js.map +1 -1
  422. package/extensions/forms/DataContext/Provider/Provider.d.ts +12 -1
  423. package/extensions/forms/DataContext/Provider/Provider.js +86 -77
  424. package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  425. package/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.d.ts +6 -1
  426. package/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js +109 -23
  427. package/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
  428. package/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumberDocs.js +5 -0
  429. package/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumberDocs.js.map +1 -1
  430. package/extensions/forms/Field/OrganizationNumber/OrganizationNumber.d.ts +3 -1
  431. package/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js +28 -16
  432. package/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js.map +1 -1
  433. package/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.d.ts +2 -0
  434. package/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.js +18 -0
  435. package/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.js.map +1 -0
  436. package/extensions/forms/Field/SelectCountry/SelectCountry.js +4 -3
  437. package/extensions/forms/Field/SelectCountry/SelectCountry.js.map +1 -1
  438. package/extensions/forms/Form/Isolation/Isolation.d.ts +4 -0
  439. package/extensions/forms/Form/Isolation/Isolation.js +29 -3
  440. package/extensions/forms/Form/Isolation/Isolation.js.map +1 -1
  441. package/extensions/forms/Form/Isolation/IsolationDocs.js +5 -0
  442. package/extensions/forms/Form/Isolation/IsolationDocs.js.map +1 -1
  443. package/extensions/forms/Form/Snapshot/Snapshot.d.ts +12 -0
  444. package/extensions/forms/Form/Snapshot/Snapshot.js +36 -0
  445. package/extensions/forms/Form/Snapshot/Snapshot.js.map +1 -0
  446. package/extensions/forms/Form/Snapshot/SnapshotContext.d.ts +12 -0
  447. package/extensions/forms/Form/Snapshot/SnapshotContext.js +6 -0
  448. package/extensions/forms/Form/Snapshot/SnapshotContext.js.map +1 -0
  449. package/extensions/forms/Form/Snapshot/SnapshotDocs.d.ts +3 -0
  450. package/extensions/forms/Form/Snapshot/SnapshotDocs.js +9 -0
  451. package/extensions/forms/Form/Snapshot/SnapshotDocs.js.map +1 -0
  452. package/extensions/forms/Form/Snapshot/index.d.ts +2 -0
  453. package/extensions/forms/Form/Snapshot/index.js +3 -0
  454. package/extensions/forms/Form/Snapshot/index.js.map +1 -0
  455. package/extensions/forms/Form/SubmitConfirmation/SubmitConfirmation.js +2 -2
  456. package/extensions/forms/Form/SubmitConfirmation/SubmitConfirmation.js.map +1 -1
  457. package/extensions/forms/Form/Visibility/Visibility.d.ts +10 -2
  458. package/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  459. package/extensions/forms/Form/Visibility/VisibilityDocs.js +10 -10
  460. package/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  461. package/extensions/forms/Form/Visibility/useVisibility.js +26 -14
  462. package/extensions/forms/Form/Visibility/useVisibility.js.map +1 -1
  463. package/extensions/forms/Form/data-context/clearData.js +2 -5
  464. package/extensions/forms/Form/data-context/clearData.js.map +1 -1
  465. package/extensions/forms/Form/data-context/getData.js.map +1 -1
  466. package/extensions/forms/Form/data-context/useData.js +1 -0
  467. package/extensions/forms/Form/data-context/useData.js.map +1 -1
  468. package/extensions/forms/Form/data-context/useValidation.js.map +1 -1
  469. package/extensions/forms/Form/index.d.ts +2 -0
  470. package/extensions/forms/Form/index.js +2 -0
  471. package/extensions/forms/Form/index.js.map +1 -1
  472. package/extensions/forms/Iterate/Array/Array.js +3 -1
  473. package/extensions/forms/Iterate/Array/Array.js.map +1 -1
  474. package/extensions/forms/Iterate/Array/ArrayItemArea.js +31 -18
  475. package/extensions/forms/Iterate/Array/ArrayItemArea.js.map +1 -1
  476. package/extensions/forms/Iterate/EditContainer/EditContainer.js +5 -6
  477. package/extensions/forms/Iterate/EditContainer/EditContainer.js.map +1 -1
  478. package/extensions/forms/Iterate/ItemNo/ItemNo.d.ts +9 -0
  479. package/extensions/forms/Iterate/ItemNo/ItemNo.js +23 -0
  480. package/extensions/forms/Iterate/ItemNo/ItemNo.js.map +1 -0
  481. package/extensions/forms/Iterate/ItemNo/index.d.ts +2 -0
  482. package/extensions/forms/Iterate/ItemNo/index.js +3 -0
  483. package/extensions/forms/Iterate/ItemNo/index.js.map +1 -0
  484. package/extensions/forms/Iterate/IterateItemContext.d.ts +1 -0
  485. package/extensions/forms/Iterate/IterateItemContext.js.map +1 -1
  486. package/extensions/forms/Iterate/PushContainer/PushContainer.d.ts +18 -2
  487. package/extensions/forms/Iterate/PushContainer/PushContainer.js +44 -18
  488. package/extensions/forms/Iterate/PushContainer/PushContainer.js.map +1 -1
  489. package/extensions/forms/Iterate/PushContainer/PushContainerDocs.js +24 -1
  490. package/extensions/forms/Iterate/PushContainer/PushContainerDocs.js.map +1 -1
  491. package/extensions/forms/Iterate/ViewContainer/ViewContainer.js +5 -6
  492. package/extensions/forms/Iterate/ViewContainer/ViewContainer.js.map +1 -1
  493. package/extensions/forms/Iterate/index.d.ts +1 -0
  494. package/extensions/forms/Iterate/index.js +1 -0
  495. package/extensions/forms/Iterate/index.js.map +1 -1
  496. package/extensions/forms/Tools/Log.d.ts +7 -2
  497. package/extensions/forms/Tools/Log.js +30 -3
  498. package/extensions/forms/Tools/Log.js.map +1 -1
  499. package/extensions/forms/Value/Provider/useValueProvider.d.ts +1 -0
  500. package/extensions/forms/Value/SummaryList/SummaryList.d.ts +4 -2
  501. package/extensions/forms/Value/SummaryList/SummaryList.js +3 -1
  502. package/extensions/forms/Value/SummaryList/SummaryList.js.map +1 -1
  503. package/extensions/forms/Value/SummaryList/SummaryListDocs.js +5 -0
  504. package/extensions/forms/Value/SummaryList/SummaryListDocs.js.map +1 -1
  505. package/extensions/forms/Value/ValueDocs.js +5 -0
  506. package/extensions/forms/Value/ValueDocs.js.map +1 -1
  507. package/extensions/forms/Wizard/Buttons/Buttons.js +2 -2
  508. package/extensions/forms/Wizard/Buttons/Buttons.js.map +1 -1
  509. package/extensions/forms/Wizard/Container/WizardContainer.js +78 -31
  510. package/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  511. package/extensions/forms/Wizard/Container/WizardContainerDocs.js +1 -1
  512. package/extensions/forms/Wizard/Container/WizardContainerDocs.js.map +1 -1
  513. package/extensions/forms/Wizard/Container/useHandleLayoutEffect.d.ts +1 -2
  514. package/extensions/forms/Wizard/Container/useHandleLayoutEffect.js +0 -6
  515. package/extensions/forms/Wizard/Container/useHandleLayoutEffect.js.map +1 -1
  516. package/extensions/forms/Wizard/Container/useStepAnimation.d.ts +2 -1
  517. package/extensions/forms/Wizard/Container/useStepAnimation.js +12 -7
  518. package/extensions/forms/Wizard/Container/useStepAnimation.js.map +1 -1
  519. package/extensions/forms/Wizard/Context/WizardContext.d.ts +14 -3
  520. package/extensions/forms/Wizard/Context/WizardContext.js.map +1 -1
  521. package/extensions/forms/Wizard/Step/Step.js +4 -4
  522. package/extensions/forms/Wizard/Step/Step.js.map +1 -1
  523. package/extensions/forms/Wizard/hooks/useStep.js +4 -4
  524. package/extensions/forms/Wizard/hooks/useStep.js.map +1 -1
  525. package/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAge.js +77 -58
  526. package/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAge.js.map +1 -1
  527. package/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.d.ts +12 -12
  528. package/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.js +24 -24
  529. package/extensions/forms/blocks/ChildrenWithAge/ChildrenWithAgeTranslations.js.map +1 -1
  530. package/extensions/forms/constants/locales/en-GB.d.ts +6 -1
  531. package/extensions/forms/constants/locales/en-GB.js +9 -4
  532. package/extensions/forms/constants/locales/en-GB.js.map +1 -1
  533. package/extensions/forms/constants/locales/en-US.d.ts +6 -1
  534. package/extensions/forms/constants/locales/en-US.js +2 -1
  535. package/extensions/forms/constants/locales/en-US.js.map +1 -1
  536. package/extensions/forms/constants/locales/index.d.ts +12 -2
  537. package/extensions/forms/constants/locales/nb-NO.d.ts +6 -1
  538. package/extensions/forms/constants/locales/nb-NO.js +9 -4
  539. package/extensions/forms/constants/locales/nb-NO.js.map +1 -1
  540. package/extensions/forms/hooks/useDataContext.d.ts +6 -0
  541. package/extensions/forms/hooks/useDataContext.js +25 -0
  542. package/extensions/forms/hooks/useDataContext.js.map +1 -0
  543. package/extensions/forms/hooks/useExternalValue.js +12 -6
  544. package/extensions/forms/hooks/useExternalValue.js.map +1 -1
  545. package/extensions/forms/hooks/useFieldProps.js +83 -44
  546. package/extensions/forms/hooks/useFieldProps.js.map +1 -1
  547. package/extensions/forms/hooks/useSnapshot.d.ts +9 -0
  548. package/extensions/forms/hooks/useSnapshot.js +81 -0
  549. package/extensions/forms/hooks/useSnapshot.js.map +1 -0
  550. package/extensions/forms/hooks/useValueProps.js +6 -1
  551. package/extensions/forms/hooks/useValueProps.js.map +1 -1
  552. package/extensions/forms/types.d.ts +4 -0
  553. package/extensions/forms/types.js.map +1 -1
  554. package/extensions/payment-card/style/dnb-payment-card.css +3 -2
  555. package/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
  556. package/package.json +1 -1
  557. package/shared/Eufemia.d.ts +1 -1
  558. package/shared/Eufemia.js +2 -2
  559. package/shared/Eufemia.js.map +1 -1
  560. package/shared/component-helper.js +1 -1
  561. package/shared/component-helper.js.map +1 -1
  562. package/style/core/scopes.scss +1 -1
  563. package/style/dnb-ui-basis.css +1 -1
  564. package/style/dnb-ui-basis.min.css +1 -1
  565. package/style/dnb-ui-body.css +1 -1
  566. package/style/dnb-ui-body.min.css +1 -1
  567. package/style/dnb-ui-components.css +3 -1
  568. package/style/dnb-ui-components.min.css +1 -1
  569. package/style/dnb-ui-core.css +1 -1
  570. package/style/dnb-ui-core.min.css +1 -1
  571. package/style/dnb-ui-extensions.css +3 -2
  572. package/style/dnb-ui-extensions.min.css +1 -1
  573. package/style/themes/theme-eiendom/eiendom-theme-components.css +3 -1
  574. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
  575. package/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -2
  576. package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  577. package/style/themes/theme-eiendom/properties.d.ts +1 -0
  578. package/style/themes/theme-eiendom/properties.js +3 -2
  579. package/style/themes/theme-eiendom/properties.js.map +1 -1
  580. package/style/themes/theme-sbanken/properties.d.ts +1 -0
  581. package/style/themes/theme-sbanken/properties.js +3 -2
  582. package/style/themes/theme-sbanken/properties.js.map +1 -1
  583. package/style/themes/theme-sbanken/properties.scss +9 -8
  584. package/style/themes/theme-sbanken/sbanken-theme-basis.css +20 -4
  585. package/style/themes/theme-sbanken/sbanken-theme-basis.min.css +3 -1
  586. package/style/themes/theme-sbanken/sbanken-theme-components.css +11 -3
  587. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
  588. package/style/themes/theme-sbanken/sbanken-theme-elements.css +17 -2
  589. package/style/themes/theme-sbanken/sbanken-theme-elements.min.css +3 -1
  590. package/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -2
  591. package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  592. package/style/themes/theme-ui/properties.d.ts +1 -0
  593. package/style/themes/theme-ui/properties.js +3 -2
  594. package/style/themes/theme-ui/properties.js.map +1 -1
  595. package/style/themes/theme-ui/ui-theme-components.css +3 -1
  596. package/style/themes/theme-ui/ui-theme-components.min.css +1 -1
  597. package/style/themes/theme-ui/ui-theme-extensions.css +3 -2
  598. package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  599. package/umd/dnb-ui-basis.min.js +1 -1
  600. package/umd/dnb-ui-components.min.js +1 -1
  601. package/umd/dnb-ui-elements.min.js +1 -1
  602. package/umd/dnb-ui-extensions.min.js +2 -2
  603. package/umd/dnb-ui-lib.min.js +1 -1
@@ -1,10 +1,15 @@
1
1
  import { Props as StringFieldProps } from '../String';
2
- export type Props = StringFieldProps & {
2
+ import { FormError, Validator } from '../../types';
3
+ export type Props = Omit<StringFieldProps, 'onBlurValidator'> & {
3
4
  omitMask?: boolean;
4
5
  validate?: boolean;
6
+ onBlurValidator?: Validator<string> | false;
5
7
  };
6
8
  declare function NationalIdentityNumber(props: Props): import("react/jsx-runtime").JSX.Element;
7
9
  declare namespace NationalIdentityNumber {
8
10
  var _supportsSpacingProps: boolean;
9
11
  }
12
+ export declare function getAgeByBirthDate(birthDate: Date): number;
13
+ export declare function getBirthDateByFnrOrDnr(value: string): Date;
14
+ export declare function createMinimumAgeValidator(age: number): (value: string) => FormError;
10
15
  export default NationalIdentityNumber;
@@ -4,58 +4,144 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
4
4
  import React, { useCallback, useMemo } from 'react';
5
5
  import StringField from '../String';
6
6
  import { dnr, fnr } from '@navikt/fnrvalidator';
7
+ import { FormError } from '../../types';
7
8
  import useErrorMessage from '../../hooks/useErrorMessage';
8
9
  import useTranslation from '../../hooks/useTranslation';
9
10
  function NationalIdentityNumber(props) {
10
- var _props$label, _props$width;
11
- const {
12
- validate = true,
13
- omitMask
14
- } = props;
15
11
  const translations = useTranslation().NationalIdentityNumber;
16
12
  const {
17
13
  label,
18
14
  errorRequired,
19
15
  errorFnr,
20
- errorDnr
16
+ errorFnrLength,
17
+ errorDnr,
18
+ errorDnrLength,
19
+ errorMinimumAgeValidator,
20
+ errorMinimumAgeValidatorLength
21
21
  } = translations;
22
22
  const errorMessages = useErrorMessage(props.path, props.errorMessages, {
23
23
  required: errorRequired,
24
- pattern: errorRequired,
24
+ pattern: errorFnr,
25
25
  errorFnr,
26
- errorDnr
26
+ errorFnrLength,
27
+ errorDnr,
28
+ errorDnrLength,
29
+ errorMinimumAgeValidator,
30
+ errorMinimumAgeValidatorLength
27
31
  });
28
- const mask = useMemo(() => omitMask ? Array(11).fill(/\d/) : [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, /\d/], [omitMask]);
29
- const validationPattern = '^[0-9]{11}$';
32
+ const identificationNumberIsOfLength = (identificationNumber, length) => {
33
+ return (identificationNumber === null || identificationNumber === void 0 ? void 0 : identificationNumber.length) === length;
34
+ };
30
35
  const fnrValidator = useCallback(value => {
31
- if (new RegExp(validationPattern).test(value) && fnr(value).status === 'invalid') {
32
- return Error(errorFnr);
36
+ if (value !== undefined) {
37
+ if (Number.parseInt(value.substring(0, 1)) > 3) {
38
+ return Error(errorFnr);
39
+ }
40
+ const fnrIs11Digits = identificationNumberIsOfLength(value, 11);
41
+ if (!fnrIs11Digits) {
42
+ return Error(errorFnrLength);
43
+ }
44
+ if (fnrIs11Digits && fnr(value).status === 'invalid') {
45
+ return Error(errorFnr);
46
+ }
33
47
  }
34
- }, [errorFnr]);
48
+ }, [errorFnr, errorFnrLength]);
35
49
  const dnrValidator = useCallback(value => {
36
- const validationPattern = '^[4-7]([0-9]{10}$)';
37
- if (new RegExp(validationPattern).test(value) && dnr(value).status === 'invalid') {
38
- return Error(errorDnr);
50
+ if (value !== undefined) {
51
+ if (Number.parseInt(value.substring(0, 1)) < 4) {
52
+ return Error(errorDnr);
53
+ }
54
+ const dnrIs11Digits = identificationNumberIsOfLength(value, 11);
55
+ if (!dnrIs11Digits) {
56
+ return Error(errorDnrLength);
57
+ }
58
+ if (dnrIs11Digits && dnr(value).status === 'invalid') {
59
+ return Error(errorDnr);
60
+ }
39
61
  }
40
- }, [errorDnr]);
62
+ }, [errorDnr, errorDnrLength]);
41
63
  const dnrAndFnrValidator = useCallback(value => {
42
- return dnrValidator(value) || fnrValidator(value);
64
+ const dnrValidationPattern = '^[4-9].*';
65
+ if (new RegExp(dnrValidationPattern).test(value)) {
66
+ return dnrValidator(value);
67
+ }
68
+ return fnrValidator(value);
43
69
  }, [dnrValidator, fnrValidator]);
70
+ const {
71
+ validate = true,
72
+ omitMask,
73
+ onBlurValidator = dnrAndFnrValidator,
74
+ validator,
75
+ width,
76
+ label: labelProp
77
+ } = props;
78
+ const mask = useMemo(() => omitMask ? Array(11).fill(/\d/) : [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, /\d/], [omitMask]);
79
+ const onBlurValidatorToUse = onBlurValidator === false ? undefined : onBlurValidator;
44
80
  const StringFieldProps = _objectSpread(_objectSpread({}, props), {}, {
45
- pattern: validate && props.pattern ? props.pattern : validate && !props.validator ? validationPattern : undefined,
46
- label: (_props$label = props.label) !== null && _props$label !== void 0 ? _props$label : label,
81
+ label: labelProp !== null && labelProp !== void 0 ? labelProp : label,
47
82
  errorMessages,
48
83
  mask,
49
- width: (_props$width = props.width) !== null && _props$width !== void 0 ? _props$width : 'medium',
84
+ width: width !== null && width !== void 0 ? width : 'medium',
50
85
  inputMode: 'numeric',
51
- validator: validate ? props.validator || dnrAndFnrValidator : undefined,
86
+ validator: validate ? validator : undefined,
87
+ onBlurValidator: validate ? onBlurValidatorToUse : undefined,
52
88
  exportValidators: {
53
89
  dnrValidator,
54
- fnrValidator
90
+ fnrValidator,
91
+ dnrAndFnrValidator
55
92
  }
56
93
  });
57
94
  return React.createElement(StringField, StringFieldProps);
58
95
  }
96
+ export function getAgeByBirthDate(birthDate) {
97
+ const today = new Date();
98
+ const age = today.getFullYear() - birthDate.getFullYear();
99
+ const month = today.getMonth() - birthDate.getMonth();
100
+ const day = today.getDate() - birthDate.getDate();
101
+ if (month < 0 || month === 0 && day < 0) {
102
+ return age - 1;
103
+ }
104
+ return age;
105
+ }
106
+ export function getBirthDateByFnrOrDnr(value) {
107
+ if (value === undefined) {
108
+ return;
109
+ }
110
+ const yearPart = value.substring(4, 6);
111
+ const centuryNumber = Number.parseInt(value.substring(6, 7));
112
+ const isBornIn20XX = centuryNumber >= 5;
113
+ const year = isBornIn20XX ? `20${yearPart}` : `19${yearPart}`;
114
+ const month = Number.parseInt(value.substring(2, 4));
115
+ const differentiatorValue = value.length > 0 ? Number.parseInt(value.substring(0, 1)) : undefined;
116
+ const isDnr = differentiatorValue && differentiatorValue > 3;
117
+ const day = isDnr ? Number.parseInt(value.substring(0, 2)) - 40 : Number.parseInt(value.substring(0, 2));
118
+ return new Date(Number.parseInt(year), month - 1, day);
119
+ }
120
+ export function createMinimumAgeValidator(age) {
121
+ return value => {
122
+ if (typeof value !== 'string') {
123
+ return;
124
+ }
125
+ const identificationNumberIs7DigitsOrMore = (value === null || value === void 0 ? void 0 : value.length) >= 7;
126
+ if (!identificationNumberIs7DigitsOrMore) {
127
+ return new FormError('NationalIdentityNumber.errorMinimumAgeValidatorLength', {
128
+ validationRule: 'errorMinimumAgeValidatorLength'
129
+ });
130
+ }
131
+ if (identificationNumberIs7DigitsOrMore) {
132
+ const date = getBirthDateByFnrOrDnr(value);
133
+ if (getAgeByBirthDate(date) >= age) {
134
+ return;
135
+ }
136
+ }
137
+ return new FormError('NationalIdentityNumber.errorMinimumAgeValidator', {
138
+ validationRule: 'errorMinimumAgeValidator',
139
+ messageValues: {
140
+ age: String(age)
141
+ }
142
+ });
143
+ };
144
+ }
59
145
  NationalIdentityNumber._supportsSpacingProps = true;
60
146
  export default NationalIdentityNumber;
61
147
  //# sourceMappingURL=NationalIdentityNumber.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NationalIdentityNumber.js","names":["React","useCallback","useMemo","StringField","dnr","fnr","useErrorMessage","useTranslation","NationalIdentityNumber","props","_props$label","_props$width","validate","omitMask","translations","label","errorRequired","errorFnr","errorDnr","errorMessages","path","required","pattern","mask","Array","fill","validationPattern","fnrValidator","value","RegExp","test","status","Error","dnrValidator","dnrAndFnrValidator","StringFieldProps","_objectSpread","validator","undefined","width","inputMode","exportValidators","createElement","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react'\nimport StringField, { Props as StringFieldProps } from '../String'\nimport { dnr, fnr } from '@navikt/fnrvalidator'\n\nimport useErrorMessage from '../../hooks/useErrorMessage'\nimport useTranslation from '../../hooks/useTranslation'\n\nexport type Props = StringFieldProps & {\n omitMask?: boolean\n validate?: boolean\n}\n\nfunction NationalIdentityNumber(props: Props) {\n const { validate = true, omitMask } = props\n\n const translations = useTranslation().NationalIdentityNumber\n const { label, errorRequired, errorFnr, errorDnr } = translations\n const errorMessages = useErrorMessage(props.path, props.errorMessages, {\n required: errorRequired,\n pattern: errorRequired,\n errorFnr,\n errorDnr,\n })\n\n const mask = useMemo(\n () =>\n omitMask\n ? Array(11).fill(/\\d/)\n : [\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n ],\n [omitMask]\n )\n const validationPattern = '^[0-9]{11}$'\n\n const fnrValidator = useCallback(\n (value: string) => {\n if (\n new RegExp(validationPattern).test(value) &&\n fnr(value).status === 'invalid'\n ) {\n return Error(errorFnr)\n }\n },\n [errorFnr]\n )\n\n const dnrValidator = useCallback(\n (value: string) => {\n const validationPattern = '^[4-7]([0-9]{10}$)' // 1st num is increased by 4. i.e, if 01.01.1985, D number would be 410185.\n if (\n new RegExp(validationPattern).test(value) &&\n dnr(value).status === 'invalid'\n ) {\n return Error(errorDnr)\n }\n },\n [errorDnr]\n )\n\n const dnrAndFnrValidator = useCallback(\n (value: string) => {\n return dnrValidator(value) || fnrValidator(value)\n },\n [dnrValidator, fnrValidator]\n )\n\n const StringFieldProps: Props = {\n ...props,\n pattern:\n validate && props.pattern\n ? props.pattern\n : validate && !props.validator\n ? validationPattern\n : undefined,\n label: props.label ?? label,\n errorMessages,\n mask,\n width: props.width ?? 'medium',\n inputMode: 'numeric',\n validator: validate\n ? props.validator || dnrAndFnrValidator\n : undefined,\n exportValidators: { dnrValidator, fnrValidator },\n }\n\n return <StringField {...StringFieldProps} />\n}\n\nNationalIdentityNumber._supportsSpacingProps = true\nexport default NationalIdentityNumber\n"],"mappings":"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"}
1
+ {"version":3,"file":"NationalIdentityNumber.js","names":["React","useCallback","useMemo","StringField","dnr","fnr","FormError","useErrorMessage","useTranslation","NationalIdentityNumber","props","translations","label","errorRequired","errorFnr","errorFnrLength","errorDnr","errorDnrLength","errorMinimumAgeValidator","errorMinimumAgeValidatorLength","errorMessages","path","required","pattern","identificationNumberIsOfLength","identificationNumber","length","fnrValidator","value","undefined","Number","parseInt","substring","Error","fnrIs11Digits","status","dnrValidator","dnrIs11Digits","dnrAndFnrValidator","dnrValidationPattern","RegExp","test","validate","omitMask","onBlurValidator","validator","width","labelProp","mask","Array","fill","onBlurValidatorToUse","StringFieldProps","_objectSpread","inputMode","exportValidators","createElement","getAgeByBirthDate","birthDate","today","Date","age","getFullYear","month","getMonth","day","getDate","getBirthDateByFnrOrDnr","yearPart","centuryNumber","isBornIn20XX","year","differentiatorValue","isDnr","createMinimumAgeValidator","identificationNumberIs7DigitsOrMore","validationRule","date","messageValues","String","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react'\nimport StringField, { Props as StringFieldProps } from '../String'\nimport { dnr, fnr } from '@navikt/fnrvalidator'\nimport { FormError, Validator } from '../../types'\n\nimport useErrorMessage from '../../hooks/useErrorMessage'\nimport useTranslation from '../../hooks/useTranslation'\n\nexport type Props = Omit<StringFieldProps, 'onBlurValidator'> & {\n omitMask?: boolean\n validate?: boolean\n onBlurValidator?: Validator<string> | false\n}\n\nfunction NationalIdentityNumber(props: Props) {\n const translations = useTranslation().NationalIdentityNumber\n const {\n label,\n errorRequired,\n errorFnr,\n errorFnrLength,\n errorDnr,\n errorDnrLength,\n errorMinimumAgeValidator,\n errorMinimumAgeValidatorLength,\n } = translations\n const errorMessages = useErrorMessage(props.path, props.errorMessages, {\n required: errorRequired,\n pattern: errorFnr,\n errorFnr,\n errorFnrLength,\n errorDnr,\n errorDnrLength,\n errorMinimumAgeValidator,\n errorMinimumAgeValidatorLength,\n })\n\n const identificationNumberIsOfLength = (\n identificationNumber: string,\n length: number\n ) => {\n return identificationNumber?.length === length\n }\n\n const fnrValidator = useCallback(\n (value: string) => {\n if (value !== undefined) {\n if (Number.parseInt(value.substring(0, 1)) > 3) {\n return Error(errorFnr)\n }\n\n const fnrIs11Digits = identificationNumberIsOfLength(value, 11)\n\n if (!fnrIs11Digits) {\n return Error(errorFnrLength)\n }\n if (fnrIs11Digits && fnr(value).status === 'invalid') {\n return Error(errorFnr)\n }\n }\n },\n [errorFnr, errorFnrLength]\n )\n\n const dnrValidator = useCallback(\n (value: string) => {\n if (value !== undefined) {\n if (Number.parseInt(value.substring(0, 1)) < 4) {\n return Error(errorDnr)\n }\n\n const dnrIs11Digits = identificationNumberIsOfLength(value, 11)\n\n if (!dnrIs11Digits) {\n return Error(errorDnrLength)\n }\n if (dnrIs11Digits && dnr(value).status === 'invalid') {\n return Error(errorDnr)\n }\n }\n },\n [errorDnr, errorDnrLength]\n )\n\n const dnrAndFnrValidator = useCallback(\n (value: string) => {\n const dnrValidationPattern = '^[4-9].*' // 1st num is increased by 4. i.e, if 01.01.1985, D number would be 410185.\n\n if (new RegExp(dnrValidationPattern).test(value)) {\n return dnrValidator(value)\n }\n return fnrValidator(value)\n },\n [dnrValidator, fnrValidator]\n )\n\n const {\n validate = true,\n omitMask,\n onBlurValidator = dnrAndFnrValidator,\n validator,\n width,\n label: labelProp,\n } = props\n\n const mask = useMemo(\n () =>\n omitMask\n ? Array(11).fill(/\\d/)\n : [\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n ],\n [omitMask]\n )\n\n const onBlurValidatorToUse =\n onBlurValidator === false ? undefined : onBlurValidator\n\n const StringFieldProps: StringFieldProps = {\n ...props,\n label: labelProp ?? label,\n errorMessages,\n mask,\n width: width ?? 'medium',\n inputMode: 'numeric',\n validator: validate ? validator : undefined,\n onBlurValidator: validate ? onBlurValidatorToUse : undefined,\n exportValidators: {\n dnrValidator,\n fnrValidator,\n dnrAndFnrValidator,\n },\n }\n\n return <StringField {...StringFieldProps} />\n}\n\nexport function getAgeByBirthDate(birthDate: Date): number {\n const today = new Date()\n const age = today.getFullYear() - birthDate.getFullYear()\n const month = today.getMonth() - birthDate.getMonth()\n const day = today.getDate() - birthDate.getDate()\n\n if (month < 0 || (month === 0 && day < 0)) {\n return age - 1\n }\n\n return age\n}\n\nexport function getBirthDateByFnrOrDnr(value: string) {\n if (value === undefined) {\n return // stop here\n }\n\n const yearPart = value.substring(4, 6)\n const centuryNumber = Number.parseInt(value.substring(6, 7))\n\n const isBornIn20XX = centuryNumber >= 5\n const year = isBornIn20XX ? `20${yearPart}` : `19${yearPart}`\n const month = Number.parseInt(value.substring(2, 4))\n\n const differentiatorValue =\n value.length > 0 ? Number.parseInt(value.substring(0, 1)) : undefined\n const isDnr = differentiatorValue && differentiatorValue > 3\n\n const day = isDnr\n ? Number.parseInt(value.substring(0, 2)) - 40\n : Number.parseInt(value.substring(0, 2))\n\n return new Date(Number.parseInt(year), month - 1, day)\n}\n\nexport function createMinimumAgeValidator(age: number) {\n return (value: string) => {\n if (typeof value !== 'string') {\n return // stop here\n }\n\n const identificationNumberIs7DigitsOrMore = value?.length >= 7\n\n if (!identificationNumberIs7DigitsOrMore) {\n return new FormError(\n 'NationalIdentityNumber.errorMinimumAgeValidatorLength',\n {\n validationRule: 'errorMinimumAgeValidatorLength', // \"validationRule\" Will be removed in future PR\n }\n )\n }\n\n if (identificationNumberIs7DigitsOrMore) {\n const date = getBirthDateByFnrOrDnr(value)\n if (getAgeByBirthDate(date) >= age) {\n return // stop here\n }\n }\n\n return new FormError(\n 'NationalIdentityNumber.errorMinimumAgeValidator',\n {\n validationRule: 'errorMinimumAgeValidator', // \"validationRule\" Will be removed in future PR\n messageValues: { age: String(age) },\n }\n )\n }\n}\n\nNationalIdentityNumber._supportsSpacingProps = true\nexport default NationalIdentityNumber\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACnD,OAAOC,WAAW,MAAqC,WAAW;AAClE,SAASC,GAAG,EAAEC,GAAG,QAAQ,sBAAsB;AAC/C,SAASC,SAAS,QAAmB,aAAa;AAElD,OAAOC,eAAe,MAAM,6BAA6B;AACzD,OAAOC,cAAc,MAAM,4BAA4B;AAQvD,SAASC,sBAAsBA,CAACC,KAAY,EAAE;EAC5C,MAAMC,YAAY,GAAGH,cAAc,CAAC,CAAC,CAACC,sBAAsB;EAC5D,MAAM;IACJG,KAAK;IACLC,aAAa;IACbC,QAAQ;IACRC,cAAc;IACdC,QAAQ;IACRC,cAAc;IACdC,wBAAwB;IACxBC;EACF,CAAC,GAAGR,YAAY;EAChB,MAAMS,aAAa,GAAGb,eAAe,CAACG,KAAK,CAACW,IAAI,EAAEX,KAAK,CAACU,aAAa,EAAE;IACrEE,QAAQ,EAAET,aAAa;IACvBU,OAAO,EAAET,QAAQ;IACjBA,QAAQ;IACRC,cAAc;IACdC,QAAQ;IACRC,cAAc;IACdC,wBAAwB;IACxBC;EACF,CAAC,CAAC;EAEF,MAAMK,8BAA8B,GAAGA,CACrCC,oBAA4B,EAC5BC,MAAc,KACX;IACH,OAAO,CAAAD,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEC,MAAM,MAAKA,MAAM;EAChD,CAAC;EAED,MAAMC,YAAY,GAAG1B,WAAW,CAC7B2B,KAAa,IAAK;IACjB,IAAIA,KAAK,KAAKC,SAAS,EAAE;MACvB,IAAIC,MAAM,CAACC,QAAQ,CAACH,KAAK,CAACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QAC9C,OAAOC,KAAK,CAACnB,QAAQ,CAAC;MACxB;MAEA,MAAMoB,aAAa,GAAGV,8BAA8B,CAACI,KAAK,EAAE,EAAE,CAAC;MAE/D,IAAI,CAACM,aAAa,EAAE;QAClB,OAAOD,KAAK,CAAClB,cAAc,CAAC;MAC9B;MACA,IAAImB,aAAa,IAAI7B,GAAG,CAACuB,KAAK,CAAC,CAACO,MAAM,KAAK,SAAS,EAAE;QACpD,OAAOF,KAAK,CAACnB,QAAQ,CAAC;MACxB;IACF;EACF,CAAC,EACD,CAACA,QAAQ,EAAEC,cAAc,CAC3B,CAAC;EAED,MAAMqB,YAAY,GAAGnC,WAAW,CAC7B2B,KAAa,IAAK;IACjB,IAAIA,KAAK,KAAKC,SAAS,EAAE;MACvB,IAAIC,MAAM,CAACC,QAAQ,CAACH,KAAK,CAACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QAC9C,OAAOC,KAAK,CAACjB,QAAQ,CAAC;MACxB;MAEA,MAAMqB,aAAa,GAAGb,8BAA8B,CAACI,KAAK,EAAE,EAAE,CAAC;MAE/D,IAAI,CAACS,aAAa,EAAE;QAClB,OAAOJ,KAAK,CAAChB,cAAc,CAAC;MAC9B;MACA,IAAIoB,aAAa,IAAIjC,GAAG,CAACwB,KAAK,CAAC,CAACO,MAAM,KAAK,SAAS,EAAE;QACpD,OAAOF,KAAK,CAACjB,QAAQ,CAAC;MACxB;IACF;EACF,CAAC,EACD,CAACA,QAAQ,EAAEC,cAAc,CAC3B,CAAC;EAED,MAAMqB,kBAAkB,GAAGrC,WAAW,CACnC2B,KAAa,IAAK;IACjB,MAAMW,oBAAoB,GAAG,UAAU;IAEvC,IAAI,IAAIC,MAAM,CAACD,oBAAoB,CAAC,CAACE,IAAI,CAACb,KAAK,CAAC,EAAE;MAChD,OAAOQ,YAAY,CAACR,KAAK,CAAC;IAC5B;IACA,OAAOD,YAAY,CAACC,KAAK,CAAC;EAC5B,CAAC,EACD,CAACQ,YAAY,EAAET,YAAY,CAC7B,CAAC;EAED,MAAM;IACJe,QAAQ,GAAG,IAAI;IACfC,QAAQ;IACRC,eAAe,GAAGN,kBAAkB;IACpCO,SAAS;IACTC,KAAK;IACLlC,KAAK,EAAEmC;EACT,CAAC,GAAGrC,KAAK;EAET,MAAMsC,IAAI,GAAG9C,OAAO,CAClB,MACEyC,QAAQ,GACJM,KAAK,CAAC,EAAE,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC,GACpB,CACE,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,EACP,CAACP,QAAQ,CACX,CAAC;EAED,MAAMQ,oBAAoB,GACxBP,eAAe,KAAK,KAAK,GAAGf,SAAS,GAAGe,eAAe;EAEzD,MAAMQ,gBAAkC,GAAAC,aAAA,CAAAA,aAAA,KACnC3C,KAAK;IACRE,KAAK,EAAEmC,SAAS,aAATA,SAAS,cAATA,SAAS,GAAInC,KAAK;IACzBQ,aAAa;IACb4B,IAAI;IACJF,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,QAAQ;IACxBQ,SAAS,EAAE,SAAS;IACpBT,SAAS,EAAEH,QAAQ,GAAGG,SAAS,GAAGhB,SAAS;IAC3Ce,eAAe,EAAEF,QAAQ,GAAGS,oBAAoB,GAAGtB,SAAS;IAC5D0B,gBAAgB,EAAE;MAChBnB,YAAY;MACZT,YAAY;MACZW;IACF;EAAC,EACF;EAED,OAAOtC,KAAA,CAAAwD,aAAA,CAACrD,WAAW,EAAKiD,gBAAmB,CAAC;AAC9C;AAEA,OAAO,SAASK,iBAAiBA,CAACC,SAAe,EAAU;EACzD,MAAMC,KAAK,GAAG,IAAIC,IAAI,CAAC,CAAC;EACxB,MAAMC,GAAG,GAAGF,KAAK,CAACG,WAAW,CAAC,CAAC,GAAGJ,SAAS,CAACI,WAAW,CAAC,CAAC;EACzD,MAAMC,KAAK,GAAGJ,KAAK,CAACK,QAAQ,CAAC,CAAC,GAAGN,SAAS,CAACM,QAAQ,CAAC,CAAC;EACrD,MAAMC,GAAG,GAAGN,KAAK,CAACO,OAAO,CAAC,CAAC,GAAGR,SAAS,CAACQ,OAAO,CAAC,CAAC;EAEjD,IAAIH,KAAK,GAAG,CAAC,IAAKA,KAAK,KAAK,CAAC,IAAIE,GAAG,GAAG,CAAE,EAAE;IACzC,OAAOJ,GAAG,GAAG,CAAC;EAChB;EAEA,OAAOA,GAAG;AACZ;AAEA,OAAO,SAASM,sBAAsBA,CAACvC,KAAa,EAAE;EACpD,IAAIA,KAAK,KAAKC,SAAS,EAAE;IACvB;EACF;EAEA,MAAMuC,QAAQ,GAAGxC,KAAK,CAACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;EACtC,MAAMqC,aAAa,GAAGvC,MAAM,CAACC,QAAQ,CAACH,KAAK,CAACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAE5D,MAAMsC,YAAY,GAAGD,aAAa,IAAI,CAAC;EACvC,MAAME,IAAI,GAAGD,YAAY,GAAI,KAAIF,QAAS,EAAC,GAAI,KAAIA,QAAS,EAAC;EAC7D,MAAML,KAAK,GAAGjC,MAAM,CAACC,QAAQ,CAACH,KAAK,CAACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAEpD,MAAMwC,mBAAmB,GACvB5C,KAAK,CAACF,MAAM,GAAG,CAAC,GAAGI,MAAM,CAACC,QAAQ,CAACH,KAAK,CAACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAGH,SAAS;EACvE,MAAM4C,KAAK,GAAGD,mBAAmB,IAAIA,mBAAmB,GAAG,CAAC;EAE5D,MAAMP,GAAG,GAAGQ,KAAK,GACb3C,MAAM,CAACC,QAAQ,CAACH,KAAK,CAACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAC3CF,MAAM,CAACC,QAAQ,CAACH,KAAK,CAACI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAE1C,OAAO,IAAI4B,IAAI,CAAC9B,MAAM,CAACC,QAAQ,CAACwC,IAAI,CAAC,EAAER,KAAK,GAAG,CAAC,EAAEE,GAAG,CAAC;AACxD;AAEA,OAAO,SAASS,yBAAyBA,CAACb,GAAW,EAAE;EACrD,OAAQjC,KAAa,IAAK;IACxB,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B;IACF;IAEA,MAAM+C,mCAAmC,GAAG,CAAA/C,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEF,MAAM,KAAI,CAAC;IAE9D,IAAI,CAACiD,mCAAmC,EAAE;MACxC,OAAO,IAAIrE,SAAS,CAClB,uDAAuD,EACvD;QACEsE,cAAc,EAAE;MAClB,CACF,CAAC;IACH;IAEA,IAAID,mCAAmC,EAAE;MACvC,MAAME,IAAI,GAAGV,sBAAsB,CAACvC,KAAK,CAAC;MAC1C,IAAI6B,iBAAiB,CAACoB,IAAI,CAAC,IAAIhB,GAAG,EAAE;QAClC;MACF;IACF;IAEA,OAAO,IAAIvD,SAAS,CAClB,iDAAiD,EACjD;MACEsE,cAAc,EAAE,0BAA0B;MAC1CE,aAAa,EAAE;QAAEjB,GAAG,EAAEkB,MAAM,CAAClB,GAAG;MAAE;IACpC,CACF,CAAC;EACH,CAAC;AACH;AAEApD,sBAAsB,CAACuE,qBAAqB,GAAG,IAAI;AACnD,eAAevE,sBAAsB"}
@@ -8,6 +8,11 @@ export const NationalIdentityNumberProperties = {
8
8
  doc: 'Provide a help button. Object consisting of `title` and `content`.',
9
9
  type: 'object',
10
10
  status: 'optional'
11
+ },
12
+ onBlurValidator: {
13
+ doc: 'Custom validator function that is triggered when the user leaves a field (e.g., blurring a text input or closing a dropdown). The function can be either asynchronous or synchronous. The first parameter is the value, and the second parameter returns an object containing { errorMessages, connectWithPath, validators }. Defaults to validation of the identification number(national identity numbers and D numbers), using `dnrAndFnrValidator`. Can be disabled using `false`.',
14
+ type: 'function',
15
+ status: 'optional'
11
16
  }
12
17
  };
13
18
  //# sourceMappingURL=NationalIdentityNumberDocs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NationalIdentityNumberDocs.js","names":["NationalIdentityNumberProperties","validate","doc","type","status","help"],"sources":["../../../../../../src/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumberDocs.tsx"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const NationalIdentityNumberProperties: PropertiesTableProps = {\n validate: {\n doc: 'Using this prop you can disable the default validation.',\n type: 'boolean',\n status: 'optional',\n },\n help: {\n doc: 'Provide a help button. Object consisting of `title` and `content`.',\n type: 'object',\n status: 'optional',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,gCAAsD,GAAG;EACpEC,QAAQ,EAAE;IACRC,GAAG,EAAE,yDAAyD;IAC9DC,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJH,GAAG,EAAE,oEAAoE;IACzEC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;EACV;AACF,CAAC"}
1
+ {"version":3,"file":"NationalIdentityNumberDocs.js","names":["NationalIdentityNumberProperties","validate","doc","type","status","help","onBlurValidator"],"sources":["../../../../../../src/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumberDocs.tsx"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const NationalIdentityNumberProperties: PropertiesTableProps = {\n validate: {\n doc: 'Using this prop you can disable the default validation.',\n type: 'boolean',\n status: 'optional',\n },\n help: {\n doc: 'Provide a help button. Object consisting of `title` and `content`.',\n type: 'object',\n status: 'optional',\n },\n onBlurValidator: {\n doc: 'Custom validator function that is triggered when the user leaves a field (e.g., blurring a text input or closing a dropdown). The function can be either asynchronous or synchronous. The first parameter is the value, and the second parameter returns an object containing { errorMessages, connectWithPath, validators }. Defaults to validation of the identification number(national identity numbers and D numbers), using `dnrAndFnrValidator`. Can be disabled using `false`.',\n type: 'function',\n status: 'optional',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,gCAAsD,GAAG;EACpEC,QAAQ,EAAE;IACRC,GAAG,EAAE,yDAAyD;IAC9DC,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJH,GAAG,EAAE,oEAAoE;IACzEC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;EACV,CAAC;EACDE,eAAe,EAAE;IACfJ,GAAG,EAAE,wdAAwd;IAC7dC,IAAI,EAAE,UAAU;IAChBC,MAAM,EAAE;EACV;AACF,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { Props as StringFieldProps } from '../String';
2
- export type Props = StringFieldProps & {
2
+ import { Validator } from '../../types';
3
+ export type Props = Omit<StringFieldProps, 'onBlurValidator'> & {
3
4
  validate?: boolean;
4
5
  omitMask?: boolean;
6
+ onBlurValidator?: Validator<string> | false;
5
7
  };
6
8
  declare function OrganizationNumber(props: Props): import("react/jsx-runtime").JSX.Element;
7
9
  declare namespace OrganizationNumber {
@@ -6,37 +6,49 @@ import StringField from '../String';
6
6
  import useErrorMessage from '../../hooks/useErrorMessage';
7
7
  import useTranslation from '../../hooks/useTranslation';
8
8
  function OrganizationNumber(props) {
9
- var _props$pattern, _props$label, _props$width;
10
9
  const translations = useTranslation().OrganizationNumber;
11
10
  const {
12
- errorPattern,
11
+ errorOrgNo,
12
+ errorOrgNoLength,
13
13
  errorRequired,
14
14
  label
15
15
  } = translations;
16
- const {
17
- validate = true,
18
- omitMask
19
- } = props;
20
- const validationPattern = '^[0-9]{9}$';
21
16
  const errorMessages = useErrorMessage(props.path, props.errorMessages, {
22
17
  required: errorRequired,
23
- pattern: errorPattern
18
+ pattern: errorOrgNo,
19
+ errorOrgNo,
20
+ errorOrgNoLength
24
21
  });
25
- const mask = useMemo(() => omitMask ? [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/] : [/\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/], [omitMask]);
26
22
  const organizationNumberValidator = useCallback(value => {
27
- if (new RegExp(validationPattern).test(value) && !isValidOrgNumber(value)) {
28
- return Error(errorPattern);
23
+ if (value !== undefined) {
24
+ const orgNoIs9Digits = (value === null || value === void 0 ? void 0 : value.length) === 9;
25
+ if (!orgNoIs9Digits) {
26
+ return Error(errorOrgNoLength);
27
+ }
28
+ if (orgNoIs9Digits && !isValidOrgNumber(value)) {
29
+ return Error(errorOrgNo);
30
+ }
29
31
  }
30
- }, [errorPattern]);
32
+ }, [errorOrgNo, errorOrgNoLength]);
33
+ const {
34
+ validate = true,
35
+ omitMask,
36
+ validator,
37
+ onBlurValidator = organizationNumberValidator,
38
+ label: labelProp,
39
+ width
40
+ } = props;
41
+ const mask = useMemo(() => omitMask ? [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/] : [/\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/], [omitMask]);
42
+ const onBlurValidatorToUse = onBlurValidator === false ? undefined : onBlurValidator;
31
43
  const StringFieldProps = _objectSpread(_objectSpread({}, props), {}, {
32
44
  className: 'dnb-forms-field-organization-number',
33
- pattern: (_props$pattern = props.pattern) !== null && _props$pattern !== void 0 ? _props$pattern : validate ? validationPattern : undefined,
34
- label: (_props$label = props.label) !== null && _props$label !== void 0 ? _props$label : label,
45
+ label: labelProp !== null && labelProp !== void 0 ? labelProp : label,
35
46
  errorMessages,
36
47
  mask,
37
- width: (_props$width = props.width) !== null && _props$width !== void 0 ? _props$width : 'medium',
48
+ width: width !== null && width !== void 0 ? width : 'medium',
38
49
  inputMode: 'numeric',
39
- onBlurValidator: validate ? props.onBlurValidator || organizationNumberValidator : undefined,
50
+ validator: validate ? validator : undefined,
51
+ onBlurValidator: validate ? onBlurValidatorToUse : undefined,
40
52
  exportValidators: {
41
53
  organizationNumberValidator
42
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OrganizationNumber.js","names":["React","useCallback","useMemo","StringField","useErrorMessage","useTranslation","OrganizationNumber","props","_props$pattern","_props$label","_props$width","translations","errorPattern","errorRequired","label","validate","omitMask","validationPattern","errorMessages","path","required","pattern","mask","organizationNumberValidator","value","RegExp","test","isValidOrgNumber","Error","StringFieldProps","_objectSpread","className","undefined","width","inputMode","onBlurValidator","exportValidators","createElement","digits","checkDigit","sum","i","length","parseInt","charAt","result","finalCheckDigit","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/OrganizationNumber/OrganizationNumber.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react'\nimport StringField, { Props as StringFieldProps } from '../String'\nimport useErrorMessage from '../../hooks/useErrorMessage'\nimport useTranslation from '../../hooks/useTranslation'\n\nexport type Props = StringFieldProps & {\n validate?: boolean\n omitMask?: boolean\n}\n\nfunction OrganizationNumber(props: Props) {\n const translations = useTranslation().OrganizationNumber\n const { errorPattern, errorRequired, label } = translations\n\n const { validate = true, omitMask } = props\n\n const validationPattern = '^[0-9]{9}$'\n\n const errorMessages = useErrorMessage(props.path, props.errorMessages, {\n required: errorRequired,\n pattern: errorPattern,\n })\n\n const mask = useMemo(\n () =>\n omitMask\n ? [/\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/]\n : [/\\d/, /\\d/, /\\d/, ' ', /\\d/, /\\d/, /\\d/, ' ', /\\d/, /\\d/, /\\d/],\n [omitMask]\n )\n\n const organizationNumberValidator = useCallback(\n (value: string) => {\n if (\n new RegExp(validationPattern).test(value) &&\n !isValidOrgNumber(value)\n ) {\n return Error(errorPattern)\n }\n },\n [errorPattern]\n )\n\n const StringFieldProps: Props = {\n ...props,\n className: 'dnb-forms-field-organization-number',\n pattern: props.pattern ?? (validate ? validationPattern : undefined),\n label: props.label ?? label,\n errorMessages,\n mask,\n width: props.width ?? 'medium',\n inputMode: 'numeric',\n onBlurValidator: validate\n ? props.onBlurValidator || organizationNumberValidator\n : undefined,\n exportValidators: { organizationNumberValidator },\n }\n\n return <StringField {...StringFieldProps} />\n}\n\n/**\n * Source:\n * www.brreg.no/om-oss/registrene-vare/om-enhetsregisteret/organisasjonsnummeret/\n */\nfunction isValidOrgNumber(digits: string) {\n let checkDigit = 2\n let sum = 0\n\n for (let i = digits.length - 2; i >= 0; --i) {\n sum += parseInt(digits.charAt(i)) * checkDigit\n\n checkDigit += 1\n\n if (checkDigit > 7) {\n checkDigit = 2\n }\n }\n\n const result = 11 - (sum % 11)\n const finalCheckDigit = result === 11 ? 0 : result\n\n return parseInt(digits.charAt(digits.length - 1), 10) === finalCheckDigit\n}\n\nOrganizationNumber._supportsSpacingProps = true\nexport default OrganizationNumber\n"],"mappings":"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"}
1
+ {"version":3,"file":"OrganizationNumber.js","names":["React","useCallback","useMemo","StringField","useErrorMessage","useTranslation","OrganizationNumber","props","translations","errorOrgNo","errorOrgNoLength","errorRequired","label","errorMessages","path","required","pattern","organizationNumberValidator","value","undefined","orgNoIs9Digits","length","Error","isValidOrgNumber","validate","omitMask","validator","onBlurValidator","labelProp","width","mask","onBlurValidatorToUse","StringFieldProps","_objectSpread","className","inputMode","exportValidators","createElement","digits","checkDigit","sum","i","parseInt","charAt","result","finalCheckDigit","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/OrganizationNumber/OrganizationNumber.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react'\nimport StringField, { Props as StringFieldProps } from '../String'\nimport useErrorMessage from '../../hooks/useErrorMessage'\nimport useTranslation from '../../hooks/useTranslation'\nimport { Validator } from '../../types'\n\nexport type Props = Omit<StringFieldProps, 'onBlurValidator'> & {\n validate?: boolean\n omitMask?: boolean\n onBlurValidator?: Validator<string> | false\n}\n\nfunction OrganizationNumber(props: Props) {\n const translations = useTranslation().OrganizationNumber\n const { errorOrgNo, errorOrgNoLength, errorRequired, label } =\n translations\n\n const errorMessages = useErrorMessage(props.path, props.errorMessages, {\n required: errorRequired,\n pattern: errorOrgNo,\n errorOrgNo,\n errorOrgNoLength,\n })\n\n const organizationNumberValidator = useCallback(\n (value: string) => {\n if (value !== undefined) {\n const orgNoIs9Digits = value?.length === 9\n\n if (!orgNoIs9Digits) {\n return Error(errorOrgNoLength)\n }\n if (orgNoIs9Digits && !isValidOrgNumber(value)) {\n return Error(errorOrgNo)\n }\n }\n },\n [errorOrgNo, errorOrgNoLength]\n )\n\n const {\n validate = true,\n omitMask,\n validator,\n onBlurValidator = organizationNumberValidator,\n label: labelProp,\n width,\n } = props\n\n const mask = useMemo(\n () =>\n omitMask\n ? [/\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/]\n : [/\\d/, /\\d/, /\\d/, ' ', /\\d/, /\\d/, /\\d/, ' ', /\\d/, /\\d/, /\\d/],\n [omitMask]\n )\n\n const onBlurValidatorToUse =\n onBlurValidator === false ? undefined : onBlurValidator\n\n const StringFieldProps: StringFieldProps = {\n ...props,\n className: 'dnb-forms-field-organization-number',\n label: labelProp ?? label,\n errorMessages,\n mask,\n width: width ?? 'medium',\n inputMode: 'numeric',\n validator: validate ? validator : undefined,\n onBlurValidator: validate ? onBlurValidatorToUse : undefined,\n exportValidators: { organizationNumberValidator },\n }\n\n return <StringField {...StringFieldProps} />\n}\n\n/**\n * Source:\n * www.brreg.no/om-oss/registrene-vare/om-enhetsregisteret/organisasjonsnummeret/\n */\nfunction isValidOrgNumber(digits: string) {\n let checkDigit = 2\n let sum = 0\n\n for (let i = digits.length - 2; i >= 0; --i) {\n sum += parseInt(digits.charAt(i)) * checkDigit\n\n checkDigit += 1\n\n if (checkDigit > 7) {\n checkDigit = 2\n }\n }\n\n const result = 11 - (sum % 11)\n const finalCheckDigit = result === 11 ? 0 : result\n\n return parseInt(digits.charAt(digits.length - 1), 10) === finalCheckDigit\n}\n\nOrganizationNumber._supportsSpacingProps = true\nexport default OrganizationNumber\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { PropertiesTableProps } from '../../../../shared/types';
2
+ export declare const OrganizationNumberProperties: PropertiesTableProps;
@@ -0,0 +1,18 @@
1
+ export const OrganizationNumberProperties = {
2
+ validate: {
3
+ doc: 'Using this prop you can disable the default validation.',
4
+ type: 'boolean',
5
+ status: 'optional'
6
+ },
7
+ help: {
8
+ doc: 'Provide a help button. Object consisting of `title` and `content`.',
9
+ type: 'object',
10
+ status: 'optional'
11
+ },
12
+ onBlurValidator: {
13
+ doc: 'Custom validator function that is triggered when the user leaves a field (e.g., blurring a text input or closing a dropdown). The function can be either asynchronous or synchronous. The first parameter is the value, and the second parameter returns an object containing { errorMessages, connectWithPath, validators }. Defaults to organization number validation, using `organizationNumberValidator`. Can be disabled using `false`.',
14
+ type: 'function',
15
+ status: 'optional'
16
+ }
17
+ };
18
+ //# sourceMappingURL=OrganizationNumberDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationNumberDocs.js","names":["OrganizationNumberProperties","validate","doc","type","status","help","onBlurValidator"],"sources":["../../../../../../src/extensions/forms/Field/OrganizationNumber/OrganizationNumberDocs.tsx"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const OrganizationNumberProperties: PropertiesTableProps = {\n validate: {\n doc: 'Using this prop you can disable the default validation.',\n type: 'boolean',\n status: 'optional',\n },\n help: {\n doc: 'Provide a help button. Object consisting of `title` and `content`.',\n type: 'object',\n status: 'optional',\n },\n onBlurValidator: {\n doc: 'Custom validator function that is triggered when the user leaves a field (e.g., blurring a text input or closing a dropdown). The function can be either asynchronous or synchronous. The first parameter is the value, and the second parameter returns an object containing { errorMessages, connectWithPath, validators }. Defaults to organization number validation, using `organizationNumberValidator`. Can be disabled using `false`.',\n type: 'function',\n status: 'optional',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,4BAAkD,GAAG;EAChEC,QAAQ,EAAE;IACRC,GAAG,EAAE,yDAAyD;IAC9DC,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJH,GAAG,EAAE,oEAAoE;IACzEC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;EACV,CAAC;EACDE,eAAe,EAAE;IACfJ,GAAG,EAAE,+aAA+a;IACpbC,IAAI,EAAE,UAAU;IAChBC,MAAM,EAAE;EACV;AACF,CAAC"}
@@ -7,6 +7,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
7
7
  import React, { useCallback, useContext, useMemo, useRef } from 'react';
8
8
  import classnames from 'classnames';
9
9
  import SharedContext from '../../../../shared/Context';
10
+ import { LOCALE } from '../../../../shared/defaults';
10
11
  import { Autocomplete, HelpButton } from '../../../../components';
11
12
  import { pickSpacingProps } from '../../../../components/flex/utils';
12
13
  import countries, { prioritizedCountries } from '../../constants/countries';
@@ -15,10 +16,9 @@ import FieldBlock from '../../FieldBlock';
15
16
  import useErrorMessage from '../../hooks/useErrorMessage';
16
17
  import useTranslation from '../../hooks/useTranslation';
17
18
  function SelectCountry(props) {
18
- var _sharedContext$locale;
19
19
  const sharedContext = useContext(SharedContext);
20
20
  const translations = useTranslation().SelectCountry;
21
- const lang = (_sharedContext$locale = sharedContext.locale) === null || _sharedContext$locale === void 0 ? void 0 : _sharedContext$locale.split('-')[0];
21
+ const lang = (sharedContext.locale || LOCALE).split('-')[0];
22
22
  const getCountryObjectByIso = useCallback(value => {
23
23
  const country = countries.find(({
24
24
  iso
@@ -184,6 +184,7 @@ export function getCountryData({
184
184
  }, {
185
185
  i18n: b
186
186
  }) => {
187
+ var _String, _String$localeCompare;
187
188
  if (sort === 'Prioritized') {
188
189
  const indexA = prioritizedCountries.indexOf(a['en']);
189
190
  const indexB = prioritizedCountries.indexOf(b['en']);
@@ -197,7 +198,7 @@ export function getCountryData({
197
198
  return 1;
198
199
  }
199
200
  }
200
- return a[lang].localeCompare(b[lang]);
201
+ return (_String = String(a[lang])) === null || _String === void 0 ? void 0 : (_String$localeCompare = _String.localeCompare) === null || _String$localeCompare === void 0 ? void 0 : _String$localeCompare.call(_String, b[lang]);
201
202
  }).map(country => makeObject(country, lang));
202
203
  }
203
204
  export function countryFilter(country, filterCountries, ccFilter) {
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCountry.js","names":["React","useCallback","useContext","useMemo","useRef","classnames","SharedContext","Autocomplete","HelpButton","pickSpacingProps","countries","prioritizedCountries","useFieldProps","FieldBlock","useErrorMessage","useTranslation","SelectCountry","props","_sharedContext$locale","sharedContext","translations","lang","locale","split","getCountryObjectByIso","value","country","find","iso","i18n","provideAdditionalArgs","errorMessages","path","required","errorRequired","defaultProps","preparedProps","_objectSpread","className","placeholder","label","ccFilter","info","warning","error","hasError","disabled","width","help","htmlAttributes","handleFocus","handleBlur","handleChange","updateValue","forceUpdate","filterCountries","dataRef","langRef","wasFilled","filter","countryFilter","isLangChange","current","getCountryData","sort","window","requestAnimationFrame","handleCountryChange","data","newValue","selectedKey","fillData","onFocusHandler","updateData","onTypeHandler","currentValue","setHidden","event","_event$nativeEvent","nativeEvent","search","toLowerCase","Object","values","some","s","includes","createElement","_extends","label_direction","input_icon","on_show","on_focus","on_blur","on_change","on_type","stretch","status","undefined","show_submit_button","keep_selection","suffix","title","content","autoComplete","no_animation","noAnimation","makeObject","_country$i18n$lang","en","a","b","indexA","indexOf","indexB","priorityA","priorityB","localeCompare","map","result","_country$regions","regions","continent","makeCountryFilterSet","_country$regions2","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/SelectCountry/SelectCountry.tsx"],"sourcesContent":["import React, { useCallback, useContext, useMemo, useRef } from 'react'\nimport classnames from 'classnames'\nimport SharedContext from '../../../../shared/Context'\nimport { Autocomplete, HelpButton } from '../../../../components'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport countries, {\n prioritizedCountries,\n type CountryType,\n type CountryLang,\n} from '../../constants/countries'\nimport { useFieldProps } from '../../hooks'\nimport {\n FieldBlockWidth,\n FieldHelpProps,\n FieldPropsWithExtraValue,\n} from '../../types'\nimport FieldBlock from '../../FieldBlock'\nimport useErrorMessage from '../../hooks/useErrorMessage'\nimport useTranslation from '../../hooks/useTranslation'\n\nexport type CountryFilterSet =\n | 'Scandinavia'\n | 'Nordic'\n | 'Europe'\n | 'Prioritized'\n\nexport type Props = FieldHelpProps &\n FieldPropsWithExtraValue<string, CountryType, undefined | string> & {\n /**\n * Lists only the countries you want to show. Can be `Scandinavia`, `Nordic`, `Europe` or `Prioritized`.\n * Defaults to `Prioritized`.\n */\n countries?: CountryFilterSet\n\n /**\n * Use this prop to filter out certain countries. The function receives the country object and should return a boolean. Returning `false` will omit the country.\n */\n filterCountries?: (country: CountryType) => boolean\n\n /**\n * For internal testing purposes\n */\n noAnimation?: boolean\n\n /**\n * The width of the component.\n */\n width?: FieldBlockWidth\n }\n\nfunction SelectCountry(props: Props) {\n const sharedContext = useContext(SharedContext)\n const translations = useTranslation().SelectCountry\n const lang = sharedContext.locale?.split('-')[0] as CountryLang\n\n const getCountryObjectByIso = useCallback(\n (value: CountryType['iso']) => {\n const country = countries.find(({ iso }) => value === iso)\n if (country?.i18n) {\n country['name'] = country.i18n[lang]\n }\n return country\n },\n [lang]\n )\n\n const provideAdditionalArgs = useCallback(\n (value: CountryType['iso']) => {\n const country = getCountryObjectByIso(value)\n\n if (country?.iso) {\n return country\n }\n },\n [getCountryObjectByIso]\n )\n\n const errorMessages = useErrorMessage(props.path, props.errorMessages, {\n required: translations.errorRequired,\n })\n\n const defaultProps: Partial<Props> = {\n errorMessages,\n }\n const preparedProps: Props = {\n ...defaultProps,\n ...props,\n provideAdditionalArgs,\n }\n\n const {\n className,\n placeholder = translations.placeholder,\n label = translations.label,\n countries: ccFilter = 'Prioritized',\n info,\n warning,\n error,\n hasError,\n disabled,\n value,\n width = 'large',\n help,\n htmlAttributes,\n handleFocus,\n handleBlur,\n handleChange,\n updateValue,\n forceUpdate,\n filterCountries,\n } = useFieldProps(preparedProps)\n\n const dataRef = useRef(null)\n const langRef = useRef(lang)\n const wasFilled = useRef(false)\n\n const filter = useCallback(\n (country: CountryType) => {\n return countryFilter(country, filterCountries, ccFilter)\n },\n [ccFilter, filterCountries]\n )\n\n /**\n * We do not process the whole country list at the first render.\n * Only when the Autocomplete opens (focus).\n * To achieve this, we use memo instead of effect to update refs in sync.\n *\n * We set or update the data list depending on if the countrycode changes or lang changes.\n * We then update data set when value changes.\n */\n useMemo(() => {\n const isLangChange = lang !== langRef.current\n\n if (isLangChange || !wasFilled.current) {\n langRef.current = lang\n dataRef.current = getCountryData({\n lang,\n filter: !wasFilled.current\n ? (country) => country.iso === value\n : filter,\n sort: ccFilter as Extract<CountryFilterSet, 'Prioritized'>,\n })\n\n // To force Autocomplete to re-evaluate the internal data\n if (isLangChange && value && typeof window !== 'undefined') {\n updateValue(null)\n window.requestAnimationFrame(() => {\n updateValue(value)\n })\n }\n }\n }, [lang, filter, ccFilter, updateValue, value])\n\n const handleCountryChange = useCallback(\n ({ data }: { data: { selectedKey: string } }) => {\n const newValue = data?.selectedKey\n const country = getCountryObjectByIso(newValue)\n if (country?.iso) {\n handleChange(country.iso, country)\n }\n },\n [getCountryObjectByIso, handleChange]\n )\n\n const fillData = useCallback(() => {\n if (!wasFilled.current) {\n wasFilled.current = true\n dataRef.current = getCountryData({\n lang: langRef.current,\n filter,\n sort: ccFilter as Extract<CountryFilterSet, 'Prioritized'>,\n })\n forceUpdate()\n }\n }, [ccFilter, filter, forceUpdate])\n\n const onFocusHandler = useCallback(\n ({ updateData }) => {\n fillData()\n updateData(dataRef.current)\n handleFocus()\n },\n [fillData, handleFocus]\n )\n\n const onTypeHandler = useCallback(\n ({ value: currentValue, setHidden, event }) => {\n // Handle browser autofill/autocomplete\n if (typeof event?.nativeEvent?.data === 'undefined') {\n const search = currentValue.toLowerCase()\n const country = countries.find(({ i18n }) =>\n Object.values(i18n).some((s) => s.toLowerCase().includes(search))\n )\n if (country?.iso) {\n setHidden()\n handleChange(country.iso)\n }\n }\n },\n [handleChange]\n )\n\n return (\n <FieldBlock\n className={classnames('dnb-forms-field-select-country', className)}\n width={width}\n info={info}\n warning={warning}\n error={error}\n {...pickSpacingProps(props)}\n >\n <Autocomplete\n placeholder={placeholder}\n label_direction=\"vertical\"\n label={label}\n input_icon={false}\n data={dataRef.current}\n value={typeof value === 'string' ? value : null}\n disabled={disabled}\n on_show={fillData}\n on_focus={onFocusHandler}\n on_blur={handleBlur}\n on_change={handleCountryChange}\n on_type={onTypeHandler}\n stretch\n status={hasError ? 'error' : undefined}\n show_submit_button\n keep_selection\n suffix={\n help ? (\n <HelpButton title={help.title}>{help.content}</HelpButton>\n ) : undefined\n }\n autoComplete=\"country-name\"\n no_animation={props.noAnimation}\n {...htmlAttributes}\n />\n </FieldBlock>\n )\n}\n\ntype GetCountryData = {\n lang?: CountryLang\n filter?: Props['filterCountries']\n sort?: Extract<CountryFilterSet, 'Prioritized'>\n makeObject?: (\n country: CountryType,\n lang: string\n ) => {\n selectedKey: string\n selected_value?: string\n content: string\n }\n}\n\nexport function getCountryData({\n lang = 'nb',\n filter = null,\n sort = null,\n makeObject = (country: CountryType, lang: string) => {\n const content = country.i18n[lang] ?? country.i18n.en\n return {\n selectedKey: country.iso,\n content,\n }\n },\n}: GetCountryData = {}) {\n return countries\n .filter((country) => {\n if (typeof filter === 'function') {\n return filter(country)\n }\n\n return !filter\n })\n .sort(({ i18n: a }, { i18n: b }) => {\n if (sort === 'Prioritized') {\n const indexA = prioritizedCountries.indexOf(a['en'])\n const indexB = prioritizedCountries.indexOf(b['en'])\n\n const priorityA = indexA !== -1\n const priorityB = indexB !== -1\n\n if (priorityA && priorityB) {\n return indexA - indexB\n } else if (priorityA) {\n return -1\n } else if (priorityB) {\n return 1\n }\n }\n\n return a[lang].localeCompare(b[lang])\n })\n .map((country) => makeObject(country, lang))\n}\n\nexport function countryFilter(\n country: CountryType,\n filterCountries: (country: CountryType) => boolean,\n ccFilter: CountryFilterSet\n) {\n let result = true\n\n if (ccFilter !== 'Prioritized') {\n switch (ccFilter) {\n case 'Scandinavia':\n case 'Nordic': {\n result = country.regions?.includes(ccFilter)\n break\n }\n case 'Europe': {\n result = country.continent.includes(ccFilter)\n break\n }\n }\n }\n\n if (result && filterCountries) {\n result = filterCountries(country)\n }\n\n return result\n}\n\nexport function makeCountryFilterSet(ccFilter: CountryFilterSet) {\n return (country: CountryType) => {\n switch (ccFilter) {\n case 'Scandinavia':\n case 'Nordic':\n return country.regions?.includes(ccFilter)\n case 'Europe':\n return country.continent.includes(ccFilter)\n }\n return true\n }\n}\n\nSelectCountry._supportsSpacingProps = true\nexport default SelectCountry\n"],"mappings":"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"}
1
+ {"version":3,"file":"SelectCountry.js","names":["React","useCallback","useContext","useMemo","useRef","classnames","SharedContext","LOCALE","Autocomplete","HelpButton","pickSpacingProps","countries","prioritizedCountries","useFieldProps","FieldBlock","useErrorMessage","useTranslation","SelectCountry","props","sharedContext","translations","lang","locale","split","getCountryObjectByIso","value","country","find","iso","i18n","provideAdditionalArgs","errorMessages","path","required","errorRequired","defaultProps","preparedProps","_objectSpread","className","placeholder","label","ccFilter","info","warning","error","hasError","disabled","width","help","htmlAttributes","handleFocus","handleBlur","handleChange","updateValue","forceUpdate","filterCountries","dataRef","langRef","wasFilled","filter","countryFilter","isLangChange","current","getCountryData","sort","window","requestAnimationFrame","handleCountryChange","data","newValue","selectedKey","fillData","onFocusHandler","updateData","onTypeHandler","currentValue","setHidden","event","_event$nativeEvent","nativeEvent","search","toLowerCase","Object","values","some","s","includes","createElement","_extends","label_direction","input_icon","on_show","on_focus","on_blur","on_change","on_type","stretch","status","undefined","show_submit_button","keep_selection","suffix","title","content","autoComplete","no_animation","noAnimation","makeObject","_country$i18n$lang","en","a","b","_String","_String$localeCompare","indexA","indexOf","indexB","priorityA","priorityB","String","localeCompare","call","map","result","_country$regions","regions","continent","makeCountryFilterSet","_country$regions2","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/SelectCountry/SelectCountry.tsx"],"sourcesContent":["import React, { useCallback, useContext, useMemo, useRef } from 'react'\nimport classnames from 'classnames'\nimport SharedContext from '../../../../shared/Context'\nimport { LOCALE } from '../../../../shared/defaults'\nimport { Autocomplete, HelpButton } from '../../../../components'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport countries, {\n prioritizedCountries,\n type CountryType,\n type CountryLang,\n} from '../../constants/countries'\nimport { useFieldProps } from '../../hooks'\nimport {\n FieldBlockWidth,\n FieldHelpProps,\n FieldPropsWithExtraValue,\n} from '../../types'\nimport FieldBlock from '../../FieldBlock'\nimport useErrorMessage from '../../hooks/useErrorMessage'\nimport useTranslation from '../../hooks/useTranslation'\n\nexport type CountryFilterSet =\n | 'Scandinavia'\n | 'Nordic'\n | 'Europe'\n | 'Prioritized'\n\nexport type Props = FieldHelpProps &\n FieldPropsWithExtraValue<string, CountryType, undefined | string> & {\n /**\n * Lists only the countries you want to show. Can be `Scandinavia`, `Nordic`, `Europe` or `Prioritized`.\n * Defaults to `Prioritized`.\n */\n countries?: CountryFilterSet\n\n /**\n * Use this prop to filter out certain countries. The function receives the country object and should return a boolean. Returning `false` will omit the country.\n */\n filterCountries?: (country: CountryType) => boolean\n\n /**\n * For internal testing purposes\n */\n noAnimation?: boolean\n\n /**\n * The width of the component.\n */\n width?: FieldBlockWidth\n }\n\nfunction SelectCountry(props: Props) {\n const sharedContext = useContext(SharedContext)\n const translations = useTranslation().SelectCountry\n const lang = (sharedContext.locale || LOCALE).split(\n '-'\n )[0] as CountryLang\n\n const getCountryObjectByIso = useCallback(\n (value: CountryType['iso']) => {\n const country = countries.find(({ iso }) => value === iso)\n if (country?.i18n) {\n country['name'] = country.i18n[lang]\n }\n return country\n },\n [lang]\n )\n\n const provideAdditionalArgs = useCallback(\n (value: CountryType['iso']) => {\n const country = getCountryObjectByIso(value)\n\n if (country?.iso) {\n return country\n }\n },\n [getCountryObjectByIso]\n )\n\n const errorMessages = useErrorMessage(props.path, props.errorMessages, {\n required: translations.errorRequired,\n })\n\n const defaultProps: Partial<Props> = {\n errorMessages,\n }\n const preparedProps: Props = {\n ...defaultProps,\n ...props,\n provideAdditionalArgs,\n }\n\n const {\n className,\n placeholder = translations.placeholder,\n label = translations.label,\n countries: ccFilter = 'Prioritized',\n info,\n warning,\n error,\n hasError,\n disabled,\n value,\n width = 'large',\n help,\n htmlAttributes,\n handleFocus,\n handleBlur,\n handleChange,\n updateValue,\n forceUpdate,\n filterCountries,\n } = useFieldProps(preparedProps)\n\n const dataRef = useRef(null)\n const langRef = useRef(lang)\n const wasFilled = useRef(false)\n\n const filter = useCallback(\n (country: CountryType) => {\n return countryFilter(country, filterCountries, ccFilter)\n },\n [ccFilter, filterCountries]\n )\n\n /**\n * We do not process the whole country list at the first render.\n * Only when the Autocomplete opens (focus).\n * To achieve this, we use memo instead of effect to update refs in sync.\n *\n * We set or update the data list depending on if the countrycode changes or lang changes.\n * We then update data set when value changes.\n */\n useMemo(() => {\n const isLangChange = lang !== langRef.current\n\n if (isLangChange || !wasFilled.current) {\n langRef.current = lang\n dataRef.current = getCountryData({\n lang,\n filter: !wasFilled.current\n ? (country) => country.iso === value\n : filter,\n sort: ccFilter as Extract<CountryFilterSet, 'Prioritized'>,\n })\n\n // To force Autocomplete to re-evaluate the internal data\n if (isLangChange && value && typeof window !== 'undefined') {\n updateValue(null)\n window.requestAnimationFrame(() => {\n updateValue(value)\n })\n }\n }\n }, [lang, filter, ccFilter, updateValue, value])\n\n const handleCountryChange = useCallback(\n ({ data }: { data: { selectedKey: string } }) => {\n const newValue = data?.selectedKey\n const country = getCountryObjectByIso(newValue)\n if (country?.iso) {\n handleChange(country.iso, country)\n }\n },\n [getCountryObjectByIso, handleChange]\n )\n\n const fillData = useCallback(() => {\n if (!wasFilled.current) {\n wasFilled.current = true\n dataRef.current = getCountryData({\n lang: langRef.current,\n filter,\n sort: ccFilter as Extract<CountryFilterSet, 'Prioritized'>,\n })\n forceUpdate()\n }\n }, [ccFilter, filter, forceUpdate])\n\n const onFocusHandler = useCallback(\n ({ updateData }) => {\n fillData()\n updateData(dataRef.current)\n handleFocus()\n },\n [fillData, handleFocus]\n )\n\n const onTypeHandler = useCallback(\n ({ value: currentValue, setHidden, event }) => {\n // Handle browser autofill/autocomplete\n if (typeof event?.nativeEvent?.data === 'undefined') {\n const search = currentValue.toLowerCase()\n const country = countries.find(({ i18n }) =>\n Object.values(i18n).some((s) => s.toLowerCase().includes(search))\n )\n if (country?.iso) {\n setHidden()\n handleChange(country.iso)\n }\n }\n },\n [handleChange]\n )\n\n return (\n <FieldBlock\n className={classnames('dnb-forms-field-select-country', className)}\n width={width}\n info={info}\n warning={warning}\n error={error}\n {...pickSpacingProps(props)}\n >\n <Autocomplete\n placeholder={placeholder}\n label_direction=\"vertical\"\n label={label}\n input_icon={false}\n data={dataRef.current}\n value={typeof value === 'string' ? value : null}\n disabled={disabled}\n on_show={fillData}\n on_focus={onFocusHandler}\n on_blur={handleBlur}\n on_change={handleCountryChange}\n on_type={onTypeHandler}\n stretch\n status={hasError ? 'error' : undefined}\n show_submit_button\n keep_selection\n suffix={\n help ? (\n <HelpButton title={help.title}>{help.content}</HelpButton>\n ) : undefined\n }\n autoComplete=\"country-name\"\n no_animation={props.noAnimation}\n {...htmlAttributes}\n />\n </FieldBlock>\n )\n}\n\ntype GetCountryData = {\n lang?: CountryLang\n filter?: Props['filterCountries']\n sort?: Extract<CountryFilterSet, 'Prioritized'>\n makeObject?: (\n country: CountryType,\n lang: string\n ) => {\n selectedKey: string\n selected_value?: string\n content: string\n }\n}\n\nexport function getCountryData({\n lang = 'nb',\n filter = null,\n sort = null,\n makeObject = (country: CountryType, lang: string) => {\n const content = country.i18n[lang] ?? country.i18n.en\n return {\n selectedKey: country.iso,\n content,\n }\n },\n}: GetCountryData = {}) {\n return countries\n .filter((country) => {\n if (typeof filter === 'function') {\n return filter(country)\n }\n\n return !filter\n })\n .sort(({ i18n: a }, { i18n: b }) => {\n if (sort === 'Prioritized') {\n const indexA = prioritizedCountries.indexOf(a['en'])\n const indexB = prioritizedCountries.indexOf(b['en'])\n\n const priorityA = indexA !== -1\n const priorityB = indexB !== -1\n\n if (priorityA && priorityB) {\n return indexA - indexB\n } else if (priorityA) {\n return -1\n } else if (priorityB) {\n return 1\n }\n }\n\n return String(a[lang])?.localeCompare?.(b[lang])\n })\n .map((country) => makeObject(country, lang))\n}\n\nexport function countryFilter(\n country: CountryType,\n filterCountries: (country: CountryType) => boolean,\n ccFilter: CountryFilterSet\n) {\n let result = true\n\n if (ccFilter !== 'Prioritized') {\n switch (ccFilter) {\n case 'Scandinavia':\n case 'Nordic': {\n result = country.regions?.includes(ccFilter)\n break\n }\n case 'Europe': {\n result = country.continent.includes(ccFilter)\n break\n }\n }\n }\n\n if (result && filterCountries) {\n result = filterCountries(country)\n }\n\n return result\n}\n\nexport function makeCountryFilterSet(ccFilter: CountryFilterSet) {\n return (country: CountryType) => {\n switch (ccFilter) {\n case 'Scandinavia':\n case 'Nordic':\n return country.regions?.includes(ccFilter)\n case 'Europe':\n return country.continent.includes(ccFilter)\n }\n return true\n }\n}\n\nSelectCountry._supportsSpacingProps = true\nexport default SelectCountry\n"],"mappings":"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"}
@@ -18,6 +18,10 @@ export type IsolationProviderProps<Data> = {
18
18
  * You can use this to transform the data before it is committed.
19
19
  */
20
20
  transformOnCommit?: (isolatedData: JsonObject, handlerData: JsonObject) => unknown;
21
+ /**
22
+ * Prevent the form from being submitted when there are fields with errors inside the Form.Isolation.
23
+ */
24
+ bubbleValidation?: boolean;
21
25
  /**
22
26
  * Used internally by the Form.Isolation component
23
27
  */
@@ -7,8 +7,9 @@ import React, { useCallback, useContext, useEffect, useMemo, useReducer, useRef
7
7
  import pointer from '../../utils/json-pointer';
8
8
  import { extendDeep } from '../../../../shared/component-helper';
9
9
  import { isAsync } from '../../../../shared/helpers/isAsync';
10
+ import useId from '../../../../shared/helpers/useId';
10
11
  import useDataValue from '../../hooks/useDataValue';
11
- import { Context, Provider } from '../../DataContext';
12
+ import { Context as DataContext, Provider } from '../../DataContext';
12
13
  import SectionContext from '../Section/SectionContext';
13
14
  import IsolationCommitButton from './IsolationCommitButton';
14
15
  import { clearedData } from '../../DataContext/Provider';
@@ -21,6 +22,7 @@ function IsolationProvider(props) {
21
22
  onClear: onClearProp,
22
23
  transformOnCommit: transformOnCommitProp,
23
24
  commitHandleRef,
25
+ bubbleValidation,
24
26
  data,
25
27
  defaultData
26
28
  } = props;
@@ -28,7 +30,7 @@ function IsolationProvider(props) {
28
30
  const internalDataRef = useRef();
29
31
  const localDataRef = useRef({});
30
32
  const dataContextRef = useRef(null);
31
- const outerContext = useContext(Context);
33
+ const outerContext = useContext(DataContext);
32
34
  const {
33
35
  path: pathSection
34
36
  } = useContext(SectionContext) || {};
@@ -109,14 +111,37 @@ function IsolationProvider(props) {
109
111
  onClear,
110
112
  isolate: true
111
113
  });
112
- return React.createElement(Provider, providerProps, React.createElement(Context.Consumer, null, dataContext => {
114
+ return React.createElement(Provider, providerProps, React.createElement(DataContext.Consumer, null, dataContext => {
113
115
  dataContextRef.current = dataContext;
114
116
  if (commitHandleRef) {
115
117
  commitHandleRef.current = dataContext === null || dataContext === void 0 ? void 0 : dataContext.handleSubmit;
116
118
  }
117
119
  return children;
120
+ }), bubbleValidation && React.createElement(BubbleValidation, {
121
+ outerContext: outerContext
118
122
  }));
119
123
  }
124
+ function BubbleValidation({
125
+ outerContext
126
+ }) {
127
+ const {
128
+ setMountedFieldState,
129
+ setFieldError
130
+ } = outerContext || {};
131
+ const dataContext = useContext(DataContext);
132
+ const id = useId();
133
+ useEffect(() => {
134
+ const path = `/${id}`;
135
+ const errors = dataContext.hasErrors();
136
+ if (errors) {
137
+ setMountedFieldState === null || setMountedFieldState === void 0 ? void 0 : setMountedFieldState(path, {
138
+ isMounted: true
139
+ });
140
+ }
141
+ setFieldError === null || setFieldError === void 0 ? void 0 : setFieldError(path, errors ? new Error('Form.Isolation') : undefined);
142
+ }, [dataContext, id, setFieldError, setMountedFieldState]);
143
+ return null;
144
+ }
120
145
  IsolationProvider.CommitButton = IsolationCommitButton;
121
146
  IsolationProvider._supportsSpacingProps = undefined;
122
147
  export default IsolationProvider;