PluginProbe ʕ •ᴥ•ʔ
GenerateBlocks / 2.2.0
GenerateBlocks v2.2.0
trunk 1.0 1.0.1 1.0.2 1.1.0 1.1.1 1.1.2 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 2.0.0 2.0.1 2.0.2 2.1.0 2.1.1 2.1.2 2.2.0 2.2.1 2.3.0
generateblocks / src / components / block-styles-builder / BlockStylesBuilder.jsx
generateblocks / src / components / block-styles-builder Last commit date
BlockStylesBuilder.jsx 1 year ago index.js 1 year ago
BlockStylesBuilder.jsx
125 lines
1 import { applyFilters } from '@wordpress/hooks';
2 import { __ } from '@wordpress/i18n';
3 import { useMemo } from '@wordpress/element';
4
5 import {
6 StylesBuilder,
7 getStylesObject,
8 deleteStylesObjectKey,
9 updateStylesObjectKey,
10 getPreviewWidth,
11 } from '@edge22/styles-builder';
12 import {
13 TABS_STORAGE_KEY,
14 } from '@edge22/block-styles';
15 import { useBlockStyles } from '@hooks/useBlockStyles';
16
17 export function BlockStylesBuilder( { attributes, setAttributes, shortcuts, onStyleChange, name } ) {
18 const {
19 atRule,
20 setAtRule,
21 nestedRule,
22 setNestedRule,
23 setDeviceType,
24 getPreviewDevice,
25 setGlobalStyle,
26 cancelEditGlobalStyle,
27 currentStyle,
28 } = useBlockStyles();
29
30 const allowCustomAdvancedSelector = applyFilters(
31 'generateblocks.editor.allowCustomAdvancedSelector',
32 false,
33 { name }
34 );
35
36 const allowCustomAtRule = applyFilters(
37 'generateblocks.editor.allowCustomAtRule',
38 false,
39 { name }
40 );
41
42 const { styles, globalClasses = [] } = attributes;
43 const currentStyles = getStylesObject( styles, atRule, nestedRule );
44 const selectorShortcuts = useMemo( () => {
45 if ( shortcuts.selectorShortcuts && Object.keys( shortcuts.selectorShortcuts ).length ) {
46 return shortcuts.selectorShortcuts;
47 }
48
49 return {
50 default: {
51 items: [
52 { label: 'Hover', value: '&:hover' },
53 { label: 'Hover & Focus', value: '&:is(:hover, :focus)' },
54 { label: 'Links', value: 'a' },
55 { label: 'Hovered links', value: 'a:hover' },
56 ],
57 },
58 interactions: {
59 label: __( 'Interactions', 'generateblocks' ),
60 items: [
61 { label: 'Hover', value: '&:hover' },
62 { label: 'Focus', value: '&:focus' },
63 { label: 'Hover & Focus', value: '&:is(:hover, :focus)' },
64 ],
65 },
66 links: {
67 label: __( 'Links', 'generateblocks' ),
68 items: [
69 { label: 'Links', value: 'a' },
70 { label: 'Hovered links', value: 'a:hover' },
71 { label: 'Hovered & focused links', value: 'a:is(:hover, :focus)' },
72 { label: 'Visited links', value: 'a:visited' },
73 ],
74 },
75 pseudoElements: {
76 label: __( 'Pseudo Elements', 'generateblocks' ),
77 items: [
78 { label: 'Before', value: '&:before' },
79 { label: 'After', value: '&:after' },
80 ],
81 },
82 };
83 }, [ shortcuts ] );
84
85 return (
86 <StylesBuilder
87 currentSelector={ currentStyle?.selector }
88 styles={ currentStyles }
89 allStyles={ styles }
90 onDeleteStyle={ ( property, nestedRuleValue ) => {
91 const newStyles = deleteStylesObjectKey( styles, property, nestedRuleValue );
92 setAttributes( { styles: newStyles } );
93 } }
94 nestedRule={ nestedRule }
95 atRule={ atRule }
96 onStyleChange={ ( property, value = null ) => onStyleChange( property, value, atRule, nestedRule ) }
97 onNestedRuleChange={ ( value ) => setNestedRule( value ) }
98 onAtRuleChange={ ( value ) => {
99 setAtRule( value );
100 const previewWidth = getPreviewWidth( value );
101 const previewDevice = getPreviewDevice( previewWidth );
102
103 if ( previewDevice ) {
104 setDeviceType( previewDevice );
105 }
106 } }
107 onUpdateKey={ ( oldKey, newKey, nestedRuleValue ) => {
108 const newStyles = updateStylesObjectKey( styles, oldKey, newKey, nestedRuleValue );
109 setAttributes( { styles: newStyles } );
110 } }
111 selectorShortcuts={ selectorShortcuts }
112 visibleSelectors={ shortcuts.visibleShortcuts }
113 onEditStyle={ setGlobalStyle }
114 cancelEditStyle={ cancelEditGlobalStyle }
115 setLocalTab={ ( tab ) => {
116 sessionStorage.setItem( TABS_STORAGE_KEY, tab );
117 } }
118 scope="local"
119 allowCustomAdvancedSelector={ allowCustomAdvancedSelector }
120 allowCustomAtRule={ allowCustomAtRule }
121 appliedGlobalStyles={ globalClasses }
122 />
123 );
124 }
125