@otto-de/b2b-core-components 1.33.0 → 1.35.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 (315) hide show
  1. package/dist/b2b-core-components/b2b-core-components.esm.js +1 -1
  2. package/dist/b2b-core-components/{p-28a06853.entry.js → p-04ac661d.entry.js} +1 -1
  3. package/dist/b2b-core-components/{p-57842105.entry.js → p-04f5748b.entry.js} +1 -1
  4. package/dist/b2b-core-components/{p-2d625559.entry.js → p-0648230f.entry.js} +1 -1
  5. package/dist/b2b-core-components/{p-0bd177d4.entry.js → p-0aa0c59a.entry.js} +1 -1
  6. package/dist/b2b-core-components/{p-7df12ddf.entry.js → p-0ab41eb5.entry.js} +1 -1
  7. package/dist/b2b-core-components/{p-bf9c8817.entry.js → p-17778cfc.entry.js} +1 -1
  8. package/dist/b2b-core-components/{p-26755654.entry.js → p-18bb4d69.entry.js} +1 -1
  9. package/dist/b2b-core-components/p-1af4d133.entry.js +1 -0
  10. package/dist/b2b-core-components/{p-e7590b6e.entry.js → p-21644e6c.entry.js} +1 -1
  11. package/dist/b2b-core-components/{p-6749d668.entry.js → p-23af5193.entry.js} +1 -1
  12. package/dist/b2b-core-components/{p-fc431bbe.entry.js → p-2486830b.entry.js} +1 -1
  13. package/dist/b2b-core-components/p-2488ef54.entry.js +1 -0
  14. package/dist/b2b-core-components/{p-6abfdb73.entry.js → p-260dcc05.entry.js} +1 -1
  15. package/dist/b2b-core-components/p-3c3edafd.entry.js +1 -0
  16. package/dist/b2b-core-components/p-3d8e14e6.entry.js +1 -0
  17. package/dist/b2b-core-components/{p-092855b3.entry.js → p-419de188.entry.js} +1 -1
  18. package/dist/b2b-core-components/{p-521303c4.entry.js → p-433a3f3e.entry.js} +1 -1
  19. package/dist/b2b-core-components/{p-fb0338a8.entry.js → p-4b27240b.entry.js} +1 -1
  20. package/dist/b2b-core-components/p-4e0ed246.entry.js +1 -0
  21. package/dist/b2b-core-components/p-5f3ba5e6.js +1 -0
  22. package/dist/b2b-core-components/{p-0322b052.entry.js → p-670e355a.entry.js} +1 -1
  23. package/dist/b2b-core-components/{p-e2518c43.entry.js → p-7889e94a.entry.js} +1 -1
  24. package/dist/b2b-core-components/{p-db92de92.entry.js → p-79a01d0d.entry.js} +1 -1
  25. package/dist/b2b-core-components/p-89e817e9.entry.js +1 -0
  26. package/dist/b2b-core-components/{p-797c85c2.entry.js → p-8cb6813a.entry.js} +1 -1
  27. package/dist/b2b-core-components/{p-16872771.entry.js → p-997a232e.entry.js} +1 -1
  28. package/dist/b2b-core-components/{p-2daee203.entry.js → p-a46674a7.entry.js} +1 -1
  29. package/dist/b2b-core-components/{p-848e4af7.entry.js → p-a9c9552f.entry.js} +1 -1
  30. package/dist/b2b-core-components/p-abcbd1cc.entry.js +1 -0
  31. package/dist/b2b-core-components/p-ae7a752e.entry.js +1 -0
  32. package/dist/b2b-core-components/{p-1abe3f2f.entry.js → p-b175fb79.entry.js} +1 -1
  33. package/dist/b2b-core-components/{p-bade1cab.entry.js → p-b4310b58.entry.js} +1 -1
  34. package/dist/b2b-core-components/p-b481eb09.entry.js +1 -0
  35. package/dist/b2b-core-components/{p-40371f89.entry.js → p-b9a6ad5d.entry.js} +1 -1
  36. package/dist/b2b-core-components/{p-01f46118.entry.js → p-c086532b.entry.js} +1 -1
  37. package/dist/b2b-core-components/{p-58e9953b.entry.js → p-c25832e1.entry.js} +1 -1
  38. package/dist/b2b-core-components/p-c430b5ba.entry.js +1 -0
  39. package/dist/b2b-core-components/{p-76573f9f.entry.js → p-c8b5c7e2.entry.js} +1 -1
  40. package/dist/b2b-core-components/{p-190a7350.entry.js → p-c8cc1797.entry.js} +1 -1
  41. package/dist/b2b-core-components/{p-ed5c6006.entry.js → p-d163d252.entry.js} +1 -1
  42. package/dist/b2b-core-components/{p-dcef84a5.entry.js → p-d2f4db88.entry.js} +1 -1
  43. package/dist/b2b-core-components/{p-fedefca2.entry.js → p-d62e615b.entry.js} +1 -1
  44. package/dist/b2b-core-components/p-d97a7119.entry.js +1 -0
  45. package/dist/b2b-core-components/{p-ff6a0874.entry.js → p-dcaff8ab.entry.js} +1 -1
  46. package/dist/b2b-core-components/p-dff37884.entry.js +1 -0
  47. package/dist/b2b-core-components/{p-b1191aa7.entry.js → p-e3877fc1.entry.js} +1 -1
  48. package/dist/b2b-core-components/p-e8151556.entry.js +1 -0
  49. package/dist/b2b-core-components/{p-3a088f2b.entry.js → p-f3c0fe56.entry.js} +1 -1
  50. package/dist/b2b-core-components/{p-840dd6cd.entry.js → p-f4f20944.entry.js} +1 -1
  51. package/dist/b2b-core-components/{p-ef598009.entry.js → p-f9f9820a.entry.js} +1 -1
  52. package/dist/cjs/b2b-button_2.cjs.entry.js +1 -1
  53. package/dist/cjs/b2b-chip-component_2.cjs.entry.js +2 -2
  54. package/dist/cjs/b2b-core-components.cjs.js +1 -1
  55. package/dist/cjs/b2b-custom-dropdown.cjs.entry.js +9 -5
  56. package/dist/cjs/{b2b-date-picker-days_5.cjs.entry.js → b2b-date-picker-days-header_4.cjs.entry.js} +0 -174
  57. package/dist/cjs/b2b-date-picker-days.cjs.entry.js +180 -0
  58. package/dist/cjs/b2b-date-picker.cjs.entry.js +1 -1
  59. package/dist/cjs/b2b-date-range-picker-days_2.cjs.entry.js +201 -0
  60. package/dist/cjs/b2b-date-range-picker.cjs.entry.js +159 -0
  61. package/dist/cjs/b2b-dropdown.cjs.entry.js +53 -26
  62. package/dist/cjs/b2b-flyout-menu-option.cjs.entry.js +1 -1
  63. package/dist/cjs/b2b-flyout-menu.cjs.entry.js +3 -3
  64. package/dist/cjs/b2b-grid-col.cjs.entry.js +1 -1
  65. package/dist/cjs/b2b-grid-row.cjs.entry.js +2 -2
  66. package/dist/cjs/b2b-grid.cjs.entry.js +1 -1
  67. package/dist/cjs/b2b-icon-100.cjs.entry.js +0 -1
  68. package/dist/cjs/b2b-input-group_2.cjs.entry.js +3 -3
  69. package/dist/cjs/b2b-input-label.cjs.entry.js +2 -2
  70. package/dist/cjs/b2b-input_2.cjs.entry.js +5 -5
  71. package/dist/cjs/b2b-label.cjs.entry.js +2 -2
  72. package/dist/cjs/b2b-modal.cjs.entry.js +2 -2
  73. package/dist/cjs/b2b-multiselect-dropdown.cjs.entry.js +3 -3
  74. package/dist/cjs/b2b-pagination.cjs.entry.js +1 -1
  75. package/dist/cjs/b2b-progress-bar.cjs.entry.js +3 -3
  76. package/dist/cjs/b2b-radio-button.cjs.entry.js +2 -2
  77. package/dist/cjs/b2b-radio-group.cjs.entry.js +2 -2
  78. package/dist/cjs/b2b-required-separator.cjs.entry.js +1 -1
  79. package/dist/cjs/b2b-rounded-icon.cjs.entry.js +4 -4
  80. package/dist/cjs/b2b-scrollable-container.cjs.entry.js +1 -1
  81. package/dist/cjs/b2b-search.cjs.entry.js +1 -1
  82. package/dist/cjs/b2b-separator.cjs.entry.js +1 -1
  83. package/dist/cjs/b2b-shimmer.cjs.entry.js +1 -1
  84. package/dist/cjs/b2b-snackbar.cjs.entry.js +4 -4
  85. package/dist/cjs/b2b-tab-group.cjs.entry.js +1 -1
  86. package/dist/cjs/b2b-tab-panel.cjs.entry.js +1 -1
  87. package/dist/cjs/b2b-tab.cjs.entry.js +2 -2
  88. package/dist/cjs/b2b-table-cell_2.cjs.entry.js +3 -3
  89. package/dist/cjs/b2b-table-row.cjs.entry.js +2 -2
  90. package/dist/cjs/b2b-table-rowgroup.cjs.entry.js +2 -2
  91. package/dist/cjs/b2b-table.cjs.entry.js +2 -2
  92. package/dist/cjs/b2b-textarea.cjs.entry.js +2 -2
  93. package/dist/cjs/b2b-time-picker.cjs.entry.js +157 -0
  94. package/dist/cjs/b2b-toggle-button.cjs.entry.js +3 -3
  95. package/dist/cjs/b2b-toggle-chip.cjs.entry.js +3 -3
  96. package/dist/cjs/b2b-toggle-group.cjs.entry.js +2 -2
  97. package/dist/cjs/b2b-toggle-switch.cjs.entry.js +5 -5
  98. package/dist/cjs/b2b-tooltip.cjs.entry.js +3 -3
  99. package/dist/cjs/b2b-wizard-icon.cjs.entry.js +1 -1
  100. package/dist/cjs/b2b-wizard-step.cjs.entry.js +2 -2
  101. package/dist/cjs/b2b-wizard.cjs.entry.js +1 -1
  102. package/dist/cjs/date-range-picker-utils-f4b4f5bf.js +135 -0
  103. package/dist/cjs/index-668808fd.js +18 -6
  104. package/dist/cjs/loader.cjs.js +1 -1
  105. package/dist/collection/collection-manifest.json +4 -1
  106. package/dist/collection/components/custom-dropdown/custom-dropdown.css +13 -1
  107. package/dist/collection/components/custom-dropdown/custom-dropdown.e2e.js +69 -0
  108. package/dist/collection/components/custom-dropdown/custom-dropdown.js +26 -4
  109. package/dist/collection/components/custom-dropdown/custom-dropdown.stories.js +11 -0
  110. package/dist/collection/components/date-picker/date-picker.css +1 -1
  111. package/dist/collection/components/date-picker/date-picker.js +2 -2
  112. package/dist/collection/components/date-range-picker/date-range-picker-days.css +280 -0
  113. package/dist/collection/components/date-range-picker/date-range-picker-days.e2e.js +19 -0
  114. package/dist/collection/components/date-range-picker/date-range-picker-days.js +349 -0
  115. package/dist/collection/components/date-range-picker/date-range-picker-utils.js +126 -0
  116. package/dist/collection/components/date-range-picker/date-range-picker-utils.spec.js +189 -0
  117. package/dist/collection/components/date-range-picker/date-range-picker.css +327 -0
  118. package/dist/collection/components/date-range-picker/date-range-picker.e2e.js +45 -0
  119. package/dist/collection/components/date-range-picker/date-range-picker.js +466 -0
  120. package/dist/collection/components/date-range-picker/date-range-picker.spec.js +18 -0
  121. package/dist/collection/components/date-range-picker/date-range-picker.stories.js +131 -0
  122. package/dist/collection/components/dropdown/dropdown.js +55 -27
  123. package/dist/collection/components/flyout-menu/flyout-menu-option.js +1 -1
  124. package/dist/collection/components/flyout-menu/flyout-menu.js +3 -3
  125. package/dist/collection/components/grid/column.js +1 -1
  126. package/dist/collection/components/grid/grid.js +1 -1
  127. package/dist/collection/components/grid/row.js +2 -2
  128. package/dist/collection/components/icon-100/icon-100.stories.js +1 -1
  129. package/dist/collection/components/icon-100/types.js +0 -1
  130. package/dist/collection/components/input/input.js +4 -4
  131. package/dist/collection/components/input-group/input-group.js +1 -1
  132. package/dist/collection/components/input-label/input-label.js +2 -2
  133. package/dist/collection/components/input-list/input-list-option.js +1 -1
  134. package/dist/collection/components/input-list/input-list.js +2 -2
  135. package/dist/collection/components/label/label.js +2 -2
  136. package/dist/collection/components/modal/modal.js +2 -2
  137. package/dist/collection/components/multiselect-dropdown/multiselect-dropdown.js +3 -3
  138. package/dist/collection/components/multiselect-dropdown/multiselect-option/multiselect-option.js +2 -2
  139. package/dist/collection/components/pagination/pagination.js +1 -1
  140. package/dist/collection/components/paragraph/paragraph.js +2 -2
  141. package/dist/collection/components/progress-bar/progress-bar.js +3 -3
  142. package/dist/collection/components/radio/radio.js +2 -2
  143. package/dist/collection/components/radio-group/radio-group.js +2 -2
  144. package/dist/collection/components/required-separator/required-separator.js +1 -1
  145. package/dist/collection/components/rounded-icon/rounded-icon.js +4 -4
  146. package/dist/collection/components/scrollable-container/scrollable-container.js +1 -1
  147. package/dist/collection/components/search/search.js +1 -1
  148. package/dist/collection/components/separator/separator.js +1 -1
  149. package/dist/collection/components/shimmer/shimmer.js +1 -1
  150. package/dist/collection/components/snackbar/snackbar.js +5 -5
  151. package/dist/collection/components/spinner/spinner.js +1 -1
  152. package/dist/collection/components/tab/tab.js +2 -2
  153. package/dist/collection/components/tab-group/tab-group.js +1 -1
  154. package/dist/collection/components/tab-panel/tab-panel.js +1 -1
  155. package/dist/collection/components/table/table-cell/table-cell.js +2 -2
  156. package/dist/collection/components/table/table-header/table-header.js +1 -1
  157. package/dist/collection/components/table/table-row/table-row.js +2 -2
  158. package/dist/collection/components/table/table-rowgroup/table-rowgroup.js +2 -2
  159. package/dist/collection/components/table/table.js +2 -2
  160. package/dist/collection/components/textarea/textarea.js +2 -2
  161. package/dist/collection/components/time-picker/time-picker.css +345 -0
  162. package/dist/collection/components/time-picker/time-picker.e2e.js +135 -0
  163. package/dist/collection/components/time-picker/time-picker.js +411 -0
  164. package/dist/collection/components/time-picker/time-picker.stories.js +80 -0
  165. package/dist/collection/components/toggle-button/toggle-button.js +3 -3
  166. package/dist/collection/components/toggle-chip/toggle-chip.js +3 -3
  167. package/dist/collection/components/toggle-group/toggle-group.js +2 -2
  168. package/dist/collection/components/toggle-switch/toggle-switch.css +1 -1
  169. package/dist/collection/components/toggle-switch/toggle-switch.js +4 -4
  170. package/dist/collection/components/toggle-switch/toggle-switch.stories.js +15 -9
  171. package/dist/collection/components/tooltip/tooltip.js +3 -3
  172. package/dist/collection/components/wizard/wizard-step.js +2 -2
  173. package/dist/collection/components/wizard/wizard.js +1 -1
  174. package/dist/collection/components/wizard-icon/wizard-icon.js +1 -1
  175. package/dist/collection/docs/config/utils.js +10 -7
  176. package/dist/components/b2b-custom-dropdown.js +10 -5
  177. package/dist/components/b2b-date-picker.js +1 -1
  178. package/dist/components/b2b-date-range-picker-days.d.ts +11 -0
  179. package/dist/components/b2b-date-range-picker-days.js +6 -0
  180. package/dist/components/b2b-date-range-picker.d.ts +11 -0
  181. package/dist/components/b2b-date-range-picker.js +246 -0
  182. package/dist/components/b2b-dropdown.js +54 -26
  183. package/dist/components/b2b-flyout-menu-option.js +1 -1
  184. package/dist/components/b2b-flyout-menu.js +3 -3
  185. package/dist/components/b2b-grid-col.js +1 -1
  186. package/dist/components/b2b-grid-row.js +2 -2
  187. package/dist/components/b2b-grid.js +1 -1
  188. package/dist/components/b2b-label.js +2 -2
  189. package/dist/components/b2b-modal.js +2 -2
  190. package/dist/components/b2b-multiselect-dropdown.js +3 -3
  191. package/dist/components/b2b-pagination.js +1 -1
  192. package/dist/components/b2b-paragraph.js +1 -51
  193. package/dist/components/b2b-progress-bar.js +3 -3
  194. package/dist/components/b2b-radio-button.js +2 -2
  195. package/dist/components/b2b-radio-group.js +2 -2
  196. package/dist/components/b2b-required-separator.js +1 -1
  197. package/dist/components/b2b-scrollable-container.js +1 -1
  198. package/dist/components/b2b-search.js +1 -1
  199. package/dist/components/b2b-shimmer.js +1 -1
  200. package/dist/components/b2b-snackbar.js +4 -4
  201. package/dist/components/b2b-tab-group.js +1 -1
  202. package/dist/components/b2b-tab-panel.js +1 -1
  203. package/dist/components/b2b-tab.js +2 -2
  204. package/dist/components/b2b-table-row.js +2 -2
  205. package/dist/components/b2b-table-rowgroup.js +2 -2
  206. package/dist/components/b2b-table.js +2 -2
  207. package/dist/components/b2b-textarea.js +2 -2
  208. package/dist/components/b2b-time-picker.d.ts +11 -0
  209. package/dist/components/b2b-time-picker.js +200 -0
  210. package/dist/components/b2b-toggle-button.js +3 -3
  211. package/dist/components/b2b-toggle-chip.js +3 -3
  212. package/dist/components/b2b-toggle-group.js +2 -2
  213. package/dist/components/b2b-toggle-switch.js +5 -5
  214. package/dist/components/b2b-tooltip.js +3 -3
  215. package/dist/components/b2b-wizard-step.js +2 -2
  216. package/dist/components/b2b-wizard.js +1 -1
  217. package/dist/components/date-range-picker-days.js +316 -0
  218. package/dist/components/icon-100.js +0 -1
  219. package/dist/components/input-group.js +1 -1
  220. package/dist/components/input-label.js +2 -2
  221. package/dist/components/input-list-option.js +1 -1
  222. package/dist/components/input-list.js +2 -2
  223. package/dist/components/input.js +4 -4
  224. package/dist/components/multiselect-option.js +2 -2
  225. package/dist/{cjs/b2b-paragraph.cjs.entry.js → components/paragraph.js} +31 -13
  226. package/dist/components/rounded-icon.js +4 -4
  227. package/dist/components/separator.js +1 -1
  228. package/dist/components/spinner.js +1 -1
  229. package/dist/components/table-cell.js +2 -2
  230. package/dist/components/table-header.js +1 -1
  231. package/dist/components/wizard-icon.js +1 -1
  232. package/dist/custom-elements.json +126 -0
  233. package/dist/esm/b2b-button_2.entry.js +1 -1
  234. package/dist/esm/b2b-chip-component_2.entry.js +2 -2
  235. package/dist/esm/b2b-core-components.js +1 -1
  236. package/dist/esm/b2b-custom-dropdown.entry.js +9 -5
  237. package/dist/esm/{b2b-date-picker-days_5.entry.js → b2b-date-picker-days-header_4.entry.js} +2 -175
  238. package/dist/esm/b2b-date-picker-days.entry.js +176 -0
  239. package/dist/esm/b2b-date-picker.entry.js +1 -1
  240. package/dist/esm/b2b-date-range-picker-days_2.entry.js +196 -0
  241. package/dist/esm/b2b-date-range-picker.entry.js +155 -0
  242. package/dist/esm/b2b-dropdown.entry.js +53 -26
  243. package/dist/esm/b2b-flyout-menu-option.entry.js +1 -1
  244. package/dist/esm/b2b-flyout-menu.entry.js +3 -3
  245. package/dist/esm/b2b-grid-col.entry.js +1 -1
  246. package/dist/esm/b2b-grid-row.entry.js +2 -2
  247. package/dist/esm/b2b-grid.entry.js +1 -1
  248. package/dist/esm/b2b-icon-100.entry.js +0 -1
  249. package/dist/esm/b2b-input-group_2.entry.js +3 -3
  250. package/dist/esm/b2b-input-label.entry.js +2 -2
  251. package/dist/esm/b2b-input_2.entry.js +5 -5
  252. package/dist/esm/b2b-label.entry.js +2 -2
  253. package/dist/esm/b2b-modal.entry.js +2 -2
  254. package/dist/esm/b2b-multiselect-dropdown.entry.js +3 -3
  255. package/dist/esm/b2b-pagination.entry.js +1 -1
  256. package/dist/esm/b2b-progress-bar.entry.js +3 -3
  257. package/dist/esm/b2b-radio-button.entry.js +2 -2
  258. package/dist/esm/b2b-radio-group.entry.js +2 -2
  259. package/dist/esm/b2b-required-separator.entry.js +1 -1
  260. package/dist/esm/b2b-rounded-icon.entry.js +4 -4
  261. package/dist/esm/b2b-scrollable-container.entry.js +1 -1
  262. package/dist/esm/b2b-search.entry.js +1 -1
  263. package/dist/esm/b2b-separator.entry.js +1 -1
  264. package/dist/esm/b2b-shimmer.entry.js +1 -1
  265. package/dist/esm/b2b-snackbar.entry.js +4 -4
  266. package/dist/esm/b2b-tab-group.entry.js +1 -1
  267. package/dist/esm/b2b-tab-panel.entry.js +1 -1
  268. package/dist/esm/b2b-tab.entry.js +2 -2
  269. package/dist/esm/b2b-table-cell_2.entry.js +3 -3
  270. package/dist/esm/b2b-table-row.entry.js +2 -2
  271. package/dist/esm/b2b-table-rowgroup.entry.js +2 -2
  272. package/dist/esm/b2b-table.entry.js +2 -2
  273. package/dist/esm/b2b-textarea.entry.js +2 -2
  274. package/dist/esm/b2b-time-picker.entry.js +153 -0
  275. package/dist/esm/b2b-toggle-button.entry.js +3 -3
  276. package/dist/esm/b2b-toggle-chip.entry.js +3 -3
  277. package/dist/esm/b2b-toggle-group.entry.js +2 -2
  278. package/dist/esm/b2b-toggle-switch.entry.js +5 -5
  279. package/dist/esm/b2b-tooltip.entry.js +3 -3
  280. package/dist/esm/b2b-wizard-icon.entry.js +1 -1
  281. package/dist/esm/b2b-wizard-step.entry.js +2 -2
  282. package/dist/esm/b2b-wizard.entry.js +1 -1
  283. package/dist/esm/date-range-picker-utils-92a5fb50.js +128 -0
  284. package/dist/esm/index-ab9eb36d.js +18 -6
  285. package/dist/esm/loader.js +1 -1
  286. package/dist/types/components/custom-dropdown/custom-dropdown.d.ts +2 -0
  287. package/dist/types/components/custom-dropdown/custom-dropdown.stories.d.ts +3 -0
  288. package/dist/types/components/date-range-picker/date-range-picker-days.d.ts +57 -0
  289. package/dist/types/components/date-range-picker/date-range-picker-utils.d.ts +58 -0
  290. package/dist/types/components/date-range-picker/date-range-picker.d.ts +89 -0
  291. package/dist/types/components/date-range-picker/date-range-picker.stories.d.ts +23 -0
  292. package/dist/types/components/dropdown/dropdown.d.ts +3 -2
  293. package/dist/types/components/icon-100/types.d.ts +1 -1
  294. package/dist/types/components/snackbar/snackbar.d.ts +2 -2
  295. package/dist/types/components/time-picker/time-picker.d.ts +50 -0
  296. package/dist/types/components/time-picker/time-picker.stories.d.ts +10 -0
  297. package/dist/types/components/toggle-switch/toggle-switch.stories.d.ts +16 -4
  298. package/dist/types/components.d.ts +338 -2
  299. package/dist/types/docs/config/utils.d.ts +14 -0
  300. package/dist/types/utils/interfaces/form.interface.d.ts +6 -2
  301. package/dist/web-types.json +357 -3
  302. package/package.json +2 -2
  303. package/dist/b2b-core-components/icons-100/b2b_icon-cosmetics.png +0 -0
  304. package/dist/b2b-core-components/p-15df2a47.entry.js +0 -1
  305. package/dist/b2b-core-components/p-1d6f73dd.entry.js +0 -1
  306. package/dist/b2b-core-components/p-24c6aa56.entry.js +0 -1
  307. package/dist/b2b-core-components/p-3369f3c0.entry.js +0 -1
  308. package/dist/b2b-core-components/p-67484ecc.entry.js +0 -1
  309. package/dist/b2b-core-components/p-6d64a994.entry.js +0 -1
  310. package/dist/b2b-core-components/p-76bf79ec.entry.js +0 -1
  311. package/dist/b2b-core-components/p-82a2809e.entry.js +0 -1
  312. package/dist/b2b-core-components/p-917a7f00.entry.js +0 -1
  313. package/dist/b2b-core-components/p-d88113f5.entry.js +0 -1
  314. package/dist/collection/components/icon-100/icons-100/b2b_icon-cosmetics.png +0 -0
  315. package/dist/esm/b2b-paragraph.entry.js +0 -31
@@ -0,0 +1,19 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ describe('B2B-Date-Range-Picker-Days', () => {
3
+ let page;
4
+ beforeEach(async () => {
5
+ page = await newE2EPage();
6
+ });
7
+ it('should emit the clicked date', async () => {
8
+ await page.setContent(`<b2b-date-range-picker-days viewed-date="01.01.2025"></b2b-date-range-picker-days>`);
9
+ await page.waitForChanges();
10
+ const dateSelectedSpy = await page.spyOnEvent('b2b-date-selected');
11
+ const dayComponent = await page.find('b2b-date-range-picker-days >>> .b2b-date-range-picker-day');
12
+ await dayComponent.click();
13
+ page.waitForChanges();
14
+ expect(dateSelectedSpy).toHaveReceivedEvent();
15
+ expect(dateSelectedSpy).toHaveReceivedEventDetail({
16
+ selectedDate: new Date(2025, 0, 1).toISOString(), // Must be a string due to node-to-browser "serialization"
17
+ });
18
+ });
19
+ });
@@ -0,0 +1,349 @@
1
+ import { h, Host, } from "@stencil/core";
2
+ import { dateAsNumber, splitDate } from "./date-range-picker-utils";
3
+ const keys = {
4
+ ARROW_UP: 'ArrowUp',
5
+ ARROW_DOWN: 'ArrowDown',
6
+ ARROW_RIGHT: 'ArrowRight',
7
+ ARROW_LEFT: 'ArrowLeft',
8
+ ESC: 'Escape',
9
+ ENTER: 'Enter',
10
+ };
11
+ export class B2bDatePickerDays {
12
+ constructor() {
13
+ this.getAllDates = () => {
14
+ return Array.from(this.host.shadowRoot.querySelectorAll('.b2b-date-range-picker-day'));
15
+ };
16
+ this.focusCurrentDate = (date) => {
17
+ const dates = this.getAllDates();
18
+ dates.forEach(element => {
19
+ if (date.className.includes('b2b-date-range-picker-day--disabled')) {
20
+ return;
21
+ }
22
+ element.setAttribute('tabindex', element === date ? '0' : '-1');
23
+ });
24
+ if (!date.className.includes('b2b-date-range-picker-day--disabled')) {
25
+ date.focus();
26
+ }
27
+ };
28
+ this.renderDatePickerDays = () => {
29
+ const [year, month] = splitDate(this.viewedDate);
30
+ const day = this.viewedDay;
31
+ const currentNumber = dateAsNumber([year, month, day]);
32
+ const todayNumber = dateAsNumber(new Date());
33
+ const startNumber = dateAsNumber(this.firstDate);
34
+ const endNumber = dateAsNumber(this.secondDate);
35
+ let totalDaysInMonth = new Date(year, month - 1 + 1, // Next month
36
+ 0).getDate();
37
+ let days = [];
38
+ /** Populate the days before the first day of the month with empty divs. */
39
+ let dayOfWeekOffset = (new Date(year, month - 1, 1).getDay() + 6) % 7; // +6 to make Monday the first day of the week
40
+ for (let i = 0; i < dayOfWeekOffset; i++) {
41
+ days.push(h("div", null));
42
+ }
43
+ /** Populate days array with day numbers. */
44
+ for (let i = 1; i <= totalDaysInMonth; i++) {
45
+ let givenDate = [year, month, i];
46
+ const givenDateNumber = dateAsNumber(givenDate);
47
+ const disabled = this.disableDates(i);
48
+ days.push(h("div", { class: {
49
+ 'b2b-date-range-picker-day': true,
50
+ 'b2b-date-range-picker-day--disabled': disabled,
51
+ 'b2b-date-range-picker-day--today': givenDateNumber === todayNumber,
52
+ 'b2b-date-range-picker-day--selected': givenDateNumber === startNumber || givenDateNumber === endNumber,
53
+ 'b2b-date-range-picker-day--start': givenDateNumber === startNumber &&
54
+ endNumber != null &&
55
+ startNumber !== endNumber,
56
+ 'b2b-date-range-picker-day--end': givenDateNumber === endNumber && startNumber !== endNumber,
57
+ 'b2b-date-range-picker-day--preview': endNumber == null || this.preview,
58
+ 'b2b-date-range-picker-day--range': startNumber != null &&
59
+ ((startNumber < givenDateNumber &&
60
+ givenDateNumber < (endNumber !== null && endNumber !== void 0 ? endNumber : currentNumber)) ||
61
+ (startNumber > givenDateNumber &&
62
+ givenDateNumber > (endNumber !== null && endNumber !== void 0 ? endNumber : currentNumber))),
63
+ }, onClick: () => {
64
+ if (!disabled) {
65
+ this.b2bDateSelected.emit({
66
+ selectedDate: new Date(year, month - 1, i),
67
+ });
68
+ }
69
+ }, onMouseEnter: (event) => {
70
+ this.viewedDay = i;
71
+ event.target.focus();
72
+ event.preventDefault();
73
+ }, tabindex: givenDateNumber === currentNumber ? 0 : -1, role: "gridcell", "aria-label": `Date ${i} ${month} ${year}` }, i));
74
+ }
75
+ return days;
76
+ };
77
+ this.viewedDate = new Date();
78
+ this.firstDate = undefined;
79
+ this.secondDate = undefined;
80
+ this.disableDates = () => false;
81
+ this.preview = false;
82
+ this.viewedDay = 0;
83
+ }
84
+ // #endregion
85
+ // #region Logic
86
+ handleKeyDown(event) {
87
+ event.preventDefault();
88
+ const [year, month] = splitDate(this.viewedDate);
89
+ let day = this.viewedDay;
90
+ switch (event.key) {
91
+ case keys.ARROW_LEFT:
92
+ day -= 1;
93
+ break;
94
+ case keys.ARROW_RIGHT:
95
+ day += 1;
96
+ break;
97
+ case keys.ARROW_UP:
98
+ day -= 7;
99
+ break;
100
+ case keys.ARROW_DOWN:
101
+ day += 7;
102
+ break;
103
+ case keys.ENTER:
104
+ if (!this.disableDates(day)) {
105
+ this.b2bDateSelected.emit({
106
+ selectedDate: new Date(year, month - 1, day),
107
+ });
108
+ }
109
+ return;
110
+ case keys.ESC:
111
+ this.b2bDatePickerEscape.emit();
112
+ return;
113
+ default:
114
+ return;
115
+ }
116
+ const dates = this.getAllDates();
117
+ if (day < 1) {
118
+ day = dates.length;
119
+ }
120
+ if (day > dates.length) {
121
+ day = 1;
122
+ }
123
+ if (this.disableDates(day)) {
124
+ return;
125
+ }
126
+ this.viewedDay = day;
127
+ this.focusCurrentDate(dates[day - 1]);
128
+ }
129
+ setFocusOnSelectedDayOrFirstDay() {
130
+ var _a;
131
+ const dates = this.getAllDates();
132
+ if (dates.length > 0) {
133
+ const [currentYear, currentMonth] = splitDate(this.viewedDate);
134
+ const [selectedYear, selectedMonth, selectedDay] = splitDate((_a = this.firstDate) !== null && _a !== void 0 ? _a : new Date());
135
+ if (currentYear == selectedYear &&
136
+ currentMonth == selectedMonth &&
137
+ this.viewedDay === selectedDay) {
138
+ this.focusCurrentDate(dates[this.viewedDay - 1]);
139
+ }
140
+ else {
141
+ this.focusCurrentDate(dates[0]);
142
+ }
143
+ }
144
+ }
145
+ // #endregion
146
+ // #region Component-Hooks
147
+ componentWillLoad() {
148
+ let [, , day] = splitDate(this.viewedDate);
149
+ this.viewedDay = day;
150
+ }
151
+ componentDidLoad() {
152
+ this.setFocusOnSelectedDayOrFirstDay();
153
+ }
154
+ render() {
155
+ return (h(Host, { key: '15def7fc64e3fc1793ab517d3f1a515462d68bdb' }, h("div", { key: 'f072b82124f611ae2e60a43eb7550fa008e52234', class: "b2b-date-range-picker-days" }, this.renderDatePickerDays())));
156
+ }
157
+ static get is() { return "b2b-date-range-picker-days"; }
158
+ static get encapsulation() { return "shadow"; }
159
+ static get originalStyleUrls() {
160
+ return {
161
+ "$": ["date-range-picker-days.scss"]
162
+ };
163
+ }
164
+ static get styleUrls() {
165
+ return {
166
+ "$": ["date-range-picker-days.css"]
167
+ };
168
+ }
169
+ static get properties() {
170
+ return {
171
+ "viewedDate": {
172
+ "type": "string",
173
+ "mutable": false,
174
+ "complexType": {
175
+ "original": "Dateish",
176
+ "resolved": "Date | readonly [number, number, number] | string",
177
+ "references": {
178
+ "Dateish": {
179
+ "location": "import",
180
+ "path": "./date-range-picker-utils",
181
+ "id": "src/components/date-range-picker/date-range-picker-utils.ts::Dateish"
182
+ }
183
+ }
184
+ },
185
+ "required": false,
186
+ "optional": false,
187
+ "docs": {
188
+ "tags": [],
189
+ "text": "The currently shown date (year+month)."
190
+ },
191
+ "attribute": "viewed-date",
192
+ "reflect": false,
193
+ "defaultValue": "new Date()"
194
+ },
195
+ "firstDate": {
196
+ "type": "string",
197
+ "mutable": false,
198
+ "complexType": {
199
+ "original": "Dateish",
200
+ "resolved": "Date | readonly [number, number, number] | string",
201
+ "references": {
202
+ "Dateish": {
203
+ "location": "import",
204
+ "path": "./date-range-picker-utils",
205
+ "id": "src/components/date-range-picker/date-range-picker-utils.ts::Dateish"
206
+ }
207
+ }
208
+ },
209
+ "required": false,
210
+ "optional": true,
211
+ "docs": {
212
+ "tags": [],
213
+ "text": "The first date of the selection.\nThis may be absent if no dates have been selected yet.\nThis is always smaller/earlier than the second date."
214
+ },
215
+ "attribute": "first-date",
216
+ "reflect": false
217
+ },
218
+ "secondDate": {
219
+ "type": "string",
220
+ "mutable": false,
221
+ "complexType": {
222
+ "original": "Dateish",
223
+ "resolved": "Date | readonly [number, number, number] | string",
224
+ "references": {
225
+ "Dateish": {
226
+ "location": "import",
227
+ "path": "./date-range-picker-utils",
228
+ "id": "src/components/date-range-picker/date-range-picker-utils.ts::Dateish"
229
+ }
230
+ }
231
+ },
232
+ "required": false,
233
+ "optional": true,
234
+ "docs": {
235
+ "tags": [],
236
+ "text": "The second date of the selection.\nThis may be absent if none or only one date has been selected yet.\nThis is always bigger/later than the first date."
237
+ },
238
+ "attribute": "second-date",
239
+ "reflect": false
240
+ },
241
+ "disableDates": {
242
+ "type": "unknown",
243
+ "mutable": false,
244
+ "complexType": {
245
+ "original": "(day: number) => boolean",
246
+ "resolved": "(day: number) => boolean",
247
+ "references": {}
248
+ },
249
+ "required": false,
250
+ "optional": false,
251
+ "docs": {
252
+ "tags": [{
253
+ "name": "param",
254
+ "text": "day The day of the month to check (1-indexed)."
255
+ }, {
256
+ "name": "returns",
257
+ "text": "True, if the day should be disabled. False otherwise."
258
+ }, {
259
+ "name": "default",
260
+ "text": "(day) => false"
261
+ }],
262
+ "text": "Function used to determine, whether a day should be disabled e.g. because it is in the past.\nThis is only used for the start and end dates, it is valid to have a disabled day in the range of start and end date."
263
+ },
264
+ "defaultValue": "() => false"
265
+ },
266
+ "preview": {
267
+ "type": "boolean",
268
+ "mutable": false,
269
+ "complexType": {
270
+ "original": "boolean",
271
+ "resolved": "boolean",
272
+ "references": {}
273
+ },
274
+ "required": false,
275
+ "optional": false,
276
+ "docs": {
277
+ "tags": [{
278
+ "name": "default",
279
+ "text": "false"
280
+ }],
281
+ "text": "Whether the shown values are a preview and not the actual values (force-hover state)."
282
+ },
283
+ "attribute": "preview",
284
+ "reflect": false,
285
+ "defaultValue": "false"
286
+ }
287
+ };
288
+ }
289
+ static get states() {
290
+ return {
291
+ "viewedDay": {}
292
+ };
293
+ }
294
+ static get events() {
295
+ return [{
296
+ "method": "b2bDatePickerEscape",
297
+ "name": "b2b-date-picker-escape",
298
+ "bubbles": true,
299
+ "cancelable": true,
300
+ "composed": true,
301
+ "docs": {
302
+ "tags": [],
303
+ "text": "Event emitted on escape press."
304
+ },
305
+ "complexType": {
306
+ "original": "EscapePressed",
307
+ "resolved": "EscapePressed<any>",
308
+ "references": {
309
+ "EscapePressed": {
310
+ "location": "import",
311
+ "path": "../../utils/interfaces/form.interface",
312
+ "id": "src/utils/interfaces/form.interface.d.ts::EscapePressed"
313
+ }
314
+ }
315
+ }
316
+ }, {
317
+ "method": "b2bDateSelected",
318
+ "name": "b2b-date-selected",
319
+ "bubbles": true,
320
+ "cancelable": true,
321
+ "composed": true,
322
+ "docs": {
323
+ "tags": [],
324
+ "text": "Event emitted on selecting date."
325
+ },
326
+ "complexType": {
327
+ "original": "DateSelectedEventDetail",
328
+ "resolved": "DateSelectedEventDetail",
329
+ "references": {
330
+ "DateSelectedEventDetail": {
331
+ "location": "import",
332
+ "path": "../../utils/interfaces/form.interface",
333
+ "id": "src/utils/interfaces/form.interface.d.ts::DateSelectedEventDetail"
334
+ }
335
+ }
336
+ }
337
+ }];
338
+ }
339
+ static get elementRef() { return "host"; }
340
+ static get listeners() {
341
+ return [{
342
+ "name": "keydown",
343
+ "method": "handleKeyDown",
344
+ "target": undefined,
345
+ "capture": false,
346
+ "passive": false
347
+ }];
348
+ }
349
+ }
@@ -0,0 +1,126 @@
1
+ // #region Dateish
2
+ export function splitDate(date) {
3
+ if (date == null) {
4
+ return undefined;
5
+ }
6
+ else if (typeof date === 'string') {
7
+ if (date.includes('T')) {
8
+ try {
9
+ return splitDate(new Date(date));
10
+ }
11
+ catch (_a) {
12
+ throw new Error(`Invalid date: ${date}`);
13
+ }
14
+ }
15
+ const parts = date.split('.').map(Number);
16
+ if (parts.length !== 3) {
17
+ throw new Error(`Invalid date: ${date}`);
18
+ }
19
+ const [day, month, year] = date.split('.').map(Number);
20
+ return [year, month, day];
21
+ }
22
+ else if (isDateTuple(date)) {
23
+ return date;
24
+ }
25
+ else if (date instanceof Date && !Number.isNaN(date.valueOf())) {
26
+ return [date.getFullYear(), date.getMonth() + 1, date.getDate()];
27
+ }
28
+ else {
29
+ throw new Error(`Invalid date: ${date}`);
30
+ }
31
+ }
32
+ export function dateAsNumber(date) {
33
+ if (date == null) {
34
+ return undefined;
35
+ }
36
+ else {
37
+ const [year, month, day] = splitDate(date);
38
+ return year * 10000 + month * 100 + day;
39
+ }
40
+ }
41
+ /**
42
+ * Checks whether the given value is a `DateTuple`.
43
+ * @param value The value to check.
44
+ * @returns True, if the value is a `DateTuple`. False otherwise.
45
+ */
46
+ function isDateTuple(value) {
47
+ return Array.isArray(value) && value.length === 3;
48
+ }
49
+ export function toDate(date) {
50
+ if (date == null) {
51
+ return undefined;
52
+ }
53
+ else {
54
+ const [year, month, day] = splitDate(date);
55
+ return new Date(year, month - 1, day);
56
+ }
57
+ }
58
+ export function toDateString(date, nullDefault) {
59
+ if (date == null) {
60
+ return nullDefault;
61
+ }
62
+ else {
63
+ const [year, month, day] = splitDate(date);
64
+ return `${day.toString().padStart(2, '0')}.${month.toString().padStart(2, '0')}.${year}`;
65
+ }
66
+ }
67
+ /**
68
+ * Checks whether the given dates are exactly equal (down to the ms).
69
+ * @param first The first date to compare.
70
+ * @param second The second date to compare.
71
+ * @returns True, if both values are exactly equal or both nullish. False otherwise.
72
+ */
73
+ function isDateEqual(first, second) {
74
+ return (first === null || first === void 0 ? void 0 : first.valueOf()) === (second === null || second === void 0 ? void 0 : second.valueOf());
75
+ }
76
+ export function toDateRange(range) {
77
+ if (range == null) {
78
+ return undefined;
79
+ }
80
+ else if (typeof range === 'string') {
81
+ try {
82
+ return toDateRange(JSON.parse(range));
83
+ }
84
+ catch (_a) {
85
+ let parts = range.split('-');
86
+ if (parts.length !== 2) {
87
+ parts = range.split(' - ');
88
+ if (parts.length !== 2) {
89
+ throw new Error(`Invalid date range: ${range}`);
90
+ }
91
+ }
92
+ return toDateRange([parts[0], parts[1]]);
93
+ }
94
+ }
95
+ else if (Array.isArray(range) && range.length === 2) {
96
+ const [start, end] = range;
97
+ return [toDate(start), toDate(end)];
98
+ }
99
+ else {
100
+ throw new Error(`Invalid date range: ${range}`);
101
+ }
102
+ }
103
+ export function toDateRangeString(range, nullDefault) {
104
+ if (range == null) {
105
+ return nullDefault;
106
+ }
107
+ else {
108
+ return `${toDateString(range[0], '??.??.????')} - ${toDateString(range[1], '??.??.????')}`;
109
+ }
110
+ }
111
+ /**
112
+ * Checks whether the given date ranges are exactly equal (down to the ms).
113
+ * @param first The first date range to compare.
114
+ * @param second The second date range to compare.
115
+ * @returns True, if both values are exactly equal or both nullish. False otherwise.
116
+ */
117
+ export function isDateRangeEqual(first, second) {
118
+ if (first == null) {
119
+ return second == null;
120
+ }
121
+ else if (second == null) {
122
+ return false;
123
+ }
124
+ return isDateEqual(first[0], second[0]) && isDateEqual(first[1], second[1]);
125
+ }
126
+ // #endregion
@@ -0,0 +1,189 @@
1
+ // #region Dateish
2
+ import { dateAsNumber, isDateRangeEqual, splitDate, toDateRange, toDateRangeString, toDateString, } from "./date-range-picker-utils";
3
+ describe('Dateish', () => {
4
+ describe('splitDate', () => {
5
+ const values = [
6
+ [undefined, undefined],
7
+ [null, undefined],
8
+ [new Date(2025, 0, 1), [2025, 1, 1]],
9
+ [new Date(2025, 0, 1).toISOString(), [2025, 1, 1]],
10
+ ['01.01.2025', [2025, 1, 1]],
11
+ ['1.1.2025', [2025, 1, 1]],
12
+ ['', new Error('Invalid date: ')],
13
+ ['2025-01-01', new Error('Invalid date: 2025-01-01')],
14
+ ];
15
+ it.each(values)('should handle %o', (input, expected) => {
16
+ if (expected === undefined) {
17
+ expect(splitDate(input)).toBeUndefined();
18
+ }
19
+ else if (expected instanceof Error) {
20
+ expect(() => splitDate(input)).toThrow(expected);
21
+ }
22
+ else {
23
+ const actual = splitDate(input);
24
+ expect(actual).toBeDefined();
25
+ expect(Array.isArray(actual)).toBe(true);
26
+ expect(actual).toHaveLength(3);
27
+ expect(actual).toStrictEqual(expected);
28
+ }
29
+ });
30
+ });
31
+ describe('dateAsNumber', () => {
32
+ const values = [
33
+ [undefined, undefined],
34
+ [null, undefined],
35
+ [new Date(2025, 0, 1), 20250101],
36
+ [new Date(2025, 0, 1).toISOString(), 20250101],
37
+ ['01.01.2025', 20250101],
38
+ ['1.1.2025', 20250101],
39
+ ['', new Error('Invalid date: ')],
40
+ ['2025-01-01', new Error('Invalid date: 2025-01-01')],
41
+ ];
42
+ it.each(values)('should handle %o', (input, expected) => {
43
+ if (expected === undefined) {
44
+ expect(dateAsNumber(input)).toBeUndefined();
45
+ }
46
+ else if (expected instanceof Error) {
47
+ expect(() => dateAsNumber(input)).toThrow(expected);
48
+ }
49
+ else {
50
+ expect(dateAsNumber(input)).toBe(expected);
51
+ }
52
+ });
53
+ });
54
+ describe('toDateString', () => {
55
+ const values = [
56
+ [undefined, undefined],
57
+ [null, undefined],
58
+ [new Date(2025, 0, 1), '01.01.2025'],
59
+ [new Date(2025, 0, 1).toISOString(), '01.01.2025'],
60
+ ['01.01.2025', '01.01.2025'],
61
+ ['1.1.2025', '01.01.2025'],
62
+ ['', new Error('Invalid date: ')],
63
+ ['2025-01-01', new Error('Invalid date: 2025-01-01')],
64
+ ];
65
+ it.each(values)('should handle %o', (input, expected) => {
66
+ if (expected === undefined) {
67
+ expect(toDateString(input)).toBeUndefined();
68
+ expect(toDateString(input, 'default')).toBe('default');
69
+ }
70
+ else if (expected instanceof Error) {
71
+ expect(() => toDateString(input)).toThrow(expected);
72
+ expect(() => toDateString(input, 'default')).toThrow(expected);
73
+ }
74
+ else {
75
+ expect(toDateString(input)).toBe(expected);
76
+ expect(toDateString(input, 'default')).toBe(expected);
77
+ }
78
+ });
79
+ });
80
+ });
81
+ // #endregion
82
+ // #region DateRange
83
+ describe('DateRange', () => {
84
+ describe('toDateRange', () => {
85
+ const values = [
86
+ [undefined, undefined],
87
+ [null, undefined],
88
+ [
89
+ [new Date(2025, 0, 1), new Date(2025, 0, 1)],
90
+ [new Date(2025, 0, 1), new Date(2025, 0, 1)],
91
+ ],
92
+ [
93
+ [
94
+ new Date(2025, 0, 1).toISOString(),
95
+ new Date(2025, 0, 1).toISOString(),
96
+ ],
97
+ [new Date(2025, 0, 1), new Date(2025, 0, 1)],
98
+ ],
99
+ [
100
+ ['01.01.2025', '01.01.2025'],
101
+ [new Date(2025, 0, 1), new Date(2025, 0, 1)],
102
+ ],
103
+ [
104
+ ['1.1.2025', '1.1.2025'],
105
+ [new Date(2025, 0, 1), new Date(2025, 0, 1)],
106
+ ],
107
+ ['1.1.2025-1.1.2025', [new Date(2025, 0, 1), new Date(2025, 0, 1)]],
108
+ [
109
+ `${new Date(2025, 0, 1).toISOString()} - ${new Date(2025, 0, 1).toISOString()}`,
110
+ [new Date(2025, 0, 1), new Date(2025, 0, 1)],
111
+ ],
112
+ [
113
+ JSON.stringify([
114
+ new Date(2025, 0, 1).toISOString(),
115
+ new Date(2025, 0, 1).toISOString(),
116
+ ]),
117
+ [new Date(2025, 0, 1), new Date(2025, 0, 1)],
118
+ ],
119
+ ['', new Error('Invalid date range: ')],
120
+ ['2025-01-01', new Error('Invalid date range: 2025-01-01')],
121
+ [
122
+ '2025-01-01-2025-01-01',
123
+ new Error('Invalid date range: 2025-01-01-2025-01-01'),
124
+ ],
125
+ [
126
+ JSON.stringify([
127
+ new Date(Date.UTC(2025, 0, 1)).toISOString(),
128
+ new Date(Date.UTC(2025, 0, 1)).toISOString(),
129
+ new Date(Date.UTC(2025, 0, 1)).toISOString(),
130
+ ]),
131
+ new Error('Invalid date range: ["2025-01-01T00:00:00.000Z","2025-01-01T00:00:00.000Z","2025-01-01T00:00:00.000Z"]'),
132
+ ],
133
+ ];
134
+ it.each(values)('should handle %o', (input, expected) => {
135
+ if (expected === undefined) {
136
+ expect(toDateRange(input)).toBeUndefined();
137
+ }
138
+ else if (expected instanceof Error) {
139
+ expect(() => toDateRange(input)).toThrow(expected);
140
+ }
141
+ else {
142
+ expect(toDateRange(input)).toStrictEqual(expected);
143
+ }
144
+ });
145
+ });
146
+ describe('toDateString', () => {
147
+ const values = [
148
+ [undefined, undefined],
149
+ [null, undefined],
150
+ [[new Date(2025, 0, 1), new Date(2025, 0, 1)], '01.01.2025 - 01.01.2025'],
151
+ ];
152
+ it.each(values)('should handle %o', (input, expected) => {
153
+ if (expected === undefined) {
154
+ expect(toDateRangeString(input)).toBeUndefined();
155
+ expect(toDateRangeString(input, 'default')).toBe('default');
156
+ }
157
+ else if (expected instanceof Error) {
158
+ expect(() => toDateRangeString(input)).toThrow(expected);
159
+ expect(() => toDateRangeString(input, 'default')).toThrow(expected);
160
+ }
161
+ else {
162
+ expect(toDateRangeString(input)).toBe(expected);
163
+ expect(toDateRangeString(input, 'default')).toBe(expected);
164
+ }
165
+ });
166
+ });
167
+ describe('isDateRangeEqual', () => {
168
+ const values = [
169
+ [undefined, undefined, true],
170
+ [null, undefined, true],
171
+ [
172
+ [new Date(2025, 0, 1), new Date(2025, 0, 2)],
173
+ [new Date(2025, 0, 1), new Date(2025, 0, 2)],
174
+ true,
175
+ ],
176
+ [
177
+ [new Date(2025, 0, 1), new Date(2025, 0, 2)],
178
+ [new Date(2025, 0, 1), new Date(2025, 1, 2)],
179
+ false,
180
+ ],
181
+ [[new Date(2025, 0, 1), new Date(2025, 0, 2)], undefined, false],
182
+ ];
183
+ it.each(values)('should handle %o', (first, second, expected) => {
184
+ expect(isDateRangeEqual(first, second)).toBe(expected);
185
+ expect(isDateRangeEqual(second, first)).toBe(expected);
186
+ });
187
+ });
188
+ });
189
+ // #endregion