@scbt-ecom/ui 0.0.29 → 0.0.30

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 (325) hide show
  1. package/.env +2 -0
  2. package/.eslintrc.cjs +134 -0
  3. package/.github/workflows/npm-publish.yml +22 -0
  4. package/.github/workflows/publish.yml +49 -0
  5. package/.github/workflows/setup-node/action.yml +22 -0
  6. package/.husky/pre-commit +1 -0
  7. package/.prettierrc +19 -0
  8. package/.storybook/main.ts +44 -0
  9. package/.storybook/preview.tsx +37 -0
  10. package/chromatic.config.json +5 -0
  11. package/index.html +13 -0
  12. package/lib/client.ts +80 -0
  13. package/lib/configs/index.ts +1 -0
  14. package/lib/configs/tailwindConfigBase.ts +110 -0
  15. package/lib/server.ts +2 -0
  16. package/lib/shared/constants/api.ts +2 -0
  17. package/lib/shared/constants/designSystem/colors.ts +117 -0
  18. package/lib/shared/constants/designSystem/index.ts +3 -0
  19. package/lib/shared/constants/designSystem/others.ts +18 -0
  20. package/lib/shared/constants/designSystem/typography.ts +88 -0
  21. package/lib/shared/constants/index.ts +2 -0
  22. package/lib/shared/hooks/index.ts +4 -0
  23. package/lib/shared/hooks/useBoolean.ts +12 -0
  24. package/lib/shared/hooks/useClickOutside.ts +19 -0
  25. package/lib/shared/hooks/useControlledForm.ts +16 -0
  26. package/lib/shared/hooks/useDebounce.ts +38 -0
  27. package/lib/shared/style.css +74 -0
  28. package/lib/shared/ui/Badge.tsx +20 -0
  29. package/lib/shared/ui/Breadcrumbs.tsx +57 -0
  30. package/lib/shared/ui/ButtonIcon.tsx +52 -0
  31. package/lib/shared/ui/CustomLink.tsx +70 -0
  32. package/lib/shared/ui/Document.tsx +51 -0
  33. package/lib/shared/ui/Heading.tsx +33 -0
  34. package/lib/shared/ui/Hint.tsx +62 -0
  35. package/lib/shared/ui/Loader.tsx +58 -0
  36. package/lib/shared/ui/PhoneView.tsx +23 -0
  37. package/lib/shared/ui/Portal.tsx +9 -0
  38. package/lib/shared/ui/ProgressBar.tsx +43 -0
  39. package/lib/shared/ui/ResponsiveContainer.tsx +11 -0
  40. package/lib/shared/ui/Section.tsx +15 -0
  41. package/lib/shared/ui/Skeleton.tsx +9 -0
  42. package/lib/shared/ui/TabsSwitcher.tsx +80 -0
  43. package/lib/shared/ui/accordion/Accordion.tsx +36 -0
  44. package/lib/shared/ui/accordion/index.ts +1 -0
  45. package/lib/shared/ui/accordion/model/types.ts +20 -0
  46. package/lib/shared/ui/accordion/ui/AccordionHeader.tsx +35 -0
  47. package/lib/shared/ui/brandLogos.tsx +14 -0
  48. package/lib/shared/ui/button/Button.tsx +111 -0
  49. package/lib/shared/ui/button/index.ts +1 -0
  50. package/lib/shared/ui/button/model/helpers.ts +16 -0
  51. package/lib/shared/ui/calendar/Calendar.tsx +228 -0
  52. package/lib/shared/ui/calendar/index.ts +231 -0
  53. package/lib/shared/ui/calendar/model/animation.ts +112 -0
  54. package/lib/shared/ui/calendar/model/classes.ts +34 -0
  55. package/lib/shared/ui/calendar/model/helpers.ts +51 -0
  56. package/lib/shared/ui/calendar/model/hooks/index.ts +2 -0
  57. package/lib/shared/ui/calendar/model/hooks/useCalendarDropdowns.ts +38 -0
  58. package/lib/shared/ui/calendar/model/hooks/useDatePicker.ts +103 -0
  59. package/lib/shared/ui/calendar/ui/CalendarHeader.tsx +54 -0
  60. package/lib/shared/ui/calendar/ui/Dropdown.tsx +75 -0
  61. package/lib/shared/ui/calendar/ui/NavigationArrows.tsx +23 -0
  62. package/lib/shared/ui/calendar/ui/Weekdays.tsx +16 -0
  63. package/lib/shared/ui/calendar/ui/index.ts +2 -0
  64. package/lib/shared/ui/formControlElements/CheckboxControl.tsx +92 -0
  65. package/lib/shared/ui/formControlElements/FormControl.tsx +5 -0
  66. package/lib/shared/ui/formControlElements/InputControl.tsx +68 -0
  67. package/lib/shared/ui/formControlElements/InputControlMask.tsx +80 -0
  68. package/lib/shared/ui/formControlElements/RadioControl.tsx +130 -0
  69. package/lib/shared/ui/formControlElements/SelectControl.tsx +185 -0
  70. package/lib/shared/ui/formControlElements/SwitchControl.tsx +79 -0
  71. package/lib/shared/ui/formControlElements/TextareaControl.tsx +92 -0
  72. package/lib/shared/ui/formControlElements/calendarControl/CalendarControl.tsx +175 -0
  73. package/lib/shared/ui/formControlElements/calendarControl/hooks/index.ts +2 -0
  74. package/lib/shared/ui/formControlElements/calendarControl/hooks/useCalendar.tsx +86 -0
  75. package/lib/shared/ui/formControlElements/calendarControl/hooks/useCalendarDropdowns.ts +38 -0
  76. package/{dist/shared/ui/formControlElements/calendarControl/index.d.ts → lib/shared/ui/formControlElements/calendarControl/index.ts} +1 -1
  77. package/lib/shared/ui/formControlElements/calendarControl/model/helpers.ts +60 -0
  78. package/lib/shared/ui/formControlElements/calendarControl/model/types.ts +44 -0
  79. package/lib/shared/ui/formControlElements/calendarControl/ui/DaysOfMonth.tsx +53 -0
  80. package/lib/shared/ui/formControlElements/calendarControl/ui/DaysOfWeek.tsx +28 -0
  81. package/lib/shared/ui/formControlElements/calendarControl/ui/Dropdown.tsx +62 -0
  82. package/lib/shared/ui/formControlElements/calendarControl/ui/Header.tsx +51 -0
  83. package/lib/shared/ui/formControlElements/calendarControl/ui/Navigation.tsx +32 -0
  84. package/lib/shared/ui/formControlElements/calendarControl/ui/OptionsList.tsx +44 -0
  85. package/lib/shared/ui/formControlElements/calendarControl/ui/index.ts +4 -0
  86. package/lib/shared/ui/formControlElements/dadata/DadataInputControl.tsx +132 -0
  87. package/{dist/shared/ui/formControlElements/dadata/index.d.ts → lib/shared/ui/formControlElements/dadata/index.ts} +1 -1
  88. package/lib/shared/ui/formControlElements/dadata/model/api.ts +25 -0
  89. package/lib/shared/ui/formControlElements/dadata/model/helpers.ts +76 -0
  90. package/lib/shared/ui/formControlElements/dadata/model/types.ts +52 -0
  91. package/lib/shared/ui/formControlElements/dadata/model/useDadata.ts +25 -0
  92. package/{dist/shared/ui/formControlElements/index.d.ts → lib/shared/ui/formControlElements/index.ts} +10 -10
  93. package/lib/shared/ui/formControlElements/model/classes-types.ts +22 -0
  94. package/lib/shared/ui/formControlElements/model/index.ts +2 -0
  95. package/lib/shared/ui/formControlElements/model/props-types.ts +26 -0
  96. package/lib/shared/ui/formControlElements/ui/FieldAttachment.tsx +66 -0
  97. package/lib/shared/ui/formControlElements/ui/FieldContainer.tsx +36 -0
  98. package/lib/shared/ui/formControlElements/ui/FieldWrapper.tsx +55 -0
  99. package/lib/shared/ui/formControlElements/ui/MessageView.tsx +37 -0
  100. package/lib/shared/ui/formControlElements/ui/index.ts +4 -0
  101. package/lib/shared/ui/icon/Icon.tsx +43 -0
  102. package/{dist/shared/ui/icon/index.d.ts → lib/shared/ui/icon/index.ts} +2 -2
  103. package/lib/shared/ui/icon/sprite.gen.ts +121 -0
  104. package/lib/shared/ui/index.ts +56 -0
  105. package/lib/shared/ui/popover/Popover.tsx +77 -0
  106. package/lib/shared/ui/popover/index.ts +1 -0
  107. package/lib/shared/ui/table/Table.tsx +143 -0
  108. package/lib/shared/ui/table/index.ts +1 -0
  109. package/lib/shared/ui/table/type.ts +30 -0
  110. package/lib/shared/utils/capitalize.ts +6 -0
  111. package/lib/shared/utils/cn.ts +6 -0
  112. package/lib/shared/utils/deepCompare.ts +1 -0
  113. package/lib/shared/utils/formatToDate.ts +5 -0
  114. package/lib/shared/utils/index.ts +5 -0
  115. package/lib/shared/utils/isClient.ts +1 -0
  116. package/lib/shared/validation/index.ts +3 -0
  117. package/lib/shared/validation/messages.ts +12 -0
  118. package/lib/shared/validation/regExp.ts +5 -0
  119. package/lib/shared/validation/zodValidation/calendar.ts +32 -0
  120. package/lib/shared/validation/zodValidation/dadataFio.ts +67 -0
  121. package/lib/shared/validation/zodValidation/index.ts +2 -0
  122. package/lib/vite-env.d.ts +2 -0
  123. package/lib/widgets/Advantages.tsx +45 -0
  124. package/lib/widgets/banner/Banner.tsx +62 -0
  125. package/lib/widgets/banner/index.ts +1 -0
  126. package/lib/widgets/banner/model/helpers.ts +44 -0
  127. package/lib/widgets/banner/money.png +0 -0
  128. package/lib/widgets/banner/ui/BannerButtonsGroup.tsx +30 -0
  129. package/{dist/widgets/index.d.ts → lib/widgets/index.ts} +3 -3
  130. package/lib/widgets/pageHeader/PageHeader.tsx +54 -0
  131. package/{dist/widgets/pageHeader/index.d.ts → lib/widgets/pageHeader/index.ts} +1 -1
  132. package/package.json +10 -12
  133. package/postcss.config.mjs +8 -0
  134. package/src/App.tsx +9 -0
  135. package/src/app/providers/RootProvider.tsx +11 -0
  136. package/src/app/providers/index.ts +1 -0
  137. package/src/app/providers/model/types.ts +5 -0
  138. package/src/app/providers/ui/ToasterProvider.tsx +23 -0
  139. package/src/app/providers/ui/index.ts +1 -0
  140. package/src/configs/setup.ts +9 -0
  141. package/src/configs/storybook.config.ts +23 -0
  142. package/src/main.tsx +10 -0
  143. package/src/stories/primitives/Accordion.stories.tsx +66 -0
  144. package/src/stories/primitives/Badge.stories.tsx +28 -0
  145. package/src/stories/primitives/Breadcrumbs.stories.tsx +29 -0
  146. package/src/stories/primitives/Button/Button.stories.tsx +149 -0
  147. package/src/stories/primitives/Button/Button.test.tsx +150 -0
  148. package/src/stories/primitives/ButtonIcon.stories.tsx +75 -0
  149. package/src/stories/primitives/CustomLink.stories.tsx +64 -0
  150. package/src/stories/primitives/Document.stories.tsx +36 -0
  151. package/src/stories/primitives/Heading.stories.tsx +29 -0
  152. package/src/stories/primitives/Hint.stories.tsx +82 -0
  153. package/src/stories/primitives/Icon.stories.tsx +36 -0
  154. package/src/stories/primitives/Loader.stories.tsx +39 -0
  155. package/src/stories/primitives/PhoneView.stories.tsx +22 -0
  156. package/src/stories/primitives/Popover.stories.tsx +41 -0
  157. package/src/stories/primitives/ProgressBar.stories.tsx +68 -0
  158. package/src/stories/primitives/Skeleton.stories.tsx +21 -0
  159. package/src/stories/primitives/Table.stories.tsx +44 -0
  160. package/src/stories/primitives/TabsSwitcher.stories.tsx +34 -0
  161. package/src/stories/primitives/formControl/Calendar.stories.tsx +61 -0
  162. package/src/stories/primitives/formControl/CalendarControl.stories.tsx +39 -0
  163. package/src/stories/primitives/formControl/CheckboxControl.stories.tsx +64 -0
  164. package/src/stories/primitives/formControl/DadataInputControl.stories.tsx +83 -0
  165. package/src/stories/primitives/formControl/FormControlAllFields.stories.tsx +25 -0
  166. package/src/stories/primitives/formControl/InputControl.stories.tsx +77 -0
  167. package/src/stories/primitives/formControl/RadioContol.stories.tsx +63 -0
  168. package/src/stories/primitives/formControl/SelectControl.stories.tsx +117 -0
  169. package/src/stories/primitives/formControl/SwitchControl.stories.tsx +51 -0
  170. package/src/stories/primitives/formControl/TextareaControl.stories.tsx +55 -0
  171. package/src/stories/primitives/formControl/inputControlMask.stories.tsx +69 -0
  172. package/src/stories/widgets/Advantages.stories.tsx +42 -0
  173. package/src/stories/widgets/Banner.stories.tsx +40 -0
  174. package/src/stories/widgets/PageHeader.stories.tsx +33 -0
  175. package/src/storybookHelpers/actions.tsx +5 -0
  176. package/src/storybookHelpers/index.ts +2 -0
  177. package/src/storybookHelpers/reactHookForm/index.ts +3 -0
  178. package/src/storybookHelpers/reactHookForm/model/mockData.ts +21 -0
  179. package/src/storybookHelpers/reactHookForm/model/mocks.tsx +71 -0
  180. package/src/storybookHelpers/reactHookForm/model/types.ts +62 -0
  181. package/src/storybookHelpers/reactHookForm/ui/StorybookFieldsMapper.tsx +76 -0
  182. package/src/storybookHelpers/reactHookForm/ui/StorybookFormProvider.tsx +43 -0
  183. package/src/storybookHelpers/reactHookForm/ui/index.ts +2 -0
  184. package/src/storybookHelpers/table/utils/defaultValue.ts +51 -0
  185. package/static/arrows/arrowCircle.svg +18 -0
  186. package/static/arrows/arrowLink.svg +3 -0
  187. package/static/arrows/arrowRight.svg +3 -0
  188. package/static/brandLogos/logoBlack.svg +14 -0
  189. package/static/brandLogos/logoBusiness.svg +80 -0
  190. package/static/brandLogos/logoGray.svg +56 -0
  191. package/static/brandLogos/logoInsurance.svg +124 -0
  192. package/static/brandLogos/logoMain.svg +14 -0
  193. package/static/brandLogos/logoWhite.svg +56 -0
  194. package/static/files/documentFilled.svg +4 -0
  195. package/static/files/documentOutline.svg +4 -0
  196. package/static/general/calendar.svg +3 -0
  197. package/static/general/check.svg +6 -0
  198. package/static/general/close.svg +12 -0
  199. package/static/info/warningCircle.svg +5 -0
  200. package/tailwind.config.ts +9 -0
  201. package/tsconfig.json +33 -0
  202. package/tsconfig.node.json +11 -0
  203. package/vite.config.ts +63 -0
  204. package/vitest.config.mjs +12 -0
  205. package/dist/ExampleBadge.d.ts +0 -5
  206. package/dist/ExampleContainer.d.ts +0 -5
  207. package/dist/configs/index.d.ts +0 -1
  208. package/dist/configs/tailwindConfigBase.d.ts +0 -2
  209. package/dist/index.d.ts +0 -2
  210. package/dist/shared/constants/api.d.ts +0 -2
  211. package/dist/shared/constants/designSystem/colors.d.ts +0 -120
  212. package/dist/shared/constants/designSystem/index.d.ts +0 -3
  213. package/dist/shared/constants/designSystem/others.d.ts +0 -16
  214. package/dist/shared/constants/designSystem/typography.d.ts +0 -75
  215. package/dist/shared/constants/index.d.ts +0 -2
  216. package/dist/shared/hooks/index.d.ts +0 -4
  217. package/dist/shared/hooks/useBoolean.d.ts +0 -3
  218. package/dist/shared/hooks/useClickOutside.d.ts +0 -2
  219. package/dist/shared/hooks/useControlledForm.d.ts +0 -7
  220. package/dist/shared/hooks/useDebounce.d.ts +0 -3
  221. package/dist/shared/ui/Badge.d.ts +0 -6
  222. package/dist/shared/ui/Breadcrumbs.d.ts +0 -15
  223. package/dist/shared/ui/ButtonIcon.d.ts +0 -17
  224. package/dist/shared/ui/CustomLink.d.ts +0 -15
  225. package/dist/shared/ui/Document.d.ts +0 -13
  226. package/dist/shared/ui/Heading.d.ts +0 -12
  227. package/dist/shared/ui/Hint.d.ts +0 -21
  228. package/dist/shared/ui/Loader.d.ts +0 -21
  229. package/dist/shared/ui/PhoneView.d.ts +0 -12
  230. package/dist/shared/ui/Portal.d.ts +0 -7
  231. package/dist/shared/ui/ProgressBar.d.ts +0 -18
  232. package/dist/shared/ui/ResponsiveContainer.d.ts +0 -6
  233. package/dist/shared/ui/Section.d.ts +0 -6
  234. package/dist/shared/ui/Skeleton.d.ts +0 -4
  235. package/dist/shared/ui/TabsSwitcher.d.ts +0 -33
  236. package/dist/shared/ui/accordion/Accordion.d.ts +0 -13
  237. package/dist/shared/ui/accordion/index.d.ts +0 -1
  238. package/dist/shared/ui/accordion/model/types.d.ts +0 -17
  239. package/dist/shared/ui/accordion/ui/AccordionHeader.d.ts +0 -8
  240. package/dist/shared/ui/brandLogos.d.ts +0 -5
  241. package/dist/shared/ui/button/Button.d.ts +0 -17
  242. package/dist/shared/ui/button/index.d.ts +0 -1
  243. package/dist/shared/ui/button/model/helpers.d.ts +0 -2
  244. package/dist/shared/ui/calendar/Calendar.d.ts +0 -20
  245. package/dist/shared/ui/calendar/index.d.ts +0 -1
  246. package/dist/shared/ui/calendar/model/animation.d.ts +0 -18
  247. package/dist/shared/ui/calendar/model/classes.d.ts +0 -24
  248. package/dist/shared/ui/calendar/model/helpers.d.ts +0 -9
  249. package/dist/shared/ui/calendar/model/hooks/index.d.ts +0 -2
  250. package/dist/shared/ui/calendar/model/hooks/useCalendarDropdowns.d.ts +0 -9
  251. package/dist/shared/ui/calendar/model/hooks/useDatePicker.d.ts +0 -19
  252. package/dist/shared/ui/calendar/ui/CalendarHeader.d.ts +0 -15
  253. package/dist/shared/ui/calendar/ui/Dropdown.d.ts +0 -10
  254. package/dist/shared/ui/calendar/ui/NavigationArrows.d.ts +0 -5
  255. package/dist/shared/ui/calendar/ui/Weekdays.d.ts +0 -1
  256. package/dist/shared/ui/calendar/ui/index.d.ts +0 -2
  257. package/dist/shared/ui/formControlElements/CheckboxControl.d.ts +0 -13
  258. package/dist/shared/ui/formControlElements/FormControl.d.ts +0 -3
  259. package/dist/shared/ui/formControlElements/InputControl.d.ts +0 -6
  260. package/dist/shared/ui/formControlElements/InputControlMask.d.ts +0 -10
  261. package/dist/shared/ui/formControlElements/RadioControl.d.ts +0 -26
  262. package/dist/shared/ui/formControlElements/SelectControl.d.ts +0 -27
  263. package/dist/shared/ui/formControlElements/SwitchControl.d.ts +0 -16
  264. package/dist/shared/ui/formControlElements/TextareaControl.d.ts +0 -11
  265. package/dist/shared/ui/formControlElements/calendarControl/CalendarControl.d.ts +0 -13
  266. package/dist/shared/ui/formControlElements/calendarControl/hooks/index.d.ts +0 -2
  267. package/dist/shared/ui/formControlElements/calendarControl/hooks/useCalendar.d.ts +0 -16
  268. package/dist/shared/ui/formControlElements/calendarControl/hooks/useCalendarDropdowns.d.ts +0 -9
  269. package/dist/shared/ui/formControlElements/calendarControl/model/helpers.d.ts +0 -24
  270. package/dist/shared/ui/formControlElements/calendarControl/model/types.d.ts +0 -33
  271. package/dist/shared/ui/formControlElements/calendarControl/ui/DaysOfMonth.d.ts +0 -10
  272. package/dist/shared/ui/formControlElements/calendarControl/ui/DaysOfWeek.d.ts +0 -6
  273. package/dist/shared/ui/formControlElements/calendarControl/ui/Dropdown.d.ts +0 -11
  274. package/dist/shared/ui/formControlElements/calendarControl/ui/Header.d.ts +0 -14
  275. package/dist/shared/ui/formControlElements/calendarControl/ui/Navigation.d.ts +0 -9
  276. package/dist/shared/ui/formControlElements/calendarControl/ui/OptionsList.d.ts +0 -5
  277. package/dist/shared/ui/formControlElements/calendarControl/ui/index.d.ts +0 -4
  278. package/dist/shared/ui/formControlElements/dadata/DadataInputControl.d.ts +0 -14
  279. package/dist/shared/ui/formControlElements/dadata/model/api.d.ts +0 -2
  280. package/dist/shared/ui/formControlElements/dadata/model/helpers.d.ts +0 -7
  281. package/dist/shared/ui/formControlElements/dadata/model/types.d.ts +0 -42
  282. package/dist/shared/ui/formControlElements/dadata/model/useDadata.d.ts +0 -7
  283. package/dist/shared/ui/formControlElements/model/classes-types.d.ts +0 -18
  284. package/dist/shared/ui/formControlElements/model/index.d.ts +0 -2
  285. package/dist/shared/ui/formControlElements/model/props-types.d.ts +0 -20
  286. package/dist/shared/ui/formControlElements/ui/FieldAttachment.d.ts +0 -13
  287. package/dist/shared/ui/formControlElements/ui/FieldContainer.d.ts +0 -14
  288. package/dist/shared/ui/formControlElements/ui/FieldWrapper.d.ts +0 -14
  289. package/dist/shared/ui/formControlElements/ui/MessageView.d.ts +0 -13
  290. package/dist/shared/ui/formControlElements/ui/index.d.ts +0 -4
  291. package/dist/shared/ui/icon/Icon.d.ts +0 -10
  292. package/dist/shared/ui/icon/sprite.gen.d.ts +0 -17
  293. package/dist/shared/ui/index.d.ts +0 -21
  294. package/dist/shared/ui/popover/Popover.d.ts +0 -23
  295. package/dist/shared/ui/popover/index.d.ts +0 -1
  296. package/dist/shared/ui/table/Table.d.ts +0 -17
  297. package/dist/shared/ui/table/index.d.ts +0 -1
  298. package/dist/shared/ui/table/type.d.ts +0 -21
  299. package/dist/shared/utils/capitalize.d.ts +0 -1
  300. package/dist/shared/utils/cn.d.ts +0 -2
  301. package/dist/shared/utils/deepCompare.d.ts +0 -1
  302. package/dist/shared/utils/formatToDate.d.ts +0 -1
  303. package/dist/shared/utils/index.d.ts +0 -5
  304. package/dist/shared/utils/isClient.d.ts +0 -1
  305. package/dist/shared/validation/index.d.ts +0 -3
  306. package/dist/shared/validation/messages.d.ts +0 -12
  307. package/dist/shared/validation/regExp.d.ts +0 -3
  308. package/dist/shared/validation/zodValidation/calendar.d.ts +0 -2
  309. package/dist/shared/validation/zodValidation/dadataFio.d.ts +0 -6
  310. package/dist/shared/validation/zodValidation/index.d.ts +0 -2
  311. package/dist/style.css +0 -1
  312. package/dist/ui.es.js +0 -636
  313. package/dist/ui.umd.js +0 -30
  314. package/dist/widgets/Advantages.d.ts +0 -17
  315. package/dist/widgets/banner/Banner.d.ts +0 -28
  316. package/dist/widgets/banner/index.d.ts +0 -1
  317. package/dist/widgets/banner/model/helpers.d.ts +0 -4
  318. package/dist/widgets/banner/ui/BannerButtonsGroup.d.ts +0 -12
  319. package/dist/widgets/pageHeader/PageHeader.d.ts +0 -16
  320. /package/{dist → public}/sprites/arrows.svg +0 -0
  321. /package/{dist → public}/sprites/brandLogos.svg +0 -0
  322. /package/{dist → public}/sprites/common.svg +0 -0
  323. /package/{dist → public}/sprites/files.svg +0 -0
  324. /package/{dist → public}/sprites/general.svg +0 -0
  325. /package/{dist → public}/sprites/info.svg +0 -0
@@ -0,0 +1,228 @@
1
+ import { useCallback, useId, useRef } from 'react'
2
+ import { DayPicker, type DayPickerProps, type NavProps, type PropsRange, type PropsSingle } from 'react-day-picker'
3
+ import { Controller, type FieldValues, useFormContext } from 'react-hook-form'
4
+ import { PatternFormat } from 'react-number-format'
5
+ import { ru } from 'date-fns/locale'
6
+ import { AnimatePresence, motion } from 'framer-motion'
7
+ import { type TAdditionalInputClassesWithAttachment, type TControlledInputProps } from '../formControlElements/model'
8
+ import { FieldAttachment, FieldContainer, FieldWrapper, MessageView } from '../formControlElements/ui'
9
+ import { calendarAnimation } from './model/animation'
10
+ import { dayPickerClasses } from './model/classes'
11
+ import { useCalendarDropdowns, useDatePicker } from './model/hooks'
12
+ import { CalendarHeader, Weekdays } from './ui'
13
+ import { useClickOutside } from '$/shared/hooks'
14
+ import { cn } from '$/shared/utils'
15
+
16
+ // https://github.com/gpbl/react-day-picker/discussions/1570 - issue
17
+
18
+ type TCalendarClasses = Partial<TAdditionalInputClassesWithAttachment> & {
19
+ root: string
20
+ wrapper: string
21
+ calendar: string
22
+ }
23
+ export type TCalendarMode = 'range' | 'single'
24
+ type TCalendarCommonProps = PropsSingle | PropsRange
25
+
26
+ function isSingleMode(props: TCalendarCommonProps): props is PropsSingle {
27
+ return props.mode === 'single'
28
+ }
29
+
30
+ export type ICalendarProps<T extends FieldValues> = TControlledInputProps<T> &
31
+ TCalendarCommonProps &
32
+ DayPickerProps & {
33
+ maskFormat?: string
34
+ mask?: string | string[]
35
+ allowEmptyFormatting?: boolean
36
+ classes?: Partial<TCalendarClasses>
37
+ disabled?: boolean
38
+ onClickIcon?: (...args: unknown[]) => unknown
39
+ }
40
+
41
+ export const Calendar = <T extends FieldValues>(props: ICalendarProps<T>) => {
42
+ const {
43
+ control,
44
+ label,
45
+ helperText,
46
+ showOutsideDays = true,
47
+ maskFormat = '##.##.####',
48
+ allowEmptyFormatting = false,
49
+ mask = '',
50
+ size = 'full',
51
+ classes,
52
+ disabled,
53
+ icon,
54
+ badge,
55
+ swapPosition,
56
+ onClickIcon
57
+ } = props
58
+ const { setValue } = useFormContext()
59
+ const inputId = useId()
60
+ const calendarWrapperRef = useRef<HTMLDivElement>(null)
61
+ const { toggleCalendar, isCalendarOpen, calendarSetter, isMonthOpen, toggleMonthDropdown, isYearsOpen, toggleYearDropdown } =
62
+ useCalendarDropdowns()
63
+
64
+ const {
65
+ formattedControlledDate,
66
+ controlledDate,
67
+ onClickDay,
68
+ onChangeMonth,
69
+ onSelectMonth,
70
+ onSelectYear,
71
+ onBlurInput,
72
+ onClickPrev,
73
+ onClickNext
74
+ } = useDatePicker()
75
+ useClickOutside(calendarWrapperRef, () => calendarSetter(false))
76
+
77
+ const CaptionLabelComponent = useCallback(() => <></>, [])
78
+ const WeekComponent = useCallback(() => <Weekdays />, [])
79
+ const CalendarHeaderComponent = useCallback(
80
+ (onControlledChange: (...event: unknown[]) => void, navProps: NavProps) => {
81
+ return (
82
+ <CalendarHeader
83
+ controlledDate={controlledDate}
84
+ isMonthOpen={isMonthOpen}
85
+ toggleMonthDropdown={toggleMonthDropdown}
86
+ isYearsOpen={isYearsOpen}
87
+ toggleYearDropdown={toggleYearDropdown}
88
+ onSelectMonth={(month: number) => onSelectMonth(month, onControlledChange)}
89
+ onSelectYear={(year: number) => onSelectYear(year, onControlledChange)}
90
+ onClickPrev={(event) => onClickPrev(event, navProps.onPreviousClick)}
91
+ onClickNext={(event) => onClickNext(event, navProps.onNextClick)}
92
+ {...navProps}
93
+ />
94
+ )
95
+ },
96
+ [
97
+ controlledDate,
98
+ isMonthOpen,
99
+ toggleMonthDropdown,
100
+ isYearsOpen,
101
+ toggleYearDropdown,
102
+ onSelectMonth,
103
+ onSelectYear,
104
+ onClickPrev,
105
+ onClickNext
106
+ ]
107
+ )
108
+
109
+ return (
110
+ <Controller
111
+ control={control}
112
+ name={props.name}
113
+ render={({ field: { onChange, value }, fieldState: { error } }) => {
114
+ return (
115
+ <div className={cn('relative', classes?.root)} ref={calendarWrapperRef}>
116
+ <>{value}</>
117
+ <AnimatePresence>
118
+ {isCalendarOpen && (
119
+ <motion.div
120
+ className={cn(
121
+ 'absolute z-30 bottom-[-350px] right-0 invisible',
122
+ { 'visible ': isCalendarOpen },
123
+ classes?.wrapper
124
+ )}
125
+ {...calendarAnimation}
126
+ >
127
+ {isSingleMode(props) ? (
128
+ <>
129
+ <DayPicker
130
+ onDayClick={(date: Date) => onClickDay(date, onChange, 'single', () => calendarSetter(false))}
131
+ month={formattedControlledDate}
132
+ onMonthChange={(date: Date) => onChangeMonth(date, onChange)}
133
+ pagedNavigation
134
+ locale={ru}
135
+ showOutsideDays={showOutsideDays}
136
+ // disabled={{ dayOfWeek: [0, 6] }}
137
+ // disabled={{ before: new Date() }}
138
+ className={cn('w-[312px] h-[368px] p-4 shadow-sm relative bg-color-white', classes?.calendar)}
139
+ classNames={dayPickerClasses()}
140
+ components={{
141
+ Weekdays: WeekComponent,
142
+ CaptionLabel: CaptionLabelComponent,
143
+ Nav: (navProps) => CalendarHeaderComponent(onChange, navProps)
144
+ }}
145
+ {...props}
146
+ />
147
+ </>
148
+ ) : (
149
+ <>
150
+ <DayPicker
151
+ onDayClick={(date: Date) => onClickDay(date, onChange, 'range', () => calendarSetter(false))}
152
+ month={formattedControlledDate}
153
+ onMonthChange={(date: Date) => onChangeMonth(date, onChange)}
154
+ pagedNavigation
155
+ locale={ru}
156
+ showOutsideDays={showOutsideDays}
157
+ // disabled={{ dayOfWeek: [0, 6] }}
158
+ // disabled={{ before: new Date() }}
159
+ className={cn('w-[312px] h-[368px] p-4 shadow-sm relative bg-color-white', classes?.calendar)}
160
+ classNames={dayPickerClasses(true)}
161
+ components={{
162
+ Weekdays: WeekComponent,
163
+ CaptionLabel: CaptionLabelComponent,
164
+ Nav: (navProps) => CalendarHeaderComponent(onChange, navProps)
165
+ }}
166
+ {...props}
167
+ />
168
+ </>
169
+ )}
170
+ </motion.div>
171
+ )}
172
+ </AnimatePresence>
173
+ <FieldContainer size={size} classes={classes}>
174
+ <FieldWrapper
175
+ fieldId={inputId}
176
+ label={label}
177
+ classes={classes}
178
+ disabled={disabled}
179
+ value={value}
180
+ error={!!error?.message}
181
+ >
182
+ <>
183
+ <PatternFormat
184
+ id={inputId}
185
+ value={value}
186
+ name={props.name}
187
+ format={maskFormat}
188
+ allowEmptyFormatting={allowEmptyFormatting}
189
+ mask={mask}
190
+ className={cn(
191
+ 'w-full h-[56px] desk-body-regular-l text-color-dark transition-all bg-color-transparent outline-none pt-5 px-4 rounded-md',
192
+ classes?.input
193
+ )}
194
+ onFocus={() => calendarSetter(true)}
195
+ onBlur={(event) => {
196
+ onBlurInput(event.target.value, onChange)
197
+ if (!event.target.value) {
198
+ setValue(props.name as string, '')
199
+ }
200
+ }}
201
+ />
202
+ <FieldAttachment
203
+ badge={badge}
204
+ icon={icon}
205
+ error={!!error?.message}
206
+ classes={classes}
207
+ swapPosition={swapPosition}
208
+ onClickIcon={() => toggleCalendar(onClickIcon)}
209
+ onKeyDownIcon={(event) => {
210
+ if (event.key === 'Enter' || event.key === ' ') {
211
+ toggleCalendar()
212
+ }
213
+ }}
214
+ />
215
+ </>
216
+ </FieldWrapper>
217
+ <MessageView
218
+ className={cn(classes?.message)}
219
+ intent={error?.message ? 'error' : 'simple'}
220
+ text={error?.message || helperText}
221
+ />
222
+ </FieldContainer>
223
+ </div>
224
+ )
225
+ }}
226
+ />
227
+ )
228
+ }
@@ -0,0 +1,231 @@
1
+ export { Calendar, type ICalendarProps } from './Calendar'
2
+ // import { useCallback, useId, useRef } from 'react'
3
+ // import { DayPicker, type DayPickerProps, type NavProps, type PropsMulti, type PropsSingle } from 'react-day-picker'
4
+ // import { Controller, type FieldValues, useFormContext } from 'react-hook-form'
5
+ // import { PatternFormat } from 'react-number-format'
6
+ // import { ru } from 'date-fns/locale'
7
+ // import { AnimatePresence, motion } from 'framer-motion'
8
+ // import type { TAdditionalInputClassesWithAttachment, TControlledInputProps } from '../model'
9
+ // import { FieldAttachment, FieldContainer, FieldWrapper, MessageView } from '../ui'
10
+ // import { calendarAnimation } from './model/animation'
11
+ // import { useCalendarDropdowns, useDatePicker } from './model/hooks'
12
+ // import { CalendarHeader, Weekdays } from './ui'
13
+ // import { useClickOutside } from '$/shared/hooks'
14
+ // import { cn } from '$/shared/utils'
15
+
16
+ // // https://github.com/gpbl/react-day-picker/discussions/1570 - issue
17
+
18
+ // type TCalendarClasses = Partial<TAdditionalInputClassesWithAttachment> & {
19
+ // root: string
20
+ // wrapper: string
21
+ // calendar: string
22
+ // }
23
+
24
+ // type AppProps = PropsSingle | PropsMulti
25
+
26
+ // // Type guard to check if props is for single mode
27
+ // function isSingleMode(props: AppProps): props is PropsSingle {
28
+ // return props.mode === 'single'
29
+ // }
30
+
31
+ // export type ICalendarControlProps<T extends FieldValues> = TControlledInputProps<T> &
32
+ // Omit<DayPickerProps, 'mode'> & {
33
+ // maskFormat?: string
34
+ // mask?: string | string[]
35
+ // allowEmptyFormatting?: boolean
36
+ // classes?: Partial<TCalendarClasses>
37
+ // disabled?: boolean
38
+ // onClickIcon?: (...args: unknown[]) => unknown
39
+ // mode: string
40
+ // }
41
+
42
+ // export const CalendarControl = <T extends FieldValues>({
43
+ // control,
44
+ // label,
45
+ // helperText,
46
+ // showOutsideDays = true,
47
+ // maskFormat = '##.##.####',
48
+ // allowEmptyFormatting = false,
49
+ // mask = '',
50
+ // size = 'full',
51
+ // classes,
52
+ // disabled,
53
+ // icon,
54
+ // badge,
55
+ // swapPosition,
56
+ // onClickIcon,
57
+ // mode = 'single',
58
+ // ...props
59
+ // }: ICalendarControlProps<T>) => {
60
+ // const { setValue } = useFormContext()
61
+ // const inputId = useId()
62
+ // const calendarWrapperRef = useRef<HTMLDivElement>(null)
63
+ // const { toggleCalendar, isCalendarOpen, calendarSetter, isMonthOpen, toggleMonthDropdown, isYearsOpen, toggleYearDropdown } =
64
+ // useCalendarDropdowns()
65
+
66
+ // const {
67
+ // formattedControlledDate,
68
+ // controlledDate,
69
+ // onClickDay,
70
+ // onChangeMonth,
71
+ // onSelectMonth,
72
+ // onSelectYear,
73
+ // onBlurInput,
74
+ // onClickPrev,
75
+ // onClickNext
76
+ // } = useDatePicker()
77
+ // useClickOutside(calendarWrapperRef, () => calendarSetter(false))
78
+
79
+ // const CaptionLabelComponent = useCallback(() => <></>, [])
80
+ // const WeekComponent = useCallback(() => <Weekdays />, [])
81
+ // const CalendarHeaderComponent = useCallback(
82
+ // (onControlledChange: (...event: unknown[]) => void, navProps: NavProps) => {
83
+ // return (
84
+ // <CalendarHeader
85
+ // controlledDate={controlledDate}
86
+ // isMonthOpen={isMonthOpen}
87
+ // toggleMonthDropdown={toggleMonthDropdown}
88
+ // isYearsOpen={isYearsOpen}
89
+ // toggleYearDropdown={toggleYearDropdown}
90
+ // onSelectMonth={(month: number) => onSelectMonth(month, onControlledChange)}
91
+ // onSelectYear={(year: number) => onSelectYear(year, onControlledChange)}
92
+ // onClickPrev={(event) => onClickPrev(event, navProps.onPreviousClick)}
93
+ // onClickNext={(event) => onClickNext(event, navProps.onNextClick)}
94
+ // {...navProps}
95
+ // />
96
+ // )
97
+ // },
98
+ // [
99
+ // controlledDate,
100
+ // isMonthOpen,
101
+ // toggleMonthDropdown,
102
+ // isYearsOpen,
103
+ // toggleYearDropdown,
104
+ // onSelectMonth,
105
+ // onSelectYear,
106
+ // onClickPrev,
107
+ // onClickNext
108
+ // ]
109
+ // )
110
+
111
+ // return (
112
+ // <Controller
113
+ // control={control}
114
+ // name={props.name}
115
+ // render={({ field: { onChange, value }, fieldState: { error } }) => {
116
+ // return (
117
+ // <div className={cn('relative', classes?.root)} ref={calendarWrapperRef}>
118
+ // <AnimatePresence>
119
+ // {isCalendarOpen && (
120
+ // <motion.div
121
+ // className={cn(
122
+ // 'absolute z-30 bottom-[-350px] right-0 invisible',
123
+ // { 'visible ': isCalendarOpen },
124
+ // classes?.wrapper
125
+ // )}
126
+ // {...calendarAnimation}
127
+ // >
128
+ // <DayPicker
129
+ // mode={mode}
130
+ // onDayClick={(date: Date) => onClickDay(date, onChange, () => calendarSetter(false))}
131
+ // month={formattedControlledDate}
132
+ // onMonthChange={(date: Date) => onChangeMonth(date, onChange)}
133
+ // pagedNavigation
134
+ // locale={ru}
135
+ // // disabled={{ dayOfWeek: [0, 6] }}
136
+ // // disabled={{ before: new Date() }}
137
+ // showOutsideDays={showOutsideDays}
138
+ // className={cn('w-[312px] h-[368px] p-4 shadow-sm relative bg-color-white', classes?.calendar)}
139
+ // classNames={{
140
+ // weekday: 'size-10',
141
+ // months: '',
142
+ // month: 'pt-2 text-color-dark mob-body-medium-m',
143
+ // caption: 'flex justify-center pt-1 items-center',
144
+ // today:
145
+ // 'text-color-primary-default relative before:content-[" "] before:w-4 before:h-[2px] before:rounded-[2px] before:bg-icon-primary-default before:absolute before:bottom-1 before:left-1/2 before:-translate-x-1/2',
146
+ // outside: 'text-color-tetriary',
147
+ // disabled: 'text-color-disabled',
148
+ // hidden: '',
149
+ // selected: 'bg-color-primary-default text-color-white',
150
+ // range_middle: '!bg-color-primary-tr-hover !text-color-dark [&_button]:!h-[32px]',
151
+ // range_end: 'bg-color-negative',
152
+ // day: 'text-color-dark mob-body-regular-m',
153
+ // day_button:
154
+ // 'size-10 text-center cursor-pointer border border-solid border-transparent rounded-sm transition-all hover:bg-color-primary-tr-hover hover:border-primary-default',
155
+ // //--------------------------------
156
+ // nav: 'space-x-1 flex items-center',
157
+ // nav_button: 'h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100',
158
+ // nav_button_previous: 'absolute left-1',
159
+ // nav_button_next: 'absolute right-1',
160
+ // table: 'w-full border-collapse space-y-1',
161
+ // head_row: 'flex',
162
+ // head_cell: 'text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]',
163
+ // row: 'flex w-full mt-2',
164
+ // ...classes
165
+ // }}
166
+ // components={{
167
+ // Weekdays: WeekComponent,
168
+ // CaptionLabel: CaptionLabelComponent,
169
+ // Nav: (navProps) => CalendarHeaderComponent(onChange, navProps)
170
+ // }}
171
+ // {...props}
172
+ // />
173
+ // </motion.div>
174
+ // )}
175
+ // </AnimatePresence>
176
+ // <FieldContainer size={size} classes={classes}>
177
+ // <FieldWrapper
178
+ // fieldId={inputId}
179
+ // label={label}
180
+ // classes={classes}
181
+ // disabled={disabled}
182
+ // value={value}
183
+ // error={!!error?.message}
184
+ // >
185
+ // <>
186
+ // <PatternFormat
187
+ // id={inputId}
188
+ // value={value}
189
+ // name={props.name}
190
+ // format={maskFormat}
191
+ // allowEmptyFormatting={allowEmptyFormatting}
192
+ // mask={mask}
193
+ // className={cn(
194
+ // 'w-full h-[56px] desk-body-regular-l text-color-dark transition-all bg-color-transparent outline-none pt-5 px-4 rounded-md',
195
+ // classes?.input
196
+ // )}
197
+ // onFocus={() => calendarSetter(true)}
198
+ // onBlur={(event) => {
199
+ // onBlurInput(event.target.value, onChange)
200
+ // if (!event.target.value) {
201
+ // setValue(props.name as string, '')
202
+ // }
203
+ // }}
204
+ // />
205
+ // <FieldAttachment
206
+ // badge={badge}
207
+ // icon={icon}
208
+ // error={!!error?.message}
209
+ // classes={classes}
210
+ // swapPosition={swapPosition}
211
+ // onClickIcon={() => toggleCalendar(onClickIcon)}
212
+ // onKeyDownIcon={(event) => {
213
+ // if (event.key === 'Enter' || event.key === ' ') {
214
+ // toggleCalendar()
215
+ // }
216
+ // }}
217
+ // />
218
+ // </>
219
+ // </FieldWrapper>
220
+ // <MessageView
221
+ // className={cn(classes?.message)}
222
+ // intent={error?.message ? 'error' : 'simple'}
223
+ // text={error?.message || helperText}
224
+ // />
225
+ // </FieldContainer>
226
+ // </div>
227
+ // )
228
+ // }}
229
+ // />
230
+ // )
231
+ // }
@@ -0,0 +1,112 @@
1
+ export const calendarAnimation = {
2
+ initial: { opacity: 0, y: -40 },
3
+ animate: { opacity: 1, y: 0 },
4
+ exit: { opacity: 0, y: -40 },
5
+ transition: { duration: 0.4, ease: 'easeInOut' }
6
+ }
7
+
8
+ // import { useState } from 'react'
9
+ // import { format } from 'date-fns'
10
+ // import { type TCalendarMode } from '../../CalendarControl'
11
+
12
+ // export type TControlledDate = {
13
+ // month: number
14
+ // day: number
15
+ // year: number
16
+ // }
17
+
18
+ // type TDateSetter = {
19
+ // type: 'day' | 'month' | 'year'
20
+ // value: number
21
+ // updatedDate: Date
22
+ // onChange: (...event: unknown[]) => void
23
+ // }
24
+
25
+ // export const useDatePicker = () => {
26
+ // const [controlledDate, setControlledDate] = useState<TControlledDate>({
27
+ // day: new Date().getDate(),
28
+ // month: new Date().getMonth(),
29
+ // year: new Date().getFullYear()
30
+ // })
31
+ // const formattedControlledDate = new Date(controlledDate.year, controlledDate.month, controlledDate.day)
32
+
33
+ // const dateSetter = ({ type, value, updatedDate, onChange }: TDateSetter) => {
34
+ // setControlledDate((prev) => ({ ...prev, [type]: value }))
35
+ // onChange(format(updatedDate, 'dd.MM.yyyy'))
36
+ // }
37
+
38
+ // const onClickDay = (date: Date, onChange: (...event: unknown[]) => void, mode: TCalendarMode, closeCalendar: () => void) => {
39
+ // console.log(date, '@date')
40
+
41
+ // const formattedDayOnDate = new Date(controlledDate.year, controlledDate.month, +format(date, 'dd'))
42
+ // dateSetter({ type: 'day', value: +format(date, 'dd'), updatedDate: formattedDayOnDate, onChange })
43
+
44
+ // if (mode === 'single') {
45
+ // closeCalendar()
46
+ // }
47
+ // }
48
+
49
+ // const onChangeMonth = (date: Date, onChange: (...event: unknown[]) => void) => {
50
+ // const formattedMonthOnDate = new Date(controlledDate.year, +format(date, 'MM') - 1, controlledDate.day)
51
+ // dateSetter({ type: 'month', value: +format(date, 'MM') - 1, updatedDate: formattedMonthOnDate, onChange })
52
+ // }
53
+
54
+ // const onSelectMonth = (month: number, onChange: (...event: unknown[]) => void) => {
55
+ // const formattedMonth = new Date(controlledDate.year, month, controlledDate.day)
56
+ // dateSetter({ type: 'month', value: month, updatedDate: formattedMonth, onChange })
57
+ // }
58
+
59
+ // const onSelectYear = (year: number, onChange: (...event: unknown[]) => void) => {
60
+ // const formattedYear = new Date(year, controlledDate.month, controlledDate.day)
61
+ // dateSetter({ type: 'year', value: year, updatedDate: formattedYear, onChange })
62
+ // }
63
+
64
+ // const onClickPrev = (
65
+ // event: React.MouseEvent<HTMLButtonElement>,
66
+ // onPreviousClick?: React.MouseEventHandler<HTMLButtonElement>
67
+ // ) => {
68
+ // if (onPreviousClick) {
69
+ // onPreviousClick(event)
70
+ // setControlledDate((prev) => ({
71
+ // ...prev,
72
+ // year: prev.month === 0 ? prev.year - 1 : prev.year
73
+ // }))
74
+ // }
75
+ // }
76
+
77
+ // const onClickNext = (event: React.MouseEvent<HTMLButtonElement>, onNextClick?: React.MouseEventHandler<HTMLButtonElement>) => {
78
+ // if (onNextClick) {
79
+ // onNextClick(event)
80
+ // setControlledDate((prev) => ({
81
+ // ...prev,
82
+ // year: prev.month === 11 ? prev.year + 1 : prev.year
83
+ // }))
84
+ // }
85
+ // }
86
+
87
+ // const onBlurInput = (inputValue: string, onChange: (...event: unknown[]) => void) => {
88
+ // if (inputValue) {
89
+ // const [day, month, year] = inputValue?.split('.') ?? ''
90
+
91
+ // onChange(inputValue)
92
+ // setControlledDate({
93
+ // month: +month - 1,
94
+ // year: +year,
95
+ // day: +day
96
+ // })
97
+ // }
98
+ // }
99
+
100
+ // return {
101
+ // formattedControlledDate,
102
+ // controlledDate,
103
+ // setControlledDate,
104
+ // onClickDay,
105
+ // onChangeMonth,
106
+ // onSelectMonth,
107
+ // onSelectYear,
108
+ // onBlurInput,
109
+ // onClickPrev,
110
+ // onClickNext
111
+ // }
112
+ // }
@@ -0,0 +1,34 @@
1
+ import { cn } from '$/shared/utils'
2
+
3
+ export const dayPickerClasses = (isRange?: boolean) => {
4
+ return {
5
+ weekday: 'size-10',
6
+ months: '',
7
+ month: 'pt-2 text-color-dark mob-body-medium-m',
8
+ caption: 'flex justify-center pt-1 items-center',
9
+ today:
10
+ 'text-color-primary-default relative before:content-[" "] before:w-4 before:h-[2px] before:rounded-[2px] before:bg-icon-primary-default before:absolute before:bottom-1 before:left-1/2 before:-translate-x-1/2',
11
+ outside: 'text-color-tetriary',
12
+ disabled: 'text-color-disabled',
13
+ hidden: '',
14
+ selected: 'bg-color-primary-default text-color-white',
15
+ range_middle:
16
+ '!bg-color-transparent !text-color-dark [&_button]:!h-[32px] [&_button]:!bg-color-primary-tr-hover [&_button]:rounded-none',
17
+ range_end: '[&_button]:!h-[40px] rounded-sm',
18
+ range_start: '[&_button]:!h-[40px] rounded-sm',
19
+ day: 'text-color-dark mob-body-regular-m ',
20
+ day_button: cn(
21
+ 'size-10 text-center cursor-pointer border border-solid border-transparent rounded-sm transition-all hover:bg-color-primary-tr-hover hover:border-primary-default',
22
+ { 'h-[32px]': isRange }
23
+ ),
24
+ //--------------------------------
25
+ nav: 'space-x-1 flex items-center',
26
+ nav_button: 'h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100',
27
+ nav_button_previous: 'absolute left-1',
28
+ nav_button_next: 'absolute right-1',
29
+ table: 'w-full border-collapse space-y-1',
30
+ head_row: 'flex',
31
+ head_cell: 'text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]',
32
+ row: 'flex w-full mt-2'
33
+ }
34
+ }
@@ -0,0 +1,51 @@
1
+ import { eachMonthOfInterval, endOfYear, format, startOfYear } from 'date-fns'
2
+ import { ru } from 'date-fns/locale'
3
+
4
+ export const MONTHS_OPTIONS = eachMonthOfInterval({
5
+ start: startOfYear(new Date()),
6
+ end: endOfYear(new Date())
7
+ })
8
+ .map((month) => format(month, 'LLLL', { locale: ru }))
9
+ .map((s) => s.charAt(0).toUpperCase() + s.slice(1))
10
+
11
+ export const DAYS_OF_WEEK = [
12
+ { day: 'Пн' },
13
+ { day: 'Вт' },
14
+ { day: 'Ср' },
15
+ { day: 'Чт' },
16
+ { day: 'Пт' },
17
+ { day: 'Сб', isWeekend: true },
18
+ { day: 'Вс', isWeekend: true }
19
+ ]
20
+
21
+ const getYearsFromCurrentTo = (endYear = 1950) => {
22
+ const currentYear = new Date().getFullYear()
23
+ const years = []
24
+
25
+ // eslint-disable-next-line no-plusplus
26
+ for (let year = currentYear; year >= endYear; year--) {
27
+ years.push(year)
28
+ }
29
+
30
+ return years
31
+ }
32
+
33
+ export const YEARS_OPTIONS = getYearsFromCurrentTo()
34
+
35
+ // TODO: REMOVE
36
+ // export const markActiveDay = (currentDate: string) => {
37
+ // const previousCell = document.querySelector('[data-focus="true"]')
38
+ // if (previousCell) {
39
+ // previousCell.setAttribute('data-focus', 'false')
40
+ // previousCell.classList.remove('bg-color-primary-default', 'text-color-white')
41
+ // }
42
+
43
+ // const cell = document.querySelector(`[data-day="${currentDate}"]`)
44
+ // if (cell) {
45
+ // cell.setAttribute('data-focus', 'true')
46
+ // cell.classList.add('bg-color-primary-default', 'text-color-white')
47
+ // }
48
+
49
+ // // markActiveDay(`${year}-${month}-${day}`) - ON BLUR
50
+ // // markActiveDay(`${+format(date, 'yyyy')}-${+format(date, 'MM')}-${+format(date, 'dd')}`) - ON CLICK DAY
51
+ // }
@@ -0,0 +1,2 @@
1
+ export { useDatePicker, type TControlledDate } from './useDatePicker'
2
+ export { useCalendarDropdowns } from './useCalendarDropdowns'