@redneckz/wildless-cms-uni-blocks 0.2.48 → 0.2.49

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 (53) hide show
  1. package/README.md +3 -0
  2. package/dist/Blocks.d.ts +3 -1
  3. package/dist/Blocks.js +2 -0
  4. package/dist/Blocks.js.map +1 -1
  5. package/dist/Footer/Sitemap.js +6 -4
  6. package/dist/Footer/Sitemap.js.map +1 -1
  7. package/dist/ProductBlockInner.js +2 -1
  8. package/dist/ProductBlockInner.js.map +1 -1
  9. package/dist/ProductGallery.js +2 -2
  10. package/dist/ProductGallery.js.map +1 -1
  11. package/dist/ProductTile.d.ts +17 -0
  12. package/dist/ProductTile.js +27 -0
  13. package/dist/ProductTile.js.map +1 -0
  14. package/dist/StepsBlock.js +7 -3
  15. package/dist/StepsBlock.js.map +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +3 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/utils/joinList.d.ts +1 -0
  20. package/dist/utils/joinList.js +7 -0
  21. package/dist/utils/joinList.js.map +1 -0
  22. package/lib/Blocks.d.ts +3 -1
  23. package/lib/Blocks.js +2 -0
  24. package/lib/Blocks.js.map +1 -1
  25. package/lib/Footer/Sitemap.js +6 -4
  26. package/lib/Footer/Sitemap.js.map +1 -1
  27. package/lib/ProductBlockInner.js +2 -1
  28. package/lib/ProductBlockInner.js.map +1 -1
  29. package/lib/ProductGallery.js +2 -2
  30. package/lib/ProductGallery.js.map +1 -1
  31. package/lib/ProductTile.d.ts +17 -0
  32. package/lib/ProductTile.js +25 -0
  33. package/lib/ProductTile.js.map +1 -0
  34. package/lib/StepsBlock.js +7 -3
  35. package/lib/StepsBlock.js.map +1 -1
  36. package/lib/common.css +1 -1
  37. package/lib/index.d.ts +1 -0
  38. package/lib/index.js +1 -0
  39. package/lib/index.js.map +1 -1
  40. package/lib/utils/joinList.d.ts +1 -0
  41. package/lib/utils/joinList.js +4 -0
  42. package/lib/utils/joinList.js.map +1 -0
  43. package/package.json +1 -1
  44. package/src/Blocks.ts +3 -0
  45. package/src/ContentPage.page.json +140 -0
  46. package/src/Footer/Sitemap.tsx +7 -5
  47. package/src/ProductBlockInner.tsx +4 -3
  48. package/src/ProductGallery.tsx +3 -5
  49. package/src/ProductTile.fixture.tsx +147 -0
  50. package/src/ProductTile.tsx +95 -0
  51. package/src/StepsBlock.tsx +20 -6
  52. package/src/index.ts +1 -0
  53. package/src/utils/joinList.ts +7 -0
package/lib/common.css CHANGED
@@ -1 +1 @@
1
- @import "../fonts/ubuntu/ubuntu.css";[data-theme=pc]{--color-primary-main:#42ab44;--color-primary-hover:#248341;--color-primary-active:#245f34;--color-secondary-hover:#c5e2c6;--color-secondary-active:#d8f2d9}[data-theme=bc]{--color-primary-main:#83b83e;--color-primary-hover:#5c921d;--color-primary-active:#3c5e10;--color-secondary-hover:#e8f4d9;--color-secondary-active:#d8e3ca}[data-theme=eo]{--color-primary-main:#ddb63d;--color-primary-hover:#bb9727;--color-primary-active:#7e630c;--color-secondary-hover:#f1ecdd;--color-secondary-active:#e5dec7}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.top-4{top:1rem}.right-4{right:1rem}.bottom-0{bottom:0}.right-0{right:0}.left-0{left:0}.-bottom-2{bottom:-.5rem}.top-0{top:0}.z-10{z-index:10}.col-span-12{grid-column:span 12/span 12}.col-span-8{grid-column:span 8/span 8}.col-span-4{grid-column:span 4/span 4}.col-span-6{grid-column:span 6/span 6}.m-0{margin:0}.-mx-20{margin-left:-5rem;margin-right:-5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mt-9{margin-top:2.25rem}.mt-2{margin-top:.5rem}.mb-5{margin-bottom:1.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mb-6{margin-bottom:1.5rem}.mt-4{margin-top:1rem}.mt-7{margin-top:1.75rem}.mt-5{margin-top:1.25rem}.mt-auto{margin-top:auto}.mt-8{margin-top:2rem}.mt-6{margin-top:1.5rem}.mt-2\.5{margin-top:.625rem}.mb-4{margin-bottom:1rem}.mr-8{margin-right:2rem}.ml-auto{margin-left:auto}.mr-5{margin-right:1.25rem}.mr-7{margin-right:1.75rem}.ml-2\.5{margin-left:.625rem}.box-border{box-sizing:border-box}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.h-\[70px\]{height:70px}.h-8{height:2rem}.h-full{height:100%}.h-\[90px\]{height:90px}.h-4{height:1rem}.h-\[50px\]{height:50px}.h-\[3px\]{height:3px}.h-\[100px\]{height:100px}.h-\[220px\]{height:220px}.h-\[1px\]{height:1px}.h-\[8px\]{height:8px}.h-\[2px\]{height:2px}.h-\[24px\]{height:24px}.min-h-\[70px\]{min-height:70px}.min-h-\[50px\]{min-height:50px}.min-h-\[100px\]{min-height:100px}.min-h-\[32px\]{min-height:32px}.min-h-\[8px\]{min-height:8px}.w-\[70px\]{width:70px}.w-full{width:100%}.w-8{width:2rem}.w-\[125px\]{width:125px}.w-\[90px\]{width:90px}.w-\[50px\]{width:50px}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[280px\]{width:280px}.w-\[235px\]{width:235px}.w-\[24px\]{width:24px}.w-\[8px\]{width:8px}.w-\[36px\]{width:36px}.w-10{width:2.5rem}.min-w-\[70px\]{min-width:70px}.min-w-\[600px\]{min-width:600px}.min-w-\[50px\]{min-width:50px}.min-w-\[100px\]{min-width:100px}.min-w-\[32px\]{min-width:32px}.min-w-\[8px\]{min-width:8px}.max-w-\[47rem\]{max-width:47rem}.max-w-\[580px\]{max-width:580px}.max-w-\[600px\]{max-width:600px}.max-w-min{max-width:-webkit-min-content;max-width:-moz-min-content;max-width:min-content}.max-w-\[292px\]{max-width:292px}.max-w-\[170px\]{max-width:170px}.shrink-0{flex-shrink:0}.grow-0{flex-grow:0}.grow{flex-grow:1}.basis-full{flex-basis:100%}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes progress{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes progress{0%{transform:translateX(-100%)}to{transform:translateX(0)}}.animate-slide{-webkit-animation:progress linear;animation:progress linear}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-5{gap:1.25rem}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-6{gap:1.5rem}.gap-4{gap:1rem}.gap-32{gap:8rem}.gap-11{gap:2.75rem}.gap-\[14px\]{gap:14px}.gap-2{gap:.5rem}.gap-3\.5{gap:.875rem}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.625rem*var(--tw-space-y-reverse));margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-3xl{border-radius:1.5rem}.rounded-l-full{border-bottom-left-radius:9999px;border-top-left-radius:9999px}.rounded-r-full{border-bottom-right-radius:9999px;border-top-right-radius:9999px}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-bl-3xl{border-bottom-left-radius:1.5rem}.rounded-br-3xl{border-bottom-right-radius:1.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-0{border-width:0}.border-x-0{border-left-width:0;border-right-width:0}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-solid{border-style:solid}.border-none{border-style:none}.border-main{--tw-border-opacity:1;border-color:rgb(240 244 240/var(--tw-border-opacity))}.border-main-divider{--tw-border-opacity:1;border-color:rgb(235 237 240/var(--tw-border-opacity))}.border-primary-main{border-color:var(--color-primary-main)}.border-transparent{border-color:transparent}.border-y-main-divider{--tw-border-opacity:1;border-bottom-color:rgb(235 237 240/var(--tw-border-opacity));border-top-color:rgb(235 237 240/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-main{--tw-bg-opacity:1;background-color:rgb(240 244 240/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-secondary-light{--tw-bg-opacity:1;background-color:rgb(245 247 249/var(--tw-bg-opacity))}.bg-inherit{background-color:inherit}.bg-primary-main{background-color:var(--color-primary-main)}.bg-main-divider{--tw-bg-opacity:1;background-color:rgb(235 237 240/var(--tw-bg-opacity))}.bg-secondary-dark{--tw-bg-opacity:1;background-color:rgb(226 228 229/var(--tw-bg-opacity))}.p-12{padding:3rem}.p-10{padding:2.5rem}.p-20{padding:5rem}.p-2{padding:.5rem}.p-11{padding:2.75rem}.p-\[10px\]{padding:10px}.p-\[26px\]{padding:26px}.p-9{padding:2.25rem}.p-0{padding:0}.px-0{padding-left:0;padding-right:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-12{padding-left:3rem;padding-right:3rem}.py-12{padding-bottom:3rem;padding-top:3rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-\[5px\]{padding-bottom:5px;padding-top:5px}.px-20{padding-left:5rem;padding-right:5rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-4{padding-left:1rem;padding-right:1rem}.pb-2{padding-bottom:.5rem}.pt-0{padding-top:0}.pl-11{padding-left:2.75rem}.pt-4{padding-top:1rem}.pr-\[7\.5rem\]{padding-right:7.5rem}.pr-28{padding-right:7rem}.pt-\[3px\]{padding-top:3px}.pt-\[5px\]{padding-top:5px}.pt-5{padding-top:1.25rem}.pb-8{padding-bottom:2rem}.pl-4{padding-left:1rem}.pl-\[170px\]{padding-left:170px}.text-left{text-align:left}.text-center{text-align:center}.font-sans{font-family:Ubuntu,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-title{font-size:2rem;line-height:2.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.375rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1.125rem}.text-title-lg{font-size:2.5rem;line-height:3rem}.text-title-sm{font-size:1.75rem;line-height:2.5rem}.text-title-xs{font-size:1.5rem;line-height:1.875rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.text-primary-text{--tw-text-opacity:1;color:rgb(28 28 28/var(--tw-text-opacity))}.text-secondary-text{--tw-text-opacity:1;color:rgb(125 126 127/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-main{--tw-text-opacity:1;color:rgb(240 244 240/var(--tw-text-opacity))}.text-primary-main{color:var(--color-primary-main)}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.shadow-\[0_8px_32px_0px_\#00000014\]{--tw-shadow:0 8px 32px 0px #00000014;--tw-shadow-colored:0 8px 32px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-1000{transition-duration:1s}.rotate-180{transform:rotate(180deg)}.-translate-x-full{transform:translateX(-100%)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-\[50px\]:after{content:var(--tw-content);top:50px}.after\:right-\[-50\%\]:after{content:var(--tw-content);right:-50%}.after\:h-0\.5:after{content:var(--tw-content);height:.125rem}.after\:h-0:after{content:var(--tw-content);height:0}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:bg-secondary-light:after{--tw-bg-opacity:1;background-color:rgb(245 247 249/var(--tw-bg-opacity));content:var(--tw-content)}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.last\:after\:content-none:last-child:after{--tw-content:none;content:var(--tw-content)}.visited\:text-secondary-text:visited{color:#7d7e7f}.hover\:bg-primary-hover:hover{background-color:var(--color-primary-hover)}.hover\:bg-secondary-hover:hover{background-color:var(--color-secondary-hover)}.hover\:text-primary-text:hover{--tw-text-opacity:1;color:rgb(28 28 28/var(--tw-text-opacity))}.hover\:text-primary-main:hover{color:var(--color-primary-main)}.hover\:text-secondary-hover:hover{color:var(--color-secondary-hover)}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.active\:bg-primary-active:active{background-color:var(--color-primary-active)}.active\:bg-secondary-active:active{background-color:var(--color-secondary-active)}.group:hover .group-hover\:text-primary-text{--tw-text-opacity:1;color:rgb(28 28 28/var(--tw-text-opacity))}@media (min-width:1280px) and (max-width:1535px){.xl\:w-\[220px\]{width:220px}.xl\:gap-8{gap:2rem}.xl\:gap-5{gap:1.25rem}}
1
+ @import "../fonts/ubuntu/ubuntu.css";[data-theme=pc]{--color-primary-main:#42ab44;--color-primary-hover:#248341;--color-primary-active:#245f34;--color-secondary-hover:#c5e2c6;--color-secondary-active:#d8f2d9}[data-theme=bc]{--color-primary-main:#83b83e;--color-primary-hover:#5c921d;--color-primary-active:#3c5e10;--color-secondary-hover:#e8f4d9;--color-secondary-active:#d8e3ca}[data-theme=eo]{--color-primary-main:#ddb63d;--color-primary-hover:#bb9727;--color-primary-active:#7e630c;--color-secondary-hover:#f1ecdd;--color-secondary-active:#e5dec7}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.top-4{top:1rem}.right-4{right:1rem}.bottom-0{bottom:0}.right-0{right:0}.left-0{left:0}.-bottom-2{bottom:-.5rem}.top-0{top:0}.z-10{z-index:10}.col-span-12{grid-column:span 12/span 12}.col-span-8{grid-column:span 8/span 8}.col-span-4{grid-column:span 4/span 4}.col-span-6{grid-column:span 6/span 6}.m-0{margin:0}.-mx-20{margin-left:-5rem;margin-right:-5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mt-9{margin-top:2.25rem}.mt-2{margin-top:.5rem}.mb-5{margin-bottom:1.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mb-6{margin-bottom:1.5rem}.mt-4{margin-top:1rem}.mt-7{margin-top:1.75rem}.mt-5{margin-top:1.25rem}.mb-2{margin-bottom:.5rem}.mt-auto{margin-top:auto}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mb-4{margin-bottom:1rem}.mb-2\.5{margin-bottom:.625rem}.mt-6{margin-top:1.5rem}.mt-2\.5{margin-top:.625rem}.ml-auto{margin-left:auto}.mr-5{margin-right:1.25rem}.mr-7{margin-right:1.75rem}.ml-2\.5{margin-left:.625rem}.box-border{box-sizing:border-box}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.h-\[70px\]{height:70px}.h-8{height:2rem}.h-full{height:100%}.h-\[90px\]{height:90px}.h-4{height:1rem}.h-\[50px\]{height:50px}.h-\[3px\]{height:3px}.h-\[220px\]{height:220px}.h-0\.5{height:.125rem}.h-0{height:0}.h-\[100px\]{height:100px}.h-\[1px\]{height:1px}.h-\[8px\]{height:8px}.h-\[2px\]{height:2px}.h-\[24px\]{height:24px}.min-h-\[70px\]{min-height:70px}.min-h-\[50px\]{min-height:50px}.min-h-\[100px\]{min-height:100px}.min-h-\[32px\]{min-height:32px}.min-h-\[8px\]{min-height:8px}.w-\[70px\]{width:70px}.w-full{width:100%}.w-8{width:2rem}.w-\[125px\]{width:125px}.w-\[90px\]{width:90px}.w-\[50px\]{width:50px}.w-\[220px\]{width:220px}.w-\[100px\]{width:100px}.w-\[276px\]{width:276px}.w-\[280px\]{width:280px}.w-\[235px\]{width:235px}.w-\[24px\]{width:24px}.w-\[8px\]{width:8px}.w-\[36px\]{width:36px}.w-10{width:2.5rem}.min-w-\[70px\]{min-width:70px}.min-w-\[600px\]{min-width:600px}.min-w-\[50px\]{min-width:50px}.min-w-\[100px\]{min-width:100px}.min-w-\[32px\]{min-width:32px}.min-w-\[8px\]{min-width:8px}.max-w-\[47rem\]{max-width:47rem}.max-w-\[580px\]{max-width:580px}.max-w-\[600px\]{max-width:600px}.max-w-min{max-width:-webkit-min-content;max-width:-moz-min-content;max-width:min-content}.max-w-\[292px\]{max-width:292px}.max-w-\[170px\]{max-width:170px}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow-0{flex-grow:0}.grow{flex-grow:1}.basis-full{flex-basis:100%}.basis-0{flex-basis:0px}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes progress{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes progress{0%{transform:translateX(-100%)}to{transform:translateX(0)}}.animate-slide{-webkit-animation:progress linear;animation:progress linear}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-5{gap:1.25rem}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-6{gap:1.5rem}.gap-4{gap:1rem}.gap-32{gap:8rem}.gap-11{gap:2.75rem}.gap-\[14px\]{gap:14px}.gap-2{gap:.5rem}.gap-3\.5{gap:.875rem}.gap-x-24{-moz-column-gap:6rem;column-gap:6rem}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-3xl{border-radius:1.5rem}.rounded-l-full{border-bottom-left-radius:9999px;border-top-left-radius:9999px}.rounded-r-full{border-bottom-right-radius:9999px;border-top-right-radius:9999px}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-bl-3xl{border-bottom-left-radius:1.5rem}.rounded-br-3xl{border-bottom-right-radius:1.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-0{border-width:0}.border-x-0{border-left-width:0;border-right-width:0}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-solid{border-style:solid}.border-none{border-style:none}.border-main{--tw-border-opacity:1;border-color:rgb(240 244 240/var(--tw-border-opacity))}.border-main-divider{--tw-border-opacity:1;border-color:rgb(235 237 240/var(--tw-border-opacity))}.border-primary-main{border-color:var(--color-primary-main)}.border-transparent{border-color:transparent}.border-y-main-divider{--tw-border-opacity:1;border-bottom-color:rgb(235 237 240/var(--tw-border-opacity));border-top-color:rgb(235 237 240/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-main{--tw-bg-opacity:1;background-color:rgb(240 244 240/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-secondary-light{--tw-bg-opacity:1;background-color:rgb(245 247 249/var(--tw-bg-opacity))}.bg-inherit{background-color:inherit}.bg-primary-main{background-color:var(--color-primary-main)}.bg-main-divider{--tw-bg-opacity:1;background-color:rgb(235 237 240/var(--tw-bg-opacity))}.bg-secondary-dark{--tw-bg-opacity:1;background-color:rgb(226 228 229/var(--tw-bg-opacity))}.p-12{padding:3rem}.p-10{padding:2.5rem}.p-20{padding:5rem}.p-2{padding:.5rem}.p-11{padding:2.75rem}.p-\[10px\]{padding:10px}.p-9{padding:2.25rem}.p-\[26px\]{padding:26px}.p-0{padding:0}.px-0{padding-left:0;padding-right:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-12{padding-left:3rem;padding-right:3rem}.py-12{padding-bottom:3rem;padding-top:3rem}.px-\[88px\]{padding-left:88px;padding-right:88px}.px-3{padding-left:.75rem;padding-right:.75rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-\[5px\]{padding-bottom:5px;padding-top:5px}.px-20{padding-left:5rem;padding-right:5rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-4{padding-left:1rem;padding-right:1rem}.pb-2{padding-bottom:.5rem}.pt-0{padding-top:0}.pl-11{padding-left:2.75rem}.pt-4{padding-top:1rem}.pr-\[7\.5rem\]{padding-right:7.5rem}.pt-1{padding-top:.25rem}.pr-28{padding-right:7rem}.pt-\[3px\]{padding-top:3px}.pt-\[5px\]{padding-top:5px}.pt-5{padding-top:1.25rem}.pb-8{padding-bottom:2rem}.pl-4{padding-left:1rem}.pl-\[170px\]{padding-left:170px}.text-left{text-align:left}.text-center{text-align:center}.font-sans{font-family:Ubuntu,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-title{font-size:2rem;line-height:2.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.375rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1.125rem}.text-title-lg{font-size:2.5rem;line-height:3rem}.text-title-sm{font-size:1.75rem;line-height:2.5rem}.text-title-xs{font-size:1.5rem;line-height:1.875rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.text-primary-text{--tw-text-opacity:1;color:rgb(28 28 28/var(--tw-text-opacity))}.text-secondary-text{--tw-text-opacity:1;color:rgb(125 126 127/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-main{--tw-text-opacity:1;color:rgb(240 244 240/var(--tw-text-opacity))}.text-primary-main{color:var(--color-primary-main)}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.shadow-\[0_8px_32px_0px_\#00000014\]{--tw-shadow:0 8px 32px 0px #00000014;--tw-shadow-colored:0 8px 32px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.duration-1000{transition-duration:1s}.rotate-180{transform:rotate(180deg)}.-translate-x-full{transform:translateX(-100%)}.visited\:text-secondary-text:visited{color:#7d7e7f}.hover\:bg-primary-hover:hover{background-color:var(--color-primary-hover)}.hover\:bg-secondary-hover:hover{background-color:var(--color-secondary-hover)}.hover\:text-primary-text:hover{--tw-text-opacity:1;color:rgb(28 28 28/var(--tw-text-opacity))}.hover\:text-primary-main:hover{color:var(--color-primary-main)}.hover\:text-secondary-hover:hover{color:var(--color-secondary-hover)}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.active\:bg-primary-active:active{background-color:var(--color-primary-active)}.active\:bg-secondary-active:active{background-color:var(--color-secondary-active)}.group:hover .group-hover\:text-primary-text{--tw-text-opacity:1;color:rgb(28 28 28/var(--tw-text-opacity))}@media (min-width:1280px) and (max-width:1535px){.xl\:w-\[220px\]{width:220px}.xl\:gap-8{gap:2rem}.xl\:gap-5{gap:1.25rem}}
package/lib/index.d.ts CHANGED
@@ -7,3 +7,4 @@ export { ContentPage } from './ContentPage';
7
7
  export { Blocks } from './Blocks';
8
8
  export { LikeAPI } from './api/LikeAPI';
9
9
  export * as url from './utils/url';
10
+ export { joinList } from './utils/joinList';
package/lib/index.js CHANGED
@@ -4,4 +4,5 @@ export { ContentPage } from './ContentPage.js';
4
4
  export { Blocks } from './Blocks.js';
5
5
  export { LikeAPI } from './api/LikeAPI.js';
6
6
  export * as url from './utils/url.js';
7
+ export { joinList } from './utils/joinList.js';
7
8
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function joinList<E>(sep: E): (list: E[]) => E[];
@@ -0,0 +1,4 @@
1
+ export function joinList(sep) {
2
+ return (list) => list.reduce((acc, el, i) => (acc.length ? acc.concat({ ...sep, key: i }, el) : [el]), []);
3
+ }
4
+ //# sourceMappingURL=joinList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joinList.js","sourceRoot":"","sources":["../../src/utils/joinList.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAI,GAAM;IAChC,OAAO,CAAC,IAAI,EAAE,EAAE,CACd,IAAI,CAAC,MAAM,CACT,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACxE,EAAS,CACV,CAAC;AACN,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redneckz/wildless-cms-uni-blocks",
3
- "version": "0.2.48",
3
+ "version": "0.2.49",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/Blocks.ts CHANGED
@@ -8,6 +8,7 @@ import { ProductBlock } from './ProductBlock';
8
8
  import { ProductBlockInnerContent } from './ProductBlockInner';
9
9
  import { ProductGallery, ProductGalleryContent } from './ProductGallery';
10
10
  import { StepsBlock, StepsBlockContent } from './StepsBlock';
11
+ import { ProductTile, ProductTileContent } from './ProductTile';
11
12
  import { Tile, TileContent } from './Tile';
12
13
 
13
14
  export const Blocks = {
@@ -15,6 +16,7 @@ export const Blocks = {
15
16
  Footer,
16
17
  Placeholder,
17
18
  Tile,
19
+ ProductTile,
18
20
  ProductBlock,
19
21
  StepsBlock,
20
22
  BenefitsBlock,
@@ -28,6 +30,7 @@ export type BlockContent =
28
30
  | FooterContent
29
31
  | PlaceholderContent
30
32
  | TileContent
33
+ | ProductTileContent
31
34
  | ProductBlockInnerContent
32
35
  | StepsBlockContent
33
36
  | BenefitsBlockContent
@@ -60,6 +60,7 @@
60
60
  "src": "money-1.png",
61
61
  "title": "деньги",
62
62
  "format": "webp",
63
+ "alt": "Кредит наличными",
63
64
  "size": {
64
65
  "width": 220,
65
66
  "height": 220
@@ -353,6 +354,145 @@
353
354
  "title": "Неизвестный блок"
354
355
  }
355
356
  },
357
+ {
358
+ "type": "ProductTile",
359
+ "style": ["col-span-6"],
360
+ "content": {
361
+ "title": "Акция! “Кредит На все, что хочется!”",
362
+ "description": "Потребительский кредит на любые цели, без залога и поручительства",
363
+ "benefits": [
364
+ {
365
+ "label": "Кредитный лимит",
366
+ "description": "до 5 млн Р"
367
+ },
368
+ {
369
+ "label": "Процентная ставка",
370
+ "description": "от 12,5%"
371
+ },
372
+ {
373
+ "label": "Срок кредитования",
374
+ "description": "до 5 лет"
375
+ }
376
+ ],
377
+ "button": {
378
+ "text": "Подробнее",
379
+ "href": "/credit-cards",
380
+ "version": "secondary"
381
+ },
382
+ "image": {
383
+ "src": "card-with-diamond.png",
384
+ "alt": "Кредиты в РСХБ",
385
+ "format": "webp",
386
+ "size": {
387
+ "width": 220,
388
+ "height": 220
389
+ }
390
+ }
391
+ }
392
+ },
393
+ {
394
+ "type": "ProductTile",
395
+ "style": ["col-span-6"],
396
+ "content": {
397
+ "title": "Акция! “Пенсионный кредит”",
398
+ "description": "Потребительский кредит на любые цели, без залога и поручительства",
399
+ "benefits": [
400
+ {
401
+ "label": "Кредитный лимит",
402
+ "description": "до 3 млн Р"
403
+ },
404
+ {
405
+ "label": "Процентная ставка",
406
+ "description": "от 12,5%"
407
+ },
408
+ {
409
+ "label": "Срок кредитования",
410
+ "description": "до 3 лет"
411
+ }
412
+ ],
413
+ "button": {
414
+ "text": "Подробнее",
415
+ "href": "/credit-cards",
416
+ "target": "_blank",
417
+ "version": "secondary"
418
+ },
419
+ "image": {
420
+ "src": "letter-with-money.png",
421
+ "alt": "Пенсионный кредит в РСХБ",
422
+ "format": "webp",
423
+ "size": {
424
+ "width": 220,
425
+ "height": 220
426
+ }
427
+ }
428
+ }
429
+ },
430
+ {
431
+ "type": "ProductTile",
432
+ "style": ["col-span-8"],
433
+ "content": {
434
+ "title": "Кредит под залог недвижимости",
435
+ "description": "Без переоформления залогой недвижимости на банк",
436
+ "benefits": [
437
+ {
438
+ "label": "Кредитный лимит",
439
+ "description": "до 10 млн Р"
440
+ },
441
+ {
442
+ "label": "Процентная ставка",
443
+ "description": "от 21,5%"
444
+ },
445
+ {
446
+ "label": "Срок кредитования",
447
+ "description": "до 10 лет"
448
+ }
449
+ ],
450
+ "button": {
451
+ "text": "Подробнее",
452
+ "href": "/credit-cards",
453
+ "target": "_blank",
454
+ "version": "secondary"
455
+ },
456
+ "image": {
457
+ "src": "building.png",
458
+ "alt": "Кредит под залог недвижимости в РСХБ",
459
+ "format": "webp",
460
+ "size": {
461
+ "width": 220,
462
+ "height": 220
463
+ }
464
+ }
465
+ }
466
+ },
467
+ {
468
+ "type": "ProductTile",
469
+ "style": ["col-span-4"],
470
+ "version": "secondary",
471
+ "content": {
472
+ "title": "Кредит пенсионный",
473
+ "description": "Для людей в возрасте до 75 лет",
474
+ "benefits": [
475
+ {
476
+ "label": "Кредитный лимит",
477
+ "description": "до 3 млн Р"
478
+ },
479
+ {
480
+ "label": "Процентная ставка",
481
+ "description": "от 16,8%"
482
+ },
483
+ {
484
+ "label": "Срок кредитования",
485
+ "description": "до 150 лет"
486
+ }
487
+ ],
488
+ "button": {
489
+ "text": "Подробнее",
490
+ "href": "/credit-cards",
491
+ "target": "_blank",
492
+ "version": "secondary"
493
+ }
494
+ }
495
+ },
356
496
  {
357
497
  "type": "Footer",
358
498
  "style": ["col-span-12"],
@@ -1,5 +1,5 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import { ContentPageContext } from '../ContentPageContext';
2
+ import { Router, HandlerDecorator } from '../ContentPageContext';
3
3
  import { mergeTopItems } from '../mergeTopItems';
4
4
  import type { LinkContent, TopMenuItem, UniBlockProps } from '../types';
5
5
  import { useLink } from '../useLink';
@@ -11,17 +11,19 @@ export interface SitemapProps extends UniBlockProps {
11
11
  export const Sitemap = JSX<SitemapProps>(({ className, items, context }) => {
12
12
  const sitemap = useSitemap(context.useAsyncData);
13
13
  const mergedItems = mergeTopItems(sitemap.topItems, items);
14
+ const linkParams = {
15
+ router: context.useRouter(),
16
+ handlerDecorator: context.handlerDecorator,
17
+ };
14
18
 
15
19
  return (
16
20
  <div className={`flex items-start justify-start gap-11 xl:gap-5 ${className || ''}`}>
17
- {mergedItems?.map((_, i) => renderColumn(_, i, context))}
21
+ {mergedItems?.map((_, i) => renderColumn(_, i, linkParams))}
18
22
  </div>
19
23
  );
20
24
  });
21
25
 
22
- const renderColumn = (c: TopMenuItem, index: number, context: ContentPageContext) => {
23
- const router = context.useRouter();
24
- const { handlerDecorator } = context;
26
+ const renderColumn = (c: TopMenuItem, index: number, { router, handlerDecorator }) => {
25
27
  const { text, href, items, target } = c;
26
28
 
27
29
  return (
@@ -7,6 +7,7 @@ import type { ButtonProps } from './ui-kit/Button';
7
7
  import { Button } from './ui-kit/Button';
8
8
  import { Breadcrumb, BreadcrumbProps } from './ui-kit/Breadcrumb';
9
9
  import { useLink } from './useLink';
10
+ import { joinList } from './utils/joinList';
10
11
 
11
12
  const ICONS = { EmptyWalletIcon, PercentageSquareIcon, CalendarIcon };
12
13
 
@@ -32,7 +33,7 @@ export const ProductBlockInner = JSX<ProductBlockInnerProps>(
32
33
  <div className="flex flex-col">
33
34
  {breadcrumbs?.length ? (
34
35
  <div className="text-xs mb-6">
35
- {join(<span className="text-secondary-text mx-2">/</span>)(
36
+ {joinList(<span className="text-secondary-text mx-2">/</span>)(
36
37
  breadcrumbs.map((breadcrumb, i) => (
37
38
  <Breadcrumb
38
39
  key={String(i)}
@@ -57,9 +58,9 @@ export const ProductBlockInner = JSX<ProductBlockInnerProps>(
57
58
  <div className="flex gap-6 mt-7">{benefits.map(renderBenefit)}</div>
58
59
  ) : null}
59
60
  {items?.length ? (
60
- <section className="space-y-2.5 mt-5" role="list">
61
+ <section className="mt-5" role="list">
61
62
  {items.map((_, i) => (
62
- <BlockItem key={String(i)} text={_} />
63
+ <BlockItem className="mb-2" key={String(i)} text={_} />
63
64
  ))}
64
65
  </section>
65
66
  ) : null}
@@ -29,16 +29,14 @@ export const ProductGallery = JSX<ProductGalleryProps>(
29
29
  return (
30
30
  <section className={`font-sans bg-white overflow-hidden w-100 ${className || ''}`}>
31
31
  <div
32
- className={`flex transition duration-1000`}
32
+ className={`flex duration-1000`}
33
33
  style={{ transform: `translateX(-${activeSlideIndex}00%)` }}
34
34
  role="list"
35
35
  >
36
36
  {galleryBlocks.map((_, i) => renderProductBlock(_, i, context))}
37
37
  </div>
38
38
 
39
- <div
40
- className={`border-0 border-t border-solid border-main-divider grid grid-cols-${galleryNav.length}`}
41
- >
39
+ <div className={`border-t border-solid border-main-divider flex`}>
42
40
  {galleryNav.map((slide, i) =>
43
41
  renderNavButton({
44
42
  slide,
@@ -73,7 +71,7 @@ function renderNavButton({ slide, i, activeSlideIndex, onClick, duration }) {
73
71
  type="button"
74
72
  key={String(i)}
75
73
  onClick={onClick}
76
- className={`group relative overflow-hidden border-0 bg-inherit cursor-pointer text-left px-0 py-4`}
74
+ className={`group relative overflow-hidden border-0 bg-inherit cursor-pointer text-left px-0 py-4 grow basis-0`}
77
75
  >
78
76
  <div className="border-0 border-r border-solid border-main-divider px-6">
79
77
  <div className={`text-sm font-medium group-hover:text-primary-text ${btnTitleClassName}`}>
@@ -0,0 +1,147 @@
1
+ import { context } from './setup-fixture';
2
+
3
+ import { ProductTile } from './ProductTile';
4
+ import { Picture } from './types';
5
+
6
+ const cardWithMoney: Picture = {
7
+ src: 'card-with-diamond.png',
8
+ alt: 'Кредиты в РСХБ',
9
+ format: 'webp',
10
+ };
11
+
12
+ const letterWithMoney: Picture = {
13
+ src: 'letter-with-money.png',
14
+ alt: 'Пенсионный кредит в РСХБ',
15
+ format: 'webp',
16
+ };
17
+
18
+ const building: Picture = {
19
+ src: 'building.png',
20
+ alt: 'Кредит под залог недвижимости в РСХБ',
21
+ format: 'webp',
22
+ };
23
+
24
+ export default {
25
+ credit: (
26
+ <div className="grid grid-cols-12">
27
+ <ProductTile
28
+ context={context}
29
+ className="col-span-6"
30
+ title="Акция! “Кредит На все, что хочется!”"
31
+ description="Потребительский кредит на любые цели, без залога и поручительства"
32
+ benefits={[
33
+ {
34
+ label: 'Кредитный лимит',
35
+ description: 'до 5 млн Р',
36
+ },
37
+ {
38
+ label: 'Процентная ставка',
39
+ description: 'от 12,5%',
40
+ },
41
+ {
42
+ label: 'Срок кредитования',
43
+ description: 'до 5 лет',
44
+ },
45
+ ]}
46
+ button={{
47
+ text: 'Подробнее',
48
+ href: '/credit-cards',
49
+ version: 'secondary',
50
+ }}
51
+ image={cardWithMoney}
52
+ />
53
+ </div>
54
+ ),
55
+ pension: (
56
+ <div className="grid grid-cols-12">
57
+ <ProductTile
58
+ context={context}
59
+ className="col-span-6"
60
+ title="Акция! “Пенсионный кредит”"
61
+ description={'Потребительский кредит на любые цели, без залога и поручительства'}
62
+ benefits={[
63
+ {
64
+ label: 'Кредитный лимит',
65
+ description: 'до 3 млн Р',
66
+ },
67
+ {
68
+ label: 'Процентная ставка',
69
+ description: 'от 12,5%',
70
+ },
71
+ {
72
+ label: 'Срок кредитования',
73
+ description: 'до 3 лет',
74
+ },
75
+ ]}
76
+ button={{
77
+ href: 'https://rshb.ru',
78
+ text: 'Подробнее',
79
+ target: '_blank',
80
+ version: 'secondary',
81
+ }}
82
+ image={letterWithMoney}
83
+ />
84
+ </div>
85
+ ),
86
+ 'credit-card': (
87
+ <div className="grid grid-cols-12">
88
+ <ProductTile
89
+ context={context}
90
+ className="col-span-8"
91
+ title="Кредит под залог недвижимости"
92
+ description={'Без переоформления залогой недвижимости на банк'}
93
+ benefits={[
94
+ {
95
+ label: 'Кредитный лимит',
96
+ description: 'до 10 млн Р',
97
+ },
98
+ {
99
+ label: 'Процентная ставка',
100
+ description: 'от 21,5%',
101
+ },
102
+ {
103
+ label: 'Срок кредитования',
104
+ description: 'до 10 лет',
105
+ },
106
+ ]}
107
+ button={{
108
+ href: 'https://rshb.ru',
109
+ text: 'Подробнее',
110
+ target: '_blank',
111
+ version: 'secondary',
112
+ }}
113
+ image={building}
114
+ />
115
+ </div>
116
+ ),
117
+ 'pension-credit': (
118
+ <div className="grid grid-cols-12">
119
+ <ProductTile
120
+ context={context}
121
+ className="col-span-4"
122
+ title="Кредит пенсионный"
123
+ description={'Для людей в возрасте до 75 лет'}
124
+ benefits={[
125
+ {
126
+ label: 'Кредитный лимит',
127
+ description: 'до 3 млн Р',
128
+ },
129
+ {
130
+ label: 'Процентная ставка',
131
+ description: 'от 16,8%',
132
+ },
133
+ {
134
+ label: 'Срок кредитования',
135
+ description: 'до 5 лет',
136
+ },
137
+ ]}
138
+ button={{
139
+ href: 'https://rshb.ru',
140
+ text: 'Подробнее',
141
+ target: '_blank',
142
+ version: 'secondary',
143
+ }}
144
+ />
145
+ </div>
146
+ ),
147
+ };
@@ -0,0 +1,95 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import type { ContentPageContext } from './ContentPageContext';
3
+ import { Img } from './Img';
4
+ import { BlockVersion, Picture } from './types';
5
+ import type { ButtonProps } from './ui-kit/Button';
6
+ import { Button } from './ui-kit/Button';
7
+ import { useLink } from './useLink';
8
+ import type { Benefit } from './types';
9
+
10
+ export interface ProductTileContent {
11
+ title?: string;
12
+ description?: string;
13
+ benefits?: Benefit[];
14
+ image?: Picture;
15
+ button?: ButtonProps;
16
+ version?: BlockVersion;
17
+ }
18
+
19
+ export interface ProductTileProps extends ProductTileContent {
20
+ className?: string;
21
+ context: ContentPageContext;
22
+ }
23
+
24
+ const productTileStyleMap: Record<BlockVersion, string> = {
25
+ primary: 'bg-white text-primary-text',
26
+ secondary: 'bg-primary-main text-white',
27
+ };
28
+
29
+ export const ProductTile = JSX<ProductTileProps>(
30
+ ({ className, context, title, description, button, image, benefits, version = 'primary' }) => {
31
+ const router = context.useRouter();
32
+ const { handlerDecorator } = context;
33
+ return (
34
+ <section className={`font-sans p-9 ${className || ''} ${productTileStyleMap[version]}`}>
35
+ <div className="flex flex-col w-full">
36
+ {title && (
37
+ <h3 className="font-medium text-title-sm m-0 whitespace-pre-wrap max-w-[600px]">
38
+ {title}
39
+ </h3>
40
+ )}
41
+ {description && (
42
+ <div className="font-normal text-base max-w-[600px] mt-4">{description}</div>
43
+ )}
44
+ <div className="flex mt-5">
45
+ <div className="grow flex flex-col">
46
+ <div className="flex">
47
+ {benefits?.length ? (
48
+ <div className="mr-8">{benefits.map(renderBenefitDescription)}</div>
49
+ ) : null}
50
+ {benefits?.length ? (
51
+ <div className="pt-1">
52
+ {benefits.map((_, i) => renderBenefitLabel(_, i, version))}
53
+ </div>
54
+ ) : null}
55
+ </div>
56
+ {button?.text && (
57
+ <div className="mt-auto">
58
+ <Button
59
+ className="mt-8"
60
+ {...useLink({ router, handlerDecorator }, button)}
61
+ version="secondary"
62
+ />
63
+ </div>
64
+ )}
65
+ </div>
66
+ {image && (
67
+ <div className="mt-auto flex-none h-[220px] w-[220px]">
68
+ <Img image={image} />
69
+ </div>
70
+ )}
71
+ </div>
72
+ </div>
73
+ </section>
74
+ );
75
+ },
76
+ );
77
+
78
+ function renderBenefitLabel(benefit: Benefit, i: number, version = 'primary') {
79
+ const labelStyleMap: Record<BlockVersion, string> = {
80
+ primary: 'text-secondary-text',
81
+ secondary: 'text-white',
82
+ };
83
+ return (
84
+ <div key={String(i)} className={`text-sm mb-4 ${labelStyleMap[version]}`}>
85
+ {benefit.label}
86
+ </div>
87
+ );
88
+ }
89
+ function renderBenefitDescription(benefit: Benefit, i: number) {
90
+ return (
91
+ <div key={String(i)} className="text-xl font-medium mb-2.5">
92
+ {benefit.description}
93
+ </div>
94
+ );
95
+ }
@@ -1,6 +1,7 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import { NewDocIcon, PassSendIcon, ActualBalanceIcon } from './Icons/index';
3
3
  import type { UniBlockProps } from './types';
4
+ import { joinList } from './utils/joinList';
4
5
 
5
6
  const ICONS = { NewDocIcon, PassSendIcon, ActualBalanceIcon };
6
7
  export interface Step {
@@ -24,22 +25,35 @@ export const StepsBlock = JSX<StepsBlockProps>(({ className, title, steps }) =>
24
25
  }`}
25
26
  >
26
27
  <h2 className="font-medium text-title m-0 max-w-[47rem] text-center">{title}</h2>
27
- {steps?.length ? <div className="flex mt-9">{steps.map(renderStep)}</div> : null}
28
+ {steps?.length ? (
29
+ <div>
30
+ <div className="flex mt-9 items-center px-[88px]">
31
+ {joinList(<div className="h-0.5 w-full bg-secondary-light"></div>)(
32
+ steps.map((step, i) => renderStepIcon(step, i)),
33
+ )}
34
+ </div>
35
+ <div className="flex mt-9 justify-between gap-x-24">{steps.map(renderStepTitle)}</div>
36
+ </div>
37
+ ) : null}
28
38
  </section>
29
39
  );
30
40
  });
31
41
 
32
- const renderStep = (step: Step, i: number) => {
42
+ const renderStepIcon = (step: Step, i: number) => {
33
43
  return (
34
- <div
35
- key={String(i)}
36
- className="flex flex-col items-center text-center px-12 relative after:content-[''] last:after:content-none after:bg-secondary-light after:absolute after:top-[50px] after:h-0.5 after:w-full after:right-[-50%]"
37
- >
44
+ <div key={String(i)} className="flex flex-col items-center text-center relative">
38
45
  <div className="h-[100px] w-[100px] min-w-[100px] min-h-[100px] bg-secondary-light rounded-full p-[26px] box-border z-10">
39
46
  {(step.icon && ICONS[step.icon]?.({ width: 48, height: 48 })) || (
40
47
  <span className="font-medium text-title-sm text-secondary-text">{i + 1}</span>
41
48
  )}
42
49
  </div>
50
+ </div>
51
+ );
52
+ };
53
+
54
+ const renderStepTitle = (step: Step, i: number) => {
55
+ return (
56
+ <div key={String(i)} className="flex flex-col items-center text-center relative w-[276px]">
43
57
  <div className="max-w-min">
44
58
  <h5 className="font-medium text-xl m-0 mt-4 whitespace-nowrap px-3">{step.label}</h5>
45
59
  {step.description && (
package/src/index.ts CHANGED
@@ -17,3 +17,4 @@ export { Blocks } from './Blocks';
17
17
  export { LikeAPI } from './api/LikeAPI';
18
18
 
19
19
  export * as url from './utils/url';
20
+ export { joinList } from './utils/joinList';