diff --git a/docs/reference-guides/theme-json-reference/theme-json-living.md b/docs/reference-guides/theme-json-reference/theme-json-living.md
index 98e574913853e0..d9b17ada049829 100644
--- a/docs/reference-guides/theme-json-reference/theme-json-living.md
+++ b/docs/reference-guides/theme-json-reference/theme-json-living.md
@@ -188,6 +188,7 @@ Settings related to typography.
| textColumns | boolean | false | |
| textDecoration | boolean | true | |
| writingMode | boolean | false | |
+| textOrientation | boolean | false | |
| textTransform | boolean | true | |
| dropCap | boolean | true | |
| fontSizes | array | | fluid, name, size, slug |
diff --git a/lib/block-supports/typography.php b/lib/block-supports/typography.php
index 8fceda4d5daba0..8f30817ce3598a 100644
--- a/lib/block-supports/typography.php
+++ b/lib/block-supports/typography.php
@@ -89,16 +89,17 @@ function gutenberg_apply_typography_support( $block_type, $block_attributes ) {
return array();
}
- $has_font_family_support = $typography_supports['__experimentalFontFamily'] ?? false;
- $has_font_size_support = $typography_supports['fontSize'] ?? false;
- $has_font_style_support = $typography_supports['__experimentalFontStyle'] ?? false;
- $has_font_weight_support = $typography_supports['__experimentalFontWeight'] ?? false;
- $has_letter_spacing_support = $typography_supports['__experimentalLetterSpacing'] ?? false;
- $has_line_height_support = $typography_supports['lineHeight'] ?? false;
- $has_text_columns_support = $typography_supports['textColumns'] ?? false;
- $has_text_decoration_support = $typography_supports['__experimentalTextDecoration'] ?? false;
- $has_text_transform_support = $typography_supports['__experimentalTextTransform'] ?? false;
- $has_writing_mode_support = $typography_supports['__experimentalWritingMode'] ?? false;
+ $has_font_family_support = $typography_supports['__experimentalFontFamily'] ?? false;
+ $has_font_size_support = $typography_supports['fontSize'] ?? false;
+ $has_font_style_support = $typography_supports['__experimentalFontStyle'] ?? false;
+ $has_font_weight_support = $typography_supports['__experimentalFontWeight'] ?? false;
+ $has_letter_spacing_support = $typography_supports['__experimentalLetterSpacing'] ?? false;
+ $has_line_height_support = $typography_supports['lineHeight'] ?? false;
+ $has_text_columns_support = $typography_supports['textColumns'] ?? false;
+ $has_text_decoration_support = $typography_supports['__experimentalTextDecoration'] ?? false;
+ $has_text_transform_support = $typography_supports['__experimentalTextTransform'] ?? false;
+ $has_writing_mode_support = $typography_supports['__experimentalWritingMode'] ?? false;
+ $has_text_orientation_support = $typography_supports['__experimentalTextOrientation'] ?? false;
// Whether to skip individual block support features.
$should_skip_font_size = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontSize' );
@@ -111,6 +112,7 @@ function gutenberg_apply_typography_support( $block_type, $block_attributes ) {
$should_skip_text_transform = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textTransform' );
$should_skip_letter_spacing = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'letterSpacing' );
$should_skip_writing_mode = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'writingMode' );
+ $should_skip_text_orentation = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textOrientation' );
$typography_block_styles = array();
if ( $has_font_size_support && ! $should_skip_font_size ) {
@@ -164,6 +166,10 @@ function gutenberg_apply_typography_support( $block_type, $block_attributes ) {
if ( $has_writing_mode_support && ! $should_skip_writing_mode && isset( $block_attributes['style']['typography']['writingMode'] ) ) {
$typography_block_styles['writingMode'] = $block_attributes['style']['typography']['writingMode'] ?? null;
+ // Text orientation requires writing mode to be set.
+ if ( $has_text_orientation_support && ! $should_skip_text_orentation && isset( $block_attributes['style']['typography']['textOrientation'] ) ) {
+ $typography_block_styles['textOrientation'] = _wp_array_get( $block_attributes, array( 'style', 'typography', 'textOrientation' ), null );
+ }
}
$attributes = array();
diff --git a/lib/class-wp-theme-json-gutenberg.php b/lib/class-wp-theme-json-gutenberg.php
index bff9f4f0847772..d4fedd368f04e1 100644
--- a/lib/class-wp-theme-json-gutenberg.php
+++ b/lib/class-wp-theme-json-gutenberg.php
@@ -346,9 +346,11 @@ class WP_Theme_JSON_Gutenberg {
* @since 6.1.0 Added `layout.definitions` and `useRootPaddingAwareAlignments`.
* @since 6.2.0 Added `dimensions.minHeight`, 'shadow.presets', 'shadow.defaultPresets',
* `position.fixed` and `position.sticky`.
- * @since 6.3.0 Removed `layout.definitions`. Added `typography.writingMode`.
+ * @since 6.3.0 Removed `layout.definitions`.
* @since 6.4.0 Added `layout.allowEditing`.
- * @since 6.4.0 Added `lightbox`.
+ * Added `lightbox`.
+ * Added `typography.writingMode`.
+ * @since 6.6.0 Added `typography.textOrientation`.
* @var array
*/
const VALID_SETTINGS = array(
@@ -414,19 +416,20 @@ class WP_Theme_JSON_Gutenberg {
'defaultPresets' => null,
),
'typography' => array(
- 'fluid' => null,
- 'customFontSize' => null,
- 'dropCap' => null,
- 'fontFamilies' => null,
- 'fontSizes' => null,
- 'fontStyle' => null,
- 'fontWeight' => null,
- 'letterSpacing' => null,
- 'lineHeight' => null,
- 'textColumns' => null,
- 'textDecoration' => null,
- 'textTransform' => null,
- 'writingMode' => null,
+ 'fluid' => null,
+ 'customFontSize' => null,
+ 'dropCap' => null,
+ 'fontFamilies' => null,
+ 'fontSizes' => null,
+ 'fontStyle' => null,
+ 'fontWeight' => null,
+ 'letterSpacing' => null,
+ 'lineHeight' => null,
+ 'textColumns' => null,
+ 'textDecoration' => null,
+ 'textTransform' => null,
+ 'writingMode' => null,
+ 'textOrientation' => null,
),
);
@@ -466,7 +469,9 @@ class WP_Theme_JSON_Gutenberg {
* added new property `shadow`,
* updated `blockGap` to be allowed at any level.
* @since 6.2.0 Added `outline`, and `minHeight` properties.
+ * @since 6.4.0 Added `writingMode` to `typography`.
* @since 6.6.0 Added `background` sub properties to top-level only.
+ * added `textOrientation` to `typography`.
*
* @var array
*/
@@ -512,16 +517,17 @@ class WP_Theme_JSON_Gutenberg {
'blockGap' => null,
),
'typography' => array(
- 'fontFamily' => null,
- 'fontSize' => null,
- 'fontStyle' => null,
- 'fontWeight' => null,
- 'letterSpacing' => null,
- 'lineHeight' => null,
- 'textColumns' => null,
- 'textDecoration' => null,
- 'textTransform' => null,
- 'writingMode' => null,
+ 'fontFamily' => null,
+ 'fontSize' => null,
+ 'fontStyle' => null,
+ 'fontWeight' => null,
+ 'letterSpacing' => null,
+ 'lineHeight' => null,
+ 'textColumns' => null,
+ 'textDecoration' => null,
+ 'textTransform' => null,
+ 'writingMode' => null,
+ 'textOrientation' => null,
),
'css' => null,
);
diff --git a/lib/compat/wordpress-6.6/kses.php b/lib/compat/wordpress-6.6/kses.php
new file mode 100644
index 00000000000000..0baa6dfd924542
--- /dev/null
+++ b/lib/compat/wordpress-6.6/kses.php
@@ -0,0 +1,18 @@
+ {
@@ -292,6 +293,7 @@ export function useSettingsForBlockElement(
'textTransform',
'textDecoration',
'writingMode',
+ 'textOrientation',
].forEach( ( key ) => {
if ( ! supportedStyles.includes( key ) ) {
updatedSettings.typography = {
diff --git a/packages/block-editor/src/components/global-styles/typography-panel.js b/packages/block-editor/src/components/global-styles/typography-panel.js
index 7fab783c4d0e7b..c0c9872cb25de0 100644
--- a/packages/block-editor/src/components/global-styles/typography-panel.js
+++ b/packages/block-editor/src/components/global-styles/typography-panel.js
@@ -7,7 +7,7 @@ import {
__experimentalToolsPanel as ToolsPanel,
__experimentalToolsPanelItem as ToolsPanelItem,
} from '@wordpress/components';
-import { __ } from '@wordpress/i18n';
+import { __, isRTL } from '@wordpress/i18n';
import { useCallback } from '@wordpress/element';
/**
@@ -315,20 +315,75 @@ export default function TypographyPanel( {
const hasTextDecoration = () => !! value?.typography?.textDecoration;
const resetTextDecoration = () => setTextDecoration( undefined );
- // Text Orientation
+ // Writing Mode
const hasWritingModeControl = useHasWritingModeControl( settings );
const writingMode = decodeValue( inheritedValue?.typography?.writingMode );
- const setWritingMode = ( newValue ) => {
- onChange(
- setImmutably(
- value,
- [ 'typography', 'writingMode' ],
- newValue || undefined
- )
- );
- };
const hasWritingMode = () => !! value?.typography?.writingMode;
- const resetWritingMode = () => setWritingMode( undefined );
+ const resetWritingMode = () =>
+ setWritingModeAndTextOrientation( undefined );
+
+ // Text Orientation
+ const textOrientation = decodeValue(
+ inheritedValue?.typography?.textOrientation
+ );
+
+ // Returns the new text orientation and writing mode based on the value from the control.
+ const getTextOrientationAndWritingMode = ( valueFromControl ) => {
+ switch ( valueFromControl ) {
+ case 'top-to-bottom':
+ return {
+ newTextOrientation: 'mixed',
+ newWritingMode: isRTL() ? 'vertical-lr' : 'vertical-rl',
+ };
+
+ case 'upright':
+ return {
+ newTextOrientation: 'upright',
+ newWritingMode: isRTL() ? 'vertical-rl' : 'vertical-lr',
+ };
+
+ case 'horizontal':
+ return {
+ newTextOrientation: undefined,
+ newWritingMode: 'horizontal-tb',
+ };
+
+ default:
+ return {
+ newTextOrientation: undefined,
+ newWritingMode: undefined,
+ };
+ }
+ };
+
+ function getValuefromWritingModeAndTextOrientation() {
+ if ( writingMode === 'horizontal-tb' ) {
+ return 'horizontal';
+ }
+ if ( writingMode === 'vertical-lr' || writingMode === 'vertical-rl' ) {
+ if ( textOrientation === 'upright' ) {
+ return 'upright';
+ }
+ return 'top-to-bottom';
+ }
+ }
+
+ const setWritingModeAndTextOrientation = useCallback(
+ ( newValue ) => {
+ const { newTextOrientation, newWritingMode } =
+ getTextOrientationAndWritingMode( newValue );
+
+ return onChange( {
+ ...value,
+ typography: {
+ ...value?.typography,
+ textOrientation: newTextOrientation,
+ writingMode: newWritingMode,
+ },
+ } );
+ },
+ [ onChange, value ]
+ );
const resetAllFilter = useCallback( ( previousValue ) => {
return {
@@ -475,23 +530,6 @@ export default function TypographyPanel( {
/>
) }
- { hasWritingModeControl && (
-
-
-
- ) }
{ hasTextTransformControl && (
) }
+ { hasWritingModeControl && (
+
+
+
+ ) }
);
}
diff --git a/packages/block-editor/src/components/writing-mode-control/index.js b/packages/block-editor/src/components/writing-mode-control/index.js
index 2adf8be14ad395..9ab58349768687 100644
--- a/packages/block-editor/src/components/writing-mode-control/index.js
+++ b/packages/block-editor/src/components/writing-mode-control/index.js
@@ -8,18 +8,29 @@ import classnames from 'classnames';
*/
import { BaseControl, Button } from '@wordpress/components';
import { __, isRTL } from '@wordpress/i18n';
-import { textHorizontal, textVertical } from '@wordpress/icons';
+import {
+ textHorizontal,
+ textHorizontalRTL,
+ textUpright,
+ textVertical,
+ textVerticalRTL,
+} from '@wordpress/icons';
const WRITING_MODES = [
{
name: __( 'Horizontal' ),
- value: 'horizontal-tb',
- icon: textHorizontal,
+ value: 'horizontal',
+ icon: isRTL() ? textHorizontalRTL : textHorizontal,
},
{
- name: __( 'Vertical' ),
- value: isRTL() ? 'vertical-lr' : 'vertical-rl',
- icon: textVertical,
+ name: __( 'Top to bottom' ),
+ value: 'top-to-bottom',
+ icon: isRTL() ? textVerticalRTL : textVertical,
+ },
+ {
+ name: __( 'Upright' ),
+ value: 'upright',
+ icon: textUpright,
},
];
diff --git a/packages/block-editor/src/hooks/supports.js b/packages/block-editor/src/hooks/supports.js
index 4e116494029bf1..43f4d1e6562045 100644
--- a/packages/block-editor/src/hooks/supports.js
+++ b/packages/block-editor/src/hooks/supports.js
@@ -35,6 +35,11 @@ const TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';
* e.g. settings found in `block.json`.
*/
const WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';
+/**
+ * Key within block settings' supports array indicating support for text orientation
+ * e.g. settings found in `block.json`.
+ */
+const TEXT_ORIENTATION_SUPPORT_KEY = 'typography.__experimentalTextOrientation';
/**
* Key within block settings' supports array indicating support for text
* transforms e.g. settings found in `block.json`.
@@ -57,6 +62,7 @@ const TYPOGRAPHY_SUPPORT_KEYS = [
TEXT_DECORATION_SUPPORT_KEY,
TEXT_TRANSFORM_SUPPORT_KEY,
WRITING_MODE_SUPPORT_KEY,
+ TEXT_ORIENTATION_SUPPORT_KEY,
LETTER_SPACING_SUPPORT_KEY,
];
const EFFECTS_SUPPORT_KEYS = [ 'shadow' ];
diff --git a/packages/block-editor/src/hooks/utils.js b/packages/block-editor/src/hooks/utils.js
index fbe84514c3e53c..c5d1545ad365cf 100644
--- a/packages/block-editor/src/hooks/utils.js
+++ b/packages/block-editor/src/hooks/utils.js
@@ -189,6 +189,7 @@ export function useBlockSettings( name, parentLayout ) {
textColumns,
textDecoration,
writingMode,
+ textOrientation,
textTransform,
letterSpacing,
padding,
@@ -240,6 +241,7 @@ export function useBlockSettings( name, parentLayout ) {
'typography.textColumns',
'typography.textDecoration',
'typography.writingMode',
+ 'typography.textOrientation',
'typography.textTransform',
'typography.letterSpacing',
'spacing.padding',
@@ -331,6 +333,7 @@ export function useBlockSettings( name, parentLayout ) {
textTransform,
letterSpacing,
writingMode,
+ textOrientation,
},
spacing: {
spacingSizes: {
@@ -373,6 +376,7 @@ export function useBlockSettings( name, parentLayout ) {
textTransform,
letterSpacing,
writingMode,
+ textOrientation,
padding,
margin,
blockGap,
diff --git a/packages/block-editor/src/style.scss b/packages/block-editor/src/style.scss
index 015cffde42a239..6b23192a76cadb 100644
--- a/packages/block-editor/src/style.scss
+++ b/packages/block-editor/src/style.scss
@@ -44,6 +44,7 @@
@import "./components/skip-to-selected-block/style.scss";
@import "./components/text-decoration-control/style.scss";
@import "./components/text-transform-control/style.scss";
+@import "./components/writing-mode-control/style.scss";
@import "./components/tool-selector/style.scss";
@import "./components/url-input/style.scss";
@import "./components/url-popover/style.scss";
diff --git a/packages/block-library/src/paragraph/block.json b/packages/block-library/src/paragraph/block.json
index 7cfe785921b666..1093f3bcadcb1f 100644
--- a/packages/block-library/src/paragraph/block.json
+++ b/packages/block-library/src/paragraph/block.json
@@ -59,6 +59,7 @@
"__experimentalLetterSpacing": true,
"__experimentalTextTransform": true,
"__experimentalWritingMode": true,
+ "__experimentalTextOrientation": true,
"__experimentalDefaultControls": {
"fontSize": true
}
diff --git a/packages/block-library/src/post-navigation-link/block.json b/packages/block-library/src/post-navigation-link/block.json
index ce733759846fee..8a9ec3e4ef0246 100644
--- a/packages/block-library/src/post-navigation-link/block.json
+++ b/packages/block-library/src/post-navigation-link/block.json
@@ -51,6 +51,7 @@
"__experimentalTextDecoration": true,
"__experimentalLetterSpacing": true,
"__experimentalWritingMode": true,
+ "__experimentalTextOrientation": true,
"__experimentalDefaultControls": {
"fontSize": true
}
diff --git a/packages/blocks/src/api/constants.js b/packages/blocks/src/api/constants.js
index 62933d69d764f4..1c77f637e5ff9a 100644
--- a/packages/blocks/src/api/constants.js
+++ b/packages/blocks/src/api/constants.js
@@ -248,6 +248,11 @@ export const __EXPERIMENTAL_STYLE_PROPERTY = {
support: [ 'typography', '__experimentalWritingMode' ],
useEngine: true,
},
+ textOrientation: {
+ value: [ 'typography', 'textOrientation' ],
+ support: [ 'typography', '__experimentalTextOrientation' ],
+ useEngine: true,
+ },
'--wp--style--root--padding': {
value: [ 'spacing', 'padding' ],
support: [ 'spacing', 'padding' ],
diff --git a/packages/icons/src/index.js b/packages/icons/src/index.js
index 788fc0152ba1de..b9f79bcdbcb1f3 100644
--- a/packages/icons/src/index.js
+++ b/packages/icons/src/index.js
@@ -263,7 +263,10 @@ export { default as sidesTop } from './library/sides-top';
export { default as sidesVertical } from './library/sides-vertical';
export { default as textColor } from './library/text-color';
export { default as textHorizontal } from './library/text-horizontal';
+export { default as textHorizontalRTL } from './library/text-horizontal-rtl';
+export { default as textUpright } from './library/text-upright';
export { default as textVertical } from './library/text-vertical';
+export { default as textVerticalRTL } from './library/text-vertical-rtl';
export { default as tablet } from './library/tablet';
export { default as title } from './library/title';
export { default as tip } from './library/tip';
diff --git a/packages/icons/src/library/text-horizontal-rtl.js b/packages/icons/src/library/text-horizontal-rtl.js
new file mode 100644
index 00000000000000..241e8245a22fef
--- /dev/null
+++ b/packages/icons/src/library/text-horizontal-rtl.js
@@ -0,0 +1,12 @@
+/**
+ * WordPress dependencies
+ */
+import { SVG, Path } from '@wordpress/primitives';
+
+const textHorizontalRTL = (
+
+);
+
+export default textHorizontalRTL;
diff --git a/packages/icons/src/library/text-upright.js b/packages/icons/src/library/text-upright.js
new file mode 100644
index 00000000000000..2f3498c8b1c53a
--- /dev/null
+++ b/packages/icons/src/library/text-upright.js
@@ -0,0 +1,16 @@
+/**
+ * WordPress dependencies
+ */
+import { SVG, Path } from '@wordpress/primitives';
+
+const textUpright = (
+
+);
+
+export default textUpright;
diff --git a/packages/icons/src/library/text-vertical-rtl.js b/packages/icons/src/library/text-vertical-rtl.js
new file mode 100644
index 00000000000000..9418118f637d6e
--- /dev/null
+++ b/packages/icons/src/library/text-vertical-rtl.js
@@ -0,0 +1,12 @@
+/**
+ * WordPress dependencies
+ */
+import { SVG, Path } from '@wordpress/primitives';
+
+const textVerticalRTL = (
+
+);
+
+export default textVerticalRTL;
diff --git a/packages/style-engine/class-wp-style-engine.php b/packages/style-engine/class-wp-style-engine.php
index 23818eb889d015..f5f66a6d16a68a 100644
--- a/packages/style-engine/class-wp-style-engine.php
+++ b/packages/style-engine/class-wp-style-engine.php
@@ -225,7 +225,7 @@ final class WP_Style_Engine {
),
),
'typography' => array(
- 'fontSize' => array(
+ 'fontSize' => array(
'property_keys' => array(
'default' => 'font-size',
),
@@ -237,7 +237,7 @@ final class WP_Style_Engine {
'has-$slug-font-size' => 'font-size',
),
),
- 'fontFamily' => array(
+ 'fontFamily' => array(
'property_keys' => array(
'default' => 'font-family',
),
@@ -249,54 +249,60 @@ final class WP_Style_Engine {
'has-$slug-font-family' => 'font-family',
),
),
- 'fontStyle' => array(
+ 'fontStyle' => array(
'property_keys' => array(
'default' => 'font-style',
),
'path' => array( 'typography', 'fontStyle' ),
),
- 'fontWeight' => array(
+ 'fontWeight' => array(
'property_keys' => array(
'default' => 'font-weight',
),
'path' => array( 'typography', 'fontWeight' ),
),
- 'lineHeight' => array(
+ 'lineHeight' => array(
'property_keys' => array(
'default' => 'line-height',
),
'path' => array( 'typography', 'lineHeight' ),
),
- 'textColumns' => array(
+ 'textColumns' => array(
'property_keys' => array(
'default' => 'column-count',
),
'path' => array( 'typography', 'textColumns' ),
),
- 'textDecoration' => array(
+ 'textDecoration' => array(
'property_keys' => array(
'default' => 'text-decoration',
),
'path' => array( 'typography', 'textDecoration' ),
),
- 'textTransform' => array(
+ 'textTransform' => array(
'property_keys' => array(
'default' => 'text-transform',
),
'path' => array( 'typography', 'textTransform' ),
),
- 'letterSpacing' => array(
+ 'letterSpacing' => array(
'property_keys' => array(
'default' => 'letter-spacing',
),
'path' => array( 'typography', 'letterSpacing' ),
),
- 'writingMode' => array(
+ 'writingMode' => array(
'property_keys' => array(
'default' => 'writing-mode',
),
'path' => array( 'typography', 'writingMode' ),
),
+ 'textOrientation' => array(
+ 'property_keys' => array(
+ 'default' => 'text-orientation',
+ ),
+ 'path' => array( 'typography', 'textOrientation' ),
+ ),
),
);
diff --git a/packages/style-engine/src/styles/typography/index.ts b/packages/style-engine/src/styles/typography/index.ts
index 92c40d2e156198..afc6ba52f339d8 100644
--- a/packages/style-engine/src/styles/typography/index.ts
+++ b/packages/style-engine/src/styles/typography/index.ts
@@ -124,6 +124,18 @@ const writingMode = {
},
};
+const textOrientation = {
+ name: 'textOrientation',
+ generate: ( style: Style, options: StyleOptions ) => {
+ return generateRule(
+ style,
+ options,
+ [ 'typography', 'textOrientation' ],
+ 'textOrientation'
+ );
+ },
+};
+
export default [
fontFamily,
fontSize,
@@ -135,4 +147,5 @@ export default [
textDecoration,
textTransform,
writingMode,
+ textOrientation,
];
diff --git a/packages/style-engine/src/types.ts b/packages/style-engine/src/types.ts
index 5b361836a8e375..6640a3f9a4b3e6 100644
--- a/packages/style-engine/src/types.ts
+++ b/packages/style-engine/src/types.ts
@@ -65,6 +65,7 @@ export interface Style {
textDecoration?: CSSProperties[ 'textDecoration' ];
textTransform?: CSSProperties[ 'textTransform' ];
writingMode?: CSSProperties[ 'writingMode' ];
+ textOrientation?: CSSProperties[ 'textOrientation' ];
};
color?: {
text?: CSSProperties[ 'color' ];
diff --git a/schemas/json/theme.json b/schemas/json/theme.json
index 5dea8f8b7b2b86..98a19424bc6f7d 100644
--- a/schemas/json/theme.json
+++ b/schemas/json/theme.json
@@ -561,6 +561,11 @@
"type": "boolean",
"default": false
},
+ "textOrientation": {
+ "description": "Allow users to set the textOrientation.",
+ "type": "boolean",
+ "default": false
+ },
"textTransform": {
"description": "Allow users to set custom text transforms.",
"type": "boolean",
@@ -1650,6 +1655,17 @@
}
]
},
+ "textOrientation": {
+ "description": "Sets the `text-orientation` CSS property.",
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "$ref": "#/definitions/refComplete"
+ }
+ ]
+ },
"textTransform": {
"description": "Sets the `text-transform` CSS property.",
"oneOf": [