@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.
- package/bundle/blocks.schema.json +1 -1
- package/bundle/bundle.umd.js +189 -78
- package/bundle/bundle.umd.min.js +1 -1
- package/bundle/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
- package/bundle/components/Footer/MediaButton.d.ts +3 -4
- package/bundle/components/Footer/SocialMedia.d.ts +2 -3
- package/bundle/components/Header/HeaderChatBotButton.d.ts +11 -0
- package/bundle/components/Header/HeaderContent.d.ts +6 -1
- package/bundle/components/Header/HeaderSecondaryMenu.d.ts +2 -0
- package/bundle/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
- package/bundle/components/Header/useChatBot.d.ts +2 -0
- package/bundle/components/Tabs/LinkTab.d.ts +1 -0
- package/bundle/components/Tabs/ScrollableTabs.d.ts +8 -0
- package/bundle/components/Tabs/TabsContent.d.ts +12 -0
- package/bundle/components/Tabs/renderGroupTab.d.ts +2 -2
- package/bundle/components/Tabs/renderTab.d.ts +2 -1
- package/bundle/components/Tabs/tabItemClasses.d.ts +6 -1
- package/bundle/hooks/useBool.d.ts +9 -0
- package/bundle/icons/IconName.d.ts +4 -2
- package/bundle/model/ButtonVersion.d.ts +2 -2
- package/cosmos-static/icons/HeadphonesIcon.svg +1 -0
- package/dist/components/CarouselCatalogCard/CarouselCatalogCard.js +1 -1
- package/dist/components/CarouselCatalogCard/CarouselCatalogCard.js.map +1 -1
- package/dist/components/CarouselProductCard/CarouselProductCard.js +1 -1
- package/dist/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
- package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
- package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
- package/dist/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
- package/dist/components/Footer/Footer.js +2 -2
- package/dist/components/Footer/Footer.js.map +1 -1
- package/dist/components/Footer/Footer.mobile.js.map +1 -1
- package/dist/components/Footer/MediaButton.d.ts +3 -4
- package/dist/components/Footer/MediaButton.js +4 -5
- package/dist/components/Footer/MediaButton.js.map +1 -1
- package/dist/components/Footer/SocialMedia.d.ts +2 -3
- package/dist/components/Footer/SocialMedia.js +1 -1
- package/dist/components/Footer/SocialMedia.js.map +1 -1
- package/dist/components/Header/DropdownMenu.js +3 -2
- package/dist/components/Header/DropdownMenu.js.map +1 -1
- package/dist/components/Header/Header.js +3 -2
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/Header/HeaderChatBotButton.d.ts +11 -0
- package/dist/components/Header/HeaderChatBotButton.js +19 -0
- package/dist/components/Header/HeaderChatBotButton.js.map +1 -0
- package/dist/components/Header/HeaderContent.d.ts +6 -1
- package/dist/components/Header/HeaderSecondaryMenu.d.ts +2 -0
- package/dist/components/Header/HeaderSecondaryMenu.js +6 -11
- package/dist/components/Header/HeaderSecondaryMenu.js.map +1 -1
- package/dist/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
- package/dist/components/Header/HeaderSecondaryMenuButton.js +5 -1
- package/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
- package/dist/components/Header/useChatBot.d.ts +2 -0
- package/dist/components/Header/useChatBot.js +15 -0
- package/dist/components/Header/useChatBot.js.map +1 -0
- package/dist/components/Tabs/LinkTab.d.ts +1 -0
- package/dist/components/Tabs/LinkTab.js +2 -2
- package/dist/components/Tabs/LinkTab.js.map +1 -1
- package/dist/components/Tabs/ScrollableTabs.d.ts +8 -0
- package/dist/components/Tabs/ScrollableTabs.js +24 -0
- package/dist/components/Tabs/ScrollableTabs.js.map +1 -0
- package/dist/components/Tabs/Tabs.js +9 -2
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Tabs/TabsContent.d.ts +12 -0
- package/dist/components/Tabs/renderGroupTab.d.ts +2 -2
- package/dist/components/Tabs/renderGroupTab.js +12 -4
- package/dist/components/Tabs/renderGroupTab.js.map +1 -1
- package/dist/components/Tabs/renderTab.d.ts +2 -1
- package/dist/components/Tabs/renderTab.js +4 -6
- package/dist/components/Tabs/renderTab.js.map +1 -1
- package/dist/components/Tabs/tabItemClasses.d.ts +6 -1
- package/dist/components/Tabs/tabItemClasses.js +61 -2
- package/dist/components/Tabs/tabItemClasses.js.map +1 -1
- package/dist/hooks/useBool.d.ts +9 -0
- package/dist/hooks/useBool.js +12 -0
- package/dist/hooks/useBool.js.map +1 -0
- package/dist/icons/IconName.d.ts +4 -2
- package/dist/icons/IconName.js +3 -1
- package/dist/icons/IconName.js.map +1 -1
- package/dist/model/ButtonVersion.d.ts +2 -2
- package/dist/setup-fixture.js +0 -1
- package/dist/setup-fixture.js.map +1 -1
- package/dist/ui-kit/Button/buttonClassNameConstants.js +3 -0
- package/dist/ui-kit/Button/buttonClassNameConstants.js.map +1 -1
- package/lib/common.css +1 -1
- package/lib/components/CarouselCatalogCard/CarouselCatalogCard.js +1 -1
- package/lib/components/CarouselCatalogCard/CarouselCatalogCard.js.map +1 -1
- package/lib/components/CarouselProductCard/CarouselProductCard.js +1 -1
- package/lib/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
- package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
- package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
- package/lib/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
- package/lib/components/Footer/Footer.js +2 -2
- package/lib/components/Footer/Footer.js.map +1 -1
- package/lib/components/Footer/Footer.mobile.js.map +1 -1
- package/lib/components/Footer/MediaButton.d.ts +3 -4
- package/lib/components/Footer/MediaButton.js +4 -5
- package/lib/components/Footer/MediaButton.js.map +1 -1
- package/lib/components/Footer/SocialMedia.d.ts +2 -3
- package/lib/components/Footer/SocialMedia.js +1 -1
- package/lib/components/Footer/SocialMedia.js.map +1 -1
- package/lib/components/Header/DropdownMenu.js +3 -2
- package/lib/components/Header/DropdownMenu.js.map +1 -1
- package/lib/components/Header/Header.js +3 -2
- package/lib/components/Header/Header.js.map +1 -1
- package/lib/components/Header/HeaderChatBotButton.d.ts +11 -0
- package/lib/components/Header/HeaderChatBotButton.js +17 -0
- package/lib/components/Header/HeaderChatBotButton.js.map +1 -0
- package/lib/components/Header/HeaderContent.d.ts +6 -1
- package/lib/components/Header/HeaderSecondaryMenu.d.ts +2 -0
- package/lib/components/Header/HeaderSecondaryMenu.js +6 -11
- package/lib/components/Header/HeaderSecondaryMenu.js.map +1 -1
- package/lib/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
- package/lib/components/Header/HeaderSecondaryMenuButton.js +5 -1
- package/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
- package/lib/components/Header/useChatBot.d.ts +2 -0
- package/lib/components/Header/useChatBot.js +12 -0
- package/lib/components/Header/useChatBot.js.map +1 -0
- package/lib/components/Tabs/LinkTab.d.ts +1 -0
- package/lib/components/Tabs/LinkTab.js +3 -3
- package/lib/components/Tabs/LinkTab.js.map +1 -1
- package/lib/components/Tabs/ScrollableTabs.d.ts +8 -0
- package/lib/components/Tabs/ScrollableTabs.js +22 -0
- package/lib/components/Tabs/ScrollableTabs.js.map +1 -0
- package/lib/components/Tabs/Tabs.fixture.d.ts +1 -0
- package/lib/components/Tabs/Tabs.js +9 -2
- package/lib/components/Tabs/Tabs.js.map +1 -1
- package/lib/components/Tabs/TabsContent.d.ts +12 -0
- package/lib/components/Tabs/renderGroupTab.d.ts +2 -2
- package/lib/components/Tabs/renderGroupTab.js +13 -5
- package/lib/components/Tabs/renderGroupTab.js.map +1 -1
- package/lib/components/Tabs/renderTab.d.ts +2 -1
- package/lib/components/Tabs/renderTab.js +4 -6
- package/lib/components/Tabs/renderTab.js.map +1 -1
- package/lib/components/Tabs/tabItemClasses.d.ts +6 -1
- package/lib/components/Tabs/tabItemClasses.js +58 -1
- package/lib/components/Tabs/tabItemClasses.js.map +1 -1
- package/lib/hooks/useBool.d.ts +9 -0
- package/lib/hooks/useBool.js +9 -0
- package/lib/hooks/useBool.js.map +1 -0
- package/lib/icons/IconName.d.ts +4 -2
- package/lib/icons/IconName.js +3 -1
- package/lib/icons/IconName.js.map +1 -1
- package/lib/model/ButtonVersion.d.ts +2 -2
- package/lib/setup-fixture.js +0 -1
- package/lib/setup-fixture.js.map +1 -1
- package/lib/ui-kit/Button/buttonClassNameConstants.js +3 -0
- package/lib/ui-kit/Button/buttonClassNameConstants.js.map +1 -1
- package/mobile/bundle/bundle.umd.js +7 -5
- package/mobile/bundle/bundle.umd.min.js +1 -1
- package/mobile/bundle/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
- package/mobile/bundle/components/Footer/MediaButton.d.ts +3 -4
- package/mobile/bundle/components/Header/HeaderChatBotButton.d.ts +11 -0
- package/mobile/bundle/components/Header/HeaderContent.d.ts +6 -1
- package/mobile/bundle/components/Header/HeaderSecondaryMenu.d.ts +2 -0
- package/mobile/bundle/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
- package/mobile/bundle/components/Header/useChatBot.d.ts +2 -0
- package/mobile/bundle/components/Tabs/LinkTab.d.ts +1 -0
- package/mobile/bundle/components/Tabs/ScrollableTabs.d.ts +8 -0
- package/mobile/bundle/components/Tabs/TabsContent.d.ts +12 -0
- package/mobile/bundle/components/Tabs/renderGroupTab.d.ts +2 -2
- package/mobile/bundle/components/Tabs/renderTab.d.ts +2 -1
- package/mobile/bundle/components/Tabs/tabItemClasses.d.ts +6 -1
- package/mobile/bundle/hooks/useBool.d.ts +9 -0
- package/mobile/bundle/icons/IconName.d.ts +4 -2
- package/mobile/bundle/model/ButtonVersion.d.ts +2 -2
- package/mobile/dist/components/CarouselCatalogCard/CarouselCatalogCard.js +1 -1
- package/mobile/dist/components/CarouselCatalogCard/CarouselCatalogCard.js.map +1 -1
- package/mobile/dist/components/CarouselProductCard/CarouselProductCard.js +1 -1
- package/mobile/dist/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
- package/mobile/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
- package/mobile/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
- package/mobile/dist/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
- package/mobile/dist/components/Footer/Footer.js.map +1 -1
- package/mobile/dist/components/Footer/MediaButton.d.ts +3 -4
- package/mobile/dist/components/Footer/MediaButton.js +4 -5
- package/mobile/dist/components/Footer/MediaButton.js.map +1 -1
- package/mobile/dist/components/Header/DropdownMenu.js +3 -2
- package/mobile/dist/components/Header/DropdownMenu.js.map +1 -1
- package/mobile/dist/components/Header/HeaderChatBotButton.d.ts +11 -0
- package/mobile/dist/components/Header/HeaderChatBotButton.js +19 -0
- package/mobile/dist/components/Header/HeaderChatBotButton.js.map +1 -0
- package/mobile/dist/components/Header/HeaderContent.d.ts +6 -1
- package/mobile/dist/components/Header/HeaderSecondaryMenu.d.ts +2 -0
- package/mobile/dist/components/Header/HeaderSecondaryMenu.js +6 -11
- package/mobile/dist/components/Header/HeaderSecondaryMenu.js.map +1 -1
- package/mobile/dist/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
- package/mobile/dist/components/Header/HeaderSecondaryMenuButton.js +5 -1
- package/mobile/dist/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
- package/mobile/dist/components/Header/useChatBot.d.ts +2 -0
- package/mobile/dist/components/Header/useChatBot.js +15 -0
- package/mobile/dist/components/Header/useChatBot.js.map +1 -0
- package/mobile/dist/components/Tabs/LinkTab.d.ts +1 -0
- package/mobile/dist/components/Tabs/LinkTab.js +2 -2
- package/mobile/dist/components/Tabs/LinkTab.js.map +1 -1
- package/mobile/dist/components/Tabs/ScrollableTabs.d.ts +8 -0
- package/mobile/dist/components/Tabs/ScrollableTabs.js +24 -0
- package/mobile/dist/components/Tabs/ScrollableTabs.js.map +1 -0
- package/mobile/dist/components/Tabs/Tabs.js +9 -2
- package/mobile/dist/components/Tabs/Tabs.js.map +1 -1
- package/mobile/dist/components/Tabs/TabsContent.d.ts +12 -0
- package/mobile/dist/components/Tabs/renderGroupTab.d.ts +2 -2
- package/mobile/dist/components/Tabs/renderGroupTab.js +12 -4
- package/mobile/dist/components/Tabs/renderGroupTab.js.map +1 -1
- package/mobile/dist/components/Tabs/renderTab.d.ts +2 -1
- package/mobile/dist/components/Tabs/renderTab.js +4 -6
- package/mobile/dist/components/Tabs/renderTab.js.map +1 -1
- package/mobile/dist/components/Tabs/tabItemClasses.d.ts +6 -1
- package/mobile/dist/components/Tabs/tabItemClasses.js +61 -2
- package/mobile/dist/components/Tabs/tabItemClasses.js.map +1 -1
- package/mobile/dist/hooks/useBool.d.ts +9 -0
- package/mobile/dist/hooks/useBool.js +12 -0
- package/mobile/dist/hooks/useBool.js.map +1 -0
- package/mobile/dist/icons/IconName.d.ts +4 -2
- package/mobile/dist/icons/IconName.js +3 -1
- package/mobile/dist/icons/IconName.js.map +1 -1
- package/mobile/dist/model/ButtonVersion.d.ts +2 -2
- package/mobile/dist/setup-fixture.js +0 -1
- package/mobile/dist/setup-fixture.js.map +1 -1
- package/mobile/dist/ui-kit/Button/buttonClassNameConstants.js +3 -0
- package/mobile/dist/ui-kit/Button/buttonClassNameConstants.js.map +1 -1
- package/mobile/lib/components/CarouselCatalogCard/CarouselCatalogCard.js +1 -1
- package/mobile/lib/components/CarouselCatalogCard/CarouselCatalogCard.js.map +1 -1
- package/mobile/lib/components/CarouselProductCard/CarouselProductCard.js +1 -1
- package/mobile/lib/components/CarouselProductCard/CarouselProductCard.js.map +1 -1
- package/mobile/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
- package/mobile/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
- package/mobile/lib/components/CarouselRecommendationCard/CarouselRecommendationCardContent.d.ts +5 -9
- package/mobile/lib/components/Footer/Footer.js.map +1 -1
- package/mobile/lib/components/Footer/MediaButton.d.ts +3 -4
- package/mobile/lib/components/Footer/MediaButton.js +4 -5
- package/mobile/lib/components/Footer/MediaButton.js.map +1 -1
- package/mobile/lib/components/Header/DropdownMenu.js +3 -2
- package/mobile/lib/components/Header/DropdownMenu.js.map +1 -1
- package/mobile/lib/components/Header/HeaderChatBotButton.d.ts +11 -0
- package/mobile/lib/components/Header/HeaderChatBotButton.js +17 -0
- package/mobile/lib/components/Header/HeaderChatBotButton.js.map +1 -0
- package/mobile/lib/components/Header/HeaderContent.d.ts +6 -1
- package/mobile/lib/components/Header/HeaderSecondaryMenu.d.ts +2 -0
- package/mobile/lib/components/Header/HeaderSecondaryMenu.js +6 -11
- package/mobile/lib/components/Header/HeaderSecondaryMenu.js.map +1 -1
- package/mobile/lib/components/Header/HeaderSecondaryMenuButton.d.ts +7 -2
- package/mobile/lib/components/Header/HeaderSecondaryMenuButton.js +5 -1
- package/mobile/lib/components/Header/HeaderSecondaryMenuButton.js.map +1 -1
- package/mobile/lib/components/Header/useChatBot.d.ts +2 -0
- package/mobile/lib/components/Header/useChatBot.js +12 -0
- package/mobile/lib/components/Header/useChatBot.js.map +1 -0
- package/mobile/lib/components/Tabs/LinkTab.d.ts +1 -0
- package/mobile/lib/components/Tabs/LinkTab.js +3 -3
- package/mobile/lib/components/Tabs/LinkTab.js.map +1 -1
- package/mobile/lib/components/Tabs/ScrollableTabs.d.ts +8 -0
- package/mobile/lib/components/Tabs/ScrollableTabs.js +22 -0
- package/mobile/lib/components/Tabs/ScrollableTabs.js.map +1 -0
- package/mobile/lib/components/Tabs/Tabs.js +9 -2
- package/mobile/lib/components/Tabs/Tabs.js.map +1 -1
- package/mobile/lib/components/Tabs/TabsContent.d.ts +12 -0
- package/mobile/lib/components/Tabs/renderGroupTab.d.ts +2 -2
- package/mobile/lib/components/Tabs/renderGroupTab.js +13 -5
- package/mobile/lib/components/Tabs/renderGroupTab.js.map +1 -1
- package/mobile/lib/components/Tabs/renderTab.d.ts +2 -1
- package/mobile/lib/components/Tabs/renderTab.js +4 -6
- package/mobile/lib/components/Tabs/renderTab.js.map +1 -1
- package/mobile/lib/components/Tabs/tabItemClasses.d.ts +6 -1
- package/mobile/lib/components/Tabs/tabItemClasses.js +58 -1
- package/mobile/lib/components/Tabs/tabItemClasses.js.map +1 -1
- package/mobile/lib/hooks/useBool.d.ts +9 -0
- package/mobile/lib/hooks/useBool.js +9 -0
- package/mobile/lib/hooks/useBool.js.map +1 -0
- package/mobile/lib/icons/IconName.d.ts +4 -2
- package/mobile/lib/icons/IconName.js +3 -1
- package/mobile/lib/icons/IconName.js.map +1 -1
- package/mobile/lib/model/ButtonVersion.d.ts +2 -2
- package/mobile/lib/setup-fixture.js +0 -1
- package/mobile/lib/setup-fixture.js.map +1 -1
- package/mobile/lib/ui-kit/Button/buttonClassNameConstants.js +3 -0
- package/mobile/lib/ui-kit/Button/buttonClassNameConstants.js.map +1 -1
- package/mobile/src/components/CarouselCatalogCard/CarouselCatalogCard.tsx +0 -1
- package/mobile/src/components/CarouselProductCard/CarouselProductCard.tsx +0 -1
- package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCard.example.json +6 -3
- package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCard.tsx +2 -0
- package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCard.ui.json +7 -0
- package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCardContent.ts +5 -9
- package/mobile/src/components/Footer/Footer.tsx +1 -1
- package/mobile/src/components/Footer/MediaButton.tsx +19 -17
- package/mobile/src/components/Header/DropdownMenu.tsx +7 -5
- package/mobile/src/components/Header/HeaderChatBotButton.tsx +45 -0
- package/mobile/src/components/Header/HeaderContent.ts +7 -1
- package/mobile/src/components/Header/HeaderSecondaryMenu.tsx +20 -30
- package/mobile/src/components/Header/HeaderSecondaryMenuButton.tsx +24 -5
- package/mobile/src/components/Header/useChatBot.ts +16 -0
- package/mobile/src/components/Tabs/LinkTab.tsx +5 -13
- package/mobile/src/components/Tabs/ScrollableTabs.tsx +55 -0
- package/mobile/src/components/Tabs/Tabs.tsx +26 -4
- package/mobile/src/components/Tabs/TabsContent.ts +13 -0
- package/mobile/src/components/Tabs/renderGroupTab.tsx +30 -20
- package/mobile/src/components/Tabs/renderTab.tsx +8 -5
- package/mobile/src/components/Tabs/tabItemClasses.ts +65 -1
- package/mobile/src/hooks/useBool.ts +19 -0
- package/mobile/src/icons/HeadphonesIcon.svg +5 -0
- package/mobile/src/icons/IconName.ts +5 -5
- package/mobile/src/model/ButtonVersion.ts +9 -2
- package/mobile/src/setup-fixture.ts +0 -1
- package/mobile/src/ui-kit/Button/buttonClassNameConstants.ts +3 -0
- package/mobile/src/ui-kit/Img/ImgProps.ts +1 -0
- package/package.json +1 -1
- package/src/components/CarouselCatalogCard/CarouselCatalogCard.tsx +0 -1
- package/src/components/CarouselProductCard/CarouselProductCard.tsx +0 -1
- package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.example.json +6 -3
- package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.fixture.tsx +20 -5
- package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.tsx +2 -0
- package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.ui.json +7 -0
- package/src/components/CarouselRecommendationCard/CarouselRecommendationCardContent.ts +5 -9
- package/src/components/Footer/Footer.mobile.tsx +1 -1
- package/src/components/Footer/Footer.tsx +2 -2
- package/src/components/Footer/MediaButton.tsx +19 -17
- package/src/components/Footer/SocialMedia.tsx +4 -5
- package/src/components/Header/DropdownMenu.tsx +7 -5
- package/src/components/Header/Header.fixture.tsx +3 -3
- package/src/components/Header/Header.tsx +13 -5
- package/src/components/Header/HeaderChatBotButton.tsx +45 -0
- package/src/components/Header/HeaderContent.ts +7 -1
- package/src/components/Header/HeaderSecondaryMenu.tsx +20 -30
- package/src/components/Header/HeaderSecondaryMenuButton.tsx +24 -5
- package/src/components/Header/useChatBot.ts +16 -0
- package/src/components/Tabs/LinkTab.tsx +5 -13
- package/src/components/Tabs/ScrollableTabs.tsx +55 -0
- package/src/components/Tabs/Tabs.fixture.tsx +22 -0
- package/src/components/Tabs/Tabs.tsx +26 -4
- package/src/components/Tabs/TabsContent.ts +13 -0
- package/src/components/Tabs/renderGroupTab.tsx +30 -20
- package/src/components/Tabs/renderTab.tsx +8 -5
- package/src/components/Tabs/tabItemClasses.ts +65 -1
- package/src/hooks/useBool.ts +19 -0
- package/src/icons/HeadphonesIcon.svg +5 -0
- package/src/icons/IconName.ts +6 -340
- package/src/model/ButtonVersion.ts +9 -2
- package/src/setup-fixture.ts +0 -1
- package/src/ui-kit/Button/buttonClassNameConstants.ts +3 -0
- 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
|
-
({
|
|
62
|
-
const
|
|
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
|
|
70
|
-
<
|
|
67
|
+
return (
|
|
68
|
+
<Button
|
|
71
69
|
className={style(
|
|
72
70
|
'group/media flex items-center justify-center box-border',
|
|
73
71
|
buttonSizeStyles[buttonSize],
|
|
74
|
-
|
|
75
|
-
'border
|
|
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
|
-
|
|
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
|
-
</
|
|
95
|
-
)
|
|
96
|
+
</Button>
|
|
97
|
+
);
|
|
96
98
|
},
|
|
97
99
|
);
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
-
import type {
|
|
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?:
|
|
8
|
-
isRounded?: boolean;
|
|
7
|
+
media?: ButtonProps[];
|
|
9
8
|
buttonSize?: ButtonSize;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
export const SocialMedia = JSX<SocialMediaProps>(
|
|
13
|
-
({ className = '', media,
|
|
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)}
|
|
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={
|
|
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={
|
|
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={
|
|
49
|
-
|
|
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={
|
|
50
|
-
|
|
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={
|
|
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 {
|
|
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,
|
|
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={
|
|
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
|
|
58
|
+
className="mr-5"
|
|
59
|
+
image={{ icon: 'LoupeIcon', iconVersion }}
|
|
59
60
|
ariaLabel="Поиск по сайту"
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
64
|
+
image={{ icon: 'GridIcon', iconVersion }}
|
|
70
65
|
ariaLabel="Дополнительные ссылки"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|
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
|
-
|
|
13
|
-
disabled={true}
|
|
26
|
+
disabled={disabled}
|
|
14
27
|
aria-label={ariaLabel}
|
|
28
|
+
onClick={onClick}
|
|
15
29
|
>
|
|
16
|
-
|
|
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={
|
|
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={
|
|
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
|
|
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={
|
|
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
|
-
{
|
|
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
|
}
|