@ngb-bootstrap/core 0.0.0 → 0.1.0-next.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/LICENSE +201 -0
- package/NOTICE +18 -0
- package/README.md +26 -0
- package/fesm2022/ngb-bootstrap-core-alert.mjs +154 -0
- package/fesm2022/ngb-bootstrap-core-alert.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-badge.mjs +100 -0
- package/fesm2022/ngb-bootstrap-core-badge.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-breadcrumb.mjs +135 -0
- package/fesm2022/ngb-bootstrap-core-breadcrumb.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-button.mjs +513 -0
- package/fesm2022/ngb-bootstrap-core-button.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-card.mjs +540 -0
- package/fesm2022/ngb-bootstrap-core-card.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-cdk.mjs +282 -0
- package/fesm2022/ngb-bootstrap-core-cdk.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-checkbox.mjs +165 -0
- package/fesm2022/ngb-bootstrap-core-checkbox.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-chips.mjs +512 -0
- package/fesm2022/ngb-bootstrap-core-chips.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-floating-label.mjs +83 -0
- package/fesm2022/ngb-bootstrap-core-floating-label.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-footer.mjs +48 -0
- package/fesm2022/ngb-bootstrap-core-footer.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-icon.mjs +243 -0
- package/fesm2022/ngb-bootstrap-core-icon.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-input.mjs +540 -0
- package/fesm2022/ngb-bootstrap-core-input.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-layout.mjs +272 -0
- package/fesm2022/ngb-bootstrap-core-layout.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-navbar.mjs +150 -0
- package/fesm2022/ngb-bootstrap-core-navbar.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-radio.mjs +279 -0
- package/fesm2022/ngb-bootstrap-core-radio.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-sidebar.mjs +425 -0
- package/fesm2022/ngb-bootstrap-core-sidebar.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-spinner.mjs +126 -0
- package/fesm2022/ngb-bootstrap-core-spinner.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core-switch.mjs +147 -0
- package/fesm2022/ngb-bootstrap-core-switch.mjs.map +1 -0
- package/fesm2022/ngb-bootstrap-core.mjs +69 -0
- package/fesm2022/ngb-bootstrap-core.mjs.map +1 -0
- package/ngb-bootstrap.css +827 -0
- package/package.json +118 -4
- package/styles/_breadcrumb.scss +9 -0
- package/styles/_button.scss +14 -0
- package/styles/_card.scss +86 -0
- package/styles/_chip.scss +10 -0
- package/styles/_choice.scss +14 -0
- package/styles/_contrast.scss +23 -0
- package/styles/_icon.scss +62 -0
- package/styles/_index.scss +33 -0
- package/styles/_input.scss +9 -0
- package/styles/_layout.scss +602 -0
- package/styles/_overlay.scss +14 -0
- package/styles/_tokens.scss +29 -0
- package/styles/_typography.scss +77 -0
- package/styles/ngb-bootstrap.scss +2 -0
- package/types/ngb-bootstrap-core-alert.d.ts +65 -0
- package/types/ngb-bootstrap-core-badge.d.ts +38 -0
- package/types/ngb-bootstrap-core-breadcrumb.d.ts +32 -0
- package/types/ngb-bootstrap-core-button.d.ts +177 -0
- package/types/ngb-bootstrap-core-card.d.ts +154 -0
- package/types/ngb-bootstrap-core-cdk.d.ts +165 -0
- package/types/ngb-bootstrap-core-checkbox.d.ts +53 -0
- package/types/ngb-bootstrap-core-chips.d.ts +170 -0
- package/types/ngb-bootstrap-core-floating-label.d.ts +22 -0
- package/types/ngb-bootstrap-core-footer.d.ts +16 -0
- package/types/ngb-bootstrap-core-icon.d.ts +99 -0
- package/types/ngb-bootstrap-core-input.d.ts +208 -0
- package/types/ngb-bootstrap-core-layout.d.ts +102 -0
- package/types/ngb-bootstrap-core-navbar.d.ts +33 -0
- package/types/ngb-bootstrap-core-radio.d.ts +96 -0
- package/types/ngb-bootstrap-core-sidebar.d.ts +62 -0
- package/types/ngb-bootstrap-core-spinner.d.ts +49 -0
- package/types/ngb-bootstrap-core-switch.d.ts +44 -0
- package/types/ngb-bootstrap-core.d.ts +82 -0
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, InjectionToken, booleanAttribute, computed, contentChild, forwardRef, inject, input, output, signal } from "@angular/core";
|
|
3
|
+
import { ngbId } from "@ngb-bootstrap/core/cdk";
|
|
4
|
+
import { NgControl } from "@angular/forms";
|
|
5
|
+
import { NGB_I18N } from "@ngb-bootstrap/core";
|
|
6
|
+
import { NgbButtonX } from "@ngb-bootstrap/core/button";
|
|
7
|
+
const NGB_INPUT_FIELD = new InjectionToken("NGB_INPUT_FIELD");
|
|
8
|
+
var NgbInput = class NgbInput {
|
|
9
|
+
element = inject(ElementRef).nativeElement;
|
|
10
|
+
control = inject(NgControl, {
|
|
11
|
+
optional: true,
|
|
12
|
+
self: true
|
|
13
|
+
});
|
|
14
|
+
field = inject(NGB_INPUT_FIELD, { optional: true });
|
|
15
|
+
ownDescribedBy = this.element.getAttribute("aria-describedby");
|
|
16
|
+
watched = null;
|
|
17
|
+
subscription;
|
|
18
|
+
id = input(ngbId("ngb-input"), ...ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []);
|
|
19
|
+
size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
20
|
+
plaintext = input(false, {
|
|
21
|
+
...ngDevMode ? { debugName: "plaintext" } : /* istanbul ignore next */ {},
|
|
22
|
+
transform: booleanAttribute
|
|
23
|
+
});
|
|
24
|
+
invalid = input(void 0, ...ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []);
|
|
25
|
+
placeholder = input(...ngDevMode ? [void 0, { debugName: "placeholder" }] : /* istanbul ignore next */ []);
|
|
26
|
+
touchedInvalid = signal(false, ...ngDevMode ? [{ debugName: "touchedInvalid" }] : /* istanbul ignore next */ []);
|
|
27
|
+
valueState = signal(false, ...ngDevMode ? [{ debugName: "valueState" }] : /* istanbul ignore next */ []);
|
|
28
|
+
disabledState = signal(false, ...ngDevMode ? [{ debugName: "disabledState" }] : /* istanbul ignore next */ []);
|
|
29
|
+
readonlyState = signal(false, ...ngDevMode ? [{ debugName: "readonlyState" }] : /* istanbul ignore next */ []);
|
|
30
|
+
isInvalid = computed(() => this.invalid() ?? this.touchedInvalid(), ...ngDevMode ? [{ debugName: "isInvalid" }] : /* istanbul ignore next */ []);
|
|
31
|
+
hasValue = this.valueState.asReadonly();
|
|
32
|
+
disabled = this.disabledState.asReadonly();
|
|
33
|
+
readonly = this.readonlyState.asReadonly();
|
|
34
|
+
placeholderText = computed(() => this.element.tagName === "SELECT" ? null : this.placeholder() ?? this.field?.placeholder ?? null, ...ngDevMode ? [{ debugName: "placeholderText" }] : /* istanbul ignore next */ []);
|
|
35
|
+
describedBy = computed(() => {
|
|
36
|
+
return [this.ownDescribedBy, this.field?.describedBy()].filter(Boolean).join(" ") || null;
|
|
37
|
+
}, ...ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []);
|
|
38
|
+
constructor() {
|
|
39
|
+
inject(DestroyRef).onDestroy(() => this.subscription?.unsubscribe());
|
|
40
|
+
}
|
|
41
|
+
ngDoCheck() {
|
|
42
|
+
this.sync();
|
|
43
|
+
}
|
|
44
|
+
sync() {
|
|
45
|
+
const control = this.control?.control ?? null;
|
|
46
|
+
if (control !== this.watched) {
|
|
47
|
+
this.subscription?.unsubscribe();
|
|
48
|
+
this.watched = control;
|
|
49
|
+
this.subscription = control?.events.subscribe(() => this.sync());
|
|
50
|
+
}
|
|
51
|
+
const value = this.control ? this.control.value : this.element.value;
|
|
52
|
+
this.touchedInvalid.set(!!this.control?.invalid && !!this.control.touched);
|
|
53
|
+
this.valueState.set(value != null && value !== "");
|
|
54
|
+
this.disabledState.set(this.control ? !!this.control.disabled : this.element.disabled);
|
|
55
|
+
this.readonlyState.set("readOnly" in this.element && this.element.readOnly);
|
|
56
|
+
}
|
|
57
|
+
clear() {
|
|
58
|
+
this.element.value = "";
|
|
59
|
+
this.element.dispatchEvent(new Event("input", { bubbles: true }));
|
|
60
|
+
this.focus();
|
|
61
|
+
}
|
|
62
|
+
focus() {
|
|
63
|
+
this.element.focus();
|
|
64
|
+
}
|
|
65
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
66
|
+
minVersion: "12.0.0",
|
|
67
|
+
version: "22.2.3",
|
|
68
|
+
ngImport: i0,
|
|
69
|
+
type: NgbInput,
|
|
70
|
+
deps: [],
|
|
71
|
+
target: i0.ɵɵFactoryTarget.Directive
|
|
72
|
+
});
|
|
73
|
+
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
74
|
+
minVersion: "17.1.0",
|
|
75
|
+
version: "22.2.3",
|
|
76
|
+
type: NgbInput,
|
|
77
|
+
isStandalone: true,
|
|
78
|
+
selector: "input[ngbInput], textarea[ngbInput], select[ngbInput]",
|
|
79
|
+
inputs: {
|
|
80
|
+
id: {
|
|
81
|
+
classPropertyName: "id",
|
|
82
|
+
publicName: "id",
|
|
83
|
+
isSignal: true,
|
|
84
|
+
isRequired: false,
|
|
85
|
+
transformFunction: null
|
|
86
|
+
},
|
|
87
|
+
size: {
|
|
88
|
+
classPropertyName: "size",
|
|
89
|
+
publicName: "size",
|
|
90
|
+
isSignal: true,
|
|
91
|
+
isRequired: false,
|
|
92
|
+
transformFunction: null
|
|
93
|
+
},
|
|
94
|
+
plaintext: {
|
|
95
|
+
classPropertyName: "plaintext",
|
|
96
|
+
publicName: "plaintext",
|
|
97
|
+
isSignal: true,
|
|
98
|
+
isRequired: false,
|
|
99
|
+
transformFunction: null
|
|
100
|
+
},
|
|
101
|
+
invalid: {
|
|
102
|
+
classPropertyName: "invalid",
|
|
103
|
+
publicName: "invalid",
|
|
104
|
+
isSignal: true,
|
|
105
|
+
isRequired: false,
|
|
106
|
+
transformFunction: null
|
|
107
|
+
},
|
|
108
|
+
placeholder: {
|
|
109
|
+
classPropertyName: "placeholder",
|
|
110
|
+
publicName: "placeholder",
|
|
111
|
+
isSignal: true,
|
|
112
|
+
isRequired: false,
|
|
113
|
+
transformFunction: null
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
host: {
|
|
117
|
+
listeners: {
|
|
118
|
+
"input": "sync()",
|
|
119
|
+
"blur": "sync()"
|
|
120
|
+
},
|
|
121
|
+
properties: {
|
|
122
|
+
"class.form-control": "!plaintext()",
|
|
123
|
+
"class.form-control-plaintext": "plaintext()",
|
|
124
|
+
"class.form-control-sm": "size() === \"sm\"",
|
|
125
|
+
"class.form-control-lg": "size() === \"lg\"",
|
|
126
|
+
"class.is-invalid": "isInvalid()",
|
|
127
|
+
"attr.id": "id()",
|
|
128
|
+
"attr.placeholder": "placeholderText()",
|
|
129
|
+
"attr.aria-invalid": "isInvalid() ? \"true\" : null",
|
|
130
|
+
"attr.aria-describedby": "describedBy()"
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
exportAs: ["ngbInput"],
|
|
134
|
+
ngImport: i0
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
138
|
+
minVersion: "12.0.0",
|
|
139
|
+
version: "22.2.3",
|
|
140
|
+
ngImport: i0,
|
|
141
|
+
type: NgbInput,
|
|
142
|
+
decorators: [{
|
|
143
|
+
type: Directive,
|
|
144
|
+
args: [{
|
|
145
|
+
selector: "input[ngbInput], textarea[ngbInput], select[ngbInput]",
|
|
146
|
+
exportAs: "ngbInput",
|
|
147
|
+
host: {
|
|
148
|
+
"[class.form-control]": "!plaintext()",
|
|
149
|
+
"[class.form-control-plaintext]": "plaintext()",
|
|
150
|
+
"[class.form-control-sm]": "size() === \"sm\"",
|
|
151
|
+
"[class.form-control-lg]": "size() === \"lg\"",
|
|
152
|
+
"[class.is-invalid]": "isInvalid()",
|
|
153
|
+
"[attr.id]": "id()",
|
|
154
|
+
"[attr.placeholder]": "placeholderText()",
|
|
155
|
+
"[attr.aria-invalid]": "isInvalid() ? \"true\" : null",
|
|
156
|
+
"[attr.aria-describedby]": "describedBy()",
|
|
157
|
+
"(input)": "sync()",
|
|
158
|
+
"(blur)": "sync()"
|
|
159
|
+
}
|
|
160
|
+
}]
|
|
161
|
+
}],
|
|
162
|
+
ctorParameters: () => [],
|
|
163
|
+
propDecorators: {
|
|
164
|
+
id: [{
|
|
165
|
+
type: i0.Input,
|
|
166
|
+
args: [{
|
|
167
|
+
isSignal: true,
|
|
168
|
+
alias: "id",
|
|
169
|
+
required: false
|
|
170
|
+
}]
|
|
171
|
+
}],
|
|
172
|
+
size: [{
|
|
173
|
+
type: i0.Input,
|
|
174
|
+
args: [{
|
|
175
|
+
isSignal: true,
|
|
176
|
+
alias: "size",
|
|
177
|
+
required: false
|
|
178
|
+
}]
|
|
179
|
+
}],
|
|
180
|
+
plaintext: [{
|
|
181
|
+
type: i0.Input,
|
|
182
|
+
args: [{
|
|
183
|
+
isSignal: true,
|
|
184
|
+
alias: "plaintext",
|
|
185
|
+
required: false
|
|
186
|
+
}]
|
|
187
|
+
}],
|
|
188
|
+
invalid: [{
|
|
189
|
+
type: i0.Input,
|
|
190
|
+
args: [{
|
|
191
|
+
isSignal: true,
|
|
192
|
+
alias: "invalid",
|
|
193
|
+
required: false
|
|
194
|
+
}]
|
|
195
|
+
}],
|
|
196
|
+
placeholder: [{
|
|
197
|
+
type: i0.Input,
|
|
198
|
+
args: [{
|
|
199
|
+
isSignal: true,
|
|
200
|
+
alias: "placeholder",
|
|
201
|
+
required: false
|
|
202
|
+
}]
|
|
203
|
+
}]
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
var NgbField = class NgbField {
|
|
207
|
+
control = contentChild(NgbInput, ...ngDevMode ? [{ debugName: "control" }] : /* istanbul ignore next */ []);
|
|
208
|
+
label = input(...ngDevMode ? [void 0, { debugName: "label" }] : /* istanbul ignore next */ []);
|
|
209
|
+
hint = input(...ngDevMode ? [void 0, { debugName: "hint" }] : /* istanbul ignore next */ []);
|
|
210
|
+
error = input(...ngDevMode ? [void 0, { debugName: "error" }] : /* istanbul ignore next */ []);
|
|
211
|
+
hintId = ngbId("ngb-hint");
|
|
212
|
+
errorId = ngbId("ngb-error");
|
|
213
|
+
labelFor = computed(() => this.control()?.id() ?? null, ...ngDevMode ? [{ debugName: "labelFor" }] : /* istanbul ignore next */ []);
|
|
214
|
+
showError = computed(() => !!this.error() && !!this.control()?.isInvalid(), ...ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []);
|
|
215
|
+
describedBy = computed(() => {
|
|
216
|
+
return [this.hint() ? this.hintId : "", this.showError() ? this.errorId : ""].filter(Boolean).join(" ") || null;
|
|
217
|
+
}, ...ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []);
|
|
218
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
219
|
+
minVersion: "12.0.0",
|
|
220
|
+
version: "22.2.3",
|
|
221
|
+
ngImport: i0,
|
|
222
|
+
type: NgbField,
|
|
223
|
+
deps: [],
|
|
224
|
+
target: i0.ɵɵFactoryTarget.Directive
|
|
225
|
+
});
|
|
226
|
+
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
227
|
+
minVersion: "17.2.0",
|
|
228
|
+
version: "22.2.3",
|
|
229
|
+
type: NgbField,
|
|
230
|
+
isStandalone: true,
|
|
231
|
+
inputs: {
|
|
232
|
+
label: {
|
|
233
|
+
classPropertyName: "label",
|
|
234
|
+
publicName: "label",
|
|
235
|
+
isSignal: true,
|
|
236
|
+
isRequired: false,
|
|
237
|
+
transformFunction: null
|
|
238
|
+
},
|
|
239
|
+
hint: {
|
|
240
|
+
classPropertyName: "hint",
|
|
241
|
+
publicName: "hint",
|
|
242
|
+
isSignal: true,
|
|
243
|
+
isRequired: false,
|
|
244
|
+
transformFunction: null
|
|
245
|
+
},
|
|
246
|
+
error: {
|
|
247
|
+
classPropertyName: "error",
|
|
248
|
+
publicName: "error",
|
|
249
|
+
isSignal: true,
|
|
250
|
+
isRequired: false,
|
|
251
|
+
transformFunction: null
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
queries: [{
|
|
255
|
+
propertyName: "control",
|
|
256
|
+
first: true,
|
|
257
|
+
predicate: NgbInput,
|
|
258
|
+
descendants: true,
|
|
259
|
+
isSignal: true
|
|
260
|
+
}],
|
|
261
|
+
ngImport: i0
|
|
262
|
+
});
|
|
263
|
+
};
|
|
264
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
265
|
+
minVersion: "12.0.0",
|
|
266
|
+
version: "22.2.3",
|
|
267
|
+
ngImport: i0,
|
|
268
|
+
type: NgbField,
|
|
269
|
+
decorators: [{ type: Directive }],
|
|
270
|
+
propDecorators: {
|
|
271
|
+
control: [{
|
|
272
|
+
type: i0.ContentChild,
|
|
273
|
+
args: [i0.forwardRef(() => NgbInput), { isSignal: true }]
|
|
274
|
+
}],
|
|
275
|
+
label: [{
|
|
276
|
+
type: i0.Input,
|
|
277
|
+
args: [{
|
|
278
|
+
isSignal: true,
|
|
279
|
+
alias: "label",
|
|
280
|
+
required: false
|
|
281
|
+
}]
|
|
282
|
+
}],
|
|
283
|
+
hint: [{
|
|
284
|
+
type: i0.Input,
|
|
285
|
+
args: [{
|
|
286
|
+
isSignal: true,
|
|
287
|
+
alias: "hint",
|
|
288
|
+
required: false
|
|
289
|
+
}]
|
|
290
|
+
}],
|
|
291
|
+
error: [{
|
|
292
|
+
type: i0.Input,
|
|
293
|
+
args: [{
|
|
294
|
+
isSignal: true,
|
|
295
|
+
alias: "error",
|
|
296
|
+
required: false
|
|
297
|
+
}]
|
|
298
|
+
}]
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
var NgbPrefix = class NgbPrefix {
|
|
302
|
+
interactive = ["BUTTON", "A"].includes(inject(ElementRef).nativeElement.tagName);
|
|
303
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
304
|
+
minVersion: "12.0.0",
|
|
305
|
+
version: "22.2.3",
|
|
306
|
+
ngImport: i0,
|
|
307
|
+
type: NgbPrefix,
|
|
308
|
+
deps: [],
|
|
309
|
+
target: i0.ɵɵFactoryTarget.Directive
|
|
310
|
+
});
|
|
311
|
+
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
312
|
+
minVersion: "14.0.0",
|
|
313
|
+
version: "22.2.3",
|
|
314
|
+
type: NgbPrefix,
|
|
315
|
+
isStandalone: true,
|
|
316
|
+
selector: "[ngbPrefix]",
|
|
317
|
+
host: { properties: { "class.input-group-text": "!interactive" } },
|
|
318
|
+
ngImport: i0
|
|
319
|
+
});
|
|
320
|
+
};
|
|
321
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
322
|
+
minVersion: "12.0.0",
|
|
323
|
+
version: "22.2.3",
|
|
324
|
+
ngImport: i0,
|
|
325
|
+
type: NgbPrefix,
|
|
326
|
+
decorators: [{
|
|
327
|
+
type: Directive,
|
|
328
|
+
args: [{
|
|
329
|
+
selector: "[ngbPrefix]",
|
|
330
|
+
host: { "[class.input-group-text]": "!interactive" }
|
|
331
|
+
}]
|
|
332
|
+
}]
|
|
333
|
+
});
|
|
334
|
+
var NgbSuffix = class NgbSuffix {
|
|
335
|
+
interactive = ["BUTTON", "A"].includes(inject(ElementRef).nativeElement.tagName);
|
|
336
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
337
|
+
minVersion: "12.0.0",
|
|
338
|
+
version: "22.2.3",
|
|
339
|
+
ngImport: i0,
|
|
340
|
+
type: NgbSuffix,
|
|
341
|
+
deps: [],
|
|
342
|
+
target: i0.ɵɵFactoryTarget.Directive
|
|
343
|
+
});
|
|
344
|
+
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
345
|
+
minVersion: "14.0.0",
|
|
346
|
+
version: "22.2.3",
|
|
347
|
+
type: NgbSuffix,
|
|
348
|
+
isStandalone: true,
|
|
349
|
+
selector: "[ngbSuffix]",
|
|
350
|
+
host: { properties: { "class.input-group-text": "!interactive" } },
|
|
351
|
+
ngImport: i0
|
|
352
|
+
});
|
|
353
|
+
};
|
|
354
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
355
|
+
minVersion: "12.0.0",
|
|
356
|
+
version: "22.2.3",
|
|
357
|
+
ngImport: i0,
|
|
358
|
+
type: NgbSuffix,
|
|
359
|
+
decorators: [{
|
|
360
|
+
type: Directive,
|
|
361
|
+
args: [{
|
|
362
|
+
selector: "[ngbSuffix]",
|
|
363
|
+
host: { "[class.input-group-text]": "!interactive" }
|
|
364
|
+
}]
|
|
365
|
+
}]
|
|
366
|
+
});
|
|
367
|
+
var NgbTextfield = class NgbTextfield extends NgbField {
|
|
368
|
+
i18n = inject(NGB_I18N);
|
|
369
|
+
size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
370
|
+
clearable = input(false, {
|
|
371
|
+
...ngDevMode ? { debugName: "clearable" } : /* istanbul ignore next */ {},
|
|
372
|
+
transform: booleanAttribute
|
|
373
|
+
});
|
|
374
|
+
clearLabel = input(...ngDevMode ? [void 0, { debugName: "clearLabel" }] : /* istanbul ignore next */ []);
|
|
375
|
+
cleared = output();
|
|
376
|
+
showClear = computed(() => {
|
|
377
|
+
const control = this.control();
|
|
378
|
+
return this.clearable() && !!control && control.hasValue() && !control.disabled() && !control.readonly();
|
|
379
|
+
}, ...ngDevMode ? [{ debugName: "showClear" }] : /* istanbul ignore next */ []);
|
|
380
|
+
clear() {
|
|
381
|
+
this.control()?.clear();
|
|
382
|
+
this.cleared.emit();
|
|
383
|
+
}
|
|
384
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
385
|
+
minVersion: "12.0.0",
|
|
386
|
+
version: "22.2.3",
|
|
387
|
+
ngImport: i0,
|
|
388
|
+
type: NgbTextfield,
|
|
389
|
+
deps: null,
|
|
390
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
391
|
+
});
|
|
392
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
393
|
+
minVersion: "17.0.0",
|
|
394
|
+
version: "22.2.3",
|
|
395
|
+
type: NgbTextfield,
|
|
396
|
+
isStandalone: true,
|
|
397
|
+
selector: "ngb-textfield",
|
|
398
|
+
inputs: {
|
|
399
|
+
size: {
|
|
400
|
+
classPropertyName: "size",
|
|
401
|
+
publicName: "size",
|
|
402
|
+
isSignal: true,
|
|
403
|
+
isRequired: false,
|
|
404
|
+
transformFunction: null
|
|
405
|
+
},
|
|
406
|
+
clearable: {
|
|
407
|
+
classPropertyName: "clearable",
|
|
408
|
+
publicName: "clearable",
|
|
409
|
+
isSignal: true,
|
|
410
|
+
isRequired: false,
|
|
411
|
+
transformFunction: null
|
|
412
|
+
},
|
|
413
|
+
clearLabel: {
|
|
414
|
+
classPropertyName: "clearLabel",
|
|
415
|
+
publicName: "clearLabel",
|
|
416
|
+
isSignal: true,
|
|
417
|
+
isRequired: false,
|
|
418
|
+
transformFunction: null
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
outputs: { cleared: "cleared" },
|
|
422
|
+
host: { classAttribute: "form-field" },
|
|
423
|
+
providers: [{
|
|
424
|
+
provide: NGB_INPUT_FIELD,
|
|
425
|
+
useExisting: forwardRef(() => NgbTextfield)
|
|
426
|
+
}],
|
|
427
|
+
usesInheritance: true,
|
|
428
|
+
ngImport: i0,
|
|
429
|
+
template: `
|
|
430
|
+
@if (label()) {
|
|
431
|
+
<label class="form-label" [attr.for]="labelFor()">{{ label() }}</label>
|
|
432
|
+
}
|
|
433
|
+
<div
|
|
434
|
+
class="input-group"
|
|
435
|
+
[class.input-group-sm]="size() === 'sm'"
|
|
436
|
+
[class.input-group-lg]="size() === 'lg'"
|
|
437
|
+
>
|
|
438
|
+
<ng-content select="[ngbPrefix]" />
|
|
439
|
+
<ng-content />
|
|
440
|
+
@if (showClear()) {
|
|
441
|
+
<span class="input-group-text ngb-textfield-clear">
|
|
442
|
+
<button ngbButtonX [label]="clearLabel() ?? i18n.clear" (click)="clear()"></button>
|
|
443
|
+
</span>
|
|
444
|
+
}
|
|
445
|
+
<ng-content select="[ngbSuffix]" />
|
|
446
|
+
</div>
|
|
447
|
+
@if (hint()) {
|
|
448
|
+
<div class="form-text" [id]="hintId">{{ hint() }}</div>
|
|
449
|
+
}
|
|
450
|
+
@if (showError()) {
|
|
451
|
+
<div class="invalid-feedback" [id]="errorId">{{ error() }}</div>
|
|
452
|
+
}
|
|
453
|
+
`,
|
|
454
|
+
isInline: true,
|
|
455
|
+
dependencies: [{
|
|
456
|
+
kind: "directive",
|
|
457
|
+
type: NgbButtonX,
|
|
458
|
+
selector: "button[ngbButtonX]",
|
|
459
|
+
inputs: ["label"]
|
|
460
|
+
}],
|
|
461
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
462
|
+
});
|
|
463
|
+
};
|
|
464
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
465
|
+
minVersion: "12.0.0",
|
|
466
|
+
version: "22.2.3",
|
|
467
|
+
ngImport: i0,
|
|
468
|
+
type: NgbTextfield,
|
|
469
|
+
decorators: [{
|
|
470
|
+
type: Component,
|
|
471
|
+
args: [{
|
|
472
|
+
selector: "ngb-textfield",
|
|
473
|
+
imports: [NgbButtonX],
|
|
474
|
+
template: `
|
|
475
|
+
@if (label()) {
|
|
476
|
+
<label class="form-label" [attr.for]="labelFor()">{{ label() }}</label>
|
|
477
|
+
}
|
|
478
|
+
<div
|
|
479
|
+
class="input-group"
|
|
480
|
+
[class.input-group-sm]="size() === 'sm'"
|
|
481
|
+
[class.input-group-lg]="size() === 'lg'"
|
|
482
|
+
>
|
|
483
|
+
<ng-content select="[ngbPrefix]" />
|
|
484
|
+
<ng-content />
|
|
485
|
+
@if (showClear()) {
|
|
486
|
+
<span class="input-group-text ngb-textfield-clear">
|
|
487
|
+
<button ngbButtonX [label]="clearLabel() ?? i18n.clear" (click)="clear()"></button>
|
|
488
|
+
</span>
|
|
489
|
+
}
|
|
490
|
+
<ng-content select="[ngbSuffix]" />
|
|
491
|
+
</div>
|
|
492
|
+
@if (hint()) {
|
|
493
|
+
<div class="form-text" [id]="hintId">{{ hint() }}</div>
|
|
494
|
+
}
|
|
495
|
+
@if (showError()) {
|
|
496
|
+
<div class="invalid-feedback" [id]="errorId">{{ error() }}</div>
|
|
497
|
+
}
|
|
498
|
+
`,
|
|
499
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
500
|
+
providers: [{
|
|
501
|
+
provide: NGB_INPUT_FIELD,
|
|
502
|
+
useExisting: forwardRef(() => NgbTextfield)
|
|
503
|
+
}],
|
|
504
|
+
host: { class: "form-field" }
|
|
505
|
+
}]
|
|
506
|
+
}],
|
|
507
|
+
propDecorators: {
|
|
508
|
+
size: [{
|
|
509
|
+
type: i0.Input,
|
|
510
|
+
args: [{
|
|
511
|
+
isSignal: true,
|
|
512
|
+
alias: "size",
|
|
513
|
+
required: false
|
|
514
|
+
}]
|
|
515
|
+
}],
|
|
516
|
+
clearable: [{
|
|
517
|
+
type: i0.Input,
|
|
518
|
+
args: [{
|
|
519
|
+
isSignal: true,
|
|
520
|
+
alias: "clearable",
|
|
521
|
+
required: false
|
|
522
|
+
}]
|
|
523
|
+
}],
|
|
524
|
+
clearLabel: [{
|
|
525
|
+
type: i0.Input,
|
|
526
|
+
args: [{
|
|
527
|
+
isSignal: true,
|
|
528
|
+
alias: "clearLabel",
|
|
529
|
+
required: false
|
|
530
|
+
}]
|
|
531
|
+
}],
|
|
532
|
+
cleared: [{
|
|
533
|
+
type: i0.Output,
|
|
534
|
+
args: ["cleared"]
|
|
535
|
+
}]
|
|
536
|
+
}
|
|
537
|
+
});
|
|
538
|
+
export { NGB_INPUT_FIELD, NgbField, NgbInput, NgbPrefix, NgbSuffix, NgbTextfield };
|
|
539
|
+
|
|
540
|
+
//# sourceMappingURL=ngb-bootstrap-core-input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngb-bootstrap-core-input.mjs","names":[],"sources":["../../../../projects/core/input/input.ts","../../../../projects/core/input/field.ts","../../../../projects/core/input/textfield.ts"],"sourcesContent":["// API adapted from Taiga UI (Apache-2.0), see NOTICE.\nimport {\n DestroyRef,\n Directive,\n DoCheck,\n ElementRef,\n InjectionToken,\n Signal,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { AbstractControl, NgControl } from '@angular/forms';\nimport { ngbId } from '@ngb-bootstrap/core/cdk';\n\nexport type NgbInputSize = 'sm' | 'md' | 'lg';\n\n/**\n * What a field wrapper (`ngb-textfield`, `ngb-floating-label`) tells the `ngbInput` inside it.\n * Provided under `NGB_INPUT_FIELD`, so the input can read it without a query or an effect.\n */\nexport interface NgbInputField {\n /** Ids of the hint and error elements, for `aria-describedby`. */\n readonly describedBy: Signal<string | null>;\n /** Default `placeholder` of the input. Bootstrap's floating label needs one to detect a value. */\n readonly placeholder?: string;\n}\n\n/** Provided by the field wrappers; the `ngbInput` inside them injects it. */\nexport const NGB_INPUT_FIELD = new InjectionToken<NgbInputField>('NGB_INPUT_FIELD');\n\n/**\n * Native `<input>`, `<textarea>` or `<select>` styled with Bootstrap 6 `.form-control`. It\n * enhances the element instead of wrapping it, so `formControlName`, `formControl` and `ngModel`\n * attach to the native element with Angular's built-in value accessors. No custom\n * `ControlValueAccessor` is needed, as the value is a plain string or number.\n *\n * It adds `is-invalid` and `aria-invalid` once the control is invalid and touched, and a stable\n * `id` for the label. Inside `ngb-textfield` or `ngb-floating-label` it also links hint and error\n * text with `aria-describedby`.\n *\n * ```html\n * <input ngbInput size=\"lg\" placeholder=\"Name\" [formControl]=\"name\" />\n * <textarea ngbInput rows=\"3\" [(ngModel)]=\"bio\"></textarea>\n * ```\n */\n@Directive({\n selector: 'input[ngbInput], textarea[ngbInput], select[ngbInput]',\n exportAs: 'ngbInput',\n host: {\n '[class.form-control]': '!plaintext()',\n '[class.form-control-plaintext]': 'plaintext()',\n '[class.form-control-sm]': 'size() === \"sm\"',\n '[class.form-control-lg]': 'size() === \"lg\"',\n '[class.is-invalid]': 'isInvalid()',\n '[attr.id]': 'id()',\n '[attr.placeholder]': 'placeholderText()',\n '[attr.aria-invalid]': 'isInvalid() ? \"true\" : null',\n '[attr.aria-describedby]': 'describedBy()',\n '(input)': 'sync()',\n '(blur)': 'sync()',\n },\n})\nexport class NgbInput implements DoCheck {\n private readonly element =\n inject<ElementRef<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>>(ElementRef)\n .nativeElement;\n private readonly control = inject(NgControl, { optional: true, self: true });\n private readonly field = inject(NGB_INPUT_FIELD, { optional: true });\n private readonly ownDescribedBy = this.element.getAttribute('aria-describedby');\n private watched: AbstractControl | null = null;\n private subscription?: { unsubscribe(): void };\n\n /** Element id, which the label points at. Defaults to a generated `ngb-input-n`. */\n readonly id = input(ngbId('ngb-input'));\n /** `sm`, `md` (default) or `lg`. */\n readonly size = input<NgbInputSize>('md');\n /** Shows the value as text without a border (`.form-control-plaintext`), for a readonly input. */\n readonly plaintext = input(false, { transform: booleanAttribute });\n /**\n * Forces the invalid state on or off, for errors the form does not know about, such as a server\n * response. By default the input is invalid when its control is invalid and touched.\n */\n readonly invalid = input<boolean | undefined>(undefined);\n /** Placeholder. Inside `ngb-floating-label` it defaults to a space, which the CSS needs. */\n readonly placeholder = input<string>();\n\n private readonly touchedInvalid = signal(false);\n private readonly valueState = signal(false);\n private readonly disabledState = signal(false);\n private readonly readonlyState = signal(false);\n\n /** `true` while the field shows its invalid state. */\n readonly isInvalid = computed(() => this.invalid() ?? this.touchedInvalid());\n /** `true` when the input is not empty. */\n readonly hasValue = this.valueState.asReadonly();\n /** `true` when the input or its control is disabled. */\n readonly disabled = this.disabledState.asReadonly();\n /** `true` when the input is read-only. */\n readonly readonly = this.readonlyState.asReadonly();\n\n protected readonly placeholderText = computed(() =>\n this.element.tagName === 'SELECT'\n ? null\n : (this.placeholder() ?? this.field?.placeholder ?? null),\n );\n protected readonly describedBy = computed(() => {\n const ids = [this.ownDescribedBy, this.field?.describedBy()].filter(Boolean).join(' ');\n return ids || null;\n });\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.subscription?.unsubscribe());\n }\n\n ngDoCheck(): void {\n this.sync();\n }\n\n /** Re-reads the control and element state. Runs on every change detection pass and on events. */\n protected sync(): void {\n const control = this.control?.control ?? null;\n if (control !== this.watched) {\n this.subscription?.unsubscribe();\n this.watched = control;\n this.subscription = control?.events.subscribe(() => this.sync());\n }\n const value = this.control ? this.control.value : this.element.value;\n this.touchedInvalid.set(!!this.control?.invalid && !!this.control.touched);\n this.valueState.set(value != null && value !== '');\n this.disabledState.set(this.control ? !!this.control.disabled : this.element.disabled);\n this.readonlyState.set('readOnly' in this.element && this.element.readOnly);\n }\n\n /** Empties the input like the user would, so any bound control or `(input)` handler sees it. */\n clear(): void {\n this.element.value = '';\n this.element.dispatchEvent(new Event('input', { bubbles: true }));\n this.focus();\n }\n\n /** Focuses the native element. */\n focus(): void {\n this.element.focus();\n }\n}\n","// API adapted from Taiga UI (Apache-2.0), see NOTICE.\nimport { Directive, computed, contentChild, input } from '@angular/core';\nimport { ngbId } from '@ngb-bootstrap/core/cdk';\nimport { NgbInput } from './input';\n\n/**\n * Shared by `ngb-textfield` and `ngb-floating-label`: finds the `ngbInput` inside, and owns the\n * label, hint and error text and their ids.\n */\n@Directive()\nexport abstract class NgbField {\n protected readonly control = contentChild(NgbInput);\n\n /** Label text. It is a `<label>` tied to the input with `for`. */\n readonly label = input<string>();\n /** Help text under the field. It describes the input through `aria-describedby`. */\n readonly hint = input<string>();\n /** Error text, shown while the input is invalid (its control is invalid and touched). */\n readonly error = input<string>();\n\n protected readonly hintId = ngbId('ngb-hint');\n protected readonly errorId = ngbId('ngb-error');\n\n protected readonly labelFor = computed(() => this.control()?.id() ?? null);\n protected readonly showError = computed(() => !!this.error() && !!this.control()?.isInvalid());\n /** Ids for the input's `aria-describedby`: the hint, then the error. */\n readonly describedBy = computed(() => {\n const ids = [this.hint() ? this.hintId : '', this.showError() ? this.errorId : ''];\n return ids.filter(Boolean).join(' ') || null;\n });\n}\n","// API adapted from Taiga UI (Apache-2.0), see NOTICE.\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { NGB_I18N } from '@ngb-bootstrap/core';\nimport { NgbButtonX } from '@ngb-bootstrap/core/button';\nimport { NgbField } from './field';\nimport { NGB_INPUT_FIELD, NgbInputSize } from './input';\n\n/**\n * Content before the input of an `ngb-textfield`: an icon, text or a button. Text and icons get\n * `.input-group-text`; a `<button>` or `<a>` keeps its own `.btn` styling.\n *\n * ```html\n * <span ngbPrefix>$</span>\n * ```\n */\n@Directive({\n selector: '[ngbPrefix]',\n host: {\n '[class.input-group-text]': '!interactive',\n },\n})\nexport class NgbPrefix {\n protected readonly interactive = ['BUTTON', 'A'].includes(\n inject<ElementRef<HTMLElement>>(ElementRef).nativeElement.tagName,\n );\n}\n\n/**\n * Content after the input of an `ngb-textfield`, with the same rules as `ngbPrefix`.\n *\n * ```html\n * <button ngbButton ngbSuffix variant=\"outline\">Search</button>\n * ```\n */\n@Directive({\n selector: '[ngbSuffix]',\n host: {\n '[class.input-group-text]': '!interactive',\n },\n})\nexport class NgbSuffix {\n protected readonly interactive = ['BUTTON', 'A'].includes(\n inject<ElementRef<HTMLElement>>(ElementRef).nativeElement.tagName,\n );\n}\n\n/**\n * Text field in the Taiga UI Textfield style: a label, a native `ngbInput` or textarea, optional\n * prefix and suffix content, a clear button, and hint and error text. Built on Bootstrap 6\n * `.form-field`, `.form-label`, `.input-group`, `.form-text` and `.invalid-feedback`.\n *\n * ```html\n * <ngb-textfield label=\"Email\" hint=\"We never share it.\" error=\"Enter a valid email.\" clearable>\n * <ngb-icon ngbPrefix [icon]=\"mail\" />\n * <input ngbInput type=\"email\" formControlName=\"email\" />\n * </ngb-textfield>\n * ```\n */\n@Component({\n selector: 'ngb-textfield',\n imports: [NgbButtonX],\n template: `\n @if (label()) {\n <label class=\"form-label\" [attr.for]=\"labelFor()\">{{ label() }}</label>\n }\n <div\n class=\"input-group\"\n [class.input-group-sm]=\"size() === 'sm'\"\n [class.input-group-lg]=\"size() === 'lg'\"\n >\n <ng-content select=\"[ngbPrefix]\" />\n <ng-content />\n @if (showClear()) {\n <span class=\"input-group-text ngb-textfield-clear\">\n <button ngbButtonX [label]=\"clearLabel() ?? i18n.clear\" (click)=\"clear()\"></button>\n </span>\n }\n <ng-content select=\"[ngbSuffix]\" />\n </div>\n @if (hint()) {\n <div class=\"form-text\" [id]=\"hintId\">{{ hint() }}</div>\n }\n @if (showError()) {\n <div class=\"invalid-feedback\" [id]=\"errorId\">{{ error() }}</div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NGB_INPUT_FIELD, useExisting: forwardRef(() => NgbTextfield) }],\n host: {\n class: 'form-field',\n },\n})\nexport class NgbTextfield extends NgbField {\n protected readonly i18n = inject(NGB_I18N);\n\n /** `sm`, `md` (default) or `lg`. Sizes the whole group: input, prefix, suffix and buttons. */\n readonly size = input<NgbInputSize>('md');\n /** Shows a clear button while the input has a value and is neither disabled nor read-only. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Accessible name of the clear button. Defaults to the `clear` string of `NGB_I18N`. */\n readonly clearLabel = input<string>();\n /** Emits after the clear button emptied the input. */\n readonly cleared = output<void>();\n\n protected readonly showClear = computed(() => {\n const control = this.control();\n return (\n this.clearable() &&\n !!control &&\n control.hasValue() &&\n !control.disabled() &&\n !control.readonly()\n );\n });\n\n protected clear(): void {\n this.control()?.clear();\n this.cleared.emit();\n }\n}\n"],"mappings":"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"}
|