用于读取和写入全局样式数据结构(theme.json 格式)的通用库。

概述

这是一个与框架无关的工具库,提供了用于操作全局样式对象的函数。它处理 theme.json 格式的复杂嵌套结构,包括特定于块(block)的样式和设置。

API

读取数据

getStyle(globalStyles, path, blockName?, shouldDecodeEncode?)

从全局样式对象中获取样式值。

// 获取全局文本颜色
const textColor = getStyle( globalStyles, 'color.text' );

// 获取按钮背景色
const buttonBg = getStyle( globalStyles, 'color.background', 'core/button' );

// 获取原始值,不进行 CSS 变量解析
const rawValue = getStyle( globalStyles, 'color.text', undefined, false );

getSetting(globalStyles, path, blockName?)

获取具有回退层级(特定于块 → 全局)的设置值。

// 获取全局调色板
const colors = getSetting( globalStyles, 'color.palette' );

// 获取段落特定的字体大小
const fontSizes = getSetting(
    globalStyles,
    'typography.fontSizes',
    'core/paragraph'
);

写入数据

setStyle(globalStyles, path, newValue, blockName?)

不可变地设置样式值。返回一个新的全局样式对象。

// 设置全局文本颜色
const updated = setStyle( globalStyles, 'color.text', '#333333' );

// 设置按钮背景色
const updated = setStyle(
    globalStyles,
    'color.background',
    '#0073aa',
    'core/button'
);

setSetting(globalStyles, path, newValue, blockName?)

不可变地设置值。返回一个新的全局样式对象。

// 设置全局调色板
const updated = setSetting( globalStyles, 'color.palette', newPalette );

// 设置特定于块的设置
const updated = setSetting(
    globalStyles,
    'typography.fontSizes',
    sizes,
    'core/heading'
);

工具函数

getPalettes(globalStyles)

按来源(主题、自定义、默认)提取调色板。

generateGlobalStyles(globalStyles)

从全局样式对象生成 CSS。

mergeGlobalStyles(base, user)

合并多个全局样式对象,并确保正确的优先级。

数据结构

全局样式对象遵循 theme.json 架构:

{
  styles: {
    color: { text: '#000', background: '#fff' },
    typography: { fontSize: '16px' },
    elements: {
      button: { color: { background: 'blue' } }
    },
    blocks: {
      'core/paragraph': { color: { text: '#333' } }
    }
  },
  settings: {
    color: { palette: [...] },
    typography: { fontSizes: [...] },
    blocks: {
      'core/paragraph': { color: { text: true } }
    }
  }
}

功能特性

  • 不可变更新:所有设置器函数都返回新对象
  • 类型安全:完整的 TypeScript 支持
  • CSS 变量解析:自动解析 CSS 自定义属性
  • 特定于块的样式:支持块和元素特定的样式
  • 回退层级:智能地从块 → 全局 → 默认设置进行回退
  • 与框架无关:不依赖 React、WordPress 或其他框架

用法

本库旨在作为任何全局样式编辑界面的基础。它提供核心数据操作功能,同时保持完全通用和可重用。

使用前必须确保块及其样式已全局注册,因为块样式是从全局块存储中获取的。