@radix-ng/primitives 1.0.6 → 1.0.8
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/aspect-ratio/README.md +1 -1
- package/fesm2022/radix-ng-primitives-accordion.mjs +6 -1
- package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +9 -34
- package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-autocomplete.mjs +43 -9
- package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-avatar.mjs +69 -18
- package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +93 -16
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs +4 -3
- package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-combobox.mjs +43 -9
- package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +208 -2
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +50 -9
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs +31 -5
- package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +276 -58
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-form.mjs +111 -27
- package/fesm2022/radix-ng-primitives-form.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-input.mjs +16 -6
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-label.mjs +5 -4
- package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +39 -10
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs +37 -22
- package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-radio.mjs +18 -9
- package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +4 -4
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +26 -8
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-separator.mjs +7 -13
- package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-signal-forms.mjs +184 -0
- package/fesm2022/radix-ng-primitives-signal-forms.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-slider.mjs +25 -10
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +32 -8
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +4 -4
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +49 -9
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +33 -16
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle.mjs +24 -29
- package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toolbar.mjs +15 -2
- package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
- package/package.json +11 -1
- package/types/radix-ng-primitives-accordion.d.ts +1 -0
- package/types/radix-ng-primitives-aspect-ratio.d.ts +10 -23
- package/types/radix-ng-primitives-autocomplete.d.ts +21 -2
- package/types/radix-ng-primitives-avatar.d.ts +51 -25
- package/types/radix-ng-primitives-checkbox.d.ts +78 -101
- package/types/radix-ng-primitives-combobox.d.ts +51 -2
- package/types/radix-ng-primitives-core.d.ts +206 -3
- package/types/radix-ng-primitives-date-field.d.ts +27 -2
- package/types/radix-ng-primitives-editable.d.ts +15 -2
- package/types/radix-ng-primitives-field.d.ts +165 -236
- package/types/radix-ng-primitives-form.d.ts +122 -37
- package/types/radix-ng-primitives-input.d.ts +8 -1
- package/types/radix-ng-primitives-label.d.ts +3 -2
- package/types/radix-ng-primitives-number-field.d.ts +15 -4
- package/types/radix-ng-primitives-progress.d.ts +59 -121
- package/types/radix-ng-primitives-radio.d.ts +7 -3
- package/types/radix-ng-primitives-select.d.ts +11 -3
- package/types/radix-ng-primitives-separator.d.ts +0 -7
- package/types/radix-ng-primitives-signal-forms.d.ts +97 -0
- package/types/radix-ng-primitives-slider.d.ts +9 -7
- package/types/radix-ng-primitives-switch.d.ts +15 -2
- package/types/radix-ng-primitives-time-field.d.ts +26 -2
- package/types/radix-ng-primitives-toggle-group.d.ts +13 -7
- package/types/radix-ng-primitives-toggle.d.ts +8 -8
- package/types/radix-ng-primitives-toolbar.d.ts +2 -0
|
@@ -134,8 +134,16 @@ class RdxInputDirective {
|
|
|
134
134
|
* @group Emits
|
|
135
135
|
*/
|
|
136
136
|
this.touch = output();
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
/** The input's own binary invalidity (its `invalid` input or a non-empty `errors` list). */
|
|
138
|
+
this.ownInvalid = computed(() => this.invalid() || (this.errors()?.length ?? 0) > 0, /* @ts-ignore */
|
|
139
|
+
...(ngDevMode ? [{ debugName: "ownInvalid" }] : /* istanbul ignore next */ []));
|
|
140
|
+
/**
|
|
141
|
+
* Tri-state *displayed* validity: inside a `rdxFieldRoot` the field's gated `validState` is the single
|
|
142
|
+
* source (so a field whose `validationMode` defers display (e.g. `onBlur`) keeps the input neutral until revealed), otherwise
|
|
143
|
+
* the input's own binary invalidity. `true` valid / `false` invalid / `null` neutral.
|
|
144
|
+
*/
|
|
145
|
+
this.displayValid = computed(() => this.fieldRootContext ? this.fieldRootContext.validState() : this.ownInvalid() ? false : true, /* @ts-ignore */
|
|
146
|
+
...(ngDevMode ? [{ debugName: "displayValid" }] : /* istanbul ignore next */ []));
|
|
139
147
|
this.disabledState = computed(() => this.disabled() || Boolean(this.fieldRootContext?.disabledState()), /* @ts-ignore */
|
|
140
148
|
...(ngDevMode ? [{ debugName: "disabledState" }] : /* istanbul ignore next */ []));
|
|
141
149
|
this.requiredState = computed(() => this.required() || Boolean(this.fieldRootContext?.requiredState()), /* @ts-ignore */
|
|
@@ -227,7 +235,7 @@ class RdxInputDirective {
|
|
|
227
235
|
this.syncFieldState();
|
|
228
236
|
}
|
|
229
237
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
230
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxInputDirective, isStandalone: true, selector: "input[rdxInput]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, dirty: { classPropertyName: "dirty", publicName: "dirty", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange", onValueChange: "onValueChange", touch: "touch" }, host: { listeners: { "focus": "onFocus()", "blur": "onBlur()", "input": "onInput($event)", "change": "syncFieldState()" }, properties: { "attr.id": "id()", "attr.name": "name() || undefined", "attr.aria-describedby": "describedBy()", "attr.aria-invalid": "
|
|
238
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxInputDirective, isStandalone: true, selector: "input[rdxInput]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, dirty: { classPropertyName: "dirty", publicName: "dirty", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange", onValueChange: "onValueChange", touch: "touch" }, host: { listeners: { "focus": "onFocus()", "blur": "onBlur()", "input": "onInput($event)", "change": "syncFieldState()" }, properties: { "attr.id": "id()", "attr.name": "name() || undefined", "attr.aria-describedby": "describedBy()", "attr.aria-invalid": "displayValid() === false ? \"true\" : undefined", "attr.aria-required": "requiredState() ? \"true\" : undefined", "attr.aria-disabled": "disabledState() ? \"true\" : undefined", "attr.disabled": "disabledState() ? \"\" : undefined", "attr.required": "requiredState() ? \"\" : undefined", "attr.readonly": "readonly() ? \"\" : undefined", "attr.minlength": "minLength() ?? undefined", "attr.maxlength": "maxLength() ?? undefined", "attr.pattern": "patternAttr()", "attr.data-invalid": "dataAttr(displayValid() === false)", "attr.data-valid": "dataAttr(displayValid() === true)", "attr.data-disabled": "dataAttr(disabledState())", "attr.data-required": "dataAttr(requiredState())", "attr.data-readonly": "dataAttr(readonly())", "attr.data-filled": "dataAttr(filledState())", "attr.data-focused": "dataAttr(focusedState())", "attr.data-touched": "dataAttr(touchedState())", "attr.data-dirty": "dataAttr(dirtyState())" } }, exportAs: ["rdxInput"], ngImport: i0 }); }
|
|
231
239
|
}
|
|
232
240
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxInputDirective, decorators: [{
|
|
233
241
|
type: Directive,
|
|
@@ -238,7 +246,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
238
246
|
'[attr.id]': 'id()',
|
|
239
247
|
'[attr.name]': 'name() || undefined',
|
|
240
248
|
'[attr.aria-describedby]': 'describedBy()',
|
|
241
|
-
'
|
|
249
|
+
// Validity follows the field's tri-state `displayValid` when inside a `rdxFieldRoot` (neutral →
|
|
250
|
+
// no aria-invalid, neither data-valid nor data-invalid), else the input's own binary invalidity.
|
|
251
|
+
'[attr.aria-invalid]': 'displayValid() === false ? "true" : undefined',
|
|
242
252
|
'[attr.aria-required]': 'requiredState() ? "true" : undefined',
|
|
243
253
|
'[attr.aria-disabled]': 'disabledState() ? "true" : undefined',
|
|
244
254
|
'[attr.disabled]': 'disabledState() ? "" : undefined',
|
|
@@ -247,8 +257,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
247
257
|
'[attr.minlength]': 'minLength() ?? undefined',
|
|
248
258
|
'[attr.maxlength]': 'maxLength() ?? undefined',
|
|
249
259
|
'[attr.pattern]': 'patternAttr()',
|
|
250
|
-
'[attr.data-invalid]': 'dataAttr(
|
|
251
|
-
'[attr.data-valid]': 'dataAttr(
|
|
260
|
+
'[attr.data-invalid]': 'dataAttr(displayValid() === false)',
|
|
261
|
+
'[attr.data-valid]': 'dataAttr(displayValid() === true)',
|
|
252
262
|
'[attr.data-disabled]': 'dataAttr(disabledState())',
|
|
253
263
|
'[attr.data-required]': 'dataAttr(requiredState())',
|
|
254
264
|
'[attr.data-readonly]': 'dataAttr(readonly())',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-input.mjs","sources":["../../../packages/primitives/input/src/input.directive.ts","../../../packages/primitives/input/radix-ng-primitives-input.ts"],"sourcesContent":["import {\n afterNextRender,\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal\n} from '@angular/core';\nimport { BooleanInput, NumberInput, RdxFormValueControl, RdxValidationError } from '@radix-ng/primitives/core';\nimport { injectFieldRootContext } from '@radix-ng/primitives/field';\n\nlet inputId = 0;\n\nconst attr = (value: boolean) => (value ? '' : undefined);\nconst numberOrUndefined = (value: unknown): number | undefined =>\n value == null || value === '' ? undefined : Number(value);\n\n/**\n * The input value. Native text inputs always produce strings, so the model is\n * `string` — matching Signal Forms' `FormValueControl<string>` round-trip.\n */\nexport type RdxInputValue = string;\n\nexport interface RdxInputValueChangeEventDetails {\n event: Event;\n cancel: () => void;\n isCanceled: () => boolean;\n}\n\nexport interface RdxInputValueChangeEvent {\n value: string;\n eventDetails: RdxInputValueChangeEventDetails;\n}\n\n/**\n * A headless text input that can integrate with Field for accessible labeling,\n * descriptions, validation state, and data attributes.\n *\n * @group Components\n */\n@Directive({\n selector: 'input[rdxInput]',\n exportAs: 'rdxInput',\n host: {\n '[attr.id]': 'id()',\n '[attr.name]': 'name() || undefined',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'invalidState() ? \"true\" : undefined',\n '[attr.aria-required]': 'requiredState() ? \"true\" : undefined',\n '[attr.aria-disabled]': 'disabledState() ? \"true\" : undefined',\n '[attr.disabled]': 'disabledState() ? \"\" : undefined',\n '[attr.required]': 'requiredState() ? \"\" : undefined',\n '[attr.readonly]': 'readonly() ? \"\" : undefined',\n '[attr.minlength]': 'minLength() ?? undefined',\n '[attr.maxlength]': 'maxLength() ?? undefined',\n '[attr.pattern]': 'patternAttr()',\n '[attr.data-invalid]': 'dataAttr(invalidState())',\n '[attr.data-valid]': 'dataAttr(!invalidState())',\n '[attr.data-disabled]': 'dataAttr(disabledState())',\n '[attr.data-required]': 'dataAttr(requiredState())',\n '[attr.data-readonly]': 'dataAttr(readonly())',\n '[attr.data-filled]': 'dataAttr(filledState())',\n '[attr.data-focused]': 'dataAttr(focusedState())',\n '[attr.data-touched]': 'dataAttr(touchedState())',\n '[attr.data-dirty]': 'dataAttr(dirtyState())',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(input)': 'onInput($event)',\n '(change)': 'syncFieldState()'\n }\n})\nexport class RdxInputDirective implements RdxFormValueControl<RdxInputValue | undefined> {\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef).nativeElement;\n private readonly fieldRootContext = injectFieldRootContext(true);\n private initialValue = '';\n private defaultValueApplied = false;\n private readonly filledValue = signal(false);\n private readonly focusedValue = signal(false);\n private readonly dirtyValue = signal(false);\n\n /**\n * The input id. Field labels and descriptions use this value for accessible relationships.\n *\n * @group Props\n */\n readonly id = input(`rdx-input-${inputId++}`);\n\n /**\n * The name of the input, submitted with the form data and used by Form-level\n * error matching.\n *\n * @group Props\n */\n readonly name = input<string>();\n\n /**\n * The controlled input value.\n *\n * @group Props\n */\n readonly value = model<RdxInputValue | undefined>(undefined);\n\n /**\n * The initial value when the input is uncontrolled.\n *\n * @group Props\n */\n readonly defaultValue = input<RdxInputValue | undefined>(undefined);\n\n /**\n * Whether the input is disabled.\n *\n * @group Props\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the input is read-only.\n *\n * @group Props\n */\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the input is required.\n *\n * @group Props\n */\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the input is invalid.\n *\n * @group Props\n */\n readonly invalid = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the input has been touched. A two-way model: the input sets it on\n * blur (emitting `touchedChange`, which Signal Forms' `[formField]` listens\n * to), and a form system can write it back.\n *\n * @group Props\n */\n readonly touched = model<boolean>(false);\n\n /**\n * Whether the input value has changed from its initial value. Merged with the\n * internally tracked state; a form system can own it through this input.\n *\n * @group Props\n */\n readonly dirty = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Validation errors for the input. A non-empty list marks the input invalid.\n *\n * @group Props\n */\n readonly errors = input<readonly RdxValidationError[]>([]);\n\n /**\n * Minimum number of characters.\n *\n * @group Props\n */\n readonly minLength = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n /**\n * Maximum number of characters.\n *\n * @group Props\n */\n readonly maxLength = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n /**\n * Patterns the value must match. Reflected to the native `pattern` attribute\n * only when exactly one pattern is provided (the attribute holds a single regex).\n *\n * @group Props\n */\n readonly pattern = input<readonly RegExp[]>([]);\n\n /**\n * Emits when the input value changes.\n *\n * @group Emits\n */\n readonly onValueChange = output<RdxInputValueChangeEvent>();\n\n /**\n * Emits on blur, notifying a form system the input was touched. Stable\n * Angular 22 Signal Forms listens to this `touch` output; the 21.x\n * experimental implementation listens to the `touched` model's\n * `touchedChange` instead — both are emitted, covering either version.\n *\n * @group Emits\n */\n readonly touch = output<void>();\n\n protected readonly invalidState = computed(\n () => this.invalid() || (this.errors()?.length ?? 0) > 0 || Boolean(this.fieldRootContext?.invalidState())\n );\n protected readonly disabledState = computed(\n () => this.disabled() || Boolean(this.fieldRootContext?.disabledState())\n );\n protected readonly requiredState = computed(\n () => this.required() || Boolean(this.fieldRootContext?.requiredState())\n );\n protected readonly filledState = computed(\n () => this.filledValue() || Boolean(this.fieldRootContext?.filledState())\n );\n protected readonly focusedState = computed(\n () => this.focusedValue() || Boolean(this.fieldRootContext?.focusedState())\n );\n protected readonly touchedState = computed(() => this.touched() || Boolean(this.fieldRootContext?.touchedState()));\n protected readonly dirtyState = computed(\n () => this.dirty() || this.dirtyValue() || Boolean(this.fieldRootContext?.dirtyState())\n );\n\n protected readonly patternAttr = computed(() => {\n const patterns = this.pattern();\n return patterns?.length === 1 ? patterns[0].source : undefined;\n });\n\n protected readonly describedBy = computed(() => {\n if (!this.fieldRootContext) {\n return undefined;\n }\n\n const ids = [\n ...this.fieldRootContext.descriptionIds(),\n ...(this.fieldRootContext.invalidState() ? this.fieldRootContext.errorIds() : [])\n ];\n\n return ids.length ? ids.join(' ') : undefined;\n });\n\n constructor() {\n effect(() => {\n const value = this.value();\n\n if (value !== undefined) {\n this.writeValue(value);\n }\n });\n\n effect(() => {\n const defaultValue = this.defaultValue();\n\n if (this.value() === undefined && defaultValue !== undefined && !this.defaultValueApplied) {\n this.defaultValueApplied = true;\n this.writeValue(defaultValue);\n }\n });\n\n effect(() => {\n this.fieldRootContext?.setControlId(this.id());\n });\n\n afterNextRender(() => {\n this.initialValue = this.element.value;\n this.syncFieldState();\n });\n }\n\n onFocus(): void {\n this.focusedValue.set(true);\n this.fieldRootContext?.setFocused(true);\n }\n\n onBlur(): void {\n this.focusedValue.set(false);\n this.touched.set(true);\n this.touch.emit();\n this.fieldRootContext?.setFocused(false);\n this.fieldRootContext?.setTouched(true);\n }\n\n onInput(event: Event): void {\n const nextValue = this.element.value;\n let canceled = false;\n\n const eventDetails: RdxInputValueChangeEventDetails = {\n event,\n cancel: () => {\n canceled = true;\n },\n isCanceled: () => canceled\n };\n\n this.onValueChange.emit({ value: nextValue, eventDetails });\n\n if (canceled) {\n this.writeValue(this.value() ?? this.defaultValue() ?? '');\n return;\n }\n\n this.value.set(nextValue);\n this.syncFieldState();\n }\n\n syncFieldState(): void {\n const value = this.element.value;\n\n this.filledValue.set(value !== '');\n this.dirtyValue.set(value !== this.initialValue);\n this.fieldRootContext?.setFilled(value !== '');\n this.fieldRootContext?.setDirty(value !== this.initialValue);\n }\n\n private writeValue(value: RdxInputValue): void {\n this.element.value = value;\n this.syncFieldState();\n }\n\n protected readonly dataAttr = attr;\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":"radix-ng-primitives-input.mjs","sources":["../../../packages/primitives/input/src/input.directive.ts","../../../packages/primitives/input/radix-ng-primitives-input.ts"],"sourcesContent":["import {\n afterNextRender,\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal\n} from '@angular/core';\nimport { BooleanInput, NumberInput, RdxFormValueControl, RdxValidationError } from '@radix-ng/primitives/core';\nimport { injectFieldRootContext } from '@radix-ng/primitives/field';\n\nlet inputId = 0;\n\nconst attr = (value: boolean) => (value ? '' : undefined);\nconst numberOrUndefined = (value: unknown): number | undefined =>\n value == null || value === '' ? undefined : Number(value);\n\n/**\n * The input value. Native text inputs always produce strings, so the model is\n * `string` — matching Signal Forms' `FormValueControl<string>` round-trip.\n */\nexport type RdxInputValue = string;\n\nexport interface RdxInputValueChangeEventDetails {\n event: Event;\n cancel: () => void;\n isCanceled: () => boolean;\n}\n\nexport interface RdxInputValueChangeEvent {\n value: string;\n eventDetails: RdxInputValueChangeEventDetails;\n}\n\n/**\n * A headless text input that can integrate with Field for accessible labeling,\n * descriptions, validation state, and data attributes.\n *\n * @group Components\n */\n@Directive({\n selector: 'input[rdxInput]',\n exportAs: 'rdxInput',\n host: {\n '[attr.id]': 'id()',\n '[attr.name]': 'name() || undefined',\n '[attr.aria-describedby]': 'describedBy()',\n // Validity follows the field's tri-state `displayValid` when inside a `rdxFieldRoot` (neutral →\n // no aria-invalid, neither data-valid nor data-invalid), else the input's own binary invalidity.\n '[attr.aria-invalid]': 'displayValid() === false ? \"true\" : undefined',\n '[attr.aria-required]': 'requiredState() ? \"true\" : undefined',\n '[attr.aria-disabled]': 'disabledState() ? \"true\" : undefined',\n '[attr.disabled]': 'disabledState() ? \"\" : undefined',\n '[attr.required]': 'requiredState() ? \"\" : undefined',\n '[attr.readonly]': 'readonly() ? \"\" : undefined',\n '[attr.minlength]': 'minLength() ?? undefined',\n '[attr.maxlength]': 'maxLength() ?? undefined',\n '[attr.pattern]': 'patternAttr()',\n '[attr.data-invalid]': 'dataAttr(displayValid() === false)',\n '[attr.data-valid]': 'dataAttr(displayValid() === true)',\n '[attr.data-disabled]': 'dataAttr(disabledState())',\n '[attr.data-required]': 'dataAttr(requiredState())',\n '[attr.data-readonly]': 'dataAttr(readonly())',\n '[attr.data-filled]': 'dataAttr(filledState())',\n '[attr.data-focused]': 'dataAttr(focusedState())',\n '[attr.data-touched]': 'dataAttr(touchedState())',\n '[attr.data-dirty]': 'dataAttr(dirtyState())',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(input)': 'onInput($event)',\n '(change)': 'syncFieldState()'\n }\n})\nexport class RdxInputDirective implements RdxFormValueControl<RdxInputValue | undefined> {\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef).nativeElement;\n private readonly fieldRootContext = injectFieldRootContext(true);\n private initialValue = '';\n private defaultValueApplied = false;\n private readonly filledValue = signal(false);\n private readonly focusedValue = signal(false);\n private readonly dirtyValue = signal(false);\n\n /**\n * The input id. Field labels and descriptions use this value for accessible relationships.\n *\n * @group Props\n */\n readonly id = input(`rdx-input-${inputId++}`);\n\n /**\n * The name of the input, submitted with the form data and used by Form-level\n * error matching.\n *\n * @group Props\n */\n readonly name = input<string>();\n\n /**\n * The controlled input value.\n *\n * @group Props\n */\n readonly value = model<RdxInputValue | undefined>(undefined);\n\n /**\n * The initial value when the input is uncontrolled.\n *\n * @group Props\n */\n readonly defaultValue = input<RdxInputValue | undefined>(undefined);\n\n /**\n * Whether the input is disabled.\n *\n * @group Props\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the input is read-only.\n *\n * @group Props\n */\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the input is required.\n *\n * @group Props\n */\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the input is invalid.\n *\n * @group Props\n */\n readonly invalid = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the input has been touched. A two-way model: the input sets it on\n * blur (emitting `touchedChange`, which Signal Forms' `[formField]` listens\n * to), and a form system can write it back.\n *\n * @group Props\n */\n readonly touched = model<boolean>(false);\n\n /**\n * Whether the input value has changed from its initial value. Merged with the\n * internally tracked state; a form system can own it through this input.\n *\n * @group Props\n */\n readonly dirty = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Validation errors for the input. A non-empty list marks the input invalid.\n *\n * @group Props\n */\n readonly errors = input<readonly RdxValidationError[]>([]);\n\n /**\n * Minimum number of characters.\n *\n * @group Props\n */\n readonly minLength = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n /**\n * Maximum number of characters.\n *\n * @group Props\n */\n readonly maxLength = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n /**\n * Patterns the value must match. Reflected to the native `pattern` attribute\n * only when exactly one pattern is provided (the attribute holds a single regex).\n *\n * @group Props\n */\n readonly pattern = input<readonly RegExp[]>([]);\n\n /**\n * Emits when the input value changes.\n *\n * @group Emits\n */\n readonly onValueChange = output<RdxInputValueChangeEvent>();\n\n /**\n * Emits on blur, notifying a form system the input was touched. Stable\n * Angular 22 Signal Forms listens to this `touch` output; the 21.x\n * experimental implementation listens to the `touched` model's\n * `touchedChange` instead — both are emitted, covering either version.\n *\n * @group Emits\n */\n readonly touch = output<void>();\n\n /** The input's own binary invalidity (its `invalid` input or a non-empty `errors` list). */\n private readonly ownInvalid = computed(() => this.invalid() || (this.errors()?.length ?? 0) > 0);\n\n /**\n * Tri-state *displayed* validity: inside a `rdxFieldRoot` the field's gated `validState` is the single\n * source (so a field whose `validationMode` defers display (e.g. `onBlur`) keeps the input neutral until revealed), otherwise\n * the input's own binary invalidity. `true` valid / `false` invalid / `null` neutral.\n */\n protected readonly displayValid = computed<boolean | null>(() =>\n this.fieldRootContext ? this.fieldRootContext.validState() : this.ownInvalid() ? false : true\n );\n protected readonly disabledState = computed(\n () => this.disabled() || Boolean(this.fieldRootContext?.disabledState())\n );\n protected readonly requiredState = computed(\n () => this.required() || Boolean(this.fieldRootContext?.requiredState())\n );\n protected readonly filledState = computed(\n () => this.filledValue() || Boolean(this.fieldRootContext?.filledState())\n );\n protected readonly focusedState = computed(\n () => this.focusedValue() || Boolean(this.fieldRootContext?.focusedState())\n );\n protected readonly touchedState = computed(() => this.touched() || Boolean(this.fieldRootContext?.touchedState()));\n protected readonly dirtyState = computed(\n () => this.dirty() || this.dirtyValue() || Boolean(this.fieldRootContext?.dirtyState())\n );\n\n protected readonly patternAttr = computed(() => {\n const patterns = this.pattern();\n return patterns?.length === 1 ? patterns[0].source : undefined;\n });\n\n protected readonly describedBy = computed(() => {\n if (!this.fieldRootContext) {\n return undefined;\n }\n\n const ids = [\n ...this.fieldRootContext.descriptionIds(),\n ...(this.fieldRootContext.invalidState() ? this.fieldRootContext.errorIds() : [])\n ];\n\n return ids.length ? ids.join(' ') : undefined;\n });\n\n constructor() {\n effect(() => {\n const value = this.value();\n\n if (value !== undefined) {\n this.writeValue(value);\n }\n });\n\n effect(() => {\n const defaultValue = this.defaultValue();\n\n if (this.value() === undefined && defaultValue !== undefined && !this.defaultValueApplied) {\n this.defaultValueApplied = true;\n this.writeValue(defaultValue);\n }\n });\n\n effect(() => {\n this.fieldRootContext?.setControlId(this.id());\n });\n\n afterNextRender(() => {\n this.initialValue = this.element.value;\n this.syncFieldState();\n });\n }\n\n onFocus(): void {\n this.focusedValue.set(true);\n this.fieldRootContext?.setFocused(true);\n }\n\n onBlur(): void {\n this.focusedValue.set(false);\n this.touched.set(true);\n this.touch.emit();\n this.fieldRootContext?.setFocused(false);\n this.fieldRootContext?.setTouched(true);\n }\n\n onInput(event: Event): void {\n const nextValue = this.element.value;\n let canceled = false;\n\n const eventDetails: RdxInputValueChangeEventDetails = {\n event,\n cancel: () => {\n canceled = true;\n },\n isCanceled: () => canceled\n };\n\n this.onValueChange.emit({ value: nextValue, eventDetails });\n\n if (canceled) {\n this.writeValue(this.value() ?? this.defaultValue() ?? '');\n return;\n }\n\n this.value.set(nextValue);\n this.syncFieldState();\n }\n\n syncFieldState(): void {\n const value = this.element.value;\n\n this.filledValue.set(value !== '');\n this.dirtyValue.set(value !== this.initialValue);\n this.fieldRootContext?.setFilled(value !== '');\n this.fieldRootContext?.setDirty(value !== this.initialValue);\n }\n\n private writeValue(value: RdxInputValue): void {\n this.element.value = value;\n this.syncFieldState();\n }\n\n protected readonly dataAttr = attr;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, ElementRef, input, Directive } from '@angular/core';
|
|
3
|
+
import { injectId } from '@radix-ng/primitives/core';
|
|
3
4
|
|
|
4
|
-
let idIterator = 0;
|
|
5
5
|
/**
|
|
6
6
|
* @group Components
|
|
7
7
|
*/
|
|
@@ -9,14 +9,15 @@ class RdxLabelDirective {
|
|
|
9
9
|
constructor() {
|
|
10
10
|
this.elementRef = inject((ElementRef));
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* The label id. Defaults to a stable generated id.
|
|
13
|
+
* @group Props
|
|
13
14
|
*/
|
|
14
|
-
this.id = input(
|
|
15
|
+
this.id = input(injectId('rdx-label-'), /* @ts-ignore */
|
|
15
16
|
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
16
17
|
/**
|
|
17
18
|
* The id of the element the label is associated with.
|
|
18
19
|
* @group Props
|
|
19
|
-
* @
|
|
20
|
+
* @default undefined
|
|
20
21
|
*/
|
|
21
22
|
this.htmlFor = input(/* @ts-ignore */
|
|
22
23
|
...(ngDevMode ? [undefined, { debugName: "htmlFor" }] : /* istanbul ignore next */ []));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-label.mjs","sources":["../../../packages/primitives/label/src/label.directive.ts","../../../packages/primitives/label/radix-ng-primitives-label.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input } from '@angular/core';\
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-label.mjs","sources":["../../../packages/primitives/label/src/label.directive.ts","../../../packages/primitives/label/radix-ng-primitives-label.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { injectId } from '@radix-ng/primitives/core';\n\n/**\n * @group Components\n */\n@Directive({\n selector: 'label[rdxLabel]',\n exportAs: 'rdxLabel',\n host: {\n '[attr.id]': 'id()',\n '[attr.for]': 'htmlFor() ? htmlFor() : undefined',\n '(mousedown)': 'onMouseDown($event)'\n }\n})\nexport class RdxLabelDirective {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /**\n * The label id. Defaults to a stable generated id.\n * @group Props\n */\n readonly id = input<string>(injectId('rdx-label-'));\n\n /**\n * The id of the element the label is associated with.\n * @group Props\n * @default undefined\n */\n readonly htmlFor = input<string>();\n\n // prevent text selection when double-clicking label\n // The main problem with double-clicks in a web app is that\n // you will have to create special code to handle this on touch enabled devices.\n /**\n * @ignore\n */\n onMouseDown(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n\n // only prevent text selection if not clicking inside an interactive control (or its\n // descendants), so clicks still focus/activate the associated control.\n if (target.closest('button, input, select, textarea')) {\n return;\n }\n\n // prevent text selection when double-clicking label\n if (this.elementRef.nativeElement.contains(target) && !event.defaultPrevented && event.detail > 1) {\n event.preventDefault();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAGA;;AAEG;MAUU,iBAAiB,CAAA;AAT9B,IAAA,WAAA,GAAA;AAUqB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;AAE7D;;;AAGG;AACM,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,QAAQ,CAAC,YAAY,CAAC;+EAAC;AAEnD;;;;AAIG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;AAsBrC,IAAA;;;;AAjBG;;AAEG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;;;AAI1C,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,EAAE;YACnD;QACJ;;QAGA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/F,KAAK,CAAC,cAAc,EAAE;QAC1B;IACJ;8GAnCS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,IAAI,EAAE;AACF,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,YAAY,EAAE,mCAAmC;AACjD,wBAAA,aAAa,EAAE;AAClB;AACJ,iBAAA;;;ACdD;;AAEG;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { numberAttribute, computed, signal, inject, DestroyRef, input, booleanAttribute, Directive, ElementRef, model, output, effect, untracked, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@radix-ng/primitives/core';
|
|
4
|
-
import { createContext, clamp, getActiveElement, injectControlValueAccessor, injectId, createCancelableChangeEventDetails, RdxControlValueAccessor } from '@radix-ng/primitives/core';
|
|
4
|
+
import { createContext, clamp, getActiveElement, RdxFormUiControlBase, injectControlValueAccessor, injectId, createCancelableChangeEventDetails, RdxControlValueAccessor } from '@radix-ng/primitives/core';
|
|
5
5
|
import { NumberFormatter, NumberParser } from '@internationalized/number';
|
|
6
6
|
import * as i1$1 from '@radix-ng/primitives/portal';
|
|
7
7
|
import { RdxPortal } from '@radix-ng/primitives/portal';
|
|
@@ -284,7 +284,7 @@ class RdxNumberFieldButton {
|
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
286
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxNumberFieldButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
287
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxNumberFieldButton, isStandalone: true, inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "tabindex": "-1" }, listeners: { "click": "onClick($event)", "pointerdown": "onPointerDown($event)", "contextmenu": "$event.preventDefault()" }, properties: { "attr.aria-controls": "rootContext.id()", "attr.
|
|
287
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxNumberFieldButton, isStandalone: true, inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "tabindex": "-1" }, listeners: { "click": "onClick($event)", "pointerdown": "onPointerDown($event)", "contextmenu": "$event.preventDefault()" }, properties: { "attr.aria-controls": "rootContext.id()", "attr.disabled": "interactionDisabled() ? \"\" : undefined", "attr.data-disabled": "buttonDisabled() ? \"\" : undefined", "attr.data-readonly": "rootContext.readonly() ? \"\" : undefined", "attr.data-pressed": "press.isPressing() ? \"\" : undefined", "style.user-select": "\"none\"", "style.-webkit-user-select": "\"none\"" } }, ngImport: i0 }); }
|
|
288
288
|
}
|
|
289
289
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxNumberFieldButton, decorators: [{
|
|
290
290
|
type: Directive,
|
|
@@ -293,9 +293,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
293
293
|
type: 'button',
|
|
294
294
|
tabindex: '-1',
|
|
295
295
|
'[attr.aria-controls]': 'rootContext.id()',
|
|
296
|
-
|
|
297
|
-
|
|
296
|
+
// Read-only blocks interaction too, so the button is natively disabled (Base UI passes
|
|
297
|
+
// `disabled: disabled || readOnly` to useButton). `aria-readonly` is intentionally NOT set —
|
|
298
|
+
// it isn't a valid state for `role=button`. `data-disabled` stays tied to the true disabled
|
|
299
|
+
// state so styling can tell disabled apart from read-only (`data-readonly`).
|
|
300
|
+
'[attr.disabled]': 'interactionDisabled() ? "" : undefined',
|
|
298
301
|
'[attr.data-disabled]': 'buttonDisabled() ? "" : undefined',
|
|
302
|
+
'[attr.data-readonly]': 'rootContext.readonly() ? "" : undefined',
|
|
299
303
|
'[attr.data-pressed]': 'press.isPressing() ? "" : undefined',
|
|
300
304
|
'[style.user-select]': '"none"',
|
|
301
305
|
'[style.-webkit-user-select]': '"none"',
|
|
@@ -585,7 +589,7 @@ class RdxNumberFieldInput {
|
|
|
585
589
|
});
|
|
586
590
|
}
|
|
587
591
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxNumberFieldInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
588
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxNumberFieldInput, isStandalone: true, selector: "input[rdxNumberFieldInput]", host: { attributes: { "type": "text", "autocomplete": "off", "autocorrect": "off", "spellcheck": "false", "aria-roledescription": "Number field" }, listeners: { "focus": "onFocus($event)", "blur": "onBlur($event)", "input": "onInput($event)", "beforeinput": "onBeforeInput($event)", "keydown": "onKeydown($event)", "paste": "onPaste($event)", "wheel": "onWheel($event)" }, properties: { "id": "rootContext.id()", "value": "rootContext.inputValue()", "attr.inputmode": "rootContext.inputMode()", "attr.aria-invalid": "rootContext.required() && rootContext.currentValue() === null ? \"true\" : undefined", "disabled": "rootContext.isDisabled()", "attr.readonly": "rootContext.readonly() ? \"\" : undefined", "required": "rootContext.required()", "attr.data-disabled": "rootContext.isDisabled() ? \"\" : undefined", "attr.data-readonly": "rootContext.readonly() ? \"\" : undefined", "attr.data-required": "rootContext.required() ? \"\" : undefined" } }, exportAs: ["rdxNumberFieldInput"], ngImport: i0 }); }
|
|
592
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxNumberFieldInput, isStandalone: true, selector: "input[rdxNumberFieldInput]", host: { attributes: { "type": "text", "autocomplete": "off", "autocorrect": "off", "spellcheck": "false", "aria-roledescription": "Number field" }, listeners: { "focus": "onFocus($event)", "blur": "onBlur($event)", "input": "onInput($event)", "beforeinput": "onBeforeInput($event)", "keydown": "onKeydown($event)", "paste": "onPaste($event)", "wheel": "onWheel($event)" }, properties: { "id": "rootContext.id()", "value": "rootContext.inputValue()", "attr.inputmode": "rootContext.inputMode()", "attr.aria-invalid": "rootContext.displayValid() === false || (rootContext.displayValid() === true && rootContext.required() && rootContext.currentValue() === null) ? \"true\" : undefined", "disabled": "rootContext.isDisabled()", "attr.readonly": "rootContext.readonly() ? \"\" : undefined", "required": "rootContext.required()", "attr.data-disabled": "rootContext.isDisabled() ? \"\" : undefined", "attr.data-readonly": "rootContext.readonly() ? \"\" : undefined", "attr.data-required": "rootContext.required() ? \"\" : undefined", "attr.data-invalid": "rootContext.displayValid() === false ? \"\" : undefined", "attr.data-valid": "rootContext.displayValid() === true ? \"\" : undefined", "attr.data-touched": "rootContext.touchedState() ? \"\" : undefined", "attr.data-dirty": "rootContext.dirtyState() ? \"\" : undefined" } }, exportAs: ["rdxNumberFieldInput"], ngImport: i0 }); }
|
|
589
593
|
}
|
|
590
594
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxNumberFieldInput, decorators: [{
|
|
591
595
|
type: Directive,
|
|
@@ -601,13 +605,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
601
605
|
'[id]': 'rootContext.id()',
|
|
602
606
|
'[value]': 'rootContext.inputValue()',
|
|
603
607
|
'[attr.inputmode]': 'rootContext.inputMode()',
|
|
604
|
-
'
|
|
608
|
+
// Follows the field's tri-state `displayValid` (neutral → no aria-invalid); the required-empty a11y
|
|
609
|
+
// hint only fires standalone (where `displayValid` is `true`, never neutral inside a gated Field).
|
|
610
|
+
'[attr.aria-invalid]': 'rootContext.displayValid() === false || (rootContext.displayValid() === true && rootContext.required() && rootContext.currentValue() === null) ? "true" : undefined',
|
|
605
611
|
'[disabled]': 'rootContext.isDisabled()',
|
|
606
612
|
'[attr.readonly]': 'rootContext.readonly() ? "" : undefined',
|
|
607
613
|
'[required]': 'rootContext.required()',
|
|
608
614
|
'[attr.data-disabled]': 'rootContext.isDisabled() ? "" : undefined',
|
|
609
615
|
'[attr.data-readonly]': 'rootContext.readonly() ? "" : undefined',
|
|
610
616
|
'[attr.data-required]': 'rootContext.required() ? "" : undefined',
|
|
617
|
+
'[attr.data-invalid]': 'rootContext.displayValid() === false ? "" : undefined',
|
|
618
|
+
'[attr.data-valid]': 'rootContext.displayValid() === true ? "" : undefined',
|
|
619
|
+
'[attr.data-touched]': 'rootContext.touchedState() ? "" : undefined',
|
|
620
|
+
'[attr.data-dirty]': 'rootContext.dirtyState() ? "" : undefined',
|
|
611
621
|
'(focus)': 'onFocus($event)',
|
|
612
622
|
'(blur)': 'onBlur($event)',
|
|
613
623
|
'(input)': 'onInput($event)',
|
|
@@ -646,8 +656,9 @@ const INPUT_REASONS = [
|
|
|
646
656
|
*
|
|
647
657
|
* @see https://base-ui.com/react/components/number-field
|
|
648
658
|
*/
|
|
649
|
-
class RdxNumberFieldRoot {
|
|
659
|
+
class RdxNumberFieldRoot extends RdxFormUiControlBase {
|
|
650
660
|
constructor() {
|
|
661
|
+
super();
|
|
651
662
|
/** @ignore */
|
|
652
663
|
this.cva = injectControlValueAccessor();
|
|
653
664
|
/** The id of the input element. */
|
|
@@ -749,6 +760,12 @@ class RdxNumberFieldRoot {
|
|
|
749
760
|
/** @ignore */
|
|
750
761
|
this.isDisabled = computed(() => !!this.cva.disabled(), /* @ts-ignore */
|
|
751
762
|
...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
763
|
+
/** @ignore */
|
|
764
|
+
this.invalidState = this.formUi.invalidState;
|
|
765
|
+
/** @ignore */
|
|
766
|
+
this.touchedState = this.formUi.touchedState;
|
|
767
|
+
/** @ignore */
|
|
768
|
+
this.dirtyState = this.formUi.dirtyState;
|
|
752
769
|
this.formatter = useNumberFormatter(this.locale, this.format);
|
|
753
770
|
this.parser = useNumberParser(this.locale, this.format);
|
|
754
771
|
/** @ignore The current numeric value (`null` when empty). */
|
|
@@ -836,9 +853,16 @@ class RdxNumberFieldRoot {
|
|
|
836
853
|
setInputValue(text) {
|
|
837
854
|
this.inputValue.set(text);
|
|
838
855
|
}
|
|
839
|
-
/**
|
|
856
|
+
/**
|
|
857
|
+
* @ignore Mark the field touched — CVA for Reactive forms, plus the `touched` model + `touch`
|
|
858
|
+
* output for Signal Forms.
|
|
859
|
+
*/
|
|
840
860
|
markAsTouched() {
|
|
841
|
-
this.
|
|
861
|
+
this.formUi.markAsTouched();
|
|
862
|
+
}
|
|
863
|
+
/** @ignore Bridge the CVA into `markAsTouched` (dual). */
|
|
864
|
+
formUiTouchTarget() {
|
|
865
|
+
return injectControlValueAccessor();
|
|
842
866
|
}
|
|
843
867
|
/**
|
|
844
868
|
* @ignore
|
|
@@ -898,9 +922,10 @@ class RdxNumberFieldRoot {
|
|
|
898
922
|
applyValue(value) {
|
|
899
923
|
this.value.set(value);
|
|
900
924
|
this.cva.setValue(value);
|
|
925
|
+
this.formUi.markDirty();
|
|
901
926
|
}
|
|
902
927
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxNumberFieldRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
903
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxNumberFieldRoot, isStandalone: true, selector: "div[rdxNumberFieldRoot]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, smallStep: { classPropertyName: "smallStep", publicName: "smallStep", isSignal: true, isRequired: false, transformFunction: null }, largeStep: { classPropertyName: "largeStep", publicName: "largeStep", isSignal: true, isRequired: false, transformFunction: null }, snapOnStep: { classPropertyName: "snapOnStep", publicName: "snapOnStep", isSignal: true, isRequired: false, transformFunction: null }, allowOutOfRange: { classPropertyName: "allowOutOfRange", publicName: "allowOutOfRange", isSignal: true, isRequired: false, transformFunction: null }, allowWheelScrub: { classPropertyName: "allowWheelScrub", publicName: "allowWheelScrub", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onValueChange: "onValueChange", onValueCommitted: "onValueCommitted" }, host: { attributes: { "role": "group" }, properties: { "attr.data-disabled": "isDisabled() ? \"\" : undefined", "attr.data-readonly": "readonly() ? \"\" : undefined", "attr.data-required": "required() ? \"\" : undefined", "attr.data-scrubbing": "isScrubbing() ? \"\" : undefined" } }, providers: [provideNumberFieldRootContext(() => inject(RdxNumberFieldRoot))], exportAs: ["rdxNumberFieldRoot"], hostDirectives: [{ directive: i1.RdxControlValueAccessor, inputs: ["value", "value", "disabled", "disabled"] }], ngImport: i0 }); }
|
|
928
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxNumberFieldRoot, isStandalone: true, selector: "div[rdxNumberFieldRoot]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, smallStep: { classPropertyName: "smallStep", publicName: "smallStep", isSignal: true, isRequired: false, transformFunction: null }, largeStep: { classPropertyName: "largeStep", publicName: "largeStep", isSignal: true, isRequired: false, transformFunction: null }, snapOnStep: { classPropertyName: "snapOnStep", publicName: "snapOnStep", isSignal: true, isRequired: false, transformFunction: null }, allowOutOfRange: { classPropertyName: "allowOutOfRange", publicName: "allowOutOfRange", isSignal: true, isRequired: false, transformFunction: null }, allowWheelScrub: { classPropertyName: "allowWheelScrub", publicName: "allowWheelScrub", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onValueChange: "onValueChange", onValueCommitted: "onValueCommitted" }, host: { attributes: { "role": "group" }, properties: { "attr.data-disabled": "isDisabled() ? \"\" : undefined", "attr.data-readonly": "readonly() ? \"\" : undefined", "attr.data-required": "required() ? \"\" : undefined", "attr.data-invalid": "displayValid() === false ? \"\" : undefined", "attr.data-valid": "displayValid() === true ? \"\" : undefined", "attr.data-touched": "touchedState() ? \"\" : undefined", "attr.data-dirty": "dirtyState() ? \"\" : undefined", "attr.data-scrubbing": "isScrubbing() ? \"\" : undefined" } }, providers: [provideNumberFieldRootContext(() => inject(RdxNumberFieldRoot))], exportAs: ["rdxNumberFieldRoot"], usesInheritance: true, hostDirectives: [{ directive: i1.RdxControlValueAccessor, inputs: ["value", "value", "disabled", "disabled"] }], ngImport: i0 }); }
|
|
904
929
|
}
|
|
905
930
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxNumberFieldRoot, decorators: [{
|
|
906
931
|
type: Directive,
|
|
@@ -919,6 +944,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
919
944
|
'[attr.data-disabled]': 'isDisabled() ? "" : undefined',
|
|
920
945
|
'[attr.data-readonly]': 'readonly() ? "" : undefined',
|
|
921
946
|
'[attr.data-required]': 'required() ? "" : undefined',
|
|
947
|
+
'[attr.data-invalid]': 'displayValid() === false ? "" : undefined',
|
|
948
|
+
'[attr.data-valid]': 'displayValid() === true ? "" : undefined',
|
|
949
|
+
'[attr.data-touched]': 'touchedState() ? "" : undefined',
|
|
950
|
+
'[attr.data-dirty]': 'dirtyState() ? "" : undefined',
|
|
922
951
|
'[attr.data-scrubbing]': 'isScrubbing() ? "" : undefined'
|
|
923
952
|
}
|
|
924
953
|
}]
|