@webikon/webentor-core 0.9.13 → 0.10.0
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/CHANGELOG.md +24 -1
- package/README.md +41 -0
- package/core-js/_alpine.ts +6 -0
- package/core-js/_slider.ts +22 -11
- package/core-js/blocks-components/button.tsx +50 -33
- package/core-js/blocks-components/custom-image-sizes-panel.tsx +3 -1
- package/core-js/blocks-components/typography-picker-select.tsx +16 -1
- package/core-js/blocks-filters/_filter-core-typography.tsx +11 -1
- package/core-js/blocks-filters/_slider-settings.tsx +1 -1
- package/core-js/blocks-filters/_wrap-with-container.tsx +104 -0
- package/core-js/blocks-filters/responsive-settings/AGENTS.md +255 -0
- package/core-js/blocks-filters/responsive-settings/components/AppliedClassesViewer.tsx +189 -0
- package/core-js/blocks-filters/responsive-settings/components/BoxModelControl.tsx +346 -0
- package/core-js/blocks-filters/responsive-settings/components/BreakpointResetButton.tsx +94 -0
- package/core-js/blocks-filters/responsive-settings/components/DebugPanel.tsx +67 -0
- package/core-js/blocks-filters/responsive-settings/components/InheritedIndicator.tsx +32 -0
- package/core-js/blocks-filters/responsive-settings/components/LinkedValuesControl.tsx +55 -0
- package/core-js/blocks-filters/responsive-settings/components/ResponsiveSelectGroup.tsx +185 -0
- package/core-js/blocks-filters/responsive-settings/components/ResponsiveTabPanel.tsx +106 -0
- package/core-js/blocks-filters/responsive-settings/index.tsx +97 -148
- package/core-js/blocks-filters/responsive-settings/migration.ts +86 -0
- package/core-js/blocks-filters/responsive-settings/panels/BlockLinkPanel.tsx +38 -0
- package/core-js/blocks-filters/responsive-settings/panels/BorderPanel.tsx +61 -0
- package/core-js/blocks-filters/responsive-settings/panels/DisplayLayoutPanel.tsx +92 -0
- package/core-js/blocks-filters/responsive-settings/panels/SpacingPanel.tsx +63 -0
- package/core-js/blocks-filters/responsive-settings/panels/index.ts +4 -0
- package/core-js/blocks-filters/responsive-settings/registry.ts +88 -0
- package/core-js/blocks-filters/responsive-settings/settings/block-link/index.ts +3 -0
- package/core-js/blocks-filters/responsive-settings/settings/block-link/panel.tsx +6 -6
- package/core-js/blocks-filters/responsive-settings/settings/block-link/registration.ts +35 -0
- package/core-js/blocks-filters/responsive-settings/settings/border/border/properties.ts +1 -2
- package/core-js/blocks-filters/responsive-settings/settings/border/border/settings.tsx +21 -3
- package/core-js/blocks-filters/responsive-settings/settings/border/border-radius/index.tsx +2 -1
- package/core-js/blocks-filters/responsive-settings/settings/border/border-radius/properties.ts +6 -29
- package/core-js/blocks-filters/responsive-settings/settings/border/border-radius/settings.tsx +79 -6
- package/core-js/blocks-filters/responsive-settings/settings/border/index.ts +5 -1
- package/core-js/blocks-filters/responsive-settings/settings/border/panel.tsx +5 -54
- package/core-js/blocks-filters/responsive-settings/settings/border/registration.ts +84 -0
- package/core-js/blocks-filters/responsive-settings/settings/border/settings.tsx +21 -0
- package/core-js/blocks-filters/responsive-settings/settings/flex-item/index.ts +4 -0
- package/core-js/blocks-filters/responsive-settings/settings/flex-item/properties.ts +60 -0
- package/core-js/blocks-filters/responsive-settings/settings/flex-item/registration.ts +78 -0
- package/core-js/blocks-filters/responsive-settings/settings/flex-item/settings.tsx +90 -0
- package/core-js/blocks-filters/responsive-settings/settings/flexbox/index.ts +4 -0
- package/core-js/blocks-filters/responsive-settings/settings/flexbox/properties.ts +80 -0
- package/core-js/blocks-filters/responsive-settings/settings/flexbox/registration.ts +66 -0
- package/core-js/blocks-filters/responsive-settings/settings/flexbox/settings.tsx +78 -0
- package/core-js/blocks-filters/responsive-settings/settings/grid/index.ts +4 -0
- package/core-js/blocks-filters/responsive-settings/settings/grid/properties.ts +72 -0
- package/core-js/blocks-filters/responsive-settings/settings/grid/registration.ts +66 -0
- package/core-js/blocks-filters/responsive-settings/settings/grid/settings.tsx +78 -0
- package/core-js/blocks-filters/responsive-settings/settings/grid-item/index.ts +4 -0
- package/core-js/blocks-filters/responsive-settings/settings/grid-item/properties.ts +44 -0
- package/core-js/blocks-filters/responsive-settings/settings/grid-item/registration.ts +74 -0
- package/core-js/blocks-filters/responsive-settings/settings/grid-item/settings.tsx +87 -0
- package/core-js/blocks-filters/responsive-settings/settings/layout/index.ts +4 -0
- package/core-js/blocks-filters/responsive-settings/settings/layout/properties.ts +51 -0
- package/core-js/blocks-filters/responsive-settings/settings/layout/registration.ts +96 -0
- package/core-js/blocks-filters/responsive-settings/settings/layout/settings.tsx +64 -0
- package/core-js/blocks-filters/responsive-settings/settings/presets/index.ts +4 -0
- package/core-js/blocks-filters/responsive-settings/settings/presets/presets.ts +52 -0
- package/core-js/blocks-filters/responsive-settings/settings/presets/registration.ts +53 -0
- package/core-js/blocks-filters/responsive-settings/settings/presets/settings.tsx +100 -0
- package/core-js/blocks-filters/responsive-settings/settings/shared/gap-values.ts +16 -0
- package/core-js/blocks-filters/responsive-settings/settings/shared/layout-values.ts +56 -0
- package/core-js/blocks-filters/responsive-settings/settings/shared/tw-values.ts +107 -0
- package/core-js/blocks-filters/responsive-settings/settings/sizing/index.ts +4 -0
- package/core-js/blocks-filters/responsive-settings/settings/sizing/properties.ts +71 -0
- package/core-js/blocks-filters/responsive-settings/settings/sizing/registration.ts +52 -0
- package/core-js/blocks-filters/responsive-settings/settings/sizing/settings.tsx +96 -0
- package/core-js/blocks-filters/responsive-settings/settings/spacing/index.ts +7 -2
- package/core-js/blocks-filters/responsive-settings/settings/spacing/panel.tsx +5 -45
- package/core-js/blocks-filters/responsive-settings/settings/spacing/properties.ts +51 -29
- package/core-js/blocks-filters/responsive-settings/settings/spacing/registration.ts +53 -0
- package/core-js/blocks-filters/responsive-settings/settings/spacing/settings.tsx +26 -55
- package/core-js/blocks-filters/responsive-settings/types/index.ts +174 -28
- package/core-js/blocks-filters/responsive-settings/utils.ts +247 -216
- package/core-js/config/index.ts +6 -0
- package/core-js/config/webentor-config.ts +44 -2
- package/core-js/index.ts +8 -10
- package/core-js/types/index.ts +6 -0
- package/package.json +116 -6
- package/public/build/assets/_utils-CzK6Vfiv.js +2 -0
- package/public/build/assets/{_utils-PDaZ1Dn1.js.map → _utils-CzK6Vfiv.js.map} +1 -1
- package/public/build/assets/coreAppStyles-Bvp3emQy.css +1 -0
- package/public/build/assets/coreEditorJs-DYd3ZopL.js +366 -0
- package/public/build/assets/coreEditorJs-DYd3ZopL.js.map +1 -0
- package/public/build/assets/coreEditorStyles-BzlB6eA_.css +1 -0
- package/public/build/assets/resources/blocks/e-table/{script-BIchbcPK.js → script-C_Z50hjm.js} +2 -2
- package/public/build/assets/resources/blocks/e-table/{script-BIchbcPK.js.map → script-C_Z50hjm.js.map} +1 -1
- package/public/build/assets/{sliderJs-Ch69_tVA.js → sliderJs-CyGnrv0Q.js} +3 -3
- package/public/build/assets/{sliderJs-Ch69_tVA.js.map → sliderJs-CyGnrv0Q.js.map} +1 -1
- package/public/build/manifest.json +10 -10
- package/resources/blocks/e-accordion-group/block.json +6 -4
- package/resources/blocks/e-gallery/block.json +2 -2
- package/resources/blocks/e-gallery/e-gallery.block.tsx +4 -0
- package/resources/blocks/e-image/e-image.block.tsx +4 -0
- package/resources/blocks/e-slider/block.json +3 -2
- package/resources/blocks/e-tab-container/block.json +2 -1
- package/resources/blocks/e-tabs/block.json +2 -1
- package/resources/blocks/l-flexible-container/block.json +3 -2
- package/resources/blocks/l-mobile-nav/block.json +2 -1
- package/resources/blocks/l-nav-menu/block.json +2 -1
- package/resources/blocks/l-nav-menu/l-nav-menu.block.tsx +2 -0
- package/resources/blocks/l-section/block.json +7 -5
- package/resources/blocks/l-section/l-section.block.tsx +40 -31
- package/resources/scripts/editor.ts +2 -0
- package/resources/styles/common/_editor.css +22 -0
- package/resources/styles/common/_utilities.css +210 -0
- package/core-js/blocks-filters/responsive-settings/constants.ts +0 -11
- package/core-js/blocks-filters/responsive-settings/settings/container/display/index.ts +0 -2
- package/core-js/blocks-filters/responsive-settings/settings/container/display/properties.ts +0 -167
- package/core-js/blocks-filters/responsive-settings/settings/container/display/settings.tsx +0 -73
- package/core-js/blocks-filters/responsive-settings/settings/container/flexbox/index.ts +0 -2
- package/core-js/blocks-filters/responsive-settings/settings/container/flexbox/properties.ts +0 -187
- package/core-js/blocks-filters/responsive-settings/settings/container/flexbox/settings.tsx +0 -131
- package/core-js/blocks-filters/responsive-settings/settings/container/grid/index.ts +0 -2
- package/core-js/blocks-filters/responsive-settings/settings/container/grid/properties.ts +0 -187
- package/core-js/blocks-filters/responsive-settings/settings/container/grid/settings.tsx +0 -132
- package/core-js/blocks-filters/responsive-settings/settings/container/index.ts +0 -4
- package/core-js/blocks-filters/responsive-settings/settings/container/panel.tsx +0 -92
- package/public/build/assets/_utils-PDaZ1Dn1.js +0 -2
- package/public/build/assets/coreAppStyles-Dp0WYk4N.css +0 -1
- package/public/build/assets/coreEditorJs-Cyc87wTo.js +0 -366
- package/public/build/assets/coreEditorJs-Cyc87wTo.js.map +0 -1
- package/public/build/assets/coreEditorStyles-D8-nNpQG.css +0 -1
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { applyFilters } from '@wordpress/hooks';
|
|
2
|
-
import { __ } from '@wordpress/i18n';
|
|
3
|
-
|
|
4
|
-
import { WebentorConfig } from '@webentorCore/types/_webentor-config';
|
|
5
|
-
|
|
6
|
-
import { getPixelFromRemValue } from '../../../utils';
|
|
7
|
-
|
|
8
|
-
const getDisplayValues = () => [
|
|
9
|
-
{ label: 'None selected', value: '' },
|
|
10
|
-
{ label: 'Block', value: 'block' },
|
|
11
|
-
{ label: 'Hidden', value: 'hidden' },
|
|
12
|
-
{ label: 'Flex', value: 'flex' },
|
|
13
|
-
{ label: 'Grid', value: 'grid' },
|
|
14
|
-
{ label: 'Inline Block', value: 'inline-block' },
|
|
15
|
-
{ label: 'Inline', value: 'inline' },
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
const getHeightValues = (twTheme: WebentorConfig['theme']) => {
|
|
19
|
-
const values = Object.keys(twTheme?.height)
|
|
20
|
-
// Sort ASC manually because Object.keys() is sorting keys wrong
|
|
21
|
-
.sort((a, b) => Number(a) - Number(b))
|
|
22
|
-
.map((key) => ({
|
|
23
|
-
label: `${key} (${getPixelFromRemValue(twTheme?.height[key])})`,
|
|
24
|
-
value: `h-${key}`,
|
|
25
|
-
}));
|
|
26
|
-
|
|
27
|
-
// Add none selected option as first item
|
|
28
|
-
values.unshift({
|
|
29
|
-
label: 'None selected',
|
|
30
|
-
value: '',
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
return values;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const getWidthValues = (twTheme: WebentorConfig['theme']) => {
|
|
37
|
-
const values = Object.keys(twTheme?.width)
|
|
38
|
-
// Sort ASC manually because Object.keys() is sorting keys wrong
|
|
39
|
-
.sort((a, b) => Number(a) - Number(b))
|
|
40
|
-
.map((key) => ({
|
|
41
|
-
label: `${key} (${getPixelFromRemValue(twTheme?.width[key])})`,
|
|
42
|
-
value: `w-${key}`,
|
|
43
|
-
}));
|
|
44
|
-
|
|
45
|
-
// Add none selected option as first item
|
|
46
|
-
values.unshift({
|
|
47
|
-
label: 'None selected',
|
|
48
|
-
value: '',
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
return values;
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const getMinHeightValues = (twTheme: WebentorConfig['theme']) => {
|
|
55
|
-
const values = Object.keys(twTheme?.minHeight)
|
|
56
|
-
.sort((a, b) => Number(a) - Number(b))
|
|
57
|
-
.map((key) => ({
|
|
58
|
-
label: `${key} (${getPixelFromRemValue(twTheme?.minHeight[key])})`,
|
|
59
|
-
value: `min-h-${key}`,
|
|
60
|
-
}));
|
|
61
|
-
|
|
62
|
-
// Add none selected option as first item
|
|
63
|
-
values.unshift({
|
|
64
|
-
label: 'None selected',
|
|
65
|
-
value: '',
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
return values;
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const getMinWidthValues = (twTheme: WebentorConfig['theme']) => {
|
|
72
|
-
const values = Object.keys(twTheme?.minWidth)
|
|
73
|
-
.sort((a, b) => Number(a) - Number(b))
|
|
74
|
-
.map((key) => ({
|
|
75
|
-
label: `${key} (${getPixelFromRemValue(twTheme?.minWidth[key])})`,
|
|
76
|
-
value: `min-w-${key}`,
|
|
77
|
-
}));
|
|
78
|
-
|
|
79
|
-
// Add none selected option as first item
|
|
80
|
-
values.unshift({
|
|
81
|
-
label: 'None selected',
|
|
82
|
-
value: '',
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
return values;
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const getMaxHeightValues = (twTheme: WebentorConfig['theme']) => {
|
|
89
|
-
const values = Object.keys(twTheme?.maxHeight)
|
|
90
|
-
.sort((a, b) => Number(a) - Number(b))
|
|
91
|
-
.map((key) => ({
|
|
92
|
-
label: `${key} (${getPixelFromRemValue(twTheme?.maxHeight[key])})`,
|
|
93
|
-
value: `max-h-${key}`,
|
|
94
|
-
}));
|
|
95
|
-
|
|
96
|
-
// Add none selected option as first item
|
|
97
|
-
values.unshift({
|
|
98
|
-
label: 'None selected',
|
|
99
|
-
value: '',
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
return values;
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const getMaxWidthValues = (twTheme: WebentorConfig['theme']) => {
|
|
106
|
-
const values = Object.keys(twTheme?.maxWidth)
|
|
107
|
-
.sort((a, b) => Number(a) - Number(b))
|
|
108
|
-
.map((key) => ({
|
|
109
|
-
label: `${key} (${getPixelFromRemValue(twTheme?.maxWidth[key])})`,
|
|
110
|
-
value: `max-w-${key}`,
|
|
111
|
-
}));
|
|
112
|
-
|
|
113
|
-
// Add none selected option as first item
|
|
114
|
-
values.unshift({
|
|
115
|
-
label: 'None selected',
|
|
116
|
-
value: '',
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
return values;
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
export const getDisplayProperties = (
|
|
123
|
-
blockName: string,
|
|
124
|
-
twTheme: WebentorConfig['theme'],
|
|
125
|
-
) =>
|
|
126
|
-
applyFilters(
|
|
127
|
-
'webentor-theme-display-settings',
|
|
128
|
-
[
|
|
129
|
-
{
|
|
130
|
-
label: __('Display', 'webentor'),
|
|
131
|
-
name: 'display',
|
|
132
|
-
help: __('Initial value is "Flex"', 'webentor'),
|
|
133
|
-
values: getDisplayValues(),
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
label: __('Height', 'webentor'),
|
|
137
|
-
name: 'height',
|
|
138
|
-
values: getHeightValues(twTheme),
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
label: __('Min Height', 'webentor'),
|
|
142
|
-
name: 'min-height',
|
|
143
|
-
values: getMinHeightValues(twTheme),
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
label: __('Max Height', 'webentor'),
|
|
147
|
-
name: 'max-height',
|
|
148
|
-
values: getMaxHeightValues(twTheme),
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
label: __('Width', 'webentor'),
|
|
152
|
-
name: 'width',
|
|
153
|
-
values: getWidthValues(twTheme),
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
label: __('Min Width', 'webentor'),
|
|
157
|
-
name: 'min-width',
|
|
158
|
-
values: getMinWidthValues(twTheme),
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
label: __('Max Width', 'webentor'),
|
|
162
|
-
name: 'max-width',
|
|
163
|
-
values: getMaxWidthValues(twTheme),
|
|
164
|
-
},
|
|
165
|
-
],
|
|
166
|
-
blockName,
|
|
167
|
-
);
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { getBlockSupport } from '@wordpress/blocks';
|
|
2
|
-
import { SelectControl } from '@wordpress/components';
|
|
3
|
-
import { Fragment } from '@wordpress/element';
|
|
4
|
-
|
|
5
|
-
import { camelize, setImmutably } from '@webentorCore/_utils';
|
|
6
|
-
|
|
7
|
-
import { DisabledSliderInfo } from '../../../components/DisabledSliderInfo';
|
|
8
|
-
import { BlockPanelProps } from '../../../types';
|
|
9
|
-
import { isSliderEnabledForBreakpoint } from '../../../utils';
|
|
10
|
-
import { getDisplayProperties } from './properties';
|
|
11
|
-
|
|
12
|
-
interface DisplaySettingsProps extends BlockPanelProps {
|
|
13
|
-
breakpoint: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export const DisplaySettings = ({
|
|
17
|
-
attributes,
|
|
18
|
-
setAttributes,
|
|
19
|
-
name,
|
|
20
|
-
breakpoint,
|
|
21
|
-
twTheme,
|
|
22
|
-
}: DisplaySettingsProps) => {
|
|
23
|
-
if (!attributes?.display) {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const isSliderEnabled = isSliderEnabledForBreakpoint(
|
|
28
|
-
name,
|
|
29
|
-
attributes,
|
|
30
|
-
breakpoint,
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
const displayProperties = getDisplayProperties(name, twTheme);
|
|
34
|
-
const supports = getBlockSupport(name, 'webentor.display');
|
|
35
|
-
|
|
36
|
-
return (
|
|
37
|
-
<div style={{ marginTop: '16px' }}>
|
|
38
|
-
{isSliderEnabled && <DisabledSliderInfo />}
|
|
39
|
-
|
|
40
|
-
{displayProperties.map((property) => {
|
|
41
|
-
// Check if block supports all properties, meaning its set to true
|
|
42
|
-
if (supports !== true) {
|
|
43
|
-
const propertyCamel = camelize(property.name); // Suports is defined in camelCase
|
|
44
|
-
// Check if block supports specific property, e.g. only "display" or "height" is supported
|
|
45
|
-
if (supports?.[propertyCamel] !== true) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return (
|
|
51
|
-
<Fragment key={property.name + breakpoint}>
|
|
52
|
-
<SelectControl
|
|
53
|
-
label={property.label}
|
|
54
|
-
value={attributes.display?.[property.name]?.value?.[breakpoint]}
|
|
55
|
-
help={property?.help}
|
|
56
|
-
disabled={isSliderEnabled}
|
|
57
|
-
options={property.values}
|
|
58
|
-
onChange={(selected) =>
|
|
59
|
-
setAttributes(
|
|
60
|
-
setImmutably(
|
|
61
|
-
attributes,
|
|
62
|
-
['display', property.name, 'value', breakpoint],
|
|
63
|
-
selected,
|
|
64
|
-
),
|
|
65
|
-
)
|
|
66
|
-
}
|
|
67
|
-
/>
|
|
68
|
-
</Fragment>
|
|
69
|
-
);
|
|
70
|
-
})}
|
|
71
|
-
</div>
|
|
72
|
-
);
|
|
73
|
-
};
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { __ } from '@wordpress/i18n';
|
|
2
|
-
|
|
3
|
-
import { WebentorConfig } from '@webentorCore/types/_webentor-config';
|
|
4
|
-
|
|
5
|
-
import { getPixelFromRemValue } from '../../../utils';
|
|
6
|
-
|
|
7
|
-
const getGapValues = (axis = '', twTheme: WebentorConfig['theme']) => {
|
|
8
|
-
const values = Object.keys(twTheme?.gap)
|
|
9
|
-
// Sort ASC manually because Object.keys() is sorting keys wrong
|
|
10
|
-
.sort((a, b) => Number(a) - Number(b))
|
|
11
|
-
.map((key) => ({
|
|
12
|
-
label: `${Number(key) * 4}px`,
|
|
13
|
-
value: `gap-${axis === 'x' ? 'x-' : axis === 'y' ? 'y-' : ''}${key}`,
|
|
14
|
-
}));
|
|
15
|
-
|
|
16
|
-
// Add none selected option as first item
|
|
17
|
-
values.unshift({
|
|
18
|
-
label: __('None selected', 'webentor'),
|
|
19
|
-
value: '',
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
return values;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const getFlexBasisValues = (twTheme: WebentorConfig['theme']) => {
|
|
26
|
-
const values = Object.keys(twTheme?.flexBasis)
|
|
27
|
-
// Sort ASC manually because Object.keys() is sorting keys wrong
|
|
28
|
-
.sort((a, b) => Number(a) - Number(b))
|
|
29
|
-
.map((key) => ({
|
|
30
|
-
label: `${key} (${getPixelFromRemValue(twTheme?.flexBasis[key])})`,
|
|
31
|
-
value: `basis-${key}`,
|
|
32
|
-
}));
|
|
33
|
-
|
|
34
|
-
// Add none selected option as first item
|
|
35
|
-
values.unshift({
|
|
36
|
-
label: __('None selected', 'webentor'),
|
|
37
|
-
value: '',
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
return values;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const getFlexDirectionValues = () => [
|
|
44
|
-
{ label: __('None selected', 'webentor'), value: '' },
|
|
45
|
-
{ label: __('Row', 'webentor'), value: 'flex-row' },
|
|
46
|
-
{ label: __('Row Reverse', 'webentor'), value: 'flex-row-reverse' },
|
|
47
|
-
{ label: __('Column', 'webentor'), value: 'flex-col' },
|
|
48
|
-
{ label: __('Column Reverse', 'webentor'), value: 'flex-col-reverse' },
|
|
49
|
-
];
|
|
50
|
-
|
|
51
|
-
const getFlexWrapValues = () => [
|
|
52
|
-
{ label: __('None selected', 'webentor'), value: '' },
|
|
53
|
-
{ label: __('Wrap', 'webentor'), value: 'flex-wrap' },
|
|
54
|
-
{ label: __('Nowrap', 'webentor'), value: 'flex-nowrap' },
|
|
55
|
-
{ label: __('Wrap Reverse', 'webentor'), value: 'flex-wrap-reverse' },
|
|
56
|
-
];
|
|
57
|
-
|
|
58
|
-
const getJustifyContentValues = () => [
|
|
59
|
-
{ label: __('None selected', 'webentor'), value: '' },
|
|
60
|
-
{ label: __('Normal', 'webentor'), value: 'justify-normal' },
|
|
61
|
-
{ label: __('Flex Start', 'webentor'), value: 'justify-start' },
|
|
62
|
-
{ label: __('Flex End', 'webentor'), value: 'justify-end' },
|
|
63
|
-
{ label: __('Center', 'webentor'), value: 'justify-center' },
|
|
64
|
-
{ label: __('Space Between', 'webentor'), value: 'justify-between' },
|
|
65
|
-
{ label: __('Space Around', 'webentor'), value: 'justify-around' },
|
|
66
|
-
{ label: __('Space Evenly', 'webentor'), value: 'justify-evenly' },
|
|
67
|
-
{ label: __('Stretch', 'webentor'), value: 'justify-stretch' },
|
|
68
|
-
];
|
|
69
|
-
|
|
70
|
-
const getAlignItemsValues = () => [
|
|
71
|
-
{ label: __('None selected', 'webentor'), value: '' },
|
|
72
|
-
{ label: __('Flex Start', 'webentor'), value: 'items-start' },
|
|
73
|
-
{ label: __('Flex End', 'webentor'), value: 'items-end' },
|
|
74
|
-
{ label: __('Center', 'webentor'), value: 'items-center' },
|
|
75
|
-
{ label: __('Baseline', 'webentor'), value: 'items-baseline' },
|
|
76
|
-
{ label: __('Stretch', 'webentor'), value: 'items-stretch' },
|
|
77
|
-
];
|
|
78
|
-
|
|
79
|
-
const getAlignContentValues = () => [
|
|
80
|
-
{ label: __('None selected', 'webentor'), value: '' },
|
|
81
|
-
{ label: __('Normal', 'webentor'), value: 'content-normal' },
|
|
82
|
-
{ label: __('Flex Start', 'webentor'), value: 'content-start' },
|
|
83
|
-
{ label: __('Flex End', 'webentor'), value: 'content-end' },
|
|
84
|
-
{ label: __('Center', 'webentor'), value: 'content-center' },
|
|
85
|
-
{ label: __('Space Between', 'webentor'), value: 'content-between' },
|
|
86
|
-
{ label: __('Space Around', 'webentor'), value: 'content-around' },
|
|
87
|
-
{ label: __('Space Evenly', 'webentor'), value: 'content-evenly' },
|
|
88
|
-
{ label: __('Baseline', 'webentor'), value: 'content-baseline' },
|
|
89
|
-
{ label: __('Stretch', 'webentor'), value: 'content-stretch' },
|
|
90
|
-
];
|
|
91
|
-
|
|
92
|
-
const getFlexGrowValues = () => [
|
|
93
|
-
{ label: __('None selected', 'webentor'), value: '' },
|
|
94
|
-
{ label: __('Grow 0', 'webentor'), value: 'grow-0' },
|
|
95
|
-
{ label: __('Grow 1', 'webentor'), value: 'grow' },
|
|
96
|
-
];
|
|
97
|
-
|
|
98
|
-
const getFlexShrinkValues = () => [
|
|
99
|
-
{ label: __('None selected', 'webentor'), value: '' },
|
|
100
|
-
{ label: __('Shrink 0', 'webentor'), value: 'shrink-0' },
|
|
101
|
-
{ label: __('Shrink 1', 'webentor'), value: 'shrink' },
|
|
102
|
-
];
|
|
103
|
-
|
|
104
|
-
const getOrderValues = () => [
|
|
105
|
-
{ label: __('None selected', 'webentor'), value: '' },
|
|
106
|
-
{ label: __('Order First', 'webentor'), value: 'order-first' },
|
|
107
|
-
{ label: __('Order Last', 'webentor'), value: 'order-last' },
|
|
108
|
-
{ label: __('Order None', 'webentor'), value: 'order-none' },
|
|
109
|
-
{ label: __('Order 0', 'webentor'), value: 'order-0' },
|
|
110
|
-
{ label: __('Order 1', 'webentor'), value: 'order-1' },
|
|
111
|
-
{ label: __('Order 2', 'webentor'), value: 'order-2' },
|
|
112
|
-
{ label: __('Order 3', 'webentor'), value: 'order-3' },
|
|
113
|
-
{ label: __('Order 4', 'webentor'), value: 'order-4' },
|
|
114
|
-
{ label: __('Order 5', 'webentor'), value: 'order-5' },
|
|
115
|
-
];
|
|
116
|
-
|
|
117
|
-
export const getFlexboxProperties = (twTheme: WebentorConfig['theme']) => [
|
|
118
|
-
{
|
|
119
|
-
label: __('Flex Gap', 'webentor'),
|
|
120
|
-
name: 'gap',
|
|
121
|
-
values: getGapValues('', twTheme),
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
label: __('Flex Gap X', 'webentor'),
|
|
125
|
-
name: 'gap-x',
|
|
126
|
-
values: getGapValues('x', twTheme),
|
|
127
|
-
help: __('Overrides Gap value', 'webentor'),
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
label: __('Flex Gap Y', 'webentor'),
|
|
131
|
-
name: 'gap-y',
|
|
132
|
-
values: getGapValues('y', twTheme),
|
|
133
|
-
help: __('Overrides Gap value', 'webentor'),
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
label: __('Flex Direction', 'webentor'),
|
|
137
|
-
name: 'flex-direction',
|
|
138
|
-
values: getFlexDirectionValues(),
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
label: __('Flex Wrap', 'webentor'),
|
|
142
|
-
name: 'flex-wrap',
|
|
143
|
-
values: getFlexWrapValues(),
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
label: __('Justify Content', 'webentor'),
|
|
147
|
-
name: 'justify-content',
|
|
148
|
-
values: getJustifyContentValues(),
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
label: __('Align Items', 'webentor'),
|
|
152
|
-
name: 'align-items',
|
|
153
|
-
values: getAlignItemsValues(),
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
label: __('Align Content', 'webentor'),
|
|
157
|
-
name: 'align-content',
|
|
158
|
-
values: getAlignContentValues(),
|
|
159
|
-
},
|
|
160
|
-
];
|
|
161
|
-
|
|
162
|
-
export const getFlexboxItemProperties = (twTheme: WebentorConfig['theme']) => [
|
|
163
|
-
{
|
|
164
|
-
label: __('Flex Grow', 'webentor'),
|
|
165
|
-
name: 'flex-grow',
|
|
166
|
-
help: __('Applicable only on Flexbox child item', 'webentor'),
|
|
167
|
-
values: getFlexGrowValues(),
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
label: __('Flex Shrink', 'webentor'),
|
|
171
|
-
name: 'flex-shrink',
|
|
172
|
-
help: __('Applicable only on Flexbox child item', 'webentor'),
|
|
173
|
-
values: getFlexShrinkValues(),
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
label: __('Flex Basis', 'webentor'),
|
|
177
|
-
name: 'flex-basis',
|
|
178
|
-
help: __('Applicable only on Flexbox child item', 'webentor'),
|
|
179
|
-
values: getFlexBasisValues(twTheme),
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
label: __('Order', 'webentor'),
|
|
183
|
-
name: 'order',
|
|
184
|
-
help: __('Applicable only on Flexbox child item', 'webentor'),
|
|
185
|
-
values: getOrderValues(),
|
|
186
|
-
},
|
|
187
|
-
];
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { SelectControl } from '@wordpress/components';
|
|
2
|
-
import { Fragment } from '@wordpress/element';
|
|
3
|
-
import { __ } from '@wordpress/i18n';
|
|
4
|
-
|
|
5
|
-
import { setImmutably } from '@webentorCore/_utils';
|
|
6
|
-
import { BlockPanelProps } from '@webentorCore/block-filters/responsive-settings/types';
|
|
7
|
-
import { useBlockParent } from '@webentorCore/blocks-utils/_use-block-parent';
|
|
8
|
-
|
|
9
|
-
import { DisabledSliderInfo } from '../../../components/DisabledSliderInfo';
|
|
10
|
-
import { isSliderEnabledForBreakpoint } from '../../../utils';
|
|
11
|
-
import { getFlexboxItemProperties, getFlexboxProperties } from './properties';
|
|
12
|
-
|
|
13
|
-
interface FlexboxSettingsProps extends BlockPanelProps {
|
|
14
|
-
breakpoint: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const FlexboxSettings = ({
|
|
18
|
-
attributes,
|
|
19
|
-
setAttributes,
|
|
20
|
-
name,
|
|
21
|
-
breakpoint,
|
|
22
|
-
twTheme,
|
|
23
|
-
}: FlexboxSettingsProps) => {
|
|
24
|
-
const isSliderEnabled = isSliderEnabledForBreakpoint(
|
|
25
|
-
name,
|
|
26
|
-
attributes,
|
|
27
|
-
breakpoint,
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
// Get parent block data
|
|
31
|
-
const parentBlock = useBlockParent();
|
|
32
|
-
|
|
33
|
-
// TODO: how to check all previous breakpoints and determine if any of them is flex so we can display the settings?
|
|
34
|
-
const isParentFlex =
|
|
35
|
-
parentBlock?.attributes?.display?.display?.value?.[breakpoint] === 'flex';
|
|
36
|
-
const isCurrentFlex =
|
|
37
|
-
attributes?.display?.display?.value?.[breakpoint] === 'flex';
|
|
38
|
-
|
|
39
|
-
if (!isCurrentFlex && !isParentFlex) {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const flexboxProperties = getFlexboxProperties(twTheme);
|
|
44
|
-
const flexboxItemProperties = getFlexboxItemProperties(twTheme);
|
|
45
|
-
|
|
46
|
-
return (
|
|
47
|
-
<>
|
|
48
|
-
{isCurrentFlex && attributes?.flexbox && (
|
|
49
|
-
<div
|
|
50
|
-
style={{
|
|
51
|
-
marginTop: '16px',
|
|
52
|
-
border: '1px solid #e0e0e0',
|
|
53
|
-
padding: '8px',
|
|
54
|
-
}}
|
|
55
|
-
>
|
|
56
|
-
<h3 style={{ marginBottom: '8px' }}>
|
|
57
|
-
{__('Flexbox settings', 'webentor')}
|
|
58
|
-
</h3>
|
|
59
|
-
|
|
60
|
-
{isSliderEnabled && <DisabledSliderInfo />}
|
|
61
|
-
|
|
62
|
-
{flexboxProperties.map((property) => (
|
|
63
|
-
<Fragment key={property.name + breakpoint}>
|
|
64
|
-
<SelectControl
|
|
65
|
-
label={property.label}
|
|
66
|
-
value={attributes.flexbox?.[property.name]?.value?.[breakpoint]}
|
|
67
|
-
disabled={isSliderEnabled}
|
|
68
|
-
help={property?.help}
|
|
69
|
-
options={property.values}
|
|
70
|
-
onChange={(selected) =>
|
|
71
|
-
setAttributes(
|
|
72
|
-
setImmutably(
|
|
73
|
-
attributes,
|
|
74
|
-
['flexbox', property.name, 'value', breakpoint],
|
|
75
|
-
selected,
|
|
76
|
-
),
|
|
77
|
-
)
|
|
78
|
-
}
|
|
79
|
-
/>
|
|
80
|
-
</Fragment>
|
|
81
|
-
))}
|
|
82
|
-
</div>
|
|
83
|
-
)}
|
|
84
|
-
|
|
85
|
-
{isParentFlex && attributes?.flexboxItem && (
|
|
86
|
-
<div
|
|
87
|
-
style={{
|
|
88
|
-
marginTop: '16px',
|
|
89
|
-
border: '1px solid #e0e0e0',
|
|
90
|
-
padding: '8px',
|
|
91
|
-
}}
|
|
92
|
-
>
|
|
93
|
-
<h3 style={{ marginBottom: '8px' }}>
|
|
94
|
-
{__('Flex Item settings', 'webentor')}
|
|
95
|
-
</h3>
|
|
96
|
-
<div style={{ marginBottom: '8px', fontSize: '12px' }}>
|
|
97
|
-
{__(
|
|
98
|
-
'Parent block display setting is set to `Flex`, so current block also acts as flex item.',
|
|
99
|
-
'webentor',
|
|
100
|
-
)}
|
|
101
|
-
</div>
|
|
102
|
-
|
|
103
|
-
{isSliderEnabled && <DisabledSliderInfo />}
|
|
104
|
-
|
|
105
|
-
{flexboxItemProperties.map((property) => (
|
|
106
|
-
<Fragment key={property.name + breakpoint}>
|
|
107
|
-
<SelectControl
|
|
108
|
-
label={property.label}
|
|
109
|
-
value={
|
|
110
|
-
attributes.flexboxItem?.[property.name]?.value?.[breakpoint]
|
|
111
|
-
}
|
|
112
|
-
disabled={isSliderEnabled}
|
|
113
|
-
help={property?.help}
|
|
114
|
-
options={property.values}
|
|
115
|
-
onChange={(selected) =>
|
|
116
|
-
setAttributes(
|
|
117
|
-
setImmutably(
|
|
118
|
-
attributes,
|
|
119
|
-
['flexboxItem', property.name, 'value', breakpoint],
|
|
120
|
-
selected,
|
|
121
|
-
),
|
|
122
|
-
)
|
|
123
|
-
}
|
|
124
|
-
/>
|
|
125
|
-
</Fragment>
|
|
126
|
-
))}
|
|
127
|
-
</div>
|
|
128
|
-
)}
|
|
129
|
-
</>
|
|
130
|
-
);
|
|
131
|
-
};
|