ng-primitives 0.124.0 → 0.125.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/date-time-date-fns/README.md +3 -0
  2. package/fesm2022/ng-primitives-avatar.mjs +4 -2
  3. package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
  4. package/fesm2022/ng-primitives-checkbox.mjs +4 -2
  5. package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
  6. package/fesm2022/ng-primitives-date-picker.mjs +42 -44
  7. package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
  8. package/fesm2022/ng-primitives-date-time-date-fns.mjs +95 -0
  9. package/fesm2022/ng-primitives-date-time-date-fns.mjs.map +1 -0
  10. package/fesm2022/ng-primitives-date-time-luxon.mjs +21 -3
  11. package/fesm2022/ng-primitives-date-time-luxon.mjs.map +1 -1
  12. package/fesm2022/ng-primitives-date-time.mjs +18 -3
  13. package/fesm2022/ng-primitives-date-time.mjs.map +1 -1
  14. package/fesm2022/ng-primitives-dialog.mjs +11 -4
  15. package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
  16. package/fesm2022/ng-primitives-form-field.mjs +3 -0
  17. package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
  18. package/fesm2022/ng-primitives-input-otp.mjs +15 -7
  19. package/fesm2022/ng-primitives-input-otp.mjs.map +1 -1
  20. package/fesm2022/ng-primitives-listbox.mjs +5 -4
  21. package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
  22. package/fesm2022/ng-primitives-menu.mjs +8 -0
  23. package/fesm2022/ng-primitives-menu.mjs.map +1 -1
  24. package/fesm2022/ng-primitives-meter.mjs +20 -5
  25. package/fesm2022/ng-primitives-meter.mjs.map +1 -1
  26. package/fesm2022/ng-primitives-number-field.mjs +10 -0
  27. package/fesm2022/ng-primitives-number-field.mjs.map +1 -1
  28. package/fesm2022/ng-primitives-pagination.mjs +16 -6
  29. package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
  30. package/fesm2022/ng-primitives-popover.mjs +4 -0
  31. package/fesm2022/ng-primitives-popover.mjs.map +1 -1
  32. package/fesm2022/ng-primitives-progress.mjs +36 -11
  33. package/fesm2022/ng-primitives-progress.mjs.map +1 -1
  34. package/fesm2022/ng-primitives-roving-focus.mjs +13 -2
  35. package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
  36. package/fesm2022/ng-primitives-search.mjs +2 -1
  37. package/fesm2022/ng-primitives-search.mjs.map +1 -1
  38. package/fesm2022/ng-primitives-slider.mjs +38 -18
  39. package/fesm2022/ng-primitives-slider.mjs.map +1 -1
  40. package/fesm2022/ng-primitives-switch.mjs +18 -8
  41. package/fesm2022/ng-primitives-switch.mjs.map +1 -1
  42. package/fesm2022/ng-primitives-tabs.mjs +22 -6
  43. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  44. package/fesm2022/ng-primitives-textarea.mjs +10 -8
  45. package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
  46. package/fesm2022/ng-primitives-toast.mjs +3 -0
  47. package/fesm2022/ng-primitives-toast.mjs.map +1 -1
  48. package/fesm2022/ng-primitives-toggle-group.mjs +31 -8
  49. package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
  50. package/package.json +8 -1
  51. package/schematics/ng-generate/templates/checkbox/checkbox.__fileSuffix@dasherize__.ts.template +2 -1
  52. package/schematics/ng-generate/templates/combobox/combobox.__fileSuffix@dasherize__.ts.template +3 -2
  53. package/schematics/ng-generate/templates/date-picker/date-picker.__fileSuffix@dasherize__.ts.template +2 -1
  54. package/schematics/ng-generate/templates/listbox/listbox.__fileSuffix@dasherize__.ts.template +9 -4
  55. package/schematics/ng-generate/templates/pagination/pagination.__fileSuffix@dasherize__.ts.template +7 -1
  56. package/schematics/ng-generate/templates/range-slider/range-slider.__fileSuffix@dasherize__.ts.template +4 -3
  57. package/schematics/ng-generate/templates/slider/slider.__fileSuffix@dasherize__.ts.template +2 -1
  58. package/schematics/ng-generate/templates/switch/switch.__fileSuffix@dasherize__.ts.template +2 -1
  59. package/types/ng-primitives-checkbox.d.ts +5 -1
  60. package/types/ng-primitives-date-picker.d.ts +7 -9
  61. package/types/ng-primitives-date-time-date-fns.d.ts +30 -0
  62. package/types/ng-primitives-date-time.d.ts +15 -3
  63. package/types/ng-primitives-dialog.d.ts +4 -0
  64. package/types/ng-primitives-input-otp.d.ts +5 -5
  65. package/types/ng-primitives-meter.d.ts +9 -2
  66. package/types/ng-primitives-pagination.d.ts +34 -8
  67. package/types/ng-primitives-progress.d.ts +4 -2
  68. package/types/ng-primitives-roving-focus.d.ts +7 -0
  69. package/types/ng-primitives-slider.d.ts +5 -4
  70. package/types/ng-primitives-switch.d.ts +14 -4
  71. package/types/ng-primitives-tabs.d.ts +6 -1
  72. package/types/ng-primitives-toggle-group.d.ts +51 -37
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-meter.mjs","sources":["../../../../packages/ng-primitives/meter/src/meter/meter-state.ts","../../../../packages/ng-primitives/meter/src/meter/meter.ts","../../../../packages/ng-primitives/meter/src/meter-track/meter-track.ts","../../../../packages/ng-primitives/meter/src/meter-indicator/meter-indicator.ts","../../../../packages/ng-primitives/meter/src/meter-value/meter-value.ts","../../../../packages/ng-primitives/meter/src/meter-label/meter-label.ts","../../../../packages/ng-primitives/meter/src/ng-primitives-meter.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpMeter } from './meter';\n\n/**\n * The state token for the Meter primitive.\n */\nexport const NgpMeterStateToken = createStateToken<NgpMeter>('Meter');\n\n/**\n * Provides the Meter state.\n */\nexport const provideMeterState = createStateProvider(NgpMeterStateToken);\n\n/**\n * Injects the Meter state.\n */\nexport const injectMeterState = createStateInjector<NgpMeter>(NgpMeterStateToken);\n\n/**\n * The Meter state registration function.\n */\nexport const meterState = createState(NgpMeterStateToken);\n","import { NumberInput } from '@angular/cdk/coercion';\nimport { computed, Directive, input, numberAttribute, signal } from '@angular/core';\nimport type { NgpMeterLabel } from '../meter-label/meter-label';\nimport { meterState, provideMeterState } from './meter-state';\n\n@Directive({\n selector: '[ngpMeter]',\n exportAs: 'ngpMeter',\n providers: [provideMeterState()],\n host: {\n role: 'meter',\n '[attr.aria-valuenow]': 'percentage()',\n '[attr.aria-valuemin]': 'min()',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-valuetext]': 'valueLabel()(value(), max())',\n '[attr.aria-labelledby]': 'label()?.id()',\n },\n})\nexport class NgpMeter {\n /** The value of the meter. */\n readonly value = input<number, NumberInput>(0, {\n alias: 'ngpMeterValue',\n transform: numberAttribute,\n });\n\n /** The minimum value of the meter. */\n readonly min = input<number, NumberInput>(0, {\n alias: 'ngpMeterMin',\n transform: numberAttribute,\n });\n\n /** The maximum value of the meter. */\n readonly max = input<number, NumberInput>(100, {\n alias: 'ngpMeterMax',\n transform: numberAttribute,\n });\n\n /**\n * Define a function that returns the meter value label.\n * @param value The current value\n * @param max The maximum value\n * @returns The value label\n */\n readonly valueLabel = input<NgpMeterValueTextFn>(\n (value, max) => `${Math.round((value / max) * 100)}%`,\n {\n alias: 'ngpMeterValueLabel',\n },\n );\n\n /** @internal Store the label instance */\n readonly label = signal<NgpMeterLabel | null>(null);\n\n /** @internal The percentage of the meter. */\n readonly percentage = computed(() => {\n const value = this.state.value();\n const min = this.state.min();\n const max = this.state.max();\n\n if (value == null) {\n return 0;\n }\n\n if (value < min) {\n return 0;\n }\n\n if (value > max) {\n return 100;\n }\n\n return ((value - min) / (max - min)) * 100;\n });\n\n /** The state of the meter. */\n private readonly state = meterState<NgpMeter>(this);\n}\n\nexport type NgpMeterValueTextFn = (value: number, max: number) => string;\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngpMeterTrack]',\n exportAs: 'ngpMeterTrack',\n})\nexport class NgpMeterTrack {}\n","import { Directive } from '@angular/core';\nimport { injectMeterState } from '../meter/meter-state';\n\n@Directive({\n selector: '[ngpMeterIndicator]',\n exportAs: 'ngpMeterIndicator',\n host: {\n '[style.width.%]': 'meter().percentage()',\n },\n})\nexport class NgpMeterIndicator {\n /** Access the meter */\n protected readonly meter = injectMeterState();\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngpMeterValue]',\n exportAs: 'ngpMeterValue',\n host: {\n 'aria-hidden': 'true',\n },\n})\nexport class NgpMeterValue {}\n","import { Directive, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectMeterState } from '../meter/meter-state';\n\n@Directive({\n selector: '[ngpMeterLabel]',\n exportAs: 'ngpMeterLabel',\n host: {\n '[attr.id]': 'id()',\n },\n})\nexport class NgpMeterLabel {\n /** Access the meter */\n protected readonly meter = injectMeterState();\n\n /** The id of the meter label */\n readonly id = input(uniqueId('ngp-meter-label'));\n\n constructor() {\n // Register the label with the meter\n this.meter().label.set(this);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-primitives-meter.mjs","sources":["../../../../packages/ng-primitives/meter/src/meter/meter-state.ts","../../../../packages/ng-primitives/meter/src/meter/meter.ts","../../../../packages/ng-primitives/meter/src/meter-track/meter-track.ts","../../../../packages/ng-primitives/meter/src/meter-indicator/meter-indicator.ts","../../../../packages/ng-primitives/meter/src/meter-value/meter-value.ts","../../../../packages/ng-primitives/meter/src/meter-label/meter-label.ts","../../../../packages/ng-primitives/meter/src/ng-primitives-meter.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpMeter } from './meter';\n\n/**\n * The state token for the Meter primitive.\n */\nexport const NgpMeterStateToken = createStateToken<NgpMeter>('Meter');\n\n/**\n * Provides the Meter state.\n */\nexport const provideMeterState = createStateProvider(NgpMeterStateToken);\n\n/**\n * Injects the Meter state.\n */\nexport const injectMeterState = createStateInjector<NgpMeter>(NgpMeterStateToken);\n\n/**\n * The Meter state registration function.\n */\nexport const meterState = createState(NgpMeterStateToken);\n","import { NumberInput } from '@angular/cdk/coercion';\nimport { computed, Directive, input, numberAttribute, signal } from '@angular/core';\nimport type { NgpMeterLabel } from '../meter-label/meter-label';\nimport { meterState, provideMeterState } from './meter-state';\n\n@Directive({\n selector: '[ngpMeter]',\n exportAs: 'ngpMeter',\n providers: [provideMeterState()],\n host: {\n role: 'meter',\n '[attr.aria-valuenow]': 'valueNow()',\n '[attr.aria-valuemin]': 'min()',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-valuetext]': 'valueLabel()(value(), max(), min())',\n '[attr.aria-labelledby]': 'label()?.id()',\n },\n})\nexport class NgpMeter {\n /** The value of the meter. */\n readonly value = input<number, NumberInput>(0, {\n alias: 'ngpMeterValue',\n transform: numberAttribute,\n });\n\n /** The minimum value of the meter. */\n readonly min = input<number, NumberInput>(0, {\n alias: 'ngpMeterMin',\n transform: numberAttribute,\n });\n\n /** The maximum value of the meter. */\n readonly max = input<number, NumberInput>(100, {\n alias: 'ngpMeterMax',\n transform: numberAttribute,\n });\n\n /**\n * Define a function that returns the meter value label.\n * @param value The current value\n * @param max The maximum value\n * @param min The minimum value\n * @returns The value label\n */\n readonly valueLabel = input<NgpMeterValueTextFn>(\n (value, max, min) => `${max === min ? 0 : Math.round(((value - min) / (max - min)) * 100)}%`,\n {\n alias: 'ngpMeterValueLabel',\n },\n );\n\n /** @internal Store the label instance */\n readonly label = signal<NgpMeterLabel | null>(null);\n\n /** @internal The percentage of the meter, used for the visual indicator width. */\n readonly percentage = computed(() => {\n const value = this.state.value();\n const min = this.state.min();\n const max = this.state.max();\n\n if (value == null) {\n return 0;\n }\n\n if (value < min) {\n return 0;\n }\n\n if (value > max) {\n return 100;\n }\n\n return ((value - min) / (max - min)) * 100;\n });\n\n /**\n * @internal\n * The raw value exposed via `aria-valuenow`, clamped to the [min, max] range.\n * Per the ARIA meter pattern, `aria-valuenow` is the actual value, not a percentage.\n */\n readonly valueNow = computed(() => {\n const value = this.state.value();\n const min = this.state.min();\n const max = this.state.max();\n\n if (value == null) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n });\n\n /** The state of the meter. */\n private readonly state = meterState<NgpMeter>(this);\n}\n\nexport type NgpMeterValueTextFn = (value: number, max: number, min: number) => string;\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngpMeterTrack]',\n exportAs: 'ngpMeterTrack',\n})\nexport class NgpMeterTrack {}\n","import { Directive } from '@angular/core';\nimport { injectMeterState } from '../meter/meter-state';\n\n@Directive({\n selector: '[ngpMeterIndicator]',\n exportAs: 'ngpMeterIndicator',\n host: {\n '[style.width.%]': 'meter().percentage()',\n },\n})\nexport class NgpMeterIndicator {\n /** Access the meter */\n protected readonly meter = injectMeterState();\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngpMeterValue]',\n exportAs: 'ngpMeterValue',\n host: {\n 'aria-hidden': 'true',\n },\n})\nexport class NgpMeterValue {}\n","import { Directive, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectMeterState } from '../meter/meter-state';\n\n@Directive({\n selector: '[ngpMeterLabel]',\n exportAs: 'ngpMeterLabel',\n host: {\n '[attr.id]': 'id()',\n },\n})\nexport class NgpMeterLabel {\n /** Access the meter */\n protected readonly meter = injectMeterState();\n\n /** The id of the meter label */\n readonly id = input(uniqueId('ngp-meter-label'));\n\n constructor() {\n // Register the label with the meter\n this.meter().label.set(this);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -401,6 +401,16 @@ const [NgpNumberFieldInputStateToken, ngpNumberFieldInput, injectNumberFieldInpu
401
401
  numberField().decrement(useLargeStep ? getLargeStepMultiplier() : 1);
402
402
  elementRef.nativeElement.value = formatDisplayValue();
403
403
  break;
404
+ case 'PageUp':
405
+ event.preventDefault();
406
+ numberField().increment(getLargeStepMultiplier());
407
+ elementRef.nativeElement.value = formatDisplayValue();
408
+ break;
409
+ case 'PageDown':
410
+ event.preventDefault();
411
+ numberField().decrement(getLargeStepMultiplier());
412
+ elementRef.nativeElement.value = formatDisplayValue();
413
+ break;
404
414
  case 'Home':
405
415
  if (isFinite(numberField().min())) {
406
416
  event.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-number-field.mjs","sources":["../../../../packages/ng-primitives/number-field/src/number-field/number-field-state.ts","../../../../packages/ng-primitives/number-field/src/number-field/number-field.ts","../../../../packages/ng-primitives/number-field/src/number-field-input/number-field-input-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-input/number-field-input.ts","../../../../packages/ng-primitives/number-field/src/number-field-increment/number-field-increment-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-increment/number-field-increment.ts","../../../../packages/ng-primitives/number-field/src/number-field-decrement/number-field-decrement-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-decrement/number-field-decrement.ts","../../../../packages/ng-primitives/number-field/src/ng-primitives-number-field.ts"],"sourcesContent":["import { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the NumberField primitive.\n */\nexport interface NgpNumberFieldState {\n /**\n * The id of the number field.\n */\n readonly id: Signal<string>;\n /**\n * The current value.\n */\n readonly value: WritableSignal<number | null>;\n /**\n * The minimum value.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max: Signal<number>;\n /**\n * The step value.\n */\n readonly step: Signal<number>;\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep: Signal<number>;\n /**\n * Whether the number field is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * Whether the number field is readonly.\n */\n readonly readonly: WritableSignal<boolean>;\n /**\n * Whether the increment button should be disabled.\n */\n readonly canIncrement: Signal<boolean>;\n /**\n * Whether the decrement button should be disabled.\n */\n readonly canDecrement: Signal<boolean>;\n /**\n * Emit when the value changes.\n */\n readonly valueChange: Observable<number | null>;\n /**\n * Set the current value (clamped and stepped).\n */\n setValue(value: number | null): void;\n /**\n * Increment the value by one step.\n */\n increment(multiplier?: number): void;\n /**\n * Decrement the value by one step.\n */\n decrement(multiplier?: number): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the readonly state.\n */\n setReadonly(readonly: boolean): void;\n /** @internal */\n registerInputCommit(commitFn: () => void): void;\n}\n\n/**\n * Inputs for configuring the NumberField primitive.\n */\nexport interface NgpNumberFieldProps {\n /**\n * The id of the number field.\n */\n readonly id?: Signal<string>;\n /**\n * The current value.\n */\n readonly value?: Signal<number | null>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep?: Signal<number>;\n /**\n * Whether the number field is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Whether the number field is readonly.\n */\n readonly readonly?: Signal<boolean>;\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: number | null) => void;\n}\n\nexport const [\n NgpNumberFieldStateToken,\n ngpNumberField,\n injectNumberFieldState,\n provideNumberFieldState,\n] = createPrimitive(\n 'NgpNumberField',\n ({\n id = signal(uniqueId('ngp-number-field')),\n value: _value = signal<number | null>(null),\n min = signal(-Infinity),\n max = signal(Infinity),\n step = signal(1),\n largeStep: _largeStep = signal(10),\n disabled: _disabled = signal(false),\n readonly: _readonly = signal(false),\n onValueChange,\n }: NgpNumberFieldProps): NgpNumberFieldState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const disabled = controlled(_disabled);\n const readonly = controlled(_readonly);\n\n const valueChange = emitter<number | null>();\n\n const canIncrement = computed(() => {\n if (disabled() || readonly()) return false;\n if (value() === null) return true;\n return value()! < max();\n });\n\n const canDecrement = computed(() => {\n if (disabled() || readonly()) return false;\n if (value() === null) return true;\n return value()! > min();\n });\n\n // Host bindings\n attrBinding(element, 'role', () => 'group');\n dataBinding(element, 'data-disabled', disabled);\n dataBinding(element, 'data-readonly', readonly);\n\n /**\n * Count the number of decimal places in a number.\n */\n function getDecimalPlaces(n: number): number {\n const str = String(n);\n const dotIndex = str.indexOf('.');\n return dotIndex === -1 ? 0 : str.length - dotIndex - 1;\n }\n\n /**\n * Round a number to a specific number of decimal places to avoid\n * floating point precision issues (e.g. 0.1 + 0.2 = 0.30000000000000004).\n */\n function roundToPrecision(val: number, precision: number): number {\n if (precision === 0) return Math.round(val);\n return parseFloat(val.toFixed(precision));\n }\n\n function clampAndStep(val: number): number {\n const clamped = Math.min(max(), Math.max(min(), val));\n // Round to nearest step\n if (isFinite(step()) && step() > 0) {\n const base = isFinite(min()) ? min() : 0;\n const precision = Math.max(getDecimalPlaces(step()), getDecimalPlaces(base));\n const stepped = roundToPrecision(\n Math.round((clamped - base) / step()) * step() + base,\n precision,\n );\n return Math.min(max(), Math.max(min(), stepped));\n }\n return clamped;\n }\n\n let suppressEmit = false;\n\n function setValue(newValue: number | null): void {\n if (disabled() || readonly()) return;\n if (newValue !== null && isNaN(newValue)) return;\n const finalValue = newValue !== null ? clampAndStep(newValue) : null;\n // Skip emit when value is unchanged\n if (finalValue === value()) return;\n value.set(finalValue);\n if (!suppressEmit) {\n onValueChange?.(finalValue);\n valueChange.emit(finalValue);\n }\n }\n\n let inputCommitFn: (() => void) | null = null;\n\n function registerInputCommit(commitFn: () => void): void {\n inputCommitFn = commitFn;\n }\n\n /**\n * Commit any pending input value without emitting change events.\n * This ensures increment/decrement operates on the displayed value\n * while only emitting the final stepped result.\n */\n function commitPendingInputSilently(): void {\n if (!inputCommitFn) return;\n suppressEmit = true;\n try {\n inputCommitFn();\n } finally {\n suppressEmit = false;\n }\n }\n\n function getStepPrecision(): number {\n const base = isFinite(min()) ? min() : 0;\n return Math.max(getDecimalPlaces(step()), getDecimalPlaces(base));\n }\n\n function increment(multiplier: number = 1): void {\n if (!canIncrement()) return;\n const valueBefore = value();\n commitPendingInputSilently();\n const valueAfterCommit = value();\n const current = valueAfterCommit ?? (isFinite(min()) ? min() : 0);\n const precision = getStepPrecision();\n setValue(roundToPrecision(current + step() * multiplier, precision));\n // If the silent commit changed the value but setValue was a no-op\n // (stepped result clamped back to the committed value), emit the change\n // so the parent learns about the new value.\n if (valueBefore !== value() && valueAfterCommit === value()) {\n onValueChange?.(value());\n valueChange.emit(value());\n }\n }\n\n function decrement(multiplier: number = 1): void {\n if (!canDecrement()) return;\n const valueBefore = value();\n commitPendingInputSilently();\n const valueAfterCommit = value();\n const current = valueAfterCommit ?? (isFinite(max()) ? max() : 0);\n const precision = getStepPrecision();\n setValue(roundToPrecision(current - step() * multiplier, precision));\n // If the silent commit changed the value but setValue was a no-op\n // (stepped result clamped back to the committed value), emit the change\n // so the parent learns about the new value.\n if (valueBefore !== value() && valueAfterCommit === value()) {\n onValueChange?.(value());\n valueChange.emit(value());\n }\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n }\n\n function setReadonly(isReadonly: boolean): void {\n readonly.set(isReadonly);\n }\n\n return {\n id,\n value,\n min,\n max,\n step,\n largeStep: _largeStep,\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n readonly: deprecatedSetter(readonly, 'setReadonly'),\n canIncrement,\n canDecrement,\n valueChange: valueChange.asObservable(),\n setValue,\n increment,\n decrement,\n setDisabled,\n setReadonly,\n registerInputCommit,\n } satisfies NgpNumberFieldState;\n },\n);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, numberAttribute, output } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpNumberField, provideNumberFieldState } from './number-field-state';\n\n/**\n * Apply the `ngpNumberField` directive to an element that represents the number field\n * and contains the input, increment, and decrement buttons.\n */\n@Directive({\n selector: '[ngpNumberField]',\n exportAs: 'ngpNumberField',\n providers: [provideNumberFieldState()],\n})\nexport class NgpNumberField {\n /**\n * The id of the number field. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-number-field'));\n\n /**\n * The value of the number field.\n */\n readonly value = input<number | null, NumberInput>(null, {\n alias: 'ngpNumberFieldValue',\n transform: (v: NumberInput) =>\n v === null || v === undefined || v === '' ? null : numberAttribute(v),\n });\n\n /**\n * Emits when the value changes.\n */\n readonly valueChange = output<number | null>({\n alias: 'ngpNumberFieldValueChange',\n });\n\n /**\n * The minimum value.\n */\n readonly min = input<number, NumberInput>(-Infinity, {\n alias: 'ngpNumberFieldMin',\n transform: numberAttribute,\n });\n\n /**\n * The maximum value.\n */\n readonly max = input<number, NumberInput>(Infinity, {\n alias: 'ngpNumberFieldMax',\n transform: numberAttribute,\n });\n\n /**\n * The step value.\n */\n readonly step = input<number, NumberInput>(1, {\n alias: 'ngpNumberFieldStep',\n transform: numberAttribute,\n });\n\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep = input<number, NumberInput>(10, {\n alias: 'ngpNumberFieldLargeStep',\n transform: numberAttribute,\n });\n\n /**\n * The disabled state of the number field.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The readonly state of the number field.\n */\n readonly readonly = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldReadonly',\n transform: booleanAttribute,\n });\n\n /**\n * @internal\n */\n protected readonly state = ngpNumberField({\n id: this.id,\n value: this.value,\n min: this.min,\n max: this.max,\n step: this.step,\n largeStep: this.largeStep,\n disabled: this.disabled,\n readonly: this.readonly,\n onValueChange: value => this.valueChange.emit(value),\n });\n\n /**\n * Set the value of the number field.\n */\n setValue(value: number | null): void {\n this.state.setValue(value);\n }\n\n /**\n * Increment the value.\n */\n increment(multiplier?: number): void {\n this.state.increment(multiplier);\n }\n\n /**\n * Decrement the value.\n */\n decrement(multiplier?: number): void {\n this.state.decrement(multiplier);\n }\n\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void {\n this.state.setDisabled(disabled);\n }\n\n /**\n * Set the readonly state.\n */\n setReadonly(readonly: boolean): void {\n this.state.setReadonly(readonly);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, Signal, signal } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { explicitEffect, injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Input primitive.\n */\nexport interface NgpNumberFieldInputState {\n /**\n * Focus the input element.\n */\n focus(): void;\n}\n\n/**\n * Inputs for configuring the NumberField Input primitive.\n */\nexport interface NgpNumberFieldInputProps {\n /**\n * Whether mouse wheel changes the value.\n */\n readonly allowWheelScrub?: Signal<boolean>;\n}\n\nexport const [\n NgpNumberFieldInputStateToken,\n ngpNumberFieldInput,\n injectNumberFieldInputState,\n provideNumberFieldInputState,\n] = createPrimitive(\n 'NgpNumberFieldInput',\n ({ allowWheelScrub = signal(false) }: NgpNumberFieldInputProps): NgpNumberFieldInputState => {\n const elementRef = injectElementRef<HTMLInputElement>();\n const numberField = injectNumberFieldState();\n const document = inject(DOCUMENT);\n\n // Form control integration — sets id, aria-labelledby, aria-describedby on the input\n ngpFormControl({ id: numberField().id, disabled: numberField().disabled });\n\n const tabindex = computed(() => (numberField().disabled() ? -1 : 0));\n\n // Host bindings\n const inputMode = computed(() => {\n const minVal = numberField().min();\n const stepVal = numberField().step();\n const allowsNegative = !isFinite(minVal) || minVal < 0;\n const hasDecimals = stepVal % 1 !== 0;\n\n // Some mobile keyboards can't show both minus sign and decimal point\n if (allowsNegative && hasDecimals) return 'text';\n if (hasDecimals) return 'decimal';\n if (!allowsNegative) return 'numeric';\n return 'text';\n });\n\n attrBinding(elementRef, 'role', 'spinbutton');\n attrBinding(elementRef, 'type', 'text');\n attrBinding(elementRef, 'inputmode', inputMode);\n attrBinding(elementRef, 'autocomplete', 'off');\n attrBinding(elementRef, 'autocorrect', 'off');\n attrBinding(elementRef, 'spellcheck', 'false');\n attrBinding(elementRef, 'aria-valuemin', () => {\n const min = numberField().min();\n return isFinite(min) ? min.toString() : null;\n });\n attrBinding(elementRef, 'aria-valuemax', () => {\n const max = numberField().max();\n return isFinite(max) ? max.toString() : null;\n });\n attrBinding(elementRef, 'aria-valuenow', () => numberField().value()?.toString() ?? null);\n attrBinding(elementRef, 'tabindex', () => tabindex().toString());\n attrBinding(elementRef, 'readonly', () => (numberField().readonly() ? '' : null));\n dataBinding(elementRef, 'data-readonly', () => numberField().readonly());\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n disabled: numberField().disabled,\n });\n\n let isFocused = false;\n\n /**\n * Parse text and set the number field value accordingly.\n */\n function parseAndSetValue(text: string): void {\n const trimmed = text.trim();\n if (trimmed === '' || trimmed === '-') {\n numberField().setValue(null);\n } else {\n const parsed = parseFloat(trimmed);\n if (!isNaN(parsed)) {\n numberField().setValue(parsed);\n }\n }\n }\n\n /**\n * Commit the current input text to the number field value.\n * Called before increment/decrement so they operate on the displayed value.\n */\n function commitInputValue(): void {\n if (!isFocused) return;\n parseAndSetValue(elementRef.nativeElement.value);\n }\n\n // Register the commit function with the number field so buttons can trigger it\n numberField().registerInputCommit(commitInputValue);\n\n function formatDisplayValue(): string {\n const val = numberField().value();\n return val !== null ? String(val) : '';\n }\n\n // Sync input display value when the number field value changes\n // (programmatically, via stepping, or on commit)\n explicitEffect([() => numberField().value()], ([value]) => {\n elementRef.nativeElement.value = value !== null ? String(value) : '';\n });\n\n listener(elementRef, 'focus', () => {\n isFocused = true;\n });\n\n listener(elementRef, 'blur', () => {\n isFocused = false;\n parseAndSetValue(elementRef.nativeElement.value);\n\n // Always sync the display value on blur to show the clamped/stepped value\n elementRef.nativeElement.value = formatDisplayValue();\n });\n\n // Reject characters that can't form a valid number\n listener(elementRef, 'beforeinput', (event: InputEvent) => {\n if (numberField().disabled() || numberField().readonly()) return;\n\n // Only filter insertions (typing, paste, drop)\n const insertTypes = ['insertText', 'insertFromPaste', 'insertFromDrop'];\n if (!insertTypes.includes(event.inputType) || !event.data) return;\n\n const input = elementRef.nativeElement;\n const selStart = input.selectionStart ?? 0;\n const selEnd = input.selectionEnd ?? 0;\n const current = input.value;\n const proposed = current.slice(0, selStart) + event.data + current.slice(selEnd);\n\n const minVal = numberField().min();\n const allowsNegative = !isFinite(minVal) || minVal < 0;\n\n // Build a regex for valid partial number input\n const pattern = allowsNegative ? /^-?(\\d+\\.?\\d*|\\.\\d*)?$/ : /^(\\d+\\.?\\d*|\\.\\d*)?$/;\n\n if (!pattern.test(proposed)) {\n event.preventDefault();\n }\n });\n\n // Keyboard interactions\n listener(elementRef, 'keydown', (event: KeyboardEvent) => {\n if (numberField().disabled() || numberField().readonly()) return;\n\n const useLargeStep = event.shiftKey;\n\n function getLargeStepMultiplier(): number {\n const s = numberField().step();\n if (!isFinite(s) || s <= 0) return 1;\n return numberField().largeStep() / s;\n }\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n numberField().increment(useLargeStep ? getLargeStepMultiplier() : 1);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'ArrowDown':\n event.preventDefault();\n numberField().decrement(useLargeStep ? getLargeStepMultiplier() : 1);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'Home':\n if (isFinite(numberField().min())) {\n event.preventDefault();\n numberField().setValue(numberField().min());\n elementRef.nativeElement.value = formatDisplayValue();\n }\n break;\n case 'End':\n if (isFinite(numberField().max())) {\n event.preventDefault();\n numberField().setValue(numberField().max());\n elementRef.nativeElement.value = formatDisplayValue();\n }\n break;\n case 'Enter':\n parseAndSetValue(elementRef.nativeElement.value);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n }\n });\n\n // Mouse wheel support\n listener(\n elementRef,\n 'wheel',\n (event: WheelEvent) => {\n if (!allowWheelScrub() || numberField().disabled() || numberField().readonly()) return;\n\n // Don't intercept browser zoom (Ctrl+wheel / Cmd+wheel)\n if (event.ctrlKey || event.metaKey) return;\n\n // Only handle when focused\n if (document.activeElement !== elementRef.nativeElement) return;\n\n event.preventDefault();\n\n if (event.deltaY < 0) {\n numberField().increment();\n } else if (event.deltaY > 0) {\n numberField().decrement();\n }\n\n elementRef.nativeElement.value = formatDisplayValue();\n },\n { config: { passive: false } },\n );\n\n function focus(): void {\n elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n return {\n focus,\n } satisfies NgpNumberFieldInputState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input } from '@angular/core';\nimport { ngpNumberFieldInput, provideNumberFieldInputState } from './number-field-input-state';\n\n/**\n * Apply the `ngpNumberFieldInput` directive to an input element within a number field.\n */\n@Directive({\n selector: '[ngpNumberFieldInput]',\n exportAs: 'ngpNumberFieldInput',\n providers: [provideNumberFieldInputState()],\n})\nexport class NgpNumberFieldInput {\n /**\n * Whether mouse wheel changes the value when the input is focused.\n */\n readonly allowWheelScrub = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldInputAllowWheelScrub',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpNumberFieldInput({\n allowWheelScrub: this.allowWheelScrub,\n });\n }\n}\n","import { computed, inject, Injector } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Increment primitive.\n */\nexport interface NgpNumberFieldIncrementState {}\n\n/**\n * Inputs for configuring the NumberField Increment primitive.\n */\nexport interface NgpNumberFieldIncrementProps {}\n\nexport const [\n NgpNumberFieldIncrementStateToken,\n ngpNumberFieldIncrement,\n injectNumberFieldIncrementState,\n provideNumberFieldIncrementState,\n] = createPrimitive(\n 'NgpNumberFieldIncrement',\n ({}: NgpNumberFieldIncrementProps): NgpNumberFieldIncrementState => {\n const elementRef = injectElementRef<HTMLButtonElement>();\n const numberField = injectNumberFieldState();\n const injector = inject(Injector);\n const disposables = injectDisposables();\n\n const isDisabled = computed(() => !numberField().canIncrement());\n\n // Host bindings\n attrBinding(elementRef, 'type', 'button');\n attrBinding(elementRef, 'tabindex', '-1');\n attrBinding(elementRef, 'disabled', () => (isDisabled() ? '' : null));\n dataBinding(elementRef, 'data-disabled', isDisabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: isDisabled,\n });\n\n let cleanupRepeat: (() => void) | null = null;\n\n function stopRepeat(): void {\n cleanupRepeat?.();\n cleanupRepeat = null;\n }\n\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (isDisabled()) return;\n\n numberField().increment();\n\n // Start auto-repeat: 400ms initial delay, then 60ms interval\n stopRepeat();\n\n let intervalCleanup: (() => void) | null = null;\n\n const delayCleanup = disposables.setTimeout(() => {\n intervalCleanup = disposables.setInterval(() => {\n if (!numberField().canIncrement()) {\n stopRepeat();\n return;\n }\n numberField().increment();\n }, 60);\n }, 400);\n\n // Set up document-level listeners to stop on pointer release\n const pointerUpCleanup = listener(document, 'pointerup', stopRepeat, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', stopRepeat, {\n config: false,\n injector,\n });\n\n cleanupRepeat = () => {\n delayCleanup();\n intervalCleanup?.();\n pointerUpCleanup();\n pointerCancelCleanup();\n };\n });\n\n return {} satisfies NgpNumberFieldIncrementState;\n },\n);\n","import { Directive } from '@angular/core';\nimport {\n ngpNumberFieldIncrement,\n provideNumberFieldIncrementState,\n} from './number-field-increment-state';\n\n/**\n * Apply the `ngpNumberFieldIncrement` directive to a button element that increments the number field value.\n */\n@Directive({\n selector: '[ngpNumberFieldIncrement]',\n exportAs: 'ngpNumberFieldIncrement',\n providers: [provideNumberFieldIncrementState()],\n})\nexport class NgpNumberFieldIncrement {\n constructor() {\n ngpNumberFieldIncrement({});\n }\n}\n","import { computed, inject, Injector } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Decrement primitive.\n */\nexport interface NgpNumberFieldDecrementState {}\n\n/**\n * Inputs for configuring the NumberField Decrement primitive.\n */\nexport interface NgpNumberFieldDecrementProps {}\n\nexport const [\n NgpNumberFieldDecrementStateToken,\n ngpNumberFieldDecrement,\n injectNumberFieldDecrementState,\n provideNumberFieldDecrementState,\n] = createPrimitive(\n 'NgpNumberFieldDecrement',\n ({}: NgpNumberFieldDecrementProps): NgpNumberFieldDecrementState => {\n const elementRef = injectElementRef<HTMLButtonElement>();\n const numberField = injectNumberFieldState();\n const injector = inject(Injector);\n const disposables = injectDisposables();\n\n const isDisabled = computed(() => !numberField().canDecrement());\n\n // Host bindings\n attrBinding(elementRef, 'type', 'button');\n attrBinding(elementRef, 'tabindex', '-1');\n attrBinding(elementRef, 'disabled', () => (isDisabled() ? '' : null));\n dataBinding(elementRef, 'data-disabled', isDisabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: isDisabled,\n });\n\n let cleanupRepeat: (() => void) | null = null;\n\n function stopRepeat(): void {\n cleanupRepeat?.();\n cleanupRepeat = null;\n }\n\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (isDisabled()) return;\n\n numberField().decrement();\n\n // Start auto-repeat: 400ms initial delay, then 60ms interval\n stopRepeat();\n\n let intervalCleanup: (() => void) | null = null;\n\n const delayCleanup = disposables.setTimeout(() => {\n intervalCleanup = disposables.setInterval(() => {\n if (!numberField().canDecrement()) {\n stopRepeat();\n return;\n }\n numberField().decrement();\n }, 60);\n }, 400);\n\n // Set up document-level listeners to stop on pointer release\n const pointerUpCleanup = listener(document, 'pointerup', stopRepeat, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', stopRepeat, {\n config: false,\n injector,\n });\n\n cleanupRepeat = () => {\n delayCleanup();\n intervalCleanup?.();\n pointerUpCleanup();\n pointerCancelCleanup();\n };\n });\n\n return {} satisfies NgpNumberFieldDecrementState;\n },\n);\n","import { Directive } from '@angular/core';\nimport {\n ngpNumberFieldDecrement,\n provideNumberFieldDecrementState,\n} from './number-field-decrement-state';\n\n/**\n * Apply the `ngpNumberFieldDecrement` directive to a button element that decrements the number field value.\n */\n@Directive({\n selector: '[ngpNumberFieldDecrement]',\n exportAs: 'ngpNumberFieldDecrement',\n providers: [provideNumberFieldDecrementState()],\n})\nexport class NgpNumberFieldDecrement {\n constructor() {\n ngpNumberFieldDecrement({});\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AA+HO,MAAM,CACX,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACxB,GAAG,eAAe,CACjB,gBAAgB,EAChB,CAAC,EACC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EACzC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAgB,IAAI,CAAC,EAC3C,GAAG,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,EACvB,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,EACtB,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,EAChB,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,EAClC,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EACnC,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EACnC,aAAa,GACO,KAAyB;AAC7C,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;AAChC,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;AACtC,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;AAEtC,IAAA,MAAM,WAAW,GAAG,OAAO,EAAiB;AAE5C,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;AAAE,YAAA,OAAO,KAAK;QAC1C,IAAI,KAAK,EAAE,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,OAAO,KAAK,EAAG,GAAG,GAAG,EAAE;AACzB,IAAA,CAAC,mFAAC;AAEF,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;AAAE,YAAA,OAAO,KAAK;QAC1C,IAAI,KAAK,EAAE,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,OAAO,KAAK,EAAG,GAAG,GAAG,EAAE;AACzB,IAAA,CAAC,mFAAC;;IAGF,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC3C,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC;AAC/C,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC;AAE/C;;AAEG;IACH,SAAS,gBAAgB,CAAC,CAAS,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACjC,QAAA,OAAO,QAAQ,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC;IACxD;AAEA;;;AAGG;AACH,IAAA,SAAS,gBAAgB,CAAC,GAAW,EAAE,SAAiB,EAAA;QACtD,IAAI,SAAS,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC3C,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C;IAEA,SAAS,YAAY,CAAC,GAAW,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;;QAErD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,EAAE;AAClC,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC;AACxC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,gBAAgB,CAC9B,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EACrD,SAAS,CACV;AACD,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD;AACA,QAAA,OAAO,OAAO;IAChB;IAEA,IAAI,YAAY,GAAG,KAAK;IAExB,SAAS,QAAQ,CAAC,QAAuB,EAAA;AACvC,QAAA,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;YAAE;AAC9B,QAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC;YAAE;AAC1C,QAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;;QAEpE,IAAI,UAAU,KAAK,KAAK,EAAE;YAAE;AAC5B,QAAA,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,aAAa,GAAG,UAAU,CAAC;AAC3B,YAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9B;IACF;IAEA,IAAI,aAAa,GAAwB,IAAI;IAE7C,SAAS,mBAAmB,CAAC,QAAoB,EAAA;QAC/C,aAAa,GAAG,QAAQ;IAC1B;AAEA;;;;AAIG;AACH,IAAA,SAAS,0BAA0B,GAAA;AACjC,QAAA,IAAI,CAAC,aAAa;YAAE;QACpB,YAAY,GAAG,IAAI;AACnB,QAAA,IAAI;AACF,YAAA,aAAa,EAAE;QACjB;gBAAU;YACR,YAAY,GAAG,KAAK;QACtB;IACF;AAEA,IAAA,SAAS,gBAAgB,GAAA;AACvB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACnE;IAEA,SAAS,SAAS,CAAC,UAAA,GAAqB,CAAC,EAAA;QACvC,IAAI,CAAC,YAAY,EAAE;YAAE;AACrB,QAAA,MAAM,WAAW,GAAG,KAAK,EAAE;AAC3B,QAAA,0BAA0B,EAAE;AAC5B,QAAA,MAAM,gBAAgB,GAAG,KAAK,EAAE;QAChC,MAAM,OAAO,GAAG,gBAAgB,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;AACjE,QAAA,MAAM,SAAS,GAAG,gBAAgB,EAAE;AACpC,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,SAAS,CAAC,CAAC;;;;QAIpE,IAAI,WAAW,KAAK,KAAK,EAAE,IAAI,gBAAgB,KAAK,KAAK,EAAE,EAAE;AAC3D,YAAA,aAAa,GAAG,KAAK,EAAE,CAAC;AACxB,YAAA,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B;IACF;IAEA,SAAS,SAAS,CAAC,UAAA,GAAqB,CAAC,EAAA;QACvC,IAAI,CAAC,YAAY,EAAE;YAAE;AACrB,QAAA,MAAM,WAAW,GAAG,KAAK,EAAE;AAC3B,QAAA,0BAA0B,EAAE;AAC5B,QAAA,MAAM,gBAAgB,GAAG,KAAK,EAAE;QAChC,MAAM,OAAO,GAAG,gBAAgB,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;AACjE,QAAA,MAAM,SAAS,GAAG,gBAAgB,EAAE;AACpC,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,SAAS,CAAC,CAAC;;;;QAIpE,IAAI,WAAW,KAAK,KAAK,EAAE,IAAI,gBAAgB,KAAK,KAAK,EAAE,EAAE;AAC3D,YAAA,aAAa,GAAG,KAAK,EAAE,CAAC;AACxB,YAAA,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B;IACF;IAEA,SAAS,WAAW,CAAC,UAAmB,EAAA;AACtC,QAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1B;IAEA,SAAS,WAAW,CAAC,UAAmB,EAAA;AACtC,QAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1B;IAEA,OAAO;QACL,EAAE;QACF,KAAK;QACL,GAAG;QACH,GAAG;QACH,IAAI;AACJ,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACnD,QAAA,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;QACnD,YAAY;QACZ,YAAY;AACZ,QAAA,WAAW,EAAE,WAAW,CAAC,YAAY,EAAE;QACvC,QAAQ;QACR,SAAS;QACT,SAAS;QACT,WAAW;QACX,WAAW;QACX,mBAAmB;KACU;AACjC,CAAC;;AC3SH;;;AAGG;MAMU,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;AAME;;AAEG;QACM,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,QAAQ,CAAC,kBAAkB,CAAC,yEAAC;AAEzD;;AAEG;AACM,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAA6B,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EACrD,KAAK,EAAE,qBAAqB;AAC5B,YAAA,SAAS,EAAE,CAAC,CAAc,KACxB,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,GACvE;AAEF;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,MAAM,CAAgB;AAC3C,YAAA,KAAK,EAAE,2BAA2B;AACnC,SAAA,CAAC;AAEF;;AAEG;QACM,IAAA,CAAA,GAAG,GAAG,KAAK,CAAsB,CAAC,QAAQ,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EACjD,KAAK,EAAE,mBAAmB;YAC1B,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAsB,QAAQ,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EAChD,KAAK,EAAE,mBAAmB;YAC1B,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAsB,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EAC1C,KAAK,EAAE,oBAAoB;YAC3B,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAsB,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAChD,KAAK,EAAE,yBAAyB;YAChC,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,wBAAwB;YAC/B,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,wBAAwB;YAC/B,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAEF;;AAEG;QACgB,IAAA,CAAA,KAAK,GAAG,cAAc,CAAC;YACxC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACrD,SAAA,CAAC;AAoCH,IAAA;AAlCC;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5B;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,UAAmB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;IAClC;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,UAAmB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;IAClC;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,QAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;IAClC;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,QAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;IAClC;+GAtHW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,EAAA,SAAA,EAFd,CAAC,uBAAuB,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAE3B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,SAAS,EAAE,CAAC,uBAAuB,EAAE,CAAC;AACvC,iBAAA;;;ACeM,MAAM,CACX,6BAA6B,EAC7B,mBAAmB,EACnB,2BAA2B,EAC3B,4BAA4B,EAC7B,GAAG,eAAe,CACjB,qBAAqB,EACrB,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,EAA4B,KAA8B;AAC1F,IAAA,MAAM,UAAU,GAAG,gBAAgB,EAAoB;AACvD,IAAA,MAAM,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAGjC,IAAA,cAAc,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAGpE,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC,IAAI,EAAE;QACpC,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC;;QAGrC,IAAI,cAAc,IAAI,WAAW;AAAE,YAAA,OAAO,MAAM;AAChD,QAAA,IAAI,WAAW;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,SAAS;AACrC,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,gFAAC;AAEF,IAAA,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC;AAC7C,IAAA,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;AACvC,IAAA,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC;AAC/C,IAAA,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC;AAC9C,IAAA,WAAW,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC;AAC7C,IAAA,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC;AAC9C,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,MAAK;AAC5C,QAAA,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE;AAC/B,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,IAAI;AAC9C,IAAA,CAAC,CAAC;AACF,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,MAAK;AAC5C,QAAA,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE;AAC/B,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,IAAI;AAC9C,IAAA,CAAC,CAAC;AACF,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;AACzF,IAAA,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;IAChE,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACjF,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;AAExE,IAAA,eAAe,CAAC;AACd,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ;AACjC,KAAA,CAAC;IAEF,IAAI,SAAS,GAAG,KAAK;AAErB;;AAEG;IACH,SAAS,gBAAgB,CAAC,IAAY,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;QAC3B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,EAAE;AACrC,YAAA,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9B;aAAO;AACL,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAClB,gBAAA,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChC;QACF;IACF;AAEA;;;AAGG;AACH,IAAA,SAAS,gBAAgB,GAAA;AACvB,QAAA,IAAI,CAAC,SAAS;YAAE;AAChB,QAAA,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;IAClD;;AAGA,IAAA,WAAW,EAAE,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;AAEnD,IAAA,SAAS,kBAAkB,GAAA;AACzB,QAAA,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC,KAAK,EAAE;AACjC,QAAA,OAAO,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;IACxC;;;AAIA,IAAA,cAAc,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAI;AACxD,QAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,KAAK,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;AACtE,IAAA,CAAC,CAAC;AAEF,IAAA,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,MAAK;QACjC,SAAS,GAAG,IAAI;AAClB,IAAA,CAAC,CAAC;AAEF,IAAA,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAK;QAChC,SAAS,GAAG,KAAK;AACjB,QAAA,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;;AAGhD,QAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;AACvD,IAAA,CAAC,CAAC;;IAGF,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,KAAiB,KAAI;QACxD,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE;YAAE;;QAG1D,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE;AAE3D,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa;AACtC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC;AACtC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK;QAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;AAEhF,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE;QAClC,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;;QAGtD,MAAM,OAAO,GAAG,cAAc,GAAG,wBAAwB,GAAG,sBAAsB;QAElF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE;QACxB;AACF,IAAA,CAAC,CAAC;;IAGF,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,KAAoB,KAAI;QACvD,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE;YAAE;AAE1D,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ;AAEnC,QAAA,SAAS,sBAAsB,GAAA;AAC7B,YAAA,MAAM,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC;AACpC,YAAA,OAAO,WAAW,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;QACtC;AAEA,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,YAAY,GAAG,sBAAsB,EAAE,GAAG,CAAC,CAAC;AACpE,gBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACrD;AACF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,YAAY,GAAG,sBAAsB,EAAE,GAAG,CAAC,CAAC;AACpE,gBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACrD;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE;oBACjC,KAAK,CAAC,cAAc,EAAE;oBACtB,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC;AAC3C,oBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACvD;gBACA;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE;oBACjC,KAAK,CAAC,cAAc,EAAE;oBACtB,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC;AAC3C,oBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACvD;gBACA;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;AAChD,gBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACrD;;AAEN,IAAA,CAAC,CAAC;;IAGF,QAAQ,CACN,UAAU,EACV,OAAO,EACP,CAAC,KAAiB,KAAI;AACpB,QAAA,IAAI,CAAC,eAAe,EAAE,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE;YAAE;;AAGhF,QAAA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;YAAE;;AAGpC,QAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,UAAU,CAAC,aAAa;YAAE;QAEzD,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,WAAW,EAAE,CAAC,SAAS,EAAE;QAC3B;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,WAAW,EAAE,CAAC,SAAS,EAAE;QAC3B;AAEA,QAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;IACvD,CAAC,EACD,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAC/B;AAED,IAAA,SAAS,KAAK,GAAA;QACZ,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACzD;IAEA,OAAO;QACL,KAAK;KAC6B;AACtC,CAAC;;AC1OH;;AAEG;MAMU,mBAAmB,CAAA;AAS9B,IAAA,WAAA,GAAA;AARA;;AAEG;AACM,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,CAAA,EAC3D,KAAK,EAAE,oCAAoC;YAC3C,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAGA,QAAA,mBAAmB,CAAC;YAClB,eAAe,EAAE,IAAI,CAAC,eAAe;AACtC,SAAA,CAAC;IACJ;+GAbW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFnB,CAAC,4BAA4B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEhC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,SAAS,EAAE,CAAC,4BAA4B,EAAE,CAAC;AAC5C,iBAAA;;;ACMM,MAAM,CACX,iCAAiC,EACjC,uBAAuB,EACvB,+BAA+B,EAC/B,gCAAgC,EACjC,GAAG,eAAe,CACjB,yBAAyB,EACzB,CAAC,EAAgC,KAAkC;AACjE,IAAA,MAAM,UAAU,GAAG,gBAAgB,EAAqB;AACxD,IAAA,MAAM,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE;AAEvC,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,iFAAC;;AAGhE,IAAA,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;AACzC,IAAA,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC;IACzC,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACrE,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC;AAEpD,IAAA,eAAe,CAAC;AACd,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,UAAU;AACrB,KAAA,CAAC;IAEF,IAAI,aAAa,GAAwB,IAAI;AAE7C,IAAA,SAAS,UAAU,GAAA;QACjB,aAAa,IAAI;QACjB,aAAa,GAAG,IAAI;IACtB;IAEA,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,KAAmB,KAAI;QAC1D,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,UAAU,EAAE;YAAE;AAElB,QAAA,WAAW,EAAE,CAAC,SAAS,EAAE;;AAGzB,QAAA,UAAU,EAAE;QAEZ,IAAI,eAAe,GAAwB,IAAI;AAE/C,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,MAAK;AAC/C,YAAA,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,MAAK;AAC7C,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE;AACjC,oBAAA,UAAU,EAAE;oBACZ;gBACF;AACA,gBAAA,WAAW,EAAE,CAAC,SAAS,EAAE;YAC3B,CAAC,EAAE,EAAE,CAAC;QACR,CAAC,EAAE,GAAG,CAAC;;QAGP,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;AACnE,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ;AACT,SAAA,CAAC;QAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE;AAC3E,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ;AACT,SAAA,CAAC;QAEF,aAAa,GAAG,MAAK;AACnB,YAAA,YAAY,EAAE;YACd,eAAe,IAAI;AACnB,YAAA,gBAAgB,EAAE;AAClB,YAAA,oBAAoB,EAAE;AACxB,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,EAAyC;AAClD,CAAC;;ACxFH;;AAEG;MAMU,uBAAuB,CAAA;AAClC,IAAA,WAAA,GAAA;QACE,uBAAuB,CAAC,EAAE,CAAC;IAC7B;+GAHW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,SAAA,EAFvB,CAAC,gCAAgC,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEpC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,SAAS,EAAE,CAAC,gCAAgC,EAAE,CAAC;AAChD,iBAAA;;;ACIM,MAAM,CACX,iCAAiC,EACjC,uBAAuB,EACvB,+BAA+B,EAC/B,gCAAgC,EACjC,GAAG,eAAe,CACjB,yBAAyB,EACzB,CAAC,EAAgC,KAAkC;AACjE,IAAA,MAAM,UAAU,GAAG,gBAAgB,EAAqB;AACxD,IAAA,MAAM,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE;AAEvC,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,iFAAC;;AAGhE,IAAA,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;AACzC,IAAA,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC;IACzC,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACrE,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC;AAEpD,IAAA,eAAe,CAAC;AACd,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,UAAU;AACrB,KAAA,CAAC;IAEF,IAAI,aAAa,GAAwB,IAAI;AAE7C,IAAA,SAAS,UAAU,GAAA;QACjB,aAAa,IAAI;QACjB,aAAa,GAAG,IAAI;IACtB;IAEA,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,KAAmB,KAAI;QAC1D,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,UAAU,EAAE;YAAE;AAElB,QAAA,WAAW,EAAE,CAAC,SAAS,EAAE;;AAGzB,QAAA,UAAU,EAAE;QAEZ,IAAI,eAAe,GAAwB,IAAI;AAE/C,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,MAAK;AAC/C,YAAA,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,MAAK;AAC7C,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE;AACjC,oBAAA,UAAU,EAAE;oBACZ;gBACF;AACA,gBAAA,WAAW,EAAE,CAAC,SAAS,EAAE;YAC3B,CAAC,EAAE,EAAE,CAAC;QACR,CAAC,EAAE,GAAG,CAAC;;QAGP,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;AACnE,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ;AACT,SAAA,CAAC;QAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE;AAC3E,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ;AACT,SAAA,CAAC;QAEF,aAAa,GAAG,MAAK;AACnB,YAAA,YAAY,EAAE;YACd,eAAe,IAAI;AACnB,YAAA,gBAAgB,EAAE;AAClB,YAAA,oBAAoB,EAAE;AACxB,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,EAAyC;AAClD,CAAC;;ACxFH;;AAEG;MAMU,uBAAuB,CAAA;AAClC,IAAA,WAAA,GAAA;QACE,uBAAuB,CAAC,EAAE,CAAC;IAC7B;+GAHW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,SAAA,EAFvB,CAAC,gCAAgC,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEpC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,SAAS,EAAE,CAAC,gCAAgC,EAAE,CAAC;AAChD,iBAAA;;;ACbD;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-primitives-number-field.mjs","sources":["../../../../packages/ng-primitives/number-field/src/number-field/number-field-state.ts","../../../../packages/ng-primitives/number-field/src/number-field/number-field.ts","../../../../packages/ng-primitives/number-field/src/number-field-input/number-field-input-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-input/number-field-input.ts","../../../../packages/ng-primitives/number-field/src/number-field-increment/number-field-increment-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-increment/number-field-increment.ts","../../../../packages/ng-primitives/number-field/src/number-field-decrement/number-field-decrement-state.ts","../../../../packages/ng-primitives/number-field/src/number-field-decrement/number-field-decrement.ts","../../../../packages/ng-primitives/number-field/src/ng-primitives-number-field.ts"],"sourcesContent":["import { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the NumberField primitive.\n */\nexport interface NgpNumberFieldState {\n /**\n * The id of the number field.\n */\n readonly id: Signal<string>;\n /**\n * The current value.\n */\n readonly value: WritableSignal<number | null>;\n /**\n * The minimum value.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max: Signal<number>;\n /**\n * The step value.\n */\n readonly step: Signal<number>;\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep: Signal<number>;\n /**\n * Whether the number field is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * Whether the number field is readonly.\n */\n readonly readonly: WritableSignal<boolean>;\n /**\n * Whether the increment button should be disabled.\n */\n readonly canIncrement: Signal<boolean>;\n /**\n * Whether the decrement button should be disabled.\n */\n readonly canDecrement: Signal<boolean>;\n /**\n * Emit when the value changes.\n */\n readonly valueChange: Observable<number | null>;\n /**\n * Set the current value (clamped and stepped).\n */\n setValue(value: number | null): void;\n /**\n * Increment the value by one step.\n */\n increment(multiplier?: number): void;\n /**\n * Decrement the value by one step.\n */\n decrement(multiplier?: number): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the readonly state.\n */\n setReadonly(readonly: boolean): void;\n /** @internal */\n registerInputCommit(commitFn: () => void): void;\n}\n\n/**\n * Inputs for configuring the NumberField primitive.\n */\nexport interface NgpNumberFieldProps {\n /**\n * The id of the number field.\n */\n readonly id?: Signal<string>;\n /**\n * The current value.\n */\n readonly value?: Signal<number | null>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep?: Signal<number>;\n /**\n * Whether the number field is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Whether the number field is readonly.\n */\n readonly readonly?: Signal<boolean>;\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: number | null) => void;\n}\n\nexport const [\n NgpNumberFieldStateToken,\n ngpNumberField,\n injectNumberFieldState,\n provideNumberFieldState,\n] = createPrimitive(\n 'NgpNumberField',\n ({\n id = signal(uniqueId('ngp-number-field')),\n value: _value = signal<number | null>(null),\n min = signal(-Infinity),\n max = signal(Infinity),\n step = signal(1),\n largeStep: _largeStep = signal(10),\n disabled: _disabled = signal(false),\n readonly: _readonly = signal(false),\n onValueChange,\n }: NgpNumberFieldProps): NgpNumberFieldState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const disabled = controlled(_disabled);\n const readonly = controlled(_readonly);\n\n const valueChange = emitter<number | null>();\n\n const canIncrement = computed(() => {\n if (disabled() || readonly()) return false;\n if (value() === null) return true;\n return value()! < max();\n });\n\n const canDecrement = computed(() => {\n if (disabled() || readonly()) return false;\n if (value() === null) return true;\n return value()! > min();\n });\n\n // Host bindings\n attrBinding(element, 'role', () => 'group');\n dataBinding(element, 'data-disabled', disabled);\n dataBinding(element, 'data-readonly', readonly);\n\n /**\n * Count the number of decimal places in a number.\n */\n function getDecimalPlaces(n: number): number {\n const str = String(n);\n const dotIndex = str.indexOf('.');\n return dotIndex === -1 ? 0 : str.length - dotIndex - 1;\n }\n\n /**\n * Round a number to a specific number of decimal places to avoid\n * floating point precision issues (e.g. 0.1 + 0.2 = 0.30000000000000004).\n */\n function roundToPrecision(val: number, precision: number): number {\n if (precision === 0) return Math.round(val);\n return parseFloat(val.toFixed(precision));\n }\n\n function clampAndStep(val: number): number {\n const clamped = Math.min(max(), Math.max(min(), val));\n // Round to nearest step\n if (isFinite(step()) && step() > 0) {\n const base = isFinite(min()) ? min() : 0;\n const precision = Math.max(getDecimalPlaces(step()), getDecimalPlaces(base));\n const stepped = roundToPrecision(\n Math.round((clamped - base) / step()) * step() + base,\n precision,\n );\n return Math.min(max(), Math.max(min(), stepped));\n }\n return clamped;\n }\n\n let suppressEmit = false;\n\n function setValue(newValue: number | null): void {\n if (disabled() || readonly()) return;\n if (newValue !== null && isNaN(newValue)) return;\n const finalValue = newValue !== null ? clampAndStep(newValue) : null;\n // Skip emit when value is unchanged\n if (finalValue === value()) return;\n value.set(finalValue);\n if (!suppressEmit) {\n onValueChange?.(finalValue);\n valueChange.emit(finalValue);\n }\n }\n\n let inputCommitFn: (() => void) | null = null;\n\n function registerInputCommit(commitFn: () => void): void {\n inputCommitFn = commitFn;\n }\n\n /**\n * Commit any pending input value without emitting change events.\n * This ensures increment/decrement operates on the displayed value\n * while only emitting the final stepped result.\n */\n function commitPendingInputSilently(): void {\n if (!inputCommitFn) return;\n suppressEmit = true;\n try {\n inputCommitFn();\n } finally {\n suppressEmit = false;\n }\n }\n\n function getStepPrecision(): number {\n const base = isFinite(min()) ? min() : 0;\n return Math.max(getDecimalPlaces(step()), getDecimalPlaces(base));\n }\n\n function increment(multiplier: number = 1): void {\n if (!canIncrement()) return;\n const valueBefore = value();\n commitPendingInputSilently();\n const valueAfterCommit = value();\n const current = valueAfterCommit ?? (isFinite(min()) ? min() : 0);\n const precision = getStepPrecision();\n setValue(roundToPrecision(current + step() * multiplier, precision));\n // If the silent commit changed the value but setValue was a no-op\n // (stepped result clamped back to the committed value), emit the change\n // so the parent learns about the new value.\n if (valueBefore !== value() && valueAfterCommit === value()) {\n onValueChange?.(value());\n valueChange.emit(value());\n }\n }\n\n function decrement(multiplier: number = 1): void {\n if (!canDecrement()) return;\n const valueBefore = value();\n commitPendingInputSilently();\n const valueAfterCommit = value();\n const current = valueAfterCommit ?? (isFinite(max()) ? max() : 0);\n const precision = getStepPrecision();\n setValue(roundToPrecision(current - step() * multiplier, precision));\n // If the silent commit changed the value but setValue was a no-op\n // (stepped result clamped back to the committed value), emit the change\n // so the parent learns about the new value.\n if (valueBefore !== value() && valueAfterCommit === value()) {\n onValueChange?.(value());\n valueChange.emit(value());\n }\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n }\n\n function setReadonly(isReadonly: boolean): void {\n readonly.set(isReadonly);\n }\n\n return {\n id,\n value,\n min,\n max,\n step,\n largeStep: _largeStep,\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n readonly: deprecatedSetter(readonly, 'setReadonly'),\n canIncrement,\n canDecrement,\n valueChange: valueChange.asObservable(),\n setValue,\n increment,\n decrement,\n setDisabled,\n setReadonly,\n registerInputCommit,\n } satisfies NgpNumberFieldState;\n },\n);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, numberAttribute, output } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpNumberField, provideNumberFieldState } from './number-field-state';\n\n/**\n * Apply the `ngpNumberField` directive to an element that represents the number field\n * and contains the input, increment, and decrement buttons.\n */\n@Directive({\n selector: '[ngpNumberField]',\n exportAs: 'ngpNumberField',\n providers: [provideNumberFieldState()],\n})\nexport class NgpNumberField {\n /**\n * The id of the number field. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-number-field'));\n\n /**\n * The value of the number field.\n */\n readonly value = input<number | null, NumberInput>(null, {\n alias: 'ngpNumberFieldValue',\n transform: (v: NumberInput) =>\n v === null || v === undefined || v === '' ? null : numberAttribute(v),\n });\n\n /**\n * Emits when the value changes.\n */\n readonly valueChange = output<number | null>({\n alias: 'ngpNumberFieldValueChange',\n });\n\n /**\n * The minimum value.\n */\n readonly min = input<number, NumberInput>(-Infinity, {\n alias: 'ngpNumberFieldMin',\n transform: numberAttribute,\n });\n\n /**\n * The maximum value.\n */\n readonly max = input<number, NumberInput>(Infinity, {\n alias: 'ngpNumberFieldMax',\n transform: numberAttribute,\n });\n\n /**\n * The step value.\n */\n readonly step = input<number, NumberInput>(1, {\n alias: 'ngpNumberFieldStep',\n transform: numberAttribute,\n });\n\n /**\n * The large step value (used with Shift key).\n */\n readonly largeStep = input<number, NumberInput>(10, {\n alias: 'ngpNumberFieldLargeStep',\n transform: numberAttribute,\n });\n\n /**\n * The disabled state of the number field.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The readonly state of the number field.\n */\n readonly readonly = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldReadonly',\n transform: booleanAttribute,\n });\n\n /**\n * @internal\n */\n protected readonly state = ngpNumberField({\n id: this.id,\n value: this.value,\n min: this.min,\n max: this.max,\n step: this.step,\n largeStep: this.largeStep,\n disabled: this.disabled,\n readonly: this.readonly,\n onValueChange: value => this.valueChange.emit(value),\n });\n\n /**\n * Set the value of the number field.\n */\n setValue(value: number | null): void {\n this.state.setValue(value);\n }\n\n /**\n * Increment the value.\n */\n increment(multiplier?: number): void {\n this.state.increment(multiplier);\n }\n\n /**\n * Decrement the value.\n */\n decrement(multiplier?: number): void {\n this.state.decrement(multiplier);\n }\n\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void {\n this.state.setDisabled(disabled);\n }\n\n /**\n * Set the readonly state.\n */\n setReadonly(readonly: boolean): void {\n this.state.setReadonly(readonly);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, Signal, signal } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { explicitEffect, injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Input primitive.\n */\nexport interface NgpNumberFieldInputState {\n /**\n * Focus the input element.\n */\n focus(): void;\n}\n\n/**\n * Inputs for configuring the NumberField Input primitive.\n */\nexport interface NgpNumberFieldInputProps {\n /**\n * Whether mouse wheel changes the value.\n */\n readonly allowWheelScrub?: Signal<boolean>;\n}\n\nexport const [\n NgpNumberFieldInputStateToken,\n ngpNumberFieldInput,\n injectNumberFieldInputState,\n provideNumberFieldInputState,\n] = createPrimitive(\n 'NgpNumberFieldInput',\n ({ allowWheelScrub = signal(false) }: NgpNumberFieldInputProps): NgpNumberFieldInputState => {\n const elementRef = injectElementRef<HTMLInputElement>();\n const numberField = injectNumberFieldState();\n const document = inject(DOCUMENT);\n\n // Form control integration — sets id, aria-labelledby, aria-describedby on the input\n ngpFormControl({ id: numberField().id, disabled: numberField().disabled });\n\n const tabindex = computed(() => (numberField().disabled() ? -1 : 0));\n\n // Host bindings\n const inputMode = computed(() => {\n const minVal = numberField().min();\n const stepVal = numberField().step();\n const allowsNegative = !isFinite(minVal) || minVal < 0;\n const hasDecimals = stepVal % 1 !== 0;\n\n // Some mobile keyboards can't show both minus sign and decimal point\n if (allowsNegative && hasDecimals) return 'text';\n if (hasDecimals) return 'decimal';\n if (!allowsNegative) return 'numeric';\n return 'text';\n });\n\n attrBinding(elementRef, 'role', 'spinbutton');\n attrBinding(elementRef, 'type', 'text');\n attrBinding(elementRef, 'inputmode', inputMode);\n attrBinding(elementRef, 'autocomplete', 'off');\n attrBinding(elementRef, 'autocorrect', 'off');\n attrBinding(elementRef, 'spellcheck', 'false');\n attrBinding(elementRef, 'aria-valuemin', () => {\n const min = numberField().min();\n return isFinite(min) ? min.toString() : null;\n });\n attrBinding(elementRef, 'aria-valuemax', () => {\n const max = numberField().max();\n return isFinite(max) ? max.toString() : null;\n });\n attrBinding(elementRef, 'aria-valuenow', () => numberField().value()?.toString() ?? null);\n attrBinding(elementRef, 'tabindex', () => tabindex().toString());\n attrBinding(elementRef, 'readonly', () => (numberField().readonly() ? '' : null));\n dataBinding(elementRef, 'data-readonly', () => numberField().readonly());\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n disabled: numberField().disabled,\n });\n\n let isFocused = false;\n\n /**\n * Parse text and set the number field value accordingly.\n */\n function parseAndSetValue(text: string): void {\n const trimmed = text.trim();\n if (trimmed === '' || trimmed === '-') {\n numberField().setValue(null);\n } else {\n const parsed = parseFloat(trimmed);\n if (!isNaN(parsed)) {\n numberField().setValue(parsed);\n }\n }\n }\n\n /**\n * Commit the current input text to the number field value.\n * Called before increment/decrement so they operate on the displayed value.\n */\n function commitInputValue(): void {\n if (!isFocused) return;\n parseAndSetValue(elementRef.nativeElement.value);\n }\n\n // Register the commit function with the number field so buttons can trigger it\n numberField().registerInputCommit(commitInputValue);\n\n function formatDisplayValue(): string {\n const val = numberField().value();\n return val !== null ? String(val) : '';\n }\n\n // Sync input display value when the number field value changes\n // (programmatically, via stepping, or on commit)\n explicitEffect([() => numberField().value()], ([value]) => {\n elementRef.nativeElement.value = value !== null ? String(value) : '';\n });\n\n listener(elementRef, 'focus', () => {\n isFocused = true;\n });\n\n listener(elementRef, 'blur', () => {\n isFocused = false;\n parseAndSetValue(elementRef.nativeElement.value);\n\n // Always sync the display value on blur to show the clamped/stepped value\n elementRef.nativeElement.value = formatDisplayValue();\n });\n\n // Reject characters that can't form a valid number\n listener(elementRef, 'beforeinput', (event: InputEvent) => {\n if (numberField().disabled() || numberField().readonly()) return;\n\n // Only filter insertions (typing, paste, drop)\n const insertTypes = ['insertText', 'insertFromPaste', 'insertFromDrop'];\n if (!insertTypes.includes(event.inputType) || !event.data) return;\n\n const input = elementRef.nativeElement;\n const selStart = input.selectionStart ?? 0;\n const selEnd = input.selectionEnd ?? 0;\n const current = input.value;\n const proposed = current.slice(0, selStart) + event.data + current.slice(selEnd);\n\n const minVal = numberField().min();\n const allowsNegative = !isFinite(minVal) || minVal < 0;\n\n // Build a regex for valid partial number input\n const pattern = allowsNegative ? /^-?(\\d+\\.?\\d*|\\.\\d*)?$/ : /^(\\d+\\.?\\d*|\\.\\d*)?$/;\n\n if (!pattern.test(proposed)) {\n event.preventDefault();\n }\n });\n\n // Keyboard interactions\n listener(elementRef, 'keydown', (event: KeyboardEvent) => {\n if (numberField().disabled() || numberField().readonly()) return;\n\n const useLargeStep = event.shiftKey;\n\n function getLargeStepMultiplier(): number {\n const s = numberField().step();\n if (!isFinite(s) || s <= 0) return 1;\n return numberField().largeStep() / s;\n }\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n numberField().increment(useLargeStep ? getLargeStepMultiplier() : 1);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'ArrowDown':\n event.preventDefault();\n numberField().decrement(useLargeStep ? getLargeStepMultiplier() : 1);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'PageUp':\n event.preventDefault();\n numberField().increment(getLargeStepMultiplier());\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'PageDown':\n event.preventDefault();\n numberField().decrement(getLargeStepMultiplier());\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n case 'Home':\n if (isFinite(numberField().min())) {\n event.preventDefault();\n numberField().setValue(numberField().min());\n elementRef.nativeElement.value = formatDisplayValue();\n }\n break;\n case 'End':\n if (isFinite(numberField().max())) {\n event.preventDefault();\n numberField().setValue(numberField().max());\n elementRef.nativeElement.value = formatDisplayValue();\n }\n break;\n case 'Enter':\n parseAndSetValue(elementRef.nativeElement.value);\n elementRef.nativeElement.value = formatDisplayValue();\n break;\n }\n });\n\n // Mouse wheel support\n listener(\n elementRef,\n 'wheel',\n (event: WheelEvent) => {\n if (!allowWheelScrub() || numberField().disabled() || numberField().readonly()) return;\n\n // Don't intercept browser zoom (Ctrl+wheel / Cmd+wheel)\n if (event.ctrlKey || event.metaKey) return;\n\n // Only handle when focused\n if (document.activeElement !== elementRef.nativeElement) return;\n\n event.preventDefault();\n\n if (event.deltaY < 0) {\n numberField().increment();\n } else if (event.deltaY > 0) {\n numberField().decrement();\n }\n\n elementRef.nativeElement.value = formatDisplayValue();\n },\n { config: { passive: false } },\n );\n\n function focus(): void {\n elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n return {\n focus,\n } satisfies NgpNumberFieldInputState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input } from '@angular/core';\nimport { ngpNumberFieldInput, provideNumberFieldInputState } from './number-field-input-state';\n\n/**\n * Apply the `ngpNumberFieldInput` directive to an input element within a number field.\n */\n@Directive({\n selector: '[ngpNumberFieldInput]',\n exportAs: 'ngpNumberFieldInput',\n providers: [provideNumberFieldInputState()],\n})\nexport class NgpNumberFieldInput {\n /**\n * Whether mouse wheel changes the value when the input is focused.\n */\n readonly allowWheelScrub = input<boolean, BooleanInput>(false, {\n alias: 'ngpNumberFieldInputAllowWheelScrub',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpNumberFieldInput({\n allowWheelScrub: this.allowWheelScrub,\n });\n }\n}\n","import { computed, inject, Injector } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Increment primitive.\n */\nexport interface NgpNumberFieldIncrementState {}\n\n/**\n * Inputs for configuring the NumberField Increment primitive.\n */\nexport interface NgpNumberFieldIncrementProps {}\n\nexport const [\n NgpNumberFieldIncrementStateToken,\n ngpNumberFieldIncrement,\n injectNumberFieldIncrementState,\n provideNumberFieldIncrementState,\n] = createPrimitive(\n 'NgpNumberFieldIncrement',\n ({}: NgpNumberFieldIncrementProps): NgpNumberFieldIncrementState => {\n const elementRef = injectElementRef<HTMLButtonElement>();\n const numberField = injectNumberFieldState();\n const injector = inject(Injector);\n const disposables = injectDisposables();\n\n const isDisabled = computed(() => !numberField().canIncrement());\n\n // Host bindings\n attrBinding(elementRef, 'type', 'button');\n attrBinding(elementRef, 'tabindex', '-1');\n attrBinding(elementRef, 'disabled', () => (isDisabled() ? '' : null));\n dataBinding(elementRef, 'data-disabled', isDisabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: isDisabled,\n });\n\n let cleanupRepeat: (() => void) | null = null;\n\n function stopRepeat(): void {\n cleanupRepeat?.();\n cleanupRepeat = null;\n }\n\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (isDisabled()) return;\n\n numberField().increment();\n\n // Start auto-repeat: 400ms initial delay, then 60ms interval\n stopRepeat();\n\n let intervalCleanup: (() => void) | null = null;\n\n const delayCleanup = disposables.setTimeout(() => {\n intervalCleanup = disposables.setInterval(() => {\n if (!numberField().canIncrement()) {\n stopRepeat();\n return;\n }\n numberField().increment();\n }, 60);\n }, 400);\n\n // Set up document-level listeners to stop on pointer release\n const pointerUpCleanup = listener(document, 'pointerup', stopRepeat, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', stopRepeat, {\n config: false,\n injector,\n });\n\n cleanupRepeat = () => {\n delayCleanup();\n intervalCleanup?.();\n pointerUpCleanup();\n pointerCancelCleanup();\n };\n });\n\n return {} satisfies NgpNumberFieldIncrementState;\n },\n);\n","import { Directive } from '@angular/core';\nimport {\n ngpNumberFieldIncrement,\n provideNumberFieldIncrementState,\n} from './number-field-increment-state';\n\n/**\n * Apply the `ngpNumberFieldIncrement` directive to a button element that increments the number field value.\n */\n@Directive({\n selector: '[ngpNumberFieldIncrement]',\n exportAs: 'ngpNumberFieldIncrement',\n providers: [provideNumberFieldIncrementState()],\n})\nexport class NgpNumberFieldIncrement {\n constructor() {\n ngpNumberFieldIncrement({});\n }\n}\n","import { computed, inject, Injector } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { injectNumberFieldState } from '../number-field/number-field-state';\n\n/**\n * Public state surface for the NumberField Decrement primitive.\n */\nexport interface NgpNumberFieldDecrementState {}\n\n/**\n * Inputs for configuring the NumberField Decrement primitive.\n */\nexport interface NgpNumberFieldDecrementProps {}\n\nexport const [\n NgpNumberFieldDecrementStateToken,\n ngpNumberFieldDecrement,\n injectNumberFieldDecrementState,\n provideNumberFieldDecrementState,\n] = createPrimitive(\n 'NgpNumberFieldDecrement',\n ({}: NgpNumberFieldDecrementProps): NgpNumberFieldDecrementState => {\n const elementRef = injectElementRef<HTMLButtonElement>();\n const numberField = injectNumberFieldState();\n const injector = inject(Injector);\n const disposables = injectDisposables();\n\n const isDisabled = computed(() => !numberField().canDecrement());\n\n // Host bindings\n attrBinding(elementRef, 'type', 'button');\n attrBinding(elementRef, 'tabindex', '-1');\n attrBinding(elementRef, 'disabled', () => (isDisabled() ? '' : null));\n dataBinding(elementRef, 'data-disabled', isDisabled);\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: isDisabled,\n });\n\n let cleanupRepeat: (() => void) | null = null;\n\n function stopRepeat(): void {\n cleanupRepeat?.();\n cleanupRepeat = null;\n }\n\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (isDisabled()) return;\n\n numberField().decrement();\n\n // Start auto-repeat: 400ms initial delay, then 60ms interval\n stopRepeat();\n\n let intervalCleanup: (() => void) | null = null;\n\n const delayCleanup = disposables.setTimeout(() => {\n intervalCleanup = disposables.setInterval(() => {\n if (!numberField().canDecrement()) {\n stopRepeat();\n return;\n }\n numberField().decrement();\n }, 60);\n }, 400);\n\n // Set up document-level listeners to stop on pointer release\n const pointerUpCleanup = listener(document, 'pointerup', stopRepeat, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', stopRepeat, {\n config: false,\n injector,\n });\n\n cleanupRepeat = () => {\n delayCleanup();\n intervalCleanup?.();\n pointerUpCleanup();\n pointerCancelCleanup();\n };\n });\n\n return {} satisfies NgpNumberFieldDecrementState;\n },\n);\n","import { Directive } from '@angular/core';\nimport {\n ngpNumberFieldDecrement,\n provideNumberFieldDecrementState,\n} from './number-field-decrement-state';\n\n/**\n * Apply the `ngpNumberFieldDecrement` directive to a button element that decrements the number field value.\n */\n@Directive({\n selector: '[ngpNumberFieldDecrement]',\n exportAs: 'ngpNumberFieldDecrement',\n providers: [provideNumberFieldDecrementState()],\n})\nexport class NgpNumberFieldDecrement {\n constructor() {\n ngpNumberFieldDecrement({});\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AA+HO,MAAM,CACX,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACxB,GAAG,eAAe,CACjB,gBAAgB,EAChB,CAAC,EACC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EACzC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAgB,IAAI,CAAC,EAC3C,GAAG,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,EACvB,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,EACtB,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,EAChB,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,EAClC,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EACnC,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EACnC,aAAa,GACO,KAAyB;AAC7C,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;AAChC,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;AACtC,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;AAEtC,IAAA,MAAM,WAAW,GAAG,OAAO,EAAiB;AAE5C,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;AAAE,YAAA,OAAO,KAAK;QAC1C,IAAI,KAAK,EAAE,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,OAAO,KAAK,EAAG,GAAG,GAAG,EAAE;AACzB,IAAA,CAAC,mFAAC;AAEF,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;AAAE,YAAA,OAAO,KAAK;QAC1C,IAAI,KAAK,EAAE,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,OAAO,KAAK,EAAG,GAAG,GAAG,EAAE;AACzB,IAAA,CAAC,mFAAC;;IAGF,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC3C,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC;AAC/C,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC;AAE/C;;AAEG;IACH,SAAS,gBAAgB,CAAC,CAAS,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACjC,QAAA,OAAO,QAAQ,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC;IACxD;AAEA;;;AAGG;AACH,IAAA,SAAS,gBAAgB,CAAC,GAAW,EAAE,SAAiB,EAAA;QACtD,IAAI,SAAS,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC3C,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C;IAEA,SAAS,YAAY,CAAC,GAAW,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;;QAErD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,EAAE;AAClC,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC;AACxC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,gBAAgB,CAC9B,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EACrD,SAAS,CACV;AACD,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD;AACA,QAAA,OAAO,OAAO;IAChB;IAEA,IAAI,YAAY,GAAG,KAAK;IAExB,SAAS,QAAQ,CAAC,QAAuB,EAAA;AACvC,QAAA,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;YAAE;AAC9B,QAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC;YAAE;AAC1C,QAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;;QAEpE,IAAI,UAAU,KAAK,KAAK,EAAE;YAAE;AAC5B,QAAA,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,aAAa,GAAG,UAAU,CAAC;AAC3B,YAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9B;IACF;IAEA,IAAI,aAAa,GAAwB,IAAI;IAE7C,SAAS,mBAAmB,CAAC,QAAoB,EAAA;QAC/C,aAAa,GAAG,QAAQ;IAC1B;AAEA;;;;AAIG;AACH,IAAA,SAAS,0BAA0B,GAAA;AACjC,QAAA,IAAI,CAAC,aAAa;YAAE;QACpB,YAAY,GAAG,IAAI;AACnB,QAAA,IAAI;AACF,YAAA,aAAa,EAAE;QACjB;gBAAU;YACR,YAAY,GAAG,KAAK;QACtB;IACF;AAEA,IAAA,SAAS,gBAAgB,GAAA;AACvB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACnE;IAEA,SAAS,SAAS,CAAC,UAAA,GAAqB,CAAC,EAAA;QACvC,IAAI,CAAC,YAAY,EAAE;YAAE;AACrB,QAAA,MAAM,WAAW,GAAG,KAAK,EAAE;AAC3B,QAAA,0BAA0B,EAAE;AAC5B,QAAA,MAAM,gBAAgB,GAAG,KAAK,EAAE;QAChC,MAAM,OAAO,GAAG,gBAAgB,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;AACjE,QAAA,MAAM,SAAS,GAAG,gBAAgB,EAAE;AACpC,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,SAAS,CAAC,CAAC;;;;QAIpE,IAAI,WAAW,KAAK,KAAK,EAAE,IAAI,gBAAgB,KAAK,KAAK,EAAE,EAAE;AAC3D,YAAA,aAAa,GAAG,KAAK,EAAE,CAAC;AACxB,YAAA,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B;IACF;IAEA,SAAS,SAAS,CAAC,UAAA,GAAqB,CAAC,EAAA;QACvC,IAAI,CAAC,YAAY,EAAE;YAAE;AACrB,QAAA,MAAM,WAAW,GAAG,KAAK,EAAE;AAC3B,QAAA,0BAA0B,EAAE;AAC5B,QAAA,MAAM,gBAAgB,GAAG,KAAK,EAAE;QAChC,MAAM,OAAO,GAAG,gBAAgB,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;AACjE,QAAA,MAAM,SAAS,GAAG,gBAAgB,EAAE;AACpC,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,SAAS,CAAC,CAAC;;;;QAIpE,IAAI,WAAW,KAAK,KAAK,EAAE,IAAI,gBAAgB,KAAK,KAAK,EAAE,EAAE;AAC3D,YAAA,aAAa,GAAG,KAAK,EAAE,CAAC;AACxB,YAAA,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B;IACF;IAEA,SAAS,WAAW,CAAC,UAAmB,EAAA;AACtC,QAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1B;IAEA,SAAS,WAAW,CAAC,UAAmB,EAAA;AACtC,QAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1B;IAEA,OAAO;QACL,EAAE;QACF,KAAK;QACL,GAAG;QACH,GAAG;QACH,IAAI;AACJ,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACnD,QAAA,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;QACnD,YAAY;QACZ,YAAY;AACZ,QAAA,WAAW,EAAE,WAAW,CAAC,YAAY,EAAE;QACvC,QAAQ;QACR,SAAS;QACT,SAAS;QACT,WAAW;QACX,WAAW;QACX,mBAAmB;KACU;AACjC,CAAC;;AC3SH;;;AAGG;MAMU,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;AAME;;AAEG;QACM,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,QAAQ,CAAC,kBAAkB,CAAC,yEAAC;AAEzD;;AAEG;AACM,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAA6B,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EACrD,KAAK,EAAE,qBAAqB;AAC5B,YAAA,SAAS,EAAE,CAAC,CAAc,KACxB,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,GACvE;AAEF;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,MAAM,CAAgB;AAC3C,YAAA,KAAK,EAAE,2BAA2B;AACnC,SAAA,CAAC;AAEF;;AAEG;QACM,IAAA,CAAA,GAAG,GAAG,KAAK,CAAsB,CAAC,QAAQ,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EACjD,KAAK,EAAE,mBAAmB;YAC1B,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAsB,QAAQ,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EAChD,KAAK,EAAE,mBAAmB;YAC1B,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAsB,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EAC1C,KAAK,EAAE,oBAAoB;YAC3B,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAsB,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAChD,KAAK,EAAE,yBAAyB;YAChC,SAAS,EAAE,eAAe,EAAA,CAC1B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,wBAAwB;YAC/B,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,wBAAwB;YAC/B,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAEF;;AAEG;QACgB,IAAA,CAAA,KAAK,GAAG,cAAc,CAAC;YACxC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACrD,SAAA,CAAC;AAoCH,IAAA;AAlCC;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5B;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,UAAmB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;IAClC;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,UAAmB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;IAClC;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,QAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;IAClC;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,QAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;IAClC;+GAtHW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,EAAA,SAAA,EAFd,CAAC,uBAAuB,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAE3B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,SAAS,EAAE,CAAC,uBAAuB,EAAE,CAAC;AACvC,iBAAA;;;ACeM,MAAM,CACX,6BAA6B,EAC7B,mBAAmB,EACnB,2BAA2B,EAC3B,4BAA4B,EAC7B,GAAG,eAAe,CACjB,qBAAqB,EACrB,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,EAA4B,KAA8B;AAC1F,IAAA,MAAM,UAAU,GAAG,gBAAgB,EAAoB;AACvD,IAAA,MAAM,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAGjC,IAAA,cAAc,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAGpE,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC,IAAI,EAAE;QACpC,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC;;QAGrC,IAAI,cAAc,IAAI,WAAW;AAAE,YAAA,OAAO,MAAM;AAChD,QAAA,IAAI,WAAW;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,SAAS;AACrC,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,gFAAC;AAEF,IAAA,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC;AAC7C,IAAA,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;AACvC,IAAA,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC;AAC/C,IAAA,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC;AAC9C,IAAA,WAAW,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC;AAC7C,IAAA,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC;AAC9C,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,MAAK;AAC5C,QAAA,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE;AAC/B,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,IAAI;AAC9C,IAAA,CAAC,CAAC;AACF,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,MAAK;AAC5C,QAAA,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE;AAC/B,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,IAAI;AAC9C,IAAA,CAAC,CAAC;AACF,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;AACzF,IAAA,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;IAChE,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACjF,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;AAExE,IAAA,eAAe,CAAC;AACd,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ;AACjC,KAAA,CAAC;IAEF,IAAI,SAAS,GAAG,KAAK;AAErB;;AAEG;IACH,SAAS,gBAAgB,CAAC,IAAY,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;QAC3B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,EAAE;AACrC,YAAA,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9B;aAAO;AACL,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAClB,gBAAA,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChC;QACF;IACF;AAEA;;;AAGG;AACH,IAAA,SAAS,gBAAgB,GAAA;AACvB,QAAA,IAAI,CAAC,SAAS;YAAE;AAChB,QAAA,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;IAClD;;AAGA,IAAA,WAAW,EAAE,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;AAEnD,IAAA,SAAS,kBAAkB,GAAA;AACzB,QAAA,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC,KAAK,EAAE;AACjC,QAAA,OAAO,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;IACxC;;;AAIA,IAAA,cAAc,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAI;AACxD,QAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,KAAK,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;AACtE,IAAA,CAAC,CAAC;AAEF,IAAA,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,MAAK;QACjC,SAAS,GAAG,IAAI;AAClB,IAAA,CAAC,CAAC;AAEF,IAAA,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAK;QAChC,SAAS,GAAG,KAAK;AACjB,QAAA,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;;AAGhD,QAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;AACvD,IAAA,CAAC,CAAC;;IAGF,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,KAAiB,KAAI;QACxD,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE;YAAE;;QAG1D,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE;AAE3D,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa;AACtC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC;AACtC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK;QAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;AAEhF,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE;QAClC,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;;QAGtD,MAAM,OAAO,GAAG,cAAc,GAAG,wBAAwB,GAAG,sBAAsB;QAElF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE;QACxB;AACF,IAAA,CAAC,CAAC;;IAGF,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,KAAoB,KAAI;QACvD,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE;YAAE;AAE1D,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ;AAEnC,QAAA,SAAS,sBAAsB,GAAA;AAC7B,YAAA,MAAM,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC;AACpC,YAAA,OAAO,WAAW,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;QACtC;AAEA,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,YAAY,GAAG,sBAAsB,EAAE,GAAG,CAAC,CAAC;AACpE,gBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACrD;AACF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,YAAY,GAAG,sBAAsB,EAAE,GAAG,CAAC,CAAC;AACpE,gBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACrD;AACF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;AACjD,gBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACrD;AACF,YAAA,KAAK,UAAU;gBACb,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;AACjD,gBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACrD;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE;oBACjC,KAAK,CAAC,cAAc,EAAE;oBACtB,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC;AAC3C,oBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACvD;gBACA;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE;oBACjC,KAAK,CAAC,cAAc,EAAE;oBACtB,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC;AAC3C,oBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACvD;gBACA;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;AAChD,gBAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;gBACrD;;AAEN,IAAA,CAAC,CAAC;;IAGF,QAAQ,CACN,UAAU,EACV,OAAO,EACP,CAAC,KAAiB,KAAI;AACpB,QAAA,IAAI,CAAC,eAAe,EAAE,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,QAAQ,EAAE;YAAE;;AAGhF,QAAA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;YAAE;;AAGpC,QAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,UAAU,CAAC,aAAa;YAAE;QAEzD,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,WAAW,EAAE,CAAC,SAAS,EAAE;QAC3B;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,WAAW,EAAE,CAAC,SAAS,EAAE;QAC3B;AAEA,QAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,kBAAkB,EAAE;IACvD,CAAC,EACD,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAC/B;AAED,IAAA,SAAS,KAAK,GAAA;QACZ,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACzD;IAEA,OAAO;QACL,KAAK;KAC6B;AACtC,CAAC;;ACpPH;;AAEG;MAMU,mBAAmB,CAAA;AAS9B,IAAA,WAAA,GAAA;AARA;;AAEG;AACM,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,CAAA,EAC3D,KAAK,EAAE,oCAAoC;YAC3C,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAGA,QAAA,mBAAmB,CAAC;YAClB,eAAe,EAAE,IAAI,CAAC,eAAe;AACtC,SAAA,CAAC;IACJ;+GAbW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFnB,CAAC,4BAA4B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEhC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,SAAS,EAAE,CAAC,4BAA4B,EAAE,CAAC;AAC5C,iBAAA;;;ACMM,MAAM,CACX,iCAAiC,EACjC,uBAAuB,EACvB,+BAA+B,EAC/B,gCAAgC,EACjC,GAAG,eAAe,CACjB,yBAAyB,EACzB,CAAC,EAAgC,KAAkC;AACjE,IAAA,MAAM,UAAU,GAAG,gBAAgB,EAAqB;AACxD,IAAA,MAAM,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE;AAEvC,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,iFAAC;;AAGhE,IAAA,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;AACzC,IAAA,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC;IACzC,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACrE,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC;AAEpD,IAAA,eAAe,CAAC;AACd,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,UAAU;AACrB,KAAA,CAAC;IAEF,IAAI,aAAa,GAAwB,IAAI;AAE7C,IAAA,SAAS,UAAU,GAAA;QACjB,aAAa,IAAI;QACjB,aAAa,GAAG,IAAI;IACtB;IAEA,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,KAAmB,KAAI;QAC1D,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,UAAU,EAAE;YAAE;AAElB,QAAA,WAAW,EAAE,CAAC,SAAS,EAAE;;AAGzB,QAAA,UAAU,EAAE;QAEZ,IAAI,eAAe,GAAwB,IAAI;AAE/C,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,MAAK;AAC/C,YAAA,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,MAAK;AAC7C,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE;AACjC,oBAAA,UAAU,EAAE;oBACZ;gBACF;AACA,gBAAA,WAAW,EAAE,CAAC,SAAS,EAAE;YAC3B,CAAC,EAAE,EAAE,CAAC;QACR,CAAC,EAAE,GAAG,CAAC;;QAGP,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;AACnE,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ;AACT,SAAA,CAAC;QAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE;AAC3E,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ;AACT,SAAA,CAAC;QAEF,aAAa,GAAG,MAAK;AACnB,YAAA,YAAY,EAAE;YACd,eAAe,IAAI;AACnB,YAAA,gBAAgB,EAAE;AAClB,YAAA,oBAAoB,EAAE;AACxB,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,EAAyC;AAClD,CAAC;;ACxFH;;AAEG;MAMU,uBAAuB,CAAA;AAClC,IAAA,WAAA,GAAA;QACE,uBAAuB,CAAC,EAAE,CAAC;IAC7B;+GAHW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,SAAA,EAFvB,CAAC,gCAAgC,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEpC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,SAAS,EAAE,CAAC,gCAAgC,EAAE,CAAC;AAChD,iBAAA;;;ACIM,MAAM,CACX,iCAAiC,EACjC,uBAAuB,EACvB,+BAA+B,EAC/B,gCAAgC,EACjC,GAAG,eAAe,CACjB,yBAAyB,EACzB,CAAC,EAAgC,KAAkC;AACjE,IAAA,MAAM,UAAU,GAAG,gBAAgB,EAAqB;AACxD,IAAA,MAAM,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE;AAEvC,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,iFAAC;;AAGhE,IAAA,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;AACzC,IAAA,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC;IACzC,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACrE,IAAA,WAAW,CAAC,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC;AAEpD,IAAA,eAAe,CAAC;AACd,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,UAAU;AACrB,KAAA,CAAC;IAEF,IAAI,aAAa,GAAwB,IAAI;AAE7C,IAAA,SAAS,UAAU,GAAA;QACjB,aAAa,IAAI;QACjB,aAAa,GAAG,IAAI;IACtB;IAEA,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,KAAmB,KAAI;QAC1D,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,UAAU,EAAE;YAAE;AAElB,QAAA,WAAW,EAAE,CAAC,SAAS,EAAE;;AAGzB,QAAA,UAAU,EAAE;QAEZ,IAAI,eAAe,GAAwB,IAAI;AAE/C,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,MAAK;AAC/C,YAAA,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,MAAK;AAC7C,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE;AACjC,oBAAA,UAAU,EAAE;oBACZ;gBACF;AACA,gBAAA,WAAW,EAAE,CAAC,SAAS,EAAE;YAC3B,CAAC,EAAE,EAAE,CAAC;QACR,CAAC,EAAE,GAAG,CAAC;;QAGP,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;AACnE,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ;AACT,SAAA,CAAC;QAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE;AAC3E,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ;AACT,SAAA,CAAC;QAEF,aAAa,GAAG,MAAK;AACnB,YAAA,YAAY,EAAE;YACd,eAAe,IAAI;AACnB,YAAA,gBAAgB,EAAE;AAClB,YAAA,oBAAoB,EAAE;AACxB,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,EAAyC;AAClD,CAAC;;ACxFH;;AAEG;MAMU,uBAAuB,CAAA;AAClC,IAAA,WAAA,GAAA;QACE,uBAAuB,CAAC,EAAE,CAAC;IAC7B;+GAHW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,SAAA,EAFvB,CAAC,gCAAgC,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEpC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,SAAS,EAAE,CAAC,gCAAgC,EAAE,CAAC;AAChD,iBAAA;;;ACbD;;AAEG;;;;"}
@@ -2,24 +2,32 @@ import * as i0 from '@angular/core';
2
2
  import { signal, computed, input, numberAttribute, booleanAttribute, Directive, output } from '@angular/core';
3
3
  import { ngpButton } from 'ng-primitives/button';
4
4
  import { injectElementRef } from 'ng-primitives/internal';
5
- import { createPrimitive, controlledState, attrBinding, dataBinding, deprecatedSetter, listener } from 'ng-primitives/state';
5
+ import { createPrimitive, controlled, controlledState, attrBinding, dataBinding, deprecatedSetter, listener } from 'ng-primitives/state';
6
6
 
7
7
  const [NgpPaginationStateToken, ngpPagination, injectPaginationState, providePaginationState,] = createPrimitive('NgpPagination', ({ page: _page = signal(undefined), defaultPage: _defaultPage = signal(1), pageCount: _pageCount = signal(0), disabled: _disabled = signal(false), onPageChange, }) => {
8
8
  const elementRef = injectElementRef();
9
+ // controlled so a form control can set the disabled state via setDisabled,
10
+ // while still following the `disabled` input when it is bound
11
+ const disabled = controlled(_disabled);
9
12
  const [page, setPage, pageChange] = controlledState({
10
13
  value: _page,
11
14
  defaultValue: _defaultPage,
12
15
  onChange: onPageChange,
13
16
  });
14
- const firstPage = computed(() => page() === 1, ...(ngDevMode ? [{ debugName: "firstPage" }] : /* istanbul ignore next */ []));
15
- const lastPage = computed(() => page() === _pageCount(), ...(ngDevMode ? [{ debugName: "lastPage" }] : /* istanbul ignore next */ []));
17
+ // use <= / >= so the boundary flags stay correct even if the bound page is
18
+ // out of range (otherwise a Next/Previous button can stay enabled past the end)
19
+ const firstPage = computed(() => page() <= 1, ...(ngDevMode ? [{ debugName: "firstPage" }] : /* istanbul ignore next */ []));
20
+ const lastPage = computed(() => _pageCount() > 0 && page() >= _pageCount(), ...(ngDevMode ? [{ debugName: "lastPage" }] : /* istanbul ignore next */ []));
16
21
  // Host bindings
17
22
  attrBinding(elementRef, 'role', 'navigation');
18
23
  dataBinding(elementRef, 'data-page', () => page().toString());
19
24
  dataBinding(elementRef, 'data-page-count', () => _pageCount().toString());
20
25
  dataBinding(elementRef, 'data-first-page', () => (firstPage() ? '' : null));
21
26
  dataBinding(elementRef, 'data-last-page', () => (lastPage() ? '' : null));
22
- dataBinding(elementRef, 'data-disabled', () => (_disabled() ? '' : null));
27
+ dataBinding(elementRef, 'data-disabled', () => (disabled() ? '' : null));
28
+ function setDisabled(value) {
29
+ disabled.set(value);
30
+ }
23
31
  function goToPage(page) {
24
32
  // check if the page is within the bounds of the pagination
25
33
  if (page < 1 || page > _pageCount()) {
@@ -31,9 +39,11 @@ const [NgpPaginationStateToken, ngpPagination, injectPaginationState, providePag
31
39
  page: deprecatedSetter(page, 'setPage', setPage),
32
40
  pageCount: _pageCount,
33
41
  pageChange,
34
- disabled: _disabled,
42
+ disabled,
43
+ setDisabled,
35
44
  firstPage,
36
45
  lastPage,
46
+ setPage,
37
47
  goToPage,
38
48
  };
39
49
  });
@@ -47,7 +57,7 @@ const [NgpPaginationButtonStateToken, ngpPaginationButton, injectPaginationButto
47
57
  ngpButton({ disabled: disabled });
48
58
  // Host binding
49
59
  attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));
50
- attrBinding(elementRef, 'aria-current', selected);
60
+ attrBinding(elementRef, 'aria-current', () => (selected() ? 'page' : null));
51
61
  dataBinding(elementRef, 'data-page', () => page().toString());
52
62
  dataBinding(elementRef, 'data-selected', () => (selected() ? '' : null));
53
63
  // Listeners
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-pagination.mjs","sources":["../../../../packages/ng-primitives/pagination/src/pagination/pagination-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-button/pagination-button-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-button/pagination-button.ts","../../../../packages/ng-primitives/pagination/src/pagination-first/pagination-first-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-first/pagination-first.ts","../../../../packages/ng-primitives/pagination/src/pagination-last/pagination-last-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-last/pagination-last.ts","../../../../packages/ng-primitives/pagination/src/pagination-next/pagination-next-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-next/pagination-next.ts","../../../../packages/ng-primitives/pagination/src/pagination-previous/pagination-previous-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-previous/pagination-previous.ts","../../../../packages/ng-primitives/pagination/src/pagination/pagination.ts","../../../../packages/ng-primitives/pagination/src/ng-primitives-pagination.ts"],"sourcesContent":["import { computed, signal, Signal, WritableSignal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlledState,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n} from 'ng-primitives/state';\nimport { Observable } from 'rxjs';\n\nexport interface NgpPaginationState {\n /**\n * The currently selected page.\n */\n readonly page: WritableSignal<number>;\n /**\n * The total number of pages.\n */\n readonly pageCount: Signal<number>;\n /**\n * Whether the pagination is disabled.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Determine if we are on the first page.\n * @internal\n */\n readonly firstPage: Signal<boolean>;\n /**\n * Determine if we are on the last page.\n * @internal\n */\n readonly lastPage: Signal<boolean>;\n /**\n * The event that is fired when the page changes.\n */\n readonly pageChange: Observable<number>;\n /**\n * Go to the specified page.\n * @param page The page to go to.\n */\n goToPage: (page: number) => void;\n}\n\nexport interface NgpPaginationProps {\n /**\n * The currently selected page. When `undefined`, the pagination is uncontrolled\n * and seeds from `defaultPage`.\n */\n readonly page?: Signal<number | undefined>;\n /**\n * The default page for uncontrolled usage.\n */\n readonly defaultPage?: Signal<number>;\n /**\n * The total number of pages.\n */\n readonly pageCount?: Signal<number>;\n /**\n * Whether the pagination is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /** Callback fired when the page state changes. */\n onPageChange: (page: number) => void;\n}\n\nexport const [\n NgpPaginationStateToken,\n ngpPagination,\n injectPaginationState,\n providePaginationState,\n] = createPrimitive(\n 'NgpPagination',\n ({\n page: _page = signal<number | undefined>(undefined),\n defaultPage: _defaultPage = signal<number>(1),\n pageCount: _pageCount = signal<number>(0),\n disabled: _disabled = signal<boolean>(false),\n onPageChange,\n }: NgpPaginationProps) => {\n const elementRef = injectElementRef();\n\n const [page, setPage, pageChange] = controlledState({\n value: _page,\n defaultValue: _defaultPage,\n onChange: onPageChange,\n });\n\n const firstPage = computed(() => page() === 1);\n const lastPage = computed(() => page() === _pageCount());\n\n // Host bindings\n attrBinding(elementRef, 'role', 'navigation');\n dataBinding(elementRef, 'data-page', () => page().toString());\n dataBinding(elementRef, 'data-page-count', () => _pageCount().toString());\n dataBinding(elementRef, 'data-first-page', () => (firstPage() ? '' : null));\n dataBinding(elementRef, 'data-last-page', () => (lastPage() ? '' : null));\n dataBinding(elementRef, 'data-disabled', () => (_disabled() ? '' : null));\n\n function goToPage(page: number) {\n // check if the page is within the bounds of the pagination\n if (page < 1 || page > _pageCount()) {\n return;\n }\n\n setPage(page);\n }\n\n return {\n page: deprecatedSetter(page, 'setPage', setPage),\n pageCount: _pageCount,\n pageChange,\n disabled: _disabled,\n firstPage,\n lastPage,\n goToPage,\n } satisfies NgpPaginationState;\n },\n);\n","import { computed, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationButtonState {\n /**\n * Define the page this button represents.\n */\n readonly page: Signal<number>;\n /**\n * Whether the button is disabled, accounting for the parent pagination state.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Go to the page this button represents.\n */\n goToPage(): void;\n}\n\nexport interface NgpPaginationButtonProps {\n /**\n * Define the page this button represents.\n */\n readonly page?: Signal<number>;\n /**\n * Whether the button is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationButtonStateToken,\n ngpPaginationButton,\n injectPaginationButtonState,\n providePaginationButtonState,\n] = createPrimitive(\n 'NgpPaginationButton',\n ({\n page = signal<number>(-1),\n disabled: _disabled = signal<boolean>(false),\n }: NgpPaginationButtonProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const selected = computed(() => page() === paginationState().page());\n const disabled = computed(() => _disabled() || paginationState().disabled());\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n attrBinding(elementRef, 'aria-current', selected);\n dataBinding(elementRef, 'data-page', () => page().toString());\n dataBinding(elementRef, 'data-selected', () => (selected() ? '' : null));\n\n // Listeners\n listener(elementRef, 'click', goToPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(page());\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToPage();\n }\n\n return {\n page,\n disabled,\n goToPage,\n } satisfies NgpPaginationButtonState;\n },\n);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, numberAttribute } from '@angular/core';\nimport { ngpPaginationButton } from './pagination-button-state';\n\n/**\n * The `NgpPaginationButton` directive is used to create a pagination button.\n */\n@Directive({\n selector: '[ngpPaginationButton]',\n exportAs: 'ngpPaginationButton',\n})\nexport class NgpPaginationButton {\n /**\n * Define the page this button represents.\n */\n readonly page = input.required<number, NumberInput>({\n alias: 'ngpPaginationButtonPage',\n transform: numberAttribute,\n });\n\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationButtonDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationButton({\n page: this.page,\n disabled: this.disabled,\n });\n\n /**\n * Go to the page this button represents.\n */\n goToPage(): void {\n return this.state.goToPage();\n }\n}\n","import { computed, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationFirstState {\n /**\n * Whether the button is disabled, accounting for the parent pagination state.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Go to the first page.\n */\n goToFirstPage(): void;\n}\n\nexport interface NgpPaginationFirstProps {\n /**\n * Whether the button is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationFirstStateToken,\n ngpPaginationFirst,\n injectPaginationFirstState,\n providePaginationFirstState,\n] = createPrimitive(\n 'NgpPaginationFirst',\n ({ disabled: _disabled = signal<boolean>(false) }: NgpPaginationFirstProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const disabled = computed(\n () => _disabled() || paginationState().disabled() || paginationState().firstPage(),\n );\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n dataBinding(elementRef, 'data-first-page', () => (paginationState().firstPage() ? '' : null));\n\n // Listener\n listener(elementRef, 'click', goToFirstPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToFirstPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(1);\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToFirstPage();\n }\n\n return {\n disabled,\n goToFirstPage,\n } satisfies NgpPaginationFirstState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpPaginationFirst } from './pagination-first-state';\n\n/**\n * The `NgpPaginationFirst` directive is used to create a pagination button that navigates to the first page.\n */\n@Directive({\n selector: '[ngpPaginationFirst]',\n exportAs: 'ngpPaginationFirst',\n})\nexport class NgpPaginationFirst {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationFirstDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationFirst({\n disabled: this.disabled,\n });\n\n /**\n * Go to the first page.\n */\n goToFirstPage() {\n return this.state.goToFirstPage();\n }\n}\n","import { computed, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationLastState {\n /** Whether the button is disabled, accounting for the parent pagination state. */\n readonly disabled: Signal<boolean>;\n /** Go to the last page. */\n goToLastPage(): void;\n}\n\nexport interface NgpPaginationLastProps {\n /** Whether the button is disabled. */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationLastStateToken,\n ngpPaginationLast,\n injectPaginationLastState,\n providePaginationLastState,\n] = createPrimitive(\n 'NgpPaginationLast',\n ({ disabled: _disabled = signal<boolean>(false) }: NgpPaginationLastProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const disabled = computed(\n () => _disabled() || paginationState().disabled() || paginationState().lastPage(),\n );\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n dataBinding(elementRef, 'data-last-page', () => (paginationState().lastPage() ? '' : null));\n\n // Listener\n listener(elementRef, 'click', goToLastPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToLastPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(paginationState().pageCount());\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToLastPage();\n }\n\n return {\n disabled,\n goToLastPage,\n } satisfies NgpPaginationLastState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpPaginationLast } from './pagination-last-state';\n\n/**\n * The `NgpPaginationLast` directive is used to create a pagination button that navigates to the last page.\n */\n@Directive({\n selector: '[ngpPaginationLast]',\n exportAs: 'ngpPaginationLast',\n})\nexport class NgpPaginationLast {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationLastDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationLast({\n disabled: this.disabled,\n });\n\n /**\n * Go to the last page.\n */\n goToLastPage(): void {\n this.state.goToLastPage();\n }\n}\n","import { computed, Signal, signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationNextState {\n /** Whether the button is disabled, accounting for the parent pagination state. */\n readonly disabled: Signal<boolean>;\n /** Go to the next page. */\n goToNextPage(): void;\n}\n\nexport interface NgpPaginationNextProps {\n /** Whether the button is disabled */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationNextStateToken,\n ngpPaginationNext,\n injectPaginationNextState,\n providePaginationNextState,\n] = createPrimitive(\n 'NgpPaginationNext',\n ({ disabled: _disabled = signal<boolean>(false) }: NgpPaginationNextProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const disabled = computed(\n () => _disabled() || paginationState().disabled() || paginationState().lastPage(),\n );\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n dataBinding(elementRef, 'data-last-page', () => (paginationState().lastPage() ? '' : null));\n\n // Listener\n listener(elementRef, 'click', goToNextPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToNextPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(paginationState().page() + 1);\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToNextPage();\n }\n\n return {\n disabled,\n goToNextPage,\n } satisfies NgpPaginationNextState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpPaginationNext } from './pagination-next-state';\n\n/**\n * The `NgpPaginationNext` directive is used to create a pagination button that navigates to the next page.\n */\n@Directive({\n selector: '[ngpPaginationNext]',\n exportAs: 'ngpPaginationNext',\n})\nexport class NgpPaginationNext {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationNextDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationNext({\n disabled: this.disabled,\n });\n\n /**\n * Go to the next page.\n */\n goToNextPage(): void {\n return this.state.goToNextPage();\n }\n}\n","import { computed, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationPreviousState {\n /**\n * Whether the button is disabled, accounting for the parent pagination state.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Go to the previous page.\n */\n goToPreviousPage(): void;\n}\n\nexport interface NgpPaginationPreviousProps {\n /**\n * Whether the button is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationPreviousStateToken,\n ngpPaginationPrevious,\n injectPaginationPreviousState,\n providePaginationPreviousState,\n] = createPrimitive(\n 'NgpPaginationPrevious',\n ({ disabled: _disabled = signal<boolean>(false) }: NgpPaginationPreviousProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const disabled = computed(\n () => _disabled() || paginationState().disabled() || paginationState().firstPage(),\n );\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n dataBinding(elementRef, 'data-first-page', () => (paginationState().firstPage() ? '' : null));\n\n // Listener\n listener(elementRef, 'click', goToPreviousPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToPreviousPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(paginationState().page() - 1);\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToPreviousPage();\n }\n\n return {\n disabled,\n goToPreviousPage,\n } satisfies NgpPaginationPreviousState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpPaginationPrevious } from './pagination-previous-state';\n\n/**\n * The `NgpPaginationPrevious` directive is used to create a pagination button that navigates to the previous page.\n */\n@Directive({\n selector: '[ngpPaginationPrevious]',\n exportAs: 'ngpPaginationPrevious',\n})\nexport class NgpPaginationPrevious {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationPreviousDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationPrevious({\n disabled: this.disabled,\n });\n\n /**\n * Go to the previous page.\n */\n goToPreviousPage() {\n return this.state.goToPreviousPage();\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, numberAttribute, output } from '@angular/core';\nimport { ngpPagination, providePaginationState } from './pagination-state';\n\n/**\n * The `NgpPagination` directive is used to create a pagination control.\n */\n@Directive({\n selector: '[ngpPagination]',\n exportAs: 'ngpPagination',\n providers: [providePaginationState()],\n})\nexport class NgpPagination {\n /**\n * The currently selected page. Leave unset for uncontrolled usage, where the\n * internal state is seeded from `defaultPage`.\n */\n readonly page = input<number | undefined, NumberInput>(undefined, {\n alias: 'ngpPaginationPage',\n transform: numberAttribute,\n });\n\n /**\n * The default page for uncontrolled usage.\n * @default 1\n */\n readonly defaultPage = input<number, NumberInput>(1, {\n alias: 'ngpPaginationDefaultPage',\n transform: numberAttribute,\n });\n\n /**\n * The event that is fired when the page changes.\n */\n readonly pageChange = output<number>({\n alias: 'ngpPaginationPageChange',\n });\n\n /**\n * The total number of pages.\n */\n readonly pageCount = input<number, NumberInput>(0, {\n alias: 'ngpPaginationPageCount',\n transform: numberAttribute,\n });\n\n /**\n * Whether the pagination is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The control state for the pagination.\n * @internal\n */\n protected readonly state = ngpPagination({\n page: this.page,\n defaultPage: this.defaultPage,\n pageCount: this.pageCount,\n disabled: this.disabled,\n onPageChange: (value: number) => this.pageChange.emit(value),\n });\n\n /**\n * Go to the specified page.\n * @param page The page to go to.\n */\n goToPage(page: number) {\n return this.state.goToPage(page);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-primitives-pagination.mjs","sources":["../../../../packages/ng-primitives/pagination/src/pagination/pagination-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-button/pagination-button-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-button/pagination-button.ts","../../../../packages/ng-primitives/pagination/src/pagination-first/pagination-first-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-first/pagination-first.ts","../../../../packages/ng-primitives/pagination/src/pagination-last/pagination-last-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-last/pagination-last.ts","../../../../packages/ng-primitives/pagination/src/pagination-next/pagination-next-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-next/pagination-next.ts","../../../../packages/ng-primitives/pagination/src/pagination-previous/pagination-previous-state.ts","../../../../packages/ng-primitives/pagination/src/pagination-previous/pagination-previous.ts","../../../../packages/ng-primitives/pagination/src/pagination/pagination.ts","../../../../packages/ng-primitives/pagination/src/ng-primitives-pagination.ts"],"sourcesContent":["import { computed, signal, Signal, WritableSignal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n controlledState,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n SetterOptions,\n} from 'ng-primitives/state';\nimport { Observable } from 'rxjs';\n\nexport interface NgpPaginationState {\n /**\n * The currently selected page.\n */\n readonly page: WritableSignal<number>;\n /**\n * The total number of pages.\n */\n readonly pageCount: Signal<number>;\n /**\n * Whether the pagination is disabled.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Set the disabled state (e.g. from a form control).\n * @param disabled The disabled state.\n */\n setDisabled: (disabled: boolean) => void;\n /**\n * Determine if we are on the first page.\n * @internal\n */\n readonly firstPage: Signal<boolean>;\n /**\n * Determine if we are on the last page.\n * @internal\n */\n readonly lastPage: Signal<boolean>;\n /**\n * The event that is fired when the page changes.\n */\n readonly pageChange: Observable<number>;\n /**\n * Set the current page directly (no bounds navigation logic).\n * @param page The page to set.\n * @param options Setter options, e.g. `{ emit: false }` to suppress change emission.\n */\n setPage: (page: number, options?: SetterOptions) => void;\n /**\n * Go to the specified page.\n * @param page The page to go to.\n */\n goToPage: (page: number) => void;\n}\n\nexport interface NgpPaginationProps {\n /**\n * The currently selected page. When `undefined`, the pagination is uncontrolled\n * and seeds from `defaultPage`.\n */\n readonly page?: Signal<number | undefined>;\n /**\n * The default page for uncontrolled usage.\n */\n readonly defaultPage?: Signal<number>;\n /**\n * The total number of pages.\n */\n readonly pageCount?: Signal<number>;\n /**\n * Whether the pagination is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /** Callback fired when the page state changes. */\n onPageChange: (page: number) => void;\n}\n\nexport const [\n NgpPaginationStateToken,\n ngpPagination,\n injectPaginationState,\n providePaginationState,\n] = createPrimitive(\n 'NgpPagination',\n ({\n page: _page = signal<number | undefined>(undefined),\n defaultPage: _defaultPage = signal<number>(1),\n pageCount: _pageCount = signal<number>(0),\n disabled: _disabled = signal<boolean>(false),\n onPageChange,\n }: NgpPaginationProps) => {\n const elementRef = injectElementRef();\n\n // controlled so a form control can set the disabled state via setDisabled,\n // while still following the `disabled` input when it is bound\n const disabled = controlled(_disabled);\n\n const [page, setPage, pageChange] = controlledState({\n value: _page,\n defaultValue: _defaultPage,\n onChange: onPageChange,\n });\n\n // use <= / >= so the boundary flags stay correct even if the bound page is\n // out of range (otherwise a Next/Previous button can stay enabled past the end)\n const firstPage = computed(() => page() <= 1);\n const lastPage = computed(() => _pageCount() > 0 && page() >= _pageCount());\n\n // Host bindings\n attrBinding(elementRef, 'role', 'navigation');\n dataBinding(elementRef, 'data-page', () => page().toString());\n dataBinding(elementRef, 'data-page-count', () => _pageCount().toString());\n dataBinding(elementRef, 'data-first-page', () => (firstPage() ? '' : null));\n dataBinding(elementRef, 'data-last-page', () => (lastPage() ? '' : null));\n dataBinding(elementRef, 'data-disabled', () => (disabled() ? '' : null));\n\n function setDisabled(value: boolean): void {\n disabled.set(value);\n }\n\n function goToPage(page: number) {\n // check if the page is within the bounds of the pagination\n if (page < 1 || page > _pageCount()) {\n return;\n }\n\n setPage(page);\n }\n\n return {\n page: deprecatedSetter(page, 'setPage', setPage),\n pageCount: _pageCount,\n pageChange,\n disabled,\n setDisabled,\n firstPage,\n lastPage,\n setPage,\n goToPage,\n } satisfies NgpPaginationState;\n },\n);\n","import { computed, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationButtonState {\n /**\n * Define the page this button represents.\n */\n readonly page: Signal<number>;\n /**\n * Whether the button is disabled, accounting for the parent pagination state.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Go to the page this button represents.\n */\n goToPage(): void;\n}\n\nexport interface NgpPaginationButtonProps {\n /**\n * Define the page this button represents.\n */\n readonly page?: Signal<number>;\n /**\n * Whether the button is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationButtonStateToken,\n ngpPaginationButton,\n injectPaginationButtonState,\n providePaginationButtonState,\n] = createPrimitive(\n 'NgpPaginationButton',\n ({\n page = signal<number>(-1),\n disabled: _disabled = signal<boolean>(false),\n }: NgpPaginationButtonProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const selected = computed(() => page() === paginationState().page());\n const disabled = computed(() => _disabled() || paginationState().disabled());\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n attrBinding(elementRef, 'aria-current', () => (selected() ? 'page' : null));\n dataBinding(elementRef, 'data-page', () => page().toString());\n dataBinding(elementRef, 'data-selected', () => (selected() ? '' : null));\n\n // Listeners\n listener(elementRef, 'click', goToPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(page());\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToPage();\n }\n\n return {\n page,\n disabled,\n goToPage,\n } satisfies NgpPaginationButtonState;\n },\n);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, numberAttribute } from '@angular/core';\nimport { ngpPaginationButton } from './pagination-button-state';\n\n/**\n * The `NgpPaginationButton` directive is used to create a pagination button.\n */\n@Directive({\n selector: '[ngpPaginationButton]',\n exportAs: 'ngpPaginationButton',\n})\nexport class NgpPaginationButton {\n /**\n * Define the page this button represents.\n */\n readonly page = input.required<number, NumberInput>({\n alias: 'ngpPaginationButtonPage',\n transform: numberAttribute,\n });\n\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationButtonDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationButton({\n page: this.page,\n disabled: this.disabled,\n });\n\n /**\n * Go to the page this button represents.\n */\n goToPage(): void {\n return this.state.goToPage();\n }\n}\n","import { computed, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationFirstState {\n /**\n * Whether the button is disabled, accounting for the parent pagination state.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Go to the first page.\n */\n goToFirstPage(): void;\n}\n\nexport interface NgpPaginationFirstProps {\n /**\n * Whether the button is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationFirstStateToken,\n ngpPaginationFirst,\n injectPaginationFirstState,\n providePaginationFirstState,\n] = createPrimitive(\n 'NgpPaginationFirst',\n ({ disabled: _disabled = signal<boolean>(false) }: NgpPaginationFirstProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const disabled = computed(\n () => _disabled() || paginationState().disabled() || paginationState().firstPage(),\n );\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n dataBinding(elementRef, 'data-first-page', () => (paginationState().firstPage() ? '' : null));\n\n // Listener\n listener(elementRef, 'click', goToFirstPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToFirstPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(1);\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToFirstPage();\n }\n\n return {\n disabled,\n goToFirstPage,\n } satisfies NgpPaginationFirstState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpPaginationFirst } from './pagination-first-state';\n\n/**\n * The `NgpPaginationFirst` directive is used to create a pagination button that navigates to the first page.\n */\n@Directive({\n selector: '[ngpPaginationFirst]',\n exportAs: 'ngpPaginationFirst',\n})\nexport class NgpPaginationFirst {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationFirstDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationFirst({\n disabled: this.disabled,\n });\n\n /**\n * Go to the first page.\n */\n goToFirstPage() {\n return this.state.goToFirstPage();\n }\n}\n","import { computed, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationLastState {\n /** Whether the button is disabled, accounting for the parent pagination state. */\n readonly disabled: Signal<boolean>;\n /** Go to the last page. */\n goToLastPage(): void;\n}\n\nexport interface NgpPaginationLastProps {\n /** Whether the button is disabled. */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationLastStateToken,\n ngpPaginationLast,\n injectPaginationLastState,\n providePaginationLastState,\n] = createPrimitive(\n 'NgpPaginationLast',\n ({ disabled: _disabled = signal<boolean>(false) }: NgpPaginationLastProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const disabled = computed(\n () => _disabled() || paginationState().disabled() || paginationState().lastPage(),\n );\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n dataBinding(elementRef, 'data-last-page', () => (paginationState().lastPage() ? '' : null));\n\n // Listener\n listener(elementRef, 'click', goToLastPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToLastPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(paginationState().pageCount());\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToLastPage();\n }\n\n return {\n disabled,\n goToLastPage,\n } satisfies NgpPaginationLastState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpPaginationLast } from './pagination-last-state';\n\n/**\n * The `NgpPaginationLast` directive is used to create a pagination button that navigates to the last page.\n */\n@Directive({\n selector: '[ngpPaginationLast]',\n exportAs: 'ngpPaginationLast',\n})\nexport class NgpPaginationLast {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationLastDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationLast({\n disabled: this.disabled,\n });\n\n /**\n * Go to the last page.\n */\n goToLastPage(): void {\n this.state.goToLastPage();\n }\n}\n","import { computed, Signal, signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationNextState {\n /** Whether the button is disabled, accounting for the parent pagination state. */\n readonly disabled: Signal<boolean>;\n /** Go to the next page. */\n goToNextPage(): void;\n}\n\nexport interface NgpPaginationNextProps {\n /** Whether the button is disabled */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationNextStateToken,\n ngpPaginationNext,\n injectPaginationNextState,\n providePaginationNextState,\n] = createPrimitive(\n 'NgpPaginationNext',\n ({ disabled: _disabled = signal<boolean>(false) }: NgpPaginationNextProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const disabled = computed(\n () => _disabled() || paginationState().disabled() || paginationState().lastPage(),\n );\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n dataBinding(elementRef, 'data-last-page', () => (paginationState().lastPage() ? '' : null));\n\n // Listener\n listener(elementRef, 'click', goToNextPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToNextPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(paginationState().page() + 1);\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToNextPage();\n }\n\n return {\n disabled,\n goToNextPage,\n } satisfies NgpPaginationNextState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpPaginationNext } from './pagination-next-state';\n\n/**\n * The `NgpPaginationNext` directive is used to create a pagination button that navigates to the next page.\n */\n@Directive({\n selector: '[ngpPaginationNext]',\n exportAs: 'ngpPaginationNext',\n})\nexport class NgpPaginationNext {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationNextDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationNext({\n disabled: this.disabled,\n });\n\n /**\n * Go to the next page.\n */\n goToNextPage(): void {\n return this.state.goToNextPage();\n }\n}\n","import { computed, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectPaginationState } from '../pagination/pagination-state';\n\nexport interface NgpPaginationPreviousState {\n /**\n * Whether the button is disabled, accounting for the parent pagination state.\n */\n readonly disabled: Signal<boolean>;\n /**\n * Go to the previous page.\n */\n goToPreviousPage(): void;\n}\n\nexport interface NgpPaginationPreviousProps {\n /**\n * Whether the button is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [\n NgpPaginationPreviousStateToken,\n ngpPaginationPrevious,\n injectPaginationPreviousState,\n providePaginationPreviousState,\n] = createPrimitive(\n 'NgpPaginationPrevious',\n ({ disabled: _disabled = signal<boolean>(false) }: NgpPaginationPreviousProps) => {\n const elementRef = injectElementRef();\n const paginationState = injectPaginationState();\n\n const disabled = computed(\n () => _disabled() || paginationState().disabled() || paginationState().firstPage(),\n );\n\n // Setup interactions\n ngpButton({ disabled: disabled });\n\n // Host binding\n attrBinding(elementRef, 'tabindex', () => (disabled() ? -1 : 0));\n dataBinding(elementRef, 'data-first-page', () => (paginationState().firstPage() ? '' : null));\n\n // Listener\n listener(elementRef, 'click', goToPreviousPage);\n listener(elementRef, 'keydown', handleKeydown);\n\n function goToPreviousPage(): void {\n if (disabled()) {\n return;\n }\n\n paginationState().goToPage(paginationState().page() - 1);\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n goToPreviousPage();\n }\n\n return {\n disabled,\n goToPreviousPage,\n } satisfies NgpPaginationPreviousState;\n },\n);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpPaginationPrevious } from './pagination-previous-state';\n\n/**\n * The `NgpPaginationPrevious` directive is used to create a pagination button that navigates to the previous page.\n */\n@Directive({\n selector: '[ngpPaginationPrevious]',\n exportAs: 'ngpPaginationPrevious',\n})\nexport class NgpPaginationPrevious {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationPreviousDisabled',\n transform: booleanAttribute,\n });\n\n protected readonly state = ngpPaginationPrevious({\n disabled: this.disabled,\n });\n\n /**\n * Go to the previous page.\n */\n goToPreviousPage() {\n return this.state.goToPreviousPage();\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input, numberAttribute, output } from '@angular/core';\nimport { ngpPagination, providePaginationState } from './pagination-state';\n\n/**\n * The `NgpPagination` directive is used to create a pagination control.\n */\n@Directive({\n selector: '[ngpPagination]',\n exportAs: 'ngpPagination',\n providers: [providePaginationState()],\n})\nexport class NgpPagination {\n /**\n * The currently selected page. Leave unset for uncontrolled usage, where the\n * internal state is seeded from `defaultPage`.\n */\n readonly page = input<number | undefined, NumberInput>(undefined, {\n alias: 'ngpPaginationPage',\n transform: numberAttribute,\n });\n\n /**\n * The default page for uncontrolled usage.\n * @default 1\n */\n readonly defaultPage = input<number, NumberInput>(1, {\n alias: 'ngpPaginationDefaultPage',\n transform: numberAttribute,\n });\n\n /**\n * The event that is fired when the page changes.\n */\n readonly pageChange = output<number>({\n alias: 'ngpPaginationPageChange',\n });\n\n /**\n * The total number of pages.\n */\n readonly pageCount = input<number, NumberInput>(0, {\n alias: 'ngpPaginationPageCount',\n transform: numberAttribute,\n });\n\n /**\n * Whether the pagination is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpPaginationDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The control state for the pagination.\n * @internal\n */\n protected readonly state = ngpPagination({\n page: this.page,\n defaultPage: this.defaultPage,\n pageCount: this.pageCount,\n disabled: this.disabled,\n onPageChange: (value: number) => this.pageChange.emit(value),\n });\n\n /**\n * Go to the specified page.\n * @param page The page to go to.\n */\n goToPage(page: number) {\n return this.state.goToPage(page);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -86,7 +86,11 @@ const [NgpPopoverTriggerStateToken, ngpPopoverTrigger, _injectPopoverTriggerStat
86
86
  const open = computed(() => overlay()?.isOpen() ?? false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
87
87
  // Host binding
88
88
  attrBinding(elementRef, 'aria-expanded', () => (open() ? 'true' : 'false'));
89
+ // the popover is a focus-trapped, dialog-like overlay, so advertise the popup type
90
+ attrBinding(elementRef, 'aria-haspopup', 'dialog');
89
91
  attrBinding(elementRef, 'aria-describedby', () => overlay()?.ariaDescribedBy());
92
+ // reference the controlled popover by id while it is open (it does not exist when closed)
93
+ attrBinding(elementRef, 'aria-controls', () => (open() ? (overlay()?.id() ?? null) : null));
90
94
  dataBinding(elementRef, 'data-open', open);
91
95
  dataBinding(elementRef, 'data-placement', placement);
92
96
  dataBinding(elementRef, 'data-disabled', disabled);