@dnb/eufemia 10.37.0 → 10.38.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 (345) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/cjs/components/accordion/Accordion.d.ts +13 -3
  3. package/cjs/components/accordion/Accordion.js +14 -9
  4. package/cjs/components/accordion/Accordion.js.map +1 -1
  5. package/cjs/components/accordion/AccordionContext.d.ts +2 -0
  6. package/cjs/components/accordion/AccordionContext.js.map +1 -1
  7. package/cjs/components/accordion/AccordionDocs.js +5 -0
  8. package/cjs/components/accordion/AccordionDocs.js.map +1 -1
  9. package/cjs/components/accordion/AccordionGroup.js +6 -3
  10. package/cjs/components/accordion/AccordionGroup.js.map +1 -1
  11. package/cjs/components/accordion/AccordionProviderContext.d.ts +2 -0
  12. package/cjs/components/accordion/AccordionProviderContext.js.map +1 -1
  13. package/cjs/components/accordion/AccordionStore.d.ts +2 -0
  14. package/cjs/components/accordion/AccordionStore.js +1 -1
  15. package/cjs/components/accordion/AccordionStore.js.map +1 -1
  16. package/cjs/components/accordion/style/themes/dnb-accordion-theme-ui.css +1 -0
  17. package/cjs/components/accordion/style/themes/dnb-accordion-theme-ui.min.css +1 -1
  18. package/cjs/components/accordion/style/themes/dnb-accordion-theme-ui.scss +3 -0
  19. package/cjs/components/button/Button.d.ts +1 -1
  20. package/cjs/components/card/Card.js +4 -3
  21. package/cjs/components/card/Card.js.map +1 -1
  22. package/cjs/components/card/style/dnb-card.css +16 -0
  23. package/cjs/components/card/style/dnb-card.min.css +1 -1
  24. package/cjs/components/card/style/dnb-card.scss +17 -0
  25. package/cjs/components/card/style/themes/dnb-card-theme-sbanken.css +4 -4
  26. package/cjs/components/card/style/themes/dnb-card-theme-sbanken.min.css +1 -1
  27. package/cjs/components/card/style/themes/dnb-card-theme-sbanken.scss +3 -5
  28. package/cjs/components/card/style/themes/dnb-card-theme-ui.css +4 -7
  29. package/cjs/components/card/style/themes/dnb-card-theme-ui.min.css +1 -1
  30. package/cjs/components/card/style/themes/dnb-card-theme-ui.scss +3 -7
  31. package/cjs/components/checkbox/style/dnb-checkbox.scss +1 -1
  32. package/cjs/components/height-animation/HeightAnimation.d.ts +1 -1
  33. package/cjs/components/height-animation/HeightAnimation.js +6 -2
  34. package/cjs/components/height-animation/HeightAnimation.js.map +1 -1
  35. package/cjs/components/height-animation/HeightAnimationDocs.d.ts +3 -0
  36. package/cjs/components/height-animation/HeightAnimationDocs.js +83 -0
  37. package/cjs/components/height-animation/HeightAnimationDocs.js.map +1 -0
  38. package/cjs/components/height-animation/style/dnb-height-animation.css +3 -2
  39. package/cjs/components/height-animation/style/dnb-height-animation.min.css +1 -1
  40. package/cjs/components/height-animation/style/dnb-height-animation.scss +3 -2
  41. package/cjs/components/height-animation/useHeightAnimation.d.ts +6 -1
  42. package/cjs/components/height-animation/useHeightAnimation.js +36 -6
  43. package/cjs/components/height-animation/useHeightAnimation.js.map +1 -1
  44. package/cjs/components/radio/RadioGroup.js +4 -2
  45. package/cjs/components/radio/RadioGroup.js.map +1 -1
  46. package/cjs/components/radio/style/dnb-radio.css +8 -5
  47. package/cjs/components/radio/style/dnb-radio.min.css +1 -1
  48. package/cjs/components/radio/style/dnb-radio.scss +11 -13
  49. package/cjs/components/section/Section.js +3 -0
  50. package/cjs/components/section/Section.js.map +1 -1
  51. package/cjs/components/section/style/dnb-section.scss +2 -0
  52. package/cjs/components/toggle-button/ToggleButtonGroup.js +6 -3
  53. package/cjs/components/toggle-button/ToggleButtonGroup.js.map +1 -1
  54. package/cjs/components/toggle-button/style/dnb-toggle-button.css +3 -3
  55. package/cjs/components/toggle-button/style/dnb-toggle-button.min.css +1 -1
  56. package/cjs/components/toggle-button/style/dnb-toggle-button.scss +6 -2
  57. package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.d.ts +14 -0
  58. package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.js +90 -31
  59. package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
  60. package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -3
  61. package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
  62. package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +14 -3
  63. package/cjs/extensions/forms/Field/Selection/Selection.d.ts +15 -3
  64. package/cjs/extensions/forms/Field/Selection/Selection.js +71 -42
  65. package/cjs/extensions/forms/Field/Selection/Selection.js.map +1 -1
  66. package/cjs/extensions/forms/Field/Selection/style/dnb-selection.css +9 -0
  67. package/cjs/extensions/forms/Field/Selection/style/dnb-selection.min.css +1 -1
  68. package/cjs/extensions/forms/Field/Selection/style/dnb-selection.scss +16 -0
  69. package/cjs/extensions/forms/Form/Visibility/Visibility.d.ts +3 -1
  70. package/cjs/extensions/forms/Form/Visibility/Visibility.js +4 -2
  71. package/cjs/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  72. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.js +5 -0
  73. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  74. package/cjs/extensions/forms/style/dnb-forms.css +21 -3
  75. package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
  76. package/cjs/extensions/forms/types.d.ts +1 -1
  77. package/cjs/extensions/forms/types.js.map +1 -1
  78. package/cjs/shared/Eufemia.d.ts +1 -1
  79. package/cjs/shared/Eufemia.js +2 -2
  80. package/cjs/shared/Eufemia.js.map +1 -1
  81. package/cjs/style/core/scopes.scss +1 -1
  82. package/cjs/style/dnb-ui-basis.css +1 -1
  83. package/cjs/style/dnb-ui-basis.min.css +1 -1
  84. package/cjs/style/dnb-ui-body.css +1 -1
  85. package/cjs/style/dnb-ui-body.min.css +1 -1
  86. package/cjs/style/dnb-ui-components.css +51 -13
  87. package/cjs/style/dnb-ui-components.min.css +3 -3
  88. package/cjs/style/dnb-ui-core.css +1 -1
  89. package/cjs/style/dnb-ui-core.min.css +1 -1
  90. package/cjs/style/dnb-ui-extensions.css +21 -3
  91. package/cjs/style/dnb-ui-extensions.min.css +1 -1
  92. package/cjs/style/dnb-ui-forms.css +21 -3
  93. package/cjs/style/dnb-ui-forms.min.css +1 -1
  94. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +77 -23
  95. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  96. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +21 -3
  97. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  98. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +21 -3
  99. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  100. package/cjs/style/themes/theme-sbanken/fonts.scss +1 -1
  101. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +76 -20
  102. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
  103. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +21 -3
  104. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  105. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +21 -3
  106. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  107. package/cjs/style/themes/theme-ui/ui-theme-components.css +77 -23
  108. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +5 -5
  109. package/cjs/style/themes/theme-ui/ui-theme-extensions.css +21 -3
  110. package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  111. package/cjs/style/themes/theme-ui/ui-theme-forms.css +21 -3
  112. package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  113. package/components/accordion/Accordion.d.ts +13 -3
  114. package/components/accordion/Accordion.js +15 -10
  115. package/components/accordion/Accordion.js.map +1 -1
  116. package/components/accordion/AccordionContext.d.ts +2 -0
  117. package/components/accordion/AccordionContext.js.map +1 -1
  118. package/components/accordion/AccordionDocs.js +5 -0
  119. package/components/accordion/AccordionDocs.js.map +1 -1
  120. package/components/accordion/AccordionGroup.js +6 -3
  121. package/components/accordion/AccordionGroup.js.map +1 -1
  122. package/components/accordion/AccordionProviderContext.d.ts +2 -0
  123. package/components/accordion/AccordionProviderContext.js.map +1 -1
  124. package/components/accordion/AccordionStore.d.ts +2 -0
  125. package/components/accordion/AccordionStore.js +1 -1
  126. package/components/accordion/AccordionStore.js.map +1 -1
  127. package/components/accordion/style/themes/dnb-accordion-theme-ui.css +1 -0
  128. package/components/accordion/style/themes/dnb-accordion-theme-ui.min.css +1 -1
  129. package/components/accordion/style/themes/dnb-accordion-theme-ui.scss +3 -0
  130. package/components/button/Button.d.ts +1 -1
  131. package/components/card/Card.js +4 -3
  132. package/components/card/Card.js.map +1 -1
  133. package/components/card/style/dnb-card.css +16 -0
  134. package/components/card/style/dnb-card.min.css +1 -1
  135. package/components/card/style/dnb-card.scss +17 -0
  136. package/components/card/style/themes/dnb-card-theme-sbanken.css +4 -4
  137. package/components/card/style/themes/dnb-card-theme-sbanken.min.css +1 -1
  138. package/components/card/style/themes/dnb-card-theme-sbanken.scss +3 -5
  139. package/components/card/style/themes/dnb-card-theme-ui.css +4 -7
  140. package/components/card/style/themes/dnb-card-theme-ui.min.css +1 -1
  141. package/components/card/style/themes/dnb-card-theme-ui.scss +3 -7
  142. package/components/checkbox/style/dnb-checkbox.scss +1 -1
  143. package/components/height-animation/HeightAnimation.d.ts +1 -1
  144. package/components/height-animation/HeightAnimation.js +6 -2
  145. package/components/height-animation/HeightAnimation.js.map +1 -1
  146. package/components/height-animation/HeightAnimationDocs.d.ts +3 -0
  147. package/components/height-animation/HeightAnimationDocs.js +75 -0
  148. package/components/height-animation/HeightAnimationDocs.js.map +1 -0
  149. package/components/height-animation/style/dnb-height-animation.css +3 -2
  150. package/components/height-animation/style/dnb-height-animation.min.css +1 -1
  151. package/components/height-animation/style/dnb-height-animation.scss +3 -2
  152. package/components/height-animation/useHeightAnimation.d.ts +6 -1
  153. package/components/height-animation/useHeightAnimation.js +37 -7
  154. package/components/height-animation/useHeightAnimation.js.map +1 -1
  155. package/components/radio/RadioGroup.js +4 -2
  156. package/components/radio/RadioGroup.js.map +1 -1
  157. package/components/radio/style/dnb-radio.css +8 -5
  158. package/components/radio/style/dnb-radio.min.css +1 -1
  159. package/components/radio/style/dnb-radio.scss +11 -13
  160. package/components/section/Section.js +3 -0
  161. package/components/section/Section.js.map +1 -1
  162. package/components/section/style/dnb-section.scss +2 -0
  163. package/components/toggle-button/ToggleButtonGroup.js +6 -3
  164. package/components/toggle-button/ToggleButtonGroup.js.map +1 -1
  165. package/components/toggle-button/style/dnb-toggle-button.css +3 -3
  166. package/components/toggle-button/style/dnb-toggle-button.min.css +1 -1
  167. package/components/toggle-button/style/dnb-toggle-button.scss +6 -2
  168. package/es/components/accordion/Accordion.d.ts +13 -3
  169. package/es/components/accordion/Accordion.js +15 -10
  170. package/es/components/accordion/Accordion.js.map +1 -1
  171. package/es/components/accordion/AccordionContext.d.ts +2 -0
  172. package/es/components/accordion/AccordionContext.js.map +1 -1
  173. package/es/components/accordion/AccordionDocs.js +5 -0
  174. package/es/components/accordion/AccordionDocs.js.map +1 -1
  175. package/es/components/accordion/AccordionGroup.js +6 -3
  176. package/es/components/accordion/AccordionGroup.js.map +1 -1
  177. package/es/components/accordion/AccordionProviderContext.d.ts +2 -0
  178. package/es/components/accordion/AccordionProviderContext.js.map +1 -1
  179. package/es/components/accordion/AccordionStore.d.ts +2 -0
  180. package/es/components/accordion/AccordionStore.js +1 -1
  181. package/es/components/accordion/AccordionStore.js.map +1 -1
  182. package/es/components/accordion/style/themes/dnb-accordion-theme-ui.css +1 -0
  183. package/es/components/accordion/style/themes/dnb-accordion-theme-ui.min.css +1 -1
  184. package/es/components/accordion/style/themes/dnb-accordion-theme-ui.scss +3 -0
  185. package/es/components/button/Button.d.ts +1 -1
  186. package/es/components/card/Card.js +4 -3
  187. package/es/components/card/Card.js.map +1 -1
  188. package/es/components/card/style/dnb-card.css +16 -0
  189. package/es/components/card/style/dnb-card.min.css +1 -1
  190. package/es/components/card/style/dnb-card.scss +17 -0
  191. package/es/components/card/style/themes/dnb-card-theme-sbanken.css +4 -4
  192. package/es/components/card/style/themes/dnb-card-theme-sbanken.min.css +1 -1
  193. package/es/components/card/style/themes/dnb-card-theme-sbanken.scss +3 -5
  194. package/es/components/card/style/themes/dnb-card-theme-ui.css +4 -7
  195. package/es/components/card/style/themes/dnb-card-theme-ui.min.css +1 -1
  196. package/es/components/card/style/themes/dnb-card-theme-ui.scss +3 -7
  197. package/es/components/checkbox/style/dnb-checkbox.scss +1 -1
  198. package/es/components/height-animation/HeightAnimation.d.ts +1 -1
  199. package/es/components/height-animation/HeightAnimation.js +6 -2
  200. package/es/components/height-animation/HeightAnimation.js.map +1 -1
  201. package/es/components/height-animation/HeightAnimationDocs.d.ts +3 -0
  202. package/es/components/height-animation/HeightAnimationDocs.js +75 -0
  203. package/es/components/height-animation/HeightAnimationDocs.js.map +1 -0
  204. package/es/components/height-animation/style/dnb-height-animation.css +3 -2
  205. package/es/components/height-animation/style/dnb-height-animation.min.css +1 -1
  206. package/es/components/height-animation/style/dnb-height-animation.scss +3 -2
  207. package/es/components/height-animation/useHeightAnimation.d.ts +6 -1
  208. package/es/components/height-animation/useHeightAnimation.js +37 -7
  209. package/es/components/height-animation/useHeightAnimation.js.map +1 -1
  210. package/es/components/radio/RadioGroup.js +4 -2
  211. package/es/components/radio/RadioGroup.js.map +1 -1
  212. package/es/components/radio/style/dnb-radio.css +8 -5
  213. package/es/components/radio/style/dnb-radio.min.css +1 -1
  214. package/es/components/radio/style/dnb-radio.scss +11 -13
  215. package/es/components/section/Section.js +3 -0
  216. package/es/components/section/Section.js.map +1 -1
  217. package/es/components/section/style/dnb-section.scss +2 -0
  218. package/es/components/toggle-button/ToggleButtonGroup.js +6 -3
  219. package/es/components/toggle-button/ToggleButtonGroup.js.map +1 -1
  220. package/es/components/toggle-button/style/dnb-toggle-button.css +3 -3
  221. package/es/components/toggle-button/style/dnb-toggle-button.min.css +1 -1
  222. package/es/components/toggle-button/style/dnb-toggle-button.scss +6 -2
  223. package/es/extensions/forms/Field/ArraySelection/ArraySelection.d.ts +14 -0
  224. package/es/extensions/forms/Field/ArraySelection/ArraySelection.js +87 -29
  225. package/es/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
  226. package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -3
  227. package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
  228. package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +14 -3
  229. package/es/extensions/forms/Field/Selection/Selection.d.ts +15 -3
  230. package/es/extensions/forms/Field/Selection/Selection.js +68 -42
  231. package/es/extensions/forms/Field/Selection/Selection.js.map +1 -1
  232. package/es/extensions/forms/Field/Selection/style/dnb-selection.css +9 -0
  233. package/es/extensions/forms/Field/Selection/style/dnb-selection.min.css +1 -1
  234. package/es/extensions/forms/Field/Selection/style/dnb-selection.scss +16 -0
  235. package/es/extensions/forms/Form/Visibility/Visibility.d.ts +3 -1
  236. package/es/extensions/forms/Form/Visibility/Visibility.js +4 -2
  237. package/es/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  238. package/es/extensions/forms/Form/Visibility/VisibilityDocs.js +5 -0
  239. package/es/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  240. package/es/extensions/forms/style/dnb-forms.css +21 -3
  241. package/es/extensions/forms/style/dnb-forms.min.css +1 -1
  242. package/es/extensions/forms/types.d.ts +1 -1
  243. package/es/extensions/forms/types.js.map +1 -1
  244. package/es/shared/Eufemia.d.ts +1 -1
  245. package/es/shared/Eufemia.js +2 -2
  246. package/es/shared/Eufemia.js.map +1 -1
  247. package/es/style/core/scopes.scss +1 -1
  248. package/es/style/dnb-ui-basis.css +1 -1
  249. package/es/style/dnb-ui-basis.min.css +1 -1
  250. package/es/style/dnb-ui-body.css +1 -1
  251. package/es/style/dnb-ui-body.min.css +1 -1
  252. package/es/style/dnb-ui-components.css +51 -13
  253. package/es/style/dnb-ui-components.min.css +3 -3
  254. package/es/style/dnb-ui-core.css +1 -1
  255. package/es/style/dnb-ui-core.min.css +1 -1
  256. package/es/style/dnb-ui-extensions.css +21 -3
  257. package/es/style/dnb-ui-extensions.min.css +1 -1
  258. package/es/style/dnb-ui-forms.css +21 -3
  259. package/es/style/dnb-ui-forms.min.css +1 -1
  260. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +77 -23
  261. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  262. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +21 -3
  263. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  264. package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +21 -3
  265. package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  266. package/es/style/themes/theme-sbanken/fonts.scss +1 -1
  267. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +76 -20
  268. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
  269. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +21 -3
  270. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  271. package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +21 -3
  272. package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  273. package/es/style/themes/theme-ui/ui-theme-components.css +77 -23
  274. package/es/style/themes/theme-ui/ui-theme-components.min.css +5 -5
  275. package/es/style/themes/theme-ui/ui-theme-extensions.css +21 -3
  276. package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  277. package/es/style/themes/theme-ui/ui-theme-forms.css +21 -3
  278. package/es/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  279. package/esm/dnb-ui-basis.min.mjs +1 -1
  280. package/esm/dnb-ui-components.min.mjs +1 -1
  281. package/esm/dnb-ui-elements.min.mjs +1 -1
  282. package/esm/dnb-ui-extensions.min.mjs +2 -2
  283. package/esm/dnb-ui-lib.min.mjs +1 -1
  284. package/extensions/forms/Field/ArraySelection/ArraySelection.d.ts +14 -0
  285. package/extensions/forms/Field/ArraySelection/ArraySelection.js +88 -29
  286. package/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
  287. package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -3
  288. package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
  289. package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +14 -3
  290. package/extensions/forms/Field/Selection/Selection.d.ts +15 -3
  291. package/extensions/forms/Field/Selection/Selection.js +69 -42
  292. package/extensions/forms/Field/Selection/Selection.js.map +1 -1
  293. package/extensions/forms/Field/Selection/style/dnb-selection.css +9 -0
  294. package/extensions/forms/Field/Selection/style/dnb-selection.min.css +1 -1
  295. package/extensions/forms/Field/Selection/style/dnb-selection.scss +16 -0
  296. package/extensions/forms/Form/Visibility/Visibility.d.ts +3 -1
  297. package/extensions/forms/Form/Visibility/Visibility.js +4 -2
  298. package/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  299. package/extensions/forms/Form/Visibility/VisibilityDocs.js +5 -0
  300. package/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  301. package/extensions/forms/style/dnb-forms.css +21 -3
  302. package/extensions/forms/style/dnb-forms.min.css +1 -1
  303. package/extensions/forms/types.d.ts +1 -1
  304. package/extensions/forms/types.js.map +1 -1
  305. package/package.json +1 -1
  306. package/shared/Eufemia.d.ts +1 -1
  307. package/shared/Eufemia.js +2 -2
  308. package/shared/Eufemia.js.map +1 -1
  309. package/style/core/scopes.scss +1 -1
  310. package/style/dnb-ui-basis.css +1 -1
  311. package/style/dnb-ui-basis.min.css +1 -1
  312. package/style/dnb-ui-body.css +1 -1
  313. package/style/dnb-ui-body.min.css +1 -1
  314. package/style/dnb-ui-components.css +51 -13
  315. package/style/dnb-ui-components.min.css +3 -3
  316. package/style/dnb-ui-core.css +1 -1
  317. package/style/dnb-ui-core.min.css +1 -1
  318. package/style/dnb-ui-extensions.css +21 -3
  319. package/style/dnb-ui-extensions.min.css +1 -1
  320. package/style/dnb-ui-forms.css +21 -3
  321. package/style/dnb-ui-forms.min.css +1 -1
  322. package/style/themes/theme-eiendom/eiendom-theme-components.css +77 -23
  323. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  324. package/style/themes/theme-eiendom/eiendom-theme-extensions.css +21 -3
  325. package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
  326. package/style/themes/theme-eiendom/eiendom-theme-forms.css +21 -3
  327. package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
  328. package/style/themes/theme-sbanken/fonts.scss +1 -1
  329. package/style/themes/theme-sbanken/sbanken-theme-components.css +76 -20
  330. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
  331. package/style/themes/theme-sbanken/sbanken-theme-extensions.css +21 -3
  332. package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  333. package/style/themes/theme-sbanken/sbanken-theme-forms.css +21 -3
  334. package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  335. package/style/themes/theme-ui/ui-theme-components.css +77 -23
  336. package/style/themes/theme-ui/ui-theme-components.min.css +5 -5
  337. package/style/themes/theme-ui/ui-theme-extensions.css +21 -3
  338. package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
  339. package/style/themes/theme-ui/ui-theme-forms.css +21 -3
  340. package/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
  341. package/umd/dnb-ui-basis.min.js +1 -1
  342. package/umd/dnb-ui-components.min.js +1 -1
  343. package/umd/dnb-ui-elements.min.js +1 -1
  344. package/umd/dnb-ui-extensions.min.js +3 -3
  345. package/umd/dnb-ui-lib.min.js +1 -1
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { ReturnAdditional } from '../../hooks/useFieldProps';
2
3
  import { FieldHelpProps, FieldProps } from '../../types';
3
4
  export type Props = FieldHelpProps & FieldProps<Array<string | number> | undefined> & {
4
5
  children?: React.ReactNode;
@@ -9,4 +10,17 @@ declare function ArraySelection(props: Props): import("react/jsx-runtime").JSX.E
9
10
  declare namespace ArraySelection {
10
11
  var _supportsSpacingProps: boolean;
11
12
  }
13
+ export declare function getCheckboxOrToggleOptions({ id, variant, info, warning, emptyValue, htmlAttributes, children, value, disabled, hasError, handleChange, }: {
14
+ id: Props['id'];
15
+ variant?: Props['variant'];
16
+ info?: Props['info'];
17
+ warning?: Props['warning'];
18
+ emptyValue?: Props['emptyValue'];
19
+ htmlAttributes?: Props['htmlAttributes'];
20
+ children?: Props['children'];
21
+ value?: Props['value'];
22
+ disabled?: Props['disabled'];
23
+ hasError?: ReturnAdditional<Props['value']>['hasError'];
24
+ handleChange?: ReturnAdditional<Props['value']>['handleChange'];
25
+ }): any;
12
26
  export default ArraySelection;
@@ -1,13 +1,17 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
1
3
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
+ const _excluded = ["value", "error", "title", "help", "className", "children"];
2
5
  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; }
3
6
  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; }
4
- import React, { useMemo } from 'react';
7
+ import React from 'react';
5
8
  import { Checkbox, HelpButton, ToggleButton } from '../../../../components';
6
9
  import classnames from 'classnames';
7
10
  import OptionField from '../Option';
8
11
  import FieldBlock from '../../FieldBlock';
9
12
  import { useFieldProps } from '../../hooks';
10
13
  import { pickSpacingProps } from '../../../../components/flex/utils';
14
+ import { getStatus } from '../Selection';
11
15
  import ToggleButtonGroupContext from '../../../../components/toggle-button/ToggleButtonGroupContext';
12
16
  function ArraySelection(props) {
13
17
  const {
@@ -26,12 +30,13 @@ function ArraySelection(props) {
26
30
  warning,
27
31
  disabled,
28
32
  emptyValue,
33
+ htmlAttributes,
29
34
  handleChange,
30
35
  children
31
36
  } = useFieldProps(props);
32
37
  const fieldSectionProps = _objectSpread({
33
38
  forId: id,
34
- className: classnames(`dnb-forms-field-array-selection dnb-forms-field-array-selection--layout-${layout} dnb-forms-field-array-selection--options-layout-${optionsLayout}`, className),
39
+ className: classnames(`dnb-forms-field-array-selection dnb-forms-field-array-selection--variant-${variant} dnb-forms-field-array-selection--layout-${layout} dnb-forms-field-array-selection--options-layout-${optionsLayout}`, className),
35
40
  contentClassName: 'dnb-forms-field-array-selection__options',
36
41
  help,
37
42
  info,
@@ -45,18 +50,19 @@ function ArraySelection(props) {
45
50
  title: help.title
46
51
  }, help.content) : undefined)
47
52
  }, pickSpacingProps(props));
48
- const options = useMemo(() => React.Children.toArray(children).filter(child => React.isValidElement(child) && child.type === OptionField).map(option => {
49
- var _option$props$title;
50
- return {
51
- title: (_option$props$title = option.props.title) !== null && _option$props$title !== void 0 ? _option$props$title : option.props.children,
52
- value: option.props.value,
53
- handleSelect: () => {
54
- const selected = option.props.value;
55
- const newValue = value !== null && value !== void 0 && value.includes(selected) ? value.filter(value => value !== selected) : [...(value !== null && value !== void 0 ? value : []), selected];
56
- handleChange === null || handleChange === void 0 ? void 0 : handleChange(newValue.length === 0 ? emptyValue : newValue);
57
- }
58
- };
59
- }), [children, value, emptyValue, handleChange]);
53
+ const options = getCheckboxOrToggleOptions({
54
+ id,
55
+ variant,
56
+ info,
57
+ warning,
58
+ emptyValue,
59
+ htmlAttributes,
60
+ children,
61
+ value,
62
+ disabled,
63
+ handleChange,
64
+ hasError
65
+ });
60
66
  switch (variant) {
61
67
  case 'button':
62
68
  return React.createElement(FieldBlock, fieldSectionProps, React.createElement(ToggleButtonGroupContext.Provider, {
@@ -64,24 +70,77 @@ function ArraySelection(props) {
64
70
  status: hasError ? 'error' : undefined,
65
71
  disabled
66
72
  }
67
- }, options.map((option, i) => React.createElement(ToggleButton, {
68
- key: `option-${i}-${option.value}`,
69
- text: option.title,
70
- checked: value === null || value === void 0 ? void 0 : value.includes(option.value),
71
- on_change: option.handleSelect
72
- }))));
73
+ }, options));
73
74
  case 'checkbox':
74
- return React.createElement(FieldBlock, fieldSectionProps, options.map((option, i) => React.createElement(Checkbox, {
75
- key: `option-${i}-${option.value}`,
76
- className: "dnb-forms-field-array-selection__checkbox",
77
- label: option.title,
78
- checked: value === null || value === void 0 ? void 0 : value.includes(option.value),
79
- disabled: disabled,
80
- on_change: option.handleSelect,
81
- status: hasError ? 'error' : undefined
82
- })));
75
+ return React.createElement(FieldBlock, fieldSectionProps, options);
83
76
  }
84
77
  }
78
+ export function getCheckboxOrToggleOptions(_ref) {
79
+ let {
80
+ id,
81
+ variant = 'checkbox',
82
+ info,
83
+ warning,
84
+ emptyValue,
85
+ htmlAttributes,
86
+ children,
87
+ value,
88
+ disabled,
89
+ hasError,
90
+ handleChange
91
+ } = _ref;
92
+ const optionsCount = React.Children.count(children);
93
+ const Component = variant === 'checkbox' ? Checkbox : ToggleButton;
94
+ const createOption = (props, i) => {
95
+ const {
96
+ value: selected,
97
+ error,
98
+ title,
99
+ help,
100
+ className,
101
+ children
102
+ } = props,
103
+ rest = _objectWithoutProperties(props, _excluded);
104
+ const label = title !== null && title !== void 0 ? title : children;
105
+ const status = getStatus(error, info, warning);
106
+ const suffix = help ? React.createElement(HelpButton, {
107
+ size: "small",
108
+ title: help.title
109
+ }, help.content) : undefined;
110
+ const handleSelect = () => {
111
+ const newValue = value !== null && value !== void 0 && value.includes(selected) ? value.filter(value => value !== selected) : [...(value !== null && value !== void 0 ? value : []), selected];
112
+ handleChange === null || handleChange === void 0 ? void 0 : handleChange(newValue.length === 0 ? emptyValue : newValue);
113
+ };
114
+ return React.createElement(Component, _extends({
115
+ id: optionsCount === 1 ? id : undefined,
116
+ key: `option-${i}-${value}`,
117
+ className: classnames(`dnb-forms-field-array-selection__${variant}`, className),
118
+ label: variant === 'checkbox' ? label : undefined,
119
+ text: variant === 'button' ? label : undefined,
120
+ value: value,
121
+ disabled: disabled,
122
+ checked: value === null || value === void 0 ? void 0 : value.includes(selected),
123
+ status: (hasError || status) && 'error',
124
+ suffix: suffix,
125
+ on_change: handleSelect
126
+ }, htmlAttributes, rest));
127
+ };
128
+ const mapOptions = children => {
129
+ return React.Children.toArray(children).map((child, i) => {
130
+ if (React.isValidElement(child)) {
131
+ if (child.type === OptionField) {
132
+ return createOption(child.props, i);
133
+ }
134
+ if (child.props.children) {
135
+ const nestedChildren = mapOptions(child.props.children);
136
+ return React.cloneElement(child, child.props, nestedChildren);
137
+ }
138
+ }
139
+ return child;
140
+ });
141
+ };
142
+ return mapOptions(children);
143
+ }
85
144
  ArraySelection._supportsSpacingProps = true;
86
145
  export default ArraySelection;
87
146
  //# sourceMappingURL=ArraySelection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArraySelection.js","names":["React","useMemo","Checkbox","HelpButton","ToggleButton","classnames","OptionField","FieldBlock","useFieldProps","pickSpacingProps","ToggleButtonGroupContext","ArraySelection","props","id","className","variant","layout","optionsLayout","label","labelDescription","value","error","hasError","help","info","warning","disabled","emptyValue","handleChange","children","fieldSectionProps","_objectSpread","forId","contentClassName","createElement","Fragment","size","left","title","content","undefined","options","Children","toArray","filter","child","isValidElement","type","map","option","_option$props$title","handleSelect","selected","newValue","includes","length","Provider","status","i","key","text","checked","on_change","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/ArraySelection/ArraySelection.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { Checkbox, HelpButton, ToggleButton } from '../../../../components'\nimport classnames from 'classnames'\nimport OptionField from '../Option'\nimport FieldBlock from '../../FieldBlock'\nimport { useFieldProps } from '../../hooks'\nimport { FieldHelpProps, FieldProps } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport ToggleButtonGroupContext from '../../../../components/toggle-button/ToggleButtonGroupContext'\n\ninterface IOption {\n title: string\n value: number | string\n handleSelect: () => void\n}\n\nexport type Props = FieldHelpProps &\n FieldProps<Array<string | number> | undefined> & {\n children?: React.ReactNode\n variant?: 'checkbox' | 'button'\n optionsLayout?: 'horizontal' | 'vertical'\n }\n\nfunction ArraySelection(props: Props) {\n const {\n id,\n className,\n variant = 'checkbox',\n layout = 'vertical',\n optionsLayout = 'vertical',\n label,\n labelDescription,\n value,\n error,\n hasError,\n help,\n info,\n warning,\n disabled,\n emptyValue,\n handleChange,\n children,\n } = useFieldProps(props)\n\n const fieldSectionProps = {\n forId: id,\n className: classnames(\n 'dnb-forms-field-array-selection',\n `dnb-forms-field-array-selection--layout-${layout}`,\n `dnb-forms-field-array-selection--options-layout-${optionsLayout}`,\n className\n ),\n contentClassName: 'dnb-forms-field-array-selection__options',\n help,\n info,\n warning,\n error,\n layout,\n label,\n labelDescription: (\n <>\n {labelDescription}\n {help ? (\n <HelpButton\n size=\"small\"\n left={labelDescription ? 'x-small' : false}\n title={help.title}\n >\n {help.content}\n </HelpButton>\n ) : undefined}\n </>\n ),\n ...pickSpacingProps(props),\n }\n\n const options: IOption[] = useMemo(\n () =>\n React.Children.toArray(children)\n .filter(\n (child) =>\n React.isValidElement(child) && child.type === OptionField\n )\n .map((option: React.ReactElement) => ({\n title: option.props.title ?? option.props.children,\n value: option.props.value,\n handleSelect: () => {\n const selected = option.props.value\n\n const newValue = value?.includes(selected)\n ? value.filter((value) => value !== selected)\n : [...(value ?? []), selected]\n\n handleChange?.(newValue.length === 0 ? emptyValue : newValue)\n },\n })),\n [children, value, emptyValue, handleChange]\n )\n\n switch (variant) {\n case 'button':\n return (\n <FieldBlock {...fieldSectionProps}>\n <ToggleButtonGroupContext.Provider\n value={{\n status: hasError ? 'error' : undefined,\n disabled,\n }}\n >\n {options.map((option, i) => (\n <ToggleButton\n key={`option-${i}-${option.value}`}\n text={option.title}\n checked={value?.includes(option.value)}\n on_change={option.handleSelect}\n />\n ))}\n </ToggleButtonGroupContext.Provider>\n </FieldBlock>\n )\n case 'checkbox':\n return (\n <FieldBlock {...fieldSectionProps}>\n {options.map((option, i) => (\n <Checkbox\n key={`option-${i}-${option.value}`}\n className=\"dnb-forms-field-array-selection__checkbox\"\n label={option.title}\n checked={value?.includes(option.value)}\n disabled={disabled}\n on_change={option.handleSelect}\n status={hasError ? 'error' : undefined}\n />\n ))}\n </FieldBlock>\n )\n }\n}\n\nArraySelection._supportsSpacingProps = true\nexport default ArraySelection\n"],"mappings":"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"}
1
+ {"version":3,"file":"ArraySelection.js","names":["React","Checkbox","HelpButton","ToggleButton","classnames","OptionField","FieldBlock","useFieldProps","pickSpacingProps","getStatus","ToggleButtonGroupContext","ArraySelection","props","id","className","variant","layout","optionsLayout","label","labelDescription","value","error","hasError","help","info","warning","disabled","emptyValue","htmlAttributes","handleChange","children","fieldSectionProps","_objectSpread","forId","contentClassName","createElement","Fragment","size","left","title","content","undefined","options","getCheckboxOrToggleOptions","Provider","status","_ref","optionsCount","Children","count","Component","createOption","i","selected","rest","_objectWithoutProperties","_excluded","suffix","handleSelect","newValue","includes","filter","length","_extends","key","text","checked","on_change","mapOptions","toArray","map","child","isValidElement","type","nestedChildren","cloneElement","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/ArraySelection/ArraySelection.tsx"],"sourcesContent":["import React from 'react'\nimport { Checkbox, HelpButton, ToggleButton } from '../../../../components'\nimport classnames from 'classnames'\nimport OptionField from '../Option'\nimport FieldBlock from '../../FieldBlock'\nimport { useFieldProps } from '../../hooks'\nimport { ReturnAdditional } from '../../hooks/useFieldProps'\nimport { FieldHelpProps, FieldProps, FormError } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport { getStatus } from '../Selection'\nimport { HelpButtonProps } from '../../../../components/HelpButton'\nimport ToggleButtonGroupContext from '../../../../components/toggle-button/ToggleButtonGroupContext'\n\ntype OptionProps = React.ComponentProps<\n React.FC<{\n value: number | string\n error: Error | FormError | undefined\n title: React.ReactNode\n help: HelpButtonProps\n className: string\n children: React.ReactNode\n handleSelect: () => void\n }>\n>\n\nexport type Props = FieldHelpProps &\n FieldProps<Array<string | number> | undefined> & {\n children?: React.ReactNode\n variant?: 'checkbox' | 'button'\n optionsLayout?: 'horizontal' | 'vertical'\n }\n\nfunction ArraySelection(props: Props) {\n const {\n id,\n className,\n variant = 'checkbox',\n layout = 'vertical',\n optionsLayout = 'vertical',\n label,\n labelDescription,\n value,\n error,\n hasError,\n help,\n info,\n warning,\n disabled,\n emptyValue,\n htmlAttributes,\n handleChange,\n children,\n } = useFieldProps(props)\n\n const fieldSectionProps = {\n forId: id,\n className: classnames(\n 'dnb-forms-field-array-selection',\n `dnb-forms-field-array-selection--variant-${variant}`,\n `dnb-forms-field-array-selection--layout-${layout}`,\n `dnb-forms-field-array-selection--options-layout-${optionsLayout}`,\n className\n ),\n contentClassName: 'dnb-forms-field-array-selection__options',\n help,\n info,\n warning,\n error,\n layout,\n label,\n labelDescription: (\n <>\n {labelDescription}\n {help ? (\n <HelpButton\n size=\"small\"\n left={labelDescription ? 'x-small' : false}\n title={help.title}\n >\n {help.content}\n </HelpButton>\n ) : undefined}\n </>\n ),\n ...pickSpacingProps(props),\n }\n\n const options = getCheckboxOrToggleOptions({\n id,\n variant,\n info,\n warning,\n emptyValue,\n htmlAttributes,\n children,\n value,\n disabled,\n handleChange,\n hasError,\n })\n\n switch (variant) {\n case 'button':\n return (\n <FieldBlock {...fieldSectionProps}>\n <ToggleButtonGroupContext.Provider\n value={{\n status: hasError ? 'error' : undefined,\n disabled,\n }}\n >\n {options}\n </ToggleButtonGroupContext.Provider>\n </FieldBlock>\n )\n case 'checkbox':\n return <FieldBlock {...fieldSectionProps}>{options}</FieldBlock>\n }\n}\n\nexport function getCheckboxOrToggleOptions({\n id,\n variant = 'checkbox',\n info,\n warning,\n emptyValue,\n htmlAttributes,\n children,\n value,\n disabled,\n hasError,\n handleChange,\n}: {\n id: Props['id']\n variant?: Props['variant']\n info?: Props['info']\n warning?: Props['warning']\n emptyValue?: Props['emptyValue']\n htmlAttributes?: Props['htmlAttributes']\n children?: Props['children']\n value?: Props['value']\n disabled?: Props['disabled']\n hasError?: ReturnAdditional<Props['value']>['hasError']\n handleChange?: ReturnAdditional<Props['value']>['handleChange']\n}) {\n const optionsCount = React.Children.count(children)\n\n const Component = (\n variant === 'checkbox' ? Checkbox : ToggleButton\n ) as typeof Checkbox & typeof ToggleButton\n\n const createOption = (props: OptionProps, i: number) => {\n const {\n value: selected,\n error,\n title,\n help,\n className,\n children,\n ...rest\n } = props\n\n const label = title ?? children\n const status = getStatus(error, info, warning)\n const suffix = help ? (\n <HelpButton size=\"small\" title={help.title}>\n {help.content}\n </HelpButton>\n ) : undefined\n const handleSelect = () => {\n const newValue = value?.includes(selected)\n ? value.filter((value) => value !== selected)\n : [...(value ?? []), selected]\n\n handleChange?.(\n newValue.length === 0 ? (emptyValue as typeof value) : newValue\n )\n }\n\n return (\n <Component\n id={optionsCount === 1 ? id : undefined}\n key={`option-${i}-${value}`}\n className={classnames(\n `dnb-forms-field-array-selection__${variant}`,\n className\n )}\n label={variant === 'checkbox' ? label : undefined}\n text={variant === 'button' ? label : undefined}\n value={value}\n disabled={disabled}\n checked={value?.includes(selected)}\n status={(hasError || status) && 'error'}\n suffix={suffix}\n on_change={handleSelect}\n {...htmlAttributes}\n {...rest}\n />\n )\n }\n\n const mapOptions = (children: React.ReactNode) => {\n return React.Children.toArray(children).map(\n (child: React.ReactElement<OptionProps>, i) => {\n if (React.isValidElement(child)) {\n if (child.type === OptionField) {\n return createOption(child.props, i)\n }\n\n if (child.props.children) {\n const nestedChildren = mapOptions(child.props.children)\n return React.cloneElement(child, child.props, nestedChildren)\n }\n }\n\n return child\n }\n )\n }\n\n return mapOptions(children)\n}\n\nArraySelection._supportsSpacingProps = true\nexport default ArraySelection\n"],"mappings":"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"}
@@ -1,20 +1,29 @@
1
1
  /*
2
2
  * Utilities
3
3
  */
4
+ .dnb-forms-field-array-selection {
5
+ --row-gap: var(--spacing-x-small);
6
+ }
4
7
  .dnb-forms-field-array-selection--options-layout-vertical .dnb-forms-field-array-selection__options {
5
8
  display: flex;
6
9
  flex-flow: column;
7
- row-gap: var(--spacing-x-small);
10
+ row-gap: var(--row-gap);
11
+ }
12
+ .dnb-forms-field-array-selection--options-layout-vertical.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-block__label {
13
+ align-items: flex-start;
8
14
  }
9
- .dnb-forms-field-array-selection--options-layout-vertical.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-array-selection__options {
15
+ .dnb-forms-field-array-selection--variant-checkbox.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-array-selection__options {
10
16
  row-gap: 0;
11
17
  }
18
+ .dnb-forms-field-array-selection--variant-button.dnb-forms-field-array-selection--options-layout-vertical.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-block__label {
19
+ line-height: 2.5rem;
20
+ }
12
21
  .dnb-forms-field-array-selection--options-layout-horizontal .dnb-forms-field-array-selection__options {
13
22
  display: flex;
14
23
  flex-flow: row wrap;
15
24
  -moz-column-gap: var(--spacing-small);
16
25
  column-gap: var(--spacing-small);
17
- row-gap: var(--spacing-x-small);
26
+ row-gap: var(--row-gap);
18
27
  }
19
28
  @media screen and (min-width: 40em) {
20
29
  .dnb-forms-field-array-selection .dnb-forms-field-block--layout-horizontal .dnb-form-label {
@@ -1 +1 @@
1
- .dnb-forms-field-array-selection--options-layout-vertical .dnb-forms-field-array-selection__options{display:flex;flex-flow:column;row-gap:var(--spacing-x-small)}.dnb-forms-field-array-selection--options-layout-vertical.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-array-selection__options{row-gap:0}.dnb-forms-field-array-selection--options-layout-horizontal .dnb-forms-field-array-selection__options{-moz-column-gap:var(--spacing-small);column-gap:var(--spacing-small);display:flex;flex-flow:row wrap;row-gap:var(--spacing-x-small)}@media screen and (min-width:40em){.dnb-forms-field-array-selection .dnb-forms-field-block--layout-horizontal .dnb-form-label{line-height:2.5rem;margin-bottom:0}}
1
+ .dnb-forms-field-array-selection{--row-gap:var(--spacing-x-small)}.dnb-forms-field-array-selection--options-layout-vertical .dnb-forms-field-array-selection__options{display:flex;flex-flow:column;row-gap:var(--row-gap)}.dnb-forms-field-array-selection--options-layout-vertical.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-block__label{align-items:flex-start}.dnb-forms-field-array-selection--variant-checkbox.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-array-selection__options{row-gap:0}.dnb-forms-field-array-selection--variant-button.dnb-forms-field-array-selection--options-layout-vertical.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-block__label{line-height:2.5rem}.dnb-forms-field-array-selection--options-layout-horizontal .dnb-forms-field-array-selection__options{-moz-column-gap:var(--spacing-small);column-gap:var(--spacing-small);display:flex;flex-flow:row wrap;row-gap:var(--row-gap)}@media screen and (min-width:40em){.dnb-forms-field-array-selection .dnb-forms-field-block--layout-horizontal .dnb-form-label{line-height:2.5rem;margin-bottom:0}}
@@ -1,20 +1,31 @@
1
1
  @import '../../../../../style/core/utilities.scss';
2
2
 
3
3
  .dnb-forms-field-array-selection {
4
+ --row-gap: var(--spacing-x-small);
4
5
  &--options-layout-vertical &__options {
5
6
  display: flex;
6
7
  flex-flow: column;
7
- row-gap: var(--spacing-x-small);
8
+ row-gap: var(--row-gap);
8
9
  }
9
- &--options-layout-vertical#{&}--layout-horizontal &__options {
10
+ &--options-layout-vertical#{&}--layout-horizontal {
11
+ .dnb-forms-field-block__label {
12
+ align-items: flex-start;
13
+ }
14
+ }
15
+ &--variant-checkbox#{&}--layout-horizontal &__options {
10
16
  row-gap: 0;
11
17
  }
18
+ &--variant-button#{&}--options-layout-vertical#{&}--layout-horizontal {
19
+ .dnb-forms-field-block__label {
20
+ line-height: 2.5rem;
21
+ }
22
+ }
12
23
 
13
24
  &--options-layout-horizontal &__options {
14
25
  display: flex;
15
26
  flex-flow: row wrap;
16
27
  column-gap: var(--spacing-small);
17
- row-gap: var(--spacing-x-small); // for when wrapped
28
+ row-gap: var(--row-gap); // for when wrapped
18
29
  }
19
30
 
20
31
  @include allAbove(small) {
@@ -1,14 +1,15 @@
1
1
  import React from 'react';
2
- import { FieldProps, FieldHelpProps, FieldBlockWidth } from '../../types';
2
+ import { ReturnAdditional } from '../../hooks/useFieldProps';
3
+ import { FormError, FieldProps, FieldHelpProps, FieldBlockWidth } from '../../types';
3
4
  import type { FormStatusText } from '../../../../components/FormStatus';
4
5
  import type { AutocompleteAllProps, AutocompleteProps } from '../../../../components/Autocomplete';
5
6
  import type { DropdownAllProps, DropdownProps } from '../../../../components/Dropdown';
6
7
  import { ToCamelCase } from '../../../../shared/helpers/withCamelCaseProps';
7
- interface IOption {
8
+ type IOption = {
8
9
  title: string | React.ReactNode;
9
10
  value: number | string;
10
11
  status: FormStatusText;
11
- }
12
+ };
12
13
  export type Data = AutocompleteAllProps['data'] | DropdownAllProps['data'];
13
14
  export type Props = FieldHelpProps & FieldProps<IOption['value']> & {
14
15
  variant?: 'dropdown' | 'autocomplete' | 'radio' | 'button';
@@ -23,4 +24,15 @@ declare function Selection(props: Props): import("react/jsx-runtime").JSX.Elemen
23
24
  declare namespace Selection {
24
25
  var _supportsSpacingProps: boolean;
25
26
  }
27
+ export declare function getStatus(error: Error | FormError | undefined, info: React.ReactNode, warning: React.ReactNode): string;
28
+ export declare function getRadioOrToggleOptions({ id, value, variant, info, warning, htmlAttributes, children, hasError, }: {
29
+ id: string;
30
+ value: Props['value'];
31
+ variant: Props['variant'];
32
+ info: Props['info'];
33
+ warning: Props['warning'];
34
+ htmlAttributes: Props['htmlAttributes'];
35
+ children: Props['children'];
36
+ hasError: ReturnAdditional<Props['value']>['hasError'];
37
+ }): any;
26
38
  export default Selection;
@@ -1,8 +1,7 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
1
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
- const _excluded = ["error", "title", "help", "children"],
5
- _excluded2 = ["value", "title", "status"];
4
+ const _excluded = ["error", "title", "help", "children"];
6
5
  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; }
7
6
  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; }
8
7
  import React, { useMemo, useCallback } from 'react';
@@ -80,34 +79,10 @@ function Selection(props) {
80
79
  label,
81
80
  labelDescription
82
81
  });
83
- const getStatus = useCallback(error => {
84
- var _error$message;
85
- return (_error$message = error === null || error === void 0 ? void 0 : error.message) !== null && _error$message !== void 0 ? _error$message : warning instanceof Error && warning.message || warning instanceof FormError && warning.message || (warning === null || warning === void 0 ? void 0 : warning.toString()) || info instanceof Error && info.message || info instanceof FormError && info.message || (info === null || info === void 0 ? void 0 : info.toString());
86
- }, [info, warning]);
87
- const status = getStatus(error);
88
82
  switch (variant) {
89
83
  case 'radio':
90
84
  case 'button':
91
85
  {
92
- const options = React.Children.toArray(children).filter(child => React.isValidElement(child) && child.type === OptionField).map(option => {
93
- const _option$props = option.props,
94
- {
95
- error,
96
- title,
97
- help,
98
- children
99
- } = _option$props,
100
- rest = _objectWithoutProperties(_option$props, _excluded);
101
- const status = getStatus(error);
102
- return _objectSpread({
103
- title: title !== null && title !== void 0 ? title : children,
104
- status,
105
- suffix: help ? React.createElement(HelpButton, {
106
- size: "small",
107
- title: help.title
108
- }, help.content) : undefined
109
- }, rest);
110
- });
111
86
  const Component = variant === 'radio' ? Radio : ToggleButton;
112
87
  return React.createElement(FieldBlock, fieldSectionProps, React.createElement(Component.Group, {
113
88
  className: cn,
@@ -115,26 +90,21 @@ function Selection(props) {
115
90
  disabled: disabled,
116
91
  on_change: onChangeHandler,
117
92
  value: String(value !== null && value !== void 0 ? value : '')
118
- }, options.map((option, i) => {
119
- const {
120
- value,
121
- title,
122
- status
123
- } = option,
124
- rest = _objectWithoutProperties(option, _excluded2);
125
- return React.createElement(Component, _extends({
126
- id: options.length === 1 ? id : undefined,
127
- key: `option-${i}-${value}`,
128
- label: variant === 'radio' ? title : undefined,
129
- text: variant === 'button' ? title : undefined,
130
- value: String(value !== null && value !== void 0 ? value : ''),
131
- status: (hasError || status) && 'error'
132
- }, htmlAttributes, rest));
93
+ }, getRadioOrToggleOptions({
94
+ id,
95
+ value,
96
+ variant,
97
+ info,
98
+ warning,
99
+ htmlAttributes,
100
+ children,
101
+ hasError
133
102
  })));
134
103
  }
135
104
  case 'autocomplete':
136
105
  case 'dropdown':
137
106
  {
107
+ const status = getStatus(error, info, warning);
138
108
  const sharedProps = _objectSpread(_objectSpread({
139
109
  id,
140
110
  list_class: 'dnb-forms-field-selection__list',
@@ -159,6 +129,63 @@ function Selection(props) {
159
129
  }
160
130
  }
161
131
  }
132
+ export function getStatus(error, info, warning) {
133
+ var _error$message;
134
+ return (_error$message = error === null || error === void 0 ? void 0 : error.message) !== null && _error$message !== void 0 ? _error$message : warning instanceof Error && warning.message || warning instanceof FormError && warning.message || (warning === null || warning === void 0 ? void 0 : warning.toString()) || info instanceof Error && info.message || info instanceof FormError && info.message || (info === null || info === void 0 ? void 0 : info.toString());
135
+ }
136
+ export function getRadioOrToggleOptions(_ref5) {
137
+ let {
138
+ id,
139
+ value,
140
+ variant,
141
+ info,
142
+ warning,
143
+ htmlAttributes,
144
+ children,
145
+ hasError
146
+ } = _ref5;
147
+ const optionsCount = React.Children.count(children);
148
+ const Component = variant === 'radio' ? Radio : ToggleButton;
149
+ const createOption = (props, i) => {
150
+ const {
151
+ error,
152
+ title,
153
+ help,
154
+ children
155
+ } = props,
156
+ rest = _objectWithoutProperties(props, _excluded);
157
+ const label = title !== null && title !== void 0 ? title : children;
158
+ const status = getStatus(error, info, warning);
159
+ const suffix = help ? React.createElement(HelpButton, {
160
+ size: "small",
161
+ title: help.title
162
+ }, help.content) : undefined;
163
+ return React.createElement(Component, _extends({
164
+ id: optionsCount === 1 ? id : undefined,
165
+ key: `option-${i}-${value}`,
166
+ label: variant === 'radio' ? label : undefined,
167
+ text: variant === 'button' ? label : undefined,
168
+ value: String(value !== null && value !== void 0 ? value : ''),
169
+ status: (hasError || status) && 'error',
170
+ suffix: suffix
171
+ }, htmlAttributes, rest));
172
+ };
173
+ const mapOptions = children => {
174
+ return React.Children.toArray(children).map((child, i) => {
175
+ if (React.isValidElement(child)) {
176
+ if (child.type === OptionField) {
177
+ return createOption(child.props, i);
178
+ }
179
+ if (child.props.children) {
180
+ const nestedChildren = mapOptions(child.props.children);
181
+ return React.cloneElement(child, child.props, nestedChildren);
182
+ }
183
+ }
184
+ return child;
185
+ });
186
+ };
187
+ return mapOptions(children);
188
+ }
162
189
  Selection._supportsSpacingProps = true;
163
190
  export default Selection;
164
191
  //# sourceMappingURL=Selection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Selection.js","names":["React","useMemo","useCallback","classnames","makeUniqueId","ToggleButton","Dropdown","Radio","HelpButton","Autocomplete","OptionField","makeOptions","useFieldProps","pickSpacingProps","FieldBlock","FormError","convertCamelCaseProps","Selection","props","clearValue","id","className","variant","label","labelDescription","layout","optionsLayout","placeholder","value","info","warning","error","hasError","disabled","help","emptyValue","width","htmlAttributes","setHasFocus","handleChange","children","data","autocompleteProps","dropdownProps","handleDropdownChange","_ref","selectedKey","onChangeHandler","_ref2","undefined","handleShow","_ref3","handleHide","_ref4","cn","fieldSectionProps","_objectSpread","forId","getStatus","_error$message","message","Error","toString","status","options","Children","toArray","filter","child","isValidElement","type","map","option","_option$props","title","rest","_objectWithoutProperties","_excluded","suffix","createElement","size","content","Component","Group","layout_direction","on_change","String","i","_excluded2","_extends","length","key","text","sharedProps","list_class","portal_class","on_show","on_hide","stretch","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/Selection/Selection.tsx"],"sourcesContent":["import React, { useMemo, useCallback } from 'react'\nimport classnames from 'classnames'\nimport { makeUniqueId } from '../../../../shared/component-helper'\nimport {\n ToggleButton,\n Dropdown,\n Radio,\n HelpButton,\n Autocomplete,\n} from '../../../../components'\nimport OptionField, { makeOptions } from '../Option'\nimport { useFieldProps } from '../../hooks'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport FieldBlock from '../../FieldBlock'\nimport {\n FormError,\n FieldProps,\n FieldHelpProps,\n FieldBlockWidth,\n} from '../../types'\nimport type { FormStatusText } from '../../../../components/FormStatus'\nimport type {\n AutocompleteAllProps,\n AutocompleteProps,\n} from '../../../../components/Autocomplete'\nimport type {\n DropdownAllProps,\n DropdownProps,\n} from '../../../../components/Dropdown'\nimport {\n convertCamelCaseProps,\n ToCamelCase,\n} from '../../../../shared/helpers/withCamelCaseProps'\n\ninterface IOption {\n title: string | React.ReactNode\n value: number | string\n status: FormStatusText\n}\n\nexport type Data = AutocompleteAllProps['data'] | DropdownAllProps['data']\n\nexport type Props = FieldHelpProps &\n FieldProps<IOption['value']> & {\n variant?: 'dropdown' | 'autocomplete' | 'radio' | 'button'\n optionsLayout?: 'horizontal' | 'vertical'\n children?: React.ReactNode\n\n // - Autocomplete and Dropdown specific props\n autocompleteProps?: ToCamelCase<AutocompleteProps>\n dropdownProps?: ToCamelCase<DropdownProps>\n data?: Data\n width?: FieldBlockWidth\n }\n\nfunction Selection(props: Props) {\n const clearValue = useMemo(() => `clear-option-${makeUniqueId()}`, [])\n\n const {\n id,\n className,\n variant = 'dropdown',\n label,\n labelDescription,\n layout = 'vertical',\n optionsLayout = 'vertical',\n placeholder,\n value,\n info,\n warning,\n error,\n hasError,\n disabled,\n help,\n emptyValue,\n width = 'large',\n htmlAttributes,\n setHasFocus,\n handleChange,\n children,\n\n // - Autocomplete and Dropdown specific props\n data,\n autocompleteProps,\n dropdownProps,\n } = useFieldProps(props)\n\n const handleDropdownChange = useCallback(\n ({ data }) => {\n const selectedKey = data?.selectedKey\n handleChange?.(\n !selectedKey || selectedKey === clearValue\n ? emptyValue\n : selectedKey\n )\n },\n [handleChange, emptyValue, clearValue]\n )\n\n const onChangeHandler = useCallback(\n ({ value }) => {\n handleChange?.(value === undefined ? emptyValue : value)\n },\n [handleChange, emptyValue]\n )\n\n // Specific handleShow and handleHide because Dropdown preserve the initially received callbacks, so changes\n // due to `useCallback` usage will have no effect, leading to useFieldPropss handleFocus and handleBlur sending out old\n // copies of value as arguments.\n const handleShow = useCallback(\n ({ data }) => {\n setHasFocus(true, data?.selectedKey)\n },\n [setHasFocus]\n )\n\n const handleHide = useCallback(\n ({ data }) => {\n setHasFocus(false, data?.selectedKey)\n },\n [setHasFocus]\n )\n\n const cn = classnames(\n 'dnb-forms-field-selection',\n `dnb-forms-field-selection__variant--${variant}`,\n `dnb-forms-field-selection__options-layout--${optionsLayout}`,\n className\n )\n\n const fieldSectionProps = {\n forId: id,\n className: cn,\n ...pickSpacingProps(props),\n info,\n warning,\n error,\n layout,\n label,\n labelDescription,\n }\n\n const getStatus = useCallback(\n (error: Error | FormError | undefined) => {\n return (\n error?.message ??\n ((warning instanceof Error && warning.message) ||\n (warning instanceof FormError && warning.message) ||\n warning?.toString() ||\n (info instanceof Error && info.message) ||\n (info instanceof FormError && info.message) ||\n info?.toString())\n )\n },\n [info, warning]\n )\n\n const status = getStatus(error)\n\n switch (variant) {\n case 'radio':\n case 'button': {\n const options: IOption[] = React.Children.toArray(children)\n .filter(\n (child) =>\n React.isValidElement(child) && child.type === OptionField\n )\n .map((option: React.ReactElement) => {\n const { error, title, help, children, ...rest } = option.props\n const status = getStatus(error)\n\n return {\n title: title ?? children,\n status,\n suffix: help ? (\n <HelpButton size=\"small\" title={help.title}>\n {help.content}\n </HelpButton>\n ) : undefined,\n ...rest,\n }\n })\n\n const Component = (\n variant === 'radio' ? Radio : ToggleButton\n ) as typeof Radio & typeof ToggleButton\n\n return (\n <FieldBlock {...fieldSectionProps}>\n <Component.Group\n className={cn}\n layout_direction={\n optionsLayout === 'horizontal' ? 'row' : 'column'\n }\n disabled={disabled}\n on_change={onChangeHandler}\n value={String(value ?? '')}\n >\n {options.map((option, i) => {\n const { value, title, status, ...rest } = option\n return (\n <Component\n id={options.length === 1 ? id : undefined}\n key={`option-${i}-${value}`}\n label={variant === 'radio' ? title : undefined}\n text={variant === 'button' ? title : undefined}\n value={String(value ?? '')}\n status={(hasError || status) && 'error'}\n {...htmlAttributes}\n {...rest}\n />\n )\n })}\n </Component.Group>\n </FieldBlock>\n )\n }\n\n case 'autocomplete':\n case 'dropdown': {\n const sharedProps: AutocompleteAllProps & DropdownAllProps = {\n id,\n list_class: 'dnb-forms-field-selection__list',\n portal_class: 'dnb-forms-field-selection__portal',\n title: placeholder,\n value: String(value ?? ''),\n status: (hasError || status) && 'error',\n disabled,\n ...htmlAttributes,\n data: data ?? makeOptions<Data>(children),\n suffix: help ? (\n <HelpButton title={help.title}>{help.content}</HelpButton>\n ) : undefined,\n on_change: handleDropdownChange,\n on_show: handleShow,\n on_hide: handleHide,\n stretch: true,\n }\n\n return (\n <FieldBlock {...fieldSectionProps} width={width}>\n {variant === 'autocomplete' ? (\n <Autocomplete\n {...sharedProps}\n {...(autocompleteProps\n ? (convertCamelCaseProps(\n autocompleteProps\n ) as AutocompleteAllProps)\n : null)}\n />\n ) : (\n <Dropdown\n {...sharedProps}\n {...(dropdownProps\n ? (convertCamelCaseProps(\n dropdownProps\n ) as DropdownAllProps)\n : null)}\n />\n )}\n </FieldBlock>\n )\n }\n }\n}\n\nSelection._supportsSpacingProps = true\nexport default Selection\n"],"mappings":"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"}
1
+ {"version":3,"file":"Selection.js","names":["React","useMemo","useCallback","classnames","makeUniqueId","ToggleButton","Dropdown","Radio","HelpButton","Autocomplete","OptionField","makeOptions","useFieldProps","pickSpacingProps","FieldBlock","FormError","convertCamelCaseProps","Selection","props","clearValue","id","className","variant","label","labelDescription","layout","optionsLayout","placeholder","value","info","warning","error","hasError","disabled","help","emptyValue","width","htmlAttributes","setHasFocus","handleChange","children","data","autocompleteProps","dropdownProps","handleDropdownChange","_ref","selectedKey","onChangeHandler","_ref2","undefined","handleShow","_ref3","handleHide","_ref4","cn","fieldSectionProps","_objectSpread","forId","Component","createElement","Group","layout_direction","on_change","String","getRadioOrToggleOptions","status","getStatus","sharedProps","list_class","portal_class","title","suffix","content","on_show","on_hide","stretch","_extends","_error$message","message","Error","toString","_ref5","optionsCount","Children","count","createOption","i","rest","_objectWithoutProperties","_excluded","size","key","text","mapOptions","toArray","map","child","isValidElement","type","nestedChildren","cloneElement","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/Selection/Selection.tsx"],"sourcesContent":["import React, { useMemo, useCallback } from 'react'\nimport classnames from 'classnames'\nimport { makeUniqueId } from '../../../../shared/component-helper'\nimport {\n ToggleButton,\n Dropdown,\n Radio,\n HelpButton,\n Autocomplete,\n} from '../../../../components'\nimport OptionField, { makeOptions } from '../Option'\nimport { useFieldProps } from '../../hooks'\nimport { ReturnAdditional } from '../../hooks/useFieldProps'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport FieldBlock from '../../FieldBlock'\nimport {\n FormError,\n FieldProps,\n FieldHelpProps,\n FieldBlockWidth,\n} from '../../types'\nimport type { FormStatusText } from '../../../../components/FormStatus'\nimport type {\n AutocompleteAllProps,\n AutocompleteProps,\n} from '../../../../components/Autocomplete'\nimport type {\n DropdownAllProps,\n DropdownProps,\n} from '../../../../components/Dropdown'\nimport { HelpButtonProps } from '../../../../components/HelpButton'\nimport {\n convertCamelCaseProps,\n ToCamelCase,\n} from '../../../../shared/helpers/withCamelCaseProps'\n\ntype IOption = {\n title: string | React.ReactNode\n value: number | string\n status: FormStatusText\n}\ntype OptionProps = React.ComponentProps<\n React.FC<{\n error: Error | FormError | undefined\n title: React.ReactNode\n help: HelpButtonProps\n children: React.ReactNode\n }>\n>\n\nexport type Data = AutocompleteAllProps['data'] | DropdownAllProps['data']\n\nexport type Props = FieldHelpProps &\n FieldProps<IOption['value']> & {\n variant?: 'dropdown' | 'autocomplete' | 'radio' | 'button'\n optionsLayout?: 'horizontal' | 'vertical'\n children?: React.ReactNode\n\n // - Autocomplete and Dropdown specific props\n autocompleteProps?: ToCamelCase<AutocompleteProps>\n dropdownProps?: ToCamelCase<DropdownProps>\n data?: Data\n width?: FieldBlockWidth\n }\n\nfunction Selection(props: Props) {\n const clearValue = useMemo(() => `clear-option-${makeUniqueId()}`, [])\n\n const {\n id,\n className,\n variant = 'dropdown',\n label,\n labelDescription,\n layout = 'vertical',\n optionsLayout = 'vertical',\n placeholder,\n value,\n info,\n warning,\n error,\n hasError,\n disabled,\n help,\n emptyValue,\n width = 'large',\n htmlAttributes,\n setHasFocus,\n handleChange,\n children,\n\n // - Autocomplete and Dropdown specific props\n data,\n autocompleteProps,\n dropdownProps,\n } = useFieldProps(props)\n\n const handleDropdownChange = useCallback(\n ({ data }) => {\n const selectedKey = data?.selectedKey\n handleChange?.(\n !selectedKey || selectedKey === clearValue\n ? emptyValue\n : selectedKey\n )\n },\n [handleChange, emptyValue, clearValue]\n )\n\n const onChangeHandler = useCallback(\n ({ value }) => {\n handleChange?.(value === undefined ? emptyValue : value)\n },\n [handleChange, emptyValue]\n )\n\n // Specific handleShow and handleHide because Dropdown preserve the initially received callbacks, so changes\n // due to `useCallback` usage will have no effect, leading to useFieldPropss handleFocus and handleBlur sending out old\n // copies of value as arguments.\n const handleShow = useCallback(\n ({ data }) => {\n setHasFocus(true, data?.selectedKey)\n },\n [setHasFocus]\n )\n\n const handleHide = useCallback(\n ({ data }) => {\n setHasFocus(false, data?.selectedKey)\n },\n [setHasFocus]\n )\n\n const cn = classnames(\n 'dnb-forms-field-selection',\n `dnb-forms-field-selection__variant--${variant}`,\n `dnb-forms-field-selection__options-layout--${optionsLayout}`,\n className\n )\n\n const fieldSectionProps = {\n forId: id,\n className: cn,\n ...pickSpacingProps(props),\n info,\n warning,\n error,\n layout,\n label,\n labelDescription,\n }\n\n switch (variant) {\n case 'radio':\n case 'button': {\n const Component = (\n variant === 'radio' ? Radio : ToggleButton\n ) as typeof Radio & typeof ToggleButton\n\n return (\n <FieldBlock {...fieldSectionProps}>\n <Component.Group\n className={cn}\n layout_direction={\n optionsLayout === 'horizontal' ? 'row' : 'column'\n }\n disabled={disabled}\n on_change={onChangeHandler}\n value={String(value ?? '')}\n >\n {getRadioOrToggleOptions({\n id,\n value,\n variant,\n info,\n warning,\n htmlAttributes,\n children,\n hasError,\n })}\n </Component.Group>\n </FieldBlock>\n )\n }\n\n case 'autocomplete':\n case 'dropdown': {\n const status = getStatus(error, info, warning)\n const sharedProps: AutocompleteAllProps & DropdownAllProps = {\n id,\n list_class: 'dnb-forms-field-selection__list',\n portal_class: 'dnb-forms-field-selection__portal',\n title: placeholder,\n value: String(value ?? ''),\n status: (hasError || status) && 'error',\n disabled,\n ...htmlAttributes,\n data: data ?? makeOptions<Data>(children),\n suffix: help ? (\n <HelpButton title={help.title}>{help.content}</HelpButton>\n ) : undefined,\n on_change: handleDropdownChange,\n on_show: handleShow,\n on_hide: handleHide,\n stretch: true,\n }\n\n return (\n <FieldBlock {...fieldSectionProps} width={width}>\n {variant === 'autocomplete' ? (\n <Autocomplete\n {...sharedProps}\n {...(autocompleteProps\n ? (convertCamelCaseProps(\n autocompleteProps\n ) as AutocompleteAllProps)\n : null)}\n />\n ) : (\n <Dropdown\n {...sharedProps}\n {...(dropdownProps\n ? (convertCamelCaseProps(\n dropdownProps\n ) as DropdownAllProps)\n : null)}\n />\n )}\n </FieldBlock>\n )\n }\n }\n}\n\nexport function getStatus(\n error: Error | FormError | undefined,\n info: React.ReactNode,\n warning: React.ReactNode\n) {\n return (\n error?.message ??\n ((warning instanceof Error && warning.message) ||\n (warning instanceof FormError && warning.message) ||\n warning?.toString() ||\n (info instanceof Error && info.message) ||\n (info instanceof FormError && info.message) ||\n info?.toString())\n )\n}\n\nexport function getRadioOrToggleOptions({\n id,\n value,\n variant,\n info,\n warning,\n htmlAttributes,\n children,\n hasError,\n}: {\n id: string\n value: Props['value']\n variant: Props['variant']\n info: Props['info']\n warning: Props['warning']\n htmlAttributes: Props['htmlAttributes']\n children: Props['children']\n hasError: ReturnAdditional<Props['value']>['hasError']\n}) {\n const optionsCount = React.Children.count(children)\n\n const Component = (\n variant === 'radio' ? Radio : ToggleButton\n ) as typeof Radio & typeof ToggleButton\n\n const createOption = (props: OptionProps, i: number) => {\n const { error, title, help, children, ...rest } = props\n\n const label = title ?? children\n const status = getStatus(error, info, warning)\n const suffix = help ? (\n <HelpButton size=\"small\" title={help.title}>\n {help.content}\n </HelpButton>\n ) : undefined\n\n return (\n <Component\n id={optionsCount === 1 ? id : undefined}\n key={`option-${i}-${value}`}\n label={variant === 'radio' ? label : undefined}\n text={variant === 'button' ? label : undefined}\n value={String(value ?? '')}\n status={(hasError || status) && 'error'}\n suffix={suffix}\n {...htmlAttributes}\n {...rest}\n />\n )\n }\n\n const mapOptions = (children: React.ReactNode) => {\n return React.Children.toArray(children).map(\n (child: React.ReactElement<OptionProps>, i) => {\n if (React.isValidElement(child)) {\n if (child.type === OptionField) {\n return createOption(child.props, i)\n }\n\n if (child.props.children) {\n const nestedChildren = mapOptions(child.props.children)\n return React.cloneElement(child, child.props, nestedChildren)\n }\n }\n\n return child\n }\n )\n }\n\n return mapOptions(children)\n}\n\nSelection._supportsSpacingProps = true\nexport default Selection\n"],"mappings":"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"}
@@ -6,4 +6,13 @@
6
6
  }
7
7
  .dnb-forms-field-selection__variant--button .dnb-forms-field-block--layout-horizontal .dnb-form-label {
8
8
  line-height: 2.5rem;
9
+ }
10
+ .dnb-forms-field-selection .dnb-forms-field-block__contents {
11
+ display: flex;
12
+ }
13
+ .dnb-forms-field-selection .dnb-radio-group .dnb-height-animation, .dnb-forms-field-selection .dnb-radio-group > .dnb-flex-container,
14
+ .dnb-forms-field-selection .dnb-toggle-button-group .dnb-height-animation,
15
+ .dnb-forms-field-selection .dnb-toggle-button-group > .dnb-flex-container {
16
+ width: 100%;
17
+ flex-grow: 1;
9
18
  }
@@ -1 +1 @@
1
- .dnb-forms-field-selection__variant--dropdown .dnb-forms-field-block--layout-horizontal .dnb-form-label{align-self:center}.dnb-forms-field-selection__options-layout--horizontal .dnb-forms-field-block--layout-horizontal .dnb-form-label,.dnb-forms-field-selection__variant--dropdown .dnb-forms-field-block--layout-horizontal .dnb-form-label{margin-bottom:0}.dnb-forms-field-selection__variant--button .dnb-forms-field-block--layout-horizontal .dnb-form-label{line-height:2.5rem}
1
+ .dnb-forms-field-selection__variant--dropdown .dnb-forms-field-block--layout-horizontal .dnb-form-label{align-self:center}.dnb-forms-field-selection__options-layout--horizontal .dnb-forms-field-block--layout-horizontal .dnb-form-label,.dnb-forms-field-selection__variant--dropdown .dnb-forms-field-block--layout-horizontal .dnb-form-label{margin-bottom:0}.dnb-forms-field-selection__variant--button .dnb-forms-field-block--layout-horizontal .dnb-form-label{line-height:2.5rem}.dnb-forms-field-selection .dnb-forms-field-block__contents{display:flex}.dnb-forms-field-selection .dnb-radio-group .dnb-height-animation,.dnb-forms-field-selection .dnb-radio-group>.dnb-flex-container,.dnb-forms-field-selection .dnb-toggle-button-group .dnb-height-animation,.dnb-forms-field-selection .dnb-toggle-button-group>.dnb-flex-container{flex-grow:1;width:100%}
@@ -21,4 +21,20 @@
21
21
  }
22
22
  }
23
23
  }
24
+
25
+ // In order to stretch nested Section components
26
+ // Because __contents is not a flex container by default (and should not be)
27
+ .dnb-forms-field-block__contents {
28
+ display: flex;
29
+ }
30
+
31
+ .dnb-radio-group,
32
+ .dnb-toggle-button-group {
33
+ // On order to stretch a nested Section component
34
+ .dnb-height-animation,
35
+ & > .dnb-flex-container {
36
+ width: 100%;
37
+ flex-grow: 1;
38
+ }
39
+ }
24
40
  }
@@ -36,6 +36,8 @@ export type Props = {
36
36
  animate?: boolean;
37
37
  /** Keep the content in the DOM, even if it's not visible */
38
38
  keepInDOM?: boolean;
39
+ /** To compensate for CSS gap between the rows, so animation does not jump during the animation. Provide a CSS unit or `auto`. Defaults to `null`. */
40
+ compensateForGap?: HeightAnimationProps['compensateForGap'];
39
41
  /** When visibility is hidden, and `keepInDOM` is true, pass these props to the children */
40
42
  fieldPropsWhenHidden?: UseFieldProps & DataAttributes & AriaAttributes;
41
43
  element?: HeightAnimationProps['element'];
@@ -45,7 +47,7 @@ export type Props = {
45
47
  /** @deprecated Use `visibleWhen` instead */
46
48
  whenValue?: unknown;
47
49
  };
48
- declare function Visibility({ visible, pathDefined, pathUndefined, pathTruthy, pathFalsy, pathTrue, pathFalse, pathValue, whenValue, visibleWhen, visibleWhenNot, inferData, filterData, animate, keepInDOM, fieldPropsWhenHidden, children, ...rest }: Props): import("react/jsx-runtime").JSX.Element;
50
+ declare function Visibility({ visible, pathDefined, pathUndefined, pathTruthy, pathFalsy, pathTrue, pathFalse, pathValue, whenValue, visibleWhen, visibleWhenNot, inferData, filterData, animate, keepInDOM, compensateForGap, fieldPropsWhenHidden, children, ...rest }: Props): import("react/jsx-runtime").JSX.Element;
49
51
  declare namespace Visibility {
50
52
  var _supportsSpacingProps: string;
51
53
  }