@ouestfrance/sipa-bms-ui 7.14.1

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 (497) hide show
  1. package/README.md +280 -0
  2. package/dist/assets/animated-icons/AnimatedActivityIcon.vue.d.ts +133 -0
  3. package/dist/assets/animated-icons/AnimatedCircleHelpIcon.vue.d.ts +133 -0
  4. package/dist/assets/animated-icons/AnimatedHomeIcon.vue.d.ts +133 -0
  5. package/dist/components/button/BmsButton.spec.d.ts +1 -0
  6. package/dist/components/button/BmsButton.vue.d.ts +24 -0
  7. package/dist/components/button/BmsIconButton.vue.d.ts +23 -0
  8. package/dist/components/button/UiButton.vue.d.ts +26 -0
  9. package/dist/components/button/UiButtonLink.vue.d.ts +20 -0
  10. package/dist/components/feedback/BmsAlert.vue.d.ts +24 -0
  11. package/dist/components/feedback/BmsBadge.vue.d.ts +18 -0
  12. package/dist/components/feedback/BmsCaption.vue.d.ts +6 -0
  13. package/dist/components/feedback/BmsCircularProgress.spec.d.ts +1 -0
  14. package/dist/components/feedback/BmsCircularProgress.vue.d.ts +6 -0
  15. package/dist/components/feedback/BmsLoader.spec.d.ts +1 -0
  16. package/dist/components/feedback/BmsLoader.vue.d.ts +9 -0
  17. package/dist/components/feedback/BmsTooltip.vue.d.ts +28 -0
  18. package/dist/components/feedback/UiTooltip.spec.d.ts +1 -0
  19. package/dist/components/feedback/UiTooltip.vue.d.ts +27 -0
  20. package/dist/components/feedback/tooltip.helper.d.ts +45 -0
  21. package/dist/components/feedback/tooltip.helper.spec.d.ts +1 -0
  22. package/dist/components/form/BmsAutocomplete.vue.d.ts +31 -0
  23. package/dist/components/form/BmsBetweenInput.vue.d.ts +32 -0
  24. package/dist/components/form/BmsChip.vue.d.ts +15 -0
  25. package/dist/components/form/BmsFilePicker.spec.d.ts +1 -0
  26. package/dist/components/form/BmsFilePicker.vue.d.ts +12 -0
  27. package/dist/components/form/BmsInputBooleanCheckbox.vue.d.ts +30 -0
  28. package/dist/components/form/BmsInputCheckboxCaption.spec.d.ts +1 -0
  29. package/dist/components/form/BmsInputCheckboxCaption.vue.d.ts +31 -0
  30. package/dist/components/form/BmsInputCheckboxCaptionGroup.vue.d.ts +25 -0
  31. package/dist/components/form/BmsInputCheckboxGroup.vue.d.ts +24 -0
  32. package/dist/components/form/BmsInputCode.vue.d.ts +27 -0
  33. package/dist/components/form/BmsInputDateTime.vue.d.ts +24 -0
  34. package/dist/components/form/BmsInputFile.spec.d.ts +1 -0
  35. package/dist/components/form/BmsInputFile.vue.d.ts +27 -0
  36. package/dist/components/form/BmsInputNumber.spec.d.ts +1 -0
  37. package/dist/components/form/BmsInputNumber.vue.d.ts +26 -0
  38. package/dist/components/form/BmsInputRadio.vue.d.ts +28 -0
  39. package/dist/components/form/BmsInputRadioCaption.vue.d.ts +30 -0
  40. package/dist/components/form/BmsInputRadioCaptionGroup.vue.d.ts +30 -0
  41. package/dist/components/form/BmsInputRadioGroup.vue.d.ts +30 -0
  42. package/dist/components/form/BmsInputText.spec.d.ts +1 -0
  43. package/dist/components/form/BmsInputText.vue.d.ts +128 -0
  44. package/dist/components/form/BmsInputToggle.vue.d.ts +15 -0
  45. package/dist/components/form/BmsSearch.spec.d.ts +1 -0
  46. package/dist/components/form/BmsSearch.vue.d.ts +187 -0
  47. package/dist/components/form/BmsSelect.spec.d.ts +1 -0
  48. package/dist/components/form/BmsSelect.vue.d.ts +34 -0
  49. package/dist/components/form/BmsTag.vue.d.ts +25 -0
  50. package/dist/components/form/BmsTextArea.spec.d.ts +1 -0
  51. package/dist/components/form/BmsTextArea.vue.d.ts +26 -0
  52. package/dist/components/form/RawAutocomplete.spec.d.ts +1 -0
  53. package/dist/components/form/RawAutocomplete.vue.d.ts +130 -0
  54. package/dist/components/form/RawInputText.vue.d.ts +42 -0
  55. package/dist/components/form/UiBmsInputCheckbox.vue.d.ts +28 -0
  56. package/dist/components/form/UiBmsSwitch.vue.d.ts +14 -0
  57. package/dist/components/layout/BmsCard.vue.d.ts +21 -0
  58. package/dist/components/layout/BmsContentPageLayout.vue.d.ts +17 -0
  59. package/dist/components/layout/BmsForm.vue.d.ts +7 -0
  60. package/dist/components/layout/BmsHeader.vue.d.ts +9 -0
  61. package/dist/components/layout/BmsHeaderTitle.vue.d.ts +22 -0
  62. package/dist/components/layout/BmsModal.spec.d.ts +1 -0
  63. package/dist/components/layout/BmsModal.vue.d.ts +60 -0
  64. package/dist/components/layout/BmsOverlay.vue.d.ts +13 -0
  65. package/dist/components/layout/BmsSection.vue.d.ts +15 -0
  66. package/dist/components/layout/BmsStep.vue.d.ts +27 -0
  67. package/dist/components/layout/BmsStepper.vue.d.ts +13 -0
  68. package/dist/components/layout/UiPopoverMenu.vue.d.ts +23 -0
  69. package/dist/components/navigation/BmsBackButton.vue.d.ts +13 -0
  70. package/dist/components/navigation/BmsBreadcrumb.vue.d.ts +12 -0
  71. package/dist/components/navigation/BmsLink.spec.d.ts +1 -0
  72. package/dist/components/navigation/BmsLink.vue.d.ts +22 -0
  73. package/dist/components/navigation/BmsMenu.spec.d.ts +1 -0
  74. package/dist/components/navigation/BmsMenu.vue.d.ts +21 -0
  75. package/dist/components/navigation/BmsMenuNav.spec.d.ts +1 -0
  76. package/dist/components/navigation/BmsMenuNav.vue.d.ts +23 -0
  77. package/dist/components/navigation/BmsShortLinkMenu.vue.d.ts +20 -0
  78. package/dist/components/navigation/BmsTabs.vue.d.ts +7 -0
  79. package/dist/components/navigation/BmsTenantSwitcher.vue.d.ts +22 -0
  80. package/dist/components/navigation/UiMenuItem.vue.d.ts +11 -0
  81. package/dist/components/navigation/UiTab.vue.d.ts +15 -0
  82. package/dist/components/navigation/UiTenantImage.vue.d.ts +6 -0
  83. package/dist/components/navigation/UiTenantLabel.vue.d.ts +12 -0
  84. package/dist/components/navigation/UiTenantSwitcher.spec.d.ts +1 -0
  85. package/dist/components/navigation/UiTenantSwitcher.vue.d.ts +189 -0
  86. package/dist/components/table/BmsEmptyScreen.vue.d.ts +6 -0
  87. package/dist/components/table/BmsPagination.spec.d.ts +1 -0
  88. package/dist/components/table/BmsPagination.vue.d.ts +35 -0
  89. package/dist/components/table/BmsServerTable.vue.d.ts +74 -0
  90. package/dist/components/table/BmsTable.spec.d.ts +1 -0
  91. package/dist/components/table/BmsTable.vue.d.ts +53 -0
  92. package/dist/components/table/BmsTableFilters.spec.d.ts +1 -0
  93. package/dist/components/table/BmsTableFilters.vue.d.ts +188 -0
  94. package/dist/components/table/DraggableList.vue.d.ts +26 -0
  95. package/dist/components/table/UiBmsTable.spec.d.ts +1 -0
  96. package/dist/components/table/UiBmsTable.vue.d.ts +66 -0
  97. package/dist/components/table/UiFilterButton.vue.d.ts +13 -0
  98. package/dist/components/utils/BmsCocarde.vue.d.ts +11 -0
  99. package/dist/components/utils/BmsProblem.vue.d.ts +9 -0
  100. package/dist/components/utils/BmsRelativeTime.spec.d.ts +1 -0
  101. package/dist/components/utils/BmsRelativeTime.vue.d.ts +11 -0
  102. package/dist/composables/clipboard.composable.d.ts +3 -0
  103. package/dist/composables/index.d.ts +5 -0
  104. package/dist/composables/pagination.composable.d.ts +14 -0
  105. package/dist/composables/pagination.composable.spec.d.ts +1 -0
  106. package/dist/composables/search.composable.d.ts +52 -0
  107. package/dist/composables/search.composable.spec.d.ts +1 -0
  108. package/dist/composables/search.helper.d.ts +7 -0
  109. package/dist/composables/search.helper.spec.d.ts +1 -0
  110. package/dist/composables/sort.composable.d.ts +10 -0
  111. package/dist/composables/sort.composable.spec.d.ts +1 -0
  112. package/dist/composables/userPref.composable.d.ts +6 -0
  113. package/dist/composables/userPref.composable.spec.d.ts +1 -0
  114. package/dist/favicon.ico +0 -0
  115. package/dist/helpers/cocarde.helper.d.ts +1 -0
  116. package/dist/helpers/cocarde.helper.spec.d.ts +1 -0
  117. package/dist/helpers/date.helper.d.ts +26 -0
  118. package/dist/helpers/date.helper.spec.d.ts +1 -0
  119. package/dist/helpers/file.helper.d.ts +5 -0
  120. package/dist/helpers/file.helper.spec.d.ts +1 -0
  121. package/dist/helpers/index.d.ts +6 -0
  122. package/dist/helpers/location.helper.d.ts +10 -0
  123. package/dist/helpers/location.helper.spec.d.ts +1 -0
  124. package/dist/helpers/problem.helper.d.ts +1 -0
  125. package/dist/helpers/problem.helper.spec.d.ts +1 -0
  126. package/dist/helpers/string.helper.d.ts +9 -0
  127. package/dist/helpers/string.helper.spec.d.ts +1 -0
  128. package/dist/helpers/table.helper.d.ts +16 -0
  129. package/dist/helpers/table.helper.spec.d.ts +1 -0
  130. package/dist/index.d.ts +72 -0
  131. package/dist/logo.png +0 -0
  132. package/dist/main.d.ts +0 -0
  133. package/dist/mockServiceWorker.js +344 -0
  134. package/dist/models/breadcrumb.model.d.ts +5 -0
  135. package/dist/models/caption.model.d.ts +6 -0
  136. package/dist/models/chip.model.d.ts +8 -0
  137. package/dist/models/cocarde.model.d.ts +4 -0
  138. package/dist/models/form.model.d.ts +25 -0
  139. package/dist/models/index.d.ts +14 -0
  140. package/dist/models/menu.model.d.ts +18 -0
  141. package/dist/models/modal.model.d.ts +8 -0
  142. package/dist/models/problem.model.d.ts +14 -0
  143. package/dist/models/sort.model.d.ts +11 -0
  144. package/dist/models/status-type.model.d.ts +7 -0
  145. package/dist/models/tab.model.d.ts +7 -0
  146. package/dist/models/table.model.d.ts +53 -0
  147. package/dist/models/tenant.model.d.ts +7 -0
  148. package/dist/models/tooltip.model.d.ts +6 -0
  149. package/dist/plugins/confirm/index.d.ts +9 -0
  150. package/dist/plugins/feature-flipper/FeatureFlipper.vue.d.ts +9 -0
  151. package/dist/plugins/feature-flipper/FeatureFlipperIndicator.vue.d.ts +6 -0
  152. package/dist/plugins/feature-flipper/FeatureFlipperModal.vue.d.ts +16 -0
  153. package/dist/plugins/feature-flipper/featureFlipper.composable.d.ts +10 -0
  154. package/dist/plugins/feature-flipper/featureFlipper.composable.spec.d.ts +1 -0
  155. package/dist/plugins/feature-flipper/featureFlipper.model.d.ts +3 -0
  156. package/dist/plugins/feature-flipper/index.d.ts +4 -0
  157. package/dist/plugins/field/FieldComponent.spec.d.ts +1 -0
  158. package/dist/plugins/field/FieldComponent.vue.d.ts +25 -0
  159. package/dist/plugins/field/FieldDatalist.vue.d.ts +27 -0
  160. package/dist/plugins/field/index.d.ts +2 -0
  161. package/dist/plugins/keycloak-auth-adapter/index.d.ts +20 -0
  162. package/dist/plugins/notifications/NotificationItem.vue.d.ts +12 -0
  163. package/dist/plugins/notifications/NotificationWidget.vue.d.ts +2 -0
  164. package/dist/plugins/notifications/index.d.ts +11 -0
  165. package/dist/plugins/notifications/notification.model.d.ts +20 -0
  166. package/dist/plugins/router-history/index.d.ts +6 -0
  167. package/dist/plugins/router-history/router-history.composable.d.ts +7 -0
  168. package/dist/plugins/router-history/router-history.composable.spec.d.ts +1 -0
  169. package/dist/plugins/runtime-env/index.d.ts +7 -0
  170. package/dist/services/index.d.ts +1 -0
  171. package/dist/services/konami.service.d.ts +2 -0
  172. package/dist/showroom/App.vue.d.ts +2 -0
  173. package/dist/showroom/router.d.ts +8 -0
  174. package/dist/sipa-bms-ui.css +3024 -0
  175. package/dist/sipa-bms-ui.es.js +102694 -0
  176. package/dist/sipa-bms-ui.es.js.map +1 -0
  177. package/dist/sipa-bms-ui.umd.js +102815 -0
  178. package/dist/sipa-bms-ui.umd.js.map +1 -0
  179. package/package.json +126 -0
  180. package/src/assets/animated-icons/AnimatedActivityIcon.vue +77 -0
  181. package/src/assets/animated-icons/AnimatedCircleHelpIcon.vue +67 -0
  182. package/src/assets/animated-icons/AnimatedHomeIcon.vue +69 -0
  183. package/src/assets/empty.svg +1 -0
  184. package/src/assets/scss/_conf.scss +203 -0
  185. package/src/assets/scss/_formkit.scss +353 -0
  186. package/src/assets/scss/app.scss +11 -0
  187. package/src/assets/scss/global-variables.scss +56 -0
  188. package/src/components/button/BmsAllButtons.stories.js +56 -0
  189. package/src/components/button/BmsButton.spec.ts +37 -0
  190. package/src/components/button/BmsButton.stories.js +84 -0
  191. package/src/components/button/BmsButton.vue +50 -0
  192. package/src/components/button/BmsIconButton.stories.js +67 -0
  193. package/src/components/button/BmsIconButton.vue +34 -0
  194. package/src/components/button/UiButton.stories.js +131 -0
  195. package/src/components/button/UiButton.vue +37 -0
  196. package/src/components/button/UiButtonLink.vue +186 -0
  197. package/src/components/feedback/BmsAlert.stories.js +75 -0
  198. package/src/components/feedback/BmsAlert.vue +91 -0
  199. package/src/components/feedback/BmsBadge.stories.js +34 -0
  200. package/src/components/feedback/BmsBadge.vue +76 -0
  201. package/src/components/feedback/BmsCaption.stories.js +59 -0
  202. package/src/components/feedback/BmsCaption.vue +88 -0
  203. package/src/components/feedback/BmsCircularProgress.spec.ts +14 -0
  204. package/src/components/feedback/BmsCircularProgress.stories.js +45 -0
  205. package/src/components/feedback/BmsCircularProgress.vue +64 -0
  206. package/src/components/feedback/BmsLoader.spec.ts +7 -0
  207. package/src/components/feedback/BmsLoader.stories.js +31 -0
  208. package/src/components/feedback/BmsLoader.vue +82 -0
  209. package/src/components/feedback/BmsTooltip.stories.js +65 -0
  210. package/src/components/feedback/BmsTooltip.vue +102 -0
  211. package/src/components/feedback/Notification.stories.js +37 -0
  212. package/src/components/feedback/UiTooltip.spec.ts +62 -0
  213. package/src/components/feedback/UiTooltip.stories.js +71 -0
  214. package/src/components/feedback/UiTooltip.vue +219 -0
  215. package/src/components/feedback/tooltip.helper.spec.ts +92 -0
  216. package/src/components/feedback/tooltip.helper.ts +121 -0
  217. package/src/components/form/BmsAutocomplete.stories.js +90 -0
  218. package/src/components/form/BmsAutocomplete.vue +100 -0
  219. package/src/components/form/BmsBetweenInput.stories.js +69 -0
  220. package/src/components/form/BmsBetweenInput.vue +146 -0
  221. package/src/components/form/BmsChip.stories.js +65 -0
  222. package/src/components/form/BmsChip.vue +92 -0
  223. package/src/components/form/BmsFilePicker.spec.ts +94 -0
  224. package/src/components/form/BmsFilePicker.stories.js +53 -0
  225. package/src/components/form/BmsFilePicker.vue +186 -0
  226. package/src/components/form/BmsInputBooleanCheckbox.stories.js +90 -0
  227. package/src/components/form/BmsInputBooleanCheckbox.vue +70 -0
  228. package/src/components/form/BmsInputCheckboxCaption.spec.ts +45 -0
  229. package/src/components/form/BmsInputCheckboxCaption.stories.js +92 -0
  230. package/src/components/form/BmsInputCheckboxCaption.vue +126 -0
  231. package/src/components/form/BmsInputCheckboxCaptionGroup.stories.js +153 -0
  232. package/src/components/form/BmsInputCheckboxCaptionGroup.vue +81 -0
  233. package/src/components/form/BmsInputCheckboxGroup.stories.js +94 -0
  234. package/src/components/form/BmsInputCheckboxGroup.vue +94 -0
  235. package/src/components/form/BmsInputCode.stories.js +43 -0
  236. package/src/components/form/BmsInputCode.vue +71 -0
  237. package/src/components/form/BmsInputDateTime.stories.js +71 -0
  238. package/src/components/form/BmsInputDateTime.vue +55 -0
  239. package/src/components/form/BmsInputFile.spec.ts +90 -0
  240. package/src/components/form/BmsInputFile.stories.js +156 -0
  241. package/src/components/form/BmsInputFile.vue +310 -0
  242. package/src/components/form/BmsInputNumber.spec.ts +40 -0
  243. package/src/components/form/BmsInputNumber.stories.js +79 -0
  244. package/src/components/form/BmsInputNumber.vue +67 -0
  245. package/src/components/form/BmsInputRadio.stories.js +79 -0
  246. package/src/components/form/BmsInputRadio.vue +121 -0
  247. package/src/components/form/BmsInputRadioCaption.stories.js +98 -0
  248. package/src/components/form/BmsInputRadioCaption.vue +110 -0
  249. package/src/components/form/BmsInputRadioCaptionGroup.stories.js +166 -0
  250. package/src/components/form/BmsInputRadioCaptionGroup.vue +81 -0
  251. package/src/components/form/BmsInputRadioGroup.stories.js +108 -0
  252. package/src/components/form/BmsInputRadioGroup.vue +93 -0
  253. package/src/components/form/BmsInputText.spec.ts +37 -0
  254. package/src/components/form/BmsInputText.stories.js +78 -0
  255. package/src/components/form/BmsInputText.vue +79 -0
  256. package/src/components/form/BmsInputToggle.stories.js +37 -0
  257. package/src/components/form/BmsInputToggle.vue +66 -0
  258. package/src/components/form/BmsSearch.spec.ts +41 -0
  259. package/src/components/form/BmsSearch.stories.js +70 -0
  260. package/src/components/form/BmsSearch.vue +62 -0
  261. package/src/components/form/BmsSelect.spec.ts +57 -0
  262. package/src/components/form/BmsSelect.stories.js +131 -0
  263. package/src/components/form/BmsSelect.vue +225 -0
  264. package/src/components/form/BmsTag.stories.js +64 -0
  265. package/src/components/form/BmsTag.vue +109 -0
  266. package/src/components/form/BmsTextArea.spec.ts +37 -0
  267. package/src/components/form/BmsTextArea.stories.js +74 -0
  268. package/src/components/form/BmsTextArea.vue +112 -0
  269. package/src/components/form/Form.stories.js +35 -0
  270. package/src/components/form/RawAutocomplete.spec.ts +103 -0
  271. package/src/components/form/RawAutocomplete.vue +218 -0
  272. package/src/components/form/RawInputText.vue +173 -0
  273. package/src/components/form/UiBmsInputCheckbox.stories.js +77 -0
  274. package/src/components/form/UiBmsInputCheckbox.vue +126 -0
  275. package/src/components/form/UiBmsSwitch.stories.js +40 -0
  276. package/src/components/form/UiBmsSwitch.vue +80 -0
  277. package/src/components/layout/BmsCard.stories.js +77 -0
  278. package/src/components/layout/BmsCard.vue +133 -0
  279. package/src/components/layout/BmsContentPageLayout.vue +92 -0
  280. package/src/components/layout/BmsForm.stories.js +30 -0
  281. package/src/components/layout/BmsForm.vue +42 -0
  282. package/src/components/layout/BmsHeader.stories.js +29 -0
  283. package/src/components/layout/BmsHeader.vue +16 -0
  284. package/src/components/layout/BmsHeaderTitle.stories.js +68 -0
  285. package/src/components/layout/BmsHeaderTitle.vue +76 -0
  286. package/src/components/layout/BmsModal.spec.ts +174 -0
  287. package/src/components/layout/BmsModal.stories.js +153 -0
  288. package/src/components/layout/BmsModal.vue +359 -0
  289. package/src/components/layout/BmsOverlay.stories.js +34 -0
  290. package/src/components/layout/BmsOverlay.vue +28 -0
  291. package/src/components/layout/BmsSection.stories.js +45 -0
  292. package/src/components/layout/BmsSection.vue +35 -0
  293. package/src/components/layout/BmsStep.stories.js +71 -0
  294. package/src/components/layout/BmsStep.vue +60 -0
  295. package/src/components/layout/BmsStepper.stories.js +57 -0
  296. package/src/components/layout/BmsStepper.vue +195 -0
  297. package/src/components/layout/UiPopoverMenu.vue +167 -0
  298. package/src/components/navigation/BmsBackButton.stories.js +27 -0
  299. package/src/components/navigation/BmsBackButton.vue +38 -0
  300. package/src/components/navigation/BmsBreadcrumb.stories.js +80 -0
  301. package/src/components/navigation/BmsBreadcrumb.vue +45 -0
  302. package/src/components/navigation/BmsLink.spec.ts +45 -0
  303. package/src/components/navigation/BmsLink.vue +59 -0
  304. package/src/components/navigation/BmsMenu.spec.ts +95 -0
  305. package/src/components/navigation/BmsMenu.stories.js +85 -0
  306. package/src/components/navigation/BmsMenu.vue +148 -0
  307. package/src/components/navigation/BmsMenuNav.spec.ts +140 -0
  308. package/src/components/navigation/BmsMenuNav.stories.js +187 -0
  309. package/src/components/navigation/BmsMenuNav.vue +217 -0
  310. package/src/components/navigation/BmsShortLinkMenu.stories.js +55 -0
  311. package/src/components/navigation/BmsShortLinkMenu.vue +59 -0
  312. package/src/components/navigation/BmsTabs.stories.js +30 -0
  313. package/src/components/navigation/BmsTabs.vue +46 -0
  314. package/src/components/navigation/BmsTenantSwitcher.stories.js +89 -0
  315. package/src/components/navigation/BmsTenantSwitcher.vue +135 -0
  316. package/src/components/navigation/UiMenuItem.stories.js +73 -0
  317. package/src/components/navigation/UiMenuItem.vue +116 -0
  318. package/src/components/navigation/UiMenuItemStatus.stories.js +58 -0
  319. package/src/components/navigation/UiTab.stories.js +56 -0
  320. package/src/components/navigation/UiTab.vue +71 -0
  321. package/src/components/navigation/UiTenantImage.vue +22 -0
  322. package/src/components/navigation/UiTenantLabel.vue +94 -0
  323. package/src/components/navigation/UiTenantSwitcher.spec.ts +167 -0
  324. package/src/components/navigation/UiTenantSwitcher.stories.js +70 -0
  325. package/src/components/navigation/UiTenantSwitcher.vue +161 -0
  326. package/src/components/table/BmsEmptyScreen.stories.js +32 -0
  327. package/src/components/table/BmsEmptyScreen.vue +54 -0
  328. package/src/components/table/BmsPagination.spec.ts +73 -0
  329. package/src/components/table/BmsPagination.stories.js +34 -0
  330. package/src/components/table/BmsPagination.vue +154 -0
  331. package/src/components/table/BmsServerTable.stories.js +422 -0
  332. package/src/components/table/BmsServerTable.vue +402 -0
  333. package/src/components/table/BmsTable.spec.ts +309 -0
  334. package/src/components/table/BmsTable.stories.js +930 -0
  335. package/src/components/table/BmsTable.vue +308 -0
  336. package/src/components/table/BmsTableFilters.spec.ts +494 -0
  337. package/src/components/table/BmsTableFilters.stories.js +114 -0
  338. package/src/components/table/BmsTableFilters.vue +268 -0
  339. package/src/components/table/DraggableList.stories.js +29 -0
  340. package/src/components/table/DraggableList.vue +179 -0
  341. package/src/components/table/UiBmsTable.spec.ts +373 -0
  342. package/src/components/table/UiBmsTable.stories.js +563 -0
  343. package/src/components/table/UiBmsTable.vue +617 -0
  344. package/src/components/table/UiFilterButton.stories.js +37 -0
  345. package/src/components/table/UiFilterButton.vue +85 -0
  346. package/src/components/utils/BmsCocarde.stories.js +47 -0
  347. package/src/components/utils/BmsCocarde.vue +66 -0
  348. package/src/components/utils/BmsProblem.stories.js +82 -0
  349. package/src/components/utils/BmsProblem.vue +223 -0
  350. package/src/components/utils/BmsRelativeTime.spec.ts +41 -0
  351. package/src/components/utils/BmsRelativeTime.stories.js +48 -0
  352. package/src/components/utils/BmsRelativeTime.vue +57 -0
  353. package/src/composables/clipboard.composable.ts +14 -0
  354. package/src/composables/index.ts +5 -0
  355. package/src/composables/pagination.composable.spec.ts +258 -0
  356. package/src/composables/pagination.composable.ts +111 -0
  357. package/src/composables/search.composable.spec.ts +1296 -0
  358. package/src/composables/search.composable.ts +316 -0
  359. package/src/composables/search.helper.spec.ts +339 -0
  360. package/src/composables/search.helper.ts +103 -0
  361. package/src/composables/sort.composable.spec.ts +349 -0
  362. package/src/composables/sort.composable.ts +129 -0
  363. package/src/composables/userPref.composable.spec.ts +115 -0
  364. package/src/composables/userPref.composable.ts +43 -0
  365. package/src/documentation/ColorTile.vue +23 -0
  366. package/src/documentation/assets/BmsIcon.png +0 -0
  367. package/src/documentation/assets/CoverBmsUI.png +0 -0
  368. package/src/documentation/assets/button/CoverPrimaryButton.png +0 -0
  369. package/src/documentation/assets/button/CoverSecondaryButton.png +0 -0
  370. package/src/documentation/assets/button/DoButtonLabel.png +0 -0
  371. package/src/documentation/assets/button/DontButtonLabel.png +0 -0
  372. package/src/documentation/assets/button/PrimaryButtonRepresentation.png +0 -0
  373. package/src/documentation/assets/cards/CardRepresentation.png +0 -0
  374. package/src/documentation/assets/cards/CoverCard.png +0 -0
  375. package/src/documentation/assets/chip/ChipRepresentation.png +0 -0
  376. package/src/documentation/assets/chip/CoverChips.png +0 -0
  377. package/src/documentation/assets/fields/Anatomy.png +0 -0
  378. package/src/documentation/assets/fields/CaptionRepresentation.png +0 -0
  379. package/src/documentation/assets/fields/CaptionTextRepresentation.png +0 -0
  380. package/src/documentation/assets/fields/CoverFieldsAnatomy.png +0 -0
  381. package/src/documentation/assets/fields/CoverInputFile.png +0 -0
  382. package/src/documentation/assets/fields/CoverInputText.png +0 -0
  383. package/src/documentation/assets/fields/CoverRadioCaptionGroup.png +0 -0
  384. package/src/documentation/assets/fields/CoverRadioGroup.png +0 -0
  385. package/src/documentation/assets/fields/CoverSearch.png +0 -0
  386. package/src/documentation/assets/fields/CoverSelect.png +0 -0
  387. package/src/documentation/assets/fields/CoverTextArea.png +0 -0
  388. package/src/documentation/assets/fields/FieldLabel.png +0 -0
  389. package/src/documentation/assets/fields/InputMediaRepresentation.png +0 -0
  390. package/src/documentation/assets/fields/InputRepresentation.png +0 -0
  391. package/src/documentation/assets/fields/InputSearchRepresentation.png +0 -0
  392. package/src/documentation/assets/fields/InputText.png +0 -0
  393. package/src/documentation/assets/fields/InputTextAreaRepresentation.png +0 -0
  394. package/src/documentation/assets/fields/LabelDo.png +0 -0
  395. package/src/documentation/assets/fields/LabelDont.png +0 -0
  396. package/src/documentation/assets/fields/LabelRepresentation.png +0 -0
  397. package/src/documentation/assets/fields/RadioCaptionGroupRepresentation.png +0 -0
  398. package/src/documentation/assets/fields/RadioGroupRepresentation.png +0 -0
  399. package/src/documentation/assets/fields/SelectRepresentation.png +0 -0
  400. package/src/documentation/assets/tag/CoverTag.png +0 -0
  401. package/src/documentation/assets/tag/TagRepresentation.png +0 -0
  402. package/src/documentation/button.mdx +24 -0
  403. package/src/documentation/card.mdx +28 -0
  404. package/src/documentation/chip.mdx +28 -0
  405. package/src/documentation/colors.mdx +118 -0
  406. package/src/documentation/fields.mdx +52 -0
  407. package/src/documentation/fields_text.mdx +31 -0
  408. package/src/documentation/icons.mdx +33 -0
  409. package/src/documentation/inputFile.mdx +28 -0
  410. package/src/documentation/primaryButton.mdx +20 -0
  411. package/src/documentation/principles.mdx +23 -0
  412. package/src/documentation/radioCaptionGroup.mdx +34 -0
  413. package/src/documentation/radioGroup.mdx +34 -0
  414. package/src/documentation/search.mdx +28 -0
  415. package/src/documentation/secondaryButton.mdx +17 -0
  416. package/src/documentation/select.mdx +31 -0
  417. package/src/documentation/tag.mdx +28 -0
  418. package/src/documentation/template_field_dependency.mdx +19 -0
  419. package/src/documentation/textArea.mdx +27 -0
  420. package/src/documentation/typography.mdx +93 -0
  421. package/src/documentation/typography.stories.js +26 -0
  422. package/src/helpers/cocarde.helper.spec.ts +14 -0
  423. package/src/helpers/cocarde.helper.ts +22 -0
  424. package/src/helpers/date.helper.spec.ts +91 -0
  425. package/src/helpers/date.helper.ts +105 -0
  426. package/src/helpers/file.helper.spec.ts +60 -0
  427. package/src/helpers/file.helper.ts +24 -0
  428. package/src/helpers/index.ts +6 -0
  429. package/src/helpers/location.helper.spec.ts +195 -0
  430. package/src/helpers/location.helper.ts +53 -0
  431. package/src/helpers/problem.helper.spec.ts +21 -0
  432. package/src/helpers/problem.helper.ts +4 -0
  433. package/src/helpers/string.helper.spec.ts +186 -0
  434. package/src/helpers/string.helper.ts +83 -0
  435. package/src/helpers/table.helper.spec.ts +141 -0
  436. package/src/helpers/table.helper.ts +88 -0
  437. package/src/index.ts +203 -0
  438. package/src/main.ts +25 -0
  439. package/src/models/breadcrumb.model.ts +6 -0
  440. package/src/models/caption.model.ts +7 -0
  441. package/src/models/chip.model.ts +8 -0
  442. package/src/models/cocarde.model.ts +4 -0
  443. package/src/models/form.model.ts +30 -0
  444. package/src/models/index.ts +14 -0
  445. package/src/models/menu.model.ts +20 -0
  446. package/src/models/modal.model.ts +9 -0
  447. package/src/models/problem.model.ts +10 -0
  448. package/src/models/sort.model.ts +13 -0
  449. package/src/models/status-type.model.ts +7 -0
  450. package/src/models/tab.model.ts +7 -0
  451. package/src/models/table.model.ts +58 -0
  452. package/src/models/tenant.model.ts +7 -0
  453. package/src/models/tooltip.model.ts +6 -0
  454. package/src/pages/Form.stories.js +83 -0
  455. package/src/pages/List.stories.js +88 -0
  456. package/src/plugins/confirm/index.ts +109 -0
  457. package/src/plugins/feature-flipper/FeatureFlipper.vue +23 -0
  458. package/src/plugins/feature-flipper/FeatureFlipperIndicator.vue +27 -0
  459. package/src/plugins/feature-flipper/FeatureFlipperModal.vue +68 -0
  460. package/src/plugins/feature-flipper/featureFlipper.composable.spec.ts +107 -0
  461. package/src/plugins/feature-flipper/featureFlipper.composable.ts +68 -0
  462. package/src/plugins/feature-flipper/featureFlipper.model.ts +1 -0
  463. package/src/plugins/feature-flipper/index.ts +15 -0
  464. package/src/plugins/field/FieldComponent.spec.ts +34 -0
  465. package/src/plugins/field/FieldComponent.stories.js +78 -0
  466. package/src/plugins/field/FieldComponent.vue +208 -0
  467. package/src/plugins/field/FieldDatalist.stories.js +35 -0
  468. package/src/plugins/field/FieldDatalist.vue +68 -0
  469. package/src/plugins/field/index.ts +31 -0
  470. package/src/plugins/keycloak-auth-adapter/index.ts +102 -0
  471. package/src/plugins/notifications/NotificationItem.stories.js +60 -0
  472. package/src/plugins/notifications/NotificationItem.vue +116 -0
  473. package/src/plugins/notifications/NotificationWidget.vue +129 -0
  474. package/src/plugins/notifications/index.ts +83 -0
  475. package/src/plugins/notifications/notification.model.ts +24 -0
  476. package/src/plugins/notifications/notifications.spec.js +78 -0
  477. package/src/plugins/router-history/index.ts +23 -0
  478. package/src/plugins/router-history/router-history.composable.spec.ts +323 -0
  479. package/src/plugins/router-history/router-history.composable.ts +47 -0
  480. package/src/plugins/runtime-env/index.ts +19 -0
  481. package/src/services/index.ts +1 -0
  482. package/src/services/konami.service.ts +28 -0
  483. package/src/showroom/App.vue +109 -0
  484. package/src/showroom/db.json +1967 -0
  485. package/src/showroom/pages/autocomplete.vue +54 -0
  486. package/src/showroom/pages/draggable-list.vue +20 -0
  487. package/src/showroom/pages/file-picker.vue +74 -0
  488. package/src/showroom/pages/forms.vue +389 -0
  489. package/src/showroom/pages/index.vue +209 -0
  490. package/src/showroom/pages/paginated-cards.vue +48 -0
  491. package/src/showroom/pages/server-table.vue +160 -0
  492. package/src/showroom/pages/stepper.vue +37 -0
  493. package/src/showroom/pages/table.vue +192 -0
  494. package/src/showroom/pages/tabs/[tabName].vue +28 -0
  495. package/src/showroom/router.ts +15 -0
  496. package/src/showroom/server.js +45 -0
  497. package/src/vite-env.d.ts +9 -0
@@ -0,0 +1,316 @@
1
+ import {
2
+ getValueByPath,
3
+ isEmptyStringOrNotDefined,
4
+ searchString,
5
+ } from '@/helpers/string.helper';
6
+ import { Filter, SavedFilter } from '@/models';
7
+ import { computed, onMounted, Ref, ref, unref, watch } from 'vue';
8
+ import { useRoute } from 'vue-router';
9
+ import { useUserPref } from '@/composables/userPref.composable';
10
+ import _cloneDeep from 'lodash/cloneDeep';
11
+ import {
12
+ handleValueInSearchParams,
13
+ writeLocation,
14
+ } from '@/helpers/location.helper';
15
+ import {
16
+ dateFilterCompare,
17
+ dateIsBetween,
18
+ isBetweenFilter,
19
+ numberIsBetween,
20
+ } from '@/composables/search.helper';
21
+
22
+ const FILTER_KEY = 'bms-ui-filter';
23
+ const FILTER_SEARCH_KEY = `${FILTER_KEY}-search`;
24
+
25
+ export const useSearch = (
26
+ persistent: boolean | Ref<boolean> = true,
27
+ defaultFilters: Filter[] | Ref<Filter[]> = [],
28
+ defaultFiltersOpened: boolean | Ref<boolean> = false,
29
+ ) => {
30
+ const route = useRoute();
31
+ const userPref = useUserPref();
32
+ const reflect = ref<boolean>(unref(persistent));
33
+ const search = ref<string>('');
34
+ const filters = ref<Filter[]>(unref(defaultFilters));
35
+ const isFilterVisible = ref<boolean>(unref(defaultFiltersOpened));
36
+ const isMounting = ref<boolean>(true);
37
+
38
+ const toggleFilters = () => {
39
+ isFilterVisible.value = !isFilterVisible.value;
40
+ };
41
+
42
+ const numberOfActiveFilters = computed(
43
+ () =>
44
+ filters.value?.filter(
45
+ (f) => f.value !== '' && f.value !== null && f.value !== undefined,
46
+ ).length,
47
+ );
48
+
49
+ const hydrateFiltersFromUrl = (requestedFilters: Filter[]): Filter[] => {
50
+ const searchParams = new URLSearchParams(window.location.search);
51
+
52
+ requestedFilters.forEach((filterOption) => {
53
+ const savedFilterName = convertFilterKeyForPath(filterOption);
54
+ let savedValue: string | boolean | null =
55
+ searchParams.get(savedFilterName);
56
+ if (savedValue) {
57
+ isFilterVisible.value = true;
58
+ if (filterOption.type === 'boolean') {
59
+ savedValue = savedValue === 'true';
60
+ }
61
+ if (isBetweenFilter(filterOption)) {
62
+ const betweenValue = (savedValue as string).split('|');
63
+ filterOption.valueFrom = betweenValue[0];
64
+ filterOption.valueTo = betweenValue[1] ? betweenValue[1] : '';
65
+ } else {
66
+ filterOption.value = savedValue;
67
+ }
68
+ }
69
+ });
70
+
71
+ const filtersOpened = searchParams.get('bms-ui-filters-open');
72
+ if (filtersOpened === 'false') {
73
+ isFilterVisible.value = false;
74
+ } else if (filtersOpened === 'true') {
75
+ isFilterVisible.value = true;
76
+ }
77
+ return requestedFilters;
78
+ };
79
+
80
+ const hydrateFiltersFromLocalStorage = (
81
+ requestedFilters: Filter[],
82
+ ): Filter[] => {
83
+ if (userPref) {
84
+ requestedFilters.forEach((filterOption) => {
85
+ const savedFilterName = convertFilterKeyForPath(filterOption);
86
+ const savedFilterPref = userPref.getUserPref(
87
+ savedFilterName,
88
+ route.path,
89
+ );
90
+ if (savedFilterPref !== undefined) {
91
+ filterOption.value = savedFilterPref;
92
+ }
93
+ });
94
+ }
95
+ return requestedFilters;
96
+ };
97
+
98
+ const hasFiltersInUrl = (): boolean => {
99
+ return (
100
+ Array.from(new URLSearchParams(window.location.search).keys()).filter(
101
+ (param: string) => param.includes(FILTER_KEY),
102
+ ).length > 0
103
+ );
104
+ };
105
+
106
+ const initFilters = (): void => {
107
+ const requestedFilters = _cloneDeep(filters.value);
108
+ let hydratedFilters = requestedFilters;
109
+ if (reflect.value) {
110
+ hydratedFilters = hasFiltersInUrl()
111
+ ? hydrateFiltersFromUrl(requestedFilters)
112
+ : hydrateFiltersFromLocalStorage(requestedFilters);
113
+ }
114
+ filters.value = hydratedFilters.map((filter) => {
115
+ if (filter.value === undefined) {
116
+ filter.value = null;
117
+ }
118
+ return filter;
119
+ });
120
+ };
121
+
122
+ const filterItems = (items: any[]): any[] => {
123
+ const defaultTextFilterFunction = (
124
+ item: any,
125
+ value: any,
126
+ target: string,
127
+ ) => {
128
+ return searchString(getValueByPath(item, target) + '', value + '');
129
+ };
130
+ return items.filter((item) => {
131
+ return filters.value.every((filter) => {
132
+ if (isBetweenFilter(filter)) {
133
+ if (
134
+ (!getfilterValue(filter, 'valueFrom') &&
135
+ !getfilterValue(filter, 'valueTo')) ||
136
+ (!filter.customFilter && item[filter.key] === undefined)
137
+ ) {
138
+ return true;
139
+ } else {
140
+ try {
141
+ if (filter.type === 'betweenNumber') {
142
+ return numberIsBetween(item[filter.key], filter);
143
+ } else {
144
+ return dateIsBetween(item[filter.key], filter);
145
+ }
146
+ } catch (e: any) {
147
+ return true;
148
+ }
149
+ }
150
+ }
151
+ if (isEmptyStringOrNotDefined(filter.value)) {
152
+ return true;
153
+ }
154
+ if (filter.type === 'inputDate') {
155
+ const applyFilter = filter.customFilter
156
+ ? filter.customFilter
157
+ : dateFilterCompare;
158
+ return applyFilter(item[filter.key], filter, true);
159
+ }
160
+
161
+ const applyFilter = filter.customFilter
162
+ ? filter.customFilter
163
+ : defaultTextFilterFunction;
164
+ return applyFilter(item, filter.value, filter.key);
165
+ });
166
+ });
167
+ };
168
+
169
+ const reflectSearchToUserPref = (str: string): void => {
170
+ userPref.saveUserPref(FILTER_SEARCH_KEY, str, route.path);
171
+ };
172
+
173
+ const reflectFiltersToUserPref = (filters: Filter[]): void => {
174
+ filters.forEach((filter) => {
175
+ const savedFilterName = convertFilterKeyForPath(filter);
176
+ userPref.saveUserPref(savedFilterName, filter.value, route.path);
177
+ });
178
+ };
179
+
180
+ watch(search, () => {
181
+ if (reflect.value) {
182
+ reflectSearchToPath(search.value, FILTER_SEARCH_KEY);
183
+ reflectSearchToUserPref(search.value);
184
+ }
185
+ });
186
+ watch(
187
+ () => filters,
188
+ () => {
189
+ if (reflect.value && filters.value) {
190
+ reflectFiltersToPath(filters.value);
191
+ reflectFiltersToUserPref(filters.value);
192
+ }
193
+ },
194
+ { deep: true },
195
+ );
196
+
197
+ const initSearch = () => {
198
+ if (reflect.value) {
199
+ const searchParams = new URLSearchParams(window.location.search);
200
+
201
+ if (searchParams.get(FILTER_SEARCH_KEY)) {
202
+ search.value = searchParams.get(FILTER_SEARCH_KEY) || '';
203
+ }
204
+ if (!search.value && !hasFiltersInUrl()) {
205
+ search.value =
206
+ userPref.getUserPref(FILTER_SEARCH_KEY, route.path) || '';
207
+ }
208
+ }
209
+ };
210
+
211
+ const resetAllFilters = () => {
212
+ isMounting.value = true;
213
+ initSearch();
214
+ initFilters();
215
+ isMounting.value = false;
216
+ };
217
+
218
+ onMounted(() => {
219
+ resetAllFilters();
220
+ });
221
+
222
+ const isSavedFilterActive = (savedFilter: SavedFilter): boolean => {
223
+ return savedFilter.filters.every((saveF) => {
224
+ const targetFilter = filters.value.find((f) => f.key === saveF.target);
225
+ if (!targetFilter) {
226
+ return false;
227
+ }
228
+ return (
229
+ targetFilter.value === saveF.value ||
230
+ (targetFilter.value === '' && saveF.value === null) ||
231
+ (targetFilter.value === null && saveF.value === '')
232
+ );
233
+ });
234
+ };
235
+
236
+ const resetFilters = () => {
237
+ filters.value = filters.value.map((filter) => {
238
+ let resetFilter = { ...filter };
239
+ const valueKeys = ['value', 'valueFrom', 'valueTo'];
240
+ valueKeys.forEach((key) => {
241
+ if (
242
+ resetFilter[key as keyof Filter] !== null &&
243
+ resetFilter[key as keyof Filter] !== undefined
244
+ ) {
245
+ resetFilter[key as keyof Filter] = null;
246
+ }
247
+ });
248
+ return resetFilter;
249
+ });
250
+ };
251
+
252
+ const selectSavedFilter = (savedFilter: SavedFilter) => {
253
+ if (isSavedFilterActive(savedFilter)) {
254
+ resetFilters();
255
+ } else {
256
+ filters.value.forEach((filter) => {
257
+ const foundSavedFilter = savedFilter.filters.find(
258
+ (f) => filter.key === f.target,
259
+ );
260
+ if (foundSavedFilter) {
261
+ filter.value = foundSavedFilter.value;
262
+ }
263
+ });
264
+ }
265
+ };
266
+
267
+ return {
268
+ search,
269
+ reflect,
270
+ filters,
271
+ isFilterVisible,
272
+ numberOfActiveFilters,
273
+ isMounting,
274
+ toggleFilters,
275
+ filterItems,
276
+ isSavedFilterActive,
277
+ resetFilters,
278
+ selectSavedFilter,
279
+ resetAllFilters,
280
+ };
281
+ };
282
+
283
+ export const reflectFiltersToPath = (filters: Filter[]): void => {
284
+ let searchParams = new URLSearchParams(window.location.search);
285
+ searchParams = filters.reduce((acc, filter) => {
286
+ const key = convertFilterKeyForPath(filter);
287
+ let value;
288
+ if (isBetweenFilter(filter)) {
289
+ const from = getfilterValue(filter, 'valueFrom').toString();
290
+ const to = getfilterValue(filter, 'valueTo').toString();
291
+ // escape "|" separator if end the string
292
+ value = `${from}|${to}`.replace(/\|$/g, '');
293
+ } else {
294
+ value = getfilterValue(filter).toString();
295
+ }
296
+ return handleValueInSearchParams(acc, key, value);
297
+ }, searchParams);
298
+ writeLocation(searchParams);
299
+ };
300
+
301
+ const convertFilterKeyForPath = (filter: Filter): string => {
302
+ return `${FILTER_KEY}-${filter.key}`;
303
+ };
304
+
305
+ const getfilterValue = (filter: Filter, key: string = 'value'): string => {
306
+ return filter[key as keyof Filter] === null ||
307
+ filter[key as keyof Filter] === undefined
308
+ ? ''
309
+ : filter[key as keyof Filter];
310
+ };
311
+
312
+ export const reflectSearchToPath = (searchValue: string, key: string): void => {
313
+ let searchParams = new URLSearchParams(window.location.search);
314
+ searchParams = handleValueInSearchParams(searchParams, key, searchValue);
315
+ writeLocation(searchParams);
316
+ };
@@ -0,0 +1,339 @@
1
+ /* eslint-disable */
2
+ import {
3
+ dateFilterCompare,
4
+ dateIsBetween,
5
+ defaultIsAfterDateFilterFunction,
6
+ defaultNumberFilterFunction,
7
+ isBetweenFilter,
8
+ numberIsBetween,
9
+ } from './search.helper';
10
+ import { type Filter, FilterType, InputType } from '@/models';
11
+ import { vi, it, expect, afterEach } from 'vitest';
12
+
13
+ describe('isBetweenInput', () => {
14
+ test('should return true for filter type "betweenDate"', () => {
15
+ const filter = { type: 'betweenDate' } as Filter;
16
+ const result = isBetweenFilter(filter);
17
+ expect(result).toBe(true);
18
+ });
19
+
20
+ test('should return true for filter type "betweenNumber"', () => {
21
+ const filter = { type: 'betweenDate' } as Filter;
22
+ const result = isBetweenFilter(filter);
23
+ expect(result).toBe(true);
24
+ });
25
+
26
+ test('should return true for filter type "betweenDateTime"', () => {
27
+ const filter = { type: 'betweenDateTime' } as Filter;
28
+ const result = isBetweenFilter(filter);
29
+ expect(result).toBe(true);
30
+ });
31
+
32
+ test('should return false for filter type that is not "betweenDate", "betweenNumber", or "betweenDateTime"', () => {
33
+ const filter = { type: 'notBetween' as FilterType } as Filter;
34
+ const result = isBetweenFilter(filter);
35
+ expect(result).toBe(false);
36
+ });
37
+ });
38
+
39
+ describe('dateFilterCompare', () => {
40
+ it('should compare two dates when the search date is defined', () => {
41
+ const filter: Filter = {
42
+ key: '',
43
+ label: '',
44
+ type: 'inputDate',
45
+ value: '2024-10-09',
46
+ inputType: InputType.DATE,
47
+ };
48
+ const result = dateFilterCompare('2024-10-10T12:00:00', filter);
49
+ expect(result).toBe(true);
50
+ });
51
+
52
+ it('should handle empty or undefined search date', () => {
53
+ const filter: Filter = {
54
+ key: '',
55
+ label: '',
56
+ type: 'inputDate',
57
+ value: '',
58
+ inputType: InputType.DATE,
59
+ };
60
+ const result = dateFilterCompare('2024-10-10T12:00:00', filter);
61
+ expect(result).toBe(true);
62
+ });
63
+
64
+ it('should correctly adjust the time in date mode', () => {
65
+ const filter: Filter = {
66
+ key: '',
67
+ label: '',
68
+ type: 'inputDate',
69
+ value: '2024-10-09',
70
+ inputType: InputType.DATE,
71
+ };
72
+ const result = dateFilterCompare('2024-10-09T23:59:59', filter);
73
+ expect(result).toBe(true);
74
+ });
75
+
76
+ it('should return false if itemDate is before searchDate', () => {
77
+ const filter: Filter = {
78
+ key: '',
79
+ label: '',
80
+ type: 'inputDate',
81
+ value: '2024-10-10',
82
+ inputType: InputType.DATE,
83
+ };
84
+
85
+ const result = dateFilterCompare('2024-10-09T12:00:00', filter);
86
+ expect(result).toBe(false);
87
+ });
88
+
89
+ it('should compare with isGreaterThan = false', () => {
90
+ const filter: Filter = {
91
+ key: '',
92
+ label: '',
93
+ type: 'inputDate',
94
+ value: '2024-10-10',
95
+ inputType: InputType.DATE,
96
+ };
97
+
98
+ const result = dateFilterCompare('2024-10-09T12:00:00', filter, false);
99
+ expect(result).toBe(true);
100
+ });
101
+ });
102
+
103
+ describe('defaultIsAfterDateFilterFunction', () => {
104
+ test('should return true if dateItem is null', () => {
105
+ const result = defaultIsAfterDateFilterFunction(
106
+ // @ts-ignore
107
+ null,
108
+ new Date('2023-01-01'),
109
+ true,
110
+ );
111
+ expect(result).toBe(true);
112
+ });
113
+
114
+ test('should return true if dateItem is after the search date and isAfterSearch is true', () => {
115
+ const dateItem = new Date('2024-01-01');
116
+ const search = new Date('2023-01-01');
117
+ const result = defaultIsAfterDateFilterFunction(dateItem, search, true);
118
+ expect(result).toBe(true);
119
+ });
120
+
121
+ test('should return false if dateItem is before the search date and isAfterSearch is true', () => {
122
+ const dateItem = new Date('2022-01-01');
123
+ const search = new Date('2023-01-01');
124
+ const result = defaultIsAfterDateFilterFunction(dateItem, search, true);
125
+ expect(result).toBe(false);
126
+ });
127
+
128
+ test('should return true if dateItem is before the search date and isAfterSearch is false', () => {
129
+ const dateItem = new Date('2022-01-01');
130
+ const search = new Date('2023-01-01');
131
+ const result = defaultIsAfterDateFilterFunction(dateItem, search, false);
132
+ expect(result).toBe(true);
133
+ });
134
+
135
+ test('should return false if dateItem is after the search date and isAfterSearch is false', () => {
136
+ const dateItem = new Date('2024-01-01');
137
+ const search = new Date('2023-01-01');
138
+ const result = defaultIsAfterDateFilterFunction(dateItem, search, false);
139
+ expect(result).toBe(false);
140
+ });
141
+
142
+ test('should return true if dateItem is the same as the search date and isAfterSearch is true', () => {
143
+ const dateItem = new Date('2023-01-01');
144
+ const search = new Date('2023-01-01');
145
+ const result = defaultIsAfterDateFilterFunction(dateItem, search, true);
146
+ expect(result).toBe(true);
147
+ });
148
+
149
+ test('should return true if dateItem is the same as the search date and isAfterSearch is false', () => {
150
+ const dateItem = new Date('2023-01-01');
151
+ const search = new Date('2023-01-01');
152
+ const result = defaultIsAfterDateFilterFunction(dateItem, search, false);
153
+ expect(result).toBe(true);
154
+ });
155
+ });
156
+
157
+ describe('defaultNumberFilterFunction', () => {
158
+ // Cas où itemNumber ou search sont null ou indéfinis
159
+ test('should return true if itemNumber is undefined or null', () => {
160
+ // @ts-ignore
161
+ const result = defaultNumberFilterFunction(null, 5, true);
162
+ expect(result).toBe(true);
163
+ });
164
+
165
+ test('should return true if search is undefined or null', () => {
166
+ // @ts-ignore
167
+ const result = defaultNumberFilterFunction(5, null, true);
168
+ expect(result).toBe(true);
169
+ });
170
+
171
+ test('should return true if both itemNumber and search are undefined or null', () => {
172
+ // @ts-ignore
173
+ const result = defaultNumberFilterFunction(null, null, true);
174
+ expect(result).toBe(true);
175
+ });
176
+
177
+ // Cas où itemNumber ou search est égal à 0
178
+ test('should correctly handle 0 as itemNumber and return false if isAfterSearch is true and search is greater', () => {
179
+ const result = defaultNumberFilterFunction(0, 5, true);
180
+ expect(result).toBe(false);
181
+ });
182
+
183
+ test('should correctly handle 0 as search and return true if itemNumber is greater and isAfterSearch is true', () => {
184
+ const result = defaultNumberFilterFunction(5, 0, true);
185
+ expect(result).toBe(true);
186
+ });
187
+
188
+ test('should correctly handle 0 as itemNumber and return true if isAfterSearch is false and search is greater', () => {
189
+ const result = defaultNumberFilterFunction(0, 5, false);
190
+ expect(result).toBe(true);
191
+ });
192
+
193
+ // Comparaisons normales
194
+ test('should return true if itemNumber is greater than search and isAfterSearch is true', () => {
195
+ const result = defaultNumberFilterFunction(10, 5, true);
196
+ expect(result).toBe(true);
197
+ });
198
+
199
+ test('should return false if itemNumber is less than search and isAfterSearch is true', () => {
200
+ const result = defaultNumberFilterFunction(3, 5, true);
201
+ expect(result).toBe(false);
202
+ });
203
+
204
+ test('should return true if itemNumber is less than search and isAfterSearch is false', () => {
205
+ const result = defaultNumberFilterFunction(3, 5, false);
206
+ expect(result).toBe(true);
207
+ });
208
+
209
+ test('should return false if itemNumber is greater than search and isAfterSearch is false', () => {
210
+ const result = defaultNumberFilterFunction(10, 5, false);
211
+ expect(result).toBe(false);
212
+ });
213
+
214
+ // Cas d'égalité
215
+ test('should return true if itemNumber is equal to search regardless of isAfterSearch being true', () => {
216
+ const result = defaultNumberFilterFunction(5, 5, true);
217
+ expect(result).toBe(true);
218
+ });
219
+
220
+ test('should return true if itemNumber is equal to search regardless of isAfterSearch being false', () => {
221
+ const result = defaultNumberFilterFunction(5, 5, false);
222
+ expect(result).toBe(true);
223
+ });
224
+ });
225
+
226
+ describe('dateIsBetween', () => {
227
+ const validDate = '2024-01-19T08:27:12Z'; // Date de test
228
+ const filter: Filter = {
229
+ key: '',
230
+ label: '',
231
+ type: 'betweenDate',
232
+ valueFrom: '2024-01-18',
233
+ valueTo: '2024-01-20',
234
+ customFilter: undefined, // not our responsability
235
+ };
236
+
237
+ test('should return true if itemDate is within the filter range', () => {
238
+ const result = dateIsBetween(validDate, filter);
239
+ expect(result).toBe(true);
240
+ });
241
+
242
+ test('should return true if itemDate and the filter range in the same day', () => {
243
+ const filterOnOneDay = {
244
+ ...filter,
245
+ valueFrom: '2024-01-19',
246
+ valueTo: '2024-01-19',
247
+ };
248
+ const result = dateIsBetween(validDate, filterOnOneDay);
249
+ expect(result).toBe(true);
250
+ });
251
+
252
+ test('should return false if itemDate is before the filter range', () => {
253
+ const filterBefore = { ...filter, valueFrom: '2024-01-20T09:00:00Z' };
254
+ const result = dateIsBetween(validDate, filterBefore);
255
+ expect(result).toBe(false);
256
+ });
257
+
258
+ test('should return false if itemDate is after the filter range', () => {
259
+ const filterAfter = { ...filter, valueTo: '2024-01-18T08:00:00Z' };
260
+ const result = dateIsBetween(validDate, filterAfter);
261
+ expect(result).toBe(false);
262
+ });
263
+
264
+ test('should return true if filter valueFrom is undefined and valueTo in range', () => {
265
+ const filterUndefinedFrom = { ...filter, valueFrom: undefined };
266
+ const result = dateIsBetween(validDate, filterUndefinedFrom);
267
+ expect(result).toBe(true);
268
+ });
269
+
270
+ test('should return true if filter valueTo is undefined and valueFrom in range', () => {
271
+ const filterUndefinedTo = { ...filter, valueTo: undefined };
272
+ const result = dateIsBetween(validDate, filterUndefinedTo);
273
+ expect(result).toBe(true);
274
+ });
275
+
276
+ test('should return true if filter valueFrom and valueTo are both undefined', () => {
277
+ const filterBothUndefined = {
278
+ ...filter,
279
+ valueFrom: undefined,
280
+ valueTo: undefined,
281
+ };
282
+ const result = dateIsBetween(validDate, filterBothUndefined);
283
+ expect(result).toBe(true); // Because both are undefined
284
+ });
285
+ });
286
+
287
+ describe('numberIsBetween', () => {
288
+ const filter: Filter = {
289
+ label: '',
290
+ type: 'betweenNumber',
291
+ key: 'value',
292
+ valueFrom: 10,
293
+ valueTo: 20,
294
+ customFilter: undefined,
295
+ };
296
+
297
+ const itemInRange = 15; // Un item dans la plage
298
+ const itemBelowRange = 5; // Un item en dessous de la plage
299
+ const itemAboveRange = 25; // Un item au-dessus de la plage
300
+
301
+ test('should return true if item value is within the filter range', () => {
302
+ const result = numberIsBetween(itemInRange, filter);
303
+ expect(result).toBe(true);
304
+ });
305
+
306
+ test('should return false if item value is below the filter range', () => {
307
+ const result = numberIsBetween(itemBelowRange, filter);
308
+ expect(result).toBe(false);
309
+ });
310
+
311
+ test('should return false if item value is above the filter range', () => {
312
+ const result = numberIsBetween(itemAboveRange, filter);
313
+ expect(result).toBe(false);
314
+ });
315
+
316
+ test('should return true if filter valueFrom is null', () => {
317
+ const filterNullFrom = { ...filter, valueFrom: null };
318
+ const result = numberIsBetween(itemInRange, filterNullFrom);
319
+ expect(result).toBe(true);
320
+ });
321
+
322
+ test('should return true if filter valueTo is null', () => {
323
+ const filterNullTo = { ...filter, valueTo: null };
324
+ const result = numberIsBetween(itemInRange, filterNullTo);
325
+ expect(result).toBe(true);
326
+ });
327
+
328
+ test('should return true if both filter valueFrom and valueTo are null', () => {
329
+ const filterBothNull = { ...filter, valueFrom: null, valueTo: null };
330
+ const result = numberIsBetween(itemInRange, filterBothNull);
331
+ expect(result).toBe(true); // Because both are null
332
+ });
333
+
334
+ test('should handle NaN gracefully', () => {
335
+ const invalidItemValue = NaN;
336
+ const result = numberIsBetween(invalidItemValue, filter);
337
+ expect(result).toBe(true); // all invalid input value is not filter
338
+ });
339
+ });