@vsn-ux/ngx-gaia 0.9.3 → 0.9.5

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.
@@ -561,6 +561,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
561
561
  }] });
562
562
 
563
563
  const GA_FORM_CONTROL_ADAPTER = new InjectionToken('ga-form-control-adapter');
564
+ /**
565
+ * @internal - This function is for internal library use only
566
+ */
564
567
  function injectNgControlState({ implicitChildNgControl, explicitNgControl, explicitNgForm, } = {}) {
565
568
  const gaFormControlAdapter = inject(GA_FORM_CONTROL_ADAPTER, {
566
569
  optional: true,
@@ -605,7 +608,7 @@ function injectNgControlState({ implicitChildNgControl, explicitNgControl, expli
605
608
  }
606
609
  const ngControl = explicitNgControl ??
607
610
  implicitChildNgControl?.() ??
608
- injector.get(NgControl, null, { self: true, optional: true });
611
+ injector.get(NgControl, null, { optional: true });
609
612
  if (ngControl?.control) {
610
613
  const updateStatuses = () => {
611
614
  ngControlErrors.set(ngControl.errors);
@@ -1244,10 +1247,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
1244
1247
  }, template: "<div class=\"ga-calendar__header\">\n <div class=\"ga-calendar__month-year\">\n <button\n type=\"button\"\n class=\"ga-calendar__month-year-button\"\n (click)=\"toggleMonthView()\"\n [attr.aria-label]=\"i18n.selectMonthLabel\"\n >\n {{ getMonthName(viewDate().month) }}\n <ga-icon\n [icon]=\"viewMode() === 'month' ? icons.ChevronUp : icons.ChevronDown\"\n size=\"16\"\n />\n </button>\n <button\n type=\"button\"\n class=\"ga-calendar__month-year-button\"\n (click)=\"toggleYearView()\"\n [attr.aria-label]=\"i18n.selectYearLabel\"\n >\n {{ viewDate().year }}\n <ga-icon\n [icon]=\"viewMode() === 'year' ? icons.ChevronUp : icons.ChevronDown\"\n size=\"16\"\n />\n </button>\n </div>\n @if (viewMode() !== 'month') {\n <div class=\"ga-calendar__navigation\">\n <button\n type=\"button\"\n class=\"ga-calendar__navigation-button\"\n (click)=\"navigatePrevious()\"\n [attr.aria-label]=\"i18n.previousLabel\"\n >\n <ga-icon [icon]=\"icons.ChevronLeft\" size=\"24\" />\n </button>\n <button\n type=\"button\"\n class=\"ga-calendar__navigation-button\"\n (click)=\"navigateNext()\"\n [attr.aria-label]=\"i18n.nextLabel\"\n >\n <ga-icon [icon]=\"icons.ChevronRight\" size=\"24\" />\n </button>\n </div>\n }\n</div>\n\n@switch (viewMode()) {\n @case ('day') {\n <div class=\"ga-calendar__weekdays\">\n @for (day of weekDays(); track day) {\n <div class=\"ga-calendar__weekday\">{{ day }}</div>\n }\n </div>\n <div class=\"ga-calendar__selection ga-calendar__selection--day\">\n @for (\n dateStruct of calendarDays();\n track dateStruct.year + '-' + dateStruct.month + '-' + dateStruct.day\n ) {\n <button\n type=\"button\"\n class=\"ga-calendar__day\"\n [class.ga-calendar__day--selected]=\"isSelected(dateStruct)\"\n [class.ga-calendar__day--current]=\"isToday(dateStruct)\"\n [class.ga-calendar__day--disabled]=\"isDateDisabled(dateStruct)\"\n [class.ga-calendar__day--weekend]=\"isWeekend(dateStruct)\"\n [disabled]=\"isDateDisabled(dateStruct)\"\n (click)=\"selectDate(dateStruct)\"\n >\n {{ dateStruct.day }}\n </button>\n }\n </div>\n }\n @case ('month') {\n <div class=\"ga-calendar__selection ga-calendar__selection--month\">\n @for (month of months(); track month.index) {\n <button\n type=\"button\"\n class=\"ga-calendar__month\"\n [class.ga-calendar__month--selected]=\"isSelectedMonth(month.index)\"\n [class.ga-calendar__month--disabled]=\"isMonthDisabled(month.index)\"\n [disabled]=\"isMonthDisabled(month.index)\"\n (click)=\"selectMonth(month.index)\"\n >\n {{ month.shortName }}\n </button>\n }\n </div>\n }\n @case ('year') {\n <div class=\"ga-calendar__selection ga-calendar__selection--year\">\n @for (year of years(); track year) {\n <button\n type=\"button\"\n class=\"ga-calendar__year\"\n [class.ga-calendar__year--selected]=\"isSelectedYear(year)\"\n [class.ga-calendar__year--disabled]=\"isYearDisabled(year)\"\n [disabled]=\"isYearDisabled(year)\"\n (click)=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n}\n", styles: [":host{display:block}\n"] }]
1245
1248
  }] });
1246
1249
 
1250
+ /**
1251
+ * @internal - Internal service for form field coordination
1252
+ */
1247
1253
  class GaFormFieldConnector {
1248
1254
  controlDisabled = signal(false);
1249
1255
  controlId = signal(null);
1250
1256
  labelId = signal(null);
1257
+ control = signal(null);
1251
1258
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFormFieldConnector, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1252
1259
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFormFieldConnector });
1253
1260
  }
@@ -1721,6 +1728,8 @@ class GaDatepickerInputDirective {
1721
1728
  if (emitToNgModel) {
1722
1729
  this.onNgTouchedFn?.();
1723
1730
  this.onNgChangeFn?.(value);
1731
+ this.dateInput.emit(value);
1732
+ this.dateChange.emit(value);
1724
1733
  }
1725
1734
  }
1726
1735
  // ControlValueAccessor implementation
@@ -2031,49 +2040,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
2031
2040
  }]
2032
2041
  }] });
2033
2042
 
2034
- const GA_FORM_FIELD_ID = new InjectionToken('ga-form-field-id');
2035
-
2036
- class GaFormControlDirective {
2037
- formFieldId = inject(GA_FORM_FIELD_ID, { optional: true });
2038
- ngControlInput = input(undefined, {
2039
- alias: 'gaFormControl',
2040
- });
2041
- explicitNgControl = computed(() => {
2042
- const ngControl = this.ngControlInput();
2043
- if (ngControl instanceof NgControl) {
2044
- return ngControl;
2045
- }
2046
- return null;
2047
- });
2048
- ngControlState = injectNgControlState({
2049
- explicitNgControl: this.explicitNgControl,
2050
- });
2051
- inError = this.ngControlState.inError;
2052
- errors = this.ngControlState.errors;
2053
- ariaErrorMessageId = computed(() => {
2054
- if (!this.formFieldId || !this.inError()) {
2055
- return null;
2056
- }
2057
- return `${this.formFieldId}-callout`;
2058
- });
2059
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFormControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2060
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.4", type: GaFormControlDirective, isStandalone: true, selector: "[gaFormControl]", inputs: { ngControlInput: { classPropertyName: "ngControlInput", publicName: "gaFormControl", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-invalid": "inError() ? \"true\" : null", "attr.aria-errormessage": "ariaErrorMessageId()" } }, exportAs: ["gaFormControl"], ngImport: i0 });
2043
+ const GA_FORM_ERRORS = new InjectionToken('GA_FORM_ERRORS', { providedIn: 'root', factory: () => ({}) });
2044
+ /**
2045
+ * Provides global form error messages that can be used across the application.
2046
+ * These errors will be displayed when a form control has validation errors
2047
+ * but no specific gaError directive template is provided.
2048
+ *
2049
+ * @param config - Either a static record of error messages or a factory function
2050
+ * @returns EnvironmentProviders for configuring global form errors
2051
+ *
2052
+ * @example
2053
+ * ```ts
2054
+ * // Static configuration
2055
+ * provideGaFormErrors({
2056
+ * required: 'This field is required',
2057
+ * email: 'Please enter a valid email address',
2058
+ * minlength: 'Input is too short'
2059
+ * })
2060
+ *
2061
+ * // Dynamic configuration with functions that access error data
2062
+ * provideGaFormErrors({
2063
+ * required: 'This field is required',
2064
+ * minlength: (error) => `Minimum ${error.requiredLength} characters required`,
2065
+ * pattern: (error) => `Input format is invalid. Expected pattern: ${error.requiredPattern}`
2066
+ * })
2067
+ *
2068
+ * // Factory function for lazy evaluation
2069
+ * provideGaFormErrors(() => ({
2070
+ * required: translateService.get('errors.required'),
2071
+ * email: translateService.get('errors.email')
2072
+ * }))
2073
+ * ```
2074
+ */
2075
+ function provideGaFormErrors(config) {
2076
+ return makeEnvironmentProviders([
2077
+ typeof config === 'function'
2078
+ ? { provide: GA_FORM_ERRORS, useFactory: config }
2079
+ : { provide: GA_FORM_ERRORS, useValue: config },
2080
+ ]);
2061
2081
  }
2062
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFormControlDirective, decorators: [{
2063
- type: Directive,
2064
- args: [{
2065
- exportAs: 'gaFormControl',
2066
- selector: '[gaFormControl]',
2067
- host: {
2068
- '[attr.aria-invalid]': 'inError() ? "true" : null',
2069
- '[attr.aria-errormessage]': 'ariaErrorMessageId()',
2070
- },
2071
- }]
2072
- }] });
2073
2082
 
2074
2083
  class GaFieldCalloutComponent {
2075
2084
  icons = { OctagonAlert };
2076
2085
  formField = inject(GaFormFieldComponent);
2086
+ globalErrors = inject(GA_FORM_ERRORS);
2077
2087
  id = this.formField.uniqueId + '-callout';
2078
2088
  shouldShowError = computed(() => {
2079
2089
  const formControl = this.formField.formControl();
@@ -2091,20 +2101,40 @@ class GaFieldCalloutComponent {
2091
2101
  .fieldErrors()
2092
2102
  .filter((err) => err.key());
2093
2103
  const controlErrorKeys = Object.keys(formControl.errors());
2094
- return registeredErrors
2104
+ const errors = [];
2105
+ // First, add errors that have matching gaError directives
2106
+ const registeredErrorKeys = new Set(registeredErrors.map((err) => err.key()));
2107
+ registeredErrors
2095
2108
  .filter((err) => controlErrorKeys.includes(err.key()))
2096
- .map((err) => {
2109
+ .forEach((err) => {
2097
2110
  const errorKey = err.key();
2098
- return {
2111
+ errors.push({
2099
2112
  key: errorKey,
2100
2113
  templateRef: err.templateRef,
2101
2114
  error: formControl.errors()[errorKey],
2102
- };
2115
+ });
2116
+ });
2117
+ // Then, add global errors for keys that don't have gaError directives
2118
+ controlErrorKeys
2119
+ .filter((key) => !registeredErrorKeys.has(key))
2120
+ .forEach((key) => {
2121
+ const errorMessage = this.globalErrors[key];
2122
+ if (errorMessage) {
2123
+ const message = typeof errorMessage === 'function'
2124
+ ? errorMessage(formControl.errors()[key])
2125
+ : errorMessage;
2126
+ errors.push({
2127
+ key,
2128
+ error: formControl.errors()[key],
2129
+ message,
2130
+ });
2131
+ }
2103
2132
  });
2133
+ return errors;
2104
2134
  });
2105
2135
  hasCallout = computed(() => !!this.formField.fieldInfo() || this.shouldShowError());
2106
2136
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFieldCalloutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2107
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: GaFieldCalloutComponent, isStandalone: true, selector: "ga-field-callout", host: { properties: { "attr.id": "id", "style.display": "hasCallout() ? null : \"none\"" }, classAttribute: "ga-form-field__info" }, ngImport: i0, template: "@if (shouldShowError()) {\n <ga-icon\n [icon]=\"icons.OctagonAlert\"\n class=\"ga-icon\"\n style=\"color: var(--ga-color-icon-error)\"\n size=\"16\"\n />\n <div>\n @for (error of overlappingErrors(); track error.key; let last = $last) {\n <span\n ><ng-container\n [ngTemplateOutlet]=\"error.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error }\"\n />&nbsp;</span\n >\n }\n </div>\n} @else if (formField.fieldInfo()) {\n <ng-container [ngTemplateOutlet]=\"formField.fieldInfo()!.templateRef()\" />\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2137
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: GaFieldCalloutComponent, isStandalone: true, selector: "ga-field-callout", host: { properties: { "attr.id": "id", "style.display": "hasCallout() ? null : \"none\"" }, classAttribute: "ga-form-field__info" }, ngImport: i0, template: "@if (shouldShowError()) {\n <ga-icon\n [icon]=\"icons.OctagonAlert\"\n class=\"ga-icon\"\n style=\"color: var(--ga-color-icon-error)\"\n size=\"16\"\n />\n <div>\n @for (error of overlappingErrors(); track error.key; let last = $last) {\n <span>\n @if (error.templateRef) {\n <ng-container\n [ngTemplateOutlet]=\"error.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error }\"\n />\n } @else {\n {{ error.message }}\n }\n @if (!last) {\n &nbsp;\n }\n </span>\n }\n </div>\n} @else if (formField.fieldInfo()) {\n <ng-container [ngTemplateOutlet]=\"formField.fieldInfo()!.templateRef()\" />\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2108
2138
  }
2109
2139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFieldCalloutComponent, decorators: [{
2110
2140
  type: Component,
@@ -2112,7 +2142,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
2112
2142
  class: 'ga-form-field__info',
2113
2143
  '[attr.id]': 'id',
2114
2144
  '[style.display]': 'hasCallout() ? null : "none"',
2115
- }, template: "@if (shouldShowError()) {\n <ga-icon\n [icon]=\"icons.OctagonAlert\"\n class=\"ga-icon\"\n style=\"color: var(--ga-color-icon-error)\"\n size=\"16\"\n />\n <div>\n @for (error of overlappingErrors(); track error.key; let last = $last) {\n <span\n ><ng-container\n [ngTemplateOutlet]=\"error.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error }\"\n />&nbsp;</span\n >\n }\n </div>\n} @else if (formField.fieldInfo()) {\n <ng-container [ngTemplateOutlet]=\"formField.fieldInfo()!.templateRef()\" />\n}\n" }]
2145
+ }, template: "@if (shouldShowError()) {\n <ga-icon\n [icon]=\"icons.OctagonAlert\"\n class=\"ga-icon\"\n style=\"color: var(--ga-color-icon-error)\"\n size=\"16\"\n />\n <div>\n @for (error of overlappingErrors(); track error.key; let last = $last) {\n <span>\n @if (error.templateRef) {\n <ng-container\n [ngTemplateOutlet]=\"error.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error }\"\n />\n } @else {\n {{ error.message }}\n }\n @if (!last) {\n &nbsp;\n }\n </span>\n }\n </div>\n} @else if (formField.fieldInfo()) {\n <ng-container [ngTemplateOutlet]=\"formField.fieldInfo()!.templateRef()\" />\n}\n" }]
2116
2146
  }] });
2117
2147
 
2118
2148
  class GaFieldInfoComponent {
@@ -2145,6 +2175,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
2145
2175
  }]
2146
2176
  }] });
2147
2177
 
2178
+ const GA_FORM_FIELD_ID = new InjectionToken('ga-form-field-id');
2179
+
2148
2180
  let nextUniqueId$6 = 0;
2149
2181
  class GaFormFieldComponent {
2150
2182
  uniqueId = inject(GA_FORM_FIELD_ID);
@@ -2156,9 +2188,7 @@ class GaFormFieldComponent {
2156
2188
  disabled = computed(() => {
2157
2189
  return this.disabledInput() ?? this.formFieldConnector.controlDisabled();
2158
2190
  });
2159
- formControl = contentChild(GaFormControlDirective, {
2160
- descendants: true,
2161
- });
2191
+ formControl = this.formFieldConnector.control.asReadonly();
2162
2192
  fieldInfo = contentChild(GaFieldInfoComponent);
2163
2193
  fieldErrors = contentChildren(GaFieldErrorDirective);
2164
2194
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -2168,7 +2198,7 @@ class GaFormFieldComponent {
2168
2198
  useFactory: () => `ga-form-field-${++nextUniqueId$6}`,
2169
2199
  },
2170
2200
  GaFormFieldConnector,
2171
- ], queries: [{ propertyName: "formControl", first: true, predicate: GaFormControlDirective, descendants: true, isSignal: true }, { propertyName: "fieldInfo", first: true, predicate: GaFieldInfoComponent, descendants: true, isSignal: true }, { propertyName: "fieldErrors", predicate: GaFieldErrorDirective, isSignal: true }], exportAs: ["gaFormField"], ngImport: i0, template: "<ng-content select=\"ga-label\" />\n<ng-content />\n<ga-field-callout />\n", dependencies: [{ kind: "component", type: GaFieldCalloutComponent, selector: "ga-field-callout" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2201
+ ], queries: [{ propertyName: "fieldInfo", first: true, predicate: GaFieldInfoComponent, descendants: true, isSignal: true }, { propertyName: "fieldErrors", predicate: GaFieldErrorDirective, isSignal: true }], exportAs: ["gaFormField"], ngImport: i0, template: "<ng-content select=\"ga-label\" />\n<ng-content />\n<ga-field-callout />\n", dependencies: [{ kind: "component", type: GaFieldCalloutComponent, selector: "ga-field-callout" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2172
2202
  }
2173
2203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFormFieldComponent, decorators: [{
2174
2204
  type: Component,
@@ -2184,6 +2214,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
2184
2214
  }] });
2185
2215
 
2186
2216
  let nextUniqueId$5 = 0;
2217
+ /**
2218
+ * Internal tooltip component used by the gaTooltip directive.
2219
+ * This component is not intended for direct use in templates.
2220
+ * Use the [gaTooltip] directive instead.
2221
+ * @internal
2222
+ */
2187
2223
  class GaTooltipComponent {
2188
2224
  uniqueId = `ga-tooltip-${++nextUniqueId$5}`;
2189
2225
  mouseLeaveSubject = new Subject();
@@ -2624,6 +2660,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
2624
2660
  }, template: "<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\n<label\n [attr.id]=\"id()\"\n [attr.for]=\"controlId()\"\n class=\"ga-form-field__label\"\n [class.ga-form-field__label--defined]=\"!!definition()\"\n [class.ga-form-field__label--disabled]=\"formField.disabled()\"\n (click)=\"focusControl()\"\n [attr.tabindex]=\"definition() ? 0 : -1\"\n>\n <span\n class=\"ga-form-field__label-text\"\n [gaTooltip]=\"definition()\"\n gaTooltipPlacement=\"top-start\"\n ><ng-content\n /></span>\n @if (state()) {\n <span class=\"ga-form-field__label-state\">{{ state() }}</span>\n }\n</label>\n" }]
2625
2661
  }], ctorParameters: () => [] });
2626
2662
 
2663
+ class GaFormControlDirective {
2664
+ formFieldId = inject(GA_FORM_FIELD_ID, { optional: true });
2665
+ formFieldConnector = inject(GaFormFieldConnector, {
2666
+ optional: true,
2667
+ });
2668
+ ngControlInput = input(undefined, {
2669
+ alias: 'gaFormControl',
2670
+ });
2671
+ explicitNgControl = computed(() => {
2672
+ const ngControl = this.ngControlInput();
2673
+ if (ngControl instanceof NgControl) {
2674
+ return ngControl;
2675
+ }
2676
+ return null;
2677
+ });
2678
+ ngControlState = injectNgControlState({
2679
+ explicitNgControl: this.explicitNgControl,
2680
+ });
2681
+ inError = this.ngControlState.inError;
2682
+ errors = this.ngControlState.errors;
2683
+ ariaErrorMessageId = computed(() => {
2684
+ if (!this.formFieldId || !this.inError()) {
2685
+ return null;
2686
+ }
2687
+ return `${this.formFieldId}-callout`;
2688
+ });
2689
+ ngOnInit() {
2690
+ this.formFieldConnector?.control.set(this);
2691
+ }
2692
+ ngOnDestroy() {
2693
+ this.formFieldConnector?.control.set(null);
2694
+ }
2695
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFormControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2696
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.4", type: GaFormControlDirective, isStandalone: true, selector: "[gaFormControl]", inputs: { ngControlInput: { classPropertyName: "ngControlInput", publicName: "gaFormControl", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-invalid": "inError() ? \"true\" : null", "attr.aria-errormessage": "ariaErrorMessageId()" } }, exportAs: ["gaFormControl"], ngImport: i0 });
2697
+ }
2698
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaFormControlDirective, decorators: [{
2699
+ type: Directive,
2700
+ args: [{
2701
+ exportAs: 'gaFormControl',
2702
+ selector: '[gaFormControl]',
2703
+ host: {
2704
+ '[attr.aria-invalid]': 'inError() ? "true" : null',
2705
+ '[attr.aria-errormessage]': 'ariaErrorMessageId()',
2706
+ },
2707
+ }]
2708
+ }] });
2709
+
2627
2710
  class GaLabelledByFormFieldDirective {
2628
2711
  formFieldConnector = inject(GaFormFieldConnector, {
2629
2712
  optional: true,
@@ -4155,11 +4238,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
4155
4238
  }, template: "@if (loading()) {\n <ga-select-dropdown-spinner />\n} @else {\n <ng-content />\n}\n" }]
4156
4239
  }] });
4157
4240
 
4241
+ /**
4242
+ * @internal - Internal validator provider for ga-select required validation
4243
+ */
4158
4244
  const GA_SELECT_REQUIRED_VALIDATOR = {
4159
4245
  provide: NG_VALIDATORS,
4160
4246
  useExisting: forwardRef(() => GaSelectRequiredValidator),
4161
4247
  multi: true,
4162
4248
  };
4249
+ /**
4250
+ * @internal - Internal directive for ga-select required validation
4251
+ */
4163
4252
  class GaSelectRequiredValidator extends RequiredValidator {
4164
4253
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: GaSelectRequiredValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive });
4165
4254
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.4", type: GaSelectRequiredValidator, isStandalone: true, selector: "ga-select[required][formControlName], ga-select[required][formControl], ga-select[required][ngModel]", providers: [GA_SELECT_REQUIRED_VALIDATOR], usesInheritance: true, ngImport: i0 });
@@ -4491,5 +4580,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
4491
4580
  * Generated bundle index. Do not edit.
4492
4581
  */
4493
4582
 
4494
- export { CHECKBOX_CONTROL_VALUE_ACCESSOR, DEFAULT_MODAL_OPTIONS, GA_ALERT_I18N_FACTORY, GA_BASE_FONT_SIZE, GA_BUTTON_I18N_FACTORY, GA_CHECKBOX_REQUIRED_VALIDATOR, GA_DATEPICKER_I18N_FACTORY, GA_DATEPICKER_PARSER_FORMATTER_FACTORY, GA_DATEPICKER_VALUE_ADAPTER_FACTORY, GA_DATE_PARSER_FORMATTER_CONFIG, GA_DEFAULT_DATEPICKER_FORMATS, GA_FORM_CONTROL_ADAPTER, GA_ICON_DEFAULT_SIZE, GA_MODAL_DATA, GA_MODAL_I18N_FACTORY, GA_SELECT_I18N_FACTORY, GA_SELECT_REQUIRED_VALIDATOR, GA_TOOLTIP_DEFAULT_OFFSET, GaAlertComponent, GaAlertI18n, GaAlertI18nDefault, GaAlertModule, GaAlertTitleActionsComponent, GaAlertTitleComponent, GaBadgeComponent, GaBadgeModule, GaButtonDirective, GaButtonI18n, GaButtonI18nDefault, GaButtonModule, GaCardComponent, GaCardModule, GaCheckboxComponent, GaCheckboxModule, GaCheckboxRequiredValidator, GaDatepickerComponent, GaDatepickerI18n, GaDatepickerI18nDefault, GaDatepickerInputDirective, GaDatepickerModule, GaDatepickerNativeUtcIsoValueAdapter, GaDatepickerNativeUtcValueAdapter, GaDatepickerParserFormatter, GaDatepickerParserFormatterDefault, GaDatepickerStructValueAdapter, GaDatepickerToggleComponent, GaDatepickerValueAdapter, GaFieldErrorDirective, GaFieldInfoComponent, GaFieldLabelComponent, GaFormControlDirective, GaFormControlErrorsDirective, GaFormFieldComponent, GaFormFieldConnector, GaFormFieldModule, GaIconButtonDirective, GaIconComponent, GaIconModule, GaInputComponent, GaInputDirective, GaInputModule, GaLabelledByFormFieldDirective, GaLinkDirective, GaLinkModule, GaMenuComponent, GaMenuItemComponent, GaMenuModule, GaMenuSeparatorComponent, GaMenuTitleComponent, GaMenuTriggerDirective, GaMenuTriggerIconComponent, GaModalActionsComponent, GaModalCloseDirective, GaModalComponent, GaModalContentComponent, GaModalDescriptionComponent, GaModalDescriptionDirective, GaModalHeaderComponent, GaModalI18n, GaModalI18nDefault, GaModalLabelDirective, GaModalModule, GaModalOptions, GaModalRef, GaModalService, GaModalTitleDirective, GaOptgroupComponent, GaOptionComponent, GaRadioButtonComponent, GaRadioGroupComponent, GaRadioModule, GaSegmentedControlButtonDirective, GaSegmentedControlComponent, GaSegmentedControlIconButtonComponent, GaSegmentedControlModule, GaSegmentedControlTextButtonComponent, GaSelectComponent, GaSelectDropdownComponent, GaSelectDropdownSpinnerComponent, GaSelectI18n, GaSelectI18nDefault, GaSelectModule, GaSelectRequiredValidator, GaSelectValueComponent, GaSpinnerComponent, GaSpinnerModule, GaSwitchComponent, GaSwitchModule, GaTextAreaDirective, GaTextAreaModule, GaTooltipComponent, GaTooltipDirective, GaTooltipModule, RADIO_CONTROL_VALUE_ACCESSOR, SWITCH_CONTROL_VALUE_ACCESSOR, compareStructs, extendGaDateParserFormatter, injectNgControlState, provideGaAlertI18n, provideGaBaseFontSize, provideGaButtonI18n, provideGaDatepickerI18n, provideGaDatepickerParserFormatter, provideGaDatepickerValueAdapter, provideGaModalI18n, provideGaModalOptions, provideGaSelectI18n };
4583
+ export { CHECKBOX_CONTROL_VALUE_ACCESSOR, DEFAULT_MODAL_OPTIONS, GA_ALERT_I18N_FACTORY, GA_BASE_FONT_SIZE, GA_BUTTON_I18N_FACTORY, GA_CHECKBOX_REQUIRED_VALIDATOR, GA_DATEPICKER_I18N_FACTORY, GA_DATEPICKER_PARSER_FORMATTER_FACTORY, GA_DATEPICKER_VALUE_ADAPTER_FACTORY, GA_DATE_PARSER_FORMATTER_CONFIG, GA_DEFAULT_DATEPICKER_FORMATS, GA_FORM_CONTROL_ADAPTER, GA_FORM_ERRORS, GA_ICON_DEFAULT_SIZE, GA_MODAL_DATA, GA_MODAL_I18N_FACTORY, GA_SELECT_I18N_FACTORY, GA_SELECT_REQUIRED_VALIDATOR, GA_TOOLTIP_DEFAULT_OFFSET, GaAlertComponent, GaAlertI18n, GaAlertI18nDefault, GaAlertModule, GaAlertTitleActionsComponent, GaAlertTitleComponent, GaBadgeComponent, GaBadgeModule, GaButtonDirective, GaButtonI18n, GaButtonI18nDefault, GaButtonModule, GaCardComponent, GaCardModule, GaCheckboxComponent, GaCheckboxModule, GaCheckboxRequiredValidator, GaDatepickerComponent, GaDatepickerI18n, GaDatepickerI18nDefault, GaDatepickerInputDirective, GaDatepickerModule, GaDatepickerNativeUtcIsoValueAdapter, GaDatepickerNativeUtcValueAdapter, GaDatepickerParserFormatter, GaDatepickerParserFormatterDefault, GaDatepickerStructValueAdapter, GaDatepickerToggleComponent, GaDatepickerValueAdapter, GaFieldErrorDirective, GaFieldInfoComponent, GaFieldLabelComponent, GaFormControlDirective, GaFormControlErrorsDirective, GaFormFieldComponent, GaFormFieldConnector, GaFormFieldModule, GaIconButtonDirective, GaIconComponent, GaIconModule, GaInputComponent, GaInputDirective, GaInputModule, GaLabelledByFormFieldDirective, GaLinkDirective, GaLinkModule, GaMenuComponent, GaMenuItemComponent, GaMenuModule, GaMenuSeparatorComponent, GaMenuTitleComponent, GaMenuTriggerDirective, GaMenuTriggerIconComponent, GaModalActionsComponent, GaModalCloseDirective, GaModalComponent, GaModalContentComponent, GaModalDescriptionComponent, GaModalDescriptionDirective, GaModalHeaderComponent, GaModalI18n, GaModalI18nDefault, GaModalLabelDirective, GaModalModule, GaModalOptions, GaModalRef, GaModalService, GaModalTitleDirective, GaOptgroupComponent, GaOptionComponent, GaRadioButtonComponent, GaRadioGroupComponent, GaRadioModule, GaSegmentedControlButtonDirective, GaSegmentedControlComponent, GaSegmentedControlIconButtonComponent, GaSegmentedControlModule, GaSegmentedControlTextButtonComponent, GaSelectComponent, GaSelectDropdownComponent, GaSelectDropdownSpinnerComponent, GaSelectI18n, GaSelectI18nDefault, GaSelectModule, GaSelectRequiredValidator, GaSelectValueComponent, GaSpinnerComponent, GaSpinnerModule, GaSwitchComponent, GaSwitchModule, GaTextAreaDirective, GaTextAreaModule, GaTooltipComponent, GaTooltipDirective, GaTooltipModule, RADIO_CONTROL_VALUE_ACCESSOR, SWITCH_CONTROL_VALUE_ACCESSOR, compareStructs, extendGaDateParserFormatter, injectNgControlState, provideGaAlertI18n, provideGaBaseFontSize, provideGaButtonI18n, provideGaDatepickerI18n, provideGaDatepickerParserFormatter, provideGaDatepickerValueAdapter, provideGaFormErrors, provideGaModalI18n, provideGaModalOptions, provideGaSelectI18n };
4495
4584
  //# sourceMappingURL=vsn-ux-ngx-gaia.mjs.map