{"version":3,"sources":["../src/roles/area/validate.ts","../src/roles/length/validate.ts","../src/roles/mass/validate.ts","../src/roles/temperature/constants.ts","../src/roles/temperature/validate.ts","../src/roles/volume/validate.ts","../src/roles/speed/validate.ts","../src/roles/energy/validate.ts","../src/roles/power/validate.ts","../src/roles/pressure/validate.ts","../src/roles/frequency/validate.ts","../src/roles/angle/validate.ts","../src/roles/time/validate.ts","../src/roles/digital/validate.ts","../src/roles/color/validate.ts","../src/roles/date/validate.ts","../src/roles/currency/validate.ts"],"names":[],"mappings":"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","file":"validate.mjs","sourcesContent":["/**\n * Area Role - Validate Pillar\n *\n * Validação semântica de valores de área.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateArea, isValidArea } from '@attrx/role-morphic/area/validate';\n *\n * validateArea(100);   // { valid: true, errors: [] }\n * validateArea(-5);    // { valid: false, errors: ['Area cannot be negative'] }\n * isValidArea(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\nexport interface AreaValidationConfig {\n  min?: number;\n  max?: number;\n  integer?: boolean;\n  minError?: string;\n  maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para área\n */\nexport const AREA_VALIDATION_CONFIG: AreaValidationConfig = {\n  min: 0,\n  minError: \"Area cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de área\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateArea(100);              // { valid: true, errors: [] }\n * validateArea(-5);               // { valid: false, errors: ['Area cannot be negative'] }\n * validateArea(150, { max: 100 }) // { valid: false, errors: ['Value must be at most 100'] }\n */\nexport function validateArea(\n  value: unknown,\n  config: AreaValidationConfig = AREA_VALIDATION_CONFIG\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Type check\n  if (typeof value !== \"number\") {\n    return { valid: false, errors: [\"Value must be a number\"] };\n  }\n\n  // Finite check\n  if (!Number.isFinite(value)) {\n    return { valid: false, errors: [\"Value must be finite\"] };\n  }\n\n  // Min check\n  if (config.min !== undefined && value < config.min) {\n    const msg = config.minError ?? `Value must be at least ${config.min}`;\n    errors.push(msg);\n  }\n\n  // Max check\n  if (config.max !== undefined && value > config.max) {\n    const msg = config.maxError ?? `Value must be at most ${config.max}`;\n    errors.push(msg);\n  }\n\n  // Integer check\n  if (config.integer && !Number.isInteger(value)) {\n    errors.push(\"Value must be an integer\");\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de área é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidArea(100);  // true\n * isValidArea(-5);   // false\n */\nexport function isValidArea(\n  value: unknown,\n  config: AreaValidationConfig = AREA_VALIDATION_CONFIG\n): boolean {\n  return validateArea(value, config).valid;\n}\n","/**\n * Length Role - Validate Pillar\n *\n * Validação semântica de valores de comprimento.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateLength, isValidLength } from '@attrx/role-morphic/length/validate';\n *\n * validateLength(100);   // { valid: true, errors: [] }\n * validateLength(-5);    // { valid: false, errors: ['Length cannot be negative'] }\n * isValidLength(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\nexport interface LengthValidationConfig {\n  min?: number;\n  max?: number;\n  integer?: boolean;\n  minError?: string;\n  maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para comprimento\n * Length é magnitude escalar, portanto não-negativo por padrão\n */\nexport const LENGTH_VALIDATION_CONFIG: LengthValidationConfig = {\n  min: 0,\n  minError: \"Length cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de comprimento\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateLength(100);                    // { valid: true, errors: [] }\n * validateLength(-5);                     // { valid: false, errors: ['Length cannot be negative'] }\n * validateLength(-5, { min: undefined }); // { valid: true, errors: [] } - permite negativo\n */\nexport function validateLength(\n  value: unknown,\n  config: LengthValidationConfig = LENGTH_VALIDATION_CONFIG\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Type check\n  if (typeof value !== \"number\") {\n    return { valid: false, errors: [\"Value must be a number\"] };\n  }\n\n  // Finite check\n  if (!Number.isFinite(value)) {\n    return { valid: false, errors: [\"Value must be finite\"] };\n  }\n\n  // Min check\n  if (config.min !== undefined && value < config.min) {\n    const msg = config.minError ?? `Value must be at least ${config.min}`;\n    errors.push(msg);\n  }\n\n  // Max check\n  if (config.max !== undefined && value > config.max) {\n    const msg = config.maxError ?? `Value must be at most ${config.max}`;\n    errors.push(msg);\n  }\n\n  // Integer check\n  if (config.integer && !Number.isInteger(value)) {\n    errors.push(\"Value must be an integer\");\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de comprimento é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidLength(100);  // true\n * isValidLength(-5);   // false\n */\nexport function isValidLength(\n  value: unknown,\n  config: LengthValidationConfig = LENGTH_VALIDATION_CONFIG\n): boolean {\n  return validateLength(value, config).valid;\n}\n","/**\n * Mass Role - Validate Pillar\n *\n * Validação semântica de valores de massa.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateMass, isValidMass } from '@attrx/role-morphic/mass/validate';\n *\n * validateMass(100);   // { valid: true, errors: [] }\n * validateMass(-5);    // { valid: false, errors: ['Mass cannot be negative'] }\n * isValidMass(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\nexport interface MassValidationConfig {\n  min?: number;\n  max?: number;\n  integer?: boolean;\n  minError?: string;\n  maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para massa\n */\nexport const MASS_VALIDATION_CONFIG: MassValidationConfig = {\n  min: 0,\n  minError: \"Mass cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de massa\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateMass(100);              // { valid: true, errors: [] }\n * validateMass(-5);               // { valid: false, errors: ['Mass cannot be negative'] }\n * validateMass(150, { max: 100 }) // { valid: false, errors: ['Value must be at most 100'] }\n */\nexport function validateMass(\n  value: unknown,\n  config: MassValidationConfig = MASS_VALIDATION_CONFIG\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Type check\n  if (typeof value !== \"number\") {\n    return { valid: false, errors: [\"Value must be a number\"] };\n  }\n\n  // Finite check\n  if (!Number.isFinite(value)) {\n    return { valid: false, errors: [\"Value must be finite\"] };\n  }\n\n  // Min check\n  if (config.min !== undefined && value < config.min) {\n    const msg = config.minError ?? `Value must be at least ${config.min}`;\n    errors.push(msg);\n  }\n\n  // Max check\n  if (config.max !== undefined && value > config.max) {\n    const msg = config.maxError ?? `Value must be at most ${config.max}`;\n    errors.push(msg);\n  }\n\n  // Integer check\n  if (config.integer && !Number.isInteger(value)) {\n    errors.push(\"Value must be an integer\");\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de massa é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidMass(100);  // true\n * isValidMass(-5);   // false\n */\nexport function isValidMass(\n  value: unknown,\n  config: MassValidationConfig = MASS_VALIDATION_CONFIG\n): boolean {\n  return validateMass(value, config).valid;\n}\n","/**\n * Temperature Role - Constants\n *\n * Fórmulas de conversão, símbolos e aliases para unidades de temperatura.\n *\n * IMPORTANTE: Temperatura usa FÓRMULAS, não fatores multiplicativos.\n * Isso porque as escalas têm offsets diferentes (0°C ≠ 0°F ≠ 0K).\n *\n * Fontes:\n * - NIST SP 811 (2008)\n * - SI Brochure, 9th Edition (2019)\n */\n\nimport type { SimpleUnitConfig, UnitAliases } from \"../../contracts\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type TemperatureUnit = \"celsius\" | \"fahrenheit\" | \"kelvin\" | \"rankine\";\n\n// =============================================================================\n// UNITS CONFIG\n// =============================================================================\n\n/**\n * Configuração de cada unidade de temperatura.\n *\n * Base: celsius (°C)\n *\n * Fórmulas de conversão:\n * - Celsius ↔ Fahrenheit: °F = °C × 9/5 + 32\n * - Celsius ↔ Kelvin: K = °C + 273.15\n * - Celsius ↔ Rankine: °R = (°C + 273.15) × 9/5\n *\n * Pontos de referência:\n * | Descrição        | Celsius | Fahrenheit | Kelvin  | Rankine |\n * |------------------|---------|------------|---------|---------|\n * | Zero absoluto    | -273.15 | -459.67    | 0       | 0       |\n * | Congelamento H₂O | 0       | 32         | 273.15  | 491.67  |\n * | Corpo humano     | 37      | 98.6       | 310.15  | 558.27  |\n * | Ebulição H₂O     | 100     | 212        | 373.15  | 671.67  |\n */\nexport const TEMPERATURE_UNITS: Record<TemperatureUnit, SimpleUnitConfig> = {\n  celsius: {\n    symbol: \"°C\",\n    singular: \"degree Celsius\",\n    plural: \"degrees Celsius\",\n    toBase: (c: number) => c,\n    fromBase: (c: number) => c,\n    noSpace: true, // 25°C não 25 °C\n  },\n  fahrenheit: {\n    symbol: \"°F\",\n    singular: \"degree Fahrenheit\",\n    plural: \"degrees Fahrenheit\",\n    toBase: (f: number) => (f - 32) * (5 / 9),\n    fromBase: (c: number) => c * (9 / 5) + 32,\n    noSpace: true, // 77°F não 77 °F\n  },\n  kelvin: {\n    symbol: \"K\",\n    singular: \"kelvin\",\n    plural: \"kelvins\",\n    toBase: (k: number) => k - 273.15,\n    fromBase: (c: number) => c + 273.15,\n    // Kelvin usa espaço: \"273 K\" (convenção SI)\n  },\n  rankine: {\n    symbol: \"°R\",\n    singular: \"degree Rankine\",\n    plural: \"degrees Rankine\",\n    toBase: (r: number) => (r - 491.67) * (5 / 9),\n    fromBase: (c: number) => (c + 273.15) * (9 / 5),\n    noSpace: true, // 500°R não 500 °R\n  },\n};\n\n// =============================================================================\n// ALIASES\n// =============================================================================\n\n/**\n * Aliases para reconhecimento de unidades no cast\n */\nexport const TEMPERATURE_ALIASES: UnitAliases = {\n  // celsius\n  c: \"celsius\",\n  \"°c\": \"celsius\",\n  // fahrenheit\n  f: \"fahrenheit\",\n  \"°f\": \"fahrenheit\",\n  // kelvin\n  k: \"kelvin\",\n  // rankine\n  r: \"rankine\",\n  \"°r\": \"rankine\",\n};\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/** Lista de todas as unidades */\nexport const TEMPERATURE_UNIT_LIST = Object.keys(\n  TEMPERATURE_UNITS,\n) as TemperatureUnit[];\n\n/**\n * Constantes importantes\n */\nexport const TEMPERATURE_CONSTANTS = {\n  /** Zero absoluto em Celsius */\n  ABSOLUTE_ZERO_CELSIUS: -273.15,\n  /** Zero absoluto em Fahrenheit */\n  ABSOLUTE_ZERO_FAHRENHEIT: -459.67,\n  /** Offset Celsius → Kelvin */\n  CELSIUS_TO_KELVIN_OFFSET: 273.15,\n  /** Offset Fahrenheit → Rankine (são a mesma escala, só diferente offset) */\n  FAHRENHEIT_TO_RANKINE_OFFSET: 459.67,\n  /** Ponto de congelamento da água em Fahrenheit */\n  WATER_FREEZING_FAHRENHEIT: 32,\n  /** Ponto de ebulição da água em Fahrenheit */\n  WATER_BOILING_FAHRENHEIT: 212,\n} as const;\n","/**\n * Temperature Role - Validate Pillar\n *\n * Validação semântica de valores de temperatura.\n * Zero dependências externas - pode ser usado standalone.\n *\n * IMPORTANTE: Temperatura não pode ser abaixo do zero absoluto.\n * O zero absoluto varia por escala:\n * - Celsius: -273.15°C\n * - Fahrenheit: -459.67°F\n * - Kelvin: 0K\n * - Rankine: 0°R\n *\n * @example\n * import { validateTemperature, isValidTemperature } from '@attrx/role-morphic/temperature/validate';\n *\n * validateTemperature(100, 'celsius');     // { valid: true, errors: [] }\n * validateTemperature(-300, 'celsius');    // { valid: false, errors: ['...below absolute zero...'] }\n * validateTemperature(-10, 'kelvin');      // { valid: false, errors: ['...below absolute zero...'] }\n * isValidTemperature(100, 'celsius');      // true\n */\n\nimport { type TemperatureUnit, TEMPERATURE_CONSTANTS } from \"./constants\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\nexport interface TemperatureValidationConfig {\n  /** Permite temperaturas abaixo do zero absoluto (default: false) */\n  allowBelowAbsoluteZero?: boolean;\n  /** Valor máximo permitido */\n  max?: number;\n  /** Mensagem de erro para max */\n  maxError?: string;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\n/**\n * Zero absoluto em cada escala\n */\nexport const ABSOLUTE_ZERO: Record<TemperatureUnit, number> = {\n  celsius: TEMPERATURE_CONSTANTS.ABSOLUTE_ZERO_CELSIUS,\n  fahrenheit: TEMPERATURE_CONSTANTS.ABSOLUTE_ZERO_FAHRENHEIT,\n  kelvin: 0,\n  rankine: 0,\n};\n\n/**\n * Símbolos para mensagens de erro\n */\nconst UNIT_SYMBOLS: Record<TemperatureUnit, string> = {\n  celsius: \"°C\",\n  fahrenheit: \"°F\",\n  kelvin: \"K\",\n  rankine: \"°R\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de temperatura\n *\n * @param value - Valor a ser validado\n * @param unit - Unidade do valor (default: celsius)\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateTemperature(100, 'celsius');              // { valid: true, errors: [] }\n * validateTemperature(-300, 'celsius');             // { valid: false, errors: ['...below absolute zero...'] }\n * validateTemperature(-10, 'kelvin');               // { valid: false, errors: ['...below absolute zero...'] }\n * validateTemperature(0, 'kelvin');                 // { valid: true, errors: [] } (0K = zero absoluto)\n * validateTemperature(-459.67, 'fahrenheit');       // { valid: true, errors: [] } (zero absoluto em °F)\n */\nexport function validateTemperature(\n  value: unknown,\n  unit: TemperatureUnit = \"celsius\",\n  config: TemperatureValidationConfig = {}\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Type check\n  if (typeof value !== \"number\") {\n    return { valid: false, errors: [\"Value must be a number\"] };\n  }\n\n  // Finite check\n  if (!Number.isFinite(value)) {\n    return { valid: false, errors: [\"Value must be finite\"] };\n  }\n\n  // Absolute zero check (unless explicitly allowed)\n  if (!config.allowBelowAbsoluteZero) {\n    const absoluteZero = ABSOLUTE_ZERO[unit];\n    if (value < absoluteZero) {\n      const symbol = UNIT_SYMBOLS[unit];\n      errors.push(\n        `Temperature cannot be below absolute zero (${absoluteZero}${symbol})`\n      );\n    }\n  }\n\n  // Max check\n  if (config.max !== undefined && value > config.max) {\n    const msg = config.maxError ?? `Value must be at most ${config.max}`;\n    errors.push(msg);\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de temperatura é válido\n *\n * @param value - Valor a ser validado\n * @param unit - Unidade do valor (default: celsius)\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidTemperature(100, 'celsius');   // true\n * isValidTemperature(-300, 'celsius');  // false\n * isValidTemperature(-10, 'kelvin');    // false\n */\nexport function isValidTemperature(\n  value: unknown,\n  unit: TemperatureUnit = \"celsius\",\n  config: TemperatureValidationConfig = {}\n): boolean {\n  return validateTemperature(value, unit, config).valid;\n}\n\n/**\n * Retorna o zero absoluto na escala especificada\n *\n * @example\n * getAbsoluteZero('celsius');     // -273.15\n * getAbsoluteZero('fahrenheit');  // -459.67\n * getAbsoluteZero('kelvin');      // 0\n */\nexport function getAbsoluteZero(unit: TemperatureUnit): number {\n  return ABSOLUTE_ZERO[unit];\n}\n","/**\n * Volume Role - Validate Pillar\n *\n * Validação semântica de valores de volume.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateVolume, isValidVolume } from '@attrx/role-morphic/volume/validate';\n *\n * validateVolume(100);   // { valid: true, errors: [] }\n * validateVolume(-5);    // { valid: false, errors: ['Volume cannot be negative'] }\n * isValidVolume(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\nexport interface VolumeValidationConfig {\n  min?: number;\n  max?: number;\n  integer?: boolean;\n  minError?: string;\n  maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para volume\n */\nexport const VOLUME_VALIDATION_CONFIG: VolumeValidationConfig = {\n  min: 0,\n  minError: \"Volume cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de volume\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateVolume(100);              // { valid: true, errors: [] }\n * validateVolume(-5);               // { valid: false, errors: ['Volume cannot be negative'] }\n * validateVolume(150, { max: 100 }) // { valid: false, errors: ['Value must be at most 100'] }\n */\nexport function validateVolume(\n  value: unknown,\n  config: VolumeValidationConfig = VOLUME_VALIDATION_CONFIG\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Type check\n  if (typeof value !== \"number\") {\n    return { valid: false, errors: [\"Value must be a number\"] };\n  }\n\n  // Finite check\n  if (!Number.isFinite(value)) {\n    return { valid: false, errors: [\"Value must be finite\"] };\n  }\n\n  // Min check\n  if (config.min !== undefined && value < config.min) {\n    const msg = config.minError ?? `Value must be at least ${config.min}`;\n    errors.push(msg);\n  }\n\n  // Max check\n  if (config.max !== undefined && value > config.max) {\n    const msg = config.maxError ?? `Value must be at most ${config.max}`;\n    errors.push(msg);\n  }\n\n  // Integer check\n  if (config.integer && !Number.isInteger(value)) {\n    errors.push(\"Value must be an integer\");\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de volume é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidVolume(100);  // true\n * isValidVolume(-5);   // false\n */\nexport function isValidVolume(\n  value: unknown,\n  config: VolumeValidationConfig = VOLUME_VALIDATION_CONFIG\n): boolean {\n  return validateVolume(value, config).valid;\n}\n","/**\n * Speed Role - Validate Pillar\n *\n * Validação semântica de valores de velocidade.\n * Zero dependências externas - pode ser usado standalone.\n *\n * Nota: Velocidade pode ser negativa (movimento em direção oposta).\n *\n * @example\n * import { validateSpeed, isValidSpeed } from '@attrx/role-morphic/speed/validate';\n *\n * validateSpeed(100);   // { valid: true, errors: [] }\n * validateSpeed(-50);   // { valid: true, errors: [] } (negativo é válido)\n * isValidSpeed(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\nexport interface SpeedValidationConfig {\n  min?: number;\n  max?: number;\n  integer?: boolean;\n  minError?: string;\n  maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para velocidade\n * Nota: sem min/max por padrão - velocidade pode ser qualquer valor finito\n */\nexport const SPEED_VALIDATION_CONFIG: SpeedValidationConfig = {};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de velocidade\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateSpeed(100);              // { valid: true, errors: [] }\n * validateSpeed(-50);              // { valid: true, errors: [] }\n * validateSpeed(150, { max: 120 }) // { valid: false, errors: ['Value must be at most 120'] }\n */\nexport function validateSpeed(\n  value: unknown,\n  config: SpeedValidationConfig = SPEED_VALIDATION_CONFIG\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Type check\n  if (typeof value !== \"number\") {\n    return { valid: false, errors: [\"Value must be a number\"] };\n  }\n\n  // Finite check\n  if (!Number.isFinite(value)) {\n    return { valid: false, errors: [\"Value must be finite\"] };\n  }\n\n  // Min check\n  if (config.min !== undefined && value < config.min) {\n    const msg = config.minError ?? `Value must be at least ${config.min}`;\n    errors.push(msg);\n  }\n\n  // Max check\n  if (config.max !== undefined && value > config.max) {\n    const msg = config.maxError ?? `Value must be at most ${config.max}`;\n    errors.push(msg);\n  }\n\n  // Integer check\n  if (config.integer && !Number.isInteger(value)) {\n    errors.push(\"Value must be an integer\");\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de velocidade é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidSpeed(100);   // true\n * isValidSpeed(-50);   // true (negativo é válido)\n */\nexport function isValidSpeed(\n  value: unknown,\n  config: SpeedValidationConfig = SPEED_VALIDATION_CONFIG\n): boolean {\n  return validateSpeed(value, config).valid;\n}\n","/**\n * Energy Role - Validate Pillar\n *\n * Validação semântica de valores de energia.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateEnergy, isValidEnergy } from '@attrx/role-morphic/energy/validate';\n *\n * validateEnergy(100);   // { valid: true, errors: [] }\n * validateEnergy(-5);    // { valid: false, errors: ['Energy cannot be negative'] }\n * isValidEnergy(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\nexport interface EnergyValidationConfig {\n  min?: number;\n  max?: number;\n  integer?: boolean;\n  minError?: string;\n  maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para energia\n */\nexport const ENERGY_VALIDATION_CONFIG: EnergyValidationConfig = {\n  min: 0,\n  minError: \"Energy cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de energia\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateEnergy(100);              // { valid: true, errors: [] }\n * validateEnergy(-5);               // { valid: false, errors: ['Energy cannot be negative'] }\n * validateEnergy(150, { max: 100 }) // { valid: false, errors: ['Value must be at most 100'] }\n */\nexport function validateEnergy(\n  value: unknown,\n  config: EnergyValidationConfig = ENERGY_VALIDATION_CONFIG\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Type check\n  if (typeof value !== \"number\") {\n    return { valid: false, errors: [\"Value must be a number\"] };\n  }\n\n  // Finite check\n  if (!Number.isFinite(value)) {\n    return { valid: false, errors: [\"Value must be finite\"] };\n  }\n\n  // Min check\n  if (config.min !== undefined && value < config.min) {\n    const msg = config.minError ?? `Value must be at least ${config.min}`;\n    errors.push(msg);\n  }\n\n  // Max check\n  if (config.max !== undefined && value > config.max) {\n    const msg = config.maxError ?? `Value must be at most ${config.max}`;\n    errors.push(msg);\n  }\n\n  // Integer check\n  if (config.integer && !Number.isInteger(value)) {\n    errors.push(\"Value must be an integer\");\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de energia é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidEnergy(100);  // true\n * isValidEnergy(-5);   // false\n */\nexport function isValidEnergy(\n  value: unknown,\n  config: EnergyValidationConfig = ENERGY_VALIDATION_CONFIG\n): boolean {\n  return validateEnergy(value, config).valid;\n}\n","/**\n * Power Role - Validate Pillar\n *\n * Validação de valores de potência.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validatePower, isValidPower } from '@attrx/role-morphic/power/validate';\n *\n * validatePower(100);   // { valid: true, errors: [] }\n * validatePower(-5);    // { valid: false, errors: ['Power cannot be negative'] }\n * isValidPower(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface PowerValidationConfig {\n  /** Valor mínimo permitido (default: 0) */\n  min?: number;\n  /** Valor máximo permitido */\n  max?: number;\n  /** Mensagem de erro para valor abaixo do mínimo */\n  minError?: string;\n  /** Mensagem de erro para valor acima do máximo */\n  maxError?: string;\n  /** Permitir valores negativos (default: false) */\n  allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const POWER_VALIDATION_CONFIG: PowerValidationConfig = {\n  min: 0,\n  minError: \"Power cannot be negative\",\n  allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de potência\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validatePower(100);                    // { valid: true, errors: [] }\n * validatePower(-5);                     // { valid: false, errors: ['Power cannot be negative'] }\n * validatePower(-5, { allowNegative: true }); // { valid: true, errors: [] }\n * validatePower(1000, { max: 500 });     // { valid: false, errors: ['Value must be at most 500'] }\n */\nexport function validatePower(\n  value: unknown,\n  config: PowerValidationConfig = POWER_VALIDATION_CONFIG,\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Must be a number\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return {\n      valid: false,\n      errors: [\"Value must be a finite number\"],\n    };\n  }\n\n  // Merge with defaults\n  const effectiveConfig = { ...POWER_VALIDATION_CONFIG, ...config };\n\n  // Check negative\n  if (!effectiveConfig.allowNegative && value < 0) {\n    errors.push(effectiveConfig.minError || \"Power cannot be negative\");\n  }\n\n  // Check min (if allowNegative is true and min is set)\n  if (\n    effectiveConfig.allowNegative &&\n    effectiveConfig.min !== undefined &&\n    value < effectiveConfig.min\n  ) {\n    errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n  }\n\n  // Check max\n  if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n    errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors,\n  };\n}\n\n/**\n * Verifica se valor de potência é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidPower(100);  // true\n * isValidPower(-5);   // false\n */\nexport function isValidPower(\n  value: unknown,\n  config?: PowerValidationConfig,\n): boolean {\n  return validatePower(value, config).valid;\n}\n","/**\n * Pressure Role - Validate Pillar\n *\n * Validação de valores de pressão.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validatePressure, isValidPressure } from '@attrx/role-morphic/pressure/validate';\n *\n * validatePressure(100);   // { valid: true, errors: [] }\n * validatePressure(-5);    // { valid: false, errors: ['Pressure cannot be negative'] }\n * isValidPressure(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface PressureValidationConfig {\n  /** Valor mínimo permitido (default: 0) */\n  min?: number;\n  /** Valor máximo permitido */\n  max?: number;\n  /** Mensagem de erro para valor abaixo do mínimo */\n  minError?: string;\n  /** Mensagem de erro para valor acima do máximo */\n  maxError?: string;\n  /** Permitir valores negativos (default: false) */\n  allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const PRESSURE_VALIDATION_CONFIG: PressureValidationConfig = {\n  min: 0,\n  minError: \"Pressure cannot be negative\",\n  allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de pressão\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validatePressure(100);                    // { valid: true, errors: [] }\n * validatePressure(-5);                     // { valid: false, errors: ['Pressure cannot be negative'] }\n * validatePressure(-5, { allowNegative: true }); // { valid: true, errors: [] }\n * validatePressure(1000, { max: 500 });     // { valid: false, errors: ['Value must be at most 500'] }\n */\nexport function validatePressure(\n  value: unknown,\n  config: PressureValidationConfig = PRESSURE_VALIDATION_CONFIG,\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Must be a number\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return {\n      valid: false,\n      errors: [\"Value must be a finite number\"],\n    };\n  }\n\n  // Merge with defaults\n  const effectiveConfig = { ...PRESSURE_VALIDATION_CONFIG, ...config };\n\n  // Check negative\n  if (!effectiveConfig.allowNegative && value < 0) {\n    errors.push(effectiveConfig.minError || \"Pressure cannot be negative\");\n  }\n\n  // Check min (if allowNegative is true and min is set)\n  if (\n    effectiveConfig.allowNegative &&\n    effectiveConfig.min !== undefined &&\n    value < effectiveConfig.min\n  ) {\n    errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n  }\n\n  // Check max\n  if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n    errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors,\n  };\n}\n\n/**\n * Verifica se valor de pressão é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidPressure(100);  // true\n * isValidPressure(-5);   // false\n */\nexport function isValidPressure(\n  value: unknown,\n  config?: PressureValidationConfig,\n): boolean {\n  return validatePressure(value, config).valid;\n}\n","/**\n * Frequency Role - Validate Pillar\n *\n * Validação de valores de frequência.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateFrequency, isValidFrequency } from '@attrx/role-morphic/frequency/validate';\n *\n * validateFrequency(100);   // { valid: true, errors: [] }\n * validateFrequency(-5);    // { valid: false, errors: ['Frequency cannot be negative'] }\n * isValidFrequency(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface FrequencyValidationConfig {\n  /** Valor mínimo permitido (default: 0) */\n  min?: number;\n  /** Valor máximo permitido */\n  max?: number;\n  /** Mensagem de erro para valor abaixo do mínimo */\n  minError?: string;\n  /** Mensagem de erro para valor acima do máximo */\n  maxError?: string;\n  /** Permitir valores negativos (default: false) */\n  allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const FREQUENCY_VALIDATION_CONFIG: FrequencyValidationConfig = {\n  min: 0,\n  minError: \"Frequency cannot be negative\",\n  allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de frequência\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validateFrequency(100);                    // { valid: true, errors: [] }\n * validateFrequency(-5);                     // { valid: false, errors: ['Frequency cannot be negative'] }\n * validateFrequency(-5, { allowNegative: true }); // { valid: true, errors: [] }\n * validateFrequency(1000, { max: 500 });     // { valid: false, errors: ['Value must be at most 500'] }\n */\nexport function validateFrequency(\n  value: unknown,\n  config: FrequencyValidationConfig = FREQUENCY_VALIDATION_CONFIG,\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Must be a number\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return {\n      valid: false,\n      errors: [\"Value must be a finite number\"],\n    };\n  }\n\n  // Merge with defaults\n  const effectiveConfig = { ...FREQUENCY_VALIDATION_CONFIG, ...config };\n\n  // Check negative\n  if (!effectiveConfig.allowNegative && value < 0) {\n    errors.push(effectiveConfig.minError || \"Frequency cannot be negative\");\n  }\n\n  // Check min (if allowNegative is true and min is set)\n  if (\n    effectiveConfig.allowNegative &&\n    effectiveConfig.min !== undefined &&\n    value < effectiveConfig.min\n  ) {\n    errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n  }\n\n  // Check max\n  if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n    errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors,\n  };\n}\n\n/**\n * Verifica se valor de frequência é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidFrequency(100);  // true\n * isValidFrequency(-5);   // false\n */\nexport function isValidFrequency(\n  value: unknown,\n  config?: FrequencyValidationConfig,\n): boolean {\n  return validateFrequency(value, config).valid;\n}\n","/**\n * Angle Role - Validate Pillar\n *\n * Validação de valores de ângulo.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * Nota: Ângulos podem ser negativos (rotação anti-horária) e maiores que 360° (múltiplas voltas).\n *\n * @example\n * import { validateAngle, isValidAngle } from '@attrx/role-morphic/angle/validate';\n *\n * validateAngle(90);    // { valid: true, errors: [] }\n * validateAngle(-45);   // { valid: true, errors: [] }\n * validateAngle(720);   // { valid: true, errors: [] }\n * isValidAngle(90);     // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface AngleValidationConfig {\n  /** Valor mínimo permitido */\n  min?: number;\n  /** Valor máximo permitido */\n  max?: number;\n  /** Mensagem de erro para valor abaixo do mínimo */\n  minError?: string;\n  /** Mensagem de erro para valor acima do máximo */\n  maxError?: string;\n}\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\n/** Ângulos não têm restrições por padrão - podem ser negativos e > 360° */\nexport const ANGLE_VALIDATION_CONFIG: AngleValidationConfig = {};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de ângulo\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validateAngle(90);                    // { valid: true, errors: [] }\n * validateAngle(-45);                   // { valid: true, errors: [] }\n * validateAngle(90, { max: 180 });      // { valid: true, errors: [] }\n * validateAngle(270, { max: 180 });     // { valid: false, errors: ['...'] }\n */\nexport function validateAngle(\n  value: unknown,\n  config: AngleValidationConfig = ANGLE_VALIDATION_CONFIG,\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Must be a number\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return {\n      valid: false,\n      errors: [\"Value must be a finite number\"],\n    };\n  }\n\n  // Check min\n  if (config.min !== undefined && value < config.min) {\n    errors.push(config.minError || `Value must be at least ${config.min}`);\n  }\n\n  // Check max\n  if (config.max !== undefined && value > config.max) {\n    errors.push(config.maxError || `Value must be at most ${config.max}`);\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors,\n  };\n}\n\n/**\n * Verifica se valor de ângulo é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidAngle(90);   // true\n * isValidAngle(-45);  // true\n * isValidAngle(NaN);  // false\n */\nexport function isValidAngle(\n  value: unknown,\n  config?: AngleValidationConfig,\n): boolean {\n  return validateAngle(value, config).valid;\n}\n","/**\n * Time Role - Validate Pillar\n *\n * Validação de valores de tempo/duração.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateTime, isValidTime } from '@attrx/role-morphic/time/validate';\n *\n * validateTime(100);   // { valid: true, errors: [] }\n * validateTime(-5);    // { valid: false, errors: ['Time cannot be negative'] }\n * isValidTime(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface TimeValidationConfig {\n  /** Valor mínimo permitido (default: 0) */\n  min?: number;\n  /** Valor máximo permitido */\n  max?: number;\n  /** Mensagem de erro para valor abaixo do mínimo */\n  minError?: string;\n  /** Mensagem de erro para valor acima do máximo */\n  maxError?: string;\n  /** Permitir valores negativos (default: false) */\n  allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const TIME_VALIDATION_CONFIG: TimeValidationConfig = {\n  min: 0,\n  minError: \"Time cannot be negative\",\n  allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de tempo\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validateTime(100);                    // { valid: true, errors: [] }\n * validateTime(-5);                     // { valid: false, errors: ['Time cannot be negative'] }\n * validateTime(-5, { allowNegative: true }); // { valid: true, errors: [] }\n */\nexport function validateTime(\n  value: unknown,\n  config: TimeValidationConfig = TIME_VALIDATION_CONFIG,\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Must be a number\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return {\n      valid: false,\n      errors: [\"Value must be a finite number\"],\n    };\n  }\n\n  // Merge with defaults\n  const effectiveConfig = { ...TIME_VALIDATION_CONFIG, ...config };\n\n  // Check negative\n  if (!effectiveConfig.allowNegative && value < 0) {\n    errors.push(effectiveConfig.minError || \"Time cannot be negative\");\n  }\n\n  // Check min (if allowNegative is true and min is set)\n  if (\n    effectiveConfig.allowNegative &&\n    effectiveConfig.min !== undefined &&\n    value < effectiveConfig.min\n  ) {\n    errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n  }\n\n  // Check max\n  if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n    errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors,\n  };\n}\n\n/**\n * Verifica se valor de tempo é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidTime(100);  // true\n * isValidTime(-5);   // false\n */\nexport function isValidTime(\n  value: unknown,\n  config?: TimeValidationConfig,\n): boolean {\n  return validateTime(value, config).valid;\n}\n","/**\n * Digital Role - Validate Pillar\n *\n * Validação de valores de armazenamento digital.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateDigital, isValidDigital } from '@attrx/role-morphic/digital/validate';\n *\n * validateDigital(100);   // { valid: true, errors: [] }\n * validateDigital(-5);    // { valid: false, errors: ['Digital storage cannot be negative'] }\n * isValidDigital(100);    // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface DigitalValidationConfig {\n  /** Valor mínimo permitido (default: 0) */\n  min?: number;\n  /** Valor máximo permitido */\n  max?: number;\n  /** Mensagem de erro para valor abaixo do mínimo */\n  minError?: string;\n  /** Mensagem de erro para valor acima do máximo */\n  maxError?: string;\n  /** Permitir valores negativos (default: false) */\n  allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const DIGITAL_VALIDATION_CONFIG: DigitalValidationConfig = {\n  min: 0,\n  minError: \"Digital storage cannot be negative\",\n  allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de armazenamento digital\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validateDigital(100);                    // { valid: true, errors: [] }\n * validateDigital(-5);                     // { valid: false, errors: ['Digital storage cannot be negative'] }\n * validateDigital(-5, { allowNegative: true }); // { valid: true, errors: [] }\n */\nexport function validateDigital(\n  value: unknown,\n  config: DigitalValidationConfig = DIGITAL_VALIDATION_CONFIG,\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Must be a number\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return {\n      valid: false,\n      errors: [\"Value must be a finite number\"],\n    };\n  }\n\n  // Merge with defaults\n  const effectiveConfig = { ...DIGITAL_VALIDATION_CONFIG, ...config };\n\n  // Check negative\n  if (!effectiveConfig.allowNegative && value < 0) {\n    errors.push(effectiveConfig.minError || \"Digital storage cannot be negative\");\n  }\n\n  // Check min (if allowNegative is true and min is set)\n  if (\n    effectiveConfig.allowNegative &&\n    effectiveConfig.min !== undefined &&\n    value < effectiveConfig.min\n  ) {\n    errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n  }\n\n  // Check max\n  if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n    errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors,\n  };\n}\n\n/**\n * Verifica se valor de armazenamento digital é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidDigital(100);  // true\n * isValidDigital(-5);   // false\n */\nexport function isValidDigital(\n  value: unknown,\n  config?: DigitalValidationConfig,\n): boolean {\n  return validateDigital(value, config).valid;\n}\n","/**\n * Color Role - Validate Pillar\n *\n * Validação de valores de cor.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateColor, isValidColor } from '@attrx/role-morphic/color/validate';\n *\n * validateColor('hex', '#ff0000');           // { valid: true, errors: [] }\n * validateColor('rgb_object', { r: 255, g: 0, b: 0 }); // { valid: true, errors: [] }\n * validateColor('hex', 'invalid');           // { valid: false, errors: [...] }\n */\n\nimport type { ColorVariant, RGBA, ColorRgbObject, ColorHslObject } from \"./types\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ValidationResult = { valid: boolean; errors: string[] };\n\n// =============================================================================\n// REGEX PATTERNS\n// =============================================================================\n\nconst HEX_3_REGEX = /^#?[0-9a-f]{3}$/i;\nconst HEX_4_REGEX = /^#?[0-9a-f]{4}$/i;\nconst HEX_6_REGEX = /^#?[0-9a-f]{6}$/i;\nconst HEX_8_REGEX = /^#?[0-9a-f]{8}$/i;\nconst RGB_STRING_REGEX = /^rgba?\\s*\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(,\\s*[\\d.]+\\s*)?\\)$/i;\nconst HSL_STRING_REGEX = /^hsla?\\s*\\(\\s*[\\d.]+\\s*,\\s*[\\d.]+%?\\s*,\\s*[\\d.]+%?\\s*(,\\s*[\\d.]+\\s*)?\\)$/i;\n\n// =============================================================================\n// VALIDATE BY VARIANT\n// =============================================================================\n\n/**\n * Valida valor hex\n */\nexport function validateHex(value: unknown): ValidationResult {\n  const errors: string[] = [];\n\n  if (typeof value !== \"string\") {\n    errors.push(\"Hex color must be a string\");\n    return { valid: false, errors };\n  }\n\n  const trimmed = value.trim();\n\n  if (\n    !HEX_3_REGEX.test(trimmed) &&\n    !HEX_4_REGEX.test(trimmed) &&\n    !HEX_6_REGEX.test(trimmed) &&\n    !HEX_8_REGEX.test(trimmed)\n  ) {\n    errors.push(\"Invalid hex color format\");\n    return { valid: false, errors };\n  }\n\n  return { valid: true, errors: [] };\n}\n\n/**\n * Valida valor RGB object\n */\nexport function validateRgbObject(value: unknown): ValidationResult {\n  const errors: string[] = [];\n\n  if (typeof value !== \"object\" || value === null) {\n    errors.push(\"RGB object must be an object\");\n    return { valid: false, errors };\n  }\n\n  const obj = value as Record<string, unknown>;\n\n  // Verifica propriedades obrigatórias\n  if (typeof obj.r !== \"number\") {\n    errors.push(\"RGB object must have numeric 'r' property\");\n  }\n  if (typeof obj.g !== \"number\") {\n    errors.push(\"RGB object must have numeric 'g' property\");\n  }\n  if (typeof obj.b !== \"number\") {\n    errors.push(\"RGB object must have numeric 'b' property\");\n  }\n\n  if (errors.length > 0) {\n    return { valid: false, errors };\n  }\n\n  const { r, g, b, a } = obj as unknown as ColorRgbObject;\n\n  // Valida ranges\n  if (r < 0 || r > 255) {\n    errors.push(\"RGB 'r' must be between 0 and 255\");\n  }\n  if (g < 0 || g > 255) {\n    errors.push(\"RGB 'g' must be between 0 and 255\");\n  }\n  if (b < 0 || b > 255) {\n    errors.push(\"RGB 'b' must be between 0 and 255\");\n  }\n  if (a !== undefined && (typeof a !== \"number\" || a < 0 || a > 1)) {\n    errors.push(\"RGB 'a' must be a number between 0 and 1\");\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Valida valor RGB string\n */\nexport function validateRgbString(value: unknown): ValidationResult {\n  const errors: string[] = [];\n\n  if (typeof value !== \"string\") {\n    errors.push(\"RGB string must be a string\");\n    return { valid: false, errors };\n  }\n\n  const trimmed = value.trim();\n\n  if (!RGB_STRING_REGEX.test(trimmed)) {\n    errors.push(\"Invalid RGB string format\");\n    return { valid: false, errors };\n  }\n\n  return { valid: true, errors: [] };\n}\n\n/**\n * Valida valor HSL object\n */\nexport function validateHslObject(value: unknown): ValidationResult {\n  const errors: string[] = [];\n\n  if (typeof value !== \"object\" || value === null) {\n    errors.push(\"HSL object must be an object\");\n    return { valid: false, errors };\n  }\n\n  const obj = value as Record<string, unknown>;\n\n  // Verifica propriedades obrigatórias\n  if (typeof obj.h !== \"number\") {\n    errors.push(\"HSL object must have numeric 'h' property\");\n  }\n  if (typeof obj.s !== \"number\") {\n    errors.push(\"HSL object must have numeric 's' property\");\n  }\n  if (typeof obj.l !== \"number\") {\n    errors.push(\"HSL object must have numeric 'l' property\");\n  }\n\n  if (errors.length > 0) {\n    return { valid: false, errors };\n  }\n\n  const { h, s, l, a } = obj as unknown as ColorHslObject;\n\n  // Valida ranges\n  if (h < 0 || h > 360) {\n    errors.push(\"HSL 'h' must be between 0 and 360\");\n  }\n  if (s < 0 || s > 100) {\n    errors.push(\"HSL 's' must be between 0 and 100\");\n  }\n  if (l < 0 || l > 100) {\n    errors.push(\"HSL 'l' must be between 0 and 100\");\n  }\n  if (a !== undefined && (typeof a !== \"number\" || a < 0 || a > 1)) {\n    errors.push(\"HSL 'a' must be a number between 0 and 1\");\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Valida valor HSL string\n */\nexport function validateHslString(value: unknown): ValidationResult {\n  const errors: string[] = [];\n\n  if (typeof value !== \"string\") {\n    errors.push(\"HSL string must be a string\");\n    return { valid: false, errors };\n  }\n\n  const trimmed = value.trim();\n\n  if (!HSL_STRING_REGEX.test(trimmed)) {\n    errors.push(\"Invalid HSL string format\");\n    return { valid: false, errors };\n  }\n\n  return { valid: true, errors: [] };\n}\n\n// =============================================================================\n// MAIN VALIDATE\n// =============================================================================\n\n/**\n * Valida valor de cor para uma variante específica\n *\n * @param variant - Variante a validar\n * @param value - Valor a validar\n * @returns Resultado da validação\n *\n * @example\n * validateColor('hex', '#ff0000');\n * // { valid: true, errors: [] }\n *\n * validateColor('hex', 'invalid');\n * // { valid: false, errors: ['Invalid hex color format'] }\n */\nexport function validateColor(variant: ColorVariant, value: unknown): ValidationResult {\n  switch (variant) {\n    case \"hex\":\n      return validateHex(value);\n    case \"rgb_object\":\n      return validateRgbObject(value);\n    case \"rgb_string\":\n      return validateRgbString(value);\n    case \"hsl_object\":\n      return validateHslObject(value);\n    case \"hsl_string\":\n      return validateHslString(value);\n    default:\n      return { valid: false, errors: [`Unknown color variant: ${variant}`] };\n  }\n}\n\n/**\n * Verifica se valor é válido para uma variante específica (retorna boolean)\n *\n * @example\n * isValidColorVariant('hex', '#ff0000');  // true\n * isValidColorVariant('hex', 'invalid');  // false\n */\nexport function isValidColorVariant(variant: ColorVariant, value: unknown): boolean {\n  return validateColor(variant, value).valid;\n}\n\n/**\n * Verifica se variante existe\n */\nexport function hasColorVariant(variant: string): variant is ColorVariant {\n  return (\n    variant === \"hex\" ||\n    variant === \"rgb_object\" ||\n    variant === \"rgb_string\" ||\n    variant === \"hsl_object\" ||\n    variant === \"hsl_string\"\n  );\n}\n\n/**\n * Lista de variantes disponíveis\n */\nexport const COLOR_VARIANTS: ColorVariant[] = [\n  \"hex\",\n  \"rgb_object\",\n  \"rgb_string\",\n  \"hsl_object\",\n  \"hsl_string\",\n];\n","/**\n * Date Role - Validate Pillar\n *\n * Validação de valores de data.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateDate, isValidDate } from '@attrx/role-morphic/date/validate';\n *\n * validateDate('iso', '2024-12-05T19:30:00.000Z');  // { valid: true, errors: [] }\n * validateDate('timestamp', 1733425800000);         // { valid: true, errors: [] }\n * validateDate('epoch', 1733425800);                // { valid: true, errors: [] }\n */\n\nimport type { DateVariant } from \"./types\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ValidationResult = { valid: boolean; errors: string[] };\n\n// =============================================================================\n// REGEX PATTERNS\n// =============================================================================\n\nconst ISO_DATE_TIME_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\nconst ISO_DATE_ONLY_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n// =============================================================================\n// VALIDATE BY VARIANT\n// =============================================================================\n\n/**\n * Valida valor ISO 8601\n */\nexport function validateIso(value: unknown): ValidationResult {\n  const errors: string[] = [];\n\n  if (typeof value !== \"string\") {\n    errors.push(\"ISO date must be a string\");\n    return { valid: false, errors };\n  }\n\n  const trimmed = value.trim();\n\n  // Verifica se é um formato ISO válido\n  if (!ISO_DATE_TIME_REGEX.test(trimmed) && !ISO_DATE_ONLY_REGEX.test(trimmed)) {\n    errors.push(\"Invalid ISO 8601 format\");\n    return { valid: false, errors };\n  }\n\n  // Verifica se a data é parseável\n  const date = new Date(trimmed);\n  if (isNaN(date.getTime())) {\n    errors.push(\"Invalid date value\");\n    return { valid: false, errors };\n  }\n\n  return { valid: true, errors: [] };\n}\n\n/**\n * Valida valor timestamp (milissegundos)\n */\nexport function validateTimestamp(value: unknown): ValidationResult {\n  const errors: string[] = [];\n\n  if (typeof value !== \"number\") {\n    errors.push(\"Timestamp must be a number\");\n    return { valid: false, errors };\n  }\n\n  if (!Number.isFinite(value)) {\n    errors.push(\"Timestamp must be a finite number\");\n    return { valid: false, errors };\n  }\n\n  if (!Number.isInteger(value)) {\n    errors.push(\"Timestamp must be an integer\");\n    return { valid: false, errors };\n  }\n\n  return { valid: true, errors: [] };\n}\n\n/**\n * Valida valor epoch (segundos)\n */\nexport function validateEpoch(value: unknown): ValidationResult {\n  const errors: string[] = [];\n\n  if (typeof value !== \"number\") {\n    errors.push(\"Epoch must be a number\");\n    return { valid: false, errors };\n  }\n\n  if (!Number.isFinite(value)) {\n    errors.push(\"Epoch must be a finite number\");\n    return { valid: false, errors };\n  }\n\n  if (!Number.isInteger(value)) {\n    errors.push(\"Epoch must be an integer\");\n    return { valid: false, errors };\n  }\n\n  return { valid: true, errors: [] };\n}\n\n// =============================================================================\n// MAIN VALIDATE\n// =============================================================================\n\n/**\n * Valida valor de data para uma variante específica\n *\n * @param variant - Variante a validar (\"iso\", \"timestamp\", \"epoch\")\n * @param value - Valor a validar\n * @returns Resultado da validação\n *\n * @example\n * validateDate('iso', '2024-12-05T19:30:00.000Z');\n * // { valid: true, errors: [] }\n *\n * validateDate('iso', 'invalid');\n * // { valid: false, errors: ['Invalid ISO 8601 format'] }\n */\nexport function validateDate(variant: DateVariant, value: unknown): ValidationResult {\n  switch (variant) {\n    case \"iso\":\n      return validateIso(value);\n    case \"timestamp\":\n      return validateTimestamp(value);\n    case \"epoch\":\n      return validateEpoch(value);\n    default:\n      return { valid: false, errors: [`Unknown date variant: ${variant}`] };\n  }\n}\n\n/**\n * Verifica se valor é válido (retorna boolean)\n *\n * @example\n * isValidDate('iso', '2024-12-05T19:30:00.000Z');  // true\n * isValidDate('iso', 'invalid');                   // false\n */\nexport function isValidDate(variant: DateVariant, value: unknown): boolean {\n  return validateDate(variant, value).valid;\n}\n\n/**\n * Verifica se variante existe\n */\nexport function hasDateVariant(variant: string): variant is DateVariant {\n  return variant === \"iso\" || variant === \"timestamp\" || variant === \"epoch\";\n}\n","/**\n * Currency Role - Validate Pillar\n *\n * Validação semântica de valores monetários.\n * Zero dependências externas - pode ser usado standalone.\n *\n * Currency valida o VALOR NUMÉRICO, não o tipo de moeda.\n * O código da moeda é metadata, usado apenas para formatação.\n *\n * @example\n * import { validateCurrency, isValidCurrency } from '@attrx/role-morphic/currency/validate';\n *\n * validateCurrency(100.50);              // { valid: true, errors: [] }\n * validateCurrency(-50);                 // { valid: false, errors: ['Currency value cannot be negative'] }\n * validateCurrency(100.999, { decimals: 2 }); // { valid: false, errors: ['...too many decimal places'] }\n * isValidCurrency(100.50);               // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: string[];\n}\n\nexport interface CurrencyValidationConfig {\n  /** Valor mínimo permitido (default: 0) */\n  min?: number;\n  /** Valor máximo permitido */\n  max?: number;\n  /** Máximo de casas decimais (default: sem limite) */\n  decimals?: number;\n  /** Permite valores negativos? (default: false) */\n  allowNegative?: boolean;\n  /** Mensagem de erro para min */\n  minError?: string;\n  /** Mensagem de erro para max */\n  maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para currency\n */\nexport const CURRENCY_VALIDATION_CONFIG: CurrencyValidationConfig = {\n  min: 0,\n  allowNegative: false,\n  minError: \"Currency value cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor monetário\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateCurrency(100.50);                      // { valid: true, errors: [] }\n * validateCurrency(-50);                         // { valid: false, errors: ['Currency value cannot be negative'] }\n * validateCurrency(100.999, { decimals: 2 });    // { valid: false, errors: ['Value has too many decimal places (max: 2)'] }\n * validateCurrency(1000000, { max: 10000 });     // { valid: false, errors: ['Value must be at most 10000'] }\n * validateCurrency(-50, { allowNegative: true }); // { valid: true, errors: [] }\n */\nexport function validateCurrency(\n  value: unknown,\n  config: CurrencyValidationConfig = CURRENCY_VALIDATION_CONFIG\n): ValidationResult {\n  const errors: string[] = [];\n\n  // Type check\n  if (typeof value !== \"number\") {\n    return { valid: false, errors: [\"Value must be a number\"] };\n  }\n\n  // Finite check\n  if (!Number.isFinite(value)) {\n    return { valid: false, errors: [\"Value must be finite\"] };\n  }\n\n  // Negative check (se não permitido)\n  if (!config.allowNegative && value < 0) {\n    const msg = config.minError ?? \"Currency value cannot be negative\";\n    errors.push(msg);\n  }\n\n  // Min check (se allowNegative, pode ter min customizado)\n  if (config.allowNegative && config.min !== undefined && value < config.min) {\n    const msg = config.minError ?? `Value must be at least ${config.min}`;\n    errors.push(msg);\n  }\n\n  // Max check\n  if (config.max !== undefined && value > config.max) {\n    const msg = config.maxError ?? `Value must be at most ${config.max}`;\n    errors.push(msg);\n  }\n\n  // Decimals check\n  if (config.decimals !== undefined) {\n    const decimalPlaces = countDecimalPlaces(value);\n    if (decimalPlaces > config.decimals) {\n      errors.push(\n        `Value has too many decimal places (max: ${config.decimals})`\n      );\n    }\n  }\n\n  return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor monetário é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidCurrency(100.50);   // true\n * isValidCurrency(-50);      // false\n */\nexport function isValidCurrency(\n  value: unknown,\n  config: CurrencyValidationConfig = CURRENCY_VALIDATION_CONFIG\n): boolean {\n  return validateCurrency(value, config).valid;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/**\n * Conta casas decimais de um número\n */\nfunction countDecimalPlaces(value: number): number {\n  if (Number.isInteger(value)) {\n    return 0;\n  }\n\n  const str = String(value);\n  const decimalIndex = str.indexOf(\".\");\n\n  if (decimalIndex === -1) {\n    return 0;\n  }\n\n  return str.length - decimalIndex - 1;\n}\n"]}