ngx-com 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -920,7 +920,7 @@ class ComFormField {
920
920
  <ng-content select="[comHint][align='end']" />
921
921
  </div>
922
922
  </div>
923
- `, isInline: true, styles: ["com-form-field.com-form-field--has-label:not(.com-form-field--floating) input::placeholder,com-form-field.com-form-field--has-label:not(.com-form-field--floating) textarea::placeholder{color:transparent}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-dropdown .text-placeholder{display:none}com-form-field com-dropdown{display:block;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
923
+ `, isInline: true, styles: ["com-form-field.com-form-field--has-label:not(.com-form-field--floating) input::placeholder,com-form-field.com-form-field--has-label:not(.com-form-field--floating) textarea::placeholder{color:transparent}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-dropdown .text-placeholder{display:none}com-form-field com-dropdown{display:block;width:100%}com-form-field com-datepicker{display:block;width:100%}com-form-field com-date-range-picker{display:block;width:100%}com-form-field com-time-picker{display:block;width:100%}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-datepicker input::placeholder{color:transparent}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-date-range-picker input::placeholder{color:transparent}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-time-picker span[aria-hidden],com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-time-picker button{visibility:hidden}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
924
924
  }
925
925
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComFormField, decorators: [{
926
926
  type: Component,
@@ -963,7 +963,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
963
963
  '[class.com-form-field--error]': 'hasError()',
964
964
  '[class.com-form-field--floating]': 'shouldLabelFloat()',
965
965
  '[class.com-form-field--has-label]': '!!labelChild()',
966
- }, styles: ["com-form-field.com-form-field--has-label:not(.com-form-field--floating) input::placeholder,com-form-field.com-form-field--has-label:not(.com-form-field--floating) textarea::placeholder{color:transparent}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-dropdown .text-placeholder{display:none}com-form-field com-dropdown{display:block;width:100%}\n"] }]
966
+ }, styles: ["com-form-field.com-form-field--has-label:not(.com-form-field--floating) input::placeholder,com-form-field.com-form-field--has-label:not(.com-form-field--floating) textarea::placeholder{color:transparent}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-dropdown .text-placeholder{display:none}com-form-field com-dropdown{display:block;width:100%}com-form-field com-datepicker{display:block;width:100%}com-form-field com-date-range-picker{display:block;width:100%}com-form-field com-time-picker{display:block;width:100%}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-datepicker input::placeholder{color:transparent}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-date-range-picker input::placeholder{color:transparent}com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-time-picker span[aria-hidden],com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-time-picker button{visibility:hidden}\n"] }]
967
967
  }], ctorParameters: () => [], propDecorators: { control: [{ type: i0.ContentChild, args: [i0.forwardRef(() => FormFieldControl), { isSignal: true }] }], inputDirective: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ComInput), { isSignal: true }] }], labelChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ComLabel), { isSignal: true }] }], hintChildren: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ComHint), { isSignal: true }] }], errorChildren: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ComError), { isSignal: true }] }], prefixChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ComPrefix), { isSignal: true }] }], suffixChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ComSuffix), { isSignal: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], floatLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "floatLabel", required: false }] }], hideRequiredMarker: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideRequiredMarker", required: false }] }], subscriptSizing: [{ type: i0.Input, args: [{ isSignal: true, alias: "subscriptSizing", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
968
968
 
969
969
  // Public API for the form-field component
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-com-components-form-field.mjs","sources":["../../../projects/com/components/form-field/form-field-control.ts","../../../projects/com/components/form-field/label.directive.ts","../../../projects/com/components/form-field/form-field.variants.ts","../../../projects/com/components/form-field/hint.directive.ts","../../../projects/com/components/form-field/error.directive.ts","../../../projects/com/components/form-field/prefix.directive.ts","../../../projects/com/components/form-field/suffix.directive.ts","../../../projects/com/components/form-field/error-state-matcher.ts","../../../projects/com/components/form-field/input.directive.ts","../../../projects/com/components/form-field/form-field-defaults.ts","../../../projects/com/components/form-field/form-field.component.ts","../../../projects/com/components/form-field/index.ts","../../../projects/com/components/form-field/ngx-com-components-form-field.ts"],"sourcesContent":["import type { Signal } from '@angular/core';\nimport type { NgControl } from '@angular/forms';\n\n\n/**\n * Contract that any control inside a form field must implement.\n *\n * This allows the form field to read state from any inner control\n * (input, textarea, custom controls) without knowing implementation details.\n *\n * @example Implementing for a custom phone input\n * ```ts\n * @Directive({\n * selector: 'com-phone-input',\n * providers: [{ provide: FormFieldControl, useExisting: PhoneInputComponent }],\n * })\n * export class PhoneInputComponent extends FormFieldControl<string> {\n * // ... implement all abstract members\n * }\n * ```\n */\nexport abstract class FormFieldControl<T = unknown> {\n /** The NgControl bound to this control (if any). */\n abstract readonly ngControl: NgControl | null;\n\n /** Whether the control is focused. */\n abstract readonly focused: Signal<boolean>;\n\n /** Whether the label should float (focused or non-empty). */\n abstract readonly shouldLabelFloat: Signal<boolean>;\n\n /** Whether the control is required. */\n abstract readonly required: Signal<boolean>;\n\n /** Whether the control is disabled. */\n abstract readonly disabled: Signal<boolean>;\n\n /** Whether the control is in an error state. */\n abstract readonly errorState: Signal<boolean>;\n\n /** Unique ID for the control element. */\n abstract readonly id: Signal<string>;\n\n /** Structured validation errors (Signal Forms path). */\n readonly errors?: Signal<readonly unknown[] | null>;\n\n /** Called when the form field container is clicked. */\n abstract onContainerClick(event: MouseEvent): void;\n}\n","import { Directive, signal } from '@angular/core';\nimport type { Signal } from '@angular/core';\n\n/** Auto-incrementing ID counter. */\nlet nextId = 0;\n\n/**\n * Directive to mark the label element inside a form field.\n *\n * The form field automatically associates this label with the inner control\n * and positions it appropriately based on appearance and float state.\n *\n * @example\n * ```html\n * <com-form-field>\n * <label comLabel>Email address</label>\n * <input comInput formControlName=\"email\" />\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comLabel]',\n exportAs: 'comLabel',\n host: {\n '[attr.for]': 'forId()',\n '[id]': 'labelId',\n },\n})\nexport class ComLabel {\n readonly labelId: string = `com-label-${nextId++}`;\n\n private readonly _forId = signal<string | null>(null);\n readonly forId: Signal<string | null> = this._forId.asReadonly();\n\n /** Sets the `for` attribute to link to the control. Called by form field. */\n setForId(id: string): void {\n this._forId.set(id);\n }\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\n\nexport type FormFieldAppearance = 'fill' | 'outline';\nexport type FormFieldColor = 'primary' | 'accent' | 'warn';\nexport type FormFieldFloatLabel = 'auto' | 'always';\nexport type FormFieldSubscriptSizing = 'fixed' | 'dynamic';\n\n/**\n * CVA variants for the form field wrapper.\n *\n * @tokens `--color-foreground`\n */\nexport const formFieldVariants: (props?: {\n disabled?: boolean | null | undefined;\n}) => string = cva(\n ['com-form-field', 'relative block w-full', 'text-foreground'],\n {\n variants: {\n disabled: {\n true: 'pointer-events-none',\n false: '',\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\nexport type FormFieldVariants = VariantProps<typeof formFieldVariants>;\n\n/**\n * CVA variants for the input container (the bordered/filled area).\n *\n * @tokens `--color-input-border`, `--color-input-background`, `--color-primary`,\n * `--color-accent`, `--color-warn`, `--color-ring`, `--color-muted`,\n * `--color-disabled`, `--radius-input`\n */\nexport const formFieldContainerVariants: (props?: {\n appearance?: FormFieldAppearance | null | undefined;\n color?: FormFieldColor | null | undefined;\n focused?: boolean | null | undefined;\n error?: boolean | null | undefined;\n disabled?: boolean | null | undefined;\n}) => string = cva(\n [\n 'com-form-field__container',\n 'relative flex items-center',\n 'w-full min-h-11',\n 'transition-all duration-150',\n 'rounded-input',\n ],\n {\n variants: {\n appearance: {\n outline: [\n 'border border-input-border',\n 'bg-transparent',\n 'mt-2.5', // Reserve space for floating label to prevent height jump\n ],\n fill: [\n 'rounded-b-none',\n 'bg-muted',\n 'border-b-2 border-input-border',\n ],\n },\n color: {\n primary: '',\n accent: '',\n warn: '',\n },\n focused: {\n true: '',\n false: '',\n },\n error: {\n true: '',\n false: '',\n },\n disabled: {\n true: 'bg-disabled border-disabled',\n false: '',\n },\n },\n compoundVariants: [\n // Outline + focused (no error)\n { appearance: 'outline', focused: true, error: false, class: 'border-primary ring-1 ring-primary' },\n { appearance: 'outline', focused: true, error: false, color: 'accent', class: 'border-accent ring-accent' },\n { appearance: 'outline', focused: true, error: false, color: 'warn', class: 'border-warn ring-warn' },\n // Outline + error\n { appearance: 'outline', error: true, class: 'border-warn ring-1 ring-warn' },\n // Fill + focused (no error)\n { appearance: 'fill', focused: true, error: false, class: 'border-b-primary' },\n { appearance: 'fill', focused: true, error: false, color: 'accent', class: 'border-b-accent' },\n { appearance: 'fill', focused: true, error: false, color: 'warn', class: 'border-b-warn' },\n // Fill + error\n { appearance: 'fill', error: true, class: 'border-b-warn' },\n ],\n defaultVariants: {\n appearance: 'outline',\n color: 'primary',\n focused: false,\n error: false,\n disabled: false,\n },\n }\n);\n\nexport type FormFieldContainerVariants = VariantProps<typeof formFieldContainerVariants>;\n\n/**\n * CVA variants for the floating label.\n *\n * @tokens `--color-muted-foreground`, `--color-primary`, `--color-accent`,\n * `--color-warn`, `--color-background`\n */\nexport const formFieldLabelVariants: (props?: {\n appearance?: FormFieldAppearance | null | undefined;\n floating?: boolean | null | undefined;\n color?: FormFieldColor | null | undefined;\n error?: boolean | null | undefined;\n focused?: boolean | null | undefined;\n disabled?: boolean | null | undefined;\n}) => string = cva(\n [\n 'com-form-field__label',\n 'pointer-events-none',\n 'text-muted-foreground text-sm',\n 'origin-top-left',\n 'transition-all duration-200 ease-in-out',\n ],\n {\n variants: {\n appearance: {\n outline: '',\n fill: '',\n },\n floating: {\n // Floating: absolute positioning at container border\n true: 'absolute',\n // Not floating: relative positioning in flex flow (after prefix)\n false: 'relative flex-shrink-0 pl-3',\n },\n color: {\n primary: '',\n accent: '',\n warn: '',\n },\n error: {\n true: 'text-warn',\n false: '',\n },\n focused: {\n true: '',\n false: '',\n },\n disabled: {\n true: 'text-disabled-foreground',\n false: '',\n },\n },\n compoundVariants: [\n // Outline floating (label above border with notch effect)\n {\n appearance: 'outline',\n floating: true,\n class: 'left-2 -top-2.5 scale-75 bg-background px-1',\n },\n // Fill floating\n {\n appearance: 'fill',\n floating: true,\n class: 'left-3 top-1 scale-75 text-xs',\n },\n // Focused + floating colors (no error)\n { floating: true, focused: true, error: false, color: 'primary', class: 'text-primary' },\n { floating: true, focused: true, error: false, color: 'accent', class: 'text-accent' },\n { floating: true, focused: true, error: false, color: 'warn', class: 'text-warn' },\n // Error overrides\n { floating: true, error: true, class: 'text-warn' },\n ],\n defaultVariants: {\n appearance: 'outline',\n floating: false,\n color: 'primary',\n error: false,\n focused: false,\n disabled: false,\n },\n }\n);\n\nexport type FormFieldLabelVariants = VariantProps<typeof formFieldLabelVariants>;\n\n/**\n * CVA variants for the subscript area (hints/errors).\n *\n * @tokens (inherits from children)\n */\nexport const formFieldSubscriptVariants: (props?: {\n sizing?: FormFieldSubscriptSizing | null | undefined;\n}) => string = cva(\n ['com-form-field__subscript', 'text-xs mt-1 px-3'],\n {\n variants: {\n sizing: {\n fixed: 'min-h-5',\n dynamic: 'min-h-0',\n },\n },\n defaultVariants: {\n sizing: 'fixed',\n },\n }\n);\n\nexport type FormFieldSubscriptVariants = VariantProps<typeof formFieldSubscriptVariants>;\n\n/**\n * CVA variants for hint text.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const hintVariants: () => string = cva(['com-form-field__hint', 'text-muted-foreground text-xs']);\n\n/**\n * CVA variants for error messages.\n *\n * @tokens `--color-warn`\n */\nexport const errorVariants: () => string = cva(['com-form-field__error', 'text-warn text-xs']);\n\n/**\n * CVA variants for prefix slot.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const prefixVariants: () => string = cva([\n 'com-form-field__prefix',\n 'flex items-center text-muted-foreground pl-3',\n]);\n\n/**\n * CVA variants for suffix slot.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const suffixVariants: () => string = cva([\n 'com-form-field__suffix',\n 'flex items-center text-muted-foreground pr-3',\n]);\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { hintVariants } from './form-field.variants';\nimport { mergeClasses } from 'ngx-com/utils';\n\n/** Alignment of hint text in the subscript area. */\nexport type HintAlign = 'start' | 'end';\n\n/** Auto-incrementing ID counter. */\nlet nextId = 0;\n\n/**\n * Directive for hint text displayed below the form field.\n *\n * The hint provides supplementary information to help users fill out the field.\n * It is automatically added to the control's `aria-describedby`.\n *\n * @tokens `--color-muted-foreground`\n *\n * @example Basic hint\n * ```html\n * <com-form-field>\n * <label comLabel>Password</label>\n * <input comInput formControlName=\"password\" />\n * <span comHint>At least 8 characters</span>\n * </com-form-field>\n * ```\n *\n * @example Right-aligned hint (e.g., character count)\n * ```html\n * <com-form-field>\n * <label comLabel>Bio</label>\n * <textarea comInput formControlName=\"bio\"></textarea>\n * <span comHint>Keep it brief</span>\n * <span comHint align=\"end\">{{ bioLength }}/150</span>\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comHint]',\n exportAs: 'comHint',\n host: {\n '[id]': 'id',\n '[class]': 'hostClasses()',\n },\n})\nexport class ComHint {\n readonly id: string = `com-hint-${nextId++}`;\n readonly align: InputSignal<HintAlign> = input<HintAlign>('start');\n\n protected readonly hostClasses: Signal<string> = computed(() =>\n mergeClasses(hintVariants(), this.align() === 'end' && 'ml-auto')\n );\n}\n","import { computed, Directive, input, signal } from '@angular/core';\nimport type { AbstractControl } from '@angular/forms';\nimport type { InputSignal, Signal, WritableSignal } from '@angular/core';\nimport { errorVariants } from './form-field.variants';\n\n/** Auto-incrementing ID counter. */\nlet nextId = 0;\n\n/**\n * Directive for error messages displayed below the form field.\n *\n * Errors replace hints when the control is in an error state.\n * Uses `role=\"alert\"` and `aria-live=\"polite\"` for screen reader announcement.\n *\n * The optional `match` input allows showing errors only for specific validation errors.\n *\n * @tokens `--color-warn`\n *\n * @example Basic error\n * ```html\n * <com-form-field>\n * <label comLabel>Email</label>\n * <input comInput formControlName=\"email\" />\n * <span comError>Please enter a valid email</span>\n * </com-form-field>\n * ```\n *\n * @example Matching specific errors\n * ```html\n * <com-form-field>\n * <label comLabel>Email</label>\n * <input comInput formControlName=\"email\" />\n * <span comError match=\"required\">Email is required.</span>\n * <span comError match=\"email\">Must be a valid email address.</span>\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comError]',\n exportAs: 'comError',\n host: {\n '[id]': 'id',\n '[class]': 'errorVariants()',\n '[class.hidden]': '!shouldShow()',\n 'role': 'alert',\n 'aria-live': 'polite',\n },\n})\nexport class ComError {\n readonly id: string = `com-error-${nextId++}`;\n\n /** Reference to the form control (Reactive Forms path). */\n private readonly _control: WritableSignal<AbstractControl | null> = signal(null);\n\n /** Structured errors from Signal Forms. */\n private readonly _signalErrors: WritableSignal<readonly unknown[]> = signal([]);\n\n /**\n * Show this error only when a specific validation error key is present.\n * If empty, the error is always shown when the control is in error state.\n */\n readonly match: InputSignal<string> = input<string>('');\n\n protected readonly errorVariants: () => string = errorVariants;\n\n /**\n * Whether this error should be displayed based on the match condition.\n * Used by the form field to filter which errors to show.\n */\n readonly shouldShow: Signal<boolean> = computed(() => {\n const matchKey = this.match();\n if (!matchKey) return true;\n\n // Signal Forms path: match on error.kind\n const signalErrors = this._signalErrors();\n if (signalErrors.length > 0) {\n return signalErrors.some((e) => (e as { kind?: string })?.kind === matchKey);\n }\n\n // Reactive Forms path: match on AbstractControl.errors keys\n const errors = this._control()?.errors;\n return errors ? matchKey in errors : false;\n });\n\n /**\n * Sets the form control reference (Reactive Forms).\n * Called by the parent form field component.\n */\n setControl(control: AbstractControl | null): void {\n this._control.set(control);\n }\n\n /**\n * Sets structured validation errors (Signal Forms).\n * Called by the parent form field component.\n */\n setSignalErrors(errors: readonly unknown[]): void {\n this._signalErrors.set(errors);\n }\n}\n","import { Directive } from '@angular/core';\nimport { prefixVariants } from './form-field.variants';\n\n/**\n * Directive to mark content as the prefix slot in a form field.\n *\n * Prefix content appears before the input (e.g., currency symbol, icon).\n *\n * @tokens `--color-muted-foreground`\n *\n * @example Currency prefix\n * ```html\n * <com-form-field>\n * <label comLabel>Amount</label>\n * <span comPrefix>$</span>\n * <input comInput type=\"number\" formControlName=\"amount\" />\n * </com-form-field>\n * ```\n *\n * @example Icon prefix\n * ```html\n * <com-form-field>\n * <label comLabel>Search</label>\n * <svg comPrefix class=\"size-4\">...</svg>\n * <input comInput formControlName=\"query\" />\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comPrefix]',\n exportAs: 'comPrefix',\n host: {\n '[class]': 'prefixVariants()',\n },\n})\nexport class ComPrefix {\n protected readonly prefixVariants: () => string = prefixVariants;\n}\n","import { Directive } from '@angular/core';\nimport { suffixVariants } from './form-field.variants';\n\n/**\n * Directive to mark content as the suffix slot in a form field.\n *\n * Suffix content appears after the input (e.g., unit, clear button, visibility toggle).\n *\n * @tokens `--color-muted-foreground`\n *\n * @example Unit suffix\n * ```html\n * <com-form-field>\n * <label comLabel>Weight</label>\n * <input comInput type=\"number\" formControlName=\"weight\" />\n * <span comSuffix>kg</span>\n * </com-form-field>\n * ```\n *\n * @example Clear button suffix\n * ```html\n * <com-form-field>\n * <label comLabel>Search</label>\n * <input comInput formControlName=\"query\" />\n * <button comSuffix type=\"button\" (click)=\"clearSearch()\">\n * <svg class=\"size-4\">...</svg>\n * </button>\n * </com-form-field>\n * ```\n *\n * @example Password visibility toggle\n * ```html\n * <com-form-field>\n * <label comLabel>Password</label>\n * <input comInput [type]=\"showPassword ? 'text' : 'password'\" formControlName=\"password\" />\n * <button comSuffix type=\"button\" (click)=\"showPassword = !showPassword\">\n * <svg class=\"size-4\">...</svg>\n * </button>\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comSuffix]',\n exportAs: 'comSuffix',\n host: {\n '[class]': 'suffixVariants()',\n },\n})\nexport class ComSuffix {\n protected readonly suffixVariants: () => string = suffixVariants;\n}\n","import { Injectable } from '@angular/core';\nimport type { AbstractControl, FormGroupDirective, NgForm } from '@angular/forms';\n\n/**\n * Strategy for determining when to display errors in a form field.\n *\n * The default behavior shows errors when the control is invalid AND\n * either touched OR the parent form has been submitted.\n *\n * @example Override globally with eager error display\n * ```ts\n * @Injectable()\n * export class EagerErrorStateMatcher extends ErrorStateMatcher {\n * override isErrorState(control: AbstractControl | null): boolean {\n * return !!(control?.invalid && control.dirty);\n * }\n * }\n *\n * // In app config\n * providers: [{ provide: ErrorStateMatcher, useClass: EagerErrorStateMatcher }]\n * ```\n *\n * @example Per-field override\n * ```html\n * <com-form-field>\n * <input comInput [errorStateMatcher]=\"eagerMatcher\" />\n * </com-form-field>\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ErrorStateMatcher {\n isErrorState(\n control: AbstractControl | null,\n form: FormGroupDirective | NgForm | null\n ): boolean {\n return !!(control?.invalid && (control.touched || form?.submitted));\n }\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport type { DoCheck, InputSignal, InputSignalWithTransform, OnInit, Signal, WritableSignal } from '@angular/core';\n\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { AutofillMonitor } from '@angular/cdk/text-field';\nimport { FormFieldControl } from './form-field-control';\nimport { ErrorStateMatcher } from './error-state-matcher';\nimport type { FormFieldAppearance } from './form-field-defaults';\n\n/** Auto-incrementing ID counter. */\nlet nextId = 0;\n\n/**\n * Directive applied to native `<input>` and `<textarea>` elements to bridge\n * them to the form field wrapper. Implements the `FormFieldControl` contract.\n *\n * This directive does NOT implement `ControlValueAccessor` - it relies on\n * Angular's built-in value accessors (`DefaultValueAccessor`, `NumberValueAccessor`, etc.)\n * that are already applied to native elements with `formControlName` or `ngModel`.\n *\n * Instead, this directive reports state (focused, empty, disabled, error) to the\n * parent form field for proper visual presentation.\n *\n * @tokens (styling is controlled by the parent form field)\n *\n * @example Basic usage\n * ```html\n * <com-form-field>\n * <label comLabel>Email</label>\n * <input comInput formControlName=\"email\" placeholder=\"you@example.com\" />\n * </com-form-field>\n * ```\n *\n * @example Textarea\n * ```html\n * <com-form-field>\n * <label comLabel>Description</label>\n * <textarea comInput formControlName=\"description\"></textarea>\n * </com-form-field>\n * ```\n *\n * @example Custom error state matcher\n * ```html\n * <com-form-field>\n * <label comLabel>Code</label>\n * <input comInput formControlName=\"code\" [errorStateMatcher]=\"eagerMatcher\" />\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: 'input[comInput], textarea[comInput]',\n exportAs: 'comInput',\n providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComInput) }],\n host: {\n '[id]': 'id()',\n '[disabled]': 'disabled()',\n '[required]': 'required()',\n '[attr.aria-invalid]': 'errorState() || null',\n '[attr.aria-required]': 'required() || null',\n '[attr.aria-describedby]': 'ariaDescribedBy() || null',\n '[class]': 'hostClasses()',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(input)': 'onInput()',\n },\n})\nexport class ComInput implements FormFieldControl<string>, OnInit, DoCheck {\n private readonly elementRef: ElementRef<HTMLInputElement | HTMLTextAreaElement> = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly autofillMonitor = inject(AutofillMonitor);\n private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n /** NgControl bound to this input (if using reactive forms). */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n // Inputs\n readonly inputId: InputSignal<string | undefined> = input<string>(undefined, { alias: 'id' });\n readonly inputDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n readonly inputRequired: InputSignalWithTransform<boolean, unknown> = input(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n readonly userAriaDescribedBy: InputSignal<string> = input<string>('', { alias: 'aria-describedby' });\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n readonly sfInvalid: InputSignal<boolean> = input(false, { alias: 'invalid' });\n readonly sfTouched: InputSignalWithTransform<boolean, unknown> = input(false, {\n alias: 'touched',\n transform: booleanAttribute,\n });\n readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], {\n alias: 'errors',\n });\n\n /** Whether the form system is Signal Forms (no NgControl present). */\n private readonly isSignalForms: boolean = !this.ngControl;\n\n // Internal state\n private readonly _focused = signal(false);\n private readonly _autofilled = signal(false);\n private readonly _empty = signal(true);\n private readonly _uniqueId: string = `com-input-${nextId++}`;\n private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n private _previousNativeValue: string = '';\n\n // Public signals implementing FormFieldControl\n readonly focused: Signal<boolean> = this._focused.asReadonly();\n\n readonly id: Signal<string> = computed(() => this.inputId() ?? this._uniqueId);\n\n readonly shouldLabelFloat: Signal<boolean> = computed(() => {\n return this._focused() || !this._empty() || this._autofilled();\n });\n\n readonly disabled: Signal<boolean> = computed(() => {\n if (this.inputDisabled()) return true;\n return this.ngControl?.control?.disabled ?? false;\n });\n\n readonly required: Signal<boolean> = computed(() => {\n if (this.inputRequired()) return true;\n const control = this.ngControl?.control;\n if (control?.validator) {\n const result = control.validator({ value: '' } as never);\n return result?.['required'] !== undefined;\n }\n return false;\n });\n\n readonly errorState: Signal<boolean> = computed(() => {\n if (this.isSignalForms) {\n // Signal Forms: gate on both invalid AND touched — mirrors ErrorStateMatcher default.\n // Signal Forms' invalid is pure validation state (not gated by touched).\n return this.sfInvalid() && this.sfTouched();\n }\n // Reactive Forms: use ErrorStateMatcher (existing logic)\n this._focused();\n this._empty();\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n return matcher.isErrorState(this.ngControl?.control ?? null, form);\n });\n\n /** Structured validation errors from Signal Forms, exposed for the parent form field. */\n readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n this.isSignalForms ? this.sfErrors() : null\n );\n\n /** Combined aria-describedby including user-provided and form-field-generated IDs. */\n private readonly _describedByIds = signal('');\n\n readonly ariaDescribedBy: Signal<string> = computed(() => {\n const userIds = this.userAriaDescribedBy();\n const fieldIds = this._describedByIds();\n return [userIds, fieldIds].filter(Boolean).join(' ');\n });\n\n /** Computed host classes including appearance-based padding. */\n protected readonly hostClasses: Signal<string> = computed(() => {\n const base =\n 'peer w-full bg-transparent text-foreground placeholder:text-input-placeholder outline-none border-none disabled:cursor-not-allowed disabled:text-disabled-foreground px-3';\n const padding = this._appearance() === 'fill' ? 'pt-5 pb-1.5' : 'py-2.5';\n return `${base} ${padding}`;\n });\n\n ngOnInit(): void {\n this._previousNativeValue = this.elementRef.nativeElement.value;\n this.updateEmpty();\n\n const autofillSub = this.autofillMonitor.monitor(this.elementRef).subscribe((event) => {\n this._autofilled.set(event.isAutofilled);\n });\n\n this.destroyRef.onDestroy(() => {\n autofillSub.unsubscribe();\n this.autofillMonitor.stopMonitoring(this.elementRef);\n });\n }\n\n ngDoCheck(): void {\n this.dirtyCheckNativeValue();\n }\n\n private dirtyCheckNativeValue(): void {\n const newValue = this.elementRef.nativeElement.value;\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.updateEmpty();\n }\n }\n\n protected onFocus(): void {\n this._focused.set(true);\n }\n\n protected onBlur(): void {\n this._focused.set(false);\n }\n\n protected onInput(): void {\n this.updateEmpty();\n }\n\n private updateEmpty(): void {\n this._empty.set(!this.elementRef.nativeElement.value);\n }\n\n // FormFieldControl methods\n onContainerClick(event: MouseEvent): void {\n if (!this.disabled() && event.target !== this.elementRef.nativeElement) {\n this.elementRef.nativeElement.focus();\n }\n }\n\n /**\n * Sets the describedBy IDs from the form field.\n * Called by the parent form field component.\n */\n setDescribedByIds(ids: string): void {\n this._describedByIds.set(ids);\n }\n\n /**\n * Sets the appearance for styling.\n * Called by the parent form field component.\n */\n setAppearance(appearance: FormFieldAppearance): void {\n this._appearance.set(appearance);\n }\n\n /** Focus the native element. */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type {\n FormFieldAppearance,\n FormFieldColor,\n FormFieldFloatLabel,\n FormFieldSubscriptSizing,\n} from './form-field.variants';\n\n// Re-export types for convenience\nexport type { FormFieldAppearance, FormFieldColor, FormFieldFloatLabel, FormFieldSubscriptSizing };\n\n/**\n * Global configuration defaults for form fields.\n *\n * @example Set defaults in app config\n * ```ts\n * providers: [\n * {\n * provide: FORM_FIELD_DEFAULTS,\n * useValue: {\n * appearance: 'fill',\n * floatLabel: 'always',\n * color: 'primary',\n * }\n * }\n * ]\n * ```\n */\nexport interface FormFieldDefaults {\n appearance?: FormFieldAppearance;\n color?: FormFieldColor;\n floatLabel?: FormFieldFloatLabel;\n hideRequiredMarker?: boolean;\n subscriptSizing?: FormFieldSubscriptSizing;\n}\n\nexport const FORM_FIELD_DEFAULTS: InjectionToken<FormFieldDefaults> = new InjectionToken<FormFieldDefaults>(\n 'FORM_FIELD_DEFAULTS',\n {\n providedIn: 'root',\n factory: (): FormFieldDefaults => ({}),\n }\n);\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { FormFieldControl } from './form-field-control';\nimport { ComLabel } from './label.directive';\nimport { ComHint } from './hint.directive';\nimport { ComError } from './error.directive';\nimport { ComPrefix } from './prefix.directive';\nimport { ComSuffix } from './suffix.directive';\nimport { ComInput } from './input.directive';\nimport {\n FORM_FIELD_DEFAULTS,\n type FormFieldAppearance,\n type FormFieldColor,\n type FormFieldFloatLabel,\n type FormFieldSubscriptSizing,\n} from './form-field-defaults';\nimport {\n formFieldVariants,\n formFieldContainerVariants,\n formFieldLabelVariants,\n formFieldSubscriptVariants,\n} from './form-field.variants';\nimport { mergeClasses } from 'ngx-com/utils';\n\n/**\n * Form field wrapper providing visual structure for form inputs.\n *\n * Provides floating labels, borders (outline/fill appearance), hints, errors,\n * and prefix/suffix slots. Automatically wires ARIA attributes for accessibility.\n *\n * The form field reads state from its inner `FormFieldControl` child (typically\n * a `ComInput` directive) and renders UI accordingly.\n *\n * @tokens `--color-foreground`, `--color-input-border`, `--color-input-background`,\n * `--color-primary`, `--color-accent`, `--color-warn`, `--color-ring`,\n * `--color-muted`, `--color-muted-foreground`, `--color-disabled`,\n * `--color-disabled-foreground`, `--color-background`, `--radius-input`\n *\n * @example Basic outline field\n * ```html\n * <com-form-field>\n * <label comLabel>Email</label>\n * <input comInput formControlName=\"email\" />\n * <span comHint>We'll never share your email.</span>\n * <span comError match=\"required\">Email is required.</span>\n * </com-form-field>\n * ```\n *\n * @example Fill appearance\n * ```html\n * <com-form-field appearance=\"fill\">\n * <label comLabel>Username</label>\n * <input comInput formControlName=\"username\" />\n * </com-form-field>\n * ```\n *\n * @example With prefix and suffix\n * ```html\n * <com-form-field>\n * <label comLabel>Amount</label>\n * <span comPrefix>$</span>\n * <input comInput type=\"number\" formControlName=\"amount\" />\n * <span comSuffix>.00</span>\n * </com-form-field>\n * ```\n */\n@Component({\n selector: 'com-form-field',\n exportAs: 'comFormField',\n template: `\n <div [class]=\"containerClasses()\" (click)=\"onContainerClick($event)\">\n <div class=\"flex items-center w-full\">\n @if (hasPrefix()) {\n <ng-content select=\"[comPrefix]\" />\n }\n @if (labelChild()) {\n <span [class]=\"labelClasses()\">\n <ng-content select=\"[comLabel]\" />\n @if (showRequiredMarker()) {\n <span class=\"text-warn\" aria-hidden=\"true\">&thinsp;*</span>\n }\n </span>\n }\n <div class=\"flex-1 min-w-0\">\n <ng-content />\n </div>\n @if (hasSuffix()) {\n <ng-content select=\"[comSuffix]\" />\n }\n </div>\n </div>\n\n <div [class]=\"subscriptClasses()\">\n <div [class.hidden]=\"!showErrors()\">\n <ng-content select=\"[comError]\" />\n </div>\n <div [class.hidden]=\"showErrors()\" class=\"flex justify-between w-full gap-2\">\n <ng-content select=\"[comHint]:not([align='end'])\" />\n <ng-content select=\"[comHint][align='end']\" />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: `\n /* Hide placeholder when label exists and is not floating (label acts as placeholder) */\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) input::placeholder,\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) textarea::placeholder {\n color: transparent;\n }\n\n /* Hide dropdown placeholder when label exists and is not floating */\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-dropdown .text-placeholder {\n display: none;\n }\n\n /* Make dropdown fill available space inside form-field */\n com-form-field com-dropdown {\n display: block;\n width: 100%;\n }\n `,\n host: {\n '[class]': 'hostClasses()',\n '[class.com-form-field--focused]': 'isFocused()',\n '[class.com-form-field--disabled]': 'isDisabled()',\n '[class.com-form-field--error]': 'hasError()',\n '[class.com-form-field--floating]': 'shouldLabelFloat()',\n '[class.com-form-field--has-label]': '!!labelChild()',\n },\n})\nexport class ComFormField {\n private readonly defaults = inject(FORM_FIELD_DEFAULTS, { optional: true });\n\n // Content children\n readonly control: Signal<FormFieldControl | undefined> = contentChild<FormFieldControl>(FormFieldControl);\n readonly inputDirective: Signal<ComInput | undefined> = contentChild<ComInput>(ComInput);\n readonly labelChild: Signal<ComLabel | undefined> = contentChild<ComLabel>(ComLabel);\n readonly hintChildren: Signal<readonly ComHint[]> = contentChildren<ComHint>(ComHint);\n readonly errorChildren: Signal<readonly ComError[]> = contentChildren<ComError>(ComError);\n readonly prefixChild: Signal<ComPrefix | undefined> = contentChild<ComPrefix>(ComPrefix);\n readonly suffixChild: Signal<ComSuffix | undefined> = contentChild<ComSuffix>(ComSuffix);\n\n // Inputs with defaults fallback\n readonly appearance: InputSignal<FormFieldAppearance> = input<FormFieldAppearance>(\n this.defaults?.appearance ?? 'outline'\n );\n readonly color: InputSignal<FormFieldColor> = input<FormFieldColor>(this.defaults?.color ?? 'primary');\n readonly floatLabel: InputSignal<FormFieldFloatLabel> = input<FormFieldFloatLabel>(\n this.defaults?.floatLabel ?? 'auto'\n );\n readonly hideRequiredMarker: InputSignalWithTransform<boolean, unknown> = input(\n this.defaults?.hideRequiredMarker ?? false,\n { transform: booleanAttribute }\n );\n readonly subscriptSizing: InputSignal<FormFieldSubscriptSizing> = input<FormFieldSubscriptSizing>(\n this.defaults?.subscriptSizing ?? 'fixed'\n );\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n // Derived state from inner control\n readonly shouldLabelFloat: Signal<boolean> = computed(() => {\n if (this.floatLabel() === 'always') return true;\n return this.control()?.shouldLabelFloat() ?? false;\n });\n\n readonly isFocused: Signal<boolean> = computed(() => this.control()?.focused() ?? false);\n readonly isDisabled: Signal<boolean> = computed(() => this.control()?.disabled() ?? false);\n readonly hasError: Signal<boolean> = computed(() => this.control()?.errorState() ?? false);\n readonly hasPrefix: Signal<boolean> = computed(() => !!this.prefixChild());\n readonly hasSuffix: Signal<boolean> = computed(() => !!this.suffixChild());\n\n readonly showRequiredMarker: Signal<boolean> = computed(() => {\n if (this.hideRequiredMarker()) return false;\n return this.control()?.required() ?? false;\n });\n\n readonly showErrors: Signal<boolean> = computed(() => this.hasError() && this.errorChildren().length > 0);\n\n // Computed classes\n protected readonly hostClasses: Signal<string> = computed(() =>\n mergeClasses(formFieldVariants({ disabled: this.isDisabled() }), this.userClass())\n );\n\n protected readonly containerClasses: Signal<string> = computed(() =>\n formFieldContainerVariants({\n appearance: this.appearance(),\n color: this.color(),\n focused: this.isFocused(),\n error: this.hasError(),\n disabled: this.isDisabled(),\n })\n );\n\n protected readonly labelClasses: Signal<string> = computed(() =>\n formFieldLabelVariants({\n appearance: this.appearance(),\n floating: this.shouldLabelFloat(),\n color: this.color(),\n error: this.hasError(),\n focused: this.isFocused(),\n disabled: this.isDisabled(),\n })\n );\n\n protected readonly subscriptClasses: Signal<string> = computed(() =>\n formFieldSubscriptVariants({ sizing: this.subscriptSizing() })\n );\n\n constructor() {\n // Wire up label to control\n effect(() => {\n const label = this.labelChild();\n const ctrl = this.control();\n if (label && ctrl) {\n label.setForId(ctrl.id());\n }\n });\n\n // Wire up aria-describedby on the control\n effect(() => {\n const ctrl = this.control();\n if (!ctrl || !('setDescribedByIds' in ctrl)) return;\n\n const ids = this.showErrors()\n ? this.errorChildren().filter((e) => e.shouldShow()).map((e) => e.id)\n : this.hintChildren().map((h) => h.id);\n (ctrl as { setDescribedByIds: (ids: string) => void }).setDescribedByIds(ids.join(' '));\n });\n\n // Wire up appearance to control for proper styling\n effect(() => {\n const ctrl = this.control();\n if (ctrl && 'setAppearance' in ctrl) {\n (ctrl as { setAppearance: (appearance: FormFieldAppearance) => void }).setAppearance(this.appearance());\n }\n });\n\n // Wire up control reference to error directives (re-runs on error state change)\n effect(() => {\n // Read hasError to trigger re-evaluation when validation state changes\n this.hasError();\n const ctrl = this.control();\n if (!ctrl) return;\n\n const errors = ctrl.errors?.() ?? null;\n if (errors !== null) {\n // Signal Forms path: pass structured errors to each comError\n this.errorChildren().forEach((error) => error.setSignalErrors(errors as readonly unknown[]));\n } else {\n // Reactive Forms path: pass AbstractControl reference\n const ngControl = ctrl.ngControl?.control ?? null;\n this.errorChildren().forEach((error) => error.setControl(ngControl));\n }\n });\n }\n\n protected onContainerClick(event: MouseEvent): void {\n this.control()?.onContainerClick(event);\n }\n}\n","// Public API for the form-field component\n\n// Main component\nexport { ComFormField } from './form-field.component';\n\n// Directives\nexport { ComInput } from './input.directive';\nexport { ComLabel } from './label.directive';\nexport { ComHint, type HintAlign } from './hint.directive';\nexport { ComError } from './error.directive';\nexport { ComPrefix } from './prefix.directive';\nexport { ComSuffix } from './suffix.directive';\n\n// Abstract class for custom controls\nexport { FormFieldControl } from './form-field-control';\n\n// Error state matching\nexport { ErrorStateMatcher } from './error-state-matcher';\n\n// Configuration\nexport {\n FORM_FIELD_DEFAULTS,\n type FormFieldDefaults,\n type FormFieldAppearance,\n type FormFieldColor,\n type FormFieldFloatLabel,\n type FormFieldSubscriptSizing,\n} from './form-field-defaults';\n\n// Variants (for advanced customization)\nexport {\n formFieldVariants,\n formFieldContainerVariants,\n formFieldLabelVariants,\n formFieldSubscriptVariants,\n hintVariants,\n errorVariants,\n prefixVariants,\n suffixVariants,\n type FormFieldVariants,\n type FormFieldContainerVariants,\n type FormFieldLabelVariants,\n type FormFieldSubscriptVariants,\n} from './form-field.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextId"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-com-components-form-field.mjs","sources":["../../../projects/com/components/form-field/form-field-control.ts","../../../projects/com/components/form-field/label.directive.ts","../../../projects/com/components/form-field/form-field.variants.ts","../../../projects/com/components/form-field/hint.directive.ts","../../../projects/com/components/form-field/error.directive.ts","../../../projects/com/components/form-field/prefix.directive.ts","../../../projects/com/components/form-field/suffix.directive.ts","../../../projects/com/components/form-field/error-state-matcher.ts","../../../projects/com/components/form-field/input.directive.ts","../../../projects/com/components/form-field/form-field-defaults.ts","../../../projects/com/components/form-field/form-field.component.ts","../../../projects/com/components/form-field/index.ts","../../../projects/com/components/form-field/ngx-com-components-form-field.ts"],"sourcesContent":["import type { Signal } from '@angular/core';\nimport type { NgControl } from '@angular/forms';\n\n\n/**\n * Contract that any control inside a form field must implement.\n *\n * This allows the form field to read state from any inner control\n * (input, textarea, custom controls) without knowing implementation details.\n *\n * @example Implementing for a custom phone input\n * ```ts\n * @Directive({\n * selector: 'com-phone-input',\n * providers: [{ provide: FormFieldControl, useExisting: PhoneInputComponent }],\n * })\n * export class PhoneInputComponent extends FormFieldControl<string> {\n * // ... implement all abstract members\n * }\n * ```\n */\nexport abstract class FormFieldControl<T = unknown> {\n /** The NgControl bound to this control (if any). */\n abstract readonly ngControl: NgControl | null;\n\n /** Whether the control is focused. */\n abstract readonly focused: Signal<boolean>;\n\n /** Whether the label should float (focused or non-empty). */\n abstract readonly shouldLabelFloat: Signal<boolean>;\n\n /** Whether the control is required. */\n abstract readonly required: Signal<boolean>;\n\n /** Whether the control is disabled. */\n abstract readonly disabled: Signal<boolean>;\n\n /** Whether the control is in an error state. */\n abstract readonly errorState: Signal<boolean>;\n\n /** Unique ID for the control element. */\n abstract readonly id: Signal<string>;\n\n /** Structured validation errors (Signal Forms path). */\n readonly errors?: Signal<readonly unknown[] | null>;\n\n /** Called when the form field container is clicked. */\n abstract onContainerClick(event: MouseEvent): void;\n}\n","import { Directive, signal } from '@angular/core';\nimport type { Signal } from '@angular/core';\n\n/** Auto-incrementing ID counter. */\nlet nextId = 0;\n\n/**\n * Directive to mark the label element inside a form field.\n *\n * The form field automatically associates this label with the inner control\n * and positions it appropriately based on appearance and float state.\n *\n * @example\n * ```html\n * <com-form-field>\n * <label comLabel>Email address</label>\n * <input comInput formControlName=\"email\" />\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comLabel]',\n exportAs: 'comLabel',\n host: {\n '[attr.for]': 'forId()',\n '[id]': 'labelId',\n },\n})\nexport class ComLabel {\n readonly labelId: string = `com-label-${nextId++}`;\n\n private readonly _forId = signal<string | null>(null);\n readonly forId: Signal<string | null> = this._forId.asReadonly();\n\n /** Sets the `for` attribute to link to the control. Called by form field. */\n setForId(id: string): void {\n this._forId.set(id);\n }\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\n\nexport type FormFieldAppearance = 'fill' | 'outline';\nexport type FormFieldColor = 'primary' | 'accent' | 'warn';\nexport type FormFieldFloatLabel = 'auto' | 'always';\nexport type FormFieldSubscriptSizing = 'fixed' | 'dynamic';\n\n/**\n * CVA variants for the form field wrapper.\n *\n * @tokens `--color-foreground`\n */\nexport const formFieldVariants: (props?: {\n disabled?: boolean | null | undefined;\n}) => string = cva(\n ['com-form-field', 'relative block w-full', 'text-foreground'],\n {\n variants: {\n disabled: {\n true: 'pointer-events-none',\n false: '',\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\nexport type FormFieldVariants = VariantProps<typeof formFieldVariants>;\n\n/**\n * CVA variants for the input container (the bordered/filled area).\n *\n * @tokens `--color-input-border`, `--color-input-background`, `--color-primary`,\n * `--color-accent`, `--color-warn`, `--color-ring`, `--color-muted`,\n * `--color-disabled`, `--radius-input`\n */\nexport const formFieldContainerVariants: (props?: {\n appearance?: FormFieldAppearance | null | undefined;\n color?: FormFieldColor | null | undefined;\n focused?: boolean | null | undefined;\n error?: boolean | null | undefined;\n disabled?: boolean | null | undefined;\n}) => string = cva(\n [\n 'com-form-field__container',\n 'relative flex items-center',\n 'w-full min-h-11',\n 'transition-all duration-150',\n 'rounded-input',\n ],\n {\n variants: {\n appearance: {\n outline: [\n 'border border-input-border',\n 'bg-transparent',\n 'mt-2.5', // Reserve space for floating label to prevent height jump\n ],\n fill: [\n 'rounded-b-none',\n 'bg-muted',\n 'border-b-2 border-input-border',\n ],\n },\n color: {\n primary: '',\n accent: '',\n warn: '',\n },\n focused: {\n true: '',\n false: '',\n },\n error: {\n true: '',\n false: '',\n },\n disabled: {\n true: 'bg-disabled border-disabled',\n false: '',\n },\n },\n compoundVariants: [\n // Outline + focused (no error)\n { appearance: 'outline', focused: true, error: false, class: 'border-primary ring-1 ring-primary' },\n { appearance: 'outline', focused: true, error: false, color: 'accent', class: 'border-accent ring-accent' },\n { appearance: 'outline', focused: true, error: false, color: 'warn', class: 'border-warn ring-warn' },\n // Outline + error\n { appearance: 'outline', error: true, class: 'border-warn ring-1 ring-warn' },\n // Fill + focused (no error)\n { appearance: 'fill', focused: true, error: false, class: 'border-b-primary' },\n { appearance: 'fill', focused: true, error: false, color: 'accent', class: 'border-b-accent' },\n { appearance: 'fill', focused: true, error: false, color: 'warn', class: 'border-b-warn' },\n // Fill + error\n { appearance: 'fill', error: true, class: 'border-b-warn' },\n ],\n defaultVariants: {\n appearance: 'outline',\n color: 'primary',\n focused: false,\n error: false,\n disabled: false,\n },\n }\n);\n\nexport type FormFieldContainerVariants = VariantProps<typeof formFieldContainerVariants>;\n\n/**\n * CVA variants for the floating label.\n *\n * @tokens `--color-muted-foreground`, `--color-primary`, `--color-accent`,\n * `--color-warn`, `--color-background`\n */\nexport const formFieldLabelVariants: (props?: {\n appearance?: FormFieldAppearance | null | undefined;\n floating?: boolean | null | undefined;\n color?: FormFieldColor | null | undefined;\n error?: boolean | null | undefined;\n focused?: boolean | null | undefined;\n disabled?: boolean | null | undefined;\n}) => string = cva(\n [\n 'com-form-field__label',\n 'pointer-events-none',\n 'text-muted-foreground text-sm',\n 'origin-top-left',\n 'transition-all duration-200 ease-in-out',\n ],\n {\n variants: {\n appearance: {\n outline: '',\n fill: '',\n },\n floating: {\n // Floating: absolute positioning at container border\n true: 'absolute',\n // Not floating: relative positioning in flex flow (after prefix)\n false: 'relative flex-shrink-0 pl-3',\n },\n color: {\n primary: '',\n accent: '',\n warn: '',\n },\n error: {\n true: 'text-warn',\n false: '',\n },\n focused: {\n true: '',\n false: '',\n },\n disabled: {\n true: 'text-disabled-foreground',\n false: '',\n },\n },\n compoundVariants: [\n // Outline floating (label above border with notch effect)\n {\n appearance: 'outline',\n floating: true,\n class: 'left-2 -top-2.5 scale-75 bg-background px-1',\n },\n // Fill floating\n {\n appearance: 'fill',\n floating: true,\n class: 'left-3 top-1 scale-75 text-xs',\n },\n // Focused + floating colors (no error)\n { floating: true, focused: true, error: false, color: 'primary', class: 'text-primary' },\n { floating: true, focused: true, error: false, color: 'accent', class: 'text-accent' },\n { floating: true, focused: true, error: false, color: 'warn', class: 'text-warn' },\n // Error overrides\n { floating: true, error: true, class: 'text-warn' },\n ],\n defaultVariants: {\n appearance: 'outline',\n floating: false,\n color: 'primary',\n error: false,\n focused: false,\n disabled: false,\n },\n }\n);\n\nexport type FormFieldLabelVariants = VariantProps<typeof formFieldLabelVariants>;\n\n/**\n * CVA variants for the subscript area (hints/errors).\n *\n * @tokens (inherits from children)\n */\nexport const formFieldSubscriptVariants: (props?: {\n sizing?: FormFieldSubscriptSizing | null | undefined;\n}) => string = cva(\n ['com-form-field__subscript', 'text-xs mt-1 px-3'],\n {\n variants: {\n sizing: {\n fixed: 'min-h-5',\n dynamic: 'min-h-0',\n },\n },\n defaultVariants: {\n sizing: 'fixed',\n },\n }\n);\n\nexport type FormFieldSubscriptVariants = VariantProps<typeof formFieldSubscriptVariants>;\n\n/**\n * CVA variants for hint text.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const hintVariants: () => string = cva(['com-form-field__hint', 'text-muted-foreground text-xs']);\n\n/**\n * CVA variants for error messages.\n *\n * @tokens `--color-warn`\n */\nexport const errorVariants: () => string = cva(['com-form-field__error', 'text-warn text-xs']);\n\n/**\n * CVA variants for prefix slot.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const prefixVariants: () => string = cva([\n 'com-form-field__prefix',\n 'flex items-center text-muted-foreground pl-3',\n]);\n\n/**\n * CVA variants for suffix slot.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const suffixVariants: () => string = cva([\n 'com-form-field__suffix',\n 'flex items-center text-muted-foreground pr-3',\n]);\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { hintVariants } from './form-field.variants';\nimport { mergeClasses } from 'ngx-com/utils';\n\n/** Alignment of hint text in the subscript area. */\nexport type HintAlign = 'start' | 'end';\n\n/** Auto-incrementing ID counter. */\nlet nextId = 0;\n\n/**\n * Directive for hint text displayed below the form field.\n *\n * The hint provides supplementary information to help users fill out the field.\n * It is automatically added to the control's `aria-describedby`.\n *\n * @tokens `--color-muted-foreground`\n *\n * @example Basic hint\n * ```html\n * <com-form-field>\n * <label comLabel>Password</label>\n * <input comInput formControlName=\"password\" />\n * <span comHint>At least 8 characters</span>\n * </com-form-field>\n * ```\n *\n * @example Right-aligned hint (e.g., character count)\n * ```html\n * <com-form-field>\n * <label comLabel>Bio</label>\n * <textarea comInput formControlName=\"bio\"></textarea>\n * <span comHint>Keep it brief</span>\n * <span comHint align=\"end\">{{ bioLength }}/150</span>\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comHint]',\n exportAs: 'comHint',\n host: {\n '[id]': 'id',\n '[class]': 'hostClasses()',\n },\n})\nexport class ComHint {\n readonly id: string = `com-hint-${nextId++}`;\n readonly align: InputSignal<HintAlign> = input<HintAlign>('start');\n\n protected readonly hostClasses: Signal<string> = computed(() =>\n mergeClasses(hintVariants(), this.align() === 'end' && 'ml-auto')\n );\n}\n","import { computed, Directive, input, signal } from '@angular/core';\nimport type { AbstractControl } from '@angular/forms';\nimport type { InputSignal, Signal, WritableSignal } from '@angular/core';\nimport { errorVariants } from './form-field.variants';\n\n/** Auto-incrementing ID counter. */\nlet nextId = 0;\n\n/**\n * Directive for error messages displayed below the form field.\n *\n * Errors replace hints when the control is in an error state.\n * Uses `role=\"alert\"` and `aria-live=\"polite\"` for screen reader announcement.\n *\n * The optional `match` input allows showing errors only for specific validation errors.\n *\n * @tokens `--color-warn`\n *\n * @example Basic error\n * ```html\n * <com-form-field>\n * <label comLabel>Email</label>\n * <input comInput formControlName=\"email\" />\n * <span comError>Please enter a valid email</span>\n * </com-form-field>\n * ```\n *\n * @example Matching specific errors\n * ```html\n * <com-form-field>\n * <label comLabel>Email</label>\n * <input comInput formControlName=\"email\" />\n * <span comError match=\"required\">Email is required.</span>\n * <span comError match=\"email\">Must be a valid email address.</span>\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comError]',\n exportAs: 'comError',\n host: {\n '[id]': 'id',\n '[class]': 'errorVariants()',\n '[class.hidden]': '!shouldShow()',\n 'role': 'alert',\n 'aria-live': 'polite',\n },\n})\nexport class ComError {\n readonly id: string = `com-error-${nextId++}`;\n\n /** Reference to the form control (Reactive Forms path). */\n private readonly _control: WritableSignal<AbstractControl | null> = signal(null);\n\n /** Structured errors from Signal Forms. */\n private readonly _signalErrors: WritableSignal<readonly unknown[]> = signal([]);\n\n /**\n * Show this error only when a specific validation error key is present.\n * If empty, the error is always shown when the control is in error state.\n */\n readonly match: InputSignal<string> = input<string>('');\n\n protected readonly errorVariants: () => string = errorVariants;\n\n /**\n * Whether this error should be displayed based on the match condition.\n * Used by the form field to filter which errors to show.\n */\n readonly shouldShow: Signal<boolean> = computed(() => {\n const matchKey = this.match();\n if (!matchKey) return true;\n\n // Signal Forms path: match on error.kind\n const signalErrors = this._signalErrors();\n if (signalErrors.length > 0) {\n return signalErrors.some((e) => (e as { kind?: string })?.kind === matchKey);\n }\n\n // Reactive Forms path: match on AbstractControl.errors keys\n const errors = this._control()?.errors;\n return errors ? matchKey in errors : false;\n });\n\n /**\n * Sets the form control reference (Reactive Forms).\n * Called by the parent form field component.\n */\n setControl(control: AbstractControl | null): void {\n this._control.set(control);\n }\n\n /**\n * Sets structured validation errors (Signal Forms).\n * Called by the parent form field component.\n */\n setSignalErrors(errors: readonly unknown[]): void {\n this._signalErrors.set(errors);\n }\n}\n","import { Directive } from '@angular/core';\nimport { prefixVariants } from './form-field.variants';\n\n/**\n * Directive to mark content as the prefix slot in a form field.\n *\n * Prefix content appears before the input (e.g., currency symbol, icon).\n *\n * @tokens `--color-muted-foreground`\n *\n * @example Currency prefix\n * ```html\n * <com-form-field>\n * <label comLabel>Amount</label>\n * <span comPrefix>$</span>\n * <input comInput type=\"number\" formControlName=\"amount\" />\n * </com-form-field>\n * ```\n *\n * @example Icon prefix\n * ```html\n * <com-form-field>\n * <label comLabel>Search</label>\n * <svg comPrefix class=\"size-4\">...</svg>\n * <input comInput formControlName=\"query\" />\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comPrefix]',\n exportAs: 'comPrefix',\n host: {\n '[class]': 'prefixVariants()',\n },\n})\nexport class ComPrefix {\n protected readonly prefixVariants: () => string = prefixVariants;\n}\n","import { Directive } from '@angular/core';\nimport { suffixVariants } from './form-field.variants';\n\n/**\n * Directive to mark content as the suffix slot in a form field.\n *\n * Suffix content appears after the input (e.g., unit, clear button, visibility toggle).\n *\n * @tokens `--color-muted-foreground`\n *\n * @example Unit suffix\n * ```html\n * <com-form-field>\n * <label comLabel>Weight</label>\n * <input comInput type=\"number\" formControlName=\"weight\" />\n * <span comSuffix>kg</span>\n * </com-form-field>\n * ```\n *\n * @example Clear button suffix\n * ```html\n * <com-form-field>\n * <label comLabel>Search</label>\n * <input comInput formControlName=\"query\" />\n * <button comSuffix type=\"button\" (click)=\"clearSearch()\">\n * <svg class=\"size-4\">...</svg>\n * </button>\n * </com-form-field>\n * ```\n *\n * @example Password visibility toggle\n * ```html\n * <com-form-field>\n * <label comLabel>Password</label>\n * <input comInput [type]=\"showPassword ? 'text' : 'password'\" formControlName=\"password\" />\n * <button comSuffix type=\"button\" (click)=\"showPassword = !showPassword\">\n * <svg class=\"size-4\">...</svg>\n * </button>\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: '[comSuffix]',\n exportAs: 'comSuffix',\n host: {\n '[class]': 'suffixVariants()',\n },\n})\nexport class ComSuffix {\n protected readonly suffixVariants: () => string = suffixVariants;\n}\n","import { Injectable } from '@angular/core';\nimport type { AbstractControl, FormGroupDirective, NgForm } from '@angular/forms';\n\n/**\n * Strategy for determining when to display errors in a form field.\n *\n * The default behavior shows errors when the control is invalid AND\n * either touched OR the parent form has been submitted.\n *\n * @example Override globally with eager error display\n * ```ts\n * @Injectable()\n * export class EagerErrorStateMatcher extends ErrorStateMatcher {\n * override isErrorState(control: AbstractControl | null): boolean {\n * return !!(control?.invalid && control.dirty);\n * }\n * }\n *\n * // In app config\n * providers: [{ provide: ErrorStateMatcher, useClass: EagerErrorStateMatcher }]\n * ```\n *\n * @example Per-field override\n * ```html\n * <com-form-field>\n * <input comInput [errorStateMatcher]=\"eagerMatcher\" />\n * </com-form-field>\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ErrorStateMatcher {\n isErrorState(\n control: AbstractControl | null,\n form: FormGroupDirective | NgForm | null\n ): boolean {\n return !!(control?.invalid && (control.touched || form?.submitted));\n }\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport type { DoCheck, InputSignal, InputSignalWithTransform, OnInit, Signal, WritableSignal } from '@angular/core';\n\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { AutofillMonitor } from '@angular/cdk/text-field';\nimport { FormFieldControl } from './form-field-control';\nimport { ErrorStateMatcher } from './error-state-matcher';\nimport type { FormFieldAppearance } from './form-field-defaults';\n\n/** Auto-incrementing ID counter. */\nlet nextId = 0;\n\n/**\n * Directive applied to native `<input>` and `<textarea>` elements to bridge\n * them to the form field wrapper. Implements the `FormFieldControl` contract.\n *\n * This directive does NOT implement `ControlValueAccessor` - it relies on\n * Angular's built-in value accessors (`DefaultValueAccessor`, `NumberValueAccessor`, etc.)\n * that are already applied to native elements with `formControlName` or `ngModel`.\n *\n * Instead, this directive reports state (focused, empty, disabled, error) to the\n * parent form field for proper visual presentation.\n *\n * @tokens (styling is controlled by the parent form field)\n *\n * @example Basic usage\n * ```html\n * <com-form-field>\n * <label comLabel>Email</label>\n * <input comInput formControlName=\"email\" placeholder=\"you@example.com\" />\n * </com-form-field>\n * ```\n *\n * @example Textarea\n * ```html\n * <com-form-field>\n * <label comLabel>Description</label>\n * <textarea comInput formControlName=\"description\"></textarea>\n * </com-form-field>\n * ```\n *\n * @example Custom error state matcher\n * ```html\n * <com-form-field>\n * <label comLabel>Code</label>\n * <input comInput formControlName=\"code\" [errorStateMatcher]=\"eagerMatcher\" />\n * </com-form-field>\n * ```\n */\n@Directive({\n selector: 'input[comInput], textarea[comInput]',\n exportAs: 'comInput',\n providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComInput) }],\n host: {\n '[id]': 'id()',\n '[disabled]': 'disabled()',\n '[required]': 'required()',\n '[attr.aria-invalid]': 'errorState() || null',\n '[attr.aria-required]': 'required() || null',\n '[attr.aria-describedby]': 'ariaDescribedBy() || null',\n '[class]': 'hostClasses()',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(input)': 'onInput()',\n },\n})\nexport class ComInput implements FormFieldControl<string>, OnInit, DoCheck {\n private readonly elementRef: ElementRef<HTMLInputElement | HTMLTextAreaElement> = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly autofillMonitor = inject(AutofillMonitor);\n private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n /** NgControl bound to this input (if using reactive forms). */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n // Inputs\n readonly inputId: InputSignal<string | undefined> = input<string>(undefined, { alias: 'id' });\n readonly inputDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n readonly inputRequired: InputSignalWithTransform<boolean, unknown> = input(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n readonly userAriaDescribedBy: InputSignal<string> = input<string>('', { alias: 'aria-describedby' });\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n readonly sfInvalid: InputSignal<boolean> = input(false, { alias: 'invalid' });\n readonly sfTouched: InputSignalWithTransform<boolean, unknown> = input(false, {\n alias: 'touched',\n transform: booleanAttribute,\n });\n readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], {\n alias: 'errors',\n });\n\n /** Whether the form system is Signal Forms (no NgControl present). */\n private readonly isSignalForms: boolean = !this.ngControl;\n\n // Internal state\n private readonly _focused = signal(false);\n private readonly _autofilled = signal(false);\n private readonly _empty = signal(true);\n private readonly _uniqueId: string = `com-input-${nextId++}`;\n private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n private _previousNativeValue: string = '';\n\n // Public signals implementing FormFieldControl\n readonly focused: Signal<boolean> = this._focused.asReadonly();\n\n readonly id: Signal<string> = computed(() => this.inputId() ?? this._uniqueId);\n\n readonly shouldLabelFloat: Signal<boolean> = computed(() => {\n return this._focused() || !this._empty() || this._autofilled();\n });\n\n readonly disabled: Signal<boolean> = computed(() => {\n if (this.inputDisabled()) return true;\n return this.ngControl?.control?.disabled ?? false;\n });\n\n readonly required: Signal<boolean> = computed(() => {\n if (this.inputRequired()) return true;\n const control = this.ngControl?.control;\n if (control?.validator) {\n const result = control.validator({ value: '' } as never);\n return result?.['required'] !== undefined;\n }\n return false;\n });\n\n readonly errorState: Signal<boolean> = computed(() => {\n if (this.isSignalForms) {\n // Signal Forms: gate on both invalid AND touched — mirrors ErrorStateMatcher default.\n // Signal Forms' invalid is pure validation state (not gated by touched).\n return this.sfInvalid() && this.sfTouched();\n }\n // Reactive Forms: use ErrorStateMatcher (existing logic)\n this._focused();\n this._empty();\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n return matcher.isErrorState(this.ngControl?.control ?? null, form);\n });\n\n /** Structured validation errors from Signal Forms, exposed for the parent form field. */\n readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n this.isSignalForms ? this.sfErrors() : null\n );\n\n /** Combined aria-describedby including user-provided and form-field-generated IDs. */\n private readonly _describedByIds = signal('');\n\n readonly ariaDescribedBy: Signal<string> = computed(() => {\n const userIds = this.userAriaDescribedBy();\n const fieldIds = this._describedByIds();\n return [userIds, fieldIds].filter(Boolean).join(' ');\n });\n\n /** Computed host classes including appearance-based padding. */\n protected readonly hostClasses: Signal<string> = computed(() => {\n const base =\n 'peer w-full bg-transparent text-foreground placeholder:text-input-placeholder outline-none border-none disabled:cursor-not-allowed disabled:text-disabled-foreground px-3';\n const padding = this._appearance() === 'fill' ? 'pt-5 pb-1.5' : 'py-2.5';\n return `${base} ${padding}`;\n });\n\n ngOnInit(): void {\n this._previousNativeValue = this.elementRef.nativeElement.value;\n this.updateEmpty();\n\n const autofillSub = this.autofillMonitor.monitor(this.elementRef).subscribe((event) => {\n this._autofilled.set(event.isAutofilled);\n });\n\n this.destroyRef.onDestroy(() => {\n autofillSub.unsubscribe();\n this.autofillMonitor.stopMonitoring(this.elementRef);\n });\n }\n\n ngDoCheck(): void {\n this.dirtyCheckNativeValue();\n }\n\n private dirtyCheckNativeValue(): void {\n const newValue = this.elementRef.nativeElement.value;\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.updateEmpty();\n }\n }\n\n protected onFocus(): void {\n this._focused.set(true);\n }\n\n protected onBlur(): void {\n this._focused.set(false);\n }\n\n protected onInput(): void {\n this.updateEmpty();\n }\n\n private updateEmpty(): void {\n this._empty.set(!this.elementRef.nativeElement.value);\n }\n\n // FormFieldControl methods\n onContainerClick(event: MouseEvent): void {\n if (!this.disabled() && event.target !== this.elementRef.nativeElement) {\n this.elementRef.nativeElement.focus();\n }\n }\n\n /**\n * Sets the describedBy IDs from the form field.\n * Called by the parent form field component.\n */\n setDescribedByIds(ids: string): void {\n this._describedByIds.set(ids);\n }\n\n /**\n * Sets the appearance for styling.\n * Called by the parent form field component.\n */\n setAppearance(appearance: FormFieldAppearance): void {\n this._appearance.set(appearance);\n }\n\n /** Focus the native element. */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type {\n FormFieldAppearance,\n FormFieldColor,\n FormFieldFloatLabel,\n FormFieldSubscriptSizing,\n} from './form-field.variants';\n\n// Re-export types for convenience\nexport type { FormFieldAppearance, FormFieldColor, FormFieldFloatLabel, FormFieldSubscriptSizing };\n\n/**\n * Global configuration defaults for form fields.\n *\n * @example Set defaults in app config\n * ```ts\n * providers: [\n * {\n * provide: FORM_FIELD_DEFAULTS,\n * useValue: {\n * appearance: 'fill',\n * floatLabel: 'always',\n * color: 'primary',\n * }\n * }\n * ]\n * ```\n */\nexport interface FormFieldDefaults {\n appearance?: FormFieldAppearance;\n color?: FormFieldColor;\n floatLabel?: FormFieldFloatLabel;\n hideRequiredMarker?: boolean;\n subscriptSizing?: FormFieldSubscriptSizing;\n}\n\nexport const FORM_FIELD_DEFAULTS: InjectionToken<FormFieldDefaults> = new InjectionToken<FormFieldDefaults>(\n 'FORM_FIELD_DEFAULTS',\n {\n providedIn: 'root',\n factory: (): FormFieldDefaults => ({}),\n }\n);\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { FormFieldControl } from './form-field-control';\nimport { ComLabel } from './label.directive';\nimport { ComHint } from './hint.directive';\nimport { ComError } from './error.directive';\nimport { ComPrefix } from './prefix.directive';\nimport { ComSuffix } from './suffix.directive';\nimport { ComInput } from './input.directive';\nimport {\n FORM_FIELD_DEFAULTS,\n type FormFieldAppearance,\n type FormFieldColor,\n type FormFieldFloatLabel,\n type FormFieldSubscriptSizing,\n} from './form-field-defaults';\nimport {\n formFieldVariants,\n formFieldContainerVariants,\n formFieldLabelVariants,\n formFieldSubscriptVariants,\n} from './form-field.variants';\nimport { mergeClasses } from 'ngx-com/utils';\n\n/**\n * Form field wrapper providing visual structure for form inputs.\n *\n * Provides floating labels, borders (outline/fill appearance), hints, errors,\n * and prefix/suffix slots. Automatically wires ARIA attributes for accessibility.\n *\n * The form field reads state from its inner `FormFieldControl` child (typically\n * a `ComInput` directive) and renders UI accordingly.\n *\n * @tokens `--color-foreground`, `--color-input-border`, `--color-input-background`,\n * `--color-primary`, `--color-accent`, `--color-warn`, `--color-ring`,\n * `--color-muted`, `--color-muted-foreground`, `--color-disabled`,\n * `--color-disabled-foreground`, `--color-background`, `--radius-input`\n *\n * @example Basic outline field\n * ```html\n * <com-form-field>\n * <label comLabel>Email</label>\n * <input comInput formControlName=\"email\" />\n * <span comHint>We'll never share your email.</span>\n * <span comError match=\"required\">Email is required.</span>\n * </com-form-field>\n * ```\n *\n * @example Fill appearance\n * ```html\n * <com-form-field appearance=\"fill\">\n * <label comLabel>Username</label>\n * <input comInput formControlName=\"username\" />\n * </com-form-field>\n * ```\n *\n * @example With prefix and suffix\n * ```html\n * <com-form-field>\n * <label comLabel>Amount</label>\n * <span comPrefix>$</span>\n * <input comInput type=\"number\" formControlName=\"amount\" />\n * <span comSuffix>.00</span>\n * </com-form-field>\n * ```\n */\n@Component({\n selector: 'com-form-field',\n exportAs: 'comFormField',\n template: `\n <div [class]=\"containerClasses()\" (click)=\"onContainerClick($event)\">\n <div class=\"flex items-center w-full\">\n @if (hasPrefix()) {\n <ng-content select=\"[comPrefix]\" />\n }\n @if (labelChild()) {\n <span [class]=\"labelClasses()\">\n <ng-content select=\"[comLabel]\" />\n @if (showRequiredMarker()) {\n <span class=\"text-warn\" aria-hidden=\"true\">&thinsp;*</span>\n }\n </span>\n }\n <div class=\"flex-1 min-w-0\">\n <ng-content />\n </div>\n @if (hasSuffix()) {\n <ng-content select=\"[comSuffix]\" />\n }\n </div>\n </div>\n\n <div [class]=\"subscriptClasses()\">\n <div [class.hidden]=\"!showErrors()\">\n <ng-content select=\"[comError]\" />\n </div>\n <div [class.hidden]=\"showErrors()\" class=\"flex justify-between w-full gap-2\">\n <ng-content select=\"[comHint]:not([align='end'])\" />\n <ng-content select=\"[comHint][align='end']\" />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: `\n /* Hide placeholder when label exists and is not floating (label acts as placeholder) */\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) input::placeholder,\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) textarea::placeholder {\n color: transparent;\n }\n\n /* Hide dropdown placeholder when label exists and is not floating */\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-dropdown .text-placeholder {\n display: none;\n }\n\n /* Make dropdown fill available space inside form-field */\n com-form-field com-dropdown {\n display: block;\n width: 100%;\n }\n\n /* Make datepicker fill available space inside form-field */\n com-form-field com-datepicker {\n display: block;\n width: 100%;\n }\n\n /* Make date-range-picker fill available space inside form-field */\n com-form-field com-date-range-picker {\n display: block;\n width: 100%;\n }\n\n /* Make time-picker fill available space inside form-field */\n com-form-field com-time-picker {\n display: block;\n width: 100%;\n }\n\n /* Hide datepicker placeholder when label exists and is not floating */\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-datepicker input::placeholder {\n color: transparent;\n }\n\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-date-range-picker input::placeholder {\n color: transparent;\n }\n\n /* Hide time picker separators and period button when label is not floating */\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-time-picker span[aria-hidden],\n com-form-field.com-form-field--has-label:not(.com-form-field--floating) com-time-picker button {\n visibility: hidden;\n }\n `,\n host: {\n '[class]': 'hostClasses()',\n '[class.com-form-field--focused]': 'isFocused()',\n '[class.com-form-field--disabled]': 'isDisabled()',\n '[class.com-form-field--error]': 'hasError()',\n '[class.com-form-field--floating]': 'shouldLabelFloat()',\n '[class.com-form-field--has-label]': '!!labelChild()',\n },\n})\nexport class ComFormField {\n private readonly defaults = inject(FORM_FIELD_DEFAULTS, { optional: true });\n\n // Content children\n readonly control: Signal<FormFieldControl | undefined> = contentChild<FormFieldControl>(FormFieldControl);\n readonly inputDirective: Signal<ComInput | undefined> = contentChild<ComInput>(ComInput);\n readonly labelChild: Signal<ComLabel | undefined> = contentChild<ComLabel>(ComLabel);\n readonly hintChildren: Signal<readonly ComHint[]> = contentChildren<ComHint>(ComHint);\n readonly errorChildren: Signal<readonly ComError[]> = contentChildren<ComError>(ComError);\n readonly prefixChild: Signal<ComPrefix | undefined> = contentChild<ComPrefix>(ComPrefix);\n readonly suffixChild: Signal<ComSuffix | undefined> = contentChild<ComSuffix>(ComSuffix);\n\n // Inputs with defaults fallback\n readonly appearance: InputSignal<FormFieldAppearance> = input<FormFieldAppearance>(\n this.defaults?.appearance ?? 'outline'\n );\n readonly color: InputSignal<FormFieldColor> = input<FormFieldColor>(this.defaults?.color ?? 'primary');\n readonly floatLabel: InputSignal<FormFieldFloatLabel> = input<FormFieldFloatLabel>(\n this.defaults?.floatLabel ?? 'auto'\n );\n readonly hideRequiredMarker: InputSignalWithTransform<boolean, unknown> = input(\n this.defaults?.hideRequiredMarker ?? false,\n { transform: booleanAttribute }\n );\n readonly subscriptSizing: InputSignal<FormFieldSubscriptSizing> = input<FormFieldSubscriptSizing>(\n this.defaults?.subscriptSizing ?? 'fixed'\n );\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n // Derived state from inner control\n readonly shouldLabelFloat: Signal<boolean> = computed(() => {\n if (this.floatLabel() === 'always') return true;\n return this.control()?.shouldLabelFloat() ?? false;\n });\n\n readonly isFocused: Signal<boolean> = computed(() => this.control()?.focused() ?? false);\n readonly isDisabled: Signal<boolean> = computed(() => this.control()?.disabled() ?? false);\n readonly hasError: Signal<boolean> = computed(() => this.control()?.errorState() ?? false);\n readonly hasPrefix: Signal<boolean> = computed(() => !!this.prefixChild());\n readonly hasSuffix: Signal<boolean> = computed(() => !!this.suffixChild());\n\n readonly showRequiredMarker: Signal<boolean> = computed(() => {\n if (this.hideRequiredMarker()) return false;\n return this.control()?.required() ?? false;\n });\n\n readonly showErrors: Signal<boolean> = computed(() => this.hasError() && this.errorChildren().length > 0);\n\n // Computed classes\n protected readonly hostClasses: Signal<string> = computed(() =>\n mergeClasses(formFieldVariants({ disabled: this.isDisabled() }), this.userClass())\n );\n\n protected readonly containerClasses: Signal<string> = computed(() =>\n formFieldContainerVariants({\n appearance: this.appearance(),\n color: this.color(),\n focused: this.isFocused(),\n error: this.hasError(),\n disabled: this.isDisabled(),\n })\n );\n\n protected readonly labelClasses: Signal<string> = computed(() =>\n formFieldLabelVariants({\n appearance: this.appearance(),\n floating: this.shouldLabelFloat(),\n color: this.color(),\n error: this.hasError(),\n focused: this.isFocused(),\n disabled: this.isDisabled(),\n })\n );\n\n protected readonly subscriptClasses: Signal<string> = computed(() =>\n formFieldSubscriptVariants({ sizing: this.subscriptSizing() })\n );\n\n constructor() {\n // Wire up label to control\n effect(() => {\n const label = this.labelChild();\n const ctrl = this.control();\n if (label && ctrl) {\n label.setForId(ctrl.id());\n }\n });\n\n // Wire up aria-describedby on the control\n effect(() => {\n const ctrl = this.control();\n if (!ctrl || !('setDescribedByIds' in ctrl)) return;\n\n const ids = this.showErrors()\n ? this.errorChildren().filter((e) => e.shouldShow()).map((e) => e.id)\n : this.hintChildren().map((h) => h.id);\n (ctrl as { setDescribedByIds: (ids: string) => void }).setDescribedByIds(ids.join(' '));\n });\n\n // Wire up appearance to control for proper styling\n effect(() => {\n const ctrl = this.control();\n if (ctrl && 'setAppearance' in ctrl) {\n (ctrl as { setAppearance: (appearance: FormFieldAppearance) => void }).setAppearance(this.appearance());\n }\n });\n\n // Wire up control reference to error directives (re-runs on error state change)\n effect(() => {\n // Read hasError to trigger re-evaluation when validation state changes\n this.hasError();\n const ctrl = this.control();\n if (!ctrl) return;\n\n const errors = ctrl.errors?.() ?? null;\n if (errors !== null) {\n // Signal Forms path: pass structured errors to each comError\n this.errorChildren().forEach((error) => error.setSignalErrors(errors as readonly unknown[]));\n } else {\n // Reactive Forms path: pass AbstractControl reference\n const ngControl = ctrl.ngControl?.control ?? null;\n this.errorChildren().forEach((error) => error.setControl(ngControl));\n }\n });\n }\n\n protected onContainerClick(event: MouseEvent): void {\n this.control()?.onContainerClick(event);\n }\n}\n","// Public API for the form-field component\n\n// Main component\nexport { ComFormField } from './form-field.component';\n\n// Directives\nexport { ComInput } from './input.directive';\nexport { ComLabel } from './label.directive';\nexport { ComHint, type HintAlign } from './hint.directive';\nexport { ComError } from './error.directive';\nexport { ComPrefix } from './prefix.directive';\nexport { ComSuffix } from './suffix.directive';\n\n// Abstract class for custom controls\nexport { FormFieldControl } from './form-field-control';\n\n// Error state matching\nexport { ErrorStateMatcher } from './error-state-matcher';\n\n// Configuration\nexport {\n FORM_FIELD_DEFAULTS,\n type FormFieldDefaults,\n type FormFieldAppearance,\n type FormFieldColor,\n type FormFieldFloatLabel,\n type FormFieldSubscriptSizing,\n} from './form-field-defaults';\n\n// Variants (for advanced customization)\nexport {\n formFieldVariants,\n formFieldContainerVariants,\n formFieldLabelVariants,\n formFieldSubscriptVariants,\n hintVariants,\n errorVariants,\n prefixVariants,\n suffixVariants,\n type FormFieldVariants,\n type FormFieldContainerVariants,\n type FormFieldLabelVariants,\n type FormFieldSubscriptVariants,\n} from './form-field.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextId"],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, input, booleanAttribute, signal, computed, Directive } from '@angular/core';
3
+ import { NgForm, FormGroupDirective, NgControl } from '@angular/forms';
4
+ import { ErrorStateMatcher } from 'ngx-com/components/form-field';
5
+ import { mergeClasses } from 'ngx-com/utils';
6
+ import { cva } from 'class-variance-authority';
7
+
8
+ /**
9
+ * CVA variants for the native control directive.
10
+ *
11
+ * @tokens `--color-input-border`, `--color-input-background`, `--color-input-foreground`,
12
+ * `--color-input-placeholder`, `--color-disabled`, `--color-disabled-foreground`,
13
+ * `--color-ring`, `--color-warn`, `--color-muted`, `--color-border`,
14
+ * `--radius-input`
15
+ */
16
+ const nativeControlVariants = cva([
17
+ 'com-native-control',
18
+ 'w-full',
19
+ 'text-input-foreground',
20
+ 'placeholder:text-input-placeholder',
21
+ 'rounded-input',
22
+ 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
23
+ 'disabled:bg-disabled disabled:text-disabled-foreground disabled:border-disabled disabled:cursor-not-allowed',
24
+ 'read-only:bg-muted read-only:cursor-default',
25
+ 'aria-[invalid=true]:border-warn aria-[invalid=true]:ring-1 aria-[invalid=true]:ring-warn',
26
+ 'file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-input-foreground',
27
+ 'transition-colors',
28
+ ], {
29
+ variants: {
30
+ variant: {
31
+ outline: [
32
+ 'border border-input-border bg-input-background',
33
+ 'hover:border-border',
34
+ ],
35
+ filled: [
36
+ 'border border-transparent bg-muted',
37
+ 'hover:bg-muted-hover',
38
+ 'focus-visible:border-input-border focus-visible:bg-input-background',
39
+ ],
40
+ ghost: [
41
+ 'border border-transparent bg-transparent',
42
+ 'hover:bg-muted',
43
+ 'focus-visible:border-input-border focus-visible:bg-input-background',
44
+ ],
45
+ },
46
+ size: {
47
+ sm: 'h-8 px-2.5 text-sm',
48
+ default: 'h-10 px-3 text-sm',
49
+ lg: 'h-12 px-4 text-base',
50
+ },
51
+ error: {
52
+ true: 'border-warn ring-1 ring-warn focus-visible:outline-warn',
53
+ false: '',
54
+ },
55
+ },
56
+ defaultVariants: {
57
+ variant: 'outline',
58
+ size: 'default',
59
+ error: false,
60
+ },
61
+ });
62
+
63
+ /**
64
+ * Standalone styling directive for native `<input>`, `<select>`, and `<textarea>` elements.
65
+ *
66
+ * Applies consistent borders, background, text color, focus outline, disabled state,
67
+ * error state, and size scaling via CVA. Integrates with both Reactive Forms (via NgControl)
68
+ * and Signal Forms (via `invalid`/`touched` inputs set by `[formField]`).
69
+ *
70
+ * For full form integration (label, hint, error), use `com-form-field` + `comInput`.
71
+ *
72
+ * @tokens `--color-input-border`, `--color-input-background`, `--color-input-foreground`,
73
+ * `--color-input-placeholder`, `--color-disabled`, `--color-disabled-foreground`,
74
+ * `--color-ring`, `--color-warn`, `--color-muted`, `--color-border`,
75
+ * `--radius-input`
76
+ *
77
+ * @example Basic usage
78
+ * ```html
79
+ * <input comNativeControl placeholder="Enter your name" />
80
+ * ```
81
+ *
82
+ * @example Variants
83
+ * ```html
84
+ * <input comNativeControl variant="outline" placeholder="Outline (default)" />
85
+ * <input comNativeControl variant="filled" placeholder="Filled" />
86
+ * <input comNativeControl variant="ghost" placeholder="Ghost" />
87
+ * ```
88
+ *
89
+ * @example Reactive Forms
90
+ * ```html
91
+ * <input comNativeControl [formControl]="nameCtrl" />
92
+ * ```
93
+ *
94
+ * @example Signal Forms
95
+ * ```html
96
+ * <input comNativeControl [formField]="myForm.name" />
97
+ * ```
98
+ */
99
+ class ComNativeControl {
100
+ defaultErrorStateMatcher = inject(ErrorStateMatcher);
101
+ parentForm = inject(NgForm, { optional: true });
102
+ parentFormGroup = inject(FormGroupDirective, { optional: true });
103
+ /** NgControl bound to this element (if using reactive forms). */
104
+ ngControl = inject(NgControl, { optional: true, self: true });
105
+ /** Whether the form system is Signal Forms (no NgControl present). */
106
+ isSignalForms = !this.ngControl;
107
+ // ── Inputs ──
108
+ /** Visual variant — outline (bordered), filled (bg fill), or ghost (transparent) */
109
+ variant = input('outline', ...(ngDevMode ? [{ debugName: "variant" }] : []));
110
+ /** Control size — affects height, padding, and font size */
111
+ size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : []));
112
+ /** Consumer CSS classes — merged with variant classes via mergeClasses() */
113
+ userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
114
+ /** Custom error state matcher (overrides the default). */
115
+ errorStateMatcher = input(...(ngDevMode ? [undefined, { debugName: "errorStateMatcher" }] : []));
116
+ // ── Signal Forms inputs — set automatically by [formField] ──
117
+ sfInvalid = input(false, { ...(ngDevMode ? { debugName: "sfInvalid" } : {}), alias: 'invalid',
118
+ transform: booleanAttribute });
119
+ sfTouched = input(false, { ...(ngDevMode ? { debugName: "sfTouched" } : {}), alias: 'touched',
120
+ transform: booleanAttribute });
121
+ // ── Error state ──
122
+ /**
123
+ * Reactive Forms error state — imperatively updated in DoCheck because
124
+ * NgControl properties (touched, invalid) are not signals.
125
+ */
126
+ _reactiveErrorState = signal(false, ...(ngDevMode ? [{ debugName: "_reactiveErrorState" }] : []));
127
+ /** Whether the control is in an error state. */
128
+ errorState = computed(() => {
129
+ if (this.isSignalForms) {
130
+ return this.sfInvalid() && this.sfTouched();
131
+ }
132
+ return this._reactiveErrorState();
133
+ }, ...(ngDevMode ? [{ debugName: "errorState" }] : []));
134
+ /** @internal Computed host class from CVA + consumer overrides */
135
+ computedClass = computed(() => mergeClasses(nativeControlVariants({
136
+ variant: this.variant(),
137
+ size: this.size(),
138
+ error: this.errorState(),
139
+ }), this.userClass()), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
140
+ ngDoCheck() {
141
+ if (this.ngControl) {
142
+ const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;
143
+ const form = this.parentFormGroup ?? this.parentForm;
144
+ this._reactiveErrorState.set(matcher.isErrorState(this.ngControl.control ?? null, form));
145
+ }
146
+ }
147
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComNativeControl, deps: [], target: i0.ɵɵFactoryTarget.Directive });
148
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ComNativeControl, isStandalone: true, selector: "input[comNativeControl], select[comNativeControl], textarea[comNativeControl]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, sfInvalid: { classPropertyName: "sfInvalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, sfTouched: { classPropertyName: "sfTouched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()", "attr.aria-invalid": "errorState() || null" } }, exportAs: ["comNativeControl"], ngImport: i0 });
149
+ }
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComNativeControl, decorators: [{
151
+ type: Directive,
152
+ args: [{
153
+ selector: 'input[comNativeControl], select[comNativeControl], textarea[comNativeControl]',
154
+ exportAs: 'comNativeControl',
155
+ host: {
156
+ '[class]': 'computedClass()',
157
+ '[attr.aria-invalid]': 'errorState() || null',
158
+ },
159
+ }]
160
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], errorStateMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorStateMatcher", required: false }] }], sfInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], sfTouched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }] } });
161
+
162
+ // Public API for the native-control directive
163
+ // Main directive
164
+
165
+ /**
166
+ * Generated bundle index. Do not edit.
167
+ */
168
+
169
+ export { ComNativeControl, nativeControlVariants };
170
+ //# sourceMappingURL=ngx-com-components-native-control.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-com-components-native-control.mjs","sources":["../../../projects/com/components/native-control/native-control.variants.ts","../../../projects/com/components/native-control/native-control.directive.ts","../../../projects/com/components/native-control/index.ts","../../../projects/com/components/native-control/ngx-com-components-native-control.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Size type for native control.\n */\nexport type NativeControlSize = 'sm' | 'default' | 'lg';\n\n/**\n * Visual variant for native control.\n */\nexport type NativeControlVariant = 'outline' | 'filled' | 'ghost';\n\n/**\n * CVA variants for the native control directive.\n *\n * @tokens `--color-input-border`, `--color-input-background`, `--color-input-foreground`,\n * `--color-input-placeholder`, `--color-disabled`, `--color-disabled-foreground`,\n * `--color-ring`, `--color-warn`, `--color-muted`, `--color-border`,\n * `--radius-input`\n */\nexport const nativeControlVariants: (props?: {\n variant?: NativeControlVariant;\n size?: NativeControlSize;\n error?: boolean;\n}) => string = cva(\n [\n 'com-native-control',\n 'w-full',\n 'text-input-foreground',\n 'placeholder:text-input-placeholder',\n 'rounded-input',\n 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:bg-disabled disabled:text-disabled-foreground disabled:border-disabled disabled:cursor-not-allowed',\n 'read-only:bg-muted read-only:cursor-default',\n 'aria-[invalid=true]:border-warn aria-[invalid=true]:ring-1 aria-[invalid=true]:ring-warn',\n 'file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-input-foreground',\n 'transition-colors',\n ],\n {\n variants: {\n variant: {\n outline: [\n 'border border-input-border bg-input-background',\n 'hover:border-border',\n ],\n filled: [\n 'border border-transparent bg-muted',\n 'hover:bg-muted-hover',\n 'focus-visible:border-input-border focus-visible:bg-input-background',\n ],\n ghost: [\n 'border border-transparent bg-transparent',\n 'hover:bg-muted',\n 'focus-visible:border-input-border focus-visible:bg-input-background',\n ],\n },\n size: {\n sm: 'h-8 px-2.5 text-sm',\n default: 'h-10 px-3 text-sm',\n lg: 'h-12 px-4 text-base',\n },\n error: {\n true: 'border-warn ring-1 ring-warn focus-visible:outline-warn',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'outline',\n size: 'default',\n error: false,\n },\n }\n);\n\nexport type NativeControlVariants = VariantProps<typeof nativeControlVariants>;\n","import {\n booleanAttribute,\n computed,\n Directive,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport type { DoCheck, InputSignal, InputSignalWithTransform, Signal, WritableSignal } from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { ErrorStateMatcher } from 'ngx-com/components/form-field';\nimport { mergeClasses } from './native-control.utils';\nimport { nativeControlVariants } from './native-control.variants';\nimport type { NativeControlSize, NativeControlVariant } from './native-control.variants';\n\n/**\n * Standalone styling directive for native `<input>`, `<select>`, and `<textarea>` elements.\n *\n * Applies consistent borders, background, text color, focus outline, disabled state,\n * error state, and size scaling via CVA. Integrates with both Reactive Forms (via NgControl)\n * and Signal Forms (via `invalid`/`touched` inputs set by `[formField]`).\n *\n * For full form integration (label, hint, error), use `com-form-field` + `comInput`.\n *\n * @tokens `--color-input-border`, `--color-input-background`, `--color-input-foreground`,\n * `--color-input-placeholder`, `--color-disabled`, `--color-disabled-foreground`,\n * `--color-ring`, `--color-warn`, `--color-muted`, `--color-border`,\n * `--radius-input`\n *\n * @example Basic usage\n * ```html\n * <input comNativeControl placeholder=\"Enter your name\" />\n * ```\n *\n * @example Variants\n * ```html\n * <input comNativeControl variant=\"outline\" placeholder=\"Outline (default)\" />\n * <input comNativeControl variant=\"filled\" placeholder=\"Filled\" />\n * <input comNativeControl variant=\"ghost\" placeholder=\"Ghost\" />\n * ```\n *\n * @example Reactive Forms\n * ```html\n * <input comNativeControl [formControl]=\"nameCtrl\" />\n * ```\n *\n * @example Signal Forms\n * ```html\n * <input comNativeControl [formField]=\"myForm.name\" />\n * ```\n */\n@Directive({\n selector: 'input[comNativeControl], select[comNativeControl], textarea[comNativeControl]',\n exportAs: 'comNativeControl',\n host: {\n '[class]': 'computedClass()',\n '[attr.aria-invalid]': 'errorState() || null',\n },\n})\nexport class ComNativeControl implements DoCheck {\n private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n /** NgControl bound to this element (if using reactive forms). */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Whether the form system is Signal Forms (no NgControl present). */\n private readonly isSignalForms: boolean = !this.ngControl;\n\n // ── Inputs ──\n\n /** Visual variant — outline (bordered), filled (bg fill), or ghost (transparent) */\n readonly variant: InputSignal<NativeControlVariant> = input<NativeControlVariant>('outline');\n\n /** Control size — affects height, padding, and font size */\n readonly size: InputSignal<NativeControlSize> = input<NativeControlSize>('default');\n\n /** Consumer CSS classes — merged with variant classes via mergeClasses() */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Custom error state matcher (overrides the default). */\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n // ── Signal Forms inputs — set automatically by [formField] ──\n\n readonly sfInvalid: InputSignalWithTransform<boolean, unknown> = input(false, {\n alias: 'invalid',\n transform: booleanAttribute,\n });\n readonly sfTouched: InputSignalWithTransform<boolean, unknown> = input(false, {\n alias: 'touched',\n transform: booleanAttribute,\n });\n\n // ── Error state ──\n\n /**\n * Reactive Forms error state — imperatively updated in DoCheck because\n * NgControl properties (touched, invalid) are not signals.\n */\n private readonly _reactiveErrorState: WritableSignal<boolean> = signal(false);\n\n /** Whether the control is in an error state. */\n readonly errorState: Signal<boolean> = computed(() => {\n if (this.isSignalForms) {\n return this.sfInvalid() && this.sfTouched();\n }\n return this._reactiveErrorState();\n });\n\n /** @internal Computed host class from CVA + consumer overrides */\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n nativeControlVariants({\n variant: this.variant(),\n size: this.size(),\n error: this.errorState(),\n }),\n this.userClass()\n )\n );\n\n ngDoCheck(): void {\n if (this.ngControl) {\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n this._reactiveErrorState.set(\n matcher.isErrorState(this.ngControl.control ?? null, form)\n );\n }\n }\n}\n","// Public API for the native-control directive\n\n// Main directive\nexport { ComNativeControl } from './native-control.directive';\n\n// Variants (for advanced customization)\nexport { nativeControlVariants } from './native-control.variants';\n\nexport type {\n NativeControlVariant,\n NativeControlSize,\n NativeControlVariants,\n} from './native-control.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}