@redneckz/wildless-cms-uni-blocks 0.2.72 → 0.2.75

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 (211) hide show
  1. package/bundle/blocks.schema.json +240 -151
  2. package/bundle/bundle.umd.js +124 -44
  3. package/bundle/bundle.umd.min.js +1 -1
  4. package/dist/BaseTile.js +9 -4
  5. package/dist/BaseTile.js.map +1 -1
  6. package/dist/BaseTileContent.d.ts +2 -2
  7. package/dist/BlockContent.d.ts +2 -1
  8. package/dist/Blocks.d.ts +2 -0
  9. package/dist/Blocks.js +4 -0
  10. package/dist/Blocks.js.map +1 -1
  11. package/dist/ComparisonTable/ComparisonTable.d.ts +5 -0
  12. package/dist/ComparisonTable/ComparisonTable.js +34 -0
  13. package/dist/ComparisonTable/ComparisonTable.js.map +1 -0
  14. package/dist/ComparisonTable/ComparisonTableContent.d.ts +37 -0
  15. package/dist/ComparisonTable/ComparisonTableContent.js +2 -0
  16. package/dist/ComparisonTable/ComparisonTableContent.js.map +1 -0
  17. package/dist/ComparisonTable/HeaderCell.d.ts +10 -0
  18. package/dist/ComparisonTable/HeaderCell.js +11 -0
  19. package/dist/ComparisonTable/HeaderCell.js.map +1 -0
  20. package/dist/ComparisonTable/TableCarouselContainer.d.ts +4 -0
  21. package/dist/ComparisonTable/TableCarouselContainer.js +7 -0
  22. package/dist/ComparisonTable/TableCarouselContainer.js.map +1 -0
  23. package/dist/ComparisonTable/TableCell.d.ts +8 -0
  24. package/dist/ComparisonTable/TableCell.js +12 -0
  25. package/dist/ComparisonTable/TableCell.js.map +1 -0
  26. package/dist/ComparisonTable/TableRow.d.ts +10 -0
  27. package/dist/ComparisonTable/TableRow.js +10 -0
  28. package/dist/ComparisonTable/TableRow.js.map +1 -0
  29. package/dist/ComparisonTable/TableRowContainer.d.ts +4 -0
  30. package/dist/ComparisonTable/TableRowContainer.js +6 -0
  31. package/dist/ComparisonTable/TableRowContainer.js.map +1 -0
  32. package/dist/ComparisonTable/constants.d.ts +6 -0
  33. package/dist/ComparisonTable/constants.js +9 -0
  34. package/dist/ComparisonTable/constants.js.map +1 -0
  35. package/dist/ComparisonTable/index.d.ts +3 -0
  36. package/dist/ComparisonTable/index.js +5 -0
  37. package/dist/ComparisonTable/index.js.map +1 -0
  38. package/dist/ExchangeRateTile.js +1 -0
  39. package/dist/ExchangeRateTile.js.map +1 -1
  40. package/dist/Footer/Contacts.js +1 -1
  41. package/dist/Footer/Contacts.js.map +1 -1
  42. package/dist/Footer/SocialMedia.js +4 -1
  43. package/dist/Footer/SocialMedia.js.map +1 -1
  44. package/dist/Gallery.d.ts +1 -1
  45. package/dist/Gallery.js +2 -32
  46. package/dist/Gallery.js.map +1 -1
  47. package/dist/Gallery.mobile.js +1 -1
  48. package/dist/Gallery.mobile.js.map +1 -1
  49. package/dist/GalleryInner.d.ts +7 -0
  50. package/dist/GalleryInner.js +46 -0
  51. package/dist/GalleryInner.js.map +1 -0
  52. package/dist/MiniGallery.d.ts +5 -0
  53. package/dist/MiniGallery.js +7 -0
  54. package/dist/MiniGallery.js.map +1 -0
  55. package/dist/ProductBlockInner.js +3 -3
  56. package/dist/ProductBlockInner.js.map +1 -1
  57. package/dist/TextBlock.js +4 -4
  58. package/dist/TextBlock.js.map +1 -1
  59. package/dist/model/GalleryVersion.d.ts +1 -0
  60. package/dist/{ui-kit/IconButtonProps.js → model/GalleryVersion.js} +1 -1
  61. package/dist/model/GalleryVersion.js.map +1 -0
  62. package/dist/ui-kit/ArrowButton.d.ts +2 -6
  63. package/dist/ui-kit/ArrowButton.js +17 -3
  64. package/dist/ui-kit/ArrowButton.js.map +1 -1
  65. package/dist/ui-kit/Button.d.ts +2 -1
  66. package/dist/ui-kit/Button.js +11 -5
  67. package/dist/ui-kit/Button.js.map +1 -1
  68. package/dist/ui-kit/ButtonProps.d.ts +15 -3
  69. package/dist/ui-kit/IconProps.d.ts +23 -1
  70. package/dist/ui-kit/IconProps.js +24 -0
  71. package/dist/ui-kit/IconProps.js.map +1 -1
  72. package/dist/{Img.d.ts → ui-kit/Img.d.ts} +1 -1
  73. package/dist/{Img.js → ui-kit/Img.js} +0 -0
  74. package/dist/ui-kit/Img.js.map +1 -0
  75. package/dist/ui-kit/SVG.d.ts +2 -0
  76. package/dist/ui-kit/SVG.js +2 -2
  77. package/dist/ui-kit/SVG.js.map +1 -1
  78. package/lib/BaseTile.js +9 -4
  79. package/lib/BaseTile.js.map +1 -1
  80. package/lib/BaseTileContent.d.ts +2 -2
  81. package/lib/BlockContent.d.ts +2 -1
  82. package/lib/Blocks.d.ts +2 -0
  83. package/lib/Blocks.js +4 -0
  84. package/lib/Blocks.js.map +1 -1
  85. package/lib/ComparisonTable/ComparisonTable.d.ts +5 -0
  86. package/lib/ComparisonTable/ComparisonTable.js +32 -0
  87. package/lib/ComparisonTable/ComparisonTable.js.map +1 -0
  88. package/lib/ComparisonTable/ComparisonTableContent.d.ts +37 -0
  89. package/lib/ComparisonTable/ComparisonTableContent.js +2 -0
  90. package/lib/ComparisonTable/ComparisonTableContent.js.map +1 -0
  91. package/lib/ComparisonTable/HeaderCell.d.ts +10 -0
  92. package/lib/ComparisonTable/HeaderCell.js +9 -0
  93. package/lib/ComparisonTable/HeaderCell.js.map +1 -0
  94. package/lib/ComparisonTable/TableCarouselContainer.d.ts +4 -0
  95. package/lib/ComparisonTable/TableCarouselContainer.js +5 -0
  96. package/lib/ComparisonTable/TableCarouselContainer.js.map +1 -0
  97. package/lib/ComparisonTable/TableCell.d.ts +8 -0
  98. package/lib/ComparisonTable/TableCell.js +10 -0
  99. package/lib/ComparisonTable/TableCell.js.map +1 -0
  100. package/lib/ComparisonTable/TableRow.d.ts +10 -0
  101. package/lib/ComparisonTable/TableRow.js +8 -0
  102. package/lib/ComparisonTable/TableRow.js.map +1 -0
  103. package/lib/ComparisonTable/TableRowContainer.d.ts +4 -0
  104. package/lib/ComparisonTable/TableRowContainer.js +4 -0
  105. package/lib/ComparisonTable/TableRowContainer.js.map +1 -0
  106. package/lib/ComparisonTable/constants.d.ts +6 -0
  107. package/lib/ComparisonTable/constants.js +7 -0
  108. package/lib/ComparisonTable/constants.js.map +1 -0
  109. package/lib/ComparisonTable/index.d.ts +3 -0
  110. package/lib/ComparisonTable/index.js +2 -0
  111. package/lib/ComparisonTable/index.js.map +1 -0
  112. package/lib/ExchangeRateTile.js +1 -0
  113. package/lib/ExchangeRateTile.js.map +1 -1
  114. package/lib/Footer/Contacts.js +1 -1
  115. package/lib/Footer/Contacts.js.map +1 -1
  116. package/lib/Footer/SocialMedia.js +4 -1
  117. package/lib/Footer/SocialMedia.js.map +1 -1
  118. package/lib/Gallery.d.ts +1 -1
  119. package/lib/Gallery.js +3 -33
  120. package/lib/Gallery.js.map +1 -1
  121. package/lib/Gallery.mobile.js +1 -1
  122. package/lib/Gallery.mobile.js.map +1 -1
  123. package/lib/GalleryInner.d.ts +7 -0
  124. package/lib/GalleryInner.js +44 -0
  125. package/lib/GalleryInner.js.map +1 -0
  126. package/lib/MiniGallery.d.ts +5 -0
  127. package/lib/MiniGallery.js +5 -0
  128. package/lib/MiniGallery.js.map +1 -0
  129. package/lib/ProductBlockInner.js +3 -3
  130. package/lib/ProductBlockInner.js.map +1 -1
  131. package/lib/TextBlock.js +4 -4
  132. package/lib/TextBlock.js.map +1 -1
  133. package/lib/common.css +1 -1
  134. package/lib/model/GalleryVersion.d.ts +1 -0
  135. package/lib/model/GalleryVersion.js +2 -0
  136. package/lib/model/GalleryVersion.js.map +1 -0
  137. package/lib/ui-kit/ArrowButton.d.ts +2 -6
  138. package/lib/ui-kit/ArrowButton.js +18 -4
  139. package/lib/ui-kit/ArrowButton.js.map +1 -1
  140. package/lib/ui-kit/Button.d.ts +2 -1
  141. package/lib/ui-kit/Button.js +11 -5
  142. package/lib/ui-kit/Button.js.map +1 -1
  143. package/lib/ui-kit/ButtonProps.d.ts +15 -3
  144. package/lib/ui-kit/IconProps.d.ts +23 -1
  145. package/lib/ui-kit/IconProps.js +23 -1
  146. package/lib/ui-kit/IconProps.js.map +1 -1
  147. package/lib/{Img.d.ts → ui-kit/Img.d.ts} +1 -1
  148. package/lib/{Img.js → ui-kit/Img.js} +0 -0
  149. package/lib/ui-kit/Img.js.map +1 -0
  150. package/lib/ui-kit/SVG.d.ts +2 -0
  151. package/lib/ui-kit/SVG.js +2 -2
  152. package/lib/ui-kit/SVG.js.map +1 -1
  153. package/package.json +1 -1
  154. package/src/BaseTile.tsx +17 -5
  155. package/src/BaseTileContent.ts +2 -2
  156. package/src/BlockContent.ts +3 -1
  157. package/src/Blocks.ts +4 -0
  158. package/src/ComparisonTable/ComparisonTable.fixture.tsx +265 -0
  159. package/src/ComparisonTable/ComparisonTable.tsx +126 -0
  160. package/src/ComparisonTable/ComparisonTableContent.ts +43 -0
  161. package/src/ComparisonTable/HeaderCell.tsx +50 -0
  162. package/src/ComparisonTable/TableCarouselContainer.tsx +19 -0
  163. package/src/ComparisonTable/TableCell.tsx +43 -0
  164. package/src/ComparisonTable/TableRow.tsx +44 -0
  165. package/src/ComparisonTable/TableRowContainer.tsx +7 -0
  166. package/src/ComparisonTable/constants.ts +6 -0
  167. package/src/ComparisonTable/index.ts +3 -0
  168. package/src/ContentPage.page.json +463 -1
  169. package/src/ExchangeRateTile.tsx +2 -1
  170. package/src/Footer/Contacts.tsx +1 -0
  171. package/src/Footer/SocialMedia.tsx +9 -5
  172. package/src/Gallery.fixture.tsx +1 -1
  173. package/src/Gallery.mobile.tsx +1 -1
  174. package/src/Gallery.tsx +3 -119
  175. package/src/GalleryInner.tsx +135 -0
  176. package/src/MiniGallery.fixture.tsx +90 -0
  177. package/src/MiniGallery.tsx +10 -0
  178. package/src/ProductBlock.fixture.tsx +1 -1
  179. package/src/ProductBlockInner.tsx +3 -3
  180. package/src/ProductTile.fixture.tsx +1 -1
  181. package/src/TextBlock.fixture.tsx +1 -1
  182. package/src/TextBlock.tsx +6 -4
  183. package/src/Tile.fixture.tsx +1 -1
  184. package/src/common.css +36 -0
  185. package/src/icons/AppleIcon.svg +1 -13
  186. package/src/icons/GlassIcon.svg +1 -0
  187. package/src/icons/PlayMarketIcon.svg +1 -6
  188. package/src/model/GalleryVersion.ts +1 -0
  189. package/src/ui-kit/ArrowButton.tsx +29 -30
  190. package/src/ui-kit/Button.fixture.tsx +33 -5
  191. package/src/ui-kit/Button.tsx +41 -17
  192. package/src/ui-kit/ButtonProps.ts +17 -3
  193. package/src/ui-kit/Icon.fixture.tsx +22 -0
  194. package/src/ui-kit/IconProps.ts +24 -21
  195. package/src/{Img.tsx → ui-kit/Img.tsx} +1 -1
  196. package/src/ui-kit/SVG.tsx +11 -2
  197. package/dist/Img.js.map +0 -1
  198. package/dist/ui-kit/IconButton.d.ts +0 -2
  199. package/dist/ui-kit/IconButton.js +0 -10
  200. package/dist/ui-kit/IconButton.js.map +0 -1
  201. package/dist/ui-kit/IconButtonProps.d.ts +0 -6
  202. package/dist/ui-kit/IconButtonProps.js.map +0 -1
  203. package/lib/Img.js.map +0 -1
  204. package/lib/ui-kit/IconButton.d.ts +0 -2
  205. package/lib/ui-kit/IconButton.js +0 -8
  206. package/lib/ui-kit/IconButton.js.map +0 -1
  207. package/lib/ui-kit/IconButtonProps.d.ts +0 -6
  208. package/lib/ui-kit/IconButtonProps.js +0 -2
  209. package/lib/ui-kit/IconButtonProps.js.map +0 -1
  210. package/src/ui-kit/IconButton.tsx +0 -22
  211. package/src/ui-kit/IconButtonProps.ts +0 -7
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx } from "@redneckz/uni-jsx/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@redneckz/uni-jsx/jsx-runtime";
2
2
  import { JSX } from '@redneckz/uni-jsx';
3
3
  const buttonStyleMap = {
4
4
  primary: 'text-white bg-primary-main hover:bg-primary-hover active:bg-primary-active',
@@ -8,11 +8,17 @@ const buttonDisabledStyleMap = {
8
8
  primary: 'bg-secondary-dark text-secondary-text',
9
9
  secondary: 'bg-secondary-light text-secondary-text',
10
10
  };
11
- const styleButton = 'inline-block rounded-md px-8 py-2 text-center font-sans';
12
- export const Button = JSX(({ className, text, href, target, onClick, children, disabled, version = 'primary', ariaLabel, }) => {
11
+ const styleButton = 'inline-block text-center font-sans select-none';
12
+ export const Button = JSX(({ className, text, aboveText, appendLeft, href, target, onClick, children, disabled, rounded, version = 'none', ariaLabel, ...rest }) => {
13
+ const buttonInner = children ?? (_jsx(ButtonInner, { text: text, aboveText: aboveText, appendLeft: appendLeft, rounded: rounded }));
13
14
  if (disabled) {
14
- return (_jsx("div", { role: "button", "aria-disabled": "true", "aria-label": ariaLabel, tabIndex: "-1", className: `${styleButton} select-none ${buttonDisabledStyleMap[version]} ${className || ''}`, children: children ? (_jsx("div", { children: children })) : (_jsx("div", { className: "text-sm font-medium py-1.5", children: text })) }));
15
+ return (_jsx("div", { role: "button", "aria-disabled": "true", "aria-label": ariaLabel, tabIndex: "-1", className: `${styleButton} ${buttonDisabledStyleMap[version] || ''} ${rounded ? 'rounded-full' : 'rounded-md'} ${className || ''}`, children: buttonInner }));
15
16
  }
16
- return (_jsx("a", { className: `${styleButton} no-underline ${buttonStyleMap[version]} ${className || ''}`, href: href, target: target, onClick: onClick, "aria-label": ariaLabel, children: children ? (_jsx("div", { children: children })) : (_jsx("div", { className: "text-sm font-medium py-1.5", children: text })) }));
17
+ return (_jsx("a", { className: `${styleButton} cursor-pointer no-underline ${buttonStyleMap[version] || ''} ${rounded ? 'rounded-full' : 'rounded-md'} ${className || ''}`, href: href, target: target, onClick: onClick, "aria-label": ariaLabel, role: !href ? 'button' : 'link', ...rest, children: buttonInner }));
18
+ });
19
+ export const ButtonInner = JSX(({ text, aboveText, appendLeft, rounded }) => {
20
+ const withoutText = !text && !aboveText && Boolean(appendLeft);
21
+ const buttonInnerClasses = `flex items-center justify-center ${withoutText ? 'h-12 w-12 min-h-12 min-w-12' : `px-8 gap-2 ${aboveText ? 'py-2' : 'py-[13px]'}`} ${rounded ? 'rounded-full' : ''}`;
22
+ return (_jsxs("div", { className: buttonInnerClasses, children: [appendLeft ? appendLeft : null, !withoutText ? (_jsxs("div", { children: [_jsx("div", { className: "text-xxs text-left", children: aboveText }), _jsx("div", { className: "text-sm font-medium text-left", children: text })] })) : null] }));
17
23
  });
18
24
  //# sourceMappingURL=Button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/ui-kit/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAIxC,MAAM,cAAc,GAAkC;IACpD,OAAO,EAAE,4EAA4E;IACrF,SAAS,EACP,0FAA0F;CAC7F,CAAC;AAEF,MAAM,sBAAsB,GAAkC;IAC5D,OAAO,EAAE,uCAAuC;IAChD,SAAS,EAAE,wCAAwC;CACpD,CAAC;AAEF,MAAM,WAAW,GAAG,yDAAyD,CAAC;AAE9E,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CACvB,CAAC,EACC,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,SAAS,GACV,EAAE,EAAE;IACH,IAAI,QAAQ,EAAE;QACZ,OAAO,CACL,cACE,IAAI,EAAC,QAAQ,mBACC,MAAM,gBACR,SAAS,EACrB,QAAQ,EAAC,IAAI,EACb,SAAS,EAAE,GAAG,WAAW,gBAAgB,sBAAsB,CAAC,OAAO,CAAC,IACtE,SAAS,IAAI,EACf,EAAE,YAED,QAAQ,CAAC,CAAC,CAAC,CACV,wBAAM,QAAQ,GAAO,CACtB,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,4BAA4B,YAAE,IAAI,GAAO,CACzD,GACG,CACP,CAAC;KACH;IAED,OAAO,CACL,YACE,SAAS,EAAE,GAAG,WAAW,iBAAiB,cAAc,CAAC,OAAO,CAAC,IAAI,SAAS,IAAI,EAAE,EAAE,EACtF,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,gBACJ,SAAS,YAEpB,QAAQ,CAAC,CAAC,CAAC,CACV,wBAAM,QAAQ,GAAO,CACtB,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,4BAA4B,YAAE,IAAI,GAAO,CACzD,GACC,CACL,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/ui-kit/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAIxC,MAAM,cAAc,GAAkC;IACpD,OAAO,EAAE,4EAA4E;IACrF,SAAS,EACP,0FAA0F;CAC7F,CAAC;AAEF,MAAM,sBAAsB,GAAkC;IAC5D,OAAO,EAAE,uCAAuC;IAChD,SAAS,EAAE,wCAAwC;CACpD,CAAC;AAEF,MAAM,WAAW,GAAG,gDAAgD,CAAC;AAErE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CACvB,CAAC,EACC,SAAS,EACT,IAAI,EACJ,SAAS,EACT,UAAU,EACV,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,QAAQ,IAAI,CAC9B,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAI,CAC5F,CAAC;IAEF,IAAI,QAAQ,EAAE;QACZ,OAAO,CACL,cACE,IAAI,EAAC,QAAQ,mBACC,MAAM,gBACR,SAAS,EACrB,QAAQ,EAAC,IAAI,EACb,SAAS,EAAE,GAAG,WAAW,IAAI,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,IAChE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAC7B,IAAI,SAAS,IAAI,EAAE,EAAE,YAEpB,WAAW,GACR,CACP,CAAC;KACH;IAED,OAAO,CACL,YACE,SAAS,EAAE,GAAG,WAAW,gCAAgC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IACpF,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAC7B,IAAI,SAAS,IAAI,EAAE,EAAE,EACrB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,gBACJ,SAAS,EACrB,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAC3B,IAAI,YAEP,WAAW,GACV,CACL,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5F,MAAM,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAE/D,MAAM,kBAAkB,GAAG,oCACzB,WAAW,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,cAAc,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAC9F,IAAI,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAEpC,OAAO,CACL,eAAK,SAAS,EAAE,kBAAkB,aAC/B,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAC9B,CAAC,WAAW,CAAC,CAAC,CAAC,CACd,0BACE,cAAK,SAAS,EAAC,oBAAoB,YAAE,SAAS,GAAO,EACrD,cAAK,SAAS,EAAC,+BAA+B,YAAE,IAAI,GAAO,IACvD,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,9 +1,21 @@
1
1
  import type { ButtonVersion } from '../model/ButtonVersion';
2
2
  import type { LinkContent } from '../model/LinkContent';
3
- export interface ButtonProps extends LinkContent {
3
+ import { IconName } from './IconProps';
4
+ export interface ButtonInnerProps {
5
+ text?: string;
6
+ aboveText?: string;
7
+ appendLeft?: any;
8
+ rounded?: boolean;
9
+ }
10
+ export interface ButtonProps extends LinkContent, ButtonInnerProps {
4
11
  className?: string;
5
- onClick?: (ev: MouseEvent) => any;
6
12
  version?: ButtonVersion;
7
- ariaLabel?: string;
8
13
  disabled?: boolean;
14
+ rel?: string;
15
+ ariaLabel?: string;
16
+ /** @hidden */
17
+ onClick?: (ev: MouseEvent) => any;
18
+ }
19
+ export interface ButtonWithIconProps extends ButtonProps {
20
+ icon?: IconName;
9
21
  }
@@ -1,4 +1,26 @@
1
- export declare type IconName = 'ActualBalanceIcon' | 'AppleIcon' | 'CalendarIcon' | 'ClockIcon' | 'ComfortableCompIcon' | 'DollarIcon' | 'EmptyWalletIcon' | 'EuroIcon' | 'GridIcon' | 'LoupeIcon' | 'NewDocIcon' | 'OkIcon' | 'PassSendIcon' | 'PercentageSquareIcon' | 'PlayMarketIcon' | 'ProfileIcon' | 'SignDocsIcon' | 'TelegramIcon' | 'VKIcon' | 'ArrowLeftIcon';
1
+ export declare enum IconMap {
2
+ 'ActualBalanceIcon' = 0,
3
+ 'AppleIcon' = 1,
4
+ 'CalendarIcon' = 2,
5
+ 'ClockIcon' = 3,
6
+ 'ComfortableCompIcon' = 4,
7
+ 'DollarIcon' = 5,
8
+ 'EmptyWalletIcon' = 6,
9
+ 'EuroIcon' = 7,
10
+ 'GridIcon' = 8,
11
+ 'LoupeIcon' = 9,
12
+ 'NewDocIcon' = 10,
13
+ 'OkIcon' = 11,
14
+ 'PassSendIcon' = 12,
15
+ 'PercentageSquareIcon' = 13,
16
+ 'PlayMarketIcon' = 14,
17
+ 'ProfileIcon' = 15,
18
+ 'SignDocsIcon' = 16,
19
+ 'TelegramIcon' = 17,
20
+ 'VKIcon' = 18,
21
+ 'GlassIcon' = 19
22
+ }
23
+ export declare type IconName = keyof typeof IconMap;
2
24
  export interface IconProps {
3
25
  className?: string;
4
26
  name: IconName;
@@ -1,2 +1,24 @@
1
- export {};
1
+ export var IconMap;
2
+ (function (IconMap) {
3
+ IconMap[IconMap["ActualBalanceIcon"] = 0] = "ActualBalanceIcon";
4
+ IconMap[IconMap["AppleIcon"] = 1] = "AppleIcon";
5
+ IconMap[IconMap["CalendarIcon"] = 2] = "CalendarIcon";
6
+ IconMap[IconMap["ClockIcon"] = 3] = "ClockIcon";
7
+ IconMap[IconMap["ComfortableCompIcon"] = 4] = "ComfortableCompIcon";
8
+ IconMap[IconMap["DollarIcon"] = 5] = "DollarIcon";
9
+ IconMap[IconMap["EmptyWalletIcon"] = 6] = "EmptyWalletIcon";
10
+ IconMap[IconMap["EuroIcon"] = 7] = "EuroIcon";
11
+ IconMap[IconMap["GridIcon"] = 8] = "GridIcon";
12
+ IconMap[IconMap["LoupeIcon"] = 9] = "LoupeIcon";
13
+ IconMap[IconMap["NewDocIcon"] = 10] = "NewDocIcon";
14
+ IconMap[IconMap["OkIcon"] = 11] = "OkIcon";
15
+ IconMap[IconMap["PassSendIcon"] = 12] = "PassSendIcon";
16
+ IconMap[IconMap["PercentageSquareIcon"] = 13] = "PercentageSquareIcon";
17
+ IconMap[IconMap["PlayMarketIcon"] = 14] = "PlayMarketIcon";
18
+ IconMap[IconMap["ProfileIcon"] = 15] = "ProfileIcon";
19
+ IconMap[IconMap["SignDocsIcon"] = 16] = "SignDocsIcon";
20
+ IconMap[IconMap["TelegramIcon"] = 17] = "TelegramIcon";
21
+ IconMap[IconMap["VKIcon"] = 18] = "VKIcon";
22
+ IconMap[IconMap["GlassIcon"] = 19] = "GlassIcon";
23
+ })(IconMap || (IconMap = {}));
2
24
  //# sourceMappingURL=IconProps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IconProps.js","sourceRoot":"","sources":["../../src/ui-kit/IconProps.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"IconProps.js","sourceRoot":"","sources":["../../src/ui-kit/IconProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,OAqBX;AArBD,WAAY,OAAO;IACjB,+DAAmB,CAAA;IACnB,+CAAW,CAAA;IACX,qDAAc,CAAA;IACd,+CAAW,CAAA;IACX,mEAAqB,CAAA;IACrB,iDAAY,CAAA;IACZ,2DAAiB,CAAA;IACjB,6CAAU,CAAA;IACV,6CAAU,CAAA;IACV,+CAAW,CAAA;IACX,kDAAY,CAAA;IACZ,0CAAQ,CAAA;IACR,sDAAc,CAAA;IACd,sEAAsB,CAAA;IACtB,0DAAgB,CAAA;IAChB,oDAAa,CAAA;IACb,sDAAc,CAAA;IACd,sDAAc,CAAA;IACd,0CAAQ,CAAA;IACR,gDAAW,CAAA;AACb,CAAC,EArBW,OAAO,KAAP,OAAO,QAqBlB"}
@@ -1,4 +1,4 @@
1
- import type { Picture, ImgSource } from './model/Picture';
1
+ import type { ImgSource, Picture } from '../model/Picture';
2
2
  export interface TextWithImageProps {
3
3
  className?: string;
4
4
  image: Picture;
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Img.js","sourceRoot":"","sources":["../../src/ui-kit/Img.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAQxC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAqB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACnE,mBAAS,SAAS,EAAE,GAAG,SAAS,IAAI,EAAE,EAAE,aACrC,KAAK,CAAC,OAAO,EAAE,MAAM;YACpB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5C,iBAAgC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAA9D,GAAG,KAAK,IAAI,GAAG,EAAE,CAAiD,CAChF,CAAC;YACJ,CAAC,CAAC,IAAI,EACR,cAAK,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,KAAM,KAAK,EAAE,IAAI,GAAI,IACnF,CACX,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,MAA2B;IAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC"}
@@ -13,6 +13,8 @@ export interface SVGProps extends SVGPathOptions {
13
13
  className?: string;
14
14
  viewBox?: string;
15
15
  paths: SVGPath[];
16
+ width?: string;
17
+ height?: string;
16
18
  }
17
19
  export declare const SVG: (props: import("@redneckz/uni-jsx").PropsWithChildren<SVGProps, any>, context?: any) => any;
18
20
  export {};
package/lib/ui-kit/SVG.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "@redneckz/uni-jsx/jsx-runtime";
2
2
  import { JSX } from '@redneckz/uni-jsx';
3
- export const SVG = JSX(({ className, viewBox, fill = 'none', paths, ...commonOptions }) => {
4
- return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", className: className, viewBox: viewBox, fill: fill, children: paths.map(({ d, fill, ...options }, i) => (_jsx("path", { d: d, fill: fill || 'currentColor', ...commonOptions, ...options }, i))) }));
3
+ export const SVG = JSX(({ className, viewBox, fill = 'none', width, height, paths, ...commonOptions }) => {
4
+ return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", className: className, viewBox: viewBox, fill: fill, width: width, height: height, children: paths.map(({ d, fill, ...options }, i) => (_jsx("path", { d: d, fill: fill || 'currentColor', ...commonOptions, ...options }, i))) }));
5
5
  });
6
6
  //# sourceMappingURL=SVG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SVG.js","sourceRoot":"","sources":["../../src/ui-kit/SVG.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAqBxC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CACpB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,EAAE,EAAE;IACjE,OAAO,CACL,cAAK,KAAK,EAAC,4BAA4B,EAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,YACvF,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CACzC,eAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,cAAc,KAAM,aAAa,KAAM,OAAO,IAArE,CAAC,CAAwE,CACrF,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"SVG.js","sourceRoot":"","sources":["../../src/ui-kit/SVG.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAuBxC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CACpB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,EAAE,EAAE;IAChF,OAAO,CACL,cACE,KAAK,EAAC,4BAA4B,EAClC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,YAEb,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CACzC,eAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,cAAc,KAAM,aAAa,KAAM,OAAO,IAArE,CAAC,CAAwE,CACrF,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redneckz/wildless-cms-uni-blocks",
3
- "version": "0.2.72",
3
+ "version": "0.2.75",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/BaseTile.tsx CHANGED
@@ -1,11 +1,12 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import type { BaseTileContent } from './BaseTileContent';
3
- import { Img } from './Img';
4
3
  import type { BlockVersion } from './model/BlockVersion';
5
4
  import type { UniBlockProps } from './types';
6
5
  import { BlockItem } from './ui-kit/BlockItem';
7
- import { IconButton } from './ui-kit/IconButton';
8
- import type { IconButtonProps } from './ui-kit/IconButtonProps';
6
+ import { Button } from './ui-kit/Button';
7
+ import type { ButtonWithIconProps } from './ui-kit/ButtonProps';
8
+ import { Icon } from './ui-kit/Icon';
9
+ import { Img } from './ui-kit/Img';
9
10
  import { Title } from './ui-kit/Title';
10
11
  import { useLink } from './useLink';
11
12
  import { getColSpan } from './utils/getColSpan';
@@ -81,6 +82,17 @@ function renderItems(items: string[] = [], version?: BlockVersion) {
81
82
  );
82
83
  }
83
84
 
84
- function renderButton(button: IconButtonProps, i: number) {
85
- return button?.text ? <IconButton key={String(i)} {...button} /> : null;
85
+ function renderButton({ icon, ...button }: ButtonWithIconProps, i: number) {
86
+ if (!button?.text) return;
87
+
88
+ if (icon)
89
+ return (
90
+ <Button
91
+ key={String(i)}
92
+ appendLeft={<Icon name={icon} width="24" height="24" />}
93
+ {...button}
94
+ />
95
+ );
96
+
97
+ return <Button key={String(i)} {...button} />;
86
98
  }
@@ -1,6 +1,6 @@
1
1
  import type { BlockVersion } from './model/BlockVersion';
2
2
  import type { Picture } from './model/Picture';
3
- import type { IconButtonProps } from './ui-kit/IconButtonProps';
3
+ import type { ButtonWithIconProps } from './ui-kit/ButtonProps';
4
4
  import type { TitleSize } from './ui-kit/TitleProps';
5
5
 
6
6
  export interface BaseTileContent {
@@ -9,6 +9,6 @@ export interface BaseTileContent {
9
9
  description?: string;
10
10
  image?: Picture;
11
11
  items?: string[];
12
- buttons?: Omit<IconButtonProps, 'className' | 'onClick' | 'ariaLabel'>[];
12
+ buttons?: ButtonWithIconProps[];
13
13
  version?: BlockVersion;
14
14
  }
@@ -12,6 +12,7 @@ import type { PromoTileContent } from './PromoTileContent';
12
12
  import type { StepsBlockContent } from './StepsBlockContent';
13
13
  import type { TextBlockContent } from './TextBlockContent';
14
14
  import type { TileContent } from './TileContent';
15
+ import type { ComparisonTableContent } from './ComparisonTable';
15
16
 
16
17
  export type BlockContent =
17
18
  | HeaderContent
@@ -27,4 +28,5 @@ export type BlockContent =
27
28
  | ProductGalleryContent
28
29
  | ExchangeRateTileContent
29
30
  | MobileAppTileContent
30
- | GalleryContent;
31
+ | GalleryContent
32
+ | ComparisonTableContent;
package/src/Blocks.ts CHANGED
@@ -3,6 +3,7 @@ import { ExchangeRateTile } from './ExchangeRateTile';
3
3
  import { Footer } from './Footer/Footer';
4
4
  import { Gallery } from './Gallery';
5
5
  import { Header } from './Header/Header';
6
+ import { MiniGallery } from './MiniGallery';
6
7
  import { MobileAppTile } from './MobileAppTile';
7
8
  import { Placeholder } from './Placeholder';
8
9
  import { ProductBlock } from './ProductBlock';
@@ -12,6 +13,7 @@ import { PromoTile } from './PromoTile';
12
13
  import { StepsBlock } from './StepsBlock';
13
14
  import { TextBlock } from './TextBlock';
14
15
  import { Tile } from './Tile';
16
+ import { ComparisonTable } from './ComparisonTable';
15
17
 
16
18
  export const Blocks = {
17
19
  Header,
@@ -28,4 +30,6 @@ export const Blocks = {
28
30
  ExchangeRateTile,
29
31
  MobileAppTile,
30
32
  Gallery,
33
+ MiniGallery,
34
+ ComparisonTable,
31
35
  };
@@ -0,0 +1,265 @@
1
+ import type { Picture } from '../model/Picture';
2
+ import { context } from '../setup-fixture';
3
+ import { ComparisonTable } from './ComparisonTable';
4
+ import type { Column } from './ComparisonTableContent';
5
+
6
+ const image1: Picture = {
7
+ src: 'card-1.png',
8
+ format: 'webp',
9
+ size: {
10
+ width: 100,
11
+ height: 63,
12
+ },
13
+ };
14
+
15
+ const image2: Picture = {
16
+ src: 'card-2.png',
17
+ format: 'webp',
18
+ size: {
19
+ width: 100,
20
+ height: 63,
21
+ },
22
+ };
23
+
24
+ const image3: Picture = {
25
+ src: 'card-3.png',
26
+ format: 'webp',
27
+ size: {
28
+ width: 100,
29
+ height: 63,
30
+ },
31
+ };
32
+
33
+ const rowHeaders = [
34
+ { title: 'Начисление процентов на остаток по счету' },
35
+ { title: 'Снятие наличных' },
36
+ { title: 'Оформление онлайн' },
37
+ { title: 'Кэшбэк баллами' },
38
+ { title: 'Стоимость обслуживания' },
39
+ { title: 'Стоимость SMS-сервиса' },
40
+ { title: 'Дополнительная информация' },
41
+ ];
42
+ const rowHeaders2 = [
43
+ { title: 'Срок вклада (дней)' },
44
+ { title: 'Ставка по вкладу' },
45
+ { title: 'Минимальная сумма' },
46
+ { title: 'Максимальная сумма' },
47
+ ];
48
+ const columns: Column[] = [
49
+ {
50
+ header: {
51
+ title: 'Россельхоз-Росснефть',
52
+ image: image1,
53
+ link: {
54
+ text: 'Подробнее',
55
+ href: '/credits',
56
+ },
57
+ },
58
+ data: [
59
+ [{ label: 'Нет' }],
60
+ [
61
+ {
62
+ label: 'Бесплатно',
63
+ description: 'В банкоматах и кассах Россельхозбанка и банков-партнеров',
64
+ },
65
+ {
66
+ label: 'Бесплатно',
67
+ description: 'В сторонних банкоматах - 1 раз в месяц, далее 1% минимум 150 руб',
68
+ },
69
+ ],
70
+ [{ label: 'Нет' }],
71
+ [{ label: 'До 7%' }],
72
+ [
73
+ {
74
+ label: 'Бесплатно',
75
+ description: 'При обороте по карте от 10000 ₽ в месяц',
76
+ },
77
+ ],
78
+ [{ label: '69 рублей в месяц' }],
79
+ [{ description: 'Оплачивайте покупки картой и заправляйтесь за баллы в сети АЗС Роснефть' }],
80
+ ],
81
+ },
82
+ {
83
+ header: {
84
+ title: 'Panasonic',
85
+ image: image2,
86
+ link: {
87
+ text: 'Подробнее',
88
+ href: '/credits',
89
+ },
90
+ },
91
+ data: [
92
+ [{ label: 'Нет' }],
93
+ [
94
+ {
95
+ label: 'Бесплатно',
96
+ description: 'В банкоматах и кассах Россельхозбанка и банков-партнеров',
97
+ },
98
+ {
99
+ label: '1%',
100
+ description: 'В сторонних банкоматах, минимум 150 руб',
101
+ },
102
+ ],
103
+ [{ label: 'Нет' }],
104
+ [{ label: 'До 20%' }],
105
+ [
106
+ {
107
+ label: 'Бесплатно',
108
+ description: 'При обороте по карте от 10000 ₽ в месяц',
109
+ },
110
+ ],
111
+ [{ label: '69 рублей в месяц' }],
112
+ [
113
+ {
114
+ description:
115
+ 'Копите баллы каждый день и обменивайте их на скидки на электронику и бытовую технику Panasonic',
116
+ },
117
+ ],
118
+ ],
119
+ },
120
+ {
121
+ header: {
122
+ title: 'Профсоюзная',
123
+ image: image3,
124
+ link: {
125
+ text: 'Подробнее',
126
+ href: '/credits',
127
+ },
128
+ },
129
+ data: [
130
+ [{ label: 'Нет' }],
131
+ [{ label: 'Бесплатно' }],
132
+ [{ label: 'Есть' }],
133
+ [{ label: 'До 20%' }],
134
+ [
135
+ {
136
+ label: 'Бесплатно',
137
+ description: 'При обороте по карте от 10000 ₽ в месяц',
138
+ },
139
+ ],
140
+ [{ label: '69 рублей в месяц' }],
141
+ [{ description: 'Для членов профсоюзных организаций' }],
142
+ ],
143
+ },
144
+ ];
145
+ const columns2: Column[] = [
146
+ {
147
+ header: {
148
+ title: '«Пополняемый»',
149
+ icon: 'GlassIcon',
150
+ link: {
151
+ text: 'Подробнее',
152
+ href: '/credits',
153
+ },
154
+ },
155
+ data: [
156
+ [{ label: 'от 91 до 1095' }],
157
+ [{ label: 'до 8,2% ₽' }, { label: 'до 0,01% USD' }],
158
+ [{ label: 'От 3000 ₽' }, { label: 'От 50 USD' }],
159
+ [{ label: 'до 10 млн ₽' }, { label: 'до 300 тыс. USD' }],
160
+ ],
161
+ },
162
+ {
163
+ header: {
164
+ title: '«Комфортный»',
165
+ icon: 'ComfortableCompIcon',
166
+ link: {
167
+ text: 'Подробнее',
168
+ href: '/credits',
169
+ },
170
+ },
171
+ data: [
172
+ [{ label: 'от 91 до 1095' }],
173
+ [{ label: 'до 7,2% ₽' }, { label: 'до 0,01% USD' }],
174
+ [{ label: 'От 10 000 ₽' }, { label: 'От 150 USD' }],
175
+ [{ label: 'до 10 млн ₽' }, { label: 'до 300 тыс. USD' }],
176
+ ],
177
+ },
178
+ {
179
+ header: {
180
+ title: '«Доходный пенсионный»',
181
+ icon: 'ClockIcon',
182
+ link: {
183
+ text: 'Подробнее',
184
+ href: '/credits',
185
+ },
186
+ },
187
+ data: [
188
+ [{ label: 'от 91 до 1460' }],
189
+ [{ label: 'до 9,5% ₽' }],
190
+ [{ label: 'От 500 ₽' }],
191
+ [{ label: 'Без ограничений' }],
192
+ ],
193
+ },
194
+ ];
195
+
196
+ export default {
197
+ 'with images': (
198
+ <div className="w-[1280px]">
199
+ <div className="grid grid-cols-12">
200
+ <ComparisonTable
201
+ className="col-span-12"
202
+ title="Другие дебетовые карты Россельхозбанка"
203
+ context={context}
204
+ rowHeaders={rowHeaders}
205
+ columns={Array(2).fill(columns).flat()}
206
+ />
207
+ </div>
208
+ </div>
209
+ ),
210
+ 'with images and hidden rows': (
211
+ <div className="w-[1280px]">
212
+ <div className="grid grid-cols-12">
213
+ <ComparisonTable
214
+ className="col-span-12"
215
+ title="Другие дебетовые карты Россельхозбанка"
216
+ visibleRowLength={3}
217
+ context={context}
218
+ rowHeaders={rowHeaders}
219
+ columns={Array(2).fill(columns).flat()}
220
+ />
221
+ </div>
222
+ </div>
223
+ ),
224
+ 'with images and colored first column': (
225
+ <div className="w-[1280px]">
226
+ <div className="grid grid-cols-12">
227
+ <ComparisonTable
228
+ className="col-span-12"
229
+ title="Другие дебетовые карты Россельхозбанка"
230
+ visibleRowLength={3}
231
+ isColoredFirstColumn={true}
232
+ context={context}
233
+ rowHeaders={rowHeaders}
234
+ columns={Array(2).fill(columns).flat()}
235
+ />
236
+ </div>
237
+ </div>
238
+ ),
239
+ 'with icons': (
240
+ <div className="w-[1280px]">
241
+ <div className="grid grid-cols-12">
242
+ <ComparisonTable
243
+ className="col-span-12"
244
+ title="Другие вклады и сбережения"
245
+ context={context}
246
+ rowHeaders={rowHeaders2}
247
+ columns={Array(2).fill(columns2).flat()}
248
+ />
249
+ </div>
250
+ </div>
251
+ ),
252
+ 'with icons and two cols': (
253
+ <div className="w-[1280px]">
254
+ <div className="grid grid-cols-12">
255
+ <ComparisonTable
256
+ className="col-span-12"
257
+ title="Другие вклады и сбережения"
258
+ context={context}
259
+ rowHeaders={rowHeaders2}
260
+ columns={columns2.slice(0, 2)}
261
+ />
262
+ </div>
263
+ </div>
264
+ ),
265
+ };
@@ -0,0 +1,126 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import type { UniBlockProps } from '../types';
3
+ import { ArrowButton } from '../ui-kit/ArrowButton';
4
+ import { Title } from '../ui-kit/Title';
5
+ import { TableRowContainer } from './TableRowContainer';
6
+ import { TableCarouselContainer } from './TableCarouselContainer';
7
+ import { useLink } from '../useLink';
8
+ import type { ComparisonTableContent, RowData } from './ComparisonTableContent';
9
+ import { HeaderCell } from './HeaderCell';
10
+ import { TableRow } from './TableRow';
11
+ import { COLS_LENGTH_FOR_SCROLL, FIRST_CELL_CLASSES } from './constants';
12
+
13
+ export interface ComparisonTableProps extends ComparisonTableContent, UniBlockProps {}
14
+
15
+ export const ComparisonTable = JSX<ComparisonTableProps>(
16
+ ({
17
+ className,
18
+ context,
19
+ title,
20
+ rowHeaders,
21
+ columns,
22
+ visibleRowLength = 0,
23
+ isColoredFirstColumn = false,
24
+ }) => {
25
+ const router = context.useRouter();
26
+ const { handlerDecorator } = context;
27
+ const [activeCardIndex, setActiveCardIndex] = context.useState(0);
28
+ const [isShowAllRow, setIsShowAllRow] = context.useState(!visibleRowLength);
29
+
30
+ const colHeaders = columns?.map(({ header }) => header || {});
31
+ const colData = columns?.map(({ data }) => data) || [];
32
+ const rowData: RowData = rowHeaders
33
+ ?.map((header, i) => ({
34
+ header,
35
+ data: colData.map((col) => col?.[i] || [{}]),
36
+ }))
37
+ .slice(0, isShowAllRow ? rowHeaders.length : visibleRowLength);
38
+
39
+ const nextClick = () => setActiveCardIndex(activeCardIndex + 1);
40
+ const prevClick = () => setActiveCardIndex(activeCardIndex - 1);
41
+ const showToggle = () => setIsShowAllRow(!isShowAllRow);
42
+
43
+ const isScrollAvailable = colData?.length && colData.length > COLS_LENGTH_FOR_SCROLL;
44
+ const showNextButton =
45
+ isScrollAvailable && colData?.length - activeCardIndex > COLS_LENGTH_FOR_SCROLL;
46
+ const showPrevButton = isScrollAvailable && activeCardIndex > 0;
47
+
48
+ return (
49
+ <section
50
+ className={`bg-white font-sans py-[50px] pl-[50px] overflow-hidden text-primary-text relative ${
51
+ className || ''
52
+ }`}
53
+ >
54
+ <Title className="font-medium m-0 max-w-[47rem] text-center mb-9 mx-auto">{title}</Title>
55
+ <div role="table">
56
+ {colHeaders?.length ? (
57
+ <TableRowContainer>
58
+ <div className={FIRST_CELL_CLASSES} role="columnheader" scope="col" />
59
+ <TableCarouselContainer activeCardIndex={activeCardIndex}>
60
+ {colHeaders.map((header, i) => (
61
+ <HeaderCell
62
+ key={String(i)}
63
+ {...header}
64
+ link={header.link && useLink({ router, handlerDecorator }, header.link)}
65
+ />
66
+ ))}
67
+ </TableCarouselContainer>
68
+ </TableRowContainer>
69
+ ) : null}
70
+
71
+ {rowData?.length ? (
72
+ <div className="relative">
73
+ {rowData.map((row, i, { length }) => (
74
+ <TableRow
75
+ key={String(i)}
76
+ row={row}
77
+ isFirstRow={i === 0}
78
+ isLastRow={i + 1 === length}
79
+ activeCardIndex={activeCardIndex}
80
+ isColoredFirstColumn={isColoredFirstColumn}
81
+ />
82
+ ))}
83
+ {isScrollAvailable ? (
84
+ <div>
85
+ <div className="absolute top-7 right-7 z-10">
86
+ <ArrowButton
87
+ onClick={nextClick}
88
+ disabled={!showNextButton}
89
+ ariaLabel="Пролистать вправо"
90
+ />
91
+ <ArrowButton
92
+ className="mt-4 rotate-180"
93
+ onClick={prevClick}
94
+ disabled={!showPrevButton}
95
+ ariaLabel="Пролистать влево"
96
+ />
97
+ </div>
98
+ </div>
99
+ ) : null}
100
+ </div>
101
+ ) : null}
102
+ </div>
103
+
104
+ {isScrollAvailable ? (
105
+ <div className="absolute top-0 right-0 bottom-0 w-[84px] bg-opacity-to-white" />
106
+ ) : null}
107
+
108
+ {visibleRowLength ? (
109
+ <div className="pr-[50px]">
110
+ <div className="flex w-full">
111
+ <div className={FIRST_CELL_CLASSES} />
112
+ <button
113
+ onClick={showToggle}
114
+ className="mt-5 flex-1 border-main-stroke border-solid border text-primary-text bg-white hover:border-primary-main hover:text-primary-main"
115
+ >
116
+ <div className="font-sans font-medium text-xs py-[11px]">
117
+ {!isShowAllRow ? 'Показать все параметры' : 'Скрыть'}
118
+ </div>
119
+ </button>
120
+ </div>
121
+ </div>
122
+ ) : null}
123
+ </section>
124
+ );
125
+ },
126
+ );