@redneckz/wildless-cms-uni-blocks 0.7.5 → 0.7.7

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 (338) hide show
  1. package/bundle/blocks.schema.json +1 -1
  2. package/bundle/bundle.umd.js +189 -78
  3. package/bundle/bundle.umd.min.js +1 -1
  4. package/bundle/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
  5. package/bundle/components/Footer/MediaButton.d.ts +3 -4
  6. package/bundle/components/Footer/SocialMedia.d.ts +2 -3
  7. package/bundle/components/Header/HeaderChatBotButton.d.ts +11 -0
  8. package/bundle/components/Header/HeaderContent.d.ts +6 -1
  9. package/bundle/components/Header/HeaderSecondaryMenu.d.ts +2 -0
  10. package/bundle/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
  11. package/bundle/components/Header/useChatBot.d.ts +2 -0
  12. package/bundle/components/Tabs/LinkTab.d.ts +1 -0
  13. package/bundle/components/Tabs/ScrollableTabs.d.ts +8 -0
  14. package/bundle/components/Tabs/TabsContent.d.ts +12 -0
  15. package/bundle/components/Tabs/renderGroupTab.d.ts +2 -2
  16. package/bundle/components/Tabs/renderTab.d.ts +2 -1
  17. package/bundle/components/Tabs/tabItemClasses.d.ts +6 -1
  18. package/bundle/hooks/useBool.d.ts +9 -0
  19. package/bundle/icons/IconName.d.ts +4 -2
  20. package/bundle/model/ButtonVersion.d.ts +2 -2
  21. package/cosmos-static/icons/HeadphonesIcon.svg +1 -0
  22. package/dist/components/CarouselCatalogCard/CarouselCatalogCard.js +1 -1
  23. package/dist/components/CarouselCatalogCard/CarouselCatalogCard.js.map +1 -1
  24. package/dist/components/CarouselProductCard/CarouselProductCard.js +1 -1
  25. package/dist/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
  26. package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
  27. package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
  28. package/dist/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
  29. package/dist/components/Footer/Footer.js +2 -2
  30. package/dist/components/Footer/Footer.js.map +1 -1
  31. package/dist/components/Footer/Footer.mobile.js.map +1 -1
  32. package/dist/components/Footer/MediaButton.d.ts +3 -4
  33. package/dist/components/Footer/MediaButton.js +4 -5
  34. package/dist/components/Footer/MediaButton.js.map +1 -1
  35. package/dist/components/Footer/SocialMedia.d.ts +2 -3
  36. package/dist/components/Footer/SocialMedia.js +1 -1
  37. package/dist/components/Footer/SocialMedia.js.map +1 -1
  38. package/dist/components/Header/DropdownMenu.js +3 -2
  39. package/dist/components/Header/DropdownMenu.js.map +1 -1
  40. package/dist/components/Header/Header.js +3 -2
  41. package/dist/components/Header/Header.js.map +1 -1
  42. package/dist/components/Header/HeaderChatBotButton.d.ts +11 -0
  43. package/dist/components/Header/HeaderChatBotButton.js +19 -0
  44. package/dist/components/Header/HeaderChatBotButton.js.map +1 -0
  45. package/dist/components/Header/HeaderContent.d.ts +6 -1
  46. package/dist/components/Header/HeaderSecondaryMenu.d.ts +2 -0
  47. package/dist/components/Header/HeaderSecondaryMenu.js +6 -11
  48. package/dist/components/Header/HeaderSecondaryMenu.js.map +1 -1
  49. package/dist/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
  50. package/dist/components/Header/HeaderSecondaryMenuButton.js +5 -1
  51. package/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  52. package/dist/components/Header/useChatBot.d.ts +2 -0
  53. package/dist/components/Header/useChatBot.js +15 -0
  54. package/dist/components/Header/useChatBot.js.map +1 -0
  55. package/dist/components/Tabs/LinkTab.d.ts +1 -0
  56. package/dist/components/Tabs/LinkTab.js +2 -2
  57. package/dist/components/Tabs/LinkTab.js.map +1 -1
  58. package/dist/components/Tabs/ScrollableTabs.d.ts +8 -0
  59. package/dist/components/Tabs/ScrollableTabs.js +24 -0
  60. package/dist/components/Tabs/ScrollableTabs.js.map +1 -0
  61. package/dist/components/Tabs/Tabs.js +9 -2
  62. package/dist/components/Tabs/Tabs.js.map +1 -1
  63. package/dist/components/Tabs/TabsContent.d.ts +12 -0
  64. package/dist/components/Tabs/renderGroupTab.d.ts +2 -2
  65. package/dist/components/Tabs/renderGroupTab.js +12 -4
  66. package/dist/components/Tabs/renderGroupTab.js.map +1 -1
  67. package/dist/components/Tabs/renderTab.d.ts +2 -1
  68. package/dist/components/Tabs/renderTab.js +4 -6
  69. package/dist/components/Tabs/renderTab.js.map +1 -1
  70. package/dist/components/Tabs/tabItemClasses.d.ts +6 -1
  71. package/dist/components/Tabs/tabItemClasses.js +61 -2
  72. package/dist/components/Tabs/tabItemClasses.js.map +1 -1
  73. package/dist/hooks/useBool.d.ts +9 -0
  74. package/dist/hooks/useBool.js +12 -0
  75. package/dist/hooks/useBool.js.map +1 -0
  76. package/dist/icons/IconName.d.ts +4 -2
  77. package/dist/icons/IconName.js +3 -1
  78. package/dist/icons/IconName.js.map +1 -1
  79. package/dist/model/ButtonVersion.d.ts +2 -2
  80. package/dist/setup-fixture.js +0 -1
  81. package/dist/setup-fixture.js.map +1 -1
  82. package/dist/ui-kit/Button/buttonClassNameConstants.js +3 -0
  83. package/dist/ui-kit/Button/buttonClassNameConstants.js.map +1 -1
  84. package/lib/common.css +1 -1
  85. package/lib/components/CarouselCatalogCard/CarouselCatalogCard.js +1 -1
  86. package/lib/components/CarouselCatalogCard/CarouselCatalogCard.js.map +1 -1
  87. package/lib/components/CarouselProductCard/CarouselProductCard.js +1 -1
  88. package/lib/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
  89. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
  90. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
  91. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
  92. package/lib/components/Footer/Footer.js +2 -2
  93. package/lib/components/Footer/Footer.js.map +1 -1
  94. package/lib/components/Footer/Footer.mobile.js.map +1 -1
  95. package/lib/components/Footer/MediaButton.d.ts +3 -4
  96. package/lib/components/Footer/MediaButton.js +4 -5
  97. package/lib/components/Footer/MediaButton.js.map +1 -1
  98. package/lib/components/Footer/SocialMedia.d.ts +2 -3
  99. package/lib/components/Footer/SocialMedia.js +1 -1
  100. package/lib/components/Footer/SocialMedia.js.map +1 -1
  101. package/lib/components/Header/DropdownMenu.js +3 -2
  102. package/lib/components/Header/DropdownMenu.js.map +1 -1
  103. package/lib/components/Header/Header.js +3 -2
  104. package/lib/components/Header/Header.js.map +1 -1
  105. package/lib/components/Header/HeaderChatBotButton.d.ts +11 -0
  106. package/lib/components/Header/HeaderChatBotButton.js +17 -0
  107. package/lib/components/Header/HeaderChatBotButton.js.map +1 -0
  108. package/lib/components/Header/HeaderContent.d.ts +6 -1
  109. package/lib/components/Header/HeaderSecondaryMenu.d.ts +2 -0
  110. package/lib/components/Header/HeaderSecondaryMenu.js +6 -11
  111. package/lib/components/Header/HeaderSecondaryMenu.js.map +1 -1
  112. package/lib/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
  113. package/lib/components/Header/HeaderSecondaryMenuButton.js +5 -1
  114. package/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  115. package/lib/components/Header/useChatBot.d.ts +2 -0
  116. package/lib/components/Header/useChatBot.js +12 -0
  117. package/lib/components/Header/useChatBot.js.map +1 -0
  118. package/lib/components/Tabs/LinkTab.d.ts +1 -0
  119. package/lib/components/Tabs/LinkTab.js +3 -3
  120. package/lib/components/Tabs/LinkTab.js.map +1 -1
  121. package/lib/components/Tabs/ScrollableTabs.d.ts +8 -0
  122. package/lib/components/Tabs/ScrollableTabs.js +22 -0
  123. package/lib/components/Tabs/ScrollableTabs.js.map +1 -0
  124. package/lib/components/Tabs/Tabs.fixture.d.ts +1 -0
  125. package/lib/components/Tabs/Tabs.js +9 -2
  126. package/lib/components/Tabs/Tabs.js.map +1 -1
  127. package/lib/components/Tabs/TabsContent.d.ts +12 -0
  128. package/lib/components/Tabs/renderGroupTab.d.ts +2 -2
  129. package/lib/components/Tabs/renderGroupTab.js +13 -5
  130. package/lib/components/Tabs/renderGroupTab.js.map +1 -1
  131. package/lib/components/Tabs/renderTab.d.ts +2 -1
  132. package/lib/components/Tabs/renderTab.js +4 -6
  133. package/lib/components/Tabs/renderTab.js.map +1 -1
  134. package/lib/components/Tabs/tabItemClasses.d.ts +6 -1
  135. package/lib/components/Tabs/tabItemClasses.js +58 -1
  136. package/lib/components/Tabs/tabItemClasses.js.map +1 -1
  137. package/lib/hooks/useBool.d.ts +9 -0
  138. package/lib/hooks/useBool.js +9 -0
  139. package/lib/hooks/useBool.js.map +1 -0
  140. package/lib/icons/IconName.d.ts +4 -2
  141. package/lib/icons/IconName.js +3 -1
  142. package/lib/icons/IconName.js.map +1 -1
  143. package/lib/model/ButtonVersion.d.ts +2 -2
  144. package/lib/setup-fixture.js +0 -1
  145. package/lib/setup-fixture.js.map +1 -1
  146. package/lib/ui-kit/Button/buttonClassNameConstants.js +3 -0
  147. package/lib/ui-kit/Button/buttonClassNameConstants.js.map +1 -1
  148. package/mobile/bundle/bundle.umd.js +7 -5
  149. package/mobile/bundle/bundle.umd.min.js +1 -1
  150. package/mobile/bundle/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
  151. package/mobile/bundle/components/Footer/MediaButton.d.ts +3 -4
  152. package/mobile/bundle/components/Header/HeaderChatBotButton.d.ts +11 -0
  153. package/mobile/bundle/components/Header/HeaderContent.d.ts +6 -1
  154. package/mobile/bundle/components/Header/HeaderSecondaryMenu.d.ts +2 -0
  155. package/mobile/bundle/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
  156. package/mobile/bundle/components/Header/useChatBot.d.ts +2 -0
  157. package/mobile/bundle/components/Tabs/LinkTab.d.ts +1 -0
  158. package/mobile/bundle/components/Tabs/ScrollableTabs.d.ts +8 -0
  159. package/mobile/bundle/components/Tabs/TabsContent.d.ts +12 -0
  160. package/mobile/bundle/components/Tabs/renderGroupTab.d.ts +2 -2
  161. package/mobile/bundle/components/Tabs/renderTab.d.ts +2 -1
  162. package/mobile/bundle/components/Tabs/tabItemClasses.d.ts +6 -1
  163. package/mobile/bundle/hooks/useBool.d.ts +9 -0
  164. package/mobile/bundle/icons/IconName.d.ts +4 -2
  165. package/mobile/bundle/model/ButtonVersion.d.ts +2 -2
  166. package/mobile/dist/components/CarouselCatalogCard/CarouselCatalogCard.js +1 -1
  167. package/mobile/dist/components/CarouselCatalogCard/CarouselCatalogCard.js.map +1 -1
  168. package/mobile/dist/components/CarouselProductCard/CarouselProductCard.js +1 -1
  169. package/mobile/dist/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
  170. package/mobile/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
  171. package/mobile/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
  172. package/mobile/dist/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
  173. package/mobile/dist/components/Footer/Footer.js.map +1 -1
  174. package/mobile/dist/components/Footer/MediaButton.d.ts +3 -4
  175. package/mobile/dist/components/Footer/MediaButton.js +4 -5
  176. package/mobile/dist/components/Footer/MediaButton.js.map +1 -1
  177. package/mobile/dist/components/Header/DropdownMenu.js +3 -2
  178. package/mobile/dist/components/Header/DropdownMenu.js.map +1 -1
  179. package/mobile/dist/components/Header/HeaderChatBotButton.d.ts +11 -0
  180. package/mobile/dist/components/Header/HeaderChatBotButton.js +19 -0
  181. package/mobile/dist/components/Header/HeaderChatBotButton.js.map +1 -0
  182. package/mobile/dist/components/Header/HeaderContent.d.ts +6 -1
  183. package/mobile/dist/components/Header/HeaderSecondaryMenu.d.ts +2 -0
  184. package/mobile/dist/components/Header/HeaderSecondaryMenu.js +6 -11
  185. package/mobile/dist/components/Header/HeaderSecondaryMenu.js.map +1 -1
  186. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
  187. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.js +5 -1
  188. package/mobile/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  189. package/mobile/dist/components/Header/useChatBot.d.ts +2 -0
  190. package/mobile/dist/components/Header/useChatBot.js +15 -0
  191. package/mobile/dist/components/Header/useChatBot.js.map +1 -0
  192. package/mobile/dist/components/Tabs/LinkTab.d.ts +1 -0
  193. package/mobile/dist/components/Tabs/LinkTab.js +2 -2
  194. package/mobile/dist/components/Tabs/LinkTab.js.map +1 -1
  195. package/mobile/dist/components/Tabs/ScrollableTabs.d.ts +8 -0
  196. package/mobile/dist/components/Tabs/ScrollableTabs.js +24 -0
  197. package/mobile/dist/components/Tabs/ScrollableTabs.js.map +1 -0
  198. package/mobile/dist/components/Tabs/Tabs.js +9 -2
  199. package/mobile/dist/components/Tabs/Tabs.js.map +1 -1
  200. package/mobile/dist/components/Tabs/TabsContent.d.ts +12 -0
  201. package/mobile/dist/components/Tabs/renderGroupTab.d.ts +2 -2
  202. package/mobile/dist/components/Tabs/renderGroupTab.js +12 -4
  203. package/mobile/dist/components/Tabs/renderGroupTab.js.map +1 -1
  204. package/mobile/dist/components/Tabs/renderTab.d.ts +2 -1
  205. package/mobile/dist/components/Tabs/renderTab.js +4 -6
  206. package/mobile/dist/components/Tabs/renderTab.js.map +1 -1
  207. package/mobile/dist/components/Tabs/tabItemClasses.d.ts +6 -1
  208. package/mobile/dist/components/Tabs/tabItemClasses.js +61 -2
  209. package/mobile/dist/components/Tabs/tabItemClasses.js.map +1 -1
  210. package/mobile/dist/hooks/useBool.d.ts +9 -0
  211. package/mobile/dist/hooks/useBool.js +12 -0
  212. package/mobile/dist/hooks/useBool.js.map +1 -0
  213. package/mobile/dist/icons/IconName.d.ts +4 -2
  214. package/mobile/dist/icons/IconName.js +3 -1
  215. package/mobile/dist/icons/IconName.js.map +1 -1
  216. package/mobile/dist/model/ButtonVersion.d.ts +2 -2
  217. package/mobile/dist/setup-fixture.js +0 -1
  218. package/mobile/dist/setup-fixture.js.map +1 -1
  219. package/mobile/dist/ui-kit/Button/buttonClassNameConstants.js +3 -0
  220. package/mobile/dist/ui-kit/Button/buttonClassNameConstants.js.map +1 -1
  221. package/mobile/lib/components/CarouselCatalogCard/CarouselCatalogCard.js +1 -1
  222. package/mobile/lib/components/CarouselCatalogCard/CarouselCatalogCard.js.map +1 -1
  223. package/mobile/lib/components/CarouselProductCard/CarouselProductCard.js +1 -1
  224. package/mobile/lib/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
  225. package/mobile/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
  226. package/mobile/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
  227. package/mobile/lib/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
  228. package/mobile/lib/components/Footer/Footer.js.map +1 -1
  229. package/mobile/lib/components/Footer/MediaButton.d.ts +3 -4
  230. package/mobile/lib/components/Footer/MediaButton.js +4 -5
  231. package/mobile/lib/components/Footer/MediaButton.js.map +1 -1
  232. package/mobile/lib/components/Header/DropdownMenu.js +3 -2
  233. package/mobile/lib/components/Header/DropdownMenu.js.map +1 -1
  234. package/mobile/lib/components/Header/HeaderChatBotButton.d.ts +11 -0
  235. package/mobile/lib/components/Header/HeaderChatBotButton.js +17 -0
  236. package/mobile/lib/components/Header/HeaderChatBotButton.js.map +1 -0
  237. package/mobile/lib/components/Header/HeaderContent.d.ts +6 -1
  238. package/mobile/lib/components/Header/HeaderSecondaryMenu.d.ts +2 -0
  239. package/mobile/lib/components/Header/HeaderSecondaryMenu.js +6 -11
  240. package/mobile/lib/components/Header/HeaderSecondaryMenu.js.map +1 -1
  241. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
  242. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.js +5 -1
  243. package/mobile/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
  244. package/mobile/lib/components/Header/useChatBot.d.ts +2 -0
  245. package/mobile/lib/components/Header/useChatBot.js +12 -0
  246. package/mobile/lib/components/Header/useChatBot.js.map +1 -0
  247. package/mobile/lib/components/Tabs/LinkTab.d.ts +1 -0
  248. package/mobile/lib/components/Tabs/LinkTab.js +3 -3
  249. package/mobile/lib/components/Tabs/LinkTab.js.map +1 -1
  250. package/mobile/lib/components/Tabs/ScrollableTabs.d.ts +8 -0
  251. package/mobile/lib/components/Tabs/ScrollableTabs.js +22 -0
  252. package/mobile/lib/components/Tabs/ScrollableTabs.js.map +1 -0
  253. package/mobile/lib/components/Tabs/Tabs.js +9 -2
  254. package/mobile/lib/components/Tabs/Tabs.js.map +1 -1
  255. package/mobile/lib/components/Tabs/TabsContent.d.ts +12 -0
  256. package/mobile/lib/components/Tabs/renderGroupTab.d.ts +2 -2
  257. package/mobile/lib/components/Tabs/renderGroupTab.js +13 -5
  258. package/mobile/lib/components/Tabs/renderGroupTab.js.map +1 -1
  259. package/mobile/lib/components/Tabs/renderTab.d.ts +2 -1
  260. package/mobile/lib/components/Tabs/renderTab.js +4 -6
  261. package/mobile/lib/components/Tabs/renderTab.js.map +1 -1
  262. package/mobile/lib/components/Tabs/tabItemClasses.d.ts +6 -1
  263. package/mobile/lib/components/Tabs/tabItemClasses.js +58 -1
  264. package/mobile/lib/components/Tabs/tabItemClasses.js.map +1 -1
  265. package/mobile/lib/hooks/useBool.d.ts +9 -0
  266. package/mobile/lib/hooks/useBool.js +9 -0
  267. package/mobile/lib/hooks/useBool.js.map +1 -0
  268. package/mobile/lib/icons/IconName.d.ts +4 -2
  269. package/mobile/lib/icons/IconName.js +3 -1
  270. package/mobile/lib/icons/IconName.js.map +1 -1
  271. package/mobile/lib/model/ButtonVersion.d.ts +2 -2
  272. package/mobile/lib/setup-fixture.js +0 -1
  273. package/mobile/lib/setup-fixture.js.map +1 -1
  274. package/mobile/lib/ui-kit/Button/buttonClassNameConstants.js +3 -0
  275. package/mobile/lib/ui-kit/Button/buttonClassNameConstants.js.map +1 -1
  276. package/mobile/src/components/CarouselCatalogCard/CarouselCatalogCard.tsx +0 -1
  277. package/mobile/src/components/CarouselProductCard/CarouselProductCard.tsx +0 -1
  278. package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCard.example.json +6 -3
  279. package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCard.tsx +2 -0
  280. package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCard.ui.json +7 -0
  281. package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCardContent.ts +5 -9
  282. package/mobile/src/components/Footer/Footer.tsx +1 -1
  283. package/mobile/src/components/Footer/MediaButton.tsx +19 -17
  284. package/mobile/src/components/Header/DropdownMenu.tsx +7 -5
  285. package/mobile/src/components/Header/HeaderChatBotButton.tsx +45 -0
  286. package/mobile/src/components/Header/HeaderContent.ts +7 -1
  287. package/mobile/src/components/Header/HeaderSecondaryMenu.tsx +20 -30
  288. package/mobile/src/components/Header/HeaderSecondaryMenuButton.tsx +24 -5
  289. package/mobile/src/components/Header/useChatBot.ts +16 -0
  290. package/mobile/src/components/Tabs/LinkTab.tsx +5 -13
  291. package/mobile/src/components/Tabs/ScrollableTabs.tsx +55 -0
  292. package/mobile/src/components/Tabs/Tabs.tsx +26 -4
  293. package/mobile/src/components/Tabs/TabsContent.ts +13 -0
  294. package/mobile/src/components/Tabs/renderGroupTab.tsx +30 -20
  295. package/mobile/src/components/Tabs/renderTab.tsx +8 -5
  296. package/mobile/src/components/Tabs/tabItemClasses.ts +65 -1
  297. package/mobile/src/hooks/useBool.ts +19 -0
  298. package/mobile/src/icons/HeadphonesIcon.svg +5 -0
  299. package/mobile/src/icons/IconName.ts +5 -5
  300. package/mobile/src/model/ButtonVersion.ts +9 -2
  301. package/mobile/src/setup-fixture.ts +0 -1
  302. package/mobile/src/ui-kit/Button/buttonClassNameConstants.ts +3 -0
  303. package/mobile/src/ui-kit/Img/ImgProps.ts +1 -0
  304. package/package.json +1 -1
  305. package/src/components/CarouselCatalogCard/CarouselCatalogCard.tsx +0 -1
  306. package/src/components/CarouselProductCard/CarouselProductCard.tsx +0 -1
  307. package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.example.json +6 -3
  308. package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.fixture.tsx +20 -5
  309. package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.tsx +2 -0
  310. package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.ui.json +7 -0
  311. package/src/components/CarouselRecommendationCard/CarouselRecommendationCardContent.ts +5 -9
  312. package/src/components/Footer/Footer.mobile.tsx +1 -1
  313. package/src/components/Footer/Footer.tsx +2 -2
  314. package/src/components/Footer/MediaButton.tsx +19 -17
  315. package/src/components/Footer/SocialMedia.tsx +4 -5
  316. package/src/components/Header/DropdownMenu.tsx +7 -5
  317. package/src/components/Header/Header.fixture.tsx +3 -3
  318. package/src/components/Header/Header.tsx +13 -5
  319. package/src/components/Header/HeaderChatBotButton.tsx +45 -0
  320. package/src/components/Header/HeaderContent.ts +7 -1
  321. package/src/components/Header/HeaderSecondaryMenu.tsx +20 -30
  322. package/src/components/Header/HeaderSecondaryMenuButton.tsx +24 -5
  323. package/src/components/Header/useChatBot.ts +16 -0
  324. package/src/components/Tabs/LinkTab.tsx +5 -13
  325. package/src/components/Tabs/ScrollableTabs.tsx +55 -0
  326. package/src/components/Tabs/Tabs.fixture.tsx +22 -0
  327. package/src/components/Tabs/Tabs.tsx +26 -4
  328. package/src/components/Tabs/TabsContent.ts +13 -0
  329. package/src/components/Tabs/renderGroupTab.tsx +30 -20
  330. package/src/components/Tabs/renderTab.tsx +8 -5
  331. package/src/components/Tabs/tabItemClasses.ts +65 -1
  332. package/src/hooks/useBool.ts +19 -0
  333. package/src/icons/HeadphonesIcon.svg +5 -0
  334. package/src/icons/IconName.ts +6 -340
  335. package/src/model/ButtonVersion.ts +9 -2
  336. package/src/setup-fixture.ts +0 -1
  337. package/src/ui-kit/Button/buttonClassNameConstants.ts +3 -0
  338. package/src/ui-kit/Img/ImgProps.ts +1 -0
@@ -1,10 +1,11 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import { useLink } from '../../hooks/useLink';
3
2
  import { Img } from '../../ui-kit/Img/Img';
4
3
  import { getIconWithVersion } from '../../utils/getIconWithVersion';
5
4
  import { style } from '../../utils/style';
6
5
  import type { Picture } from '../../model/Picture';
7
6
  import type { IconVersion } from '../../model/IconVersion';
7
+ import { Button } from '../../ui-kit/Button/Button';
8
+ import type { ButtonProps } from '../../ui-kit/Button/ButtonProps';
8
9
 
9
10
  const ICONS_MAP: Array<{
10
11
  origins: string[];
@@ -45,11 +46,9 @@ const ICONS_MAP: Array<{
45
46
 
46
47
  export type ButtonSize = 'default' | 'small';
47
48
 
48
- interface MediaButtonProps {
49
- href?: string;
50
- isRounded?: boolean;
51
- buttonSize?: ButtonSize;
49
+ interface MediaButtonProps extends ButtonProps {
52
50
  iconVersion?: IconVersion;
51
+ buttonSize?: ButtonSize;
53
52
  }
54
53
 
55
54
  const buttonSizeStyles = {
@@ -58,29 +57,32 @@ const buttonSizeStyles = {
58
57
  };
59
58
 
60
59
  export const MediaButton = JSX<MediaButtonProps>(
61
- ({ isRounded = false, buttonSize = 'default', iconVersion = 'color', ...rest }) => {
62
- const link = useLink();
63
- const { href, onClick } = link(rest);
60
+ ({ iconVersion = 'color', buttonSize = 'default', rounded = false, ...rest }) => {
61
+ const { href, version } = rest;
64
62
 
65
63
  const { icon, label } =
66
64
  ICONS_MAP.find(({ origins }) => origins.some((_) => href?.includes(_))) || {};
67
65
  const iconWithVersion = icon ? { ...getIconWithVersion(icon), iconVersion } : null;
68
66
 
69
- return icon ? (
70
- <a
67
+ return (
68
+ <Button
71
69
  className={style(
72
70
  'group/media flex items-center justify-center box-border',
73
71
  buttonSizeStyles[buttonSize],
74
- isRounded ? 'rounded-full' : 'rounded-md',
75
- 'border-solid border border-main-divider hover:border-transparent',
72
+ rounded ? 'rounded-full' : 'rounded-md',
73
+ 'border border-solid hover:border-transparent',
74
+ 'group-data-primary:border-main-divider',
76
75
  'hover:bg-primary-main hover:text-black',
77
- 'group-data-secondary:bg-white group-data-secondary:hover:bg-secondary-hover',
76
+ 'group-data-secondary:bg-white border-main-divider group-data-secondary:hover:bg-secondary-hover',
77
+ 'group-data-gray:border-green',
78
+
79
+ buttonSizeStyles[buttonSize],
78
80
  )}
79
- href={href}
80
81
  aria-label={label}
81
82
  target="_blank"
82
83
  rel="noopener noreferrer"
83
- onClick={onClick}
84
+ version={version}
85
+ {...rest}
84
86
  >
85
87
  {iconWithVersion ? (
86
88
  <Img
@@ -91,7 +93,7 @@ export const MediaButton = JSX<MediaButtonProps>(
91
93
  asSVG
92
94
  />
93
95
  ) : null}
94
- </a>
95
- ) : null;
96
+ </Button>
97
+ );
96
98
  },
97
99
  );
@@ -1,20 +1,19 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import type { LinkProps } from '../../model/LinkProps';
2
+ import type { ButtonProps } from '../../ui-kit/Button/ButtonProps';
3
3
  import { MediaButton, type ButtonSize } from './MediaButton';
4
4
 
5
5
  export interface SocialMediaProps {
6
6
  className?: string;
7
- media?: LinkProps[];
8
- isRounded?: boolean;
7
+ media?: ButtonProps[];
9
8
  buttonSize?: ButtonSize;
10
9
  }
11
10
 
12
11
  export const SocialMedia = JSX<SocialMediaProps>(
13
- ({ className = '', media, isRounded = false, buttonSize, children }) => (
12
+ ({ className = '', media, children, buttonSize }) => (
14
13
  <div className="font-sans">
15
14
  <div className={`flex gap-2.5 ${className}`}>
16
15
  {media?.map((_, index) => (
17
- <MediaButton key={String(index)} isRounded={isRounded} buttonSize={buttonSize} {..._} />
16
+ <MediaButton key={String(index)} buttonSize={buttonSize} version={_.version} {..._} />
18
17
  ))}
19
18
  </div>
20
19
  <span className="text-s-light text-secondary-text">{children}</span>
@@ -3,6 +3,7 @@ import { useCallback, useState } from '@redneckz/uni-jsx/lib/hooks';
3
3
  import { useLink } from '../../hooks/useLink';
4
4
  import { useOutsideClick } from '../../hooks/useOutsideClick';
5
5
  import type { LinkProps } from '../../model/LinkProps';
6
+ import { style } from '../../utils/style';
6
7
 
7
8
  interface DropdownMenuProps {
8
9
  className?: string;
@@ -21,7 +22,7 @@ export const DropdownMenu = JSX<DropdownMenuProps>(({ className = '', items, act
21
22
 
22
23
  return (
23
24
  <div
24
- className={`${visible ? 'bg-white rounded-md shadow-blue-gray' : ''} ${className}`}
25
+ className={style(visible ? 'bg-white rounded-md shadow-blue-gray' : '', className)}
25
26
  ref={ref}
26
27
  >
27
28
  <button
@@ -39,15 +40,16 @@ export const DropdownMenu = JSX<DropdownMenuProps>(({ className = '', items, act
39
40
  ))}
40
41
  </button>
41
42
  <div
42
- className={`flex flex-col rounded-md bg-white p-6 pb-2 ${visible ? '' : 'hidden'}`}
43
+ className={style('flex flex-col rounded-md bg-white p-6 pb-2', visible ? '' : 'hidden')}
43
44
  aria-hidden={!visible}
44
45
  >
45
46
  {items?.map((item, i) => (
46
47
  <a
47
48
  key={item.href || String(i)}
48
- className={`text-l-light pb-4 hover:text-primary-main ${
49
- item === activeItem ? 'text-primary-main' : ''
50
- }`}
49
+ className={style(
50
+ 'text-l-light pb-4 hover:text-primary-main',
51
+ item === activeItem ? 'text-primary-main' : '',
52
+ )}
51
53
  {...link(item)}
52
54
  >
53
55
  {item.text}
@@ -2,7 +2,7 @@ import '../../setup-fixture';
2
2
  import { Header } from './Header';
3
3
 
4
4
  export default {
5
- default: <Header />,
6
- transparent: <Header bgColor="transparent" />,
7
- 'no submenu': <Header showSubMenu={false} />,
5
+ default: <Header chat="personal" />,
6
+ transparent: <Header bgColor="transparent" chat="personal" />,
7
+ 'no submenu': <Header showSubMenu={false} chat="personal" />,
8
8
  };
@@ -10,6 +10,7 @@ import { useSWRResource } from '../../services/sitemap/useSWRResource';
10
10
  import { BlockWrapper } from '../../ui-kit/BlockWrapper';
11
11
  import { Logo } from '../../ui-kit/Logo/Logo';
12
12
  import { TopItem } from '../../ui-kit/TopItem/TopItem';
13
+ import { style } from '../../utils/style';
13
14
  import type { HeaderContent } from './HeaderContent';
14
15
  import { HeaderSecondaryMenu } from './HeaderSecondaryMenu';
15
16
  import { HeaderSubMenu } from './HeaderSubMenu';
@@ -24,9 +25,10 @@ const BG_COLOR_TO_BLOCK_VERSION: Record<BgColorVersion, BlockVersion> = {
24
25
  export const Header = JSX<HeaderProps>(
25
26
  ({
26
27
  bgColor = 'bg-white',
27
- className = '',
28
+ className,
28
29
  showSubMenu = true,
29
30
  version = BG_COLOR_TO_BLOCK_VERSION[bgColor],
31
+ chat,
30
32
  ...rest
31
33
  }) => {
32
34
  const router = useRouter();
@@ -46,9 +48,11 @@ export const Header = JSX<HeaderProps>(
46
48
  return (
47
49
  <BlockWrapper
48
50
  tag="header"
49
- className={`pt-6 px-20 ${className} ${
50
- showSubMenu && activeTopItem?.items?.length ? 'pb-4' : 'pb-5'
51
- }`}
51
+ className={style(
52
+ 'pt-6 px-20',
53
+ showSubMenu && activeTopItem?.items?.length ? 'pb-4' : 'pb-5',
54
+ className,
55
+ )}
52
56
  version={version}
53
57
  {...rest}
54
58
  >
@@ -62,10 +66,14 @@ export const Header = JSX<HeaderProps>(
62
66
  foreignOffices={foreignOffices}
63
67
  defaultLocation={defaultLocation}
64
68
  officesLink={officesLink}
69
+ chat={chat}
65
70
  />
66
71
  </div>
67
72
  <div
68
- className={`mt-6 h-px bg-main-divider${version === 'transparent' ? ' opacity-30' : ''}`}
73
+ className={style(
74
+ 'mt-6 h-px bg-main-divider',
75
+ version === 'transparent' ? 'opacity-30' : '',
76
+ )}
69
77
  />
70
78
  {showSubMenu && activeTopItem?.items?.length ? (
71
79
  <HeaderSubMenu subItems={activeTopItem.items} />
@@ -0,0 +1,45 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import { useBool } from '../../hooks/useBool';
3
+ import type { IconVersion } from '../../model/IconVersion';
4
+ import { style } from '../../utils/style';
5
+ import type { ChatBot as ChatBotWithEmptyOption } from './HeaderContent';
6
+ import { HeaderSecondaryMenuButton } from './HeaderSecondaryMenuButton';
7
+ import { useChatBot } from './useChatBot';
8
+
9
+ export type ChatBot = Exclude<ChatBotWithEmptyOption, ''>;
10
+
11
+ interface HeaderChatBotButtonProps {
12
+ className?: string;
13
+ iconVersion?: IconVersion;
14
+ chat?: ChatBot;
15
+ onClick?: () => void;
16
+ }
17
+
18
+ const CHAT_BUTTON_EXTERNAL_NAME = 'text-page__btn-chat';
19
+
20
+ export const HeaderChatBotButton = JSX<HeaderChatBotButtonProps>((props) => {
21
+ const [loadRequested, { setTrue: load }] = useBool();
22
+
23
+ return loadRequested ? (
24
+ <HeaderChatBotButtonWithLoader {...props} />
25
+ ) : (
26
+ renderChatBotButton({ ...props, onClick: load })
27
+ );
28
+ });
29
+
30
+ const HeaderChatBotButtonWithLoader = JSX<HeaderChatBotButtonProps>(
31
+ ({ chat = 'personal', ...rest }) => {
32
+ useChatBot(chat);
33
+
34
+ return renderChatBotButton(rest);
35
+ },
36
+ );
37
+
38
+ const renderChatBotButton = ({ className, iconVersion, onClick }: HeaderChatBotButtonProps) => (
39
+ <HeaderSecondaryMenuButton
40
+ className={style(CHAT_BUTTON_EXTERNAL_NAME, className)}
41
+ image={{ icon: 'HeadphonesIcon', iconVersion }}
42
+ ariaLabel="Чат"
43
+ onClick={onClick}
44
+ />
45
+ );
@@ -7,6 +7,12 @@ import type { IconProps, Picture } from '../../model/Picture';
7
7
  */
8
8
  export type SubMenuItem = LinkProps & IconProps;
9
9
 
10
+ /**
11
+ * @title Чат-бот
12
+ * @enumNames ["", "Для физических лиц", "Для юридических лиц"]
13
+ */
14
+ export type ChatBot = '' | 'personal' | 'business';
15
+
10
16
  /**
11
17
  * @title Ссылка дополнительного меню
12
18
  * @required ["text", "href"]
@@ -28,11 +34,11 @@ export interface Logo {
28
34
 
29
35
  /**
30
36
  * @title Шапка (для мобильных горизонтальная прокрутка shift+mouseScroll)
31
- * @required ["defaultLocation", "topItems"]
32
37
  */
33
38
  export interface HeaderContent {
34
39
  /** @hidden */
35
40
  showSubMenu?: boolean;
36
41
  /** @hidden */
37
42
  bgColor?: BgColorVersion;
43
+ chat?: ChatBot;
38
44
  }
@@ -1,12 +1,14 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import { useCallback, useState } from '@redneckz/uni-jsx/lib/hooks';
2
+ import { useBool } from '../../hooks/useBool';
3
3
  import { useLocation } from '../../hooks/useLocation';
4
4
  import type { BlockVersion } from '../../model/BlockVersion';
5
5
  import type { IconVersion } from '../../model/IconVersion';
6
6
  import type { ForeignOffice } from '../../services/sitemap/SitemapProps';
7
- import { Img } from '../../ui-kit/Img/Img';
8
7
  import { Location } from '../../ui-kit/Location/Location';
9
8
  import { TopItem } from '../../ui-kit/TopItem/TopItem';
9
+ import { style } from '../../utils/style';
10
+ import { HeaderChatBotButton } from './HeaderChatBotButton';
11
+ import type { ChatBot } from './HeaderContent';
10
12
  import { HeaderSecondaryMenuButton } from './HeaderSecondaryMenuButton';
11
13
 
12
14
  interface HeaderSecondaryMenuContent {
@@ -14,6 +16,7 @@ interface HeaderSecondaryMenuContent {
14
16
  defaultLocation?: string;
15
17
  officesLink?: string;
16
18
  foreignOffices?: ForeignOffice[];
19
+ chat?: ChatBot;
17
20
  }
18
21
 
19
22
  export interface HeaderSecondaryMenuProps extends HeaderSecondaryMenuContent {
@@ -21,22 +24,16 @@ export interface HeaderSecondaryMenuProps extends HeaderSecondaryMenuContent {
21
24
  }
22
25
 
23
26
  export const HeaderSecondaryMenu = JSX<HeaderSecondaryMenuProps>(
24
- ({ version, className, officesLink, defaultLocation = 'Москва', foreignOffices }) => {
25
- const [isShowLocationModal, setShowLocationModal] = useState<boolean>(false);
27
+ ({ version, className, officesLink, defaultLocation = 'Москва', foreignOffices, chat }) => {
28
+ const [isShowLocationModal, { setTrue: showLocationModal, setFalse: hideLocationModal }] =
29
+ useBool();
26
30
 
27
31
  const [location, onChangeLocation] = useLocation(defaultLocation);
28
32
 
29
- const showLocationModal = useCallback(() => {
30
- setShowLocationModal(true);
31
- }, []);
32
- const hideLocationModal = useCallback(() => {
33
- setShowLocationModal(false);
34
- }, []);
35
-
36
33
  const iconVersion: IconVersion = version === 'transparent' ? 'white' : 'black';
37
34
 
38
35
  return (
39
- <div className={`flex items-center ${className || ''}`}>
36
+ <div className={style('flex items-center', className)}>
40
37
  <TopItem
41
38
  className="mr-5"
42
39
  flat={true}
@@ -54,28 +51,21 @@ export const HeaderSecondaryMenu = JSX<HeaderSecondaryMenuProps>(
54
51
  ariaLabel="Список всех доступных офисов и банкоматов"
55
52
  />
56
53
  ) : null}
54
+ {chat ? (
55
+ <HeaderChatBotButton className="mr-5" iconVersion={iconVersion} chat={chat} />
56
+ ) : null}
57
57
  <HeaderSecondaryMenuButton
58
- className="mr-5 group/btn text-primary-text hover:text-primary-main group-data-transparent:text-white"
58
+ className="mr-5"
59
+ image={{ icon: 'LoupeIcon', iconVersion }}
59
60
  ariaLabel="Поиск по сайту"
60
- >
61
- <Img
62
- image={{ icon: 'LoupeIcon', iconVersion }}
63
- className="h-full pointer-events-none"
64
- imageClassName="group-hover/btn:text-primary-hover group-hover/btn:invert-0 pointer-events-none"
65
- asSVG
66
- />
67
- </HeaderSecondaryMenuButton>
61
+ disabled={true}
62
+ />
68
63
  <HeaderSecondaryMenuButton
69
- className="group/btn min-w-8 min-h-8 text-secondary-light hover:text-secondary-hover group-data-transparent:text-white"
64
+ image={{ icon: 'GridIcon', iconVersion }}
70
65
  ariaLabel="Дополнительные ссылки"
71
- >
72
- <Img
73
- image={{ icon: 'GridIcon', iconVersion }}
74
- className="h-full bg-main-divider/20 rounded-full pointer-events-none"
75
- imageClassName="group-hover/btn:text-primary-hover group-hover/btn:invert-0"
76
- asSVG
77
- />
78
- </HeaderSecondaryMenuButton>
66
+ isRounded={true}
67
+ disabled={true}
68
+ />
79
69
  {isShowLocationModal ? (
80
70
  <Location
81
71
  currentLocation={location}
@@ -1,19 +1,38 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
+ import { Img } from '../../ui-kit/Img/Img';
3
+ import type { ImageContent } from '../../ui-kit/Img/ImgProps';
4
+ import { style } from '../../utils/style';
2
5
 
3
- interface HeaderSecondaryMenuButtonProps {
6
+ export interface HeaderSecondaryMenuButtonProps extends ImageContent {
4
7
  className?: string;
8
+ isRounded?: boolean;
9
+ disabled?: boolean;
5
10
  ariaLabel?: string;
11
+ onClick?: (ev?: { preventDefault: () => void }) => void;
6
12
  }
7
13
 
8
14
  export const HeaderSecondaryMenuButton = JSX<HeaderSecondaryMenuButtonProps>(
9
- ({ className = '', children, ariaLabel }) => (
15
+ ({ className, isRounded, disabled, ariaLabel, image, onClick }) => (
10
16
  <button
17
+ className={style(
18
+ 'group/btn border-0 p-0 flex items-center bg-inherit',
19
+ isRounded
20
+ ? 'w-8 h-8 text-secondary-light hover:text-secondary-hove'
21
+ : 'w-6 h-6 text-primary-text hover:text-primary-main',
22
+ 'group-data-transparent:text-white',
23
+ className,
24
+ )}
11
25
  type="button"
12
- className={`border-0 p-0 w-6 h-6 flex items-center bg-inherit cursor-pointer ${className}`}
13
- disabled={true}
26
+ disabled={disabled}
14
27
  aria-label={ariaLabel}
28
+ onClick={onClick}
15
29
  >
16
- {children}
30
+ <Img
31
+ image={image}
32
+ className={style('h-full', isRounded ? 'bg-main-divider/20 rounded-full' : '')}
33
+ imageClassName="group-hover/btn:text-primary-hover group-hover/btn:invert-0"
34
+ asSVG
35
+ />
17
36
  </button>
18
37
  ),
19
38
  );
@@ -0,0 +1,16 @@
1
+ import { useEffect } from '@redneckz/uni-jsx/lib/hooks';
2
+ import { useExternalNS } from '../../hooks/useExternalNS';
3
+ import { ChatBot } from './HeaderChatBotButton';
4
+
5
+ const CHATBOT_NAMESPACE = 'chatbot';
6
+
7
+ const CHATBOT_URL: Record<ChatBot, string> = {
8
+ personal: '//chat.mes.rshb.ru/assets/js/webchat_rshb',
9
+ business: '', //TODO: add url business chat
10
+ };
11
+
12
+ export const useChatBot = (chat: ChatBot) => {
13
+ useEffect(() => globalThis.localStorage?.setItem('webchat-keep-open', String(Date.now())), []);
14
+
15
+ return useExternalNS(CHATBOT_NAMESPACE, CHATBOT_URL[chat]);
16
+ };
@@ -1,22 +1,16 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import { useLink } from '../../hooks/useLink';
3
- import {
4
- ACTIVE_LINK_CLASSES,
5
- ACTIVE_TEXT_CLASSES,
6
- INACTIVE_LINK_CLASSES,
7
- INACTIVE_TEXT_CLASSES,
8
- LINK_CLASSES,
9
- TEXT_CLASSES,
10
- } from './tabItemClasses';
3
+ import { getLinkTabClassName } from './tabItemClasses';
11
4
  import type { LinkTabData, TabData } from './TabsContent';
12
5
 
13
6
  interface LinkTabProps {
14
7
  tab: LinkTabData;
15
8
  currentTab?: TabData;
9
+ isScrollable?: boolean;
16
10
  }
17
11
 
18
12
  export const LinkTab = JSX<LinkTabProps>((props) => {
19
- const { tab, currentTab } = props;
13
+ const { tab, currentTab, isScrollable = false } = props;
20
14
  const active = currentTab?.type === 'link' && currentTab.href === tab.href;
21
15
 
22
16
  const link = useLink();
@@ -25,14 +19,12 @@ export const LinkTab = JSX<LinkTabProps>((props) => {
25
19
  return (
26
20
  <a
27
21
  role="tab"
28
- className={`${LINK_CLASSES} ${active ? ACTIVE_LINK_CLASSES : INACTIVE_LINK_CLASSES}`}
22
+ className={getLinkTabClassName('link', active, isScrollable)}
29
23
  target={tab.target}
30
24
  href={adjustedProps.href}
31
25
  onClick={adjustedProps.onClick}
32
26
  >
33
- <span className={`${TEXT_CLASSES} ${active ? ACTIVE_TEXT_CLASSES : INACTIVE_TEXT_CLASSES}`}>
34
- {tab.text}
35
- </span>
27
+ <span className={getLinkTabClassName('text', active, isScrollable)}>{tab.text}</span>
36
28
  </a>
37
29
  );
38
30
  });
@@ -0,0 +1,55 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import type { RenderTabProps } from './renderTab';
3
+ import type { TabData } from './TabsContent';
4
+ import { SwipeListContainer } from '../../ui-kit/SwipeListControl/SwipeListContainer';
5
+ import { useSwipeListScroll } from '../../ui-kit/SwipeListControl/useSwipeListScroll';
6
+ import { ScrollLeftButton, ScrollRightButton } from '../../ui-kit/Button/ArrowButton';
7
+ import { renderTab } from './renderTab';
8
+
9
+ interface ScrollableTabsProps extends RenderTabProps {
10
+ tabs?: TabData[];
11
+ }
12
+
13
+ export type IsScrollButtonsShown = boolean[];
14
+
15
+ const scrollButtonStyle = 'absolute z-50 top-0';
16
+
17
+ export const ScrollableTabs = JSX<ScrollableTabsProps>((props) => {
18
+ const { tabs, onClick, currentTab, page, showCounter } = props;
19
+
20
+ const [containerRef, scroll] = useSwipeListScroll<HTMLDivElement>({
21
+ itemCount: tabs?.length || 0,
22
+ isCyclic: false,
23
+ });
24
+
25
+ return (
26
+ <div className="relative max-w-full m-auto">
27
+ <div className={`font-sans max-w-full w-full overflow-hidden relative bg-white`}>
28
+ <SwipeListContainer
29
+ containerRef={containerRef}
30
+ snapAlign="snap-start"
31
+ onVisibleIndicesChange={scroll.handleVisibleIndicesChange}
32
+ >
33
+ {tabs?.map(
34
+ renderTab({
35
+ onClick,
36
+ currentTab,
37
+ showCounter,
38
+ page,
39
+ isScrollable: true,
40
+ }),
41
+ )}
42
+ </SwipeListContainer>
43
+ </div>
44
+ {scroll.canScrollLeft ? (
45
+ <ScrollLeftButton className={`${scrollButtonStyle} left-6`} onClick={scroll.scrollLeft} />
46
+ ) : null}
47
+ {scroll.canScrollRight ? (
48
+ <ScrollRightButton
49
+ className={`${scrollButtonStyle} rotate-180 right-6`}
50
+ onClick={scroll.scrollRight}
51
+ />
52
+ ) : null}
53
+ </div>
54
+ );
55
+ });
@@ -10,8 +10,30 @@ export default {
10
10
  { type: 'group', ref: 'tab1', title: 'Вкладка 1' },
11
11
  { type: 'group', ref: 'tab2', title: 'Вкладка 2' },
12
12
  { type: 'link', href: 'https://google.com', text: 'Вкладка 3' },
13
+ { type: 'group', ref: 'tab3', title: 'Вкладка 4' },
13
14
  ]}
14
15
  />
15
16
  </div>
16
17
  ),
18
+ scrollable: (
19
+ <div className="container grid grid-cols-12">
20
+ <Tabs
21
+ className="col-span-12"
22
+ tabs={[
23
+ { type: 'group', ref: 'tab1', title: 'Вкладка 1' },
24
+ { type: 'group', ref: 'tab2', title: 'Вкладка 2' },
25
+ { type: 'link', href: 'https://google.com', text: 'Вкладка 3' },
26
+ { type: 'link', href: 'https://yandex.com', text: 'Вкладка 4' },
27
+ { type: 'link', href: 'https://ya.com', text: 'Вкладка 5' },
28
+ { type: 'link', href: 'https://habr.com', text: 'Вкладка за номером 6' },
29
+ { type: 'link', href: 'https://kremlin.com', text: 'Вкладка 7' },
30
+ { type: 'link', href: 'https://gov.com', text: 'Вкладка 8' },
31
+ { type: 'group', ref: 'tab3', title: 'Вкладка 9' },
32
+ { type: 'link', href: 'https://vc.com', text: 'Вкладка номер 10' },
33
+ { type: 'link', href: 'https://ria.com', text: 'Вкладка номер 11' },
34
+ ]}
35
+ tabsMode="scrollable"
36
+ />
37
+ </div>
38
+ ),
17
39
  };
@@ -2,9 +2,10 @@ import { JSX } from '@redneckz/uni-jsx';
2
2
  import { useCallback, useEffect, useState } from '@redneckz/uni-jsx/lib/hooks';
3
3
  import { EventBus } from '../../EventBus/EventBus';
4
4
  import type { UniBlockProps } from '../../model/JSXBlock';
5
+ import type { TabData, TabsContent } from './TabsContent';
5
6
  import { BlockWrapper } from '../../ui-kit/BlockWrapper';
6
7
  import { renderTab } from './renderTab';
7
- import type { TabData, TabsContent } from './TabsContent';
8
+ import { ScrollableTabs } from './ScrollableTabs';
8
9
 
9
10
  export interface TabActivationEvent {
10
11
  type?: TabData['type'];
@@ -14,7 +15,7 @@ export interface TabActivationEvent {
14
15
  export interface TabsBlockProps extends TabsContent, UniBlockProps {}
15
16
 
16
17
  export const Tabs = JSX<TabsBlockProps>((props) => {
17
- const { className = '', tabs, showCounter, isSticky, ...rest } = props;
18
+ const { className = '', tabs, showCounter, isSticky, tabsMode, ...rest } = props;
18
19
 
19
20
  const [currentTab, setCurrentTab] = useState(tabs ? tabs[0] : undefined);
20
21
 
@@ -25,6 +26,8 @@ export const Tabs = JSX<TabsBlockProps>((props) => {
25
26
  if (event.type === 'link' && tab) {
26
27
  setCurrentTab(tab);
27
28
  }
29
+
30
+ return [];
28
31
  }),
29
32
  [tabs],
30
33
  );
@@ -46,11 +49,30 @@ export const Tabs = JSX<TabsBlockProps>((props) => {
46
49
 
47
50
  return (
48
51
  <BlockWrapper
49
- className={`${isSticky ? 'sticky top-1 z-20 ' : ''}box-border flex gap-x-1 ${className}`}
52
+ className={`relative box-border flex gap-x-1 w-full ${
53
+ isSticky ? 'sticky top-1 z-20 ' : ''
54
+ } ${className}`}
50
55
  role="tablist"
51
56
  {...rest}
52
57
  >
53
- {tabs?.map(renderTab({ onClick: handleClick, currentTab, showCounter, ...rest }))}
58
+ {tabsMode === 'scrollable' ? (
59
+ <ScrollableTabs
60
+ tabs={tabs}
61
+ onClick={handleClick}
62
+ currentTab={currentTab}
63
+ showCounter={showCounter}
64
+ {...rest}
65
+ />
66
+ ) : (
67
+ tabs?.map(
68
+ renderTab({
69
+ onClick: handleClick,
70
+ currentTab,
71
+ showCounter,
72
+ ...rest,
73
+ }),
74
+ )
75
+ )}
54
76
  </BlockWrapper>
55
77
  );
56
78
  });
@@ -27,6 +27,14 @@ export type LinkTabData = LinkProps & {
27
27
  */
28
28
  export type TabData = GroupTabData | LinkTabData;
29
29
 
30
+ /**
31
+ * @enumNames [
32
+ * "По ширине экрана",
33
+ * "С прокруткой"
34
+ * ]
35
+ */
36
+ export type TabsMode = 'wideScreen' | 'scrollable';
37
+
30
38
  /**
31
39
  * @title Вкладки
32
40
  */
@@ -37,4 +45,9 @@ export interface TabsContent {
37
45
  isSticky?: boolean;
38
46
  /** @title Показывать счетчик блоков во вкладках */
39
47
  showCounter?: boolean;
48
+ /**
49
+ * @title Режим вкладок
50
+ * @default "wideScreen"
51
+ */
52
+ tabsMode?: TabsMode;
40
53
  }