@dnb/eufemia 10.23.0 → 10.24.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 (369) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +18 -0
  3. package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
  4. package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +20 -0
  5. package/cjs/components/anchor/Anchor.d.ts +1 -1
  6. package/cjs/components/anchor/Anchor.js +2 -2
  7. package/cjs/components/anchor/Anchor.js.map +1 -1
  8. package/cjs/components/anchor/style/anchor-mixins.scss +46 -3
  9. package/cjs/components/anchor/style/dnb-anchor.css +73 -4
  10. package/cjs/components/anchor/style/dnb-anchor.min.css +1 -1
  11. package/cjs/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +2 -14
  12. package/cjs/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  13. package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -46
  14. package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
  15. package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -32
  16. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.css +2 -14
  17. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  18. package/cjs/components/anchor/style/themes/dnb-anchor-theme-ui.scss +1 -8
  19. package/cjs/components/breadcrumb/style/dnb-breadcrumb.css +1 -1
  20. package/cjs/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
  21. package/cjs/components/breadcrumb/style/dnb-breadcrumb.scss +1 -1
  22. package/cjs/components/button/Button.js +1 -1
  23. package/cjs/components/button/Button.js.map +1 -1
  24. package/cjs/components/flex/style/dnb-flex.css +1 -1
  25. package/cjs/components/flex/style/dnb-flex.min.css +1 -1
  26. package/cjs/components/flex/style/flex-stack.scss +1 -1
  27. package/cjs/components/icon/style/dnb-icon.css +2 -2
  28. package/cjs/components/icon/style/dnb-icon.min.css +1 -1
  29. package/cjs/components/icon/style/dnb-icon.scss +1 -1
  30. package/cjs/components/input/Input.js +1 -1
  31. package/cjs/components/input/Input.js.map +1 -1
  32. package/cjs/components/table/style/dnb-table.css +6 -0
  33. package/cjs/components/table/style/dnb-table.min.css +1 -1
  34. package/cjs/components/table/style/table-th.scss +9 -25
  35. package/cjs/components/table/style/themes/dnb-table-theme-sbanken.css +1 -1
  36. package/cjs/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
  37. package/cjs/components/table/style/themes/dnb-table-theme-sbanken.scss +2 -1
  38. package/cjs/components/table/style/themes/dnb-table-theme-ui.css +1 -1
  39. package/cjs/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  40. package/cjs/components/table/style/themes/dnb-table-theme-ui.scss +2 -2
  41. package/cjs/components/textarea/Textarea.d.ts +9 -0
  42. package/cjs/components/textarea/Textarea.js +21 -5
  43. package/cjs/components/textarea/Textarea.js.map +1 -1
  44. package/cjs/components/textarea/TextareaDocs.js +10 -0
  45. package/cjs/components/textarea/TextareaDocs.js.map +1 -1
  46. package/cjs/components/textarea/style/dnb-textarea.css +69 -26
  47. package/cjs/components/textarea/style/dnb-textarea.min.css +1 -1
  48. package/cjs/components/textarea/style/dnb-textarea.scss +83 -31
  49. package/cjs/components/textarea/style/themes/dnb-textarea-theme-sbanken.css +15 -21
  50. package/cjs/components/textarea/style/themes/dnb-textarea-theme-sbanken.min.css +1 -1
  51. package/cjs/components/textarea/style/themes/dnb-textarea-theme-sbanken.scss +17 -28
  52. package/cjs/components/textarea/style/themes/dnb-textarea-theme-ui.css +12 -23
  53. package/cjs/components/textarea/style/themes/dnb-textarea-theme-ui.min.css +1 -1
  54. package/cjs/components/textarea/style/themes/dnb-textarea-theme-ui.scss +11 -27
  55. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +1 -2
  56. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  57. package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -2
  58. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js +3 -3
  59. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  60. package/cjs/extensions/forms/Field/String/String.d.ts +6 -6
  61. package/cjs/extensions/forms/Field/String/String.js +13 -11
  62. package/cjs/extensions/forms/Field/String/String.js.map +1 -1
  63. package/cjs/extensions/forms/Form/Appearance/Appearance.js +3 -0
  64. package/cjs/extensions/forms/Form/Appearance/Appearance.js.map +1 -1
  65. package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +2 -2
  66. package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
  67. package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +2 -1
  68. package/cjs/extensions/forms/StepsLayout/Step/Step.js +2 -3
  69. package/cjs/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
  70. package/cjs/extensions/forms/StepsLayout/StepsContext.d.ts +6 -4
  71. package/cjs/extensions/forms/StepsLayout/StepsContext.js +6 -1
  72. package/cjs/extensions/forms/StepsLayout/StepsContext.js.map +1 -1
  73. package/cjs/extensions/forms/StepsLayout/StepsLayout.d.ts +4 -2
  74. package/cjs/extensions/forms/StepsLayout/StepsLayout.js +83 -50
  75. package/cjs/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  76. package/cjs/extensions/forms/StepsLayout/useStep.d.ts +3 -0
  77. package/cjs/extensions/forms/StepsLayout/useStep.js +19 -0
  78. package/cjs/extensions/forms/StepsLayout/useStep.js.map +1 -0
  79. package/cjs/extensions/forms/style/dnb-forms.css +2 -2
  80. package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
  81. package/cjs/extensions/forms/types.d.ts +2 -2
  82. package/cjs/extensions/forms/types.js.map +1 -1
  83. package/cjs/extensions/forms/utils/ajv.js +6 -2
  84. package/cjs/extensions/forms/utils/ajv.js.map +1 -1
  85. package/cjs/shared/Eufemia.d.ts +1 -1
  86. package/cjs/shared/Eufemia.js +2 -2
  87. package/cjs/shared/Eufemia.js.map +1 -1
  88. package/cjs/style/core/scopes.scss +1 -1
  89. package/cjs/style/dnb-ui-basis.css +1 -1
  90. package/cjs/style/dnb-ui-basis.min.css +1 -1
  91. package/cjs/style/dnb-ui-body.css +1 -1
  92. package/cjs/style/dnb-ui-body.min.css +1 -1
  93. package/cjs/style/dnb-ui-components.css +153 -36
  94. package/cjs/style/dnb-ui-components.min.css +3 -3
  95. package/cjs/style/dnb-ui-core.css +1 -1
  96. package/cjs/style/dnb-ui-core.min.css +1 -1
  97. package/cjs/style/dnb-ui-extensions.css +2 -2
  98. package/cjs/style/dnb-ui-extensions.min.css +1 -1
  99. package/cjs/style/dnb-ui-forms.css +2 -2
  100. package/cjs/style/dnb-ui-forms.min.css +1 -1
  101. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +170 -79
  102. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  103. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +2 -2
  104. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  105. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +2 -2
  106. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  107. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +191 -106
  108. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +5 -5
  109. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +2 -2
  110. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  111. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +2 -2
  112. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  113. package/cjs/style/themes/theme-ui/ui-theme-components.css +170 -77
  114. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +6 -6
  115. package/cjs/style/themes/theme-ui/ui-theme-extensions.css +2 -2
  116. package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  117. package/cjs/style/themes/theme-ui/ui-theme-forms.css +2 -2
  118. package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  119. package/cjs/style/themes/theme-ui/ui-theme-tags.css +37 -9
  120. package/cjs/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  121. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +18 -0
  122. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
  123. package/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +20 -0
  124. package/components/anchor/Anchor.d.ts +1 -1
  125. package/components/anchor/Anchor.js +2 -2
  126. package/components/anchor/Anchor.js.map +1 -1
  127. package/components/anchor/style/anchor-mixins.scss +46 -3
  128. package/components/anchor/style/dnb-anchor.css +73 -4
  129. package/components/anchor/style/dnb-anchor.min.css +1 -1
  130. package/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +2 -14
  131. package/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  132. package/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -46
  133. package/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
  134. package/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -32
  135. package/components/anchor/style/themes/dnb-anchor-theme-ui.css +2 -14
  136. package/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  137. package/components/anchor/style/themes/dnb-anchor-theme-ui.scss +1 -8
  138. package/components/breadcrumb/style/dnb-breadcrumb.css +1 -1
  139. package/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
  140. package/components/breadcrumb/style/dnb-breadcrumb.scss +1 -1
  141. package/components/button/Button.js +1 -1
  142. package/components/button/Button.js.map +1 -1
  143. package/components/flex/style/dnb-flex.css +1 -1
  144. package/components/flex/style/dnb-flex.min.css +1 -1
  145. package/components/flex/style/flex-stack.scss +1 -1
  146. package/components/icon/style/dnb-icon.css +2 -2
  147. package/components/icon/style/dnb-icon.min.css +1 -1
  148. package/components/icon/style/dnb-icon.scss +1 -1
  149. package/components/input/Input.js +1 -1
  150. package/components/input/Input.js.map +1 -1
  151. package/components/table/style/dnb-table.css +6 -0
  152. package/components/table/style/dnb-table.min.css +1 -1
  153. package/components/table/style/table-th.scss +9 -25
  154. package/components/table/style/themes/dnb-table-theme-sbanken.css +1 -1
  155. package/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
  156. package/components/table/style/themes/dnb-table-theme-sbanken.scss +2 -1
  157. package/components/table/style/themes/dnb-table-theme-ui.css +1 -1
  158. package/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  159. package/components/table/style/themes/dnb-table-theme-ui.scss +2 -2
  160. package/components/textarea/Textarea.d.ts +9 -0
  161. package/components/textarea/Textarea.js +21 -5
  162. package/components/textarea/Textarea.js.map +1 -1
  163. package/components/textarea/TextareaDocs.js +10 -0
  164. package/components/textarea/TextareaDocs.js.map +1 -1
  165. package/components/textarea/style/dnb-textarea.css +69 -26
  166. package/components/textarea/style/dnb-textarea.min.css +1 -1
  167. package/components/textarea/style/dnb-textarea.scss +83 -31
  168. package/components/textarea/style/themes/dnb-textarea-theme-sbanken.css +15 -21
  169. package/components/textarea/style/themes/dnb-textarea-theme-sbanken.min.css +1 -1
  170. package/components/textarea/style/themes/dnb-textarea-theme-sbanken.scss +17 -28
  171. package/components/textarea/style/themes/dnb-textarea-theme-ui.css +12 -23
  172. package/components/textarea/style/themes/dnb-textarea-theme-ui.min.css +1 -1
  173. package/components/textarea/style/themes/dnb-textarea-theme-ui.scss +11 -27
  174. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +1 -2
  175. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  176. package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -2
  177. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +18 -0
  178. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
  179. package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +20 -0
  180. package/es/components/anchor/Anchor.d.ts +1 -1
  181. package/es/components/anchor/Anchor.js +2 -2
  182. package/es/components/anchor/Anchor.js.map +1 -1
  183. package/es/components/anchor/style/anchor-mixins.scss +46 -3
  184. package/es/components/anchor/style/dnb-anchor.css +73 -4
  185. package/es/components/anchor/style/dnb-anchor.min.css +1 -1
  186. package/es/components/anchor/style/themes/dnb-anchor-theme-eiendom.css +2 -14
  187. package/es/components/anchor/style/themes/dnb-anchor-theme-eiendom.min.css +1 -1
  188. package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -46
  189. package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
  190. package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -32
  191. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.css +2 -14
  192. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.min.css +1 -1
  193. package/es/components/anchor/style/themes/dnb-anchor-theme-ui.scss +1 -8
  194. package/es/components/breadcrumb/style/dnb-breadcrumb.css +1 -1
  195. package/es/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
  196. package/es/components/breadcrumb/style/dnb-breadcrumb.scss +1 -1
  197. package/es/components/button/Button.js +1 -1
  198. package/es/components/button/Button.js.map +1 -1
  199. package/es/components/flex/style/dnb-flex.css +1 -1
  200. package/es/components/flex/style/dnb-flex.min.css +1 -1
  201. package/es/components/flex/style/flex-stack.scss +1 -1
  202. package/es/components/icon/style/dnb-icon.css +2 -2
  203. package/es/components/icon/style/dnb-icon.min.css +1 -1
  204. package/es/components/icon/style/dnb-icon.scss +1 -1
  205. package/es/components/input/Input.js +1 -1
  206. package/es/components/input/Input.js.map +1 -1
  207. package/es/components/table/style/dnb-table.css +6 -0
  208. package/es/components/table/style/dnb-table.min.css +1 -1
  209. package/es/components/table/style/table-th.scss +9 -25
  210. package/es/components/table/style/themes/dnb-table-theme-sbanken.css +1 -1
  211. package/es/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
  212. package/es/components/table/style/themes/dnb-table-theme-sbanken.scss +2 -1
  213. package/es/components/table/style/themes/dnb-table-theme-ui.css +1 -1
  214. package/es/components/table/style/themes/dnb-table-theme-ui.min.css +1 -1
  215. package/es/components/table/style/themes/dnb-table-theme-ui.scss +2 -2
  216. package/es/components/textarea/Textarea.d.ts +9 -0
  217. package/es/components/textarea/Textarea.js +21 -5
  218. package/es/components/textarea/Textarea.js.map +1 -1
  219. package/es/components/textarea/TextareaDocs.js +10 -0
  220. package/es/components/textarea/TextareaDocs.js.map +1 -1
  221. package/es/components/textarea/style/dnb-textarea.css +69 -26
  222. package/es/components/textarea/style/dnb-textarea.min.css +1 -1
  223. package/es/components/textarea/style/dnb-textarea.scss +83 -31
  224. package/es/components/textarea/style/themes/dnb-textarea-theme-sbanken.css +15 -21
  225. package/es/components/textarea/style/themes/dnb-textarea-theme-sbanken.min.css +1 -1
  226. package/es/components/textarea/style/themes/dnb-textarea-theme-sbanken.scss +17 -28
  227. package/es/components/textarea/style/themes/dnb-textarea-theme-ui.css +12 -23
  228. package/es/components/textarea/style/themes/dnb-textarea-theme-ui.min.css +1 -1
  229. package/es/components/textarea/style/themes/dnb-textarea-theme-ui.scss +11 -27
  230. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +1 -2
  231. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
  232. package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -2
  233. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js +3 -3
  234. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  235. package/es/extensions/forms/Field/String/String.d.ts +6 -6
  236. package/es/extensions/forms/Field/String/String.js +13 -11
  237. package/es/extensions/forms/Field/String/String.js.map +1 -1
  238. package/es/extensions/forms/Form/Appearance/Appearance.js +3 -0
  239. package/es/extensions/forms/Form/Appearance/Appearance.js.map +1 -1
  240. package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +2 -2
  241. package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
  242. package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +2 -1
  243. package/es/extensions/forms/StepsLayout/Step/Step.js +2 -3
  244. package/es/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
  245. package/es/extensions/forms/StepsLayout/StepsContext.d.ts +6 -4
  246. package/es/extensions/forms/StepsLayout/StepsContext.js +6 -1
  247. package/es/extensions/forms/StepsLayout/StepsContext.js.map +1 -1
  248. package/es/extensions/forms/StepsLayout/StepsLayout.d.ts +4 -2
  249. package/es/extensions/forms/StepsLayout/StepsLayout.js +79 -49
  250. package/es/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  251. package/es/extensions/forms/StepsLayout/useStep.d.ts +3 -0
  252. package/es/extensions/forms/StepsLayout/useStep.js +12 -0
  253. package/es/extensions/forms/StepsLayout/useStep.js.map +1 -0
  254. package/es/extensions/forms/style/dnb-forms.css +2 -2
  255. package/es/extensions/forms/style/dnb-forms.min.css +1 -1
  256. package/es/extensions/forms/types.d.ts +2 -2
  257. package/es/extensions/forms/types.js.map +1 -1
  258. package/es/extensions/forms/utils/ajv.js +6 -2
  259. package/es/extensions/forms/utils/ajv.js.map +1 -1
  260. package/es/shared/Eufemia.d.ts +1 -1
  261. package/es/shared/Eufemia.js +2 -2
  262. package/es/shared/Eufemia.js.map +1 -1
  263. package/es/style/core/scopes.scss +1 -1
  264. package/es/style/dnb-ui-basis.css +1 -1
  265. package/es/style/dnb-ui-basis.min.css +1 -1
  266. package/es/style/dnb-ui-body.css +1 -1
  267. package/es/style/dnb-ui-body.min.css +1 -1
  268. package/es/style/dnb-ui-components.css +153 -36
  269. package/es/style/dnb-ui-components.min.css +3 -3
  270. package/es/style/dnb-ui-core.css +1 -1
  271. package/es/style/dnb-ui-core.min.css +1 -1
  272. package/es/style/dnb-ui-extensions.css +2 -2
  273. package/es/style/dnb-ui-extensions.min.css +1 -1
  274. package/es/style/dnb-ui-forms.css +2 -2
  275. package/es/style/dnb-ui-forms.min.css +1 -1
  276. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +170 -79
  277. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  278. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +2 -2
  279. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  280. package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +2 -2
  281. package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  282. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +191 -106
  283. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +5 -5
  284. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +2 -2
  285. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  286. package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +2 -2
  287. package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  288. package/es/style/themes/theme-ui/ui-theme-components.css +170 -77
  289. package/es/style/themes/theme-ui/ui-theme-components.min.css +6 -6
  290. package/es/style/themes/theme-ui/ui-theme-extensions.css +2 -2
  291. package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  292. package/es/style/themes/theme-ui/ui-theme-forms.css +2 -2
  293. package/es/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  294. package/es/style/themes/theme-ui/ui-theme-tags.css +37 -9
  295. package/es/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  296. package/esm/dnb-ui-basis.min.mjs +1 -1
  297. package/esm/dnb-ui-components.min.mjs +1 -1
  298. package/esm/dnb-ui-elements.min.mjs +1 -1
  299. package/esm/dnb-ui-extensions.min.mjs +2 -2
  300. package/esm/dnb-ui-lib.min.mjs +1 -1
  301. package/extensions/forms/DataContext/Provider/ProviderDocs.js +3 -3
  302. package/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  303. package/extensions/forms/Field/String/String.d.ts +6 -6
  304. package/extensions/forms/Field/String/String.js +13 -11
  305. package/extensions/forms/Field/String/String.js.map +1 -1
  306. package/extensions/forms/Form/Appearance/Appearance.js +3 -0
  307. package/extensions/forms/Form/Appearance/Appearance.js.map +1 -1
  308. package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +2 -2
  309. package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
  310. package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +2 -1
  311. package/extensions/forms/StepsLayout/Step/Step.js +2 -3
  312. package/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
  313. package/extensions/forms/StepsLayout/StepsContext.d.ts +6 -4
  314. package/extensions/forms/StepsLayout/StepsContext.js +6 -1
  315. package/extensions/forms/StepsLayout/StepsContext.js.map +1 -1
  316. package/extensions/forms/StepsLayout/StepsLayout.d.ts +4 -2
  317. package/extensions/forms/StepsLayout/StepsLayout.js +82 -51
  318. package/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
  319. package/extensions/forms/StepsLayout/useStep.d.ts +3 -0
  320. package/extensions/forms/StepsLayout/useStep.js +13 -0
  321. package/extensions/forms/StepsLayout/useStep.js.map +1 -0
  322. package/extensions/forms/style/dnb-forms.css +2 -2
  323. package/extensions/forms/style/dnb-forms.min.css +1 -1
  324. package/extensions/forms/types.d.ts +2 -2
  325. package/extensions/forms/types.js.map +1 -1
  326. package/extensions/forms/utils/ajv.js +6 -2
  327. package/extensions/forms/utils/ajv.js.map +1 -1
  328. package/package.json +1 -1
  329. package/shared/Eufemia.d.ts +1 -1
  330. package/shared/Eufemia.js +2 -2
  331. package/shared/Eufemia.js.map +1 -1
  332. package/style/core/scopes.scss +1 -1
  333. package/style/dnb-ui-basis.css +1 -1
  334. package/style/dnb-ui-basis.min.css +1 -1
  335. package/style/dnb-ui-body.css +1 -1
  336. package/style/dnb-ui-body.min.css +1 -1
  337. package/style/dnb-ui-components.css +153 -36
  338. package/style/dnb-ui-components.min.css +3 -3
  339. package/style/dnb-ui-core.css +1 -1
  340. package/style/dnb-ui-core.min.css +1 -1
  341. package/style/dnb-ui-extensions.css +2 -2
  342. package/style/dnb-ui-extensions.min.css +1 -1
  343. package/style/dnb-ui-forms.css +2 -2
  344. package/style/dnb-ui-forms.min.css +1 -1
  345. package/style/themes/theme-eiendom/eiendom-theme-components.css +170 -79
  346. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  347. package/style/themes/theme-eiendom/eiendom-theme-extensions.css +2 -2
  348. package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  349. package/style/themes/theme-eiendom/eiendom-theme-forms.css +2 -2
  350. package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  351. package/style/themes/theme-sbanken/sbanken-theme-components.css +191 -106
  352. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +5 -5
  353. package/style/themes/theme-sbanken/sbanken-theme-extensions.css +2 -2
  354. package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  355. package/style/themes/theme-sbanken/sbanken-theme-forms.css +2 -2
  356. package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  357. package/style/themes/theme-ui/ui-theme-components.css +170 -77
  358. package/style/themes/theme-ui/ui-theme-components.min.css +6 -6
  359. package/style/themes/theme-ui/ui-theme-extensions.css +2 -2
  360. package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  361. package/style/themes/theme-ui/ui-theme-forms.css +2 -2
  362. package/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  363. package/style/themes/theme-ui/ui-theme-tags.css +37 -9
  364. package/style/themes/theme-ui/ui-theme-tags.min.css +1 -1
  365. package/umd/dnb-ui-basis.min.js +1 -1
  366. package/umd/dnb-ui-components.min.js +1 -1
  367. package/umd/dnb-ui-elements.min.js +1 -1
  368. package/umd/dnb-ui-extensions.min.js +3 -3
  369. package/umd/dnb-ui-lib.min.js +1 -1
@@ -141,12 +141,19 @@ function StringComponent(props) {
141
141
  status: hasError ? 'error' : undefined,
142
142
  value: transformInstantly((_value$toString = value === null || value === void 0 ? void 0 : value.toString()) !== null && _value$toString !== void 0 ? _value$toString : '')
143
143
  });
144
+ const textareaProps = {
145
+ keepPlaceholder,
146
+ rows,
147
+ autoresize_max_rows: autoresizeMaxRows,
148
+ autoresize,
149
+ characterCounter
150
+ };
144
151
  const inputProps = {
145
- type,
146
- clear,
147
- size,
148
- align,
149
- selectall,
152
+ type: type,
153
+ clear: clear,
154
+ size: size,
155
+ align: align,
156
+ selectall: selectall,
150
157
  icon: leftIcon !== null && leftIcon !== void 0 ? leftIcon : rightIcon,
151
158
  icon_position: rightIcon && !leftIcon ? 'right' : undefined,
152
159
  submit_element: submitElement,
@@ -165,12 +172,7 @@ function StringComponent(props) {
165
172
  width: width === 'stretch' || fieldBlockContext !== null && fieldBlockContext !== void 0 && fieldBlockContext.composition ? width : undefined,
166
173
  contentWidth: width !== false ? width : undefined
167
174
  }, pickSpacingProps(props));
168
- return React.createElement(FieldBlock, fieldBlockProps, multiline ? React.createElement(Textarea, _extends({}, sharedProps, {
169
- rows: rows,
170
- autoresize_max_rows: autoresizeMaxRows,
171
- autoresize: autoresize,
172
- characterCounter: characterCounter
173
- })) : mask ? React.createElement(InputMasked, _extends({}, sharedProps, inputProps, {
175
+ return React.createElement(FieldBlock, fieldBlockProps, multiline ? React.createElement(Textarea, _extends({}, sharedProps, textareaProps)) : mask ? React.createElement(InputMasked, _extends({}, sharedProps, inputProps, {
174
176
  mask: mask
175
177
  })) : React.createElement(Input, _extends({}, sharedProps, inputProps)));
176
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"String.js","names":["React","useContext","useMemo","useCallback","classnames","HelpButton","Input","Textarea","InputMasked","SharedContext","FieldBlockContext","FieldBlock","useFieldProps","pickSpacingProps","toCapitalized","useErrorMessage","StringComponent","props","_props$width","_value$toString","fieldBlockContext","sharedContext","tr","translation","Forms","errorMessages","path","required","inputErrorRequired","minLength","stringInputErrorMinLength","maxLength","stringInputErrorMaxLength","pattern","inputErrorPattern","schema","_props$schema","type","fromInput","event","_event","_event$cleanedValue","_event2","_event3","value","emptyValue","cleanedValue","toEvent","trim","spaces","RegExp","test","replace","handleChange","transformValue","capitalize","String","preparedProps","_objectSpread","width","composition","id","name","className","innerRef","inputClassName","layout","placeholder","label","labelDescription","info","warning","error","hasError","disabled","help","multiline","mask","leftIcon","rightIcon","htmlAttributes","submitElement","clear","align","size","selectall","keepPlaceholder","rows","autoresizeMaxRows","autoresize","characterCounter","autoComplete","inputMode","autoCorrect","spellCheck","autoFocus","autoCapitalize","handleFocus","handleBlur","transformInstantly","cn","sharedProps","suffix","createElement","title","content","undefined","on_focus","on_blur","on_change","stretch","Boolean","inner_ref","status","toString","inputProps","icon","icon_position","submit_element","keep_placeholder","fieldBlockProps","forId","contentWidth","_extends","autoresize_max_rows","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/String/String.tsx"],"sourcesContent":["import React, { useContext, useMemo, useCallback } from 'react'\nimport classnames from 'classnames'\nimport { HelpButton, Input, Textarea } from '../../../../components'\nimport { InputProps } from '../../../../components/input/Input'\nimport InputMasked, {\n InputMaskedProps,\n} from '../../../../components/InputMasked'\nimport { TextareaProps } from '../../../../components/Textarea'\nimport SharedContext from '../../../../shared/Context'\nimport FieldBlockContext from '../../FieldBlock/FieldBlockContext'\nimport FieldBlock from '../../FieldBlock'\nimport { useFieldProps } from '../../hooks'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport { toCapitalized } from '../../../../shared/component-helper'\nimport type { TextCounterProps } from '../../../../fragments/TextCounter'\nimport type {\n FieldProps,\n FieldHelpProps,\n CustomErrorMessages,\n AllJSONSchemaVersions,\n} from '../../types'\nimport useErrorMessage from '../../hooks/useErrorMessage'\n\ninterface ErrorMessages extends CustomErrorMessages {\n required?: string\n schema?: string\n minLength?: string\n maxLength?: string\n pattern?: string\n}\nexport type Props = FieldHelpProps &\n FieldProps<string, undefined | string, ErrorMessages> & {\n // - String props\n multiline?: boolean\n mask?: InputMaskedProps['mask']\n leftIcon?: string\n rightIcon?: string\n inputClassName?: string\n innerRef?: React.RefObject<HTMLInputElement | HTMLTextAreaElement>\n submitElement?: InputProps['submit_element']\n width?: false | 'small' | 'medium' | 'large' | 'stretch'\n\n // - Validation\n minLength?: number\n maxLength?: number\n pattern?: string\n\n // - Input props\n type?: InputProps['type']\n size?: InputProps['size']\n align?: InputProps['align']\n selectall?: InputProps['selectall']\n clear?: boolean\n keepPlaceholder?: InputProps['keep_placeholder']\n\n // - Textarea props\n rows?: TextareaProps['rows']\n autoresizeMaxRows?: TextareaProps['autoresize_max_rows']\n autoresize?: TextareaProps['autoresize']\n characterCounter?: Omit<TextCounterProps, 'text'> | number\n\n // - Html props\n autoComplete?: HTMLInputElement['autocomplete']\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode']\n autoCorrect?: React.HTMLAttributes<HTMLInputElement>['autoCorrect']\n spellCheck?: React.HTMLAttributes<HTMLInputElement>['spellCheck']\n autoFocus?: React.HTMLAttributes<HTMLInputElement>['autoFocus']\n autoCapitalize?: React.HTMLAttributes<HTMLInputElement>['autoCapitalize']\n }\n\nfunction StringComponent(props: Props) {\n const fieldBlockContext = useContext(FieldBlockContext)\n const sharedContext = useContext(SharedContext)\n const tr = sharedContext?.translation.Forms\n\n const errorMessages = useErrorMessage(props.path, props.errorMessages, {\n required: tr.inputErrorRequired,\n minLength: tr.stringInputErrorMinLength,\n maxLength: tr.stringInputErrorMaxLength,\n pattern: tr.inputErrorPattern,\n })\n\n const schema = useMemo<AllJSONSchemaVersions>(\n () =>\n props.schema ?? {\n type: 'string',\n minLength: props.minLength,\n maxLength: props.maxLength,\n pattern: props.pattern,\n },\n [props.schema, props.minLength, props.maxLength, props.pattern]\n )\n const fromInput = useCallback(\n (event: { value: string; cleanedValue?: string }) => {\n if (typeof event === 'string') {\n event = { value: event }\n }\n if (event?.value === '') {\n return props.emptyValue\n }\n // Cleaned value for masked\n return event?.cleanedValue ?? event?.value\n },\n [props.emptyValue]\n )\n const toEvent = useCallback(\n (value: string, type: string) => {\n if (props.trim && type === 'onBlur') {\n const spaces = '[\\\\s ]'\n if (new RegExp(`^${spaces}|${spaces}$`).test(value)) {\n value = value.replace(\n new RegExp(`^${spaces}+|${spaces}+$`, 'g'),\n ''\n )\n handleChange(value)\n }\n }\n return value\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.trim]\n )\n const transformValue = useCallback(\n (value: string) => {\n if (props.capitalize) {\n value = toCapitalized(String(value || ''))\n }\n return value\n },\n [props.capitalize]\n )\n\n const preparedProps: Props = {\n ...props,\n errorMessages,\n schema,\n fromInput,\n toEvent,\n transformValue,\n width:\n props.width ??\n (fieldBlockContext?.composition ? 'stretch' : 'large'),\n }\n\n const {\n id,\n name,\n className,\n\n innerRef,\n inputClassName,\n layout,\n placeholder,\n label,\n labelDescription,\n value,\n info,\n warning,\n error,\n hasError,\n disabled,\n help,\n multiline,\n mask,\n leftIcon,\n rightIcon,\n width,\n htmlAttributes,\n submitElement,\n\n // - Input props\n type,\n clear,\n align,\n size,\n selectall,\n keepPlaceholder,\n\n // - Textarea props\n rows,\n // formId,\n autoresizeMaxRows = 6,\n autoresize = true,\n characterCounter,\n\n // - Html props\n\n autoComplete,\n inputMode,\n autoCorrect,\n spellCheck,\n autoFocus,\n autoCapitalize,\n\n // - Events\n handleFocus,\n handleBlur,\n handleChange,\n } = useFieldProps(preparedProps)\n\n const transformInstantly = useCallback(\n (value: string) => (props.capitalize ? toCapitalized(value) : value),\n [props.capitalize]\n )\n\n const cn = classnames('dnb-forms-field-string__input', inputClassName)\n\n const sharedProps: InputProps & TextareaProps = {\n id,\n name,\n autoComplete,\n autoCorrect,\n spellCheck,\n autoFocus,\n autoCapitalize,\n inputMode,\n className: cn,\n placeholder: placeholder,\n suffix: help ? (\n <HelpButton title={help.title}>{help.content}</HelpButton>\n ) : undefined,\n on_focus: handleFocus,\n on_blur: handleBlur,\n on_change: handleChange,\n disabled,\n ...htmlAttributes,\n stretch: Boolean(\n width !== undefined || fieldBlockContext?.composition\n ),\n inner_ref: innerRef,\n status: hasError ? 'error' : undefined,\n value: transformInstantly(value?.toString() ?? ''),\n }\n\n const inputProps: InputProps = {\n type,\n clear,\n size,\n align,\n selectall,\n icon: leftIcon ?? rightIcon,\n icon_position: rightIcon && !leftIcon ? 'right' : undefined,\n submit_element: submitElement,\n keep_placeholder: keepPlaceholder,\n }\n\n const fieldBlockProps = {\n className: classnames('dnb-forms-field-string', className),\n forId: id,\n layout,\n label,\n labelDescription,\n info,\n warning,\n error,\n disabled,\n width:\n width === 'stretch' || fieldBlockContext?.composition\n ? width\n : undefined,\n contentWidth: width !== false ? width : undefined,\n ...pickSpacingProps(props),\n }\n\n return (\n <FieldBlock {...fieldBlockProps}>\n {multiline ? (\n <Textarea\n {...sharedProps}\n rows={rows}\n autoresize_max_rows={autoresizeMaxRows}\n autoresize={autoresize}\n characterCounter={characterCounter}\n />\n ) : mask ? (\n <InputMasked {...sharedProps} {...inputProps} mask={mask} />\n ) : (\n <Input {...sharedProps} {...inputProps} />\n )}\n </FieldBlock>\n )\n}\n\nStringComponent._supportsSpacingProps = true\nexport default StringComponent\n"],"mappings":"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"}
1
+ {"version":3,"file":"String.js","names":["React","useContext","useMemo","useCallback","classnames","HelpButton","Input","Textarea","InputMasked","SharedContext","FieldBlockContext","FieldBlock","useFieldProps","pickSpacingProps","toCapitalized","useErrorMessage","StringComponent","props","_props$width","_value$toString","fieldBlockContext","sharedContext","tr","translation","Forms","errorMessages","path","required","inputErrorRequired","minLength","stringInputErrorMinLength","maxLength","stringInputErrorMaxLength","pattern","inputErrorPattern","schema","_props$schema","type","fromInput","event","_event","_event$cleanedValue","_event2","_event3","value","emptyValue","cleanedValue","toEvent","trim","spaces","RegExp","test","replace","handleChange","transformValue","capitalize","String","preparedProps","_objectSpread","width","composition","id","name","className","innerRef","inputClassName","layout","placeholder","label","labelDescription","info","warning","error","hasError","disabled","help","multiline","mask","leftIcon","rightIcon","htmlAttributes","submitElement","clear","align","size","selectall","keepPlaceholder","rows","autoresizeMaxRows","autoresize","characterCounter","autoComplete","inputMode","autoCorrect","spellCheck","autoFocus","autoCapitalize","handleFocus","handleBlur","transformInstantly","cn","sharedProps","suffix","createElement","title","content","undefined","on_focus","on_blur","on_change","stretch","Boolean","inner_ref","status","toString","textareaProps","autoresize_max_rows","inputProps","icon","icon_position","submit_element","keep_placeholder","fieldBlockProps","forId","contentWidth","_extends","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/String/String.tsx"],"sourcesContent":["import React, { useContext, useMemo, useCallback } from 'react'\nimport classnames from 'classnames'\nimport { HelpButton, Input, Textarea } from '../../../../components'\nimport { InputProps } from '../../../../components/input/Input'\nimport InputMasked, {\n InputMaskedProps,\n} from '../../../../components/InputMasked'\nimport { TextareaProps } from '../../../../components/Textarea'\nimport SharedContext from '../../../../shared/Context'\nimport FieldBlockContext from '../../FieldBlock/FieldBlockContext'\nimport FieldBlock from '../../FieldBlock'\nimport { useFieldProps } from '../../hooks'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport { toCapitalized } from '../../../../shared/component-helper'\nimport type { TextCounterProps } from '../../../../fragments/TextCounter'\nimport type {\n FieldProps,\n FieldHelpProps,\n CustomErrorMessages,\n AllJSONSchemaVersions,\n} from '../../types'\nimport useErrorMessage from '../../hooks/useErrorMessage'\n\ninterface ErrorMessages extends CustomErrorMessages {\n required?: string\n schema?: string\n minLength?: string\n maxLength?: string\n pattern?: string\n}\nexport type Props = FieldHelpProps &\n FieldProps<string, undefined | string, ErrorMessages> & {\n // - Shared props\n multiline?: boolean\n inputClassName?: string\n innerRef?: React.RefObject<HTMLInputElement | HTMLTextAreaElement>\n width?: false | 'small' | 'medium' | 'large' | 'stretch'\n size?: InputProps['size'] | TextareaProps['size']\n keepPlaceholder?: InputProps['keep_placeholder']\n\n // - Validation\n minLength?: number\n maxLength?: number\n pattern?: string\n\n // - Input props\n type?: InputProps['type']\n align?: InputProps['align']\n selectall?: InputProps['selectall']\n clear?: boolean\n mask?: InputMaskedProps['mask']\n leftIcon?: string\n rightIcon?: string\n submitElement?: InputProps['submit_element']\n\n // - Textarea props\n rows?: TextareaProps['rows']\n autoresizeMaxRows?: TextareaProps['autoresize_max_rows']\n autoresize?: TextareaProps['autoresize']\n characterCounter?: Omit<TextCounterProps, 'text'> | number\n\n // - Html props\n autoComplete?: HTMLInputElement['autocomplete']\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode']\n autoCorrect?: React.HTMLAttributes<HTMLInputElement>['autoCorrect']\n spellCheck?: React.HTMLAttributes<HTMLInputElement>['spellCheck']\n autoFocus?: React.HTMLAttributes<HTMLInputElement>['autoFocus']\n autoCapitalize?: React.HTMLAttributes<HTMLInputElement>['autoCapitalize']\n }\n\nfunction StringComponent(props: Props) {\n const fieldBlockContext = useContext(FieldBlockContext)\n const sharedContext = useContext(SharedContext)\n const tr = sharedContext?.translation.Forms\n\n const errorMessages = useErrorMessage(props.path, props.errorMessages, {\n required: tr.inputErrorRequired,\n minLength: tr.stringInputErrorMinLength,\n maxLength: tr.stringInputErrorMaxLength,\n pattern: tr.inputErrorPattern,\n })\n\n const schema = useMemo<AllJSONSchemaVersions>(\n () =>\n props.schema ?? {\n type: 'string',\n minLength: props.minLength,\n maxLength: props.maxLength,\n pattern: props.pattern,\n },\n [props.schema, props.minLength, props.maxLength, props.pattern]\n )\n const fromInput = useCallback(\n (event: { value: string; cleanedValue?: string }) => {\n if (typeof event === 'string') {\n event = { value: event }\n }\n if (event?.value === '') {\n return props.emptyValue\n }\n // Cleaned value for masked\n return event?.cleanedValue ?? event?.value\n },\n [props.emptyValue]\n )\n const toEvent = useCallback(\n (value: string, type: string) => {\n if (props.trim && type === 'onBlur') {\n const spaces = '[\\\\s ]'\n if (new RegExp(`^${spaces}|${spaces}$`).test(value)) {\n value = value.replace(\n new RegExp(`^${spaces}+|${spaces}+$`, 'g'),\n ''\n )\n handleChange(value)\n }\n }\n return value\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.trim]\n )\n const transformValue = useCallback(\n (value: string) => {\n if (props.capitalize) {\n value = toCapitalized(String(value || ''))\n }\n return value\n },\n [props.capitalize]\n )\n\n const preparedProps: Props = {\n ...props,\n errorMessages,\n schema,\n fromInput,\n toEvent,\n transformValue,\n width:\n props.width ??\n (fieldBlockContext?.composition ? 'stretch' : 'large'),\n }\n\n const {\n id,\n name,\n className,\n\n innerRef,\n inputClassName,\n layout,\n placeholder,\n label,\n labelDescription,\n value,\n info,\n warning,\n error,\n hasError,\n disabled,\n help,\n multiline,\n mask,\n leftIcon,\n rightIcon,\n width,\n htmlAttributes,\n submitElement,\n\n // - Input props\n type,\n clear,\n align,\n size,\n selectall,\n keepPlaceholder,\n\n // - Textarea props\n rows,\n // formId,\n autoresizeMaxRows = 6,\n autoresize = true,\n characterCounter,\n\n // - Html props\n\n autoComplete,\n inputMode,\n autoCorrect,\n spellCheck,\n autoFocus,\n autoCapitalize,\n\n // - Events\n handleFocus,\n handleBlur,\n handleChange,\n } = useFieldProps(preparedProps)\n\n const transformInstantly = useCallback(\n (value: string) => (props.capitalize ? toCapitalized(value) : value),\n [props.capitalize]\n )\n\n const cn = classnames('dnb-forms-field-string__input', inputClassName)\n\n const sharedProps: InputProps & TextareaProps = {\n id,\n name,\n autoComplete,\n autoCorrect,\n spellCheck,\n autoFocus,\n autoCapitalize,\n inputMode,\n className: cn,\n placeholder: placeholder,\n suffix: help ? (\n <HelpButton title={help.title}>{help.content}</HelpButton>\n ) : undefined,\n on_focus: handleFocus,\n on_blur: handleBlur,\n on_change: handleChange,\n disabled,\n ...htmlAttributes,\n stretch: Boolean(\n width !== undefined || fieldBlockContext?.composition\n ),\n inner_ref: innerRef,\n status: hasError ? 'error' : undefined,\n value: transformInstantly(value?.toString() ?? ''),\n }\n\n const textareaProps: TextareaProps = {\n keepPlaceholder,\n rows,\n autoresize_max_rows: autoresizeMaxRows,\n autoresize,\n characterCounter,\n }\n\n const inputProps: InputProps = {\n type: type,\n clear: clear,\n size: size,\n align: align,\n selectall: selectall,\n icon: leftIcon ?? rightIcon,\n icon_position: rightIcon && !leftIcon ? 'right' : undefined,\n submit_element: submitElement,\n keep_placeholder: keepPlaceholder,\n }\n\n const fieldBlockProps = {\n className: classnames('dnb-forms-field-string', className),\n forId: id,\n layout,\n label,\n labelDescription,\n info,\n warning,\n error,\n disabled,\n width:\n width === 'stretch' || fieldBlockContext?.composition\n ? width\n : undefined,\n contentWidth: width !== false ? width : undefined,\n ...pickSpacingProps(props),\n }\n\n return (\n <FieldBlock {...fieldBlockProps}>\n {multiline ? (\n <Textarea {...sharedProps} {...textareaProps} />\n ) : mask ? (\n <InputMasked {...sharedProps} {...inputProps} mask={mask} />\n ) : (\n <Input {...sharedProps} {...inputProps} />\n )}\n </FieldBlock>\n )\n}\n\nStringComponent._supportsSpacingProps = true\nexport default StringComponent\n"],"mappings":"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"}
@@ -15,6 +15,9 @@ function FormAppearance(_ref) {
15
15
  Input: {
16
16
  size
17
17
  },
18
+ Textarea: {
19
+ size
20
+ },
18
21
  DatePicker: {
19
22
  size
20
23
  },
@@ -1 +1 @@
1
- {"version":3,"file":"Appearance.js","names":["React","Provider","FormAppearance","_ref","children","size","rest","_objectWithoutProperties","_excluded","createElement","_extends","Input","DatePicker","Autocomplete","Dropdown"],"sources":["../../../../../../src/extensions/forms/Form/Appearance/Appearance.tsx"],"sourcesContent":["import React from 'react'\nimport Provider from '../../../../shared/Provider'\n\nexport type Props = {\n size?: 'medium' | 'large'\n children: React.ReactNode\n}\n\nfunction FormAppearance({ children, size = null, ...rest }: Props) {\n return (\n <Provider\n Input={{ size }}\n DatePicker={{ size }}\n Autocomplete={{ size }}\n Dropdown={{ size }}\n {...rest}\n >\n {children}\n </Provider>\n )\n}\n\nexport default FormAppearance\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAAM,6BAA6B;AAOlD,SAASC,cAAcA,CAAAC,IAAA,EAA4C;EAAA,IAA3C;MAAEC,QAAQ;MAAEC,IAAI,GAAG;IAAqB,CAAC,GAAAF,IAAA;IAAbG,IAAI,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,SAAA;EACtD,OACER,KAAA,CAAAS,aAAA,CAACR,QAAQ,EAAAS,QAAA;IACPC,KAAK,EAAE;MAAEN;IAAK,CAAE;IAChBO,UAAU,EAAE;MAAEP;IAAK,CAAE;IACrBQ,YAAY,EAAE;MAAER;IAAK,CAAE;IACvBS,QAAQ,EAAE;MAAET;IAAK;EAAE,GACfC,IAAI,GAEPF,QACO,CAAC;AAEf;AAEA,eAAeF,cAAc"}
1
+ {"version":3,"file":"Appearance.js","names":["React","Provider","FormAppearance","_ref","children","size","rest","_objectWithoutProperties","_excluded","createElement","_extends","Input","Textarea","DatePicker","Autocomplete","Dropdown"],"sources":["../../../../../../src/extensions/forms/Form/Appearance/Appearance.tsx"],"sourcesContent":["import React from 'react'\nimport Provider from '../../../../shared/Provider'\n\nexport type Props = {\n size?: 'medium' | 'large'\n children: React.ReactNode\n}\n\nfunction FormAppearance({ children, size = null, ...rest }: Props) {\n return (\n <Provider\n Input={{ size }}\n Textarea={{ size }}\n DatePicker={{ size }}\n Autocomplete={{ size }}\n Dropdown={{ size }}\n {...rest}\n >\n {children}\n </Provider>\n )\n}\n\nexport default FormAppearance\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAAM,6BAA6B;AAOlD,SAASC,cAAcA,CAAAC,IAAA,EAA4C;EAAA,IAA3C;MAAEC,QAAQ;MAAEC,IAAI,GAAG;IAAqB,CAAC,GAAAF,IAAA;IAAbG,IAAI,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,SAAA;EACtD,OACER,KAAA,CAAAS,aAAA,CAACR,QAAQ,EAAAS,QAAA;IACPC,KAAK,EAAE;MAAEN;IAAK,CAAE;IAChBO,QAAQ,EAAE;MAAEP;IAAK,CAAE;IACnBQ,UAAU,EAAE;MAAER;IAAK,CAAE;IACrBS,YAAY,EAAE;MAAET;IAAK,CAAE;IACvBU,QAAQ,EAAE;MAAEV;IAAK;EAAE,GACfC,IAAI,GAEPF,QACO,CAAC;AAEf;AAEA,eAAeF,cAAc"}
@@ -4,8 +4,8 @@
4
4
  .dnb-forms-button-row {
5
5
  display: flex;
6
6
  flex-flow: row;
7
- -moz-column-gap: var(--spacing-small);
8
- column-gap: var(--spacing-small);
7
+ flex-wrap: wrap;
8
+ gap: var(--spacing-small);
9
9
  }
10
10
  .dnb-card + .dnb-forms-button-row:not([class*=space__top]) {
11
11
  margin-top: var(--spacing-small);
@@ -1 +1 @@
1
- .dnb-forms-button-row{-moz-column-gap:var(--spacing-small);column-gap:var(--spacing-small);display:flex;flex-flow:row}.dnb-card+.dnb-forms-button-row:not([class*=space__top]){margin-top:var(--spacing-small)}.dnb-card+.dnb-forms-button-row:not([class*=space__top]) .dnb-button[class*=space__top]{margin-top:0}@media screen and (min-width:40em){.dnb-card+.dnb-forms-button-row:not([class*=space__left]){margin-left:var(--spacing-medium)}}
1
+ .dnb-forms-button-row{display:flex;flex-flow:row;flex-wrap:wrap;gap:var(--spacing-small)}.dnb-card+.dnb-forms-button-row:not([class*=space__top]){margin-top:var(--spacing-small)}.dnb-card+.dnb-forms-button-row:not([class*=space__top]) .dnb-button[class*=space__top]{margin-top:0}@media screen and (min-width:40em){.dnb-card+.dnb-forms-button-row:not([class*=space__left]){margin-left:var(--spacing-medium)}}
@@ -3,7 +3,8 @@
3
3
  .dnb-forms-button-row {
4
4
  display: flex;
5
5
  flex-flow: row;
6
- column-gap: var(--spacing-small);
6
+ flex-wrap: wrap;
7
+ gap: var(--spacing-small);
7
8
 
8
9
  .dnb-card + & {
9
10
  &:not([class*='space__top']) {
@@ -16,9 +16,8 @@ function Step(props) {
16
16
  if ((stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.activeIndex) !== index) {
17
17
  return null;
18
18
  }
19
- return React.createElement(Flex.Container, _extends({
20
- className: classnames('dnb-forms-step', className),
21
- direction: "vertical"
19
+ return React.createElement(Flex.Stack, _extends({
20
+ className: classnames('dnb-forms-step', className)
22
21
  }, pickFlexContainerProps(props)), children);
23
22
  }
24
23
  Step._supportsSpacingProps = true;
@@ -1 +1 @@
1
- {"version":3,"file":"Step.js","names":["React","useContext","classnames","pickFlexContainerProps","StepsContext","Flex","Step","props","className","index","children","stepsContext","activeIndex","createElement","Container","_extends","direction","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/StepsLayout/Step/Step.tsx"],"sourcesContent":["import React, { useContext } from 'react'\nimport classnames from 'classnames'\nimport { ComponentProps } from '../../types'\nimport {\n Props as FlexContainerProps,\n pickFlexContainerProps,\n} from '../../../../components/flex/Container'\nimport StepsContext from '../StepsContext'\nimport Flex from '../../../../components/flex/Flex'\n\nexport type Props = ComponentProps &\n FlexContainerProps & {\n index?: number\n title?: string\n }\n\nfunction Step(props: Props) {\n const { className, index, children } = props\n const stepsContext = useContext(StepsContext)\n\n if (stepsContext?.activeIndex !== index) {\n // Another step is active\n return null\n }\n\n return (\n <Flex.Container\n className={classnames('dnb-forms-step', className)}\n direction=\"vertical\"\n {...pickFlexContainerProps(props)}\n >\n {children}\n </Flex.Container>\n )\n}\n\nStep._supportsSpacingProps = true\nexport default Step\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,UAAU,MAAM,YAAY;AAEnC,SAEEC,sBAAsB,QACjB,uCAAuC;AAC9C,OAAOC,YAAY,MAAM,iBAAiB;AAC1C,OAAOC,IAAI,MAAM,kCAAkC;AAQnD,SAASC,IAAIA,CAACC,KAAY,EAAE;EAC1B,MAAM;IAAEC,SAAS;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAGH,KAAK;EAC5C,MAAMI,YAAY,GAAGV,UAAU,CAACG,YAAY,CAAC;EAE7C,IAAI,CAAAO,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEC,WAAW,MAAKH,KAAK,EAAE;IAEvC,OAAO,IAAI;EACb;EAEA,OACET,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACS,SAAS,EAAAC,QAAA;IACbP,SAAS,EAAEN,UAAU,CAAC,gBAAgB,EAAEM,SAAS,CAAE;IACnDQ,SAAS,EAAC;EAAU,GAChBb,sBAAsB,CAACI,KAAK,CAAC,GAEhCG,QACa,CAAC;AAErB;AAEAJ,IAAI,CAACW,qBAAqB,GAAG,IAAI;AACjC,eAAeX,IAAI"}
1
+ {"version":3,"file":"Step.js","names":["React","useContext","classnames","pickFlexContainerProps","StepsContext","Flex","Step","props","className","index","children","stepsContext","activeIndex","createElement","Stack","_extends","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/StepsLayout/Step/Step.tsx"],"sourcesContent":["import React, { useContext } from 'react'\nimport classnames from 'classnames'\nimport { ComponentProps } from '../../types'\nimport {\n Props as FlexContainerProps,\n pickFlexContainerProps,\n} from '../../../../components/flex/Container'\nimport StepsContext from '../StepsContext'\nimport Flex from '../../../../components/flex/Flex'\n\nexport type Props = ComponentProps &\n FlexContainerProps & {\n index?: number\n title?: string\n }\n\nfunction Step(props: Props) {\n const { className, index, children } = props\n const stepsContext = useContext(StepsContext)\n\n if (stepsContext?.activeIndex !== index) {\n // Another step is active\n return null\n }\n\n return (\n <Flex.Stack\n className={classnames('dnb-forms-step', className)}\n {...pickFlexContainerProps(props)}\n >\n {children}\n </Flex.Stack>\n )\n}\n\nStep._supportsSpacingProps = true\nexport default Step\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,UAAU,MAAM,YAAY;AAEnC,SAEEC,sBAAsB,QACjB,uCAAuC;AAC9C,OAAOC,YAAY,MAAM,iBAAiB;AAC1C,OAAOC,IAAI,MAAM,kCAAkC;AAQnD,SAASC,IAAIA,CAACC,KAAY,EAAE;EAC1B,MAAM;IAAEC,SAAS;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAGH,KAAK;EAC5C,MAAMI,YAAY,GAAGV,UAAU,CAACG,YAAY,CAAC;EAE7C,IAAI,CAAAO,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEC,WAAW,MAAKH,KAAK,EAAE;IAEvC,OAAO,IAAI;EACb;EAEA,OACET,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACS,KAAK,EAAAC,QAAA;IACTP,SAAS,EAAEN,UAAU,CAAC,gBAAgB,EAAEM,SAAS;EAAE,GAC/CL,sBAAsB,CAACI,KAAK,CAAC,GAEhCG,QACS,CAAC;AAEjB;AAEAJ,IAAI,CAACU,qBAAqB,GAAG,IAAI;AACjC,eAAeV,IAAI"}
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
- interface StepsContextState {
3
- activeIndex: number;
4
- handlePrevious: () => void;
5
- handleNext: () => void;
2
+ export type StepIndex = number;
3
+ export interface StepsContextState {
4
+ activeIndex?: StepIndex;
5
+ handlePrevious?: () => void;
6
+ handleNext?: () => void;
7
+ setActiveIndex?: (index: StepIndex) => void;
6
8
  }
7
9
  declare const StepsContext: React.Context<StepsContextState>;
8
10
  export default StepsContext;
@@ -1,4 +1,9 @@
1
1
  import React from 'react';
2
- const StepsContext = React.createContext(undefined);
2
+ const StepsContext = React.createContext({
3
+ activeIndex: 0,
4
+ setActiveIndex: () => null,
5
+ handlePrevious: () => null,
6
+ handleNext: () => null
7
+ });
3
8
  export default StepsContext;
4
9
  //# sourceMappingURL=StepsContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StepsContext.js","names":["React","StepsContext","createContext","undefined"],"sources":["../../../../../src/extensions/forms/StepsLayout/StepsContext.ts"],"sourcesContent":["import React from 'react'\n\ninterface StepsContextState {\n activeIndex: number\n handlePrevious: () => void\n handleNext: () => void\n}\n\nconst StepsContext = React.createContext<StepsContextState | undefined>(\n undefined\n)\n\nexport default StepsContext\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAQzB,MAAMC,YAAY,GAAGD,KAAK,CAACE,aAAa,CACtCC,SACF,CAAC;AAED,eAAeF,YAAY"}
1
+ {"version":3,"file":"StepsContext.js","names":["React","StepsContext","createContext","activeIndex","setActiveIndex","handlePrevious","handleNext"],"sources":["../../../../../src/extensions/forms/StepsLayout/StepsContext.ts"],"sourcesContent":["import React from 'react'\n\nexport type StepIndex = number\nexport interface StepsContextState {\n activeIndex?: StepIndex\n handlePrevious?: () => void\n handleNext?: () => void\n setActiveIndex?: (index: StepIndex) => void\n}\n\nconst StepsContext = React.createContext<StepsContextState | undefined>({\n activeIndex: 0,\n setActiveIndex: () => null,\n handlePrevious: () => null,\n handleNext: () => null,\n})\n\nexport default StepsContext\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAUzB,MAAMC,YAAY,GAAGD,KAAK,CAACE,aAAa,CAAgC;EACtEC,WAAW,EAAE,CAAC;EACdC,cAAc,EAAEA,CAAA,KAAM,IAAI;EAC1BC,cAAc,EAAEA,CAAA,KAAM,IAAI;EAC1BC,UAAU,EAAEA,CAAA,KAAM;AACpB,CAAC,CAAC;AAEF,eAAeL,YAAY"}
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
+ import { StepIndex } from './StepsContext';
2
3
  import { ComponentProps, EventReturnWithStateObject } from '../types';
3
4
  export type Props = ComponentProps & {
4
5
  id?: string;
5
6
  mode?: 'static' | 'strict' | 'loose';
6
7
  scrollTopOnStepChange?: boolean;
7
- initialActiveIndex?: number;
8
- onStepChange?: (index: number, mode: 'previous' | 'next') => EventReturnWithStateObject | void | Promise<EventReturnWithStateObject | void>;
8
+ initialActiveIndex?: StepIndex;
9
+ onStepChange?: (index: StepIndex, mode: 'previous' | 'next') => EventReturnWithStateObject | void | Promise<EventReturnWithStateObject | void>;
9
10
  children: React.ReactNode;
10
11
  variant?: 'sidebar' | 'drawer';
11
12
  noAnimation?: boolean;
@@ -18,5 +19,6 @@ declare namespace StepsLayout {
18
19
  var NextButton: typeof import("./NextButton/NextButton").default;
19
20
  var PreviousButton: typeof import("./PreviousButton/PreviousButton").default;
20
21
  var Buttons: typeof import("./Buttons/Buttons").default;
22
+ var useStep: typeof import("./useStep").useStep;
21
23
  }
22
24
  export default StepsLayout;
@@ -1,9 +1,12 @@
1
1
  "use client";
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
5
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
5
6
  const _excluded = ["className", "id", "mode", "scrollTopOnStepChange", "initialActiveIndex", "onStepChange", "children", "noAnimation", "variant", "sidebarId"];
6
- import React, { useContext, useCallback, useRef, useReducer } from 'react';
7
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9
+ import React, { useContext, useCallback, useRef, useReducer, useMemo, useEffect } from 'react';
7
10
  import classnames from 'classnames';
8
11
  import { Space, StepIndicator } from '../../../components';
9
12
  import { warn } from '../../../shared/component-helper';
@@ -16,6 +19,8 @@ import NextButton from './NextButton';
16
19
  import PreviousButton from './PreviousButton';
17
20
  import Buttons from './Buttons';
18
21
  import Provider from '../DataContext/Provider';
22
+ import { useSharedState } from '../../../shared/helpers/useSharedState';
23
+ import { useStep } from './useStep';
19
24
  function StepsLayout(props) {
20
25
  const {
21
26
  className,
@@ -30,7 +35,6 @@ function StepsLayout(props) {
30
35
  sidebarId
31
36
  } = props,
32
37
  rest = _objectWithoutProperties(props, _excluded);
33
- const dataContext = useContext(DataContext);
34
38
  const {
35
39
  hasContext,
36
40
  setFormState,
@@ -38,7 +42,7 @@ function StepsLayout(props) {
38
42
  setShowAllErrors,
39
43
  showAllErrors,
40
44
  scrollToTop
41
- } = dataContext;
45
+ } = useContext(DataContext);
42
46
  const id = useId(_id);
43
47
  const [, forceUpdate] = useReducer(() => ({}), {});
44
48
  const activeIndexRef = useRef(initialActiveIndex);
@@ -50,34 +54,23 @@ function StepsLayout(props) {
50
54
  }
51
55
  return onStepChange === null || onStepChange === void 0 ? void 0 : onStepChange(index, mode);
52
56
  }, [onStepChange]);
53
- const handlePrevious = useCallback(() => {
57
+ const handleStepChange = useCallback(({
58
+ index,
59
+ skipErrorCheck,
60
+ mode
61
+ }) => {
54
62
  handleSubmitCall({
55
- skipFieldValidation: true,
56
- skipErrorCheck: true,
63
+ skipErrorCheck,
64
+ skipFieldValidation: skipErrorCheck,
57
65
  enableAsyncBehaviour: isAsync(onStepChange),
58
66
  onSubmit: async () => {
59
- const result = await callOnStepChange(activeIndexRef.current - 1, 'previous');
67
+ const result = await callOnStepChange(index, mode);
60
68
  setFormState('abort');
61
- if (!(result instanceof Error)) {
62
- activeIndexRef.current = activeIndexRef.current - 1;
63
- forceUpdate();
69
+ if (!skipErrorCheck) {
70
+ setShowAllErrors(errorOnStepRef.current[index]);
64
71
  }
65
- if (scrollTopOnStepChange) {
66
- scrollToTop();
67
- }
68
- return result;
69
- }
70
- });
71
- }, [callOnStepChange, handleSubmitCall, onStepChange, scrollToTop, scrollTopOnStepChange, setFormState]);
72
- const handleNext = useCallback(() => {
73
- handleSubmitCall({
74
- enableAsyncBehaviour: isAsync(onStepChange),
75
- onSubmit: async () => {
76
- const result = await callOnStepChange(activeIndexRef.current + 1, 'next');
77
- setFormState('abort');
78
- setShowAllErrors(errorOnStepRef.current[activeIndexRef.current + 1]);
79
72
  if (!(result instanceof Error)) {
80
- activeIndexRef.current = activeIndexRef.current + 1;
73
+ activeIndexRef.current = index;
81
74
  forceUpdate();
82
75
  }
83
76
  if (scrollTopOnStepChange) {
@@ -87,32 +80,75 @@ function StepsLayout(props) {
87
80
  }
88
81
  });
89
82
  }, [callOnStepChange, handleSubmitCall, onStepChange, scrollToTop, scrollTopOnStepChange, setFormState, setShowAllErrors]);
90
- const stepIndicatorData = React.Children.map(children, child => {
91
- var _child$props$title;
92
- if (!React.isValidElement(child) || child.type !== Step) {
93
- throw new Error('Only Step can be children of StepsLayout');
83
+ const setActiveIndex = useCallback((index, options) => {
84
+ if (index === activeIndexRef.current) {
85
+ return;
94
86
  }
95
- return (_child$props$title = child.props.title) !== null && _child$props$title !== void 0 ? _child$props$title : 'Title missing';
96
- });
87
+ const mode = index > activeIndexRef.current ? 'next' : 'previous';
88
+ handleStepChange(_objectSpread({
89
+ index,
90
+ skipErrorCheck: mode === 'previous',
91
+ mode
92
+ }, options));
93
+ }, [handleStepChange]);
94
+ const handlePrevious = useCallback(() => {
95
+ setActiveIndex(activeIndexRef.current - 1);
96
+ }, [setActiveIndex]);
97
+ const handleNext = useCallback(() => {
98
+ setActiveIndex(activeIndexRef.current + 1);
99
+ }, [setActiveIndex]);
97
100
  const handleChange = useCallback(({
98
101
  current_step
99
102
  }) => {
100
- activeIndexRef.current = current_step;
101
- setShowAllErrors(errorOnStepRef.current[current_step]);
102
- forceUpdate();
103
- }, [setShowAllErrors]);
103
+ setActiveIndex(current_step, {
104
+ skipErrorCheck: true
105
+ });
106
+ }, [setActiveIndex]);
107
+ const providerValue = useMemo(() => ({
108
+ activeIndex: activeIndexRef.current,
109
+ setActiveIndex,
110
+ handlePrevious,
111
+ handleNext
112
+ }), [activeIndexRef.current, setActiveIndex, handlePrevious, handleNext]);
113
+ const sharedState = useSharedState(hasContext && id ? id + '-steps' : undefined);
114
+ const {
115
+ extend
116
+ } = sharedState;
117
+ useEffect(() => {
118
+ if (hasContext && id) {
119
+ extend(providerValue);
120
+ }
121
+ }, [id, extend, providerValue]);
104
122
  if (!hasContext) {
105
123
  warn('You may wrap StepsLayout in Form.Handler');
106
124
  return React.createElement(Provider, null, React.createElement(StepsLayout, _extends({}, props, {
107
125
  id: id
108
126
  })));
109
127
  }
110
- return React.createElement(StepsContext.Provider, {
111
- value: {
112
- activeIndex: activeIndexRef.current,
113
- handlePrevious,
114
- handleNext
128
+ const titles = [];
129
+ const contents = React.Children.map(children, (child, i) => {
130
+ if (React.isValidElement(child)) {
131
+ var _child, _child2;
132
+ let step = child;
133
+ if (((_child = child) === null || _child === void 0 ? void 0 : _child.type) !== Step && typeof child.type === 'function') {
134
+ var _step;
135
+ step = child.type.apply(child.type, [child.props]);
136
+ if (((_step = step) === null || _step === void 0 ? void 0 : _step.type) === Step) {
137
+ child = step;
138
+ }
139
+ }
140
+ if (((_child2 = child) === null || _child2 === void 0 ? void 0 : _child2.type) === Step) {
141
+ var _child$props$title;
142
+ titles.push((_child$props$title = child.props.title) !== null && _child$props$title !== void 0 ? _child$props$title : 'Title missing');
143
+ return React.cloneElement(child, {
144
+ index: i
145
+ });
146
+ }
115
147
  }
148
+ return child;
149
+ });
150
+ return React.createElement(StepsContext.Provider, {
151
+ value: providerValue
116
152
  }, React.createElement(Space, _extends({
117
153
  className: classnames('dnb-forms-steps-layout', className, variant === 'drawer' && 'dnb-forms-steps-layout--drawer')
118
154
  }, rest), React.createElement("aside", {
@@ -122,26 +158,20 @@ function StepsLayout(props) {
122
158
  }), React.createElement(StepIndicator, {
123
159
  bottom: true,
124
160
  current_step: activeIndexRef.current,
125
- data: stepIndicatorData,
161
+ data: titles,
126
162
  mode: mode,
127
163
  no_animation: noAnimation,
128
164
  on_change: handleChange,
129
165
  sidebar_id: variant === 'drawer' && !sidebarId ? '' : sidebarId ? sidebarId : id
130
166
  })), React.createElement("div", {
131
167
  className: "dnb-forms-steps-layout__contents"
132
- }, React.Children.map(children, (child, i) => {
133
- if (React.isValidElement(child) && child.type === Step) {
134
- return React.cloneElement(child, {
135
- index: i
136
- });
137
- }
138
- return child;
139
- }))));
168
+ }, contents)));
140
169
  }
141
170
  StepsLayout._supportsSpacingProps = true;
142
171
  StepsLayout.Step = Step;
143
172
  StepsLayout.NextButton = NextButton;
144
173
  StepsLayout.PreviousButton = PreviousButton;
145
174
  StepsLayout.Buttons = Buttons;
175
+ StepsLayout.useStep = useStep;
146
176
  export default StepsLayout;
147
177
  //# sourceMappingURL=StepsLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StepsLayout.js","names":["React","useContext","useCallback","useRef","useReducer","classnames","Space","StepIndicator","warn","isAsync","useId","DataContext","Step","StepsContext","NextButton","PreviousButton","Buttons","Provider","StepsLayout","props","className","id","_id","mode","scrollTopOnStepChange","initialActiveIndex","onStepChange","children","noAnimation","variant","sidebarId","rest","_objectWithoutProperties","_excluded","dataContext","hasContext","setFormState","handleSubmitCall","setShowAllErrors","showAllErrors","scrollToTop","forceUpdate","activeIndexRef","errorOnStepRef","current","callOnStepChange","index","handlePrevious","skipFieldValidation","skipErrorCheck","enableAsyncBehaviour","onSubmit","result","Error","handleNext","stepIndicatorData","Children","map","child","_child$props$title","isValidElement","type","title","handleChange","current_step","createElement","_extends","value","activeIndex","Sidebar","sidebar_id","bottom","data","no_animation","on_change","i","cloneElement","_supportsSpacingProps"],"sources":["../../../../../src/extensions/forms/StepsLayout/StepsLayout.tsx"],"sourcesContent":["import React, { useContext, useCallback, useRef, useReducer } from 'react'\nimport classnames from 'classnames'\nimport { Space, StepIndicator } from '../../../components'\nimport { warn } from '../../../shared/component-helper'\nimport { isAsync } from '../../../shared/helpers/isAsync'\nimport useId from '../../../shared/helpers/useId'\nimport DataContext from '../DataContext/Context'\nimport Step, { Props as StepProps } from './Step'\nimport StepsContext from './StepsContext'\nimport NextButton from './NextButton'\nimport PreviousButton from './PreviousButton'\nimport Buttons from './Buttons'\nimport Provider from '../DataContext/Provider'\nimport { ComponentProps, EventReturnWithStateObject } from '../types'\n\nexport type Props = ComponentProps & {\n id?: string\n mode?: 'static' | 'strict' | 'loose'\n scrollTopOnStepChange?: boolean\n initialActiveIndex?: number\n onStepChange?: (\n index: number,\n mode: 'previous' | 'next'\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n children: React.ReactNode\n variant?: 'sidebar' | 'drawer'\n noAnimation?: boolean\n sidebarId?: string\n}\n\nfunction StepsLayout(props: Props) {\n const {\n className,\n id: _id,\n mode = 'strict',\n scrollTopOnStepChange,\n initialActiveIndex = 0,\n onStepChange,\n children,\n noAnimation = true,\n variant = 'sidebar',\n sidebarId,\n ...rest\n } = props\n const dataContext = useContext(DataContext)\n const {\n hasContext,\n setFormState,\n handleSubmitCall,\n setShowAllErrors,\n showAllErrors,\n scrollToTop,\n } = dataContext\n\n const id = useId(_id)\n const [, forceUpdate] = useReducer(() => ({}), {})\n const activeIndexRef = useRef<number>(initialActiveIndex)\n const errorOnStepRef = useRef<Record<number, boolean>>({})\n\n // Store the current state of showAllErrors\n errorOnStepRef.current[activeIndexRef.current] = showAllErrors\n\n const callOnStepChange = useCallback(\n async (index: number, mode: 'previous' | 'next') => {\n if (isAsync(onStepChange)) {\n return await onStepChange(index, mode)\n }\n\n return onStepChange?.(index, mode)\n },\n [onStepChange]\n )\n\n const handlePrevious = useCallback(() => {\n handleSubmitCall({\n skipFieldValidation: true,\n skipErrorCheck: true,\n enableAsyncBehaviour: isAsync(onStepChange),\n onSubmit: async () => {\n const result = await callOnStepChange(\n activeIndexRef.current - 1,\n 'previous'\n )\n\n // Hide async indicator\n setFormState('abort')\n\n if (!(result instanceof Error)) {\n activeIndexRef.current = activeIndexRef.current - 1\n forceUpdate()\n }\n\n if (scrollTopOnStepChange) {\n scrollToTop()\n }\n\n return result\n },\n })\n }, [\n callOnStepChange,\n handleSubmitCall,\n onStepChange,\n scrollToTop,\n scrollTopOnStepChange,\n setFormState,\n ])\n\n const handleNext = useCallback(() => {\n handleSubmitCall({\n enableAsyncBehaviour: isAsync(onStepChange),\n onSubmit: async () => {\n const result = await callOnStepChange(\n activeIndexRef.current + 1,\n 'next'\n )\n\n // Hide async indicator\n setFormState('abort')\n\n // Set the showAllErrors to the step we got to\n setShowAllErrors(\n errorOnStepRef.current[activeIndexRef.current + 1]\n )\n\n if (!(result instanceof Error)) {\n activeIndexRef.current = activeIndexRef.current + 1\n forceUpdate()\n }\n\n if (scrollTopOnStepChange) {\n scrollToTop()\n }\n\n return result\n },\n })\n }, [\n callOnStepChange,\n handleSubmitCall,\n onStepChange,\n scrollToTop,\n scrollTopOnStepChange,\n setFormState,\n setShowAllErrors,\n ])\n\n const stepIndicatorData = React.Children.map(children, (child) => {\n if (!React.isValidElement(child) || child.type !== Step) {\n throw new Error('Only Step can be children of StepsLayout')\n }\n return child.props.title ?? 'Title missing'\n }) as string[]\n\n const handleChange = useCallback(\n ({ current_step }) => {\n activeIndexRef.current = current_step\n\n // Set the showAllErrors to the step we got to\n setShowAllErrors(errorOnStepRef.current[current_step])\n\n forceUpdate()\n },\n [setShowAllErrors]\n )\n\n if (!hasContext) {\n warn('You may wrap StepsLayout in Form.Handler')\n return (\n <Provider>\n <StepsLayout {...props} id={id} />\n </Provider>\n )\n }\n\n return (\n <StepsContext.Provider\n value={{\n activeIndex: activeIndexRef.current,\n handlePrevious,\n handleNext,\n }}\n >\n <Space\n className={classnames(\n 'dnb-forms-steps-layout',\n variant === 'drawer' && 'dnb-forms-steps-layout--drawer',\n className\n )}\n {...rest}\n >\n <aside className=\"dnb-forms-steps-layout__sidebar\">\n <StepIndicator.Sidebar sidebar_id={id} />\n <StepIndicator\n bottom\n current_step={activeIndexRef.current}\n data={stepIndicatorData}\n mode={mode}\n no_animation={noAnimation}\n on_change={handleChange}\n sidebar_id={\n variant === 'drawer' && !sidebarId\n ? ''\n : sidebarId\n ? sidebarId\n : id\n }\n />\n </aside>\n <div className=\"dnb-forms-steps-layout__contents\">\n {React.Children.map(children, (child, i) => {\n if (React.isValidElement(child) && child.type === Step) {\n return React.cloneElement(\n child as React.ReactElement<StepProps>,\n {\n index: i,\n }\n )\n }\n return child\n })}\n </div>\n </Space>\n </StepsContext.Provider>\n )\n}\n\nStepsLayout._supportsSpacingProps = true\n\nStepsLayout.Step = Step\nStepsLayout.NextButton = NextButton\nStepsLayout.PreviousButton = PreviousButton\nStepsLayout.Buttons = Buttons\n\nexport default StepsLayout\n"],"mappings":"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"}
1
+ {"version":3,"file":"StepsLayout.js","names":["React","useContext","useCallback","useRef","useReducer","useMemo","useEffect","classnames","Space","StepIndicator","warn","isAsync","useId","DataContext","Step","StepsContext","NextButton","PreviousButton","Buttons","Provider","useSharedState","useStep","StepsLayout","props","className","id","_id","mode","scrollTopOnStepChange","initialActiveIndex","onStepChange","children","noAnimation","variant","sidebarId","rest","_objectWithoutProperties","_excluded","hasContext","setFormState","handleSubmitCall","setShowAllErrors","showAllErrors","scrollToTop","forceUpdate","activeIndexRef","errorOnStepRef","current","callOnStepChange","index","handleStepChange","skipErrorCheck","skipFieldValidation","enableAsyncBehaviour","onSubmit","result","Error","setActiveIndex","options","_objectSpread","handlePrevious","handleNext","handleChange","current_step","providerValue","activeIndex","sharedState","undefined","extend","createElement","_extends","titles","contents","Children","map","child","i","isValidElement","_child","_child2","step","type","_step","apply","_child$props$title","push","title","cloneElement","value","Sidebar","sidebar_id","bottom","data","no_animation","on_change","_supportsSpacingProps"],"sources":["../../../../../src/extensions/forms/StepsLayout/StepsLayout.tsx"],"sourcesContent":["import React, {\n useContext,\n useCallback,\n useRef,\n useReducer,\n useMemo,\n useEffect,\n} from 'react'\nimport classnames from 'classnames'\nimport { Space, StepIndicator } from '../../../components'\nimport { warn } from '../../../shared/component-helper'\nimport { isAsync } from '../../../shared/helpers/isAsync'\nimport useId from '../../../shared/helpers/useId'\nimport DataContext from '../DataContext/Context'\nimport Step, { Props as StepProps } from './Step'\nimport StepsContext, { StepIndex, StepsContextState } from './StepsContext'\nimport NextButton from './NextButton'\nimport PreviousButton from './PreviousButton'\nimport Buttons from './Buttons'\nimport Provider from '../DataContext/Provider'\nimport { useSharedState } from '../../../shared/helpers/useSharedState'\nimport { useStep } from './useStep'\nimport { ComponentProps, EventReturnWithStateObject } from '../types'\n\nexport type Props = ComponentProps & {\n id?: string\n mode?: 'static' | 'strict' | 'loose'\n scrollTopOnStepChange?: boolean\n initialActiveIndex?: StepIndex\n onStepChange?: (\n index: StepIndex,\n mode: 'previous' | 'next'\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n children: React.ReactNode\n variant?: 'sidebar' | 'drawer'\n noAnimation?: boolean\n sidebarId?: string\n}\n\nfunction StepsLayout(props: Props) {\n const {\n className,\n id: _id,\n mode = 'strict',\n scrollTopOnStepChange,\n initialActiveIndex = 0,\n onStepChange,\n children,\n noAnimation = true,\n variant = 'sidebar',\n sidebarId,\n ...rest\n } = props\n\n const {\n hasContext,\n setFormState,\n handleSubmitCall,\n setShowAllErrors,\n showAllErrors,\n scrollToTop,\n } = useContext(DataContext)\n\n const id = useId(_id)\n const [, forceUpdate] = useReducer(() => ({}), {})\n const activeIndexRef = useRef<StepIndex>(initialActiveIndex)\n const errorOnStepRef = useRef<Record<StepIndex, boolean>>({})\n\n // Store the current state of showAllErrors\n errorOnStepRef.current[activeIndexRef.current] = showAllErrors\n\n const callOnStepChange = useCallback(\n async (index: StepIndex, mode: 'previous' | 'next') => {\n if (isAsync(onStepChange)) {\n return await onStepChange(index, mode)\n }\n\n return onStepChange?.(index, mode)\n },\n [onStepChange]\n )\n\n const handleStepChange = useCallback(\n ({\n index,\n skipErrorCheck,\n mode,\n }: {\n index: StepIndex\n skipErrorCheck: boolean\n mode: 'previous' | 'next'\n }) => {\n handleSubmitCall({\n skipErrorCheck,\n skipFieldValidation: skipErrorCheck,\n enableAsyncBehaviour: isAsync(onStepChange),\n onSubmit: async () => {\n const result = await callOnStepChange(index, mode)\n\n // Hide async indicator\n setFormState('abort')\n\n if (!skipErrorCheck) {\n // Set the showAllErrors to the step we got to\n setShowAllErrors(errorOnStepRef.current[index])\n }\n\n if (!(result instanceof Error)) {\n activeIndexRef.current = index\n forceUpdate()\n }\n\n if (scrollTopOnStepChange) {\n scrollToTop()\n }\n\n return result\n },\n })\n },\n [\n callOnStepChange,\n handleSubmitCall,\n onStepChange,\n scrollToTop,\n scrollTopOnStepChange,\n setFormState,\n setShowAllErrors,\n ]\n )\n\n const setActiveIndex = useCallback(\n (index: StepIndex, options?: { skipErrorCheck: boolean }) => {\n if (index === activeIndexRef.current) {\n return\n }\n\n const mode = index > activeIndexRef.current ? 'next' : 'previous'\n\n handleStepChange({\n index,\n skipErrorCheck: mode === 'previous',\n mode,\n ...options,\n })\n },\n [handleStepChange]\n )\n\n const handlePrevious = useCallback(() => {\n setActiveIndex(activeIndexRef.current - 1)\n }, [setActiveIndex])\n\n const handleNext = useCallback(() => {\n setActiveIndex(activeIndexRef.current + 1)\n }, [setActiveIndex])\n\n const handleChange = useCallback(\n ({ current_step }) => {\n setActiveIndex(current_step, { skipErrorCheck: true })\n },\n [setActiveIndex]\n )\n\n const providerValue = useMemo(\n () => ({\n activeIndex: activeIndexRef.current,\n setActiveIndex,\n handlePrevious,\n handleNext,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [activeIndexRef.current, setActiveIndex, handlePrevious, handleNext]\n )\n\n // - Handle shared state\n const sharedState = useSharedState<StepsContextState>(\n hasContext && id ? id + '-steps' : undefined\n )\n const { extend } = sharedState\n useEffect(() => {\n if (hasContext && id) {\n extend(providerValue)\n }\n }, [id, extend, providerValue]) // eslint-disable-line react-hooks/exhaustive-deps\n\n if (!hasContext) {\n warn('You may wrap StepsLayout in Form.Handler')\n return (\n <Provider>\n <StepsLayout {...props} id={id} />\n </Provider>\n )\n }\n\n const titles = []\n const contents = React.Children.map(children, (child, i) => {\n if (React.isValidElement(child)) {\n let step = child\n\n if (child?.type !== Step && typeof child.type === 'function') {\n step = child.type.apply(child.type, [\n child.props,\n ]) as React.ReactElement\n\n if (step?.type === Step) {\n child = step\n }\n }\n\n if (child?.type === Step) {\n titles.push(child.props.title ?? 'Title missing')\n return React.cloneElement(child as React.ReactElement<StepProps>, {\n index: i,\n })\n }\n }\n\n return child\n })\n\n return (\n <StepsContext.Provider value={providerValue}>\n <Space\n className={classnames(\n 'dnb-forms-steps-layout',\n variant === 'drawer' && 'dnb-forms-steps-layout--drawer',\n className\n )}\n {...rest}\n >\n <aside className=\"dnb-forms-steps-layout__sidebar\">\n <StepIndicator.Sidebar sidebar_id={id} />\n <StepIndicator\n bottom\n current_step={activeIndexRef.current}\n data={titles}\n mode={mode}\n no_animation={noAnimation}\n on_change={handleChange}\n sidebar_id={\n variant === 'drawer' && !sidebarId\n ? ''\n : sidebarId\n ? sidebarId\n : id\n }\n />\n </aside>\n\n <div className=\"dnb-forms-steps-layout__contents\">{contents}</div>\n </Space>\n </StepsContext.Provider>\n )\n}\n\nStepsLayout._supportsSpacingProps = true\n\nStepsLayout.Step = Step\nStepsLayout.NextButton = NextButton\nStepsLayout.PreviousButton = PreviousButton\nStepsLayout.Buttons = Buttons\nStepsLayout.useStep = useStep\n\nexport default StepsLayout\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { StepsContextState } from './StepsContext';
2
+ import { Identifier } from '../types';
3
+ export declare function useStep(id?: Identifier): StepsContextState;
@@ -0,0 +1,12 @@
1
+ "use client";
2
+
3
+ import { useContext, useRef } from 'react';
4
+ import StepsContext from './StepsContext';
5
+ import { useSharedState } from '../../../shared/helpers/useSharedState';
6
+ export function useStep(id = null) {
7
+ const sharedDataRef = useRef(null);
8
+ sharedDataRef.current = useSharedState(id ? id + '-steps' : undefined);
9
+ const context = useContext(StepsContext);
10
+ return sharedDataRef.current.data || context;
11
+ }
12
+ //# sourceMappingURL=useStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStep.js","names":["useContext","useRef","StepsContext","useSharedState","useStep","id","sharedDataRef","current","undefined","context","data"],"sources":["../../../../../src/extensions/forms/StepsLayout/useStep.tsx"],"sourcesContent":["import { useContext, useRef } from 'react'\nimport StepsContext, { StepsContextState } from './StepsContext'\nimport { Identifier } from '../types'\nimport { useSharedState } from '../../../shared/helpers/useSharedState'\n\nexport function useStep(id: Identifier = null) {\n const sharedDataRef =\n useRef<ReturnType<typeof useSharedState<StepsContextState>>>(null)\n sharedDataRef.current = useSharedState<StepsContextState>(\n id ? id + '-steps' : undefined\n )\n\n const context = useContext(StepsContext)\n return sharedDataRef.current.data || context\n}\n"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,MAAM,QAAQ,OAAO;AAC1C,OAAOC,YAAY,MAA6B,gBAAgB;AAEhE,SAASC,cAAc,QAAQ,wCAAwC;AAEvE,OAAO,SAASC,OAAOA,CAACC,EAAc,GAAG,IAAI,EAAE;EAC7C,MAAMC,aAAa,GACjBL,MAAM,CAAuD,IAAI,CAAC;EACpEK,aAAa,CAACC,OAAO,GAAGJ,cAAc,CACpCE,EAAE,GAAGA,EAAE,GAAG,QAAQ,GAAGG,SACvB,CAAC;EAED,MAAMC,OAAO,GAAGT,UAAU,CAACE,YAAY,CAAC;EACxC,OAAOI,aAAa,CAACC,OAAO,CAACG,IAAI,IAAID,OAAO;AAC9C"}
@@ -402,8 +402,8 @@ fieldset.dnb-forms-field-block:not([class*=space__left]) {
402
402
  .dnb-forms-button-row {
403
403
  display: flex;
404
404
  flex-flow: row;
405
- -moz-column-gap: var(--spacing-small);
406
- column-gap: var(--spacing-small);
405
+ flex-wrap: wrap;
406
+ gap: var(--spacing-small);
407
407
  }
408
408
  .dnb-card + .dnb-forms-button-row:not([class*=space__top]) {
409
409
  margin-top: var(--spacing-small);