@redneckz/wildless-cms-uni-blocks 0.10.7 → 0.10.8

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 (212) hide show
  1. package/bundle/blocks.schema.json +1 -1
  2. package/bundle/bundle.umd.js +59 -40
  3. package/bundle/bundle.umd.min.js +1 -1
  4. package/bundle/components/CarouselRecommendationCard/CarouselRecommendationCard.mobile.d.ts +5 -0
  5. package/bundle/components/CarouselRecommendationCard/cardStyle.d.ts +1 -0
  6. package/bundle/components/CarouselTariffsCard/getPaddingStyle.d.ts +1 -1
  7. package/bundle/components/Tabs/CenteredTabs.d.ts +7 -0
  8. package/bundle/components/Tabs/LinkTab.d.ts +2 -2
  9. package/bundle/components/Tabs/TabsContent.d.ts +3 -2
  10. package/bundle/components/Tabs/renderGroupTab.d.ts +2 -2
  11. package/bundle/components/Tabs/renderTab.d.ts +3 -3
  12. package/bundle/components/Tabs/tabItemClasses.d.ts +3 -2
  13. package/dist/components/Blocks.mobile.js +2 -0
  14. package/dist/components/Blocks.mobile.js.map +1 -1
  15. package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js +2 -2
  16. package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
  17. package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.mobile.d.ts +5 -0
  18. package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.mobile.js +17 -0
  19. package/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.mobile.js.map +1 -0
  20. package/dist/components/CarouselRecommendationCard/cardStyle.d.ts +1 -0
  21. package/dist/components/CarouselRecommendationCard/cardStyle.js +4 -0
  22. package/dist/components/CarouselRecommendationCard/cardStyle.js.map +1 -0
  23. package/dist/components/CarouselTariffsCard/getPaddingStyle.d.ts +1 -1
  24. package/dist/components/CarouselTariffsCard/getPaddingStyle.js +1 -1
  25. package/dist/components/CarouselTariffsCard/getPaddingStyle.js.map +1 -1
  26. package/dist/components/CarouselTariffsCard/getPaddingStyle.mobile.js +1 -1
  27. package/dist/components/CarouselTariffsCard/getPaddingStyle.mobile.js.map +1 -1
  28. package/dist/components/Footer/Footer.mobile.js +1 -1
  29. package/dist/components/Footer/Footer.mobile.js.map +1 -1
  30. package/dist/components/Footer/SocialMedia.mobile.js +1 -1
  31. package/dist/components/Footer/SocialMedia.mobile.js.map +1 -1
  32. package/dist/components/Tabs/CenteredTabs.d.ts +7 -0
  33. package/dist/components/Tabs/CenteredTabs.js +7 -0
  34. package/dist/components/Tabs/CenteredTabs.js.map +1 -0
  35. package/dist/components/Tabs/LinkTab.d.ts +2 -2
  36. package/dist/components/Tabs/LinkTab.js +2 -2
  37. package/dist/components/Tabs/LinkTab.js.map +1 -1
  38. package/dist/components/Tabs/ScrollableTabs.js +3 -9
  39. package/dist/components/Tabs/ScrollableTabs.js.map +1 -1
  40. package/dist/components/Tabs/Tabs.js +14 -7
  41. package/dist/components/Tabs/Tabs.js.map +1 -1
  42. package/dist/components/Tabs/TabsContent.d.ts +3 -2
  43. package/dist/components/Tabs/renderGroupTab.d.ts +2 -2
  44. package/dist/components/Tabs/renderGroupTab.js +4 -4
  45. package/dist/components/Tabs/renderGroupTab.js.map +1 -1
  46. package/dist/components/Tabs/renderTab.d.ts +3 -3
  47. package/dist/components/Tabs/renderTab.js +3 -3
  48. package/dist/components/Tabs/renderTab.js.map +1 -1
  49. package/dist/components/Tabs/tabItemClasses.d.ts +3 -2
  50. package/dist/components/Tabs/tabItemClasses.js +26 -10
  51. package/dist/components/Tabs/tabItemClasses.js.map +1 -1
  52. package/dist/hooks/useLink.js +1 -1
  53. package/dist/hooks/useLink.js.map +1 -1
  54. package/lib/common.css +1 -1
  55. package/lib/components/Blocks.mobile.js +2 -0
  56. package/lib/components/Blocks.mobile.js.map +1 -1
  57. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.fixture.mobile.d.ts +16 -0
  58. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js +1 -1
  59. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
  60. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.mobile.d.ts +5 -0
  61. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.mobile.js +15 -0
  62. package/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.mobile.js.map +1 -0
  63. package/lib/components/CarouselRecommendationCard/cardStyle.d.ts +1 -0
  64. package/lib/components/CarouselRecommendationCard/cardStyle.js +2 -0
  65. package/lib/components/CarouselRecommendationCard/cardStyle.js.map +1 -0
  66. package/lib/components/CarouselTariffsCard/getPaddingStyle.d.ts +1 -1
  67. package/lib/components/CarouselTariffsCard/getPaddingStyle.js +1 -1
  68. package/lib/components/CarouselTariffsCard/getPaddingStyle.js.map +1 -1
  69. package/lib/components/CarouselTariffsCard/getPaddingStyle.mobile.js +1 -1
  70. package/lib/components/CarouselTariffsCard/getPaddingStyle.mobile.js.map +1 -1
  71. package/lib/components/Footer/Footer.mobile.js +1 -1
  72. package/lib/components/Footer/Footer.mobile.js.map +1 -1
  73. package/lib/components/Footer/SocialMedia.mobile.js +1 -1
  74. package/lib/components/Footer/SocialMedia.mobile.js.map +1 -1
  75. package/lib/components/Tabs/CenteredTabs.d.ts +7 -0
  76. package/lib/components/Tabs/CenteredTabs.js +5 -0
  77. package/lib/components/Tabs/CenteredTabs.js.map +1 -0
  78. package/lib/components/Tabs/LinkTab.d.ts +2 -2
  79. package/lib/components/Tabs/LinkTab.js +2 -2
  80. package/lib/components/Tabs/LinkTab.js.map +1 -1
  81. package/lib/components/Tabs/ScrollableTabs.js +3 -9
  82. package/lib/components/Tabs/ScrollableTabs.js.map +1 -1
  83. package/lib/components/Tabs/Tabs.fixture.d.ts +1 -0
  84. package/lib/components/Tabs/Tabs.js +14 -7
  85. package/lib/components/Tabs/Tabs.js.map +1 -1
  86. package/lib/components/Tabs/TabsContent.d.ts +3 -2
  87. package/lib/components/Tabs/renderGroupTab.d.ts +2 -2
  88. package/lib/components/Tabs/renderGroupTab.js +5 -5
  89. package/lib/components/Tabs/renderGroupTab.js.map +1 -1
  90. package/lib/components/Tabs/renderTab.d.ts +3 -3
  91. package/lib/components/Tabs/renderTab.js +3 -3
  92. package/lib/components/Tabs/renderTab.js.map +1 -1
  93. package/lib/components/Tabs/tabItemClasses.d.ts +3 -2
  94. package/lib/components/Tabs/tabItemClasses.js +26 -10
  95. package/lib/components/Tabs/tabItemClasses.js.map +1 -1
  96. package/lib/hooks/useLink.js +1 -1
  97. package/lib/hooks/useLink.js.map +1 -1
  98. package/mobile/bundle/bundle.umd.js +143 -135
  99. package/mobile/bundle/bundle.umd.min.js +1 -1
  100. package/mobile/bundle/components/CarouselRecommendationCard/cardStyle.d.ts +1 -0
  101. package/mobile/bundle/components/Tabs/CenteredTabs.d.ts +7 -0
  102. package/mobile/bundle/components/Tabs/LinkTab.d.ts +2 -2
  103. package/mobile/bundle/components/Tabs/TabsContent.d.ts +3 -2
  104. package/mobile/bundle/components/Tabs/renderGroupTab.d.ts +2 -2
  105. package/mobile/bundle/components/Tabs/renderTab.d.ts +3 -3
  106. package/mobile/bundle/components/Tabs/tabItemClasses.d.ts +3 -2
  107. package/mobile/dist/components/Blocks.js +2 -0
  108. package/mobile/dist/components/Blocks.js.map +1 -1
  109. package/mobile/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js +4 -4
  110. package/mobile/dist/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
  111. package/mobile/dist/components/CarouselRecommendationCard/cardStyle.d.ts +1 -0
  112. package/mobile/dist/components/CarouselRecommendationCard/cardStyle.js +4 -0
  113. package/mobile/dist/components/CarouselRecommendationCard/cardStyle.js.map +1 -0
  114. package/mobile/dist/components/CarouselTariffsCard/getPaddingStyle.js +1 -1
  115. package/mobile/dist/components/CarouselTariffsCard/getPaddingStyle.js.map +1 -1
  116. package/mobile/dist/components/Footer/Footer.js +1 -1
  117. package/mobile/dist/components/Footer/Footer.js.map +1 -1
  118. package/mobile/dist/components/Footer/SocialMedia.js +1 -1
  119. package/mobile/dist/components/Footer/SocialMedia.js.map +1 -1
  120. package/mobile/dist/components/Tabs/CenteredTabs.d.ts +7 -0
  121. package/mobile/dist/components/Tabs/CenteredTabs.js +7 -0
  122. package/mobile/dist/components/Tabs/CenteredTabs.js.map +1 -0
  123. package/mobile/dist/components/Tabs/LinkTab.d.ts +2 -2
  124. package/mobile/dist/components/Tabs/LinkTab.js +2 -2
  125. package/mobile/dist/components/Tabs/LinkTab.js.map +1 -1
  126. package/mobile/dist/components/Tabs/ScrollableTabs.js +3 -9
  127. package/mobile/dist/components/Tabs/ScrollableTabs.js.map +1 -1
  128. package/mobile/dist/components/Tabs/Tabs.js +14 -7
  129. package/mobile/dist/components/Tabs/Tabs.js.map +1 -1
  130. package/mobile/dist/components/Tabs/TabsContent.d.ts +3 -2
  131. package/mobile/dist/components/Tabs/renderGroupTab.d.ts +2 -2
  132. package/mobile/dist/components/Tabs/renderGroupTab.js +4 -4
  133. package/mobile/dist/components/Tabs/renderGroupTab.js.map +1 -1
  134. package/mobile/dist/components/Tabs/renderTab.d.ts +3 -3
  135. package/mobile/dist/components/Tabs/renderTab.js +3 -3
  136. package/mobile/dist/components/Tabs/renderTab.js.map +1 -1
  137. package/mobile/dist/components/Tabs/tabItemClasses.d.ts +3 -2
  138. package/mobile/dist/components/Tabs/tabItemClasses.js +26 -10
  139. package/mobile/dist/components/Tabs/tabItemClasses.js.map +1 -1
  140. package/mobile/dist/hooks/useLink.js +1 -1
  141. package/mobile/dist/hooks/useLink.js.map +1 -1
  142. package/mobile/lib/common.css +1 -1
  143. package/mobile/lib/components/Blocks.js +2 -0
  144. package/mobile/lib/components/Blocks.js.map +1 -1
  145. package/mobile/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js +4 -4
  146. package/mobile/lib/components/CarouselRecommendationCard/CarouselRecommendationCard.js.map +1 -1
  147. package/mobile/lib/components/CarouselRecommendationCard/cardStyle.d.ts +1 -0
  148. package/mobile/lib/components/CarouselRecommendationCard/cardStyle.js +2 -0
  149. package/mobile/lib/components/CarouselRecommendationCard/cardStyle.js.map +1 -0
  150. package/mobile/lib/components/CarouselTariffsCard/getPaddingStyle.js +1 -1
  151. package/mobile/lib/components/CarouselTariffsCard/getPaddingStyle.js.map +1 -1
  152. package/mobile/lib/components/Footer/Footer.js +1 -1
  153. package/mobile/lib/components/Footer/Footer.js.map +1 -1
  154. package/mobile/lib/components/Footer/SocialMedia.js +1 -1
  155. package/mobile/lib/components/Footer/SocialMedia.js.map +1 -1
  156. package/mobile/lib/components/Tabs/CenteredTabs.d.ts +7 -0
  157. package/mobile/lib/components/Tabs/CenteredTabs.js +5 -0
  158. package/mobile/lib/components/Tabs/CenteredTabs.js.map +1 -0
  159. package/mobile/lib/components/Tabs/LinkTab.d.ts +2 -2
  160. package/mobile/lib/components/Tabs/LinkTab.js +2 -2
  161. package/mobile/lib/components/Tabs/LinkTab.js.map +1 -1
  162. package/mobile/lib/components/Tabs/ScrollableTabs.js +3 -9
  163. package/mobile/lib/components/Tabs/ScrollableTabs.js.map +1 -1
  164. package/mobile/lib/components/Tabs/Tabs.js +14 -7
  165. package/mobile/lib/components/Tabs/Tabs.js.map +1 -1
  166. package/mobile/lib/components/Tabs/TabsContent.d.ts +3 -2
  167. package/mobile/lib/components/Tabs/renderGroupTab.d.ts +2 -2
  168. package/mobile/lib/components/Tabs/renderGroupTab.js +5 -5
  169. package/mobile/lib/components/Tabs/renderGroupTab.js.map +1 -1
  170. package/mobile/lib/components/Tabs/renderTab.d.ts +3 -3
  171. package/mobile/lib/components/Tabs/renderTab.js +3 -3
  172. package/mobile/lib/components/Tabs/renderTab.js.map +1 -1
  173. package/mobile/lib/components/Tabs/tabItemClasses.d.ts +3 -2
  174. package/mobile/lib/components/Tabs/tabItemClasses.js +26 -10
  175. package/mobile/lib/components/Tabs/tabItemClasses.js.map +1 -1
  176. package/mobile/lib/hooks/useLink.js +1 -1
  177. package/mobile/lib/hooks/useLink.js.map +1 -1
  178. package/mobile/src/components/Blocks.ts +2 -0
  179. package/mobile/src/components/CarouselRecommendationCard/CarouselRecommendationCard.tsx +14 -20
  180. package/mobile/src/components/CarouselRecommendationCard/cardStyle.ts +2 -0
  181. package/mobile/src/components/CarouselTariffsCard/getPaddingStyle.tsx +2 -2
  182. package/mobile/src/components/Footer/Footer.tsx +1 -1
  183. package/mobile/src/components/Footer/SocialMedia.tsx +1 -1
  184. package/mobile/src/components/Tabs/CenteredTabs.tsx +12 -0
  185. package/mobile/src/components/Tabs/LinkTab.tsx +5 -5
  186. package/mobile/src/components/Tabs/ScrollableTabs.tsx +5 -13
  187. package/mobile/src/components/Tabs/Tabs.tsx +21 -19
  188. package/mobile/src/components/Tabs/TabsContent.ts +3 -2
  189. package/mobile/src/components/Tabs/renderGroupTab.tsx +11 -10
  190. package/mobile/src/components/Tabs/renderTab.tsx +5 -13
  191. package/mobile/src/components/Tabs/tabItemClasses.ts +28 -10
  192. package/mobile/src/hooks/useLink.ts +1 -1
  193. package/package.json +1 -1
  194. package/src/components/Blocks.mobile.ts +2 -0
  195. package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.fixture.mobile.tsx +148 -0
  196. package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.mobile.tsx +63 -0
  197. package/src/components/CarouselRecommendationCard/CarouselRecommendationCard.tsx +1 -3
  198. package/src/components/CarouselRecommendationCard/cardStyle.ts +2 -0
  199. package/src/components/CarouselTariffsCard/getPaddingStyle.mobile.tsx +2 -2
  200. package/src/components/CarouselTariffsCard/getPaddingStyle.tsx +1 -1
  201. package/src/components/Footer/Footer.mobile.tsx +1 -1
  202. package/src/components/Footer/SocialMedia.mobile.tsx +1 -1
  203. package/src/components/Tabs/CenteredTabs.tsx +12 -0
  204. package/src/components/Tabs/LinkTab.tsx +5 -5
  205. package/src/components/Tabs/ScrollableTabs.tsx +5 -13
  206. package/src/components/Tabs/Tabs.fixture.tsx +27 -0
  207. package/src/components/Tabs/Tabs.tsx +21 -19
  208. package/src/components/Tabs/TabsContent.ts +3 -2
  209. package/src/components/Tabs/renderGroupTab.tsx +11 -10
  210. package/src/components/Tabs/renderTab.tsx +5 -13
  211. package/src/components/Tabs/tabItemClasses.ts +28 -10
  212. package/src/hooks/useLink.ts +1 -1
@@ -1,17 +1,17 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import { useLink } from '../../hooks/useLink';
3
3
  import { getLinkTabClassName } from './tabItemClasses';
4
- import type { LinkTabData, TabData } from './TabsContent';
4
+ import type { LinkTabData, TabData, TabsMode } from './TabsContent';
5
5
 
6
6
  interface LinkTabProps {
7
7
  tab: LinkTabData;
8
8
  currentTab?: TabData;
9
- isScrollable?: boolean;
10
9
  onClick: (tab: TabData) => void;
10
+ tabsMode?: TabsMode;
11
11
  }
12
12
 
13
13
  export const LinkTab = JSX<LinkTabProps>((props) => {
14
- const { tab, currentTab, onClick, isScrollable = false } = props;
14
+ const { tab, currentTab, onClick, tabsMode } = props;
15
15
  const active = currentTab?.type === 'link' && currentTab.href === tab.href;
16
16
 
17
17
  const link = useLink();
@@ -25,12 +25,12 @@ export const LinkTab = JSX<LinkTabProps>((props) => {
25
25
  return (
26
26
  <a
27
27
  role="tab"
28
- className={getLinkTabClassName('link', active, isScrollable)}
28
+ className={getLinkTabClassName('link', active, tabsMode)}
29
29
  target={tab.target}
30
30
  href={adjustedProps.href}
31
31
  onClick={handleClick}
32
32
  >
33
- <span className={getLinkTabClassName('text', active, isScrollable)}>{tab.text}</span>
33
+ <span className={getLinkTabClassName('text', active, tabsMode)}>{tab.text}</span>
34
34
  </a>
35
35
  );
36
36
  });
@@ -1,10 +1,10 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import type { RenderTabProps } from './renderTab';
3
- import type { TabData } from './TabsContent';
2
+ import { ScrollLeftButton, ScrollRightButton } from '../../ui-kit/Button/ArrowButton';
4
3
  import { SwipeListContainer } from '../../ui-kit/SwipeListControl/SwipeListContainer';
5
4
  import { useSwipeListScroll } from '../../ui-kit/SwipeListControl/useSwipeListScroll';
6
- import { ScrollLeftButton, ScrollRightButton } from '../../ui-kit/Button/ArrowButton';
5
+ import type { RenderTabProps } from './renderTab';
7
6
  import { renderTab } from './renderTab';
7
+ import type { TabData } from './TabsContent';
8
8
 
9
9
  interface ScrollableTabsProps extends RenderTabProps {
10
10
  tabs?: TabData[];
@@ -15,7 +15,7 @@ export type IsScrollButtonsShown = boolean[];
15
15
  const scrollButtonStyle = 'absolute z-40 top-0';
16
16
 
17
17
  export const ScrollableTabs = JSX<ScrollableTabsProps>((props) => {
18
- const { tabs, onClick, currentTab, page, showCounter } = props;
18
+ const { tabs, ...rest } = props;
19
19
 
20
20
  const [containerRef, scroll] = useSwipeListScroll<HTMLDivElement>({
21
21
  itemCount: tabs?.length || 0,
@@ -30,15 +30,7 @@ export const ScrollableTabs = JSX<ScrollableTabsProps>((props) => {
30
30
  snapAlign="snap-start"
31
31
  onVisibleIndicesChange={scroll.handleVisibleIndicesChange}
32
32
  >
33
- {tabs?.map(
34
- renderTab({
35
- onClick,
36
- currentTab,
37
- showCounter,
38
- page,
39
- isScrollable: true,
40
- }),
41
- )}
33
+ {tabs?.map(renderTab({ ...rest }))}
42
34
  </SwipeListContainer>
43
35
  </div>
44
36
  {scroll.canScrollLeft ? (
@@ -3,14 +3,20 @@ import { useCallback, useEffect, useState } from '@redneckz/uni-jsx/lib/hooks';
3
3
  import { defaultEventBus } from '../../EventBus/defaultEventBus';
4
4
  import type { UniBlockProps } from '../../model/JSXBlock';
5
5
  import { BlockWrapper } from '../../ui-kit/BlockWrapper';
6
+ import { CenteredTabs } from './CenteredTabs';
6
7
  import { renderTab } from './renderTab';
7
8
  import { ScrollableTabs } from './ScrollableTabs';
8
9
  import type { TabData, TabsContent } from './TabsContent';
9
10
 
10
11
  export interface TabsBlockProps extends TabsContent, UniBlockProps {}
11
12
 
13
+ interface RenderTabsProps extends TabsBlockProps {
14
+ currentTab?: TabData;
15
+ onClick: (tab: TabData) => void;
16
+ }
17
+
12
18
  export const Tabs = JSX<TabsBlockProps>((props) => {
13
- const { className = '', tabs, showCounter, isSticky, tabsMode, ...rest } = props;
19
+ const { className = '', tabs, isSticky, ...rest } = props;
14
20
 
15
21
  const [currentTab, setCurrentTab] = useState(tabs ? tabs[0] : undefined);
16
22
 
@@ -41,28 +47,24 @@ export const Tabs = JSX<TabsBlockProps>((props) => {
41
47
  role="tablist"
42
48
  {...rest}
43
49
  >
44
- {tabsMode === 'scrollable' ? (
45
- <ScrollableTabs
46
- tabs={tabs}
47
- onClick={handleClick}
48
- currentTab={currentTab}
49
- showCounter={showCounter}
50
- {...rest}
51
- />
52
- ) : (
53
- tabs?.map(
54
- renderTab({
55
- onClick: handleClick,
56
- currentTab,
57
- showCounter,
58
- ...rest,
59
- }),
60
- )
61
- )}
50
+ {renderTabs({ tabs, onClick: handleClick, currentTab, ...rest })}
62
51
  </BlockWrapper>
63
52
  );
64
53
  });
65
54
 
55
+ const renderTabs = ({ tabsMode, tabs, ...rest }: RenderTabsProps) => {
56
+ switch (tabsMode) {
57
+ case 'wideScreen':
58
+ return tabs?.map(renderTab({ tabsMode, ...rest }));
59
+ case 'centered':
60
+ return <CenteredTabs tabs={tabs} tabsMode={tabsMode} {...rest} />;
61
+ case 'scrollable':
62
+ return <ScrollableTabs tabs={tabs} tabsMode={tabsMode} {...rest} />;
63
+ }
64
+
65
+ return null;
66
+ };
67
+
66
68
  const fireTabEvent = (tab: TabData) => {
67
69
  if (tab.type === 'group') {
68
70
  defaultEventBus.fire('tab', { type: tab.type, label: tab.ref });
@@ -31,10 +31,11 @@ export type TabData = GroupTabData | LinkTabData;
31
31
  /**
32
32
  * @enumNames [
33
33
  * "По ширине экрана",
34
- * "С прокруткой"
34
+ * "С прокруткой",
35
+ * "По центру"
35
36
  * ]
36
37
  */
37
- export type TabsMode = 'wideScreen' | 'scrollable';
38
+ export type TabsMode = 'wideScreen' | 'scrollable' | 'centered';
38
39
 
39
40
  /**
40
41
  * @title Вкладки
@@ -1,12 +1,12 @@
1
- import type { GroupTabData } from './TabsContent';
2
1
  import type { RenderTabProps } from './renderTab';
3
2
  import {
4
3
  ACTIVE_TEXT_CLASSES,
4
+ getGroupTabClassName,
5
5
  INACTIVE_TEXT_CLASSES,
6
6
  TEXT_CLASSES,
7
7
  WHITE_ACTIVE_TEXT_CLASSES,
8
- getGroupTabClassName,
9
8
  } from './tabItemClasses';
9
+ import type { GroupTabData, TabsMode } from './TabsContent';
10
10
 
11
11
  const BADGE_CLASSES =
12
12
  'min-w-[22px] h-[22px] rounded-full text-xs ml-2 flex justify-center items-center';
@@ -15,7 +15,7 @@ const INACTIVE_BADGE_CLASSES =
15
15
  'bg-main-divider text-secondary-text group-hover/btn:text-primary-main';
16
16
 
17
17
  export const renderGroupTab =
18
- ({ page, currentTab, showCounter, onClick, isScrollable = false }: RenderTabProps) =>
18
+ ({ page, currentTab, showCounter, onClick, tabsMode }: RenderTabProps) =>
19
19
  (tab: GroupTabData, i: number) => {
20
20
  const active = currentTab === tab;
21
21
 
@@ -27,7 +27,7 @@ export const renderGroupTab =
27
27
  return (
28
28
  <div
29
29
  key={`group-${String(i)}`}
30
- className={getGroupTabClassName('div', active, isScrollable)}
30
+ className={getGroupTabClassName('div', active, tabsMode)}
31
31
  role="tab"
32
32
  aria-selected={active}
33
33
  onClick={() => onClick(tab)}
@@ -36,21 +36,22 @@ export const renderGroupTab =
36
36
  className={`flex flex-1 items-center justify-center ${getGroupTabClassName(
37
37
  'text',
38
38
  active,
39
- isScrollable,
39
+ tabsMode,
40
40
  )}`}
41
41
  >
42
- {renderTitle(tab.title, active, isScrollable)}
42
+ {renderTitle(tab.title, active, tabsMode)}
43
43
  {renderCount(showCounter, count, active)}
44
44
  </div>
45
45
  </div>
46
46
  );
47
47
  };
48
48
 
49
- const renderTitle = (title: string | undefined, active: boolean, isScrollable: boolean) => {
49
+ const renderTitle = (title: string | undefined, active: boolean, tabsMode?: TabsMode) => {
50
50
  const activeClassName = active ? WHITE_ACTIVE_TEXT_CLASSES : INACTIVE_TEXT_CLASSES;
51
- const titleClassName = isScrollable
52
- ? `${TEXT_CLASSES} ${activeClassName}`
53
- : `${TEXT_CLASSES} ${active ? ACTIVE_TEXT_CLASSES : INACTIVE_TEXT_CLASSES}`;
51
+ const titleClassName =
52
+ tabsMode === 'scrollable'
53
+ ? `${TEXT_CLASSES} ${activeClassName}`
54
+ : `${TEXT_CLASSES} ${active ? ACTIVE_TEXT_CLASSES : INACTIVE_TEXT_CLASSES}`;
54
55
 
55
56
  return title ? <h3 className={titleClassName}>{title}</h3> : null;
56
57
  };
@@ -2,18 +2,18 @@ import type { ContentPageDef } from '../../model/ContentPageDef';
2
2
  import { assertUnreachable } from '../../utils/assertUnreachable';
3
3
  import { LinkTab } from './LinkTab';
4
4
  import { renderGroupTab } from './renderGroupTab';
5
- import type { TabData } from './TabsContent';
5
+ import type { TabData, TabsMode } from './TabsContent';
6
6
 
7
7
  export interface RenderTabProps {
8
8
  page?: ContentPageDef;
9
9
  currentTab?: TabData;
10
10
  showCounter?: boolean;
11
11
  onClick: (tab: TabData) => void;
12
- isScrollable?: boolean;
12
+ tabsMode?: TabsMode;
13
13
  }
14
14
 
15
15
  export const renderTab =
16
- ({ page, currentTab, showCounter, onClick, isScrollable = false }: RenderTabProps) =>
16
+ ({ page, showCounter, ...rest }: RenderTabProps) =>
17
17
  (tab: TabData, i: number) => {
18
18
  const type = tab.type;
19
19
 
@@ -23,17 +23,9 @@ export const renderTab =
23
23
 
24
24
  switch (type) {
25
25
  case 'group':
26
- return renderGroupTab({ page, currentTab, showCounter, onClick, isScrollable })(tab, i);
26
+ return renderGroupTab({ page, showCounter, ...rest })(tab, i);
27
27
  case 'link': {
28
- return (
29
- <LinkTab
30
- key={String(i)}
31
- tab={tab}
32
- currentTab={currentTab}
33
- isScrollable={isScrollable}
34
- onClick={onClick}
35
- />
36
- );
28
+ return <LinkTab key={String(i)} tab={tab} {...rest} />;
37
29
  }
38
30
  default:
39
31
  assertUnreachable(type);
@@ -1,3 +1,5 @@
1
+ import type { TabsMode } from './TabsContent';
2
+
1
3
  export const LINK_CLASSES = 'h-12 flex-1 flex items-center justify-center cursor-pointer';
2
4
  export const ACTIVE_LINK_CLASSES = 'bg-primary-main';
3
5
  export const INACTIVE_LINK_CLASSES = 'group/btn bg-white';
@@ -17,7 +19,11 @@ const GROUP_TAB_CLASSES = {
17
19
  active: `inline-flex px-4 grow whitespace-nowrap ${LINK_CLASSES} ${SCROLLABLE_ACTIVE_LINK_CLASSES}`,
18
20
  default: `inline-flex px-4 grow whitespace-nowrap ${LINK_CLASSES} ${INACTIVE_LINK_CLASSES}`,
19
21
  },
20
- default: {
22
+ centered: {
23
+ active: `px-4 rounded-md ${LINK_CLASSES} ${WIDESCREEN_ACTIVE_LINK_CLASSES} whitespace-nowrap`,
24
+ default: `px-4 rounded-md ${LINK_CLASSES} group/btn bg-transparent whitespace-nowrap`,
25
+ },
26
+ wideScreen: {
21
27
  active: `${LINK_CLASSES} ${WIDESCREEN_ACTIVE_LINK_CLASSES} whitespace-nowrap`,
22
28
  default: `${LINK_CLASSES} ${INACTIVE_LINK_CLASSES} whitespace-nowrap`,
23
29
  },
@@ -27,7 +33,11 @@ const GROUP_TAB_CLASSES = {
27
33
  active: `h-full border-0 border-b-2`,
28
34
  default: ``,
29
35
  },
30
- default: {
36
+ centered: {
37
+ active: '',
38
+ default: '',
39
+ },
40
+ wideScreen: {
31
41
  active: '',
32
42
  default: '',
33
43
  },
@@ -39,7 +49,11 @@ const LINK_TAB_CLASSES = {
39
49
  active: `inline-flex px-4 grow whitespace-nowrap ${LINK_CLASSES} ${SCROLLABLE_ACTIVE_LINK_CLASSES}`,
40
50
  default: `inline-flex px-4 grow whitespace-nowrap ${LINK_CLASSES} ${INACTIVE_LINK_CLASSES}`,
41
51
  },
42
- default: {
52
+ centered: {
53
+ active: `px-4 rounded-md ${LINK_CLASSES} ${WIDESCREEN_ACTIVE_LINK_CLASSES} whitespace-nowrap`,
54
+ default: `px-4 rounded-md ${LINK_CLASSES} group/btn bg-transparent whitespace-nowrap`,
55
+ },
56
+ wideScreen: {
43
57
  active: `${LINK_CLASSES} ${WIDESCREEN_ACTIVE_LINK_CLASSES}`,
44
58
  default: `${LINK_CLASSES} ${INACTIVE_LINK_CLASSES}`,
45
59
  },
@@ -49,23 +63,27 @@ const LINK_TAB_CLASSES = {
49
63
  active: `${TEXT_CLASSES} flex items-center h-full border-0 border-b-2 ${WHITE_ACTIVE_TEXT_CLASSES}`,
50
64
  default: `${TEXT_CLASSES} ${INACTIVE_TEXT_CLASSES}`,
51
65
  },
52
- default: {
66
+ centered: {
67
+ active: `${TEXT_CLASSES} ${ACTIVE_TEXT_CLASSES}`,
68
+ default: `${TEXT_CLASSES} ${INACTIVE_TEXT_CLASSES}`,
69
+ },
70
+ wideScreen: {
53
71
  active: `${TEXT_CLASSES} ${ACTIVE_TEXT_CLASSES}`,
54
72
  default: `${TEXT_CLASSES} ${INACTIVE_TEXT_CLASSES}`,
55
73
  },
56
74
  },
57
75
  };
58
76
 
59
- export const getGroupTabClassName = (type: string, active: boolean, isScrollable: boolean) => {
60
- const styleType = isScrollable ? 'scrollable' : 'default';
77
+ export const getGroupTabClassName = (type: string, active: boolean, tabsMode?: TabsMode) => {
61
78
  const styleActive = active ? 'active' : 'default';
79
+ const mode = tabsMode || 'wideScreen';
62
80
 
63
- return GROUP_TAB_CLASSES[type][styleType][styleActive];
81
+ return GROUP_TAB_CLASSES[type][mode][styleActive];
64
82
  };
65
83
 
66
- export const getLinkTabClassName = (type: string, active: boolean, isScrollable: boolean) => {
67
- const styleType = isScrollable ? 'scrollable' : 'default';
84
+ export const getLinkTabClassName = (type: string, active: boolean, tabsMode?: TabsMode) => {
68
85
  const styleActive = active ? 'active' : 'default';
86
+ const mode = tabsMode || 'wideScreen';
69
87
 
70
- return LINK_TAB_CLASSES[type][styleType][styleActive];
88
+ return LINK_TAB_CLASSES[type][mode][styleActive];
71
89
  };
@@ -23,7 +23,7 @@ export function useLink(params: UseLinkParams = {}) {
23
23
 
24
24
  return <L extends Partial<LinkProps & Clickable>>(props: L): L & Clickable => ({
25
25
  ...props,
26
- href: isRemote ? props.href : adjustHref(router)(props.href, basePath),
26
+ href: isRemote && !basePath ? props.href : adjustHref(router)(props.href, basePath),
27
27
  'aria-label': props.text,
28
28
  onClick: handlerDecorator(handleHref(props), props),
29
29
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redneckz/wildless-cms-uni-blocks",
3
- "version": "0.10.7",
3
+ "version": "0.10.8",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "ЦК",
@@ -1,5 +1,6 @@
1
1
  import type { BlocksRegistry } from '../model/BlocksRegistry';
2
2
  import { Carousel } from './Carousel/Carousel';
3
+ import { CarouselRecommendationCard } from './CarouselRecommendationCard/CarouselRecommendationCard';
3
4
  import { CarouselTariffsCard } from './CarouselTariffsCard/CarouselTariffsCard';
4
5
  import { ComparisonTable } from './ComparisonTable/ComparisonTable';
5
6
  import { Footer } from './Footer/Footer';
@@ -37,4 +38,5 @@ export const Blocks: BlocksRegistry = {
37
38
  RichTextBlock,
38
39
  RollupItem,
39
40
  VerticalLayout,
41
+ CarouselRecommendationCard,
40
42
  };
@@ -0,0 +1,148 @@
1
+ import type { Picture } from '../../model/Picture';
2
+ import '../../setup-fixture';
3
+ import { CarouselRecommendationCard } from './CarouselRecommendationCard';
4
+ import type {
5
+ CarouselRecommendationCardContent,
6
+ RecommendationSocialMedia,
7
+ } from './CarouselRecommendationCardContent';
8
+
9
+ const icon: Picture = {
10
+ src: 'product-basket.png',
11
+ format: 'webp',
12
+ size: {
13
+ width: 290,
14
+ height: 290,
15
+ },
16
+ title: 'product-basket',
17
+ };
18
+
19
+ const commonProps: RecommendationSocialMedia = {
20
+ target: '_blank',
21
+ version: 'gray',
22
+ rounded: false,
23
+ };
24
+
25
+ const socialMediaWithText: RecommendationSocialMedia[] = [
26
+ {
27
+ href: 'https://t.me',
28
+ text: 'Telegram',
29
+ ...commonProps,
30
+ },
31
+ {
32
+ href: 'https://vk.com',
33
+ text: 'Telegram',
34
+ ...commonProps,
35
+ },
36
+ {
37
+ href: 'https://ok.ru',
38
+ text: 'Telegram',
39
+ ...commonProps,
40
+ },
41
+ ];
42
+
43
+ const socialMediaWithoutText: RecommendationSocialMedia[] = [
44
+ {
45
+ href: 'https://t.me',
46
+ ...commonProps,
47
+ },
48
+ {
49
+ href: 'https://vk.com',
50
+ ...commonProps,
51
+ },
52
+ {
53
+ href: 'https://ok.ru',
54
+ ...commonProps,
55
+ },
56
+ ];
57
+
58
+ const items = [
59
+ 'Бесплатное подключение и обслуживание',
60
+ 'Вход и подписание документов по биометрии',
61
+ 'Работа со счетами, шаблонами и выпиской',
62
+ ];
63
+
64
+ export const CAROUSEL_RECOMMENDATION_CARD: CarouselRecommendationCardContent = {
65
+ title: 'Подключаем мобильный банк для управления бизнесом',
66
+ description: 'Все возможности банка для бизнеса в вашем смартфоне',
67
+ items,
68
+ icon,
69
+ socialMedia: socialMediaWithText,
70
+ };
71
+
72
+ export const CAROUSEL_RECOMMENDATION_CARD_SIMPLE: CarouselRecommendationCardContent = {
73
+ title: 'Подключаем мобильный банк для управления бизнесом',
74
+ description: 'Все возможности банка для бизнеса в вашем смартфоне',
75
+ items,
76
+ icon,
77
+ socialMedia: socialMediaWithoutText,
78
+ };
79
+ export const CAROUSEL_RECOMMENDATION_CARD_WITHOUT_LIST: CarouselRecommendationCardContent = {
80
+ title: 'Подключаем мобильный банк для управления бизнесом',
81
+ description: 'Все возможности банка для бизнеса в вашем смартфоне',
82
+ icon,
83
+ socialMedia: socialMediaWithoutText,
84
+ };
85
+
86
+ export const CAROUSEL_RECOMMENDATION_CARD_SECONDARY: CarouselRecommendationCardContent = {
87
+ title: 'Россельхозбанк',
88
+ description: 'Описание',
89
+ align: 'text-left',
90
+ icon,
91
+ items: ['Свежие новости', 'Акции и предложенияа', 'Ставки и катировки'],
92
+ version: 'secondary',
93
+ socialMedia: socialMediaWithoutText,
94
+ };
95
+
96
+ export default {
97
+ default: (
98
+ <div className="container grid grid-cols-12 mb-1">
99
+ <CarouselRecommendationCard className="col-span-12" {...CAROUSEL_RECOMMENDATION_CARD} />
100
+ </div>
101
+ ),
102
+ secondary: (
103
+ <div className="container grid grid-cols-12 mb-1">
104
+ <CarouselRecommendationCard
105
+ className="col-span-12"
106
+ version="secondary"
107
+ {...CAROUSEL_RECOMMENDATION_CARD}
108
+ />
109
+ </div>
110
+ ),
111
+ secondaryCenter: (
112
+ <div className="container grid grid-cols-12 mb-1">
113
+ <CarouselRecommendationCard
114
+ className="col-span-12"
115
+ version="secondary"
116
+ align="text-center"
117
+ {...CAROUSEL_RECOMMENDATION_CARD_SECONDARY}
118
+ />
119
+ </div>
120
+ ),
121
+ gray: (
122
+ <div className="container grid grid-cols-12 mb-1">
123
+ <CarouselRecommendationCard
124
+ className="col-span-12"
125
+ version="gray"
126
+ {...CAROUSEL_RECOMMENDATION_CARD}
127
+ />
128
+ </div>
129
+ ),
130
+ socialMediaWithoutText: (
131
+ <div className="container grid grid-cols-12 mb-1">
132
+ <CarouselRecommendationCard
133
+ className="col-span-12"
134
+ version="gray"
135
+ {...CAROUSEL_RECOMMENDATION_CARD_SIMPLE}
136
+ />
137
+ </div>
138
+ ),
139
+ cardWithoutList: (
140
+ <div className="container grid grid-cols-12 mb-1">
141
+ <CarouselRecommendationCard
142
+ className="col-span-12"
143
+ version="gray"
144
+ {...CAROUSEL_RECOMMENDATION_CARD_WITHOUT_LIST}
145
+ />
146
+ </div>
147
+ ),
148
+ };
@@ -0,0 +1,63 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import type { UniBlockProps } from '../../model/JSXBlock';
3
+ import type { Picture } from '../../model/Picture';
4
+ import { BlockWrapper } from '../../ui-kit/BlockWrapper';
5
+ import { Img } from '../../ui-kit/Img/Img';
6
+ import { LinkWrapper } from '../../ui-kit/LinkWrapper/LinkWrapper';
7
+ import { List } from '../../ui-kit/List/List';
8
+ import { style } from '../../utils/style';
9
+ import { SocialMedia } from '../Footer/SocialMedia';
10
+ import { Headline } from '../Headline/Headline';
11
+ import { BORDER_STYLE } from './cardStyle';
12
+ import type { CarouselRecommendationCardContent } from './CarouselRecommendationCardContent';
13
+
14
+ export interface RecommendationCardProps extends CarouselRecommendationCardContent, UniBlockProps {}
15
+
16
+ export const CarouselRecommendationCard = JSX<RecommendationCardProps>(
17
+ ({
18
+ className = '',
19
+ description,
20
+ href,
21
+ icon,
22
+ items = [],
23
+ socialMedia = [],
24
+ target,
25
+ title,
26
+ align = 'text-left',
27
+ ...rest
28
+ }) => {
29
+ return (
30
+ <BlockWrapper
31
+ className={style(
32
+ 'relative box-border p-default group-data-gray:bg-main-divider/50',
33
+ BORDER_STYLE,
34
+ className,
35
+ )}
36
+ {...rest}
37
+ >
38
+ <LinkWrapper href={href} target={target}>
39
+ <Headline
40
+ className="mb-2"
41
+ title={title}
42
+ description={description}
43
+ headlineVersion="S"
44
+ isPadding={false}
45
+ align={align}
46
+ />
47
+ {items.length ? (
48
+ <List className="flex flex-col gap-2" items={items} listItemSize="S" />
49
+ ) : null}
50
+ {renderIcon(icon)}
51
+ {socialMedia.length ? <SocialMedia className="mt-5" media={socialMedia} /> : null}
52
+ </LinkWrapper>
53
+ </BlockWrapper>
54
+ );
55
+ },
56
+ );
57
+
58
+ const renderIcon = (icon?: Picture) =>
59
+ icon?.src || icon?.icon ? (
60
+ <div>
61
+ <Img image={icon} />
62
+ </div>
63
+ ) : null;
@@ -8,11 +8,9 @@ import { List } from '../../ui-kit/List/List';
8
8
  import { style } from '../../utils/style';
9
9
  import { SocialMedia } from '../Footer/SocialMedia';
10
10
  import { Headline } from '../Headline/Headline';
11
+ import { BORDER_STYLE } from './cardStyle';
11
12
  import type { CarouselRecommendationCardContent } from './CarouselRecommendationCardContent';
12
13
 
13
- const BORDER_STYLE =
14
- 'border border-solid border-gray group-data-secondary:border-white/50 group-data-gray:border-main-divider';
15
-
16
14
  export interface RecommendationCardProps extends CarouselRecommendationCardContent, UniBlockProps {}
17
15
 
18
16
  export const CarouselRecommendationCard = JSX<RecommendationCardProps>(
@@ -0,0 +1,2 @@
1
+ export const BORDER_STYLE =
2
+ 'border border-solid border-gray group-data-secondary:border-white/50 group-data-gray:border-main-divider';
@@ -1,2 +1,2 @@
1
- export const getPaddingStyle = (isHighlighting?: boolean): string =>
2
- isHighlighting ? 'p-default mt-6' : 'p-default mt-6';
1
+ export const getPaddingStyle = (isHighlighting = false): string =>
2
+ isHighlighting ? 'p-default mt-6' : 'mt-6 p-default'; // Хак для мобильной версии т.к. контракт должен быть идентичный
@@ -1,2 +1,2 @@
1
- export const getPaddingStyle = (isHighlighting?: boolean) =>
1
+ export const getPaddingStyle = (isHighlighting = false): string =>
2
2
  isHighlighting ? 'p-8 mt-8 pt-20' : 'p-8 mt-20';
@@ -43,7 +43,7 @@ export const Footer = JSX<FooterProps>(({ className = '', ...rest }) => {
43
43
  {...rest}
44
44
  />
45
45
  <SearchBar className="grow" />
46
- <SocialMedia className="pb-4" media={socialMedia} />
46
+ <SocialMedia className="pt-6 pb-6" media={socialMedia} />
47
47
  <HorizontalNavigation title={horizontalNavigationTitle} links={relatedEnterprises} />
48
48
  <TextInformation links={documents} />
49
49
  </BlockWrapper>
@@ -8,7 +8,7 @@ export interface SocialMediaProps {
8
8
  }
9
9
 
10
10
  export const SocialMedia = JSX<SocialMediaProps>(({ className = '', media }) => (
11
- <div className={`flex gap-2 items-start justify-start pt-6 pb-6 ${className}`}>
11
+ <div className={`flex gap-2 items-start justify-start ${className}`}>
12
12
  {media?.map((_, index) => (
13
13
  <MediaButton key={String(index)} {..._} />
14
14
  ))}
@@ -0,0 +1,12 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import type { RenderTabProps } from './renderTab';
3
+ import { renderTab } from './renderTab';
4
+ import type { TabData } from './TabsContent';
5
+
6
+ interface CenteredTabsProps extends RenderTabProps {
7
+ tabs?: TabData[];
8
+ }
9
+
10
+ export const CenteredTabs = JSX<CenteredTabsProps>(({ tabs, ...rest }) => (
11
+ <div className="flex p-1 m-auto bg-main-gray rounded-md">{tabs?.map(renderTab({ ...rest }))}</div>
12
+ ));