Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
fbe4c83
feat: size and spacing steps
Mar 7, 2025
a4bdd09
working range with steps
Mar 7, 2025
473d162
fix: remove extra assignment
Arukuen Mar 18, 2025
44fa10b
feat: add markmode in four range control
Arukuen Mar 18, 2025
868503d
feat: apply preset controls to fontSize, padding, margin, height
Arukuen Mar 18, 2025
d840726
feat: generate global css for presets
Arukuen Mar 18, 2025
6169719
feat: size and spacing steps
Mar 7, 2025
120bbe2
working range with steps
Mar 7, 2025
f40b72b
fix: remove extra assignment
Arukuen Mar 18, 2025
53ec598
feat: add markmode in four range control
Arukuen Mar 18, 2025
811e0b2
feat: apply preset controls to fontSize, padding, margin, height
Arukuen Mar 18, 2025
74eedd5
feat: generate global css for presets
Arukuen Mar 18, 2025
287f8c7
Merge branch 'feat/size-control-steps' of https://github.com/gambitph…
Arukuen Mar 18, 2025
9c36600
fix: apply generated css
Arukuen Mar 20, 2025
787a54a
fix: make fontSizes string to store CSS variables
Arukuen Mar 23, 2025
8254dd1
fix: add default to prioritization
Arukuen Mar 23, 2025
cf47f72
feat: support for custom presets
Arukuen Mar 25, 2025
526115e
feat: dynamically add styles in editor
Arukuen Mar 25, 2025
47cd13c
feat: dynamically add styles in editor with editor loader
Arukuen Mar 25, 2025
09cfc86
fix: get current marked value, go to markmode
Arukuen Mar 25, 2025
d85dffa
fix: css generation should consider custom, by each preset, not by pr…
Arukuen Mar 26, 2025
4d37e1a
fix: add additional functionalities to usePresetControls
Arukuen Mar 27, 2025
1a97892
fix: allow AdvancedRangeControl to set custom onReset
Arukuen Mar 27, 2025
8c52346
fix: do not add style for discarded presets
Arukuen Mar 27, 2025
6a26a97
fix: add comments, title in generated css
Arukuen Mar 30, 2025
754bfcb
fix: FourRangeControl markmode and initial value
Arukuen Mar 30, 2025
01d221a
feat: add row and column gap
Arukuen Mar 30, 2025
c957630
feat: add blockHeight and borderRadius
Arukuen Mar 31, 2025
6227528
feat: add blockHeight and borderRadius loader
Arukuen Mar 31, 2025
8b0e8cf
Merge branch 'feat/size-control-steps' into develop
Arukuen Mar 31, 2025
5d22e5f
fix: editorLoader merge
Arukuen Mar 31, 2025
962b841
feat: Use Global Typography sizes as preset
Arukuen Apr 2, 2025
d0b7cba
feat: add vertical/horizontal to mark mode for four range
Arukuen Apr 2, 2025
0d6e5fa
fix: removing of unit picker according to four range mode
Arukuen Apr 2, 2025
9047dca
fix: useTypographyAsPresets reactivity
Arukuen Apr 3, 2025
d4dc17f
Merge branch 'develop' into feat/size-control-steps
Arukuen Apr 4, 2025
cd1cbc1
feat: initial init
Arukuen Apr 4, 2025
045f6a0
fix: separate none and custom, fix issue with setting to none
Arukuen Apr 5, 2025
bbe3dca
fix: selecting font pair/type scale overwritting previous changes
Arukuen Apr 6, 2025
c817ada
chore: move other functions to utils
Arukuen Apr 6, 2025
477cfbe
fix: only get the new style for onChange, since changeStyle now handl…
Arukuen Apr 6, 2025
3f4f8ec
fix: set the value when changing from mark to custom
Arukuen Apr 6, 2025
0b33f3a
fix: typography min and max slider for rem
Arukuen Apr 6, 2025
558d0fe
fix: use only "var" in detecting CSS variable
Arukuen Apr 6, 2025
f74c488
fix: FourRangeControl synchronization of markmode; default markmode
Arukuen Apr 7, 2025
f86d210
feat: add none presets to padding and margin similar to native
Arukuen Apr 7, 2025
888ad9b
fix: use extractNumbersAndUnits that can process clamp, min, etc.
Arukuen Apr 7, 2025
ea5101e
fix: add rem support to allow custom mode to have values when switchi…
Arukuen Apr 7, 2025
ae3813a
feat: support mimic/clamping by using WP generated presets
Arukuen Apr 8, 2025
9a558c8
fix: global preset control title
Arukuen Apr 9, 2025
054216e
feat: apply body to html
Arukuen Apr 10, 2025
5ac5abc
Merge branch 'feat/size-control-steps' into feat/typography-typescale
Arukuen Apr 10, 2025
f912ffe
fix: add margin to apply html toggle
Arukuen Apr 10, 2025
1ec5add
fix: remove hasCSSVariableValue, always assume that marks has string …
Arukuen Apr 11, 2025
5ff4602
fix: get_option is never null
Arukuen Apr 11, 2025
c6d157a
fix: use wp_json_file_decode
Arukuen Apr 11, 2025
0746077
fix: remove JSON stringify since customPresets is just an array
Arukuen Apr 11, 2025
3c0c069
fix: separate loading of presets in another function
Arukuen Apr 11, 2025
2d1512f
fix: use wp_style_engine_get_stylesheet_from_css_rules to generate st…
Arukuen Apr 11, 2025
c979509
fix: translate only the words
Arukuen Apr 11, 2025
17ae06e
fix: move updating presets with typography to editor loader
Arukuen Apr 12, 2025
4098a50
fix: add typography deprecation for font size
Arukuen Apr 14, 2025
4a68153
fix: add block height deprecations
Arukuen Apr 14, 2025
4441660
fix: add row and column gaps deprecations
Arukuen Apr 14, 2025
38d75f0
fix: add row and column gaps deprecations
Arukuen Apr 15, 2025
4dc5987
Merge branch 'develop' into feat/size-control-steps
May 7, 2025
130d498
tweaked premium notice wording
May 7, 2025
46a7b29
fix: still match previous value even the custom values changes
Arukuen May 9, 2025
8efb71e
fix: implement presets in the design system; fix issues with reactivi…
Arukuen May 14, 2025
feb3274
fix: typography font size steps
Arukuen May 15, 2025
7352dd2
fix: sync mark mode
Arukuen May 15, 2025
b596683
fix: sync state when succeeding call to change styles
Arukuen May 15, 2025
02de0dc
fixed value preview
May 15, 2025
a2916e9
Merge branch 'develop' into feat/size-control-steps
May 15, 2025
43159bb
fix: error in getting css var name
Arukuen May 19, 2025
3b6e30e
feat: add use size preset by default option
Arukuen May 19, 2025
c928793
added more descriptive text
May 24, 2025
163bb2f
Merge branch 'develop' into feat/size-control-steps
May 24, 2025
1291164
temporarily skip since the test breaks now
May 24, 2025
9e2ee7d
fix: two-way value conversion between preset and custom mode
Arukuen May 25, 2025
189a73e
Merge branch 'feat/size-control-steps' of https://github.com/gambitph…
Arukuen May 25, 2025
523668a
version bump to 3.16.0 for the default option to kick in
May 25, 2025
c8977ba
Merge branch 'feat/size-control-steps' of https://github.com/gambitph…
May 25, 2025
85c3c9d
version bump to 3.16.0 for the default option to kick in
May 25, 2025
71766f6
prevent errors if upgrading and value is a number
May 25, 2025
d45d9cd
optimized to prevent repetitive calls
May 25, 2025
d8a2699
fix: update markmode when changing device type
Arukuen May 25, 2025
7e588d2
fix: move use size presets by default to editor settings
Arukuen May 25, 2025
1384c6e
fix: saving of new typography
Arukuen May 25, 2025
30cc1d3
fix: only cofirm when font family is changed
Arukuen May 25, 2025
277341f
fix: clean style object for comparison
Arukuen May 25, 2025
96190c7
update test for global typography
kaeizen May 26, 2025
961c7d2
fix: remove unused hasCSSVariableValue
Arukuen May 26, 2025
1e35989
Merge branch 'feat/size-control-steps' of https://github.com/gambitph…
Arukuen May 26, 2025
0b671a4
fix: add inner column spacing presets
Arukuen May 26, 2025
abe4a87
fix: add inner column > inner column spacing presets
Arukuen May 26, 2025
1cb15b0
fix: also clean typography style for consistency
Arukuen May 26, 2025
34ef9b9
fix: consider unit conversion during two-way value conversion between…
Arukuen May 26, 2025
825b58f
fix: consider unit conversion during two-way value conversion between…
Arukuen May 26, 2025
9bd6a27
fix: remove placeholder for custom css in number input
Arukuen May 26, 2025
fac5fb6
fix: add fallback tooltip for theme.json data with no name like blocksy
Arukuen May 26, 2025
e853ebd
fix: bug fixes
Arukuen May 27, 2025
3a660e2
fix: bug fix
Arukuen May 27, 2025
218c7b6
fix: four range reactivity
Arukuen May 27, 2025
6ed023b
fix: do not actually change value when switching mode
Arukuen May 28, 2025
c158a40
fix: add presets to contentHeight and innerBlockRowGap
Arukuen May 29, 2025
decb130
fix: add deprecation code to affected blocks, including removing V4
Arukuen May 29, 2025
2159832
fix: bump attribute added version to 3.16.0 and migration version to …
Arukuen May 29, 2025
f3d9cca
Added translation
bfintal May 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions e2e/tests/global-settings.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,26 +85,26 @@ test.describe( 'Global Settings', () => {
await page.getByLabel( 'Stackable Settings' ).click()
await page.getByRole( 'button', { name: 'Global Typography' } ).click()

// Set Global Typography Styles of Heading 2 to have a font-size of 32
// Set Global Typography Styles of Heading 2 to have a text-transform uppercase
await page.locator( '.ugb-global-settings-typography-control' ).nth( 1 ).locator( '.components-base-control__field > .ugb-button-icon-control__wrapper > .components-button' ).click()
await page.locator( '.stk-popover .components-base-control:nth-of-type(2)', { hasText: /Size/ } ).getByRole( 'textbox' ).fill( '32' )
await page.locator( '.stk-popover .components-base-control:nth-of-type(4)', { hasText: /Transform/ } ).getByRole( 'listbox' ).selectOption( 'uppercase' )
await page.locator( '.ugb-global-settings-typography-control' ).nth( 1 ).locator( '.components-base-control__field > .ugb-button-icon-control__wrapper > .components-button' ).click()

// Verify if the Heading 2 in Global Typography Styles has correct font size
await expect( page.getByRole( 'heading', { name: 'Heading 2' } ) ).toHaveCSS( 'font-size', '32px' )
// Verify if the Heading 2 in Global Typography Styles has correct text-transform
await expect( page.getByRole( 'heading', { name: 'Heading 2' } ) ).toHaveCSS( 'text-transform', 'uppercase' )

// Open Block Settings
await page.getByLabel( 'Settings', { exact: true } ).click()

// Check if the added Stackable Heading Block has a font-size of 32
// Check if the added Stackable Heading Block has a text-transform uppercase
editor.insertBlock( {
name: 'stackable/heading',
attributes: {
text: 'test',
},
} )

await expect( editor.canvas.locator( '[data-type="stackable/heading"] > .stk-block-heading > h2[role="textbox"]' ) ).toHaveCSS( 'font-size', '32px' )
await expect( editor.canvas.locator( '[data-type="stackable/heading"] > .stk-block-heading > h2[role="textbox"]' ) ).toHaveCSS( 'text-transform', 'uppercase' )

// Reset Global Typography Styles
await page.getByLabel( 'Stackable Settings' ).click()
Expand Down
5 changes: 3 additions & 2 deletions plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Author: Gambit Technologies, Inc
* Author URI: http://gambit.ph
* Text Domain: stackable-ultimate-gutenberg-blocks
* Version: 3.15.3
* Version: 3.16.0
*
* @package Stackable
*/
Expand All @@ -24,7 +24,7 @@

defined( 'STACKABLE_SHOW_PRO_NOTICES' ) || define( 'STACKABLE_SHOW_PRO_NOTICES', true );
defined( 'STACKABLE_BUILD' ) || define( 'STACKABLE_BUILD', 'free' );
defined( 'STACKABLE_VERSION' ) || define( 'STACKABLE_VERSION', '3.15.3' );
defined( 'STACKABLE_VERSION' ) || define( 'STACKABLE_VERSION', '3.16.0' );
defined( 'STACKABLE_FILE' ) || define( 'STACKABLE_FILE', __FILE__ );
defined( 'STACKABLE_I18N' ) || define( 'STACKABLE_I18N', 'stackable-ultimate-gutenberg-blocks' ); // Plugin slug.
defined( 'STACKABLE_DESIGN_LIBRARY_URL' ) || define( 'STACKABLE_DESIGN_LIBRARY_URL', 'https://storage.googleapis.com/stackable-plugin-assets' ); // Design Library CDN URL
Expand Down Expand Up @@ -235,6 +235,7 @@ function is_frontend() {
require_once( plugin_dir_path( __FILE__ ) . 'src/plugins/global-settings/spacing-and-borders/index.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/plugins/global-settings/buttons-and-icons/index.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/plugins/global-settings/color-schemes/index.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/plugins/global-settings/preset-controls/index.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/custom-block-styles.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/css-optimize.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/compatibility/index.php' );
Expand Down
23 changes: 20 additions & 3 deletions src/block-components/alignment/attributes.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
export const addAttributes = attrObject => {
import { deprecatedAddAttributes } from './deprecated/index'

export const addAttributes = ( attrObject, attrNameTemplate = '%s' ) => {
deprecatedAddAttributes( attrObject, attrNameTemplate )

// Assume that the block uses the BlockDiv Block Component and has a
// uniqueId attribute
attrObject.add( {
Expand Down Expand Up @@ -53,13 +57,26 @@ export const addAttributes = attrObject => {
type: 'number',
default: '',
},
},
versionAdded: '3.0.0',
versionDeprecated: '',
} )

attrObject.add( {
attributes: {
innerBlockRowGap: {
stkResponsive: true,
type: 'number',
type: 'string',
default: '',
},
containerHeight: {
stkResponsive: true,
type: 'string',
default: '',
},
},
versionAdded: '3.0.0',
attrNameTemplate,
versionAdded: '3.16.0',
versionDeprecated: '',
} )
}
44 changes: 44 additions & 0 deletions src/block-components/alignment/deprecated/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { getAttrNameFunction } from '~stackable/util'

export const deprecatedAddAttributes = ( attrObject, attrNameTemplate = '%s' ) => {
attrObject.add( {
attributes: {
innerBlockRowGap: {
stkResponsive: true,
type: 'number',
default: '',
},
},
attrNameTemplate,
versionAdded: '3.0.0',
versionDeprecated: '3.16.0',
} )
}

export const deprecateInnerBlockRowGapAndContainerHeight = {
isEligible: attrNameTemplate => attributes => {
const getAttrName = getAttrNameFunction( attrNameTemplate )
const getAttribute = _attrName => attributes[ getAttrName( _attrName ) ]

const containerHeight = getAttribute( 'containerHeight' )
const innerBlockRowGap = getAttribute( 'innerBlockRowGap' )

return typeof containerHeight === 'number' || typeof innerBlockRowGap === 'number'
},
migrate: attrNameTemplate => attributes => {
const getAttrName = getAttrNameFunction( attrNameTemplate )
const getAttribute = _attrName => attributes[ getAttrName( _attrName ) ]

const containerHeight = getAttribute( 'containerHeight' )
const innerBlockRowGap = getAttribute( 'innerBlockRowGap' )

const newAttributes = {
...attributes,
[ getAttrName( 'containerHeight' ) ]: String( containerHeight ),
[ getAttrName( 'innerBlockRowGap' ) ]: String( innerBlockRowGap ),
}

return newAttributes
},
}

6 changes: 6 additions & 0 deletions src/block-components/alignment/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
useBlockAttributesContext,
useBlockSetAttributesContext,
useDeviceType,
usePresetControls,
} from '~stackable/hooks'

/**
Expand Down Expand Up @@ -86,6 +87,9 @@ export const Edit = memo( props => {
enableContentAlign = true,
} = props

const blockHeightMarks = usePresetControls( 'blockHeights' )?.getPresetMarks() || null
const spacingSizeMarks = usePresetControls( 'spacingSizes' )?.getPresetMarks() || null

const containerSize = props.hasContainerSize && <>
<ControlSeparator />
{ props.hasContainerHeight &&
Expand All @@ -100,6 +104,7 @@ export const Edit = memo( props => {
allowReset={ true }
placeholder="0"
visualGuide={ { selector: '.stk-%s-container', highlight: 'outline' } }
marks={ blockHeightMarks }
/>
}
<AdvancedRangeControl
Expand Down Expand Up @@ -331,6 +336,7 @@ export const Edit = memo( props => {
highlight: 'row-gap',
value: innerBlockRowGap,
} }
marks={ spacingSizeMarks }
/>
}
{ ( innerBlockOrientation && innerBlockWrap === 'wrap' ) &&
Expand Down
2 changes: 2 additions & 0 deletions src/block-components/alignment/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { addStyles } from './style'

export * from './use-alignment'

export { deprecateInnerBlockRowGapAndContainerHeight } from './deprecated/index'

export const Alignment = () => {
return null
}
Expand Down
32 changes: 28 additions & 4 deletions src/block-components/alignment/style.js
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,14 @@ export const addStyles = ( blockStyleGenerator, props = {} ) => {
styleRule: 'columnGap',
attrName: 'innerBlockColumnGap',
key: 'innerBlockColumnGapEdit',
format: `%spx`,
responsive: 'all',
valueCallback: value => {
// Substitute with using format to work with preset controls
if ( typeof value === 'string' && value.startsWith( 'var' ) ) {
return value
}
return value + 'px'
},
enabledCallback: getAttribute => getAttribute( 'innerBlockOrientation' ) === 'horizontal',
dependencies: [
'innerBlockOrientation',
Expand All @@ -225,8 +231,14 @@ export const addStyles = ( blockStyleGenerator, props = {} ) => {
styleRule: 'columnGap',
attrName: 'innerBlockColumnGap',
key: 'innerBlockColumnGapSave',
format: `%spx`,
responsive: 'all',
valueCallback: value => {
// Substitute with using format to work with preset controls
if ( typeof value === 'string' && value.startsWith( 'var' ) ) {
return value
}
return value + 'px'
},
enabledCallback: getAttribute => getAttribute( 'innerBlockOrientation' ) === 'horizontal',
dependencies: [
'innerBlockOrientation',
Expand All @@ -241,12 +253,18 @@ export const addStyles = ( blockStyleGenerator, props = {} ) => {
styleRule: 'rowGap',
attrName: 'innerBlockRowGap',
key: 'innerBlockRowGapEdit',
format: `%spx`,
responsive: 'all',
enabledCallback: getAttribute => {
return getAttribute( 'innerBlockOrientation' ) !== 'horizontal' ||
( getAttribute( 'innerBlockOrientation' ) === 'horizontal' && getAttribute( 'innerBlockWrap' ) === 'wrap' )
},
valueCallback: value => {
// Substitute with using format to work with preset controls
if ( typeof value === 'string' && value.startsWith( 'var' ) ) {
return value
}
return value + 'px'
},
dependencies: [
'innerBlockOrientation',
'innerBlockWrap',
Expand All @@ -259,8 +277,14 @@ export const addStyles = ( blockStyleGenerator, props = {} ) => {
styleRule: 'rowGap',
attrName: 'innerBlockRowGap',
key: 'innerBlockRowGapSave',
format: `%spx`,
responsive: 'all',
valueCallback: value => {
// Substitute with using format to work with preset controls
if ( typeof value === 'string' && value.startsWith( 'var' ) ) {
return value
}
return value + 'px'
},
enabledCallback: getAttribute => {
return getAttribute( 'innerBlockOrientation' ) !== 'horizontal' ||
( getAttribute( 'innerBlockOrientation' ) === 'horizontal' && getAttribute( 'innerBlockWrap' ) === 'wrap' )
Expand Down
13 changes: 12 additions & 1 deletion src/block-components/block-div/deprecated.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { deprecationBackgrounColorOpacity, deprecateShadowColor } from '../helpers'
import {
deprecationBackgrounColorOpacity, deprecateShadowColor, deprecateSizeControlHeight,
} from '../helpers'

import { addFilter } from '@wordpress/hooks'
import { semverCompare } from '~stackable/util'
Expand Down Expand Up @@ -38,3 +40,12 @@ export const deprecateBlockShadowColor = {
return deprecateShadowColor.migrate( 'block%s' )( attributes )
},
}

export const deprecateBlockHeight = {
isEligible: attributes => {
return deprecateSizeControlHeight.isEligible( 'block%s' )( attributes )
},
migrate: attributes => {
return deprecateSizeControlHeight.migrate( 'block%s' )( attributes )
},
}
4 changes: 3 additions & 1 deletion src/block-components/block-div/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ import { CustomAttributes } from '../custom-attributes'
import { version as VERSION } from 'stackable'

export { useUniqueId }
export { deprecateBlockBackgroundColorOpacity, deprecateBlockShadowColor } from './deprecated'
export {
deprecateBlockBackgroundColorOpacity, deprecateBlockShadowColor, deprecateBlockHeight,
} from './deprecated'

export const BlockDiv = memo( props => {
const {
Expand Down
8 changes: 7 additions & 1 deletion src/block-components/button/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ import {
AdvancedSelectControl,
} from '~stackable/components'
import { i18n } from 'stackable'
import { useBlockAttributesContext, useBlockLayoutDefaults } from '~stackable/hooks'
import {
useBlockAttributesContext, useBlockLayoutDefaults, usePresetControls,
} from '~stackable/hooks'

/**
* WordPress dependencies
Expand Down Expand Up @@ -185,6 +187,9 @@ const SizeControls = props => {
const { getPlaceholder } = useBlockLayoutDefaults()

const buttonPaddingPlaceholder = getPlaceholder( paddingPlaceholderName, { single: false } )

const presetMarks = usePresetControls( 'spacingSizes' )?.getPresetMarks() || null

return ( <>
{ props.hasFullWidth && (
<AdvancedToggleControl
Expand Down Expand Up @@ -228,6 +233,7 @@ const SizeControls = props => {
title: __( 'Button padding', i18n ),
description: __( 'Adjusts the space between the button text and button borders', i18n ),
} }
marks={ presetMarks }
/>
</> )
}
Expand Down
36 changes: 24 additions & 12 deletions src/block-components/columns/attributes.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
export const addAttributes = attrObject => {
import { deprecatedAddAttributes } from './deprecated/index'

export const addAttributes = ( attrObject, attrNameTemplate = '%s' ) => {
deprecatedAddAttributes( attrObject, attrNameTemplate )

attrObject.add( {
attributes: {
columnSpacing: {
stkResponsive: true,
stkUnits: 'px',
type: 'number',
default: '',
columnWrapDesktop: { // Only applies to desktops
type: 'boolean',
default: false,
},
},
versionAdded: '3.0.0',
versionDeprecated: '',
} )

attrObject.add( {
attributes: {
columnGap: {
stkResponsive: true,
type: 'number',
type: 'string',
default: '',
},
rowGap: {
stkResponsive: true,
type: 'number',
type: 'string',
default: '',
},
columnWrapDesktop: { // Only applies to desktops
type: 'boolean',
default: false,
columnSpacing: {
stkResponsive: true,
stkUnits: 'px',
type: 'string',
default: '',
},
},
versionAdded: '3.0.0',
attrNameTemplate,
versionAdded: '3.16.0',
versionDeprecated: '',
} )
}
Loading
Loading