@eightshift/frontend-libs-tailwind 1.1.1 → 1.3.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.
Files changed (59) hide show
  1. package/.prettierrc +1 -1
  2. package/CHANGELOG.md +16 -1
  3. package/blocks/init/assets/scripts/application-admin.js +1 -1
  4. package/blocks/init/src/Blocks/assets/scripts/link-section-editor.js +5 -1
  5. package/blocks/init/src/Blocks/assets/scripts/shared.js +3 -1
  6. package/blocks/init/src/Blocks/assets/styles/application-blocks.css +1 -0
  7. package/blocks/init/src/Blocks/components/button/button.php +6 -0
  8. package/blocks/init/src/Blocks/components/button/components/button-options.js +20 -2
  9. package/blocks/init/src/Blocks/components/card/components/card-editor.js +2 -1
  10. package/blocks/init/src/Blocks/components/icon/icon.php +3 -1
  11. package/blocks/init/src/Blocks/components/image/components/image-editor.js +7 -1
  12. package/blocks/init/src/Blocks/components/image/components/image-options.js +17 -3
  13. package/blocks/init/src/Blocks/components/list/components/list-options.js +3 -1
  14. package/blocks/init/src/Blocks/components/list/manifest.json +1 -1
  15. package/blocks/init/src/Blocks/components/modal/assets/index.js +9 -7
  16. package/blocks/init/src/Blocks/components/paragraph/components/paragraph-editor.js +1 -1
  17. package/blocks/init/src/Blocks/components/paragraph/components/paragraph-options.js +3 -1
  18. package/blocks/init/src/Blocks/components/share/assets/index.js +6 -2
  19. package/blocks/init/src/Blocks/components/share/components/share-options.js +11 -2
  20. package/blocks/init/src/Blocks/components/share/share.php +7 -4
  21. package/blocks/init/src/Blocks/components/video/components/video-editor.js +5 -3
  22. package/blocks/init/src/Blocks/components/video/components/video-options.js +25 -4
  23. package/blocks/init/src/Blocks/components/video/manifest.json +5 -1
  24. package/blocks/init/src/Blocks/custom/carousel/assets/pagination.js +8 -2
  25. package/blocks/init/src/Blocks/custom/column/components/column-options.js +12 -4
  26. package/blocks/init/src/Blocks/custom/columns/components/columns-editor.js +6 -2
  27. package/blocks/init/src/Blocks/custom/columns/manifest.json +63 -37
  28. package/blocks/init/src/Blocks/custom/featured-content/components/featured-content-options.js +29 -8
  29. package/blocks/init/src/Blocks/custom/image/manifest.json +4 -76
  30. package/blocks/init/src/Blocks/custom/map/components/map-editor.js +12 -2
  31. package/blocks/init/src/Blocks/custom/map/components/map-options.js +40 -11
  32. package/blocks/init/src/Blocks/custom/site-footer/components/site-footer-options.js +3 -1
  33. package/blocks/init/src/Blocks/custom/site-footer/site-footer.php +5 -3
  34. package/blocks/init/src/Blocks/custom/video/manifest.json +0 -76
  35. package/blocks/init/src/Blocks/wrapper/components/wrapper-options.js +38 -7
  36. package/blocks/init/src/Blocks/wrapper/manifest.json +4 -1
  37. package/bun.lockb +0 -0
  38. package/package.json +27 -27
  39. package/schemas/block.json +16 -16
  40. package/schemas/component.json +18 -18
  41. package/scripts/components/block-inserter.js +4 -1
  42. package/scripts/components/file-picker.js +31 -17
  43. package/scripts/components/link-section-editor.js +5 -1
  44. package/scripts/components/media-picker.js +36 -11
  45. package/scripts/components/picker-placeholder.js +6 -2
  46. package/scripts/components/server-side-render.js +4 -1
  47. package/scripts/components/settings/settings.js +8 -2
  48. package/scripts/editor/attributes.js +8 -3
  49. package/scripts/editor/editor.js +7 -1
  50. package/scripts/editor/fetch.js +3 -2
  51. package/scripts/editor/index.js +8 -1
  52. package/scripts/editor/options.js +3 -1
  53. package/scripts/editor/registration.js +87 -17
  54. package/scripts/editor/tailwindcss.js +96 -58
  55. package/scripts/helpers/index.js +7 -1
  56. package/scripts/index.js +15 -2
  57. package/webpack/base.mjs +3 -1
  58. package/webpack/helpers.mjs +13 -3
  59. package/webpack/project.mjs +8 -2
@@ -12,46 +12,57 @@
12
12
  ],
13
13
  "example": {
14
14
  "attributes": {
15
- "columnsColumnGapLarge": 30,
16
- "columnsRowGapLarge": 30
15
+ "columnsNumOfColumns": {
16
+ "_default": "2",
17
+ "_desktopFirst": true,
18
+ "max-sm": "1"
19
+ },
20
+ "wrapperBackground": "solid-gray-50",
21
+ "wrapperBorderRadius": "lg",
22
+ "wrapperPaddingTop": {
23
+ "_default": "md",
24
+ "_desktopFirst": true
25
+ },
26
+ "wrapperPaddingBottom": {
27
+ "_default": "md",
28
+ "_desktopFirst": true
29
+ }
17
30
  },
18
31
  "innerBlocks": [
19
32
  {
20
33
  "name": "eightshift-boilerplate/column",
21
34
  "attributes": {
22
- "columnWidthLarge": 4
35
+ "columnOffset": {
36
+ "_default": "1",
37
+ "_desktopFirst": true,
38
+ "max-sm": "1"
39
+ },
40
+ "columnWidth": {
41
+ "_default": "1",
42
+ "_desktopFirst": true,
43
+ "max-sm": "1"
44
+ },
45
+ "columnVerticalAlign": {
46
+ "_default": "center",
47
+ "_desktopFirst": true
48
+ }
23
49
  },
24
50
  "innerBlocks": [
25
51
  {
26
- "name": "eightshift-boilerplate/card",
52
+ "name": "eightshift-boilerplate/heading",
27
53
  "attributes": {
28
- "cardCardImageUrl": "https://picsum.photos/400/400",
29
- "cardCardIntroContent": "Intro",
30
- "cardCardIntroSize": "small",
31
- "cardCardIntroColor": "light",
32
- "cardCardHeadingContent": "Heading",
33
- "cardCardParagraphContent": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam aliquam est id semper aliquet.",
34
- "cardCardButtonUse": false
54
+ "wrapperNoWidthControls": true,
55
+ "wrapperWidth": "none",
56
+ "headingHeadingContent": "Lorem ipsum",
57
+ "headingHeadingSize": "xl"
35
58
  }
36
- }
37
- ]
38
- },
39
- {
40
- "name": "eightshift-boilerplate/column",
41
- "attributes": {
42
- "columnWidthLarge": 4
43
- },
44
- "innerBlocks": [
59
+ },
45
60
  {
46
- "name": "eightshift-boilerplate/card",
61
+ "name": "eightshift-boilerplate/paragraph",
47
62
  "attributes": {
48
- "cardCardImageUrl": "https://picsum.photos/400/400",
49
- "cardCardIntroContent": "Intro",
50
- "cardCardIntroSize": "small",
51
- "cardCardIntroColor": "light",
52
- "cardCardHeadingContent": "Heading",
53
- "cardCardParagraphContent": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam aliquam est id semper aliquet.",
54
- "cardCardButtonUse": false
63
+ "wrapperNoWidthControls": true,
64
+ "wrapperWidth": "none",
65
+ "paragraphParagraphContent": "Dolor sit amet"
55
66
  }
56
67
  }
57
68
  ]
@@ -59,19 +70,34 @@
59
70
  {
60
71
  "name": "eightshift-boilerplate/column",
61
72
  "attributes": {
62
- "columnWidthLarge": 4
73
+ "columnOffset": {
74
+ "_default": "2",
75
+ "_desktopFirst": true,
76
+ "max-sm": "1"
77
+ },
78
+ "columnWidth": {
79
+ "_default": "1",
80
+ "_desktopFirst": true,
81
+ "max-sm": "1"
82
+ },
83
+ "columnHorizontalAlign": {
84
+ "_default": "end",
85
+ "_desktopFirst": true
86
+ }
63
87
  },
64
88
  "innerBlocks": [
65
89
  {
66
- "name": "eightshift-boilerplate/card",
90
+ "name": "eightshift-boilerplate/image",
67
91
  "attributes": {
68
- "cardCardImageUrl": "https://picsum.photos/400/400",
69
- "cardCardIntroContent": "Intro",
70
- "cardCardIntroSize": "small",
71
- "cardCardIntroColor": "light",
72
- "cardCardHeadingContent": "Heading",
73
- "cardCardParagraphContent": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam aliquam est id semper aliquet.",
74
- "cardCardButtonUse": false
92
+ "wrapperNoWidthControls": true,
93
+ "wrapperWidth": "none",
94
+ "imageImageData": {
95
+ "_desktopFirst": false,
96
+ "_default": {
97
+ "id": 245,
98
+ "url": "https://picsum.photos/id/17/400/400"
99
+ }
100
+ }
75
101
  }
76
102
  }
77
103
  ]
@@ -2,7 +2,14 @@ import { useState } from '@wordpress/element';
2
2
  import { __ } from '@wordpress/i18n';
3
3
  import { getAttrKey, checkAttr, getOption, props, fetchFromWpRest } from '@eightshift/frontend-libs-tailwind/scripts';
4
4
  import { LoadMoreOptions } from '../../../components/load-more/components/load-more-options';
5
- import { AnimatedVisibility, AsyncMultiSelect, NumberPicker, OptionSelect, Spacer, Toggle } from '@eightshift/ui-components';
5
+ import {
6
+ AnimatedVisibility,
7
+ AsyncMultiSelect,
8
+ NumberPicker,
9
+ OptionSelect,
10
+ Spacer,
11
+ Toggle,
12
+ } from '@eightshift/ui-components';
6
13
  import { icons } from '@eightshift/ui-components/icons';
7
14
  import manifest from '../manifest.json';
8
15
 
@@ -96,7 +103,9 @@ export const FeaturedContentOptions = ({ attributes, setAttributes }) => {
96
103
  label: __('Select posts to show', '%g_textdomain%'),
97
104
  value: true,
98
105
  disabled: featuredContentExcludeCurrentPost || featuredContentTaxonomy,
99
- subtitle: (featuredContentExcludeCurrentPost || featuredContentTaxonomy) && __('Unavailable when a taxonomy filter is set', '%g_textdomain%'),
106
+ subtitle:
107
+ (featuredContentExcludeCurrentPost || featuredContentTaxonomy) &&
108
+ __('Unavailable when a taxonomy filter is set', '%g_textdomain%'),
100
109
  },
101
110
  ]}
102
111
  type='radiosSegmented'
@@ -112,7 +121,9 @@ export const FeaturedContentOptions = ({ attributes, setAttributes }) => {
112
121
  label={__('Exclude current', '%g_textdomain%')}
113
122
  subtitle={__('Best used with blog posts', '%g_textdomain%')}
114
123
  checked={featuredContentExcludeCurrentPost}
115
- onChange={(value) => setAttributes({ [getAttrKey('featuredContentExcludeCurrentPost', attributes, manifest)]: value })}
124
+ onChange={(value) =>
125
+ setAttributes({ [getAttrKey('featuredContentExcludeCurrentPost', attributes, manifest)]: value })
126
+ }
116
127
  />
117
128
  </AnimatedVisibility>
118
129
 
@@ -122,7 +133,10 @@ export const FeaturedContentOptions = ({ attributes, setAttributes }) => {
122
133
  >
123
134
  <AsyncMultiSelect
124
135
  key={featuredContentPostType.value}
125
- help={__('Newest 30 items are shown, others can be selected by searching. If blank, all items are shown.', '%g_textdomain%')}
136
+ help={__(
137
+ 'Newest 30 items are shown, others can be selected by searching. If blank, all items are shown.',
138
+ '%g_textdomain%',
139
+ )}
126
140
  value={featuredContentPosts}
127
141
  loadOptions={fetchFromWpRest(featuredContentPostType?.api, {
128
142
  processLabel: ({ title: { rendered } }) => rendered,
@@ -153,10 +167,12 @@ export const FeaturedContentOptions = ({ attributes, setAttributes }) => {
153
167
  setUseSpecificPosts(false);
154
168
  setUseSpecificTerms(false);
155
169
 
156
- const value = rawValue === '_all' ? allGenericOption : taxonomyOptions.find((option) => option.value === rawValue);
170
+ const value =
171
+ rawValue === '_all' ? allGenericOption : taxonomyOptions.find((option) => option.value === rawValue);
157
172
 
158
173
  setAttributes({
159
- [getAttrKey('featuredContentTaxonomy', attributes, manifest)]: value === allGenericOption ? undefined : value,
174
+ [getAttrKey('featuredContentTaxonomy', attributes, manifest)]:
175
+ value === allGenericOption ? undefined : value,
160
176
  [getAttrKey('featuredContentTerms', attributes, manifest)]: undefined,
161
177
  [getAttrKey('featuredContentUseCurrentTerm', attributes, manifest)]: false,
162
178
  [getAttrKey('featuredContentPosts', attributes, manifest)]: undefined,
@@ -183,7 +199,9 @@ export const FeaturedContentOptions = ({ attributes, setAttributes }) => {
183
199
  label: __('Select terms to show', '%g_textdomain%'),
184
200
  value: 'manual',
185
201
  disabled: (featuredContentTaxonomy ?? allGenericOption)?.value === '_all',
186
- subtitle: (featuredContentTaxonomy ?? allGenericOption)?.value === '_all' && __('Select a taxonomy to enable', '%g_textdomain%'),
202
+ subtitle:
203
+ (featuredContentTaxonomy ?? allGenericOption)?.value === '_all' &&
204
+ __('Select a taxonomy to enable', '%g_textdomain%'),
187
205
  },
188
206
  {
189
207
  label: __('Show same terms as current post', '%g_textdomain%'),
@@ -200,7 +218,10 @@ export const FeaturedContentOptions = ({ attributes, setAttributes }) => {
200
218
  >
201
219
  <AsyncMultiSelect
202
220
  key={featuredContentTaxonomy?.value}
203
- help={__('Newest 30 items are shown, others can be selected by searching. If blank, all items are shown.', '%g_textdomain%')}
221
+ help={__(
222
+ 'Newest 30 items are shown, others can be selected by searching. If blank, all items are shown.',
223
+ '%g_textdomain%',
224
+ )}
204
225
  value={featuredContentTerms}
205
226
  loadOptions={fetchFromWpRest(featuredContentTaxonomy?.api, {
206
227
  fields: 'id,name',
@@ -21,85 +21,13 @@
21
21
  "imageAlign": {
22
22
  "type": "string",
23
23
  "default": "center center"
24
+ },
25
+ "wrapperDisabledOptions": {
26
+ "type": "string",
27
+ "default": "roundedCorners"
24
28
  }
25
29
  },
26
30
  "components": {
27
31
  "image": "image"
28
- },
29
- "variables": {
30
- "imageAlign": {
31
- "top left": [
32
- {
33
- "variable": {
34
- "block-image-align-horizontal": "flex-start",
35
- "block-image-align-vertical": "flex-start"
36
- }
37
- }
38
- ],
39
- "top center": [
40
- {
41
- "variable": {
42
- "block-image-align-horizontal": "center",
43
- "block-image-align-vertical": "flex-start"
44
- }
45
- }
46
- ],
47
- "top right": [
48
- {
49
- "variable": {
50
- "block-image-align-horizontal": "flex-end",
51
- "block-image-align-vertical": "flex-start"
52
- }
53
- }
54
- ],
55
- "center left": [
56
- {
57
- "variable": {
58
- "block-image-align-horizontal": "flex-start",
59
- "block-image-align-vertical": "center"
60
- }
61
- }
62
- ],
63
- "center center": [
64
- {
65
- "variable": {
66
- "block-image-align-horizontal": "center",
67
- "block-image-align-vertical": "center"
68
- }
69
- }
70
- ],
71
- "center right": [
72
- {
73
- "variable": {
74
- "block-image-align-horizontal": "flex-end",
75
- "block-image-align-vertical": "center"
76
- }
77
- }
78
- ],
79
- "bottom left": [
80
- {
81
- "variable": {
82
- "block-image-align-horizontal": "flex-start",
83
- "block-image-align-vertical": "flex-end"
84
- }
85
- }
86
- ],
87
- "bottom center": [
88
- {
89
- "variable": {
90
- "block-image-align-horizontal": "center",
91
- "block-image-align-vertical": "flex-end"
92
- }
93
- }
94
- ],
95
- "bottom right": [
96
- {
97
- "variable": {
98
- "block-image-align-horizontal": "flex-end",
99
- "block-image-align-vertical": "flex-end"
100
- }
101
- }
102
- ]
103
- }
104
32
  }
105
33
  }
@@ -1,5 +1,13 @@
1
1
  import { checkAttr } from '@eightshift/frontend-libs-tailwind/scripts';
2
- import { Interactions, Layers, MapInteraction, OpenLayersMap, Controls, MapControl, processMapLayer } from './map-components';
2
+ import {
3
+ Interactions,
4
+ Layers,
5
+ MapInteraction,
6
+ OpenLayersMap,
7
+ Controls,
8
+ MapControl,
9
+ processMapLayer,
10
+ } from './map-components';
3
11
  import manifest from '../manifest.json';
4
12
 
5
13
  export const MapEditor = ({ attributes }) => {
@@ -17,7 +25,9 @@ export const MapEditor = ({ attributes }) => {
17
25
  center={[mapCenterLon ?? 16.352532, mapCenterLat ?? 46.314045]}
18
26
  zoom={mapZoom}
19
27
  >
20
- <Layers key={mapLayers.map(({ id, type }) => `${id}-${type}`).join(',')}>{[...mapLayers].reverse().map((layer) => processMapLayer(layer))}</Layers>
28
+ <Layers key={mapLayers.map(({ id, type }) => `${id}-${type}`).join(',')}>
29
+ {[...mapLayers].reverse().map((layer) => processMapLayer(layer))}
30
+ </Layers>
21
31
 
22
32
  <Interactions>
23
33
  <MapInteraction
@@ -111,15 +111,33 @@ export const MapOptions = ({ attributes, setAttributes }) => {
111
111
  {(layer) => {
112
112
  const { type, apiKey, geoJsonUrl, geoJsonId, styleUrl, hidden, updateData } = layer;
113
113
 
114
- const needsApiKey = ['mapBoxVector', 'mapBoxRaster', 'mapTilerVector', 'vectorJson', 'mapTilerRasterXyz', 'mapTilerRasterJson'].includes(type);
115
-
116
- const hasMapStyleOptions = ['mapBoxVector', 'mapBoxRaster', 'mapTilerVector', 'vectorJson', 'mapTilerRasterXyz', 'mapTilerRasterJson'].includes(type);
114
+ const needsApiKey = [
115
+ 'mapBoxVector',
116
+ 'mapBoxRaster',
117
+ 'mapTilerVector',
118
+ 'vectorJson',
119
+ 'mapTilerRasterXyz',
120
+ 'mapTilerRasterJson',
121
+ ].includes(type);
122
+
123
+ const hasMapStyleOptions = [
124
+ 'mapBoxVector',
125
+ 'mapBoxRaster',
126
+ 'mapTilerVector',
127
+ 'vectorJson',
128
+ 'mapTilerRasterXyz',
129
+ 'mapTilerRasterJson',
130
+ ].includes(type);
117
131
 
118
132
  return (
119
133
  <RepeaterItem
120
- icon={layer?.type ? layerTypes?.[layer?.type]?.icon ?? icons.mapLayer : icons.layerOff}
134
+ icon={layer?.type ? (layerTypes?.[layer?.type]?.icon ?? icons.mapLayer) : icons.layerOff}
121
135
  label={layerTypes?.[type]?.title ?? __('New layer', '%g_textdomain%')}
122
- subtitle={type === 'geoJson' ? truncateMiddle(geoJsonUrl?.slice(geoJsonUrl?.lastIndexOf('/') + 1) ?? '', 20) : layerTypes?.[type]?.subtitle}
136
+ subtitle={
137
+ type === 'geoJson'
138
+ ? truncateMiddle(geoJsonUrl?.slice(geoJsonUrl?.lastIndexOf('/') + 1) ?? '', 20)
139
+ : layerTypes?.[type]?.subtitle
140
+ }
123
141
  actions={
124
142
  layer?.type?.length < 1 ? (
125
143
  icons.dummySpacer
@@ -160,15 +178,23 @@ export const MapOptions = ({ attributes, setAttributes }) => {
160
178
  onChange={(value) => updateData({ styleUrl: value })}
161
179
  help={
162
180
  <>
163
- {!type?.startsWith('mapBox') && __('Copy the full style URL from MapTiler. Keep the API key inside the URL.', '%g_textdomain%')}
181
+ {!type?.startsWith('mapBox') &&
182
+ __('Copy the full style URL from MapTiler. Keep the API key inside the URL.', '%g_textdomain%')}
164
183
  {type === 'mapBoxVector' && __('Copy the full style URL from Mapbox.', '%g_textdomain%')}
165
- {type === 'mapBoxRaster' && __('Copy the full style URL from Mapbox or a Mapbox-compatible source. Keep the access token inside the URL.', '%g_textdomain%')}
184
+ {type === 'mapBoxRaster' &&
185
+ __(
186
+ 'Copy the full style URL from Mapbox or a Mapbox-compatible source. Keep the access token inside the URL.',
187
+ '%g_textdomain%',
188
+ )}
166
189
  <br />
167
190
  <br />
168
191
  {['mapBoxRaster', 'mapTilerVector', 'mapTilerRasterXyz'].includes(type) && (
169
192
  <>
170
193
  <code className='es-bg-transparent es-p-0 es-text-3'>{'{z}/{x}/{y}'}</code>
171
- {__("should be left as they are in the URL; they're needed for the map to work properly.", '%g_textdomain%')}
194
+ {__(
195
+ "should be left as they are in the URL; they're needed for the map to work properly.",
196
+ '%g_textdomain%',
197
+ )}
172
198
  <br />
173
199
  <br />
174
200
  </>
@@ -176,7 +202,8 @@ export const MapOptions = ({ attributes, setAttributes }) => {
176
202
  {__('Example', '%g_textdomain%')}:
177
203
  <br />
178
204
  <span className='es-word-break-all'>
179
- {['mapTilerRasterJson', 'vectorJson'].includes(type) && 'https://api.maptiler.com/maps/{styleName}/tiles.json?key={apiKey}'}
205
+ {['mapTilerRasterJson', 'vectorJson'].includes(type) &&
206
+ 'https://api.maptiler.com/maps/{styleName}/tiles.json?key={apiKey}'}
180
207
 
181
208
  {type === 'mapTilerVector' && 'https://api.maptiler.com/tiles/v3/{z}/{x}/{y}.pbf?key={apiKey}'}
182
209
 
@@ -188,9 +215,11 @@ export const MapOptions = ({ attributes, setAttributes }) => {
188
215
  </>
189
216
  )}
190
217
 
191
- {type === 'mapBoxRaster' && 'https://api.mapbox.com/v4/{tilesetId}/{z}/{x}/{y}[@2x].{imageFormat}?acess_token={apiKey}'}
218
+ {type === 'mapBoxRaster' &&
219
+ 'https://api.mapbox.com/v4/{tilesetId}/{z}/{x}/{y}[@2x].{imageFormat}?acess_token={apiKey}'}
192
220
 
193
- {type === 'mapTilerRasterXyz' && 'https://api.maptiler.com/maps/{styleName}/{z}/{x}/{y}.png?key={apiKey}'}
221
+ {type === 'mapTilerRasterXyz' &&
222
+ 'https://api.maptiler.com/maps/{styleName}/{z}/{x}/{y}.png?key={apiKey}'}
194
223
  </span>
195
224
  </>
196
225
  }
@@ -57,7 +57,9 @@ export const SiteFooterOptions = ({ attributes, setAttributes, randId, setRandId
57
57
  return (
58
58
  <RepeaterItem
59
59
  label={header?.length > 0 ? header : __('New section', '%g_textdomain%')}
60
- subtitle={items.length > 0 && sprintf(_n('%d link', '%d links', items.length, '%g_textdomain%'), items.length)}
60
+ subtitle={
61
+ items.length > 0 && sprintf(_n('%d link', '%d links', items.length, '%g_textdomain%'), items.length)
62
+ }
61
63
  >
62
64
  <Repeater
63
65
  icon={icons.link}
@@ -61,9 +61,11 @@ $logoAlt = get_post_meta($siteFooterLogoId, '_wp_attachment_image_alt', true) ??
61
61
  </div>
62
62
 
63
63
  <div class="<?php echo esc_attr(Helpers::getTwPart('bottomContainer', $manifest)); ?>">
64
- <span class="<?php echo esc_attr(Helpers::getTwPart('copyright', $manifest)); ?>">
65
- &copy; <?php echo esc_attr($siteFooterCopyright); ?>
66
- </span>
64
+ <?php if (!empty($siteFooterCopyright)) { ?>
65
+ <span class="<?php echo esc_attr(Helpers::getTwPart('copyright', $manifest)); ?>">
66
+ &copy; <?php echo esc_attr($siteFooterCopyright); ?>
67
+ </span>
68
+ <?php } ?>
67
69
 
68
70
  <?php
69
71
  echo Helpers::render('share', Helpers::props('share', $attributes));
@@ -25,81 +25,5 @@
25
25
  "type": "string",
26
26
  "default": "center center"
27
27
  }
28
- },
29
- "variables": {
30
- "videoAlign": {
31
- "top left": [
32
- {
33
- "variable": {
34
- "block-video-align-horizontal": "flex-start",
35
- "block-video-align-vertical": "flex-start"
36
- }
37
- }
38
- ],
39
- "top center": [
40
- {
41
- "variable": {
42
- "block-video-align-horizontal": "center",
43
- "block-video-align-vertical": "flex-start"
44
- }
45
- }
46
- ],
47
- "top right": [
48
- {
49
- "variable": {
50
- "block-video-align-horizontal": "flex-end",
51
- "block-video-align-vertical": "flex-start"
52
- }
53
- }
54
- ],
55
- "center left": [
56
- {
57
- "variable": {
58
- "block-video-align-horizontal": "flex-start",
59
- "block-video-align-vertical": "center"
60
- }
61
- }
62
- ],
63
- "center center": [
64
- {
65
- "variable": {
66
- "block-video-align-horizontal": "center",
67
- "block-video-align-vertical": "center"
68
- }
69
- }
70
- ],
71
- "center right": [
72
- {
73
- "variable": {
74
- "block-video-align-horizontal": "flex-end",
75
- "block-video-align-vertical": "center"
76
- }
77
- }
78
- ],
79
- "bottom left": [
80
- {
81
- "variable": {
82
- "block-video-align-horizontal": "flex-start",
83
- "block-video-align-vertical": "flex-end"
84
- }
85
- }
86
- ],
87
- "bottom center": [
88
- {
89
- "variable": {
90
- "block-video-align-horizontal": "center",
91
- "block-video-align-vertical": "flex-end"
92
- }
93
- }
94
- ],
95
- "bottom right": [
96
- {
97
- "variable": {
98
- "block-video-align-horizontal": "flex-end",
99
- "block-video-align-vertical": "flex-end"
100
- }
101
- }
102
- ]
103
- }
104
28
  }
105
29
  }