import { Directive, input } from '@angular/core'; import { BrnField } from '@spartan-ng/brain/field'; import { classes } from '@spartan-ng/styles/utils'; import { cva, VariantProps } from 'class-variance-authority'; const fieldVariants = cva( 'data-[matches-spartan-invalid=true]:text-destructive gap-1.5 group/field flex', { variants: { orientation: { vertical: 'flex-col [&>.sr-only]:w-auto', horizontal: [ 'flex-row items-center', '*:data-[slot=field-label]:flex-auto', 'has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px', ], responsive: [ 'flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto [&>.sr-only]:w-auto', '@md/field-group:*:data-[slot=field-label]:flex-auto', '@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px', ], }, }, defaultVariants: { orientation: 'vertical', }, }, ); export type FieldVariants = VariantProps; @Directive({ selector: '[hlmField],hlm-field', hostDirectives: [{ directive: BrnField, inputs: ['data-invalid', 'forceInvalid'] }], host: { role: 'group', 'data-slot': 'field', '[attr.data-orientation]': 'orientation()', }, }) export class HlmField { public readonly orientation = input('vertical'); constructor() { classes(() => fieldVariants({ orientation: this.orientation() })); } }