ng-primitives 0.120.4 → 0.121.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/example-theme/index.css +9 -0
- package/fesm2022/ng-primitives-a11y.mjs +5 -5
- package/fesm2022/ng-primitives-a11y.mjs.map +1 -1
- package/fesm2022/ng-primitives-accordion.mjs +34 -51
- package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/ng-primitives-ai.mjs +39 -52
- package/fesm2022/ng-primitives-ai.mjs.map +1 -1
- package/fesm2022/ng-primitives-autofill.mjs +4 -4
- package/fesm2022/ng-primitives-autofill.mjs.map +1 -1
- package/fesm2022/ng-primitives-avatar.mjs +14 -17
- package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/ng-primitives-breadcrumbs.mjs +21 -21
- package/fesm2022/ng-primitives-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ng-primitives-button.mjs +7 -9
- package/fesm2022/ng-primitives-button.mjs.map +1 -1
- package/fesm2022/ng-primitives-checkbox.mjs +15 -30
- package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-combobox.mjs +60 -92
- package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
- package/fesm2022/ng-primitives-common.mjs +4 -4
- package/fesm2022/ng-primitives-common.mjs.map +1 -1
- package/fesm2022/ng-primitives-context-menu.mjs +68 -121
- package/fesm2022/ng-primitives-context-menu.mjs.map +1 -1
- package/fesm2022/ng-primitives-date-picker.mjs +91 -115
- package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
- package/fesm2022/ng-primitives-dialog.mjs +35 -51
- package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/ng-primitives-file-upload.mjs +26 -53
- package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
- package/fesm2022/ng-primitives-focus-trap.mjs +5 -8
- package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
- package/fesm2022/ng-primitives-form-field.mjs +39 -44
- package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
- package/fesm2022/ng-primitives-input-otp.mjs +30 -43
- package/fesm2022/ng-primitives-input-otp.mjs.map +1 -1
- package/fesm2022/ng-primitives-input.mjs +6 -8
- package/fesm2022/ng-primitives-input.mjs.map +1 -1
- package/fesm2022/ng-primitives-interactions.mjs +31 -48
- package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
- package/fesm2022/ng-primitives-internal.mjs +39 -35
- package/fesm2022/ng-primitives-internal.mjs.map +1 -1
- package/fesm2022/ng-primitives-listbox.mjs +34 -48
- package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-menu.mjs +85 -151
- package/fesm2022/ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/ng-primitives-meter.mjs +25 -36
- package/fesm2022/ng-primitives-meter.mjs.map +1 -1
- package/fesm2022/ng-primitives-navigation-menu.mjs +60 -108
- package/fesm2022/ng-primitives-navigation-menu.mjs.map +1 -1
- package/fesm2022/ng-primitives-number-field.mjs +35 -59
- package/fesm2022/ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/ng-primitives-pagination.mjs +270 -297
- package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
- package/fesm2022/ng-primitives-popover.mjs +209 -223
- package/fesm2022/ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/ng-primitives-portal.mjs +88 -59
- package/fesm2022/ng-primitives-portal.mjs.map +1 -1
- package/fesm2022/ng-primitives-progress.mjs +30 -41
- package/fesm2022/ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/ng-primitives-radio.mjs +20 -30
- package/fesm2022/ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/ng-primitives-resize.mjs +3 -3
- package/fesm2022/ng-primitives-resize.mjs.map +1 -1
- package/fesm2022/ng-primitives-roving-focus.mjs +20 -34
- package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/ng-primitives-search.mjs +9 -9
- package/fesm2022/ng-primitives-search.mjs.map +1 -1
- package/fesm2022/ng-primitives-select.mjs +720 -620
- package/fesm2022/ng-primitives-select.mjs.map +1 -1
- package/fesm2022/ng-primitives-separator.mjs +4 -6
- package/fesm2022/ng-primitives-separator.mjs.map +1 -1
- package/fesm2022/ng-primitives-slider.mjs +63 -100
- package/fesm2022/ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/ng-primitives-state.mjs +3 -3
- package/fesm2022/ng-primitives-state.mjs.map +1 -1
- package/fesm2022/ng-primitives-switch.mjs +15 -21
- package/fesm2022/ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/ng-primitives-tabs.mjs +31 -41
- package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/ng-primitives-textarea.mjs +5 -7
- package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
- package/fesm2022/ng-primitives-toast.mjs +30 -23
- package/fesm2022/ng-primitives-toast.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle-group.mjs +20 -36
- package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle.mjs +10 -19
- package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/ng-primitives-toolbar.mjs +4 -6
- package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
- package/fesm2022/ng-primitives-tooltip.mjs +401 -402
- package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
- package/fesm2022/ng-primitives-utils.mjs +5 -4
- package/fesm2022/ng-primitives-utils.mjs.map +1 -1
- package/package.json +56 -55
- package/schematics/ng-generate/templates/select/select.__fileSuffix@dasherize__.ts.template +48 -48
- package/{a11y/index.d.ts → types/ng-primitives-a11y.d.ts} +18 -24
- package/{accordion/index.d.ts → types/ng-primitives-accordion.d.ts} +85 -98
- package/{autofill/index.d.ts → types/ng-primitives-autofill.d.ts} +3 -10
- package/{avatar/index.d.ts → types/ng-primitives-avatar.d.ts} +7 -30
- package/{breadcrumbs/index.d.ts → types/ng-primitives-breadcrumbs.d.ts} +15 -70
- package/{button/index.d.ts → types/ng-primitives-button.d.ts} +23 -29
- package/{checkbox/index.d.ts → types/ng-primitives-checkbox.d.ts} +68 -74
- package/{combobox/index.d.ts → types/ng-primitives-combobox.d.ts} +35 -35
- package/{context-menu/index.d.ts → types/ng-primitives-context-menu.d.ts} +2 -1
- package/{date-picker/index.d.ts → types/ng-primitives-date-picker.d.ts} +2 -2
- package/{dialog/index.d.ts → types/ng-primitives-dialog.d.ts} +7 -2
- package/{file-upload/index.d.ts → types/ng-primitives-file-upload.d.ts} +5 -20
- package/{focus-trap/index.d.ts → types/ng-primitives-focus-trap.d.ts} +3 -10
- package/{form-field/index.d.ts → types/ng-primitives-form-field.d.ts} +9 -40
- package/{input/index.d.ts → types/ng-primitives-input.d.ts} +3 -10
- package/{menu/index.d.ts → types/ng-primitives-menu.d.ts} +17 -63
- package/{navigation-menu/index.d.ts → types/ng-primitives-navigation-menu.d.ts} +15 -70
- package/{number-field/index.d.ts → types/ng-primitives-number-field.d.ts} +80 -110
- package/types/ng-primitives-pagination.d.ts +502 -0
- package/{popover/index.d.ts → types/ng-primitives-popover.d.ts} +244 -57
- package/{portal/index.d.ts → types/ng-primitives-portal.d.ts} +22 -13
- package/{progress/index.d.ts → types/ng-primitives-progress.d.ts} +3 -10
- package/{roving-focus/index.d.ts → types/ng-primitives-roving-focus.d.ts} +65 -79
- package/types/ng-primitives-select.d.ts +687 -0
- package/{separator/index.d.ts → types/ng-primitives-separator.d.ts} +3 -10
- package/{slider/index.d.ts → types/ng-primitives-slider.d.ts} +76 -138
- package/{state/index.d.ts → types/ng-primitives-state.d.ts} +26 -21
- package/{switch/index.d.ts → types/ng-primitives-switch.d.ts} +50 -64
- package/{tabs/index.d.ts → types/ng-primitives-tabs.d.ts} +9 -40
- package/{textarea/index.d.ts → types/ng-primitives-textarea.d.ts} +3 -10
- package/{toast/index.d.ts → types/ng-primitives-toast.d.ts} +13 -1
- package/{toggle-group/index.d.ts → types/ng-primitives-toggle-group.d.ts} +75 -89
- package/{toggle/index.d.ts → types/ng-primitives-toggle.d.ts} +50 -56
- package/{toolbar/index.d.ts → types/ng-primitives-toolbar.d.ts} +3 -10
- package/types/ng-primitives-tooltip.d.ts +691 -0
- package/pagination/index.d.ts +0 -211
- package/select/index.d.ts +0 -396
- package/tooltip/index.d.ts +0 -384
- /package/{ai/index.d.ts → types/ng-primitives-ai.d.ts} +0 -0
- /package/{common/index.d.ts → types/ng-primitives-common.d.ts} +0 -0
- /package/{date-time-luxon/index.d.ts → types/ng-primitives-date-time-luxon.d.ts} +0 -0
- /package/{date-time/index.d.ts → types/ng-primitives-date-time.d.ts} +0 -0
- /package/{input-otp/index.d.ts → types/ng-primitives-input-otp.d.ts} +0 -0
- /package/{interactions/index.d.ts → types/ng-primitives-interactions.d.ts} +0 -0
- /package/{internal/index.d.ts → types/ng-primitives-internal.d.ts} +0 -0
- /package/{listbox/index.d.ts → types/ng-primitives-listbox.d.ts} +0 -0
- /package/{meter/index.d.ts → types/ng-primitives-meter.d.ts} +0 -0
- /package/{radio/index.d.ts → types/ng-primitives-radio.d.ts} +0 -0
- /package/{resize/index.d.ts → types/ng-primitives-resize.d.ts} +0 -0
- /package/{search/index.d.ts → types/ng-primitives-search.d.ts} +0 -0
- /package/{utils/index.d.ts → types/ng-primitives-utils.d.ts} +0 -0
- /package/{index.d.ts → types/ng-primitives.d.ts} +0 -0
|
@@ -19,14 +19,14 @@ const [NgpNumberFieldStateToken, ngpNumberField, injectNumberFieldState, provide
|
|
|
19
19
|
if (value() === null)
|
|
20
20
|
return true;
|
|
21
21
|
return value() < max();
|
|
22
|
-
}, ...(ngDevMode ? [{ debugName: "canIncrement" }] : []));
|
|
22
|
+
}, ...(ngDevMode ? [{ debugName: "canIncrement" }] : /* istanbul ignore next */ []));
|
|
23
23
|
const canDecrement = computed(() => {
|
|
24
24
|
if (disabled() || readonly())
|
|
25
25
|
return false;
|
|
26
26
|
if (value() === null)
|
|
27
27
|
return true;
|
|
28
28
|
return value() > min();
|
|
29
|
-
}, ...(ngDevMode ? [{ debugName: "canDecrement" }] : []));
|
|
29
|
+
}, ...(ngDevMode ? [{ debugName: "canDecrement" }] : /* istanbul ignore next */ []));
|
|
30
30
|
// Host bindings
|
|
31
31
|
attrBinding(element, 'role', () => 'group');
|
|
32
32
|
dataBinding(element, 'data-disabled', disabled);
|
|
@@ -169,15 +169,12 @@ class NgpNumberField {
|
|
|
169
169
|
/**
|
|
170
170
|
* The id of the number field. If not provided, a unique id will be generated.
|
|
171
171
|
*/
|
|
172
|
-
this.id = input(uniqueId('ngp-number-field'), ...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
172
|
+
this.id = input(uniqueId('ngp-number-field'), ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
173
173
|
/**
|
|
174
174
|
* The value of the number field.
|
|
175
175
|
*/
|
|
176
|
-
this.value = input(null, ...(ngDevMode ?
|
|
177
|
-
|
|
178
|
-
alias: 'ngpNumberFieldValue',
|
|
179
|
-
transform: (v) => v === null || v === undefined || v === '' ? null : numberAttribute(v),
|
|
180
|
-
}]));
|
|
176
|
+
this.value = input(null, { ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), alias: 'ngpNumberFieldValue',
|
|
177
|
+
transform: (v) => v === null || v === undefined || v === '' ? null : numberAttribute(v) });
|
|
181
178
|
/**
|
|
182
179
|
* Emits when the value changes.
|
|
183
180
|
*/
|
|
@@ -187,51 +184,33 @@ class NgpNumberField {
|
|
|
187
184
|
/**
|
|
188
185
|
* The minimum value.
|
|
189
186
|
*/
|
|
190
|
-
this.min = input(-Infinity, ...(ngDevMode ?
|
|
191
|
-
|
|
192
|
-
alias: 'ngpNumberFieldMin',
|
|
193
|
-
transform: numberAttribute,
|
|
194
|
-
}]));
|
|
187
|
+
this.min = input(-Infinity, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), alias: 'ngpNumberFieldMin',
|
|
188
|
+
transform: numberAttribute });
|
|
195
189
|
/**
|
|
196
190
|
* The maximum value.
|
|
197
191
|
*/
|
|
198
|
-
this.max = input(Infinity, ...(ngDevMode ?
|
|
199
|
-
|
|
200
|
-
alias: 'ngpNumberFieldMax',
|
|
201
|
-
transform: numberAttribute,
|
|
202
|
-
}]));
|
|
192
|
+
this.max = input(Infinity, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), alias: 'ngpNumberFieldMax',
|
|
193
|
+
transform: numberAttribute });
|
|
203
194
|
/**
|
|
204
195
|
* The step value.
|
|
205
196
|
*/
|
|
206
|
-
this.step = input(1, ...(ngDevMode ?
|
|
207
|
-
|
|
208
|
-
alias: 'ngpNumberFieldStep',
|
|
209
|
-
transform: numberAttribute,
|
|
210
|
-
}]));
|
|
197
|
+
this.step = input(1, { ...(ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {}), alias: 'ngpNumberFieldStep',
|
|
198
|
+
transform: numberAttribute });
|
|
211
199
|
/**
|
|
212
200
|
* The large step value (used with Shift key).
|
|
213
201
|
*/
|
|
214
|
-
this.largeStep = input(10, ...(ngDevMode ?
|
|
215
|
-
|
|
216
|
-
alias: 'ngpNumberFieldLargeStep',
|
|
217
|
-
transform: numberAttribute,
|
|
218
|
-
}]));
|
|
202
|
+
this.largeStep = input(10, { ...(ngDevMode ? { debugName: "largeStep" } : /* istanbul ignore next */ {}), alias: 'ngpNumberFieldLargeStep',
|
|
203
|
+
transform: numberAttribute });
|
|
219
204
|
/**
|
|
220
205
|
* The disabled state of the number field.
|
|
221
206
|
*/
|
|
222
|
-
this.disabled = input(false, ...(ngDevMode ?
|
|
223
|
-
|
|
224
|
-
alias: 'ngpNumberFieldDisabled',
|
|
225
|
-
transform: booleanAttribute,
|
|
226
|
-
}]));
|
|
207
|
+
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), alias: 'ngpNumberFieldDisabled',
|
|
208
|
+
transform: booleanAttribute });
|
|
227
209
|
/**
|
|
228
210
|
* The readonly state of the number field.
|
|
229
211
|
*/
|
|
230
|
-
this.readonly = input(false, ...(ngDevMode ?
|
|
231
|
-
|
|
232
|
-
alias: 'ngpNumberFieldReadonly',
|
|
233
|
-
transform: booleanAttribute,
|
|
234
|
-
}]));
|
|
212
|
+
this.readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), alias: 'ngpNumberFieldReadonly',
|
|
213
|
+
transform: booleanAttribute });
|
|
235
214
|
/**
|
|
236
215
|
* @internal
|
|
237
216
|
*/
|
|
@@ -277,10 +256,10 @@ class NgpNumberField {
|
|
|
277
256
|
setReadonly(readonly) {
|
|
278
257
|
this.state.setReadonly(readonly);
|
|
279
258
|
}
|
|
280
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
281
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
259
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpNumberField, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
260
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpNumberField, isStandalone: true, selector: "[ngpNumberField]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "ngpNumberFieldValue", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "ngpNumberFieldMin", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "ngpNumberFieldMax", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "ngpNumberFieldStep", isSignal: true, isRequired: false, transformFunction: null }, largeStep: { classPropertyName: "largeStep", publicName: "ngpNumberFieldLargeStep", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpNumberFieldDisabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "ngpNumberFieldReadonly", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "ngpNumberFieldValueChange" }, providers: [provideNumberFieldState()], exportAs: ["ngpNumberField"], ngImport: i0 }); }
|
|
282
261
|
}
|
|
283
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpNumberField, decorators: [{
|
|
284
263
|
type: Directive,
|
|
285
264
|
args: [{
|
|
286
265
|
selector: '[ngpNumberField]',
|
|
@@ -295,7 +274,7 @@ const [NgpNumberFieldInputStateToken, ngpNumberFieldInput, injectNumberFieldInpu
|
|
|
295
274
|
const document = inject(DOCUMENT);
|
|
296
275
|
// Form control integration — sets id, aria-labelledby, aria-describedby on the input
|
|
297
276
|
ngpFormControl({ id: numberField().id, disabled: numberField().disabled });
|
|
298
|
-
const tabindex = computed(() => (numberField().disabled() ? -1 : 0), ...(ngDevMode ? [{ debugName: "tabindex" }] : []));
|
|
277
|
+
const tabindex = computed(() => (numberField().disabled() ? -1 : 0), ...(ngDevMode ? [{ debugName: "tabindex" }] : /* istanbul ignore next */ []));
|
|
299
278
|
// Host bindings
|
|
300
279
|
const inputMode = computed(() => {
|
|
301
280
|
const minVal = numberField().min();
|
|
@@ -310,7 +289,7 @@ const [NgpNumberFieldInputStateToken, ngpNumberFieldInput, injectNumberFieldInpu
|
|
|
310
289
|
if (!allowsNegative)
|
|
311
290
|
return 'numeric';
|
|
312
291
|
return 'text';
|
|
313
|
-
}, ...(ngDevMode ? [{ debugName: "inputMode" }] : []));
|
|
292
|
+
}, ...(ngDevMode ? [{ debugName: "inputMode" }] : /* istanbul ignore next */ []));
|
|
314
293
|
attrBinding(elementRef, 'role', 'spinbutton');
|
|
315
294
|
attrBinding(elementRef, 'type', 'text');
|
|
316
295
|
attrBinding(elementRef, 'inputmode', inputMode);
|
|
@@ -477,19 +456,16 @@ class NgpNumberFieldInput {
|
|
|
477
456
|
/**
|
|
478
457
|
* Whether mouse wheel changes the value when the input is focused.
|
|
479
458
|
*/
|
|
480
|
-
this.allowWheelScrub = input(false, ...(ngDevMode ?
|
|
481
|
-
|
|
482
|
-
alias: 'ngpNumberFieldInputAllowWheelScrub',
|
|
483
|
-
transform: booleanAttribute,
|
|
484
|
-
}]));
|
|
459
|
+
this.allowWheelScrub = input(false, { ...(ngDevMode ? { debugName: "allowWheelScrub" } : /* istanbul ignore next */ {}), alias: 'ngpNumberFieldInputAllowWheelScrub',
|
|
460
|
+
transform: booleanAttribute });
|
|
485
461
|
ngpNumberFieldInput({
|
|
486
462
|
allowWheelScrub: this.allowWheelScrub,
|
|
487
463
|
});
|
|
488
464
|
}
|
|
489
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
490
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
465
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpNumberFieldInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
466
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: NgpNumberFieldInput, isStandalone: true, selector: "[ngpNumberFieldInput]", inputs: { allowWheelScrub: { classPropertyName: "allowWheelScrub", publicName: "ngpNumberFieldInputAllowWheelScrub", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideNumberFieldInputState()], exportAs: ["ngpNumberFieldInput"], ngImport: i0 }); }
|
|
491
467
|
}
|
|
492
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
468
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpNumberFieldInput, decorators: [{
|
|
493
469
|
type: Directive,
|
|
494
470
|
args: [{
|
|
495
471
|
selector: '[ngpNumberFieldInput]',
|
|
@@ -503,7 +479,7 @@ const [NgpNumberFieldIncrementStateToken, ngpNumberFieldIncrement, injectNumberF
|
|
|
503
479
|
const numberField = injectNumberFieldState();
|
|
504
480
|
const injector = inject(Injector);
|
|
505
481
|
const disposables = injectDisposables();
|
|
506
|
-
const isDisabled = computed(() => !numberField().canIncrement(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
|
|
482
|
+
const isDisabled = computed(() => !numberField().canIncrement(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
507
483
|
// Host bindings
|
|
508
484
|
attrBinding(elementRef, 'type', 'button');
|
|
509
485
|
attrBinding(elementRef, 'tabindex', '-1');
|
|
@@ -563,10 +539,10 @@ class NgpNumberFieldIncrement {
|
|
|
563
539
|
constructor() {
|
|
564
540
|
ngpNumberFieldIncrement({});
|
|
565
541
|
}
|
|
566
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
567
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
542
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpNumberFieldIncrement, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
543
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpNumberFieldIncrement, isStandalone: true, selector: "[ngpNumberFieldIncrement]", providers: [provideNumberFieldIncrementState()], exportAs: ["ngpNumberFieldIncrement"], ngImport: i0 }); }
|
|
568
544
|
}
|
|
569
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
545
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpNumberFieldIncrement, decorators: [{
|
|
570
546
|
type: Directive,
|
|
571
547
|
args: [{
|
|
572
548
|
selector: '[ngpNumberFieldIncrement]',
|
|
@@ -580,7 +556,7 @@ const [NgpNumberFieldDecrementStateToken, ngpNumberFieldDecrement, injectNumberF
|
|
|
580
556
|
const numberField = injectNumberFieldState();
|
|
581
557
|
const injector = inject(Injector);
|
|
582
558
|
const disposables = injectDisposables();
|
|
583
|
-
const isDisabled = computed(() => !numberField().canDecrement(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
|
|
559
|
+
const isDisabled = computed(() => !numberField().canDecrement(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
584
560
|
// Host bindings
|
|
585
561
|
attrBinding(elementRef, 'type', 'button');
|
|
586
562
|
attrBinding(elementRef, 'tabindex', '-1');
|
|
@@ -640,10 +616,10 @@ class NgpNumberFieldDecrement {
|
|
|
640
616
|
constructor() {
|
|
641
617
|
ngpNumberFieldDecrement({});
|
|
642
618
|
}
|
|
643
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
644
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
619
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpNumberFieldDecrement, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
620
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: NgpNumberFieldDecrement, isStandalone: true, selector: "[ngpNumberFieldDecrement]", providers: [provideNumberFieldDecrementState()], exportAs: ["ngpNumberFieldDecrement"], ngImport: i0 }); }
|
|
645
621
|
}
|
|
646
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
622
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: NgpNumberFieldDecrement, decorators: [{
|
|
647
623
|
type: Directive,
|
|
648
624
|
args: [{
|
|
649
625
|
selector: '[ngpNumberFieldDecrement]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-number-field.mjs","sources":["../../../../packages/ng-primitives/number-field/src/number-field/number-field-state.ts","../../../../packages/ng-primitives/number-field/src/number-field/number-field.ts","../../../../packages/ng-primitives/number-field/src/number-field-input/number-field-input-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-input/number-field-input.ts","../../../../packages/ng-primitives/number-field/src/number-field-increment/number-field-increment-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-increment/number-field-increment.ts","../../../../packages/ng-primitives/number-field/src/number-field-decrement/number-field-decrement-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-decrement/number-field-decrement.ts","../../../../packages/ng-primitives/number-field/src/ng-primitives-number-field.ts"],"sourcesContent":["import { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the NumberField primitive.\n */\nexport interface NgpNumberFieldState {\n /**\n * The id of the number field.\n */\n readonly id: Signal<string>;\n /**\n * The current value.\n */\n readonly value: WritableSignal<number | null>;\n /**\n * The minimum value.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max: Signal<number>;\n /**\n * The step value.\n */\n readonly step: Signal<number>;\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep: Signal<number>;\n /**\n * Whether the number field is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * Whether the number field is readonly.\n */\n readonly readonly: WritableSignal<boolean>;\n /**\n * Whether the increment button should be disabled.\n */\n readonly canIncrement: Signal<boolean>;\n /**\n * Whether the decrement button should be disabled.\n */\n readonly canDecrement: Signal<boolean>;\n /**\n * Emit when the value changes.\n */\n readonly valueChange: Observable<number | null>;\n /**\n * Set the current value (clamped and stepped).\n */\n setValue(value: number | null): void;\n /**\n * Increment the value by one step.\n */\n increment(multiplier?: number): void;\n /**\n * Decrement the value by one step.\n */\n decrement(multiplier?: number): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the readonly state.\n */\n setReadonly(readonly: boolean): void;\n /** @internal */\n registerInputCommit(commitFn: () => void): void;\n}\n\n/**\n * Inputs for configuring the NumberField primitive.\n */\nexport interface NgpNumberFieldProps {\n /**\n * The id of the number field.\n */\n readonly id?: Signal<string>;\n /**\n * The current value.\n */\n readonly value?: Signal<number | null>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep?: Signal<number>;\n /**\n * Whether the number field is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Whether the number field is readonly.\n */\n readonly readonly?: Signal<boolean>;\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: number | null) => void;\n}\n\nexport const [\n NgpNumberFieldStateToken,\n ngpNumberField,\n injectNumberFieldState,\n provideNumberFieldState,\n] = createPrimitive(\n 'NgpNumberField',\n ({\n id = signal(uniqueId('ngp-number-field')),\n value: _value = signal<number | null>(null),\n min = signal(-Infinity),\n max = signal(Infinity),\n step = signal(1),\n largeStep: _largeStep = signal(10),\n disabled: _disabled = signal(false),\n readonly: _readonly = signal(false),\n onValueChange,\n }: NgpNumberFieldProps): NgpNumberFieldState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const disabled = controlled(_disabled);\n const readonly = controlled(_readonly);\n\n const valueChange = emitter<number | null>();\n\n const canIncrement = computed(() => {\n if (disabled() || readonly()) return false;\n if (value() === null) return true;\n return value()! < max();\n });\n\n const canDecrement = computed(() => {\n if (disabled() || readonly()) return false;\n if (value() === null) return true;\n return value()! > min();\n });\n\n // Host bindings\n attrBinding(element, 'role', () => 'group');\n dataBinding(element, 'data-disabled', disabled);\n dataBinding(element, 'data-readonly', readonly);\n\n /**\n * Count the number of decimal places in a number.\n */\n function getDecimalPlaces(n: number): number {\n const str = String(n);\n const dotIndex = str.indexOf('.');\n return dotIndex === -1 ? 0 : str.length - dotIndex - 1;\n }\n\n /**\n * Round a number to a specific number of decimal places to avoid\n * floating point precision issues (e.g. 0.1 + 0.2 = 0.30000000000000004).\n */\n function roundToPrecision(val: number, precision: number): number {\n if (precision === 0) return Math.round(val);\n return parseFloat(val.toFixed(precision));\n }\n\n function clampAndStep(val: number): number {\n const clamped = Math.min(max(), Math.max(min(), val));\n // Round to nearest step\n if (isFinite(step()) && step() > 0) {\n const base = isFinite(min()) ? min() : 0;\n const precision = Math.max(getDecimalPlaces(step()), getDecimalPlaces(base));\n const stepped = roundToPrecision(\n Math.round((clamped - base) / step()) * step() + base,\n precision,\n );\n return Math.min(max(), Math.max(min(), stepped));\n }\n return clamped;\n }\n\n let suppressEmit = false;\n\n function setValue(newValue: number | null): void {\n if (disabled() || readonly()) return;\n if (newValue !== null && isNaN(newValue)) return;\n const finalValue = newValue !== null ? clampAndStep(newValue) : null;\n // Skip emit when value is unchanged\n if (finalValue === value()) return;\n value.set(finalValue);\n if (!suppressEmit) {\n onValueChange?.(finalValue);\n valueChange.emit(finalValue);\n }\n }\n\n let inputCommitFn: (() => void) | null = null;\n\n function registerInputCommit(commitFn: () => void): void {\n inputCommitFn = commitFn;\n }\n\n /**\n * Commit any pending input value without emitting change events.\n * This ensures increment/decrement operates on the displayed value\n * while only emitting the final stepped result.\n */\n function commitPendingInputSilently(): void {\n if (!inputCommitFn) return;\n suppressEmit = true;\n try {\n inputCommitFn();\n } finally {\n suppressEmit = false;\n }\n }\n\n function getStepPrecision(): number {\n const base = isFinite(min()) ? min() : 0;\n return Math.max(getDecimalPlaces(step()), getDecimalPlaces(base));\n }\n\n function increment(multiplier: number = 1): void {\n if (!canIncrement()) return;\n const valueBefore = value();\n commitPendingInputSilently();\n const valueAfterCommit = value();\n const current = valueAfterCommit ?? (isFinite(min()) ? min() : 0);\n const precision = getStepPrecision();\n setValue(roundToPrecision(current + step() * multiplier, precision));\n // If the silent commit changed the value but setValue was a no-op\n // (stepped result clamped back to the committed value), emit the change\n // so the parent learns about the new value.\n if (valueBefore !== value() && valueAfterCommit === value()) {\n onValueChange?.(value());\n valueChange.emit(value());\n }\n }\n\n function decrement(multiplier: number = 1): void {\n if (!canDecrement()) return;\n const valueBefore = value();\n commitPendingInputSilently();\n const valueAfterCommit = value();\n const current = valueAfterCommit ?? (isFinite(max()) ? max() : 0);\n const precision = getStepPrecision();\n setValue(roundToPrecision(current - step() * multiplier, precision));\n // If the silent commit changed the value but setValue was a no-op\n // (stepped result clamped back to the committed value), emit the change\n // so the parent learns about the new value.\n if (valueBefore !== value() && valueAfterCommit === value()) {\n onValueChange?.(value());\n valueChange.emit(value());\n }\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n }\n\n function setReadonly(isReadonly: boolean): void {\n readonly.set(isReadonly);\n }\n\n return {\n id,\n value,\n min,\n max,\n step,\n largeStep: _largeStep,\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n readonly: deprecatedSetter(readonly, 'setReadonly'),\n canIncrement,\n canDecrement,\n valueChange: valueChange.asObservable(),\n setValue,\n increment,\n decrement,\n setDisabled,\n setReadonly,\n registerInputCommit,\n } satisfies NgpNumberFieldState;\n },\n);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, numberAttribute, output } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpNumberField, provideNumberFieldState } from './number-field-state';\n\n/**\n * Apply the `ngpNumberField` directive to an element that represents the number field\n * and contains the input, increment, and decrement buttons.\n */\n@Directive({\n selector: '[ngpNumberField]',\n exportAs: 'ngpNumberField',\n providers: [provideNumberFieldState()],\n})\nexport class NgpNumberField {\n /**\n * The id of the number field. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-number-field'));\n\n /**\n * The value of the number field.\n */\n readonly value = input<number | null, NumberInput>(null, {\n alias: 'ngpNumberFieldValue',\n transform: (v: NumberInput) =>\n v === null || v === undefined || v === '' ? null : numberAttribute(v),\n });\n\n /**\n * Emits when the value changes.\n */\n readonly valueChange = output<number | null>({\n alias: 'ngpNumberFieldValueChange',\n });\n\n /**\n * The minimum value.\n */\n readonly min = input<number, NumberInput>(-Infinity, {\n alias: 'ngpNumberFieldMin',\n transform: numberAttribute,\n });\n\n /**\n * The maximum value.\n */\n readonly max = input<number, NumberInput>(Infinity, {\n alias: 'ngpNumberFieldMax',\n transform: numberAttribute,\n });\n\n /**\n * The step value.\n */\n readonly step = input<number, NumberInput>(1, {\n alias: 'ngpNumberFieldStep',\n transform: numberAttribute,\n });\n\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep = input<number, NumberInput>(10, {\n alias: 'ngpNumberFieldLargeStep',\n transform: numberAttribute,\n });\n\n /**\n * The disabled state of the number field.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The readonly state of the number field.\n */\n readonly readonly = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldReadonly',\n transform: booleanAttribute,\n });\n\n /**\n * @internal\n */\n protected readonly state = ngpNumberField({\n id: this.id,\n value: this.value,\n min: this.min,\n max: this.max,\n step: this.step,\n largeStep: this.largeStep,\n disabled: this.disabled,\n readonly: this.readonly,\n onValueChange: value => this.valueChange.emit(value),\n });\n\n /**\n * Set the value of the number field.\n */\n setValue(value: number | null): void {\n this.state.setValue(value);\n }\n\n /**\n * Increment the value.\n */\n increment(multiplier?: number): void {\n this.state.increment(multiplier);\n }\n\n /**\n * Decrement the value.\n */\n decrement(multiplier?: number): void {\n this.state.decrement(multiplier);\n }\n\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void {\n this.state.setDisabled(disabled);\n }\n\n /**\n * Set the readonly state.\n */\n setReadonly(readonly: boolean): void {\n this.state.setReadonly(readonly);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, Signal, signal } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { explicitEffect, injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Input primitive.\n */\nexport interface NgpNumberFieldInputState {\n /**\n * Focus the input element.\n */\n focus(): void;\n}\n\n/**\n * Inputs for configuring the NumberField Input primitive.\n */\nexport interface NgpNumberFieldInputProps {\n /**\n * Whether mouse wheel changes the value.\n */\n readonly allowWheelScrub?: Signal<boolean>;\n}\n\nexport const [\n NgpNumberFieldInputStateToken,\n ngpNumberFieldInput,\n injectNumberFieldInputState,\n provideNumberFieldInputState,\n] = createPrimitive(\n 'NgpNumberFieldInput',\n ({ allowWheelScrub = signal(false) }: NgpNumberFieldInputProps): NgpNumberFieldInputState => {\n const elementRef = injectElementRef<HTMLInputElement>();\n const numberField = injectNumberFieldState();\n const document = inject(DOCUMENT);\n\n // Form control integration — sets id, aria-labelledby, aria-describedby on the input\n ngpFormControl({ id: numberField().id, disabled: numberField().disabled });\n\n const tabindex = computed(() => (numberField().disabled() ? -1 : 0));\n\n // Host bindings\n const inputMode = computed(() => {\n const minVal = numberField().min();\n const stepVal = numberField().step();\n const allowsNegative = !isFinite(minVal) || minVal < 0;\n const hasDecimals = stepVal % 1 !== 0;\n\n // Some mobile keyboards can't show both minus sign and decimal point\n if (allowsNegative && hasDecimals) return 'text';\n if (hasDecimals) return 'decimal';\n if (!allowsNegative) return 'numeric';\n return 'text';\n });\n\n attrBinding(elementRef, 'role', 'spinbutton');\n attrBinding(elementRef, 'type', 'text');\n attrBinding(elementRef, 'inputmode', inputMode);\n attrBinding(elementRef, 'autocomplete', 'off');\n attrBinding(elementRef, 'autocorrect', 'off');\n attrBinding(elementRef, 'spellcheck', 'false');\n attrBinding(elementRef, 'aria-valuemin', () => {\n const min = numberField().min();\n return isFinite(min) ? min.toString() : null;\n });\n attrBinding(elementRef, 'aria-valuemax', () => {\n const max = numberField().max();\n return isFinite(max) ? max.toString() : null;\n });\n attrBinding(elementRef, 'aria-valuenow', () => numberField().value()?.toString() ?? null);\n attrBinding(elementRef, 'tabindex', () => tabindex().toString());\n attrBinding(elementRef, 'readonly', () => (numberField().readonly() ? '' : null));\n dataBinding(elementRef, 'data-readonly', () => numberField().readonly());\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n disabled: numberField().disabled,\n });\n\n let isFocused = false;\n\n /**\n * Parse text and set the number field value accordingly.\n */\n function parseAndSetValue(text: string): void {\n const trimmed = text.trim();\n if (trimmed === '' || trimmed === '-') {\n numberField().setValue(null);\n } else {\n const parsed = parseFloat(trimmed);\n if (!isNaN(parsed)) {\n numberField().setValue(parsed);\n }\n }\n }\n\n /**\n * Commit the current input text to the number field value.\n * Called before increment/decrement so they operate on the displayed value.\n */\n function commitInputValue(): void {\n if (!isFocused) return;\n parseAndSetValue(elementRef.nativeElement.value);\n }\n\n // Register the commit function with the number field so buttons can trigger it\n numberField().registerInputCommit(commitInputValue);\n\n function formatDisplayValue(): string {\n const val = numberField().value();\n return val !== null ? String(val) : '';\n }\n\n // Sync input display value when the number field value changes\n // (programmatically, via stepping, or on commit)\n explicitEffect([() => numberField().value()], ([value]) => {\n elementRef.nativeElement.value = value !== null ? String(value) : '';\n });\n\n listener(elementRef, 'focus', () => {\n isFocused = true;\n });\n\n listener(elementRef, 'blur', () => {\n isFocused = false;\n parseAndSetValue(elementRef.nativeElement.value);\n\n // Always sync the display value on blur to show the clamped/stepped value\n elementRef.nativeElement.value = formatDisplayValue();\n });\n\n // Reject characters that can't form a valid number\n listener(elementRef, 'beforeinput', (event: InputEvent) => {\n if (numberField().disabled() || numberField().readonly()) return;\n\n // Only filter insertions (typing, paste, drop)\n const insertTypes = ['insertText', 'insertFromPaste', 'insertFromDrop'];\n if (!insertTypes.includes(event.inputType) || !event.data) return;\n\n const input = elementRef.nativeElement;\n const selStart = input.selectionStart ?? 0;\n const selEnd = input.selectionEnd ?? 0;\n const current = input.value;\n const proposed = current.slice(0, selStart) + event.data + current.slice(selEnd);\n\n const minVal = numberField().min();\n const allowsNegative = !isFinite(minVal) || minVal < 0;\n\n // Build a regex for valid partial number input\n const pattern = allowsNegative ? /^-?(\\d+\\.?\\d*|\\.\\d*)?$/ : /^(\\d+\\.?\\d*|\\.\\d*)?$/;\n\n if (!pattern.test(proposed)) {\n event.preventDefault();\n }\n });\n\n // Keyboard interactions\n listener(elementRef, 'keydown', (event: KeyboardEvent) => {\n if (numberField().disabled() || numberField().readonly()) return;\n\n const useLargeStep = event.shiftKey;\n\n function getLargeStepMultiplier(): number {\n const s = numberField().step();\n if (!isFinite(s) || s <= 0) return 1;\n return numberField().largeStep() / s;\n }\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n numberField().increment(useLargeStep ? getLargeStepMultiplier() : 1);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'ArrowDown':\n event.preventDefault();\n numberField().decrement(useLargeStep ? getLargeStepMultiplier() : 1);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'Home':\n if (isFinite(numberField().min())) {\n event.preventDefault();\n numberField().setValue(numberField().min());\n elementRef.nativeElement.value = formatDisplayValue();\n }\n break;\n case 'End':\n if (isFinite(numberField().max())) {\n event.preventDefault();\n numberField().setValue(numberField().max());\n elementRef.nativeElement.value = formatDisplayValue();\n }\n break;\n case 'Enter':\n parseAndSetValue(elementRef.nativeElement.value);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n }\n });\n\n // Mouse wheel support\n listener(\n elementRef,\n 'wheel',\n (event: WheelEvent) => {\n if (!allowWheelScrub() || numberField().disabled() || numberField().readonly()) return;\n\n // Don't intercept browser zoom (Ctrl+wheel / Cmd+wheel)\n if (event.ctrlKey || event.metaKey) return;\n\n // Only handle when focused\n if (document.activeElement !== elementRef.nativeElement) return;\n\n event.preventDefault();\n\n if (event.deltaY < 0) {\n numberField().increment();\n } else if (event.deltaY > 0) {\n numberField().decrement();\n }\n\n elementRef.nativeElement.value = formatDisplayValue();\n },\n { config: { passive: false } },\n );\n\n function focus(): void {\n elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n return {\n focus,\n } satisfies NgpNumberFieldInputState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input } from '@angular/core';\nimport { ngpNumberFieldInput, provideNumberFieldInputState } from './number-field-input-state';\n\n/**\n * Apply the `ngpNumberFieldInput` directive to an input element within a number field.\n */\n@Directive({\n selector: '[ngpNumberFieldInput]',\n exportAs: 'ngpNumberFieldInput',\n providers: [provideNumberFieldInputState()],\n})\nexport class NgpNumberFieldInput {\n /**\n * Whether mouse wheel changes the value when the input is focused.\n */\n readonly allowWheelScrub = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldInputAllowWheelScrub',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpNumberFieldInput({\n allowWheelScrub: this.allowWheelScrub,\n });\n }\n}\n","import { computed, inject, Injector } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Increment primitive.\n */\nexport interface NgpNumberFieldIncrementState {}\n\n/**\n * Inputs for configuring the NumberField Increment primitive.\n */\nexport interface NgpNumberFieldIncrementProps {}\n\nexport const [\n NgpNumberFieldIncrementStateToken,\n ngpNumberFieldIncrement,\n injectNumberFieldIncrementState,\n provideNumberFieldIncrementState,\n] = createPrimitive(\n 'NgpNumberFieldIncrement',\n ({}: NgpNumberFieldIncrementProps): NgpNumberFieldIncrementState => {\n const elementRef = injectElementRef<HTMLButtonElement>();\n const numberField = injectNumberFieldState();\n const injector = inject(Injector);\n const disposables = injectDisposables();\n\n const isDisabled = computed(() => !numberField().canIncrement());\n\n // Host bindings\n attrBinding(elementRef, 'type', 'button');\n attrBinding(elementRef, 'tabindex', '-1');\n attrBinding(elementRef, 'disabled', () => (isDisabled() ? '' : null));\n dataBinding(elementRef, 'data-disabled', isDisabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: isDisabled,\n });\n\n let cleanupRepeat: (() => void) | null = null;\n\n function stopRepeat(): void {\n cleanupRepeat?.();\n cleanupRepeat = null;\n }\n\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (isDisabled()) return;\n\n numberField().increment();\n\n // Start auto-repeat: 400ms initial delay, then 60ms interval\n stopRepeat();\n\n let intervalCleanup: (() => void) | null = null;\n\n const delayCleanup = disposables.setTimeout(() => {\n intervalCleanup = disposables.setInterval(() => {\n if (!numberField().canIncrement()) {\n stopRepeat();\n return;\n }\n numberField().increment();\n }, 60);\n }, 400);\n\n // Set up document-level listeners to stop on pointer release\n const pointerUpCleanup = listener(document, 'pointerup', stopRepeat, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', stopRepeat, {\n config: false,\n injector,\n });\n\n cleanupRepeat = () => {\n delayCleanup();\n intervalCleanup?.();\n pointerUpCleanup();\n pointerCancelCleanup();\n };\n });\n\n return {} satisfies NgpNumberFieldIncrementState;\n },\n);\n","import { Directive } from '@angular/core';\nimport {\n ngpNumberFieldIncrement,\n provideNumberFieldIncrementState,\n} from './number-field-increment-state';\n\n/**\n * Apply the `ngpNumberFieldIncrement` directive to a button element that increments the number field value.\n */\n@Directive({\n selector: '[ngpNumberFieldIncrement]',\n exportAs: 'ngpNumberFieldIncrement',\n providers: [provideNumberFieldIncrementState()],\n})\nexport class NgpNumberFieldIncrement {\n constructor() {\n ngpNumberFieldIncrement({});\n }\n}\n","import { computed, inject, Injector } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Decrement primitive.\n */\nexport interface NgpNumberFieldDecrementState {}\n\n/**\n * Inputs for configuring the NumberField Decrement primitive.\n */\nexport interface NgpNumberFieldDecrementProps {}\n\nexport const [\n NgpNumberFieldDecrementStateToken,\n ngpNumberFieldDecrement,\n injectNumberFieldDecrementState,\n provideNumberFieldDecrementState,\n] = createPrimitive(\n 'NgpNumberFieldDecrement',\n ({}: NgpNumberFieldDecrementProps): NgpNumberFieldDecrementState => {\n const elementRef = injectElementRef<HTMLButtonElement>();\n const numberField = injectNumberFieldState();\n const injector = inject(Injector);\n const disposables = injectDisposables();\n\n const isDisabled = computed(() => !numberField().canDecrement());\n\n // Host bindings\n attrBinding(elementRef, 'type', 'button');\n attrBinding(elementRef, 'tabindex', '-1');\n attrBinding(elementRef, 'disabled', () => (isDisabled() ? '' : null));\n dataBinding(elementRef, 'data-disabled', isDisabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: isDisabled,\n });\n\n let cleanupRepeat: (() => void) | null = null;\n\n function stopRepeat(): void {\n cleanupRepeat?.();\n cleanupRepeat = null;\n }\n\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (isDisabled()) return;\n\n numberField().decrement();\n\n // Start auto-repeat: 400ms initial delay, then 60ms interval\n stopRepeat();\n\n let intervalCleanup: (() => void) | null = null;\n\n const delayCleanup = disposables.setTimeout(() => {\n intervalCleanup = disposables.setInterval(() => {\n if (!numberField().canDecrement()) {\n stopRepeat();\n return;\n }\n numberField().decrement();\n }, 60);\n }, 400);\n\n // Set up document-level listeners to stop on pointer release\n const pointerUpCleanup = listener(document, 'pointerup', stopRepeat, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', stopRepeat, {\n config: false,\n injector,\n });\n\n cleanupRepeat = () => {\n delayCleanup();\n intervalCleanup?.();\n pointerUpCleanup();\n pointerCancelCleanup();\n };\n });\n\n return {} satisfies NgpNumberFieldDecrementState;\n },\n);\n","import { Directive } from '@angular/core';\nimport {\n ngpNumberFieldDecrement,\n provideNumberFieldDecrementState,\n} from './number-field-decrement-state';\n\n/**\n * Apply the `ngpNumberFieldDecrement` directive to a button element that decrements the number field value.\n */\n@Directive({\n selector: '[ngpNumberFieldDecrement]',\n exportAs: 'ngpNumberFieldDecrement',\n providers: [provideNumberFieldDecrementState()],\n})\nexport class NgpNumberFieldDecrement {\n constructor() {\n ngpNumberFieldDecrement({});\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-primitives-number-field.mjs","sources":["../../../../packages/ng-primitives/number-field/src/number-field/number-field-state.ts","../../../../packages/ng-primitives/number-field/src/number-field/number-field.ts","../../../../packages/ng-primitives/number-field/src/number-field-input/number-field-input-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-input/number-field-input.ts","../../../../packages/ng-primitives/number-field/src/number-field-increment/number-field-increment-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-increment/number-field-increment.ts","../../../../packages/ng-primitives/number-field/src/number-field-decrement/number-field-decrement-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-decrement/number-field-decrement.ts","../../../../packages/ng-primitives/number-field/src/ng-primitives-number-field.ts"],"sourcesContent":["import { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the NumberField primitive.\n */\nexport interface NgpNumberFieldState {\n /**\n * The id of the number field.\n */\n readonly id: Signal<string>;\n /**\n * The current value.\n */\n readonly value: WritableSignal<number | null>;\n /**\n * The minimum value.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max: Signal<number>;\n /**\n * The step value.\n */\n readonly step: Signal<number>;\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep: Signal<number>;\n /**\n * Whether the number field is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * Whether the number field is readonly.\n */\n readonly readonly: WritableSignal<boolean>;\n /**\n * Whether the increment button should be disabled.\n */\n readonly canIncrement: Signal<boolean>;\n /**\n * Whether the decrement button should be disabled.\n */\n readonly canDecrement: Signal<boolean>;\n /**\n * Emit when the value changes.\n */\n readonly valueChange: Observable<number | null>;\n /**\n * Set the current value (clamped and stepped).\n */\n setValue(value: number | null): void;\n /**\n * Increment the value by one step.\n */\n increment(multiplier?: number): void;\n /**\n * Decrement the value by one step.\n */\n decrement(multiplier?: number): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the readonly state.\n */\n setReadonly(readonly: boolean): void;\n /** @internal */\n registerInputCommit(commitFn: () => void): void;\n}\n\n/**\n * Inputs for configuring the NumberField primitive.\n */\nexport interface NgpNumberFieldProps {\n /**\n * The id of the number field.\n */\n readonly id?: Signal<string>;\n /**\n * The current value.\n */\n readonly value?: Signal<number | null>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep?: Signal<number>;\n /**\n * Whether the number field is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Whether the number field is readonly.\n */\n readonly readonly?: Signal<boolean>;\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: number | null) => void;\n}\n\nexport const [\n NgpNumberFieldStateToken,\n ngpNumberField,\n injectNumberFieldState,\n provideNumberFieldState,\n] = createPrimitive(\n 'NgpNumberField',\n ({\n id = signal(uniqueId('ngp-number-field')),\n value: _value = signal<number | null>(null),\n min = signal(-Infinity),\n max = signal(Infinity),\n step = signal(1),\n largeStep: _largeStep = signal(10),\n disabled: _disabled = signal(false),\n readonly: _readonly = signal(false),\n onValueChange,\n }: NgpNumberFieldProps): NgpNumberFieldState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const disabled = controlled(_disabled);\n const readonly = controlled(_readonly);\n\n const valueChange = emitter<number | null>();\n\n const canIncrement = computed(() => {\n if (disabled() || readonly()) return false;\n if (value() === null) return true;\n return value()! < max();\n });\n\n const canDecrement = computed(() => {\n if (disabled() || readonly()) return false;\n if (value() === null) return true;\n return value()! > min();\n });\n\n // Host bindings\n attrBinding(element, 'role', () => 'group');\n dataBinding(element, 'data-disabled', disabled);\n dataBinding(element, 'data-readonly', readonly);\n\n /**\n * Count the number of decimal places in a number.\n */\n function getDecimalPlaces(n: number): number {\n const str = String(n);\n const dotIndex = str.indexOf('.');\n return dotIndex === -1 ? 0 : str.length - dotIndex - 1;\n }\n\n /**\n * Round a number to a specific number of decimal places to avoid\n * floating point precision issues (e.g. 0.1 + 0.2 = 0.30000000000000004).\n */\n function roundToPrecision(val: number, precision: number): number {\n if (precision === 0) return Math.round(val);\n return parseFloat(val.toFixed(precision));\n }\n\n function clampAndStep(val: number): number {\n const clamped = Math.min(max(), Math.max(min(), val));\n // Round to nearest step\n if (isFinite(step()) && step() > 0) {\n const base = isFinite(min()) ? min() : 0;\n const precision = Math.max(getDecimalPlaces(step()), getDecimalPlaces(base));\n const stepped = roundToPrecision(\n Math.round((clamped - base) / step()) * step() + base,\n precision,\n );\n return Math.min(max(), Math.max(min(), stepped));\n }\n return clamped;\n }\n\n let suppressEmit = false;\n\n function setValue(newValue: number | null): void {\n if (disabled() || readonly()) return;\n if (newValue !== null && isNaN(newValue)) return;\n const finalValue = newValue !== null ? clampAndStep(newValue) : null;\n // Skip emit when value is unchanged\n if (finalValue === value()) return;\n value.set(finalValue);\n if (!suppressEmit) {\n onValueChange?.(finalValue);\n valueChange.emit(finalValue);\n }\n }\n\n let inputCommitFn: (() => void) | null = null;\n\n function registerInputCommit(commitFn: () => void): void {\n inputCommitFn = commitFn;\n }\n\n /**\n * Commit any pending input value without emitting change events.\n * This ensures increment/decrement operates on the displayed value\n * while only emitting the final stepped result.\n */\n function commitPendingInputSilently(): void {\n if (!inputCommitFn) return;\n suppressEmit = true;\n try {\n inputCommitFn();\n } finally {\n suppressEmit = false;\n }\n }\n\n function getStepPrecision(): number {\n const base = isFinite(min()) ? min() : 0;\n return Math.max(getDecimalPlaces(step()), getDecimalPlaces(base));\n }\n\n function increment(multiplier: number = 1): void {\n if (!canIncrement()) return;\n const valueBefore = value();\n commitPendingInputSilently();\n const valueAfterCommit = value();\n const current = valueAfterCommit ?? (isFinite(min()) ? min() : 0);\n const precision = getStepPrecision();\n setValue(roundToPrecision(current + step() * multiplier, precision));\n // If the silent commit changed the value but setValue was a no-op\n // (stepped result clamped back to the committed value), emit the change\n // so the parent learns about the new value.\n if (valueBefore !== value() && valueAfterCommit === value()) {\n onValueChange?.(value());\n valueChange.emit(value());\n }\n }\n\n function decrement(multiplier: number = 1): void {\n if (!canDecrement()) return;\n const valueBefore = value();\n commitPendingInputSilently();\n const valueAfterCommit = value();\n const current = valueAfterCommit ?? (isFinite(max()) ? max() : 0);\n const precision = getStepPrecision();\n setValue(roundToPrecision(current - step() * multiplier, precision));\n // If the silent commit changed the value but setValue was a no-op\n // (stepped result clamped back to the committed value), emit the change\n // so the parent learns about the new value.\n if (valueBefore !== value() && valueAfterCommit === value()) {\n onValueChange?.(value());\n valueChange.emit(value());\n }\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n }\n\n function setReadonly(isReadonly: boolean): void {\n readonly.set(isReadonly);\n }\n\n return {\n id,\n value,\n min,\n max,\n step,\n largeStep: _largeStep,\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n readonly: deprecatedSetter(readonly, 'setReadonly'),\n canIncrement,\n canDecrement,\n valueChange: valueChange.asObservable(),\n setValue,\n increment,\n decrement,\n setDisabled,\n setReadonly,\n registerInputCommit,\n } satisfies NgpNumberFieldState;\n },\n);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, numberAttribute, output } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpNumberField, provideNumberFieldState } from './number-field-state';\n\n/**\n * Apply the `ngpNumberField` directive to an element that represents the number field\n * and contains the input, increment, and decrement buttons.\n */\n@Directive({\n selector: '[ngpNumberField]',\n exportAs: 'ngpNumberField',\n providers: [provideNumberFieldState()],\n})\nexport class NgpNumberField {\n /**\n * The id of the number field. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-number-field'));\n\n /**\n * The value of the number field.\n */\n readonly value = input<number | null, NumberInput>(null, {\n alias: 'ngpNumberFieldValue',\n transform: (v: NumberInput) =>\n v === null || v === undefined || v === '' ? null : numberAttribute(v),\n });\n\n /**\n * Emits when the value changes.\n */\n readonly valueChange = output<number | null>({\n alias: 'ngpNumberFieldValueChange',\n });\n\n /**\n * The minimum value.\n */\n readonly min = input<number, NumberInput>(-Infinity, {\n alias: 'ngpNumberFieldMin',\n transform: numberAttribute,\n });\n\n /**\n * The maximum value.\n */\n readonly max = input<number, NumberInput>(Infinity, {\n alias: 'ngpNumberFieldMax',\n transform: numberAttribute,\n });\n\n /**\n * The step value.\n */\n readonly step = input<number, NumberInput>(1, {\n alias: 'ngpNumberFieldStep',\n transform: numberAttribute,\n });\n\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep = input<number, NumberInput>(10, {\n alias: 'ngpNumberFieldLargeStep',\n transform: numberAttribute,\n });\n\n /**\n * The disabled state of the number field.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The readonly state of the number field.\n */\n readonly readonly = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldReadonly',\n transform: booleanAttribute,\n });\n\n /**\n * @internal\n */\n protected readonly state = ngpNumberField({\n id: this.id,\n value: this.value,\n min: this.min,\n max: this.max,\n step: this.step,\n largeStep: this.largeStep,\n disabled: this.disabled,\n readonly: this.readonly,\n onValueChange: value => this.valueChange.emit(value),\n });\n\n /**\n * Set the value of the number field.\n */\n setValue(value: number | null): void {\n this.state.setValue(value);\n }\n\n /**\n * Increment the value.\n */\n increment(multiplier?: number): void {\n this.state.increment(multiplier);\n }\n\n /**\n * Decrement the value.\n */\n decrement(multiplier?: number): void {\n this.state.decrement(multiplier);\n }\n\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void {\n this.state.setDisabled(disabled);\n }\n\n /**\n * Set the readonly state.\n */\n setReadonly(readonly: boolean): void {\n this.state.setReadonly(readonly);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, Signal, signal } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { explicitEffect, injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Input primitive.\n */\nexport interface NgpNumberFieldInputState {\n /**\n * Focus the input element.\n */\n focus(): void;\n}\n\n/**\n * Inputs for configuring the NumberField Input primitive.\n */\nexport interface NgpNumberFieldInputProps {\n /**\n * Whether mouse wheel changes the value.\n */\n readonly allowWheelScrub?: Signal<boolean>;\n}\n\nexport const [\n NgpNumberFieldInputStateToken,\n ngpNumberFieldInput,\n injectNumberFieldInputState,\n provideNumberFieldInputState,\n] = createPrimitive(\n 'NgpNumberFieldInput',\n ({ allowWheelScrub = signal(false) }: NgpNumberFieldInputProps): NgpNumberFieldInputState => {\n const elementRef = injectElementRef<HTMLInputElement>();\n const numberField = injectNumberFieldState();\n const document = inject(DOCUMENT);\n\n // Form control integration — sets id, aria-labelledby, aria-describedby on the input\n ngpFormControl({ id: numberField().id, disabled: numberField().disabled });\n\n const tabindex = computed(() => (numberField().disabled() ? -1 : 0));\n\n // Host bindings\n const inputMode = computed(() => {\n const minVal = numberField().min();\n const stepVal = numberField().step();\n const allowsNegative = !isFinite(minVal) || minVal < 0;\n const hasDecimals = stepVal % 1 !== 0;\n\n // Some mobile keyboards can't show both minus sign and decimal point\n if (allowsNegative && hasDecimals) return 'text';\n if (hasDecimals) return 'decimal';\n if (!allowsNegative) return 'numeric';\n return 'text';\n });\n\n attrBinding(elementRef, 'role', 'spinbutton');\n attrBinding(elementRef, 'type', 'text');\n attrBinding(elementRef, 'inputmode', inputMode);\n attrBinding(elementRef, 'autocomplete', 'off');\n attrBinding(elementRef, 'autocorrect', 'off');\n attrBinding(elementRef, 'spellcheck', 'false');\n attrBinding(elementRef, 'aria-valuemin', () => {\n const min = numberField().min();\n return isFinite(min) ? min.toString() : null;\n });\n attrBinding(elementRef, 'aria-valuemax', () => {\n const max = numberField().max();\n return isFinite(max) ? max.toString() : null;\n });\n attrBinding(elementRef, 'aria-valuenow', () => numberField().value()?.toString() ?? null);\n attrBinding(elementRef, 'tabindex', () => tabindex().toString());\n attrBinding(elementRef, 'readonly', () => (numberField().readonly() ? '' : null));\n dataBinding(elementRef, 'data-readonly', () => numberField().readonly());\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n disabled: numberField().disabled,\n });\n\n let isFocused = false;\n\n /**\n * Parse text and set the number field value accordingly.\n */\n function parseAndSetValue(text: string): void {\n const trimmed = text.trim();\n if (trimmed === '' || trimmed === '-') {\n numberField().setValue(null);\n } else {\n const parsed = parseFloat(trimmed);\n if (!isNaN(parsed)) {\n numberField().setValue(parsed);\n }\n }\n }\n\n /**\n * Commit the current input text to the number field value.\n * Called before increment/decrement so they operate on the displayed value.\n */\n function commitInputValue(): void {\n if (!isFocused) return;\n parseAndSetValue(elementRef.nativeElement.value);\n }\n\n // Register the commit function with the number field so buttons can trigger it\n numberField().registerInputCommit(commitInputValue);\n\n function formatDisplayValue(): string {\n const val = numberField().value();\n return val !== null ? String(val) : '';\n }\n\n // Sync input display value when the number field value changes\n // (programmatically, via stepping, or on commit)\n explicitEffect([() => numberField().value()], ([value]) => {\n elementRef.nativeElement.value = value !== null ? String(value) : '';\n });\n\n listener(elementRef, 'focus', () => {\n isFocused = true;\n });\n\n listener(elementRef, 'blur', () => {\n isFocused = false;\n parseAndSetValue(elementRef.nativeElement.value);\n\n // Always sync the display value on blur to show the clamped/stepped value\n elementRef.nativeElement.value = formatDisplayValue();\n });\n\n // Reject characters that can't form a valid number\n listener(elementRef, 'beforeinput', (event: InputEvent) => {\n if (numberField().disabled() || numberField().readonly()) return;\n\n // Only filter insertions (typing, paste, drop)\n const insertTypes = ['insertText', 'insertFromPaste', 'insertFromDrop'];\n if (!insertTypes.includes(event.inputType) || !event.data) return;\n\n const input = elementRef.nativeElement;\n const selStart = input.selectionStart ?? 0;\n const selEnd = input.selectionEnd ?? 0;\n const current = input.value;\n const proposed = current.slice(0, selStart) + event.data + current.slice(selEnd);\n\n const minVal = numberField().min();\n const allowsNegative = !isFinite(minVal) || minVal < 0;\n\n // Build a regex for valid partial number input\n const pattern = allowsNegative ? /^-?(\\d+\\.?\\d*|\\.\\d*)?$/ : /^(\\d+\\.?\\d*|\\.\\d*)?$/;\n\n if (!pattern.test(proposed)) {\n event.preventDefault();\n }\n });\n\n // Keyboard interactions\n listener(elementRef, 'keydown', (event: KeyboardEvent) => {\n if (numberField().disabled() || numberField().readonly()) return;\n\n const useLargeStep = event.shiftKey;\n\n function getLargeStepMultiplier(): number {\n const s = numberField().step();\n if (!isFinite(s) || s <= 0) return 1;\n return numberField().largeStep() / s;\n }\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n numberField().increment(useLargeStep ? getLargeStepMultiplier() : 1);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'ArrowDown':\n event.preventDefault();\n numberField().decrement(useLargeStep ? getLargeStepMultiplier() : 1);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'Home':\n if (isFinite(numberField().min())) {\n event.preventDefault();\n numberField().setValue(numberField().min());\n elementRef.nativeElement.value = formatDisplayValue();\n }\n break;\n case 'End':\n if (isFinite(numberField().max())) {\n event.preventDefault();\n numberField().setValue(numberField().max());\n elementRef.nativeElement.value = formatDisplayValue();\n }\n break;\n case 'Enter':\n parseAndSetValue(elementRef.nativeElement.value);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n }\n });\n\n // Mouse wheel support\n listener(\n elementRef,\n 'wheel',\n (event: WheelEvent) => {\n if (!allowWheelScrub() || numberField().disabled() || numberField().readonly()) return;\n\n // Don't intercept browser zoom (Ctrl+wheel / Cmd+wheel)\n if (event.ctrlKey || event.metaKey) return;\n\n // Only handle when focused\n if (document.activeElement !== elementRef.nativeElement) return;\n\n event.preventDefault();\n\n if (event.deltaY < 0) {\n numberField().increment();\n } else if (event.deltaY > 0) {\n numberField().decrement();\n }\n\n elementRef.nativeElement.value = formatDisplayValue();\n },\n { config: { passive: false } },\n );\n\n function focus(): void {\n elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n return {\n focus,\n } satisfies NgpNumberFieldInputState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input } from '@angular/core';\nimport { ngpNumberFieldInput, provideNumberFieldInputState } from './number-field-input-state';\n\n/**\n * Apply the `ngpNumberFieldInput` directive to an input element within a number field.\n */\n@Directive({\n selector: '[ngpNumberFieldInput]',\n exportAs: 'ngpNumberFieldInput',\n providers: [provideNumberFieldInputState()],\n})\nexport class NgpNumberFieldInput {\n /**\n * Whether mouse wheel changes the value when the input is focused.\n */\n readonly allowWheelScrub = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldInputAllowWheelScrub',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpNumberFieldInput({\n allowWheelScrub: this.allowWheelScrub,\n });\n }\n}\n","import { computed, inject, Injector } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Increment primitive.\n */\nexport interface NgpNumberFieldIncrementState {}\n\n/**\n * Inputs for configuring the NumberField Increment primitive.\n */\nexport interface NgpNumberFieldIncrementProps {}\n\nexport const [\n NgpNumberFieldIncrementStateToken,\n ngpNumberFieldIncrement,\n injectNumberFieldIncrementState,\n provideNumberFieldIncrementState,\n] = createPrimitive(\n 'NgpNumberFieldIncrement',\n ({}: NgpNumberFieldIncrementProps): NgpNumberFieldIncrementState => {\n const elementRef = injectElementRef<HTMLButtonElement>();\n const numberField = injectNumberFieldState();\n const injector = inject(Injector);\n const disposables = injectDisposables();\n\n const isDisabled = computed(() => !numberField().canIncrement());\n\n // Host bindings\n attrBinding(elementRef, 'type', 'button');\n attrBinding(elementRef, 'tabindex', '-1');\n attrBinding(elementRef, 'disabled', () => (isDisabled() ? '' : null));\n dataBinding(elementRef, 'data-disabled', isDisabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: isDisabled,\n });\n\n let cleanupRepeat: (() => void) | null = null;\n\n function stopRepeat(): void {\n cleanupRepeat?.();\n cleanupRepeat = null;\n }\n\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (isDisabled()) return;\n\n numberField().increment();\n\n // Start auto-repeat: 400ms initial delay, then 60ms interval\n stopRepeat();\n\n let intervalCleanup: (() => void) | null = null;\n\n const delayCleanup = disposables.setTimeout(() => {\n intervalCleanup = disposables.setInterval(() => {\n if (!numberField().canIncrement()) {\n stopRepeat();\n return;\n }\n numberField().increment();\n }, 60);\n }, 400);\n\n // Set up document-level listeners to stop on pointer release\n const pointerUpCleanup = listener(document, 'pointerup', stopRepeat, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', stopRepeat, {\n config: false,\n injector,\n });\n\n cleanupRepeat = () => {\n delayCleanup();\n intervalCleanup?.();\n pointerUpCleanup();\n pointerCancelCleanup();\n };\n });\n\n return {} satisfies NgpNumberFieldIncrementState;\n },\n);\n","import { Directive } from '@angular/core';\nimport {\n ngpNumberFieldIncrement,\n provideNumberFieldIncrementState,\n} from './number-field-increment-state';\n\n/**\n * Apply the `ngpNumberFieldIncrement` directive to a button element that increments the number field value.\n */\n@Directive({\n selector: '[ngpNumberFieldIncrement]',\n exportAs: 'ngpNumberFieldIncrement',\n providers: [provideNumberFieldIncrementState()],\n})\nexport class NgpNumberFieldIncrement {\n constructor() {\n ngpNumberFieldIncrement({});\n }\n}\n","import { computed, inject, Injector } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Decrement primitive.\n */\nexport interface NgpNumberFieldDecrementState {}\n\n/**\n * Inputs for configuring the NumberField Decrement primitive.\n */\nexport interface NgpNumberFieldDecrementProps {}\n\nexport const [\n NgpNumberFieldDecrementStateToken,\n ngpNumberFieldDecrement,\n injectNumberFieldDecrementState,\n provideNumberFieldDecrementState,\n] = createPrimitive(\n 'NgpNumberFieldDecrement',\n ({}: NgpNumberFieldDecrementProps): NgpNumberFieldDecrementState => {\n const elementRef = injectElementRef<HTMLButtonElement>();\n const numberField = injectNumberFieldState();\n const injector = inject(Injector);\n const disposables = injectDisposables();\n\n const isDisabled = computed(() => !numberField().canDecrement());\n\n // Host bindings\n attrBinding(elementRef, 'type', 'button');\n attrBinding(elementRef, 'tabindex', '-1');\n attrBinding(elementRef, 'disabled', () => (isDisabled() ? '' : null));\n dataBinding(elementRef, 'data-disabled', isDisabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: isDisabled,\n });\n\n let cleanupRepeat: (() => void) | null = null;\n\n function stopRepeat(): void {\n cleanupRepeat?.();\n cleanupRepeat = null;\n }\n\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (isDisabled()) return;\n\n numberField().decrement();\n\n // Start auto-repeat: 400ms initial delay, then 60ms interval\n stopRepeat();\n\n let intervalCleanup: (() => void) | null = null;\n\n const delayCleanup = disposables.setTimeout(() => {\n intervalCleanup = disposables.setInterval(() => {\n if (!numberField().canDecrement()) {\n stopRepeat();\n return;\n }\n numberField().decrement();\n }, 60);\n }, 400);\n\n // Set up document-level listeners to stop on pointer release\n const pointerUpCleanup = listener(document, 'pointerup', stopRepeat, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', stopRepeat, {\n config: false,\n injector,\n });\n\n cleanupRepeat = () => {\n delayCleanup();\n intervalCleanup?.();\n pointerUpCleanup();\n pointerCancelCleanup();\n };\n });\n\n return {} satisfies NgpNumberFieldDecrementState;\n },\n);\n","import { Directive } from '@angular/core';\nimport {\n ngpNumberFieldDecrement,\n provideNumberFieldDecrementState,\n} from './number-field-decrement-state';\n\n/**\n * Apply the `ngpNumberFieldDecrement` directive to a button element that decrements the number field value.\n */\n@Directive({\n selector: '[ngpNumberFieldDecrement]',\n exportAs: 'ngpNumberFieldDecrement',\n providers: [provideNumberFieldDecrementState()],\n})\nexport class NgpNumberFieldDecrement {\n constructor() {\n ngpNumberFieldDecrement({});\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|