@dnb/eufemia 10.16.0 → 10.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/cjs/components/anchor/Anchor.js +9 -5
  3. package/cjs/components/anchor/Anchor.js.map +1 -1
  4. package/cjs/components/anchor/style/anchor-mixins.scss +0 -11
  5. package/cjs/components/anchor/style/dnb-anchor.css +0 -16
  6. package/cjs/components/anchor/style/dnb-anchor.min.css +1 -1
  7. package/cjs/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +16 -4
  8. package/cjs/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  9. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.css +16 -4
  10. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  11. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.scss +10 -2
  12. package/cjs/components/autocomplete/Autocomplete.js +2 -2
  13. package/cjs/components/autocomplete/Autocomplete.js.map +1 -1
  14. package/cjs/components/button/style/dnb-button.css +13 -0
  15. package/cjs/components/button/style/dnb-button.min.css +1 -1
  16. package/cjs/components/button/style/dnb-button.scss +16 -0
  17. package/cjs/components/button/style/themes/dnb-button-theme-eiendom.css +12 -1
  18. package/cjs/components/button/style/themes/dnb-button-theme-eiendom.min.css +1 -1
  19. package/cjs/components/button/style/themes/dnb-button-theme-sbanken.css +12 -0
  20. package/cjs/components/button/style/themes/dnb-button-theme-sbanken.min.css +2 -2
  21. package/cjs/components/button/style/themes/dnb-button-theme-sbanken.scss +10 -0
  22. package/cjs/components/button/style/themes/dnb-button-theme-ui.css +12 -1
  23. package/cjs/components/button/style/themes/dnb-button-theme-ui.min.css +1 -1
  24. package/cjs/components/button/style/themes/dnb-button-theme-ui.scss +12 -3
  25. package/cjs/components/date-picker/DatePicker.d.ts +14 -1
  26. package/cjs/components/date-picker/DatePicker.js +0 -1
  27. package/cjs/components/date-picker/DatePicker.js.map +1 -1
  28. package/cjs/components/date-picker/DatePickerCalc.js +2 -1
  29. package/cjs/components/date-picker/DatePickerCalc.js.map +1 -1
  30. package/cjs/components/date-picker/DatePickerInput.d.ts +3 -0
  31. package/cjs/components/date-picker/DatePickerInput.js +9 -2
  32. package/cjs/components/date-picker/DatePickerInput.js.map +1 -1
  33. package/cjs/components/dropdown/Dropdown.js +3 -2
  34. package/cjs/components/dropdown/Dropdown.js.map +1 -1
  35. package/cjs/components/flex/Container.js +15 -2
  36. package/cjs/components/flex/Container.js.map +1 -1
  37. package/cjs/components/flex/export.d.ts +1 -0
  38. package/cjs/components/flex/export.js +7 -0
  39. package/cjs/components/flex/export.js.map +1 -1
  40. package/cjs/components/flex/utils.d.ts +1 -1
  41. package/cjs/components/flex/utils.js +11 -1
  42. package/cjs/components/flex/utils.js.map +1 -1
  43. package/cjs/components/flex/withChildren.d.ts +6 -0
  44. package/cjs/components/flex/withChildren.js +13 -0
  45. package/cjs/components/flex/withChildren.js.map +1 -0
  46. package/cjs/components/input/Input.js +3 -3
  47. package/cjs/components/input/Input.js.map +1 -1
  48. package/cjs/components/input/style/themes/dnb-input-theme-ui.css +2 -0
  49. package/cjs/components/input/style/themes/dnb-input-theme-ui.min.css +1 -1
  50. package/cjs/components/input/style/themes/dnb-input-theme-ui.scss +2 -0
  51. package/cjs/components/input-masked/InputMaskedHooks.d.ts +1 -0
  52. package/cjs/components/input-masked/InputMaskedHooks.js +13 -8
  53. package/cjs/components/input-masked/InputMaskedHooks.js.map +1 -1
  54. package/cjs/components/input-masked/MultiInputMask.d.ts +10 -2
  55. package/cjs/components/input-masked/MultiInputMask.js +41 -14
  56. package/cjs/components/input-masked/MultiInputMask.js.map +1 -1
  57. package/cjs/components/input-masked/hooks/useHandleCursorPosition.js +7 -3
  58. package/cjs/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -1
  59. package/cjs/components/input-masked/hooks/useMultiInputValues.d.ts +2 -2
  60. package/cjs/components/input-masked/hooks/useMultiInputValues.js.map +1 -1
  61. package/cjs/components/number-format/NumberFormat.js +1 -1
  62. package/cjs/components/number-format/NumberFormat.js.map +1 -1
  63. package/cjs/components/textarea/style/dnb-textarea.css +5 -0
  64. package/cjs/components/textarea/style/dnb-textarea.min.css +1 -1
  65. package/cjs/components/textarea/style/dnb-textarea.scss +4 -0
  66. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.css +8 -1
  67. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.min.css +1 -1
  68. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.scss +6 -1
  69. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +4 -0
  70. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  71. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +5 -0
  72. package/cjs/components/visually-hidden/VisuallyHidden.js +1 -1
  73. package/cjs/components/visually-hidden/VisuallyHidden.js.map +1 -1
  74. package/cjs/extensions/forms/DataContext/Provider/Provider.d.ts +8 -4
  75. package/cjs/extensions/forms/DataContext/Provider/Provider.js +22 -4
  76. package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  77. package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.js +14 -14
  78. package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
  79. package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -2
  80. package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
  81. package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +12 -2
  82. package/cjs/extensions/forms/Field/Currency/Currency.d.ts +1 -5
  83. package/cjs/extensions/forms/Field/Currency/Currency.js.map +1 -1
  84. package/cjs/extensions/forms/Field/Date/Date.d.ts +3 -1
  85. package/cjs/extensions/forms/Field/Date/Date.js +47 -10
  86. package/cjs/extensions/forms/Field/Date/Date.js.map +1 -1
  87. package/cjs/extensions/forms/Field/Expiry/Expiry.d.ts +1 -1
  88. package/cjs/extensions/forms/Field/Expiry/Expiry.js +20 -10
  89. package/cjs/extensions/forms/Field/Expiry/Expiry.js.map +1 -1
  90. package/cjs/extensions/forms/Field/Number/Number.d.ts +5 -1
  91. package/cjs/extensions/forms/Field/Number/Number.js +109 -30
  92. package/cjs/extensions/forms/Field/Number/Number.js.map +1 -1
  93. package/cjs/extensions/forms/Field/Number/style/dnb-number.css +192 -0
  94. package/cjs/extensions/forms/Field/Number/style/dnb-number.min.css +1 -0
  95. package/cjs/extensions/forms/Field/Number/style/dnb-number.scss +176 -0
  96. package/cjs/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.css +74 -0
  97. package/cjs/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.min.css +3 -0
  98. package/cjs/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.scss +81 -0
  99. package/cjs/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.css +15 -0
  100. package/cjs/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.min.css +5 -0
  101. package/cjs/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.scss +15 -0
  102. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js +7 -10
  103. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  104. package/cjs/extensions/forms/Field/Selection/Selection.d.ts +7 -1
  105. package/cjs/extensions/forms/Field/Selection/Selection.js +4 -9
  106. package/cjs/extensions/forms/Field/Selection/Selection.js.map +1 -1
  107. package/cjs/extensions/forms/Field/String/String.d.ts +0 -1
  108. package/cjs/extensions/forms/Field/String/String.js +23 -9
  109. package/cjs/extensions/forms/Field/String/String.js.map +1 -1
  110. package/cjs/extensions/forms/Field/Toggle/Toggle.js +0 -4
  111. package/cjs/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
  112. package/cjs/extensions/forms/FieldBlock/FieldBlock.d.ts +1 -1
  113. package/cjs/extensions/forms/FieldBlock/FieldBlock.js +16 -26
  114. package/cjs/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  115. package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.css +9 -9
  116. package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
  117. package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.scss +2 -11
  118. package/cjs/extensions/forms/Form/Handler/Handler.js +1 -0
  119. package/cjs/extensions/forms/Form/Handler/Handler.js.map +1 -1
  120. package/cjs/extensions/forms/{Visibility → Form/Visibility}/Visibility.d.ts +5 -2
  121. package/cjs/extensions/forms/{Visibility → Form/Visibility}/Visibility.js +7 -2
  122. package/cjs/extensions/forms/Form/Visibility/Visibility.js.map +1 -0
  123. package/cjs/extensions/forms/Form/Visibility/index.js.map +1 -0
  124. package/cjs/extensions/forms/Form/hooks/useData.d.ts +10 -0
  125. package/cjs/extensions/forms/Form/hooks/useData.js +36 -0
  126. package/cjs/extensions/forms/Form/hooks/useData.js.map +1 -0
  127. package/cjs/extensions/forms/Form/index.d.ts +2 -0
  128. package/cjs/extensions/forms/Form/index.js +14 -0
  129. package/cjs/extensions/forms/Form/index.js.map +1 -1
  130. package/cjs/extensions/forms/Iterate/Array/Array.js +0 -4
  131. package/cjs/extensions/forms/Iterate/Array/Array.js.map +1 -1
  132. package/cjs/extensions/forms/hooks/useDataValue.js +26 -33
  133. package/cjs/extensions/forms/hooks/useDataValue.js.map +1 -1
  134. package/cjs/extensions/forms/hooks/useId.d.ts +1 -0
  135. package/cjs/extensions/forms/hooks/useId.js +18 -0
  136. package/cjs/extensions/forms/hooks/useId.js.map +1 -0
  137. package/cjs/extensions/forms/index.d.ts +6 -1
  138. package/cjs/extensions/forms/index.js +5 -8
  139. package/cjs/extensions/forms/index.js.map +1 -1
  140. package/cjs/extensions/forms/style/dnb-forms.css +214 -11
  141. package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
  142. package/cjs/extensions/forms/types.d.ts +16 -18
  143. package/cjs/extensions/forms/types.js.map +1 -1
  144. package/cjs/extensions/forms/utils/TestElement/TestElement.d.ts +5 -1
  145. package/cjs/extensions/forms/utils/TestElement/TestElement.js +1 -0
  146. package/cjs/extensions/forms/utils/TestElement/TestElement.js.map +1 -1
  147. package/cjs/shared/Eufemia.d.ts +1 -1
  148. package/cjs/shared/Eufemia.js +2 -2
  149. package/cjs/shared/Eufemia.js.map +1 -1
  150. package/cjs/shared/helpers/EventEmitter.d.ts +5 -0
  151. package/cjs/shared/helpers/EventEmitter.js.map +1 -1
  152. package/cjs/shared/helpers/useEventEmitter.d.ts +2 -0
  153. package/cjs/shared/helpers/useEventEmitter.js.map +1 -1
  154. package/cjs/shared/helpers/useSharedState.d.ts +15 -0
  155. package/cjs/shared/helpers/useSharedState.js +71 -0
  156. package/cjs/shared/helpers/useSharedState.js.map +1 -0
  157. package/cjs/style/core/utilities.scss +1 -2
  158. package/cjs/style/dnb-ui-components.css +232 -27
  159. package/cjs/style/dnb-ui-components.min.css +3 -3
  160. package/cjs/style/dnb-ui-extensions.css +214 -11
  161. package/cjs/style/dnb-ui-extensions.min.css +1 -1
  162. package/cjs/style/dnb-ui-forms.css +214 -11
  163. package/cjs/style/dnb-ui-forms.min.css +1 -1
  164. package/cjs/style/dnb-ui-forms.scss +1 -0
  165. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +498 -44
  166. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +9 -5
  167. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +230 -11
  168. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +5 -1
  169. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -0
  170. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +230 -12
  171. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +5 -1
  172. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.scss +2 -0
  173. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +541 -40
  174. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +8 -6
  175. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +289 -11
  176. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +3 -1
  177. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -0
  178. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +289 -12
  179. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +3 -1
  180. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.scss +2 -0
  181. package/cjs/style/themes/theme-ui/ui-theme-components.css +496 -44
  182. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +9 -5
  183. package/cjs/style/themes/theme-ui/ui-theme-extensions.css +230 -11
  184. package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +5 -1
  185. package/cjs/style/themes/theme-ui/ui-theme-extensions.scss +1 -0
  186. package/cjs/style/themes/theme-ui/ui-theme-forms.css +230 -12
  187. package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +5 -1
  188. package/cjs/style/themes/theme-ui/ui-theme-forms.scss +2 -0
  189. package/cjs/style/themes/theme-ui/ui-theme-tags.css +8 -10
  190. package/cjs/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  191. package/components/anchor/Anchor.js +9 -5
  192. package/components/anchor/Anchor.js.map +1 -1
  193. package/components/anchor/style/anchor-mixins.scss +0 -11
  194. package/components/anchor/style/dnb-anchor.css +0 -16
  195. package/components/anchor/style/dnb-anchor.min.css +1 -1
  196. package/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +16 -4
  197. package/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  198. package/components/anchor/style/themes/dnb-anchor-theme-ui.css +16 -4
  199. package/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  200. package/components/anchor/style/themes/dnb-anchor-theme-ui.scss +10 -2
  201. package/components/autocomplete/Autocomplete.js +2 -2
  202. package/components/autocomplete/Autocomplete.js.map +1 -1
  203. package/components/button/style/dnb-button.css +13 -0
  204. package/components/button/style/dnb-button.min.css +1 -1
  205. package/components/button/style/dnb-button.scss +16 -0
  206. package/components/button/style/themes/dnb-button-theme-eiendom.css +12 -1
  207. package/components/button/style/themes/dnb-button-theme-eiendom.min.css +1 -1
  208. package/components/button/style/themes/dnb-button-theme-sbanken.css +12 -0
  209. package/components/button/style/themes/dnb-button-theme-sbanken.min.css +2 -2
  210. package/components/button/style/themes/dnb-button-theme-sbanken.scss +10 -0
  211. package/components/button/style/themes/dnb-button-theme-ui.css +12 -1
  212. package/components/button/style/themes/dnb-button-theme-ui.min.css +1 -1
  213. package/components/button/style/themes/dnb-button-theme-ui.scss +12 -3
  214. package/components/date-picker/DatePicker.d.ts +14 -1
  215. package/components/date-picker/DatePicker.js +0 -1
  216. package/components/date-picker/DatePicker.js.map +1 -1
  217. package/components/date-picker/DatePickerCalc.js +2 -1
  218. package/components/date-picker/DatePickerCalc.js.map +1 -1
  219. package/components/date-picker/DatePickerInput.d.ts +3 -0
  220. package/components/date-picker/DatePickerInput.js +9 -2
  221. package/components/date-picker/DatePickerInput.js.map +1 -1
  222. package/components/dropdown/Dropdown.js +3 -2
  223. package/components/dropdown/Dropdown.js.map +1 -1
  224. package/components/flex/Container.js +15 -2
  225. package/components/flex/Container.js.map +1 -1
  226. package/components/flex/export.d.ts +1 -0
  227. package/components/flex/export.js +1 -0
  228. package/components/flex/export.js.map +1 -1
  229. package/components/flex/utils.d.ts +1 -1
  230. package/components/flex/utils.js +11 -1
  231. package/components/flex/utils.js.map +1 -1
  232. package/components/flex/withChildren.d.ts +6 -0
  233. package/components/flex/withChildren.js +6 -0
  234. package/components/flex/withChildren.js.map +1 -0
  235. package/components/input/Input.js +3 -3
  236. package/components/input/Input.js.map +1 -1
  237. package/components/input/style/themes/dnb-input-theme-ui.css +2 -0
  238. package/components/input/style/themes/dnb-input-theme-ui.min.css +1 -1
  239. package/components/input/style/themes/dnb-input-theme-ui.scss +2 -0
  240. package/components/input-masked/InputMaskedHooks.d.ts +1 -0
  241. package/components/input-masked/InputMaskedHooks.js +13 -8
  242. package/components/input-masked/InputMaskedHooks.js.map +1 -1
  243. package/components/input-masked/MultiInputMask.d.ts +10 -2
  244. package/components/input-masked/MultiInputMask.js +39 -14
  245. package/components/input-masked/MultiInputMask.js.map +1 -1
  246. package/components/input-masked/hooks/useHandleCursorPosition.js +7 -3
  247. package/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -1
  248. package/components/input-masked/hooks/useMultiInputValues.d.ts +2 -2
  249. package/components/input-masked/hooks/useMultiInputValues.js.map +1 -1
  250. package/components/number-format/NumberFormat.js +1 -1
  251. package/components/number-format/NumberFormat.js.map +1 -1
  252. package/components/textarea/style/dnb-textarea.css +5 -0
  253. package/components/textarea/style/dnb-textarea.min.css +1 -1
  254. package/components/textarea/style/dnb-textarea.scss +4 -0
  255. package/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.css +8 -1
  256. package/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.min.css +1 -1
  257. package/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.scss +6 -1
  258. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +4 -0
  259. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  260. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +5 -0
  261. package/components/visually-hidden/VisuallyHidden.js +1 -1
  262. package/components/visually-hidden/VisuallyHidden.js.map +1 -1
  263. package/es/components/anchor/Anchor.js +9 -5
  264. package/es/components/anchor/Anchor.js.map +1 -1
  265. package/es/components/anchor/style/anchor-mixins.scss +0 -11
  266. package/es/components/anchor/style/dnb-anchor.css +0 -16
  267. package/es/components/anchor/style/dnb-anchor.min.css +1 -1
  268. package/es/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +16 -4
  269. package/es/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  270. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.css +16 -4
  271. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  272. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.scss +10 -2
  273. package/es/components/autocomplete/Autocomplete.js +2 -2
  274. package/es/components/autocomplete/Autocomplete.js.map +1 -1
  275. package/es/components/button/style/dnb-button.css +13 -0
  276. package/es/components/button/style/dnb-button.min.css +1 -1
  277. package/es/components/button/style/dnb-button.scss +16 -0
  278. package/es/components/button/style/themes/dnb-button-theme-eiendom.css +12 -1
  279. package/es/components/button/style/themes/dnb-button-theme-eiendom.min.css +1 -1
  280. package/es/components/button/style/themes/dnb-button-theme-sbanken.css +12 -0
  281. package/es/components/button/style/themes/dnb-button-theme-sbanken.min.css +2 -2
  282. package/es/components/button/style/themes/dnb-button-theme-sbanken.scss +10 -0
  283. package/es/components/button/style/themes/dnb-button-theme-ui.css +12 -1
  284. package/es/components/button/style/themes/dnb-button-theme-ui.min.css +1 -1
  285. package/es/components/button/style/themes/dnb-button-theme-ui.scss +12 -3
  286. package/es/components/date-picker/DatePicker.d.ts +14 -1
  287. package/es/components/date-picker/DatePicker.js +0 -1
  288. package/es/components/date-picker/DatePicker.js.map +1 -1
  289. package/es/components/date-picker/DatePickerCalc.js +2 -1
  290. package/es/components/date-picker/DatePickerCalc.js.map +1 -1
  291. package/es/components/date-picker/DatePickerInput.d.ts +3 -0
  292. package/es/components/date-picker/DatePickerInput.js +9 -2
  293. package/es/components/date-picker/DatePickerInput.js.map +1 -1
  294. package/es/components/dropdown/Dropdown.js +3 -2
  295. package/es/components/dropdown/Dropdown.js.map +1 -1
  296. package/es/components/flex/Container.js +15 -2
  297. package/es/components/flex/Container.js.map +1 -1
  298. package/es/components/flex/export.d.ts +1 -0
  299. package/es/components/flex/export.js +1 -0
  300. package/es/components/flex/export.js.map +1 -1
  301. package/es/components/flex/utils.d.ts +1 -1
  302. package/es/components/flex/utils.js +11 -1
  303. package/es/components/flex/utils.js.map +1 -1
  304. package/es/components/flex/withChildren.d.ts +6 -0
  305. package/es/components/flex/withChildren.js +6 -0
  306. package/es/components/flex/withChildren.js.map +1 -0
  307. package/es/components/input/Input.js +3 -3
  308. package/es/components/input/Input.js.map +1 -1
  309. package/es/components/input/style/themes/dnb-input-theme-ui.css +2 -0
  310. package/es/components/input/style/themes/dnb-input-theme-ui.min.css +1 -1
  311. package/es/components/input/style/themes/dnb-input-theme-ui.scss +2 -0
  312. package/es/components/input-masked/InputMaskedHooks.d.ts +1 -0
  313. package/es/components/input-masked/InputMaskedHooks.js +13 -8
  314. package/es/components/input-masked/InputMaskedHooks.js.map +1 -1
  315. package/es/components/input-masked/MultiInputMask.d.ts +10 -2
  316. package/es/components/input-masked/MultiInputMask.js +39 -13
  317. package/es/components/input-masked/MultiInputMask.js.map +1 -1
  318. package/es/components/input-masked/hooks/useHandleCursorPosition.js +7 -3
  319. package/es/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -1
  320. package/es/components/input-masked/hooks/useMultiInputValues.d.ts +2 -2
  321. package/es/components/input-masked/hooks/useMultiInputValues.js.map +1 -1
  322. package/es/components/number-format/NumberFormat.js +1 -1
  323. package/es/components/number-format/NumberFormat.js.map +1 -1
  324. package/es/components/textarea/style/dnb-textarea.css +5 -0
  325. package/es/components/textarea/style/dnb-textarea.min.css +1 -1
  326. package/es/components/textarea/style/dnb-textarea.scss +4 -0
  327. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.css +8 -1
  328. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.min.css +1 -1
  329. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.scss +6 -1
  330. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +4 -0
  331. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  332. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +5 -0
  333. package/es/components/visually-hidden/VisuallyHidden.js +1 -1
  334. package/es/components/visually-hidden/VisuallyHidden.js.map +1 -1
  335. package/es/extensions/forms/DataContext/Provider/Provider.d.ts +8 -4
  336. package/es/extensions/forms/DataContext/Provider/Provider.js +22 -4
  337. package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  338. package/es/extensions/forms/Field/ArraySelection/ArraySelection.js +15 -15
  339. package/es/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
  340. package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -2
  341. package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
  342. package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +12 -2
  343. package/es/extensions/forms/Field/Currency/Currency.d.ts +1 -5
  344. package/es/extensions/forms/Field/Currency/Currency.js.map +1 -1
  345. package/es/extensions/forms/Field/Date/Date.d.ts +3 -1
  346. package/es/extensions/forms/Field/Date/Date.js +45 -9
  347. package/es/extensions/forms/Field/Date/Date.js.map +1 -1
  348. package/es/extensions/forms/Field/Expiry/Expiry.d.ts +1 -1
  349. package/es/extensions/forms/Field/Expiry/Expiry.js +20 -11
  350. package/es/extensions/forms/Field/Expiry/Expiry.js.map +1 -1
  351. package/es/extensions/forms/Field/Number/Number.d.ts +5 -1
  352. package/es/extensions/forms/Field/Number/Number.js +109 -31
  353. package/es/extensions/forms/Field/Number/Number.js.map +1 -1
  354. package/es/extensions/forms/Field/Number/style/dnb-number.css +192 -0
  355. package/es/extensions/forms/Field/Number/style/dnb-number.min.css +1 -0
  356. package/es/extensions/forms/Field/Number/style/dnb-number.scss +176 -0
  357. package/es/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.css +74 -0
  358. package/es/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.min.css +3 -0
  359. package/es/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.scss +81 -0
  360. package/es/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.css +15 -0
  361. package/es/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.min.css +5 -0
  362. package/es/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.scss +15 -0
  363. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js +7 -10
  364. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  365. package/es/extensions/forms/Field/Selection/Selection.d.ts +7 -1
  366. package/es/extensions/forms/Field/Selection/Selection.js +4 -9
  367. package/es/extensions/forms/Field/Selection/Selection.js.map +1 -1
  368. package/es/extensions/forms/Field/String/String.d.ts +0 -1
  369. package/es/extensions/forms/Field/String/String.js +23 -9
  370. package/es/extensions/forms/Field/String/String.js.map +1 -1
  371. package/es/extensions/forms/Field/Toggle/Toggle.js +0 -4
  372. package/es/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
  373. package/es/extensions/forms/FieldBlock/FieldBlock.d.ts +1 -1
  374. package/es/extensions/forms/FieldBlock/FieldBlock.js +14 -23
  375. package/es/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  376. package/es/extensions/forms/FieldBlock/style/dnb-field-block.css +9 -9
  377. package/es/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
  378. package/es/extensions/forms/FieldBlock/style/dnb-field-block.scss +2 -11
  379. package/es/extensions/forms/Form/Handler/Handler.js +1 -0
  380. package/es/extensions/forms/Form/Handler/Handler.js.map +1 -1
  381. package/{extensions/forms → es/extensions/forms/Form}/Visibility/Visibility.d.ts +5 -2
  382. package/es/extensions/forms/{Visibility → Form/Visibility}/Visibility.js +7 -2
  383. package/es/extensions/forms/Form/Visibility/Visibility.js.map +1 -0
  384. package/es/extensions/forms/Form/Visibility/index.js.map +1 -0
  385. package/es/extensions/forms/Form/hooks/useData.d.ts +10 -0
  386. package/es/extensions/forms/Form/hooks/useData.js +29 -0
  387. package/es/extensions/forms/Form/hooks/useData.js.map +1 -0
  388. package/es/extensions/forms/Form/index.d.ts +2 -0
  389. package/es/extensions/forms/Form/index.js +2 -0
  390. package/es/extensions/forms/Form/index.js.map +1 -1
  391. package/es/extensions/forms/Iterate/Array/Array.js +0 -4
  392. package/es/extensions/forms/Iterate/Array/Array.js.map +1 -1
  393. package/es/extensions/forms/hooks/useDataValue.js +26 -33
  394. package/es/extensions/forms/hooks/useDataValue.js.map +1 -1
  395. package/es/extensions/forms/hooks/useId.d.ts +1 -0
  396. package/es/extensions/forms/hooks/useId.js +11 -0
  397. package/es/extensions/forms/hooks/useId.js.map +1 -0
  398. package/es/extensions/forms/index.d.ts +6 -1
  399. package/es/extensions/forms/index.js +3 -1
  400. package/es/extensions/forms/index.js.map +1 -1
  401. package/es/extensions/forms/style/dnb-forms.css +214 -11
  402. package/es/extensions/forms/style/dnb-forms.min.css +1 -1
  403. package/es/extensions/forms/types.d.ts +16 -18
  404. package/es/extensions/forms/types.js.map +1 -1
  405. package/es/extensions/forms/utils/TestElement/TestElement.d.ts +5 -1
  406. package/es/extensions/forms/utils/TestElement/TestElement.js +1 -0
  407. package/es/extensions/forms/utils/TestElement/TestElement.js.map +1 -1
  408. package/es/shared/Eufemia.d.ts +1 -1
  409. package/es/shared/Eufemia.js +2 -2
  410. package/es/shared/Eufemia.js.map +1 -1
  411. package/es/shared/helpers/EventEmitter.d.ts +5 -0
  412. package/es/shared/helpers/EventEmitter.js.map +1 -1
  413. package/es/shared/helpers/useEventEmitter.d.ts +2 -0
  414. package/es/shared/helpers/useEventEmitter.js.map +1 -1
  415. package/es/shared/helpers/useSharedState.d.ts +15 -0
  416. package/es/shared/helpers/useSharedState.js +63 -0
  417. package/es/shared/helpers/useSharedState.js.map +1 -0
  418. package/es/style/core/utilities.scss +1 -2
  419. package/es/style/dnb-ui-components.css +232 -27
  420. package/es/style/dnb-ui-components.min.css +3 -3
  421. package/es/style/dnb-ui-extensions.css +214 -11
  422. package/es/style/dnb-ui-extensions.min.css +1 -1
  423. package/es/style/dnb-ui-forms.css +214 -11
  424. package/es/style/dnb-ui-forms.min.css +1 -1
  425. package/es/style/dnb-ui-forms.scss +1 -0
  426. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +498 -44
  427. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +9 -5
  428. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +230 -11
  429. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +5 -1
  430. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -0
  431. package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +230 -12
  432. package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +5 -1
  433. package/es/style/themes/theme-eiendom/eiendom-theme-forms.scss +2 -0
  434. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +541 -40
  435. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +8 -6
  436. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +289 -11
  437. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +3 -1
  438. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -0
  439. package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +289 -12
  440. package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +3 -1
  441. package/es/style/themes/theme-sbanken/sbanken-theme-forms.scss +2 -0
  442. package/es/style/themes/theme-ui/ui-theme-components.css +496 -44
  443. package/es/style/themes/theme-ui/ui-theme-components.min.css +9 -5
  444. package/es/style/themes/theme-ui/ui-theme-extensions.css +230 -11
  445. package/es/style/themes/theme-ui/ui-theme-extensions.min.css +5 -1
  446. package/es/style/themes/theme-ui/ui-theme-extensions.scss +1 -0
  447. package/es/style/themes/theme-ui/ui-theme-forms.css +230 -12
  448. package/es/style/themes/theme-ui/ui-theme-forms.min.css +5 -1
  449. package/es/style/themes/theme-ui/ui-theme-forms.scss +2 -0
  450. package/es/style/themes/theme-ui/ui-theme-tags.css +8 -10
  451. package/es/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  452. package/esm/dnb-ui-basis.min.mjs +1 -1
  453. package/esm/dnb-ui-components.min.mjs +1 -1
  454. package/esm/dnb-ui-elements.min.mjs +1 -1
  455. package/esm/dnb-ui-extensions.min.mjs +3 -3
  456. package/esm/dnb-ui-lib.min.mjs +1 -1
  457. package/extensions/forms/DataContext/Provider/Provider.d.ts +8 -4
  458. package/extensions/forms/DataContext/Provider/Provider.js +22 -4
  459. package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  460. package/extensions/forms/Field/ArraySelection/ArraySelection.js +15 -15
  461. package/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
  462. package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -2
  463. package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
  464. package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +12 -2
  465. package/extensions/forms/Field/Currency/Currency.d.ts +1 -5
  466. package/extensions/forms/Field/Currency/Currency.js.map +1 -1
  467. package/extensions/forms/Field/Date/Date.d.ts +3 -1
  468. package/extensions/forms/Field/Date/Date.js +48 -11
  469. package/extensions/forms/Field/Date/Date.js.map +1 -1
  470. package/extensions/forms/Field/Expiry/Expiry.d.ts +1 -1
  471. package/extensions/forms/Field/Expiry/Expiry.js +21 -11
  472. package/extensions/forms/Field/Expiry/Expiry.js.map +1 -1
  473. package/extensions/forms/Field/Number/Number.d.ts +5 -1
  474. package/extensions/forms/Field/Number/Number.js +110 -31
  475. package/extensions/forms/Field/Number/Number.js.map +1 -1
  476. package/extensions/forms/Field/Number/style/dnb-number.css +192 -0
  477. package/extensions/forms/Field/Number/style/dnb-number.min.css +1 -0
  478. package/extensions/forms/Field/Number/style/dnb-number.scss +176 -0
  479. package/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.css +74 -0
  480. package/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.min.css +3 -0
  481. package/extensions/forms/Field/Number/style/themes/dnb-number-theme-sbanken.scss +81 -0
  482. package/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.css +15 -0
  483. package/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.min.css +5 -0
  484. package/extensions/forms/Field/Number/style/themes/dnb-number-theme-ui.scss +15 -0
  485. package/extensions/forms/Field/PhoneNumber/PhoneNumber.js +7 -10
  486. package/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  487. package/extensions/forms/Field/Selection/Selection.d.ts +7 -1
  488. package/extensions/forms/Field/Selection/Selection.js +4 -9
  489. package/extensions/forms/Field/Selection/Selection.js.map +1 -1
  490. package/extensions/forms/Field/String/String.d.ts +0 -1
  491. package/extensions/forms/Field/String/String.js +23 -9
  492. package/extensions/forms/Field/String/String.js.map +1 -1
  493. package/extensions/forms/Field/Toggle/Toggle.js +0 -4
  494. package/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
  495. package/extensions/forms/FieldBlock/FieldBlock.d.ts +1 -1
  496. package/extensions/forms/FieldBlock/FieldBlock.js +16 -26
  497. package/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  498. package/extensions/forms/FieldBlock/style/dnb-field-block.css +9 -9
  499. package/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
  500. package/extensions/forms/FieldBlock/style/dnb-field-block.scss +2 -11
  501. package/extensions/forms/Form/Handler/Handler.js +1 -0
  502. package/extensions/forms/Form/Handler/Handler.js.map +1 -1
  503. package/{es/extensions/forms → extensions/forms/Form}/Visibility/Visibility.d.ts +5 -2
  504. package/extensions/forms/{Visibility → Form/Visibility}/Visibility.js +7 -2
  505. package/extensions/forms/Form/Visibility/Visibility.js.map +1 -0
  506. package/extensions/forms/Form/Visibility/index.js.map +1 -0
  507. package/extensions/forms/Form/hooks/useData.d.ts +10 -0
  508. package/extensions/forms/Form/hooks/useData.js +30 -0
  509. package/extensions/forms/Form/hooks/useData.js.map +1 -0
  510. package/extensions/forms/Form/index.d.ts +2 -0
  511. package/extensions/forms/Form/index.js +2 -0
  512. package/extensions/forms/Form/index.js.map +1 -1
  513. package/extensions/forms/Iterate/Array/Array.js +0 -4
  514. package/extensions/forms/Iterate/Array/Array.js.map +1 -1
  515. package/extensions/forms/hooks/useDataValue.js +26 -33
  516. package/extensions/forms/hooks/useDataValue.js.map +1 -1
  517. package/extensions/forms/hooks/useId.d.ts +1 -0
  518. package/extensions/forms/hooks/useId.js +11 -0
  519. package/extensions/forms/hooks/useId.js.map +1 -0
  520. package/extensions/forms/index.d.ts +6 -1
  521. package/extensions/forms/index.js +3 -1
  522. package/extensions/forms/index.js.map +1 -1
  523. package/extensions/forms/style/dnb-forms.css +214 -11
  524. package/extensions/forms/style/dnb-forms.min.css +1 -1
  525. package/extensions/forms/types.d.ts +16 -18
  526. package/extensions/forms/types.js.map +1 -1
  527. package/extensions/forms/utils/TestElement/TestElement.d.ts +5 -1
  528. package/extensions/forms/utils/TestElement/TestElement.js +1 -0
  529. package/extensions/forms/utils/TestElement/TestElement.js.map +1 -1
  530. package/package.json +1 -1
  531. package/shared/Eufemia.d.ts +1 -1
  532. package/shared/Eufemia.js +2 -2
  533. package/shared/Eufemia.js.map +1 -1
  534. package/shared/helpers/EventEmitter.d.ts +5 -0
  535. package/shared/helpers/EventEmitter.js.map +1 -1
  536. package/shared/helpers/useEventEmitter.d.ts +2 -0
  537. package/shared/helpers/useEventEmitter.js.map +1 -1
  538. package/shared/helpers/useSharedState.d.ts +15 -0
  539. package/shared/helpers/useSharedState.js +63 -0
  540. package/shared/helpers/useSharedState.js.map +1 -0
  541. package/style/core/utilities.scss +1 -2
  542. package/style/dnb-ui-components.css +232 -27
  543. package/style/dnb-ui-components.min.css +3 -3
  544. package/style/dnb-ui-extensions.css +214 -11
  545. package/style/dnb-ui-extensions.min.css +1 -1
  546. package/style/dnb-ui-forms.css +214 -11
  547. package/style/dnb-ui-forms.min.css +1 -1
  548. package/style/dnb-ui-forms.scss +1 -0
  549. package/style/themes/theme-eiendom/eiendom-theme-components.css +498 -44
  550. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +9 -5
  551. package/style/themes/theme-eiendom/eiendom-theme-extensions.css +230 -11
  552. package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +5 -1
  553. package/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -0
  554. package/style/themes/theme-eiendom/eiendom-theme-forms.css +230 -12
  555. package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +5 -1
  556. package/style/themes/theme-eiendom/eiendom-theme-forms.scss +2 -0
  557. package/style/themes/theme-sbanken/sbanken-theme-components.css +541 -40
  558. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +8 -6
  559. package/style/themes/theme-sbanken/sbanken-theme-extensions.css +289 -11
  560. package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +3 -1
  561. package/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -0
  562. package/style/themes/theme-sbanken/sbanken-theme-forms.css +289 -12
  563. package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +3 -1
  564. package/style/themes/theme-sbanken/sbanken-theme-forms.scss +2 -0
  565. package/style/themes/theme-ui/ui-theme-components.css +496 -44
  566. package/style/themes/theme-ui/ui-theme-components.min.css +9 -5
  567. package/style/themes/theme-ui/ui-theme-extensions.css +230 -11
  568. package/style/themes/theme-ui/ui-theme-extensions.min.css +5 -1
  569. package/style/themes/theme-ui/ui-theme-extensions.scss +1 -0
  570. package/style/themes/theme-ui/ui-theme-forms.css +230 -12
  571. package/style/themes/theme-ui/ui-theme-forms.min.css +5 -1
  572. package/style/themes/theme-ui/ui-theme-forms.scss +2 -0
  573. package/style/themes/theme-ui/ui-theme-tags.css +8 -10
  574. package/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  575. package/umd/dnb-ui-basis.min.js +1 -1
  576. package/umd/dnb-ui-components.min.js +1 -1
  577. package/umd/dnb-ui-elements.min.js +1 -1
  578. package/umd/dnb-ui-extensions.min.js +3 -3
  579. package/umd/dnb-ui-lib.min.js +1 -1
  580. package/cjs/extensions/forms/Visibility/Visibility.js.map +0 -1
  581. package/cjs/extensions/forms/Visibility/index.js.map +0 -1
  582. package/es/extensions/forms/Visibility/Visibility.js.map +0 -1
  583. package/es/extensions/forms/Visibility/index.js.map +0 -1
  584. package/extensions/forms/Visibility/Visibility.js.map +0 -1
  585. package/extensions/forms/Visibility/index.js.map +0 -1
  586. /package/cjs/extensions/forms/{Visibility → Form/Visibility}/index.d.ts +0 -0
  587. /package/cjs/extensions/forms/{Visibility → Form/Visibility}/index.js +0 -0
  588. /package/es/extensions/forms/{Visibility → Form/Visibility}/index.d.ts +0 -0
  589. /package/es/extensions/forms/{Visibility → Form/Visibility}/index.js +0 -0
  590. /package/extensions/forms/{Visibility → Form/Visibility}/index.d.ts +0 -0
  591. /package/extensions/forms/{Visibility → Form/Visibility}/index.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"FieldBlock.js","names":["React","useMemo","useContext","useState","useCallback","classnames","Space","FormLabel","FormStatus","FormError","FieldBlockContext","findElementInChildren","FieldBlock","props","nestedFieldBlockContext","className","forId","layout","label","labelDescription","labelSecondary","asFieldset","info","warning","error","errorProp","disabled","width","contentsWidth","size","contentClassName","children","rest","_objectWithoutProperties","_excluded","fieldErrorRecord","setFieldErrorRecord","showFieldErrorRecord","setShowFieldErrorRecord","setError","identifier","existing","_objectSpread","removed","newRecord","map","_toPropertyKey","setShowError","show","errors","Object","entries","filter","length","Error","message","join","undefined","mainClasses","gridClasses","enableFieldset","useEnableFieldset","state","stateStatus","Label","createElement","element","space","top","bottom","Provider","value","_extends","Fragment","id","text","toString","result","count","child","_child$props","_child$type","type","Boolean","_supportsSpacingProps"],"sources":["../../../../../src/extensions/forms/FieldBlock/FieldBlock.tsx"],"sourcesContent":["import React, { useMemo, useContext, useState, useCallback } from 'react'\nimport classnames from 'classnames'\nimport { Space, FormLabel, FormStatus } from '../../../components'\nimport { FormError, ComponentProps, FieldProps } from '../types'\nimport FieldBlockContext from './FieldBlockContext'\nimport { findElementInChildren } from '../../../shared/component-helper'\n\nexport type Props = Pick<\n FieldProps,\n | keyof ComponentProps\n | 'layout'\n | 'label'\n | 'labelDescription'\n | 'labelSecondary'\n | 'info'\n | 'warning'\n | 'error'\n | 'disabled'\n> & {\n forId?: string\n contentClassName?: string\n children: React.ReactNode\n /** Use true if you have more than one form element */\n asFieldset?: boolean\n /** Width of outer block element */\n width?: false | 'small' | 'medium' | 'large' | 'stretch'\n /** Width of contents block, while label etc can be wider if space is available */\n contentsWidth?: 'small' | 'medium' | 'large' | 'stretch'\n /** Typography size */\n size?: 'medium' | 'large'\n} & React.HTMLAttributes<HTMLDivElement>\n\nfunction FieldBlock(props: Props) {\n const nestedFieldBlockContext = useContext(FieldBlockContext)\n\n const {\n className,\n forId,\n layout = 'vertical',\n label,\n labelDescription,\n labelSecondary,\n asFieldset,\n info,\n warning,\n error: errorProp,\n disabled,\n width,\n contentsWidth,\n size,\n contentClassName,\n children,\n ...rest\n } = props\n\n const [fieldErrorRecord, setFieldErrorRecord] = useState<\n Record<string, FormError>\n >({})\n const [showFieldErrorRecord, setShowFieldErrorRecord] = useState<\n Record<string, boolean>\n >({})\n\n const setError = useCallback(\n (identifier, error) => {\n if (nestedFieldBlockContext) {\n // If this FieldBlock is inside another one, forward the call to the outer one\n nestedFieldBlockContext.setError(identifier, error)\n return\n }\n\n setFieldErrorRecord((existing) => {\n if (error) {\n return {\n ...existing,\n [identifier]: error,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [identifier]: removed, ...newRecord } = existing\n return newRecord\n }\n })\n },\n [nestedFieldBlockContext]\n )\n\n const setShowError = useCallback(\n (identifier, show) => {\n if (nestedFieldBlockContext) {\n // If this FieldBlock is inside another one, forward the call to the outer one\n nestedFieldBlockContext.setShowError(identifier, show)\n return\n }\n\n setShowFieldErrorRecord((existing) => {\n if (show) {\n return {\n ...existing,\n [identifier]: true,\n }\n } else {\n const { [identifier]: removed, ...newRecord } = existing\n return newRecord\n }\n })\n },\n [nestedFieldBlockContext]\n )\n\n const error = useMemo(() => {\n if (errorProp) {\n return errorProp\n }\n const errors = Object.entries(fieldErrorRecord)\n .filter(([identifier]) => showFieldErrorRecord[identifier] === true)\n .map(([, error]) => error)\n return errors.length > 0\n ? new Error(errors.map((error) => error.message).join(' | '))\n : undefined\n }, [errorProp, fieldErrorRecord, showFieldErrorRecord])\n\n const mainClasses = classnames(\n 'dnb-forms-field-block',\n width !== undefined && `dnb-forms-field-block--width-${width}`,\n className\n )\n const gridClasses = classnames(\n 'dnb-forms-field-block__grid',\n `dnb-forms-field-block--layout-${layout}`\n )\n\n // A child component with a label was found, use fieldset/legend instead of div/label\n const enableFieldset = useEnableFieldset({\n label,\n asFieldset,\n children,\n nestedFieldBlockContext,\n })\n\n const state = error || warning || info\n const stateStatus = error\n ? 'error'\n : warning\n ? 'warn'\n : info\n ? 'info'\n : null\n\n const Label = ({ children }) => {\n return (\n <FormLabel\n element={enableFieldset ? 'legend' : 'label'}\n forId={enableFieldset ? undefined : forId}\n space={{ top: 0, bottom: 'x-small' }}\n size={size}\n disabled={disabled}\n >\n {children}\n </FormLabel>\n )\n }\n\n return (\n <FieldBlockContext.Provider\n value={{\n setError,\n setShowError,\n }}\n >\n <Space\n element={enableFieldset ? 'fieldset' : 'div'} // use fieldset and legend to enhance a11y\n className={mainClasses}\n {...rest}\n >\n <div className={gridClasses}>\n {labelDescription || labelSecondary ? (\n <div className=\"dnb-forms-field-block__label\">\n {label || labelDescription ? (\n <Label>\n {label}\n {labelDescription && (\n <span className=\"dnb-forms-field-block__label-description\">\n {labelDescription}\n </span>\n )}\n </Label>\n ) : (\n <>&nbsp;</>\n )}\n {labelSecondary && (\n <span className=\"dnb-forms-field-block__label-secondary\">\n {labelSecondary}\n </span>\n )}\n </div>\n ) : (\n label && <Label>{label}</Label>\n )}\n\n <div\n className={classnames(\n 'dnb-forms-field-block__contents',\n contentsWidth !== undefined &&\n `dnb-forms-field-block__contents--width-${contentsWidth}`,\n contentClassName\n )}\n >\n {children}\n </div>\n\n {stateStatus && (\n <div className=\"dnb-forms-field-block__status\">\n <FormStatus\n state={stateStatus}\n id={forId ? `${forId}-form-status` : undefined}\n text={\n error?.message ||\n (state instanceof Error && state.message) ||\n (state instanceof FormError && state.message) ||\n state?.toString()\n }\n label={label as string}\n space={{ top: 'x-small' }}\n />\n </div>\n )}\n </div>\n </Space>\n </FieldBlockContext.Provider>\n )\n}\n\nfunction useEnableFieldset({\n label,\n asFieldset,\n children,\n nestedFieldBlockContext,\n}) {\n return useMemo(() => {\n let result = asFieldset\n\n if (label && !result && !nestedFieldBlockContext) {\n let count = 0\n\n findElementInChildren(children, (child: React.ReactElement) => {\n if (\n child?.props?.label ||\n child?.type?.['_formElement'] === true\n ) {\n count++\n }\n if (count > 1) {\n return (result = true)\n }\n })\n }\n\n return Boolean(result)\n }, [asFieldset, children, label, nestedFieldBlockContext])\n}\n\nFieldBlock._supportsSpacingProps = true\nexport default FieldBlock\n"],"mappings":"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"}
1
+ {"version":3,"file":"FieldBlock.js","names":["React","useMemo","useContext","useState","useCallback","classnames","Space","FormLabel","FormStatus","FormError","FieldBlockContext","findElementInChildren","FieldBlock","props","nestedFieldBlockContext","className","forId","layout","label","asFieldset","info","warning","error","errorProp","disabled","width","contentsWidth","size","contentClassName","children","rest","_objectWithoutProperties","_excluded","fieldErrorRecord","setFieldErrorRecord","showFieldErrorRecord","setShowFieldErrorRecord","setError","identifier","existing","_objectSpread","removed","newRecord","map","_toPropertyKey","setShowError","show","errors","Object","entries","filter","length","Error","message","join","undefined","mainClasses","gridClasses","enableFieldset","useEnableFieldset","state","stateStatus","labelProps","element","space","top","bottom","createElement","Provider","value","_extends","id","text","toString","result","count","child","_child$props","_child$type","type","Boolean","_supportsSpacingProps"],"sources":["../../../../../src/extensions/forms/FieldBlock/FieldBlock.tsx"],"sourcesContent":["import React, { useMemo, useContext, useState, useCallback } from 'react'\nimport classnames from 'classnames'\nimport { Space, FormLabel, FormStatus } from '../../../components'\nimport { FormError, ComponentProps, FieldProps } from '../types'\nimport FieldBlockContext from './FieldBlockContext'\nimport { findElementInChildren } from '../../../shared/component-helper'\nimport type { FormLabelAllProps } from '../../../components/FormLabel'\n\nexport type Props = Pick<\n FieldProps,\n | keyof ComponentProps\n | 'layout'\n | 'label'\n | 'info'\n | 'warning'\n | 'error'\n | 'disabled'\n> & {\n forId?: string\n contentClassName?: string\n children: React.ReactNode\n /** Use true if you have more than one form element */\n asFieldset?: boolean\n /** Width of outer block element */\n width?: false | 'small' | 'medium' | 'large' | 'stretch'\n /** Width of contents block, while label etc can be wider if space is available */\n contentsWidth?: 'small' | 'medium' | 'large' | 'stretch'\n /** Typography size */\n size?: 'medium' | 'large'\n} & React.HTMLAttributes<HTMLDivElement>\n\nfunction FieldBlock(props: Props) {\n const nestedFieldBlockContext = useContext(FieldBlockContext)\n\n const {\n className,\n forId,\n layout = 'vertical',\n label,\n asFieldset,\n info,\n warning,\n error: errorProp,\n disabled,\n width,\n contentsWidth,\n size,\n contentClassName,\n children,\n ...rest\n } = props\n\n const [fieldErrorRecord, setFieldErrorRecord] = useState<\n Record<string, FormError>\n >({})\n const [showFieldErrorRecord, setShowFieldErrorRecord] = useState<\n Record<string, boolean>\n >({})\n\n const setError = useCallback(\n (identifier, error) => {\n if (nestedFieldBlockContext) {\n // If this FieldBlock is inside another one, forward the call to the outer one\n nestedFieldBlockContext.setError(identifier, error)\n return\n }\n\n setFieldErrorRecord((existing) => {\n if (error) {\n return {\n ...existing,\n [identifier]: error,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [identifier]: removed, ...newRecord } = existing\n return newRecord\n }\n })\n },\n [nestedFieldBlockContext]\n )\n\n const setShowError = useCallback(\n (identifier, show) => {\n if (nestedFieldBlockContext) {\n // If this FieldBlock is inside another one, forward the call to the outer one\n nestedFieldBlockContext.setShowError(identifier, show)\n return\n }\n\n setShowFieldErrorRecord((existing) => {\n if (show) {\n return {\n ...existing,\n [identifier]: true,\n }\n } else {\n const { [identifier]: removed, ...newRecord } = existing\n return newRecord\n }\n })\n },\n [nestedFieldBlockContext]\n )\n\n const error = useMemo(() => {\n if (errorProp) {\n return errorProp\n }\n const errors = Object.entries(fieldErrorRecord)\n .filter(([identifier]) => showFieldErrorRecord[identifier] === true)\n .map(([, error]) => error)\n return errors.length > 0\n ? new Error(errors.map((error) => error.message).join(' | '))\n : undefined\n }, [errorProp, fieldErrorRecord, showFieldErrorRecord])\n\n const mainClasses = classnames(\n 'dnb-forms-field-block',\n width !== undefined && `dnb-forms-field-block--width-${width}`,\n className\n )\n const gridClasses = classnames(\n 'dnb-forms-field-block__grid',\n `dnb-forms-field-block--layout-${layout}`\n )\n\n // A child component with a label was found, use fieldset/legend instead of div/label\n const enableFieldset = useEnableFieldset({\n label,\n asFieldset,\n children,\n nestedFieldBlockContext,\n })\n\n const state = error || warning || info\n const stateStatus = error\n ? 'error'\n : warning\n ? 'warn'\n : info\n ? 'info'\n : null\n\n const labelProps: FormLabelAllProps = {\n element: enableFieldset ? 'legend' : 'label',\n forId: enableFieldset ? undefined : forId,\n space: { top: 0, bottom: 'x-small' },\n size,\n disabled,\n }\n\n return (\n <FieldBlockContext.Provider\n value={{\n setError,\n setShowError,\n }}\n >\n <Space\n element={enableFieldset ? 'fieldset' : 'div'} // use fieldset and legend to enhance a11y\n className={mainClasses}\n {...rest}\n >\n <div className={gridClasses}>\n {label && <FormLabel {...labelProps}>{label}</FormLabel>}\n\n <div\n className={classnames(\n 'dnb-forms-field-block__contents',\n contentsWidth !== undefined &&\n `dnb-forms-field-block__contents--width-${contentsWidth}`,\n contentClassName\n )}\n >\n {children}\n </div>\n\n {stateStatus && (\n <div className=\"dnb-forms-field-block__status\">\n <FormStatus\n state={stateStatus}\n id={forId ? `${forId}-form-status` : undefined}\n text={\n error?.message ||\n (state instanceof Error && state.message) ||\n (state instanceof FormError && state.message) ||\n state?.toString()\n }\n label={label as string}\n space={{ top: 'x-small' }}\n />\n </div>\n )}\n </div>\n </Space>\n </FieldBlockContext.Provider>\n )\n}\n\nfunction useEnableFieldset({\n label,\n asFieldset,\n children,\n nestedFieldBlockContext,\n}) {\n return useMemo(() => {\n if (asFieldset === false) {\n return false\n }\n\n let result = asFieldset\n\n if (label && !result && !nestedFieldBlockContext) {\n let count = 0\n\n findElementInChildren(children, (child: React.ReactElement) => {\n if (\n child?.props?.label ||\n child?.type?.['_formElement'] === true\n ) {\n count++\n }\n if (count > 1) {\n return (result = true)\n }\n })\n }\n\n return Boolean(result)\n }, [asFieldset, children, label, nestedFieldBlockContext])\n}\n\nFieldBlock._supportsSpacingProps = true\nexport default FieldBlock\n"],"mappings":"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"}
@@ -27,6 +27,15 @@ fieldset.dnb-forms-field-block:not([class*=space__left]) {
27
27
  .dnb-forms-field-block__grid {
28
28
  display: grid;
29
29
  }
30
+ @media screen and (max-width: 40em) {
31
+ .dnb-forms-field-block__grid {
32
+ flex-wrap: wrap;
33
+ }
34
+ .dnb-forms-field-block__grid > .dnb-form-label {
35
+ margin-bottom: 0.5rem;
36
+ margin-top: 0.5rem;
37
+ }
38
+ }
30
39
  .dnb-forms-field-block--layout-vertical {
31
40
  grid-template-columns: auto;
32
41
  grid-template-areas: "label" "contents" "status";
@@ -56,15 +65,6 @@ fieldset.dnb-forms-field-block:not([class*=space__left]) {
56
65
  justify-content: space-between;
57
66
  align-items: center;
58
67
  }
59
- .dnb-forms-field-block__label-description {
60
- margin-left: 0.3em;
61
- color: var(--color-black-55);
62
- font-size: var(--font-size-small);
63
- }
64
- .dnb-forms-field-block__label-secondary {
65
- color: var(--color-black-55);
66
- font-size: var(--font-size-small);
67
- }
68
68
  .dnb-forms-field-block__status {
69
69
  grid-area: status;
70
70
  }
@@ -1 +1 @@
1
- :root{--forms-field-width--small:5rem;--forms-field-width--medium:11rem;--forms-field-width--large:21rem}fieldset.dnb-forms-field-block{border:none;padding:0}fieldset.dnb-forms-field-block:not([class*=space__top]){margin-top:0}fieldset.dnb-forms-field-block:not([class*=space__right]){margin-right:0}fieldset.dnb-forms-field-block:not([class*=space__bottom]){margin-bottom:0}fieldset.dnb-forms-field-block:not([class*=space__left]){margin-left:0}.dnb-forms-field-block__grid{display:grid}.dnb-forms-field-block--layout-vertical{grid-template-areas:"label" "contents" "status";grid-template-columns:auto}.dnb-forms-field-block--layout-horizontal{grid-template-areas:"label contents" "status status";grid-template-columns:fit-content(100%) auto}.dnb-forms-field-block--width-stretch{flex-grow:1}@media screen and (min-width:30em){.dnb-forms-field-block--width-small{width:var(--forms-field-width--small)}.dnb-forms-field-block--width-medium{width:var(--forms-field-width--medium)}.dnb-forms-field-block--width-large{width:var(--forms-field-width--large)}}.dnb-forms-field-block__label{align-items:center;display:flex;flex-flow:row;grid-area:label;justify-content:space-between}.dnb-forms-field-block__label-description{margin-left:.3em}.dnb-forms-field-block__label-description,.dnb-forms-field-block__label-secondary{color:var(--color-black-55);font-size:var(--font-size-small)}.dnb-forms-field-block__status{grid-area:status}.dnb-forms-field-block__contents{grid-area:contents}.dnb-forms-field-block__contents--width-stretch{width:100%}@media screen and (min-width:30em){.dnb-forms-field-block__contents--width-small{width:var(--forms-field-width--small)}.dnb-forms-field-block__contents--width-medium{width:var(--forms-field-width--medium)}.dnb-forms-field-block__contents--width-large{width:var(--forms-field-width--large)}}
1
+ :root{--forms-field-width--small:5rem;--forms-field-width--medium:11rem;--forms-field-width--large:21rem}fieldset.dnb-forms-field-block{border:none;padding:0}fieldset.dnb-forms-field-block:not([class*=space__top]){margin-top:0}fieldset.dnb-forms-field-block:not([class*=space__right]){margin-right:0}fieldset.dnb-forms-field-block:not([class*=space__bottom]){margin-bottom:0}fieldset.dnb-forms-field-block:not([class*=space__left]){margin-left:0}.dnb-forms-field-block__grid{display:grid}@media screen and (max-width:40em){.dnb-forms-field-block__grid{flex-wrap:wrap}.dnb-forms-field-block__grid>.dnb-form-label{margin-bottom:.5rem;margin-top:.5rem}}.dnb-forms-field-block--layout-vertical{grid-template-areas:"label" "contents" "status";grid-template-columns:auto}.dnb-forms-field-block--layout-horizontal{grid-template-areas:"label contents" "status status";grid-template-columns:fit-content(100%) auto}.dnb-forms-field-block--width-stretch{flex-grow:1}@media screen and (min-width:30em){.dnb-forms-field-block--width-small{width:var(--forms-field-width--small)}.dnb-forms-field-block--width-medium{width:var(--forms-field-width--medium)}.dnb-forms-field-block--width-large{width:var(--forms-field-width--large)}}.dnb-forms-field-block__label{align-items:center;display:flex;flex-flow:row;grid-area:label;justify-content:space-between}.dnb-forms-field-block__status{grid-area:status}.dnb-forms-field-block__contents{grid-area:contents}.dnb-forms-field-block__contents--width-stretch{width:100%}@media screen and (min-width:30em){.dnb-forms-field-block__contents--width-small{width:var(--forms-field-width--small)}.dnb-forms-field-block__contents--width-medium{width:var(--forms-field-width--medium)}.dnb-forms-field-block__contents--width-large{width:var(--forms-field-width--large)}}
@@ -8,6 +8,8 @@ fieldset.dnb-forms-field-block {
8
8
  .dnb-forms-field-block {
9
9
  &__grid {
10
10
  display: grid;
11
+
12
+ @include formLabelWrap();
11
13
  }
12
14
 
13
15
  &--layout {
@@ -52,17 +54,6 @@ fieldset.dnb-forms-field-block {
52
54
  align-items: center;
53
55
  }
54
56
 
55
- &__label-description {
56
- margin-left: 0.3em;
57
- color: var(--color-black-55);
58
- font-size: var(--font-size-small);
59
- }
60
-
61
- &__label-secondary {
62
- color: var(--color-black-55);
63
- font-size: var(--font-size-small);
64
- }
65
-
66
57
  &__status {
67
58
  grid-area: status;
68
59
  }
@@ -21,6 +21,7 @@ export default function FormHandler(_ref) {
21
21
  } = _ref,
22
22
  rest = _objectWithoutProperties(_ref, _excluded);
23
23
  const providerProps = {
24
+ id: rest.id,
24
25
  defaultData,
25
26
  data,
26
27
  schema,
@@ -1 +1 @@
1
- {"version":3,"file":"Handler.js","names":["React","Provider","FormElement","FormHandler","_ref","children","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","scrollTopOnSubmit","sessionStorageId","autoComplete","rest","_objectWithoutProperties","_excluded","providerProps","args","createElement"],"sources":["../../../../../../src/extensions/forms/Form/Handler/Handler.tsx"],"sourcesContent":["import React from 'react'\nimport { JsonObject } from 'json-pointer'\nimport Provider, {\n Props as ProviderProps,\n} from '../../DataContext/Provider'\nimport FormElement from '../Element'\nimport type { ElementAllProps } from '../../../../elements/Element'\n\nexport type Props = Omit<\n ElementAllProps,\n 'data' | 'as' | 'autoComplete'\n> & {\n /**\n * Will enable autoComplete for all nested Field.String fields\n */\n autoComplete?: boolean\n}\n\nexport default function FormHandler<Data extends JsonObject>({\n children,\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n scrollTopOnSubmit,\n sessionStorageId,\n autoComplete,\n ...rest\n}: ProviderProps<Data> & Omit<Props, keyof ProviderProps<Data>>) {\n const providerProps = {\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit: (...args) => {\n if (typeof onSubmit === 'function') {\n onSubmit(...args)\n }\n },\n onSubmitRequest,\n scrollTopOnSubmit,\n sessionStorageId,\n autoComplete,\n } as Omit<ProviderProps<Data>, 'children'>\n\n return (\n <Provider {...providerProps}>\n <FormElement {...rest}>{children}</FormElement>\n </Provider>\n )\n}\n"],"mappings":";;;;AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,OAAOC,QAAQ,MAER,4BAA4B;AACnC,OAAOC,WAAW,MAAM,YAAY;AAapC,eAAe,SAASC,WAAWA,CAAAC,IAAA,EAa8B;EAAA,IAbJ;MAC3DC,QAAQ;MACRC,WAAW;MACXC,IAAI;MACJC,MAAM;MACNC,QAAQ;MACRC,YAAY;MACZC,QAAQ;MACRC,eAAe;MACfC,iBAAiB;MACjBC,gBAAgB;MAChBC;IAE4D,CAAC,GAAAX,IAAA;IAD1DY,IAAI,GAAAC,wBAAA,CAAAb,IAAA,EAAAc,SAAA;EAEP,MAAMC,aAAa,GAAG;IACpBb,WAAW;IACXC,IAAI;IACJC,MAAM;IACNC,QAAQ;IACRC,YAAY;IACZC,QAAQ,EAAEA,CAAC,GAAGS,IAAI,KAAK;MACrB,IAAI,OAAOT,QAAQ,KAAK,UAAU,EAAE;QAClCA,QAAQ,CAAC,GAAGS,IAAI,CAAC;MACnB;IACF,CAAC;IACDR,eAAe;IACfC,iBAAiB;IACjBC,gBAAgB;IAChBC;EACF,CAA0C;EAE1C,OACEf,KAAA,CAAAqB,aAAA,CAACpB,QAAQ,EAAKkB,aAAa,EACzBnB,KAAA,CAAAqB,aAAA,CAACnB,WAAW,EAAKc,IAAI,EAAGX,QAAsB,CACtC,CAAC;AAEf"}
1
+ {"version":3,"file":"Handler.js","names":["React","Provider","FormElement","FormHandler","_ref","children","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","scrollTopOnSubmit","sessionStorageId","autoComplete","rest","_objectWithoutProperties","_excluded","providerProps","id","args","createElement"],"sources":["../../../../../../src/extensions/forms/Form/Handler/Handler.tsx"],"sourcesContent":["import React from 'react'\nimport { JsonObject } from 'json-pointer'\nimport Provider, {\n Props as ProviderProps,\n} from '../../DataContext/Provider'\nimport FormElement from '../Element'\nimport type { ElementAllProps } from '../../../../elements/Element'\n\nexport type Props = Omit<\n ElementAllProps,\n 'data' | 'as' | 'autoComplete'\n> & {\n /**\n * Will enable autoComplete for all nested Field.String fields\n */\n autoComplete?: boolean\n}\n\nexport default function FormHandler<Data extends JsonObject>({\n children,\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n scrollTopOnSubmit,\n sessionStorageId,\n autoComplete,\n ...rest\n}: ProviderProps<Data> & Omit<Props, keyof ProviderProps<Data>>) {\n const providerProps = {\n id: rest.id,\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit: (...args) => {\n if (typeof onSubmit === 'function') {\n onSubmit(...args)\n }\n },\n onSubmitRequest,\n scrollTopOnSubmit,\n sessionStorageId,\n autoComplete,\n } as Omit<ProviderProps<Data>, 'children'>\n\n return (\n <Provider {...providerProps}>\n <FormElement {...rest}>{children}</FormElement>\n </Provider>\n )\n}\n"],"mappings":";;;;AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,OAAOC,QAAQ,MAER,4BAA4B;AACnC,OAAOC,WAAW,MAAM,YAAY;AAapC,eAAe,SAASC,WAAWA,CAAAC,IAAA,EAa8B;EAAA,IAbJ;MAC3DC,QAAQ;MACRC,WAAW;MACXC,IAAI;MACJC,MAAM;MACNC,QAAQ;MACRC,YAAY;MACZC,QAAQ;MACRC,eAAe;MACfC,iBAAiB;MACjBC,gBAAgB;MAChBC;IAE4D,CAAC,GAAAX,IAAA;IAD1DY,IAAI,GAAAC,wBAAA,CAAAb,IAAA,EAAAc,SAAA;EAEP,MAAMC,aAAa,GAAG;IACpBC,EAAE,EAAEJ,IAAI,CAACI,EAAE;IACXd,WAAW;IACXC,IAAI;IACJC,MAAM;IACNC,QAAQ;IACRC,YAAY;IACZC,QAAQ,EAAEA,CAAC,GAAGU,IAAI,KAAK;MACrB,IAAI,OAAOV,QAAQ,KAAK,UAAU,EAAE;QAClCA,QAAQ,CAAC,GAAGU,IAAI,CAAC;MACnB;IACF,CAAC;IACDT,eAAe;IACfC,iBAAiB;IACjBC,gBAAgB;IAChBC;EACF,CAA0C;EAE1C,OACEf,KAAA,CAAAsB,aAAA,CAACrB,QAAQ,EAAKkB,aAAa,EACzBnB,KAAA,CAAAsB,aAAA,CAACpB,WAAW,EAAKc,IAAI,EAAGX,QAAsB,CACtC,CAAC;AAEf"}
@@ -13,12 +13,15 @@ export type Props = {
13
13
  pathTrue?: string;
14
14
  /** Given data context path must be false to show children */
15
15
  pathFalse?: string;
16
+ /** Given data context path must match, as well as the "whenValue" value */
17
+ pathValue?: string;
18
+ whenValue?: unknown;
16
19
  /** Infer visibility calling given derivative function with the whole data set. Should return true/false for visibility. */
17
20
  inferData?: (data: unknown) => boolean;
18
21
  children: React.ReactNode;
19
22
  };
20
- declare function Visibility({ visible, pathDefined, pathUndefined, pathTruthy, pathFalsy, pathTrue, pathFalse, inferData, children, }: Props): import("react/jsx-runtime").JSX.Element;
23
+ declare function Visibility({ visible, pathDefined, pathUndefined, pathTruthy, pathFalsy, pathTrue, pathFalse, pathValue, whenValue, inferData, children, }: Props): import("react/jsx-runtime").JSX.Element;
21
24
  declare namespace Visibility {
22
- var _supportsSpacingProps: boolean;
25
+ var _supportsSpacingProps: string;
23
26
  }
24
27
  export default Visibility;
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React, { useContext } from 'react';
4
4
  import pointer from 'json-pointer';
5
- import * as DataContext from '../DataContext';
5
+ import * as DataContext from '../../DataContext';
6
6
  function Visibility({
7
7
  visible,
8
8
  pathDefined,
@@ -11,6 +11,8 @@ function Visibility({
11
11
  pathFalsy,
12
12
  pathTrue,
13
13
  pathFalse,
14
+ pathValue,
15
+ whenValue,
14
16
  inferData,
15
17
  children
16
18
  }) {
@@ -36,11 +38,14 @@ function Visibility({
36
38
  if (pathFalse && (!pointer.has(dataContext.data, pathFalse) || pointer.get(dataContext.data, pathFalse) !== false)) {
37
39
  return null;
38
40
  }
41
+ if (pathValue && !(pointer.has(dataContext.data, pathValue) && pointer.get(dataContext.data, pathValue) === whenValue)) {
42
+ return null;
43
+ }
39
44
  if (inferData && !inferData(dataContext.data)) {
40
45
  return null;
41
46
  }
42
47
  return React.createElement(React.Fragment, null, children);
43
48
  }
44
- Visibility._supportsSpacingProps = true;
49
+ Visibility._supportsSpacingProps = 'children';
45
50
  export default Visibility;
46
51
  //# sourceMappingURL=Visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Visibility.js","names":["React","useContext","pointer","DataContext","Visibility","visible","pathDefined","pathUndefined","pathTruthy","pathFalsy","pathTrue","pathFalse","pathValue","whenValue","inferData","children","dataContext","Context","has","data","get","Boolean","createElement","Fragment","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Form/Visibility/Visibility.tsx"],"sourcesContent":["import React, { useContext } from 'react'\nimport pointer from 'json-pointer'\nimport * as DataContext from '../../DataContext'\n\nexport type Props = {\n visible?: boolean\n /** Given data context path must be defined to show children */\n pathDefined?: string\n /** Given data context path must be undefined to show children */\n pathUndefined?: string\n /** Given data context path must be truthy to show children */\n pathTruthy?: string\n /** Given data context path must be falsy to show children */\n pathFalsy?: string\n /** Given data context path must be true to show children */\n pathTrue?: string\n /** Given data context path must be false to show children */\n pathFalse?: string\n /** Given data context path must match, as well as the \"whenValue\" value */\n pathValue?: string\n whenValue?: unknown\n /** Infer visibility calling given derivative function with the whole data set. Should return true/false for visibility. */\n inferData?: (data: unknown) => boolean\n children: React.ReactNode\n}\n\nfunction Visibility({\n visible,\n pathDefined,\n pathUndefined,\n pathTruthy,\n pathFalsy,\n pathTrue,\n pathFalse,\n pathValue,\n whenValue,\n inferData,\n children,\n}: Props) {\n const dataContext = useContext(DataContext.Context)\n\n if (visible === false) {\n return null\n }\n\n if (pathDefined && !pointer.has(dataContext.data, pathDefined)) {\n return null\n }\n if (pathUndefined && pointer.has(dataContext.data, pathUndefined)) {\n return null\n }\n\n if (\n pathTruthy &&\n (!pointer.has(dataContext.data, pathTruthy) ||\n !pointer.get(dataContext.data, pathTruthy))\n ) {\n return null\n }\n if (\n pathFalsy &&\n pointer.has(dataContext.data, pathFalsy) &&\n Boolean(pointer.get(dataContext.data, pathFalsy))\n ) {\n return null\n }\n\n if (\n pathTrue &&\n (!pointer.has(dataContext.data, pathTrue) ||\n pointer.get(dataContext.data, pathTrue) !== true)\n ) {\n return null\n }\n if (\n pathFalse &&\n (!pointer.has(dataContext.data, pathFalse) ||\n pointer.get(dataContext.data, pathFalse) !== false)\n ) {\n return null\n }\n\n if (\n pathValue &&\n !(\n pointer.has(dataContext.data, pathValue) &&\n pointer.get(dataContext.data, pathValue) === whenValue\n )\n ) {\n return null\n }\n\n if (inferData && !inferData(dataContext.data)) {\n return null\n }\n\n return <>{children}</>\n}\n\nVisibility._supportsSpacingProps = 'children'\nexport default Visibility\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,OAAO,MAAM,cAAc;AAClC,OAAO,KAAKC,WAAW,MAAM,mBAAmB;AAwBhD,SAASC,UAAUA,CAAC;EAClBC,OAAO;EACPC,WAAW;EACXC,aAAa;EACbC,UAAU;EACVC,SAAS;EACTC,QAAQ;EACRC,SAAS;EACTC,SAAS;EACTC,SAAS;EACTC,SAAS;EACTC;AACK,CAAC,EAAE;EACR,MAAMC,WAAW,GAAGf,UAAU,CAACE,WAAW,CAACc,OAAO,CAAC;EAEnD,IAAIZ,OAAO,KAAK,KAAK,EAAE;IACrB,OAAO,IAAI;EACb;EAEA,IAAIC,WAAW,IAAI,CAACJ,OAAO,CAACgB,GAAG,CAACF,WAAW,CAACG,IAAI,EAAEb,WAAW,CAAC,EAAE;IAC9D,OAAO,IAAI;EACb;EACA,IAAIC,aAAa,IAAIL,OAAO,CAACgB,GAAG,CAACF,WAAW,CAACG,IAAI,EAAEZ,aAAa,CAAC,EAAE;IACjE,OAAO,IAAI;EACb;EAEA,IACEC,UAAU,KACT,CAACN,OAAO,CAACgB,GAAG,CAACF,WAAW,CAACG,IAAI,EAAEX,UAAU,CAAC,IACzC,CAACN,OAAO,CAACkB,GAAG,CAACJ,WAAW,CAACG,IAAI,EAAEX,UAAU,CAAC,CAAC,EAC7C;IACA,OAAO,IAAI;EACb;EACA,IACEC,SAAS,IACTP,OAAO,CAACgB,GAAG,CAACF,WAAW,CAACG,IAAI,EAAEV,SAAS,CAAC,IACxCY,OAAO,CAACnB,OAAO,CAACkB,GAAG,CAACJ,WAAW,CAACG,IAAI,EAAEV,SAAS,CAAC,CAAC,EACjD;IACA,OAAO,IAAI;EACb;EAEA,IACEC,QAAQ,KACP,CAACR,OAAO,CAACgB,GAAG,CAACF,WAAW,CAACG,IAAI,EAAET,QAAQ,CAAC,IACvCR,OAAO,CAACkB,GAAG,CAACJ,WAAW,CAACG,IAAI,EAAET,QAAQ,CAAC,KAAK,IAAI,CAAC,EACnD;IACA,OAAO,IAAI;EACb;EACA,IACEC,SAAS,KACR,CAACT,OAAO,CAACgB,GAAG,CAACF,WAAW,CAACG,IAAI,EAAER,SAAS,CAAC,IACxCT,OAAO,CAACkB,GAAG,CAACJ,WAAW,CAACG,IAAI,EAAER,SAAS,CAAC,KAAK,KAAK,CAAC,EACrD;IACA,OAAO,IAAI;EACb;EAEA,IACEC,SAAS,IACT,EACEV,OAAO,CAACgB,GAAG,CAACF,WAAW,CAACG,IAAI,EAAEP,SAAS,CAAC,IACxCV,OAAO,CAACkB,GAAG,CAACJ,WAAW,CAACG,IAAI,EAAEP,SAAS,CAAC,KAAKC,SAAS,CACvD,EACD;IACA,OAAO,IAAI;EACb;EAEA,IAAIC,SAAS,IAAI,CAACA,SAAS,CAACE,WAAW,CAACG,IAAI,CAAC,EAAE;IAC7C,OAAO,IAAI;EACb;EAEA,OAAOnB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QAAGR,QAAW,CAAC;AACxB;AAEAX,UAAU,CAACoB,qBAAqB,GAAG,UAAU;AAC7C,eAAepB,UAAU"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["default"],"sources":["../../../../../../src/extensions/forms/Form/Visibility/index.ts"],"sourcesContent":["export { default } from './Visibility'\nexport * from './Visibility'\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc;AACtC,cAAc,cAAc"}
@@ -0,0 +1,10 @@
1
+ import type { Path } from '../../DataContext/Provider';
2
+ type PathImpl<T, P extends string> = P extends `${infer Key}/${infer Rest}` ? Key extends keyof T ? Rest extends '' ? T[Key] : PathImpl<T[Key], Rest> : never : T[P & keyof T];
3
+ type PathType<T, P extends string> = P extends `/${infer Rest}` ? PathImpl<T, Rest> : never;
4
+ type UseDataReturnUpdate<Data> = <P extends Path>(path: P, fn: (value: PathType<Data, P>) => unknown) => void;
5
+ type UseDataReturn<Data> = {
6
+ data: Data;
7
+ update: UseDataReturnUpdate<Data>;
8
+ };
9
+ export default function useData<Data>(id: string, data?: Data): UseDataReturn<Data>;
10
+ export {};
@@ -0,0 +1,29 @@
1
+ "use client";
2
+
3
+ import { useCallback, useEffect, useRef } from 'react';
4
+ import pointer from 'json-pointer';
5
+ import { useSharedState } from '../../../../shared/helpers/useSharedState';
6
+ export default function useData(id, data = undefined) {
7
+ const initialDataRef = useRef(data);
8
+ const sharedState = useSharedState(id, data);
9
+ const updatePath = useCallback((path, fn) => {
10
+ var _sharedState$update;
11
+ const existingData = sharedState.data || {};
12
+ const existingValue = pointer.has(existingData, path) ? pointer.get(existingData, path) : undefined;
13
+ const newValue = fn(existingValue);
14
+ pointer.set(existingData, path, newValue);
15
+ (_sharedState$update = sharedState.update) === null || _sharedState$update === void 0 ? void 0 : _sharedState$update.call(sharedState, existingData);
16
+ }, [sharedState]);
17
+ useEffect(() => {
18
+ if (data && data !== initialDataRef.current) {
19
+ var _sharedState$update2;
20
+ initialDataRef.current = data;
21
+ (_sharedState$update2 = sharedState.update) === null || _sharedState$update2 === void 0 ? void 0 : _sharedState$update2.call(sharedState, data);
22
+ }
23
+ }, [data, sharedState]);
24
+ return {
25
+ data: sharedState.data,
26
+ update: updatePath
27
+ };
28
+ }
29
+ //# sourceMappingURL=useData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useData.js","names":["useCallback","useEffect","useRef","pointer","useSharedState","useData","id","data","undefined","initialDataRef","sharedState","updatePath","path","fn","_sharedState$update","existingData","existingValue","has","get","newValue","set","update","call","current","_sharedState$update2"],"sources":["../../../../../../src/extensions/forms/Form/hooks/useData.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react'\nimport pointer from 'json-pointer'\nimport { useSharedState } from '../../../../shared/helpers/useSharedState'\nimport type { Path } from '../../DataContext/Provider'\n\ntype PathImpl<T, P extends string> = P extends `${infer Key}/${infer Rest}`\n ? Key extends keyof T\n ? Rest extends ''\n ? T[Key]\n : PathImpl<T[Key], Rest>\n : never\n : T[P & keyof T]\n\ntype PathType<T, P extends string> = P extends `/${infer Rest}`\n ? PathImpl<T, Rest>\n : never\n\ntype UseDataReturnUpdate<Data> = <P extends Path>(\n path: P,\n fn: (value: PathType<Data, P>) => unknown\n) => void\n\ntype UseDataReturn<Data> = {\n data: Data\n update: UseDataReturnUpdate<Data>\n}\n\nexport default function useData<Data>(\n id: string,\n data: Data = undefined\n): UseDataReturn<Data> {\n const initialDataRef = useRef(data)\n const sharedState = useSharedState<Data>(id, data)\n\n const updatePath = useCallback<UseDataReturnUpdate<Data>>(\n (path, fn) => {\n const existingData = sharedState.data || ({} as Data)\n const existingValue = pointer.has(existingData, path)\n ? pointer.get(existingData, path)\n : undefined\n\n // get new value\n const newValue = fn(existingValue)\n\n // update existing data\n pointer.set(existingData, path, newValue)\n\n // update provider\n sharedState.update?.(existingData)\n },\n [sharedState]\n )\n\n // when initial data changes, update the shared state\n useEffect(() => {\n if (data && data !== initialDataRef.current) {\n initialDataRef.current = data\n sharedState.update?.(data)\n }\n }, [data, sharedState])\n\n return { data: sharedState.data, update: updatePath }\n}\n"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACtD,OAAOC,OAAO,MAAM,cAAc;AAClC,SAASC,cAAc,QAAQ,2CAA2C;AAyB1E,eAAe,SAASC,OAAOA,CAC7BC,EAAU,EACVC,IAAU,GAAGC,SAAS,EACD;EACrB,MAAMC,cAAc,GAAGP,MAAM,CAACK,IAAI,CAAC;EACnC,MAAMG,WAAW,GAAGN,cAAc,CAAOE,EAAE,EAAEC,IAAI,CAAC;EAElD,MAAMI,UAAU,GAAGX,WAAW,CAC5B,CAACY,IAAI,EAAEC,EAAE,KAAK;IAAA,IAAAC,mBAAA;IACZ,MAAMC,YAAY,GAAGL,WAAW,CAACH,IAAI,IAAK,CAAC,CAAU;IACrD,MAAMS,aAAa,GAAGb,OAAO,CAACc,GAAG,CAACF,YAAY,EAAEH,IAAI,CAAC,GACjDT,OAAO,CAACe,GAAG,CAACH,YAAY,EAAEH,IAAI,CAAC,GAC/BJ,SAAS;IAGb,MAAMW,QAAQ,GAAGN,EAAE,CAACG,aAAa,CAAC;IAGlCb,OAAO,CAACiB,GAAG,CAACL,YAAY,EAAEH,IAAI,EAAEO,QAAQ,CAAC;IAGzC,CAAAL,mBAAA,GAAAJ,WAAW,CAACW,MAAM,cAAAP,mBAAA,uBAAlBA,mBAAA,CAAAQ,IAAA,CAAAZ,WAAW,EAAUK,YAAY,CAAC;EACpC,CAAC,EACD,CAACL,WAAW,CACd,CAAC;EAGDT,SAAS,CAAC,MAAM;IACd,IAAIM,IAAI,IAAIA,IAAI,KAAKE,cAAc,CAACc,OAAO,EAAE;MAAA,IAAAC,oBAAA;MAC3Cf,cAAc,CAACc,OAAO,GAAGhB,IAAI;MAC7B,CAAAiB,oBAAA,GAAAd,WAAW,CAACW,MAAM,cAAAG,oBAAA,uBAAlBA,oBAAA,CAAAF,IAAA,CAAAZ,WAAW,EAAUH,IAAI,CAAC;IAC5B;EACF,CAAC,EAAE,CAACA,IAAI,EAAEG,WAAW,CAAC,CAAC;EAEvB,OAAO;IAAEH,IAAI,EAAEG,WAAW,CAACH,IAAI;IAAEc,MAAM,EAAEV;EAAW,CAAC;AACvD"}
@@ -4,3 +4,5 @@ export { default as SubmitButton } from './SubmitButton';
4
4
  export { default as ButtonRow } from './ButtonRow';
5
5
  export { default as MainHeading } from './MainHeading';
6
6
  export { default as SubHeading } from './SubHeading';
7
+ export { default as Visibility } from './Visibility';
8
+ export { default as useData } from './hooks/useData';
@@ -4,4 +4,6 @@ export { default as SubmitButton } from './SubmitButton';
4
4
  export { default as ButtonRow } from './ButtonRow';
5
5
  export { default as MainHeading } from './MainHeading';
6
6
  export { default as SubHeading } from './SubHeading';
7
+ export { default as Visibility } from './Visibility';
8
+ export { default as useData } from './hooks/useData';
7
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","Handler","Element","SubmitButton","ButtonRow","MainHeading","SubHeading"],"sources":["../../../../../src/extensions/forms/Form/index.ts"],"sourcesContent":["export { default as Handler } from './Handler'\nexport { default as Element } from './Element'\nexport { default as SubmitButton } from './SubmitButton'\nexport { default as ButtonRow } from './ButtonRow'\nexport { default as MainHeading } from './MainHeading'\nexport { default as SubHeading } from './SubHeading'\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,OAAO,QAAQ,WAAW;AAC9C,SAASD,OAAO,IAAIE,OAAO,QAAQ,WAAW;AAC9C,SAASF,OAAO,IAAIG,YAAY,QAAQ,gBAAgB;AACxD,SAASH,OAAO,IAAII,SAAS,QAAQ,aAAa;AAClD,SAASJ,OAAO,IAAIK,WAAW,QAAQ,eAAe;AACtD,SAASL,OAAO,IAAIM,UAAU,QAAQ,cAAc"}
1
+ {"version":3,"file":"index.js","names":["default","Handler","Element","SubmitButton","ButtonRow","MainHeading","SubHeading","Visibility","useData"],"sources":["../../../../../src/extensions/forms/Form/index.ts"],"sourcesContent":["export { default as Handler } from './Handler'\nexport { default as Element } from './Element'\nexport { default as SubmitButton } from './SubmitButton'\nexport { default as ButtonRow } from './ButtonRow'\nexport { default as MainHeading } from './MainHeading'\nexport { default as SubHeading } from './SubHeading'\nexport { default as Visibility } from './Visibility'\nexport { default as useData } from './hooks/useData'\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,OAAO,QAAQ,WAAW;AAC9C,SAASD,OAAO,IAAIE,OAAO,QAAQ,WAAW;AAC9C,SAASF,OAAO,IAAIG,YAAY,QAAQ,gBAAgB;AACxD,SAASH,OAAO,IAAII,SAAS,QAAQ,aAAa;AAClD,SAASJ,OAAO,IAAIK,WAAW,QAAQ,eAAe;AACtD,SAASL,OAAO,IAAIM,UAAU,QAAQ,cAAc;AACpD,SAASN,OAAO,IAAIO,UAAU,QAAQ,cAAc;AACpD,SAASP,OAAO,IAAIQ,OAAO,QAAQ,iBAAiB"}
@@ -14,8 +14,6 @@ function ArrayComponent(props) {
14
14
  layout = 'vertical',
15
15
  placeholder,
16
16
  label,
17
- labelDescription,
18
- labelSecondary,
19
17
  path,
20
18
  value: arrayValue,
21
19
  info,
@@ -48,8 +46,6 @@ function ArrayComponent(props) {
48
46
  className: classnames('dnb-forms-field-number', className),
49
47
  layout: layout,
50
48
  label: label,
51
- labelDescription: labelDescription,
52
- labelSecondary: labelSecondary,
53
49
  info: info,
54
50
  warning: warning,
55
51
  error: error,
@@ -1 +1 @@
1
- {"version":3,"file":"Array.js","names":["React","useMemo","useCallback","classnames","pointer","IterateElementContext","FieldBlock","useDataValue","pickSpacingProps","pickFlexContainerProps","Flex","ArrayComponent","props","className","layout","placeholder","label","labelDescription","labelSecondary","path","value","arrayValue","info","warning","error","emptyValue","width","handleChange","children","elementData","map","elementValue","elementIndex","handleElementChange","newArrayValue","structuredClone","set","handleRemoveElement","splice","handlePush","element","createElement","_extends","contentsWidth","undefined","Container","spacing","Provider","key","index","handleRemove","Array","isArray","childElement","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Iterate/Array/Array.tsx"],"sourcesContent":["import React, { useMemo, useCallback } from 'react'\nimport classnames from 'classnames'\nimport pointer from 'json-pointer'\nimport IterateElementContext from '../IterateElementContext'\nimport FieldBlock, { Props as FieldBlockProps } from '../../FieldBlock'\nimport { useDataValue } from '../../hooks'\nimport { FieldProps, FieldHelpProps } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport {\n BasicProps as FlexContainerProps,\n pickFlexContainerProps,\n} from '../../../../components/flex/Container'\nimport Flex from '../../../../components/flex/Flex'\n\ninterface ErrorMessages {\n required?: string\n schema?: string\n}\n\nexport type Props = FieldHelpProps &\n FieldProps<unknown[], undefined, ErrorMessages> &\n Omit<FieldBlockProps, 'children'> &\n Omit<FlexContainerProps, 'children' | 'width'> & {\n children:\n | React.ReactNode\n | ((value: any, index: number) => React.ReactNode)\n | Array<\n | React.ReactNode\n | ((value: any, index: number) => React.ReactNode)\n >\n }\n\nfunction ArrayComponent(props: Props) {\n const {\n className,\n layout = 'vertical',\n placeholder,\n label,\n labelDescription,\n labelSecondary,\n path,\n value: arrayValue,\n info,\n warning,\n error,\n emptyValue,\n width,\n handleChange,\n children,\n } = useDataValue(props)\n\n const elementData: {\n elementValue: unknown\n handleElementChange: (path: string, value: unknown) => void\n handleRemoveElement: () => void\n }[] = useMemo(() => {\n return (arrayValue ?? []).map((elementValue, elementIndex) => ({\n elementValue,\n handleElementChange: (path, value) => {\n const newArrayValue = structuredClone(arrayValue)\n pointer.set(newArrayValue, path, value)\n handleChange?.(newArrayValue)\n },\n handleRemoveElement: () => {\n const newArrayValue = structuredClone(arrayValue)\n newArrayValue.splice(elementIndex, 1)\n handleChange?.(newArrayValue)\n },\n }))\n }, [arrayValue, handleChange])\n\n const handlePush = useCallback(\n (element: unknown) => {\n handleChange([...(arrayValue ?? []), element])\n },\n [arrayValue, handleChange]\n )\n\n return (\n <FieldBlock\n className={classnames('dnb-forms-field-number', className)}\n layout={layout}\n label={label}\n labelDescription={labelDescription}\n labelSecondary={labelSecondary}\n info={info}\n warning={warning}\n error={error}\n width={width}\n contentsWidth={width !== false ? width : undefined}\n {...pickSpacingProps(props)}\n >\n <Flex.Container\n {...pickFlexContainerProps(props as FlexContainerProps, {\n spacing: 'small',\n })}\n >\n {arrayValue === emptyValue ? (\n <em>{placeholder}</em>\n ) : (\n elementData.map(\n (\n { elementValue, handleElementChange, handleRemoveElement },\n elementIndex\n ) => {\n return (\n <IterateElementContext.Provider\n key={`element-${elementIndex}`}\n value={{\n index: elementIndex,\n value: elementValue,\n path,\n handleChange: handleElementChange,\n handleRemove: handleRemoveElement,\n handlePush,\n }}\n >\n {Array.isArray(children)\n ? children.map((childElement) =>\n typeof childElement === 'function'\n ? childElement(elementValue, elementIndex)\n : childElement\n )\n : typeof children === 'function'\n ? children(elementValue, elementIndex)\n : children}\n </IterateElementContext.Provider>\n )\n }\n )\n )}\n </Flex.Container>\n </FieldBlock>\n )\n}\n\nArrayComponent._supportsSpacingProps = true\nexport default ArrayComponent\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,OAAO,EAAEC,WAAW,QAAQ,OAAO;AACnD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,cAAc;AAClC,OAAOC,qBAAqB,MAAM,0BAA0B;AAC5D,OAAOC,UAAU,MAAoC,kBAAkB;AACvE,SAASC,YAAY,QAAQ,aAAa;AAE1C,SAASC,gBAAgB,QAAQ,mCAAmC;AACpE,SAEEC,sBAAsB,QACjB,uCAAuC;AAC9C,OAAOC,IAAI,MAAM,kCAAkC;AAoBnD,SAASC,cAAcA,CAACC,KAAY,EAAE;EACpC,MAAM;IACJC,SAAS;IACTC,MAAM,GAAG,UAAU;IACnBC,WAAW;IACXC,KAAK;IACLC,gBAAgB;IAChBC,cAAc;IACdC,IAAI;IACJC,KAAK,EAAEC,UAAU;IACjBC,IAAI;IACJC,OAAO;IACPC,KAAK;IACLC,UAAU;IACVC,KAAK;IACLC,YAAY;IACZC;EACF,CAAC,GAAGrB,YAAY,CAACK,KAAK,CAAC;EAEvB,MAAMiB,WAIH,GAAG5B,OAAO,CAAC,MAAM;IAClB,OAAO,CAACoB,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,EAAE,EAAES,GAAG,CAAC,CAACC,YAAY,EAAEC,YAAY,MAAM;MAC7DD,YAAY;MACZE,mBAAmB,EAAEA,CAACd,IAAI,EAAEC,KAAK,KAAK;QACpC,MAAMc,aAAa,GAAGC,eAAe,CAACd,UAAU,CAAC;QACjDjB,OAAO,CAACgC,GAAG,CAACF,aAAa,EAAEf,IAAI,EAAEC,KAAK,CAAC;QACvCO,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGO,aAAa,CAAC;MAC/B,CAAC;MACDG,mBAAmB,EAAEA,CAAA,KAAM;QACzB,MAAMH,aAAa,GAAGC,eAAe,CAACd,UAAU,CAAC;QACjDa,aAAa,CAACI,MAAM,CAACN,YAAY,EAAE,CAAC,CAAC;QACrCL,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGO,aAAa,CAAC;MAC/B;IACF,CAAC,CAAC,CAAC;EACL,CAAC,EAAE,CAACb,UAAU,EAAEM,YAAY,CAAC,CAAC;EAE9B,MAAMY,UAAU,GAAGrC,WAAW,CAC3BsC,OAAgB,IAAK;IACpBb,YAAY,CAAC,CAAC,IAAIN,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,EAAE,CAAC,EAAEmB,OAAO,CAAC,CAAC;EAChD,CAAC,EACD,CAACnB,UAAU,EAAEM,YAAY,CAC3B,CAAC;EAED,OACE3B,KAAA,CAAAyC,aAAA,CAACnC,UAAU,EAAAoC,QAAA;IACT7B,SAAS,EAAEV,UAAU,CAAC,wBAAwB,EAAEU,SAAS,CAAE;IAC3DC,MAAM,EAAEA,MAAO;IACfE,KAAK,EAAEA,KAAM;IACbC,gBAAgB,EAAEA,gBAAiB;IACnCC,cAAc,EAAEA,cAAe;IAC/BI,IAAI,EAAEA,IAAK;IACXC,OAAO,EAAEA,OAAQ;IACjBC,KAAK,EAAEA,KAAM;IACbE,KAAK,EAAEA,KAAM;IACbiB,aAAa,EAAEjB,KAAK,KAAK,KAAK,GAAGA,KAAK,GAAGkB;EAAU,GAC/CpC,gBAAgB,CAACI,KAAK,CAAC,GAE3BZ,KAAA,CAAAyC,aAAA,CAAC/B,IAAI,CAACmC,SAAS,EACTpC,sBAAsB,CAACG,KAAK,EAAwB;IACtDkC,OAAO,EAAE;EACX,CAAC,CAAC,EAEDzB,UAAU,KAAKI,UAAU,GACxBzB,KAAA,CAAAyC,aAAA,aAAK1B,WAAgB,CAAC,GAEtBc,WAAW,CAACC,GAAG,CACb,CACE;IAAEC,YAAY;IAAEE,mBAAmB;IAAEI;EAAoB,CAAC,EAC1DL,YAAY,KACT;IACH,OACEhC,KAAA,CAAAyC,aAAA,CAACpC,qBAAqB,CAAC0C,QAAQ;MAC7BC,GAAG,EAAG,WAAUhB,YAAa,EAAE;MAC/BZ,KAAK,EAAE;QACL6B,KAAK,EAAEjB,YAAY;QACnBZ,KAAK,EAAEW,YAAY;QACnBZ,IAAI;QACJQ,YAAY,EAAEM,mBAAmB;QACjCiB,YAAY,EAAEb,mBAAmB;QACjCE;MACF;IAAE,GAEDY,KAAK,CAACC,OAAO,CAACxB,QAAQ,CAAC,GACpBA,QAAQ,CAACE,GAAG,CAAEuB,YAAY,IACxB,OAAOA,YAAY,KAAK,UAAU,GAC9BA,YAAY,CAACtB,YAAY,EAAEC,YAAY,CAAC,GACxCqB,YACN,CAAC,GACD,OAAOzB,QAAQ,KAAK,UAAU,GAC9BA,QAAQ,CAACG,YAAY,EAAEC,YAAY,CAAC,GACpCJ,QAC0B,CAAC;EAErC,CACF,CAEY,CACN,CAAC;AAEjB;AAEAjB,cAAc,CAAC2C,qBAAqB,GAAG,IAAI;AAC3C,eAAe3C,cAAc"}
1
+ {"version":3,"file":"Array.js","names":["React","useMemo","useCallback","classnames","pointer","IterateElementContext","FieldBlock","useDataValue","pickSpacingProps","pickFlexContainerProps","Flex","ArrayComponent","props","className","layout","placeholder","label","path","value","arrayValue","info","warning","error","emptyValue","width","handleChange","children","elementData","map","elementValue","elementIndex","handleElementChange","newArrayValue","structuredClone","set","handleRemoveElement","splice","handlePush","element","createElement","_extends","contentsWidth","undefined","Container","spacing","Provider","key","index","handleRemove","Array","isArray","childElement","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Iterate/Array/Array.tsx"],"sourcesContent":["import React, { useMemo, useCallback } from 'react'\nimport classnames from 'classnames'\nimport pointer from 'json-pointer'\nimport IterateElementContext from '../IterateElementContext'\nimport FieldBlock, { Props as FieldBlockProps } from '../../FieldBlock'\nimport { useDataValue } from '../../hooks'\nimport { FieldProps, FieldHelpProps } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport {\n BasicProps as FlexContainerProps,\n pickFlexContainerProps,\n} from '../../../../components/flex/Container'\nimport Flex from '../../../../components/flex/Flex'\n\ninterface ErrorMessages {\n required?: string\n schema?: string\n}\n\nexport type Props = FieldHelpProps &\n FieldProps<unknown[], undefined, ErrorMessages> &\n Omit<FieldBlockProps, 'children'> &\n Omit<FlexContainerProps, 'children' | 'width'> & {\n children:\n | React.ReactNode\n | ((value: any, index: number) => React.ReactNode)\n | Array<\n | React.ReactNode\n | ((value: any, index: number) => React.ReactNode)\n >\n }\n\nfunction ArrayComponent(props: Props) {\n const {\n className,\n layout = 'vertical',\n placeholder,\n label,\n path,\n value: arrayValue,\n info,\n warning,\n error,\n emptyValue,\n width,\n handleChange,\n children,\n } = useDataValue(props)\n\n const elementData: {\n elementValue: unknown\n handleElementChange: (path: string, value: unknown) => void\n handleRemoveElement: () => void\n }[] = useMemo(() => {\n return (arrayValue ?? []).map((elementValue, elementIndex) => ({\n elementValue,\n handleElementChange: (path, value) => {\n const newArrayValue = structuredClone(arrayValue)\n pointer.set(newArrayValue, path, value)\n handleChange?.(newArrayValue)\n },\n handleRemoveElement: () => {\n const newArrayValue = structuredClone(arrayValue)\n newArrayValue.splice(elementIndex, 1)\n handleChange?.(newArrayValue)\n },\n }))\n }, [arrayValue, handleChange])\n\n const handlePush = useCallback(\n (element: unknown) => {\n handleChange([...(arrayValue ?? []), element])\n },\n [arrayValue, handleChange]\n )\n\n return (\n <FieldBlock\n className={classnames('dnb-forms-field-number', className)}\n layout={layout}\n label={label}\n info={info}\n warning={warning}\n error={error}\n width={width}\n contentsWidth={width !== false ? width : undefined}\n {...pickSpacingProps(props)}\n >\n <Flex.Container\n {...pickFlexContainerProps(props as FlexContainerProps, {\n spacing: 'small',\n })}\n >\n {arrayValue === emptyValue ? (\n <em>{placeholder}</em>\n ) : (\n elementData.map(\n (\n { elementValue, handleElementChange, handleRemoveElement },\n elementIndex\n ) => {\n return (\n <IterateElementContext.Provider\n key={`element-${elementIndex}`}\n value={{\n index: elementIndex,\n value: elementValue,\n path,\n handleChange: handleElementChange,\n handleRemove: handleRemoveElement,\n handlePush,\n }}\n >\n {Array.isArray(children)\n ? children.map((childElement) =>\n typeof childElement === 'function'\n ? childElement(elementValue, elementIndex)\n : childElement\n )\n : typeof children === 'function'\n ? children(elementValue, elementIndex)\n : children}\n </IterateElementContext.Provider>\n )\n }\n )\n )}\n </Flex.Container>\n </FieldBlock>\n )\n}\n\nArrayComponent._supportsSpacingProps = true\nexport default ArrayComponent\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,OAAO,EAAEC,WAAW,QAAQ,OAAO;AACnD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,cAAc;AAClC,OAAOC,qBAAqB,MAAM,0BAA0B;AAC5D,OAAOC,UAAU,MAAoC,kBAAkB;AACvE,SAASC,YAAY,QAAQ,aAAa;AAE1C,SAASC,gBAAgB,QAAQ,mCAAmC;AACpE,SAEEC,sBAAsB,QACjB,uCAAuC;AAC9C,OAAOC,IAAI,MAAM,kCAAkC;AAoBnD,SAASC,cAAcA,CAACC,KAAY,EAAE;EACpC,MAAM;IACJC,SAAS;IACTC,MAAM,GAAG,UAAU;IACnBC,WAAW;IACXC,KAAK;IACLC,IAAI;IACJC,KAAK,EAAEC,UAAU;IACjBC,IAAI;IACJC,OAAO;IACPC,KAAK;IACLC,UAAU;IACVC,KAAK;IACLC,YAAY;IACZC;EACF,CAAC,GAAGnB,YAAY,CAACK,KAAK,CAAC;EAEvB,MAAMe,WAIH,GAAG1B,OAAO,CAAC,MAAM;IAClB,OAAO,CAACkB,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,EAAE,EAAES,GAAG,CAAC,CAACC,YAAY,EAAEC,YAAY,MAAM;MAC7DD,YAAY;MACZE,mBAAmB,EAAEA,CAACd,IAAI,EAAEC,KAAK,KAAK;QACpC,MAAMc,aAAa,GAAGC,eAAe,CAACd,UAAU,CAAC;QACjDf,OAAO,CAAC8B,GAAG,CAACF,aAAa,EAAEf,IAAI,EAAEC,KAAK,CAAC;QACvCO,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGO,aAAa,CAAC;MAC/B,CAAC;MACDG,mBAAmB,EAAEA,CAAA,KAAM;QACzB,MAAMH,aAAa,GAAGC,eAAe,CAACd,UAAU,CAAC;QACjDa,aAAa,CAACI,MAAM,CAACN,YAAY,EAAE,CAAC,CAAC;QACrCL,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGO,aAAa,CAAC;MAC/B;IACF,CAAC,CAAC,CAAC;EACL,CAAC,EAAE,CAACb,UAAU,EAAEM,YAAY,CAAC,CAAC;EAE9B,MAAMY,UAAU,GAAGnC,WAAW,CAC3BoC,OAAgB,IAAK;IACpBb,YAAY,CAAC,CAAC,IAAIN,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,EAAE,CAAC,EAAEmB,OAAO,CAAC,CAAC;EAChD,CAAC,EACD,CAACnB,UAAU,EAAEM,YAAY,CAC3B,CAAC;EAED,OACEzB,KAAA,CAAAuC,aAAA,CAACjC,UAAU,EAAAkC,QAAA;IACT3B,SAAS,EAAEV,UAAU,CAAC,wBAAwB,EAAEU,SAAS,CAAE;IAC3DC,MAAM,EAAEA,MAAO;IACfE,KAAK,EAAEA,KAAM;IACbI,IAAI,EAAEA,IAAK;IACXC,OAAO,EAAEA,OAAQ;IACjBC,KAAK,EAAEA,KAAM;IACbE,KAAK,EAAEA,KAAM;IACbiB,aAAa,EAAEjB,KAAK,KAAK,KAAK,GAAGA,KAAK,GAAGkB;EAAU,GAC/ClC,gBAAgB,CAACI,KAAK,CAAC,GAE3BZ,KAAA,CAAAuC,aAAA,CAAC7B,IAAI,CAACiC,SAAS,EACTlC,sBAAsB,CAACG,KAAK,EAAwB;IACtDgC,OAAO,EAAE;EACX,CAAC,CAAC,EAEDzB,UAAU,KAAKI,UAAU,GACxBvB,KAAA,CAAAuC,aAAA,aAAKxB,WAAgB,CAAC,GAEtBY,WAAW,CAACC,GAAG,CACb,CACE;IAAEC,YAAY;IAAEE,mBAAmB;IAAEI;EAAoB,CAAC,EAC1DL,YAAY,KACT;IACH,OACE9B,KAAA,CAAAuC,aAAA,CAAClC,qBAAqB,CAACwC,QAAQ;MAC7BC,GAAG,EAAG,WAAUhB,YAAa,EAAE;MAC/BZ,KAAK,EAAE;QACL6B,KAAK,EAAEjB,YAAY;QACnBZ,KAAK,EAAEW,YAAY;QACnBZ,IAAI;QACJQ,YAAY,EAAEM,mBAAmB;QACjCiB,YAAY,EAAEb,mBAAmB;QACjCE;MACF;IAAE,GAEDY,KAAK,CAACC,OAAO,CAACxB,QAAQ,CAAC,GACpBA,QAAQ,CAACE,GAAG,CAAEuB,YAAY,IACxB,OAAOA,YAAY,KAAK,UAAU,GAC9BA,YAAY,CAACtB,YAAY,EAAEC,YAAY,CAAC,GACxCqB,YACN,CAAC,GACD,OAAOzB,QAAQ,KAAK,UAAU,GAC9BA,QAAQ,CAACG,YAAY,EAAEC,YAAY,CAAC,GACpCJ,QAC0B,CAAC;EAErC,CACF,CAEY,CACN,CAAC;AAEjB;AAEAf,cAAc,CAACyC,qBAAqB,GAAG,IAAI;AAC3C,eAAezC,cAAc"}
@@ -11,10 +11,10 @@ import { FormError } from '../types';
11
11
  import { Context } from '../DataContext';
12
12
  import FieldBlockContext from '../FieldBlock/FieldBlockContext';
13
13
  import IterateElementContext from '../Iterate/IterateElementContext';
14
- import { makeUniqueId, toCapitalized } from '../../../shared/component-helper';
15
14
  import useMountEffect from './useMountEffect';
16
15
  import useUpdateEffect from './useUpdateEffect';
17
16
  import useProcessManager from './useProcessManager';
17
+ import useId from './useId';
18
18
  export default function useDataValue(props) {
19
19
  var _ref, _props$autoComplete, _props$path;
20
20
  const {
@@ -36,14 +36,14 @@ export default function useDataValue(props) {
36
36
  toInput = value => value,
37
37
  fromInput = value => value,
38
38
  toEvent = value => value,
39
+ transformValue = value => value,
39
40
  fromExternal = value => value,
40
41
  validateRequired = (value, {
41
42
  emptyValue,
42
- required
43
+ required,
44
+ error
43
45
  }) => {
44
- const res = required && (value === emptyValue || typeof emptyValue === 'undefined' && value === '') ? new FormError('The value is required', {
45
- validationRule: 'required'
46
- }) : undefined;
46
+ const res = required && (value === emptyValue || typeof emptyValue === 'undefined' && value === '') ? error : undefined;
47
47
  return res;
48
48
  }
49
49
  } = props;
@@ -51,10 +51,7 @@ export default function useDataValue(props) {
51
51
  const {
52
52
  startProcess
53
53
  } = useProcessManager();
54
- const id = useMemo(() => {
55
- var _props$id;
56
- return (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : makeUniqueId();
57
- }, [props.id]);
54
+ const id = useId(props.id);
58
55
  const dataContext = useContext(Context);
59
56
  const fieldBlockContext = useContext(FieldBlockContext);
60
57
  const iterateElementContext = useContext(IterateElementContext);
@@ -63,6 +60,7 @@ export default function useDataValue(props) {
63
60
  fromInput,
64
61
  toEvent,
65
62
  fromExternal,
63
+ transformValue,
66
64
  validateRequired
67
65
  });
68
66
  const {
@@ -97,11 +95,7 @@ export default function useDataValue(props) {
97
95
  }, [path, id]);
98
96
  const externalValue = useMemo(() => {
99
97
  if (props.value !== undefined) {
100
- let value = transformers.current.fromExternal(props.value);
101
- if (props.capitalize) {
102
- value = toCapitalized(String(value || ''));
103
- }
104
- return value;
98
+ return transformers.current.fromExternal(props.value);
105
99
  }
106
100
  if (inIterate && itemPath) {
107
101
  if (itemPath === '/') {
@@ -116,7 +110,7 @@ export default function useDataValue(props) {
116
110
  return pointer.has(dataContext.data, path) ? pointer.get(dataContext.data, path) : undefined;
117
111
  }
118
112
  return undefined;
119
- }, [props.value, props.capitalize, inIterate, itemPath, dataContext.data, path, iterateElementValue]);
113
+ }, [props.value, inIterate, itemPath, dataContext.data, path, iterateElementValue]);
120
114
  const valueRef = useRef(externalValue);
121
115
  const changedRef = useRef(false);
122
116
  const hasFocusRef = useRef(false);
@@ -172,7 +166,10 @@ export default function useDataValue(props) {
172
166
  const requiredError = transformers.current.validateRequired(valueRef.current, {
173
167
  emptyValue,
174
168
  required,
175
- isChanged: changedRef.current
169
+ isChanged: changedRef.current,
170
+ error: new FormError('The value is required', {
171
+ validationRule: 'required'
172
+ })
176
173
  });
177
174
  if (requiredError instanceof Error) {
178
175
  throw requiredError;
@@ -224,7 +221,7 @@ export default function useDataValue(props) {
224
221
  }
225
222
  }, [dataContext.showAllErrors, showError]);
226
223
  useEffect(() => {
227
- if (path && props.value) {
224
+ if (path && typeof props.value !== 'undefined') {
228
225
  const hasValue = pointer.has(dataContext.data, path);
229
226
  const value = hasValue ? pointer.get(dataContext.data, path) : undefined;
230
227
  if (!hasValue || props.value !== value && valueRef.current !== value) {
@@ -242,15 +239,18 @@ export default function useDataValue(props) {
242
239
  const setHasFocus = useCallback((hasFocus, valueOverride) => {
243
240
  if (hasFocus) {
244
241
  hasFocusRef.current = true;
245
- onFocus === null || onFocus === void 0 ? void 0 : onFocus(transformers.current.toEvent(valueOverride !== null && valueOverride !== void 0 ? valueOverride : valueRef.current));
242
+ const value = transformers.current.toEvent(valueOverride !== null && valueOverride !== void 0 ? valueOverride : valueRef.current, 'onFocus');
243
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(value);
246
244
  } else {
247
245
  hasFocusRef.current = false;
248
- onBlur === null || onBlur === void 0 ? void 0 : onBlur(transformers.current.toEvent(valueOverride !== null && valueOverride !== void 0 ? valueOverride : valueRef.current));
246
+ const value = transformers.current.toEvent(valueOverride !== null && valueOverride !== void 0 ? valueOverride : valueRef.current, 'onBlur');
247
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(value);
249
248
  if (!changedRef.current && !validateUnchanged) {
250
249
  return;
251
250
  }
252
251
  if (typeof onBlurValidator === 'function') {
253
- Promise.resolve(onBlurValidator(transformers.current.toEvent(valueOverride !== null && valueOverride !== void 0 ? valueOverride : valueRef.current))).then(persistErrorState);
252
+ const value = transformers.current.toEvent(valueOverride !== null && valueOverride !== void 0 ? valueOverride : valueRef.current, 'onBlurValidator');
253
+ Promise.resolve(onBlurValidator(value)).then(persistErrorState);
254
254
  }
255
255
  showError();
256
256
  forceUpdate();
@@ -269,30 +269,23 @@ export default function useDataValue(props) {
269
269
  forceUpdate();
270
270
  }, [dataContextHandlePathChange, handleError, path, validateValue]);
271
271
  const handleChange = useCallback((argFromInput, additionalArgs = undefined) => {
272
+ const currentValue = valueRef.current;
272
273
  let newValue = transformers.current.fromInput(argFromInput);
273
- if (newValue === valueRef.current) {
274
+ if (newValue === currentValue) {
274
275
  return;
275
276
  }
276
- if (props.capitalize) {
277
- newValue = toCapitalized(String(newValue || ''));
278
- }
277
+ newValue = transformers.current.transformValue(newValue, currentValue);
279
278
  updateValue(newValue);
280
279
  changedRef.current = true;
281
- const value = transformers.current.toEvent(newValue);
280
+ const value = transformers.current.toEvent(newValue, 'onChange');
282
281
  onChange === null || onChange === void 0 ? void 0 : onChange.apply(this, typeof additionalArgs !== 'undefined' ? [value, additionalArgs] : [value]);
283
282
  if (itemPath) {
284
283
  const iterateValuePath = `/${iterateElementIndex}${itemPath && itemPath !== '/' ? itemPath : ''}`;
285
284
  handleIterateElementChange === null || handleIterateElementChange === void 0 ? void 0 : handleIterateElementChange(iterateValuePath, newValue);
286
285
  }
287
- }, [props.capitalize, updateValue, onChange, itemPath, iterateElementIndex, handleIterateElementChange]);
286
+ }, [updateValue, onChange, itemPath, iterateElementIndex, handleIterateElementChange]);
288
287
  const handleFocus = useCallback(() => setHasFocus(true), [setHasFocus]);
289
- const handleBlur = useCallback(() => {
290
- if (props.trim && /^\s|\s$/.test(String(valueRef.current))) {
291
- const value = String(valueRef.current).trim();
292
- handleChange(value);
293
- }
294
- setHasFocus(false);
295
- }, [props.trim, setHasFocus, handleChange]);
288
+ const handleBlur = useCallback(() => setHasFocus(false), [setHasFocus]);
296
289
  useMountEffect(() => {
297
290
  dataContext === null || dataContext === void 0 ? void 0 : dataContext.handleMountField(identifier);
298
291
  validateValue();