@brilo/base-blocks 0.1.1 → 0.1.3
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/build/blocks/form/form-group/edit.d.ts.map +1 -1
- package/build/blocks/form/form-group/edit.js +17 -3
- package/build/blocks/form/form-group/factory.d.ts.map +1 -1
- package/build/blocks/form/form-group/factory.js +1 -0
- package/build/blocks/form/form-group/types.d.ts +1 -0
- package/build/blocks/form/form-group/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/blocks/column/column-group/edit.tsx +56 -0
- package/src/blocks/column/column-group/editor.scss +7 -0
- package/src/blocks/column/column-group/factory.tsx +29 -0
- package/src/blocks/column/column-group/index.ts +14 -0
- package/src/blocks/column/column-group/types.ts +8 -0
- package/src/blocks/column/column-item/constants.ts +1 -0
- package/src/blocks/column/column-item/edit.tsx +48 -0
- package/src/blocks/column/column-item/editor.scss +34 -0
- package/src/blocks/column/column-item/factory.tsx +25 -0
- package/src/blocks/column/column-item/index.ts +10 -0
- package/src/blocks/column/column-item/types.ts +7 -0
- package/src/blocks/compare/compare-group/constants.ts +1 -0
- package/src/blocks/compare/compare-group/edit.tsx +52 -0
- package/src/blocks/compare/compare-group/factory.tsx +29 -0
- package/src/blocks/compare/compare-group/icon.tsx +7 -0
- package/src/blocks/compare/compare-group/index.ts +13 -0
- package/src/blocks/compare/compare-group/types.ts +12 -0
- package/src/blocks/compare/compare-item/edit.tsx +38 -0
- package/src/blocks/compare/compare-item/editor.scss +15 -0
- package/src/blocks/compare/compare-item/factory.tsx +28 -0
- package/src/blocks/compare/compare-item/icon.tsx +9 -0
- package/src/blocks/compare/compare-item/index.ts +13 -0
- package/src/blocks/compare/compare-item/types.ts +9 -0
- package/src/blocks/compare/compare-option/constants.ts +7 -0
- package/src/blocks/compare/compare-option/edit.tsx +64 -0
- package/src/blocks/compare/compare-option/editor.scss +26 -0
- package/src/blocks/compare/compare-option/factory.tsx +35 -0
- package/src/blocks/compare/compare-option/icon.tsx +7 -0
- package/src/blocks/compare/compare-option/index.ts +8 -0
- package/src/blocks/compare/compare-option/types.ts +12 -0
- package/src/blocks/contact/contact-group/constants.ts +3 -0
- package/src/blocks/contact/contact-group/edit.tsx +57 -0
- package/src/blocks/contact/contact-group/editor.scss +20 -0
- package/src/blocks/contact/contact-group/factory.tsx +35 -0
- package/src/blocks/contact/contact-group/index.ts +12 -0
- package/src/blocks/contact/contact-group/types.ts +12 -0
- package/src/blocks/contact/contact-item/constants.ts +17 -0
- package/src/blocks/contact/contact-item/edit.tsx +93 -0
- package/src/blocks/contact/contact-item/editor.scss +38 -0
- package/src/blocks/contact/contact-item/factory.tsx +35 -0
- package/src/blocks/contact/contact-item/index.ts +23 -0
- package/src/blocks/contact/contact-item/types.ts +21 -0
- package/src/blocks/core/basic-button/constants.ts +17 -0
- package/src/blocks/core/basic-button/edit.tsx +107 -0
- package/src/blocks/core/basic-button/editor.scss +80 -0
- package/src/blocks/core/basic-button/factory.tsx +54 -0
- package/src/blocks/core/basic-button/index.ts +8 -0
- package/src/blocks/core/basic-button/types.ts +29 -0
- package/src/blocks/core/basic-heading/constants.ts +1 -0
- package/src/blocks/core/basic-heading/edit.tsx +76 -0
- package/src/blocks/core/basic-heading/editor.scss +8 -0
- package/src/blocks/core/basic-heading/factory.tsx +40 -0
- package/src/blocks/core/basic-heading/index.ts +8 -0
- package/src/blocks/core/basic-heading/types.ts +20 -0
- package/src/blocks/core/basic-overline/edit.tsx +28 -0
- package/src/blocks/core/basic-overline/editor.scss +14 -0
- package/src/blocks/core/basic-overline/factory.tsx +22 -0
- package/src/blocks/core/basic-overline/index.ts +8 -0
- package/src/blocks/core/basic-overline/types.ts +7 -0
- package/src/blocks/faq/faq-group/constants.ts +11 -0
- package/src/blocks/faq/faq-group/edit.tsx +55 -0
- package/src/blocks/faq/faq-group/editor.scss +11 -0
- package/src/blocks/faq/faq-group/factory.tsx +39 -0
- package/src/blocks/faq/faq-group/index.ts +11 -0
- package/src/blocks/faq/faq-group/types.ts +14 -0
- package/src/blocks/faq/faq-item/edit.tsx +50 -0
- package/src/blocks/faq/faq-item/editor.scss +57 -0
- package/src/blocks/faq/faq-item/factory.tsx +24 -0
- package/src/blocks/faq/faq-item/index.ts +9 -0
- package/src/blocks/faq/faq-item/types.ts +7 -0
- package/src/blocks/form/form-field/constants.ts +14 -0
- package/src/blocks/form/form-field/edit.tsx +178 -0
- package/src/blocks/form/form-field/editor.scss +71 -0
- package/src/blocks/form/form-field/factory.tsx +32 -0
- package/src/blocks/form/form-field/index.ts +10 -0
- package/src/blocks/form/form-field/types.ts +18 -0
- package/src/blocks/form/form-group/constants.ts +16 -0
- package/src/blocks/form/form-group/edit.tsx +214 -0
- package/src/blocks/form/form-group/editor.scss +41 -0
- package/src/blocks/form/form-group/factory.tsx +36 -0
- package/src/blocks/form/form-group/index.ts +18 -0
- package/src/blocks/form/form-group/types.ts +23 -0
- package/src/blocks/groups/banner-group/constants.ts +15 -0
- package/src/blocks/groups/banner-group/edit.tsx +122 -0
- package/src/blocks/groups/banner-group/editor.scss +18 -0
- package/src/blocks/groups/banner-group/factory.tsx +64 -0
- package/src/blocks/groups/banner-group/icon.tsx +13 -0
- package/src/blocks/groups/banner-group/index.ts +11 -0
- package/src/blocks/groups/banner-group/types.ts +30 -0
- package/src/blocks/groups/basic-header-group/constants.ts +9 -0
- package/src/blocks/groups/basic-header-group/edit.tsx +99 -0
- package/src/blocks/groups/basic-header-group/editor.scss +35 -0
- package/src/blocks/groups/basic-header-group/factory.tsx +46 -0
- package/src/blocks/groups/basic-header-group/icon.tsx +17 -0
- package/src/blocks/groups/basic-header-group/index.ts +9 -0
- package/src/blocks/groups/basic-header-group/types.ts +27 -0
- package/src/blocks/groups/button-group/constants.ts +7 -0
- package/src/blocks/groups/button-group/edit.tsx +52 -0
- package/src/blocks/groups/button-group/editor.scss +23 -0
- package/src/blocks/groups/button-group/factory.tsx +34 -0
- package/src/blocks/groups/button-group/index.ts +11 -0
- package/src/blocks/groups/button-group/types.ts +12 -0
- package/src/blocks/groups/text-and-media-group/constants.ts +43 -0
- package/src/blocks/groups/text-and-media-group/edit.tsx +241 -0
- package/src/blocks/groups/text-and-media-group/editor.scss +123 -0
- package/src/blocks/groups/text-and-media-group/factory.tsx +100 -0
- package/src/blocks/groups/text-and-media-group/icon.tsx +37 -0
- package/src/blocks/groups/text-and-media-group/index.ts +18 -0
- package/src/blocks/groups/text-and-media-group/types.ts +60 -0
- package/src/blocks/hero/hero-group/constants.ts +23 -0
- package/src/blocks/hero/hero-group/edit.tsx +85 -0
- package/src/blocks/hero/hero-group/editor.scss +0 -0
- package/src/blocks/hero/hero-group/factory.tsx +45 -0
- package/src/blocks/hero/hero-group/icon.tsx +28 -0
- package/src/blocks/hero/hero-group/index.ts +11 -0
- package/src/blocks/hero/hero-group/types.ts +22 -0
- package/src/blocks/hero/hero-item/constants.ts +15 -0
- package/src/blocks/hero/hero-item/edit.tsx +107 -0
- package/src/blocks/hero/hero-item/editor.scss +87 -0
- package/src/blocks/hero/hero-item/factory.tsx +49 -0
- package/src/blocks/hero/hero-item/index.ts +10 -0
- package/src/blocks/hero/hero-item/types.ts +38 -0
- package/src/blocks/map/map-group/constants.ts +20 -0
- package/src/blocks/map/map-group/edit.tsx +108 -0
- package/src/blocks/map/map-group/editor.scss +24 -0
- package/src/blocks/map/map-group/factory.tsx +51 -0
- package/src/blocks/map/map-group/index.ts +9 -0
- package/src/blocks/map/map-group/types.ts +16 -0
- package/src/blocks/newsletter/newsletter-form/constants.ts +5 -0
- package/src/blocks/newsletter/newsletter-form/edit.tsx +194 -0
- package/src/blocks/newsletter/newsletter-form/editor.scss +68 -0
- package/src/blocks/newsletter/newsletter-form/factory.tsx +59 -0
- package/src/blocks/newsletter/newsletter-form/index.ts +11 -0
- package/src/blocks/newsletter/newsletter-form/types.ts +45 -0
- package/src/blocks/post/post-slider-group/constants.ts +3 -0
- package/src/blocks/post/post-slider-group/edit.tsx +76 -0
- package/src/blocks/post/post-slider-group/factory.tsx +43 -0
- package/src/blocks/post/post-slider-group/icon.tsx +13 -0
- package/src/blocks/post/post-slider-group/index.ts +9 -0
- package/src/blocks/post/post-slider-group/types.ts +20 -0
- package/src/blocks/responsive-grid/responsive-grid-group/edit.tsx +95 -0
- package/src/blocks/responsive-grid/responsive-grid-group/factory.tsx +33 -0
- package/src/blocks/responsive-grid/responsive-grid-group/index.ts +13 -0
- package/src/blocks/responsive-grid/responsive-grid-group/types.ts +9 -0
- package/src/blocks/responsive-grid/responsive-grid-item/edit.tsx +19 -0
- package/src/blocks/responsive-grid/responsive-grid-item/factory.tsx +20 -0
- package/src/blocks/responsive-grid/responsive-grid-item/index.ts +9 -0
- package/src/blocks/responsive-grid/responsive-grid-item/types.ts +5 -0
- package/src/blocks/sections/base-section/attributes.ts +17 -0
- package/src/blocks/sections/base-section/constants.ts +18 -0
- package/src/blocks/sections/base-section/controls.tsx +70 -0
- package/src/blocks/sections/base-section/edit.tsx +34 -0
- package/src/blocks/sections/base-section/editor.scss +24 -0
- package/src/blocks/sections/base-section/factory.tsx +47 -0
- package/src/blocks/sections/base-section/icon.tsx +6 -0
- package/src/blocks/sections/base-section/index.ts +14 -0
- package/src/blocks/sections/base-section/types.ts +26 -0
- package/src/blocks/signpost/signpost-group/constants.ts +3 -0
- package/src/blocks/signpost/signpost-group/edit.tsx +75 -0
- package/src/blocks/signpost/signpost-group/editor.scss +0 -0
- package/src/blocks/signpost/signpost-group/factory.tsx +40 -0
- package/src/blocks/signpost/signpost-group/icon.tsx +19 -0
- package/src/blocks/signpost/signpost-group/index.ts +15 -0
- package/src/blocks/signpost/signpost-group/types.ts +9 -0
- package/src/blocks/signpost/signpost-item/constants.ts +4 -0
- package/src/blocks/signpost/signpost-item/edit.tsx +90 -0
- package/src/blocks/signpost/signpost-item/editor.scss +25 -0
- package/src/blocks/signpost/signpost-item/factory.tsx +29 -0
- package/src/blocks/signpost/signpost-item/icon.tsx +7 -0
- package/src/blocks/signpost/signpost-item/index.ts +10 -0
- package/src/blocks/signpost/signpost-item/types.ts +12 -0
- package/src/blocks/step/step-group/constants.ts +6 -0
- package/src/blocks/step/step-group/edit.tsx +64 -0
- package/src/blocks/step/step-group/editor.scss +19 -0
- package/src/blocks/step/step-group/factory.tsx +36 -0
- package/src/blocks/step/step-group/icon.tsx +27 -0
- package/src/blocks/step/step-group/index.ts +15 -0
- package/src/blocks/step/step-group/types.ts +13 -0
- package/src/blocks/step/step-item/constants.ts +6 -0
- package/src/blocks/step/step-item/edit.tsx +60 -0
- package/src/blocks/step/step-item/editor.scss +18 -0
- package/src/blocks/step/step-item/factory.tsx +27 -0
- package/src/blocks/step/step-item/index.ts +11 -0
- package/src/blocks/step/step-item/types.ts +12 -0
- package/src/blocks/testimonial/testimonial-group/constants.ts +27 -0
- package/src/blocks/testimonial/testimonial-group/edit.tsx +74 -0
- package/src/blocks/testimonial/testimonial-group/editor.scss +38 -0
- package/src/blocks/testimonial/testimonial-group/factory.tsx +44 -0
- package/src/blocks/testimonial/testimonial-group/icon.tsx +33 -0
- package/src/blocks/testimonial/testimonial-group/index.ts +15 -0
- package/src/blocks/testimonial/testimonial-group/types.ts +19 -0
- package/src/blocks/testimonial/testimonial-item/edit.tsx +48 -0
- package/src/blocks/testimonial/testimonial-item/editor.scss +20 -0
- package/src/blocks/testimonial/testimonial-item/factory.tsx +35 -0
- package/src/blocks/testimonial/testimonial-item/index.ts +9 -0
- package/src/blocks/testimonial/testimonial-item/types.ts +9 -0
- package/src/blocks/text-and-form/text-and-form-group/constants.ts +6 -0
- package/src/blocks/text-and-form/text-and-form-group/edit.tsx +59 -0
- package/src/blocks/text-and-form/text-and-form-group/editor.scss +21 -0
- package/src/blocks/text-and-form/text-and-form-group/factory.tsx +38 -0
- package/src/blocks/text-and-form/text-and-form-group/icon.tsx +23 -0
- package/src/blocks/text-and-form/text-and-form-group/index.ts +9 -0
- package/src/blocks/text-and-form/text-and-form-group/types.ts +23 -0
- package/src/blocks/text-and-form/text-and-form-text-column/constants.ts +10 -0
- package/src/blocks/text-and-form/text-and-form-text-column/edit.tsx +94 -0
- package/src/blocks/text-and-form/text-and-form-text-column/editor.scss +29 -0
- package/src/blocks/text-and-form/text-and-form-text-column/factory.tsx +41 -0
- package/src/blocks/text-and-form/text-and-form-text-column/index.ts +18 -0
- package/src/blocks/text-and-form/text-and-form-text-column/types.ts +23 -0
- package/src/blocks/usp/usp-group/constants.ts +54 -0
- package/src/blocks/usp/usp-group/edit.tsx +197 -0
- package/src/blocks/usp/usp-group/editor.scss +24 -0
- package/src/blocks/usp/usp-group/factory.tsx +113 -0
- package/src/blocks/usp/usp-group/icon.tsx +18 -0
- package/src/blocks/usp/usp-group/index.ts +15 -0
- package/src/blocks/usp/usp-group/types.ts +70 -0
- package/src/blocks/usp/usp-item/constants.ts +7 -0
- package/src/blocks/usp/usp-item/edit.tsx +65 -0
- package/src/blocks/usp/usp-item/editor.scss +17 -0
- package/src/blocks/usp/usp-item/factory.tsx +30 -0
- package/src/blocks/usp/usp-item/index.ts +11 -0
- package/src/blocks/usp/usp-item/types.ts +17 -0
- package/src/components/IconControl/IconControl.tsx +55 -0
- package/src/components/IconControl/editor.scss +53 -0
- package/src/components/IconControl/index.ts +2 -0
- package/src/components/IconControl/index.tsx +1 -0
- package/src/components/ImagePicker/ImagePicker.tsx +124 -0
- package/src/components/ImagePicker/editor.scss +79 -0
- package/src/components/ImagePicker/index.ts +2 -0
- package/src/components/ImagePicker/index.tsx +1 -0
- package/src/components/ItemIconControl/ItemIconControl.tsx +72 -0
- package/src/components/ItemIconControl/ItemIconModal.tsx +12 -0
- package/src/components/ItemIconControl/ItemIconPreview.tsx +93 -0
- package/src/components/ItemIconControl/editor.scss +52 -0
- package/src/components/ItemIconControl/index.ts +2 -0
- package/src/components/ItemIconControl/types.d.ts +30 -0
- package/src/constants.ts +20 -0
- package/src/editor.scss +34 -0
- package/src/globals.scss +237 -0
- package/src/hooks/useGroupBlock.ts +53 -0
- package/src/index.ts +122 -0
- package/src/types.ts +33 -0
- package/src/utils/createEditAdapter.ts +11 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@layer base {
|
|
2
|
+
.g-text-and-form__text {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
gap: 8px;
|
|
6
|
+
padding: 8px;
|
|
7
|
+
width: 100%;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.g-text-and-form__overline {
|
|
11
|
+
display: block;
|
|
12
|
+
font-size: 12px;
|
|
13
|
+
font-weight: 600;
|
|
14
|
+
text-transform: uppercase;
|
|
15
|
+
letter-spacing: 1px;
|
|
16
|
+
color: #888;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.g-text-and-form__heading {
|
|
20
|
+
margin: 0;
|
|
21
|
+
font-weight: 700;
|
|
22
|
+
font-size: var(--heading-size, 24px);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.g-text-and-form__inner-blocks {
|
|
26
|
+
margin-top: 8px;
|
|
27
|
+
min-height: 40px;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {InnerBlocks} from '@wordpress/block-editor'
|
|
2
|
+
import type {BlockConfiguration} from '@wordpress/blocks'
|
|
3
|
+
import {__} from '@wordpress/i18n'
|
|
4
|
+
import type {OptionArray} from '~/types'
|
|
5
|
+
import {DEFAULT_CONTENT_SIZES, DEFAULT_HEADING_STYLES, HEADING_LEVELS} from './constants'
|
|
6
|
+
import {createTextAndFormTextColumnEdit} from './edit'
|
|
7
|
+
import type {TextAndFormTextColumnAttributes, TextAndFormTextColumnOptions} from './types'
|
|
8
|
+
|
|
9
|
+
export type {TextAndFormTextColumnAttributes, TextAndFormTextColumnOptions}
|
|
10
|
+
|
|
11
|
+
export function createTextAndFormTextColumnBlock<
|
|
12
|
+
THeadingStyles extends OptionArray = typeof DEFAULT_HEADING_STYLES,
|
|
13
|
+
TContentSizes extends OptionArray = typeof DEFAULT_CONTENT_SIZES,
|
|
14
|
+
>(
|
|
15
|
+
options: TextAndFormTextColumnOptions<THeadingStyles, TContentSizes>,
|
|
16
|
+
): BlockConfiguration<TextAndFormTextColumnAttributes<THeadingStyles[number]['value'], TContentSizes[number]['value']>> {
|
|
17
|
+
const headingStyles = options.headingStyles ?? DEFAULT_HEADING_STYLES
|
|
18
|
+
const contentSizes = options.contentSizes ?? DEFAULT_CONTENT_SIZES
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
name: options.name,
|
|
22
|
+
title: options.title ?? __('Textový sloupec', 'brilo-blocks'),
|
|
23
|
+
description: options.description,
|
|
24
|
+
category: options.category ?? 'layout',
|
|
25
|
+
...(options.parent && {parent: options.parent}),
|
|
26
|
+
icon: options.icon ?? 'text',
|
|
27
|
+
supports: {html: false, customClassName: false},
|
|
28
|
+
attributes: {
|
|
29
|
+
header: {
|
|
30
|
+
type: 'object',
|
|
31
|
+
default: {
|
|
32
|
+
heading: {title: '', level: HEADING_LEVELS[1], style: headingStyles[1]?.value ?? headingStyles[0].value},
|
|
33
|
+
overline: {title: ''},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
content: {type: 'object', default: {size: contentSizes[1]?.value ?? contentSizes[0].value}},
|
|
37
|
+
},
|
|
38
|
+
edit: createTextAndFormTextColumnEdit(options as unknown as TextAndFormTextColumnOptions),
|
|
39
|
+
save: () => <InnerBlocks.Content />,
|
|
40
|
+
} as unknown as BlockConfiguration<TextAndFormTextColumnAttributes<THeadingStyles[number]['value'], TContentSizes[number]['value']>>
|
|
41
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type {TextAndFormTextColumnAttributes, TextAndFormTextColumnOptions} from './types'
|
|
2
|
+
export {createTextAndFormTextColumnBlock} from './factory'
|
|
3
|
+
|
|
4
|
+
import type {TextAndFormTextColumnOptions} from './types'
|
|
5
|
+
|
|
6
|
+
export const textAndFormTextColumnDefaults: TextAndFormTextColumnOptions = {
|
|
7
|
+
name: 'brilo/text-and-form-text-column',
|
|
8
|
+
parent: ['brilo/text-and-form-group'],
|
|
9
|
+
allowedBlocks: [
|
|
10
|
+
'brilo/basic-button',
|
|
11
|
+
'brilo/basic-heading',
|
|
12
|
+
'brilo/basic-overline',
|
|
13
|
+
'brilo/button-group',
|
|
14
|
+
'core/heading',
|
|
15
|
+
'core/list',
|
|
16
|
+
'core/paragraph',
|
|
17
|
+
],
|
|
18
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type {BriloBlockType, OptionArray} from '~/types'
|
|
2
|
+
import type {DEFAULT_CONTENT_SIZES, DEFAULT_HEADING_STYLES, HEADING_LEVELS} from './constants'
|
|
3
|
+
|
|
4
|
+
export type HeadingStyles = (typeof DEFAULT_HEADING_STYLES)[number]['value']
|
|
5
|
+
export type HeadingLevels = (typeof HEADING_LEVELS)[number]
|
|
6
|
+
export type ContentSizes = (typeof DEFAULT_CONTENT_SIZES)[number]['value']
|
|
7
|
+
|
|
8
|
+
export interface TextAndFormTextColumnAttributes<THeadingStyle extends string = HeadingStyles, TContentSize extends string = ContentSizes>
|
|
9
|
+
extends Record<string, unknown> {
|
|
10
|
+
header: {
|
|
11
|
+
heading: {title: string; level: HeadingLevels; style: THeadingStyle}
|
|
12
|
+
overline: {title: string}
|
|
13
|
+
}
|
|
14
|
+
content: {size: TContentSize}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface TextAndFormTextColumnOptions<
|
|
18
|
+
THeadingStyles extends OptionArray = typeof DEFAULT_HEADING_STYLES,
|
|
19
|
+
TContentSizes extends OptionArray = typeof DEFAULT_CONTENT_SIZES,
|
|
20
|
+
> extends BriloBlockType {
|
|
21
|
+
headingStyles?: THeadingStyles
|
|
22
|
+
contentSizes?: TContentSizes
|
|
23
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {__} from '@wordpress/i18n'
|
|
2
|
+
|
|
3
|
+
export {CONTENT_SIZES as DEFAULT_CONTENT_SIZES} from '~/constants'
|
|
4
|
+
|
|
5
|
+
export const DEFAULT_COLUMNS = [2, 3, 4, 5, 6] as const
|
|
6
|
+
|
|
7
|
+
export const DEFAULT_DIRECTIONS = [
|
|
8
|
+
{value: 'vertical', label: __('Vertikální', 'brilo-blocks')},
|
|
9
|
+
{value: 'horizontal', label: __('Horizontální', 'brilo-blocks')},
|
|
10
|
+
] as const
|
|
11
|
+
|
|
12
|
+
export const HEADING_LEVELS = [2, 3] as const
|
|
13
|
+
|
|
14
|
+
export const DEFAULT_HEADING_STYLES = [
|
|
15
|
+
{value: 'h1', label: 'L', description: __('48px', 'brilo-blocks')},
|
|
16
|
+
{value: 'h2', label: 'M', description: __('32px', 'brilo-blocks')},
|
|
17
|
+
{value: 'h3', label: 'S', description: __('24px', 'brilo-blocks')},
|
|
18
|
+
{value: 'h4', label: 'XS', description: __('20px', 'brilo-blocks')},
|
|
19
|
+
{value: 'h5', label: 'XXS', description: __('16px', 'brilo-blocks')},
|
|
20
|
+
] as const
|
|
21
|
+
|
|
22
|
+
export const DEFAULT_SHADOWS = [
|
|
23
|
+
{value: 'none', label: __('Žádný', 'brilo-blocks')},
|
|
24
|
+
{value: 'sm', label: __('Malý', 'brilo-blocks')},
|
|
25
|
+
{value: 'md', label: __('Střední', 'brilo-blocks')},
|
|
26
|
+
] as const
|
|
27
|
+
|
|
28
|
+
export const DEFAULT_ICON_SIZES = [
|
|
29
|
+
{value: 'xs', label: __('Extra Malá', 'brilo-blocks'), description: __('48px', 'brilo-blocks')},
|
|
30
|
+
{value: 'sm', label: __('Malá', 'brilo-blocks'), description: __('64px', 'brilo-blocks')},
|
|
31
|
+
{value: 'default', label: __('Výchozí', 'brilo-blocks'), description: __('88px', 'brilo-blocks')},
|
|
32
|
+
{value: 'lg', label: __('Velká', 'brilo-blocks'), description: __('104px', 'brilo-blocks')},
|
|
33
|
+
{value: 'xl', label: __('Extra Velká', 'brilo-blocks'), description: __('128px', 'brilo-blocks')},
|
|
34
|
+
] as const
|
|
35
|
+
|
|
36
|
+
export const DEFAULT_ICON_COLORS = [
|
|
37
|
+
{value: 'none', label: __('Žádná', 'brilo-blocks')},
|
|
38
|
+
{value: 'primary', label: __('Primární', 'brilo-blocks')},
|
|
39
|
+
{value: 'secondary', label: __('Sekundární', 'brilo-blocks')},
|
|
40
|
+
{value: 'neutral', label: __('Neutrální', 'brilo-blocks')},
|
|
41
|
+
{value: 'conversion', label: __('Konverzní', 'brilo-blocks')},
|
|
42
|
+
] as const
|
|
43
|
+
|
|
44
|
+
export const DEFAULT_ICON_BACKGROUNDS = [
|
|
45
|
+
{value: 'none', label: __('Žádné', 'brilo-blocks')},
|
|
46
|
+
{value: 'primary', label: __('Primární', 'brilo-blocks')},
|
|
47
|
+
{value: 'secondary', label: __('Sekundární', 'brilo-blocks')},
|
|
48
|
+
{value: 'neutral', label: __('Neutrální', 'brilo-blocks')},
|
|
49
|
+
] as const
|
|
50
|
+
|
|
51
|
+
export const DEFAULT_ALIGNMENTS = [
|
|
52
|
+
{value: 'left', label: __('Vlevo', 'brilo-blocks')},
|
|
53
|
+
{value: 'center', label: __('Na střed', 'brilo-blocks')},
|
|
54
|
+
] as const
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import {InspectorControls} from '@wordpress/block-editor'
|
|
2
|
+
import {
|
|
3
|
+
PanelBody,
|
|
4
|
+
SelectControl,
|
|
5
|
+
ToggleControl,
|
|
6
|
+
__experimentalToggleGroupControl as ToggleGroupControl,
|
|
7
|
+
__experimentalToggleGroupControlOption as ToggleGroupControlOption,
|
|
8
|
+
} from '@wordpress/components'
|
|
9
|
+
import {__} from '@wordpress/i18n'
|
|
10
|
+
import clsx from 'clsx'
|
|
11
|
+
import {useGroupBlock} from '~/hooks/useGroupBlock'
|
|
12
|
+
import {
|
|
13
|
+
DEFAULT_ALIGNMENTS,
|
|
14
|
+
DEFAULT_COLUMNS,
|
|
15
|
+
DEFAULT_CONTENT_SIZES,
|
|
16
|
+
DEFAULT_DIRECTIONS,
|
|
17
|
+
DEFAULT_HEADING_STYLES,
|
|
18
|
+
DEFAULT_ICON_BACKGROUNDS,
|
|
19
|
+
DEFAULT_ICON_COLORS,
|
|
20
|
+
DEFAULT_ICON_SIZES,
|
|
21
|
+
DEFAULT_SHADOWS,
|
|
22
|
+
HEADING_LEVELS,
|
|
23
|
+
} from './constants'
|
|
24
|
+
import type {
|
|
25
|
+
UspAlignment,
|
|
26
|
+
UspContentSize,
|
|
27
|
+
UspDirection,
|
|
28
|
+
UspGroupAttributes,
|
|
29
|
+
UspGroupOptions,
|
|
30
|
+
UspHeadingLevel,
|
|
31
|
+
UspHeadingStyle,
|
|
32
|
+
UspIconBackground,
|
|
33
|
+
UspIconColor,
|
|
34
|
+
UspIconSize,
|
|
35
|
+
UspShadow,
|
|
36
|
+
} from './types'
|
|
37
|
+
|
|
38
|
+
export function createUspGroupEdit(options: UspGroupOptions) {
|
|
39
|
+
const COLUMNS = options.columns ?? DEFAULT_COLUMNS
|
|
40
|
+
const DIRECTIONS = options.directions ?? DEFAULT_DIRECTIONS
|
|
41
|
+
const HEADING_STYLES = options.headingStyles ?? DEFAULT_HEADING_STYLES
|
|
42
|
+
const SHADOWS = options.shadows ?? DEFAULT_SHADOWS
|
|
43
|
+
const ICON_SIZES = options.iconSizes ?? DEFAULT_ICON_SIZES
|
|
44
|
+
const ICON_COLORS = options.iconColors ?? DEFAULT_ICON_COLORS
|
|
45
|
+
const ICON_BACKGROUND = options.iconBackgrounds ?? DEFAULT_ICON_BACKGROUNDS
|
|
46
|
+
const ALIGNMENTS = options.alignments ?? DEFAULT_ALIGNMENTS
|
|
47
|
+
const CONTENT_SIZES = options.contentSizes ?? DEFAULT_CONTENT_SIZES
|
|
48
|
+
|
|
49
|
+
return function Edit({
|
|
50
|
+
attributes,
|
|
51
|
+
setAttributes,
|
|
52
|
+
}: {
|
|
53
|
+
attributes: UspGroupAttributes
|
|
54
|
+
setAttributes: (a: Partial<UspGroupAttributes>) => void
|
|
55
|
+
}) {
|
|
56
|
+
const {columns, headingSettings, content, style} = attributes
|
|
57
|
+
|
|
58
|
+
const {blockProps, innerBlocksProps} = useGroupBlock({
|
|
59
|
+
blockClassName: clsx(
|
|
60
|
+
options.blockClassName ?? 'g-usp wp-block-section',
|
|
61
|
+
`--direction-${style.direction}`,
|
|
62
|
+
style.card && '--card',
|
|
63
|
+
style.shadow !== 'none' && `--shadow-${style.shadow}`,
|
|
64
|
+
),
|
|
65
|
+
containerClassName: [options.containerClassName ?? 'u-grid-responsive', `--cols-${columns}`],
|
|
66
|
+
containerStyle: {'--grid-max-col-count': columns},
|
|
67
|
+
allowedBlocks: options.allowedBlocks,
|
|
68
|
+
orientation: 'horizontal',
|
|
69
|
+
template: options.template,
|
|
70
|
+
layout: {type: 'default'},
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<>
|
|
75
|
+
<InspectorControls>
|
|
76
|
+
<PanelBody title={__('Rozložení', 'brilo-blocks')}>
|
|
77
|
+
<ToggleGroupControl
|
|
78
|
+
isBlock
|
|
79
|
+
label={__('Počet sloupců', 'brilo-blocks')}
|
|
80
|
+
value={String(columns)}
|
|
81
|
+
onChange={(v) => setAttributes({columns: Number(v) as UspGroupAttributes['columns']})}
|
|
82
|
+
>
|
|
83
|
+
{COLUMNS.map((c) => (
|
|
84
|
+
<ToggleGroupControlOption key={c} value={String(c)} label={String(c)} />
|
|
85
|
+
))}
|
|
86
|
+
</ToggleGroupControl>
|
|
87
|
+
<ToggleGroupControl
|
|
88
|
+
isBlock
|
|
89
|
+
label={__('Směr', 'brilo-blocks')}
|
|
90
|
+
value={style.direction}
|
|
91
|
+
onChange={(v) => setAttributes({style: {...style, direction: v as UspDirection}})}
|
|
92
|
+
>
|
|
93
|
+
{DIRECTIONS.map((d) => (
|
|
94
|
+
<ToggleGroupControlOption key={d.value} value={d.value} label={d.label} />
|
|
95
|
+
))}
|
|
96
|
+
</ToggleGroupControl>
|
|
97
|
+
{style.direction === 'vertical' && (
|
|
98
|
+
<ToggleGroupControl
|
|
99
|
+
isBlock
|
|
100
|
+
label={__('Zarovnání', 'brilo-blocks')}
|
|
101
|
+
value={style.align}
|
|
102
|
+
onChange={(v) => setAttributes({style: {...style, align: v as UspAlignment}})}
|
|
103
|
+
>
|
|
104
|
+
{ALIGNMENTS.map((a) => (
|
|
105
|
+
<ToggleGroupControlOption key={a.value} value={a.value} label={a.label} />
|
|
106
|
+
))}
|
|
107
|
+
</ToggleGroupControl>
|
|
108
|
+
)}
|
|
109
|
+
<ToggleGroupControl
|
|
110
|
+
isBlock
|
|
111
|
+
label={__('Úroveň nadpisu položek', 'brilo-blocks')}
|
|
112
|
+
value={String(headingSettings.level)}
|
|
113
|
+
onChange={(v) => setAttributes({headingSettings: {...headingSettings, level: Number(v) as UspHeadingLevel}})}
|
|
114
|
+
>
|
|
115
|
+
{HEADING_LEVELS.map((l) => (
|
|
116
|
+
<ToggleGroupControlOption key={l} value={String(l)} label={`H${l}`} />
|
|
117
|
+
))}
|
|
118
|
+
</ToggleGroupControl>
|
|
119
|
+
<ToggleGroupControl
|
|
120
|
+
isBlock
|
|
121
|
+
label={__('Styl nadpisu položek', 'brilo-blocks')}
|
|
122
|
+
value={headingSettings.style}
|
|
123
|
+
onChange={(v) => setAttributes({headingSettings: {...headingSettings, style: v as UspHeadingStyle}})}
|
|
124
|
+
>
|
|
125
|
+
{HEADING_STYLES.map((s) => (
|
|
126
|
+
<ToggleGroupControlOption key={s.value} value={s.value} label={s.label} aria-label={s.description} showTooltip />
|
|
127
|
+
))}
|
|
128
|
+
</ToggleGroupControl>
|
|
129
|
+
<ToggleGroupControl
|
|
130
|
+
isBlock
|
|
131
|
+
label={__('Velikost textu', 'brilo-blocks')}
|
|
132
|
+
value={content.size}
|
|
133
|
+
onChange={(v) => setAttributes({content: {size: v as UspContentSize}})}
|
|
134
|
+
>
|
|
135
|
+
{CONTENT_SIZES.map((s) => (
|
|
136
|
+
<ToggleGroupControlOption key={s.value} value={s.value} label={s.label} />
|
|
137
|
+
))}
|
|
138
|
+
</ToggleGroupControl>
|
|
139
|
+
</PanelBody>
|
|
140
|
+
<PanelBody title={__('Styl', 'brilo-blocks')}>
|
|
141
|
+
<ToggleControl
|
|
142
|
+
label={__('Karta', 'brilo-blocks')}
|
|
143
|
+
checked={style.card}
|
|
144
|
+
onChange={(v) => setAttributes({style: {...style, card: v}})}
|
|
145
|
+
/>
|
|
146
|
+
{style.card && (
|
|
147
|
+
<ToggleGroupControl
|
|
148
|
+
isBlock
|
|
149
|
+
label={__('Stín', 'brilo-blocks')}
|
|
150
|
+
value={style.shadow}
|
|
151
|
+
onChange={(v) => setAttributes({style: {...style, shadow: v as UspShadow}})}
|
|
152
|
+
>
|
|
153
|
+
{SHADOWS.map((s) => (
|
|
154
|
+
<ToggleGroupControlOption key={s.value} value={s.value} label={s.label} />
|
|
155
|
+
))}
|
|
156
|
+
</ToggleGroupControl>
|
|
157
|
+
)}
|
|
158
|
+
</PanelBody>
|
|
159
|
+
<PanelBody title={__('Ikona', 'brilo-blocks')} initialOpen={false}>
|
|
160
|
+
<ToggleGroupControl
|
|
161
|
+
isBlock
|
|
162
|
+
label={__('Velikost', 'brilo-blocks')}
|
|
163
|
+
value={style.icon.size}
|
|
164
|
+
onChange={(v) => setAttributes({style: {...style, icon: {...style.icon, size: v as UspIconSize}}})}
|
|
165
|
+
>
|
|
166
|
+
{ICON_SIZES.map((s) => (
|
|
167
|
+
<ToggleGroupControlOption key={s.value} value={s.value} label={s.label} aria-label={s.description} showTooltip />
|
|
168
|
+
))}
|
|
169
|
+
</ToggleGroupControl>
|
|
170
|
+
<SelectControl<string>
|
|
171
|
+
label={__('Barva', 'brilo-blocks')}
|
|
172
|
+
value={style.icon.color}
|
|
173
|
+
options={[...ICON_COLORS]}
|
|
174
|
+
onChange={(v) => setAttributes({style: {...style, icon: {...style.icon, color: v as UspIconColor}}})}
|
|
175
|
+
/>
|
|
176
|
+
<SelectControl<string>
|
|
177
|
+
label={__('Pozadí', 'brilo-blocks')}
|
|
178
|
+
value={style.icon.background}
|
|
179
|
+
options={[...ICON_BACKGROUND]}
|
|
180
|
+
onChange={(v) => setAttributes({style: {...style, icon: {...style.icon, background: v as UspIconBackground}}})}
|
|
181
|
+
/>
|
|
182
|
+
{style.icon.background !== 'none' && (
|
|
183
|
+
<ToggleControl
|
|
184
|
+
label={__('Ohraničení ikony', 'brilo-blocks')}
|
|
185
|
+
checked={style.icon.bordered ?? false}
|
|
186
|
+
onChange={(v) => setAttributes({style: {...style, icon: {...style.icon, bordered: v}}})}
|
|
187
|
+
/>
|
|
188
|
+
)}
|
|
189
|
+
</PanelBody>
|
|
190
|
+
</InspectorControls>
|
|
191
|
+
<div {...blockProps}>
|
|
192
|
+
<div {...innerBlocksProps} />
|
|
193
|
+
</div>
|
|
194
|
+
</>
|
|
195
|
+
)
|
|
196
|
+
}
|
|
197
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@layer base {
|
|
2
|
+
.g-usp {
|
|
3
|
+
padding: 8px;
|
|
4
|
+
min-height: 60px;
|
|
5
|
+
|
|
6
|
+
&.--direction-horizontal .i-usp__inner {
|
|
7
|
+
flex-direction: row;
|
|
8
|
+
align-items: flex-start;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
&.--card .i-usp__inner {
|
|
12
|
+
background: #fff;
|
|
13
|
+
border-color: #d0d5dd;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&.--shadow-sm .i-usp__inner {
|
|
17
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&.--shadow-md .i-usp__inner {
|
|
21
|
+
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.14);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import {InnerBlocks} from '@wordpress/block-editor'
|
|
2
|
+
import type {BlockConfiguration} from '@wordpress/blocks'
|
|
3
|
+
import {__} from '@wordpress/i18n'
|
|
4
|
+
import type {NumberArray, OptionArray} from '~/types'
|
|
5
|
+
import {
|
|
6
|
+
DEFAULT_ALIGNMENTS,
|
|
7
|
+
DEFAULT_COLUMNS,
|
|
8
|
+
DEFAULT_CONTENT_SIZES,
|
|
9
|
+
DEFAULT_DIRECTIONS,
|
|
10
|
+
DEFAULT_HEADING_STYLES,
|
|
11
|
+
DEFAULT_ICON_BACKGROUNDS,
|
|
12
|
+
DEFAULT_ICON_COLORS,
|
|
13
|
+
DEFAULT_ICON_SIZES,
|
|
14
|
+
DEFAULT_SHADOWS,
|
|
15
|
+
HEADING_LEVELS,
|
|
16
|
+
} from './constants'
|
|
17
|
+
import {createUspGroupEdit} from './edit'
|
|
18
|
+
import {icon as defaultIcon} from './icon'
|
|
19
|
+
import type {UspGroupAttributes, UspGroupOptions} from './types'
|
|
20
|
+
|
|
21
|
+
export type {UspGroupAttributes, UspGroupOptions}
|
|
22
|
+
|
|
23
|
+
export function createUspGroupBlock<
|
|
24
|
+
TColumns extends NumberArray = typeof DEFAULT_COLUMNS,
|
|
25
|
+
TDirections extends OptionArray = typeof DEFAULT_DIRECTIONS,
|
|
26
|
+
THeadingStyles extends OptionArray = typeof DEFAULT_HEADING_STYLES,
|
|
27
|
+
TShadows extends OptionArray = typeof DEFAULT_SHADOWS,
|
|
28
|
+
TIconSizes extends OptionArray = typeof DEFAULT_ICON_SIZES,
|
|
29
|
+
TIconColors extends OptionArray = typeof DEFAULT_ICON_COLORS,
|
|
30
|
+
TIconBackgrounds extends OptionArray = typeof DEFAULT_ICON_BACKGROUNDS,
|
|
31
|
+
TAlignments extends OptionArray = typeof DEFAULT_ALIGNMENTS,
|
|
32
|
+
TContentSizes extends OptionArray = typeof DEFAULT_CONTENT_SIZES,
|
|
33
|
+
>(
|
|
34
|
+
options: UspGroupOptions<
|
|
35
|
+
TColumns,
|
|
36
|
+
TDirections,
|
|
37
|
+
THeadingStyles,
|
|
38
|
+
TShadows,
|
|
39
|
+
TIconSizes,
|
|
40
|
+
TIconColors,
|
|
41
|
+
TIconBackgrounds,
|
|
42
|
+
TAlignments,
|
|
43
|
+
TContentSizes
|
|
44
|
+
>,
|
|
45
|
+
): BlockConfiguration<
|
|
46
|
+
UspGroupAttributes<
|
|
47
|
+
TColumns[number],
|
|
48
|
+
TDirections[number]['value'],
|
|
49
|
+
THeadingStyles[number]['value'],
|
|
50
|
+
TShadows[number]['value'],
|
|
51
|
+
TIconSizes[number]['value'],
|
|
52
|
+
TIconColors[number]['value'],
|
|
53
|
+
TIconBackgrounds[number]['value'],
|
|
54
|
+
TAlignments[number]['value'],
|
|
55
|
+
TContentSizes[number]['value']
|
|
56
|
+
>
|
|
57
|
+
> {
|
|
58
|
+
const columns = options.columns ?? DEFAULT_COLUMNS
|
|
59
|
+
const directions = options.directions ?? DEFAULT_DIRECTIONS
|
|
60
|
+
const headingStyles = options.headingStyles ?? DEFAULT_HEADING_STYLES
|
|
61
|
+
const shadows = options.shadows ?? DEFAULT_SHADOWS
|
|
62
|
+
const iconSizes = options.iconSizes ?? DEFAULT_ICON_SIZES
|
|
63
|
+
const iconColors = options.iconColors ?? DEFAULT_ICON_COLORS
|
|
64
|
+
const iconBackgrounds = options.iconBackgrounds ?? DEFAULT_ICON_BACKGROUNDS
|
|
65
|
+
const alignments = options.alignments ?? DEFAULT_ALIGNMENTS
|
|
66
|
+
const contentSizes = options.contentSizes ?? DEFAULT_CONTENT_SIZES
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
name: options.name,
|
|
70
|
+
title: options.title ?? __('USP Konkurenční výhody', 'brilo-blocks'),
|
|
71
|
+
description: options.description,
|
|
72
|
+
category: options.category ?? 'layout',
|
|
73
|
+
...(options.parent && {parent: options.parent}),
|
|
74
|
+
icon: options.icon ?? {src: defaultIcon},
|
|
75
|
+
supports: {html: false, customClassName: false},
|
|
76
|
+
attributes: {
|
|
77
|
+
columns: {
|
|
78
|
+
type: 'number',
|
|
79
|
+
default: columns[1] ?? columns[0],
|
|
80
|
+
enum: [...columns],
|
|
81
|
+
},
|
|
82
|
+
headingSettings: {
|
|
83
|
+
type: 'object',
|
|
84
|
+
default: {level: HEADING_LEVELS[0], style: headingStyles[2]?.value ?? headingStyles[0].value},
|
|
85
|
+
},
|
|
86
|
+
content: {type: 'object', default: {size: contentSizes[1]?.value ?? contentSizes[0].value}},
|
|
87
|
+
style: {
|
|
88
|
+
type: 'object',
|
|
89
|
+
default: {
|
|
90
|
+
shadow: shadows[0].value,
|
|
91
|
+
card: false,
|
|
92
|
+
direction: directions[0].value,
|
|
93
|
+
align: alignments[0].value,
|
|
94
|
+
icon: {size: iconSizes[2]?.value ?? iconSizes[0].value, color: iconColors[0].value, background: iconBackgrounds[0].value},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
edit: createUspGroupEdit(options as unknown as UspGroupOptions),
|
|
99
|
+
save: () => <InnerBlocks.Content />,
|
|
100
|
+
} as unknown as BlockConfiguration<
|
|
101
|
+
UspGroupAttributes<
|
|
102
|
+
TColumns[number],
|
|
103
|
+
TDirections[number]['value'],
|
|
104
|
+
THeadingStyles[number]['value'],
|
|
105
|
+
TShadows[number]['value'],
|
|
106
|
+
TIconSizes[number]['value'],
|
|
107
|
+
TIconColors[number]['value'],
|
|
108
|
+
TIconBackgrounds[number]['value'],
|
|
109
|
+
TAlignments[number]['value'],
|
|
110
|
+
TContentSizes[number]['value']
|
|
111
|
+
>
|
|
112
|
+
>
|
|
113
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const icon = (
|
|
2
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<title>USP Group</title>
|
|
4
|
+
<path d="M4 6H9V7H4V6Z" fill="black" />
|
|
5
|
+
<path d="M10 6H16V7H10V6Z" fill="black" />
|
|
6
|
+
<path
|
|
7
|
+
d="M12 4C12 3.44772 12.4477 3 13 3H14C14.5523 3 15 3.44772 15 4C15 4.55228 14.5523 5 14 5H13C12.4477 5 12 4.55228 12 4Z"
|
|
8
|
+
fill="black"
|
|
9
|
+
/>
|
|
10
|
+
<path d="M5 4C5 3.44772 5.44772 3 6 3H10C10.5523 3 11 3.44772 11 4C11 4.55228 10.5523 5 10 5H6C5.44772 5 5 4.55228 5 4Z" fill="black" />
|
|
11
|
+
<rect x="1.5" y="10.5" width="3" height="3" rx="1.5" stroke="black" fill="none" />
|
|
12
|
+
<rect x="8.5" y="10.5" width="3" height="3" rx="1.5" stroke="black" fill="none" />
|
|
13
|
+
<rect x="15.5" y="10.5" width="3" height="3" rx="1.5" stroke="black" fill="none" />
|
|
14
|
+
<path d="M1 15H5V16H1V15Z" fill="black" />
|
|
15
|
+
<path d="M8 15H12V16H8V15Z" fill="black" />
|
|
16
|
+
<path d="M15 15H19V16H15V15Z" fill="black" />
|
|
17
|
+
</svg>
|
|
18
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type {UspGroupAttributes, UspGroupOptions} from './types'
|
|
2
|
+
export {createUspGroupBlock} from './factory'
|
|
3
|
+
|
|
4
|
+
import type {UspGroupOptions} from './types'
|
|
5
|
+
|
|
6
|
+
export const uspGroupDefaults: UspGroupOptions = {
|
|
7
|
+
name: 'brilo/usp-group',
|
|
8
|
+
parent: ['brilo/base-section'],
|
|
9
|
+
allowedBlocks: ['brilo/usp-item'],
|
|
10
|
+
template: [
|
|
11
|
+
['brilo/usp-item', {}],
|
|
12
|
+
['brilo/usp-item', {}],
|
|
13
|
+
['brilo/usp-item', {}],
|
|
14
|
+
],
|
|
15
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type {BriloBlockType, NumberArray, OptionArray} from '~/types'
|
|
2
|
+
import type {
|
|
3
|
+
DEFAULT_ALIGNMENTS,
|
|
4
|
+
DEFAULT_COLUMNS,
|
|
5
|
+
DEFAULT_CONTENT_SIZES,
|
|
6
|
+
DEFAULT_DIRECTIONS,
|
|
7
|
+
DEFAULT_HEADING_STYLES,
|
|
8
|
+
DEFAULT_ICON_BACKGROUNDS,
|
|
9
|
+
DEFAULT_ICON_COLORS,
|
|
10
|
+
DEFAULT_ICON_SIZES,
|
|
11
|
+
DEFAULT_SHADOWS,
|
|
12
|
+
HEADING_LEVELS,
|
|
13
|
+
} from './constants'
|
|
14
|
+
|
|
15
|
+
export type UspColumns = (typeof DEFAULT_COLUMNS)[number]
|
|
16
|
+
export type UspDirection = (typeof DEFAULT_DIRECTIONS)[number]['value']
|
|
17
|
+
export type UspHeadingLevel = (typeof HEADING_LEVELS)[number]
|
|
18
|
+
export type UspHeadingStyle = (typeof DEFAULT_HEADING_STYLES)[number]['value']
|
|
19
|
+
export type UspShadow = (typeof DEFAULT_SHADOWS)[number]['value']
|
|
20
|
+
export type UspAlignment = (typeof DEFAULT_ALIGNMENTS)[number]['value']
|
|
21
|
+
export type UspIconSize = (typeof DEFAULT_ICON_SIZES)[number]['value']
|
|
22
|
+
export type UspIconColor = (typeof DEFAULT_ICON_COLORS)[number]['value']
|
|
23
|
+
export type UspIconBackground = (typeof DEFAULT_ICON_BACKGROUNDS)[number]['value']
|
|
24
|
+
export type UspContentSize = (typeof DEFAULT_CONTENT_SIZES)[number]['value']
|
|
25
|
+
|
|
26
|
+
export interface UspGroupAttributes<
|
|
27
|
+
TColumn extends number = UspColumns,
|
|
28
|
+
TDirection extends string = UspDirection,
|
|
29
|
+
THeadingStyle extends string = UspHeadingStyle,
|
|
30
|
+
TShadow extends string = UspShadow,
|
|
31
|
+
TIconSize extends string = UspIconSize,
|
|
32
|
+
TIconColor extends string = UspIconColor,
|
|
33
|
+
TIconBackground extends string = UspIconBackground,
|
|
34
|
+
TAlignment extends string = UspAlignment,
|
|
35
|
+
TContentSize extends string = UspContentSize,
|
|
36
|
+
> extends Record<string, unknown> {
|
|
37
|
+
columns: TColumn
|
|
38
|
+
headingSettings: {level: UspHeadingLevel; style: THeadingStyle}
|
|
39
|
+
content: {size: TContentSize}
|
|
40
|
+
style: {
|
|
41
|
+
shadow: TShadow
|
|
42
|
+
card: boolean
|
|
43
|
+
direction: TDirection
|
|
44
|
+
align: TAlignment
|
|
45
|
+
icon: {size: TIconSize; color: TIconColor; background: TIconBackground; bordered?: boolean}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface UspGroupOptions<
|
|
50
|
+
TColumns extends NumberArray = typeof DEFAULT_COLUMNS,
|
|
51
|
+
TDirections extends OptionArray = typeof DEFAULT_DIRECTIONS,
|
|
52
|
+
THeadingStyles extends OptionArray = typeof DEFAULT_HEADING_STYLES,
|
|
53
|
+
TShadows extends OptionArray = typeof DEFAULT_SHADOWS,
|
|
54
|
+
TIconSizes extends OptionArray = typeof DEFAULT_ICON_SIZES,
|
|
55
|
+
TIconColors extends OptionArray = typeof DEFAULT_ICON_COLORS,
|
|
56
|
+
TIconBackgrounds extends OptionArray = typeof DEFAULT_ICON_BACKGROUNDS,
|
|
57
|
+
TAlignments extends OptionArray = typeof DEFAULT_ALIGNMENTS,
|
|
58
|
+
TContentSizes extends OptionArray = typeof DEFAULT_CONTENT_SIZES,
|
|
59
|
+
> extends BriloBlockType {
|
|
60
|
+
allowedBlocks: string[]
|
|
61
|
+
columns?: TColumns
|
|
62
|
+
directions?: TDirections
|
|
63
|
+
headingStyles?: THeadingStyles
|
|
64
|
+
shadows?: TShadows
|
|
65
|
+
iconSizes?: TIconSizes
|
|
66
|
+
iconColors?: TIconColors
|
|
67
|
+
iconBackgrounds?: TIconBackgrounds
|
|
68
|
+
alignments?: TAlignments
|
|
69
|
+
contentSizes?: TContentSizes
|
|
70
|
+
}
|