@brilo/base-blocks 0.1.43 → 0.1.45
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/.tsbuildinfo +1 -1
- package/build/blocks/compare/compare-group/constants.d.ts +27 -0
- package/build/blocks/compare/compare-group/constants.d.ts.map +1 -1
- package/build/blocks/compare/compare-group/constants.js +23 -0
- package/build/blocks/compare/compare-group/edit.d.ts.map +1 -1
- package/build/blocks/compare/compare-group/edit.js +12 -7
- package/build/blocks/compare/compare-group/factory.d.ts.map +1 -1
- package/build/blocks/compare/compare-group/factory.js +10 -1
- package/build/blocks/compare/compare-group/index.d.ts +1 -1
- package/build/blocks/compare/compare-group/index.d.ts.map +1 -1
- package/build/blocks/compare/compare-group/types.d.ts +7 -1
- package/build/blocks/compare/compare-group/types.d.ts.map +1 -1
- package/build/blocks/compare/compare-item/edit.d.ts.map +1 -1
- package/build/blocks/compare/compare-item/edit.js +6 -4
- package/build/blocks/compare/compare-item/factory.d.ts.map +1 -1
- package/build/blocks/compare/compare-item/factory.js +4 -0
- package/build/blocks/compare/compare-item/index.js +1 -1
- package/build/blocks/compare/compare-item/types.d.ts +2 -0
- package/build/blocks/compare/compare-item/types.d.ts.map +1 -1
- package/build/blocks/core/basic-icon/buildPreviewStyle.d.ts +8 -0
- package/build/blocks/core/basic-icon/buildPreviewStyle.d.ts.map +1 -0
- package/build/blocks/core/basic-icon/buildPreviewStyle.js +22 -0
- package/build/blocks/core/basic-icon/constants.d.ts +84 -0
- package/build/blocks/core/basic-icon/constants.d.ts.map +1 -0
- package/build/blocks/core/basic-icon/constants.js +41 -0
- package/build/blocks/core/basic-icon/edit.d.ts +6 -0
- package/build/blocks/core/basic-icon/edit.d.ts.map +1 -0
- package/build/blocks/core/basic-icon/edit.js +22 -0
- package/build/blocks/core/basic-icon/factory.d.ts +5 -0
- package/build/blocks/core/basic-icon/factory.d.ts.map +1 -0
- package/build/blocks/core/basic-icon/factory.js +38 -0
- package/build/blocks/core/basic-icon/index.d.ts +5 -0
- package/build/blocks/core/basic-icon/index.d.ts.map +1 -0
- package/build/blocks/core/basic-icon/index.js +7 -0
- package/build/blocks/core/basic-icon/types.d.ts +30 -0
- package/build/blocks/core/basic-icon/types.d.ts.map +1 -0
- package/build/blocks/core/basic-icon/types.js +1 -0
- package/build/blocks/faq/faq-group/constants.d.ts +29 -0
- package/build/blocks/faq/faq-group/constants.d.ts.map +1 -1
- package/build/blocks/faq/faq-group/constants.js +15 -0
- package/build/blocks/faq/faq-group/edit.d.ts.map +1 -1
- package/build/blocks/faq/faq-group/edit.js +14 -5
- package/build/blocks/faq/faq-group/factory.d.ts.map +1 -1
- package/build/blocks/faq/faq-group/factory.js +37 -17
- package/build/blocks/faq/faq-group/index.d.ts +1 -1
- package/build/blocks/faq/faq-group/index.d.ts.map +1 -1
- package/build/blocks/faq/faq-group/types.d.ts +21 -1
- package/build/blocks/faq/faq-group/types.d.ts.map +1 -1
- package/build/blocks/gallery/gallery-group/edit.d.ts.map +1 -1
- package/build/blocks/gallery/gallery-group/edit.js +4 -2
- package/build/blocks/gallery/gallery-group/factory.d.ts.map +1 -1
- package/build/blocks/gallery/gallery-group/factory.js +2 -0
- package/build/blocks/gallery/gallery-group/types.d.ts +1 -0
- package/build/blocks/gallery/gallery-group/types.d.ts.map +1 -1
- package/build/blocks/groups/text-and-media-group/index.d.ts.map +1 -1
- package/build/blocks/groups/text-and-media-group/index.js +1 -0
- package/build/blocks/list/list-group/constants.d.ts +21 -0
- package/build/blocks/list/list-group/constants.d.ts.map +1 -0
- package/build/blocks/list/list-group/constants.js +12 -0
- package/build/blocks/list/list-group/edit.d.ts +6 -0
- package/build/blocks/list/list-group/edit.d.ts.map +1 -0
- package/build/blocks/list/list-group/edit.js +30 -0
- package/build/blocks/list/list-group/factory.d.ts +7 -0
- package/build/blocks/list/list-group/factory.d.ts.map +1 -0
- package/build/blocks/list/list-group/factory.js +29 -0
- package/build/blocks/list/list-group/icon.d.ts +2 -0
- package/build/blocks/list/list-group/icon.d.ts.map +1 -0
- package/build/blocks/list/list-group/icon.js +2 -0
- package/build/blocks/list/list-group/index.d.ts +5 -0
- package/build/blocks/list/list-group/index.d.ts.map +1 -0
- package/build/blocks/list/list-group/index.js +11 -0
- package/build/blocks/list/list-group/types.d.ts +22 -0
- package/build/blocks/list/list-group/types.d.ts.map +1 -0
- package/build/blocks/list/list-group/types.js +1 -0
- package/build/blocks/list/list-item/buildPreviewStyle.d.ts +20 -0
- package/build/blocks/list/list-item/buildPreviewStyle.d.ts.map +1 -0
- package/build/blocks/list/list-item/buildPreviewStyle.js +18 -0
- package/build/blocks/list/list-item/constants.d.ts +36 -0
- package/build/blocks/list/list-item/constants.d.ts.map +1 -0
- package/build/blocks/list/list-item/constants.js +16 -0
- package/build/blocks/list/list-item/edit.d.ts +11 -0
- package/build/blocks/list/list-item/edit.d.ts.map +1 -0
- package/build/blocks/list/list-item/edit.js +18 -0
- package/build/blocks/list/list-item/factory.d.ts +5 -0
- package/build/blocks/list/list-item/factory.d.ts.map +1 -0
- package/build/blocks/list/list-item/factory.js +29 -0
- package/build/blocks/list/list-item/index.d.ts +5 -0
- package/build/blocks/list/list-item/index.d.ts.map +1 -0
- package/build/blocks/list/list-item/index.js +7 -0
- package/build/blocks/list/list-item/types.d.ts +21 -0
- package/build/blocks/list/list-item/types.d.ts.map +1 -0
- package/build/blocks/list/list-item/types.js +1 -0
- package/build/blocks/priceplan/priceplan-group/edit.d.ts +5 -2
- package/build/blocks/priceplan/priceplan-group/edit.d.ts.map +1 -1
- package/build/blocks/priceplan/priceplan-group/edit.js +7 -3
- package/build/blocks/priceplan/priceplan-group/factory.d.ts.map +1 -1
- package/build/blocks/priceplan/priceplan-group/factory.js +2 -1
- package/build/blocks/priceplan/priceplan-group/types.d.ts +1 -0
- package/build/blocks/priceplan/priceplan-group/types.d.ts.map +1 -1
- package/build/blocks/review/review-group/constants.d.ts +10 -0
- package/build/blocks/review/review-group/constants.d.ts.map +1 -1
- package/build/blocks/review/review-group/constants.js +5 -0
- package/build/blocks/review/review-group/edit.d.ts.map +1 -1
- package/build/blocks/review/review-group/edit.js +10 -6
- package/build/blocks/review/review-group/factory.d.ts.map +1 -1
- package/build/blocks/review/review-group/factory.js +36 -21
- package/build/blocks/review/review-group/index.d.ts +1 -1
- package/build/blocks/review/review-group/index.d.ts.map +1 -1
- package/build/blocks/review/review-group/types.d.ts +11 -1
- package/build/blocks/review/review-group/types.d.ts.map +1 -1
- package/build/blocks/sections/base-section/constants.d.ts +35 -0
- package/build/blocks/sections/base-section/constants.d.ts.map +1 -1
- package/build/blocks/sections/base-section/constants.js +10 -0
- package/build/blocks/sections/base-section/controls.d.ts.map +1 -1
- package/build/blocks/sections/base-section/controls.js +26 -12
- package/build/blocks/sections/base-section/edit.d.ts.map +1 -1
- package/build/blocks/sections/base-section/edit.js +12 -4
- package/build/blocks/sections/base-section/types.d.ts +9 -1
- package/build/blocks/sections/base-section/types.d.ts.map +1 -1
- package/build/blocks/signpost/signpost-group/edit.d.ts.map +1 -1
- package/build/blocks/signpost/signpost-group/edit.js +4 -2
- package/build/blocks/signpost/signpost-group/factory.d.ts.map +1 -1
- package/build/blocks/signpost/signpost-group/factory.js +2 -0
- package/build/blocks/signpost/signpost-group/types.d.ts +1 -0
- package/build/blocks/signpost/signpost-group/types.d.ts.map +1 -1
- package/build/blocks/step/step-group/edit.d.ts.map +1 -1
- package/build/blocks/step/step-group/edit.js +4 -3
- package/build/blocks/step/step-group/factory.d.ts.map +1 -1
- package/build/blocks/step/step-group/factory.js +2 -0
- package/build/blocks/step/step-group/types.d.ts +1 -0
- package/build/blocks/step/step-group/types.d.ts.map +1 -1
- package/build/blocks/text-and-form/text-and-form-text-column/index.d.ts.map +1 -1
- package/build/blocks/text-and-form/text-and-form-text-column/index.js +1 -0
- package/build/blocks/usp/usp-group/edit.d.ts.map +1 -1
- package/build/blocks/usp/usp-group/edit.js +4 -3
- package/build/blocks/usp/usp-group/factory.d.ts.map +1 -1
- package/build/blocks/usp/usp-group/factory.js +2 -0
- package/build/blocks/usp/usp-group/types.d.ts +1 -0
- package/build/blocks/usp/usp-group/types.d.ts.map +1 -1
- package/build/blocks/video/video-group/constants.d.ts +1 -0
- package/build/blocks/video/video-group/constants.d.ts.map +1 -1
- package/build/blocks/video/video-group/constants.js +1 -0
- package/build/blocks/video/video-group/edit.d.ts.map +1 -1
- package/build/blocks/video/video-group/edit.js +7 -5
- package/build/blocks/video/video-group/factory.d.ts.map +1 -1
- package/build/blocks/video/video-group/factory.js +9 -1
- package/build/blocks/video/video-group/types.d.ts +2 -0
- package/build/blocks/video/video-group/types.d.ts.map +1 -1
- package/build/components/ItemSpacingControl/index.d.ts +23 -0
- package/build/components/ItemSpacingControl/index.d.ts.map +1 -0
- package/build/components/ItemSpacingControl/index.js +32 -0
- package/build/index.d.ts +6 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +3 -0
- package/package.json +1 -1
- package/src/blocks/compare/compare-group/constants.ts +27 -0
- package/src/blocks/compare/compare-group/edit.tsx +27 -4
- package/src/blocks/compare/compare-group/factory.tsx +10 -1
- package/src/blocks/compare/compare-group/index.ts +7 -1
- package/src/blocks/compare/compare-group/types.ts +5 -1
- package/src/blocks/compare/compare-item/edit.tsx +32 -13
- package/src/blocks/compare/compare-item/editor.scss +16 -0
- package/src/blocks/compare/compare-item/factory.tsx +4 -0
- package/src/blocks/compare/compare-item/index.ts +1 -1
- package/src/blocks/compare/compare-item/types.ts +2 -0
- package/src/blocks/core/basic-icon/buildPreviewStyle.ts +40 -0
- package/src/blocks/core/basic-icon/constants.ts +48 -0
- package/src/blocks/core/basic-icon/edit.tsx +170 -0
- package/src/blocks/core/basic-icon/editor.scss +119 -0
- package/src/blocks/core/basic-icon/factory.tsx +42 -0
- package/src/blocks/core/basic-icon/index.ts +17 -0
- package/src/blocks/core/basic-icon/types.ts +34 -0
- package/src/blocks/faq/faq-group/constants.ts +18 -0
- package/src/blocks/faq/faq-group/edit.tsx +121 -4
- package/src/blocks/faq/faq-group/factory.tsx +35 -13
- package/src/blocks/faq/faq-group/index.ts +9 -1
- package/src/blocks/faq/faq-group/types.ts +23 -1
- package/src/blocks/gallery/gallery-group/edit.tsx +4 -1
- package/src/blocks/gallery/gallery-group/factory.tsx +2 -0
- package/src/blocks/gallery/gallery-group/types.ts +1 -0
- package/src/blocks/groups/text-and-media-group/index.ts +1 -0
- package/src/blocks/list/list-group/constants.ts +15 -0
- package/src/blocks/list/list-group/edit.tsx +102 -0
- package/src/blocks/list/list-group/editor.scss +14 -0
- package/src/blocks/list/list-group/factory.tsx +35 -0
- package/src/blocks/list/list-group/icon.tsx +11 -0
- package/src/blocks/list/list-group/index.ts +15 -0
- package/src/blocks/list/list-group/types.ts +21 -0
- package/src/blocks/list/list-item/buildPreviewStyle.ts +52 -0
- package/src/blocks/list/list-item/constants.ts +18 -0
- package/src/blocks/list/list-item/edit.tsx +108 -0
- package/src/blocks/list/list-item/editor.scss +108 -0
- package/src/blocks/list/list-item/factory.tsx +33 -0
- package/src/blocks/list/list-item/index.ts +11 -0
- package/src/blocks/list/list-item/types.ts +23 -0
- package/src/blocks/priceplan/priceplan-group/edit.tsx +21 -5
- package/src/blocks/priceplan/priceplan-group/factory.tsx +2 -1
- package/src/blocks/priceplan/priceplan-group/types.ts +3 -1
- package/src/blocks/review/review-group/constants.ts +6 -0
- package/src/blocks/review/review-group/edit.tsx +50 -4
- package/src/blocks/review/review-group/factory.tsx +33 -16
- package/src/blocks/review/review-group/index.ts +10 -1
- package/src/blocks/review/review-group/types.ts +12 -1
- package/src/blocks/sections/base-section/constants.ts +14 -0
- package/src/blocks/sections/base-section/controls.tsx +93 -9
- package/src/blocks/sections/base-section/edit.tsx +10 -2
- package/src/blocks/sections/base-section/types.ts +14 -1
- package/src/blocks/signpost/signpost-group/edit.tsx +4 -1
- package/src/blocks/signpost/signpost-group/factory.tsx +2 -0
- package/src/blocks/signpost/signpost-group/types.ts +1 -0
- package/src/blocks/step/step-group/edit.tsx +4 -2
- package/src/blocks/step/step-group/factory.tsx +2 -0
- package/src/blocks/step/step-group/types.ts +1 -0
- package/src/blocks/text-and-form/text-and-form-text-column/index.ts +1 -0
- package/src/blocks/usp/usp-group/edit.tsx +4 -2
- package/src/blocks/usp/usp-group/factory.tsx +2 -0
- package/src/blocks/usp/usp-group/types.ts +1 -0
- package/src/blocks/video/video-group/constants.ts +2 -0
- package/src/blocks/video/video-group/edit.tsx +33 -2
- package/src/blocks/video/video-group/editor.scss +6 -1
- package/src/blocks/video/video-group/factory.tsx +9 -1
- package/src/blocks/video/video-group/types.ts +2 -0
- package/src/components/ItemSpacingControl/index.tsx +59 -0
- package/src/editor.scss +3 -0
- package/src/index.ts +11 -0
|
@@ -9,6 +9,7 @@ import {__} from '@wordpress/i18n'
|
|
|
9
9
|
import {useDispatch} from '@wordpress/data'
|
|
10
10
|
import {createBlock} from '@wordpress/blocks'
|
|
11
11
|
import clsx from 'clsx'
|
|
12
|
+
import {ItemSpacingPanel, itemSpacingStyle} from '~/components/ItemSpacingControl'
|
|
12
13
|
import {useGroupBlock} from '~/hooks/useGroupBlock'
|
|
13
14
|
import {DEFAULT_COLUMNS, DEFAULT_RATIOS} from './constants'
|
|
14
15
|
import type {GalleryGroupAttributes, GalleryGroupOptions, GalleryRatio} from './types'
|
|
@@ -31,7 +32,7 @@ export function createGalleryGroupEdit(options: GalleryGroupOptions) {
|
|
|
31
32
|
setAttributes: (a: Partial<GalleryGroupAttributes>) => void
|
|
32
33
|
clientId: string
|
|
33
34
|
}) {
|
|
34
|
-
const {columns, ratio, galleryId} = attributes
|
|
35
|
+
const {columns, ratio, galleryId, spacing} = attributes
|
|
35
36
|
const {insertBlock} = useDispatch('core/block-editor')
|
|
36
37
|
|
|
37
38
|
const addNewBlock = (imageId: number) => {
|
|
@@ -69,6 +70,7 @@ export function createGalleryGroupEdit(options: GalleryGroupOptions) {
|
|
|
69
70
|
containerStyle: {
|
|
70
71
|
'--grid-max-col-count': columns,
|
|
71
72
|
'--gallery-aspect-ratio': ratio.replace(':', '/'),
|
|
73
|
+
...itemSpacingStyle(spacing),
|
|
72
74
|
},
|
|
73
75
|
allowedBlocks: options.allowedBlocks,
|
|
74
76
|
renderAppender: CustomAppender,
|
|
@@ -107,6 +109,7 @@ export function createGalleryGroupEdit(options: GalleryGroupOptions) {
|
|
|
107
109
|
help={__('ID pro oddělení/spojení galerií', 'brilo-blocks')}
|
|
108
110
|
/>
|
|
109
111
|
</PanelBody>
|
|
112
|
+
<ItemSpacingPanel spacing={spacing} onChange={(v) => setAttributes({spacing: v})} />
|
|
110
113
|
</InspectorControls>
|
|
111
114
|
<div {...blockProps}>
|
|
112
115
|
<div {...innerBlocksProps} />
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type {BlockConfiguration} from '@wordpress/blocks'
|
|
2
2
|
import {__} from '@wordpress/i18n'
|
|
3
|
+
import {ITEM_SPACING_ATTRIBUTE} from '~/components/ItemSpacingControl'
|
|
3
4
|
import {createGalleryGroupEdit} from './edit'
|
|
4
5
|
import {DEFAULT_COLUMNS, DEFAULT_RATIOS} from './constants'
|
|
5
6
|
import type {GalleryGroupAttributes, GalleryGroupOptions} from './types'
|
|
@@ -29,6 +30,7 @@ export function createGalleryGroupBlock(options: GalleryGroupOptions): BlockConf
|
|
|
29
30
|
type: 'string',
|
|
30
31
|
default: 'gallery',
|
|
31
32
|
},
|
|
33
|
+
...ITEM_SPACING_ATTRIBUTE,
|
|
32
34
|
},
|
|
33
35
|
edit: createGalleryGroupEdit(options),
|
|
34
36
|
save: () => <InnerBlocks.Content />,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {__} from '@wordpress/i18n'
|
|
2
|
+
|
|
3
|
+
export {CONTENT_SIZES as DEFAULT_CONTENT_SIZES} from '~/constants'
|
|
4
|
+
|
|
5
|
+
export const DEFAULT_BULLET_SIZE = 24
|
|
6
|
+
export const BULLET_SIZE_MIN = 8
|
|
7
|
+
export const BULLET_SIZE_MAX = 96
|
|
8
|
+
|
|
9
|
+
export const DEFAULT_BULLET_SIZE_PRESETS = [
|
|
10
|
+
{value: 16, label: __('XS', 'brilo-blocks')},
|
|
11
|
+
{value: 20, label: __('SM', 'brilo-blocks')},
|
|
12
|
+
{value: 24, label: __('MD', 'brilo-blocks')},
|
|
13
|
+
{value: 32, label: __('LG', 'brilo-blocks')},
|
|
14
|
+
{value: 48, label: __('XL', 'brilo-blocks')},
|
|
15
|
+
] as const
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import {InspectorControls} from '@wordpress/block-editor'
|
|
2
|
+
import {
|
|
3
|
+
PanelBody,
|
|
4
|
+
Button,
|
|
5
|
+
RangeControl,
|
|
6
|
+
BaseControl,
|
|
7
|
+
__experimentalToggleGroupControl as ToggleGroupControl,
|
|
8
|
+
__experimentalToggleGroupControlOption as ToggleGroupControlOption,
|
|
9
|
+
} from '@wordpress/components'
|
|
10
|
+
import {__} from '@wordpress/i18n'
|
|
11
|
+
import clsx from 'clsx'
|
|
12
|
+
import {ItemSpacingPanel, itemSpacingStyle} from '~/components/ItemSpacingControl'
|
|
13
|
+
import {useGroupBlock} from '~/hooks/useGroupBlock'
|
|
14
|
+
import {BULLET_SIZE_MAX, BULLET_SIZE_MIN, DEFAULT_BULLET_SIZE_PRESETS, DEFAULT_CONTENT_SIZES} from './constants'
|
|
15
|
+
import type {ListBulletSizePreset, ListContentSize, ListGroupAttributes, ListGroupOptions} from './types'
|
|
16
|
+
|
|
17
|
+
function PresetSizeControl({
|
|
18
|
+
label,
|
|
19
|
+
value,
|
|
20
|
+
presets,
|
|
21
|
+
min,
|
|
22
|
+
max,
|
|
23
|
+
onChange,
|
|
24
|
+
}: {
|
|
25
|
+
label: string
|
|
26
|
+
value: number
|
|
27
|
+
presets: readonly ListBulletSizePreset[]
|
|
28
|
+
min: number
|
|
29
|
+
max: number
|
|
30
|
+
onChange: (v: number) => void
|
|
31
|
+
}) {
|
|
32
|
+
return (
|
|
33
|
+
<BaseControl label={label} id={`list-group-size-${label}`}>
|
|
34
|
+
<div style={{display: 'flex', gap: 4, marginBottom: 8, flexWrap: 'wrap'}}>
|
|
35
|
+
{presets.map((p) => (
|
|
36
|
+
<Button key={p.label} variant={value === p.value ? 'primary' : 'secondary'} size="small" onClick={() => onChange(p.value)}>
|
|
37
|
+
{p.label}
|
|
38
|
+
</Button>
|
|
39
|
+
))}
|
|
40
|
+
</div>
|
|
41
|
+
<RangeControl value={value} onChange={(v) => onChange(v ?? min)} min={min} max={max} step={1} withInputField />
|
|
42
|
+
</BaseControl>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function createListGroupEdit(options: ListGroupOptions) {
|
|
47
|
+
const CONTENT_SIZES = options.contentSizes ?? DEFAULT_CONTENT_SIZES
|
|
48
|
+
const BULLET_SIZE_PRESETS = options.bulletSizePresets ?? DEFAULT_BULLET_SIZE_PRESETS
|
|
49
|
+
|
|
50
|
+
return function Edit({
|
|
51
|
+
attributes,
|
|
52
|
+
setAttributes,
|
|
53
|
+
}: {
|
|
54
|
+
attributes: ListGroupAttributes
|
|
55
|
+
setAttributes: (a: Partial<ListGroupAttributes>) => void
|
|
56
|
+
}) {
|
|
57
|
+
const {content, bullet, spacing} = attributes
|
|
58
|
+
|
|
59
|
+
const {blockProps, innerBlocksProps} = useGroupBlock({
|
|
60
|
+
blockClassName: clsx(options.blockClassName ?? 'g-list wp-block-section'),
|
|
61
|
+
containerClassName: options.containerClassName ?? 'g-list__items',
|
|
62
|
+
containerStyle: {'--bullet-size': `${bullet.size}px`, ...itemSpacingStyle(spacing)},
|
|
63
|
+
allowedBlocks: options.allowedBlocks,
|
|
64
|
+
orientation: 'vertical',
|
|
65
|
+
template: options.template,
|
|
66
|
+
layout: {type: 'default'},
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<>
|
|
71
|
+
<InspectorControls>
|
|
72
|
+
<PanelBody title={__('Rozložení', 'brilo-blocks')}>
|
|
73
|
+
<ToggleGroupControl
|
|
74
|
+
isBlock
|
|
75
|
+
label={__('Velikost textu', 'brilo-blocks')}
|
|
76
|
+
value={content.size}
|
|
77
|
+
onChange={(v) => setAttributes({content: {size: v as ListContentSize}})}
|
|
78
|
+
>
|
|
79
|
+
{CONTENT_SIZES.map((s) => (
|
|
80
|
+
<ToggleGroupControlOption key={s.value} value={s.value} label={s.label} />
|
|
81
|
+
))}
|
|
82
|
+
</ToggleGroupControl>
|
|
83
|
+
</PanelBody>
|
|
84
|
+
<PanelBody title={__('Velikost odrážek', 'brilo-blocks')}>
|
|
85
|
+
<PresetSizeControl
|
|
86
|
+
label={__('Velikost', 'brilo-blocks')}
|
|
87
|
+
value={bullet.size}
|
|
88
|
+
presets={BULLET_SIZE_PRESETS}
|
|
89
|
+
min={BULLET_SIZE_MIN}
|
|
90
|
+
max={BULLET_SIZE_MAX}
|
|
91
|
+
onChange={(v) => setAttributes({bullet: {...bullet, size: v}})}
|
|
92
|
+
/>
|
|
93
|
+
</PanelBody>
|
|
94
|
+
<ItemSpacingPanel spacing={spacing} onChange={(v) => setAttributes({spacing: v})} />
|
|
95
|
+
</InspectorControls>
|
|
96
|
+
<div {...blockProps}>
|
|
97
|
+
<div {...innerBlocksProps} />
|
|
98
|
+
</div>
|
|
99
|
+
</>
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {InnerBlocks} from '@wordpress/block-editor'
|
|
2
|
+
import type {BlockConfiguration} from '@wordpress/blocks'
|
|
3
|
+
import {__} from '@wordpress/i18n'
|
|
4
|
+
import {ITEM_SPACING_ATTRIBUTE} from '~/components/ItemSpacingControl'
|
|
5
|
+
import type {OptionArray} from '~/types'
|
|
6
|
+
import {DEFAULT_BULLET_SIZE, DEFAULT_CONTENT_SIZES} from './constants'
|
|
7
|
+
import {createListGroupEdit} from './edit'
|
|
8
|
+
import {icon as defaultIcon} from './icon'
|
|
9
|
+
import type {ListGroupAttributes, ListGroupOptions} from './types'
|
|
10
|
+
|
|
11
|
+
export type {ListGroupAttributes, ListGroupOptions}
|
|
12
|
+
|
|
13
|
+
export function createListGroupBlock<TContentSizes extends OptionArray = typeof DEFAULT_CONTENT_SIZES>(
|
|
14
|
+
options: ListGroupOptions<TContentSizes>,
|
|
15
|
+
): BlockConfiguration<ListGroupAttributes<TContentSizes[number]['value']>> {
|
|
16
|
+
const contentSizes = options.contentSizes ?? DEFAULT_CONTENT_SIZES
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
name: options.name,
|
|
20
|
+
title: options.title ?? __('Seznam s odrážkami', 'brilo-blocks'),
|
|
21
|
+
description: options.description,
|
|
22
|
+
category: options.category ?? 'layout',
|
|
23
|
+
...(options.parent && {parent: options.parent}),
|
|
24
|
+
icon: options.icon ?? {src: defaultIcon},
|
|
25
|
+
supports: {html: false, customClassName: false},
|
|
26
|
+
providesContext: {'brilo/list-bullet': 'bullet', 'brilo/list-content': 'content'},
|
|
27
|
+
attributes: {
|
|
28
|
+
content: {type: 'object', default: {size: contentSizes[1]?.value ?? contentSizes[0].value}},
|
|
29
|
+
bullet: {type: 'object', default: {size: DEFAULT_BULLET_SIZE}},
|
|
30
|
+
...ITEM_SPACING_ATTRIBUTE,
|
|
31
|
+
},
|
|
32
|
+
edit: createListGroupEdit(options as unknown as ListGroupOptions),
|
|
33
|
+
save: () => <InnerBlocks.Content />,
|
|
34
|
+
} as unknown as BlockConfiguration<ListGroupAttributes<TContentSizes[number]['value']>>
|
|
35
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
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>List Group</title>
|
|
4
|
+
<circle cx="3.5" cy="5" r="1.5" fill="black" />
|
|
5
|
+
<circle cx="3.5" cy="10" r="1.5" fill="black" />
|
|
6
|
+
<circle cx="3.5" cy="15" r="1.5" fill="black" />
|
|
7
|
+
<path d="M7 4H17V6H7V4Z" fill="black" />
|
|
8
|
+
<path d="M7 9H17V11H7V9Z" fill="black" />
|
|
9
|
+
<path d="M7 14H17V16H7V14Z" fill="black" />
|
|
10
|
+
</svg>
|
|
11
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type {ListContentSize, ListGroupAttributes, ListGroupOptions} from './types'
|
|
2
|
+
export {createListGroupBlock} from './factory'
|
|
3
|
+
|
|
4
|
+
import type {ListGroupOptions} from './types'
|
|
5
|
+
|
|
6
|
+
export const listGroupDefaults: ListGroupOptions = {
|
|
7
|
+
name: 'brilo/list-group',
|
|
8
|
+
parent: ['brilo/base-section', 'brilo/text-and-media-group', 'brilo/compare-item'],
|
|
9
|
+
allowedBlocks: ['brilo/list-item'],
|
|
10
|
+
template: [
|
|
11
|
+
['brilo/list-item', {}],
|
|
12
|
+
['brilo/list-item', {}],
|
|
13
|
+
['brilo/list-item', {}],
|
|
14
|
+
],
|
|
15
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type {BriloBlockType, OptionArray} from '~/types'
|
|
2
|
+
import type {DEFAULT_CONTENT_SIZES} from './constants'
|
|
3
|
+
|
|
4
|
+
export type ListContentSize = (typeof DEFAULT_CONTENT_SIZES)[number]['value']
|
|
5
|
+
|
|
6
|
+
export interface ListBulletSizePreset {
|
|
7
|
+
value: number
|
|
8
|
+
label: string
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ListGroupAttributes<TContentSize extends string = ListContentSize> extends Record<string, unknown> {
|
|
12
|
+
content: {size: TContentSize}
|
|
13
|
+
bullet: {size: number}
|
|
14
|
+
spacing?: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface ListGroupOptions<TContentSizes extends OptionArray = typeof DEFAULT_CONTENT_SIZES> extends BriloBlockType {
|
|
18
|
+
allowedBlocks: string[]
|
|
19
|
+
contentSizes?: TContentSizes
|
|
20
|
+
bulletSizePresets?: readonly ListBulletSizePreset[]
|
|
21
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import clsx from 'clsx'
|
|
2
|
+
|
|
3
|
+
export interface ListSharedBullet {
|
|
4
|
+
size?: number
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface ListSharedContent {
|
|
8
|
+
size?: string
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ListBulletStyle {
|
|
12
|
+
color?: string
|
|
13
|
+
background?: string
|
|
14
|
+
backgroundShape?: string
|
|
15
|
+
borderColor?: string
|
|
16
|
+
borderWidth?: number
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface ListPreviewStyle {
|
|
20
|
+
rootClassName: string
|
|
21
|
+
bulletClassName: string
|
|
22
|
+
cssVars: Record<string, string>
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function buildListPreviewStyle(
|
|
26
|
+
sharedBullet: ListSharedBullet | undefined,
|
|
27
|
+
bulletStyle: ListBulletStyle | undefined,
|
|
28
|
+
sharedContent: ListSharedContent | undefined,
|
|
29
|
+
resolveHex: (value: string) => string = (value) => value,
|
|
30
|
+
): ListPreviewStyle {
|
|
31
|
+
const bullet = bulletStyle ?? {}
|
|
32
|
+
|
|
33
|
+
const rootClassName = clsx(
|
|
34
|
+
sharedContent?.size && `--text-${sharedContent.size}`,
|
|
35
|
+
bullet.background && bullet.background !== 'none' && '--has-bg',
|
|
36
|
+
bullet.color && bullet.color !== 'none' && '--has-color',
|
|
37
|
+
bullet.borderColor && '--bordered',
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
const bulletClassName = clsx(bullet.backgroundShape && bullet.backgroundShape !== 'none' && `--shape --shape-${bullet.backgroundShape}`)
|
|
41
|
+
|
|
42
|
+
const cssVars: Record<string, string> = {}
|
|
43
|
+
if (sharedBullet?.size) cssVars['--bullet-size'] = `${sharedBullet.size}px`
|
|
44
|
+
if (bullet.color && bullet.color !== 'none') cssVars['--bullet-color'] = resolveHex(bullet.color)
|
|
45
|
+
if (bullet.background && bullet.background !== 'none') cssVars['--bullet-bg'] = resolveHex(bullet.background)
|
|
46
|
+
if (bullet.borderColor) {
|
|
47
|
+
cssVars['--bullet-outline-color'] = resolveHex(bullet.borderColor)
|
|
48
|
+
cssVars['--bullet-outline-width'] = `${bullet.borderWidth || 1}px`
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return {rootClassName, bulletClassName, cssVars}
|
|
52
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {__} from '@wordpress/i18n'
|
|
2
|
+
|
|
3
|
+
export const ICON_TYPES = [
|
|
4
|
+
{value: 'preselected', label: __('Předvolená', 'brilo-blocks')},
|
|
5
|
+
{value: 'media', label: __('Obrázek', 'brilo-blocks')},
|
|
6
|
+
{value: 'number', label: __('Číslo', 'brilo-blocks')},
|
|
7
|
+
] as const
|
|
8
|
+
|
|
9
|
+
export const DEFAULT_BULLET_SHAPES = [
|
|
10
|
+
{value: 'none', label: __('Žádný', 'brilo-blocks')},
|
|
11
|
+
{value: 'circle', label: __('Kruh', 'brilo-blocks')},
|
|
12
|
+
{value: 'triangle', label: __('Trojúhelník', 'brilo-blocks')},
|
|
13
|
+
{value: 'rhombus', label: __('Kosočtverec', 'brilo-blocks')},
|
|
14
|
+
{value: 'octagon', label: __('Osmiúhelník', 'brilo-blocks')},
|
|
15
|
+
{value: 'bevel', label: __('Zkosený', 'brilo-blocks')},
|
|
16
|
+
{value: 'rabbet', label: __('Drážkovaný', 'brilo-blocks')},
|
|
17
|
+
{value: 'parallelogram', label: __('Rovnoběžník', 'brilo-blocks')},
|
|
18
|
+
] as const
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import {InspectorControls, RichText, useBlockProps} from '@wordpress/block-editor'
|
|
2
|
+
import {PanelBody, RangeControl, BaseControl, ColorPalette, SelectControl} from '@wordpress/components'
|
|
3
|
+
import {__} from '@wordpress/i18n'
|
|
4
|
+
import clsx from 'clsx'
|
|
5
|
+
import {ItemIconControl, ItemIconPreview} from '~/components/ItemIconControl'
|
|
6
|
+
import {useTenantColorPalette} from '~/hooks/useTenantColorPalette'
|
|
7
|
+
import {buildListPreviewStyle, type ListBulletStyle, type ListSharedBullet, type ListSharedContent} from './buildPreviewStyle'
|
|
8
|
+
import {DEFAULT_BULLET_SHAPES, ICON_TYPES} from './constants'
|
|
9
|
+
import type {ListBulletShape, ListItemAttributes, ListItemOptions} from './types'
|
|
10
|
+
|
|
11
|
+
export function createListItemEdit(options: ListItemOptions) {
|
|
12
|
+
return function Edit({
|
|
13
|
+
attributes,
|
|
14
|
+
setAttributes,
|
|
15
|
+
context,
|
|
16
|
+
}: {
|
|
17
|
+
attributes: ListItemAttributes
|
|
18
|
+
setAttributes: (a: Partial<ListItemAttributes>) => void
|
|
19
|
+
context?: {'brilo/list-bullet'?: ListSharedBullet; 'brilo/list-content'?: ListSharedContent}
|
|
20
|
+
}) {
|
|
21
|
+
const {text, icon, bulletStyle} = attributes
|
|
22
|
+
const {paletteColors, resolveHex} = useTenantColorPalette()
|
|
23
|
+
const {rootClassName, bulletClassName, cssVars} = buildListPreviewStyle(
|
|
24
|
+
context?.['brilo/list-bullet'],
|
|
25
|
+
bulletStyle as ListBulletStyle,
|
|
26
|
+
context?.['brilo/list-content'],
|
|
27
|
+
resolveHex,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
const blockProps = useBlockProps({className: clsx('i-list', rootClassName), style: cssVars})
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<>
|
|
34
|
+
<InspectorControls>
|
|
35
|
+
<PanelBody title={__('Ikona', 'brilo-blocks')}>
|
|
36
|
+
<ItemIconControl icon={icon} setAttributes={setAttributes} iconTypes={ICON_TYPES} options={options} />
|
|
37
|
+
</PanelBody>
|
|
38
|
+
<PanelBody title={__('Vzhled odrážky', 'brilo-blocks')}>
|
|
39
|
+
<BaseControl label={__('Barva', 'brilo-blocks')} id="list-item-bullet-color">
|
|
40
|
+
<ColorPalette
|
|
41
|
+
colors={paletteColors}
|
|
42
|
+
value={bulletStyle.color || undefined}
|
|
43
|
+
onChange={(value) => setAttributes({bulletStyle: {...bulletStyle, color: value ?? ''}})}
|
|
44
|
+
/>
|
|
45
|
+
</BaseControl>
|
|
46
|
+
<BaseControl label={__('Pozadí', 'brilo-blocks')} id="list-item-bullet-background">
|
|
47
|
+
<ColorPalette
|
|
48
|
+
colors={paletteColors}
|
|
49
|
+
value={bulletStyle.background || undefined}
|
|
50
|
+
onChange={(value) => setAttributes({bulletStyle: {...bulletStyle, background: value ?? ''}})}
|
|
51
|
+
/>
|
|
52
|
+
</BaseControl>
|
|
53
|
+
{(bulletStyle.background || bulletStyle.borderColor) && (
|
|
54
|
+
<SelectControl<string>
|
|
55
|
+
label={__('Tvar odrážky', 'brilo-blocks')}
|
|
56
|
+
value={bulletStyle.backgroundShape}
|
|
57
|
+
options={[...DEFAULT_BULLET_SHAPES]}
|
|
58
|
+
onChange={(v) => setAttributes({bulletStyle: {...bulletStyle, backgroundShape: v as ListBulletShape}})}
|
|
59
|
+
/>
|
|
60
|
+
)}
|
|
61
|
+
<BaseControl
|
|
62
|
+
label={__('Barva ohraničení', 'brilo-blocks')}
|
|
63
|
+
help={__('Bez vybrané barvy se okraj nevykreslí.', 'brilo-blocks')}
|
|
64
|
+
id="list-item-bullet-border-color"
|
|
65
|
+
>
|
|
66
|
+
<ColorPalette
|
|
67
|
+
colors={paletteColors}
|
|
68
|
+
value={bulletStyle.borderColor || undefined}
|
|
69
|
+
onChange={(value) => setAttributes({bulletStyle: {...bulletStyle, borderColor: value ?? ''}})}
|
|
70
|
+
/>
|
|
71
|
+
</BaseControl>
|
|
72
|
+
{bulletStyle.borderColor && (
|
|
73
|
+
<RangeControl
|
|
74
|
+
label={__('Šířka ohraničení (px)', 'brilo-blocks')}
|
|
75
|
+
value={bulletStyle.borderWidth}
|
|
76
|
+
onChange={(v) => setAttributes({bulletStyle: {...bulletStyle, borderWidth: v ?? 0}})}
|
|
77
|
+
min={0}
|
|
78
|
+
max={10}
|
|
79
|
+
step={1}
|
|
80
|
+
/>
|
|
81
|
+
)}
|
|
82
|
+
</PanelBody>
|
|
83
|
+
</InspectorControls>
|
|
84
|
+
|
|
85
|
+
<div {...blockProps}>
|
|
86
|
+
<div className="i-list__inner wp-block-inner">
|
|
87
|
+
<ItemIconPreview
|
|
88
|
+
icon={icon}
|
|
89
|
+
className="i-list__bullet"
|
|
90
|
+
modifierClassName={bulletClassName}
|
|
91
|
+
style={cssVars}
|
|
92
|
+
setAttributes={setAttributes}
|
|
93
|
+
options={options}
|
|
94
|
+
/>
|
|
95
|
+
<RichText
|
|
96
|
+
tagName="p"
|
|
97
|
+
className="i-list__text u-text-editable"
|
|
98
|
+
value={text}
|
|
99
|
+
onChange={(v) => setAttributes({text: v})}
|
|
100
|
+
placeholder={__('Text položky…', 'brilo-blocks')}
|
|
101
|
+
allowedFormats={['core/bold', 'core/italic']}
|
|
102
|
+
/>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</>
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
.i-list {
|
|
2
|
+
width: 100%;
|
|
3
|
+
margin: 0 !important;
|
|
4
|
+
--bullet-size: 24px;
|
|
5
|
+
|
|
6
|
+
.i-list__inner {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: row;
|
|
9
|
+
gap: 8px;
|
|
10
|
+
align-items: flex-start;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
&.--text-sm .i-list__text {
|
|
14
|
+
font-size: 14px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
&.--text-lg .i-list__text {
|
|
18
|
+
font-size: 18px;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.i-list__text {
|
|
23
|
+
margin: 0;
|
|
24
|
+
line-height: 1.5;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.i-list__bullet {
|
|
28
|
+
--bullet-box-size: var(--bullet-size, 24px);
|
|
29
|
+
|
|
30
|
+
width: var(--bullet-box-size);
|
|
31
|
+
height: var(--bullet-box-size);
|
|
32
|
+
flex: 0 0 var(--bullet-box-size);
|
|
33
|
+
display: grid;
|
|
34
|
+
grid-template-areas: "pile";
|
|
35
|
+
place-items: center;
|
|
36
|
+
isolation: isolate;
|
|
37
|
+
|
|
38
|
+
&::before,
|
|
39
|
+
&::after {
|
|
40
|
+
content: "";
|
|
41
|
+
grid-area: pile;
|
|
42
|
+
width: var(--bullet-box-size);
|
|
43
|
+
height: var(--bullet-box-size);
|
|
44
|
+
clip-path: var(--bullet-shape, none);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&::before {
|
|
48
|
+
z-index: 0;
|
|
49
|
+
background-color: var(--bullet-outline-color, transparent);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&::after {
|
|
53
|
+
z-index: 1;
|
|
54
|
+
width: calc(var(--bullet-box-size) - var(--bullet-outline-width, 0px) * 2);
|
|
55
|
+
height: calc(var(--bullet-box-size) - var(--bullet-outline-width, 0px) * 2);
|
|
56
|
+
background-color: var(--bullet-bg, transparent);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
img,
|
|
60
|
+
svg,
|
|
61
|
+
span {
|
|
62
|
+
grid-area: pile;
|
|
63
|
+
position: relative;
|
|
64
|
+
z-index: 2;
|
|
65
|
+
width: var(--bullet-size, 24px);
|
|
66
|
+
height: var(--bullet-size, 24px);
|
|
67
|
+
object-fit: contain;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
svg path {
|
|
71
|
+
fill: var(--bullet-color, currentcolor);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
span {
|
|
75
|
+
display: flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
justify-content: center;
|
|
78
|
+
color: var(--bullet-color, currentcolor);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&.--shape-circle {
|
|
82
|
+
--bullet-shape: circle(50% at 50% 50%);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&.--shape-triangle {
|
|
86
|
+
--bullet-shape: polygon(50% 0%, 0% 100%, 100% 100%);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
&.--shape-rhombus {
|
|
90
|
+
--bullet-shape: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
&.--shape-octagon {
|
|
94
|
+
--bullet-shape: polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
&.--shape-bevel {
|
|
98
|
+
--bullet-shape: polygon(20% 0%, 80% 0%, 100% 20%, 100% 80%, 80% 100%, 20% 100%, 0% 80%, 0% 20%);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&.--shape-rabbet {
|
|
102
|
+
--bullet-shape: polygon(0% 15%, 15% 15%, 15% 0%, 85% 0%, 85% 15%, 100% 15%, 100% 85%, 85% 85%, 85% 100%, 15% 100%, 15% 85%, 0% 85%);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
&.--shape-parallelogram {
|
|
106
|
+
--bullet-shape: polygon(25% 0%, 100% 0%, 75% 100%, 0% 100%);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type {BlockConfiguration} from '@wordpress/blocks'
|
|
2
|
+
import {__} from '@wordpress/i18n'
|
|
3
|
+
import {ICON_TYPES} from './constants'
|
|
4
|
+
import {createListItemEdit} from './edit'
|
|
5
|
+
import type {ListItemAttributes, ListItemOptions} from './types'
|
|
6
|
+
|
|
7
|
+
export type {ListItemAttributes, ListItemOptions}
|
|
8
|
+
|
|
9
|
+
export function createListItemBlock(options: ListItemOptions): BlockConfiguration<ListItemAttributes> {
|
|
10
|
+
return {
|
|
11
|
+
name: options.name,
|
|
12
|
+
title: options.title ?? __('Položka seznamu', 'brilo-blocks'),
|
|
13
|
+
description: options.description,
|
|
14
|
+
category: options.category ?? 'layout',
|
|
15
|
+
...(options.parent && {parent: options.parent}),
|
|
16
|
+
icon: options.icon ?? 'editor-ul',
|
|
17
|
+
supports: {html: false, customClassName: false},
|
|
18
|
+
usesContext: ['brilo/list-bullet', 'brilo/list-content'],
|
|
19
|
+
attributes: {
|
|
20
|
+
text: {type: 'string', default: ''},
|
|
21
|
+
icon: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
default: {type: ICON_TYPES[0].value, src: '', media: {id: 0, alt: ''}},
|
|
24
|
+
},
|
|
25
|
+
bulletStyle: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
default: {color: '', background: '', backgroundShape: 'none', borderColor: '', borderWidth: 1},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
edit: createListItemEdit(options),
|
|
31
|
+
save: () => null,
|
|
32
|
+
} as unknown as BlockConfiguration<ListItemAttributes>
|
|
33
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type {ListBulletShape, ListItemAttributes, ListItemOptions} from './types'
|
|
2
|
+
export {createListItemBlock} from './factory'
|
|
3
|
+
|
|
4
|
+
import type {ListItemOptions} from './types'
|
|
5
|
+
|
|
6
|
+
export const listItemDefaults: ListItemOptions = {
|
|
7
|
+
name: 'brilo/list-item',
|
|
8
|
+
parent: ['brilo/list-group'],
|
|
9
|
+
icons: [],
|
|
10
|
+
iconsSrc: '',
|
|
11
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type {BriloBlockType, Icon} from '~/types'
|
|
2
|
+
import type {IconType} from '~/components/IconControl'
|
|
3
|
+
import type {DEFAULT_BULLET_SHAPES, ICON_TYPES} from './constants'
|
|
4
|
+
|
|
5
|
+
export type ListIconType = (typeof ICON_TYPES)[number]['value']
|
|
6
|
+
export type ListBulletShape = (typeof DEFAULT_BULLET_SHAPES)[number]['value']
|
|
7
|
+
|
|
8
|
+
export interface ListItemAttributes extends Record<string, unknown> {
|
|
9
|
+
text: string
|
|
10
|
+
icon: Icon
|
|
11
|
+
bulletStyle: {
|
|
12
|
+
color: string
|
|
13
|
+
background: string
|
|
14
|
+
backgroundShape: string
|
|
15
|
+
borderColor: string
|
|
16
|
+
borderWidth: number
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ListItemOptions extends BriloBlockType {
|
|
21
|
+
icons: IconType[]
|
|
22
|
+
iconsSrc: string
|
|
23
|
+
}
|