@ng-simplicity/forms-bootstrap 1.0.0 → 1.1.0

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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @ng-simplicity/forms-bootstrap
2
2
 
3
- A package containing pre-styled Bootstrap form inputs, containers, and templates for the **NG-Simplicity Forms** dynamic engine.
3
+ A package containing pre-styled Bootstrap form inputs, containers, and templates. It serves as a visual UI extension of the reactive [@ng-simplicity/forms-core](https://www.npmjs.com/package/@ng-simplicity/forms-core) engine, inheriting its powerful dynamic capabilities. This allows you to construct highly dynamic, complex forms where control properties (such as visibility, enabled/disabled state, select options, and validation rules) reactively adapt in real-time based on the current values inside the form. The package is highly customizable; because it utilizes the core registry system, you can develop and add your own custom form controls to the registry to be used in the form rendering alongside the Bootstrap presets.
4
4
 
5
5
  ---
6
6
 
@@ -9,7 +9,7 @@ A package containing pre-styled Bootstrap form inputs, containers, and templates
9
9
  Ensure that you have `bootstrap` installed and imported in your application styles, along with the core forms package:
10
10
 
11
11
  ```bash
12
- npm install @ng-simplicity/forms-core @ng-simplicity/forms-bootstrap bootstrap lodash
12
+ npm install @ng-simplicity/forms-core @ng-simplicity/forms-bootstrap bootstrap
13
13
  ```
14
14
 
15
15
  Make sure to include Bootstrap's CSS inside your `angular.json` styles or `index.scss`:
@@ -21,66 +21,289 @@ Make sure to include Bootstrap's CSS inside your `angular.json` styles or `index
21
21
 
22
22
  ## Quick Start & Registration
23
23
 
24
- To make these styling components available to the dynamic renderer, register them using `NgsFormsBootstrapModule` in your page component constructor:
24
+ To render Bootstrap form elements dynamically, follow these steps:
25
+ 1. Provide the `NgsFormsService` at the component level to isolate the form state.
26
+ 2. Register the Bootstrap components in your component constructor using `NgsFormsBootstrapModule.registerAllBootStrapComponents(registry)`.
27
+ 3. Construct the layout schema (`NgsFormsFormConfig`) using Bootstrap controls.
28
+ 4. Pass the schema to `this.ngsFormsService.setFormConfig(formConfig)`.
29
+ 5. Add `<ngs-form></ngs-form>` to your component's template.
30
+
31
+ Here is a complete usage example:
25
32
 
26
33
  ```typescript
27
- import { Component } from '@angular/core';
28
- import { NgsFormsComponentRegistryService } from '@ng-simplicity/forms-core';
29
- import { NgsFormsBootstrapModule } from '@ng-simplicity/forms-bootstrap';
34
+ import { Component, OnInit, inject } from '@angular/core';
35
+ import { Validators } from '@angular/forms';
36
+ import {
37
+ NgsFormComponent,
38
+ NgsFormsComponentRegistryService,
39
+ NgsFormsService,
40
+ NgsFormsFormConfig,
41
+ NgsFormsFormGroupComponent,
42
+ NgsFormsRowComponent
43
+ } from '@ng-simplicity/forms-core';
44
+ import {
45
+ NgsFormsBootstrapModule,
46
+ NgsFormsBootstrapFormItemInputComponent,
47
+ NgsFormsBootstrapFormsItemTextAreaComponent
48
+ } from '@ng-simplicity/forms-bootstrap';
30
49
 
31
50
  @Component({
32
51
  selector: 'app-bootstrap-form-page',
33
- templateUrl: './bootstrap-form-page.component.html'
52
+ standalone: true,
53
+ imports: [NgsFormComponent],
54
+ providers: [NgsFormsService],
55
+ template: `
56
+ <div class="container mt-4">
57
+ <h2>Bootstrap Dynamic Form</h2>
58
+ <ngs-form></ngs-form>
59
+ <button class="btn btn-primary" (click)="onSubmit()">Submit</button>
60
+ </div>
61
+ `
34
62
  })
35
- export class BootstrapFormPageComponent {
63
+ export class BootstrapFormPageComponent implements OnInit {
64
+ private ngsFormsService = inject(NgsFormsService);
65
+
36
66
  constructor(registry: NgsFormsComponentRegistryService) {
37
- // Registers input-text, input-textarea, row, column, and other components
67
+ // Registers input-text, input-textarea, row, column, checkbox, radio, and other components
38
68
  NgsFormsBootstrapModule.registerAllBootStrapComponents(registry);
39
69
  }
70
+
71
+ ngOnInit() {
72
+ // Construct the form configuration
73
+ const formConfig: NgsFormsFormConfig = {
74
+ inputUpdateDebounce: 150,
75
+ root: NgsFormsFormGroupComponent.create({
76
+ name: 'profileForm',
77
+ items: [
78
+ NgsFormsRowComponent.create({
79
+ items: [
80
+ NgsFormsBootstrapFormItemInputComponent.create({
81
+ name: 'username',
82
+ label: 'Username',
83
+ placeholder: 'Enter username...',
84
+ type: 'text',
85
+ labelLocation: 'top',
86
+ validators: [Validators.required],
87
+ errorMessageMap: {
88
+ required: 'Username is required.'
89
+ }
90
+ }),
91
+ NgsFormsBootstrapFormsItemTextAreaComponent.create({
92
+ name: 'bio',
93
+ label: 'Biography',
94
+ placeholder: 'Write a short bio...',
95
+ labelLocation: 'left',
96
+ inputCssClass: 'shadow-sm'
97
+ })
98
+ ]
99
+ })
100
+ ]
101
+ })
102
+ };
103
+
104
+ // Initialize the dynamic form controls
105
+ this.ngsFormsService.setFormConfig(formConfig);
106
+ }
107
+
108
+ onSubmit() {
109
+ if (!this.ngsFormsService.isValid) {
110
+ this.ngsFormsService.setIsSubmitted(true); // Triggers visual error styling
111
+ return;
112
+ }
113
+ console.log('Form data submitted:', this.ngsFormsService.formValue);
114
+ }
40
115
  }
41
116
  ```
42
117
 
43
118
  ---
44
119
 
120
+ ## Common Properties & Core Integration
121
+
122
+ This package relies on the main core engine: [@ng-simplicity/forms-core](https://www.npmjs.com/package/@ng-simplicity/forms-core). The core package provides all standard layout structures and non-styling-specific form components, including:
123
+ - **Form Groups**: `NgsFormsFormGroupComponent` (Key: `'form-group'`)
124
+ - **Sections**: `NgsFormsFormSectionComponent` (Key: `'section'`)
125
+ - **Row Containers**: `NgsFormsRowComponent` (Key: `'form-row'`)
126
+ - **Columns**: `NgsFormsColumnComponent` (Key: `'column'`)
127
+ - **Form Arrays & Support**: `NgsFormsFormArrayContainerComponent` (Key: `'form-array'`), `NgsFormsFormArrayAddItemComponent` (Key: `'form-array-add-item'`), and `NgsFormsFormArrayRemoveItemComponent` (Key: `'form-array-remove-item'`)
128
+ - **Static Content**: `NgsFormsHtmlContentComponent` (Key: `'content-html'`) and `NgsFormsTextDivComponent` (Key: `'text-div'`)
129
+
130
+ Please refer to the [@ng-simplicity/forms-core README](file:///home/bryan/git/bryan-projects/angular-open-source/ng-simplicity/forms/libs/forms-core/README.md) for full details on constructing layouts and managing core form structures.
131
+
132
+ ### Common Control Properties
133
+
134
+ Most controls in this styling library support a standard set of core properties that are managed by the dynamic forms engine. These properties allow passing either a static/basic value or an asynchronous stream (Observable):
135
+
136
+ 1. **Visibility**:
137
+ - `visible` (boolean): Controls whether the item is mounted in the DOM.
138
+ - `visible$` (`Observable<boolean>`): Stream version to dynamically show/hide components.
139
+ - *Note: Visibility is configured at the inner config level (`NgsFormsFormItemConfigBase`).*
140
+
141
+ 2. **Disabled Status**:
142
+ - `disabled` (boolean): Sets the initial disabled state of the form control.
143
+ - `disabled$` (`Observable<boolean>`): Stream to toggle disabled state.
144
+ - *Configured at the inner `config` level.*
145
+
146
+ 3. **Validators**:
147
+ - `validators` (`Array<ValidatorFn>`): Array of standard/custom Angular Validator functions.
148
+ - `validators$` (`Observable<Array<ValidatorFn>>`): Stream of validator functions to change validators dynamically.
149
+ - *Configured at the inner `config` level.*
150
+
151
+ 4. **Options** (Only for components with choice selection like `select` and `radio`):
152
+ - `options` (`Array<NgsFormsFormInputOption>`): Static array of choices `{ id: string | number, label: string, disabled?: boolean }`.
153
+ - `options$` (`Observable<Array<NgsFormsFormInputOption>>`): Stream to dynamically populate choices.
154
+ - *Configured at the inner `config` level.*
155
+
156
+ > [!TIP]
157
+ > By supplying **Observable** streams (such as `visible$`, `disabled$`, `validators$`, or `options$`), you can build highly dynamic and reactive forms. Because these observables can be piped directly from the form service's value change stream (`this.ngsFormsService.formValue$`), fields can dynamically enable/disable, appear/disappear, change options, or update validation rules in real-time based on user input in other fields.
158
+
159
+ ---
160
+
45
161
  ## Available Components & Schemas
46
162
 
163
+ Here is the full list of available Bootstrap components along with code examples showing their required and optional configuration parameters:
164
+
47
165
  ### 1. Text Input (`input-text`)
48
166
  Uses `NgsFormsBootstrapFormItemInputComponent`.
49
-
50
- - **Selector/Key**: `input-text`
167
+ - **Key**: `input-text`
51
168
  - **Config Type**: `NgsFormsFormItemConfigBootstrapTextInput`
52
- - **Features**: Supports label locations (`top` or `left`), validation status borders, invalid feedback, custom types (`text`, `email`, `password`), and placeholder bindings.
53
169
 
54
170
  ```typescript
55
171
  import { NgsFormsBootstrapFormItemInputComponent } from '@ng-simplicity/forms-bootstrap';
56
172
  import { Validators } from '@angular/forms';
57
173
 
58
174
  const usernameField = NgsFormsBootstrapFormItemInputComponent.create({
175
+ // Required Parameters
59
176
  name: 'username',
60
177
  label: 'Username',
178
+
179
+ // Optional Parameters
180
+ id: 'custom-username-id',
61
181
  placeholder: 'Enter username...',
62
- type: 'text',
63
- labelLocation: 'top',
64
- validators: [Validators.required]
182
+ type: 'text', // 'text' | 'email' | 'password'
183
+ value: 'default_user', // Initial value
184
+ labelLocation: 'top', // 'top' | 'left' (default is 'top')
185
+ disabled: false,
186
+ validators: [Validators.required],
187
+ errorMessageMap: {
188
+ required: 'Username is required.'
189
+ }
65
190
  });
66
191
  ```
67
192
 
68
193
  ### 2. Text Area (`input-textarea`)
69
194
  Uses `NgsFormsBootstrapFormsItemTextAreaComponent`.
70
-
71
- - **Selector/Key**: `input-textarea`
195
+ - **Key**: `input-textarea`
72
196
  - **Config Type**: `NgsFormsFormItemConfigBootstrapTextArea`
73
- - **Features**: Supports rows configuration, css classes override, validation classes, label locations, and placeholder bindings.
74
197
 
75
198
  ```typescript
76
199
  import { NgsFormsBootstrapFormsItemTextAreaComponent } from '@ng-simplicity/forms-bootstrap';
200
+ import { Validators } from '@angular/forms';
77
201
 
78
202
  const bioField = NgsFormsBootstrapFormsItemTextAreaComponent.create({
203
+ // Required Parameters
79
204
  name: 'bio',
80
- label: 'About Me',
205
+ label: 'Biography',
206
+
207
+ // Optional Parameters
208
+ id: 'custom-bio-id',
81
209
  placeholder: 'Tell us about yourself...',
82
- labelLocation: 'left',
83
- inputCssClass: 'shadow-sm'
210
+ value: '',
211
+ labelLocation: 'left', // 'top' | 'left' (default is 'top')
212
+ inputCssClass: 'shadow-sm', // Custom css classes applied to textarea
213
+ disabled: false,
214
+ validators: [Validators.required],
215
+ errorMessageMap: {
216
+ required: 'Biography is required.'
217
+ }
218
+ });
219
+ ```
220
+
221
+ ### 3. Checkbox (`checkbox`)
222
+ Uses `NgsFormsBootstrapFormsItemCheckboxComponent`.
223
+ - **Key**: `checkbox`
224
+ - **Config Type**: `NgsFormsFormItemConfigBootstrapCheckbox`
225
+
226
+ ```typescript
227
+ import { NgsFormsBootstrapFormsItemCheckboxComponent } from '@ng-simplicity/forms-bootstrap';
228
+ import { Validators } from '@angular/forms';
229
+
230
+ const acceptTermsField = NgsFormsBootstrapFormsItemCheckboxComponent.create({
231
+ // Required Parameters
232
+ name: 'agreeTerms',
233
+ label: 'I accept the terms and conditions',
234
+
235
+ // Optional Parameters
236
+ id: 'terms-checkbox-id',
237
+ value: false, // Initial checked state
238
+ disabled: false,
239
+ validators: [Validators.requiredTrue],
240
+ errorMessageMap: {
241
+ required: 'You must check this box to agree.'
242
+ }
243
+ });
244
+ ```
245
+
246
+ ### 4. Select Dropdown (`select`)
247
+ Uses `NgsFormsBootstrapFormItemSelectInputComponent`.
248
+ - **Key**: `select`
249
+ - **Config Type**: `NgsFormsFormItemConfigBootstrapSelectInput`
250
+
251
+ ```typescript
252
+ import { NgsFormsBootstrapFormItemSelectInputComponent } from '@ng-simplicity/forms-bootstrap';
253
+ import { Validators } from '@angular/forms';
254
+
255
+ const countrySelectField = NgsFormsBootstrapFormItemSelectInputComponent.create({
256
+ // Required Parameters
257
+ name: 'country',
258
+ label: 'Country',
259
+
260
+ // Optional Parameters
261
+ id: 'country-select-id',
262
+ placeholder: 'Select country', // Text displayed for the placeholder option
263
+ placeHolderValue: '', // Custom value for placeholder selection
264
+ value: 'us', // Initial selected option ID
265
+ labelLocation: 'top', // 'top' | 'left' (default is 'top')
266
+ disabled: false,
267
+ options: [
268
+ { id: 'us', label: 'United States' },
269
+ { id: 'ca', label: 'Canada', disabled: false },
270
+ { id: 'mx', label: 'Mexico', disabled: true }
271
+ ],
272
+ validators: [Validators.required],
273
+ errorMessageMap: {
274
+ required: 'Please select a country.'
275
+ }
276
+ });
277
+ ```
278
+
279
+ ### 5. Radio Buttons (`radio`)
280
+ Uses `NgsFormsBootstrapRadioInputComponent`.
281
+ - **Key**: `radio`
282
+ - **Config Type**: `NgsFormsFormsItemConfigBoostrapRadio`
283
+
284
+ ```typescript
285
+ import { NgsFormsBootstrapRadioInputComponent } from '@ng-simplicity/forms-bootstrap';
286
+ import { Validators } from '@angular/forms';
287
+
288
+ const notificationPrefField = NgsFormsBootstrapRadioInputComponent.create({
289
+ // Required Parameters
290
+ name: 'notificationPreference',
291
+ label: 'Preferred notifications',
292
+
293
+ // Optional Parameters
294
+ id: 'notification-pref-id',
295
+ value: 'email', // Initial selected radio option ID
296
+ alignment: 'horizontal', // 'horizontal' | 'vertical' (default is 'vertical')
297
+ disabled: false,
298
+ options: [
299
+ { id: 'email', label: 'Email' },
300
+ { id: 'sms', label: 'SMS / Text Message' },
301
+ { id: 'none', label: 'None' }
302
+ ],
303
+ validators: [Validators.required],
304
+ errorMessageMap: {
305
+ required: 'Please select a contact method.'
306
+ }
84
307
  });
85
308
  ```
86
309
 
@@ -98,3 +321,17 @@ To run with coverage enabled:
98
321
  ```bash
99
322
  nx test forms-bootstrap --codeCoverage
100
323
  ```
324
+
325
+ ---
326
+
327
+ ## Example Applications
328
+
329
+ Fully functional example applications demonstrating the form engine functionality are located in the [`apps/`](../../apps) folder of this monorepo:
330
+ - **`forms-bootstrap-demo`**: Integrates and showcases the `@ng-simplicity/forms-bootstrap` package.
331
+ - **`forms-material-demo`**: Integrates and showcases the `@ng-simplicity/forms-material` package.
332
+
333
+ ---
334
+
335
+ ## Support & Contributions
336
+
337
+ If you have feature suggestions, need a feature to make `@ng-simplicity/forms-bootstrap` work for your project, or encounter any bugs, please log an issue in the GitHub issue tracker.
@@ -1,28 +1,27 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
- import { NgsFormsBaseClassFormInputComponent, NgsFormsBaseClassFormItemInputWithOptionsComponent, NgsFormsCoreModule } from '@ng-simplicity/forms-core';
3
+ import { NgsFormsBaseClassFormInputComponent, ngsDefaults, NgsFormsBaseClassFormItemInputWithOptionsComponent, NgsFormsCoreModule } from '@ng-simplicity/forms-core';
4
4
  import * as i1 from '@angular/forms';
5
5
  import { ReactiveFormsModule, FormsModule } from '@angular/forms';
6
6
  import { v4 } from 'uuid';
7
- import { defaults } from 'lodash';
8
- import { NgIf, CommonModule } from '@angular/common';
7
+ import { CommonModule } from '@angular/common';
9
8
 
10
9
  class NgsFormsBootstrapFormsItemCheckboxComponent extends NgsFormsBaseClassFormInputComponent {
11
10
  static key = 'checkbox';
12
11
  checkboxConfig = this.config;
13
12
  static create(config) {
14
13
  return {
15
- uuid: v4(),
14
+ uuid: config.uuid || v4(),
16
15
  type: NgsFormsBootstrapFormsItemCheckboxComponent.key,
17
16
  config,
18
17
  };
19
18
  }
20
19
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapFormsItemCheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapFormsItemCheckboxComponent, isStandalone: true, selector: "ngs-form-item-bs-checkbox", usesInheritance: true, ngImport: i0, template: "@if (control) {\n <div class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-check-input\" id=\"{{id}}\"\n type=\"checkbox\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\" for=\"{{id}}\">\n {{ checkboxConfig.label }}\n </label>\n </div>\n}\n\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapFormsItemCheckboxComponent, isStandalone: true, selector: "ngs-form-item-bs-checkbox", usesInheritance: true, ngImport: i0, template: "@if (control) {\n <div class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-check-input\" \n id=\"{{id}}\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n type=\"checkbox\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\" for=\"{{id}}\">\n {{ checkboxConfig.label }}\n </label>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n}\n\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
22
21
  }
23
22
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapFormsItemCheckboxComponent, decorators: [{
24
23
  type: Component,
25
- args: [{ selector: 'ngs-form-item-bs-checkbox', imports: [ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (control) {\n <div class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-check-input\" id=\"{{id}}\"\n type=\"checkbox\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\" for=\"{{id}}\">\n {{ checkboxConfig.label }}\n </label>\n </div>\n}\n\n" }]
24
+ args: [{ selector: 'ngs-form-item-bs-checkbox', imports: [ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (control) {\n <div class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-check-input\" \n id=\"{{id}}\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n type=\"checkbox\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\" for=\"{{id}}\">\n {{ checkboxConfig.label }}\n </label>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n}\n\n" }]
26
25
  }] });
27
26
 
28
27
  const NgsFormBootstrapInputComponentResources = {
@@ -34,23 +33,23 @@ const NgsFormBootstrapInputComponentResources = {
34
33
 
35
34
  class NgsFormsBootstrapFormItemInputComponent extends NgsFormsBaseClassFormInputComponent {
36
35
  static key = 'input-text';
37
- textConfig = defaults(this.config, NgsFormBootstrapInputComponentResources.defaults);
36
+ textConfig = ngsDefaults(this.config, NgsFormBootstrapInputComponentResources.defaults);
38
37
  constructor() {
39
38
  super();
40
39
  }
41
40
  static create(config) {
42
41
  return {
43
- uuid: v4(),
42
+ uuid: config.uuid || v4(),
44
43
  type: NgsFormsBootstrapFormItemInputComponent.key,
45
44
  config,
46
45
  };
47
46
  }
48
47
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapFormItemInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapFormItemInputComponent, isStandalone: true, selector: "ngs-forms-bs-input", usesInheritance: true, ngImport: i0, template: "@if (!!control) {\n @if (textConfig.labelLocation === 'top') {\n <div class=\"mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textConfig.label }}</label>\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-control\"\n id=\"{{id}}-top\" placeholder=\"{{textConfig.placeholder}}\" type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n }\n @if (textConfig.labelLocation === 'left') {\n <div class=\"row mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textConfig.label }}</label>\n <div class=\"col-sm-10\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-control\"\n id=\"{{id}}-left\" placeholder=\"{{textConfig.placeholder}}\" type=\"{{textConfig.type}}\" />\n </div>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapFormItemInputComponent, isStandalone: true, selector: "ngs-forms-bs-input", usesInheritance: true, ngImport: i0, template: "@if (!!control) {\n @if (textConfig.labelLocation === 'top') {\n <div class=\"mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textConfig.label }}</label>\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-control\"\n id=\"{{id}}-top\" \n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textConfig.placeholder}}\" \n type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n }\n @if (textConfig.labelLocation === 'left') {\n <div class=\"row mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textConfig.label }}</label>\n <div class=\"col-sm-10\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-control\"\n id=\"{{id}}-left\" \n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textConfig.placeholder}}\" \n type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
50
49
  }
51
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapFormItemInputComponent, decorators: [{
52
51
  type: Component,
53
- args: [{ selector: 'ngs-forms-bs-input', imports: [ReactiveFormsModule, NgIf], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!!control) {\n @if (textConfig.labelLocation === 'top') {\n <div class=\"mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textConfig.label }}</label>\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-control\"\n id=\"{{id}}-top\" placeholder=\"{{textConfig.placeholder}}\" type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n }\n @if (textConfig.labelLocation === 'left') {\n <div class=\"row mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textConfig.label }}</label>\n <div class=\"col-sm-10\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-control\"\n id=\"{{id}}-left\" placeholder=\"{{textConfig.placeholder}}\" type=\"{{textConfig.type}}\" />\n </div>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n }\n}\n" }]
52
+ args: [{ selector: 'ngs-forms-bs-input', imports: [ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!!control) {\n @if (textConfig.labelLocation === 'top') {\n <div class=\"mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textConfig.label }}</label>\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-control\"\n id=\"{{id}}-top\" \n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textConfig.placeholder}}\" \n type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n }\n @if (textConfig.labelLocation === 'left') {\n <div class=\"row mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textConfig.label }}</label>\n <div class=\"col-sm-10\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-control\"\n id=\"{{id}}-left\" \n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textConfig.placeholder}}\" \n type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n}\n" }]
54
53
  }], ctorParameters: () => [] });
55
54
 
56
55
  class NgsFormsBootstrapRadioInputComponent extends NgsFormsBaseClassFormItemInputWithOptionsComponent {
@@ -58,17 +57,17 @@ class NgsFormsBootstrapRadioInputComponent extends NgsFormsBaseClassFormItemInpu
58
57
  radioConfig = this.config;
59
58
  static create(config) {
60
59
  return {
61
- uuid: v4(),
60
+ uuid: config.uuid || v4(),
62
61
  type: NgsFormsBootstrapRadioInputComponent.key,
63
62
  config,
64
63
  };
65
64
  }
66
65
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapRadioInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
67
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapRadioInputComponent, isStandalone: true, selector: "ngs-forms-bootstrap-radio-group-input", usesInheritance: true, ngImport: i0, template: "@if (control) {\n <div [class.d-flex]=\"radioConfig.alignment==='horizontal'\">\n @if (!!radioConfig.label) {\n <div [class.text-danger]=\"!!errorMessage\" class=\"form-label me-2 pt-0\">\n {{ radioConfig.label }}\n </div>\n }\n @for (option of options(); track option.id) {\n <div [class.form-check-inline]=\"radioConfig.alignment==='horizontal'\"\n [class.me-2]=\"radioConfig.alignment==='horizontal'\"\n class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" value=\"{{option.id}}\" class=\"form-check-input\"\n id=\"{{id}}{{option.id}}\" type=\"radio\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\"\n for=\"{{id}}{{option.id}}\">{{ option.label }}</label>\n </div>\n }\n </div>\n}\n\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
66
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapRadioInputComponent, isStandalone: true, selector: "ngs-forms-bootstrap-radio-group-input", usesInheritance: true, ngImport: i0, template: "@if (control) {\n <div role=\"radiogroup\"\n [attr.aria-labelledby]=\"radioConfig.label ? id + '-label' : null\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n class=\"mb-3\">\n <div [class.d-flex]=\"radioConfig.alignment==='horizontal'\">\n @if (!!radioConfig.label) {\n <div [class.text-danger]=\"!!errorMessage\" class=\"form-label me-2 pt-0\" id=\"{{id}}-label\">\n {{ radioConfig.label }}\n </div>\n }\n @for (option of options(); track option.id) {\n <div [class.form-check-inline]=\"radioConfig.alignment==='horizontal'\"\n [class.me-2]=\"radioConfig.alignment==='horizontal'\"\n class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n value=\"{{option.id}}\" \n class=\"form-check-input\"\n id=\"{{id}}{{option.id}}\" \n type=\"radio\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\"\n for=\"{{id}}{{option.id}}\">{{ option.label }}</label>\n </div>\n }\n </div>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n}\n\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
68
67
  }
69
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapRadioInputComponent, decorators: [{
70
69
  type: Component,
71
- args: [{ selector: 'ngs-forms-bootstrap-radio-group-input', imports: [ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (control) {\n <div [class.d-flex]=\"radioConfig.alignment==='horizontal'\">\n @if (!!radioConfig.label) {\n <div [class.text-danger]=\"!!errorMessage\" class=\"form-label me-2 pt-0\">\n {{ radioConfig.label }}\n </div>\n }\n @for (option of options(); track option.id) {\n <div [class.form-check-inline]=\"radioConfig.alignment==='horizontal'\"\n [class.me-2]=\"radioConfig.alignment==='horizontal'\"\n class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" value=\"{{option.id}}\" class=\"form-check-input\"\n id=\"{{id}}{{option.id}}\" type=\"radio\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\"\n for=\"{{id}}{{option.id}}\">{{ option.label }}</label>\n </div>\n }\n </div>\n}\n\n" }]
70
+ args: [{ selector: 'ngs-forms-bootstrap-radio-group-input', imports: [ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (control) {\n <div role=\"radiogroup\"\n [attr.aria-labelledby]=\"radioConfig.label ? id + '-label' : null\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n class=\"mb-3\">\n <div [class.d-flex]=\"radioConfig.alignment==='horizontal'\">\n @if (!!radioConfig.label) {\n <div [class.text-danger]=\"!!errorMessage\" class=\"form-label me-2 pt-0\" id=\"{{id}}-label\">\n {{ radioConfig.label }}\n </div>\n }\n @for (option of options(); track option.id) {\n <div [class.form-check-inline]=\"radioConfig.alignment==='horizontal'\"\n [class.me-2]=\"radioConfig.alignment==='horizontal'\"\n class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n value=\"{{option.id}}\" \n class=\"form-check-input\"\n id=\"{{id}}{{option.id}}\" \n type=\"radio\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\"\n for=\"{{id}}{{option.id}}\">{{ option.label }}</label>\n </div>\n }\n </div>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n}\n\n" }]
72
71
  }] });
73
72
 
74
73
  class NgsFormsBootstrapFormItemSelectInputComponent extends NgsFormsBaseClassFormItemInputWithOptionsComponent {
@@ -76,17 +75,17 @@ class NgsFormsBootstrapFormItemSelectInputComponent extends NgsFormsBaseClassFor
76
75
  selectConfig = this.config;
77
76
  static create(config) {
78
77
  return {
79
- uuid: v4(),
78
+ uuid: config.uuid || v4(),
80
79
  type: NgsFormsBootstrapFormItemSelectInputComponent.key,
81
80
  config,
82
81
  };
83
82
  }
84
83
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapFormItemSelectInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
85
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapFormItemSelectInputComponent, isStandalone: true, selector: "ngs-forms-bootstrap-select-input", usesInheritance: true, ngImport: i0, template: "@if (control) {\n @if (selectConfig.labelLocation === 'top') {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ selectConfig.label }}</label>\n <select [attr.aria-label]=\"selectConfig.label\" [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\"\n class=\"form-select\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}\n </option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n } @else {\n\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ selectConfig.label }}</label>\n <div class=\"col-sm-10\">\n <select [attr.aria-label]=\"selectConfig.label\" [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\"\n class=\"form-select\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}\n </option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n </div>\n }\n}\n\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
84
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapFormItemSelectInputComponent, isStandalone: true, selector: "ngs-forms-bootstrap-select-input", usesInheritance: true, ngImport: i0, template: "@if (control) {\n @if (selectConfig.labelLocation === 'top') {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ selectConfig.label }}</label>\n <select [attr.aria-label]=\"selectConfig.label\" \n [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\"\n class=\"form-select\"\n id=\"{{id}}-top\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}</option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"!!option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n } @else {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ selectConfig.label }}</label>\n <div class=\"col-sm-10\">\n <select [attr.aria-label]=\"selectConfig.label\" \n [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\"\n class=\"form-select\"\n id=\"{{id}}-left\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}</option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"!!option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n}\n\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
86
85
  }
87
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapFormItemSelectInputComponent, decorators: [{
88
87
  type: Component,
89
- args: [{ selector: 'ngs-forms-bootstrap-select-input', imports: [ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (control) {\n @if (selectConfig.labelLocation === 'top') {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ selectConfig.label }}</label>\n <select [attr.aria-label]=\"selectConfig.label\" [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\"\n class=\"form-select\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}\n </option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n } @else {\n\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ selectConfig.label }}</label>\n <div class=\"col-sm-10\">\n <select [attr.aria-label]=\"selectConfig.label\" [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\"\n class=\"form-select\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}\n </option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n </div>\n }\n}\n\n" }]
88
+ args: [{ selector: 'ngs-forms-bootstrap-select-input', imports: [ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (control) {\n @if (selectConfig.labelLocation === 'top') {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ selectConfig.label }}</label>\n <select [attr.aria-label]=\"selectConfig.label\" \n [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\"\n class=\"form-select\"\n id=\"{{id}}-top\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}</option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"!!option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n } @else {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ selectConfig.label }}</label>\n <div class=\"col-sm-10\">\n <select [attr.aria-label]=\"selectConfig.label\" \n [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\"\n class=\"form-select\"\n id=\"{{id}}-left\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}</option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"!!option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n}\n\n" }]
90
89
  }] });
91
90
 
92
91
  class NgsFormsBootstrapFormsItemTextAreaComponent extends NgsFormsBaseClassFormInputComponent {
@@ -94,17 +93,17 @@ class NgsFormsBootstrapFormsItemTextAreaComponent extends NgsFormsBaseClassFormI
94
93
  textAreaConfig = this.config;
95
94
  static create(config) {
96
95
  return {
97
- uuid: v4(),
96
+ uuid: config.uuid || v4(),
98
97
  type: NgsFormsBootstrapFormsItemTextAreaComponent.key,
99
98
  config,
100
99
  };
101
100
  }
102
101
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapFormsItemTextAreaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
103
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapFormsItemTextAreaComponent, isStandalone: true, selector: "ngs-form-item-bs-text-area", usesInheritance: true, ngImport: i0, template: "@if (control) {\n @if (textAreaConfig.labelLocation === 'top' || !textAreaConfig.labelLocation) {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textAreaConfig.label }}</label>\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-top\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger\">{{ errorMessage }}</div>\n }\n </div>\n\n } @else {\n @if (textAreaConfig.labelLocation === 'left') {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textAreaConfig.label }}</label>\n <div class=\"col-sm-10\">\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-left\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n </div>\n @if (errorMessage) {\n <div class=\"text-danger\">{{ errorMessage }}</div>\n }\n </div>\n }\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
102
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NgsFormsBootstrapFormsItemTextAreaComponent, isStandalone: true, selector: "ngs-form-item-bs-text-area", usesInheritance: true, ngImport: i0, template: "@if (control) {\n @if (textAreaConfig.labelLocation === 'top' || !textAreaConfig.labelLocation) {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textAreaConfig.label }}</label>\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-top\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n } @else {\n @if (textAreaConfig.labelLocation === 'left') {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textAreaConfig.label }}</label>\n <div class=\"col-sm-10\">\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-left\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
104
103
  }
105
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NgsFormsBootstrapFormsItemTextAreaComponent, decorators: [{
106
105
  type: Component,
107
- args: [{ selector: 'ngs-form-item-bs-text-area', imports: [CommonModule, ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (control) {\n @if (textAreaConfig.labelLocation === 'top' || !textAreaConfig.labelLocation) {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textAreaConfig.label }}</label>\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-top\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger\">{{ errorMessage }}</div>\n }\n </div>\n\n } @else {\n @if (textAreaConfig.labelLocation === 'left') {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textAreaConfig.label }}</label>\n <div class=\"col-sm-10\">\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-left\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n </div>\n @if (errorMessage) {\n <div class=\"text-danger\">{{ errorMessage }}</div>\n }\n </div>\n }\n }\n}\n" }]
106
+ args: [{ selector: 'ngs-form-item-bs-text-area', imports: [CommonModule, ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (control) {\n @if (textAreaConfig.labelLocation === 'top' || !textAreaConfig.labelLocation) {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textAreaConfig.label }}</label>\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-top\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n } @else {\n @if (textAreaConfig.labelLocation === 'left') {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textAreaConfig.label }}</label>\n <div class=\"col-sm-10\">\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-left\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n }\n}\n" }]
108
107
  }] });
109
108
 
110
109
  class NgsFormsBootstrapModule {
@@ -1 +1 @@
1
- {"version":3,"file":"ng-simplicity-forms-bootstrap.mjs","sources":["../../../../libs/forms-bootstrap/src/lib/form-components/checkbox/checkbox.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/checkbox/checkbox.component.html","../../../../libs/forms-bootstrap/src/lib/form-components/input/input-component.resources.ts","../../../../libs/forms-bootstrap/src/lib/form-components/input/input.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/input/input.component.html","../../../../libs/forms-bootstrap/src/lib/form-components/radio/radio.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/radio/radio.component.html","../../../../libs/forms-bootstrap/src/lib/form-components/select/select.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/select/select.component.html","../../../../libs/forms-bootstrap/src/lib/form-components/text-area/text-area.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/text-area/text-area.component.html","../../../../libs/forms-bootstrap/src/lib/forms-bootstrap.module.ts","../../../../libs/forms-bootstrap/src/ng-simplicity-forms-bootstrap.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { NgsFormsBaseClassFormInputComponent, NgsFormsFormItem, NgsFormsFormItemConfigBaseInput } from '@ng-simplicity/forms-core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgsFormsFormItemConfigBootstrapCheckbox } from './checkbox.config';\nimport { v4 } from 'uuid';\n\n@Component({\n selector: 'ngs-form-item-bs-checkbox',\n imports: [ReactiveFormsModule],\n templateUrl: './checkbox.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapFormsItemCheckboxComponent extends NgsFormsBaseClassFormInputComponent<NgsFormsFormItemConfigBootstrapCheckbox> {\n static override key = 'checkbox';\n checkboxConfig = this.config as NgsFormsFormItemConfigBootstrapCheckbox;\n\n static create(\n config: NgsFormsFormItemConfigBootstrapCheckbox\n ): NgsFormsFormItem<NgsFormsFormItemConfigBootstrapCheckbox> {\n return {\n uuid: v4(),\n type: NgsFormsBootstrapFormsItemCheckboxComponent.key,\n config,\n };\n }\n}\n","@if (control) {\n <div class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-check-input\" id=\"{{id}}\"\n type=\"checkbox\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\" for=\"{{id}}\">\n {{ checkboxConfig.label }}\n </label>\n </div>\n}\n\n","import { NgsFormsFormItemConfigBootstrapTextInput } from './input.config';\n\nexport const NgsFormBootstrapInputComponentResources: INgsFormBoostrapInputComponentResources = {\n defaults: {\n type: 'text',\n labelLocation: 'top',\n },\n};\n\nexport interface INgsFormBoostrapInputComponentResources {\n defaults: Partial<NgsFormsFormItemConfigBootstrapTextInput>;\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { NgsFormsBaseClassFormInputComponent, NgsFormsFormItem } from '@ng-simplicity/forms-core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { defaults } from 'lodash';\nimport { NgsFormBootstrapInputComponentResources } from './input-component.resources';\nimport { NgsFormsFormItemConfigBootstrapTextInput } from './input.config';\nimport { v4 } from 'uuid';\nimport { NgIf } from '@angular/common';\n\n@Component({\n selector: 'ngs-forms-bs-input',\n imports: [ReactiveFormsModule, NgIf],\n templateUrl: './input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapFormItemInputComponent extends NgsFormsBaseClassFormInputComponent<NgsFormsFormItemConfigBootstrapTextInput> {\n static override key = 'input-text';\n textConfig: NgsFormsFormItemConfigBootstrapTextInput = defaults(this.config as NgsFormsFormItemConfigBootstrapTextInput, NgsFormBootstrapInputComponentResources.defaults);\n constructor() {\n super();\n }\n\n static create(config: NgsFormsFormItemConfigBootstrapTextInput): NgsFormsFormItem<NgsFormsFormItemConfigBootstrapTextInput> {\n return {\n uuid: v4(),\n type: NgsFormsBootstrapFormItemInputComponent.key,\n config,\n };\n }\n}\n","@if (!!control) {\n @if (textConfig.labelLocation === 'top') {\n <div class=\"mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textConfig.label }}</label>\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-control\"\n id=\"{{id}}-top\" placeholder=\"{{textConfig.placeholder}}\" type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n }\n @if (textConfig.labelLocation === 'left') {\n <div class=\"row mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textConfig.label }}</label>\n <div class=\"col-sm-10\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" class=\"form-control\"\n id=\"{{id}}-left\" placeholder=\"{{textConfig.placeholder}}\" type=\"{{textConfig.type}}\" />\n </div>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { NgsFormsBaseClassFormItemInputWithOptionsComponent, NgsFormsFormItem } from '@ng-simplicity/forms-core';\nimport { NgsFormsFormsItemConfigBoostrapRadio } from './radio.config';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { v4 } from 'uuid';\n\n@Component({\n selector: 'ngs-forms-bootstrap-radio-group-input',\n imports: [ReactiveFormsModule],\n templateUrl: './radio.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapRadioInputComponent extends NgsFormsBaseClassFormItemInputWithOptionsComponent<NgsFormsFormsItemConfigBoostrapRadio> {\n static override key = 'radio';\n radioConfig = this.config as NgsFormsFormsItemConfigBoostrapRadio;\n\n static create(\n config: NgsFormsFormsItemConfigBoostrapRadio\n ): NgsFormsFormItem<NgsFormsFormsItemConfigBoostrapRadio> {\n return {\n uuid: v4(),\n type: NgsFormsBootstrapRadioInputComponent.key,\n config,\n };\n }\n}\n","@if (control) {\n <div [class.d-flex]=\"radioConfig.alignment==='horizontal'\">\n @if (!!radioConfig.label) {\n <div [class.text-danger]=\"!!errorMessage\" class=\"form-label me-2 pt-0\">\n {{ radioConfig.label }}\n </div>\n }\n @for (option of options(); track option.id) {\n <div [class.form-check-inline]=\"radioConfig.alignment==='horizontal'\"\n [class.me-2]=\"radioConfig.alignment==='horizontal'\"\n class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\" value=\"{{option.id}}\" class=\"form-check-input\"\n id=\"{{id}}{{option.id}}\" type=\"radio\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\"\n for=\"{{id}}{{option.id}}\">{{ option.label }}</label>\n </div>\n }\n </div>\n}\n\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { NgsFormsFormItemConfigBootstrapSelectInput } from './select.config';\n\nimport { NgsFormsBaseClassFormItemInputWithOptionsComponent, NgsFormsFormItem } from '@ng-simplicity/forms-core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { v4 } from 'uuid';\n\n@Component({\n selector: 'ngs-forms-bootstrap-select-input',\n imports: [ReactiveFormsModule],\n templateUrl: './select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapFormItemSelectInputComponent extends NgsFormsBaseClassFormItemInputWithOptionsComponent<NgsFormsFormItemConfigBootstrapSelectInput> {\n static override key = 'select';\n selectConfig = this.config as NgsFormsFormItemConfigBootstrapSelectInput;\n\n static create(\n config: NgsFormsFormItemConfigBootstrapSelectInput\n ): NgsFormsFormItem<NgsFormsFormItemConfigBootstrapSelectInput> {\n return {\n uuid: v4(),\n type: NgsFormsBootstrapFormItemSelectInputComponent.key,\n config,\n };\n }\n}\n","@if (control) {\n @if (selectConfig.labelLocation === 'top') {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ selectConfig.label }}</label>\n <select [attr.aria-label]=\"selectConfig.label\" [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\"\n class=\"form-select\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}\n </option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n } @else {\n\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ selectConfig.label }}</label>\n <div class=\"col-sm-10\">\n <select [attr.aria-label]=\"selectConfig.label\" [class.border-danger]=\"!!errorMessage\" [formControl]=\"control\"\n class=\"form-select\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}\n </option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"invalid-feedback\">{{ errorMessage }}</div>\n }\n </div>\n </div>\n }\n}\n\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgsFormsBaseClassFormInputComponent, NgsFormsFormItem } from '@ng-simplicity/forms-core';\nimport { NgsFormsFormItemConfigBootstrapTextArea } from './text-area.config';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { v4 } from 'uuid';\n\n@Component({\n selector: 'ngs-form-item-bs-text-area',\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './text-area.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapFormsItemTextAreaComponent extends NgsFormsBaseClassFormInputComponent<NgsFormsFormItemConfigBootstrapTextArea> {\n static override key = 'input-textarea';\n textAreaConfig = this.config as NgsFormsFormItemConfigBootstrapTextArea;\n\n static create(config: NgsFormsFormItemConfigBootstrapTextArea): NgsFormsFormItem<NgsFormsFormItemConfigBootstrapTextArea> {\n return {\n uuid: v4(),\n type: NgsFormsBootstrapFormsItemTextAreaComponent.key,\n config,\n };\n }\n}\n","@if (control) {\n @if (textAreaConfig.labelLocation === 'top' || !textAreaConfig.labelLocation) {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textAreaConfig.label }}</label>\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-top\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger\">{{ errorMessage }}</div>\n }\n </div>\n\n } @else {\n @if (textAreaConfig.labelLocation === 'left') {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textAreaConfig.label }}</label>\n <div class=\"col-sm-10\">\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-left\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n </div>\n @if (errorMessage) {\n <div class=\"text-danger\">{{ errorMessage }}</div>\n }\n </div>\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgsFormsComponentRegistryService, NgsFormsCoreModule } from '@ng-simplicity/forms-core';\nimport {\n NgsFormsBootstrapFormItemInputComponent,\n NgsFormsBootstrapFormsItemTextAreaComponent,\n NgsFormsBootstrapFormsItemCheckboxComponent,\n NgsFormsBootstrapRadioInputComponent,\n NgsFormsBootstrapFormItemSelectInputComponent\n} from './form-components';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NgsFormsCoreModule],\n})\nexport class NgsFormsBootstrapModule {\n static registerAllBootStrapComponents(registryService: NgsFormsComponentRegistryService) {\n NgsFormsCoreModule.registerCoreNgsFormComponents(registryService);\n registryService.register(NgsFormsBootstrapFormsItemCheckboxComponent.key, NgsFormsBootstrapFormsItemCheckboxComponent);\n registryService.register(NgsFormsBootstrapFormItemInputComponent.key, NgsFormsBootstrapFormItemInputComponent);\n registryService.register(NgsFormsBootstrapRadioInputComponent.key, NgsFormsBootstrapRadioInputComponent);\n registryService.register(NgsFormsBootstrapFormItemSelectInputComponent.key, NgsFormsBootstrapFormItemSelectInputComponent);\n registryService.register(NgsFormsBootstrapFormsItemTextAreaComponent.key, NgsFormsBootstrapFormsItemTextAreaComponent);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-simplicity-forms-bootstrap.mjs","sources":["../../../../libs/forms-bootstrap/src/lib/form-components/checkbox/checkbox.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/checkbox/checkbox.component.html","../../../../libs/forms-bootstrap/src/lib/form-components/input/input-component.resources.ts","../../../../libs/forms-bootstrap/src/lib/form-components/input/input.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/input/input.component.html","../../../../libs/forms-bootstrap/src/lib/form-components/radio/radio.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/radio/radio.component.html","../../../../libs/forms-bootstrap/src/lib/form-components/select/select.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/select/select.component.html","../../../../libs/forms-bootstrap/src/lib/form-components/text-area/text-area.component.ts","../../../../libs/forms-bootstrap/src/lib/form-components/text-area/text-area.component.html","../../../../libs/forms-bootstrap/src/lib/forms-bootstrap.module.ts","../../../../libs/forms-bootstrap/src/ng-simplicity-forms-bootstrap.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { NgsFormsBaseClassFormInputComponent, NgsFormsFormItem, NgsFormsFormItemConfigBaseInput } from '@ng-simplicity/forms-core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgsFormsFormItemConfigBootstrapCheckbox } from './checkbox.config';\nimport { v4 } from 'uuid';\n\n@Component({\n selector: 'ngs-form-item-bs-checkbox',\n imports: [ReactiveFormsModule],\n templateUrl: './checkbox.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapFormsItemCheckboxComponent extends NgsFormsBaseClassFormInputComponent<NgsFormsFormItemConfigBootstrapCheckbox> {\n static override key = 'checkbox';\n checkboxConfig = this.config as NgsFormsFormItemConfigBootstrapCheckbox;\n\n static create(\n config: NgsFormsFormItemConfigBootstrapCheckbox\n ): NgsFormsFormItem<NgsFormsFormItemConfigBootstrapCheckbox> {\n return {\n uuid: config.uuid || v4(),\n type: NgsFormsBootstrapFormsItemCheckboxComponent.key,\n config,\n };\n }\n}\n","@if (control) {\n <div class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-check-input\" \n id=\"{{id}}\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n type=\"checkbox\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\" for=\"{{id}}\">\n {{ checkboxConfig.label }}\n </label>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n}\n\n","import { NgsFormsFormItemConfigBootstrapTextInput } from './input.config';\n\nexport const NgsFormBootstrapInputComponentResources: INgsFormBoostrapInputComponentResources = {\n defaults: {\n type: 'text',\n labelLocation: 'top',\n },\n};\n\nexport interface INgsFormBoostrapInputComponentResources {\n defaults: Partial<NgsFormsFormItemConfigBootstrapTextInput>;\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { NgsFormsBaseClassFormInputComponent, NgsFormsFormItem, ngsDefaults } from '@ng-simplicity/forms-core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgsFormBootstrapInputComponentResources } from './input-component.resources';\nimport { NgsFormsFormItemConfigBootstrapTextInput } from './input.config';\nimport { v4 } from 'uuid';\n@Component({\n selector: 'ngs-forms-bs-input',\n imports: [ReactiveFormsModule],\n templateUrl: './input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapFormItemInputComponent extends NgsFormsBaseClassFormInputComponent<NgsFormsFormItemConfigBootstrapTextInput> {\n static override key = 'input-text';\n textConfig: NgsFormsFormItemConfigBootstrapTextInput = ngsDefaults(this.config as NgsFormsFormItemConfigBootstrapTextInput, NgsFormBootstrapInputComponentResources.defaults);\n constructor() {\n super();\n }\n\n static create(config: NgsFormsFormItemConfigBootstrapTextInput): NgsFormsFormItem<NgsFormsFormItemConfigBootstrapTextInput> {\n return {\n uuid: config.uuid || v4(),\n type: NgsFormsBootstrapFormItemInputComponent.key,\n config,\n };\n }\n}\n","@if (!!control) {\n @if (textConfig.labelLocation === 'top') {\n <div class=\"mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textConfig.label }}</label>\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-control\"\n id=\"{{id}}-top\" \n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textConfig.placeholder}}\" \n type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n }\n @if (textConfig.labelLocation === 'left') {\n <div class=\"row mb-2\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textConfig.label }}</label>\n <div class=\"col-sm-10\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n class=\"form-control\"\n id=\"{{id}}-left\" \n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textConfig.placeholder}}\" \n type=\"{{textConfig.type}}\" />\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { NgsFormsBaseClassFormItemInputWithOptionsComponent, NgsFormsFormItem } from '@ng-simplicity/forms-core';\nimport { NgsFormsFormsItemConfigBoostrapRadio } from './radio.config';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { v4 } from 'uuid';\n\n@Component({\n selector: 'ngs-forms-bootstrap-radio-group-input',\n imports: [ReactiveFormsModule],\n templateUrl: './radio.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapRadioInputComponent extends NgsFormsBaseClassFormItemInputWithOptionsComponent<NgsFormsFormsItemConfigBoostrapRadio> {\n static override key = 'radio';\n radioConfig = this.config as NgsFormsFormsItemConfigBoostrapRadio;\n\n static create(\n config: NgsFormsFormsItemConfigBoostrapRadio\n ): NgsFormsFormItem<NgsFormsFormsItemConfigBoostrapRadio> {\n return {\n uuid: config.uuid || v4(),\n type: NgsFormsBootstrapRadioInputComponent.key,\n config,\n };\n }\n}\n","@if (control) {\n <div role=\"radiogroup\"\n [attr.aria-labelledby]=\"radioConfig.label ? id + '-label' : null\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n class=\"mb-3\">\n <div [class.d-flex]=\"radioConfig.alignment==='horizontal'\">\n @if (!!radioConfig.label) {\n <div [class.text-danger]=\"!!errorMessage\" class=\"form-label me-2 pt-0\" id=\"{{id}}-label\">\n {{ radioConfig.label }}\n </div>\n }\n @for (option of options(); track option.id) {\n <div [class.form-check-inline]=\"radioConfig.alignment==='horizontal'\"\n [class.me-2]=\"radioConfig.alignment==='horizontal'\"\n class=\"form-check\">\n <input [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\" \n value=\"{{option.id}}\" \n class=\"form-check-input\"\n id=\"{{id}}{{option.id}}\" \n type=\"radio\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-check-label\"\n for=\"{{id}}{{option.id}}\">{{ option.label }}</label>\n </div>\n }\n </div>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n}\n\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { NgsFormsFormItemConfigBootstrapSelectInput } from './select.config';\n\nimport { NgsFormsBaseClassFormItemInputWithOptionsComponent, NgsFormsFormItem } from '@ng-simplicity/forms-core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { v4 } from 'uuid';\n\n@Component({\n selector: 'ngs-forms-bootstrap-select-input',\n imports: [ReactiveFormsModule],\n templateUrl: './select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapFormItemSelectInputComponent extends NgsFormsBaseClassFormItemInputWithOptionsComponent<NgsFormsFormItemConfigBootstrapSelectInput> {\n static override key = 'select';\n selectConfig = this.config as NgsFormsFormItemConfigBootstrapSelectInput;\n\n static create(\n config: NgsFormsFormItemConfigBootstrapSelectInput\n ): NgsFormsFormItem<NgsFormsFormItemConfigBootstrapSelectInput> {\n return {\n uuid: config.uuid || v4(),\n type: NgsFormsBootstrapFormItemSelectInputComponent.key,\n config,\n };\n }\n}\n","@if (control) {\n @if (selectConfig.labelLocation === 'top') {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ selectConfig.label }}</label>\n <select [attr.aria-label]=\"selectConfig.label\" \n [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\"\n class=\"form-select\"\n id=\"{{id}}-top\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}</option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"!!option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n } @else {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ selectConfig.label }}</label>\n <div class=\"col-sm-10\">\n <select [attr.aria-label]=\"selectConfig.label\" \n [class.border-danger]=\"!!errorMessage\" \n [formControl]=\"control\"\n class=\"form-select\"\n id=\"{{id}}-left\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\">\n @if (selectConfig.placeholder) {\n <option [disabled]=\"true\" [value]=\"selectConfig.placeHolderValue || ''\">{{ selectConfig.placeholder }}</option>\n }\n @for (option of options(); track option.id) {\n <option [disabled]=\"!!option.disabled\" [value]=\"option.id\">\n {{ option.label }}\n </option>\n }\n </select>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n}\n\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgsFormsBaseClassFormInputComponent, NgsFormsFormItem } from '@ng-simplicity/forms-core';\nimport { NgsFormsFormItemConfigBootstrapTextArea } from './text-area.config';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { v4 } from 'uuid';\n\n@Component({\n selector: 'ngs-form-item-bs-text-area',\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './text-area.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgsFormsBootstrapFormsItemTextAreaComponent extends NgsFormsBaseClassFormInputComponent<NgsFormsFormItemConfigBootstrapTextArea> {\n static override key = 'input-textarea';\n textAreaConfig = this.config as NgsFormsFormItemConfigBootstrapTextArea;\n\n static create(config: NgsFormsFormItemConfigBootstrapTextArea): NgsFormsFormItem<NgsFormsFormItemConfigBootstrapTextArea> {\n return {\n uuid: config.uuid || v4(),\n type: NgsFormsBootstrapFormsItemTextAreaComponent.key,\n config,\n };\n }\n}\n","@if (control) {\n @if (textAreaConfig.labelLocation === 'top' || !textAreaConfig.labelLocation) {\n <div class=\"mb-3\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"form-label\" for=\"{{id}}-top\">{{ textAreaConfig.label }}</label>\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-top\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n } @else {\n @if (textAreaConfig.labelLocation === 'left') {\n <div class=\"mb-3 row\">\n <label [class.text-danger]=\"!!errorMessage\" class=\"col-sm-2 col-form-label\"\n for=\"{{id}}-left\">{{ textAreaConfig.label }}</label>\n <div class=\"col-sm-10\">\n <textarea [class.border-danger]=\"!!errorMessage\"\n [formControl]=\"control\"\n class=\"form-control {{textAreaConfig.inputCssClass}}\"\n id=\"{{id}}-left\"\n [attr.aria-describedby]=\"errorMessage ? id + '-error' : null\"\n placeholder=\"{{textAreaConfig.placeholder}}\"\n style=\"height: 210px\"></textarea>\n @if (errorMessage) {\n <div class=\"text-danger mt-1\" id=\"{{id}}-error\" style=\"font-size: 0.875rem;\">\n {{ errorMessage }}\n </div>\n }\n </div>\n </div>\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgsFormsComponentRegistryService, NgsFormsCoreModule } from '@ng-simplicity/forms-core';\nimport {\n NgsFormsBootstrapFormItemInputComponent,\n NgsFormsBootstrapFormsItemTextAreaComponent,\n NgsFormsBootstrapFormsItemCheckboxComponent,\n NgsFormsBootstrapRadioInputComponent,\n NgsFormsBootstrapFormItemSelectInputComponent\n} from './form-components';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NgsFormsCoreModule],\n})\nexport class NgsFormsBootstrapModule {\n static registerAllBootStrapComponents(registryService: NgsFormsComponentRegistryService) {\n NgsFormsCoreModule.registerCoreNgsFormComponents(registryService);\n registryService.register(NgsFormsBootstrapFormsItemCheckboxComponent.key, NgsFormsBootstrapFormsItemCheckboxComponent);\n registryService.register(NgsFormsBootstrapFormItemInputComponent.key, NgsFormsBootstrapFormItemInputComponent);\n registryService.register(NgsFormsBootstrapRadioInputComponent.key, NgsFormsBootstrapRadioInputComponent);\n registryService.register(NgsFormsBootstrapFormItemSelectInputComponent.key, NgsFormsBootstrapFormItemSelectInputComponent);\n registryService.register(NgsFormsBootstrapFormsItemTextAreaComponent.key, NgsFormsBootstrapFormsItemTextAreaComponent);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -42,7 +42,7 @@ declare class NgsFormsBootstrapRadioInputComponent extends NgsFormsBaseClassForm
42
42
 
43
43
  interface NgsFormsFormItemConfigBootstrapSelectInput extends NgsFormsFormItemConfigBaseInputWithOptions {
44
44
  labelLocation?: 'top' | 'left';
45
- placeholder?: boolean;
45
+ placeholder?: string;
46
46
  placeHolderValue?: string;
47
47
  }
48
48
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-simplicity/forms-bootstrap",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -11,7 +11,7 @@
11
11
  "@angular/common": "^19.0.0 || ^20.0.0",
12
12
  "@angular/core": "^19.0.0 || ^20.0.0",
13
13
  "@angular/forms": "^19.0.0 || ^20.0.0",
14
- "@ng-simplicity/forms-core": "^1.0.0"
14
+ "@ng-simplicity/forms-core": "^1.1.0"
15
15
  },
16
16
  "sideEffects": false,
17
17
  "module": "fesm2022/ng-simplicity-forms-bootstrap.mjs",