@dnb/eufemia 10.70.0 → 10.71.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 (478) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/cjs/components/autocomplete/AutocompleteDocs.js +3 -3
  3. package/cjs/components/autocomplete/AutocompleteDocs.js.map +1 -1
  4. package/cjs/components/avatar/Avatar.js +3 -8
  5. package/cjs/components/avatar/Avatar.js.map +1 -1
  6. package/cjs/components/checkbox/CheckboxDocs.js +2 -2
  7. package/cjs/components/checkbox/CheckboxDocs.js.map +1 -1
  8. package/cjs/components/date-picker/DatePickerContext.d.ts +0 -1
  9. package/cjs/components/date-picker/DatePickerContext.js.map +1 -1
  10. package/cjs/components/date-picker/DatePickerDocs.js +1 -1
  11. package/cjs/components/date-picker/DatePickerDocs.js.map +1 -1
  12. package/cjs/components/date-picker/DatePickerInput.js +110 -136
  13. package/cjs/components/date-picker/DatePickerInput.js.map +1 -1
  14. package/cjs/components/date-picker/DatePickerProvider.js +0 -2
  15. package/cjs/components/date-picker/DatePickerProvider.js.map +1 -1
  16. package/cjs/components/date-picker/hooks/useDates.d.ts +0 -2
  17. package/cjs/components/date-picker/hooks/useDates.js +5 -5
  18. package/cjs/components/date-picker/hooks/useDates.js.map +1 -1
  19. package/cjs/components/date-picker/style/dnb-date-picker.css +4 -0
  20. package/cjs/components/date-picker/style/dnb-date-picker.min.css +1 -1
  21. package/cjs/components/date-picker/style/dnb-date-picker.scss +3 -0
  22. package/cjs/components/dialog/DialogDocs.js +7 -2
  23. package/cjs/components/dialog/DialogDocs.js.map +1 -1
  24. package/cjs/components/dropdown/Dropdown.d.ts +20 -20
  25. package/cjs/components/dropdown/DropdownDocs.d.ts +1 -0
  26. package/cjs/components/dropdown/DropdownDocs.js +158 -1
  27. package/cjs/components/dropdown/DropdownDocs.js.map +1 -1
  28. package/cjs/components/flex/ContainerDocs.js +1 -1
  29. package/cjs/components/flex/ContainerDocs.js.map +1 -1
  30. package/cjs/components/flex/ItemDocs.d.ts +2 -0
  31. package/cjs/components/flex/ItemDocs.js +39 -0
  32. package/cjs/components/flex/ItemDocs.js.map +1 -0
  33. package/cjs/components/grid/ItemDocs.d.ts +2 -0
  34. package/cjs/components/grid/ItemDocs.js +19 -0
  35. package/cjs/components/grid/ItemDocs.js.map +1 -0
  36. package/cjs/components/input/InputDocs.js +3 -3
  37. package/cjs/components/input/InputDocs.js.map +1 -1
  38. package/cjs/components/input-masked/InputMasked.d.ts +0 -3
  39. package/cjs/components/input-masked/InputMaskedDocs.d.ts +1 -0
  40. package/cjs/components/input-masked/InputMaskedDocs.js +58 -1
  41. package/cjs/components/input-masked/InputMaskedDocs.js.map +1 -1
  42. package/cjs/components/input-masked/InputMaskedHooks.js +11 -7
  43. package/cjs/components/input-masked/InputMaskedHooks.js.map +1 -1
  44. package/cjs/components/input-masked/InputMaskedUtils.d.ts +1 -1
  45. package/cjs/components/input-masked/InputMaskedUtils.js +2 -1
  46. package/cjs/components/input-masked/InputMaskedUtils.js.map +1 -1
  47. package/cjs/components/input-masked/MultiInputMaskedDocs.d.ts +2 -0
  48. package/cjs/components/input-masked/MultiInputMaskedDocs.js +70 -1
  49. package/cjs/components/input-masked/MultiInputMaskedDocs.js.map +1 -1
  50. package/cjs/components/input-masked/style/dnb-input-masked.css +9 -0
  51. package/cjs/components/input-masked/style/dnb-input-masked.min.css +1 -1
  52. package/cjs/components/input-masked/style/dnb-input-masked.scss +12 -0
  53. package/cjs/components/input-masked/text-mask/InputModeNumber.d.ts +8 -0
  54. package/cjs/components/input-masked/text-mask/InputModeNumber.js +32 -9
  55. package/cjs/components/input-masked/text-mask/InputModeNumber.js.map +1 -1
  56. package/cjs/components/input-masked/text-mask/adjustCaretPosition.d.ts +2 -1
  57. package/cjs/components/input-masked/text-mask/adjustCaretPosition.js +3 -2
  58. package/cjs/components/input-masked/text-mask/adjustCaretPosition.js.map +1 -1
  59. package/cjs/components/input-masked/text-mask/createTextMaskInputElement.js +9 -3
  60. package/cjs/components/input-masked/text-mask/createTextMaskInputElement.js.map +1 -1
  61. package/cjs/components/modal/ModalDocs.d.ts +5 -0
  62. package/cjs/components/modal/ModalDocs.js +201 -0
  63. package/cjs/components/modal/ModalDocs.js.map +1 -0
  64. package/cjs/components/radio/RadioDocs.js +2 -2
  65. package/cjs/components/radio/RadioDocs.js.map +1 -1
  66. package/cjs/components/section/Section.js +2 -7
  67. package/cjs/components/section/Section.js.map +1 -1
  68. package/cjs/components/section/SectionDocs.js +1 -1
  69. package/cjs/components/section/SectionDocs.js.map +1 -1
  70. package/cjs/components/slider/SliderDocs.js +2 -2
  71. package/cjs/components/slider/SliderDocs.js.map +1 -1
  72. package/cjs/components/space/SpaceDocs.d.ts +3 -0
  73. package/cjs/components/space/SpaceDocs.js +61 -0
  74. package/cjs/components/space/SpaceDocs.js.map +1 -0
  75. package/cjs/components/switch/SwitchDocs.js +2 -2
  76. package/cjs/components/switch/SwitchDocs.js.map +1 -1
  77. package/cjs/components/textarea/TextareaDocs.js +3 -3
  78. package/cjs/components/textarea/TextareaDocs.js.map +1 -1
  79. package/cjs/components/toggle-button/ToggleButtonGroupDocs.js +1 -1
  80. package/cjs/components/toggle-button/ToggleButtonGroupDocs.js.map +1 -1
  81. package/cjs/components/tooltip/TooltipDocs.js +1 -1
  82. package/cjs/components/tooltip/TooltipDocs.js.map +1 -1
  83. package/cjs/components/upload/Upload.js +6 -3
  84. package/cjs/components/upload/Upload.js.map +1 -1
  85. package/cjs/components/upload/UploadDocs.d.ts +1 -0
  86. package/cjs/components/upload/UploadDocs.js +43 -1
  87. package/cjs/components/upload/UploadDocs.js.map +1 -1
  88. package/cjs/components/upload/UploadFileListCell.js +32 -12
  89. package/cjs/components/upload/UploadFileListCell.js.map +1 -1
  90. package/cjs/components/upload/types.d.ts +7 -0
  91. package/cjs/components/upload/types.js.map +1 -1
  92. package/cjs/extensions/forms/DataContext/At/AtDocs.d.ts +2 -0
  93. package/cjs/extensions/forms/DataContext/At/AtDocs.js +24 -0
  94. package/cjs/extensions/forms/DataContext/At/AtDocs.js.map +1 -0
  95. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
  96. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  97. package/cjs/extensions/forms/Field/Number/Number.js +3 -6
  98. package/cjs/extensions/forms/Field/Number/Number.js.map +1 -1
  99. package/cjs/extensions/forms/Field/Password/PasswordDocs.d.ts +1 -0
  100. package/cjs/extensions/forms/Field/Password/PasswordDocs.js +14 -2
  101. package/cjs/extensions/forms/Field/Password/PasswordDocs.js.map +1 -1
  102. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
  103. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js +33 -25
  104. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  105. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
  106. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +8 -3
  107. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
  108. package/cjs/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
  109. package/cjs/extensions/forms/Field/String/StringDocs.js +1 -1
  110. package/cjs/extensions/forms/Field/String/StringDocs.js.map +1 -1
  111. package/cjs/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  112. package/cjs/extensions/forms/Field/Upload/Upload.js +3 -1
  113. package/cjs/extensions/forms/Field/Upload/Upload.js.map +1 -1
  114. package/cjs/extensions/forms/FieldBlock/FieldBlock.js +11 -4
  115. package/cjs/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  116. package/cjs/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
  117. package/cjs/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
  118. package/cjs/extensions/forms/Form/ButtonRow/ButtonRowDocs.d.ts +2 -0
  119. package/cjs/extensions/forms/Form/ButtonRow/ButtonRowDocs.js +19 -0
  120. package/cjs/extensions/forms/Form/ButtonRow/ButtonRowDocs.js.map +1 -0
  121. package/cjs/extensions/forms/Form/Isolation/IsolationDocs.js +1 -1
  122. package/cjs/extensions/forms/Form/Isolation/IsolationDocs.js.map +1 -1
  123. package/cjs/extensions/forms/Wizard/Buttons/ButtonsDocs.d.ts +2 -0
  124. package/cjs/extensions/forms/Wizard/Buttons/ButtonsDocs.js +14 -0
  125. package/cjs/extensions/forms/Wizard/Buttons/ButtonsDocs.js.map +1 -0
  126. package/cjs/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
  127. package/cjs/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
  128. package/cjs/extensions/forms/hooks/useFieldProps.js +55 -18
  129. package/cjs/extensions/forms/hooks/useFieldProps.js.map +1 -1
  130. package/cjs/extensions/forms/types.d.ts +8 -5
  131. package/cjs/extensions/forms/types.js.map +1 -1
  132. package/cjs/extensions/forms/utils/FormError.d.ts +20 -16
  133. package/cjs/extensions/forms/utils/FormError.js.map +1 -1
  134. package/cjs/shared/Eufemia.d.ts +1 -1
  135. package/cjs/shared/Eufemia.js +2 -2
  136. package/cjs/shared/Eufemia.js.map +1 -1
  137. package/cjs/shared/helpers.d.ts +1 -0
  138. package/cjs/shared/helpers.js +7 -0
  139. package/cjs/shared/helpers.js.map +1 -1
  140. package/cjs/shared/locales/sv-SE.js +2 -2
  141. package/cjs/shared/locales/sv-SE.js.map +1 -1
  142. package/cjs/style/core/scopes.scss +1 -1
  143. package/cjs/style/dnb-ui-basis.css +1 -1
  144. package/cjs/style/dnb-ui-basis.min.css +1 -1
  145. package/cjs/style/dnb-ui-body.css +1 -1
  146. package/cjs/style/dnb-ui-body.min.css +1 -1
  147. package/cjs/style/dnb-ui-components.css +13 -0
  148. package/cjs/style/dnb-ui-components.min.css +1 -1
  149. package/cjs/style/dnb-ui-core.css +1 -1
  150. package/cjs/style/dnb-ui-core.min.css +1 -1
  151. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +13 -0
  152. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
  153. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +13 -0
  154. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +1 -1
  155. package/cjs/style/themes/theme-ui/ui-theme-components.css +13 -0
  156. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +1 -1
  157. package/components/autocomplete/AutocompleteDocs.js +3 -3
  158. package/components/autocomplete/AutocompleteDocs.js.map +1 -1
  159. package/components/avatar/Avatar.js +1 -6
  160. package/components/avatar/Avatar.js.map +1 -1
  161. package/components/checkbox/CheckboxDocs.js +2 -2
  162. package/components/checkbox/CheckboxDocs.js.map +1 -1
  163. package/components/date-picker/DatePickerContext.d.ts +0 -1
  164. package/components/date-picker/DatePickerContext.js.map +1 -1
  165. package/components/date-picker/DatePickerDocs.js +1 -1
  166. package/components/date-picker/DatePickerDocs.js.map +1 -1
  167. package/components/date-picker/DatePickerInput.js +111 -137
  168. package/components/date-picker/DatePickerInput.js.map +1 -1
  169. package/components/date-picker/DatePickerProvider.js +0 -2
  170. package/components/date-picker/DatePickerProvider.js.map +1 -1
  171. package/components/date-picker/hooks/useDates.d.ts +0 -2
  172. package/components/date-picker/hooks/useDates.js +3 -5
  173. package/components/date-picker/hooks/useDates.js.map +1 -1
  174. package/components/date-picker/style/dnb-date-picker.css +4 -0
  175. package/components/date-picker/style/dnb-date-picker.min.css +1 -1
  176. package/components/date-picker/style/dnb-date-picker.scss +3 -0
  177. package/components/dialog/DialogDocs.js +7 -2
  178. package/components/dialog/DialogDocs.js.map +1 -1
  179. package/components/dropdown/Dropdown.d.ts +20 -20
  180. package/components/dropdown/DropdownDocs.d.ts +1 -0
  181. package/components/dropdown/DropdownDocs.js +157 -0
  182. package/components/dropdown/DropdownDocs.js.map +1 -1
  183. package/components/flex/ContainerDocs.js +1 -1
  184. package/components/flex/ContainerDocs.js.map +1 -1
  185. package/components/flex/ItemDocs.d.ts +2 -0
  186. package/components/flex/ItemDocs.js +33 -0
  187. package/components/flex/ItemDocs.js.map +1 -0
  188. package/components/grid/ItemDocs.d.ts +2 -0
  189. package/components/grid/ItemDocs.js +13 -0
  190. package/components/grid/ItemDocs.js.map +1 -0
  191. package/components/input/InputDocs.js +3 -3
  192. package/components/input/InputDocs.js.map +1 -1
  193. package/components/input-masked/InputMasked.d.ts +0 -3
  194. package/components/input-masked/InputMaskedDocs.d.ts +1 -0
  195. package/components/input-masked/InputMaskedDocs.js +57 -0
  196. package/components/input-masked/InputMaskedDocs.js.map +1 -1
  197. package/components/input-masked/InputMaskedHooks.js +11 -7
  198. package/components/input-masked/InputMaskedHooks.js.map +1 -1
  199. package/components/input-masked/InputMaskedUtils.d.ts +1 -1
  200. package/components/input-masked/InputMaskedUtils.js +2 -1
  201. package/components/input-masked/InputMaskedUtils.js.map +1 -1
  202. package/components/input-masked/MultiInputMaskedDocs.d.ts +2 -0
  203. package/components/input-masked/MultiInputMaskedDocs.js +69 -0
  204. package/components/input-masked/MultiInputMaskedDocs.js.map +1 -1
  205. package/components/input-masked/style/dnb-input-masked.css +9 -0
  206. package/components/input-masked/style/dnb-input-masked.min.css +1 -1
  207. package/components/input-masked/style/dnb-input-masked.scss +12 -0
  208. package/components/input-masked/text-mask/InputModeNumber.d.ts +8 -0
  209. package/components/input-masked/text-mask/InputModeNumber.js +32 -9
  210. package/components/input-masked/text-mask/InputModeNumber.js.map +1 -1
  211. package/components/input-masked/text-mask/adjustCaretPosition.d.ts +2 -1
  212. package/components/input-masked/text-mask/adjustCaretPosition.js +3 -2
  213. package/components/input-masked/text-mask/adjustCaretPosition.js.map +1 -1
  214. package/components/input-masked/text-mask/createTextMaskInputElement.js +9 -3
  215. package/components/input-masked/text-mask/createTextMaskInputElement.js.map +1 -1
  216. package/components/modal/ModalDocs.d.ts +5 -0
  217. package/components/modal/ModalDocs.js +195 -0
  218. package/components/modal/ModalDocs.js.map +1 -0
  219. package/components/radio/RadioDocs.js +2 -2
  220. package/components/radio/RadioDocs.js.map +1 -1
  221. package/components/section/Section.js +1 -6
  222. package/components/section/Section.js.map +1 -1
  223. package/components/section/SectionDocs.js +1 -1
  224. package/components/section/SectionDocs.js.map +1 -1
  225. package/components/slider/SliderDocs.js +2 -2
  226. package/components/slider/SliderDocs.js.map +1 -1
  227. package/components/space/SpaceDocs.d.ts +3 -0
  228. package/components/space/SpaceDocs.js +55 -0
  229. package/components/space/SpaceDocs.js.map +1 -0
  230. package/components/switch/SwitchDocs.js +2 -2
  231. package/components/switch/SwitchDocs.js.map +1 -1
  232. package/components/textarea/TextareaDocs.js +3 -3
  233. package/components/textarea/TextareaDocs.js.map +1 -1
  234. package/components/toggle-button/ToggleButtonGroupDocs.js +1 -1
  235. package/components/toggle-button/ToggleButtonGroupDocs.js.map +1 -1
  236. package/components/tooltip/TooltipDocs.js +1 -1
  237. package/components/tooltip/TooltipDocs.js.map +1 -1
  238. package/components/upload/Upload.js +6 -3
  239. package/components/upload/Upload.js.map +1 -1
  240. package/components/upload/UploadDocs.d.ts +1 -0
  241. package/components/upload/UploadDocs.js +42 -0
  242. package/components/upload/UploadDocs.js.map +1 -1
  243. package/components/upload/UploadFileListCell.js +32 -12
  244. package/components/upload/UploadFileListCell.js.map +1 -1
  245. package/components/upload/types.d.ts +7 -0
  246. package/components/upload/types.js.map +1 -1
  247. package/es/components/autocomplete/AutocompleteDocs.js +3 -3
  248. package/es/components/autocomplete/AutocompleteDocs.js.map +1 -1
  249. package/es/components/avatar/Avatar.js +1 -6
  250. package/es/components/avatar/Avatar.js.map +1 -1
  251. package/es/components/checkbox/CheckboxDocs.js +2 -2
  252. package/es/components/checkbox/CheckboxDocs.js.map +1 -1
  253. package/es/components/date-picker/DatePickerContext.d.ts +0 -1
  254. package/es/components/date-picker/DatePickerContext.js.map +1 -1
  255. package/es/components/date-picker/DatePickerDocs.js +1 -1
  256. package/es/components/date-picker/DatePickerDocs.js.map +1 -1
  257. package/es/components/date-picker/DatePickerInput.js +103 -130
  258. package/es/components/date-picker/DatePickerInput.js.map +1 -1
  259. package/es/components/date-picker/DatePickerProvider.js +0 -2
  260. package/es/components/date-picker/DatePickerProvider.js.map +1 -1
  261. package/es/components/date-picker/hooks/useDates.d.ts +0 -2
  262. package/es/components/date-picker/hooks/useDates.js +3 -5
  263. package/es/components/date-picker/hooks/useDates.js.map +1 -1
  264. package/es/components/date-picker/style/dnb-date-picker.css +4 -0
  265. package/es/components/date-picker/style/dnb-date-picker.min.css +1 -1
  266. package/es/components/date-picker/style/dnb-date-picker.scss +3 -0
  267. package/es/components/dialog/DialogDocs.js +7 -2
  268. package/es/components/dialog/DialogDocs.js.map +1 -1
  269. package/es/components/dropdown/Dropdown.d.ts +20 -20
  270. package/es/components/dropdown/DropdownDocs.d.ts +1 -0
  271. package/es/components/dropdown/DropdownDocs.js +157 -0
  272. package/es/components/dropdown/DropdownDocs.js.map +1 -1
  273. package/es/components/flex/ContainerDocs.js +1 -1
  274. package/es/components/flex/ContainerDocs.js.map +1 -1
  275. package/es/components/flex/ItemDocs.d.ts +2 -0
  276. package/es/components/flex/ItemDocs.js +33 -0
  277. package/es/components/flex/ItemDocs.js.map +1 -0
  278. package/es/components/grid/ItemDocs.d.ts +2 -0
  279. package/es/components/grid/ItemDocs.js +13 -0
  280. package/es/components/grid/ItemDocs.js.map +1 -0
  281. package/es/components/input/InputDocs.js +3 -3
  282. package/es/components/input/InputDocs.js.map +1 -1
  283. package/es/components/input-masked/InputMasked.d.ts +0 -3
  284. package/es/components/input-masked/InputMaskedDocs.d.ts +1 -0
  285. package/es/components/input-masked/InputMaskedDocs.js +57 -0
  286. package/es/components/input-masked/InputMaskedDocs.js.map +1 -1
  287. package/es/components/input-masked/InputMaskedHooks.js +11 -7
  288. package/es/components/input-masked/InputMaskedHooks.js.map +1 -1
  289. package/es/components/input-masked/InputMaskedUtils.d.ts +1 -1
  290. package/es/components/input-masked/InputMaskedUtils.js +2 -1
  291. package/es/components/input-masked/InputMaskedUtils.js.map +1 -1
  292. package/es/components/input-masked/MultiInputMaskedDocs.d.ts +2 -0
  293. package/es/components/input-masked/MultiInputMaskedDocs.js +69 -0
  294. package/es/components/input-masked/MultiInputMaskedDocs.js.map +1 -1
  295. package/es/components/input-masked/style/dnb-input-masked.css +9 -0
  296. package/es/components/input-masked/style/dnb-input-masked.min.css +1 -1
  297. package/es/components/input-masked/style/dnb-input-masked.scss +12 -0
  298. package/es/components/input-masked/text-mask/InputModeNumber.d.ts +8 -0
  299. package/es/components/input-masked/text-mask/InputModeNumber.js +39 -9
  300. package/es/components/input-masked/text-mask/InputModeNumber.js.map +1 -1
  301. package/es/components/input-masked/text-mask/adjustCaretPosition.d.ts +2 -1
  302. package/es/components/input-masked/text-mask/adjustCaretPosition.js +3 -2
  303. package/es/components/input-masked/text-mask/adjustCaretPosition.js.map +1 -1
  304. package/es/components/input-masked/text-mask/createTextMaskInputElement.js +9 -3
  305. package/es/components/input-masked/text-mask/createTextMaskInputElement.js.map +1 -1
  306. package/es/components/modal/ModalDocs.d.ts +5 -0
  307. package/es/components/modal/ModalDocs.js +191 -0
  308. package/es/components/modal/ModalDocs.js.map +1 -0
  309. package/es/components/radio/RadioDocs.js +2 -2
  310. package/es/components/radio/RadioDocs.js.map +1 -1
  311. package/es/components/section/Section.js +1 -6
  312. package/es/components/section/Section.js.map +1 -1
  313. package/es/components/section/SectionDocs.js +1 -1
  314. package/es/components/section/SectionDocs.js.map +1 -1
  315. package/es/components/slider/SliderDocs.js +2 -2
  316. package/es/components/slider/SliderDocs.js.map +1 -1
  317. package/es/components/space/SpaceDocs.d.ts +3 -0
  318. package/es/components/space/SpaceDocs.js +55 -0
  319. package/es/components/space/SpaceDocs.js.map +1 -0
  320. package/es/components/switch/SwitchDocs.js +2 -2
  321. package/es/components/switch/SwitchDocs.js.map +1 -1
  322. package/es/components/textarea/TextareaDocs.js +3 -3
  323. package/es/components/textarea/TextareaDocs.js.map +1 -1
  324. package/es/components/toggle-button/ToggleButtonGroupDocs.js +1 -1
  325. package/es/components/toggle-button/ToggleButtonGroupDocs.js.map +1 -1
  326. package/es/components/tooltip/TooltipDocs.js +1 -1
  327. package/es/components/tooltip/TooltipDocs.js.map +1 -1
  328. package/es/components/upload/Upload.js +6 -3
  329. package/es/components/upload/Upload.js.map +1 -1
  330. package/es/components/upload/UploadDocs.d.ts +1 -0
  331. package/es/components/upload/UploadDocs.js +42 -0
  332. package/es/components/upload/UploadDocs.js.map +1 -1
  333. package/es/components/upload/UploadFileListCell.js +32 -12
  334. package/es/components/upload/UploadFileListCell.js.map +1 -1
  335. package/es/components/upload/types.d.ts +7 -0
  336. package/es/components/upload/types.js.map +1 -1
  337. package/es/extensions/forms/DataContext/At/AtDocs.d.ts +2 -0
  338. package/es/extensions/forms/DataContext/At/AtDocs.js +18 -0
  339. package/es/extensions/forms/DataContext/At/AtDocs.js.map +1 -0
  340. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
  341. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  342. package/es/extensions/forms/Field/Number/Number.js +3 -6
  343. package/es/extensions/forms/Field/Number/Number.js.map +1 -1
  344. package/es/extensions/forms/Field/Password/PasswordDocs.d.ts +1 -0
  345. package/es/extensions/forms/Field/Password/PasswordDocs.js +13 -1
  346. package/es/extensions/forms/Field/Password/PasswordDocs.js.map +1 -1
  347. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
  348. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js +24 -16
  349. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  350. package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
  351. package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +7 -2
  352. package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
  353. package/es/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
  354. package/es/extensions/forms/Field/String/StringDocs.js +1 -1
  355. package/es/extensions/forms/Field/String/StringDocs.js.map +1 -1
  356. package/es/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  357. package/es/extensions/forms/Field/Upload/Upload.js +3 -1
  358. package/es/extensions/forms/Field/Upload/Upload.js.map +1 -1
  359. package/es/extensions/forms/FieldBlock/FieldBlock.js +11 -4
  360. package/es/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  361. package/es/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
  362. package/es/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
  363. package/es/extensions/forms/Form/ButtonRow/ButtonRowDocs.d.ts +2 -0
  364. package/es/extensions/forms/Form/ButtonRow/ButtonRowDocs.js +13 -0
  365. package/es/extensions/forms/Form/ButtonRow/ButtonRowDocs.js.map +1 -0
  366. package/es/extensions/forms/Form/Isolation/IsolationDocs.js +1 -1
  367. package/es/extensions/forms/Form/Isolation/IsolationDocs.js.map +1 -1
  368. package/es/extensions/forms/Wizard/Buttons/ButtonsDocs.d.ts +2 -0
  369. package/es/extensions/forms/Wizard/Buttons/ButtonsDocs.js +8 -0
  370. package/es/extensions/forms/Wizard/Buttons/ButtonsDocs.js.map +1 -0
  371. package/es/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
  372. package/es/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
  373. package/es/extensions/forms/hooks/useFieldProps.js +56 -19
  374. package/es/extensions/forms/hooks/useFieldProps.js.map +1 -1
  375. package/es/extensions/forms/types.d.ts +8 -5
  376. package/es/extensions/forms/types.js.map +1 -1
  377. package/es/extensions/forms/utils/FormError.d.ts +20 -16
  378. package/es/extensions/forms/utils/FormError.js +1 -0
  379. package/es/extensions/forms/utils/FormError.js.map +1 -1
  380. package/es/shared/Eufemia.d.ts +1 -1
  381. package/es/shared/Eufemia.js +2 -2
  382. package/es/shared/Eufemia.js.map +1 -1
  383. package/es/shared/helpers.d.ts +1 -0
  384. package/es/shared/helpers.js +6 -0
  385. package/es/shared/helpers.js.map +1 -1
  386. package/es/shared/locales/sv-SE.js +2 -2
  387. package/es/shared/locales/sv-SE.js.map +1 -1
  388. package/es/style/core/scopes.scss +1 -1
  389. package/es/style/dnb-ui-basis.css +1 -1
  390. package/es/style/dnb-ui-basis.min.css +1 -1
  391. package/es/style/dnb-ui-body.css +1 -1
  392. package/es/style/dnb-ui-body.min.css +1 -1
  393. package/es/style/dnb-ui-components.css +13 -0
  394. package/es/style/dnb-ui-components.min.css +1 -1
  395. package/es/style/dnb-ui-core.css +1 -1
  396. package/es/style/dnb-ui-core.min.css +1 -1
  397. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +13 -0
  398. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
  399. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +13 -0
  400. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +1 -1
  401. package/es/style/themes/theme-ui/ui-theme-components.css +13 -0
  402. package/es/style/themes/theme-ui/ui-theme-components.min.css +1 -1
  403. package/esm/dnb-ui-basis.min.mjs +1 -1
  404. package/esm/dnb-ui-components.min.mjs +1 -1
  405. package/esm/dnb-ui-elements.min.mjs +1 -1
  406. package/esm/dnb-ui-extensions.min.mjs +1 -1
  407. package/esm/dnb-ui-lib.min.mjs +1 -1
  408. package/extensions/forms/DataContext/At/AtDocs.d.ts +2 -0
  409. package/extensions/forms/DataContext/At/AtDocs.js +18 -0
  410. package/extensions/forms/DataContext/At/AtDocs.js.map +1 -0
  411. package/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
  412. package/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  413. package/extensions/forms/Field/Number/Number.js +3 -6
  414. package/extensions/forms/Field/Number/Number.js.map +1 -1
  415. package/extensions/forms/Field/Password/PasswordDocs.d.ts +1 -0
  416. package/extensions/forms/Field/Password/PasswordDocs.js +13 -1
  417. package/extensions/forms/Field/Password/PasswordDocs.js.map +1 -1
  418. package/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
  419. package/extensions/forms/Field/PhoneNumber/PhoneNumber.js +33 -25
  420. package/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  421. package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
  422. package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +7 -2
  423. package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
  424. package/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
  425. package/extensions/forms/Field/String/StringDocs.js +1 -1
  426. package/extensions/forms/Field/String/StringDocs.js.map +1 -1
  427. package/extensions/forms/Field/Upload/Upload.d.ts +1 -1
  428. package/extensions/forms/Field/Upload/Upload.js +3 -1
  429. package/extensions/forms/Field/Upload/Upload.js.map +1 -1
  430. package/extensions/forms/FieldBlock/FieldBlock.js +11 -4
  431. package/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  432. package/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
  433. package/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
  434. package/extensions/forms/Form/ButtonRow/ButtonRowDocs.d.ts +2 -0
  435. package/extensions/forms/Form/ButtonRow/ButtonRowDocs.js +13 -0
  436. package/extensions/forms/Form/ButtonRow/ButtonRowDocs.js.map +1 -0
  437. package/extensions/forms/Form/Isolation/IsolationDocs.js +1 -1
  438. package/extensions/forms/Form/Isolation/IsolationDocs.js.map +1 -1
  439. package/extensions/forms/Wizard/Buttons/ButtonsDocs.d.ts +2 -0
  440. package/extensions/forms/Wizard/Buttons/ButtonsDocs.js +8 -0
  441. package/extensions/forms/Wizard/Buttons/ButtonsDocs.js.map +1 -0
  442. package/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
  443. package/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
  444. package/extensions/forms/hooks/useFieldProps.js +56 -19
  445. package/extensions/forms/hooks/useFieldProps.js.map +1 -1
  446. package/extensions/forms/types.d.ts +8 -5
  447. package/extensions/forms/types.js.map +1 -1
  448. package/extensions/forms/utils/FormError.d.ts +20 -16
  449. package/extensions/forms/utils/FormError.js.map +1 -1
  450. package/package.json +1 -1
  451. package/shared/Eufemia.d.ts +1 -1
  452. package/shared/Eufemia.js +2 -2
  453. package/shared/Eufemia.js.map +1 -1
  454. package/shared/helpers.d.ts +1 -0
  455. package/shared/helpers.js +6 -0
  456. package/shared/helpers.js.map +1 -1
  457. package/shared/locales/sv-SE.js +2 -2
  458. package/shared/locales/sv-SE.js.map +1 -1
  459. package/style/core/scopes.scss +1 -1
  460. package/style/dnb-ui-basis.css +1 -1
  461. package/style/dnb-ui-basis.min.css +1 -1
  462. package/style/dnb-ui-body.css +1 -1
  463. package/style/dnb-ui-body.min.css +1 -1
  464. package/style/dnb-ui-components.css +13 -0
  465. package/style/dnb-ui-components.min.css +1 -1
  466. package/style/dnb-ui-core.css +1 -1
  467. package/style/dnb-ui-core.min.css +1 -1
  468. package/style/themes/theme-eiendom/eiendom-theme-components.css +13 -0
  469. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
  470. package/style/themes/theme-sbanken/sbanken-theme-components.css +13 -0
  471. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +1 -1
  472. package/style/themes/theme-ui/ui-theme-components.css +13 -0
  473. package/style/themes/theme-ui/ui-theme-components.min.css +1 -1
  474. package/umd/dnb-ui-basis.min.js +1 -1
  475. package/umd/dnb-ui-components.min.js +1 -1
  476. package/umd/dnb-ui-elements.min.js +1 -1
  477. package/umd/dnb-ui-extensions.min.js +1 -1
  478. package/umd/dnb-ui-lib.min.js +1 -1
@@ -7,6 +7,7 @@ import Button from '../button/Button';
7
7
  import Icon from '../../components/Icon';
8
8
  import FormStatus from '../../components/FormStatus';
9
9
  import ProgressIndicator from '../../components/progress-indicator';
10
+ import P from '../../elements/P';
10
11
  import { trash as TrashIcon, exclamation_medium as ExclamationIcon, file_png_medium as png, file_jpg_medium as jpg, file_word_medium as doc, file_pdf_medium as pdf, file_xls_medium as xls, file_ppt_medium as ppt, file_csv_medium as csv, file_txt_medium as txt, file_xml_medium as xml, file_medium as file } from '../../icons';
11
12
  import { getPreviousSibling } from '../../shared/component-helper';
12
13
  import useUpload, { isFileEqual } from './useUpload';
@@ -36,11 +37,13 @@ const UploadFileListCell = ({
36
37
  download,
37
38
  allowDuplicates
38
39
  }) => {
39
- var _div, _FormStatus;
40
+ var _div, _div2, _P, _FormStatus;
40
41
  const {
41
42
  file,
42
43
  errorMessage,
43
- isLoading
44
+ isLoading,
45
+ description,
46
+ removeDeleteButton
44
47
  } = uploadFile;
45
48
  const hasWarning = errorMessage != null;
46
49
  const imageUrl = (file === null || file === void 0 ? void 0 : file.size) > 0 ? URL.createObjectURL(file) : null;
@@ -68,13 +71,7 @@ const UploadFileListCell = ({
68
71
  className: "dnb-upload__file-cell__content__left"
69
72
  }, getFileIcon(file, {
70
73
  isLoading
71
- }, hasWarning), getTitle()), React.createElement("div", null, React.createElement(Button, {
72
- icon: TrashIcon,
73
- variant: "tertiary",
74
- onClick: onDeleteHandler,
75
- icon_position: "left",
76
- disabled: isLoading
77
- }, deleteButtonText))), getWarning());
74
+ }, hasWarning), getTitle()), getDeleteButton()), getWarning());
78
75
  function getTitle() {
79
76
  return isLoading ? _div || (_div = React.createElement("div", {
80
77
  className: "dnb-upload__file-cell__text-container dnb-upload__file-cell__text-container--loading"
@@ -86,14 +83,37 @@ const UploadFileListCell = ({
86
83
  download: download,
87
84
  onClick: onClick,
88
85
  bottom: 0
89
- }));
86
+ }), getDescription());
87
+ }
88
+ function getDeleteButton() {
89
+ if (removeDeleteButton) {
90
+ return null;
91
+ }
92
+ return _div2 || (_div2 = React.createElement("div", null, React.createElement(Button, {
93
+ icon: TrashIcon,
94
+ variant: "tertiary",
95
+ onClick: onDeleteHandler,
96
+ icon_position: "left",
97
+ disabled: isLoading
98
+ }, deleteButtonText)));
99
+ }
100
+ function getDescription() {
101
+ if (!description) {
102
+ return null;
103
+ }
104
+ return _P || (_P = React.createElement(P, {
105
+ className: "dnb-upload__text"
106
+ }, description));
90
107
  }
91
108
  function getWarning() {
92
- return hasWarning ? _FormStatus || (_FormStatus = React.createElement(FormStatus, {
109
+ if (!hasWarning) {
110
+ return null;
111
+ }
112
+ return _FormStatus || (_FormStatus = React.createElement(FormStatus, {
93
113
  top: "small",
94
114
  text: errorMessage,
95
115
  stretch: true
96
- })) : null;
116
+ }));
97
117
  }
98
118
  };
99
119
  export default UploadFileListCell;
@@ -1 +1 @@
1
- {"version":3,"file":"UploadFileListCell.js","names":["React","useCallback","useRef","classnames","Button","Icon","FormStatus","ProgressIndicator","trash","TrashIcon","exclamation_medium","ExclamationIcon","file_png_medium","png","file_jpg_medium","jpg","file_word_medium","doc","file_pdf_medium","pdf","file_xls_medium","xls","file_ppt_medium","ppt","file_csv_medium","csv","file_txt_medium","txt","file_xml_medium","xml","file_medium","file","getPreviousSibling","useUpload","isFileEqual","getFileTypeFromExtension","UploadFileLink","fileExtensionImages","docx","odt","UploadFileListCell","id","uploadFile","onDelete","onClick","loadingText","deleteButtonText","download","allowDuplicates","_div","_FormStatus","errorMessage","isLoading","hasWarning","imageUrl","size","URL","createObjectURL","cellRef","exists","useExistsHighlight","isDuplicate","handleDisappearFocus","_getPreviousSibling","cellElement","current","focusElement","querySelector","focus","preventScroll","onDeleteHandler","createElement","className","ref","getFileIcon","getTitle","icon","variant","icon_position","disabled","getWarning","text","name","href","bottom","top","stretch","internalFiles","updateExists","useState","timerRef","clearTimers","clearTimeout","useEffect","some","f","setTimeout","loading","_loading$size","_Icon","iconFileType","mimeParts","type","split","Object","prototype","hasOwnProperty","call"],"sources":["../../../../src/components/upload/UploadFileListCell.tsx"],"sourcesContent":["import React, { useCallback, useRef } from 'react'\nimport classnames from 'classnames'\n\n// Components\nimport Button from '../button/Button'\nimport Icon from '../../components/Icon'\nimport FormStatus from '../../components/FormStatus'\nimport ProgressIndicator from '../../components/progress-indicator'\n\n// Icons\nimport {\n trash as TrashIcon,\n exclamation_medium as ExclamationIcon,\n file_png_medium as png,\n file_jpg_medium as jpg,\n file_word_medium as doc,\n file_pdf_medium as pdf,\n file_xls_medium as xls,\n file_ppt_medium as ppt,\n file_csv_medium as csv,\n file_txt_medium as txt,\n file_xml_medium as xml,\n file_medium as file,\n} from '../../icons'\nimport { UploadFile, UploadFileNative } from './types'\n\n// Shared\nimport { getPreviousSibling } from '../../shared/component-helper'\nimport useUpload, { isFileEqual } from './useUpload'\nimport { getFileTypeFromExtension } from './UploadVerify'\nimport UploadFileLink from './UploadFileListLink'\nimport { ProgressIndicatorAllProps } from '../progress-indicator/types'\n\n// Will be deprecated - and then default to only showing the file icon,\n// and not file icon per file extension type\nexport const fileExtensionImages = {\n png,\n jpg,\n pdf,\n doc,\n docx: doc,\n odt: doc,\n xls,\n ppt,\n csv,\n txt,\n xml,\n file,\n}\n\nexport type UploadFileListCellProps = {\n id: string\n\n /**\n * Uploaded file\n */\n uploadFile: UploadFile | UploadFileNative\n\n /**\n * Calls onDelete when clicking the delete button\n */\n onDelete: () => void\n\n /**\n * Calls onClick when clicking the file name\n */\n onClick?: () => void\n\n /**\n * Causes the browser to treat all listed files as downloadable instead of opening them in a new browser tab or window.\n * Default: false\n */\n download?: boolean\n\n /**\n * Allows uploading of duplicate files.\n * Default: false\n */\n allowDuplicates?: boolean\n\n /**\n * Text\n */\n loadingText: React.ReactNode\n deleteButtonText: React.ReactNode\n}\n\nconst UploadFileListCell = ({\n id,\n uploadFile,\n onDelete,\n onClick,\n loadingText,\n deleteButtonText,\n download,\n allowDuplicates,\n}: UploadFileListCellProps) => {\n const { file, errorMessage, isLoading } = uploadFile\n const hasWarning = errorMessage != null\n\n const imageUrl = file?.size > 0 ? URL.createObjectURL(file) : null\n const cellRef = useRef<HTMLLIElement>()\n const exists = useExistsHighlight(id, file)\n const isDuplicate = !allowDuplicates && exists\n\n const handleDisappearFocus = useCallback(() => {\n const cellElement = cellRef.current\n const focusElement = getPreviousSibling(\n '.dnb-upload',\n cellElement\n )?.querySelector('.dnb-upload__file-input-button') as HTMLButtonElement\n focusElement?.focus({ preventScroll: true })\n }, [cellRef])\n\n const onDeleteHandler = useCallback(() => {\n handleDisappearFocus()\n\n onDelete()\n }, [handleDisappearFocus, onDelete])\n\n return (\n <li\n className={classnames(\n 'dnb-upload__file-cell',\n hasWarning && 'dnb-upload__file-cell--warning',\n isDuplicate && 'dnb-upload__file-cell--highlight'\n )}\n ref={cellRef}\n >\n <div className=\"dnb-upload__file-cell__content\">\n <div className=\"dnb-upload__file-cell__content__left\">\n {getFileIcon(file, { isLoading }, hasWarning)}\n {getTitle()}\n </div>\n <div>\n <Button\n icon={TrashIcon}\n variant=\"tertiary\"\n onClick={onDeleteHandler}\n icon_position=\"left\"\n disabled={isLoading}\n >\n {deleteButtonText}\n </Button>\n </div>\n </div>\n\n {getWarning()}\n </li>\n )\n\n function getTitle() {\n return isLoading ? (\n <div\n className={classnames(\n 'dnb-upload__file-cell__text-container',\n 'dnb-upload__file-cell__text-container--loading'\n )}\n >\n {loadingText}\n </div>\n ) : (\n <div className=\"dnb-upload__file-cell__text-container\">\n <UploadFileLink\n text={file.name}\n href={imageUrl}\n download={download}\n onClick={onClick}\n bottom={0}\n />\n </div>\n )\n }\n\n function getWarning() {\n return hasWarning ? (\n <FormStatus top=\"small\" text={errorMessage} stretch />\n ) : null\n }\n}\n\nexport default UploadFileListCell\n\nfunction useExistsHighlight(id: string, file: File) {\n const { internalFiles } = useUpload(id)\n const [exists, updateExists] = React.useState(false)\n const timerRef = React.useRef<NodeJS.Timer>()\n\n const clearTimers = () => {\n clearTimeout(timerRef.current)\n }\n\n React.useEffect(() => {\n const exists = internalFiles.some(({ exists, file: f }) => {\n return exists && isFileEqual(file, f)\n })\n\n if (exists) {\n updateExists(true)\n clearTimers()\n timerRef.current = setTimeout(() => updateExists(false), 1500) // transition-duration in CSS\n }\n\n return clearTimers\n }, [file, internalFiles])\n\n return exists\n}\n\nexport function getFileIcon(\n file: File,\n loading?: {\n isLoading: UploadFile['isLoading']\n size?: ProgressIndicatorAllProps['size']\n },\n hasWarning?: boolean\n) {\n if (loading?.isLoading) {\n return <ProgressIndicator size={loading?.size ?? 'default'} />\n }\n\n if (hasWarning) return <Icon icon={ExclamationIcon} />\n\n let iconFileType = getFileTypeFromExtension(file)\n\n if (!iconFileType) {\n const mimeParts = file.type.split('/')\n iconFileType =\n fileExtensionImages[mimeParts[0]] ||\n fileExtensionImages[mimeParts[1]]\n }\n\n if (\n !Object.prototype.hasOwnProperty.call(\n fileExtensionImages,\n iconFileType\n )\n ) {\n iconFileType = 'file'\n }\n\n return <Icon icon={fileExtensionImages[iconFileType]} />\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"UploadFileListCell.js","names":["React","useCallback","useRef","classnames","Button","Icon","FormStatus","ProgressIndicator","P","trash","TrashIcon","exclamation_medium","ExclamationIcon","file_png_medium","png","file_jpg_medium","jpg","file_word_medium","doc","file_pdf_medium","pdf","file_xls_medium","xls","file_ppt_medium","ppt","file_csv_medium","csv","file_txt_medium","txt","file_xml_medium","xml","file_medium","file","getPreviousSibling","useUpload","isFileEqual","getFileTypeFromExtension","UploadFileLink","fileExtensionImages","docx","odt","UploadFileListCell","id","uploadFile","onDelete","onClick","loadingText","deleteButtonText","download","allowDuplicates","_div","_div2","_P","_FormStatus","errorMessage","isLoading","description","removeDeleteButton","hasWarning","imageUrl","size","URL","createObjectURL","cellRef","exists","useExistsHighlight","isDuplicate","handleDisappearFocus","_getPreviousSibling","cellElement","current","focusElement","querySelector","focus","preventScroll","onDeleteHandler","createElement","className","ref","getFileIcon","getTitle","getDeleteButton","getWarning","text","name","href","bottom","getDescription","icon","variant","icon_position","disabled","top","stretch","internalFiles","updateExists","useState","timerRef","clearTimers","clearTimeout","useEffect","some","f","setTimeout","loading","_loading$size","_Icon","iconFileType","mimeParts","type","split","Object","prototype","hasOwnProperty","call"],"sources":["../../../../src/components/upload/UploadFileListCell.tsx"],"sourcesContent":["import React, { useCallback, useRef } from 'react'\nimport classnames from 'classnames'\n\n// Components\nimport Button from '../button/Button'\nimport Icon from '../../components/Icon'\nimport FormStatus from '../../components/FormStatus'\nimport ProgressIndicator from '../../components/progress-indicator'\n\n// Elements\nimport P from '../../elements/P'\n\n// Icons\nimport {\n trash as TrashIcon,\n exclamation_medium as ExclamationIcon,\n file_png_medium as png,\n file_jpg_medium as jpg,\n file_word_medium as doc,\n file_pdf_medium as pdf,\n file_xls_medium as xls,\n file_ppt_medium as ppt,\n file_csv_medium as csv,\n file_txt_medium as txt,\n file_xml_medium as xml,\n file_medium as file,\n} from '../../icons'\nimport { UploadFile, UploadFileNative } from './types'\n\n// Shared\nimport { getPreviousSibling } from '../../shared/component-helper'\nimport useUpload, { isFileEqual } from './useUpload'\nimport { getFileTypeFromExtension } from './UploadVerify'\nimport UploadFileLink from './UploadFileListLink'\nimport { ProgressIndicatorAllProps } from '../progress-indicator/types'\n\n// Will be deprecated - and then default to only showing the file icon,\n// and not file icon per file extension type\nexport const fileExtensionImages = {\n png,\n jpg,\n pdf,\n doc,\n docx: doc,\n odt: doc,\n xls,\n ppt,\n csv,\n txt,\n xml,\n file,\n}\n\nexport type UploadFileListCellProps = {\n id: string\n\n /**\n * Uploaded file\n */\n uploadFile: UploadFile | UploadFileNative\n\n /**\n * Calls onDelete when clicking the delete button\n */\n onDelete: () => void\n\n /**\n * Calls onClick when clicking the file name\n */\n onClick?: () => void\n\n /**\n * Causes the browser to treat all listed files as downloadable instead of opening them in a new browser tab or window.\n * Default: false\n */\n download?: boolean\n\n /**\n * Allows uploading of duplicate files.\n * Default: false\n */\n allowDuplicates?: boolean\n\n /**\n * Text\n */\n loadingText: React.ReactNode\n deleteButtonText: React.ReactNode\n}\n\nconst UploadFileListCell = ({\n id,\n uploadFile,\n onDelete,\n onClick,\n loadingText,\n deleteButtonText,\n download,\n allowDuplicates,\n}: UploadFileListCellProps) => {\n const {\n file,\n errorMessage,\n isLoading,\n description,\n removeDeleteButton,\n } = uploadFile\n const hasWarning = errorMessage != null\n\n const imageUrl = file?.size > 0 ? URL.createObjectURL(file) : null\n const cellRef = useRef<HTMLLIElement>()\n const exists = useExistsHighlight(id, file)\n const isDuplicate = !allowDuplicates && exists\n\n const handleDisappearFocus = useCallback(() => {\n const cellElement = cellRef.current\n const focusElement = getPreviousSibling(\n '.dnb-upload',\n cellElement\n )?.querySelector('.dnb-upload__file-input-button') as HTMLButtonElement\n focusElement?.focus({ preventScroll: true })\n }, [cellRef])\n\n const onDeleteHandler = useCallback(() => {\n handleDisappearFocus()\n\n onDelete()\n }, [handleDisappearFocus, onDelete])\n\n return (\n <li\n className={classnames(\n 'dnb-upload__file-cell',\n hasWarning && 'dnb-upload__file-cell--warning',\n isDuplicate && 'dnb-upload__file-cell--highlight'\n )}\n ref={cellRef}\n >\n <div className=\"dnb-upload__file-cell__content\">\n <div className=\"dnb-upload__file-cell__content__left\">\n {getFileIcon(file, { isLoading }, hasWarning)}\n {getTitle()}\n </div>\n {getDeleteButton()}\n </div>\n {getWarning()}\n </li>\n )\n\n function getTitle() {\n return isLoading ? (\n <div\n className={classnames(\n 'dnb-upload__file-cell__text-container',\n 'dnb-upload__file-cell__text-container--loading'\n )}\n >\n {loadingText}\n </div>\n ) : (\n <div className=\"dnb-upload__file-cell__text-container\">\n <UploadFileLink\n text={file.name}\n href={imageUrl}\n download={download}\n onClick={onClick}\n bottom={0}\n />\n {getDescription()}\n </div>\n )\n }\n\n function getDeleteButton() {\n if (removeDeleteButton) {\n return null\n }\n return (\n <div>\n <Button\n icon={TrashIcon}\n variant=\"tertiary\"\n onClick={onDeleteHandler}\n icon_position=\"left\"\n disabled={isLoading}\n >\n {deleteButtonText}\n </Button>\n </div>\n )\n }\n\n function getDescription() {\n if (!description) {\n return null\n }\n return <P className=\"dnb-upload__text\">{description}</P>\n }\n\n function getWarning() {\n if (!hasWarning) {\n return null\n }\n return <FormStatus top=\"small\" text={errorMessage} stretch />\n }\n}\n\nexport default UploadFileListCell\n\nfunction useExistsHighlight(id: string, file: File) {\n const { internalFiles } = useUpload(id)\n const [exists, updateExists] = React.useState(false)\n const timerRef = React.useRef<NodeJS.Timer>()\n\n const clearTimers = () => {\n clearTimeout(timerRef.current)\n }\n\n React.useEffect(() => {\n const exists = internalFiles.some(({ exists, file: f }) => {\n return exists && isFileEqual(file, f)\n })\n\n if (exists) {\n updateExists(true)\n clearTimers()\n timerRef.current = setTimeout(() => updateExists(false), 1500) // transition-duration in CSS\n }\n\n return clearTimers\n }, [file, internalFiles])\n\n return exists\n}\n\nexport function getFileIcon(\n file: File,\n loading?: {\n isLoading: UploadFile['isLoading']\n size?: ProgressIndicatorAllProps['size']\n },\n hasWarning?: boolean\n) {\n if (loading?.isLoading) {\n return <ProgressIndicator size={loading?.size ?? 'default'} />\n }\n\n if (hasWarning) return <Icon icon={ExclamationIcon} />\n\n let iconFileType = getFileTypeFromExtension(file)\n\n if (!iconFileType) {\n const mimeParts = file.type.split('/')\n iconFileType =\n fileExtensionImages[mimeParts[0]] ||\n fileExtensionImages[mimeParts[1]]\n }\n\n if (\n !Object.prototype.hasOwnProperty.call(\n fileExtensionImages,\n iconFileType\n )\n ) {\n iconFileType = 'file'\n }\n\n return <Icon icon={fileExtensionImages[iconFileType]} />\n}\n"],"mappings":"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","ignoreList":[]}
@@ -60,6 +60,11 @@ export type UploadProps = {
60
60
  * Default: false
61
61
  */
62
62
  allowDuplicates?: boolean;
63
+ /**
64
+ * Disables file drag and drop, by removing the drop zone.
65
+ * Default: false
66
+ */
67
+ disableDragAndDrop?: boolean;
63
68
  /**
64
69
  * Custom text properties
65
70
  */
@@ -90,5 +95,7 @@ export type UploadFile = {
90
95
  exists: boolean;
91
96
  isLoading?: boolean;
92
97
  errorMessage?: React.ReactNode;
98
+ description?: React.ReactNode;
99
+ removeDeleteButton?: boolean;
93
100
  };
94
101
  export type UploadFileNative = Omit<UploadFile, 'id' | 'exists'> & Partial<Pick<UploadFile, 'id' | 'exists'>>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/components/upload/types.ts"],"sourcesContent":["import React from 'react'\nimport type { SkeletonShow } from '../skeleton/Skeleton'\nimport type { LocaleProps, SpacingProps } from '../../shared/types'\nimport type { SharedStateId } from '../../shared/helpers/useSharedState'\n\nexport type UploadAcceptedFileTypes = string[]\n\nexport type UploadAcceptedFileTypesWithFileMaxSize =\n UploadAcceptedFileTypeObject[]\n\nexport type UploadAcceptedFileTypeObject = {\n fileType: string\n fileMaxSize?: number | false\n}\n\nexport type UploadProps = {\n /**\n * unique id used with the useUpload hook to manage the files\n */\n id?: SharedStateId\n\n /**\n * list of accepted file types.\n */\n acceptedFileTypes:\n | UploadAcceptedFileTypes\n | UploadAcceptedFileTypesWithFileMaxSize\n\n /**\n * Skeleton should be applied when loading content\n * Default: null\n */\n skeleton?: SkeletonShow\n\n /**\n * Defines the amount of files the user can select and upload\n * Default: 100\n */\n filesAmountLimit?: number\n\n /**\n * Defines the max file size of each file in MB. Use either `0` or `false` to disable.\n * Default: 5 MB\n */\n fileMaxSize?: number | false\n\n /**\n * will be called on `files` changes made by the user. Access the files with `{ files }`.\n */\n onChange?: ({ files }: { files: Array<UploadFile> }) => void\n\n /**\n * will be called once a file gets deleted by the user. Access the deleted file with `{ fileItem }`.\n */\n onFileDelete?: ({\n fileItem,\n }: {\n fileItem: UploadFile\n }) => void | Promise<void>\n\n /**\n * Will be called once a file gets clicked on by the user. Access the clicked file with `{ fileItem }`.\n */\n onFileClick?: ({\n fileItem,\n }: {\n fileItem: UploadFile\n }) => void | Promise<void>\n\n /**\n * Causes the browser to treat all listed files as downloadable instead of opening them in a new browser tab or window.\n * Default: false\n */\n download?: boolean\n\n /**\n * Allows uploading of duplicate files.\n * Default: false\n */\n allowDuplicates?: boolean\n\n /**\n * Custom text properties\n */\n title?: React.ReactNode\n text?: React.ReactNode\n fileTypeTableCaption?: React.ReactNode\n fileTypeDescription?: React.ReactNode\n fileSizeDescription?: React.ReactNode\n fileAmountDescription?: React.ReactNode\n fileSizeContent?: React.ReactNode\n buttonText?: React.ReactNode\n errorLargeFile?: React.ReactNode\n errorUnsupportedFile?: React.ReactNode\n errorAmountLimit?: React.ReactNode\n loadingText?: React.ReactNode\n deleteButton?: React.ReactNode\n fileListAriaLabel?: string\n children?: React.ReactNode\n}\n\nexport type UploadAllProps = UploadProps &\n SpacingProps &\n LocaleProps &\n Omit<React.HTMLProps<HTMLElement>, 'onChange' | 'title'>\n\nexport type UploadContextProps = {\n id?: string\n onInputUpload: (files: Array<UploadFileNative>) => void\n} & Partial<UploadAllProps>\n\nexport type UploadFile = {\n file: File\n id: string\n exists: boolean\n isLoading?: boolean\n errorMessage?: React.ReactNode\n}\n\nexport type UploadFileNative = Omit<UploadFile, 'id' | 'exists'> &\n Partial<Pick<UploadFile, 'id' | 'exists'>>\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/components/upload/types.ts"],"sourcesContent":["import React from 'react'\nimport type { SkeletonShow } from '../skeleton/Skeleton'\nimport type { LocaleProps, SpacingProps } from '../../shared/types'\nimport type { SharedStateId } from '../../shared/helpers/useSharedState'\n\nexport type UploadAcceptedFileTypes = string[]\n\nexport type UploadAcceptedFileTypesWithFileMaxSize =\n UploadAcceptedFileTypeObject[]\n\nexport type UploadAcceptedFileTypeObject = {\n fileType: string\n fileMaxSize?: number | false\n}\n\nexport type UploadProps = {\n /**\n * unique id used with the useUpload hook to manage the files\n */\n id?: SharedStateId\n\n /**\n * list of accepted file types.\n */\n acceptedFileTypes:\n | UploadAcceptedFileTypes\n | UploadAcceptedFileTypesWithFileMaxSize\n\n /**\n * Skeleton should be applied when loading content\n * Default: null\n */\n skeleton?: SkeletonShow\n\n /**\n * Defines the amount of files the user can select and upload\n * Default: 100\n */\n filesAmountLimit?: number\n\n /**\n * Defines the max file size of each file in MB. Use either `0` or `false` to disable.\n * Default: 5 MB\n */\n fileMaxSize?: number | false\n\n /**\n * will be called on `files` changes made by the user. Access the files with `{ files }`.\n */\n onChange?: ({ files }: { files: Array<UploadFile> }) => void\n\n /**\n * will be called once a file gets deleted by the user. Access the deleted file with `{ fileItem }`.\n */\n onFileDelete?: ({\n fileItem,\n }: {\n fileItem: UploadFile\n }) => void | Promise<void>\n\n /**\n * Will be called once a file gets clicked on by the user. Access the clicked file with `{ fileItem }`.\n */\n onFileClick?: ({\n fileItem,\n }: {\n fileItem: UploadFile\n }) => void | Promise<void>\n\n /**\n * Causes the browser to treat all listed files as downloadable instead of opening them in a new browser tab or window.\n * Default: false\n */\n download?: boolean\n\n /**\n * Allows uploading of duplicate files.\n * Default: false\n */\n allowDuplicates?: boolean\n\n /**\n * Disables file drag and drop, by removing the drop zone.\n * Default: false\n */\n disableDragAndDrop?: boolean\n\n /**\n * Custom text properties\n */\n title?: React.ReactNode\n text?: React.ReactNode\n fileTypeTableCaption?: React.ReactNode\n fileTypeDescription?: React.ReactNode\n fileSizeDescription?: React.ReactNode\n fileAmountDescription?: React.ReactNode\n fileSizeContent?: React.ReactNode\n buttonText?: React.ReactNode\n errorLargeFile?: React.ReactNode\n errorUnsupportedFile?: React.ReactNode\n errorAmountLimit?: React.ReactNode\n loadingText?: React.ReactNode\n deleteButton?: React.ReactNode\n fileListAriaLabel?: string\n children?: React.ReactNode\n}\n\nexport type UploadAllProps = UploadProps &\n SpacingProps &\n LocaleProps &\n Omit<React.HTMLProps<HTMLElement>, 'onChange' | 'title'>\n\nexport type UploadContextProps = {\n id?: string\n onInputUpload: (files: Array<UploadFileNative>) => void\n} & Partial<UploadAllProps>\n\nexport type UploadFile = {\n file: File\n id: string\n exists: boolean\n isLoading?: boolean\n errorMessage?: React.ReactNode\n description?: React.ReactNode\n removeDeleteButton?: boolean\n}\n\nexport type UploadFileNative = Omit<UploadFile, 'id' | 'exists'> &\n Partial<Pick<UploadFile, 'id' | 'exists'>>\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import { PropertiesTableProps } from '../../../../shared/types';
2
+ export declare const AtProperties: PropertiesTableProps;
@@ -0,0 +1,18 @@
1
+ export const AtProperties = {
2
+ children: {
3
+ doc: 'Features with given path as root for the DataContext.',
4
+ type: 'React.ReactNode',
5
+ status: 'optional'
6
+ },
7
+ path: {
8
+ doc: 'JSON Pointer path to where in the outer DataContext source to point at.',
9
+ type: 'string',
10
+ status: 'optional'
11
+ },
12
+ iterate: {
13
+ doc: 'True to iterate elements at given path based on the source data, including the index in the outer path, instead of just rendering children once.',
14
+ type: 'boolean',
15
+ status: 'optional'
16
+ }
17
+ };
18
+ //# sourceMappingURL=AtDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AtDocs.js","names":["AtProperties","children","doc","type","status","path","iterate"],"sources":["../../../../../../src/extensions/forms/DataContext/At/AtDocs.ts"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const AtProperties: PropertiesTableProps = {\n children: {\n doc: 'Features with given path as root for the DataContext.',\n type: 'React.ReactNode',\n status: 'optional',\n },\n path: {\n doc: 'JSON Pointer path to where in the outer DataContext source to point at.',\n type: 'string',\n status: 'optional',\n },\n iterate: {\n doc: 'True to iterate elements at given path based on the source data, including the index in the outer path, instead of just rendering children once.',\n type: 'boolean',\n status: 'optional',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,YAAkC,GAAG;EAChDC,QAAQ,EAAE;IACRC,GAAG,EAAE,uDAAuD;IAC5DC,IAAI,EAAE,iBAAiB;IACvBC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJH,GAAG,EAAE,yEAAyE;IAC9EC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;EACV,CAAC;EACDE,OAAO,EAAE;IACPJ,GAAG,EAAE,kJAAkJ;IACvJC,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE;EACV;AACF,CAAC","ignoreList":[]}
@@ -20,7 +20,7 @@ export const ProviderProperties = {
20
20
  status: 'optional'
21
21
  },
22
22
  errorMessages: {
23
- doc: 'Object containing error messages by either type of JSON Pointer path and type.',
23
+ doc: 'Object containing error messages by either type of JSON Pointer path and type. The messages can be a React.ReactNode or a string.',
24
24
  type: 'object',
25
25
  status: 'optional'
26
26
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderDocs.js","names":["ProviderProperties","defaultData","doc","type","status","data","id","schema","errorMessages","minimumAsyncBehaviorTime","asyncSubmitTimeout","scrollTopOnSubmit","sessionStorageId","ajvInstance","transformIn","transformOut","globalStatusId","required","disabled","locale","countryCode","children","ProviderEvents","onChange","onPathChange","onSubmit","onSubmitRequest","onSubmitComplete","onClear"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/ProviderDocs.ts"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const ProviderProperties: PropertiesTableProps = {\n defaultData: {\n doc: 'Default source data, only used if no other source is available, and not leading to updates if changed after mount.',\n type: 'object',\n status: 'optional',\n },\n data: {\n doc: 'Dynamic source data used as both initial data, and updates internal data if changed after mount.',\n type: 'object',\n status: 'optional',\n },\n id: {\n doc: 'Unique id for connecting Form.Handler and helper tools such as Form.useData.',\n type: ['string', 'Function', 'Object', 'React.Context'],\n status: 'optional',\n },\n schema: {\n doc: 'JSON Schema for validation of the data set.',\n type: 'object',\n status: 'optional',\n },\n errorMessages: {\n doc: 'Object containing error messages by either type of JSON Pointer path and type.',\n type: 'object',\n status: 'optional',\n },\n minimumAsyncBehaviorTime: {\n doc: 'Minimum time to display the submit indicator. Default is 1s.',\n type: 'boolean',\n status: 'optional',\n },\n asyncSubmitTimeout: {\n doc: 'The maximum time to display the submit indicator before it changes back to normal. In case something went wrong during submission. Default is 30s.',\n type: 'boolean',\n status: 'optional',\n },\n scrollTopOnSubmit: {\n doc: 'True for the UI to scroll to the top of the page when data is submitted.',\n type: 'boolean',\n status: 'optional',\n },\n sessionStorageId: {\n doc: 'Key for saving active data to session storage and loading it on mount.',\n type: 'string',\n status: 'optional',\n },\n ajvInstance: {\n doc: 'Provide your own custom Ajv instance. More info in the [Schema validation](/uilib/extensions/forms/Form/schema-validation/#custom-ajv-instance-and-keywords) section.',\n type: 'ajv',\n status: 'optional',\n },\n transformIn: {\n doc: \"Mutate the data context (internally as well) based on your criteria: `({ path, value, data, props, internal }) => 'new value'`. It will iterate on each data entry (/path).\",\n type: 'function',\n status: 'optional',\n },\n transformOut: {\n doc: \"Mutate the data before it enters onSubmit or onChange based on your criteria: `({ path, value, data, props, internal }) => 'new value'`. It will iterate on each data entry (/path).\",\n type: 'function',\n status: 'optional',\n },\n globalStatusId: {\n doc: 'If needed, you can define a custom [GlobalStatus](/uilib/components/global-status) id. Defaults to `main`.',\n type: 'string',\n status: 'optional',\n },\n required: {\n doc: 'Make all fields required.',\n type: 'boolean',\n status: 'optional',\n },\n disabled: {\n doc: 'Disable all fields.',\n type: 'boolean',\n status: 'optional',\n },\n locale: {\n doc: 'Locale (language) to use for all nested Eufemia components.',\n type: 'string',\n status: 'optional',\n },\n countryCode: {\n doc: 'Will change the country code for fields supporting `countryCode`. You can also set a path as the value, e.g. `/myCountryCodePath`.',\n type: ['ISO 3166-1 alpha-2', 'Path/JSON Pointer'],\n status: 'optional',\n },\n children: {\n doc: 'Contents.',\n type: 'React.Node',\n status: 'required',\n },\n}\n\nexport const ProviderEvents: PropertiesTableProps = {\n onChange: {\n doc: \"Will be called when a value of a field was changed by the user, with the data set (including the changed value) as argument. When an async function is provided, it will show an indicator on the current label during a field change. Related props: `minimumAsyncBehaviorTime` and `asyncSubmitTimeout`. You can return an error or an object with these keys `{ info: 'Info message', warning: 'Warning message', error: Error('My error') } as const` in addition to { success: 'saved' } indicate the field was saved. Will emit unvalidated by default and validated when an async function is provided (like `onSubmit`). The second parameter is an object containing the `filterData`, `resetForm` and `clearData` functions.\",\n type: 'function',\n status: 'optional',\n },\n onPathChange: {\n doc: 'Will be called when a value of a field was changed by the user, with the `path` (JSON Pointer) and new `value` as arguments. Can be an async function. Will emit unvalidated by default and validated when `onChange` is an async function.',\n type: 'function',\n status: 'optional',\n },\n onSubmit: {\n doc: \"Will be called (on validation success) when the user submit the form (i.e by clicking a [SubmitButton](/uilib/extensions/forms/Form/SubmitButton) component inside), with the data set as argument. When an async function is provided, it will show an indicator on the submit button during the form submission. All form elements will be disabled during the submit. The indicator will be shown for minimum 1 second. Related props: `minimumAsyncBehaviorTime` and `asyncSubmitTimeout`. You can return an error or an object with these keys `{ status: 'pending', info: 'Info message', warning: 'Warning message', error: Error('My error') } as const` to be shown in a [FormStatus](/uilib/components/form-status). Will only emit when every validation has passed. The second parameter is an object containing the `filterData`, `reduceToVisibleFields`, `transformData`, `resetForm` and `clearData` functions.\",\n type: 'function',\n status: 'optional',\n },\n onSubmitRequest: {\n doc: 'Will be called when the user tries to submit, but errors stop the data from being submitted. The first parameter is aa object containing the `getErrors` method, returning an array with field errors. Each error object contains the `path`, `error` and `props` of the field. You can use this to log the errors before the form is submitted.',\n type: 'function',\n status: 'optional',\n },\n onSubmitComplete: {\n doc: 'Will be called after onSubmit has finished and had not errors. It supports the same return values as `onSubmit` and will be merged together.',\n type: 'function',\n status: 'optional',\n },\n onClear: {\n doc: 'Will be called when the form is cleared via `Form.clearData` or via the `onSubmit` event (or `onCommit`) argument `{ clearData }`.',\n type: 'function',\n status: 'optional',\n },\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ProviderDocs.js","names":["ProviderProperties","defaultData","doc","type","status","data","id","schema","errorMessages","minimumAsyncBehaviorTime","asyncSubmitTimeout","scrollTopOnSubmit","sessionStorageId","ajvInstance","transformIn","transformOut","globalStatusId","required","disabled","locale","countryCode","children","ProviderEvents","onChange","onPathChange","onSubmit","onSubmitRequest","onSubmitComplete","onClear"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/ProviderDocs.ts"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const ProviderProperties: PropertiesTableProps = {\n defaultData: {\n doc: 'Default source data, only used if no other source is available, and not leading to updates if changed after mount.',\n type: 'object',\n status: 'optional',\n },\n data: {\n doc: 'Dynamic source data used as both initial data, and updates internal data if changed after mount.',\n type: 'object',\n status: 'optional',\n },\n id: {\n doc: 'Unique id for connecting Form.Handler and helper tools such as Form.useData.',\n type: ['string', 'Function', 'Object', 'React.Context'],\n status: 'optional',\n },\n schema: {\n doc: 'JSON Schema for validation of the data set.',\n type: 'object',\n status: 'optional',\n },\n errorMessages: {\n doc: 'Object containing error messages by either type of JSON Pointer path and type. The messages can be a React.ReactNode or a string.',\n type: 'object',\n status: 'optional',\n },\n minimumAsyncBehaviorTime: {\n doc: 'Minimum time to display the submit indicator. Default is 1s.',\n type: 'boolean',\n status: 'optional',\n },\n asyncSubmitTimeout: {\n doc: 'The maximum time to display the submit indicator before it changes back to normal. In case something went wrong during submission. Default is 30s.',\n type: 'boolean',\n status: 'optional',\n },\n scrollTopOnSubmit: {\n doc: 'True for the UI to scroll to the top of the page when data is submitted.',\n type: 'boolean',\n status: 'optional',\n },\n sessionStorageId: {\n doc: 'Key for saving active data to session storage and loading it on mount.',\n type: 'string',\n status: 'optional',\n },\n ajvInstance: {\n doc: 'Provide your own custom Ajv instance. More info in the [Schema validation](/uilib/extensions/forms/Form/schema-validation/#custom-ajv-instance-and-keywords) section.',\n type: 'ajv',\n status: 'optional',\n },\n transformIn: {\n doc: \"Mutate the data context (internally as well) based on your criteria: `({ path, value, data, props, internal }) => 'new value'`. It will iterate on each data entry (/path).\",\n type: 'function',\n status: 'optional',\n },\n transformOut: {\n doc: \"Mutate the data before it enters onSubmit or onChange based on your criteria: `({ path, value, data, props, internal }) => 'new value'`. It will iterate on each data entry (/path).\",\n type: 'function',\n status: 'optional',\n },\n globalStatusId: {\n doc: 'If needed, you can define a custom [GlobalStatus](/uilib/components/global-status) id. Defaults to `main`.',\n type: 'string',\n status: 'optional',\n },\n required: {\n doc: 'Make all fields required.',\n type: 'boolean',\n status: 'optional',\n },\n disabled: {\n doc: 'Disable all fields.',\n type: 'boolean',\n status: 'optional',\n },\n locale: {\n doc: 'Locale (language) to use for all nested Eufemia components.',\n type: 'string',\n status: 'optional',\n },\n countryCode: {\n doc: 'Will change the country code for fields supporting `countryCode`. You can also set a path as the value, e.g. `/myCountryCodePath`.',\n type: ['ISO 3166-1 alpha-2', 'Path/JSON Pointer'],\n status: 'optional',\n },\n children: {\n doc: 'Contents.',\n type: 'React.Node',\n status: 'required',\n },\n}\n\nexport const ProviderEvents: PropertiesTableProps = {\n onChange: {\n doc: \"Will be called when a value of a field was changed by the user, with the data set (including the changed value) as argument. When an async function is provided, it will show an indicator on the current label during a field change. Related props: `minimumAsyncBehaviorTime` and `asyncSubmitTimeout`. You can return an error or an object with these keys `{ info: 'Info message', warning: 'Warning message', error: Error('My error') } as const` in addition to { success: 'saved' } indicate the field was saved. Will emit unvalidated by default and validated when an async function is provided (like `onSubmit`). The second parameter is an object containing the `filterData`, `resetForm` and `clearData` functions.\",\n type: 'function',\n status: 'optional',\n },\n onPathChange: {\n doc: 'Will be called when a value of a field was changed by the user, with the `path` (JSON Pointer) and new `value` as arguments. Can be an async function. Will emit unvalidated by default and validated when `onChange` is an async function.',\n type: 'function',\n status: 'optional',\n },\n onSubmit: {\n doc: \"Will be called (on validation success) when the user submit the form (i.e by clicking a [SubmitButton](/uilib/extensions/forms/Form/SubmitButton) component inside), with the data set as argument. When an async function is provided, it will show an indicator on the submit button during the form submission. All form elements will be disabled during the submit. The indicator will be shown for minimum 1 second. Related props: `minimumAsyncBehaviorTime` and `asyncSubmitTimeout`. You can return an error or an object with these keys `{ status: 'pending', info: 'Info message', warning: 'Warning message', error: Error('My error') } as const` to be shown in a [FormStatus](/uilib/components/form-status). Will only emit when every validation has passed. The second parameter is an object containing the `filterData`, `reduceToVisibleFields`, `transformData`, `resetForm` and `clearData` functions.\",\n type: 'function',\n status: 'optional',\n },\n onSubmitRequest: {\n doc: 'Will be called when the user tries to submit, but errors stop the data from being submitted. The first parameter is aa object containing the `getErrors` method, returning an array with field errors. Each error object contains the `path`, `error` and `props` of the field. You can use this to log the errors before the form is submitted.',\n type: 'function',\n status: 'optional',\n },\n onSubmitComplete: {\n doc: 'Will be called after onSubmit has finished and had not errors. It supports the same return values as `onSubmit` and will be merged together.',\n type: 'function',\n status: 'optional',\n },\n onClear: {\n doc: 'Will be called when the form is cleared via `Form.clearData` or via the `onSubmit` event (or `onCommit`) argument `{ clearData }`.',\n type: 'function',\n status: 'optional',\n },\n}\n"],"mappings":"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","ignoreList":[]}
@@ -214,18 +214,15 @@ function NumberComponent(props) {
214
214
  step: showStepControls ? step : undefined,
215
215
  placeholder,
216
216
  value,
217
- align: showStepControls ? 'center' : align
218
- }, maskProps), {}, {
217
+ align: showStepControls ? 'center' : align,
219
218
  onKeyDown: onKeyDownHandler,
220
219
  onFocus: handleFocus,
221
220
  onBlur: handleBlur,
222
221
  onChange: handleChange,
223
- disabled
224
- }, htmlAttributes), {}, {
222
+ disabled,
225
223
  status: hasError ? 'error' : undefined,
226
224
  stretch: Boolean(width)
227
- });
228
- Object.assign(inputProps, ariaParams);
225
+ }, maskProps), htmlAttributes), ariaParams);
229
226
  if (showStepControls) {
230
227
  return React.createElement(FieldBlock, _extends({}, fieldBlockProps, {
231
228
  asFieldset: false
@@ -1 +1 @@
1
- {"version":3,"file":"Number.js","names":["React","useContext","useMemo","useCallback","useEffect","useRef","InputMasked","Button","SharedContext","FieldBlockContext","classnames","FieldBlock","useFieldProps","pickSpacingProps","clamp","DataContext","defaultMinimum","Number","MIN_SAFE_INTEGER","defaultMaximum","MAX_SAFE_INTEGER","NumberComponent","props","_props$width","_props$innerRef","_dataContext$props2","_sharedContext$transl","_sharedContext$transl2","dataContext","fieldBlockContext","sharedContext","currency","currencyDisplay","percent","mask","step","decimalLimit","allowNegative","disallowLeadingZeroes","prefix","prefixProp","suffix","suffixProp","showStepControls","schema","_props$schema","_props$minimum","_props$maximum","type","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","toInput","external","undefined","fromInput","value","numberValue","emptyValue","ref","preparedProps","_objectSpread","valueType","width","composition","innerRef","id","name","className","inputClassName","autoComplete","placeholder","startWith","disabled","htmlAttributes","hasError","size","align","handleFocus","handleBlur","handleChange","setDisplayValue","_innerRef$current","current","handleSubmit","onKeyDownHandler","e","_dataContext$props","event","isolate","key","_event$preventDefault","preventDefault","call","persist","fieldBlockProps","forId","contentClassName","contentWidth","increaseClickHandler","increaseProps","variant","icon","tabIndex","onClick","title","translation","Slider","addTitle","replace","String","decreaseClickHandler","decreaseProps","subtractTitle","maskProps","mask_options","as_currency","currency_mask","as_percent","as_number","number_mask","ariaParams","role","inputProps","inner_ref","onKeyDown","onFocus","onBlur","onChange","status","stretch","Boolean","Object","assign","createElement","_extends","asFieldset","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/Number/Number.tsx"],"sourcesContent":["import React, {\n useContext,\n useMemo,\n useCallback,\n useEffect,\n useRef,\n} from 'react'\nimport { InputMasked, Button } from '../../../../components'\nimport { InputMaskedProps } from '../../../../components/InputMasked'\nimport type {\n InputAlign,\n InputProps,\n InputSize,\n} from '../../../../components/Input'\nimport SharedContext from '../../../../shared/Context'\nimport FieldBlockContext from '../../FieldBlock/FieldBlockContext'\nimport classnames from 'classnames'\nimport FieldBlock, {\n Props as FieldBlockProps,\n FieldBlockWidth,\n} from '../../FieldBlock'\nimport { useFieldProps } from '../../hooks'\nimport { FieldProps, AllJSONSchemaVersions } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport { ButtonProps, ButtonSize } from '../../../../components/Button'\nimport { clamp } from '../../../../components/slider/SliderHelpers'\nimport DataContext from '../../DataContext/Context'\n\nexport type Props = FieldProps<number, undefined | number> & {\n innerRef?: React.RefObject<HTMLInputElement>\n inputClassName?: string\n currency?: InputMaskedProps['as_currency']\n currencyDisplay?: 'code' | 'symbol' | 'narrowSymbol' | 'name'\n percent?: InputMaskedProps['as_percent']\n mask?: InputMaskedProps['mask']\n step?: number\n startWith?: number\n // Formatting\n decimalLimit?: number\n allowNegative?: boolean\n disallowLeadingZeroes?: boolean\n prefix?: string | ((value: number) => string)\n suffix?: string | ((value: number) => string)\n // Validation\n minimum?: number // aka greater than or equal to\n maximum?: number // aka less than or equal to\n exclusiveMinimum?: number // aka greater than\n exclusiveMaximum?: number // aka less than\n multipleOf?: number\n // Styling\n size?: InputSize\n width?: FieldBlockWidth\n align?: InputAlign\n showStepControls?: boolean\n}\n\nconst defaultMinimum = Number.MIN_SAFE_INTEGER\nconst defaultMaximum = Number.MAX_SAFE_INTEGER\n\nfunction NumberComponent(props: Props) {\n const dataContext = useContext(DataContext)\n const fieldBlockContext = useContext(FieldBlockContext)\n const sharedContext = useContext(SharedContext)\n\n const {\n currency,\n currencyDisplay,\n percent,\n mask,\n step = 1,\n decimalLimit = 12,\n allowNegative = true,\n disallowLeadingZeroes = false,\n prefix: prefixProp,\n suffix: suffixProp,\n showStepControls,\n } = props\n\n const schema = useMemo<AllJSONSchemaVersions>(\n () =>\n props.schema ?? {\n type: 'number',\n minimum: props.minimum ?? defaultMinimum,\n maximum: props.maximum ?? defaultMaximum,\n exclusiveMinimum: props.exclusiveMinimum,\n exclusiveMaximum: props.exclusiveMaximum,\n multipleOf: props.multipleOf,\n },\n [\n props.schema,\n props.minimum,\n props.maximum,\n props.exclusiveMinimum,\n props.exclusiveMaximum,\n props.multipleOf,\n ]\n )\n\n const toInput = useCallback((external: number | undefined) => {\n if (external === undefined) {\n return null\n }\n return external\n }, [])\n const fromInput = useCallback(\n ({ value, numberValue }: { value: string; numberValue: number }) => {\n if (value === '') {\n return props.emptyValue\n }\n return numberValue\n },\n [props.emptyValue]\n )\n\n const ref = useRef<HTMLInputElement>()\n const preparedProps: Props = {\n valueType: 'number',\n ...props,\n schema,\n toInput,\n fromInput,\n width:\n props.width ??\n (fieldBlockContext?.composition ? 'stretch' : 'medium'),\n innerRef: props.innerRef ?? ref,\n }\n\n const {\n id,\n name,\n className,\n innerRef,\n inputClassName,\n autoComplete,\n placeholder,\n value,\n startWith = null,\n minimum = defaultMinimum,\n maximum = defaultMaximum,\n disabled,\n htmlAttributes,\n hasError,\n size,\n width,\n align,\n handleFocus,\n handleBlur,\n handleChange,\n setDisplayValue,\n } = useFieldProps(preparedProps)\n\n useEffect(() => {\n setDisplayValue(innerRef.current?.value)\n }, [innerRef, setDisplayValue, value])\n\n const { handleSubmit } = dataContext ?? {}\n const onKeyDownHandler = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n const { event } = e as unknown as {\n event: React.KeyboardEvent<HTMLInputElement>\n }\n if (dataContext?.props?.isolate && event.key === 'Enter') {\n handleSubmit() // So we commit the data to the outer context\n event.preventDefault?.() // And prevent the default form submit\n }\n\n if (!showStepControls) {\n return\n }\n\n let numberValue = null\n\n switch (event.key) {\n case 'ArrowUp':\n numberValue = clamp(\n (value ?? startWith) + step,\n minimum,\n maximum\n )\n break\n case 'ArrowDown':\n numberValue = clamp(\n (value ?? startWith) - step,\n minimum,\n maximum\n )\n break\n }\n\n if (numberValue !== null) {\n event.persist()\n event.preventDefault()\n handleChange({ numberValue })\n }\n },\n [\n dataContext?.props?.isolate,\n handleChange,\n handleSubmit,\n maximum,\n minimum,\n showStepControls,\n startWith,\n step,\n value,\n ]\n )\n\n const fieldBlockProps: FieldBlockProps = {\n forId: id,\n className: classnames(\n 'dnb-forms-field-number',\n 'dnb-input__border--tokens', // Used by \"dnb-input__border\"\n className\n ),\n contentClassName: classnames(\n 'dnb-forms-field-number__contents',\n showStepControls && 'dnb-forms-field-number__contents--has-controls',\n hasError && 'dnb-input__status--error', // Also used by \"dnb-input__border\"\n disabled && 'dnb-input--disabled' // Also used by \"dnb-input__border\"\n ),\n width:\n (width === 'stretch' || fieldBlockContext?.composition) &&\n !showStepControls\n ? width\n : undefined,\n contentWidth: width !== false ? width : undefined,\n ...pickSpacingProps(props),\n }\n\n const increaseClickHandler = useCallback(() => {\n handleChange({\n numberValue: clamp((value ?? startWith) + step, minimum, maximum),\n })\n }, [handleChange, maximum, minimum, startWith, step, value])\n\n const increaseProps: ButtonProps = showStepControls && {\n 'aria-hidden': true,\n className: 'dnb-button--control-after',\n variant: 'secondary',\n icon: 'add',\n size: (size || 'small') as ButtonSize,\n tabIndex: -1,\n disabled: disabled || value >= maximum,\n onClick: increaseClickHandler,\n title: sharedContext?.translation.Slider.addTitle?.replace(\n '%s',\n String(value + step)\n ),\n }\n\n const decreaseClickHandler = useCallback(() => {\n handleChange({\n numberValue: clamp((value ?? startWith) - step, minimum, maximum),\n })\n }, [handleChange, maximum, minimum, startWith, step, value])\n\n const decreaseProps: ButtonProps = showStepControls && {\n ...increaseProps,\n className: 'dnb-button--control-before',\n icon: 'subtract',\n size: (size || 'small') as ButtonSize,\n disabled: disabled || value <= minimum,\n onClick: decreaseClickHandler,\n title: sharedContext?.translation.Slider.subtractTitle?.replace(\n '%s',\n String(value - step)\n ),\n }\n\n const prefix =\n typeof prefixProp === 'function' ? prefixProp(value) : prefixProp\n const suffix =\n typeof suffixProp === 'function' ? suffixProp(value) : suffixProp\n\n const maskProps: Partial<InputMaskedProps> = useMemo(() => {\n const mask_options = {\n prefix,\n suffix,\n decimalLimit,\n allowNegative,\n disallowLeadingZeroes,\n }\n\n if (currency) {\n return {\n as_currency: currency,\n mask_options,\n currency_mask: {\n currencyDisplay,\n decimalLimit,\n },\n }\n }\n\n if (percent) {\n return {\n as_percent: percent,\n mask_options,\n }\n }\n\n // Custom mask based on props\n return {\n as_number: true,\n mask,\n number_mask: {\n ...mask_options,\n },\n }\n }, [\n currency,\n currencyDisplay,\n decimalLimit,\n mask,\n percent,\n prefix,\n suffix,\n allowNegative,\n disallowLeadingZeroes,\n ])\n\n const ariaParams = showStepControls && {\n role: 'spinbutton',\n 'aria-valuemin': String(minimum),\n 'aria-valuemax': String(maximum),\n 'aria-valuenow': String(value), // without it, VO will read an invalid value\n 'aria-valuetext': String(value), // without it, VO will read %\n }\n\n const inputProps: InputProps = {\n id,\n name,\n inner_ref: innerRef,\n autoComplete,\n className: classnames(\n 'dnb-forms-field-number__input',\n `dnb-input--${size}`,\n inputClassName\n ),\n step: showStepControls ? step : undefined,\n placeholder,\n value,\n align: showStepControls ? 'center' : align,\n ...maskProps,\n onKeyDown: onKeyDownHandler,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n disabled,\n ...htmlAttributes,\n status: hasError ? 'error' : undefined,\n stretch: Boolean(width),\n }\n Object.assign(inputProps, ariaParams)\n\n if (showStepControls) {\n return (\n <FieldBlock {...fieldBlockProps} asFieldset={false}>\n <span className=\"dnb-input__border dnb-input__border--root\">\n {<Button {...decreaseProps} />}\n <InputMasked {...inputProps} />\n {<Button {...increaseProps} />}\n </span>\n </FieldBlock>\n )\n }\n\n return (\n <FieldBlock {...fieldBlockProps} asFieldset={false}>\n <InputMasked {...inputProps} />\n </FieldBlock>\n )\n}\n\nNumberComponent._supportsSpacingProps = true\nexport default NumberComponent\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Number.js","names":["React","useContext","useMemo","useCallback","useEffect","useRef","InputMasked","Button","SharedContext","FieldBlockContext","classnames","FieldBlock","useFieldProps","pickSpacingProps","clamp","DataContext","defaultMinimum","Number","MIN_SAFE_INTEGER","defaultMaximum","MAX_SAFE_INTEGER","NumberComponent","props","_props$width","_props$innerRef","_dataContext$props2","_sharedContext$transl","_sharedContext$transl2","dataContext","fieldBlockContext","sharedContext","currency","currencyDisplay","percent","mask","step","decimalLimit","allowNegative","disallowLeadingZeroes","prefix","prefixProp","suffix","suffixProp","showStepControls","schema","_props$schema","_props$minimum","_props$maximum","type","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","toInput","external","undefined","fromInput","value","numberValue","emptyValue","ref","preparedProps","_objectSpread","valueType","width","composition","innerRef","id","name","className","inputClassName","autoComplete","placeholder","startWith","disabled","htmlAttributes","hasError","size","align","handleFocus","handleBlur","handleChange","setDisplayValue","_innerRef$current","current","handleSubmit","onKeyDownHandler","e","_dataContext$props","event","isolate","key","_event$preventDefault","preventDefault","call","persist","fieldBlockProps","forId","contentClassName","contentWidth","increaseClickHandler","increaseProps","variant","icon","tabIndex","onClick","title","translation","Slider","addTitle","replace","String","decreaseClickHandler","decreaseProps","subtractTitle","maskProps","mask_options","as_currency","currency_mask","as_percent","as_number","number_mask","ariaParams","role","inputProps","inner_ref","onKeyDown","onFocus","onBlur","onChange","status","stretch","Boolean","createElement","_extends","asFieldset","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/Number/Number.tsx"],"sourcesContent":["import React, {\n useContext,\n useMemo,\n useCallback,\n useEffect,\n useRef,\n} from 'react'\nimport { InputMasked, Button } from '../../../../components'\nimport { InputMaskedProps } from '../../../../components/InputMasked'\nimport type {\n InputAlign,\n InputProps,\n InputSize,\n} from '../../../../components/Input'\nimport SharedContext from '../../../../shared/Context'\nimport FieldBlockContext from '../../FieldBlock/FieldBlockContext'\nimport classnames from 'classnames'\nimport FieldBlock, {\n Props as FieldBlockProps,\n FieldBlockWidth,\n} from '../../FieldBlock'\nimport { useFieldProps } from '../../hooks'\nimport { FieldProps, AllJSONSchemaVersions } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport { ButtonProps, ButtonSize } from '../../../../components/Button'\nimport { clamp } from '../../../../components/slider/SliderHelpers'\nimport DataContext from '../../DataContext/Context'\n\nexport type Props = FieldProps<number, undefined | number> & {\n innerRef?: React.RefObject<HTMLInputElement>\n inputClassName?: string\n currency?: InputMaskedProps['as_currency']\n currencyDisplay?: 'code' | 'symbol' | 'narrowSymbol' | 'name'\n percent?: InputMaskedProps['as_percent']\n mask?: InputMaskedProps['mask']\n step?: number\n startWith?: number\n // Formatting\n decimalLimit?: number\n allowNegative?: boolean\n disallowLeadingZeroes?: boolean\n prefix?: string | ((value: number) => string)\n suffix?: string | ((value: number) => string)\n // Validation\n minimum?: number // aka greater than or equal to\n maximum?: number // aka less than or equal to\n exclusiveMinimum?: number // aka greater than\n exclusiveMaximum?: number // aka less than\n multipleOf?: number\n // Styling\n size?: InputSize\n width?: FieldBlockWidth\n align?: InputAlign\n showStepControls?: boolean\n}\n\nconst defaultMinimum = Number.MIN_SAFE_INTEGER\nconst defaultMaximum = Number.MAX_SAFE_INTEGER\n\nfunction NumberComponent(props: Props) {\n const dataContext = useContext(DataContext)\n const fieldBlockContext = useContext(FieldBlockContext)\n const sharedContext = useContext(SharedContext)\n\n const {\n currency,\n currencyDisplay,\n percent,\n mask,\n step = 1,\n decimalLimit = 12,\n allowNegative = true,\n disallowLeadingZeroes = false,\n prefix: prefixProp,\n suffix: suffixProp,\n showStepControls,\n } = props\n\n const schema = useMemo<AllJSONSchemaVersions>(\n () =>\n props.schema ?? {\n type: 'number',\n minimum: props.minimum ?? defaultMinimum,\n maximum: props.maximum ?? defaultMaximum,\n exclusiveMinimum: props.exclusiveMinimum,\n exclusiveMaximum: props.exclusiveMaximum,\n multipleOf: props.multipleOf,\n },\n [\n props.schema,\n props.minimum,\n props.maximum,\n props.exclusiveMinimum,\n props.exclusiveMaximum,\n props.multipleOf,\n ]\n )\n\n const toInput = useCallback((external: number | undefined) => {\n if (external === undefined) {\n return null\n }\n return external\n }, [])\n const fromInput = useCallback(\n ({ value, numberValue }: { value: string; numberValue: number }) => {\n if (value === '') {\n return props.emptyValue\n }\n return numberValue\n },\n [props.emptyValue]\n )\n\n const ref = useRef<HTMLInputElement>()\n const preparedProps: Props = {\n valueType: 'number',\n ...props,\n schema,\n toInput,\n fromInput,\n width:\n props.width ??\n (fieldBlockContext?.composition ? 'stretch' : 'medium'),\n innerRef: props.innerRef ?? ref,\n }\n\n const {\n id,\n name,\n className,\n innerRef,\n inputClassName,\n autoComplete,\n placeholder,\n value,\n startWith = null,\n minimum = defaultMinimum,\n maximum = defaultMaximum,\n disabled,\n htmlAttributes,\n hasError,\n size,\n width,\n align,\n handleFocus,\n handleBlur,\n handleChange,\n setDisplayValue,\n } = useFieldProps(preparedProps)\n\n useEffect(() => {\n setDisplayValue(innerRef.current?.value)\n }, [innerRef, setDisplayValue, value])\n\n const { handleSubmit } = dataContext ?? {}\n const onKeyDownHandler = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n const { event } = e as unknown as {\n event: React.KeyboardEvent<HTMLInputElement>\n }\n if (dataContext?.props?.isolate && event.key === 'Enter') {\n handleSubmit() // So we commit the data to the outer context\n event.preventDefault?.() // And prevent the default form submit\n }\n\n if (!showStepControls) {\n return\n }\n\n let numberValue = null\n\n switch (event.key) {\n case 'ArrowUp':\n numberValue = clamp(\n (value ?? startWith) + step,\n minimum,\n maximum\n )\n break\n case 'ArrowDown':\n numberValue = clamp(\n (value ?? startWith) - step,\n minimum,\n maximum\n )\n break\n }\n\n if (numberValue !== null) {\n event.persist()\n event.preventDefault()\n handleChange({ numberValue })\n }\n },\n [\n dataContext?.props?.isolate,\n handleChange,\n handleSubmit,\n maximum,\n minimum,\n showStepControls,\n startWith,\n step,\n value,\n ]\n )\n\n const fieldBlockProps: FieldBlockProps = {\n forId: id,\n className: classnames(\n 'dnb-forms-field-number',\n 'dnb-input__border--tokens', // Used by \"dnb-input__border\"\n className\n ),\n contentClassName: classnames(\n 'dnb-forms-field-number__contents',\n showStepControls && 'dnb-forms-field-number__contents--has-controls',\n hasError && 'dnb-input__status--error', // Also used by \"dnb-input__border\"\n disabled && 'dnb-input--disabled' // Also used by \"dnb-input__border\"\n ),\n width:\n (width === 'stretch' || fieldBlockContext?.composition) &&\n !showStepControls\n ? width\n : undefined,\n contentWidth: width !== false ? width : undefined,\n ...pickSpacingProps(props),\n }\n\n const increaseClickHandler = useCallback(() => {\n handleChange({\n numberValue: clamp((value ?? startWith) + step, minimum, maximum),\n })\n }, [handleChange, maximum, minimum, startWith, step, value])\n\n const increaseProps: ButtonProps = showStepControls && {\n 'aria-hidden': true,\n className: 'dnb-button--control-after',\n variant: 'secondary',\n icon: 'add',\n size: (size || 'small') as ButtonSize,\n tabIndex: -1,\n disabled: disabled || value >= maximum,\n onClick: increaseClickHandler,\n title: sharedContext?.translation.Slider.addTitle?.replace(\n '%s',\n String(value + step)\n ),\n }\n\n const decreaseClickHandler = useCallback(() => {\n handleChange({\n numberValue: clamp((value ?? startWith) - step, minimum, maximum),\n })\n }, [handleChange, maximum, minimum, startWith, step, value])\n\n const decreaseProps: ButtonProps = showStepControls && {\n ...increaseProps,\n className: 'dnb-button--control-before',\n icon: 'subtract',\n size: (size || 'small') as ButtonSize,\n disabled: disabled || value <= minimum,\n onClick: decreaseClickHandler,\n title: sharedContext?.translation.Slider.subtractTitle?.replace(\n '%s',\n String(value - step)\n ),\n }\n\n const prefix =\n typeof prefixProp === 'function' ? prefixProp(value) : prefixProp\n const suffix =\n typeof suffixProp === 'function' ? suffixProp(value) : suffixProp\n\n const maskProps: Partial<InputMaskedProps> = useMemo(() => {\n const mask_options = {\n prefix,\n suffix,\n decimalLimit,\n allowNegative,\n disallowLeadingZeroes,\n }\n\n if (currency) {\n return {\n as_currency: currency,\n mask_options,\n currency_mask: {\n currencyDisplay,\n decimalLimit,\n },\n }\n }\n\n if (percent) {\n return {\n as_percent: percent,\n mask_options,\n }\n }\n\n // Custom mask based on props\n return {\n as_number: true,\n mask,\n number_mask: {\n ...mask_options,\n },\n }\n }, [\n currency,\n currencyDisplay,\n decimalLimit,\n mask,\n percent,\n prefix,\n suffix,\n allowNegative,\n disallowLeadingZeroes,\n ])\n\n const ariaParams = showStepControls && {\n role: 'spinbutton',\n 'aria-valuemin': String(minimum),\n 'aria-valuemax': String(maximum),\n 'aria-valuenow': String(value), // without it, VO will read an invalid value\n 'aria-valuetext': String(value), // without it, VO will read %\n }\n\n const inputProps: InputProps = {\n id,\n name,\n inner_ref: innerRef,\n autoComplete,\n className: classnames(\n 'dnb-forms-field-number__input',\n `dnb-input--${size}`,\n inputClassName\n ),\n step: showStepControls ? step : undefined,\n placeholder,\n value,\n align: showStepControls ? 'center' : align,\n onKeyDown: onKeyDownHandler,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n disabled,\n status: hasError ? 'error' : undefined,\n stretch: Boolean(width),\n ...maskProps,\n ...htmlAttributes,\n ...(ariaParams as any),\n }\n\n if (showStepControls) {\n return (\n <FieldBlock {...fieldBlockProps} asFieldset={false}>\n <span className=\"dnb-input__border dnb-input__border--root\">\n {<Button {...decreaseProps} />}\n <InputMasked {...inputProps} />\n {<Button {...increaseProps} />}\n </span>\n </FieldBlock>\n )\n }\n\n return (\n <FieldBlock {...fieldBlockProps} asFieldset={false}>\n <InputMasked {...inputProps} />\n </FieldBlock>\n )\n}\n\nNumberComponent._supportsSpacingProps = true\nexport default NumberComponent\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,3 @@
1
1
  import { PropertiesTableProps } from '../../../../shared/types';
2
2
  export declare const PasswordProperties: PropertiesTableProps;
3
+ export declare const PasswordEvents: PropertiesTableProps;
@@ -11,7 +11,7 @@ export const PasswordProperties = {
11
11
  },
12
12
  innerRef: {
13
13
  doc: '`ElementRef` passed on to the password `input` element.',
14
- type: 'object',
14
+ type: 'React.RefObject',
15
15
  status: 'optional'
16
16
  },
17
17
  '[Space](/uilib/layout/space/properties)': {
@@ -20,4 +20,16 @@ export const PasswordProperties = {
20
20
  status: 'optional'
21
21
  }
22
22
  };
23
+ export const PasswordEvents = {
24
+ onShowPassword: {
25
+ doc: 'Will be called when the user toggles the password to be visible.',
26
+ type: 'function',
27
+ status: 'optional'
28
+ },
29
+ onHidePassword: {
30
+ doc: 'Will be called when the user toggles the password to be hidden.',
31
+ type: 'function',
32
+ status: 'optional'
33
+ }
34
+ };
23
35
  //# sourceMappingURL=PasswordDocs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordDocs.js","names":["PasswordProperties","pattern","doc","type","status","size","innerRef"],"sources":["../../../../../../src/extensions/forms/Field/Password/PasswordDocs.tsx"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const PasswordProperties: PropertiesTableProps = {\n pattern: {\n doc: 'Validation based on regex pattern for the number field e.g. `pattern=\"w{8}d{4}\"`.',\n type: 'string',\n status: 'optional',\n },\n size: {\n doc: 'The sizes you can choose is small (1.5rem), default (2rem), medium (2.5rem) and large (3rem) are supported component sizes. Defaults to default / null. Also, if you define a number like size=\"2\" then it will be forwarded as the input element attribute. Consider rather setting field sizes with [Form.Appearance](/uilib/extensions/forms/Form/Appearance/).',\n type: ['string', 'number'],\n status: 'optional',\n },\n innerRef: {\n doc: '`ElementRef` passed on to the password `input` element.',\n type: 'object',\n status: 'optional',\n },\n '[Space](/uilib/layout/space/properties)': {\n doc: 'Spacing properties like `top` or `bottom` are supported.',\n type: ['string', 'object'],\n status: 'optional',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,kBAAwC,GAAG;EACtDC,OAAO,EAAE;IACPC,GAAG,EAAE,mFAAmF;IACxFC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJH,GAAG,EAAE,oWAAoW;IACzWC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC1BC,MAAM,EAAE;EACV,CAAC;EACDE,QAAQ,EAAE;IACRJ,GAAG,EAAE,yDAAyD;IAC9DC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;EACV,CAAC;EACD,yCAAyC,EAAE;IACzCF,GAAG,EAAE,0DAA0D;IAC/DC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC1BC,MAAM,EAAE;EACV;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"PasswordDocs.js","names":["PasswordProperties","pattern","doc","type","status","size","innerRef","PasswordEvents","onShowPassword","onHidePassword"],"sources":["../../../../../../src/extensions/forms/Field/Password/PasswordDocs.tsx"],"sourcesContent":["import { PropertiesTableProps } from '../../../../shared/types'\n\nexport const PasswordProperties: PropertiesTableProps = {\n pattern: {\n doc: 'Validation based on regex pattern for the number field e.g. `pattern=\"w{8}d{4}\"`.',\n type: 'string',\n status: 'optional',\n },\n size: {\n doc: 'The sizes you can choose is small (1.5rem), default (2rem), medium (2.5rem) and large (3rem) are supported component sizes. Defaults to default / null. Also, if you define a number like size=\"2\" then it will be forwarded as the input element attribute. Consider rather setting field sizes with [Form.Appearance](/uilib/extensions/forms/Form/Appearance/).',\n type: ['string', 'number'],\n status: 'optional',\n },\n innerRef: {\n doc: '`ElementRef` passed on to the password `input` element.',\n type: 'React.RefObject',\n status: 'optional',\n },\n '[Space](/uilib/layout/space/properties)': {\n doc: 'Spacing properties like `top` or `bottom` are supported.',\n type: ['string', 'object'],\n status: 'optional',\n },\n}\n\nexport const PasswordEvents: PropertiesTableProps = {\n onShowPassword: {\n doc: 'Will be called when the user toggles the password to be visible.',\n type: 'function',\n status: 'optional',\n },\n onHidePassword: {\n doc: 'Will be called when the user toggles the password to be hidden.',\n type: 'function',\n status: 'optional',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,kBAAwC,GAAG;EACtDC,OAAO,EAAE;IACPC,GAAG,EAAE,mFAAmF;IACxFC,IAAI,EAAE,QAAQ;IACdC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJH,GAAG,EAAE,oWAAoW;IACzWC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC1BC,MAAM,EAAE;EACV,CAAC;EACDE,QAAQ,EAAE;IACRJ,GAAG,EAAE,yDAAyD;IAC9DC,IAAI,EAAE,iBAAiB;IACvBC,MAAM,EAAE;EACV,CAAC;EACD,yCAAyC,EAAE;IACzCF,GAAG,EAAE,0DAA0D;IAC/DC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC1BC,MAAM,EAAE;EACV;AACF,CAAC;AAED,OAAO,MAAMG,cAAoC,GAAG;EAClDC,cAAc,EAAE;IACdN,GAAG,EAAE,kEAAkE;IACvEC,IAAI,EAAE,UAAU;IAChBC,MAAM,EAAE;EACV,CAAC;EACDK,cAAc,EAAE;IACdP,GAAG,EAAE,iEAAiE;IACtEC,IAAI,EAAE,UAAU;IAChBC,MAAM,EAAE;EACV;AACF,CAAC","ignoreList":[]}
@@ -4,10 +4,12 @@ import { type CountryType } from '../../constants/countries';
4
4
  import { Props as StringFieldProps } from '../String';
5
5
  import { FieldPropsWithExtraValue } from '../../types';
6
6
  import { CountryFilterSet } from '../SelectCountry';
7
- export type Props = Omit<FieldPropsWithExtraValue<string, {
8
- country: string;
9
- phone: string;
10
- }, undefined | string>, 'layout' | 'layoutOptions'> & {
7
+ export type AdditionalArgs = {
8
+ phoneNumber: string;
9
+ countryCode: string;
10
+ iso: string;
11
+ };
12
+ export type Props = Omit<FieldPropsWithExtraValue<string, AdditionalArgs, undefined | string>, 'layout' | 'layoutOptions'> & {
11
13
  countryCodeFieldClassName?: string;
12
14
  numberFieldClassName?: string;
13
15
  countryCodePlaceholder?: string;
@@ -27,10 +27,12 @@ function PhoneNumber(props) {
27
27
  } = useTranslation().PhoneNumber;
28
28
  const lang = (_sharedContext$locale = sharedContext.locale) === null || _sharedContext$locale === void 0 ? void 0 : _sharedContext$locale.split('-')[0];
29
29
  const countryCodeRef = useRef(props === null || props === void 0 ? void 0 : props.emptyValue);
30
+ const prevCountryCodeRef = useRef(countryCodeRef.current);
30
31
  const numberRef = useRef(props === null || props === void 0 ? void 0 : props.emptyValue);
31
32
  const dataRef = useRef(null);
32
33
  const langRef = useRef(lang);
33
34
  const wasFilled = useRef(false);
35
+ const currentCountryRef = useRef();
34
36
  const errorMessages = useMemo(() => _objectSpread({
35
37
  'Field.errorRequired': errorRequired,
36
38
  'Field.errorPattern': errorRequired
@@ -141,29 +143,34 @@ function PhoneNumber(props) {
141
143
  makeObject
142
144
  });
143
145
  }, [lang, filter, ccFilter]);
144
- const getEventValues = useCallback(({
146
+ const prepareEventValues = useCallback(({
145
147
  countryCode = countryCodeRef.current || emptyValue,
146
148
  phoneNumber = numberRef.current || emptyValue
147
149
  } = {}) => {
150
+ var _currentCountryRef$cu;
151
+ if (!currentCountryRef.current) {
152
+ const cdcVal = countryCode === null || countryCode === void 0 ? void 0 : countryCode.replace(/^\+/, '');
153
+ const item = dataRef.current.find(item => {
154
+ var _item$country;
155
+ const cdc = item === null || item === void 0 ? void 0 : (_item$country = item.country) === null || _item$country === void 0 ? void 0 : _item$country.cdc;
156
+ return cdc === cdcVal;
157
+ });
158
+ currentCountryRef.current = item === null || item === void 0 ? void 0 : item.country;
159
+ }
148
160
  return _objectSpread(_objectSpread({}, !omitCountryCodeField ? {
149
161
  countryCode
150
162
  } : {}), {}, {
151
- phoneNumber
152
- });
153
- }, [omitCountryCodeField, emptyValue]);
154
- const callOnChange = useCallback(({
155
- countryCode = undefined,
156
- phoneNumber = undefined
157
- }) => {
158
- const eventValues = getEventValues({
159
- countryCode,
160
- phoneNumber
163
+ phoneNumber,
164
+ iso: (_currentCountryRef$cu = currentCountryRef.current) === null || _currentCountryRef$cu === void 0 ? void 0 : _currentCountryRef$cu.iso
161
165
  });
166
+ }, [emptyValue, omitCountryCodeField]);
167
+ const callOnChange = useCallback(data => {
168
+ const eventValues = prepareEventValues(data);
162
169
  handleChange(joinValue([eventValues.countryCode, eventValues.phoneNumber]), eventValues);
163
- }, [getEventValues, handleChange]);
170
+ }, [prepareEventValues, handleChange]);
164
171
  const callOnBlurOrFocus = useCallback(hasFocus => {
165
- setHasFocus(hasFocus, undefined, getEventValues());
166
- }, [setHasFocus, getEventValues]);
172
+ setHasFocus(hasFocus, undefined, prepareEventValues());
173
+ }, [prepareEventValues, setHasFocus]);
167
174
  useMemo(() => {
168
175
  const [countryCode, phoneNumber] = splitValue(props.value || value);
169
176
  numberRef.current = phoneNumber;
@@ -175,12 +182,12 @@ function PhoneNumber(props) {
175
182
  updateCurrentDataSet();
176
183
  }
177
184
  }, [value, props.value, lang, updateCurrentDataSet]);
178
- const prevCountryCodeRef = useRef(countryCodeRef.current);
179
185
  const handleCountryCodeChange = useCallback(({
180
186
  data
181
187
  }) => {
182
188
  var _data$selectedKey;
183
189
  const countryCode = countryCodeRef.current = (data === null || data === void 0 ? void 0 : (_data$selectedKey = data.selectedKey) === null || _data$selectedKey === void 0 ? void 0 : _data$selectedKey.trim()) || emptyValue;
190
+ currentCountryRef.current = data === null || data === void 0 ? void 0 : data.country;
184
191
  callOnChange({
185
192
  countryCode
186
193
  });
@@ -302,7 +309,8 @@ function makeObject(country, lang) {
302
309
  return {
303
310
  selectedKey: formatCountryCode(country.cdc),
304
311
  selected_value: `${country.iso} (${formatCountryCode(country.cdc)})`,
305
- content: `${formatCountryCode(country.cdc)} ${(_country$i18n$lang = country.i18n[lang]) !== null && _country$i18n$lang !== void 0 ? _country$i18n$lang : country.i18n.en}`
312
+ content: `${formatCountryCode(country.cdc)} ${(_country$i18n$lang = country.i18n[lang]) !== null && _country$i18n$lang !== void 0 ? _country$i18n$lang : country.i18n.en}`,
313
+ country
306
314
  };
307
315
  }
308
316
  function formatCountryCode(value) {