@radix-ng/primitives 1.0.0-beta.1 → 1.0.0-beta.2
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/fesm2022/radix-ng-primitives-accordion.mjs +2 -2
- package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-calendar.mjs +14 -1
- package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +2 -2
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-combobox.mjs +1923 -0
- package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-context-menu.mjs +1 -1
- package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +480 -469
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-cropper.mjs +1 -1
- package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +11 -0
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-dialog.mjs +1 -1
- package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-drawer.mjs +1 -1
- package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +86 -6
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-fieldset.mjs +1 -1
- package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-form.mjs +207 -0
- package/fesm2022/radix-ng-primitives-form.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-input.mjs +85 -4
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +4 -4
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1 -1
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +2 -2
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-preview-card.mjs +1 -1
- package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +3 -3
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +421 -224
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +3 -2
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +27 -3
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toast.mjs +1 -1
- package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toolbar.mjs +2 -2
- package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tooltip.mjs +2 -2
- package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
- package/package.json +9 -1
- package/schematics/ng-add/index.js +57 -0
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.d.ts +1 -0
- package/schematics/ng-add/schema.json +6 -0
- package/types/radix-ng-primitives-combobox.d.ts +1265 -0
- package/types/radix-ng-primitives-core.d.ts +148 -56
- package/types/radix-ng-primitives-field.d.ts +71 -2
- package/types/radix-ng-primitives-form.d.ts +124 -0
- package/types/radix-ng-primitives-input.d.ts +75 -5
- package/types/radix-ng-primitives-select.d.ts +292 -132
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-number-field.mjs","sources":["../../../packages/primitives/number-field/src/number-field-context.ts","../../../packages/primitives/number-field/src/number-field.utils.ts","../../../packages/primitives/number-field/src/number-field-button.ts","../../../packages/primitives/number-field/src/number-field-decrement.ts","../../../packages/primitives/number-field/src/number-field-group.ts","../../../packages/primitives/number-field/src/number-field-hidden-input.ts","../../../packages/primitives/number-field/src/number-field-increment.ts","../../../packages/primitives/number-field/src/number-field-input.ts","../../../packages/primitives/number-field/src/types.ts","../../../packages/primitives/number-field/src/number-field-root.ts","../../../packages/primitives/number-field/src/number-field-scrub-area-context.ts","../../../packages/primitives/number-field/src/number-field-scrub-area.ts","../../../packages/primitives/number-field/src/number-field-scrub-area-cursor.ts","../../../packages/primitives/number-field/index.ts","../../../packages/primitives/number-field/radix-ng-primitives-number-field.ts"],"sourcesContent":["import { createContext } from '@radix-ng/primitives/core';\nimport type { RdxNumberFieldRoot } from './number-field-root';\n\n/**\n * The Number Field context exposes the root directive instance to every child part.\n * The root owns all state, parsing/formatting and value-change logic; parts read\n * signals and call methods off it.\n *\n * @see https://base-ui.com/react/components/number-field\n */\nexport const [injectNumberFieldRootContext, provideNumberFieldRootContext] =\n createContext<RdxNumberFieldRoot>('RdxNumberFieldRootContext');\n","import { computed, DestroyRef, inject, numberAttribute, signal, Signal } from '@angular/core';\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\nimport { clamp, NumberInput } from '@radix-ng/primitives/core';\n\n/**\n * Coerces an optional numeric input, returning `undefined` for nullish/empty/non-numeric values.\n * Unlike `numberAttribute`, `numberOrUndefined(undefined)` is `undefined` (not `NaN`), so an unset\n * `[min]`/`[max]` does not poison clamping.\n */\nexport function numberOrUndefined(value: NumberInput): number | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n const parsed = numberAttribute(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n}\n\n/** Default step used when no `step` is provided. */\nexport const DEFAULT_STEP = 1;\n/** Delay between auto-repeat ticks while holding an increment/decrement button. */\nexport const CHANGE_VALUE_TICK_DELAY = 60;\n/** Delay before auto-repeat starts while holding an increment/decrement button. */\nexport const START_AUTO_CHANGE_DELAY = 400;\n/** Pointer travel (px) that cancels a hold, treating the gesture as a scroll. */\nexport const SCROLLING_POINTER_MOVE_DISTANCE = 8;\n\nconst STEP_EPSILON_FACTOR = 1e-10;\n// Matches Intl.NumberFormat's decimal maximumFractionDigits default.\nconst DEFAULT_DIGITS = 3;\n\n/** Reactive `Intl`-backed formatter built from the current locale and format options. */\nexport function useNumberFormatter(\n locale: Signal<string>,\n options: Signal<Intl.NumberFormatOptions | undefined> = signal({})\n): Signal<NumberFormatter> {\n return computed(() => new NumberFormatter(locale(), options() ?? {}));\n}\n\n/** Reactive `Intl`-backed parser built from the current locale and format options. */\nexport function useNumberParser(\n locale: Signal<string>,\n options: Signal<Intl.NumberFormatOptions | undefined> = signal({})\n): Signal<NumberParser> {\n return computed(() => new NumberParser(locale(), options() ?? {}));\n}\n\n/** Whether the format options would cause `Intl.NumberFormat` to round the value. */\nexport function hasNumberFormatRoundingOptions(format?: Intl.NumberFormatOptions): boolean {\n const opts = format as (Intl.NumberFormatOptions & Record<string, unknown>) | undefined;\n return !!(\n opts &&\n (opts.maximumFractionDigits != null ||\n opts.minimumFractionDigits != null ||\n opts.maximumSignificantDigits != null ||\n opts.minimumSignificantDigits != null ||\n opts['roundingIncrement'] != null ||\n opts['roundingMode'] != null ||\n opts['roundingPriority'] != null)\n );\n}\n\n/**\n * Strips floating-point representation errors (e.g. `0.1 + 0.2`) using the format's\n * rounding options when present, otherwise rounding to {@link DEFAULT_DIGITS} digits.\n */\nexport function removeFloatingPointErrors(value: number, locale: string, format?: Intl.NumberFormatOptions): number {\n if (!Number.isFinite(value)) {\n return value;\n }\n\n if (!hasNumberFormatRoundingOptions(format)) {\n return Number(value.toFixed(DEFAULT_DIGITS));\n }\n\n const formatter = new NumberFormatter('en-US', {\n ...format,\n // These options alter only display decoration, not numeric rounding.\n signDisplay: 'auto',\n currencySign: 'standard',\n notation: format!.notation === 'compact' ? 'standard' : format!.notation,\n useGrouping: false\n });\n const roundedText = formatter.format(value);\n const roundedValue = new NumberParser('en-US', format ?? {}).parse(roundedText);\n\n if (Number.isNaN(roundedValue)) {\n return value;\n }\n\n return formatter.format(roundedValue) === roundedText ? roundedValue : value;\n}\n\nfunction snapToStep(\n value: number,\n base: number,\n step: number,\n mode: 'directional' | 'nearest' = 'directional'\n): number {\n const stepSize = Math.abs(step);\n const direction = Math.sign(step);\n const tolerance = stepSize * STEP_EPSILON_FACTOR * direction;\n const rawSteps = value - base + tolerance;\n\n if (mode === 'nearest') {\n return base + Math.round(rawSteps / step) * step;\n }\n\n const snappedSteps = direction > 0 ? Math.floor(rawSteps / stepSize) : Math.ceil(rawSteps / stepSize);\n return base + snappedSteps * stepSize;\n}\n\nexport interface ValidateOptions {\n step: number | undefined;\n minWithDefault: number;\n maxWithDefault: number;\n minWithZeroDefault: number;\n format: Intl.NumberFormatOptions | undefined;\n locale: string;\n snapOnStep: boolean;\n small: boolean;\n clamp: boolean;\n}\n\n/**\n * Snaps (optionally), clamps (optionally) and rounds an unvalidated value, mirroring\n * Base UI's `toValidatedNumber`. Snapping happens before clamping so non-step-aligned\n * boundaries stay reachable.\n */\nexport function toValidatedNumber(value: number | null, options: ValidateOptions): number | null {\n if (value === null) {\n return value;\n }\n\n const { step, minWithDefault, maxWithDefault, minWithZeroDefault, format, locale, snapOnStep, small } = options;\n\n let nextValue = value;\n\n if (step != null && snapOnStep && step !== 0) {\n const base = small || minWithDefault === Number.MIN_SAFE_INTEGER ? minWithZeroDefault : minWithDefault;\n nextValue = snapToStep(nextValue, base, step, small ? 'nearest' : 'directional');\n }\n\n if (options.clamp) {\n nextValue = clamp(nextValue, minWithDefault, maxWithDefault);\n }\n\n const roundedValue = removeFloatingPointErrors(nextValue, locale, format);\n return options.clamp ? clamp(roundedValue, minWithDefault, maxWithDefault) : roundedValue;\n}\n\nexport interface PressAndHoldOptions {\n /** Whether interaction is currently blocked (disabled or read-only). */\n disabled: () => boolean;\n /** Delay before the first auto-repeat tick. */\n startDelay: number;\n /** Delay between subsequent auto-repeat ticks. */\n tickDelay: number;\n /** Pointer travel (px) that cancels the hold as a scroll. */\n scrollDistance: number;\n /** Runs on each tick; return `false` to stop auto-repeating (e.g. a bound was hit). */\n tick: (event: PointerEvent) => boolean | void;\n /** Runs once when the press ends (pointerup / cancel / scroll). */\n onStop?: (event: PointerEvent) => void;\n}\n\nexport interface PressAndHold {\n readonly isPressing: Signal<boolean>;\n onPointerDown(event: PointerEvent): void;\n /** Whether the following synthetic `click` should be ignored (a hold already ticked). */\n shouldSkipClick(): boolean;\n}\n\n/**\n * Pointer press-and-hold with auto-repeat, modelled on Base UI's `usePressAndHold`.\n * Must be called in an injection context — it registers cleanup via `DestroyRef`.\n */\nexport function createPressAndHold(options: PressAndHoldOptions): PressAndHold {\n const destroyRef = inject(DestroyRef);\n const isPressing = signal(false);\n\n let startEvent: PointerEvent | null = null;\n let startX = 0;\n let startY = 0;\n let didTick = false;\n let tickTimer: ReturnType<typeof setTimeout> | undefined;\n\n const clearTick = () => {\n if (tickTimer !== undefined) {\n clearTimeout(tickTimer);\n tickTimer = undefined;\n }\n };\n\n const scheduleTick = (delay: number) => {\n tickTimer = setTimeout(() => {\n if (options.disabled() || !startEvent) {\n stop(startEvent);\n return;\n }\n didTick = true;\n const shouldContinue = options.tick(startEvent);\n if (shouldContinue === false) {\n clearTick();\n return;\n }\n scheduleTick(options.tickDelay);\n }, delay);\n };\n\n const onPointerMove = (event: PointerEvent) => {\n // Treat a moving touch/pen gesture as a scroll and cancel the hold.\n if (startEvent && startEvent.pointerType !== 'mouse') {\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) > options.scrollDistance) {\n stop(event);\n }\n }\n };\n\n const stop = (event: PointerEvent | null) => {\n if (!isPressing()) {\n return;\n }\n clearTick();\n window.removeEventListener('pointerup', stop, true);\n window.removeEventListener('pointercancel', stop, true);\n window.removeEventListener('pointermove', onPointerMove, true);\n isPressing.set(false);\n if (event) {\n options.onStop?.(event);\n }\n };\n\n destroyRef.onDestroy(() => stop(null));\n\n return {\n isPressing: isPressing.asReadonly(),\n shouldSkipClick: () => didTick,\n onPointerDown(event: PointerEvent) {\n if (options.disabled() || isPressing()) {\n return;\n }\n startEvent = event;\n startX = event.clientX;\n startY = event.clientY;\n didTick = false;\n isPressing.set(true);\n window.addEventListener('pointerup', stop, true);\n window.addEventListener('pointercancel', stop, true);\n window.addEventListener('pointermove', onPointerMove, true);\n scheduleTick(options.startDelay);\n }\n };\n}\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\nimport { BooleanInput } from '@radix-ng/primitives/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\nimport {\n CHANGE_VALUE_TICK_DELAY,\n createPressAndHold,\n PressAndHold,\n SCROLLING_POINTER_MOVE_DISTANCE,\n START_AUTO_CHANGE_DELAY\n} from './number-field.utils';\nimport { Direction, NumberFieldChangeReason } from './types';\n\n// Treat pen as touch-like to avoid forcing the software keyboard on stylus taps.\nfunction isTouchLikePointerType(pointerType: string): boolean {\n return pointerType === 'touch' || pointerType === 'pen';\n}\n\n/**\n * Shared behaviour for the increment and decrement stepper buttons: single-press,\n * press-and-hold auto-repeat, and committing a dirty (typed-but-not-blurred) input\n * value before stepping.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n host: {\n type: 'button',\n tabindex: '-1',\n '[attr.aria-controls]': 'rootContext.id()',\n '[attr.aria-readonly]': 'rootContext.readonly() ? \"true\" : undefined',\n '[attr.disabled]': 'buttonDisabled() ? \"\" : undefined',\n '[attr.data-disabled]': 'buttonDisabled() ? \"\" : undefined',\n '[attr.data-pressed]': 'press.isPressing() ? \"\" : undefined',\n '[style.user-select]': '\"none\"',\n '[style.-webkit-user-select]': '\"none\"',\n '(click)': 'onClick($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(contextmenu)': '$event.preventDefault()'\n }\n})\nexport abstract class RdxNumberFieldButton {\n protected readonly rootContext = injectNumberFieldRootContext();\n\n /** Whether this is the increment (`+1`) button; `false` for decrement (`-1`). */\n protected abstract readonly isIncrement: boolean;\n\n /**\n * When `true`, the button is disabled in addition to inheriting the root's disabled state.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** @ignore Disabled for display/focus purposes (own state, root disabled, or bound reached). */\n readonly buttonDisabled = computed(\n () =>\n this.disabled() ||\n this.rootContext.isDisabled() ||\n (this.isIncrement ? this.rootContext.isIncrementDisabled() : this.rootContext.isDecrementDisabled())\n );\n\n /** @ignore Disabled for interaction purposes (also blocked while read-only). */\n private readonly interactionDisabled = computed(() => this.buttonDisabled() || this.rootContext.readonly());\n\n private get direction(): Direction {\n return this.isIncrement ? 1 : -1;\n }\n\n private get pressReason(): NumberFieldChangeReason {\n return this.isIncrement ? 'increment-press' : 'decrement-press';\n }\n\n /** @ignore */\n readonly press: PressAndHold;\n\n constructor() {\n const root = this.rootContext;\n this.press = createPressAndHold({\n disabled: () => this.interactionDisabled(),\n startDelay: START_AUTO_CHANGE_DELAY,\n tickDelay: CHANGE_VALUE_TICK_DELAY,\n scrollDistance: SCROLLING_POINTER_MOVE_DISTANCE,\n tick: (event) => {\n const amount = root.getStepAmount(event);\n return root.incrementValue(amount, {\n direction: this.direction,\n event,\n reason: this.pressReason\n });\n },\n onStop: () => root.commitValue(root.lastChangedValue ?? root.currentValue())\n });\n }\n\n onClick(event: MouseEvent): void {\n if (event.defaultPrevented || this.interactionDisabled() || this.press.shouldSkipClick()) {\n return;\n }\n\n this.commitDirtyValue(event);\n\n const amount = this.rootContext.getStepAmount(event);\n const prev = this.rootContext.currentValue();\n this.rootContext.incrementValue(amount, {\n direction: this.direction,\n event,\n reason: this.pressReason\n });\n\n const committed = this.rootContext.lastChangedValue ?? this.rootContext.currentValue();\n if (committed !== prev) {\n this.rootContext.commitValue(committed);\n }\n }\n\n onPointerDown(event: PointerEvent): void {\n const isMainButton = !event.button || event.button === 0;\n if (event.defaultPrevented || this.rootContext.readonly() || !isMainButton || this.buttonDisabled()) {\n return;\n }\n\n // Sync the dirty input value before starting the hold sequence.\n this.commitDirtyValue(event);\n\n if (!isTouchLikePointerType(event.pointerType)) {\n // Focus the input so the user can continue with the keyboard.\n this.rootContext.inputEl()?.focus();\n }\n\n this.press.onPointerDown(event);\n }\n\n /** Commits a typed-but-not-yet-blurred input value so stepping starts from it. */\n private commitDirtyValue(event: Event): void {\n const root = this.rootContext;\n root.allowInputSync = true;\n const parsed = root.parseNumber(root.inputValue());\n if (parsed !== null) {\n root.setValue(parsed, this.pressReason, event, this.direction);\n }\n }\n}\n","import { Directive } from '@angular/core';\nimport { RdxNumberFieldButton } from './number-field-button';\n\n/**\n * A stepper button that decreases the field value when clicked or held.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'button[rdxNumberFieldDecrement]',\n exportAs: 'rdxNumberFieldDecrement',\n host: {\n 'aria-label': 'Decrease'\n }\n})\nexport class RdxNumberFieldDecrement extends RdxNumberFieldButton {\n protected readonly isIncrement = false;\n}\n","import { Directive } from '@angular/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\n\n/**\n * Groups the input with the increment and decrement buttons.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'div[rdxNumberFieldGroup]',\n exportAs: 'rdxNumberFieldGroup',\n host: {\n role: 'group',\n '[attr.data-disabled]': 'rootContext.isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-required]': 'rootContext.required() ? \"\" : undefined',\n '[attr.data-scrubbing]': 'rootContext.isScrubbing() ? \"\" : undefined'\n }\n})\nexport class RdxNumberFieldGroup {\n protected readonly rootContext = injectNumberFieldRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\n\n/**\n * The hidden native `input[type=number]` that mirrors the field value for native form submission\n * and browser constraint validation (min/max/step/required). Place it inside the root, alongside\n * the visible `[rdxNumberFieldInput]`.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'input[rdxNumberFieldHiddenInput]',\n exportAs: 'rdxNumberFieldHiddenInput',\n host: {\n type: 'number',\n tabindex: '-1',\n 'aria-hidden': 'true',\n '[attr.name]': 'rootContext.name()',\n '[attr.form]': 'rootContext.form()',\n '[value]': 'rootContext.currentValue() ?? \"\"',\n '[attr.min]': 'rootContext.min()',\n '[attr.max]': 'rootContext.max()',\n '[attr.step]': 'rootContext.step()',\n '[disabled]': 'rootContext.isDisabled()',\n '[attr.required]': 'rootContext.required() ? \"\" : undefined',\n style: 'transform: translateX(-100%); position: absolute; overflow: hidden; pointer-events: none; opacity: 0; margin: 0;',\n '(focus)': 'onFocus()',\n '(change)': 'onChange($event)'\n }\n})\nexport class RdxNumberFieldHiddenInput {\n protected readonly rootContext = injectNumberFieldRootContext();\n\n /** Move focus to the visible input when the hidden one is focused (e.g. via form validation). */\n onFocus(): void {\n this.rootContext.inputEl()?.focus();\n }\n\n /** Handle browser autofill, which writes directly to the hidden numeric input. */\n onChange(event: Event): void {\n const root = this.rootContext;\n if (root.isDisabled() || root.readonly()) {\n return;\n }\n\n const nextValue = (event.target as HTMLInputElement).valueAsNumber;\n const parsedValue = Number.isNaN(nextValue) ? null : nextValue;\n\n root.allowInputSync = true;\n root.setValue(parsedValue, 'none', event);\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n }\n}\n","import { Directive } from '@angular/core';\nimport { RdxNumberFieldButton } from './number-field-button';\n\n/**\n * A stepper button that increases the field value when clicked or held.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'button[rdxNumberFieldIncrement]',\n exportAs: 'rdxNumberFieldIncrement',\n host: {\n 'aria-label': 'Increase'\n }\n})\nexport class RdxNumberFieldIncrement extends RdxNumberFieldButton {\n protected readonly isIncrement = true;\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { getActiveElement } from '@radix-ng/primitives/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\n\n/**\n * The native text input that displays the formatted value and accepts typed input.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'input[rdxNumberFieldInput]',\n exportAs: 'rdxNumberFieldInput',\n host: {\n type: 'text',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: 'false',\n 'aria-roledescription': 'Number field',\n '[id]': 'rootContext.id()',\n '[value]': 'rootContext.inputValue()',\n '[attr.inputmode]': 'rootContext.inputMode()',\n '[attr.aria-invalid]': 'rootContext.required() && rootContext.currentValue() === null ? \"true\" : undefined',\n '[disabled]': 'rootContext.isDisabled()',\n '[attr.readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[required]': 'rootContext.required()',\n '[attr.data-disabled]': 'rootContext.isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-required]': 'rootContext.required() ? \"\" : undefined',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)',\n '(input)': 'onInput($event)',\n '(beforeinput)': 'onBeforeInput($event)',\n '(keydown)': 'onKeydown($event)',\n '(paste)': 'onPaste($event)',\n '(wheel)': 'onWheel($event)'\n }\n})\nexport class RdxNumberFieldInput {\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n protected readonly rootContext = injectNumberFieldRootContext();\n\n /** Browsers place the caret at the start; we move it to the end on the first focus. */\n private hasTouchedInput = false;\n\n constructor() {\n this.rootContext.registerInput(this.elementRef.nativeElement);\n }\n\n onFocus(event: FocusEvent): void {\n const root = this.rootContext;\n if (root.readonly() || root.isDisabled() || this.hasTouchedInput) {\n return;\n }\n this.hasTouchedInput = true;\n const target = event.target as HTMLInputElement;\n const length = target.value.length;\n target.setSelectionRange(length, length);\n }\n\n onBeforeInput(event: InputEvent): void {\n // Only validate insertions; deletions and composition have `data === null`.\n if (event.data == null) {\n return;\n }\n const target = event.target as HTMLInputElement;\n const nextValue =\n target.value.slice(0, target.selectionStart ?? undefined) +\n event.data +\n target.value.slice(target.selectionEnd ?? undefined);\n\n if (!this.rootContext.isValidPartial(nextValue)) {\n event.preventDefault();\n }\n }\n\n onInput(event: Event): void {\n const root = this.rootContext;\n const targetValue = (event.target as HTMLInputElement).value;\n\n root.allowInputSync = false;\n\n if (targetValue.trim() === '') {\n root.setInputValue(targetValue);\n root.setValue(null, 'input-clear', event);\n return;\n }\n\n const parsedValue = root.parseNumber(targetValue);\n root.setInputValue(targetValue);\n\n if (parsedValue !== null) {\n root.setValue(parsedValue, 'input-change', event);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n const root = this.rootContext;\n if (root.readonly() || root.isDisabled()) {\n return;\n }\n\n root.allowInputSync = true;\n const key = event.key;\n\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n event.preventDefault();\n const parsed = root.parseNumber(root.inputValue());\n const amount = root.getStepAmount(event);\n root.incrementValue(amount, {\n direction: key === 'ArrowUp' ? 1 : -1,\n currentValue: parsed,\n event,\n reason: 'keyboard'\n });\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n } else if (key === 'Home' && root.min() != null) {\n event.preventDefault();\n root.setValue(root.min()!, 'keyboard', event);\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n } else if (key === 'End' && root.max() != null) {\n event.preventDefault();\n root.setValue(root.max()!, 'keyboard', event);\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n }\n }\n\n onPaste(event: ClipboardEvent): void {\n const root = this.rootContext;\n if (root.readonly() || root.isDisabled()) {\n return;\n }\n\n const pastedData = event.clipboardData?.getData('text/plain') ?? '';\n // Prevent the subsequent `input` event from also handling the paste.\n event.preventDefault();\n\n const parsedValue = root.parseNumber(pastedData);\n if (parsedValue !== null) {\n root.allowInputSync = false;\n root.setValue(parsedValue, 'input-paste', event);\n root.setInputValue(pastedData);\n }\n }\n\n onBlur(event: FocusEvent): void {\n const root = this.rootContext;\n if (root.readonly() || root.isDisabled()) {\n return;\n }\n\n root.markAsTouched();\n\n const hadManualInput = !root.allowInputSync;\n const hadPendingCommit = root.hasPendingCommit;\n root.allowInputSync = true;\n\n const text = root.inputValue();\n\n if (text.trim() === '') {\n root.setValue(null, 'input-clear', event);\n root.commitValue(null);\n return;\n }\n\n const parsedValue = root.parseNumber(text);\n if (parsedValue === null) {\n return;\n }\n\n const value = root.currentValue();\n const shouldUpdate = value !== parsedValue;\n const shouldCommit = hadManualInput || shouldUpdate || hadPendingCommit;\n\n let committedValue = parsedValue;\n if (shouldUpdate) {\n root.setValue(parsedValue, 'input-blur', event);\n committedValue = root.lastChangedValue ?? parsedValue;\n }\n\n if (shouldCommit) {\n root.commitValue(committedValue);\n }\n\n const canonicalText = root.formatNumber(committedValue);\n if (root.inputValue() !== canonicalText) {\n root.setInputValue(canonicalText);\n }\n }\n\n onWheel(event: WheelEvent): void {\n const root = this.rootContext;\n if (!root.allowWheelScrub() || root.isDisabled() || root.readonly()) {\n return;\n }\n // Allow pinch-zoom and only scrub while focused.\n if (event.ctrlKey || getActiveElement() !== this.elementRef.nativeElement) {\n return;\n }\n\n event.preventDefault();\n root.allowInputSync = true;\n const amount = root.getStepAmount(event);\n root.incrementValue(amount, {\n direction: event.deltaY > 0 ? -1 : 1,\n event,\n reason: 'wheel'\n });\n }\n}\n","/**\n * The software keyboard hint shown on touch devices, mapped to the input's `inputmode` attribute.\n */\nexport type InputMode = 'numeric' | 'decimal' | 'text';\n\n/**\n * Direction of a step-based value change (`1` to increase, `-1` to decrease).\n */\nexport type Direction = 1 | -1;\n\n/**\n * Why a value change happened. Mirrors Base UI's change reasons and is used\n * internally to decide whether a change should be clamped (step interactions\n * always clamp; direct text entry may go out of range when `allowOutOfRange`).\n *\n * @see https://base-ui.com/react/components/number-field\n */\nexport type NumberFieldChangeReason =\n | 'input-change'\n | 'input-clear'\n | 'input-blur'\n | 'input-paste'\n | 'keyboard'\n | 'increment-press'\n | 'decrement-press'\n | 'wheel'\n | 'scrub'\n | 'none';\n\nexport const REASONS = {\n inputChange: 'input-change',\n inputClear: 'input-clear',\n inputBlur: 'input-blur',\n inputPaste: 'input-paste',\n keyboard: 'keyboard',\n incrementPress: 'increment-press',\n decrementPress: 'decrement-press',\n wheel: 'wheel',\n scrub: 'scrub',\n none: 'none'\n} as const;\n","import {\n booleanAttribute,\n computed,\n Directive,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport {\n BooleanInput,\n injectControlValueAccessor,\n injectId,\n NumberInput,\n RdxControlValueAccessor,\n RdxFormValueControl\n} from '@radix-ng/primitives/core';\nimport { provideNumberFieldRootContext } from './number-field-context';\nimport { numberOrUndefined, toValidatedNumber, useNumberFormatter, useNumberParser } from './number-field.utils';\nimport { Direction, InputMode, NumberFieldChangeReason, REASONS } from './types';\n\nconst INPUT_REASONS: NumberFieldChangeReason[] = [\n REASONS.inputChange,\n REASONS.inputClear,\n REASONS.inputBlur,\n REASONS.inputPaste,\n REASONS.none\n];\n\n/**\n * Groups all parts of the number field and manages its state, parsing/formatting\n * and value-change logic. A single directive drives the whole family — parts read\n * signals and call methods off it through the root context.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'div[rdxNumberFieldRoot]',\n exportAs: 'rdxNumberFieldRoot',\n providers: [provideNumberFieldRootContext(() => inject(RdxNumberFieldRoot))],\n hostDirectives: [\n {\n directive: RdxControlValueAccessor,\n inputs: ['value: value', 'disabled']\n }\n ],\n host: {\n role: 'group',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'readonly() ? \"\" : undefined',\n '[attr.data-required]': 'required() ? \"\" : undefined',\n '[attr.data-scrubbing]': 'isScrubbing() ? \"\" : undefined'\n }\n})\nexport class RdxNumberFieldRoot implements RdxFormValueControl<number | null> {\n /** @ignore */\n protected readonly cva = injectControlValueAccessor<number | null>();\n\n /** The id of the input element. */\n readonly id = input<string>(injectId('rdx-number-field-'));\n\n /** The minimum value of the field. */\n readonly min = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n /** The maximum value of the field. */\n readonly max = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n /**\n * Amount to increment and decrement with the buttons, arrow keys and scrub area.\n * @default 1\n */\n readonly step = input<number, NumberInput>(1, { transform: numberAttribute });\n\n /**\n * The step used when incrementing while the Alt key is held. Snaps to multiples of this value.\n * @default 0.1\n */\n readonly smallStep = input<number, NumberInput>(0.1, { transform: numberAttribute });\n\n /**\n * The step used when incrementing while the Shift key is held. Snaps to multiples of this value.\n * @default 10\n */\n readonly largeStep = input<number, NumberInput>(10, { transform: numberAttribute });\n\n /**\n * Whether the value should snap to the nearest step when incrementing or decrementing.\n * @default false\n */\n readonly snapOnStep = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, direct text entry may go outside the `min`/`max` range without clamping.\n * Step interactions (arrow keys, buttons, wheel, scrub) still clamp.\n * @default false\n */\n readonly allowOutOfRange = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the value can be changed with the mouse wheel while the input is focused.\n * @default false\n */\n readonly allowWheelScrub = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Options used to format the input value (forwarded to `Intl.NumberFormat`). */\n readonly format = input<Intl.NumberFormatOptions>();\n\n /** The locale used to parse and format the value. */\n readonly locale = input<string>('en');\n\n /**\n * When `true`, the user cannot interact with the field.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the field is focusable but its value cannot be changed.\n * @default false\n */\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the user must enter a value before the owning form can be submitted.\n * @default false\n */\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Name of the hidden input rendered by `[rdxNumberFieldHiddenInput]`, for form submission. */\n readonly name = input<string>();\n\n /** Id of the form the hidden input belongs to. Useful when it is rendered outside the form. */\n readonly form = input<string>();\n\n /** The uncontrolled value of the field when it is initially rendered. */\n readonly defaultValue = input<number>();\n\n /** The controlled value of the field. Use with `(onValueChange)` or two-way `[(value)]`. */\n readonly value = model<number | null>(null);\n\n /** Emitted when the value changes (during interaction or programmatically). */\n readonly onValueChange = output<number | null>();\n\n /**\n * Emitted when the value is committed: on blur after typing, or when a pointer is released\n * after scrubbing or pressing a button. Fires together with `onValueChange` for keyboard input.\n */\n readonly onValueCommitted = output<number | null>();\n\n /** @ignore The formatted text shown in the input element. */\n readonly inputValue = signal('');\n\n /** @ignore Whether a scrub gesture is in progress. */\n readonly isScrubbing = signal(false);\n\n /** @ignore The native input element, registered by `[rdxNumberFieldInput]`. */\n readonly inputEl = signal<HTMLInputElement | undefined>(undefined);\n\n /**\n * @ignore Gate that prevents the formatted value from overwriting in-progress typing.\n * Plain field (not a signal): it is toggled imperatively inside event handlers.\n */\n allowInputSync = true;\n /** @ignore Last value produced by `setValue`, used to report the committed value. */\n lastChangedValue: number | null = null;\n /** @ignore Whether a programmatic change is awaiting a commit. */\n hasPendingCommit = false;\n\n /** @ignore */\n readonly isDisabled = computed(() => !!this.cva.disabled());\n\n private readonly formatter = useNumberFormatter(this.locale, this.format);\n private readonly parser = useNumberParser(this.locale, this.format);\n\n /** @ignore The current numeric value (`null` when empty). */\n readonly currentValue = computed<number | null>(() => this.cva.value() ?? null);\n\n /** @ignore */\n readonly minWithDefault = computed(() => this.min() ?? Number.MIN_SAFE_INTEGER);\n /** @ignore */\n readonly maxWithDefault = computed(() => this.max() ?? Number.MAX_SAFE_INTEGER);\n /** @ignore */\n readonly minWithZeroDefault = computed(() => this.min() ?? 0);\n\n /** @ignore Whether incrementing further is a no-op (value already at max). */\n readonly isIncrementDisabled = computed(() => {\n const value = this.currentValue();\n return value != null && value >= this.maxWithDefault();\n });\n /** @ignore Whether decrementing further is a no-op (value already at min). */\n readonly isDecrementDisabled = computed(() => {\n const value = this.currentValue();\n return value != null && value <= this.minWithDefault();\n });\n\n /** @ignore Software-keyboard hint based on whether the format allows fractional digits. */\n readonly inputMode = computed<InputMode>(() => {\n const hasDecimals = (this.formatter().resolvedOptions().maximumFractionDigits ?? 0) > 0;\n return hasDecimals ? 'decimal' : 'numeric';\n });\n\n constructor() {\n // Apply the uncontrolled initial value once it is provided.\n effect(() => {\n const dv = this.defaultValue();\n if (dv !== undefined) {\n untracked(() => {\n this.value.set(dv);\n this.cva.setValue(dv);\n });\n }\n });\n\n // Keep the visible input in sync with the value whenever it changes externally or the\n // formatting options change. Skipped while the user is typing (`allowInputSync === false`).\n effect(() => {\n const formatted = this.formatNumber(this.currentValue());\n untracked(() => {\n if (this.allowInputSync && this.inputValue() !== formatted) {\n this.inputValue.set(formatted);\n }\n });\n });\n }\n\n /** @ignore Formats a numeric value to its display string (empty for `null`/`NaN`). */\n formatNumber(value: number | null): string {\n if (value === null || Number.isNaN(value)) {\n return '';\n }\n return this.formatter().format(value);\n }\n\n /** @ignore Parses a display string to a number, returning `null` when not parseable. */\n parseNumber(text: string): number | null {\n const parsed = this.parser().parse(text);\n return Number.isNaN(parsed) ? null : parsed;\n }\n\n /** @ignore Whether `text` is a valid partial number for the current locale and bounds. */\n isValidPartial(text: string): boolean {\n return this.parser().isValidPartialNumber(text, this.min(), this.max());\n }\n\n /** @ignore The step magnitude for an interaction, honouring Alt (small) and Shift (large). */\n getStepAmount(event?: { altKey?: boolean; shiftKey?: boolean }): number {\n if (event?.altKey) {\n return this.smallStep();\n }\n if (event?.shiftKey) {\n return this.largeStep();\n }\n return this.step();\n }\n\n /** @ignore Registers the native input element. */\n registerInput(el: HTMLInputElement): void {\n this.inputEl.set(el);\n }\n\n /** @ignore Sets the displayed text without changing the numeric value. */\n setInputValue(text: string): void {\n this.inputValue.set(text);\n }\n\n /** @ignore */\n markAsTouched(): void {\n this.cva.markAsTouched();\n }\n\n /**\n * @ignore\n * Validates and applies a candidate value, emitting `onValueChange` when it changes.\n * Returns whether a change was fired.\n */\n setValue(\n unvalidatedValue: number | null,\n reason: NumberFieldChangeReason,\n event?: Event,\n direction?: Direction\n ): boolean {\n const keyState = event as (Event & { altKey?: boolean; shiftKey?: boolean }) | undefined;\n // Step interactions always clamp; direct text entry may go out of range when allowed.\n const shouldClamp = !this.allowOutOfRange() || !INPUT_REASONS.includes(reason);\n\n const validatedValue = toValidatedNumber(unvalidatedValue, {\n step: direction ? this.getStepAmount(keyState) * direction : undefined,\n minWithDefault: this.minWithDefault(),\n maxWithDefault: this.maxWithDefault(),\n minWithZeroDefault: this.minWithZeroDefault(),\n format: this.format(),\n locale: this.locale(),\n snapOnStep: this.snapOnStep(),\n small: keyState?.altKey ?? false,\n clamp: shouldClamp\n });\n\n const value = this.currentValue();\n const isInputReason = INPUT_REASONS.includes(reason);\n const shouldFireChange =\n validatedValue !== value ||\n (isInputReason && (unvalidatedValue !== value || this.allowInputSync === false));\n\n if (shouldFireChange) {\n this.applyValue(validatedValue);\n this.onValueChange.emit(validatedValue);\n this.hasPendingCommit = true;\n }\n\n this.lastChangedValue = validatedValue;\n\n if (this.allowInputSync) {\n this.setInputValue(this.formatNumber(validatedValue));\n }\n\n return shouldFireChange;\n }\n\n /**\n * @ignore\n * Increments (or decrements) the value by `amount * direction`, starting from `currentValue`\n * when supplied (the live, possibly-dirty input value) or the committed value otherwise.\n */\n incrementValue(\n amount: number,\n params: { direction: Direction; currentValue?: number | null; event?: Event; reason: NumberFieldChangeReason }\n ): boolean {\n const prev = params.currentValue == null ? this.currentValue() : params.currentValue;\n const nextValue = typeof prev === 'number' ? prev + amount * params.direction : Math.max(0, this.min() ?? 0);\n return this.setValue(nextValue, params.reason, params.event, params.direction);\n }\n\n /** @ignore Emits the committed value at the end of an interaction. */\n commitValue(value: number | null): void {\n this.hasPendingCommit = false;\n this.onValueCommitted.emit(value);\n }\n\n private applyValue(value: number | null): void {\n this.value.set(value);\n this.cva.setValue(value);\n }\n}\n","import { Signal } from '@angular/core';\nimport { createContext } from '@radix-ng/primitives/core';\n\nexport interface RdxNumberFieldScrubAreaContext {\n /** Whether a scrub gesture is currently in progress. */\n readonly isScrubbing: Signal<boolean>;\n /** Whether the active scrub was started with touch input. */\n readonly isTouchInput: Signal<boolean>;\n /** Whether the browser denied the Pointer Lock request. */\n readonly isPointerLockDenied: Signal<boolean>;\n /** Registers (or clears) the virtual cursor element so the scrub area can move it. */\n registerCursor(element: HTMLElement | null): void;\n}\n\n/**\n * Context shared from the scrub area to its virtual cursor child.\n *\n * @see https://base-ui.com/react/components/number-field\n */\nexport const [injectNumberFieldScrubAreaContext, provideNumberFieldScrubAreaContext] =\n createContext<RdxNumberFieldScrubAreaContext>('RdxNumberFieldScrubAreaContext');\n","import { computed, Directive, effect, ElementRef, inject, input, numberAttribute, signal } from '@angular/core';\nimport { NumberInput } from '@radix-ng/primitives/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\nimport { provideNumberFieldScrubAreaContext, RdxNumberFieldScrubAreaContext } from './number-field-scrub-area-context';\nimport { numberOrUndefined } from './number-field.utils';\n\ntype ScrubDirection = 'horizontal' | 'vertical';\n\nfunction isWebKitBrowser(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n /AppleWebKit/.test(navigator.userAgent) &&\n !/Chrome/.test(navigator.userAgent)\n );\n}\n\nfunction isFirefoxBrowser(): boolean {\n return typeof navigator !== 'undefined' && /firefox/i.test(navigator.userAgent);\n}\n\n/** Calculates the viewport rect the virtual cursor loops within. */\nfunction getViewportRect(teleportDistance: number | undefined, scrubAreaEl: HTMLElement) {\n const win = scrubAreaEl.ownerDocument.defaultView ?? window;\n const rect = scrubAreaEl.getBoundingClientRect();\n\n if (rect && teleportDistance != null) {\n return {\n x: rect.left - teleportDistance / 2,\n y: rect.top - teleportDistance / 2,\n width: rect.right + teleportDistance / 2,\n height: rect.bottom + teleportDistance / 2\n };\n }\n\n const vV = win.visualViewport;\n if (vV) {\n return { x: vV.offsetLeft, y: vV.offsetTop, width: vV.offsetLeft + vV.width, height: vV.offsetTop + vV.height };\n }\n\n return {\n x: 0,\n y: 0,\n width: win.document.documentElement.clientWidth,\n height: win.document.documentElement.clientHeight\n };\n}\n\n/**\n * An interactive area where the user can click and drag to change the field value.\n * Uses the Pointer Lock API for continuous dragging (disabled in Safari to avoid layout shift).\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: '[rdxNumberFieldScrubArea]',\n exportAs: 'rdxNumberFieldScrubArea',\n providers: [provideNumberFieldScrubAreaContext(() => inject(RdxNumberFieldScrubArea).context)],\n host: {\n role: 'presentation',\n '[style.touch-action]': '\"none\"',\n '[style.user-select]': '\"none\"',\n '[style.-webkit-user-select]': '\"none\"',\n '[attr.data-disabled]': 'rootContext.isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-scrubbing]': 'isScrubbing() ? \"\" : undefined',\n '(pointerdown)': 'onPointerDown($event)',\n '(touchstart)': 'onTouchStart($event)'\n }\n})\nexport class RdxNumberFieldScrubArea {\n protected readonly rootContext = injectNumberFieldRootContext();\n\n /**\n * The direction the cursor must move to change the value.\n * @default 'horizontal'\n */\n readonly direction = input<ScrubDirection>('horizontal');\n\n /**\n * How many pixels the cursor must move before the value changes. Higher is less sensitive.\n * @default 2\n */\n readonly pixelSensitivity = input<number, NumberInput>(2, { transform: numberAttribute });\n\n /**\n * If set, the distance the cursor may move from the scrub area center before it loops back.\n */\n readonly teleportDistance = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n protected readonly isScrubbing = signal(false);\n private readonly isTouchInput = signal(false);\n private readonly isPointerLockDenied = signal(false);\n private readonly cursorEl = signal<HTMLElement | null>(null);\n\n private readonly scrubAreaEl = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n private isScrubbingRef = false;\n private didMove = false;\n private pointerDownTarget: EventTarget | null = null;\n private virtualCursorCoords = { x: 0, y: 0 };\n private visualScale = 1;\n\n /** @ignore Exposed to the scrub-area context provider. */\n readonly context: RdxNumberFieldScrubAreaContext = {\n isScrubbing: this.isScrubbing.asReadonly(),\n isTouchInput: this.isTouchInput.asReadonly(),\n isPointerLockDenied: this.isPointerLockDenied.asReadonly(),\n registerCursor: (el) => this.cursorEl.set(el)\n };\n\n private readonly canScrub = computed(() => !this.rootContext.isDisabled() && !this.rootContext.readonly());\n\n constructor() {\n const root = this.rootContext;\n\n // Register global listeners only while actively scrubbing.\n effect((onCleanup) => {\n if (!root.inputEl() || !this.canScrub() || !this.isScrubbing()) {\n return;\n }\n\n let cumulativeDelta = 0;\n\n const handlePointerMove = (event: PointerEvent) => {\n if (!this.isScrubbingRef) {\n return;\n }\n event.preventDefault();\n this.onScrub(event);\n\n const { movementX, movementY } = event;\n cumulativeDelta += this.direction() === 'vertical' ? movementY : movementX;\n\n if (Math.abs(cumulativeDelta) >= this.pixelSensitivity()) {\n cumulativeDelta = 0;\n this.didMove = true;\n const dValue = this.direction() === 'vertical' ? -movementY : movementX;\n const stepAmount = root.getStepAmount(event);\n const rawAmount = dValue * stepAmount;\n\n if (rawAmount !== 0) {\n root.allowInputSync = true;\n root.incrementValue(Math.abs(rawAmount), {\n direction: rawAmount >= 0 ? 1 : -1,\n event,\n reason: 'scrub'\n });\n }\n }\n };\n\n const handlePointerUp = (event: PointerEvent) => {\n const finish = () => {\n try {\n this.scrubAreaEl.ownerDocument.exitPointerLock();\n } catch {\n // Ignore — pointer lock may not be active.\n }\n this.isScrubbingRef = false;\n this.onScrubbingChange(false, event);\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n\n // Manually dispatch a click when no movement happened, since preventDefault on\n // pointerdown suppresses the browser's synthetic click.\n if (!this.didMove && this.pointerDownTarget && root.inputEl()) {\n this.pointerDownTarget.dispatchEvent(\n new MouseEvent('click', { bubbles: true, cancelable: true })\n );\n }\n\n this.didMove = false;\n this.pointerDownTarget = null;\n };\n\n if (isFirefoxBrowser()) {\n // Firefox needs a small delay or pointer lock won't release on a soft click.\n setTimeout(finish, 20);\n } else {\n finish();\n }\n };\n\n const win = this.scrubAreaEl.ownerDocument.defaultView ?? window;\n const vV = win.visualViewport;\n const handleVisualResize = () => {\n if (vV) {\n this.visualScale = vV.scale;\n }\n };\n handleVisualResize();\n\n win.addEventListener('pointermove', handlePointerMove, true);\n win.addEventListener('pointerup', handlePointerUp, true);\n win.addEventListener('pointercancel', handlePointerUp, true);\n vV?.addEventListener('resize', handleVisualResize);\n\n onCleanup(() => {\n win.removeEventListener('pointermove', handlePointerMove, true);\n win.removeEventListener('pointerup', handlePointerUp, true);\n win.removeEventListener('pointercancel', handlePointerUp, true);\n vV?.removeEventListener('resize', handleVisualResize);\n });\n });\n }\n\n async onPointerDown(event: PointerEvent): Promise<void> {\n const isMainButton = !event.button || event.button === 0;\n if (event.defaultPrevented || !isMainButton || !this.canScrub()) {\n return;\n }\n\n const isTouch = event.pointerType === 'touch';\n this.isTouchInput.set(isTouch);\n\n if (event.pointerType === 'mouse') {\n event.preventDefault();\n this.rootContext.inputEl()?.focus();\n }\n\n this.isScrubbingRef = true;\n this.didMove = false;\n this.pointerDownTarget = event.target;\n this.onScrubbingChange(true, event);\n\n // WebKit causes significant layout shift with the native pointer-lock message.\n if (!isTouch && !isWebKitBrowser()) {\n try {\n await this.scrubAreaEl.ownerDocument.body.requestPointerLock();\n this.isPointerLockDenied.set(false);\n } catch {\n this.isPointerLockDenied.set(true);\n } finally {\n if (this.isScrubbingRef) {\n this.onScrubbingChange(true, event);\n }\n }\n }\n }\n\n onTouchStart(event: TouchEvent): void {\n if (!this.canScrub()) {\n return;\n }\n // Prevent scrolling using touch input when scrubbing.\n if (event.touches.length === 1) {\n event.preventDefault();\n }\n }\n\n private onScrub(event: PointerEvent): void {\n const cursor = this.cursorEl();\n if (!cursor) {\n return;\n }\n\n const rect = getViewportRect(this.teleportDistance(), this.scrubAreaEl);\n const coords = this.virtualCursorCoords;\n const newCoords = { x: Math.round(coords.x + event.movementX), y: Math.round(coords.y + event.movementY) };\n\n const cursorWidth = cursor.offsetWidth;\n const cursorHeight = cursor.offsetHeight;\n\n if (newCoords.x + cursorWidth / 2 < rect.x) {\n newCoords.x = rect.width - cursorWidth / 2;\n } else if (newCoords.x + cursorWidth / 2 > rect.width) {\n newCoords.x = rect.x - cursorWidth / 2;\n }\n\n if (newCoords.y + cursorHeight / 2 < rect.y) {\n newCoords.y = rect.height - cursorHeight / 2;\n } else if (newCoords.y + cursorHeight / 2 > rect.height) {\n newCoords.y = rect.y - cursorHeight / 2;\n }\n\n this.virtualCursorCoords = newCoords;\n this.updateCursorTransform(newCoords.x, newCoords.y);\n }\n\n private onScrubbingChange(scrubbing: boolean, event: PointerEvent): void {\n this.isScrubbing.set(scrubbing);\n this.rootContext.isScrubbing.set(scrubbing);\n\n const cursor = this.cursorEl();\n if (!cursor || !scrubbing) {\n return;\n }\n\n const initialCoords = {\n x: event.clientX - cursor.offsetWidth / 2,\n y: event.clientY - cursor.offsetHeight / 2\n };\n this.virtualCursorCoords = initialCoords;\n this.updateCursorTransform(initialCoords.x, initialCoords.y);\n }\n\n private updateCursorTransform(x: number, y: number): void {\n const cursor = this.cursorEl();\n if (cursor) {\n cursor.style.transform = `translate3d(${x}px,${y}px,0) scale(${1 / this.visualScale})`;\n }\n }\n}\n","import { computed, DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { RdxPortal } from '@radix-ng/primitives/portal';\nimport { injectNumberFieldScrubAreaContext } from './number-field-scrub-area-context';\n\nfunction isWebKitBrowser(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n /AppleWebKit/.test(navigator.userAgent) &&\n !/Chrome/.test(navigator.userAgent)\n );\n}\n\n/**\n * A custom element shown instead of the native cursor while scrubbing. It is portaled to the\n * document body and positioned with the Pointer Lock API. Hidden in Safari (which would shift\n * layout with the native pointer-lock notification) and for touch input.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: '[rdxNumberFieldScrubAreaCursor]',\n exportAs: 'rdxNumberFieldScrubAreaCursor',\n hostDirectives: [RdxPortal],\n host: {\n role: 'presentation',\n '[style.position]': '\"fixed\"',\n '[style.top.px]': '0',\n '[style.left.px]': '0',\n '[style.pointer-events]': '\"none\"',\n '[style.opacity]': 'shouldRender() ? \"1\" : \"0\"'\n }\n})\nexport class RdxNumberFieldScrubAreaCursor {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly scrubContext = injectNumberFieldScrubAreaContext();\n\n protected readonly shouldRender = computed(\n () =>\n this.scrubContext.isScrubbing() &&\n !isWebKitBrowser() &&\n !this.scrubContext.isTouchInput() &&\n !this.scrubContext.isPointerLockDenied()\n );\n\n constructor() {\n this.scrubContext.registerCursor(this.elementRef.nativeElement);\n inject(DestroyRef).onDestroy(() => this.scrubContext.registerCursor(null));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxNumberFieldDecrement } from './src/number-field-decrement';\nimport { RdxNumberFieldGroup } from './src/number-field-group';\nimport { RdxNumberFieldHiddenInput } from './src/number-field-hidden-input';\nimport { RdxNumberFieldIncrement } from './src/number-field-increment';\nimport { RdxNumberFieldInput } from './src/number-field-input';\nimport { RdxNumberFieldRoot } from './src/number-field-root';\nimport { RdxNumberFieldScrubArea } from './src/number-field-scrub-area';\nimport { RdxNumberFieldScrubAreaCursor } from './src/number-field-scrub-area-cursor';\n\nexport * from './src/number-field-button';\nexport * from './src/number-field-context';\nexport * from './src/number-field-decrement';\nexport * from './src/number-field-group';\nexport * from './src/number-field-hidden-input';\nexport * from './src/number-field-increment';\nexport * from './src/number-field-input';\nexport * from './src/number-field-root';\nexport * from './src/number-field-scrub-area';\nexport * from './src/number-field-scrub-area-context';\nexport * from './src/number-field-scrub-area-cursor';\nexport * from './src/number-field.utils';\nexport * from './src/types';\n\nconst _imports = [\n RdxNumberFieldRoot,\n RdxNumberFieldGroup,\n RdxNumberFieldInput,\n RdxNumberFieldHiddenInput,\n RdxNumberFieldIncrement,\n RdxNumberFieldDecrement,\n RdxNumberFieldScrubArea,\n RdxNumberFieldScrubAreaCursor\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxNumberFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isWebKitBrowser","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-number-field.mjs","sources":["../../../packages/primitives/number-field/src/number-field-context.ts","../../../packages/primitives/number-field/src/number-field.utils.ts","../../../packages/primitives/number-field/src/number-field-button.ts","../../../packages/primitives/number-field/src/number-field-decrement.ts","../../../packages/primitives/number-field/src/number-field-group.ts","../../../packages/primitives/number-field/src/number-field-hidden-input.ts","../../../packages/primitives/number-field/src/number-field-increment.ts","../../../packages/primitives/number-field/src/number-field-input.ts","../../../packages/primitives/number-field/src/types.ts","../../../packages/primitives/number-field/src/number-field-root.ts","../../../packages/primitives/number-field/src/number-field-scrub-area-context.ts","../../../packages/primitives/number-field/src/number-field-scrub-area.ts","../../../packages/primitives/number-field/src/number-field-scrub-area-cursor.ts","../../../packages/primitives/number-field/index.ts","../../../packages/primitives/number-field/radix-ng-primitives-number-field.ts"],"sourcesContent":["import { createContext } from '@radix-ng/primitives/core';\nimport type { RdxNumberFieldRoot } from './number-field-root';\n\n/**\n * The Number Field context exposes the root directive instance to every child part.\n * The root owns all state, parsing/formatting and value-change logic; parts read\n * signals and call methods off it.\n *\n * @see https://base-ui.com/react/components/number-field\n */\nexport const [injectNumberFieldRootContext, provideNumberFieldRootContext] = createContext<RdxNumberFieldRoot>(\n 'RdxNumberFieldRootContext',\n 'components/number-field'\n);\n","import { computed, DestroyRef, inject, numberAttribute, signal, Signal } from '@angular/core';\nimport { NumberFormatter, NumberParser } from '@internationalized/number';\nimport { clamp, NumberInput } from '@radix-ng/primitives/core';\n\n/**\n * Coerces an optional numeric input, returning `undefined` for nullish/empty/non-numeric values.\n * Unlike `numberAttribute`, `numberOrUndefined(undefined)` is `undefined` (not `NaN`), so an unset\n * `[min]`/`[max]` does not poison clamping.\n */\nexport function numberOrUndefined(value: NumberInput): number | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n const parsed = numberAttribute(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n}\n\n/** Default step used when no `step` is provided. */\nexport const DEFAULT_STEP = 1;\n/** Delay between auto-repeat ticks while holding an increment/decrement button. */\nexport const CHANGE_VALUE_TICK_DELAY = 60;\n/** Delay before auto-repeat starts while holding an increment/decrement button. */\nexport const START_AUTO_CHANGE_DELAY = 400;\n/** Pointer travel (px) that cancels a hold, treating the gesture as a scroll. */\nexport const SCROLLING_POINTER_MOVE_DISTANCE = 8;\n\nconst STEP_EPSILON_FACTOR = 1e-10;\n// Matches Intl.NumberFormat's decimal maximumFractionDigits default.\nconst DEFAULT_DIGITS = 3;\n\n/** Reactive `Intl`-backed formatter built from the current locale and format options. */\nexport function useNumberFormatter(\n locale: Signal<string>,\n options: Signal<Intl.NumberFormatOptions | undefined> = signal({})\n): Signal<NumberFormatter> {\n return computed(() => new NumberFormatter(locale(), options() ?? {}));\n}\n\n/** Reactive `Intl`-backed parser built from the current locale and format options. */\nexport function useNumberParser(\n locale: Signal<string>,\n options: Signal<Intl.NumberFormatOptions | undefined> = signal({})\n): Signal<NumberParser> {\n return computed(() => new NumberParser(locale(), options() ?? {}));\n}\n\n/** Whether the format options would cause `Intl.NumberFormat` to round the value. */\nexport function hasNumberFormatRoundingOptions(format?: Intl.NumberFormatOptions): boolean {\n const opts = format as (Intl.NumberFormatOptions & Record<string, unknown>) | undefined;\n return !!(\n opts &&\n (opts.maximumFractionDigits != null ||\n opts.minimumFractionDigits != null ||\n opts.maximumSignificantDigits != null ||\n opts.minimumSignificantDigits != null ||\n opts['roundingIncrement'] != null ||\n opts['roundingMode'] != null ||\n opts['roundingPriority'] != null)\n );\n}\n\n/**\n * Strips floating-point representation errors (e.g. `0.1 + 0.2`) using the format's\n * rounding options when present, otherwise rounding to {@link DEFAULT_DIGITS} digits.\n */\nexport function removeFloatingPointErrors(value: number, locale: string, format?: Intl.NumberFormatOptions): number {\n if (!Number.isFinite(value)) {\n return value;\n }\n\n if (!hasNumberFormatRoundingOptions(format)) {\n return Number(value.toFixed(DEFAULT_DIGITS));\n }\n\n const formatter = new NumberFormatter('en-US', {\n ...format,\n // These options alter only display decoration, not numeric rounding.\n signDisplay: 'auto',\n currencySign: 'standard',\n notation: format!.notation === 'compact' ? 'standard' : format!.notation,\n useGrouping: false\n });\n const roundedText = formatter.format(value);\n const roundedValue = new NumberParser('en-US', format ?? {}).parse(roundedText);\n\n if (Number.isNaN(roundedValue)) {\n return value;\n }\n\n return formatter.format(roundedValue) === roundedText ? roundedValue : value;\n}\n\nfunction snapToStep(\n value: number,\n base: number,\n step: number,\n mode: 'directional' | 'nearest' = 'directional'\n): number {\n const stepSize = Math.abs(step);\n const direction = Math.sign(step);\n const tolerance = stepSize * STEP_EPSILON_FACTOR * direction;\n const rawSteps = value - base + tolerance;\n\n if (mode === 'nearest') {\n return base + Math.round(rawSteps / step) * step;\n }\n\n const snappedSteps = direction > 0 ? Math.floor(rawSteps / stepSize) : Math.ceil(rawSteps / stepSize);\n return base + snappedSteps * stepSize;\n}\n\nexport interface ValidateOptions {\n step: number | undefined;\n minWithDefault: number;\n maxWithDefault: number;\n minWithZeroDefault: number;\n format: Intl.NumberFormatOptions | undefined;\n locale: string;\n snapOnStep: boolean;\n small: boolean;\n clamp: boolean;\n}\n\n/**\n * Snaps (optionally), clamps (optionally) and rounds an unvalidated value, mirroring\n * Base UI's `toValidatedNumber`. Snapping happens before clamping so non-step-aligned\n * boundaries stay reachable.\n */\nexport function toValidatedNumber(value: number | null, options: ValidateOptions): number | null {\n if (value === null) {\n return value;\n }\n\n const { step, minWithDefault, maxWithDefault, minWithZeroDefault, format, locale, snapOnStep, small } = options;\n\n let nextValue = value;\n\n if (step != null && snapOnStep && step !== 0) {\n const base = small || minWithDefault === Number.MIN_SAFE_INTEGER ? minWithZeroDefault : minWithDefault;\n nextValue = snapToStep(nextValue, base, step, small ? 'nearest' : 'directional');\n }\n\n if (options.clamp) {\n nextValue = clamp(nextValue, minWithDefault, maxWithDefault);\n }\n\n const roundedValue = removeFloatingPointErrors(nextValue, locale, format);\n return options.clamp ? clamp(roundedValue, minWithDefault, maxWithDefault) : roundedValue;\n}\n\nexport interface PressAndHoldOptions {\n /** Whether interaction is currently blocked (disabled or read-only). */\n disabled: () => boolean;\n /** Delay before the first auto-repeat tick. */\n startDelay: number;\n /** Delay between subsequent auto-repeat ticks. */\n tickDelay: number;\n /** Pointer travel (px) that cancels the hold as a scroll. */\n scrollDistance: number;\n /** Runs on each tick; return `false` to stop auto-repeating (e.g. a bound was hit). */\n tick: (event: PointerEvent) => boolean | void;\n /** Runs once when the press ends (pointerup / cancel / scroll). */\n onStop?: (event: PointerEvent) => void;\n}\n\nexport interface PressAndHold {\n readonly isPressing: Signal<boolean>;\n onPointerDown(event: PointerEvent): void;\n /** Whether the following synthetic `click` should be ignored (a hold already ticked). */\n shouldSkipClick(): boolean;\n}\n\n/**\n * Pointer press-and-hold with auto-repeat, modelled on Base UI's `usePressAndHold`.\n * Must be called in an injection context — it registers cleanup via `DestroyRef`.\n */\nexport function createPressAndHold(options: PressAndHoldOptions): PressAndHold {\n const destroyRef = inject(DestroyRef);\n const isPressing = signal(false);\n\n let startEvent: PointerEvent | null = null;\n let startX = 0;\n let startY = 0;\n let didTick = false;\n let tickTimer: ReturnType<typeof setTimeout> | undefined;\n\n const clearTick = () => {\n if (tickTimer !== undefined) {\n clearTimeout(tickTimer);\n tickTimer = undefined;\n }\n };\n\n const scheduleTick = (delay: number) => {\n tickTimer = setTimeout(() => {\n if (options.disabled() || !startEvent) {\n stop(startEvent);\n return;\n }\n didTick = true;\n const shouldContinue = options.tick(startEvent);\n if (shouldContinue === false) {\n clearTick();\n return;\n }\n scheduleTick(options.tickDelay);\n }, delay);\n };\n\n const onPointerMove = (event: PointerEvent) => {\n // Treat a moving touch/pen gesture as a scroll and cancel the hold.\n if (startEvent && startEvent.pointerType !== 'mouse') {\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) > options.scrollDistance) {\n stop(event);\n }\n }\n };\n\n const stop = (event: PointerEvent | null) => {\n if (!isPressing()) {\n return;\n }\n clearTick();\n window.removeEventListener('pointerup', stop, true);\n window.removeEventListener('pointercancel', stop, true);\n window.removeEventListener('pointermove', onPointerMove, true);\n isPressing.set(false);\n if (event) {\n options.onStop?.(event);\n }\n };\n\n destroyRef.onDestroy(() => stop(null));\n\n return {\n isPressing: isPressing.asReadonly(),\n shouldSkipClick: () => didTick,\n onPointerDown(event: PointerEvent) {\n if (options.disabled() || isPressing()) {\n return;\n }\n startEvent = event;\n startX = event.clientX;\n startY = event.clientY;\n didTick = false;\n isPressing.set(true);\n window.addEventListener('pointerup', stop, true);\n window.addEventListener('pointercancel', stop, true);\n window.addEventListener('pointermove', onPointerMove, true);\n scheduleTick(options.startDelay);\n }\n };\n}\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\nimport { BooleanInput } from '@radix-ng/primitives/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\nimport {\n CHANGE_VALUE_TICK_DELAY,\n createPressAndHold,\n PressAndHold,\n SCROLLING_POINTER_MOVE_DISTANCE,\n START_AUTO_CHANGE_DELAY\n} from './number-field.utils';\nimport { Direction, NumberFieldChangeReason } from './types';\n\n// Treat pen as touch-like to avoid forcing the software keyboard on stylus taps.\nfunction isTouchLikePointerType(pointerType: string): boolean {\n return pointerType === 'touch' || pointerType === 'pen';\n}\n\n/**\n * Shared behaviour for the increment and decrement stepper buttons: single-press,\n * press-and-hold auto-repeat, and committing a dirty (typed-but-not-blurred) input\n * value before stepping.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n host: {\n type: 'button',\n tabindex: '-1',\n '[attr.aria-controls]': 'rootContext.id()',\n '[attr.aria-readonly]': 'rootContext.readonly() ? \"true\" : undefined',\n '[attr.disabled]': 'buttonDisabled() ? \"\" : undefined',\n '[attr.data-disabled]': 'buttonDisabled() ? \"\" : undefined',\n '[attr.data-pressed]': 'press.isPressing() ? \"\" : undefined',\n '[style.user-select]': '\"none\"',\n '[style.-webkit-user-select]': '\"none\"',\n '(click)': 'onClick($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(contextmenu)': '$event.preventDefault()'\n }\n})\nexport abstract class RdxNumberFieldButton {\n protected readonly rootContext = injectNumberFieldRootContext();\n\n /** Whether this is the increment (`+1`) button; `false` for decrement (`-1`). */\n protected abstract readonly isIncrement: boolean;\n\n /**\n * When `true`, the button is disabled in addition to inheriting the root's disabled state.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** @ignore Disabled for display/focus purposes (own state, root disabled, or bound reached). */\n readonly buttonDisabled = computed(\n () =>\n this.disabled() ||\n this.rootContext.isDisabled() ||\n (this.isIncrement ? this.rootContext.isIncrementDisabled() : this.rootContext.isDecrementDisabled())\n );\n\n /** @ignore Disabled for interaction purposes (also blocked while read-only). */\n private readonly interactionDisabled = computed(() => this.buttonDisabled() || this.rootContext.readonly());\n\n private get direction(): Direction {\n return this.isIncrement ? 1 : -1;\n }\n\n private get pressReason(): NumberFieldChangeReason {\n return this.isIncrement ? 'increment-press' : 'decrement-press';\n }\n\n /** @ignore */\n readonly press: PressAndHold;\n\n constructor() {\n const root = this.rootContext;\n this.press = createPressAndHold({\n disabled: () => this.interactionDisabled(),\n startDelay: START_AUTO_CHANGE_DELAY,\n tickDelay: CHANGE_VALUE_TICK_DELAY,\n scrollDistance: SCROLLING_POINTER_MOVE_DISTANCE,\n tick: (event) => {\n const amount = root.getStepAmount(event);\n return root.incrementValue(amount, {\n direction: this.direction,\n event,\n reason: this.pressReason\n });\n },\n onStop: () => root.commitValue(root.lastChangedValue ?? root.currentValue())\n });\n }\n\n onClick(event: MouseEvent): void {\n if (event.defaultPrevented || this.interactionDisabled() || this.press.shouldSkipClick()) {\n return;\n }\n\n this.commitDirtyValue(event);\n\n const amount = this.rootContext.getStepAmount(event);\n const prev = this.rootContext.currentValue();\n this.rootContext.incrementValue(amount, {\n direction: this.direction,\n event,\n reason: this.pressReason\n });\n\n const committed = this.rootContext.lastChangedValue ?? this.rootContext.currentValue();\n if (committed !== prev) {\n this.rootContext.commitValue(committed);\n }\n }\n\n onPointerDown(event: PointerEvent): void {\n const isMainButton = !event.button || event.button === 0;\n if (event.defaultPrevented || this.rootContext.readonly() || !isMainButton || this.buttonDisabled()) {\n return;\n }\n\n // Sync the dirty input value before starting the hold sequence.\n this.commitDirtyValue(event);\n\n if (!isTouchLikePointerType(event.pointerType)) {\n // Focus the input so the user can continue with the keyboard.\n this.rootContext.inputEl()?.focus();\n }\n\n this.press.onPointerDown(event);\n }\n\n /** Commits a typed-but-not-yet-blurred input value so stepping starts from it. */\n private commitDirtyValue(event: Event): void {\n const root = this.rootContext;\n root.allowInputSync = true;\n const parsed = root.parseNumber(root.inputValue());\n if (parsed !== null) {\n root.setValue(parsed, this.pressReason, event, this.direction);\n }\n }\n}\n","import { Directive } from '@angular/core';\nimport { RdxNumberFieldButton } from './number-field-button';\n\n/**\n * A stepper button that decreases the field value when clicked or held.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'button[rdxNumberFieldDecrement]',\n exportAs: 'rdxNumberFieldDecrement',\n host: {\n 'aria-label': 'Decrease'\n }\n})\nexport class RdxNumberFieldDecrement extends RdxNumberFieldButton {\n protected readonly isIncrement = false;\n}\n","import { Directive } from '@angular/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\n\n/**\n * Groups the input with the increment and decrement buttons.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'div[rdxNumberFieldGroup]',\n exportAs: 'rdxNumberFieldGroup',\n host: {\n role: 'group',\n '[attr.data-disabled]': 'rootContext.isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-required]': 'rootContext.required() ? \"\" : undefined',\n '[attr.data-scrubbing]': 'rootContext.isScrubbing() ? \"\" : undefined'\n }\n})\nexport class RdxNumberFieldGroup {\n protected readonly rootContext = injectNumberFieldRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\n\n/**\n * The hidden native `input[type=number]` that mirrors the field value for native form submission\n * and browser constraint validation (min/max/step/required). Place it inside the root, alongside\n * the visible `[rdxNumberFieldInput]`.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'input[rdxNumberFieldHiddenInput]',\n exportAs: 'rdxNumberFieldHiddenInput',\n host: {\n type: 'number',\n tabindex: '-1',\n 'aria-hidden': 'true',\n '[attr.name]': 'rootContext.name()',\n '[attr.form]': 'rootContext.form()',\n '[value]': 'rootContext.currentValue() ?? \"\"',\n '[attr.min]': 'rootContext.min()',\n '[attr.max]': 'rootContext.max()',\n '[attr.step]': 'rootContext.step()',\n '[disabled]': 'rootContext.isDisabled()',\n '[attr.required]': 'rootContext.required() ? \"\" : undefined',\n style: 'transform: translateX(-100%); position: absolute; overflow: hidden; pointer-events: none; opacity: 0; margin: 0;',\n '(focus)': 'onFocus()',\n '(change)': 'onChange($event)'\n }\n})\nexport class RdxNumberFieldHiddenInput {\n protected readonly rootContext = injectNumberFieldRootContext();\n\n /** Move focus to the visible input when the hidden one is focused (e.g. via form validation). */\n onFocus(): void {\n this.rootContext.inputEl()?.focus();\n }\n\n /** Handle browser autofill, which writes directly to the hidden numeric input. */\n onChange(event: Event): void {\n const root = this.rootContext;\n if (root.isDisabled() || root.readonly()) {\n return;\n }\n\n const nextValue = (event.target as HTMLInputElement).valueAsNumber;\n const parsedValue = Number.isNaN(nextValue) ? null : nextValue;\n\n root.allowInputSync = true;\n root.setValue(parsedValue, 'none', event);\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n }\n}\n","import { Directive } from '@angular/core';\nimport { RdxNumberFieldButton } from './number-field-button';\n\n/**\n * A stepper button that increases the field value when clicked or held.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'button[rdxNumberFieldIncrement]',\n exportAs: 'rdxNumberFieldIncrement',\n host: {\n 'aria-label': 'Increase'\n }\n})\nexport class RdxNumberFieldIncrement extends RdxNumberFieldButton {\n protected readonly isIncrement = true;\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { getActiveElement } from '@radix-ng/primitives/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\n\n/**\n * The native text input that displays the formatted value and accepts typed input.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'input[rdxNumberFieldInput]',\n exportAs: 'rdxNumberFieldInput',\n host: {\n type: 'text',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: 'false',\n 'aria-roledescription': 'Number field',\n '[id]': 'rootContext.id()',\n '[value]': 'rootContext.inputValue()',\n '[attr.inputmode]': 'rootContext.inputMode()',\n '[attr.aria-invalid]': 'rootContext.required() && rootContext.currentValue() === null ? \"true\" : undefined',\n '[disabled]': 'rootContext.isDisabled()',\n '[attr.readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[required]': 'rootContext.required()',\n '[attr.data-disabled]': 'rootContext.isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-required]': 'rootContext.required() ? \"\" : undefined',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)',\n '(input)': 'onInput($event)',\n '(beforeinput)': 'onBeforeInput($event)',\n '(keydown)': 'onKeydown($event)',\n '(paste)': 'onPaste($event)',\n '(wheel)': 'onWheel($event)'\n }\n})\nexport class RdxNumberFieldInput {\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n protected readonly rootContext = injectNumberFieldRootContext();\n\n /** Browsers place the caret at the start; we move it to the end on the first focus. */\n private hasTouchedInput = false;\n\n constructor() {\n this.rootContext.registerInput(this.elementRef.nativeElement);\n }\n\n onFocus(event: FocusEvent): void {\n const root = this.rootContext;\n if (root.readonly() || root.isDisabled() || this.hasTouchedInput) {\n return;\n }\n this.hasTouchedInput = true;\n const target = event.target as HTMLInputElement;\n const length = target.value.length;\n target.setSelectionRange(length, length);\n }\n\n onBeforeInput(event: InputEvent): void {\n // Only validate insertions; deletions and composition have `data === null`.\n if (event.data == null) {\n return;\n }\n const target = event.target as HTMLInputElement;\n const nextValue =\n target.value.slice(0, target.selectionStart ?? undefined) +\n event.data +\n target.value.slice(target.selectionEnd ?? undefined);\n\n if (!this.rootContext.isValidPartial(nextValue)) {\n event.preventDefault();\n }\n }\n\n onInput(event: Event): void {\n const root = this.rootContext;\n const targetValue = (event.target as HTMLInputElement).value;\n\n root.allowInputSync = false;\n\n if (targetValue.trim() === '') {\n root.setInputValue(targetValue);\n root.setValue(null, 'input-clear', event);\n return;\n }\n\n const parsedValue = root.parseNumber(targetValue);\n root.setInputValue(targetValue);\n\n if (parsedValue !== null) {\n root.setValue(parsedValue, 'input-change', event);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n const root = this.rootContext;\n if (root.readonly() || root.isDisabled()) {\n return;\n }\n\n root.allowInputSync = true;\n const key = event.key;\n\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n event.preventDefault();\n const parsed = root.parseNumber(root.inputValue());\n const amount = root.getStepAmount(event);\n root.incrementValue(amount, {\n direction: key === 'ArrowUp' ? 1 : -1,\n currentValue: parsed,\n event,\n reason: 'keyboard'\n });\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n } else if (key === 'Home' && root.min() != null) {\n event.preventDefault();\n root.setValue(root.min()!, 'keyboard', event);\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n } else if (key === 'End' && root.max() != null) {\n event.preventDefault();\n root.setValue(root.max()!, 'keyboard', event);\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n }\n }\n\n onPaste(event: ClipboardEvent): void {\n const root = this.rootContext;\n if (root.readonly() || root.isDisabled()) {\n return;\n }\n\n const pastedData = event.clipboardData?.getData('text/plain') ?? '';\n // Prevent the subsequent `input` event from also handling the paste.\n event.preventDefault();\n\n const parsedValue = root.parseNumber(pastedData);\n if (parsedValue !== null) {\n root.allowInputSync = false;\n root.setValue(parsedValue, 'input-paste', event);\n root.setInputValue(pastedData);\n }\n }\n\n onBlur(event: FocusEvent): void {\n const root = this.rootContext;\n if (root.readonly() || root.isDisabled()) {\n return;\n }\n\n root.markAsTouched();\n\n const hadManualInput = !root.allowInputSync;\n const hadPendingCommit = root.hasPendingCommit;\n root.allowInputSync = true;\n\n const text = root.inputValue();\n\n if (text.trim() === '') {\n root.setValue(null, 'input-clear', event);\n root.commitValue(null);\n return;\n }\n\n const parsedValue = root.parseNumber(text);\n if (parsedValue === null) {\n return;\n }\n\n const value = root.currentValue();\n const shouldUpdate = value !== parsedValue;\n const shouldCommit = hadManualInput || shouldUpdate || hadPendingCommit;\n\n let committedValue = parsedValue;\n if (shouldUpdate) {\n root.setValue(parsedValue, 'input-blur', event);\n committedValue = root.lastChangedValue ?? parsedValue;\n }\n\n if (shouldCommit) {\n root.commitValue(committedValue);\n }\n\n const canonicalText = root.formatNumber(committedValue);\n if (root.inputValue() !== canonicalText) {\n root.setInputValue(canonicalText);\n }\n }\n\n onWheel(event: WheelEvent): void {\n const root = this.rootContext;\n if (!root.allowWheelScrub() || root.isDisabled() || root.readonly()) {\n return;\n }\n // Allow pinch-zoom and only scrub while focused.\n if (event.ctrlKey || getActiveElement() !== this.elementRef.nativeElement) {\n return;\n }\n\n event.preventDefault();\n root.allowInputSync = true;\n const amount = root.getStepAmount(event);\n root.incrementValue(amount, {\n direction: event.deltaY > 0 ? -1 : 1,\n event,\n reason: 'wheel'\n });\n }\n}\n","/**\n * The software keyboard hint shown on touch devices, mapped to the input's `inputmode` attribute.\n */\nexport type InputMode = 'numeric' | 'decimal' | 'text';\n\n/**\n * Direction of a step-based value change (`1` to increase, `-1` to decrease).\n */\nexport type Direction = 1 | -1;\n\n/**\n * Why a value change happened. Mirrors Base UI's change reasons and is used\n * internally to decide whether a change should be clamped (step interactions\n * always clamp; direct text entry may go out of range when `allowOutOfRange`).\n *\n * @see https://base-ui.com/react/components/number-field\n */\nexport type NumberFieldChangeReason =\n | 'input-change'\n | 'input-clear'\n | 'input-blur'\n | 'input-paste'\n | 'keyboard'\n | 'increment-press'\n | 'decrement-press'\n | 'wheel'\n | 'scrub'\n | 'none';\n\nexport const REASONS = {\n inputChange: 'input-change',\n inputClear: 'input-clear',\n inputBlur: 'input-blur',\n inputPaste: 'input-paste',\n keyboard: 'keyboard',\n incrementPress: 'increment-press',\n decrementPress: 'decrement-press',\n wheel: 'wheel',\n scrub: 'scrub',\n none: 'none'\n} as const;\n","import {\n booleanAttribute,\n computed,\n Directive,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport {\n BooleanInput,\n injectControlValueAccessor,\n injectId,\n NumberInput,\n RdxControlValueAccessor,\n RdxFormValueControl\n} from '@radix-ng/primitives/core';\nimport { provideNumberFieldRootContext } from './number-field-context';\nimport { numberOrUndefined, toValidatedNumber, useNumberFormatter, useNumberParser } from './number-field.utils';\nimport { Direction, InputMode, NumberFieldChangeReason, REASONS } from './types';\n\nconst INPUT_REASONS: NumberFieldChangeReason[] = [\n REASONS.inputChange,\n REASONS.inputClear,\n REASONS.inputBlur,\n REASONS.inputPaste,\n REASONS.none\n];\n\n/**\n * Groups all parts of the number field and manages its state, parsing/formatting\n * and value-change logic. A single directive drives the whole family — parts read\n * signals and call methods off it through the root context.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: 'div[rdxNumberFieldRoot]',\n exportAs: 'rdxNumberFieldRoot',\n providers: [provideNumberFieldRootContext(() => inject(RdxNumberFieldRoot))],\n hostDirectives: [\n {\n directive: RdxControlValueAccessor,\n inputs: ['value: value', 'disabled']\n }\n ],\n host: {\n role: 'group',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'readonly() ? \"\" : undefined',\n '[attr.data-required]': 'required() ? \"\" : undefined',\n '[attr.data-scrubbing]': 'isScrubbing() ? \"\" : undefined'\n }\n})\nexport class RdxNumberFieldRoot implements RdxFormValueControl<number | null> {\n /** @ignore */\n protected readonly cva = injectControlValueAccessor<number | null>();\n\n /** The id of the input element. */\n readonly id = input<string>(injectId('rdx-number-field-'));\n\n /** The minimum value of the field. */\n readonly min = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n /** The maximum value of the field. */\n readonly max = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n /**\n * Amount to increment and decrement with the buttons, arrow keys and scrub area.\n * @default 1\n */\n readonly step = input<number, NumberInput>(1, { transform: numberAttribute });\n\n /**\n * The step used when incrementing while the Alt key is held. Snaps to multiples of this value.\n * @default 0.1\n */\n readonly smallStep = input<number, NumberInput>(0.1, { transform: numberAttribute });\n\n /**\n * The step used when incrementing while the Shift key is held. Snaps to multiples of this value.\n * @default 10\n */\n readonly largeStep = input<number, NumberInput>(10, { transform: numberAttribute });\n\n /**\n * Whether the value should snap to the nearest step when incrementing or decrementing.\n * @default false\n */\n readonly snapOnStep = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, direct text entry may go outside the `min`/`max` range without clamping.\n * Step interactions (arrow keys, buttons, wheel, scrub) still clamp.\n * @default false\n */\n readonly allowOutOfRange = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Whether the value can be changed with the mouse wheel while the input is focused.\n * @default false\n */\n readonly allowWheelScrub = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Options used to format the input value (forwarded to `Intl.NumberFormat`). */\n readonly format = input<Intl.NumberFormatOptions>();\n\n /** The locale used to parse and format the value. */\n readonly locale = input<string>('en');\n\n /**\n * When `true`, the user cannot interact with the field.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the field is focusable but its value cannot be changed.\n * @default false\n */\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the user must enter a value before the owning form can be submitted.\n * @default false\n */\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Name of the hidden input rendered by `[rdxNumberFieldHiddenInput]`, for form submission. */\n readonly name = input<string>();\n\n /** Id of the form the hidden input belongs to. Useful when it is rendered outside the form. */\n readonly form = input<string>();\n\n /** The uncontrolled value of the field when it is initially rendered. */\n readonly defaultValue = input<number>();\n\n /** The controlled value of the field. Use with `(onValueChange)` or two-way `[(value)]`. */\n readonly value = model<number | null>(null);\n\n /** Emitted when the value changes (during interaction or programmatically). */\n readonly onValueChange = output<number | null>();\n\n /**\n * Emitted when the value is committed: on blur after typing, or when a pointer is released\n * after scrubbing or pressing a button. Fires together with `onValueChange` for keyboard input.\n */\n readonly onValueCommitted = output<number | null>();\n\n /** @ignore The formatted text shown in the input element. */\n readonly inputValue = signal('');\n\n /** @ignore Whether a scrub gesture is in progress. */\n readonly isScrubbing = signal(false);\n\n /** @ignore The native input element, registered by `[rdxNumberFieldInput]`. */\n readonly inputEl = signal<HTMLInputElement | undefined>(undefined);\n\n /**\n * @ignore Gate that prevents the formatted value from overwriting in-progress typing.\n * Plain field (not a signal): it is toggled imperatively inside event handlers.\n */\n allowInputSync = true;\n /** @ignore Last value produced by `setValue`, used to report the committed value. */\n lastChangedValue: number | null = null;\n /** @ignore Whether a programmatic change is awaiting a commit. */\n hasPendingCommit = false;\n\n /** @ignore */\n readonly isDisabled = computed(() => !!this.cva.disabled());\n\n private readonly formatter = useNumberFormatter(this.locale, this.format);\n private readonly parser = useNumberParser(this.locale, this.format);\n\n /** @ignore The current numeric value (`null` when empty). */\n readonly currentValue = computed<number | null>(() => this.cva.value() ?? null);\n\n /** @ignore */\n readonly minWithDefault = computed(() => this.min() ?? Number.MIN_SAFE_INTEGER);\n /** @ignore */\n readonly maxWithDefault = computed(() => this.max() ?? Number.MAX_SAFE_INTEGER);\n /** @ignore */\n readonly minWithZeroDefault = computed(() => this.min() ?? 0);\n\n /** @ignore Whether incrementing further is a no-op (value already at max). */\n readonly isIncrementDisabled = computed(() => {\n const value = this.currentValue();\n return value != null && value >= this.maxWithDefault();\n });\n /** @ignore Whether decrementing further is a no-op (value already at min). */\n readonly isDecrementDisabled = computed(() => {\n const value = this.currentValue();\n return value != null && value <= this.minWithDefault();\n });\n\n /** @ignore Software-keyboard hint based on whether the format allows fractional digits. */\n readonly inputMode = computed<InputMode>(() => {\n const hasDecimals = (this.formatter().resolvedOptions().maximumFractionDigits ?? 0) > 0;\n return hasDecimals ? 'decimal' : 'numeric';\n });\n\n constructor() {\n // Apply the uncontrolled initial value once it is provided.\n effect(() => {\n const dv = this.defaultValue();\n if (dv !== undefined) {\n untracked(() => {\n this.value.set(dv);\n this.cva.setValue(dv);\n });\n }\n });\n\n // Keep the visible input in sync with the value whenever it changes externally or the\n // formatting options change. Skipped while the user is typing (`allowInputSync === false`).\n effect(() => {\n const formatted = this.formatNumber(this.currentValue());\n untracked(() => {\n if (this.allowInputSync && this.inputValue() !== formatted) {\n this.inputValue.set(formatted);\n }\n });\n });\n }\n\n /** @ignore Formats a numeric value to its display string (empty for `null`/`NaN`). */\n formatNumber(value: number | null): string {\n if (value === null || Number.isNaN(value)) {\n return '';\n }\n return this.formatter().format(value);\n }\n\n /** @ignore Parses a display string to a number, returning `null` when not parseable. */\n parseNumber(text: string): number | null {\n const parsed = this.parser().parse(text);\n return Number.isNaN(parsed) ? null : parsed;\n }\n\n /** @ignore Whether `text` is a valid partial number for the current locale and bounds. */\n isValidPartial(text: string): boolean {\n return this.parser().isValidPartialNumber(text, this.min(), this.max());\n }\n\n /** @ignore The step magnitude for an interaction, honouring Alt (small) and Shift (large). */\n getStepAmount(event?: { altKey?: boolean; shiftKey?: boolean }): number {\n if (event?.altKey) {\n return this.smallStep();\n }\n if (event?.shiftKey) {\n return this.largeStep();\n }\n return this.step();\n }\n\n /** @ignore Registers the native input element. */\n registerInput(el: HTMLInputElement): void {\n this.inputEl.set(el);\n }\n\n /** @ignore Sets the displayed text without changing the numeric value. */\n setInputValue(text: string): void {\n this.inputValue.set(text);\n }\n\n /** @ignore */\n markAsTouched(): void {\n this.cva.markAsTouched();\n }\n\n /**\n * @ignore\n * Validates and applies a candidate value, emitting `onValueChange` when it changes.\n * Returns whether a change was fired.\n */\n setValue(\n unvalidatedValue: number | null,\n reason: NumberFieldChangeReason,\n event?: Event,\n direction?: Direction\n ): boolean {\n const keyState = event as (Event & { altKey?: boolean; shiftKey?: boolean }) | undefined;\n // Step interactions always clamp; direct text entry may go out of range when allowed.\n const shouldClamp = !this.allowOutOfRange() || !INPUT_REASONS.includes(reason);\n\n const validatedValue = toValidatedNumber(unvalidatedValue, {\n step: direction ? this.getStepAmount(keyState) * direction : undefined,\n minWithDefault: this.minWithDefault(),\n maxWithDefault: this.maxWithDefault(),\n minWithZeroDefault: this.minWithZeroDefault(),\n format: this.format(),\n locale: this.locale(),\n snapOnStep: this.snapOnStep(),\n small: keyState?.altKey ?? false,\n clamp: shouldClamp\n });\n\n const value = this.currentValue();\n const isInputReason = INPUT_REASONS.includes(reason);\n const shouldFireChange =\n validatedValue !== value ||\n (isInputReason && (unvalidatedValue !== value || this.allowInputSync === false));\n\n if (shouldFireChange) {\n this.applyValue(validatedValue);\n this.onValueChange.emit(validatedValue);\n this.hasPendingCommit = true;\n }\n\n this.lastChangedValue = validatedValue;\n\n if (this.allowInputSync) {\n this.setInputValue(this.formatNumber(validatedValue));\n }\n\n return shouldFireChange;\n }\n\n /**\n * @ignore\n * Increments (or decrements) the value by `amount * direction`, starting from `currentValue`\n * when supplied (the live, possibly-dirty input value) or the committed value otherwise.\n */\n incrementValue(\n amount: number,\n params: { direction: Direction; currentValue?: number | null; event?: Event; reason: NumberFieldChangeReason }\n ): boolean {\n const prev = params.currentValue == null ? this.currentValue() : params.currentValue;\n const nextValue = typeof prev === 'number' ? prev + amount * params.direction : Math.max(0, this.min() ?? 0);\n return this.setValue(nextValue, params.reason, params.event, params.direction);\n }\n\n /** @ignore Emits the committed value at the end of an interaction. */\n commitValue(value: number | null): void {\n this.hasPendingCommit = false;\n this.onValueCommitted.emit(value);\n }\n\n private applyValue(value: number | null): void {\n this.value.set(value);\n this.cva.setValue(value);\n }\n}\n","import { Signal } from '@angular/core';\nimport { createContext } from '@radix-ng/primitives/core';\n\nexport interface RdxNumberFieldScrubAreaContext {\n /** Whether a scrub gesture is currently in progress. */\n readonly isScrubbing: Signal<boolean>;\n /** Whether the active scrub was started with touch input. */\n readonly isTouchInput: Signal<boolean>;\n /** Whether the browser denied the Pointer Lock request. */\n readonly isPointerLockDenied: Signal<boolean>;\n /** Registers (or clears) the virtual cursor element so the scrub area can move it. */\n registerCursor(element: HTMLElement | null): void;\n}\n\n/**\n * Context shared from the scrub area to its virtual cursor child.\n *\n * @see https://base-ui.com/react/components/number-field\n */\nexport const [injectNumberFieldScrubAreaContext, provideNumberFieldScrubAreaContext] =\n createContext<RdxNumberFieldScrubAreaContext>('RdxNumberFieldScrubAreaContext', 'components/number-field');\n","import { computed, Directive, effect, ElementRef, inject, input, numberAttribute, signal } from '@angular/core';\nimport { NumberInput } from '@radix-ng/primitives/core';\nimport { injectNumberFieldRootContext } from './number-field-context';\nimport { provideNumberFieldScrubAreaContext, RdxNumberFieldScrubAreaContext } from './number-field-scrub-area-context';\nimport { numberOrUndefined } from './number-field.utils';\n\ntype ScrubDirection = 'horizontal' | 'vertical';\n\nfunction isWebKitBrowser(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n /AppleWebKit/.test(navigator.userAgent) &&\n !/Chrome/.test(navigator.userAgent)\n );\n}\n\nfunction isFirefoxBrowser(): boolean {\n return typeof navigator !== 'undefined' && /firefox/i.test(navigator.userAgent);\n}\n\n/** Calculates the viewport rect the virtual cursor loops within. */\nfunction getViewportRect(teleportDistance: number | undefined, scrubAreaEl: HTMLElement) {\n const win = scrubAreaEl.ownerDocument.defaultView ?? window;\n const rect = scrubAreaEl.getBoundingClientRect();\n\n if (rect && teleportDistance != null) {\n return {\n x: rect.left - teleportDistance / 2,\n y: rect.top - teleportDistance / 2,\n width: rect.right + teleportDistance / 2,\n height: rect.bottom + teleportDistance / 2\n };\n }\n\n const vV = win.visualViewport;\n if (vV) {\n return { x: vV.offsetLeft, y: vV.offsetTop, width: vV.offsetLeft + vV.width, height: vV.offsetTop + vV.height };\n }\n\n return {\n x: 0,\n y: 0,\n width: win.document.documentElement.clientWidth,\n height: win.document.documentElement.clientHeight\n };\n}\n\n/**\n * An interactive area where the user can click and drag to change the field value.\n * Uses the Pointer Lock API for continuous dragging (disabled in Safari to avoid layout shift).\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: '[rdxNumberFieldScrubArea]',\n exportAs: 'rdxNumberFieldScrubArea',\n providers: [provideNumberFieldScrubAreaContext(() => inject(RdxNumberFieldScrubArea).context)],\n host: {\n role: 'presentation',\n '[style.touch-action]': '\"none\"',\n '[style.user-select]': '\"none\"',\n '[style.-webkit-user-select]': '\"none\"',\n '[attr.data-disabled]': 'rootContext.isDisabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-scrubbing]': 'isScrubbing() ? \"\" : undefined',\n '(pointerdown)': 'onPointerDown($event)',\n '(touchstart)': 'onTouchStart($event)'\n }\n})\nexport class RdxNumberFieldScrubArea {\n protected readonly rootContext = injectNumberFieldRootContext();\n\n /**\n * The direction the cursor must move to change the value.\n * @default 'horizontal'\n */\n readonly direction = input<ScrubDirection>('horizontal');\n\n /**\n * How many pixels the cursor must move before the value changes. Higher is less sensitive.\n * @default 2\n */\n readonly pixelSensitivity = input<number, NumberInput>(2, { transform: numberAttribute });\n\n /**\n * If set, the distance the cursor may move from the scrub area center before it loops back.\n */\n readonly teleportDistance = input<number | undefined, NumberInput>(undefined, { transform: numberOrUndefined });\n\n protected readonly isScrubbing = signal(false);\n private readonly isTouchInput = signal(false);\n private readonly isPointerLockDenied = signal(false);\n private readonly cursorEl = signal<HTMLElement | null>(null);\n\n private readonly scrubAreaEl = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n private isScrubbingRef = false;\n private didMove = false;\n private pointerDownTarget: EventTarget | null = null;\n private virtualCursorCoords = { x: 0, y: 0 };\n private visualScale = 1;\n\n /** @ignore Exposed to the scrub-area context provider. */\n readonly context: RdxNumberFieldScrubAreaContext = {\n isScrubbing: this.isScrubbing.asReadonly(),\n isTouchInput: this.isTouchInput.asReadonly(),\n isPointerLockDenied: this.isPointerLockDenied.asReadonly(),\n registerCursor: (el) => this.cursorEl.set(el)\n };\n\n private readonly canScrub = computed(() => !this.rootContext.isDisabled() && !this.rootContext.readonly());\n\n constructor() {\n const root = this.rootContext;\n\n // Register global listeners only while actively scrubbing.\n effect((onCleanup) => {\n if (!root.inputEl() || !this.canScrub() || !this.isScrubbing()) {\n return;\n }\n\n let cumulativeDelta = 0;\n\n const handlePointerMove = (event: PointerEvent) => {\n if (!this.isScrubbingRef) {\n return;\n }\n event.preventDefault();\n this.onScrub(event);\n\n const { movementX, movementY } = event;\n cumulativeDelta += this.direction() === 'vertical' ? movementY : movementX;\n\n if (Math.abs(cumulativeDelta) >= this.pixelSensitivity()) {\n cumulativeDelta = 0;\n this.didMove = true;\n const dValue = this.direction() === 'vertical' ? -movementY : movementX;\n const stepAmount = root.getStepAmount(event);\n const rawAmount = dValue * stepAmount;\n\n if (rawAmount !== 0) {\n root.allowInputSync = true;\n root.incrementValue(Math.abs(rawAmount), {\n direction: rawAmount >= 0 ? 1 : -1,\n event,\n reason: 'scrub'\n });\n }\n }\n };\n\n const handlePointerUp = (event: PointerEvent) => {\n const finish = () => {\n try {\n this.scrubAreaEl.ownerDocument.exitPointerLock();\n } catch {\n // Ignore — pointer lock may not be active.\n }\n this.isScrubbingRef = false;\n this.onScrubbingChange(false, event);\n root.commitValue(root.lastChangedValue ?? root.currentValue());\n\n // Manually dispatch a click when no movement happened, since preventDefault on\n // pointerdown suppresses the browser's synthetic click.\n if (!this.didMove && this.pointerDownTarget && root.inputEl()) {\n this.pointerDownTarget.dispatchEvent(\n new MouseEvent('click', { bubbles: true, cancelable: true })\n );\n }\n\n this.didMove = false;\n this.pointerDownTarget = null;\n };\n\n if (isFirefoxBrowser()) {\n // Firefox needs a small delay or pointer lock won't release on a soft click.\n setTimeout(finish, 20);\n } else {\n finish();\n }\n };\n\n const win = this.scrubAreaEl.ownerDocument.defaultView ?? window;\n const vV = win.visualViewport;\n const handleVisualResize = () => {\n if (vV) {\n this.visualScale = vV.scale;\n }\n };\n handleVisualResize();\n\n win.addEventListener('pointermove', handlePointerMove, true);\n win.addEventListener('pointerup', handlePointerUp, true);\n win.addEventListener('pointercancel', handlePointerUp, true);\n vV?.addEventListener('resize', handleVisualResize);\n\n onCleanup(() => {\n win.removeEventListener('pointermove', handlePointerMove, true);\n win.removeEventListener('pointerup', handlePointerUp, true);\n win.removeEventListener('pointercancel', handlePointerUp, true);\n vV?.removeEventListener('resize', handleVisualResize);\n });\n });\n }\n\n async onPointerDown(event: PointerEvent): Promise<void> {\n const isMainButton = !event.button || event.button === 0;\n if (event.defaultPrevented || !isMainButton || !this.canScrub()) {\n return;\n }\n\n const isTouch = event.pointerType === 'touch';\n this.isTouchInput.set(isTouch);\n\n if (event.pointerType === 'mouse') {\n event.preventDefault();\n this.rootContext.inputEl()?.focus();\n }\n\n this.isScrubbingRef = true;\n this.didMove = false;\n this.pointerDownTarget = event.target;\n this.onScrubbingChange(true, event);\n\n // WebKit causes significant layout shift with the native pointer-lock message.\n if (!isTouch && !isWebKitBrowser()) {\n try {\n await this.scrubAreaEl.ownerDocument.body.requestPointerLock();\n this.isPointerLockDenied.set(false);\n } catch {\n this.isPointerLockDenied.set(true);\n } finally {\n if (this.isScrubbingRef) {\n this.onScrubbingChange(true, event);\n }\n }\n }\n }\n\n onTouchStart(event: TouchEvent): void {\n if (!this.canScrub()) {\n return;\n }\n // Prevent scrolling using touch input when scrubbing.\n if (event.touches.length === 1) {\n event.preventDefault();\n }\n }\n\n private onScrub(event: PointerEvent): void {\n const cursor = this.cursorEl();\n if (!cursor) {\n return;\n }\n\n const rect = getViewportRect(this.teleportDistance(), this.scrubAreaEl);\n const coords = this.virtualCursorCoords;\n const newCoords = { x: Math.round(coords.x + event.movementX), y: Math.round(coords.y + event.movementY) };\n\n const cursorWidth = cursor.offsetWidth;\n const cursorHeight = cursor.offsetHeight;\n\n if (newCoords.x + cursorWidth / 2 < rect.x) {\n newCoords.x = rect.width - cursorWidth / 2;\n } else if (newCoords.x + cursorWidth / 2 > rect.width) {\n newCoords.x = rect.x - cursorWidth / 2;\n }\n\n if (newCoords.y + cursorHeight / 2 < rect.y) {\n newCoords.y = rect.height - cursorHeight / 2;\n } else if (newCoords.y + cursorHeight / 2 > rect.height) {\n newCoords.y = rect.y - cursorHeight / 2;\n }\n\n this.virtualCursorCoords = newCoords;\n this.updateCursorTransform(newCoords.x, newCoords.y);\n }\n\n private onScrubbingChange(scrubbing: boolean, event: PointerEvent): void {\n this.isScrubbing.set(scrubbing);\n this.rootContext.isScrubbing.set(scrubbing);\n\n const cursor = this.cursorEl();\n if (!cursor || !scrubbing) {\n return;\n }\n\n const initialCoords = {\n x: event.clientX - cursor.offsetWidth / 2,\n y: event.clientY - cursor.offsetHeight / 2\n };\n this.virtualCursorCoords = initialCoords;\n this.updateCursorTransform(initialCoords.x, initialCoords.y);\n }\n\n private updateCursorTransform(x: number, y: number): void {\n const cursor = this.cursorEl();\n if (cursor) {\n cursor.style.transform = `translate3d(${x}px,${y}px,0) scale(${1 / this.visualScale})`;\n }\n }\n}\n","import { computed, DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { RdxPortal } from '@radix-ng/primitives/portal';\nimport { injectNumberFieldScrubAreaContext } from './number-field-scrub-area-context';\n\nfunction isWebKitBrowser(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n /AppleWebKit/.test(navigator.userAgent) &&\n !/Chrome/.test(navigator.userAgent)\n );\n}\n\n/**\n * A custom element shown instead of the native cursor while scrubbing. It is portaled to the\n * document body and positioned with the Pointer Lock API. Hidden in Safari (which would shift\n * layout with the native pointer-lock notification) and for touch input.\n *\n * @see https://base-ui.com/react/components/number-field\n */\n@Directive({\n selector: '[rdxNumberFieldScrubAreaCursor]',\n exportAs: 'rdxNumberFieldScrubAreaCursor',\n hostDirectives: [RdxPortal],\n host: {\n role: 'presentation',\n '[style.position]': '\"fixed\"',\n '[style.top.px]': '0',\n '[style.left.px]': '0',\n '[style.pointer-events]': '\"none\"',\n '[style.opacity]': 'shouldRender() ? \"1\" : \"0\"'\n }\n})\nexport class RdxNumberFieldScrubAreaCursor {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly scrubContext = injectNumberFieldScrubAreaContext();\n\n protected readonly shouldRender = computed(\n () =>\n this.scrubContext.isScrubbing() &&\n !isWebKitBrowser() &&\n !this.scrubContext.isTouchInput() &&\n !this.scrubContext.isPointerLockDenied()\n );\n\n constructor() {\n this.scrubContext.registerCursor(this.elementRef.nativeElement);\n inject(DestroyRef).onDestroy(() => this.scrubContext.registerCursor(null));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxNumberFieldDecrement } from './src/number-field-decrement';\nimport { RdxNumberFieldGroup } from './src/number-field-group';\nimport { RdxNumberFieldHiddenInput } from './src/number-field-hidden-input';\nimport { RdxNumberFieldIncrement } from './src/number-field-increment';\nimport { RdxNumberFieldInput } from './src/number-field-input';\nimport { RdxNumberFieldRoot } from './src/number-field-root';\nimport { RdxNumberFieldScrubArea } from './src/number-field-scrub-area';\nimport { RdxNumberFieldScrubAreaCursor } from './src/number-field-scrub-area-cursor';\n\nexport * from './src/number-field-button';\nexport * from './src/number-field-context';\nexport * from './src/number-field-decrement';\nexport * from './src/number-field-group';\nexport * from './src/number-field-hidden-input';\nexport * from './src/number-field-increment';\nexport * from './src/number-field-input';\nexport * from './src/number-field-root';\nexport * from './src/number-field-scrub-area';\nexport * from './src/number-field-scrub-area-context';\nexport * from './src/number-field-scrub-area-cursor';\nexport * from './src/number-field.utils';\nexport * from './src/types';\n\nconst _imports = [\n RdxNumberFieldRoot,\n RdxNumberFieldGroup,\n RdxNumberFieldInput,\n RdxNumberFieldHiddenInput,\n RdxNumberFieldIncrement,\n RdxNumberFieldDecrement,\n RdxNumberFieldScrubArea,\n RdxNumberFieldScrubAreaCursor\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxNumberFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isWebKitBrowser","i1"],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ import { provideRdxPresenceContext, RdxPresenceDirective } from '@radix-ng/primi
|
|
|
15
15
|
|
|
16
16
|
const transformModal = (value) => value === 'trap-focus' ? value : booleanAttribute(value);
|
|
17
17
|
const context = () => contextFor(inject(RdxPopoverRoot));
|
|
18
|
-
const [injectRdxPopoverRootContext, provideRdxPopoverRootContext] = createContext('RdxPopoverRootContext');
|
|
18
|
+
const [injectRdxPopoverRootContext, provideRdxPopoverRootContext] = createContext('RdxPopoverRootContext', 'components/popover');
|
|
19
19
|
/**
|
|
20
20
|
* Groups all parts of the popover.
|
|
21
21
|
*/
|