@redneckz/wildless-cms-uni-blocks 0.2.62 → 0.2.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Blocks.d.ts +3 -1
- package/dist/Blocks.js +2 -0
- package/dist/Blocks.js.map +1 -1
- package/dist/Gallery.d.ts +16 -0
- package/dist/Gallery.js +37 -0
- package/dist/Gallery.js.map +1 -0
- package/dist/ui-kit/ArrowButton.d.ts +6 -0
- package/dist/ui-kit/ArrowButton.js +8 -0
- package/dist/ui-kit/ArrowButton.js.map +1 -0
- package/dist/ui-kit/Icon.d.ts +1 -1
- package/dist/ui-kit/Icon.js.map +1 -1
- package/lib/Blocks.d.ts +3 -1
- package/lib/Blocks.js +2 -0
- package/lib/Blocks.js.map +1 -1
- package/lib/Gallery.d.ts +16 -0
- package/lib/Gallery.js +35 -0
- package/lib/Gallery.js.map +1 -0
- package/lib/common.css +1 -1
- package/lib/ui-kit/ArrowButton.d.ts +6 -0
- package/lib/ui-kit/ArrowButton.js +6 -0
- package/lib/ui-kit/ArrowButton.js.map +1 -0
- package/lib/ui-kit/Icon.d.ts +1 -1
- package/lib/ui-kit/Icon.js.map +1 -1
- package/package.json +3 -3
- package/src/Blocks.ts +4 -1
- package/src/Gallery.fixture.tsx +213 -0
- package/src/Gallery.tsx +132 -0
- package/src/ui-kit/ArrowButton.tsx +34 -0
- package/src/ui-kit/Icon.tsx +2 -1
package/dist/Blocks.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { ProductTileContent } from './ProductTile';
|
|
|
11
11
|
import { BaseTileContent } from './BaseTile';
|
|
12
12
|
import { PromoTileContent } from './PromoTile';
|
|
13
13
|
import { TextBlockContent } from './TextBlock';
|
|
14
|
+
import { GalleryContent } from './Gallery';
|
|
14
15
|
export declare const Blocks: {
|
|
15
16
|
Header: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./Header/Header").HeaderProps, any>, context?: any) => any;
|
|
16
17
|
Footer: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./Footer/Footer").FooterProps, any>, context?: any) => any;
|
|
@@ -25,5 +26,6 @@ export declare const Blocks: {
|
|
|
25
26
|
ProductGallery: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./ProductGallery").ProductGalleryProps, any>, context?: any) => any;
|
|
26
27
|
ExchangeRateTile: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./ExchangeRateTile").ExchangeRateTileProps, any>, context?: any) => any;
|
|
27
28
|
MobileAppTile: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./MobileAppTile").MobileAppTileProps, any>, context?: any) => any;
|
|
29
|
+
Gallery: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./Gallery").GalleryProps, any>, context?: any) => any;
|
|
28
30
|
};
|
|
29
|
-
export declare type BlockContent = HeaderContent | FooterContent | PlaceholderContent | BaseTileContent | TextBlockContent | ProductTileContent | PromoTileContent | ProductBlockInnerContent | StepsBlockContent | BenefitsBlockContent | ProductGalleryContent | ExchangeRateTileContent | MobileAppTileContent;
|
|
31
|
+
export declare type BlockContent = HeaderContent | FooterContent | PlaceholderContent | BaseTileContent | TextBlockContent | ProductTileContent | PromoTileContent | ProductBlockInnerContent | StepsBlockContent | BenefitsBlockContent | ProductGalleryContent | ExchangeRateTileContent | MobileAppTileContent | GalleryContent;
|
package/dist/Blocks.js
CHANGED
|
@@ -13,6 +13,7 @@ const ProductTile_1 = require("./ProductTile");
|
|
|
13
13
|
const PromoTile_1 = require("./PromoTile");
|
|
14
14
|
const Tile_1 = require("./Tile");
|
|
15
15
|
const TextBlock_1 = require("./TextBlock");
|
|
16
|
+
const Gallery_1 = require("./Gallery");
|
|
16
17
|
exports.Blocks = {
|
|
17
18
|
Header: index_2.Header,
|
|
18
19
|
Footer: index_1.Footer,
|
|
@@ -27,5 +28,6 @@ exports.Blocks = {
|
|
|
27
28
|
ProductGallery: ProductGallery_1.ProductGallery,
|
|
28
29
|
ExchangeRateTile: ExchangeRateTile_1.ExchangeRateTile,
|
|
29
30
|
MobileAppTile: MobileAppTile_1.MobileAppTile,
|
|
31
|
+
Gallery: Gallery_1.Gallery,
|
|
30
32
|
};
|
|
31
33
|
//# sourceMappingURL=Blocks.js.map
|
package/dist/Blocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Blocks.js","sourceRoot":"","sources":["../src/Blocks.ts"],"names":[],"mappings":";;AAAA,mDAAsE;AACtE,yDAA+E;AAC/E,0CAAuD;AACvD,0CAAuD;AACvD,mDAAsE;AACtE,+CAAgE;AAChE,iDAA8C;AAE9C,qDAAyE;AACzE,6CAA6D;AAC7D,+CAAgE;AAEhE,2CAA0D;AAC1D,iCAA8B;AAC9B,2CAA0D;
|
|
1
|
+
{"version":3,"file":"Blocks.js","sourceRoot":"","sources":["../src/Blocks.ts"],"names":[],"mappings":";;AAAA,mDAAsE;AACtE,yDAA+E;AAC/E,0CAAuD;AACvD,0CAAuD;AACvD,mDAAsE;AACtE,+CAAgE;AAChE,iDAA8C;AAE9C,qDAAyE;AACzE,6CAA6D;AAC7D,+CAAgE;AAEhE,2CAA0D;AAC1D,iCAA8B;AAC9B,2CAA0D;AAC1D,uCAAoD;AAEvC,QAAA,MAAM,GAAG;IACpB,MAAM,EAAN,cAAM;IACN,MAAM,EAAN,cAAM;IACN,WAAW,EAAX,yBAAW;IACX,IAAI,EAAJ,WAAI;IACJ,SAAS,EAAT,qBAAS;IACT,SAAS,EAAT,qBAAS;IACT,WAAW,EAAX,yBAAW;IACX,YAAY,EAAZ,2BAAY;IACZ,UAAU,EAAV,uBAAU;IACV,aAAa,EAAb,6BAAa;IACb,cAAc,EAAd,+BAAc;IACd,gBAAgB,EAAhB,mCAAgB;IAChB,aAAa,EAAb,6BAAa;IACb,OAAO,EAAP,iBAAO;CACR,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Picture, UniBlockProps } from './types';
|
|
2
|
+
export interface GalleryCard {
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
image?: Picture;
|
|
6
|
+
href?: string;
|
|
7
|
+
items?: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface GalleryContent {
|
|
10
|
+
title?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
cards?: GalleryCard[];
|
|
13
|
+
}
|
|
14
|
+
export interface GalleryProps extends GalleryContent, UniBlockProps {
|
|
15
|
+
}
|
|
16
|
+
export declare const Gallery: (props: import("@redneckz/uni-jsx").PropsWithChildren<GalleryProps, any>, context?: any) => any;
|
package/dist/Gallery.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.Gallery = void 0;
|
|
3
|
+
const jsx_runtime_1 = require("@redneckz/uni-jsx/jsx-runtime");
|
|
4
|
+
const uni_jsx_1 = require("@redneckz/uni-jsx");
|
|
5
|
+
const Img_1 = require("./Img");
|
|
6
|
+
const ArrowButton_1 = require("./ui-kit/ArrowButton");
|
|
7
|
+
const BlockItem_1 = require("./ui-kit/BlockItem");
|
|
8
|
+
const Button_1 = require("./ui-kit/Button");
|
|
9
|
+
const Title_1 = require("./ui-kit/Title");
|
|
10
|
+
const CARD_WIDTH = 384;
|
|
11
|
+
const GALLERY_LENGTH_FOR_SCROLL = 3;
|
|
12
|
+
exports.Gallery = (0, uni_jsx_1.JSX)(({ title, description, context, cards = [], className }) => {
|
|
13
|
+
const [activeCardIndex, setActiveCardIndex] = context.useState(0);
|
|
14
|
+
function handleNextClick() {
|
|
15
|
+
setActiveCardIndex(activeCardIndex + 1);
|
|
16
|
+
}
|
|
17
|
+
function handlePrevClick() {
|
|
18
|
+
setActiveCardIndex(activeCardIndex - 1);
|
|
19
|
+
}
|
|
20
|
+
const isGalleryScrollAvailable = cards?.length > GALLERY_LENGTH_FOR_SCROLL;
|
|
21
|
+
const showNextButton = isGalleryScrollAvailable && cards?.length - activeCardIndex > GALLERY_LENGTH_FOR_SCROLL;
|
|
22
|
+
const showPrevButton = isGalleryScrollAvailable && activeCardIndex > 0;
|
|
23
|
+
return ((0, jsx_runtime_1.jsxs)("section", { className: `relative font-sans text-primary-text bg-white p-12 overflow-hidden ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center mb-8", children: [(0, jsx_runtime_1.jsx)(Title_1.Title, { className: "font-medium m-0 text-centers", children: title }), description ? ((0, jsx_runtime_1.jsx)("div", { className: "font-normal text-base max-w-[600px] mt-3", children: description })) : null] }), (0, jsx_runtime_1.jsx)("div", {
|
|
24
|
+
// Need to place all cards at the center if count of cards less than 4
|
|
25
|
+
className: `flex {${cards?.length <= GALLERY_LENGTH_FOR_SCROLL ? 'justify-center' : ''} duration-1000`,
|
|
26
|
+
// All cards has same width
|
|
27
|
+
style: { transform: `translateX(-${activeCardIndex * CARD_WIDTH}px)` }, role: "list", children: cards?.map(renderCard) }), showPrevButton && ((0, jsx_runtime_1.jsx)(ArrowButton_1.ArrowButton, { className: "absolute top-1/2 left-8", onClick: handlePrevClick })), showNextButton && ((0, jsx_runtime_1.jsx)(ArrowButton_1.ArrowButton, { className: "absolute top-1/2 right-1 z-20 rotate-180", onClick: handleNextClick })), (0, jsx_runtime_1.jsx)("div", { className: "absoluted top-0 right-0 bottom-0 w-[84px]", style: {
|
|
28
|
+
background: 'linear-gradient(270deg, #FFFFFF 34.89%, rgba(255, 255, 255, 0) 92.52%)',
|
|
29
|
+
} })] }));
|
|
30
|
+
});
|
|
31
|
+
function renderCard(card, key) {
|
|
32
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "border-solid border rounded-md border-main-divider p-7 mx-2 flex flex-col justify-between items-stretch min-w-[308px] w-[308px] w-full", role: "listitem", children: [(0, jsx_runtime_1.jsxs)("div", { children: [card.image?.src ? ((0, jsx_runtime_1.jsx)("div", { className: "flex justify-center", children: (0, jsx_runtime_1.jsx)(Img_1.Img, { className: "mb-6", image: card.image }) })) : null, card.title ? ((0, jsx_runtime_1.jsx)("h4", { className: `font-medium text-xl m-0 ${!card.description && !card.items?.length ? 'text-center' : ''}`, children: card.title })) : null, card.description ? ((0, jsx_runtime_1.jsx)("div", { className: "font-normal text-sm text-secondary-text mt-2", children: card.description })) : null, card.items?.length ? renderItems(card.items) : null] }), card.href ? ((0, jsx_runtime_1.jsx)(Button_1.Button, { className: "mt-6", text: "\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435", version: "secondary", href: card.href })) : null] }, key));
|
|
33
|
+
}
|
|
34
|
+
function renderItems(items = []) {
|
|
35
|
+
return ((0, jsx_runtime_1.jsx)("section", { className: "max-w-[308px] mt-2", role: "list", children: items.map((item, i) => ((0, jsx_runtime_1.jsx)(BlockItem_1.BlockItem, { children: (0, jsx_runtime_1.jsx)("span", { className: "text-sm text-secondary-text", children: item }) }, String(i)))) }));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=Gallery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gallery.js","sourceRoot":"","sources":["../src/Gallery.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
+
exports.ArrowButton = void 0;
|
|
3
|
+
const jsx_runtime_1 = require("@redneckz/uni-jsx/jsx-runtime");
|
|
4
|
+
const uni_jsx_1 = require("@redneckz/uni-jsx");
|
|
5
|
+
exports.ArrowButton = (0, uni_jsx_1.JSX)(({ className, onClick, ariaLabel }) => {
|
|
6
|
+
return ((0, jsx_runtime_1.jsx)("button", { className: `${className} border-none no-underline w-12 h-12 rounded-3xl bg-white flex text-black hover:text-primary-main`, style: { boxShadow: '0px 4px 25px rgba(0, 0, 0, 0.07)' }, onClick: onClick, "aria-label": ariaLabel, children: (0, jsx_runtime_1.jsxs)("svg", { className: "m-auto", width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, jsx_runtime_1.jsx)("path", { d: "M7 12L3 8L7 4", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" }), (0, jsx_runtime_1.jsx)("path", { d: "M14 9C14.5523 9 15 8.55228 15 8C15 7.44772 14.5523 7 14 7L14 9ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55229 7.44772 9 8 9L8 7ZM14 7L8 7L8 9L14 9L14 7Z", fill: "currentColor" })] }) }));
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=ArrowButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrowButton.js","sourceRoot":"","sources":["../../src/ui-kit/ArrowButton.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AAS3B,QAAA,WAAW,GAAG,IAAA,aAAG,EAAmB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;IACrF,OAAO,CACL,mCACE,SAAS,EAAE,GAAG,SAAS,kGAAkG,EACzH,KAAK,EAAE,EAAE,SAAS,EAAE,kCAAkC,EAAE,EACxD,OAAO,EAAE,OAAO,gBACJ,SAAS,YAErB,iCACE,SAAS,EAAC,QAAQ,EAClB,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,aAElC,iCAAM,CAAC,EAAC,eAAe,EAAC,MAAM,EAAC,cAAc,kBAAc,GAAG,oBAAgB,OAAO,GAAG,EACxF,iCACE,CAAC,EAAC,kJAAkJ,EACpJ,IAAI,EAAC,cAAc,GACnB,IACE,GACC,CACV,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/dist/ui-kit/Icon.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare type IconName = 'ActualBalanceIcon' | 'AppleIcon' | 'CalendarIcon' | 'ClockIcon' | 'ComfortableCompIcon' | 'DollarIcon' | 'EmptyWalletIcon' | 'EuroIcon' | 'GridIcon' | 'LoupeIcon' | 'NewDocIcon' | 'OkIcon' | 'PassSendIcon' | 'PercentageSquareIcon' | 'PlayMarketIcon' | 'ProfileIcon' | 'SignDocsIcon' | 'TelegramIcon' | 'VKIcon';
|
|
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';
|
|
2
2
|
export interface IconProps {
|
|
3
3
|
className?: string;
|
|
4
4
|
name: IconName;
|
package/dist/ui-kit/Icon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/ui-kit/Icon.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AACxC,wDAAqD;
|
|
1
|
+
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/ui-kit/Icon.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AACxC,wDAAqD;AAkCxC,QAAA,IAAI,GAAG,IAAA,aAAG,EACrB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,GAAG,QAAQ,IAAI,EAAE,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,CAAC,CACvE,gCACE,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,GAAG,iCAAe,CAAC,GAAG,IAAI,EAAE,SAAS,IAAI,MAAM,EACpD,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,KACR,QAAQ,GACZ,CACH,CACF,CAAC"}
|
package/lib/Blocks.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { ProductTileContent } from './ProductTile';
|
|
|
11
11
|
import { BaseTileContent } from './BaseTile';
|
|
12
12
|
import { PromoTileContent } from './PromoTile';
|
|
13
13
|
import { TextBlockContent } from './TextBlock';
|
|
14
|
+
import { GalleryContent } from './Gallery';
|
|
14
15
|
export declare const Blocks: {
|
|
15
16
|
Header: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./Header/Header").HeaderProps, any>, context?: any) => any;
|
|
16
17
|
Footer: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./Footer/Footer").FooterProps, any>, context?: any) => any;
|
|
@@ -25,5 +26,6 @@ export declare const Blocks: {
|
|
|
25
26
|
ProductGallery: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./ProductGallery").ProductGalleryProps, any>, context?: any) => any;
|
|
26
27
|
ExchangeRateTile: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./ExchangeRateTile").ExchangeRateTileProps, any>, context?: any) => any;
|
|
27
28
|
MobileAppTile: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./MobileAppTile").MobileAppTileProps, any>, context?: any) => any;
|
|
29
|
+
Gallery: (props: import("@redneckz/uni-jsx").PropsWithChildren<import("./Gallery").GalleryProps, any>, context?: any) => any;
|
|
28
30
|
};
|
|
29
|
-
export declare type BlockContent = HeaderContent | FooterContent | PlaceholderContent | BaseTileContent | TextBlockContent | ProductTileContent | PromoTileContent | ProductBlockInnerContent | StepsBlockContent | BenefitsBlockContent | ProductGalleryContent | ExchangeRateTileContent | MobileAppTileContent;
|
|
31
|
+
export declare type BlockContent = HeaderContent | FooterContent | PlaceholderContent | BaseTileContent | TextBlockContent | ProductTileContent | PromoTileContent | ProductBlockInnerContent | StepsBlockContent | BenefitsBlockContent | ProductGalleryContent | ExchangeRateTileContent | MobileAppTileContent | GalleryContent;
|
package/lib/Blocks.js
CHANGED
|
@@ -11,6 +11,7 @@ import { ProductTile } from './ProductTile.js';
|
|
|
11
11
|
import { PromoTile } from './PromoTile.js';
|
|
12
12
|
import { Tile } from './Tile.js';
|
|
13
13
|
import { TextBlock } from './TextBlock.js';
|
|
14
|
+
import { Gallery } from './Gallery.js';
|
|
14
15
|
export const Blocks = {
|
|
15
16
|
Header,
|
|
16
17
|
Footer,
|
|
@@ -25,5 +26,6 @@ export const Blocks = {
|
|
|
25
26
|
ProductGallery,
|
|
26
27
|
ExchangeRateTile,
|
|
27
28
|
MobileAppTile,
|
|
29
|
+
Gallery,
|
|
28
30
|
};
|
|
29
31
|
//# sourceMappingURL=Blocks.js.map
|
package/lib/Blocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Blocks.js","sourceRoot":"","sources":["../src/Blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAA2B,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAiB,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAiB,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Blocks.js","sourceRoot":"","sources":["../src/Blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAA2B,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAiB,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAiB,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;AAEpD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM;IACN,MAAM;IACN,WAAW;IACX,IAAI;IACJ,SAAS;IACT,SAAS;IACT,WAAW;IACX,YAAY;IACZ,UAAU;IACV,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,OAAO;CACR,CAAC"}
|
package/lib/Gallery.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Picture, UniBlockProps } from './types';
|
|
2
|
+
export interface GalleryCard {
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
image?: Picture;
|
|
6
|
+
href?: string;
|
|
7
|
+
items?: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface GalleryContent {
|
|
10
|
+
title?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
cards?: GalleryCard[];
|
|
13
|
+
}
|
|
14
|
+
export interface GalleryProps extends GalleryContent, UniBlockProps {
|
|
15
|
+
}
|
|
16
|
+
export declare const Gallery: (props: import("@redneckz/uni-jsx").PropsWithChildren<GalleryProps, any>, context?: any) => any;
|
package/lib/Gallery.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@redneckz/uni-jsx/jsx-runtime";
|
|
2
|
+
import { JSX } from '@redneckz/uni-jsx';
|
|
3
|
+
import { Img } from './Img.js';
|
|
4
|
+
import { ArrowButton } from './ui-kit/ArrowButton.js';
|
|
5
|
+
import { BlockItem } from './ui-kit/BlockItem.js';
|
|
6
|
+
import { Button } from './ui-kit/Button.js';
|
|
7
|
+
import { Title } from './ui-kit/Title.js';
|
|
8
|
+
const CARD_WIDTH = 384;
|
|
9
|
+
const GALLERY_LENGTH_FOR_SCROLL = 3;
|
|
10
|
+
export const Gallery = JSX(({ title, description, context, cards = [], className }) => {
|
|
11
|
+
const [activeCardIndex, setActiveCardIndex] = context.useState(0);
|
|
12
|
+
function handleNextClick() {
|
|
13
|
+
setActiveCardIndex(activeCardIndex + 1);
|
|
14
|
+
}
|
|
15
|
+
function handlePrevClick() {
|
|
16
|
+
setActiveCardIndex(activeCardIndex - 1);
|
|
17
|
+
}
|
|
18
|
+
const isGalleryScrollAvailable = cards?.length > GALLERY_LENGTH_FOR_SCROLL;
|
|
19
|
+
const showNextButton = isGalleryScrollAvailable && cards?.length - activeCardIndex > GALLERY_LENGTH_FOR_SCROLL;
|
|
20
|
+
const showPrevButton = isGalleryScrollAvailable && activeCardIndex > 0;
|
|
21
|
+
return (_jsxs("section", { className: `relative font-sans text-primary-text bg-white p-12 overflow-hidden ${className}`, children: [_jsxs("div", { className: "flex flex-col items-center mb-8", children: [_jsx(Title, { className: "font-medium m-0 text-centers", children: title }), description ? (_jsx("div", { className: "font-normal text-base max-w-[600px] mt-3", children: description })) : null] }), _jsx("div", {
|
|
22
|
+
// Need to place all cards at the center if count of cards less than 4
|
|
23
|
+
className: `flex {${cards?.length <= GALLERY_LENGTH_FOR_SCROLL ? 'justify-center' : ''} duration-1000`,
|
|
24
|
+
// All cards has same width
|
|
25
|
+
style: { transform: `translateX(-${activeCardIndex * CARD_WIDTH}px)` }, role: "list", children: cards?.map(renderCard) }), showPrevButton && (_jsx(ArrowButton, { className: "absolute top-1/2 left-8", onClick: handlePrevClick })), showNextButton && (_jsx(ArrowButton, { className: "absolute top-1/2 right-1 z-20 rotate-180", onClick: handleNextClick })), _jsx("div", { className: "absoluted top-0 right-0 bottom-0 w-[84px]", style: {
|
|
26
|
+
background: 'linear-gradient(270deg, #FFFFFF 34.89%, rgba(255, 255, 255, 0) 92.52%)',
|
|
27
|
+
} })] }));
|
|
28
|
+
});
|
|
29
|
+
function renderCard(card, key) {
|
|
30
|
+
return (_jsxs("div", { className: "border-solid border rounded-md border-main-divider p-7 mx-2 flex flex-col justify-between items-stretch min-w-[308px] w-[308px] w-full", role: "listitem", children: [_jsxs("div", { children: [card.image?.src ? (_jsx("div", { className: "flex justify-center", children: _jsx(Img, { className: "mb-6", image: card.image }) })) : null, card.title ? (_jsx("h4", { className: `font-medium text-xl m-0 ${!card.description && !card.items?.length ? 'text-center' : ''}`, children: card.title })) : null, card.description ? (_jsx("div", { className: "font-normal text-sm text-secondary-text mt-2", children: card.description })) : null, card.items?.length ? renderItems(card.items) : null] }), card.href ? (_jsx(Button, { className: "mt-6", text: "\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435", version: "secondary", href: card.href })) : null] }, key));
|
|
31
|
+
}
|
|
32
|
+
function renderItems(items = []) {
|
|
33
|
+
return (_jsx("section", { className: "max-w-[308px] mt-2", role: "list", children: items.map((item, i) => (_jsx(BlockItem, { children: _jsx("span", { className: "text-sm text-secondary-text", children: item }) }, String(i)))) }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=Gallery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gallery.js","sourceRoot":"","sources":["../src/Gallery.tsx"],"names":[],"mappings":"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"}
|
package/lib/common.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@import "../fonts/ubuntu/ubuntu.css";[data-theme=pc]{--color-primary-main:66,171,68;--color-primary-hover:36,131,65;--color-primary-active:36,95,52;--color-secondary-hover:216,242,217;--color-secondary-active:197,226,198}[data-theme=bc]{--color-primary-main:131,184,62;--color-primary-hover:92,146,29;--color-primary-active:60,94,16;--color-secondary-hover:232,244,217;--color-secondary-active:216,227,202}[data-theme=eo]{--color-primary-main:221,182,61;--color-primary-hover:187,151,39;--color-primary-active:126,99,12;--color-secondary-hover:241,236,221;--color-secondary-active:229,222,199}.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-1{top:.25rem}.right-1{right:.25rem}.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}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mt-9{margin-top:2.25rem}.mt-auto{margin-top:auto}.ml-7{margin-left:1.75rem}.mt-2\.5{margin-top:.625rem}.mt-2{margin-top:.5rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mb-6{margin-bottom:1.5rem}.mt-6{margin-top:1.5rem}.mb-3\.5{margin-bottom:.875rem}.mb-3{margin-bottom:.75rem}.mt-5{margin-top:1.25rem}.mb-1{margin-bottom:.25rem}.mr-8{margin-right:2rem}.mt-4{margin-top:1rem}.mb-2{margin-bottom:.5rem}.ml-auto{margin-left:auto}.mr-5{margin-right:1.25rem}.mr-7{margin-right:1.75rem}.mr-2{margin-right:.5rem}.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}.hidden{display:none}.h-full{height:100%}.h-\[70px\]{height:70px}.h-8{height:2rem}.h-\[90px\]{height:90px}.h-4{height:1rem}.h-\[50px\]{height:50px}.h-\[3px\]{height:3px}.h-0\.5{height:.125rem}.h-0{height:0}.h-\[100px\]{height:100px}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[8px\]{height:8px}.h-\[2px\]{height:2px}.h-\[24px\]{height:24px}.min-h-\[70px\]{min-height:70px}.min-h-\[90px\]{min-height:90px}.min-h-\[50px\]{min-height:50px}.min-h-\[100px\]{min-height:100px}.min-h-\[320px\]{min-height:320px}.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-\[276px\]{width:276px}.w-4{width:1rem}.w-\[280px\]{width:280px}.w-\[235px\]{width:235px}.w-9{width:2.25rem}.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-\[90px\]{min-width:90px}.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-\[600px\]{max-width:600px}.max-w-\[47rem\]{max-width:47rem}.max-w-\[580px\]{max-width:580px}.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{flex-grow:1}.grow-0{flex-grow:0}.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-3{gap:.75rem}.gap-5{gap:1.25rem}.gap-1{gap:.25rem}.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{border-radius:.25rem}.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-y{border-bottom-width:1px}.border-t,.border-y{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:rgba(240,244,240,var(--tw-border-opacity))}.border-main-divider{--tw-border-opacity:1;border-color:rgba(235,237,240,var(--tw-border-opacity))}.border-primary-main{--tw-border-opacity:1;border-color:rgba(var(--color-primary-main),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-y-main-divider{--tw-border-opacity:1;border-bottom-color:rgba(235,237,240,var(--tw-border-opacity));border-top-color:rgba(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:rgba(240,244,240,var(--tw-bg-opacity))}.bg-secondary-text{--tw-bg-opacity:1;background-color:rgba(125,126,127,var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-secondary-light{--tw-bg-opacity:1;background-color:rgba(245,247,249,var(--tw-bg-opacity))}.bg-inherit{background-color:inherit}.bg-primary-main{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-main),var(--tw-bg-opacity))}.bg-primary-main\/10{background-color:rgba(var(--color-primary-main),.1)}.bg-main-divider{--tw-bg-opacity:1;background-color:rgba(235,237,240,var(--tw-bg-opacity))}.bg-secondary-dark{--tw-bg-opacity:1;background-color:rgba(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-\[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-\[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-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.px-20{padding-left:5rem;padding-right:5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.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}.pt-10{padding-top:2.5rem}.pl-\[50px\]{padding-left:50px}.pb-\[50px\]{padding-bottom:50px}.pr-\[7\.5rem\]{padding-right:7.5rem}.pl-2\.5{padding-left:.625rem}.pt-2\.5{padding-top:.625rem}.pb-1\.5{padding-bottom:.375rem}.pr-\[6\.25rem\]{padding-right:6.25rem}.pl-2{padding-left:.5rem}.pt-2{padding-top:.5rem}.pb-1{padding-bottom:.25rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pr-4{padding-right:1rem}.pt-0\.5{padding-top:.125rem}.pr-3{padding-right:.75rem}.pr-28{padding-right:7rem}.pr-9{padding-right:2.25rem}.pr-\[4\.75rem\]{padding-right:4.75rem}.pr-\[9\.4rem\]{padding-right:9.4rem}.pb-8{padding-bottom:2rem}.pt-\[3px\]{padding-top:3px}.pt-\[30px\]{padding-top:30px}.pb-7{padding-bottom:1.75rem}.pt-5{padding-top:1.25rem}.pb-\[5px\]{padding-bottom:5px}.pt-\[5px\]{padding-top:5px}.pl-4{padding-left:1rem}.pl-12{padding-left:3rem}.pr-\[6\%\]{padding-right:6%}.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-base{font-size:1rem;line-height:1.5rem}.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-xs{font-size:.75rem;line-height:1.125rem}.text-title-sm{font-size:1.75rem;line-height:2.5rem}.text-xxs{font-size:.625rem;line-height:.625rem}.text-title-lg{font-size:2.5rem;line-height:3rem}.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:rgba(28,28,28,var(--tw-text-opacity))}.text-secondary-text{--tw-text-opacity:1;color:rgba(125,126,127,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-primary-main{--tw-text-opacity:1;color:rgba(var(--color-primary-main),var(--tw-text-opacity))}.text-secondary-light{--tw-text-opacity:1;color:rgba(245,247,249,var(--tw-text-opacity))}.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:rgba(125,126,127,var(--tw-text-opacity))}.hover\:bg-primary-hover:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-hover),var(--tw-bg-opacity))}.hover\:bg-secondary-hover:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-hover),var(--tw-bg-opacity))}.hover\:text-primary-text:hover{--tw-text-opacity:1;color:rgba(28,28,28,var(--tw-text-opacity))}.hover\:text-primary-main:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-main),var(--tw-text-opacity))}.hover\:text-secondary-active:hover{--tw-text-opacity:1;color:rgba(var(--color-secondary-active),var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.active\:bg-primary-active:active{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-active),var(--tw-bg-opacity))}.active\:bg-secondary-active:active{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-active),var(--tw-bg-opacity))}.group:hover .group-hover\:text-primary-text{--tw-text-opacity:1;color:rgba(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:66,171,68;--color-primary-hover:36,131,65;--color-primary-active:36,95,52;--color-secondary-hover:216,242,217;--color-secondary-active:197,226,198}[data-theme=bc]{--color-primary-main:131,184,62;--color-primary-hover:92,146,29;--color-primary-active:60,94,16;--color-secondary-hover:232,244,217;--color-secondary-active:216,227,202}[data-theme=eo]{--color-primary-main:221,182,61;--color-primary-hover:187,151,39;--color-primary-active:126,99,12;--color-secondary-hover:241,236,221;--color-secondary-active:229,222,199}.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}.top-1\/2{top:50%}.left-8{left:2rem}.right-1{right:.25rem}.top-0{top:0}.left-0{left:0}.-bottom-2{bottom:-.5rem}.top-1{top:.25rem}.z-20{z-index:20}.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}.m-auto{margin:auto}.-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}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mt-9{margin-top:2.25rem}.mt-auto{margin-top:auto}.ml-7{margin-left:1.75rem}.mt-2\.5{margin-top:.625rem}.mt-2{margin-top:.5rem}.ml-2{margin-left:.5rem}.mb-8{margin-bottom:2rem}.mt-3{margin-top:.75rem}.mb-6{margin-bottom:1.5rem}.mt-6{margin-top:1.5rem}.ml-4{margin-left:1rem}.mb-3\.5{margin-bottom:.875rem}.mb-3{margin-bottom:.75rem}.mt-5{margin-top:1.25rem}.mb-1{margin-bottom:.25rem}.mr-8{margin-right:2rem}.mt-4{margin-top:1rem}.mb-2{margin-bottom:.5rem}.ml-auto{margin-left:auto}.mr-5{margin-right:1.25rem}.mr-7{margin-right:1.75rem}.mr-2{margin-right:.5rem}.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}.hidden{display:none}.h-full{height:100%}.h-\[70px\]{height:70px}.h-8{height:2rem}.h-\[90px\]{height:90px}.h-4{height:1rem}.h-\[50px\]{height:50px}.h-\[3px\]{height:3px}.h-0\.5{height:.125rem}.h-0{height:0}.h-\[100px\]{height:100px}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-12{height:3rem}.h-\[8px\]{height:8px}.h-\[2px\]{height:2px}.h-\[24px\]{height:24px}.min-h-\[70px\]{min-height:70px}.min-h-\[90px\]{min-height:90px}.min-h-\[50px\]{min-height:50px}.min-h-\[100px\]{min-height:100px}.min-h-\[320px\]{min-height:320px}.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-\[84px\]{width:84px}.w-\[308px\]{width:308px}.w-\[125px\]{width:125px}.w-\[90px\]{width:90px}.w-\[50px\]{width:50px}.w-\[100px\]{width:100px}.w-\[276px\]{width:276px}.w-4{width:1rem}.w-\[280px\]{width:280px}.w-\[235px\]{width:235px}.w-9{width:2.25rem}.w-\[24px\]{width:24px}.w-12{width:3rem}.w-\[8px\]{width:8px}.w-\[36px\]{width:36px}.w-10{width:2.5rem}.min-w-\[70px\]{min-width:70px}.min-w-\[308px\]{min-width:308px}.min-w-\[90px\]{min-width:90px}.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-\[600px\]{max-width:600px}.max-w-\[47rem\]{max-width:47rem}.max-w-\[580px\]{max-width:580px}.max-w-\[308px\]{max-width:308px}.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{flex-grow:1}.grow-0{flex-grow:0}.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-3{gap:.75rem}.gap-5{gap:1.25rem}.gap-1{gap:.25rem}.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{border-radius:.25rem}.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-y{border-bottom-width:1px}.border-t,.border-y{border-top-width:1px}.border-r{border-right-width:1px}.border-solid{border-style:solid}.border-none{border-style:none}.border-main-divider{--tw-border-opacity:1;border-color:rgba(235,237,240,var(--tw-border-opacity))}.border-main{--tw-border-opacity:1;border-color:rgba(240,244,240,var(--tw-border-opacity))}.border-primary-main{--tw-border-opacity:1;border-color:rgba(var(--color-primary-main),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-y-main-divider{--tw-border-opacity:1;border-bottom-color:rgba(235,237,240,var(--tw-border-opacity));border-top-color:rgba(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:rgba(240,244,240,var(--tw-bg-opacity))}.bg-secondary-text{--tw-bg-opacity:1;background-color:rgba(125,126,127,var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-secondary-light{--tw-bg-opacity:1;background-color:rgba(245,247,249,var(--tw-bg-opacity))}.bg-inherit{background-color:inherit}.bg-primary-main{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-main),var(--tw-bg-opacity))}.bg-primary-main\/10{background-color:rgba(var(--color-primary-main),.1)}.bg-main-divider{--tw-bg-opacity:1;background-color:rgba(235,237,240,var(--tw-bg-opacity))}.bg-secondary-dark{--tw-bg-opacity:1;background-color:rgba(226,228,229,var(--tw-bg-opacity))}.p-12{padding:3rem}.p-10{padding:2.5rem}.p-20{padding:5rem}.p-7{padding:1.75rem}.p-2{padding:.5rem}.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-\[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-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.px-20{padding-left:5rem;padding-right:5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.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}.pt-10{padding-top:2.5rem}.pl-\[50px\]{padding-left:50px}.pb-\[50px\]{padding-bottom:50px}.pr-\[7\.5rem\]{padding-right:7.5rem}.pl-2\.5{padding-left:.625rem}.pt-2\.5{padding-top:.625rem}.pb-1\.5{padding-bottom:.375rem}.pr-\[6\.25rem\]{padding-right:6.25rem}.pl-2{padding-left:.5rem}.pt-2{padding-top:.5rem}.pb-1{padding-bottom:.25rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pr-4{padding-right:1rem}.pt-0\.5{padding-top:.125rem}.pr-3{padding-right:.75rem}.pr-28{padding-right:7rem}.pr-9{padding-right:2.25rem}.pr-\[4\.75rem\]{padding-right:4.75rem}.pr-\[9\.4rem\]{padding-right:9.4rem}.pb-8{padding-bottom:2rem}.pt-\[3px\]{padding-top:3px}.pt-\[30px\]{padding-top:30px}.pb-7{padding-bottom:1.75rem}.pt-5{padding-top:1.25rem}.pb-\[5px\]{padding-bottom:5px}.pt-\[5px\]{padding-top:5px}.pl-4{padding-left:1rem}.pl-12{padding-left:3rem}.pr-\[6\%\]{padding-right:6%}.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-base{font-size:1rem;line-height:1.5rem}.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-xs{font-size:.75rem;line-height:1.125rem}.text-title-sm{font-size:1.75rem;line-height:2.5rem}.text-xxs{font-size:.625rem;line-height:.625rem}.text-title-lg{font-size:2.5rem;line-height:3rem}.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:rgba(28,28,28,var(--tw-text-opacity))}.text-secondary-text{--tw-text-opacity:1;color:rgba(125,126,127,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-primary-main{--tw-text-opacity:1;color:rgba(var(--color-primary-main),var(--tw-text-opacity))}.text-secondary-light{--tw-text-opacity:1;color:rgba(245,247,249,var(--tw-text-opacity))}.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:rgba(125,126,127,var(--tw-text-opacity))}.hover\:bg-primary-hover:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-hover),var(--tw-bg-opacity))}.hover\:bg-secondary-hover:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-hover),var(--tw-bg-opacity))}.hover\:text-primary-text:hover{--tw-text-opacity:1;color:rgba(28,28,28,var(--tw-text-opacity))}.hover\:text-primary-main:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-main),var(--tw-text-opacity))}.hover\:text-secondary-active:hover{--tw-text-opacity:1;color:rgba(var(--color-secondary-active),var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.active\:bg-primary-active:active{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-active),var(--tw-bg-opacity))}.active\:bg-secondary-active:active{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-active),var(--tw-bg-opacity))}.group:hover .group-hover\:text-primary-text{--tw-text-opacity:1;color:rgba(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}}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@redneckz/uni-jsx/jsx-runtime";
|
|
2
|
+
import { JSX } from '@redneckz/uni-jsx';
|
|
3
|
+
export const ArrowButton = JSX(({ className, onClick, ariaLabel }) => {
|
|
4
|
+
return (_jsx("button", { className: `${className} border-none no-underline w-12 h-12 rounded-3xl bg-white flex text-black hover:text-primary-main`, style: { boxShadow: '0px 4px 25px rgba(0, 0, 0, 0.07)' }, onClick: onClick, "aria-label": ariaLabel, children: _jsxs("svg", { className: "m-auto", width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("path", { d: "M7 12L3 8L7 4", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" }), _jsx("path", { d: "M14 9C14.5523 9 15 8.55228 15 8C15 7.44772 14.5523 7 14 7L14 9ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55229 7.44772 9 8 9L8 7ZM14 7L8 7L8 9L14 9L14 7Z", fill: "currentColor" })] }) }));
|
|
5
|
+
});
|
|
6
|
+
//# sourceMappingURL=ArrowButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrowButton.js","sourceRoot":"","sources":["../../src/ui-kit/ArrowButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AASxC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAmB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;IACrF,OAAO,CACL,iBACE,SAAS,EAAE,GAAG,SAAS,kGAAkG,EACzH,KAAK,EAAE,EAAE,SAAS,EAAE,kCAAkC,EAAE,EACxD,OAAO,EAAE,OAAO,gBACJ,SAAS,YAErB,eACE,SAAS,EAAC,QAAQ,EAClB,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,aAElC,eAAM,CAAC,EAAC,eAAe,EAAC,MAAM,EAAC,cAAc,kBAAc,GAAG,oBAAgB,OAAO,GAAG,EACxF,eACE,CAAC,EAAC,kJAAkJ,EACpJ,IAAI,EAAC,cAAc,GACnB,IACE,GACC,CACV,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/lib/ui-kit/Icon.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare type IconName = 'ActualBalanceIcon' | 'AppleIcon' | 'CalendarIcon' | 'ClockIcon' | 'ComfortableCompIcon' | 'DollarIcon' | 'EmptyWalletIcon' | 'EuroIcon' | 'GridIcon' | 'LoupeIcon' | 'NewDocIcon' | 'OkIcon' | 'PassSendIcon' | 'PercentageSquareIcon' | 'PlayMarketIcon' | 'ProfileIcon' | 'SignDocsIcon' | 'TelegramIcon' | 'VKIcon';
|
|
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';
|
|
2
2
|
export interface IconProps {
|
|
3
3
|
className?: string;
|
|
4
4
|
name: IconName;
|
package/lib/ui-kit/Icon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/ui-kit/Icon.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/ui-kit/Icon.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAkCrD,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CACrB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,GAAG,QAAQ,IAAI,EAAE,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,CAAC,CACvE,cACE,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,GAAG,eAAe,CAAC,GAAG,IAAI,EAAE,SAAS,IAAI,MAAM,EACpD,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,KACR,QAAQ,GACZ,CACH,CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redneckz/wildless-cms-uni-blocks",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.63",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -150,8 +150,8 @@
|
|
|
150
150
|
],
|
|
151
151
|
"lint-staged": {
|
|
152
152
|
"src/**/*.{js,jsx,ts,tsx,css}": "prettier --write",
|
|
153
|
-
"
|
|
154
|
-
"cosmos
|
|
153
|
+
"*.{js,jsx,ts,tsx,css,json}": [
|
|
154
|
+
"npm run cosmos:export",
|
|
155
155
|
"git add ./docs"
|
|
156
156
|
]
|
|
157
157
|
}
|
package/src/Blocks.ts
CHANGED
|
@@ -13,6 +13,7 @@ import { BaseTileContent } from './BaseTile';
|
|
|
13
13
|
import { PromoTile, PromoTileContent } from './PromoTile';
|
|
14
14
|
import { Tile } from './Tile';
|
|
15
15
|
import { TextBlock, TextBlockContent } from './TextBlock';
|
|
16
|
+
import { Gallery, GalleryContent } from './Gallery';
|
|
16
17
|
|
|
17
18
|
export const Blocks = {
|
|
18
19
|
Header,
|
|
@@ -28,6 +29,7 @@ export const Blocks = {
|
|
|
28
29
|
ProductGallery,
|
|
29
30
|
ExchangeRateTile,
|
|
30
31
|
MobileAppTile,
|
|
32
|
+
Gallery,
|
|
31
33
|
};
|
|
32
34
|
|
|
33
35
|
export type BlockContent =
|
|
@@ -43,4 +45,5 @@ export type BlockContent =
|
|
|
43
45
|
| BenefitsBlockContent
|
|
44
46
|
| ProductGalleryContent
|
|
45
47
|
| ExchangeRateTileContent
|
|
46
|
-
| MobileAppTileContent
|
|
48
|
+
| MobileAppTileContent
|
|
49
|
+
| GalleryContent;
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { context } from './setup-fixture';
|
|
2
|
+
|
|
3
|
+
import { Gallery, GalleryProps } from './Gallery';
|
|
4
|
+
import { Picture } from './types';
|
|
5
|
+
|
|
6
|
+
const image: Picture = {
|
|
7
|
+
src: 'money-1.png',
|
|
8
|
+
format: 'webp',
|
|
9
|
+
size: {
|
|
10
|
+
width: 140,
|
|
11
|
+
height: 140,
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const defaultItems = [
|
|
16
|
+
'Качественные фермерские продукты напрямую от производителей',
|
|
17
|
+
'Самая большая база сельских туров по России',
|
|
18
|
+
'Площадки для создания комфортной жизни за городом',
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
const defaultProps: GalleryProps = {
|
|
22
|
+
title: 'Вы можете оплатить бонусными баллами',
|
|
23
|
+
description: 'Удобный каталог с большим ассортиментом товаров и сервисов',
|
|
24
|
+
context,
|
|
25
|
+
cards: [
|
|
26
|
+
{
|
|
27
|
+
title: 'Более 5000 товаров',
|
|
28
|
+
description:
|
|
29
|
+
'Время копить: ставка растет в зависимости от срока нахождения средств на Счете!',
|
|
30
|
+
image,
|
|
31
|
+
href: '/credit-cards',
|
|
32
|
+
items: defaultItems,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
title: 'Более 1000 развлечений',
|
|
36
|
+
description: 'Порядок и условия предоставления в соответствии с 106 ФЗ',
|
|
37
|
+
image,
|
|
38
|
+
href: '/credit-cards',
|
|
39
|
+
items: defaultItems,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
title: 'Фермерские продукты',
|
|
43
|
+
description: 'Высокий процент даже при небольшой сумме денежных средств',
|
|
44
|
+
image,
|
|
45
|
+
href: '/credit-cards',
|
|
46
|
+
items: defaultItems,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
title: '«Моя выгода»',
|
|
50
|
+
description:
|
|
51
|
+
'Время копить: ставка растет в зависимости от срока нахождения средств на Счете!',
|
|
52
|
+
image,
|
|
53
|
+
href: '/credit-cards',
|
|
54
|
+
items: defaultItems,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
title: 'Фермерские продукты',
|
|
58
|
+
description: 'Высокий процент даже при небольшой сумме денежных средств',
|
|
59
|
+
image,
|
|
60
|
+
href: '/credit-cards',
|
|
61
|
+
items: defaultItems,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const textAndButtonProps: GalleryProps = {
|
|
67
|
+
title: 'Вы можете оплатить бонусными баллами',
|
|
68
|
+
description: 'Удобный каталог с большим ассортиментом товаров и сервисов',
|
|
69
|
+
context,
|
|
70
|
+
cards: [
|
|
71
|
+
{
|
|
72
|
+
title: 'Более 5000 товаров',
|
|
73
|
+
description:
|
|
74
|
+
'Время копить: ставка растет в зависимости от срока нахождения средств на Счете!',
|
|
75
|
+
image,
|
|
76
|
+
href: '/credit-cards',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
title: 'Более 1000 развлечений',
|
|
80
|
+
description: 'Порядок и условия предоставления в соответствии с 106 ФЗ',
|
|
81
|
+
image,
|
|
82
|
+
href: '/credit-cards',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
title: 'Фермерские продукты',
|
|
86
|
+
description: 'Высокий процент даже при небольшой сумме денежных средств',
|
|
87
|
+
image,
|
|
88
|
+
href: '/credit-cards',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
title: '«Моя выгода»',
|
|
92
|
+
description:
|
|
93
|
+
'Время копить: ставка растет в зависимости от срока нахождения средств на Счете!',
|
|
94
|
+
image,
|
|
95
|
+
href: '/credit-cards',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
title: 'Фермерские продукты',
|
|
99
|
+
description: 'Высокий процент даже при небольшой сумме денежных средств',
|
|
100
|
+
image,
|
|
101
|
+
href: '/credit-cards',
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const listAndButtonProps: GalleryProps = {
|
|
107
|
+
title: 'Вы можете оплатить бонусными баллами',
|
|
108
|
+
description: 'Удобный каталог с большим ассортиментом товаров и сервисов',
|
|
109
|
+
context,
|
|
110
|
+
cards: [
|
|
111
|
+
{
|
|
112
|
+
title: 'Более 5000 товаров',
|
|
113
|
+
image,
|
|
114
|
+
href: '/credit-cards',
|
|
115
|
+
items: defaultItems,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
title: 'Более 1000 развлечений',
|
|
119
|
+
image,
|
|
120
|
+
href: '/credit-cards',
|
|
121
|
+
items: defaultItems,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
title: 'Фермерские продукты',
|
|
125
|
+
image,
|
|
126
|
+
href: '/credit-cards',
|
|
127
|
+
items: defaultItems,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
title: '«Моя выгода»',
|
|
131
|
+
image,
|
|
132
|
+
href: '/credit-cards',
|
|
133
|
+
items: defaultItems,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
title: 'Фермерские продукты',
|
|
137
|
+
image,
|
|
138
|
+
href: '/credit-cards',
|
|
139
|
+
items: defaultItems,
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const textAndNoButtonProps: GalleryProps = {
|
|
145
|
+
title: 'Вы можете оплатить бонусными баллами',
|
|
146
|
+
description: 'Удобный каталог с большим ассортиментом товаров и сервисов',
|
|
147
|
+
context,
|
|
148
|
+
cards: [
|
|
149
|
+
{
|
|
150
|
+
title: 'Более 5000 товаров',
|
|
151
|
+
description:
|
|
152
|
+
'Время копить: ставка растет в зависимости от срока нахождения средств на Счете!',
|
|
153
|
+
image,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
title: 'Более 1000 развлечений',
|
|
157
|
+
description: 'Порядок и условия предоставления в соответствии с 106 ФЗ',
|
|
158
|
+
image,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
title: 'Фермерские продукты',
|
|
162
|
+
description: 'Высокий процент даже при небольшой сумме денежных средств',
|
|
163
|
+
image,
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
title: '«Моя выгода»',
|
|
167
|
+
description:
|
|
168
|
+
'Время копить: ставка растет в зависимости от срока нахождения средств на Счете!',
|
|
169
|
+
image,
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
title: 'Фермерские продукты',
|
|
173
|
+
description: 'Высокий процент даже при небольшой сумме денежных средств',
|
|
174
|
+
image,
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
const onlyTitleProps: GalleryProps = {
|
|
180
|
+
title: 'Вы можете оплатить бонусными баллами',
|
|
181
|
+
description: 'Удобный каталог с большим ассортиментом товаров и сервисов',
|
|
182
|
+
context,
|
|
183
|
+
cards: [
|
|
184
|
+
{
|
|
185
|
+
title: 'Более 5000 товаров',
|
|
186
|
+
image,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
title: 'Более 1000 развлечений',
|
|
190
|
+
image,
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
title: 'Фермерские продукты',
|
|
194
|
+
image,
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
title: '«Моя выгода»',
|
|
198
|
+
image,
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
title: 'Фермерские продукты',
|
|
202
|
+
image,
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
export default {
|
|
208
|
+
default: <Gallery {...defaultProps} />,
|
|
209
|
+
'text and button': <Gallery {...textAndButtonProps} />,
|
|
210
|
+
'list and button': <Gallery {...listAndButtonProps} />,
|
|
211
|
+
'text and no button': <Gallery {...textAndNoButtonProps} />,
|
|
212
|
+
'only title': <Gallery {...onlyTitleProps} />,
|
|
213
|
+
};
|
package/src/Gallery.tsx
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
+
import { Img } from './Img';
|
|
3
|
+
import { Picture, UniBlockProps } from './types';
|
|
4
|
+
import { ArrowButton } from './ui-kit/ArrowButton';
|
|
5
|
+
import { BlockItem } from './ui-kit/BlockItem';
|
|
6
|
+
import { Button } from './ui-kit/Button';
|
|
7
|
+
import { Title } from './ui-kit/Title';
|
|
8
|
+
|
|
9
|
+
export interface GalleryCard {
|
|
10
|
+
title?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
image?: Picture;
|
|
13
|
+
href?: string;
|
|
14
|
+
items?: string[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface GalleryContent {
|
|
18
|
+
title?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
cards?: GalleryCard[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface GalleryProps extends GalleryContent, UniBlockProps {}
|
|
24
|
+
|
|
25
|
+
const CARD_WIDTH = 384;
|
|
26
|
+
const GALLERY_LENGTH_FOR_SCROLL = 3;
|
|
27
|
+
|
|
28
|
+
export const Gallery = JSX<GalleryProps>(
|
|
29
|
+
({ title, description, context, cards = [], className }) => {
|
|
30
|
+
const [activeCardIndex, setActiveCardIndex] = context.useState(0);
|
|
31
|
+
|
|
32
|
+
function handleNextClick() {
|
|
33
|
+
setActiveCardIndex(activeCardIndex + 1);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function handlePrevClick() {
|
|
37
|
+
setActiveCardIndex(activeCardIndex - 1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const isGalleryScrollAvailable = cards?.length > GALLERY_LENGTH_FOR_SCROLL;
|
|
41
|
+
|
|
42
|
+
const showNextButton =
|
|
43
|
+
isGalleryScrollAvailable && cards?.length - activeCardIndex > GALLERY_LENGTH_FOR_SCROLL;
|
|
44
|
+
|
|
45
|
+
const showPrevButton = isGalleryScrollAvailable && activeCardIndex > 0;
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<section
|
|
49
|
+
className={`relative font-sans text-primary-text bg-white p-12 overflow-hidden ${className}`}
|
|
50
|
+
>
|
|
51
|
+
<div className="flex flex-col items-center mb-8">
|
|
52
|
+
<Title className="font-medium m-0 text-centers">{title}</Title>
|
|
53
|
+
{description ? (
|
|
54
|
+
<div className="font-normal text-base max-w-[600px] mt-3">{description}</div>
|
|
55
|
+
) : null}
|
|
56
|
+
</div>
|
|
57
|
+
<div
|
|
58
|
+
// Need to place all cards at the center if count of cards less than 4
|
|
59
|
+
className={`flex {${
|
|
60
|
+
cards?.length <= GALLERY_LENGTH_FOR_SCROLL ? 'justify-center' : ''
|
|
61
|
+
} duration-1000`}
|
|
62
|
+
// All cards has same width
|
|
63
|
+
style={{ transform: `translateX(-${activeCardIndex * CARD_WIDTH}px)` }}
|
|
64
|
+
role="list"
|
|
65
|
+
>
|
|
66
|
+
{cards?.map(renderCard)}
|
|
67
|
+
</div>
|
|
68
|
+
{showPrevButton && (
|
|
69
|
+
<ArrowButton className="absolute top-1/2 left-8" onClick={handlePrevClick} />
|
|
70
|
+
)}
|
|
71
|
+
{showNextButton && (
|
|
72
|
+
<ArrowButton
|
|
73
|
+
className="absolute top-1/2 right-1 z-20 rotate-180"
|
|
74
|
+
onClick={handleNextClick}
|
|
75
|
+
/>
|
|
76
|
+
)}
|
|
77
|
+
<div
|
|
78
|
+
className="absoluted top-0 right-0 bottom-0 w-[84px]"
|
|
79
|
+
style={{
|
|
80
|
+
background: 'linear-gradient(270deg, #FFFFFF 34.89%, rgba(255, 255, 255, 0) 92.52%)',
|
|
81
|
+
}}
|
|
82
|
+
></div>
|
|
83
|
+
</section>
|
|
84
|
+
);
|
|
85
|
+
},
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
function renderCard(card: GalleryCard, key: number) {
|
|
89
|
+
return (
|
|
90
|
+
<div
|
|
91
|
+
className="border-solid border rounded-md border-main-divider p-7 mx-2 flex flex-col justify-between items-stretch min-w-[308px] w-[308px] w-full"
|
|
92
|
+
role="listitem"
|
|
93
|
+
key={key}
|
|
94
|
+
>
|
|
95
|
+
<div>
|
|
96
|
+
{card.image?.src ? (
|
|
97
|
+
<div className="flex justify-center">
|
|
98
|
+
<Img className="mb-6" image={card.image} />
|
|
99
|
+
</div>
|
|
100
|
+
) : null}
|
|
101
|
+
{card.title ? (
|
|
102
|
+
<h4
|
|
103
|
+
className={`font-medium text-xl m-0 ${
|
|
104
|
+
!card.description && !card.items?.length ? 'text-center' : ''
|
|
105
|
+
}`}
|
|
106
|
+
>
|
|
107
|
+
{card.title}
|
|
108
|
+
</h4>
|
|
109
|
+
) : null}
|
|
110
|
+
{card.description ? (
|
|
111
|
+
<div className="font-normal text-sm text-secondary-text mt-2">{card.description}</div>
|
|
112
|
+
) : null}
|
|
113
|
+
{card.items?.length ? renderItems(card.items) : null}
|
|
114
|
+
</div>
|
|
115
|
+
{card.href ? (
|
|
116
|
+
<Button className="mt-6" text="Подробнее" version="secondary" href={card.href} />
|
|
117
|
+
) : null}
|
|
118
|
+
</div>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function renderItems(items: string[] = []) {
|
|
123
|
+
return (
|
|
124
|
+
<section className="max-w-[308px] mt-2" role="list">
|
|
125
|
+
{items.map((item, i) => (
|
|
126
|
+
<BlockItem key={String(i)}>
|
|
127
|
+
<span className="text-sm text-secondary-text">{item}</span>
|
|
128
|
+
</BlockItem>
|
|
129
|
+
))}
|
|
130
|
+
</section>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
+
import { Icon } from './Icon';
|
|
3
|
+
|
|
4
|
+
export interface ArrowButtonProps {
|
|
5
|
+
onClick?: () => void;
|
|
6
|
+
ariaLabel?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const ArrowButton = JSX<ArrowButtonProps>(({ className, onClick, ariaLabel }) => {
|
|
11
|
+
return (
|
|
12
|
+
<button
|
|
13
|
+
className={`${className} border-none no-underline w-12 h-12 rounded-3xl bg-white flex text-black hover:text-primary-main`}
|
|
14
|
+
style={{ boxShadow: '0px 4px 25px rgba(0, 0, 0, 0.07)' }}
|
|
15
|
+
onClick={onClick}
|
|
16
|
+
aria-label={ariaLabel}
|
|
17
|
+
>
|
|
18
|
+
<svg
|
|
19
|
+
className="m-auto"
|
|
20
|
+
width="16"
|
|
21
|
+
height="16"
|
|
22
|
+
viewBox="0 0 16 16"
|
|
23
|
+
fill="none"
|
|
24
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
25
|
+
>
|
|
26
|
+
<path d="M7 12L3 8L7 4" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
|
|
27
|
+
<path
|
|
28
|
+
d="M14 9C14.5523 9 15 8.55228 15 8C15 7.44772 14.5523 7 14 7L14 9ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55229 7.44772 9 8 9L8 7ZM14 7L8 7L8 9L14 9L14 7Z"
|
|
29
|
+
fill="currentColor"
|
|
30
|
+
/>
|
|
31
|
+
</svg>
|
|
32
|
+
</button>
|
|
33
|
+
);
|
|
34
|
+
});
|