UNPKG

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
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 };