@scbt-ecom/ui 0.0.27 → 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 (324) 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/ExampleContainer.d.ts +0 -5
  206. package/dist/configs/index.d.ts +0 -1
  207. package/dist/configs/tailwindConfigBase.d.ts +0 -2
  208. package/dist/index.d.ts +0 -8
  209. package/dist/shared/constants/api.d.ts +0 -2
  210. package/dist/shared/constants/designSystem/colors.d.ts +0 -120
  211. package/dist/shared/constants/designSystem/index.d.ts +0 -3
  212. package/dist/shared/constants/designSystem/others.d.ts +0 -16
  213. package/dist/shared/constants/designSystem/typography.d.ts +0 -75
  214. package/dist/shared/constants/index.d.ts +0 -2
  215. package/dist/shared/hooks/index.d.ts +0 -4
  216. package/dist/shared/hooks/useBoolean.d.ts +0 -3
  217. package/dist/shared/hooks/useClickOutside.d.ts +0 -2
  218. package/dist/shared/hooks/useControlledForm.d.ts +0 -7
  219. package/dist/shared/hooks/useDebounce.d.ts +0 -3
  220. package/dist/shared/ui/Badge.d.ts +0 -6
  221. package/dist/shared/ui/Breadcrumbs.d.ts +0 -15
  222. package/dist/shared/ui/ButtonIcon.d.ts +0 -17
  223. package/dist/shared/ui/CustomLink.d.ts +0 -15
  224. package/dist/shared/ui/Document.d.ts +0 -13
  225. package/dist/shared/ui/Heading.d.ts +0 -12
  226. package/dist/shared/ui/Hint.d.ts +0 -21
  227. package/dist/shared/ui/Loader.d.ts +0 -21
  228. package/dist/shared/ui/PhoneView.d.ts +0 -12
  229. package/dist/shared/ui/Portal.d.ts +0 -7
  230. package/dist/shared/ui/ProgressBar.d.ts +0 -18
  231. package/dist/shared/ui/ResponsiveContainer.d.ts +0 -6
  232. package/dist/shared/ui/Section.d.ts +0 -6
  233. package/dist/shared/ui/Skeleton.d.ts +0 -4
  234. package/dist/shared/ui/TabsSwitcher.d.ts +0 -33
  235. package/dist/shared/ui/accordion/Accordion.d.ts +0 -13
  236. package/dist/shared/ui/accordion/index.d.ts +0 -1
  237. package/dist/shared/ui/accordion/model/types.d.ts +0 -17
  238. package/dist/shared/ui/accordion/ui/AccordionHeader.d.ts +0 -8
  239. package/dist/shared/ui/brandLogos.d.ts +0 -5
  240. package/dist/shared/ui/button/Button.d.ts +0 -17
  241. package/dist/shared/ui/button/index.d.ts +0 -1
  242. package/dist/shared/ui/button/model/helpers.d.ts +0 -2
  243. package/dist/shared/ui/calendar/Calendar.d.ts +0 -20
  244. package/dist/shared/ui/calendar/index.d.ts +0 -1
  245. package/dist/shared/ui/calendar/model/animation.d.ts +0 -18
  246. package/dist/shared/ui/calendar/model/classes.d.ts +0 -24
  247. package/dist/shared/ui/calendar/model/helpers.d.ts +0 -9
  248. package/dist/shared/ui/calendar/model/hooks/index.d.ts +0 -2
  249. package/dist/shared/ui/calendar/model/hooks/useCalendarDropdowns.d.ts +0 -9
  250. package/dist/shared/ui/calendar/model/hooks/useDatePicker.d.ts +0 -19
  251. package/dist/shared/ui/calendar/ui/CalendarHeader.d.ts +0 -15
  252. package/dist/shared/ui/calendar/ui/Dropdown.d.ts +0 -10
  253. package/dist/shared/ui/calendar/ui/NavigationArrows.d.ts +0 -5
  254. package/dist/shared/ui/calendar/ui/Weekdays.d.ts +0 -1
  255. package/dist/shared/ui/calendar/ui/index.d.ts +0 -2
  256. package/dist/shared/ui/formControlElements/CheckboxControl.d.ts +0 -13
  257. package/dist/shared/ui/formControlElements/FormControl.d.ts +0 -3
  258. package/dist/shared/ui/formControlElements/InputControl.d.ts +0 -6
  259. package/dist/shared/ui/formControlElements/InputControlMask.d.ts +0 -10
  260. package/dist/shared/ui/formControlElements/RadioControl.d.ts +0 -26
  261. package/dist/shared/ui/formControlElements/SelectControl.d.ts +0 -27
  262. package/dist/shared/ui/formControlElements/SwitchControl.d.ts +0 -16
  263. package/dist/shared/ui/formControlElements/TextareaControl.d.ts +0 -11
  264. package/dist/shared/ui/formControlElements/calendarControl/CalendarControl.d.ts +0 -13
  265. package/dist/shared/ui/formControlElements/calendarControl/hooks/index.d.ts +0 -2
  266. package/dist/shared/ui/formControlElements/calendarControl/hooks/useCalendar.d.ts +0 -16
  267. package/dist/shared/ui/formControlElements/calendarControl/hooks/useCalendarDropdowns.d.ts +0 -9
  268. package/dist/shared/ui/formControlElements/calendarControl/model/helpers.d.ts +0 -24
  269. package/dist/shared/ui/formControlElements/calendarControl/model/types.d.ts +0 -33
  270. package/dist/shared/ui/formControlElements/calendarControl/ui/DaysOfMonth.d.ts +0 -10
  271. package/dist/shared/ui/formControlElements/calendarControl/ui/DaysOfWeek.d.ts +0 -6
  272. package/dist/shared/ui/formControlElements/calendarControl/ui/Dropdown.d.ts +0 -11
  273. package/dist/shared/ui/formControlElements/calendarControl/ui/Header.d.ts +0 -14
  274. package/dist/shared/ui/formControlElements/calendarControl/ui/Navigation.d.ts +0 -9
  275. package/dist/shared/ui/formControlElements/calendarControl/ui/OptionsList.d.ts +0 -5
  276. package/dist/shared/ui/formControlElements/calendarControl/ui/index.d.ts +0 -4
  277. package/dist/shared/ui/formControlElements/dadata/DadataInputControl.d.ts +0 -14
  278. package/dist/shared/ui/formControlElements/dadata/model/api.d.ts +0 -2
  279. package/dist/shared/ui/formControlElements/dadata/model/helpers.d.ts +0 -7
  280. package/dist/shared/ui/formControlElements/dadata/model/types.d.ts +0 -42
  281. package/dist/shared/ui/formControlElements/dadata/model/useDadata.d.ts +0 -7
  282. package/dist/shared/ui/formControlElements/model/classes-types.d.ts +0 -18
  283. package/dist/shared/ui/formControlElements/model/index.d.ts +0 -2
  284. package/dist/shared/ui/formControlElements/model/props-types.d.ts +0 -20
  285. package/dist/shared/ui/formControlElements/ui/FieldAttachment.d.ts +0 -13
  286. package/dist/shared/ui/formControlElements/ui/FieldContainer.d.ts +0 -14
  287. package/dist/shared/ui/formControlElements/ui/FieldWrapper.d.ts +0 -14
  288. package/dist/shared/ui/formControlElements/ui/MessageView.d.ts +0 -13
  289. package/dist/shared/ui/formControlElements/ui/index.d.ts +0 -4
  290. package/dist/shared/ui/icon/Icon.d.ts +0 -10
  291. package/dist/shared/ui/icon/sprite.gen.d.ts +0 -17
  292. package/dist/shared/ui/index.d.ts +0 -21
  293. package/dist/shared/ui/popover/Popover.d.ts +0 -23
  294. package/dist/shared/ui/popover/index.d.ts +0 -1
  295. package/dist/shared/ui/table/Table.d.ts +0 -17
  296. package/dist/shared/ui/table/index.d.ts +0 -1
  297. package/dist/shared/ui/table/type.d.ts +0 -21
  298. package/dist/shared/utils/capitalize.d.ts +0 -1
  299. package/dist/shared/utils/cn.d.ts +0 -2
  300. package/dist/shared/utils/deepCompare.d.ts +0 -1
  301. package/dist/shared/utils/formatToDate.d.ts +0 -1
  302. package/dist/shared/utils/index.d.ts +0 -5
  303. package/dist/shared/utils/isClient.d.ts +0 -1
  304. package/dist/shared/validation/index.d.ts +0 -3
  305. package/dist/shared/validation/messages.d.ts +0 -12
  306. package/dist/shared/validation/regExp.d.ts +0 -3
  307. package/dist/shared/validation/zodValidation/calendar.d.ts +0 -2
  308. package/dist/shared/validation/zodValidation/dadataFio.d.ts +0 -6
  309. package/dist/shared/validation/zodValidation/index.d.ts +0 -2
  310. package/dist/style.css +0 -1
  311. package/dist/ui.es.js +0 -25268
  312. package/dist/ui.umd.js +0 -85
  313. package/dist/widgets/Advantages.d.ts +0 -17
  314. package/dist/widgets/banner/Banner.d.ts +0 -28
  315. package/dist/widgets/banner/index.d.ts +0 -1
  316. package/dist/widgets/banner/model/helpers.d.ts +0 -4
  317. package/dist/widgets/banner/ui/BannerButtonsGroup.d.ts +0 -12
  318. package/dist/widgets/pageHeader/PageHeader.d.ts +0 -16
  319. /package/{dist → public}/sprites/arrows.svg +0 -0
  320. /package/{dist → public}/sprites/brandLogos.svg +0 -0
  321. /package/{dist → public}/sprites/common.svg +0 -0
  322. /package/{dist → public}/sprites/files.svg +0 -0
  323. /package/{dist → public}/sprites/general.svg +0 -0
  324. /package/{dist → public}/sprites/info.svg +0 -0
@@ -0,0 +1,58 @@
1
+ import type { HTMLAttributes, ReactElement } from 'react'
2
+ import { cva, type VariantProps } from 'class-variance-authority'
3
+ import { cn } from '$/shared/utils'
4
+
5
+ const wrapperConfig = cva('', {
6
+ variants: {
7
+ position: {
8
+ absolute: 'absolute',
9
+ static: 'static',
10
+ fixed: 'fixed'
11
+ }
12
+ },
13
+ defaultVariants: {
14
+ position: 'static'
15
+ }
16
+ })
17
+
18
+ const loaderConfig = cva('border-2 border-solid block animate-spin rounded-full', {
19
+ variants: {
20
+ intent: {
21
+ primary: 'border-white border-b-transparent',
22
+ secondary: 'border-primary-default border-b-transparent'
23
+ },
24
+ size: {
25
+ sm: 'size-5 border-2',
26
+ md: 'size-8 border-2',
27
+ lg: 'size-12 border-4'
28
+ }
29
+ },
30
+ defaultVariants: {
31
+ size: 'md',
32
+ intent: 'primary'
33
+ }
34
+ })
35
+
36
+ type ILoaderClasses = {
37
+ wrapper: string
38
+ loader: string
39
+ text: string
40
+ }
41
+
42
+ export interface ILoaderProps
43
+ extends VariantProps<typeof loaderConfig>,
44
+ VariantProps<typeof wrapperConfig>,
45
+ HTMLAttributes<HTMLDivElement> {
46
+ intent?: 'primary' | 'secondary'
47
+ text?: ReactElement | string
48
+ classes?: Partial<ILoaderClasses>
49
+ }
50
+
51
+ export const Loader = ({ size = 'md', classes, intent = 'secondary', position = 'static', text, ...props }: ILoaderProps) => {
52
+ return (
53
+ <div className={cn(wrapperConfig({ position }), { 'flex flex-col items-center gap-2': text }, classes?.wrapper)}>
54
+ <span data-testid='loader' className={cn(loaderConfig({ size, intent }), classes?.loader)} {...props}></span>
55
+ {text && <p className={cn('desk-body-regular-l text-color-dark', classes?.text)}>{text}</p>}
56
+ </div>
57
+ )
58
+ }
@@ -0,0 +1,23 @@
1
+ import { cn } from '../utils'
2
+
3
+ interface IPhoneViewClasses {
4
+ wrapper: string
5
+ link: string
6
+ text: string
7
+ }
8
+
9
+ export interface IPhoneViewProps {
10
+ phone: string
11
+ text: string
12
+ classes?: Partial<IPhoneViewClasses>
13
+ }
14
+ export const PhoneView = ({ phone, text, classes }: IPhoneViewProps) => {
15
+ return (
16
+ <div className={cn('flex flex-col', classes?.wrapper)}>
17
+ <a href={`tel:${phone}`} className={cn('text-color-dark desk-body-medium-l', classes?.link)}>
18
+ {phone}
19
+ </a>
20
+ <p className={cn('text-color-tetriary desk-body-regular-l', classes?.text)}>{text}</p>
21
+ </div>
22
+ )
23
+ }
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react'
2
+ import { createPortal } from 'react-dom'
3
+
4
+ interface IPortalProps {
5
+ children: ReactNode
6
+ container?: HTMLElement
7
+ }
8
+
9
+ export const Portal = ({ children, container = document.body }: IPortalProps) => createPortal(children, container)
@@ -0,0 +1,43 @@
1
+ import { type ReactElement } from 'react'
2
+ import { cn } from '../utils'
3
+
4
+ type IProgressBarClasses = {
5
+ wrapper: string
6
+ topContent: string
7
+ bottomContent: string
8
+ progressBar: string
9
+ progress: string
10
+ loader: string
11
+ }
12
+
13
+ export interface IProgressBarProps {
14
+ topContent?: ReactElement
15
+ bottomContent?: ReactElement
16
+ progress: number
17
+ maxPercent?: number
18
+ classes?: Partial<IProgressBarClasses>
19
+ }
20
+
21
+ export const ProgressBar = ({ topContent, bottomContent, progress, maxPercent = 100, classes }: IProgressBarProps) => {
22
+ return (
23
+ <div className={cn('flex flex-col', classes?.wrapper)}>
24
+ {topContent && <div className={cn('flex justify-between gap-5 mb-2', classes?.topContent)}>{topContent}</div>}
25
+
26
+ <div className={cn('relative w-[328xp] desktop:w-[524px] h-2 rounded-md bg-color-blue-grey-100', classes?.progressBar)}>
27
+ <div
28
+ style={{ width: `${progress}%` }}
29
+ className={cn('relative transition-all bg-color-positive h-2 rounded-md z-[4]', classes?.progress)}
30
+ ></div>
31
+ <span
32
+ style={{ maxWidth: `${maxPercent}%` }}
33
+ className={cn(
34
+ 'absolute z-[2] h-full w-full rounded-md top-1/2 -translate-y-1/2 progressBar-apply animate-progress-loader',
35
+ classes?.loader
36
+ )}
37
+ ></span>
38
+ </div>
39
+
40
+ {bottomContent && <div className={cn('flex justify-between gap-5 mt-2', classes?.bottomContent)}>{bottomContent}</div>}
41
+ </div>
42
+ )
43
+ }
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react'
2
+ import { cn } from '$/shared/utils'
3
+
4
+ export interface IResponsiveContainerProps extends HTMLAttributes<HTMLDivElement> {
5
+ children: ReactNode
6
+ className?: string
7
+ }
8
+
9
+ export const ResponsiveContainer = ({ children, className }: IResponsiveContainerProps) => {
10
+ return <div className={cn('w-full px-4 m-auto desktop:max-w-[1188px]', className)}>{children}</div>
11
+ }
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react'
2
+ import { cn } from '$/shared/utils'
3
+
4
+ export interface ISectionProps extends HTMLAttributes<HTMLDivElement> {
5
+ children: ReactNode
6
+ className?: string
7
+ }
8
+
9
+ export const Section = ({ children, className, ...props }: ISectionProps) => {
10
+ return (
11
+ <section className={cn('pb-16 desktop:pb-20', className)} {...props}>
12
+ {children}
13
+ </section>
14
+ )
15
+ }
@@ -0,0 +1,9 @@
1
+ import { cn } from '../utils'
2
+
3
+ export interface ISkeletonProps {
4
+ className?: string
5
+ }
6
+
7
+ export const Skeleton = ({ className }: ISkeletonProps) => {
8
+ return <div className={cn('skeleton-apply h-full w-full', className)}></div>
9
+ }
@@ -0,0 +1,80 @@
1
+ 'use client'
2
+
3
+ import * as React from 'react'
4
+ import * as TabPrimitive from '@radix-ui/react-tabs'
5
+ import { cn } from '../utils'
6
+ import { Accordion } from './accordion'
7
+
8
+ /**
9
+ * @param {string} id - для триггера и для контента должен совпадать
10
+ */
11
+
12
+ interface ITabsClasses {
13
+ root: string
14
+ list: string
15
+ trigger: string
16
+ content: string
17
+ contentsWrapper: string
18
+ }
19
+
20
+ interface ITabContent {
21
+ id: string
22
+ body: React.ReactElement | string
23
+ accordion?: {
24
+ title: string
25
+ }
26
+ }
27
+
28
+ interface ITabTrigger {
29
+ id: string
30
+ label: string
31
+ }
32
+
33
+ export interface ITabRenderContent {
34
+ triggers: ITabTrigger[]
35
+ contents: ITabContent[]
36
+ }
37
+
38
+ export interface ITabsSwitcherProps {
39
+ renderContent: ITabRenderContent
40
+ defaultActiveTabId?: string
41
+ classes?: Partial<ITabsClasses>
42
+ }
43
+
44
+ export const TabsSwitcher = ({ renderContent, defaultActiveTabId = '1', classes }: ITabsSwitcherProps) => {
45
+ return (
46
+ <TabPrimitive.Root defaultValue={defaultActiveTabId} className={cn('flex flex-col', classes?.root)}>
47
+ <TabPrimitive.List aria-label='Manage your account' className={cn('flex items-center gap-4', classes?.list)}>
48
+ {renderContent?.triggers?.map(({ id, label }) => (
49
+ <TabPrimitive.Trigger
50
+ key={id}
51
+ value={id}
52
+ className={cn(
53
+ 'bg-color-blue-grey-100 outline outline-2 outline-offset-2 outline-transparent text-color-secondary py-2 px-4 desk-body-regular-l rounded-sm cursor-pointer hover:bg-color-blue-grey-200 hover:text-color-secondary data-[state="active"]:bg-color-primary-default data-[state="active"]:text-color-white transition-colors',
54
+ classes?.trigger
55
+ )}
56
+ >
57
+ {label}
58
+ </TabPrimitive.Trigger>
59
+ ))}
60
+ </TabPrimitive.List>
61
+ <div className={cn('flex flex-col gap-4', classes?.contentsWrapper)}>
62
+ {renderContent?.contents?.map(({ id, body, accordion }) => {
63
+ if (accordion && accordion?.title) {
64
+ return (
65
+ <TabPrimitive.Content key={id} value={id} className={cn('py-8', classes?.content)}>
66
+ <Accordion label={accordion?.title}>{body}</Accordion>
67
+ </TabPrimitive.Content>
68
+ )
69
+ }
70
+
71
+ return (
72
+ <TabPrimitive.Content key={id} value={id} className={cn('py-8', classes?.content)}>
73
+ {body}
74
+ </TabPrimitive.Content>
75
+ )
76
+ })}
77
+ </div>
78
+ </TabPrimitive.Root>
79
+ )
80
+ }
@@ -0,0 +1,36 @@
1
+ 'use client'
2
+
3
+ import * as React from 'react'
4
+ import * as AccordionPrimitive from '@radix-ui/react-accordion'
5
+ import type { TAccordionHeaderClasses, TAccordionRootClasses } from './model/types'
6
+ import { AccordionHeader } from './ui/AccordionHeader'
7
+ import { cn } from '$/shared/utils'
8
+
9
+ /**
10
+ * @param {string[]} defaultOpen - По умолчанию открытые аккордеоны необходимо указать тот же label явно руками.
11
+ * Пример defaultValue={['Заголовок аккордеона 1', 'Заголовок аккордеона 2']}
12
+ */
13
+ export interface IAccordionProps {
14
+ children: React.ReactNode
15
+ label: string | React.ReactElement
16
+ classes?: Partial<TAccordionHeaderClasses> & Partial<TAccordionRootClasses>
17
+ defaultOpen?: string[]
18
+ }
19
+
20
+ export const Accordion = ({ children, label, classes, defaultOpen }: IAccordionProps) => {
21
+ return (
22
+ <AccordionPrimitive.Root className={cn('flex gap-5 flex-col', classes?.accordion)} type='multiple' defaultValue={defaultOpen}>
23
+ <AccordionPrimitive.Item className={cn('w-full disabled:text-color-dark', classes?.item)} value={label.toString()}>
24
+ <AccordionHeader classes={classes}>{label}</AccordionHeader>
25
+ <AccordionPrimitive.Content
26
+ className={cn(
27
+ 'desk-body-regular-l text-color-dark overflow-hidden transition-all data-[state=closed]:animate-slideUp data-[state=open]:animate-slideDown bg-color-transparent',
28
+ classes?.content
29
+ )}
30
+ >
31
+ <div className={cn('p-6', classes?.contentInner)}>{children}</div>
32
+ </AccordionPrimitive.Content>
33
+ </AccordionPrimitive.Item>
34
+ </AccordionPrimitive.Root>
35
+ )
36
+ }
@@ -0,0 +1 @@
1
+ export { Accordion, type IAccordionProps } from './Accordion'
@@ -0,0 +1,20 @@
1
+ import type * as React from 'react'
2
+
3
+ export type TAccordionHeaderClasses = {
4
+ trigger: string
5
+ icon: string
6
+ header: string
7
+ inner: string
8
+ }
9
+
10
+ export type TAccordionRootClasses = {
11
+ item: string
12
+ content: string
13
+ contentInner: string
14
+ accordion: string
15
+ }
16
+
17
+ export interface IAccordionItem {
18
+ label: string
19
+ content: React.ReactNode
20
+ }
@@ -0,0 +1,35 @@
1
+ 'use client'
2
+
3
+ import * as React from 'react'
4
+ import { Header, Trigger } from '@radix-ui/react-accordion'
5
+ import { Icon } from '../../icon/Icon'
6
+ import type { TAccordionHeaderClasses } from '../model/types'
7
+ import { cn } from '$/shared/utils'
8
+
9
+ interface IAccordionHeaderProps {
10
+ children?: React.ReactElement | string
11
+ classes?: Partial<TAccordionHeaderClasses>
12
+ }
13
+
14
+ export const AccordionHeader = React.forwardRef<HTMLButtonElement, IAccordionHeaderProps>(
15
+ ({ children, classes, ...props }, forwardedRef) => (
16
+ <Header className={cn('rounded-sm bg-color-primary-light-default', classes?.header)}>
17
+ <Trigger
18
+ ref={forwardedRef}
19
+ className={cn(
20
+ 'outline-0 bg-color-transparent flex items-center justify-between gap-5 w-full cursor-pointer py-5 px-6 border border-transparent border-solid rounded-sm focus:border-primary-default group',
21
+ classes?.trigger
22
+ )}
23
+ {...props}
24
+ >
25
+ <div className={cn('desk-body-medium-l text-color-dark', classes?.inner)}>{children}</div>
26
+ <Icon
27
+ name='arrows/arrowCircle'
28
+ className={cn('group-data-[state=open]:rotate-180 transition-all text-icon-blue-grey-800 size-8', classes?.icon)}
29
+ />
30
+ </Trigger>
31
+ </Header>
32
+ )
33
+ )
34
+
35
+ AccordionHeader.displayName = 'AccordionHeader'
@@ -0,0 +1,14 @@
1
+ import type { ReactElement } from 'react'
2
+ import { Icon } from './icon/Icon'
3
+
4
+ export type TBrandLogoVariant = 'main' | 'white' | 'gray' | 'black' | 'business' | 'insurance'
5
+ type TBrandLogosVariants = Record<TBrandLogoVariant, ReactElement>
6
+
7
+ export const brandLogos: TBrandLogosVariants = {
8
+ main: <Icon name='brandLogos/logoMain' />,
9
+ white: <Icon name='brandLogos/logoWhite' />,
10
+ gray: <Icon name='brandLogos/logoGray' />,
11
+ black: <Icon name='brandLogos/logoBlack' />,
12
+ business: <Icon name='brandLogos/logoBusiness' />,
13
+ insurance: <Icon name='brandLogos/logoInsurance' />
14
+ } as const
@@ -0,0 +1,111 @@
1
+ import { type ComponentProps, forwardRef, type ReactElement } from 'react'
2
+ import { cva, type VariantProps } from 'class-variance-authority'
3
+ import { Loader } from '../Loader'
4
+ import { setButtonLoaderIntent } from './model/helpers'
5
+ import { cn } from '$/shared/utils'
6
+
7
+ const buttonConfig = cva(
8
+ 'relative flex items-center justify-center gap-4 cursor-pointer rounded-sm w-[216px] outline-offset-4 outline-transparent outline-2 desk-body-regular-l transition duration-12 active:scale-[0.97] disabled:pointer-events-none',
9
+ {
10
+ variants: {
11
+ intent: {
12
+ primary:
13
+ 'bg-color-primary-default text-color-white outline-offset-[3px] hover:bg-color-primary-hover active:bg-color-primary-hover focus:bg-color-primary-default focus:outline-primary-focus disabled:bg-color-primary-disabled',
14
+ secondary:
15
+ 'bg-transparent text-color-primary-default border border-solid border-primary-default hover:bg-color-primary-tr-hover active:bg-color-primary-tr-pressed active:border-primary-hover focus:outline-primary-focus focus:bg-color-primary-tr-focus disabled:bg-color-blue-grey-200 disabled:text-color-primary-disabled disabled:border-transparent',
16
+ ghost:
17
+ 'bg-transparent text-color-primary-default hover:bg-color-primary-tr-hover hover:text-color-primary-hover focus:bg-color-primary-tr-focus focus:outline-primary-focus active:bg-color-primary-tr-pressed active:text-color-primary-hover disabled:text-color-primary-disabled disabled:bg-transparent',
18
+ red: 'bg-color-secondary-default text-color-white outline-offset-[3px] hover:bg-color-secondary-hover disabled:bg-color-secondary-disabled active:bg-color-secondary-hover focus:bg-color-secondary-default focus:outline-primary-focus'
19
+ },
20
+ size: {
21
+ sm: 'h-10',
22
+ md: 'h-12',
23
+ lg: 'h-14'
24
+ },
25
+ textFormat: {
26
+ capitalize: 'capitalize',
27
+ uppercase: 'uppercase',
28
+ lowercase: 'lowercase',
29
+ initial: 'initial'
30
+ },
31
+ isLoading: {
32
+ true: '',
33
+ false: ''
34
+ }
35
+ },
36
+ compoundVariants: [
37
+ {
38
+ intent: 'primary',
39
+ isLoading: true,
40
+ class: '!bg-color-primary-default'
41
+ },
42
+ {
43
+ intent: 'secondary',
44
+ isLoading: true,
45
+ class: '!bg-color-transparent !border-primary-hover'
46
+ },
47
+ {
48
+ intent: 'ghost',
49
+ isLoading: true,
50
+ class: '!bg-color-blue-grey-200'
51
+ },
52
+ {
53
+ intent: 'red',
54
+ isLoading: true,
55
+ class: '!bg-color-secondary-default'
56
+ }
57
+ ],
58
+ defaultVariants: {
59
+ intent: 'primary',
60
+ size: 'md',
61
+ textFormat: 'initial'
62
+ }
63
+ }
64
+ )
65
+
66
+ type TButtonConfig = VariantProps<typeof buttonConfig>
67
+ export type TButtonIntents = 'primary' | 'secondary' | 'ghost' | 'red'
68
+ export interface IButtonProps extends ComponentProps<'button'>, TButtonConfig {
69
+ iconLeft?: ReactElement
70
+ iconRight?: ReactElement
71
+ isLoading?: boolean
72
+ }
73
+
74
+ export const Button = forwardRef<HTMLButtonElement, IButtonProps>(
75
+ (
76
+ {
77
+ intent,
78
+ size,
79
+ className,
80
+ children,
81
+ type = 'button',
82
+ iconLeft,
83
+ iconRight,
84
+ disabled = false,
85
+ isLoading = false,
86
+ textFormat,
87
+ ...props
88
+ },
89
+ ref
90
+ ) => {
91
+ return (
92
+ <button
93
+ ref={ref}
94
+ type={type}
95
+ disabled={disabled || isLoading}
96
+ className={cn(buttonConfig({ intent, size, textFormat, isLoading }), className)}
97
+ {...props}
98
+ >
99
+ {isLoading ? (
100
+ <Loader size='sm' intent={setButtonLoaderIntent(intent!)} />
101
+ ) : (
102
+ <>
103
+ {iconLeft && <span className='size-5 flex items-center justify-center'>{iconLeft}</span>}
104
+ {children}
105
+ {iconRight && <span className='size-5 flex items-center justify-center'>{iconRight}</span>}
106
+ </>
107
+ )}
108
+ </button>
109
+ )
110
+ }
111
+ )
@@ -0,0 +1 @@
1
+ export { Button, type IButtonProps } from './Button'
@@ -0,0 +1,16 @@
1
+ import type { TButtonIntents } from '../Button'
2
+
3
+ export const setButtonLoaderIntent = (intent: TButtonIntents) => {
4
+ switch (intent) {
5
+ case 'ghost':
6
+ case 'secondary':
7
+ return 'secondary'
8
+
9
+ case 'primary':
10
+ case 'red':
11
+ return 'primary'
12
+
13
+ default:
14
+ return intent
15
+ }
16
+ }