@inera/ids-react 8.1.0 → 9.0.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 (372) hide show
  1. package/components/accordion/accordion-base.d.ts +18 -0
  2. package/components/accordion/accordion-base.js +33 -0
  3. package/components/accordion/accordion.d.ts +5 -4
  4. package/components/accordion/accordion.js +16 -35
  5. package/components/alert/alert-base.d.ts +21 -0
  6. package/components/alert/alert-base.js +29 -0
  7. package/components/alert/alert.d.ts +3 -19
  8. package/components/alert/alert.js +8 -18
  9. package/components/alert/global-alert-base.d.ts +15 -0
  10. package/components/alert/global-alert-base.js +21 -0
  11. package/components/alert/global-alert.d.ts +7 -0
  12. package/components/alert/global-alert.js +19 -0
  13. package/components/badge/badge.js +2 -2
  14. package/components/breadcrumbs/breadcrumbs.js +2 -2
  15. package/components/{button-group → button}/button-group.js +2 -2
  16. package/components/button/button.js +3 -3
  17. package/components/card/card.js +3 -3
  18. package/components/carousel/carousel-item.d.ts +5 -4
  19. package/components/carousel/carousel-item.js +8 -6
  20. package/components/carousel/carousel.d.ts +4 -1
  21. package/components/carousel/carousel.js +24 -39
  22. package/components/{pagination/data-pagination → data-pagination}/data-pagination.d.ts +2 -6
  23. package/components/data-pagination/data-pagination.js +12 -0
  24. package/components/date-label/date-label.js +2 -2
  25. package/components/dialog/dialog-base.d.ts +21 -0
  26. package/components/dialog/dialog-base.js +29 -0
  27. package/components/dialog/dialog.d.ts +14 -17
  28. package/components/dialog/dialog.js +36 -36
  29. package/components/dropdown/dropdown-base.d.ts +18 -0
  30. package/components/dropdown/dropdown-base.js +42 -0
  31. package/components/dropdown/dropdown-content-button.d.ts +0 -1
  32. package/components/dropdown/dropdown-content-button.js +0 -1
  33. package/components/dropdown/dropdown-content-link.d.ts +2 -3
  34. package/components/dropdown/dropdown-content-link.js +3 -10
  35. package/components/dropdown/dropdown.d.ts +11 -13
  36. package/components/dropdown/dropdown.js +34 -53
  37. package/components/footer-1177/footer-1177.d.ts +6 -7
  38. package/components/footer-1177/footer-1177.js +8 -5
  39. package/components/footer-1177-admin/footer-1177-admin.d.ts +6 -7
  40. package/components/footer-1177-admin/footer-1177-admin.js +9 -6
  41. package/components/footer-1177-pro/footer-1177-pro.d.ts +6 -7
  42. package/components/footer-1177-pro/footer-1177-pro.js +9 -6
  43. package/components/footer-inera/footer-inera.d.ts +6 -7
  44. package/components/footer-inera/footer-inera.js +9 -6
  45. package/components/footer-inera-admin/footer-inera-admin.d.ts +6 -7
  46. package/components/footer-inera-admin/footer-inera-admin.js +9 -6
  47. package/components/form/check-button/check-button.d.ts +5 -6
  48. package/components/form/check-button/check-button.js +5 -10
  49. package/components/form/checkbox/checkbox-base.d.ts +19 -0
  50. package/components/form/checkbox/checkbox-base.js +29 -0
  51. package/components/form/checkbox/checkbox-group-base.d.ts +12 -0
  52. package/components/form/checkbox/checkbox-group-base.js +13 -0
  53. package/components/form/checkbox/checkbox-group.d.ts +4 -5
  54. package/components/form/checkbox/checkbox-group.js +26 -30
  55. package/components/form/checkbox/checkbox.d.ts +3 -3
  56. package/components/form/checkbox/checkbox.js +17 -40
  57. package/components/form/darkmode-toggle/darkmode-toggle.d.ts +11 -0
  58. package/components/form/darkmode-toggle/darkmode-toggle.js +13 -0
  59. package/components/form/datepicker/datepicker.d.ts +36 -0
  60. package/components/form/datepicker/datepicker.js +217 -0
  61. package/components/form/error-message/error-message.d.ts +1 -2
  62. package/components/form/error-message/error-message.js +2 -4
  63. package/components/form/form-hooks/useGroupValidity.d.ts +4 -1
  64. package/components/form/form-hooks/useGroupValidity.js +7 -2
  65. package/components/form/form-hooks/useInputValidity.d.ts +1 -1
  66. package/components/form/form-hooks/useInputValidity.js +9 -5
  67. package/components/form/input/input-base.d.ts +24 -0
  68. package/components/form/input/input-base.js +32 -0
  69. package/components/form/input/input.d.ts +3 -2
  70. package/components/form/input/input.js +8 -24
  71. package/components/form/radio/radio-base.d.ts +16 -0
  72. package/components/form/radio/radio-base.js +24 -0
  73. package/components/form/radio/radio-group-base.d.ts +13 -0
  74. package/components/form/radio/radio-group-base.js +10 -0
  75. package/components/form/radio/radio-group.d.ts +6 -5
  76. package/components/form/radio/radio-group.js +25 -19
  77. package/components/form/radio/radio.d.ts +9 -9
  78. package/components/form/radio/radio.js +7 -19
  79. package/components/form/radio-button/radio-button-group-base.d.ts +8 -0
  80. package/components/form/radio-button/radio-button-group-base.js +8 -0
  81. package/components/form/radio-button/radio-button-group.d.ts +4 -3
  82. package/components/form/radio-button/radio-button-group.js +18 -12
  83. package/components/form/radio-button/radio-button.d.ts +4 -5
  84. package/components/form/radio-button/radio-button.js +5 -10
  85. package/components/form/range/range-base.d.ts +18 -0
  86. package/components/form/range/range-base.js +16 -0
  87. package/components/form/range/range.d.ts +3 -6
  88. package/components/form/range/range.js +23 -23
  89. package/components/form/select/select-base.d.ts +19 -0
  90. package/components/form/select/select-base.js +24 -0
  91. package/components/form/select/select.d.ts +7 -7
  92. package/components/form/select/select.js +8 -18
  93. package/components/form/select-multiple/select-multiple-base.d.ts +27 -0
  94. package/components/form/select-multiple/select-multiple-base.js +27 -0
  95. package/components/form/select-multiple/select-multiple.d.ts +10 -7
  96. package/components/form/select-multiple/select-multiple.js +29 -54
  97. package/components/form/spinner/spinner.d.ts +3 -4
  98. package/components/form/spinner/spinner.js +3 -7
  99. package/components/form/textarea/textarea-base.d.ts +24 -0
  100. package/components/form/textarea/textarea-base.js +34 -0
  101. package/components/form/textarea/textarea.d.ts +4 -5
  102. package/components/form/textarea/textarea.js +6 -22
  103. package/components/form/time/time-base.d.ts +17 -0
  104. package/components/form/time/time-base.js +24 -0
  105. package/components/form/time/time.d.ts +8 -7
  106. package/components/form/time/time.js +5 -16
  107. package/components/form/toggle/toggle.d.ts +1 -2
  108. package/components/form/toggle/toggle.js +5 -8
  109. package/components/grid/column.d.ts +1 -1
  110. package/components/grid/column.js +6 -7
  111. package/components/grid/container.d.ts +1 -0
  112. package/components/grid/container.js +9 -5
  113. package/components/grid/row.js +1 -1
  114. package/components/grid-layout/grid-column.d.ts +19 -0
  115. package/components/grid-layout/grid-column.js +14 -0
  116. package/components/grid-layout/grid-container.d.ts +10 -0
  117. package/components/grid-layout/grid-container.js +17 -0
  118. package/components/grid-layout/grid-row.d.ts +8 -0
  119. package/components/grid-layout/grid-row.js +12 -0
  120. package/components/header-1177/header-1177-avatar-base.d.ts +16 -0
  121. package/components/header-1177/header-1177-avatar-base.js +24 -0
  122. package/components/header-1177/header-1177-avatar.d.ts +4 -7
  123. package/components/header-1177/header-1177-avatar.js +35 -42
  124. package/components/header-1177/header-1177-base.d.ts +18 -0
  125. package/components/header-1177/header-1177-base.js +14 -0
  126. package/components/header-1177/header-1177-item-base.d.ts +9 -0
  127. package/components/header-1177/header-1177-item-base.js +13 -0
  128. package/components/header-1177/header-1177-item.d.ts +2 -7
  129. package/components/header-1177/header-1177-item.js +6 -29
  130. package/components/header-1177/header-1177-menu-mobile-base.d.ts +12 -0
  131. package/components/header-1177/header-1177-menu-mobile-base.js +18 -0
  132. package/components/header-1177/header-1177-menu-mobile.d.ts +4 -5
  133. package/components/header-1177/header-1177-menu-mobile.js +29 -28
  134. package/components/header-1177/header-1177-nav-base.d.ts +9 -0
  135. package/components/header-1177/header-1177-nav-base.js +12 -0
  136. package/components/header-1177/header-1177-nav-item-base.d.ts +18 -0
  137. package/components/header-1177/header-1177-nav-item-base.js +31 -0
  138. package/components/header-1177/header-1177-nav-item-mobile-base.d.ts +7 -0
  139. package/components/header-1177/header-1177-nav-item-mobile-base.js +10 -0
  140. package/components/header-1177/header-1177-nav-item-mobile.d.ts +4 -8
  141. package/components/header-1177/header-1177-nav-item-mobile.js +5 -16
  142. package/components/header-1177/header-1177-nav-item.d.ts +7 -7
  143. package/components/header-1177/header-1177-nav-item.js +44 -35
  144. package/components/header-1177/header-1177-nav.d.ts +2 -4
  145. package/components/header-1177/header-1177-nav.js +5 -9
  146. package/components/header-1177/header-1177-region-picker-base.d.ts +9 -0
  147. package/components/header-1177/header-1177-region-picker-base.js +21 -0
  148. package/components/header-1177/header-1177-region-picker-mobile-base.d.ts +9 -0
  149. package/components/header-1177/header-1177-region-picker-mobile-base.js +21 -0
  150. package/components/header-1177/header-1177-region-picker-mobile.d.ts +3 -6
  151. package/components/header-1177/header-1177-region-picker-mobile.js +13 -29
  152. package/components/header-1177/header-1177-region-picker.d.ts +3 -6
  153. package/components/header-1177/header-1177-region-picker.js +15 -29
  154. package/components/header-1177/header-1177.d.ts +3 -3
  155. package/components/header-1177/header-1177.js +5 -10
  156. package/components/header-1177-admin/header-1177-admin-avatar-base.d.ts +14 -0
  157. package/components/header-1177-admin/header-1177-admin-avatar-base.js +23 -0
  158. package/components/header-1177-admin/header-1177-admin-avatar-mobile-base.d.ts +13 -0
  159. package/components/header-1177-admin/header-1177-admin-avatar-mobile-base.js +23 -0
  160. package/components/header-1177-admin/header-1177-admin-avatar-mobile.d.ts +3 -5
  161. package/components/header-1177-admin/header-1177-admin-avatar-mobile.js +27 -23
  162. package/components/header-1177-admin/header-1177-admin-avatar.d.ts +3 -5
  163. package/components/header-1177-admin/header-1177-admin-avatar.js +26 -25
  164. package/components/header-1177-admin/header-1177-admin-base.d.ts +18 -0
  165. package/components/header-1177-admin/header-1177-admin-base.js +14 -0
  166. package/components/header-1177-admin/header-1177-admin-item-base.d.ts +8 -0
  167. package/components/header-1177-admin/header-1177-admin-item-base.js +12 -0
  168. package/components/header-1177-admin/header-1177-admin-item.d.ts +3 -8
  169. package/components/header-1177-admin/header-1177-admin-item.js +5 -27
  170. package/components/header-1177-admin/header-1177-admin-menu-mobile-base.d.ts +11 -0
  171. package/components/header-1177-admin/header-1177-admin-menu-mobile-base.js +18 -0
  172. package/components/header-1177-admin/header-1177-admin-menu-mobile.d.ts +4 -5
  173. package/components/header-1177-admin/header-1177-admin-menu-mobile.js +27 -25
  174. package/components/header-1177-admin/header-1177-admin-nav-base.d.ts +7 -0
  175. package/components/header-1177-admin/header-1177-admin-nav-base.js +10 -0
  176. package/components/header-1177-admin/header-1177-admin-nav-item-base.d.ts +18 -0
  177. package/components/header-1177-admin/header-1177-admin-nav-item-base.js +31 -0
  178. package/components/header-1177-admin/header-1177-admin-nav-item-mobile-base.d.ts +7 -0
  179. package/components/header-1177-admin/header-1177-admin-nav-item-mobile-base.js +10 -0
  180. package/components/header-1177-admin/header-1177-admin-nav-item-mobile.d.ts +7 -0
  181. package/components/header-1177-admin/header-1177-admin-nav-item-mobile.js +11 -0
  182. package/components/header-1177-admin/header-1177-admin-nav-item.d.ts +6 -6
  183. package/components/header-1177-admin/header-1177-admin-nav-item.js +44 -35
  184. package/components/header-1177-admin/header-1177-admin-nav.d.ts +2 -4
  185. package/components/header-1177-admin/header-1177-admin-nav.js +4 -6
  186. package/components/header-1177-admin/header-1177-admin.d.ts +2 -3
  187. package/components/header-1177-admin/header-1177-admin.js +5 -10
  188. package/components/header-1177-pro/header-1177-pro-avatar-base.d.ts +14 -0
  189. package/components/header-1177-pro/header-1177-pro-avatar-base.js +23 -0
  190. package/components/header-1177-pro/header-1177-pro-avatar-mobile-base.d.ts +13 -0
  191. package/components/header-1177-pro/header-1177-pro-avatar-mobile-base.js +24 -0
  192. package/components/header-1177-pro/header-1177-pro-avatar-mobile.d.ts +3 -6
  193. package/components/header-1177-pro/header-1177-pro-avatar-mobile.js +23 -20
  194. package/components/header-1177-pro/header-1177-pro-avatar.d.ts +4 -6
  195. package/components/header-1177-pro/header-1177-pro-avatar.js +32 -30
  196. package/components/header-1177-pro/header-1177-pro-base.d.ts +19 -0
  197. package/components/header-1177-pro/header-1177-pro-base.js +11 -0
  198. package/components/header-1177-pro/header-1177-pro-item-base.d.ts +8 -0
  199. package/components/header-1177-pro/header-1177-pro-item-base.js +12 -0
  200. package/components/header-1177-pro/header-1177-pro-item.d.ts +3 -8
  201. package/components/header-1177-pro/header-1177-pro-item.js +5 -27
  202. package/components/header-1177-pro/header-1177-pro-menu-mobile-base.d.ts +11 -0
  203. package/components/header-1177-pro/header-1177-pro-menu-mobile-base.js +18 -0
  204. package/components/header-1177-pro/header-1177-pro-menu-mobile.d.ts +5 -6
  205. package/components/header-1177-pro/header-1177-pro-menu-mobile.js +27 -25
  206. package/components/header-1177-pro/header-1177-pro-nav-base.d.ts +10 -0
  207. package/components/header-1177-pro/header-1177-pro-nav-base.js +10 -0
  208. package/components/header-1177-pro/header-1177-pro-nav-item-base.d.ts +18 -0
  209. package/components/header-1177-pro/header-1177-pro-nav-item-base.js +31 -0
  210. package/components/header-1177-pro/header-1177-pro-nav-item-mobile-base.d.ts +7 -0
  211. package/components/header-1177-pro/header-1177-pro-nav-item-mobile-base.js +10 -0
  212. package/components/header-1177-pro/header-1177-pro-nav-item-mobile.d.ts +7 -0
  213. package/components/header-1177-pro/header-1177-pro-nav-item-mobile.js +11 -0
  214. package/components/header-1177-pro/header-1177-pro-nav-item.d.ts +6 -6
  215. package/components/header-1177-pro/header-1177-pro-nav-item.js +44 -35
  216. package/components/header-1177-pro/header-1177-pro-nav.d.ts +4 -5
  217. package/components/header-1177-pro/header-1177-pro-nav.js +5 -7
  218. package/components/header-1177-pro/header-1177-pro-region-picker-base.d.ts +9 -0
  219. package/components/header-1177-pro/header-1177-pro-region-picker-base.js +19 -0
  220. package/components/header-1177-pro/header-1177-pro-region-picker-mobile-base.d.ts +9 -0
  221. package/components/header-1177-pro/header-1177-pro-region-picker-mobile-base.js +19 -0
  222. package/components/header-1177-pro/header-1177-pro-region-picker-mobile.d.ts +3 -5
  223. package/components/header-1177-pro/header-1177-pro-region-picker-mobile.js +13 -29
  224. package/components/header-1177-pro/header-1177-pro-region-picker.d.ts +3 -5
  225. package/components/header-1177-pro/header-1177-pro-region-picker.js +15 -29
  226. package/components/header-1177-pro/header-1177-pro.d.ts +4 -5
  227. package/components/header-1177-pro/header-1177-pro.js +5 -7
  228. package/components/header-inera/header-inera-base.d.ts +14 -0
  229. package/components/header-inera/header-inera-base.js +11 -0
  230. package/components/header-inera/header-inera-item-base.d.ts +8 -0
  231. package/components/header-inera/header-inera-item-base.js +12 -0
  232. package/components/header-inera/header-inera-item.d.ts +3 -8
  233. package/components/header-inera/header-inera-item.js +5 -36
  234. package/components/header-inera/header-inera-menu-mobile-base.d.ts +11 -0
  235. package/components/header-inera/header-inera-menu-mobile-base.js +18 -0
  236. package/components/header-inera/header-inera-menu-mobile.d.ts +5 -6
  237. package/components/header-inera/header-inera-menu-mobile.js +27 -26
  238. package/components/header-inera/header-inera-nav-base.d.ts +7 -0
  239. package/components/header-inera/header-inera-nav-base.js +10 -0
  240. package/components/header-inera/header-inera-nav-item-base.d.ts +17 -0
  241. package/components/header-inera/header-inera-nav-item-base.js +26 -0
  242. package/components/header-inera/header-inera-nav-item.d.ts +7 -7
  243. package/components/header-inera/header-inera-nav-item.js +44 -34
  244. package/components/header-inera/header-inera-nav.d.ts +4 -6
  245. package/components/header-inera/header-inera-nav.js +4 -7
  246. package/components/header-inera/header-inera.d.ts +1 -3
  247. package/components/header-inera/header-inera.js +5 -7
  248. package/components/header-inera-admin/header-inera-admin-avatar-base.d.ts +14 -0
  249. package/components/header-inera-admin/header-inera-admin-avatar-base.js +23 -0
  250. package/components/header-inera-admin/header-inera-admin-avatar-mobile-base.d.ts +13 -0
  251. package/components/header-inera-admin/header-inera-admin-avatar-mobile-base.js +23 -0
  252. package/components/header-inera-admin/header-inera-admin-avatar-mobile.d.ts +3 -6
  253. package/components/header-inera-admin/header-inera-admin-avatar-mobile.js +26 -21
  254. package/components/header-inera-admin/header-inera-admin-avatar.d.ts +4 -6
  255. package/components/header-inera-admin/header-inera-admin-avatar.js +35 -31
  256. package/components/header-inera-admin/header-inera-admin-base.d.ts +15 -0
  257. package/components/header-inera-admin/header-inera-admin-base.js +20 -0
  258. package/components/header-inera-admin/header-inera-admin-item-base.d.ts +8 -0
  259. package/components/header-inera-admin/header-inera-admin-item-base.js +13 -0
  260. package/components/header-inera-admin/header-inera-admin-item.d.ts +3 -8
  261. package/components/header-inera-admin/header-inera-admin-item.js +6 -26
  262. package/components/header-inera-admin/header-inera-admin-menu-mobile-base.d.ts +11 -0
  263. package/components/header-inera-admin/header-inera-admin-menu-mobile-base.js +18 -0
  264. package/components/header-inera-admin/header-inera-admin-menu-mobile.d.ts +4 -5
  265. package/components/header-inera-admin/header-inera-admin-menu-mobile.js +27 -25
  266. package/components/header-inera-admin/header-inera-admin-nav-base.d.ts +7 -0
  267. package/components/header-inera-admin/header-inera-admin-nav-base.js +10 -0
  268. package/components/header-inera-admin/header-inera-admin-nav-item-base.d.ts +18 -0
  269. package/components/header-inera-admin/header-inera-admin-nav-item-base.js +31 -0
  270. package/components/header-inera-admin/header-inera-admin-nav-item-mobile-base.d.ts +7 -0
  271. package/components/header-inera-admin/header-inera-admin-nav-item-mobile-base.js +10 -0
  272. package/components/header-inera-admin/header-inera-admin-nav-item-mobile.d.ts +7 -0
  273. package/components/header-inera-admin/header-inera-admin-nav-item-mobile.js +11 -0
  274. package/components/header-inera-admin/header-inera-admin-nav-item.d.ts +7 -6
  275. package/components/header-inera-admin/header-inera-admin-nav-item.js +44 -34
  276. package/components/header-inera-admin/header-inera-admin-nav.d.ts +4 -6
  277. package/components/header-inera-admin/header-inera-admin-nav.js +5 -8
  278. package/components/header-inera-admin/header-inera-admin.d.ts +3 -4
  279. package/components/header-inera-admin/header-inera-admin.js +5 -16
  280. package/components/header-patient/header-patient.d.ts +2 -4
  281. package/components/header-patient/header-patient.js +6 -10
  282. package/components/link/action-link.d.ts +6 -0
  283. package/components/link/action-link.js +9 -0
  284. package/components/link/box-link.d.ts +6 -0
  285. package/components/link/box-link.js +9 -0
  286. package/components/link/link.d.ts +2 -2
  287. package/components/link/link.js +3 -10
  288. package/components/list-pagination/list-pagination-links.d.ts +19 -0
  289. package/components/list-pagination/list-pagination-links.js +48 -0
  290. package/components/{pagination/list-pagination → list-pagination}/list-pagination.d.ts +3 -2
  291. package/components/{pagination/list-pagination → list-pagination}/list-pagination.js +4 -3
  292. package/components/mobile-menu/mobile-item-base.d.ts +14 -0
  293. package/components/mobile-menu/mobile-item-base.js +46 -0
  294. package/components/mobile-menu/mobile-item.d.ts +6 -0
  295. package/components/mobile-menu/mobile-item.js +26 -0
  296. package/components/mobile-menu/mobile-menu.d.ts +6 -0
  297. package/components/mobile-menu/mobile-menu.js +10 -0
  298. package/components/{navigation/content → navigation-content}/navigation-content.d.ts +1 -1
  299. package/components/{navigation/content → navigation-content}/navigation-content.js +2 -2
  300. package/components/{navigation/local → navigation-local}/navigation-local.d.ts +1 -1
  301. package/components/{navigation/local → navigation-local}/navigation-local.js +1 -1
  302. package/components/{notification/badge → notification-badge}/notification-badge.d.ts +1 -1
  303. package/components/notification-badge/notification-badge.js +9 -0
  304. package/components/popover/popover-base.d.ts +15 -0
  305. package/components/popover/popover-base.js +27 -0
  306. package/components/popover/popover-content.d.ts +19 -0
  307. package/components/popover/popover-content.js +20 -0
  308. package/components/popover/popover.d.ts +7 -8
  309. package/components/popover/popover.js +67 -161
  310. package/components/progressbar/progressbar.js +2 -2
  311. package/components/puff-list/{puff-list-item/puff-list-item-date.d.ts → puff-list-item-date.d.ts} +0 -1
  312. package/components/puff-list/{puff-list-item/puff-list-item-date.js → puff-list-item-date.js} +2 -3
  313. package/components/puff-list/{puff-list-item/puff-list-item-header.d.ts → puff-list-item-header.d.ts} +1 -1
  314. package/components/puff-list/puff-list-item-header.js +12 -0
  315. package/components/puff-list/{puff-list-item/puff-list-item-info.d.ts → puff-list-item-info.d.ts} +1 -2
  316. package/components/puff-list/puff-list-item-info.js +8 -0
  317. package/components/puff-list/{puff-list-item/puff-list-item.d.ts → puff-list-item.d.ts} +0 -2
  318. package/components/puff-list/{puff-list-item/puff-list-item.js → puff-list-item.js} +2 -3
  319. package/components/puff-list/puff-list.js +2 -3
  320. package/components/region-icon/region-icon.js +2 -2
  321. package/components/side-menu/side-menu-base.d.ts +22 -0
  322. package/components/side-menu/side-menu-base.js +42 -0
  323. package/components/side-menu/side-menu.d.ts +6 -9
  324. package/components/side-menu/side-menu.js +13 -43
  325. package/components/side-panel/side-panel-base.d.ts +24 -0
  326. package/components/side-panel/side-panel-base.js +33 -0
  327. package/components/side-panel/side-panel-provider.d.ts +7 -0
  328. package/components/side-panel/side-panel-provider.js +12 -0
  329. package/components/side-panel/side-panel.d.ts +14 -15
  330. package/components/side-panel/side-panel.js +49 -54
  331. package/components/stepper/step-base.d.ts +15 -0
  332. package/components/stepper/step-base.js +36 -0
  333. package/components/stepper/step.d.ts +5 -8
  334. package/components/stepper/step.js +17 -33
  335. package/components/stepper/stepper.d.ts +4 -6
  336. package/components/stepper/stepper.js +8 -13
  337. package/components/tabs/tab-link.d.ts +15 -0
  338. package/components/tabs/tab-link.js +10 -0
  339. package/components/tabs/tab-panel.d.ts +2 -4
  340. package/components/tabs/tab-panel.js +5 -12
  341. package/components/tabs/tab.d.ts +5 -5
  342. package/components/tabs/tab.js +5 -8
  343. package/components/tabs/tabs-base.d.ts +15 -0
  344. package/components/tabs/tabs-base.js +15 -0
  345. package/components/tabs/tabs.d.ts +5 -8
  346. package/components/tabs/tabs.js +38 -51
  347. package/components/tag/tag.d.ts +5 -15
  348. package/components/tag/tag.js +3 -8
  349. package/components/tooltip/tooltip-base.d.ts +14 -0
  350. package/components/tooltip/tooltip-base.js +18 -0
  351. package/components/tooltip/tooltip.d.ts +3 -10
  352. package/components/tooltip/tooltip.js +59 -43
  353. package/components/utils/contexts/HeaderContext.d.ts +1 -0
  354. package/components/utils/hooks/useFocusTrap.js +1 -1
  355. package/index.d.ts +91 -15
  356. package/index.js +91 -15
  357. package/package.json +2 -2
  358. package/components/box-link/box-link.d.ts +0 -9
  359. package/components/box-link/box-link.js +0 -11
  360. package/components/global-alert/global-alert.d.ts +0 -16
  361. package/components/global-alert/global-alert.js +0 -26
  362. package/components/mobile/menu/item/mobile-item.d.ts +0 -15
  363. package/components/mobile/menu/item/mobile-item.js +0 -61
  364. package/components/mobile/menu/mobile-menu.d.ts +0 -7
  365. package/components/mobile/menu/mobile-menu.js +0 -12
  366. package/components/notification/badge/notification-badge.js +0 -9
  367. package/components/pagination/data-pagination/data-pagination.js +0 -16
  368. package/components/puff-list/puff-list-item/puff-list-item-header.js +0 -11
  369. package/components/puff-list/puff-list-item/puff-list-item-info.js +0 -10
  370. package/components/utils/hooks/useElementId.d.ts +0 -5
  371. package/components/utils/hooks/useElementId.js +0 -12
  372. /package/components/{button-group → button}/button-group.d.ts +0 -0
@@ -0,0 +1,12 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
3
+ import clsx from 'clsx';
4
+ import '@inera/ids-design/components/data-pagination/data-pagination.css';
5
+
6
+ const IDSDataPagination = forwardRef(({ from, to, of = "av", total, defaultValue = "", firstPageButton, previousButton, nextButton, lastPageButton, light = false, className, children, ...props }, ref) => {
7
+ const summaryText = `${from} - ${to} ${of} ${total}`;
8
+ return (jsxs("div", { className: clsx("ids-data-pagination", { "ids-data-pagination--light": light }, className), ...props, children: [!!children && jsx("div", { className: "ids-data-pagination__select", children: children }), jsx("div", { className: "ids-data-pagination__summary", children: summaryText }), jsxs("div", { className: "ids-data-pagination__buttons", children: [firstPageButton && jsx("div", { className: "ids-data-pagination__first-page-button", children: firstPageButton }), previousButton && jsx("div", { className: "ids-data-pagination__prev-button", children: previousButton }), nextButton && jsx("div", { className: "ids-data-pagination__next-button", children: nextButton }), lastPageButton && jsx("div", { className: "ids-data-pagination__last-page-button", children: lastPageButton })] })] }));
9
+ });
10
+ IDSDataPagination.displayName = "IDSDataPagination";
11
+
12
+ export { IDSDataPagination };
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import '@inera/ids-design/components/date-label/date-label.css';
3
2
  import { getDayAsText, getMonthAsSweText } from '../utils/utils.js';
4
3
  import clsx from 'clsx';
4
+ import '@inera/ids-design/components/date-label/date-label.css';
5
5
 
6
6
  function IDSDateLabel({ date = null, year = 0, month = 0, day = 0, monthLabel = "", dateTo = null, yearTo = 0, monthTo = 0, monthToLabel = "", srText = "", dayTo = 0, children, className, ...props }) {
7
7
  const getYear = () => (date ? date.getFullYear() : year);
@@ -12,7 +12,7 @@ function IDSDateLabel({ date = null, year = 0, month = 0, day = 0, monthLabel =
12
12
  const getDayTo = () => (dateTo ? getDayAsText(dateTo.getDate()) : getDayAsText(dayTo));
13
13
  const getMonthText = () => (monthLabel ? monthLabel : getMonthAsSweText(getMonth() - 1, 3));
14
14
  const getMonthToText = () => (monthToLabel ? monthToLabel : getMonthAsSweText(getMonthTo() - 1, 3));
15
- return (jsxs("span", { className: clsx("ids-date-label", className), "aria-label": srText, ...props, role: "text", children: [jsxs("time", { className: "ids-date-label__time", "aria-hidden": "true", children: [jsx("span", { className: "ids-date-label__day", children: getDay() }), jsx("span", { className: "ids-date-label__month", children: getMonthText() }), jsx("span", { className: "ids-date-label__year", children: getYear() })] }), !!(dateTo || (dayTo && monthTo && yearTo)) && (jsxs("time", { className: "ids-date-label__time ids-date-label__time--separator", "aria-hidden": "true", children: [jsx("span", { className: "ids-date-label__day", children: getDayTo() }), jsx("span", { className: "ids-date-label__month", children: getMonthToText() }), jsx("span", { className: "ids-date-label__year", children: getYearTo() })] }))] }));
15
+ return (jsxs("span", { ...props, className: clsx("ids-date-label", className), "aria-label": srText, role: "text", children: [jsxs("time", { className: "ids-date-label__time", "aria-hidden": "true", children: [jsx("span", { className: "ids-date-label__day", children: getDay() }), jsx("span", { className: "ids-date-label__month", children: getMonthText() }), jsx("span", { className: "ids-date-label__year", children: getYear() })] }), !!(dateTo || (dayTo && monthTo && yearTo)) && (jsxs("time", { className: "ids-date-label__time ids-date-label__time--separator", "aria-hidden": "true", children: [jsx("span", { className: "ids-date-label__day", children: getDayTo() }), jsx("span", { className: "ids-date-label__month", children: getMonthToText() }), jsx("span", { className: "ids-date-label__year", children: getYearTo() })] }))] }));
16
16
  }
17
17
 
18
18
  export { IDSDateLabel };
@@ -0,0 +1,21 @@
1
+ import { ReactNode, HTMLAttributes } from "react";
2
+ import "@inera/ids-design/components/dialog/dialog.css";
3
+ export interface IDSDialogBaseProps extends HTMLAttributes<HTMLDivElement> {
4
+ show?: boolean;
5
+ noFocusTrap?: boolean;
6
+ width?: string;
7
+ maxWidth?: string;
8
+ height?: string;
9
+ headline?: ReactNode;
10
+ onCloseDialog?: () => void;
11
+ actions?: ReactNode;
12
+ dismissible?: boolean;
13
+ srClose?: string;
14
+ noScrollAreaFocus?: boolean;
15
+ noOverlay?: boolean;
16
+ dialogRef?: React.Ref<HTMLDivElement>;
17
+ scrollAreaRef?: React.Ref<HTMLDivElement>;
18
+ onOverlayClick?: () => void;
19
+ client?: boolean;
20
+ }
21
+ export declare const IDSDialogBase: import("react").ForwardRefExoticComponent<IDSDialogBaseProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,29 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { forwardRef, useId } from 'react';
3
+ import clsx from 'clsx';
4
+ import '@inera/ids-design/components/dialog/dialog.css';
5
+
6
+ const IDSDialogBase = forwardRef(({ show = false, width, maxWidth, height, headline, actions, dismissible, onCloseDialog, srClose = "Stäng", noScrollAreaFocus, noOverlay = false, noFocusTrap = false, dialogRef, scrollAreaRef, onOverlayClick, client = false, children, className, ...props }, ref) => {
7
+ const reactId = useId();
8
+ const headlineId = `dialog-header-${reactId}`;
9
+ const overlayHandler = client && onOverlayClick
10
+ ? {
11
+ onClick: onOverlayClick
12
+ }
13
+ : {};
14
+ const closeHandler = client && onCloseDialog
15
+ ? {
16
+ onClick: onCloseDialog
17
+ }
18
+ : {};
19
+ return (jsxs(Fragment, { children: [!noOverlay && (jsx("div", { className: `ids-dialog-overlay ${!show ? "ids-dialog-overlay--hidden" : ""}`, ...overlayHandler })), jsxs("div", { ...props, className: clsx("ids-dialog", {
20
+ "ids-dialog--hidden": !show,
21
+ "ids-focus-trap": !noFocusTrap,
22
+ "ids-dialog--dismissible": !!dismissible
23
+ }), ref: dialogRef, role: "dialog", "aria-modal": "true", "aria-labelledby": headline ? headlineId : undefined, style: { width, maxWidth, height, maxHeight: height || undefined }, children: [dismissible && (jsx("div", { className: "ids-dialog__dismissible", children: jsx("button", { "aria-label": srClose, ...closeHandler, className: "ids-dialog__close-button" }) })), jsxs("div", { ref: scrollAreaRef, className: clsx("ids-dialog__body", {
24
+ "ids-dialog__body--scroll-area-focus": !noScrollAreaFocus
25
+ }), tabIndex: noScrollAreaFocus ? -1 : 0, children: [jsx("div", { className: "ids-dialog__body-headline", id: headlineId, children: headline }), jsx("div", { className: "ids-dialog__body-content", children: children }), actions && jsx("div", { className: "ids-dialog__footer", children: actions })] })] })] }));
26
+ });
27
+ IDSDialogBase.displayName = "IDSDialogBase";
28
+
29
+ export { IDSDialogBase };
@@ -1,23 +1,20 @@
1
- import React, { ReactNode } from "react";
2
- import "@inera/ids-design/components/dialog/dialog.css";
3
- interface IDSDialogProps extends React.HTMLAttributes<HTMLDivElement> {
4
- actions?: ReactNode;
5
- autoFocus?: boolean;
6
- dismissible?: boolean;
1
+ import { ReactNode, HTMLAttributes } from "react";
2
+ export interface IDSDialogProps extends HTMLAttributes<HTMLDivElement> {
3
+ show?: boolean;
4
+ srClose?: string;
7
5
  headline?: ReactNode;
8
- height?: string;
9
- keepScrollbar?: boolean;
6
+ width?: string;
10
7
  maxWidth?: string;
11
- noFocusTrap?: boolean;
8
+ height?: string;
9
+ trigger?: ReactNode;
10
+ dismissible?: boolean;
12
11
  noOverlay?: boolean;
13
- noScrollAreaFocus?: boolean;
12
+ actions?: ReactNode;
13
+ autoFocus?: boolean;
14
14
  persistent?: boolean;
15
- show?: boolean;
16
- srClose?: string;
17
- trigger?: ReactNode;
18
- width?: string;
19
- children?: ReactNode;
15
+ noFocusTrap?: boolean;
16
+ keepScrollbar?: boolean;
17
+ noScrollAreaFocus?: boolean;
20
18
  onVisibilityChange?: (isVisible: boolean) => void;
21
19
  }
22
- export declare function IDSDialog({ show, srClose, dismissible, autoFocus, noOverlay, noFocusTrap, keepScrollbar, persistent, noScrollAreaFocus, width, maxWidth, height, trigger, headline, actions, children, className, onVisibilityChange, ...props }: IDSDialogProps): import("react/jsx-runtime").JSX.Element;
23
- export {};
20
+ export declare function IDSDialog({ show, srClose, headline, width, maxWidth, height, trigger, actions, noOverlay, dismissible, autoFocus, noFocusTrap, persistent, keepScrollbar, noScrollAreaFocus, onVisibilityChange, children, className, ...props }: IDSDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -1,31 +1,27 @@
1
1
  "use client";
2
2
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
- import { useState, useRef, useEffect } from 'react';
4
- import '@inera/ids-design/components/dialog/dialog.css';
3
+ import { useState, useRef, useEffect, useCallback } from 'react';
4
+ import { IDSDialogBase } from './dialog-base.js';
5
5
  import { useFocusTrap } from '../utils/hooks/useFocusTrap.js';
6
- import clsx from 'clsx';
7
6
 
8
- function IDSDialog({ show = false, srClose = "Stäng", dismissible = false, autoFocus = true, noOverlay = false, noFocusTrap = false, keepScrollbar = false, persistent = false, noScrollAreaFocus = false, width = "", maxWidth = "", height = "", trigger, headline, actions, children, className, onVisibilityChange, ...props }) {
7
+ function IDSDialog({ show = false, srClose = "Stäng", headline, width, maxWidth, height, trigger, actions, noOverlay = false, dismissible = false, autoFocus = true, noFocusTrap = false, persistent = false, keepScrollbar = false, noScrollAreaFocus = false, onVisibilityChange, children, className, ...props }) {
9
8
  const [isVisible, setIsVisible] = useState(show);
9
+ const triggerRef = useRef(null);
10
10
  const dialogRef = useRef(null);
11
- const bodyRef = useRef(null);
12
- const [hasScrollbar, setHasScrollbar] = useState(false);
11
+ const scrollAreaRef = useRef(null);
13
12
  useFocusTrap(dialogRef.current, isVisible && !noFocusTrap);
13
+ // Sync prop show
14
14
  useEffect(() => {
15
15
  setIsVisible(show);
16
16
  }, [show]);
17
+ // Notify visibility change
17
18
  useEffect(() => {
18
19
  onVisibilityChange?.(isVisible);
19
20
  }, [isVisible]);
21
+ // Body scroll and scrollbar detection
20
22
  useEffect(() => {
21
- const checkScrollbar = () => {
22
- if (bodyRef.current) {
23
- setHasScrollbar(bodyRef.current.clientHeight < bodyRef.current.scrollHeight);
24
- }
25
- };
26
23
  if (isVisible) {
27
24
  !keepScrollbar && document.body.classList.add("ids-hide-overflow");
28
- checkScrollbar();
29
25
  }
30
26
  else {
31
27
  document.body.classList.remove("ids-hide-overflow");
@@ -34,6 +30,7 @@ function IDSDialog({ show = false, srClose = "Stäng", dismissible = false, auto
34
30
  document.body.classList.remove("ids-hide-overflow");
35
31
  };
36
32
  }, [isVisible, keepScrollbar]);
33
+ // Escape key
37
34
  useEffect(() => {
38
35
  const handleKeyDown = (e) => {
39
36
  if (e.key === "Escape" && isVisible && !persistent) {
@@ -42,35 +39,38 @@ function IDSDialog({ show = false, srClose = "Stäng", dismissible = false, auto
42
39
  };
43
40
  document.addEventListener("keydown", handleKeyDown);
44
41
  return () => document.removeEventListener("keydown", handleKeyDown);
45
- }, [isVisible, persistent, setIsVisible]);
42
+ }, [isVisible, persistent]);
43
+ // Auto focus
46
44
  useEffect(() => {
47
45
  if (isVisible && autoFocus) {
48
- setTimeout(() => {
49
- const focusable = bodyRef.current?.querySelector(".ids-focus-anchor") ||
50
- bodyRef.current?.querySelector("h1, h2, h3, [tabindex]:not([tabindex='-1']), button:not([disabled]), a, input:not([disabled]), textarea:not([disabled])") ||
51
- dialogRef.current?.querySelector("button.ids-dialog__close-button");
52
- focusable?.focus();
53
- });
46
+ if (!dialogRef?.current)
47
+ return;
48
+ const wrapper = dialogRef.current;
49
+ const focusAnchor = wrapper.querySelector(".ids-focus-anchor");
50
+ if (focusAnchor) {
51
+ focusAnchor.focus();
52
+ setTimeout(() => {
53
+ focusAnchor?.scrollIntoView({
54
+ behavior: "smooth",
55
+ block: "nearest"
56
+ });
57
+ }, 2);
58
+ }
59
+ else {
60
+ wrapper.focus();
61
+ }
54
62
  }
55
63
  }, [isVisible, autoFocus]);
56
- const overlayClick = () => {
57
- if (!persistent) {
64
+ const overlayClick = useCallback(() => {
65
+ if (!persistent)
58
66
  setIsVisible(false);
59
- }
60
- };
61
- return (jsxs(Fragment, { children: [jsx("div", { className: "ids-dialog__trigger", children: trigger }), !noOverlay && (jsx("div", { className: clsx("ids-dialog-overlay", {
62
- "ids-dialog-overlay--hidden": !isVisible
63
- }), onClick: overlayClick })), jsxs("div", { ref: dialogRef, className: clsx("ids-dialog", {
64
- "ids-dialog--hidden": !isVisible
65
- }, className), role: "dialog", "aria-modal": "true", style: {
66
- width,
67
- maxWidth,
68
- height,
69
- maxHeight: height || undefined
70
- }, ...props, children: [dismissible && (jsx("div", { className: "ids-dialog__dismissible", children: jsx("button", { "aria-label": srClose, className: "ids-dialog__close-button", onClick: () => setIsVisible(false) }) })), jsxs("div", { ref: bodyRef, className: clsx("ids-dialog__body", {
71
- "ids-dialog__body--has-scrollbar": hasScrollbar,
72
- "ids-dialog__body--scroll-area-focus": !noScrollAreaFocus
73
- }), tabIndex: noScrollAreaFocus ? -1 : 0, children: [jsx("div", { className: "ids-dialog__body-headline", children: headline }), jsx("div", { className: "ids-dialog__body-content", children: children }), actions && jsx("div", { className: "ids-dialog__footer", children: actions })] })] })] }));
67
+ triggerRef.current?.focus();
68
+ }, []);
69
+ const closeDialog = useCallback(() => {
70
+ setIsVisible(false);
71
+ triggerRef.current?.focus();
72
+ }, []);
73
+ return (jsxs(Fragment, { children: [jsx("div", { className: "ids-dialog__trigger", "aria-haspopup": "dialog", ref: triggerRef, children: trigger }), jsx(IDSDialogBase, { ...props, client: true, show: isVisible, noOverlay: noOverlay, headline: headline, dismissible: dismissible, width: width, maxWidth: maxWidth, height: height, dialogRef: dialogRef, scrollAreaRef: scrollAreaRef, actions: actions, noFocusTrap: noFocusTrap, noScrollAreaFocus: noScrollAreaFocus, onCloseDialog: closeDialog, onOverlayClick: overlayClick, children: children })] }));
74
74
  }
75
75
 
76
76
  export { IDSDialog };
@@ -0,0 +1,18 @@
1
+ import React, { ReactNode } from "react";
2
+ import "@inera/ids-design/components/dropdown/dropdown.css";
3
+ type Position = "left" | "right";
4
+ export interface IDSDropdownBaseProps extends React.HTMLAttributes<HTMLSpanElement> {
5
+ expanded: boolean;
6
+ mBlock?: boolean;
7
+ sBlock?: boolean;
8
+ position?: Position;
9
+ maxHeight?: string;
10
+ minWidth?: string;
11
+ triggerRef?: React.Ref<HTMLSpanElement>;
12
+ contentRef?: React.Ref<HTMLDivElement>;
13
+ trigger?: ReactNode;
14
+ onTriggerClick?: () => void;
15
+ client?: boolean;
16
+ }
17
+ export declare function IDSDropdownBase({ expanded, trigger, triggerRef, onTriggerClick, position, mBlock, sBlock, client, children, className, maxHeight, minWidth, contentRef, ...props }: IDSDropdownBaseProps): import("react/jsx-runtime").JSX.Element;
18
+ export {};
@@ -0,0 +1,42 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import React, { useId } from 'react';
3
+ import clsx from 'clsx';
4
+ import '@inera/ids-design/components/dropdown/dropdown.css';
5
+
6
+ function IDSDropdownBase({ expanded, trigger, triggerRef, onTriggerClick, position, mBlock = false, sBlock = false, client = false, children, className, maxHeight, minWidth, contentRef, ...props }) {
7
+ const triggerId = `dropdown-trigger-${useId()}`;
8
+ const handleKeyPress = (e) => {
9
+ if (!!onTriggerClick && (e.key === "Enter" || e.key === " ")) {
10
+ e.preventDefault();
11
+ onTriggerClick();
12
+ }
13
+ };
14
+ const triggerHandlers = client && onTriggerClick
15
+ ? {
16
+ onClick: onTriggerClick,
17
+ onKeyDown: handleKeyPress
18
+ }
19
+ : {};
20
+ const enhancedTrigger = React.isValidElement(trigger)
21
+ ? React.cloneElement(trigger, {
22
+ ref: triggerRef,
23
+ id: triggerId,
24
+ "aria-expanded": expanded,
25
+ "aria-haspopup": "dialog",
26
+ ...triggerHandlers,
27
+ ...trigger.props
28
+ })
29
+ : trigger;
30
+ return (jsxs("span", { ...props, className: clsx(`ids-dropdown`, className, {
31
+ "ids-dropdown--m-block": mBlock,
32
+ "ids-dropdown--s-block": sBlock,
33
+ "ids-dropdown--expanded": expanded
34
+ }), children: [enhancedTrigger, jsx("div", { ...props, ref: contentRef, "aria-labelledby": triggerId, "aria-hidden": !expanded, className: clsx(`ids-dropdown-content ids-dropdown-content--position-${position}`, {
35
+ "ids-dropdown-content--show": expanded,
36
+ "ids-dropdown-content--mblock": mBlock,
37
+ "ids-dropdown-content--sblock": sBlock,
38
+ "ids-dropdown-content--scrollable": !!maxHeight
39
+ }, className), style: { minWidth }, children: jsx("div", { className: "ids-dropdown-content__scroll-area", role: "menu", style: { maxHeight: maxHeight || "auto" }, tabIndex: !!maxHeight ? 0 : -1, children: children }) })] }));
40
+ }
41
+
42
+ export { IDSDropdownBase };
@@ -1,5 +1,4 @@
1
1
  import { ButtonHTMLAttributes, ReactNode } from "react";
2
- import "@inera/ids-design/components/dropdown/dropdown.css";
3
2
  export interface IDSDropdownContentButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
4
3
  icon?: string;
5
4
  children: ReactNode;
@@ -1,6 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { forwardRef } from 'react';
3
- import '@inera/ids-design/components/dropdown/dropdown.css';
4
3
  import clsx from 'clsx';
5
4
 
6
5
  const IDSDropdownContentButton = forwardRef(({ icon, children, className, ...props }, ref) => {
@@ -1,6 +1,5 @@
1
- import React, { ReactElement, HTMLAttributes } from "react";
2
- import "@inera/ids-design/components/dropdown/dropdown.css";
1
+ import { ReactElement, HTMLAttributes } from "react";
3
2
  export interface IDSDropdownContentLinkProps extends Omit<HTMLAttributes<HTMLAnchorElement>, "children"> {
4
3
  children: ReactElement;
5
4
  }
6
- export declare function IDSDropdownContentLink({ children, className, ...props }: IDSDropdownContentLinkProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
5
+ export declare function IDSDropdownContentLink({ children, className, ...props }: IDSDropdownContentLinkProps): ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
@@ -1,18 +1,11 @@
1
- import { jsx, Fragment } from 'react/jsx-runtime';
2
- import { isValidElement, cloneElement } from 'react';
3
- import '@inera/ids-design/components/dropdown/dropdown.css';
1
+ import { cloneElement } from 'react';
4
2
  import clsx from 'clsx';
5
3
 
6
4
  function IDSDropdownContentLink({ children, className, ...props }) {
7
- if (!isValidElement(children) || children.type !== "a") {
8
- console.error("IDSDropdownContentLink expects a single <a> element as its child.");
9
- return null;
10
- }
11
- const childClassName = clsx("ids-dropdown-content__link", children.props.className, className);
12
- const content = jsx(Fragment, { children: children.props.children });
5
+ const content = children.props.children;
13
6
  return cloneElement(children, {
14
7
  ...props,
15
- className: childClassName,
8
+ className: clsx("ids-dropdown-content__link", className),
16
9
  role: "menuitem",
17
10
  children: content
18
11
  });
@@ -1,17 +1,15 @@
1
- import React, { ReactNode, ReactElement } from "react";
2
- import "@inera/ids-design/components/dropdown/dropdown.css";
3
- type Position = "left" | "right";
4
- interface IDSDropdownProps extends React.HTMLAttributes<HTMLSpanElement> {
5
- button: ReactElement;
6
- expanded?: boolean;
1
+ import React from "react";
2
+ import { IDSDropdownBaseProps } from "./dropdown-base";
3
+ type Props = Omit<IDSDropdownBaseProps, "onTriggerClick" | "triggerRef" | "contentRef"> & {
4
+ button: React.ReactNode;
5
+ position?: "left" | "right";
6
+ maxHeight?: string;
7
+ minWidth?: string;
8
+ persistent?: boolean;
9
+ sBlock?: boolean;
7
10
  mBlock?: boolean;
8
11
  onClosed?: () => void;
9
12
  onOpened?: () => void;
10
- persistent?: boolean;
11
- position?: Position;
12
- sBlock?: boolean;
13
- maxHeight?: string;
14
- children: ReactNode;
15
- }
16
- export declare function IDSDropdown({ expanded, persistent, position, sBlock, mBlock, maxHeight, onOpened, onClosed, children, className, button, ...props }: IDSDropdownProps): import("react/jsx-runtime").JSX.Element;
13
+ };
14
+ export declare function IDSDropdown({ button, position, maxHeight, minWidth, sBlock, mBlock, expanded, persistent, onClosed, onOpened, children, className, ...props }: Props): import("react/jsx-runtime").JSX.Element;
17
15
  export {};
@@ -1,34 +1,46 @@
1
1
  "use client";
2
- import { jsxs, jsx } from 'react/jsx-runtime';
3
- import React, { useState, useRef, useEffect, isValidElement, cloneElement } from 'react';
4
- import '@inera/ids-design/components/dropdown/dropdown.css';
5
- import { useElementId } from '../utils/hooks/useElementId.js';
6
- import clsx from 'clsx';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { useState, useRef, useEffect } from 'react';
4
+ import { IDSDropdownBase } from './dropdown-base.js';
7
5
 
8
- function IDSDropdown({ expanded = false, persistent = false, position = "right", sBlock = false, mBlock = false, maxHeight = "", onOpened, onClosed, children, className, button, ...props }) {
6
+ function IDSDropdown({ button, position, maxHeight, minWidth, sBlock, mBlock, expanded = false, persistent = false, onClosed, onOpened, children, className, ...props }) {
9
7
  const [isExpanded, setIsExpanded] = useState(expanded);
10
8
  const triggerRef = useRef(null);
11
9
  const contentRef = useRef(null);
12
- const buttonId = useElementId();
13
10
  useEffect(() => {
14
11
  setIsExpanded(expanded);
15
12
  }, [expanded]);
13
+ // Click outside to close
16
14
  useEffect(() => {
17
- if (!persistent && isExpanded) {
18
- const handleClickOutside = (event) => {
19
- if (triggerRef.current &&
20
- !triggerRef.current.contains(event.target) &&
21
- contentRef.current &&
22
- !contentRef.current.contains(event.target)) {
23
- setIsExpanded(false);
24
- onClosed?.();
25
- }
26
- };
27
- document.addEventListener("mousedown", handleClickOutside);
28
- return () => document.removeEventListener("mousedown", handleClickOutside);
29
- }
15
+ if (!isExpanded || persistent)
16
+ return;
17
+ const handleClickOutside = (event) => {
18
+ if (triggerRef.current &&
19
+ !triggerRef.current.contains(event.target) &&
20
+ contentRef.current &&
21
+ !contentRef.current.contains(event.target)) {
22
+ setIsExpanded(false);
23
+ onClosed?.();
24
+ }
25
+ };
26
+ document.addEventListener("mousedown", handleClickOutside);
27
+ return () => document.removeEventListener("mousedown", handleClickOutside);
28
+ }, [isExpanded, persistent, onClosed]);
29
+ // Escape should also close
30
+ useEffect(() => {
31
+ if (!isExpanded || persistent)
32
+ return;
33
+ const handleKeyDown = (event) => {
34
+ if (event.key === "Escape") {
35
+ event.preventDefault();
36
+ setIsExpanded(false);
37
+ onClosed?.();
38
+ }
39
+ };
40
+ document.addEventListener("keydown", handleKeyDown);
41
+ return () => document.removeEventListener("keydown", handleKeyDown);
30
42
  }, [isExpanded, persistent, onClosed]);
31
- const handleToggle = (e) => {
43
+ const toggleDropdown = () => {
32
44
  setIsExpanded(prev => {
33
45
  const next = !prev;
34
46
  if (next)
@@ -38,38 +50,7 @@ function IDSDropdown({ expanded = false, persistent = false, position = "right",
38
50
  return next;
39
51
  });
40
52
  };
41
- const renderTrigger = () => {
42
- if (isValidElement(button)) {
43
- return cloneElement(button, {
44
- id: buttonId,
45
- ref: triggerRef,
46
- onClick: handleToggle,
47
- "aria-expanded": isExpanded,
48
- "aria-haspopup": "menu",
49
- className: clsx(button.props.className)
50
- });
51
- }
52
- return null;
53
- };
54
- const renderDropdownContent = () => {
55
- const enhancedChildren = React.Children.map(children, (child, i) => {
56
- if (!React.isValidElement(child))
57
- return child;
58
- return cloneElement(child, {
59
- key: `dropdown-content-link-${i}`
60
- });
61
- });
62
- return (jsx("div", { ref: contentRef, "aria-labelledby": buttonId, "aria-hidden": !isExpanded, role: "menu", className: clsx(`ids-dropdown-content ids-dropdown-content--position-${position}`, {
63
- "ids-dropdown-content--show": isExpanded,
64
- "ids-dropdown-content--mblock": mBlock,
65
- "ids-dropdown-content--sblock": sBlock,
66
- "ids-dropdown-content--scrollable": !!maxHeight
67
- }), ...props, children: jsx("div", { className: "ids-dropdown-content__scroll-area", role: "menu", style: { maxHeight: maxHeight || "auto" }, tabIndex: !!maxHeight ? 0 : -1, children: enhancedChildren }) }));
68
- };
69
- return (jsxs("span", { className: clsx(`ids-dropdown`, className, {
70
- "ids-dropdown--mblock": mBlock,
71
- "ids-dropdown--sblock": sBlock
72
- }), children: [renderTrigger(), isExpanded && renderDropdownContent()] }));
53
+ return (jsx(IDSDropdownBase, { ...props, client: true, className: className, expanded: isExpanded, trigger: button, triggerRef: triggerRef, contentRef: contentRef, maxHeight: maxHeight, sBlock: sBlock, mBlock: mBlock, minWidth: minWidth, position: position, onTriggerClick: toggleDropdown, children: children }));
73
54
  }
74
55
 
75
56
  export { IDSDropdown };
@@ -1,14 +1,13 @@
1
- import React, { ReactElement, ReactNode } from "react";
2
- import { IDSLinkProps } from "../link/link";
1
+ import React, { ReactNode } from "react";
3
2
  import "@inera/ids-design/components/footer-1177/footer-1177.css";
4
3
  export interface Footer1177Props extends React.HTMLAttributes<HTMLDivElement> {
5
4
  headline?: string;
5
+ toggle?: ReactNode;
6
6
  srHeadline?: string;
7
7
  subHeadline?: string;
8
- cols?: 1 | 2 | 3;
9
- col1?: ReactElement<IDSLinkProps>[];
10
- col2?: ReactElement<IDSLinkProps>[];
11
- col3?: ReactElement<IDSLinkProps>[];
8
+ col1?: ReactNode;
9
+ col2?: ReactNode;
10
+ col3?: ReactNode;
12
11
  subFooterLeft?: ReactNode;
13
12
  subFooterRight?: ReactNode;
14
13
  mobileMenu?: ReactNode;
@@ -16,4 +15,4 @@ export interface Footer1177Props extends React.HTMLAttributes<HTMLDivElement> {
16
15
  subFooterMobile?: ReactNode;
17
16
  children?: ReactNode;
18
17
  }
19
- export declare function IDSFooter1177({ headline, srHeadline, subHeadline, cols, col1, col2, col3, subFooterLeft, subFooterRight, mobileMenu, mobileLinks, subFooterMobile, children, className, ...props }: Footer1177Props): import("react/jsx-runtime").JSX.Element;
18
+ export declare function IDSFooter1177({ headline, srHeadline, subHeadline, col1, col2, col3, toggle, subFooterLeft, subFooterRight, mobileMenu, mobileLinks, subFooterMobile, children, className, ...props }: Footer1177Props): import("react/jsx-runtime").JSX.Element;
@@ -2,7 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import clsx from 'clsx';
3
3
  import '@inera/ids-design/components/footer-1177/footer-1177.css';
4
4
 
5
- function IDSFooter1177({ headline = "", srHeadline = "", subHeadline = "", cols = 3, col1 = [], col2 = [], col3 = [], subFooterLeft, subFooterRight, mobileMenu, mobileLinks, subFooterMobile, children, className, ...props }) {
5
+ function IDSFooter1177({ headline = "", srHeadline = "", subHeadline = "", col1, col2, col3, toggle, subFooterLeft, subFooterRight, mobileMenu, mobileLinks, subFooterMobile, children, className, ...props }) {
6
6
  const renderHeadline = () => {
7
7
  if (srHeadline) {
8
8
  return (jsxs(Fragment, { children: [jsxs("h2", { className: "ids-footer-1177__headline--sr", children: [srHeadline, jsx("span", { className: "ids-footer-1177__headline--sub", children: subHeadline })] }), jsxs("h2", { "aria-hidden": "true", className: "ids-footer-1177__headline", children: [headline, jsx("span", { className: "ids-footer-1177__headline--sub", children: subHeadline })] })] }));
@@ -10,15 +10,18 @@ function IDSFooter1177({ headline = "", srHeadline = "", subHeadline = "", cols
10
10
  return (jsxs("h2", { className: "ids-footer-1177__headline", children: [headline, jsx("span", { className: "ids-footer-1177__headline--sub", children: subHeadline })] }));
11
11
  };
12
12
  const renderCols = () => {
13
- if (cols === 1) {
13
+ if (!!col1 && !col2 && !col3) {
14
14
  return jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--100"), children: col1 });
15
15
  }
16
- if (cols === 2) {
16
+ if (!!col1 && !!col2 && !col3) {
17
17
  return (jsxs(Fragment, { children: [jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--50"), children: col1 }), jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--50"), children: col2 })] }));
18
18
  }
19
- return (jsxs(Fragment, { children: [jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--33"), children: col1 }), jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--33"), children: col2 }), jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--33"), children: col3 })] }));
19
+ else if (!!col1 && !!col2 && !!col3) {
20
+ return (jsxs(Fragment, { children: [jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--33"), children: col1 }), jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--33"), children: col2 }), jsx("div", { className: clsx("ids-footer-1177__link-col", "ids-footer-1177__link-col--33"), children: col3 })] }));
21
+ }
22
+ return null;
20
23
  };
21
- return (jsxs("footer", { className: clsx("ids-footer-1177", className), ...props, children: [jsx("div", { className: "ids-footer-1177__inner-wrapper", children: jsxs("div", { className: "ids-footer-1177__inner", children: [jsx("div", { className: "ids-footer-1177__headline-wrapper", children: renderHeadline() }), jsxs("div", { className: "ids-footer-1177__content", children: [jsx("div", { className: "ids-footer-1177__text", children: children }), jsx("div", { className: "ids-footer-1177__cols", children: renderCols() })] })] }) }), jsx("div", { className: "ids-footer-1177__mobile-menu", children: mobileMenu }), jsxs("div", { className: "ids-footer-1177__sub-footer", children: [jsx("div", { className: "ids-footer-1177__sub-footer-container", children: jsxs("div", { className: "ids-footer-1177__sub-footer-inner", children: [jsx("div", { className: "ids-footer-1177__sub-footer-left", children: subFooterLeft }), jsx("div", { className: "ids-footer-1177__sub-footer-right", children: subFooterRight }), jsx("div", { className: "ids-footer-1177__mobile-links", children: mobileLinks })] }) }), jsx("div", { className: "ids-footer-1177__sub-footer-mobile", children: jsx("div", { className: "ids-footer-1177__sub-footer-mobile-text", children: subFooterMobile }) })] })] }));
24
+ return (jsxs("footer", { className: clsx("ids-footer-1177", className), ...props, children: [jsx("div", { className: "ids-footer-1177__inner-wrapper", children: jsxs("div", { className: "ids-footer-1177__inner", children: [jsx("div", { className: "ids-footer-1177__headline-wrapper", children: renderHeadline() }), jsxs("div", { className: "ids-footer-1177__content", children: [jsxs("div", { className: "ids-footer-1177__text", children: [children, toggle && jsx("div", { className: "ids-footer-1177__darkmode-toggle", children: toggle })] }), jsx("div", { className: "ids-footer-1177__cols", children: renderCols() })] })] }) }), jsx("div", { className: "ids-footer-1177__mobile-menu", children: mobileMenu }), jsxs("div", { className: "ids-footer-1177__sub-footer", children: [jsx("div", { className: "ids-footer-1177__sub-footer-container", children: jsxs("div", { className: "ids-footer-1177__sub-footer-inner", children: [jsx("div", { className: "ids-footer-1177__sub-footer-left", children: subFooterLeft }), jsx("div", { className: "ids-footer-1177__sub-footer-right", children: subFooterRight }), jsx("div", { className: "ids-footer-1177__mobile-links", children: mobileLinks })] }) }), jsx("div", { className: "ids-footer-1177__sub-footer-mobile", children: jsx("div", { className: "ids-footer-1177__sub-footer-mobile-text", children: subFooterMobile }) })] })] }));
22
25
  }
23
26
 
24
27
  export { IDSFooter1177 };
@@ -1,13 +1,12 @@
1
- import React, { ReactElement, ReactNode } from "react";
2
- import { IDSLinkProps } from "../link/link";
1
+ import React, { ReactNode } from "react";
3
2
  import "@inera/ids-design/components/footer-1177-admin/footer-1177-admin.css";
4
3
  interface Footer1177AdminProps extends React.HTMLAttributes<HTMLDivElement> {
5
4
  headline?: string;
5
+ toggle?: ReactNode;
6
6
  srHeadline?: string;
7
- cols?: 1 | 2 | 3;
8
- col1?: ReactElement<IDSLinkProps>[];
9
- col2?: ReactElement<IDSLinkProps>[];
10
- col3?: ReactElement<IDSLinkProps>[];
7
+ col1?: ReactNode;
8
+ col2?: ReactNode;
9
+ col3?: ReactNode;
11
10
  subFooterLeft?: ReactNode;
12
11
  subFooterRight?: ReactNode;
13
12
  mobileMenu?: ReactNode;
@@ -15,5 +14,5 @@ interface Footer1177AdminProps extends React.HTMLAttributes<HTMLDivElement> {
15
14
  subFooterMobile?: ReactNode;
16
15
  children?: ReactNode;
17
16
  }
18
- export declare const IDSFooter1177Admin: React.FC<Footer1177AdminProps>;
17
+ export declare function IDSFooter1177Admin({ headline, srHeadline, col1, col2, col3, toggle, subFooterLeft, subFooterRight, mobileMenu, mobileLinks, subFooterMobile, children, className, ...props }: Footer1177AdminProps): import("react/jsx-runtime").JSX.Element;
19
18
  export {};