@10up/block-renderer-theme-json 0.1.4

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.
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Generates a WordPress CSS variable reference.
3
+ * WordPress uses a special format: var:preset|type|slug
4
+ *
5
+ * @example
6
+ * generateCssVarReference('color', 'primary') => 'var:preset|color|primary'
7
+ */
8
+ export function generateCssVarReference(type, slug) {
9
+ return `var:preset|${type}|${slug}`;
10
+ }
11
+ /**
12
+ * Generates the actual CSS custom property name.
13
+ * This is what WordPress generates in the CSS output.
14
+ *
15
+ * @example
16
+ * generateCssPropertyName('color', 'primary') => '--wp--preset--color--primary'
17
+ */
18
+ export function generateCssPropertyName(type, slug) {
19
+ return `--wp--preset--${type}--${slug}`;
20
+ }
21
+ /**
22
+ * Generates a CSS var() function reference.
23
+ *
24
+ * @example
25
+ * generateCssVarFunction('color', 'primary') => 'var(--wp--preset--color--primary)'
26
+ */
27
+ export function generateCssVarFunction(type, slug) {
28
+ return `var(${generateCssPropertyName(type, slug)})`;
29
+ }
30
+ /**
31
+ * Parses a WordPress CSS variable reference back to its components.
32
+ *
33
+ * @example
34
+ * parseCssVarReference('var:preset|color|primary') => { type: 'color', slug: 'primary' }
35
+ */
36
+ export function parseCssVarReference(reference) {
37
+ const match = reference.match(/^var:preset\|([^|]+)\|(.+)$/);
38
+ if (!match)
39
+ return null;
40
+ return {
41
+ type: match[1],
42
+ slug: match[2],
43
+ };
44
+ }
45
+ /**
46
+ * Checks if a value is a WordPress CSS variable reference.
47
+ */
48
+ export function isCssVarReference(value) {
49
+ return value.startsWith('var:preset|');
50
+ }
51
+ /**
52
+ * Converts a WordPress CSS variable reference to actual CSS.
53
+ *
54
+ * @example
55
+ * convertToActualCss('var:preset|color|primary') => 'var(--wp--preset--color--primary)'
56
+ */
57
+ export function convertToActualCss(reference) {
58
+ const parsed = parseCssVarReference(reference);
59
+ if (!parsed)
60
+ return reference;
61
+ return generateCssVarFunction(parsed.type, parsed.slug);
62
+ }
63
+ /**
64
+ * Gets all available color slugs from theme tokens.
65
+ */
66
+ export function getColorSlugs(tokens) {
67
+ return tokens.colors.palette.map(c => c.slug);
68
+ }
69
+ /**
70
+ * Gets all available gradient slugs from theme tokens.
71
+ */
72
+ export function getGradientSlugs(tokens) {
73
+ return tokens.colors.gradients.map(g => g.slug);
74
+ }
75
+ /**
76
+ * Gets all available font family slugs from theme tokens.
77
+ */
78
+ export function getFontFamilySlugs(tokens) {
79
+ return tokens.typography.fontFamilies.map(f => f.slug);
80
+ }
81
+ /**
82
+ * Gets all available font size slugs from theme tokens.
83
+ */
84
+ export function getFontSizeSlugs(tokens) {
85
+ return tokens.typography.fontSizes.map(f => f.slug);
86
+ }
87
+ /**
88
+ * Gets all available spacing slugs from theme tokens.
89
+ */
90
+ export function getSpacingSlugs(tokens) {
91
+ return tokens.spacing.spacingSizes.map(s => s.slug);
92
+ }
93
+ /**
94
+ * Gets all available shadow slugs from theme tokens.
95
+ */
96
+ export function getShadowSlugs(tokens) {
97
+ return tokens.shadow.presets.map(s => s.slug);
98
+ }
99
+ /**
100
+ * Validates that a slug exists in the theme tokens.
101
+ */
102
+ export function validateSlug(tokens, type, slug) {
103
+ switch (type) {
104
+ case 'color':
105
+ return tokens.colors.palette.some(c => c.slug === slug);
106
+ case 'gradient':
107
+ return tokens.colors.gradients.some(g => g.slug === slug);
108
+ case 'duotone':
109
+ return tokens.colors.duotone.some(d => d.slug === slug);
110
+ case 'font-family':
111
+ return tokens.typography.fontFamilies.some(f => f.slug === slug);
112
+ case 'font-size':
113
+ return tokens.typography.fontSizes.some(f => f.slug === slug);
114
+ case 'spacing':
115
+ return tokens.spacing.spacingSizes.some(s => s.slug === slug);
116
+ case 'shadow':
117
+ return tokens.shadow.presets.some(s => s.slug === slug);
118
+ default:
119
+ return false;
120
+ }
121
+ }
122
+ /**
123
+ * Gets the actual value for a token slug.
124
+ */
125
+ export function getTokenValue(tokens, type, slug) {
126
+ switch (type) {
127
+ case 'color':
128
+ return tokens.colors.palette.find(c => c.slug === slug)?.color ?? null;
129
+ case 'gradient':
130
+ return tokens.colors.gradients.find(g => g.slug === slug)?.gradient ?? null;
131
+ case 'font-family':
132
+ return tokens.typography.fontFamilies.find(f => f.slug === slug)?.fontFamily ?? null;
133
+ case 'font-size':
134
+ return tokens.typography.fontSizes.find(f => f.slug === slug)?.size ?? null;
135
+ case 'spacing':
136
+ return tokens.spacing.spacingSizes.find(s => s.slug === slug)?.size ?? null;
137
+ case 'shadow':
138
+ return tokens.shadow.presets.find(s => s.slug === slug)?.shadow ?? null;
139
+ default:
140
+ return null;
141
+ }
142
+ }
143
+ //# sourceMappingURL=css-variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-variables.js","sourceRoot":"","sources":["../src/css-variables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Ignite WP Token Extractor
3
+ *
4
+ * Extracts Ignite WP-specific tokens from theme.json settings:
5
+ * - Fluid typography (custom.text with fluid/min/max)
6
+ * - Fluid spacing (custom.spacing with fluid/min/max)
7
+ * - Typography presets (custom.typography.presets)
8
+ */
9
+ import type { FluidValue, TypographyPreset, IgniteTokens } from './types.js';
10
+ /**
11
+ * Check if a value is a fluid value definition
12
+ */
13
+ export declare function isFluidValue(value: unknown): value is FluidValue;
14
+ /**
15
+ * Extract fluid values from a nested object
16
+ *
17
+ * Recursively traverses an object looking for FluidValue objects
18
+ * and returns them with their path as the key.
19
+ *
20
+ * @example
21
+ * // Input: { "3xl": { fluid: "true", min: "1.5rem", max: "1.875rem" } }
22
+ * // Output: { "text.3xl": { fluid: "true", min: "1.5rem", max: "1.875rem" } }
23
+ */
24
+ export declare function extractFluidValues(obj: Record<string, unknown>, path?: string[]): Record<string, FluidValue>;
25
+ /**
26
+ * Extract typography presets from settings.custom.typography.presets
27
+ */
28
+ export declare function extractTypographyPresets(custom: Record<string, unknown>): TypographyPreset[];
29
+ /**
30
+ * Extract all Ignite-specific tokens from theme.json settings
31
+ *
32
+ * @param settings - The settings object from theme.json
33
+ * @returns IgniteTokens object with fluid typography, spacing, and presets
34
+ */
35
+ export declare function extractIgniteTokens(settings: Record<string, unknown>): IgniteTokens;
36
+ /**
37
+ * Get the CSS class name for a typography preset
38
+ *
39
+ * @param slug - The preset slug (e.g., "display-lg", "heading-1")
40
+ * @returns CSS class name in format: is-typography-preset-{slug}
41
+ *
42
+ * @example
43
+ * getTypographyPresetClassName('display-lg') // "is-typography-preset-display-lg"
44
+ */
45
+ export declare function getTypographyPresetClassName(slug: string): string;
46
+ //# sourceMappingURL=ignite-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignite-extractor.d.ts","sourceRoot":"","sources":["../src/ignite-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7E;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAQhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,GAAE,MAAM,EAAO,GAClB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAiB5B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,gBAAgB,EAAE,CAepB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,YAAY,CAqBd;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Ignite WP Token Extractor
3
+ *
4
+ * Extracts Ignite WP-specific tokens from theme.json settings:
5
+ * - Fluid typography (custom.text with fluid/min/max)
6
+ * - Fluid spacing (custom.spacing with fluid/min/max)
7
+ * - Typography presets (custom.typography.presets)
8
+ */
9
+ /**
10
+ * Check if a value is a fluid value definition
11
+ */
12
+ export function isFluidValue(value) {
13
+ if (typeof value !== 'object' || value === null)
14
+ return false;
15
+ const obj = value;
16
+ return ((obj.fluid === 'true' || obj.fluid === true) &&
17
+ typeof obj.min === 'string' &&
18
+ typeof obj.max === 'string');
19
+ }
20
+ /**
21
+ * Extract fluid values from a nested object
22
+ *
23
+ * Recursively traverses an object looking for FluidValue objects
24
+ * and returns them with their path as the key.
25
+ *
26
+ * @example
27
+ * // Input: { "3xl": { fluid: "true", min: "1.5rem", max: "1.875rem" } }
28
+ * // Output: { "text.3xl": { fluid: "true", min: "1.5rem", max: "1.875rem" } }
29
+ */
30
+ export function extractFluidValues(obj, path = []) {
31
+ const result = {};
32
+ for (const [key, value] of Object.entries(obj)) {
33
+ const currentPath = [...path, key];
34
+ if (isFluidValue(value)) {
35
+ result[currentPath.join('.')] = value;
36
+ }
37
+ else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
38
+ Object.assign(result, extractFluidValues(value, currentPath));
39
+ }
40
+ }
41
+ return result;
42
+ }
43
+ /**
44
+ * Extract typography presets from settings.custom.typography.presets
45
+ */
46
+ export function extractTypographyPresets(custom) {
47
+ const typography = custom?.typography;
48
+ const presets = typography?.presets;
49
+ if (!Array.isArray(presets))
50
+ return [];
51
+ return presets.filter((preset) => {
52
+ if (typeof preset !== 'object' || preset === null)
53
+ return false;
54
+ const p = preset;
55
+ return (typeof p.slug === 'string' &&
56
+ typeof p.name === 'string' &&
57
+ typeof p.fontSize === 'string');
58
+ });
59
+ }
60
+ /**
61
+ * Extract all Ignite-specific tokens from theme.json settings
62
+ *
63
+ * @param settings - The settings object from theme.json
64
+ * @returns IgniteTokens object with fluid typography, spacing, and presets
65
+ */
66
+ export function extractIgniteTokens(settings) {
67
+ const custom = settings?.custom || {};
68
+ // Extract fluid typography from custom.text (e.g., custom.text.3xl, custom.text.4xl)
69
+ // Path in theme.json: settings.custom.text.3xl = { fluid: "true", min: "1.5rem", max: "1.875rem" }
70
+ const textSection = custom?.text || {};
71
+ const fluidTypography = extractFluidValues(textSection, ['text']);
72
+ // Extract fluid spacing from custom.spacing (if any have fluid values)
73
+ // Path in theme.json: settings.custom.spacing.lg = { fluid: "true", min: "...", max: "..." }
74
+ const spacingSection = custom?.spacing || {};
75
+ const fluidSpacing = extractFluidValues(spacingSection, ['spacing']);
76
+ // Extract typography presets from custom.typography.presets
77
+ const typographyPresets = extractTypographyPresets(custom);
78
+ return {
79
+ fluidTypography,
80
+ fluidSpacing,
81
+ typographyPresets,
82
+ };
83
+ }
84
+ /**
85
+ * Get the CSS class name for a typography preset
86
+ *
87
+ * @param slug - The preset slug (e.g., "display-lg", "heading-1")
88
+ * @returns CSS class name in format: is-typography-preset-{slug}
89
+ *
90
+ * @example
91
+ * getTypographyPresetClassName('display-lg') // "is-typography-preset-display-lg"
92
+ */
93
+ export function getTypographyPresetClassName(slug) {
94
+ return `is-typography-preset-${slug}`;
95
+ }
96
+ //# sourceMappingURL=ignite-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignite-extractor.js","sourceRoot":"","sources":["../src/ignite-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;QAC5C,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ;QAC3B,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAC5B,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAA4B,EAC5B,OAAiB,EAAE;IAEnB,MAAM,MAAM,GAA+B,EAAE,CAAC;IAE9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QAEnC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QACxC,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChF,MAAM,CAAC,MAAM,CACX,MAAM,EACN,kBAAkB,CAAC,KAAgC,EAAE,WAAW,CAAC,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA+B;IAE/B,MAAM,UAAU,GAAG,MAAM,EAAE,UAAiD,CAAC;IAC7E,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,CAAC;IAEpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAA8B,EAAE;QAC3D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChE,MAAM,CAAC,GAAG,MAAiC,CAAC;QAC5C,OAAO,CACL,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAC1B,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAC1B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAiC;IAEjC,MAAM,MAAM,GAAI,QAAQ,EAAE,MAAkC,IAAI,EAAE,CAAC;IAEnE,qFAAqF;IACrF,mGAAmG;IACnG,MAAM,WAAW,GAAI,MAAM,EAAE,IAAgC,IAAI,EAAE,CAAC;IACpE,MAAM,eAAe,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAElE,uEAAuE;IACvE,6FAA6F;IAC7F,MAAM,cAAc,GAAI,MAAM,EAAE,OAAmC,IAAI,EAAE,CAAC;IAC1E,MAAM,YAAY,GAAG,kBAAkB,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAErE,4DAA4D;IAC5D,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO;QACL,eAAe;QACf,YAAY;QACZ,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAY;IACvD,OAAO,wBAAwB,IAAI,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type { ColorPreset, GradientPreset, DuotonePreset, FontFamilyPreset, FontFace, FontSizePreset, SpacingPreset, ShadowPreset, ThemeTokens, StyleObject, SidesObject, ThemeStyles, SectionStyle, ParsedTheme, ThemeJsonSettings, ThemeJson, FluidValue, TypographyPreset, IgniteTokens, } from './types.js';
2
+ export { colorPresetSchema, gradientPresetSchema, duotonePresetSchema, fontSizePresetSchema, spacingPresetSchema, shadowPresetSchema, } from './types.js';
3
+ export { extractTokens, extractStyles, loadThemeJson, loadStyleVariations, loadSectionStyles, parseTheme, parseThemeJson, } from './parser.js';
4
+ export type { ParseThemeOptions } from './parser.js';
5
+ export { isFluidValue, extractFluidValues, extractTypographyPresets, extractIgniteTokens, getTypographyPresetClassName, } from './ignite-extractor.js';
6
+ export { generateCssVarReference, generateCssPropertyName, generateCssVarFunction, parseCssVarReference, isCssVarReference, convertToActualCss, getColorSlugs, getGradientSlugs, getFontFamilySlugs, getFontSizeSlugs, getSpacingSlugs, getShadowSlugs, validateSlug, getTokenValue, } from './css-variables.js';
7
+ export type { TokenType } from './css-variables.js';
8
+ export { blockTypeToSelector, flattenCustomToProperties, generateSectionStyleCss, generateAllSectionStylesCss, } from './css-generator.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EAET,UAAU,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { colorPresetSchema, gradientPresetSchema, duotonePresetSchema, fontSizePresetSchema, spacingPresetSchema, shadowPresetSchema, } from './types.js';
2
+ // Parser
3
+ export { extractTokens, extractStyles, loadThemeJson, loadStyleVariations, loadSectionStyles, parseTheme, parseThemeJson, } from './parser.js';
4
+ // Ignite WP Extractor
5
+ export { isFluidValue, extractFluidValues, extractTypographyPresets, extractIgniteTokens, getTypographyPresetClassName, } from './ignite-extractor.js';
6
+ // CSS Variables
7
+ export { generateCssVarReference, generateCssPropertyName, generateCssVarFunction, parseCssVarReference, isCssVarReference, convertToActualCss, getColorSlugs, getGradientSlugs, getFontFamilySlugs, getFontSizeSlugs, getSpacingSlugs, getShadowSlugs, validateSlug, getTokenValue, } from './css-variables.js';
8
+ // CSS Generator (Section Styles)
9
+ export { blockTypeToSelector, flattenCustomToProperties, generateSectionStyleCss, generateAllSectionStylesCss, } from './css-generator.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,SAAS;AACT,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,sBAAsB;AACtB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,gBAAgB;AAChB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;AAG5B,iCAAiC;AACjC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { ThemeJson, ParsedTheme, ThemeTokens, ThemeStyles, SectionStyle } from './types.js';
2
+ /**
3
+ * Options for parsing a theme
4
+ */
5
+ export interface ParseThemeOptions {
6
+ /** Enable Ignite WP token extraction */
7
+ ignite?: boolean;
8
+ }
9
+ /**
10
+ * Extracts design tokens from theme.json settings
11
+ */
12
+ export declare function extractTokens(settings: ThemeJson['settings']): ThemeTokens;
13
+ /**
14
+ * Extracts styles from theme.json styles section
15
+ */
16
+ export declare function extractStyles(styles: ThemeJson['styles']): ThemeStyles;
17
+ /**
18
+ * Loads and parses a theme.json file
19
+ */
20
+ export declare function loadThemeJson(filePath: string): ThemeJson;
21
+ /**
22
+ * Loads style variations from the /styles directory
23
+ * Note: Files with blockTypes are treated as section styles, not variations
24
+ */
25
+ export declare function loadStyleVariations(themePath: string): Record<string, Partial<ThemeStyles>>;
26
+ /**
27
+ * Loads section styles from the /styles directory (WordPress 6.6+)
28
+ * Section styles are partial theme.json files with blockTypes that define
29
+ * scoped styles for specific block types.
30
+ */
31
+ export declare function loadSectionStyles(themePath: string): SectionStyle[];
32
+ /**
33
+ * Parses a complete WordPress theme
34
+ *
35
+ * @param themePath - Path to the theme directory containing theme.json
36
+ * @param options - Optional parsing options
37
+ * @param options.ignite - Enable Ignite WP token extraction (fluid typography, spacing, presets)
38
+ */
39
+ export declare function parseTheme(themePath: string, options?: ParseThemeOptions): ParsedTheme;
40
+ /**
41
+ * Parses theme.json content directly (without file I/O)
42
+ * Note: Does not include variations or sectionStyles as those require directory scanning
43
+ */
44
+ export declare function parseThemeJson(themeJson: ThemeJson): Omit<ParsedTheme, 'variations' | 'sectionStyles'>;
45
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EAEX,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuCD;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,WAAW,CA2C1E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,WAAW,CA6BtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAGzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAsCtC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CA8CnE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,iBAAsB,GAC9B,WAAW,CA8Bb;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,eAAe,CAAC,CAUtG"}
package/dist/parser.js ADDED
@@ -0,0 +1,242 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { extractIgniteTokens } from './ignite-extractor.js';
4
+ /**
5
+ * Default empty tokens structure
6
+ */
7
+ function createEmptyTokens() {
8
+ return {
9
+ colors: {
10
+ palette: [],
11
+ gradients: [],
12
+ duotone: [],
13
+ },
14
+ typography: {
15
+ fontFamilies: [],
16
+ fontSizes: [],
17
+ },
18
+ spacing: {
19
+ spacingSizes: [],
20
+ units: ['px', 'em', 'rem', '%', 'vw', 'vh'],
21
+ },
22
+ shadow: {
23
+ presets: [],
24
+ },
25
+ layout: {},
26
+ custom: {},
27
+ };
28
+ }
29
+ /**
30
+ * Default empty styles structure
31
+ */
32
+ function createEmptyStyles() {
33
+ return {
34
+ global: {},
35
+ elements: {},
36
+ blocks: {},
37
+ };
38
+ }
39
+ /**
40
+ * Extracts design tokens from theme.json settings
41
+ */
42
+ export function extractTokens(settings) {
43
+ const tokens = createEmptyTokens();
44
+ if (!settings)
45
+ return tokens;
46
+ // Extract color tokens
47
+ if (settings.color) {
48
+ tokens.colors.palette = settings.color.palette || [];
49
+ tokens.colors.gradients = settings.color.gradients || [];
50
+ tokens.colors.duotone = settings.color.duotone || [];
51
+ }
52
+ // Extract typography tokens
53
+ if (settings.typography) {
54
+ tokens.typography.fontFamilies = settings.typography.fontFamilies || [];
55
+ tokens.typography.fontSizes = settings.typography.fontSizes || [];
56
+ }
57
+ // Extract spacing tokens
58
+ if (settings.spacing) {
59
+ tokens.spacing.spacingSizes = settings.spacing.spacingSizes || [];
60
+ if (settings.spacing.units) {
61
+ tokens.spacing.units = settings.spacing.units;
62
+ }
63
+ }
64
+ // Extract shadow tokens
65
+ if (settings.shadow?.presets) {
66
+ tokens.shadow.presets = settings.shadow.presets;
67
+ }
68
+ // Extract layout settings
69
+ if (settings.layout) {
70
+ tokens.layout.contentSize = settings.layout.contentSize;
71
+ tokens.layout.wideSize = settings.layout.wideSize;
72
+ }
73
+ // Extract custom properties
74
+ if (settings.custom) {
75
+ tokens.custom = settings.custom;
76
+ }
77
+ return tokens;
78
+ }
79
+ /**
80
+ * Extracts styles from theme.json styles section
81
+ */
82
+ export function extractStyles(styles) {
83
+ const result = createEmptyStyles();
84
+ if (!styles)
85
+ return result;
86
+ // Extract global styles
87
+ const globalStyle = {};
88
+ if (styles.color)
89
+ globalStyle.color = styles.color;
90
+ if (styles.typography)
91
+ globalStyle.typography = styles.typography;
92
+ if (styles.spacing)
93
+ globalStyle.spacing = styles.spacing;
94
+ if (styles.border)
95
+ globalStyle.border = styles.border;
96
+ if (styles.dimensions)
97
+ globalStyle.dimensions = styles.dimensions;
98
+ if (styles.filter)
99
+ globalStyle.filter = styles.filter;
100
+ if (styles.shadow)
101
+ globalStyle.shadow = styles.shadow;
102
+ if (styles.outline)
103
+ globalStyle.outline = styles.outline;
104
+ if (styles.css)
105
+ globalStyle.css = styles.css;
106
+ result.global = globalStyle;
107
+ // Extract element styles
108
+ if (styles.elements) {
109
+ result.elements = styles.elements;
110
+ }
111
+ // Extract block styles
112
+ if (styles.blocks) {
113
+ result.blocks = styles.blocks;
114
+ }
115
+ return result;
116
+ }
117
+ /**
118
+ * Loads and parses a theme.json file
119
+ */
120
+ export function loadThemeJson(filePath) {
121
+ const content = fs.readFileSync(filePath, 'utf-8');
122
+ return JSON.parse(content);
123
+ }
124
+ /**
125
+ * Loads style variations from the /styles directory
126
+ * Note: Files with blockTypes are treated as section styles, not variations
127
+ */
128
+ export function loadStyleVariations(themePath) {
129
+ const variations = {};
130
+ const stylesDir = path.join(themePath, 'styles');
131
+ if (!fs.existsSync(stylesDir)) {
132
+ return variations;
133
+ }
134
+ const files = fs.readdirSync(stylesDir);
135
+ for (const file of files) {
136
+ if (!file.endsWith('.json'))
137
+ continue;
138
+ const filePath = path.join(stylesDir, file);
139
+ const name = path.basename(file, '.json');
140
+ try {
141
+ const content = fs.readFileSync(filePath, 'utf-8');
142
+ const variation = JSON.parse(content);
143
+ // Skip section styles (files with blockTypes) - handled by loadSectionStyles
144
+ if (variation.blockTypes && Array.isArray(variation.blockTypes)) {
145
+ continue;
146
+ }
147
+ if (variation.styles) {
148
+ variations[name] = extractStyles(variation.styles);
149
+ }
150
+ }
151
+ catch {
152
+ // Skip invalid JSON files
153
+ console.warn(`Failed to parse style variation: ${filePath}`);
154
+ }
155
+ }
156
+ return variations;
157
+ }
158
+ /**
159
+ * Loads section styles from the /styles directory (WordPress 6.6+)
160
+ * Section styles are partial theme.json files with blockTypes that define
161
+ * scoped styles for specific block types.
162
+ */
163
+ export function loadSectionStyles(themePath) {
164
+ const sectionStyles = [];
165
+ const stylesDir = path.join(themePath, 'styles');
166
+ if (!fs.existsSync(stylesDir)) {
167
+ return sectionStyles;
168
+ }
169
+ const files = fs.readdirSync(stylesDir);
170
+ for (const file of files) {
171
+ if (!file.endsWith('.json'))
172
+ continue;
173
+ const filePath = path.join(stylesDir, file);
174
+ try {
175
+ const content = fs.readFileSync(filePath, 'utf-8');
176
+ const data = JSON.parse(content);
177
+ // Only process files with blockTypes array (section styles)
178
+ if (!data.blockTypes || !Array.isArray(data.blockTypes)) {
179
+ continue;
180
+ }
181
+ const sectionStyle = {
182
+ title: data.title || path.basename(file, '.json'),
183
+ slug: data.slug || path.basename(file, '.json'),
184
+ blockTypes: data.blockTypes,
185
+ styles: data.styles ? extractStyles(data.styles) : { global: {}, elements: {}, blocks: {} },
186
+ customSettings: data.settings?.custom,
187
+ filePath,
188
+ };
189
+ sectionStyles.push(sectionStyle);
190
+ }
191
+ catch {
192
+ console.warn(`Failed to parse section style: ${filePath}`);
193
+ }
194
+ }
195
+ return sectionStyles;
196
+ }
197
+ /**
198
+ * Parses a complete WordPress theme
199
+ *
200
+ * @param themePath - Path to the theme directory containing theme.json
201
+ * @param options - Optional parsing options
202
+ * @param options.ignite - Enable Ignite WP token extraction (fluid typography, spacing, presets)
203
+ */
204
+ export function parseTheme(themePath, options = {}) {
205
+ const themeJsonPath = path.join(themePath, 'theme.json');
206
+ if (!fs.existsSync(themeJsonPath)) {
207
+ throw new Error(`theme.json not found at ${themeJsonPath}`);
208
+ }
209
+ const themeJson = loadThemeJson(themeJsonPath);
210
+ const tokens = extractTokens(themeJson.settings);
211
+ const styles = extractStyles(themeJson.styles);
212
+ const variations = loadStyleVariations(themePath);
213
+ const sectionStyles = loadSectionStyles(themePath);
214
+ const result = {
215
+ version: themeJson.version || 2,
216
+ tokens,
217
+ styles,
218
+ variations,
219
+ sectionStyles,
220
+ raw: themeJson,
221
+ };
222
+ // Extract Ignite WP tokens if flag is set
223
+ if (options.ignite && themeJson.settings) {
224
+ result.igniteTokens = extractIgniteTokens(themeJson.settings);
225
+ }
226
+ return result;
227
+ }
228
+ /**
229
+ * Parses theme.json content directly (without file I/O)
230
+ * Note: Does not include variations or sectionStyles as those require directory scanning
231
+ */
232
+ export function parseThemeJson(themeJson) {
233
+ const tokens = extractTokens(themeJson.settings);
234
+ const styles = extractStyles(themeJson.styles);
235
+ return {
236
+ version: themeJson.version || 2,
237
+ tokens,
238
+ styles,
239
+ raw: themeJson,
240
+ };
241
+ }
242
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}