igniteui-theming
Version:
A set of Sass variables, mixins, and functions for generating palettes, typography, and elevations used by Ignite UI components.
243 lines (242 loc) • 11.1 kB
JavaScript
import { ACCENT_SHADE_LEVELS, ALL_COLOR_SHADES, DESIGN_SYSTEMS, ELEVATION_PRESETS, OUTPUT_FORMATS, PALETTE_COLOR_GROUPS, PLATFORMS, SHADE_LEVELS, VARIANTS } from "../utils/types.js";
import "../knowledge/index.js";
import { PARAM_DESCRIPTIONS } from "./descriptions.js";
import { z } from "zod";
/**
* Schema for CSS color values.
* Supports CSS Color Level 4 formats including hex, rgb, hsl, hwb, lab, lch, oklab, oklch, color(), and named colors.
*/
var colorSchema = z.string().regex(/^(#[0-9a-fA-F]{3,4}|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{8}|rgba?\(.+\)|hsla?\(.+\)|hwb\(.+\)|lab\(.+\)|lch\(.+\)|oklab\(.+\)|oklch\(.+\)|color\(.+\)|[a-z]+)$/i, "Must be a valid CSS color (hex, rgb, hsl, hwb, lab, lch, oklab, oklch, color(), or named color)");
/**
* Theme variant schema - derived from VARIANTS constant.
*/
var variantSchema = z.enum(VARIANTS).optional();
/**
* Design system schema - derived from DESIGN_SYSTEMS constant.
*/
var designSystemSchema = z.enum(DESIGN_SYSTEMS).optional();
/**
* Elevation preset schema - derived from ELEVATION_PRESETS constant.
*/
var elevationPresetSchema = z.enum(ELEVATION_PRESETS).optional();
/**
* Output format schema - derived from OUTPUT_FORMATS constant.
*/
var outputFormatSchema = z.enum(OUTPUT_FORMATS).optional();
/**
* Size keyword schema for layout tools.
*/
var sizeKeywordSchema = z.enum([
"small",
"medium",
"large"
]);
/**
* Platform schema - derived from PLATFORMS constant.
*/
var platformSchema = z.enum(PLATFORMS).optional().describe(PARAM_DESCRIPTIONS.platform);
/**
* Licensed package schema - for @infragistics prefixed packages.
*/
var licensedSchema = z.boolean().optional().describe(PARAM_DESCRIPTIONS.licensed);
/**
* Schema for detect_platform tool.
*/
var detectPlatformSchema = z.object({ packageJsonPath: z.string().optional().describe(PARAM_DESCRIPTIONS.packageJsonPath) });
/**
* Schema for create_palette tool.
*/
var createPaletteSchema = z.object({
platform: platformSchema,
licensed: licensedSchema,
primary: colorSchema.describe(PARAM_DESCRIPTIONS.primary),
secondary: colorSchema.describe(PARAM_DESCRIPTIONS.secondary),
surface: colorSchema.describe(PARAM_DESCRIPTIONS.surface),
gray: colorSchema.optional().describe(PARAM_DESCRIPTIONS.gray),
info: colorSchema.optional().describe(PARAM_DESCRIPTIONS.info),
success: colorSchema.optional().describe(PARAM_DESCRIPTIONS.success),
warn: colorSchema.optional().describe(PARAM_DESCRIPTIONS.warn),
error: colorSchema.optional().describe(PARAM_DESCRIPTIONS.error),
variant: variantSchema.describe(PARAM_DESCRIPTIONS.variant),
name: z.string().optional().describe(PARAM_DESCRIPTIONS.name),
output: outputFormatSchema.describe(PARAM_DESCRIPTIONS.output)
});
/**
* Schema for type style customization.
*/
var typeStyleSchema = z.object({
fontSize: z.string().optional(),
fontWeight: z.union([z.string(), z.number()]).optional(),
fontStyle: z.string().optional(),
lineHeight: z.string().optional(),
letterSpacing: z.string().optional(),
textTransform: z.string().optional(),
marginTop: z.string().optional(),
marginBottom: z.string().optional()
});
/**
* Schema for create_typography tool.
*/
var createTypographySchema = z.object({
platform: platformSchema,
licensed: licensedSchema,
fontFamily: z.string().describe(PARAM_DESCRIPTIONS.fontFamily),
designSystem: designSystemSchema.describe(PARAM_DESCRIPTIONS.designSystem),
customScale: z.record(typeStyleSchema).optional().describe(PARAM_DESCRIPTIONS.customScale),
name: z.string().optional().describe(PARAM_DESCRIPTIONS.name)
});
/**
* Schema for create_elevations tool.
*/
var createElevationsSchema = z.object({
platform: platformSchema,
licensed: licensedSchema,
designSystem: elevationPresetSchema.describe(PARAM_DESCRIPTIONS.elevationPreset),
name: z.string().optional().describe(PARAM_DESCRIPTIONS.name)
});
/**
* Schema for create_theme tool.
*/
var createThemeSchema = z.object({
platform: platformSchema,
licensed: licensedSchema,
designSystem: designSystemSchema.describe(PARAM_DESCRIPTIONS.designSystem),
primaryColor: colorSchema.describe(PARAM_DESCRIPTIONS.primaryColor),
secondaryColor: colorSchema.describe(PARAM_DESCRIPTIONS.secondaryColor),
surfaceColor: colorSchema.describe(PARAM_DESCRIPTIONS.surfaceColor),
variant: variantSchema.describe(PARAM_DESCRIPTIONS.variant),
name: z.string().optional().describe(PARAM_DESCRIPTIONS.name),
fontFamily: z.string().optional().describe(PARAM_DESCRIPTIONS.fontFamily),
includeTypography: z.boolean().optional().default(true).describe(PARAM_DESCRIPTIONS.includeTypography),
includeElevations: z.boolean().optional().default(true).describe(PARAM_DESCRIPTIONS.includeElevations),
includeSpacing: z.boolean().optional().default(true).describe(PARAM_DESCRIPTIONS.includeSpacing)
});
/**
* All chromatic shade levels combined for schema validation.
* Imported from types.ts - the single source of truth.
*/
/**
* Schema for shades-based color generation (uses Sass shades() function).
*/
var shadesBasedColorSchema = z.object({
mode: z.literal("shades"),
baseColor: colorSchema.describe(PARAM_DESCRIPTIONS.baseColor)
});
/**
* Schema for explicit chromatic shades (14 shades required).
* Dynamically builds the shades object from SHADE_LEVELS and ACCENT_SHADE_LEVELS.
*/
var explicitColorShadesSchema = z.object({
mode: z.literal("explicit"),
shades: z.object(Object.fromEntries(ALL_COLOR_SHADES.map((s) => [s, colorSchema]))).describe(PARAM_DESCRIPTIONS.shades),
contrastOverrides: z.record(z.enum(ALL_COLOR_SHADES), colorSchema).optional().describe(PARAM_DESCRIPTIONS.contrastOverrides)
});
/**
* Schema for explicit gray shades (10 shades required).
*/
var explicitGrayShadesSchema = z.object({
mode: z.literal("explicit"),
shades: z.object(Object.fromEntries(SHADE_LEVELS.map((s) => [s, colorSchema]))).describe(PARAM_DESCRIPTIONS.grayShades),
contrastOverrides: z.record(z.enum(SHADE_LEVELS), colorSchema).optional().describe(PARAM_DESCRIPTIONS.contrastOverrides)
});
/**
* Schema for color definition - either shades-based or explicit.
*/
var colorDefinitionSchema = z.union([shadesBasedColorSchema, explicitColorShadesSchema]);
/**
* Schema for gray definition - either shades-based or explicit.
*/
var grayDefinitionSchema = z.union([shadesBasedColorSchema, explicitGrayShadesSchema]);
/**
* Schema for create_custom_palette tool.
*/
var createCustomPaletteSchema = z.object({
platform: platformSchema,
licensed: licensedSchema,
variant: variantSchema.describe(PARAM_DESCRIPTIONS.variant),
designSystem: designSystemSchema.describe(PARAM_DESCRIPTIONS.designSystem),
name: z.string().optional().describe(PARAM_DESCRIPTIONS.name),
output: outputFormatSchema.describe(PARAM_DESCRIPTIONS.output),
primary: colorDefinitionSchema.describe(PARAM_DESCRIPTIONS.colorDefinition),
secondary: colorDefinitionSchema.describe(PARAM_DESCRIPTIONS.colorDefinition),
surface: colorDefinitionSchema.describe(PARAM_DESCRIPTIONS.colorDefinition),
gray: grayDefinitionSchema.optional().describe(PARAM_DESCRIPTIONS.grayDefinition),
info: colorDefinitionSchema.optional().describe(PARAM_DESCRIPTIONS.colorDefinition),
success: colorDefinitionSchema.optional().describe(PARAM_DESCRIPTIONS.colorDefinition),
warn: colorDefinitionSchema.optional().describe(PARAM_DESCRIPTIONS.colorDefinition),
error: colorDefinitionSchema.optional().describe(PARAM_DESCRIPTIONS.colorDefinition)
});
/**
* Schema for get_component_design_tokens tool.
*/
var getComponentDesignTokensSchema = z.object({ component: z.string().describe(PARAM_DESCRIPTIONS.component) });
/**
* Schema for token value in create_component_theme.
* Supports colors, numbers with units, and other Sass-compatible values.
*/
var tokenValueSchema = z.union([
colorSchema,
z.string().describe("CSS value (e.g., \"8px\", \"1rem\", \"0 2px 4px rgba(0,0,0,0.1)\")"),
z.number().describe("Numeric value")
]);
/**
* Schema for create_component_theme tool.
*/
var createComponentThemeSchema = z.object({
platform: z.enum(PLATFORMS).describe(PARAM_DESCRIPTIONS.platform),
licensed: licensedSchema,
designSystem: designSystemSchema.describe(PARAM_DESCRIPTIONS.designSystem),
variant: variantSchema.describe(PARAM_DESCRIPTIONS.variant),
component: z.string().describe(PARAM_DESCRIPTIONS.componentTheme),
tokens: z.record(z.string(), tokenValueSchema).describe(PARAM_DESCRIPTIONS.tokens),
selector: z.string().optional().describe(PARAM_DESCRIPTIONS.selector),
name: z.string().optional().describe(PARAM_DESCRIPTIONS.themeName),
output: outputFormatSchema.describe(PARAM_DESCRIPTIONS.output)
});
/**
* Schema for get_color tool with validation.
* Retrieves palette colors as CSS variable references.
*/
var getColorSchema = z.object({
color: z.enum(PALETTE_COLOR_GROUPS).describe(PARAM_DESCRIPTIONS.colorName),
variant: z.enum([...SHADE_LEVELS, ...ACCENT_SHADE_LEVELS]).optional().describe(PARAM_DESCRIPTIONS.shadeVariant),
contrast: z.boolean().optional().describe(PARAM_DESCRIPTIONS.contrastFlag),
opacity: z.number().min(0).max(1).optional().describe(PARAM_DESCRIPTIONS.opacity)
}).refine((data) => {
if (data.color === "gray" && data.variant) return !ACCENT_SHADE_LEVELS.includes(data.variant);
return true;
}, {
message: "Gray color does not support accent shades (A100, A200, A400, A700). Use standard shades: 50-900.",
path: ["variant"]
});
var sizeValueSchema = z.union([sizeKeywordSchema, z.number().int().min(1).max(3)]).describe(PARAM_DESCRIPTIONS.sizeValue);
var setSizeSchema = z.object({
platform: platformSchema,
component: z.string().optional().describe(PARAM_DESCRIPTIONS.layoutComponent),
scope: z.string().optional().describe(PARAM_DESCRIPTIONS.scope),
size: sizeValueSchema,
output: outputFormatSchema.describe(PARAM_DESCRIPTIONS.output)
});
var setSpacingInputSchema = z.object({
platform: platformSchema,
component: z.string().optional().describe(PARAM_DESCRIPTIONS.layoutComponent),
scope: z.string().optional().describe(PARAM_DESCRIPTIONS.scope),
spacing: z.number().min(0).describe(PARAM_DESCRIPTIONS.spacing),
inline: z.number().min(0).optional().describe(PARAM_DESCRIPTIONS.spacingInline),
block: z.number().min(0).optional().describe(PARAM_DESCRIPTIONS.spacingBlock),
output: outputFormatSchema.describe(PARAM_DESCRIPTIONS.output)
});
var setSpacingSchema = setSpacingInputSchema;
var setRoundnessSchema = z.object({
platform: platformSchema,
component: z.string().optional().describe(PARAM_DESCRIPTIONS.layoutComponent),
scope: z.string().optional().describe(PARAM_DESCRIPTIONS.scope),
radiusFactor: z.number().min(0).max(1).describe(PARAM_DESCRIPTIONS.radiusFactor),
output: outputFormatSchema.describe(PARAM_DESCRIPTIONS.output)
});
/**
* Schema for read_resource tool.
*/
var readResourceSchema = z.object({ uri: z.string().describe(PARAM_DESCRIPTIONS.resourceUri) });
//#endregion
export { createComponentThemeSchema, createCustomPaletteSchema, createElevationsSchema, createPaletteSchema, createThemeSchema, createTypographySchema, detectPlatformSchema, getColorSchema, getComponentDesignTokensSchema, platformSchema, readResourceSchema, setRoundnessSchema, setSizeSchema, setSpacingInputSchema, setSpacingSchema };