@weni/unnnic-system 3.10.0 → 3.11.0-alpha.2

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 (331) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/dist/assets/tokens/colors.json.d.ts +376 -0
  3. package/dist/components/Accordion/Accordion.vue.d.ts +1 -1
  4. package/dist/components/Alert/Alert.vue.d.ts +17 -116
  5. package/dist/components/Alert/Alert.vue.d.ts.map +1 -1
  6. package/dist/components/Alert/Version1dot1.vue.d.ts +2 -38
  7. package/dist/components/Alert/Version1dot1.vue.d.ts.map +1 -1
  8. package/dist/components/AudioRecorder/AudioHandler.vue.d.ts +111 -20
  9. package/dist/components/AudioRecorder/AudioPlayer.vue.d.ts +1 -1
  10. package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +223 -41
  11. package/dist/components/AvatarIcon/AvatarIcon.vue.d.ts +3 -3
  12. package/dist/components/Banner/Banner.vue.d.ts +1 -1
  13. package/dist/components/Banner/InfoBanner.vue.d.ts +1 -1
  14. package/dist/components/Breadcrumb/Breadcrumb.vue.d.ts +1 -1
  15. package/dist/components/Button/Button.vue.d.ts +3 -3
  16. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  17. package/dist/components/Button/ButtonIcon.vue.d.ts +1 -1
  18. package/dist/components/Button/types.d.ts +1 -1
  19. package/dist/components/Button/types.d.ts.map +1 -1
  20. package/dist/components/Card/AccountCard.vue.d.ts +4 -4
  21. package/dist/components/Card/BlankCard.vue.d.ts +1 -1
  22. package/dist/components/Card/Card.vue.d.ts +128 -37
  23. package/dist/components/Card/CardCompany.vue.d.ts +12 -415
  24. package/dist/components/Card/CardData.vue.d.ts +1 -1
  25. package/dist/components/Card/CardStatusesContainer.vue.d.ts +114 -23
  26. package/dist/components/Card/ContentCard.vue.d.ts +2 -2
  27. package/dist/components/Card/DashCard.vue.d.ts +4 -4
  28. package/dist/components/Card/MarketplaceCard.vue.d.ts +1 -1
  29. package/dist/components/Card/SimpleCard.vue.d.ts +112 -21
  30. package/dist/components/Card/StatusCard.vue.d.ts +1 -1
  31. package/dist/components/Card/TitleCard.vue.d.ts +112 -21
  32. package/dist/components/CardImage/CardImage.vue.d.ts +23 -30
  33. package/dist/components/CardInformation/CardInformation.vue.d.ts +114 -23
  34. package/dist/components/CardProject/CardProject.vue.d.ts +3 -3
  35. package/dist/components/Carousel/Carousel.vue.d.ts +14 -417
  36. package/dist/components/Carousel/TagCarousel.vue.d.ts +13 -416
  37. package/dist/components/ChartBar/ChartBar.vue.d.ts +120 -29
  38. package/dist/components/ChartLine/ChartLine.vue.d.ts +110 -19
  39. package/dist/components/ChatText/ChatText.vue.d.ts +111 -20
  40. package/dist/components/ChatsContact/ChatsContact.vue.d.ts +22 -447
  41. package/dist/components/ChatsDashboardTagLive/ChatsDashboardTagLive.vue.d.ts +1 -1
  42. package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts +1 -1
  43. package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts.map +1 -1
  44. package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +114 -23
  45. package/dist/components/ChatsMessage/ChatsMessageStatusBackdrop.vue.d.ts +2 -2
  46. package/dist/components/ChatsNavbar/ChatsNavbar.vue.d.ts +1 -1
  47. package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +3 -3
  48. package/dist/components/Checkbox/Checkbox.vue.d.ts +17 -24
  49. package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
  50. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +28 -0
  51. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +1 -0
  52. package/dist/components/Comment/Comment.vue.d.ts +1 -1
  53. package/dist/components/DataArea/DataArea.vue.d.ts +111 -20
  54. package/dist/components/DataTable/index.vue.d.ts +2 -2
  55. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  56. package/dist/components/DateFilter/DateFilter.vue.d.ts +172 -41
  57. package/dist/components/DatePicker/DatePicker.vue.d.ts +69 -249
  58. package/dist/components/DatePicker/DatePicker.vue.d.ts.map +1 -1
  59. package/dist/components/Drawer/Drawer.vue.d.ts +35 -207
  60. package/dist/components/Drawer/Drawer.vue.d.ts.map +1 -1
  61. package/dist/components/Dropdown/Dropdown.vue.d.ts +2 -2
  62. package/dist/components/Dropdown/LanguageSelect.vue.d.ts +3 -3
  63. package/dist/components/Flag.vue.d.ts +2 -2
  64. package/dist/components/FormElement/FormElement.vue.d.ts +50 -27
  65. package/dist/components/FormElement/FormElement.vue.d.ts.map +1 -1
  66. package/dist/components/Icon.vue.d.ts +1 -1
  67. package/dist/components/Icon.vue.d.ts.map +1 -1
  68. package/dist/components/IconLoading/IconLoading.vue.d.ts +1 -1
  69. package/dist/components/ImportCard/ImportCard.vue.d.ts +10 -10
  70. package/dist/components/Input/BaseInput.vue.d.ts +11 -2
  71. package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
  72. package/dist/components/Input/Input.vue.d.ts +171 -40
  73. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  74. package/dist/components/Input/TextInput.vue.d.ts +33 -24
  75. package/dist/components/Input/TextInput.vue.d.ts.map +1 -1
  76. package/dist/components/InputNext/InputNext.vue.d.ts +3 -3
  77. package/dist/components/Label/Label.vue.d.ts +9 -15
  78. package/dist/components/Label/Label.vue.d.ts.map +1 -1
  79. package/dist/components/Modal/Modal.vue.d.ts +1 -1
  80. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +214 -40
  81. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  82. package/dist/components/ModalNext/ModalNext.vue.d.ts +182 -51
  83. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +21 -21
  84. package/dist/components/MoodRating/MoodRating.vue.d.ts +110 -19
  85. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +26 -14
  86. package/dist/components/PageHeader/PageHeader.vue.d.ts +28 -0
  87. package/dist/components/PageHeader/PageHeader.vue.d.ts.map +1 -0
  88. package/dist/components/PageHeader/index.d.ts +3 -0
  89. package/dist/components/PageHeader/index.d.ts.map +1 -0
  90. package/dist/components/PageHeader/types.d.ts +9 -0
  91. package/dist/components/PageHeader/types.d.ts.map +1 -0
  92. package/dist/components/Pagination/Pagination.vue.d.ts +9 -9
  93. package/dist/components/ProgressBar/ProgressBar.vue.d.ts +1 -1
  94. package/dist/components/Radio/Radio.vue.d.ts +10 -6
  95. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  96. package/dist/components/Select/SelectItem.vue.d.ts +1 -1
  97. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +68 -469
  98. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +12 -415
  99. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +19 -26
  100. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts.map +1 -1
  101. package/dist/components/SelectTime/index.vue.d.ts +34 -25
  102. package/dist/components/SkeletonLoading/skeletonTheme.vue.d.ts +1 -1
  103. package/dist/components/Slider/Slider.vue.d.ts +111 -20
  104. package/dist/components/StarRating/StarRating.vue.d.ts +1 -1
  105. package/dist/components/Switch/Switch.vue.d.ts +56 -22
  106. package/dist/components/Switch/Switch.vue.d.ts.map +1 -1
  107. package/dist/components/Tab/Tab.vue.d.ts +122 -20
  108. package/dist/components/TableNext/TablePagination.vue.d.ts +9 -9
  109. package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
  110. package/dist/components/Tag/DefaultTag.vue.d.ts +4 -83
  111. package/dist/components/Tag/DefaultTag.vue.d.ts.map +1 -1
  112. package/dist/components/Tag/Tag.vue.d.ts +13 -415
  113. package/dist/components/Tag/Tag.vue.d.ts.map +1 -1
  114. package/dist/components/Tag/types.d.ts +18 -0
  115. package/dist/components/Tag/types.d.ts.map +1 -0
  116. package/dist/components/TextArea/TextArea.vue.d.ts +78 -33
  117. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  118. package/dist/components/Toast/Toast.vue.d.ts +16 -0
  119. package/dist/components/Toast/Toast.vue.d.ts.map +1 -0
  120. package/dist/components/Toast/ToastManager.d.ts +14 -0
  121. package/dist/components/Toast/ToastManager.d.ts.map +1 -0
  122. package/dist/components/Toast/types.d.ts +35 -0
  123. package/dist/components/Toast/types.d.ts.map +1 -0
  124. package/dist/components/ToolTip/ToolTip.vue.d.ts +110 -19
  125. package/dist/components/ToolTip/ToolTip.vue.d.ts.map +1 -1
  126. package/dist/components/Tour/Tour.vue.d.ts +9 -9
  127. package/dist/components/Tour/TourPopover.vue.d.ts +9 -9
  128. package/dist/components/UploadArea/UploadArea.vue.d.ts +10 -10
  129. package/dist/components/ui/dialog/Dialog.vue.d.ts +23 -0
  130. package/dist/components/ui/dialog/Dialog.vue.d.ts.map +1 -0
  131. package/dist/components/ui/dialog/DialogClose.vue.d.ts +19 -0
  132. package/dist/components/ui/dialog/DialogClose.vue.d.ts.map +1 -0
  133. package/dist/components/ui/dialog/DialogContent.vue.d.ts +43 -0
  134. package/dist/components/ui/dialog/DialogContent.vue.d.ts.map +1 -0
  135. package/dist/components/ui/dialog/DialogFooter.vue.d.ts +25 -0
  136. package/dist/components/ui/dialog/DialogFooter.vue.d.ts.map +1 -0
  137. package/dist/components/ui/dialog/DialogHeader.vue.d.ts +29 -0
  138. package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +1 -0
  139. package/dist/components/ui/dialog/DialogTitle.vue.d.ts +23 -0
  140. package/dist/components/ui/dialog/DialogTitle.vue.d.ts.map +1 -0
  141. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +19 -0
  142. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts.map +1 -0
  143. package/dist/components/ui/dialog/index.d.ts +8 -0
  144. package/dist/components/ui/dialog/index.d.ts.map +1 -0
  145. package/dist/components/ui/drawer/Drawer.vue.d.ts +35 -0
  146. package/dist/components/ui/drawer/Drawer.vue.d.ts.map +1 -0
  147. package/dist/components/ui/drawer/DrawerClose.vue.d.ts +19 -0
  148. package/dist/components/ui/drawer/DrawerClose.vue.d.ts.map +1 -0
  149. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +42 -0
  150. package/dist/components/ui/drawer/DrawerContent.vue.d.ts.map +1 -0
  151. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +23 -0
  152. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts.map +1 -0
  153. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts +22 -0
  154. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts.map +1 -0
  155. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts +25 -0
  156. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts.map +1 -0
  157. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +8 -0
  158. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts.map +1 -0
  159. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +23 -0
  160. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts.map +1 -0
  161. package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts +19 -0
  162. package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts.map +1 -0
  163. package/dist/components/ui/drawer/index.d.ts +11 -0
  164. package/dist/components/ui/drawer/index.d.ts.map +1 -0
  165. package/dist/components/ui/popover/PopoverContent.vue.d.ts +2 -2
  166. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
  167. package/dist/components/ui/segmented-control/SegmentedControlList.vue.d.ts +26 -0
  168. package/dist/components/ui/segmented-control/SegmentedControlList.vue.d.ts.map +1 -0
  169. package/dist/components/ui/segmented-control/SegmentedControlTrigger.vue.d.ts +24 -0
  170. package/dist/components/ui/segmented-control/SegmentedControlTrigger.vue.d.ts.map +1 -0
  171. package/dist/components/ui/segmented-control/index.d.ts +5 -0
  172. package/dist/components/ui/segmented-control/index.d.ts.map +1 -0
  173. package/dist/components/ui/tabs/TabsTrigger.vue.d.ts.map +1 -1
  174. package/dist/components/ui/tooltip/Tooltip.vue.d.ts +23 -0
  175. package/dist/components/ui/tooltip/Tooltip.vue.d.ts.map +1 -0
  176. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +31 -0
  177. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts.map +1 -0
  178. package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts +19 -0
  179. package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts.map +1 -0
  180. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts +19 -0
  181. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts.map +1 -0
  182. package/dist/components/ui/tooltip/index.d.ts +5 -0
  183. package/dist/components/ui/tooltip/index.d.ts.map +1 -0
  184. package/dist/{es-4b899f97.mjs → es-34baba30.mjs} +1 -1
  185. package/dist/{index-23489897.mjs → index-147b4c7d.mjs} +99341 -95991
  186. package/dist/{pt-br-5a914a63.mjs → pt-br-3921d504.mjs} +1 -1
  187. package/dist/style.css +1 -1
  188. package/dist/unnnic.mjs +229 -185
  189. package/dist/unnnic.umd.js +50 -47
  190. package/dist/utils/call.d.ts +2 -1
  191. package/dist/utils/call.d.ts.map +1 -1
  192. package/package.json +3 -2
  193. package/src/assets/icons/checkbox-checked-disabled.svg +3 -0
  194. package/src/assets/icons/checkbox-checked.svg +3 -0
  195. package/src/assets/icons/checkbox-less-disabled.svg +3 -0
  196. package/src/assets/icons/checkbox-less.svg +3 -0
  197. package/src/assets/icons/radio-checked.svg +3 -0
  198. package/src/assets/icons/switch-checked-disabled.svg +3 -0
  199. package/src/assets/icons/switch-checked.svg +3 -0
  200. package/src/assets/scss/tailwind.scss +8 -0
  201. package/src/components/Alert/Alert.vue +26 -135
  202. package/src/components/Alert/Version1dot1.vue +0 -36
  203. package/src/components/Alert/__tests__/Alert.spec.js +2 -45
  204. package/src/components/Alert/__tests__/Version1dot1.spec.js +0 -21
  205. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +11 -7
  206. package/src/components/Alert/__tests__/__snapshots__/AlertBanner.spec.js.snap +2 -2
  207. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +1 -1
  208. package/src/components/Button/Button.vue +67 -117
  209. package/src/components/Button/types.ts +0 -1
  210. package/src/components/ChatsContact/ChatsContact.vue +10 -6
  211. package/src/components/Checkbox/Checkbox.vue +117 -65
  212. package/src/components/Checkbox/__tests__/Checkbox.spec.js +6 -21
  213. package/src/components/CheckboxGroup/CheckboxGroup.vue +96 -0
  214. package/src/components/DatePicker/DatePicker.vue +628 -516
  215. package/src/components/DatePicker/__tests__/DatePicker.spec.js +227 -0
  216. package/src/components/Drawer/Drawer.vue +177 -270
  217. package/src/components/Drawer/__tests__/Drawer.spec.js +31 -46
  218. package/src/components/Drawer/__tests__/__snapshots__/Drawer.spec.js.snap +18 -19
  219. package/src/components/FormElement/FormElement.vue +63 -93
  220. package/src/components/Icon.vue +2 -0
  221. package/src/components/Input/BaseInput.vue +12 -12
  222. package/src/components/Input/Input.scss +19 -20
  223. package/src/components/Input/Input.vue +60 -55
  224. package/src/components/Input/TextInput.vue +25 -54
  225. package/src/components/Input/__test__/Input.spec.js +13 -33
  226. package/src/components/Input/__test__/TextInput.spec.js +6 -8
  227. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +14 -5
  228. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -1
  229. package/src/components/Label/Label.vue +52 -21
  230. package/src/components/Label/__tests__/Label.spec.js +1 -1
  231. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  232. package/src/components/ModalDialog/ModalDialog.vue +62 -148
  233. package/src/components/ModalDialog/__tests__/ModalDialog.spec.js +11 -221
  234. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -22
  235. package/src/components/PageHeader/PageHeader.vue +148 -0
  236. package/src/components/PageHeader/index.ts +2 -0
  237. package/src/components/PageHeader/types.ts +10 -0
  238. package/src/components/Radio/Radio.vue +118 -66
  239. package/src/components/Radio/__test__/Radio.spec.js +14 -20
  240. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +4 -3
  241. package/src/components/RadioGroup/RadioGroup.vue +142 -0
  242. package/src/components/SelectSmart/SelectSmart.vue +4 -3
  243. package/src/components/Switch/Switch.vue +132 -91
  244. package/src/components/Switch/__tests__/Switch.spec.js +8 -75
  245. package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +5 -6
  246. package/src/components/Tab/Tab.vue +37 -23
  247. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +3 -1
  248. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  249. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  250. package/src/components/Tag/DefaultTag.vue +51 -107
  251. package/src/components/Tag/Tag.vue +32 -79
  252. package/src/components/Tag/types.ts +19 -0
  253. package/src/components/TextArea/TextArea.vue +41 -12
  254. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +11 -3
  255. package/src/components/Toast/Toast.vue +246 -0
  256. package/src/components/Toast/ToastManager.ts +110 -0
  257. package/src/components/Toast/__tests__/Toast.spec.js +291 -0
  258. package/src/components/Toast/__tests__/ToastManager.spec.js +294 -0
  259. package/src/components/Toast/types.ts +57 -0
  260. package/src/components/ToolTip/ToolTip.vue +41 -188
  261. package/src/components/ToolTip/__tests__/ToolTip.spec.js +345 -61
  262. package/src/components/index.ts +95 -5
  263. package/src/components/ui/dialog/Dialog.vue +15 -0
  264. package/src/components/ui/dialog/DialogClose.vue +25 -0
  265. package/src/components/ui/dialog/DialogContent.vue +133 -0
  266. package/src/components/ui/dialog/DialogFooter.vue +46 -0
  267. package/src/components/ui/dialog/DialogHeader.vue +79 -0
  268. package/src/components/ui/dialog/DialogTitle.vue +34 -0
  269. package/src/components/ui/dialog/DialogTrigger.vue +12 -0
  270. package/src/components/ui/dialog/index.ts +7 -0
  271. package/src/components/ui/drawer/Drawer.vue +27 -0
  272. package/src/components/ui/drawer/DrawerClose.vue +37 -0
  273. package/src/components/ui/drawer/DrawerContent.vue +102 -0
  274. package/src/components/ui/drawer/DrawerDescription.vue +40 -0
  275. package/src/components/ui/drawer/DrawerFooter.vue +38 -0
  276. package/src/components/ui/drawer/DrawerHeader.vue +57 -0
  277. package/src/components/ui/drawer/DrawerOverlay.vue +34 -0
  278. package/src/components/ui/drawer/DrawerTitle.vue +37 -0
  279. package/src/components/ui/drawer/DrawerTrigger.vue +31 -0
  280. package/src/components/ui/drawer/index.ts +10 -0
  281. package/src/components/ui/segmented-control/SegmentedControlList.vue +51 -0
  282. package/src/components/ui/segmented-control/SegmentedControlTrigger.vue +81 -0
  283. package/src/components/ui/segmented-control/index.ts +4 -0
  284. package/src/components/ui/tabs/TabsTrigger.vue +4 -20
  285. package/src/components/ui/tooltip/Tooltip.vue +15 -0
  286. package/src/components/ui/tooltip/TooltipContent.vue +73 -0
  287. package/src/components/ui/tooltip/TooltipProvider.vue +15 -0
  288. package/src/components/ui/tooltip/TooltipTrigger.vue +22 -0
  289. package/src/components/ui/tooltip/index.ts +4 -0
  290. package/src/stories/Alert.stories.js +6 -67
  291. package/src/stories/Button.stories.js +29 -39
  292. package/src/stories/Checkbox.stories.js +11 -4
  293. package/src/stories/CheckboxGroup.stories.js +105 -0
  294. package/src/stories/DatePicker.stories.js +71 -0
  295. package/src/stories/Dialog.stories.js +832 -0
  296. package/src/stories/Drawer.stories.js +1 -1
  297. package/src/stories/DrawerNext.stories.js +610 -0
  298. package/src/stories/Input.stories.js +71 -76
  299. package/src/stories/Label.stories.js +7 -0
  300. package/src/stories/ModalDialog.mdx +3 -0
  301. package/src/stories/ModalDialog.stories.js +1 -1
  302. package/src/stories/PageHeader.stories.js +330 -0
  303. package/src/stories/Radio.stories.js +28 -1
  304. package/src/stories/RadioGroup.stories.js +144 -0
  305. package/src/stories/SegmentedControl.stories.js +253 -0
  306. package/src/stories/Switch.stories.js +10 -5
  307. package/src/stories/Tab.stories.js +11 -4
  308. package/src/stories/Tabs.stories.js +1 -1
  309. package/src/stories/Tag.stories.js +24 -43
  310. package/src/stories/TextArea.stories.js +14 -2
  311. package/src/stories/Toast.mdx +123 -0
  312. package/src/stories/Toast.stories.js +126 -0
  313. package/src/types/scheme-colors.d.ts +1 -0
  314. package/src/utils/call.js +46 -18
  315. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +0 -792
  316. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts.map +0 -1
  317. package/dist/components/Tag/BrandTag.vue.d.ts +0 -51
  318. package/dist/components/Tag/BrandTag.vue.d.ts.map +0 -1
  319. package/dist/components/Tag/IndicatorTag.vue.d.ts +0 -151
  320. package/dist/components/Tag/IndicatorTag.vue.d.ts.map +0 -1
  321. package/dist/components/Tag/TagNext.vue.d.ts +0 -24
  322. package/dist/components/Tag/TagNext.vue.d.ts.map +0 -1
  323. package/dist/components/index.d.ts +0 -24078
  324. package/dist/components/index.d.ts.map +0 -1
  325. package/src/components/Alert/AlertBanner.vue +0 -182
  326. package/src/components/Alert/AlertCaller.vue +0 -49
  327. package/src/components/Alert/__tests__/AlertBanner.spec.js +0 -89
  328. package/src/components/Alert/__tests__/AlertCaller.spec.js +0 -98
  329. package/src/components/Tag/BrandTag.vue +0 -96
  330. package/src/components/Tag/IndicatorTag.vue +0 -107
  331. package/src/components/Tag/TagNext.vue +0 -60
@@ -1,11 +1,17 @@
1
1
  <template>
2
- <div class="unnnic-date-picker">
2
+ <div
3
+ class="unnnic-date-picker"
4
+ data-testid="date-picker-root"
5
+ >
3
6
  <template v-if="type === 'day'">
4
7
  <template
5
8
  v-for="(openMonth, index) in openMonths"
6
9
  :key="openMonth"
7
10
  >
8
- <div class="month-container">
11
+ <div
12
+ class="month-container"
13
+ data-testid="date-picker-month-container"
14
+ >
9
15
  <div :class="['header', `header--${size}`]">
10
16
  <UnnnicButton
11
17
  size="small"
@@ -13,6 +19,7 @@
13
19
  :type="size === 'large' ? 'secondary' : 'tertiary'"
14
20
  class="button-space"
15
21
  :style="{ gridArea: `${index === 0 ? 'left' : 'right'}-button` }"
22
+ :data-testid="`date-picker-nav-${index === 0 ? 'left' : 'right'}`"
16
23
  @click.stop="
17
24
  referenceDate = addMonth(referenceDate, index === 0 ? -1 : 1)
18
25
  "
@@ -48,6 +55,7 @@
48
55
  left: date.properties.includes('left-highlighted'),
49
56
  right: date.properties.includes('right-highlighted'),
50
57
  }"
58
+ data-testid="date-picker-day"
51
59
  @click="
52
60
  date.properties.includes('inside month') &&
53
61
  !date.properties.includes('out of range') &&
@@ -68,7 +76,10 @@
68
76
  v-for="openMonth in [referenceDate]"
69
77
  :key="openMonth"
70
78
  >
71
- <div class="month-container">
79
+ <div
80
+ class="month-container"
81
+ data-testid="date-picker-month-container"
82
+ >
72
83
  <div :class="['header', `header--${size}`]">
73
84
  <UnnnicButton
74
85
  size="small"
@@ -76,6 +87,7 @@
76
87
  :type="size === 'large' ? 'secondary' : 'tertiary'"
77
88
  class="button-space"
78
89
  :style="{ gridArea: 'left-button' }"
90
+ data-testid="date-picker-month-nav-left"
79
91
  @click="referenceDate = addMonth(referenceDate, -12)"
80
92
  />
81
93
 
@@ -89,6 +101,7 @@
89
101
  :type="size === 'large' ? 'secondary' : 'tertiary'"
90
102
  class="button-space"
91
103
  :style="{ gridArea: 'right-button' }"
104
+ data-testid="date-picker-month-nav-right"
92
105
  @click="referenceDate = addMonth(referenceDate, 12)"
93
106
  />
94
107
  </div>
@@ -106,11 +119,12 @@
106
119
  left: date.properties.includes('left-highlighted'),
107
120
  right: date.properties.includes('right-highlighted'),
108
121
  }"
122
+ data-testid="date-picker-month-cell"
109
123
  @click="
110
124
  date.properties.includes('inside month') && selectDate(date)
111
125
  "
112
126
  >
113
- {{ monthsLocale[getMonth(date)].substr(0, 3) }}
127
+ {{ monthsLocale[getMonth(date) - 1].substr(0, 3) }}
114
128
  </div>
115
129
  </div>
116
130
  </div>
@@ -124,7 +138,10 @@
124
138
  v-for="openMonth in [referenceDate]"
125
139
  :key="openMonth"
126
140
  >
127
- <div class="month-container">
141
+ <div
142
+ class="month-container"
143
+ data-testid="date-picker-month-container"
144
+ >
128
145
  <div :class="['header', `header--${size}`]">
129
146
  <UnnnicButton
130
147
  size="small"
@@ -132,6 +149,7 @@
132
149
  :type="size === 'large' ? 'secondary' : 'tertiary'"
133
150
  class="button-space"
134
151
  :style="{ gridArea: 'left-button' }"
152
+ data-testid="date-picker-year-nav-left"
135
153
  @click="referenceDate = addMonth(referenceDate, -12 * 12)"
136
154
  />
137
155
 
@@ -145,6 +163,7 @@
145
163
  :type="size === 'large' ? 'secondary' : 'tertiary'"
146
164
  class="button-space"
147
165
  :style="{ gridArea: 'right-button' }"
166
+ data-testid="date-picker-year-nav-right"
148
167
  @click="referenceDate = addMonth(referenceDate, 12 * 12)"
149
168
  />
150
169
  </div>
@@ -162,6 +181,7 @@
162
181
  left: date.properties.includes('left-highlighted'),
163
182
  right: date.properties.includes('right-highlighted'),
164
183
  }"
184
+ data-testid="date-picker-year-cell"
165
185
  @click="
166
186
  date.properties.includes('inside month') && selectDate(date)
167
187
  "
@@ -178,6 +198,7 @@
178
198
  <div
179
199
  v-if="size !== 'small'"
180
200
  class="options-container"
201
+ data-testid="date-picker-options"
181
202
  >
182
203
  <div class="options">
183
204
  <div
@@ -190,6 +211,7 @@
190
211
  selected: optionSelected === option.id,
191
212
  },
192
213
  ]"
214
+ data-testid="date-picker-option"
193
215
  @click="option.id === 'custom' ? null : autoSelect(option.id)"
194
216
  >
195
217
  {{ option.name }}
@@ -202,6 +224,7 @@
202
224
  size="small"
203
225
  :text="clearText"
204
226
  type="tertiary"
227
+ data-testid="date-picker-clear"
205
228
  @click="clear"
206
229
  />
207
230
 
@@ -209,6 +232,7 @@
209
232
  size="small"
210
233
  :text="filterText"
211
234
  type="secondary"
235
+ data-testid="date-picker-submit"
212
236
  @click="submit"
213
237
  />
214
238
  </div>
@@ -216,7 +240,17 @@
216
240
  </div>
217
241
  </template>
218
242
 
219
- <script>
243
+ <script setup lang="ts">
244
+ import {
245
+ computed,
246
+ getCurrentInstance,
247
+ nextTick,
248
+ onMounted,
249
+ ref,
250
+ watch,
251
+ } from 'vue';
252
+ import { get } from 'lodash';
253
+
220
254
  import {
221
255
  months as translationMonths,
222
256
  days as translationDays,
@@ -224,621 +258,699 @@ import {
224
258
  buttons as translationButtons,
225
259
  } from './translations.js';
226
260
 
227
- import UnnnicI18n from '../../mixins/i18n';
261
+ import i18n from '@/utils/plugins/i18n';
228
262
 
229
263
  import UnnnicButton from '../Button/Button.vue';
230
264
 
231
- export default {
232
- components: {
233
- UnnnicButton,
265
+ defineOptions({
266
+ name: 'UnnnicDatePicker',
267
+ });
268
+
269
+ type PeriodOption = {
270
+ id: string;
271
+ name: string;
272
+ };
273
+
274
+ interface DatePickerProps {
275
+ initialStartDate?: string;
276
+ initialEndDate?: string;
277
+
278
+ minDate?: string;
279
+ maxDate?: string;
280
+
281
+ periodBaseDate?: string;
282
+
283
+ equivalentOption?: string;
284
+
285
+ type?: 'day' | 'month' | 'year';
286
+ size?: 'small' | 'large';
287
+
288
+ clearLabel?: string;
289
+ actionLabel?: string;
290
+
291
+ months?: string[];
292
+ days?: string[];
293
+ options?: PeriodOption[];
294
+
295
+ disableClear?: boolean;
296
+
297
+ locale?: string;
298
+ translations?: Record<string, unknown>;
299
+ }
300
+
301
+ const props = withDefaults(defineProps<DatePickerProps>(), {
302
+ initialStartDate: '',
303
+ initialEndDate: '',
304
+ minDate: '',
305
+ maxDate: '',
306
+ periodBaseDate: '',
307
+ equivalentOption: '',
308
+ type: 'day',
309
+ size: 'large',
310
+ clearLabel: '',
311
+ actionLabel: '',
312
+ months: () => [],
313
+ days: () => [],
314
+ options: () => [],
315
+ disableClear: false,
316
+ locale: undefined,
317
+ translations: undefined,
318
+ });
319
+
320
+ const emit = defineEmits<{
321
+ (e: 'change', value: { startDate: string; endDate: string }): void;
322
+ (e: 'submit', value: { startDate: string; endDate: string }): void;
323
+ (e: 'update:equivalentOption', equivalentOption: string): void;
324
+ }>();
325
+
326
+ const today = new Date();
327
+ const referenceDate = ref<string>(
328
+ `${today.getMonth() + 1} 1 ${today.getFullYear()}`,
329
+ );
330
+ const startDate = ref<string>(
331
+ (props.initialStartDate || '').replace(/-/g, ' '),
332
+ );
333
+ const endDate = ref<string>((props.initialEndDate || '').replace(/-/g, ' '));
334
+ const optionSelected = ref<string>('');
335
+
336
+ const defaultTranslations = {
337
+ clean: {
338
+ 'pt-br': 'Limpar',
339
+ en: 'Clean',
340
+ es: 'Limpiar',
234
341
  },
235
- mixins: [UnnnicI18n],
236
-
237
- props: {
238
- initialStartDate: { type: String, default: '' },
239
- initialEndDate: { type: String, default: '' },
240
-
241
- minDate: { type: String, default: '' },
242
- maxDate: { type: String, default: '' },
243
-
244
- equivalentOption: { type: String, default: '' },
245
-
246
- type: {
247
- type: String,
248
- default: 'day',
249
- validator(type) {
250
- return ['day', 'month', 'year'].includes(type);
251
- },
252
- },
253
-
254
- size: {
255
- type: String,
256
- default: 'large',
257
- validator(size) {
258
- return ['small', 'large'].includes(size);
259
- },
260
- },
261
-
262
- clearLabel: {
263
- type: String,
264
- default: '',
265
- },
266
-
267
- actionLabel: {
268
- type: String,
269
- default: '',
270
- },
271
-
272
- months: {
273
- type: Array,
274
- default: () => [],
275
- validator(months) {
276
- return [0, 12].includes(months.length);
277
- },
278
- },
279
-
280
- days: {
281
- type: Array,
282
- default: () => [],
283
- validator(days) {
284
- return [0, 7].includes(days.length);
285
- },
286
- },
287
-
288
- options: {
289
- type: Array,
290
- default: () => [],
291
- },
292
-
293
- disableClear: {
294
- type: Boolean,
295
- default: false,
296
- },
342
+ filter: {
343
+ 'pt-br': 'Filtrar',
344
+ en: 'Filter',
345
+ es: 'Filtrar',
297
346
  },
347
+ } as const;
298
348
 
299
- emits: ['change', 'submit', 'update:equivalentOption'],
300
-
301
- data() {
302
- const today = new Date();
303
- const referenceDate = `${today.getMonth() + 1} 1 ${today.getFullYear()}`;
304
-
305
- return {
306
- referenceDate,
307
- startDate: (this.initialStartDate || '').replace(/-/g, ' '),
308
- endDate: (this.initialEndDate || '').replace(/-/g, ' '),
309
- optionSelected: '',
310
- defaultTranslations: {
311
- clean: {
312
- 'pt-br': 'Limpar',
313
- en: 'Clean',
314
- es: 'Limpiar',
315
- },
316
- filter: {
317
- 'pt-br': 'Filtrar',
318
- en: 'Filter',
319
- es: 'Filtrar',
320
- },
321
- },
322
- };
323
- },
349
+ const instance = getCurrentInstance();
324
350
 
325
- computed: {
326
- openMonths() {
327
- return [this.addMonth(this.referenceDate, -1), this.referenceDate];
328
- },
329
-
330
- value() {
331
- return {
332
- startDate: this.startDate.replaceAll(' ', '-'),
333
- endDate: this.endDate.replaceAll(' ', '-'),
334
- };
335
- },
336
-
337
- i18nLocale() {
338
- return this.$i18n.locale.toLowerCase();
339
- },
340
-
341
- monthsLocale() {
342
- const { months } = this;
343
- return months.length ? months : translationMonths[this.i18nLocale];
344
- },
345
- daysLocale() {
346
- const { days } = this;
347
- return days.length ? days : translationDays[this.i18nLocale];
348
- },
349
- periodsLocale() {
350
- const { options } = this;
351
- return options.length ? options : translationPeriods[this.i18nLocale];
352
- },
353
-
354
- clearText() {
355
- return this.clearLabel || translationButtons[this.i18nLocale].clear;
356
- },
357
- filterText() {
358
- return this.actionLabel || translationButtons[this.i18nLocale].filter;
359
- },
360
- },
351
+ type I18nProxy = {
352
+ $i18n?: {
353
+ locale?: string;
354
+ };
355
+ };
361
356
 
362
- watch: {
363
- value() {
364
- this.updateOptionSelected();
357
+ const i18nLocale = computed(() => {
358
+ const localeFromInstance = (instance?.proxy as I18nProxy | null)?.$i18n
359
+ ?.locale;
360
+ const finalLocale = localeFromInstance || 'en-us';
361
+
362
+ return String(finalLocale).toLowerCase();
363
+ });
364
+
365
+ const monthsLocale = computed(() => {
366
+ const months = props.months || [];
367
+ return months.length ? months : translationMonths[i18nLocale.value];
368
+ });
369
+
370
+ const daysLocale = computed(() => {
371
+ const days = props.days || [];
372
+ return days.length ? days : translationDays[i18nLocale.value];
373
+ });
374
+
375
+ const periodsLocale = computed<PeriodOption[]>(() => {
376
+ const options = props.options || [];
377
+ return options.length ? options : translationPeriods[i18nLocale.value];
378
+ });
379
+
380
+ const clearText = computed(() => {
381
+ return props.clearLabel || translationButtons[i18nLocale.value].clear;
382
+ });
383
+
384
+ const filterText = computed(() => {
385
+ return props.actionLabel || translationButtons[i18nLocale.value].filter;
386
+ });
387
+
388
+ const value = computed(() => ({
389
+ startDate: startDate.value.replaceAll(' ', '-'),
390
+ endDate: endDate.value.replaceAll(' ', '-'),
391
+ }));
392
+
393
+ const i18nFn = (...args: any[]): string | undefined => {
394
+ const [key, defaults] = args;
395
+
396
+ const validLocaleValues = Object.keys(
397
+ ((i18n as any).global.messages as Record<string, unknown>) || {},
398
+ );
399
+
400
+ let locale = props.locale as string | undefined;
401
+
402
+ const treatedSelectedLocale =
403
+ get(i18n, 'global.locale') === 'en-us'
404
+ ? 'en'
405
+ : (get(i18n, 'global.locale') as string | undefined);
406
+
407
+ locale =
408
+ locale && validLocaleValues.includes(locale)
409
+ ? locale
410
+ : treatedSelectedLocale;
411
+
412
+ locale = locale?.toLowerCase();
413
+
414
+ let text = get(
415
+ props.translations,
416
+ `${key}.${locale}`,
417
+ get(props.translations, key),
418
+ ) as string | undefined;
419
+
420
+ if (!text) {
421
+ text = get(
422
+ defaultTranslations as Record<string, unknown>,
423
+ `${key}.${locale}`,
424
+ get(defaultTranslations as Record<string, unknown>, key, defaults),
425
+ ) as string | undefined;
426
+ }
365
427
 
366
- this.$emit('change', this.value);
367
- },
368
- },
428
+ if (text?.includes('|') && typeof args[1] === 'number') {
429
+ const count: number = args[1];
430
+ const pluralization = text.split('|');
369
431
 
370
- mounted() {
371
- this.updateOptionSelected();
372
- },
432
+ if (pluralization.length === 3) {
433
+ text = pluralization[count] || pluralization[2];
434
+ } else if (pluralization.length === 2) {
435
+ text = count === 1 ? pluralization[0] : pluralization[1];
436
+ }
437
+ }
373
438
 
374
- methods: {
375
- submit() {
376
- this.$emit('submit', this.value);
377
-
378
- if (this.optionSelected === 'custom') {
379
- this.$emit('update:equivalentOption', '');
380
- } else {
381
- this.$emit(
382
- 'update:equivalentOption',
383
- this.periodsLocale.find(
384
- ({ id: periodId }) => periodId === this.optionSelected,
385
- )?.name || '',
386
- );
439
+ let vars: Record<string, string> = {};
440
+
441
+ Object.values(args)
442
+ .slice(1)
443
+ .forEach((argument) => {
444
+ if (!(argument instanceof Array) && argument instanceof Object) {
445
+ vars = argument as Record<string, string>;
387
446
  }
388
- },
447
+ });
389
448
 
390
- updateOptionSelected() {
391
- const { startDate, endDate } = this.value;
449
+ Object.keys(vars).forEach((varName) => {
450
+ text = text?.replaceAll(new RegExp(`{ *${varName} *}`, 'g'), vars[varName]);
451
+ });
392
452
 
393
- function isSameTime(date1, date2) {
394
- return new Date(date1).getTime() === new Date(date2).getTime();
395
- }
453
+ return text;
454
+ };
396
455
 
397
- const period = this.periodsLocale.find(({ id: periodId }) => {
398
- const { startDate: periodStartDate, endDate: periodEndDate } =
399
- this.getStartAndEndDateByPeriod(periodId);
456
+ defineExpose({
457
+ i18n: i18nFn,
400
458
 
401
- return (
402
- isSameTime(startDate, periodStartDate) &&
403
- isSameTime(endDate, periodEndDate)
404
- );
405
- });
459
+ startDate,
460
+ endDate,
461
+ optionSelected,
462
+ referenceDate,
406
463
 
407
- this.optionSelected =
408
- startDate || endDate ? (period ? period.id : 'custom') : '';
409
- },
464
+ autoSelect,
465
+ dateToString,
466
+ getStartAndEndDateByPeriod,
467
+ getDatesOfTheMonth,
468
+ });
410
469
 
411
- dateToString(date) {
412
- return `${date.getMonth() + 1} ${date.getDate()} ${date.getFullYear()}`;
413
- },
470
+ function dateToString(date: Date): string {
471
+ return `${date.getMonth() + 1} ${date.getDate()} ${date.getFullYear()}`;
472
+ }
414
473
 
415
- dateToStringMonth(date) {
416
- return `${date.getMonth() + 1} ${date.getFullYear()}`;
417
- },
474
+ function dateToStringMonth(date: Date): string {
475
+ return `${date.getMonth() + 1} ${date.getFullYear()}`;
476
+ }
477
+
478
+ function dateToStringYear(date: Date): number {
479
+ return date.getFullYear();
480
+ }
481
+
482
+ function stringToTime(date: string): number {
483
+ const [month, day, year] = date.split(' ');
484
+ return new Date(Number(year), Number(month) - 1, Number(day)).getTime();
485
+ }
418
486
 
419
- dateToStringYear(date) {
420
- return date.getFullYear();
421
- },
487
+ function getDate(date: { toString: () => string }): string {
488
+ return date.toString().split(' ')[1];
489
+ }
422
490
 
423
- stringToTime(date) {
424
- const [month, day, year] = date.split(' ');
425
- return new Date(year, Number(month) - 1, day).getTime();
426
- },
491
+ function getMonth(date: { toString: () => string }): number {
492
+ return Number(date.toString().split(' ')[0]);
493
+ }
427
494
 
428
- getDate(date) {
429
- return date.toString().split(' ')[1];
430
- },
495
+ function getFullYear(date: string): number {
496
+ const [month, day, year] = date.split(' ');
497
+ return new Date(Number(year), Number(month) - 1, Number(day)).getFullYear();
498
+ }
431
499
 
432
- getMonth(date) {
433
- return date.toString().split(' ')[0];
434
- },
500
+ function addMonth(reference: string, quantity: number): string {
501
+ const [month, day, year] = reference.split(' ');
435
502
 
436
- getFullYear(date) {
437
- const [month, day, year] = date.split(' ');
438
- return new Date(year, Number(month) - 1, day).getFullYear();
439
- },
503
+ const date = new Date(Number(year), Number(month) - 1, Number(day));
440
504
 
441
- addMonth(referenceDate, quantity) {
442
- const [month, day, year] = referenceDate.split(' ');
505
+ date.setMonth(date.getMonth() + quantity);
443
506
 
444
- const date = new Date(year, Number(month) - 1, day);
507
+ return dateToString(date);
508
+ }
445
509
 
446
- date.setMonth(date.getMonth() + quantity);
510
+ function isDateBetween(internalDate: number): boolean {
511
+ if (startDate.value && endDate.value) {
512
+ if (
513
+ internalDate >= stringToTime(startDate.value) &&
514
+ internalDate <= stringToTime(endDate.value)
515
+ ) {
516
+ return true;
517
+ }
518
+ } else if (startDate.value && internalDate >= stringToTime(startDate.value)) {
519
+ return true;
520
+ } else if (endDate.value && internalDate <= stringToTime(endDate.value)) {
521
+ return true;
522
+ }
447
523
 
448
- return this.dateToString(date);
449
- },
524
+ return false;
525
+ }
450
526
 
451
- isDateBetween(internalDate) {
452
- if (this.startDate && this.endDate) {
453
- if (
454
- internalDate >= this.stringToTime(this.startDate) &&
455
- internalDate <= this.stringToTime(this.endDate)
456
- ) {
457
- return true;
458
- }
459
- } else if (
460
- this.startDate &&
461
- internalDate >= this.stringToTime(this.startDate)
462
- ) {
463
- return true;
464
- } else if (
465
- this.endDate &&
466
- internalDate <= this.stringToTime(this.endDate)
467
- ) {
468
- return true;
469
- }
527
+ function isDateBetweenMonth(internalDate: number): boolean {
528
+ if (startDate.value && endDate.value) {
529
+ const startTime = stringToTime(startDate.value);
530
+ const endTime = stringToTime(endDate.value);
470
531
 
471
- return false;
472
- },
532
+ return internalDate >= startTime && internalDate <= endTime;
533
+ }
473
534
 
474
- isDateBetweenMonth(internalDate) {
475
- const [month, day, year] = internalDate.split(' ');
476
- const startDate = new Date(year, Number(month) - 1, day);
477
- startDate.setDate(1);
478
- const startDateTime = startDate.getTime();
535
+ if (startDate.value) {
536
+ const startTime = stringToTime(startDate.value);
537
+ return internalDate >= startTime;
538
+ }
479
539
 
480
- if (this.startDate && this.endDate) {
481
- if (
482
- internalDate >= startDateTime &&
483
- internalDate <= this.stringToTime(this.endDate)
484
- ) {
485
- return true;
486
- }
487
- } else if (this.startDate && internalDate >= startDateTime) {
488
- return true;
489
- } else if (
490
- this.endDate &&
491
- internalDate <= this.stringToTime(this.endDate)
492
- ) {
493
- return true;
494
- }
540
+ if (endDate.value) {
541
+ const endTime = stringToTime(endDate.value);
542
+ return internalDate <= endTime;
543
+ }
495
544
 
496
- return false;
497
- },
545
+ return false;
546
+ }
498
547
 
499
- isDateBetweenYear(internalDate) {
500
- const [month, day, year] = internalDate.split(' ');
501
- const startDate = new Date(year, Number(month) - 1, day);
502
- startDate.setDate(1);
503
- startDate.setMonth(0);
504
- const startDateTime = startDate.getTime();
548
+ function isDateBetweenYear(internalDate: number): boolean {
549
+ if (startDate.value && endDate.value) {
550
+ const startTime = stringToTime(startDate.value);
551
+ const endTime = stringToTime(endDate.value);
505
552
 
506
- if (this.startDate && this.endDate) {
507
- if (
508
- internalDate >= startDateTime &&
509
- internalDate <= this.stringToTime(this.endDate)
510
- ) {
511
- return true;
512
- }
513
- } else if (this.startDate && internalDate >= startDateTime) {
514
- return true;
515
- } else if (
516
- this.endDate &&
517
- internalDate <= this.stringToTime(this.endDate)
518
- ) {
519
- return true;
520
- }
553
+ return internalDate >= startTime && internalDate <= endTime;
554
+ }
521
555
 
522
- return false;
523
- },
556
+ if (startDate.value) {
557
+ const startTime = stringToTime(startDate.value);
558
+ return internalDate >= startTime;
559
+ }
524
560
 
525
- getDatesOfTheMonth(referenceDate) {
526
- const [month, day, year] = referenceDate.split(' ');
561
+ if (endDate.value) {
562
+ const endTime = stringToTime(endDate.value);
563
+ return internalDate <= endTime;
564
+ }
527
565
 
528
- const date = new Date(year, Number(month) - 1, day);
566
+ return false;
567
+ }
529
568
 
530
- const currentMonth = date.getMonth();
531
- const oneDayInSeconds = 86400;
569
+ function getDatesOfTheMonth(reference: string) {
570
+ const [month, day, year] = reference.split(' ');
532
571
 
533
- date.setDate(1 - date.getDay());
572
+ const date = new Date(Number(year), Number(month) - 1, Number(day));
534
573
 
535
- const dates = [];
574
+ const currentMonth = date.getMonth();
575
+ const oneDayInSeconds = 86400;
536
576
 
537
- for (let i = 0; i < 6 * 7; i += 1) {
538
- const dateString = this.dateToString(date);
539
- const properties = [];
577
+ date.setDate(1 - date.getDay());
540
578
 
541
- if (this.minDate) {
542
- const [minDateYear, minDateMonth, minDateDay] =
543
- this.minDate.split('-');
579
+ const dates: { properties: string[]; toString: () => string }[] = [];
544
580
 
545
- const formatedMinDate = new Date(
546
- minDateYear,
547
- Number(minDateMonth) - 1,
548
- minDateDay,
549
- );
581
+ for (let i = 0; i < 6 * 7; i += 1) {
582
+ const dateString = dateToString(date);
583
+ const properties: string[] = [];
550
584
 
551
- if (date < formatedMinDate) properties.push('out of range');
552
- }
585
+ if (props.minDate) {
586
+ const [minDateYear, minDateMonth, minDateDay] = props.minDate.split('-');
553
587
 
554
- if (this.maxDate) {
555
- const [maxDateYear, maxDateMonth, maxDateDay] =
556
- this.maxDate.split('-');
588
+ const formatedMinDate = new Date(
589
+ Number(minDateYear),
590
+ Number(minDateMonth) - 1,
591
+ Number(minDateDay),
592
+ );
557
593
 
558
- const formatedMaxDate = new Date(
559
- maxDateYear,
560
- Number(maxDateMonth) - 1,
561
- maxDateDay,
562
- );
594
+ if (date < formatedMinDate) properties.push('out of range');
595
+ }
563
596
 
564
- if (date > formatedMaxDate) properties.push('out of range');
565
- }
597
+ if (props.maxDate) {
598
+ const [maxDateYear, maxDateMonth, maxDateDay] = props.maxDate.split('-');
566
599
 
567
- if (currentMonth === date.getMonth()) {
568
- properties.push('inside month');
600
+ const formatedMaxDate = new Date(
601
+ Number(maxDateYear),
602
+ Number(maxDateMonth) - 1,
603
+ Number(maxDateDay),
604
+ );
569
605
 
570
- const dateInTime = this.stringToTime(this.dateToString(date));
571
- const dayBefore = dateInTime - oneDayInSeconds;
572
- const dayAfter = dateInTime + oneDayInSeconds;
606
+ if (date > formatedMaxDate) properties.push('out of range');
607
+ }
573
608
 
574
- if (this.isDateBetween(dateInTime)) {
575
- properties.push('selected');
609
+ if (currentMonth === date.getMonth()) {
610
+ properties.push('inside month');
576
611
 
577
- if (!this.isDateBetween(dayBefore)) {
578
- properties.push('left-highlighted');
579
- }
612
+ const dateInTime = stringToTime(dateToString(date));
613
+ const dayBefore = dateInTime - oneDayInSeconds;
614
+ const dayAfter = dateInTime + oneDayInSeconds;
580
615
 
581
- if (!this.isDateBetween(dayAfter)) {
582
- properties.push('right-highlighted');
583
- }
616
+ if (isDateBetween(dateInTime)) {
617
+ properties.push('selected');
584
618
 
585
- if (
586
- properties.includes('left-highlighted') ||
587
- properties.includes('right-highlighted')
588
- ) {
589
- properties.push('highlighted');
590
- }
591
- }
619
+ if (!isDateBetween(dayBefore)) {
620
+ properties.push('left-highlighted');
592
621
  }
593
622
 
594
- if (this.dateToString(date) === this.dateToString(new Date())) {
595
- properties.push('today');
623
+ if (!isDateBetween(dayAfter)) {
624
+ properties.push('right-highlighted');
596
625
  }
597
626
 
598
- dates.push({
599
- properties,
600
- toString: () => dateString,
601
- });
602
-
603
- date.setDate(date.getDate() + 1);
627
+ if (
628
+ properties.includes('left-highlighted') ||
629
+ properties.includes('right-highlighted')
630
+ ) {
631
+ properties.push('highlighted');
632
+ }
604
633
  }
634
+ }
605
635
 
606
- return dates;
607
- },
636
+ if (dateToString(date) === dateToString(new Date())) {
637
+ properties.push('today');
638
+ }
608
639
 
609
- getMonthsOfTheYear(referenceDate) {
610
- const [month, day, year] = referenceDate.split(' ');
640
+ dates.push({
641
+ properties,
642
+ toString: () => dateString,
643
+ });
611
644
 
612
- const date = new Date(year, Number(month) - 1, day);
645
+ date.setDate(date.getDate() + 1);
646
+ }
613
647
 
614
- date.setMonth(0);
648
+ return dates;
649
+ }
615
650
 
616
- const dates = [];
651
+ function getMonthsOfTheYear(reference: string) {
652
+ const [month, day, year] = reference.split(' ');
617
653
 
618
- for (let i = 0; i < 3 * 4; i += 1) {
619
- const dateString = this.dateToString(date);
620
- const properties = [];
654
+ const date = new Date(Number(year), Number(month) - 1, Number(day));
621
655
 
622
- properties.push('inside month');
656
+ date.setMonth(0);
623
657
 
624
- const dateInTime = this.stringToTime(this.dateToString(date));
625
- let monthBefore = new Date(dateInTime);
626
- let monthAfter = new Date(dateInTime);
658
+ const dates: {
659
+ properties: string[];
660
+ date: string;
661
+ toString: () => string;
662
+ }[] = [];
627
663
 
628
- monthBefore.setMonth(monthBefore.getMonth() - 1);
629
- monthAfter.setMonth(monthAfter.getMonth() + 1);
664
+ for (let i = 0; i < 3 * 4; i += 1) {
665
+ const dateString = dateToString(date);
666
+ const properties: string[] = [];
630
667
 
631
- monthBefore = monthBefore.getTime();
632
- monthAfter = monthAfter.getTime();
668
+ properties.push('inside month');
633
669
 
634
- if (this.isDateBetweenMonth(dateInTime)) {
635
- properties.push('selected');
670
+ const dateInTime = stringToTime(dateToString(date));
671
+ const monthBefore = new Date(dateInTime);
672
+ const monthAfter = new Date(dateInTime);
636
673
 
637
- if (!this.isDateBetweenMonth(monthBefore)) {
638
- properties.push('left-highlighted');
639
- }
674
+ monthBefore.setMonth(monthBefore.getMonth() - 1);
675
+ monthAfter.setMonth(monthAfter.getMonth() + 1);
640
676
 
641
- if (!this.isDateBetweenMonth(monthAfter)) {
642
- properties.push('right-highlighted');
643
- }
677
+ const monthBeforeTime = monthBefore.getTime();
678
+ const monthAfterTime = monthAfter.getTime();
644
679
 
645
- if (
646
- properties.includes('left-highlighted') ||
647
- properties.includes('right-highlighted')
648
- ) {
649
- properties.push('highlighted');
650
- }
651
- }
680
+ if (isDateBetweenMonth(dateInTime)) {
681
+ properties.push('selected');
652
682
 
653
- if (
654
- this.dateToStringMonth(date) === this.dateToStringMonth(new Date())
655
- ) {
656
- properties.push('today');
657
- }
658
-
659
- dates.push({
660
- properties,
661
- date: dateString,
662
- toString: () => dateString,
663
- });
664
-
665
- date.setMonth(date.getMonth() + 1);
683
+ if (!isDateBetweenMonth(monthBeforeTime)) {
684
+ properties.push('left-highlighted');
666
685
  }
667
686
 
668
- return dates;
669
- },
687
+ if (!isDateBetweenMonth(monthAfterTime)) {
688
+ properties.push('right-highlighted');
689
+ }
670
690
 
671
- getYears(referenceDate) {
672
- const [month, day, year] = referenceDate.split(' ');
691
+ if (
692
+ properties.includes('left-highlighted') ||
693
+ properties.includes('right-highlighted')
694
+ ) {
695
+ properties.push('highlighted');
696
+ }
697
+ }
673
698
 
674
- const date = new Date(year, Number(month) - 1, day);
699
+ if (dateToStringMonth(date) === dateToStringMonth(new Date())) {
700
+ properties.push('today');
701
+ }
675
702
 
676
- date.setMonth(0);
703
+ dates.push({
704
+ properties,
705
+ date: dateString,
706
+ toString: () => dateString,
707
+ });
677
708
 
678
- const dates = [];
709
+ date.setMonth(date.getMonth() + 1);
710
+ }
679
711
 
680
- for (let i = 0; i < 3 * 4; i += 1) {
681
- const dateString = this.dateToString(date);
682
- const properties = [];
712
+ return dates;
713
+ }
683
714
 
684
- properties.push('inside month');
715
+ function getYears(reference: string) {
716
+ const [month, day, year] = reference.split(' ');
685
717
 
686
- const dateInTime = this.stringToTime(this.dateToString(date));
718
+ const date = new Date(Number(year), Number(month) - 1, Number(day));
687
719
 
688
- const [dateInTimeMonth, dateInTimeDay, dateInTimeYear] =
689
- referenceDate.split(' ');
720
+ date.setMonth(0);
690
721
 
691
- let yearBefore = new Date(
692
- dateInTimeYear,
693
- Number(dateInTimeMonth) - 1,
694
- dateInTimeDay,
695
- );
696
- let yearAfter = new Date(
697
- dateInTimeYear,
698
- Number(dateInTimeMonth) - 1,
699
- dateInTimeDay,
700
- );
722
+ const dates: {
723
+ properties: string[];
724
+ date: number;
725
+ toString: () => string;
726
+ }[] = [];
701
727
 
702
- yearBefore.setMonth(yearBefore.getMonth() - 12);
703
- yearAfter.setMonth(yearAfter.getMonth() + 12);
728
+ for (let i = 0; i < 3 * 4; i += 1) {
729
+ const dateString = dateToString(date);
730
+ const properties: string[] = [];
704
731
 
705
- yearBefore = yearBefore.getTime();
706
- yearAfter = yearAfter.getTime();
732
+ properties.push('inside month');
707
733
 
708
- if (this.isDateBetweenYear(dateInTime)) {
709
- properties.push('selected');
734
+ const dateInTime = stringToTime(dateToString(date));
710
735
 
711
- if (!this.isDateBetweenYear(yearBefore)) {
712
- properties.push('left-highlighted');
713
- }
736
+ const [dateInTimeMonth, dateInTimeDay, dateInTimeYear] =
737
+ reference.split(' ');
714
738
 
715
- if (!this.isDateBetweenYear(yearAfter)) {
716
- properties.push('right-highlighted');
717
- }
739
+ const yearBefore = new Date(
740
+ Number(dateInTimeYear),
741
+ Number(dateInTimeMonth) - 1,
742
+ Number(dateInTimeDay),
743
+ );
744
+ const yearAfter = new Date(
745
+ Number(dateInTimeYear),
746
+ Number(dateInTimeMonth) - 1,
747
+ Number(dateInTimeDay),
748
+ );
718
749
 
719
- if (
720
- properties.includes('left-highlighted') ||
721
- properties.includes('right-highlighted')
722
- ) {
723
- properties.push('highlighted');
724
- }
725
- }
750
+ yearBefore.setMonth(yearBefore.getMonth() - 12);
751
+ yearAfter.setMonth(yearAfter.getMonth() + 12);
726
752
 
727
- if (this.dateToStringYear(date) === this.dateToStringYear(new Date())) {
728
- properties.push('today');
729
- }
753
+ const yearBeforeTime = yearBefore.getTime();
754
+ const yearAfterTime = yearAfter.getTime();
730
755
 
731
- dates.push({
732
- properties,
733
- date: date.getFullYear(),
734
- toString: () => dateString,
735
- });
756
+ if (isDateBetweenYear(dateInTime)) {
757
+ properties.push('selected');
736
758
 
737
- date.setFullYear(date.getFullYear() + 1);
759
+ if (!isDateBetweenYear(yearBeforeTime)) {
760
+ properties.push('left-highlighted');
738
761
  }
739
762
 
740
- return dates;
741
- },
742
-
743
- selectDate(date) {
744
- if (!this.startDate || !this.endDate) {
745
- this.startDate = date.toString();
746
- this.endDate = this.startDate;
747
- } else {
748
- const self = this.stringToTime(date.toString());
749
-
750
- const startDate = this.stringToTime(this.startDate);
751
- const endDate = this.stringToTime(this.endDate);
752
-
753
- if (startDate !== endDate) {
754
- this.startDate = date.toString();
755
- this.endDate = this.startDate;
756
- } else if (self > endDate) {
757
- this.endDate = date.toString();
758
- } else if (self < startDate) {
759
- this.startDate = date.toString();
760
- } else if (self === startDate || self === endDate) {
761
- this.startDate = date.toString();
762
- this.endDate = this.startDate;
763
- } else if (self - startDate < endDate - self) {
764
- this.startDate = date.toString();
765
- } else {
766
- this.endDate = date.toString();
767
- }
763
+ if (!isDateBetweenYear(yearAfterTime)) {
764
+ properties.push('right-highlighted');
768
765
  }
769
- },
770
-
771
- clear() {
772
- this.startDate = '';
773
- this.endDate = '';
774
- this.optionSelected = '';
775
- },
776
-
777
- getStartAndEndDateByPeriod(period) {
778
- let startDate;
779
- let endDate;
780
-
781
- const today = new Date();
782
-
783
- const days = period.match(/^last-(\d+)-days$/);
784
- const months = period.match(/^last-(\d+)-months$/);
785
-
786
- if (days) {
787
- const howMuch = Number(days[1]);
788
-
789
- endDate = this.dateToString(today);
790
- today.setDate(today.getDate() - howMuch + 1);
791
- startDate = this.dateToString(today);
792
- } else if (months) {
793
- const howMuch = Number(months[1]);
794
-
795
- endDate = this.dateToString(today);
796
- today.setDate(today.getDate() + 1);
797
- today.setMonth(today.getMonth() - howMuch);
798
- startDate = this.dateToString(today);
799
- } else if (period === 'current-month') {
800
- const referenceDate = new Date();
801
- today.setDate(1);
802
- startDate = this.dateToString(today);
803
- const referenceDay = referenceDate.getDate();
804
- today.setDate(referenceDay);
805
- endDate = this.dateToString(today);
806
- } else if (period === 'previous-month') {
807
- today.setDate(1);
808
- today.setMonth(today.getMonth() - 1);
809
- startDate = this.dateToString(today);
810
- today.setMonth(today.getMonth() + 1);
811
- today.setDate(0);
812
- endDate = this.dateToString(today);
766
+
767
+ if (
768
+ properties.includes('left-highlighted') ||
769
+ properties.includes('right-highlighted')
770
+ ) {
771
+ properties.push('highlighted');
813
772
  }
773
+ }
814
774
 
815
- return { startDate, endDate };
816
- },
775
+ if (dateToStringYear(date) === dateToStringYear(new Date())) {
776
+ properties.push('today');
777
+ }
817
778
 
818
- autoSelect(method) {
819
- const { startDate, endDate } = this.getStartAndEndDateByPeriod(method);
779
+ dates.push({
780
+ properties,
781
+ date: date.getFullYear(),
782
+ toString: () => dateString,
783
+ });
820
784
 
821
- this.startDate = startDate;
822
- this.endDate = endDate;
785
+ date.setFullYear(date.getFullYear() + 1);
786
+ }
823
787
 
824
- if (this.endDate) {
825
- const secondMonth = this.addMonth(this.referenceDate, 1);
788
+ return dates;
789
+ }
826
790
 
827
- const firstDateOfEndDate = `${Number(
828
- this.getMonth(this.endDate),
829
- )} 1 ${this.getFullYear(this.endDate)}`;
791
+ function selectDate(date: { toString: () => string }) {
792
+ if (!startDate.value || !endDate.value) {
793
+ startDate.value = date.toString();
794
+ endDate.value = startDate.value;
795
+ } else {
796
+ const self = stringToTime(date.toString());
797
+
798
+ const startTime = stringToTime(startDate.value);
799
+ const endTime = stringToTime(endDate.value);
800
+
801
+ if (startTime !== endTime) {
802
+ startDate.value = date.toString();
803
+ endDate.value = startDate.value;
804
+ } else if (self > endTime) {
805
+ endDate.value = date.toString();
806
+ } else if (self < startTime) {
807
+ startDate.value = date.toString();
808
+ } else if (self === startTime || self === endTime) {
809
+ startDate.value = date.toString();
810
+ endDate.value = startDate.value;
811
+ } else if (self - startTime < endTime - self) {
812
+ startDate.value = date.toString();
813
+ } else {
814
+ endDate.value = date.toString();
815
+ }
816
+ }
817
+ }
830
818
 
831
- if (![this.referenceDate, secondMonth].includes(firstDateOfEndDate)) {
832
- this.referenceDate = firstDateOfEndDate;
833
- }
834
- }
819
+ function clear() {
820
+ startDate.value = '';
821
+ endDate.value = '';
822
+ optionSelected.value = '';
823
+ }
835
824
 
836
- this.$nextTick(() => {
837
- this.optionSelected = method;
838
- });
839
- },
840
- },
841
- };
825
+ function getStartAndEndDateByPeriod(period: string) {
826
+ let periodStartDate: string | undefined;
827
+ let periodEndDate: string | undefined;
828
+
829
+ let baseDate: Date;
830
+
831
+ if (props.periodBaseDate) {
832
+ const parts = props.periodBaseDate.split('-');
833
+
834
+ if (parts.length === 3) {
835
+ const [year, month, day] = parts;
836
+
837
+ baseDate = new Date(Number(year), Number(month) - 1, Number(day));
838
+ } else {
839
+ const parsed = new Date(props.periodBaseDate);
840
+ baseDate = Number.isNaN(parsed.getTime()) ? new Date() : parsed;
841
+ }
842
+ } else {
843
+ baseDate = new Date();
844
+ }
845
+
846
+ const todayClone = new Date(baseDate.getTime());
847
+
848
+ const daysMatch = period.match(/^last-(\d+)-days$/);
849
+ const monthsMatch = period.match(/^last-(\d+)-months$/);
850
+
851
+ if (daysMatch) {
852
+ const howMuch = Number(daysMatch[1]);
853
+
854
+ periodEndDate = dateToString(todayClone);
855
+ todayClone.setDate(todayClone.getDate() - howMuch + 1);
856
+ periodStartDate = dateToString(todayClone);
857
+ } else if (monthsMatch) {
858
+ const howMuch = Number(monthsMatch[1]);
859
+
860
+ periodEndDate = dateToString(todayClone);
861
+ todayClone.setDate(todayClone.getDate() + 1);
862
+ todayClone.setMonth(todayClone.getMonth() - howMuch);
863
+ periodStartDate = dateToString(todayClone);
864
+ } else if (period === 'current-month') {
865
+ const referenceDay = baseDate.getDate();
866
+
867
+ todayClone.setDate(1);
868
+ periodStartDate = dateToString(todayClone);
869
+ todayClone.setDate(referenceDay);
870
+ periodEndDate = dateToString(todayClone);
871
+ } else if (period === 'previous-month') {
872
+ todayClone.setDate(1);
873
+ todayClone.setMonth(todayClone.getMonth() - 1);
874
+ periodStartDate = dateToString(todayClone);
875
+ todayClone.setMonth(todayClone.getMonth() + 1);
876
+ todayClone.setDate(0);
877
+ periodEndDate = dateToString(todayClone);
878
+ }
879
+
880
+ return { startDate: periodStartDate, endDate: periodEndDate };
881
+ }
882
+
883
+ function autoSelect(method: string) {
884
+ const { startDate: periodStartDate, endDate: periodEndDate } =
885
+ getStartAndEndDateByPeriod(method);
886
+
887
+ startDate.value = periodStartDate || '';
888
+ endDate.value = periodEndDate || '';
889
+
890
+ if (endDate.value) {
891
+ const secondMonth = addMonth(referenceDate.value, 1);
892
+
893
+ const firstDateOfEndDate = `${Number(
894
+ getMonth({
895
+ toString: () => endDate.value,
896
+ }),
897
+ )} 1 ${getFullYear(endDate.value)}`;
898
+
899
+ if (![referenceDate.value, secondMonth].includes(firstDateOfEndDate)) {
900
+ referenceDate.value = firstDateOfEndDate;
901
+ }
902
+ }
903
+
904
+ nextTick(() => {
905
+ optionSelected.value = method;
906
+ });
907
+ }
908
+
909
+ function submit() {
910
+ emit('submit', value.value);
911
+
912
+ if (optionSelected.value === 'custom') {
913
+ emit('update:equivalentOption', '');
914
+ } else {
915
+ const period = periodsLocale.value.find(
916
+ ({ id }) => id === optionSelected.value,
917
+ );
918
+
919
+ emit('update:equivalentOption', period?.name || '');
920
+ }
921
+ }
922
+
923
+ function updateOptionSelected() {
924
+ const { startDate: start, endDate: end } = value.value;
925
+
926
+ const isSameTime = (date1?: string, date2?: string) => {
927
+ if (!date1 || !date2) return false;
928
+ return new Date(date1).getTime() === new Date(date2).getTime();
929
+ };
930
+
931
+ const period = periodsLocale.value.find(({ id }) => {
932
+ const { startDate: periodStartDate, endDate: periodEndDate } =
933
+ getStartAndEndDateByPeriod(id);
934
+
935
+ return isSameTime(start, periodStartDate) && isSameTime(end, periodEndDate);
936
+ });
937
+
938
+ optionSelected.value = start || end ? (period ? period.id : 'custom') : '';
939
+ }
940
+
941
+ const openMonths = computed(() => [
942
+ addMonth(referenceDate.value, -1),
943
+ referenceDate.value,
944
+ ]);
945
+
946
+ watch(value, (newValue) => {
947
+ updateOptionSelected();
948
+ emit('change', newValue);
949
+ });
950
+
951
+ onMounted(() => {
952
+ updateOptionSelected();
953
+ });
842
954
  </script>
843
955
 
844
956
  <style lang="scss" scoped>